// 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;
}