A small script I threw together to show how you can create a movement system with various speeds(without skipping over walls), and more importantly: various sizes. This means you can shrink your player down to 1 tile and squeeze through cracks, or apply a better wall detection to larger players. What it is lacking is detail to anything else but those two things. It initially started as an experiment with onwall2 for a solid wall detection(instead of lots of onwall()'s), and I decided to add size support later. Lacks important things like sliding around corners, but that's not what this is focused on.
PHP Code:
function onCreated () { clientr . movementSpeed = .5 ; clientr . movementSize = 2 ; } //#CLIENTSIDE function onCreated () { showstats ( 1024 ); disabledefmovement (); clientr . movementSpeed = .5 ; clientr . movementSize = 2 ; player . x = int ( player . x )+ .5 ; player . y = int ( player . y ); setTimer ( 0.05 ); } function onTimeout () { temp . speed = clientr . movementSpeed ; temp . size = clientr . movementSize ; player . zoom = size / 2 ; for ( temp . k = 0 ; k < 4 ; k ++) { if ( keydown ( k )) { player . dir = k ; temp . cx = ( player . x + .5 )-(( size - 2 )/ 2 ); temp . cy = ( player . y + 1 )-(( size - 2 )/ 2 ); temp . horizontalwall = onwall2 ( cx + vecx ( k )* speed , cy , size - 1 / 16 , size - 1 / 16 ); temp . verticalwall = onwall2 ( cx , cy + vecy ( k )* speed , size - 1 / 16 , size - 1 / 16 ); if ( horizontalwall == 0 ) player . x += vecx ( k )* speed ; else { for ( i = 0 ; i <( speed > client . size ? speed : size ); i += 1 / 16 ) { if ( onwall2 ( cx + vecx ( k )* i , cy , size - 1 / 16 , size - 1 / 16 )) { player . x += vecx ( k )* i ; player . x = int ( playerx +(( size % 2 == 1 )* .5 ))+(( size % 2 == 0 )* .5 ); break; } } } if ( verticalwall == 0 ) player . y += vecy ( k )* speed ; else { for ( i = 0 ; i <( speed > size ? speed : size ); i += 1 / 16 ) { if ( onwall2 ( cx , cy + vecy ( k )* i , size - 1 / 16 , size - 1 / 16 )) { player . y += vecy ( k )* i ; player . y = int ( playery +(( size % 2 == 0 )* .5 ))+(( size % 2 == 1 )* .5 ); break; } } } } } showpoly 200 ,{ ( player . x + .5 )-(( size - 2 )/ 2 ),( player . y + 1 )-(( size - 2 )/ 2 ), ( player . x + .5 )-(( size - 2 )/ 2 )+ size ,( player . y + 1 )-(( size - 2 )/ 2 ), ( player . x + .5 )-(( size - 2 )/ 2 )+ size ,( player . y + 1 )-(( size - 2 )/ 2 )+ size , ( player . x + .5 )-(( size - 2 )/ 2 ),( player . y + 1 )-(( size - 2 )/ 2 )+ size , ( player . x + .5 )-(( size - 2 )/ 2 ),( player . y + 1 )-(( size - 2 )/ 2 ), ( player . x + .5 )-(( size - 2 )/ 2 ),( player . y + 1 )-(( size - 2 )/ 2 )+( 1 / 16 ), ( player . x + .5 )-(( size - 2 )/ 2 )+ size -( 1 / 16 ),( player . y + 1 )-(( size - 2 )/ 2 )+( 1 / 16 ), ( player . x + .5 )-(( size - 2 )/ 2 )+ size -( 1 / 16 ),( player . y + 1 )-(( size - 2 )/ 2 )+ size -( 1 / 16 ), ( player . x + .5 )-(( size - 2 )/ 2 )+( 1 / 16 ),( player . y + 1 )-(( size - 2 )/ 2 )+ size -( 1 / 16 ), ( player . x + .5 )-(( size - 2 )/ 2 )+( 1 / 16 ),( player . y + 1 )-(( size - 2 )/ 2 )+( 1 / 16 ) }; setTimer ( 0.05 ); } function onPlayerChats () { if ( player . chat . starts ( "size" )) { temp . newsize = player . chat . substring ( 5 ); if ( newsize >= 1 && newsize <= 20 ) clientr . movementSize = newsize ; else if ( newsize > 20 ) player . chat = "Seriously, are you nuts?" ; else player . chat = "Not a compatible size!" ; } else if ( player . chat . starts ( "speed" )) { temp . newspeed = player . chat . substring ( 6 ); if ( newspeed > 0 ) clientr . movementSpeed = newspeed ; } }
Video as soon as I can get it uploaded without my internet timing out.