• Hey Guest! Ever feel like entering a Game Jam, but the time limit is always too much pressure? We get it... You lead a hectic life and dedicating 3 whole days to make a game just doesn't work for you! So, why not enter the GMC SLOW JAM? Take your time! Kick back and make your game over 4 months! Interested? Then just click here!

GML Big help with slopes, skate physics

Schtipadoo

Member
help.jpg

the ones not tagged with optional i can do so myself
i would apprecieate all help of any kinds

i wanna make a game about skating, the style of movement is gonna be similar to the 2d sonic games


heres my character code

Code:
///create event

//visual variables
draw_xscale = 1;
draw_yscale = 1;
img_speed = 0.25;
img_angle = 0;

//???
sprite_bbox_top = sprite_get_bbox_top(mask_index) - sprite_get_yoffset(mask_index);
sprite_bbox_bottom = sprite_get_bbox_bottom(mask_index) - sprite_get_yoffset(mask_index);
sprite_bbox_right = sprite_get_bbox_right(mask_index) - sprite_get_xoffset(mask_index);
sprite_bbox_left = sprite_get_bbox_left(mask_index) - sprite_get_xoffset(mask_index);

//normal variables
grav = 0.25;
spd = 7;
jspd = 7;
hspd = 0;
hspd_dir = 1;
vspd = 0
fric = 0.25;
GML:
/// step event

left_key = keyboard_check(ord("A"));
right_key = keyboard_check(ord("D"));
down_key = keyboard_check(ord("S"));
up_key = keyboard_check(ord("W"));
jump_key = keyboard_check_pressed(vk_space);
jump_key_held = keyboard_check(vk_space);


//rules
floored = place_meeting (x,y+1,wall) || place_meeting(x,y+1,slopes);
moving = (left_key || right_key);
movement = hspd != 0;
falling = vspd > 0;
image_yscale = 1;


//jump
if jump_key && floored{
vspd = -jspd;
}else{
//gravity
if (!floored) && vspd >= 0 {
  vspd += grav;
}
if (!jump_key_held && vspd < -3) {
    vspd = -3;
    }
}

if floored{
//right
if right_key  {
if (hspd < spd) {
    hspd += fric;
  } else {
    hspd -= fric;
  }
}

//left
if left_key  {
  if (hspd > -spd) {
    hspd -= fric;
  } else {
    hspd += fric;
  }
}
}

//check for no movement
if !moving && floored || (left_key && right_key)  {    
       if (hspd != 0) {
       if (hspd < 0) {  
           hspd += fric;
      }else{
           hspd -= fric
    }
  }
}


//Horizontal collisions
if place_meeting(x+hspd, y, wall) {
while !place_meeting (x+sign(hspd), y, wall) {
  x+=sign(hspd)
}
hspd = 0;
}

//move x
x+=hspd

//move y
y+=vspd

  //snap vertically
if place_meeting(x,y,wall) {
    var walll = instance_place(x,y ,wall );
    if vspd > 0 { //top
        y = (walll.bbox_top-1)-sprite_bbox_bottom;
    } else if vspd < 0 { //bottom
        y = (walll.bbox_bottom+1)-sprite_bbox_top;
    }
    vspd = 0;
}
 
Last edited:

Schtipadoo

Member
Im going to rewrite my character code and if i manage to figure out by myself or some other help ill post updates here
 

Schtipadoo

Member
i gave up on the idea already, just going into the "if someday i bother myself" list of projects

although i would still like to know how for maybe a future comeback
 
Top