platformer

// Platformer engine code for Game Maker Studio

//also create Wall object with name “oWall”
//children objects to “oWall” can be slopes whose Sprites with exact collision precision

//CREATE EVENT (of character)

grv = 0.2; //gravity
hsp = 0; //current horizontal speed
vsp = 0; //current vertical speed
hspWalk = 4; //walk speed
vspJump = -5; //jump speed
canJump = 0; //above zero while we are able to jump
onGround = false; //are we on the ground?

//STEP EVENT (of character)

//Get inputs
var _keyRight = keyboard_check(vk_right);
var _keyLeft = keyboard_check(vk_left);
var _keyJump = keyboard_check_pressed(vk_space);

slopeOn = keyboard_check(vk_control);

//Work out where to move horizontally
hsp = (_keyRight – _keyLeft) * hspWalk;

//Work out where to move vertically
vsp = vsp + grv;

//Work out if we should jump
if (canJump– > 0) && (_keyJump)
{
vsp = vspJump;
canJump = 0;
}

//Are we on the ground?
onGround = place_meeting(x,y+1,oWall);

//Horizontal move & collide
var _hCol = move_and_collide(hsp, 0, oWall, abs(hsp))

//Walk down slope
if (onGround) && (place_meeting(x,y + abs(hsp) + 1 ,oWall)) && (vsp >= 0)
{
vsp += abs(hsp) + 1;
}

//Vertical move & collide
var _vCol = move_and_collide(0, vsp, oWall, abs(vsp)+1 , hsp, vsp, hsp, vsp)
if (array_length(_vCol) > 0)
{
if (vsp > 0) canJump = 10;
vsp = 0;
}