I am using GM wolfs tilebased collision. And it works fine if i just jump around. The problems happens when i go into a block the player gets shoot across the room. Any idea on why this happens? here are 2 gifs showing the problem:
GML:
key_right = keyboard_check_direct(vk_right);
key_left = keyboard_check_direct(vk_left);
jump = keyboard_check(vk_up);
key_down = keyboard_check(vk_down);
//jump = keyboard_check_pressed(ord("Z"));
//Calculate Movement
move = (key_right - key_left) * SPD_WALK
hsp = move;
vsp += SPD_GRAVITY
//Re apply fractions
hsp += hsp_fraction;
vsp += vsp_fraction;
//Store and Remove fractions
//Important: go into collision with whole integers ONLY!
hsp_fraction = hsp - (floor(abs(hsp)) * sign(hsp));
hsp -= hsp_fraction;
vsp_fraction = vsp - (floor(abs(vsp)) * sign(vsp));
vsp -= vsp_fraction;
x = x + hsp;
y = y + vsp;
#region COLLISION CODE
//tilemap collision
if (vsp > 0) && (!place_meeting(x,y+vsp,obj_block)){ //down movement
var t1 = tilemap_get_at_pixel(tilemap, bbox_left, bbox_bottom) & tile_index_mask;
var t2 = tilemap_get_at_pixel(tilemap, bbox_right, bbox_bottom) & tile_index_mask;
if( t1 != 0 || t2 != 0){
y = ((bbox_bottom & ~15) -1) - sprite_bbox_bottom
vsp = 0;
onGround = true;
jumps = jumpsmax;
}
} else { // up movement
var t1 = tilemap_get_at_pixel(tilemap, bbox_left, bbox_top) & tile_index_mask;
var t2 = tilemap_get_at_pixel(tilemap, bbox_right, bbox_top) & tile_index_mask;
if( t1 != 0 || t2 != 0){
y = ((bbox_top + 16) & ~15) - sprite_bbox_top
vsp = 0;
}
}
//horts collision
if (hsp > 0){ //right movement
var t1 = tilemap_get_at_pixel(tilemap, bbox_right, bbox_top) & tile_index_mask;
var t2 = tilemap_get_at_pixel(tilemap, bbox_right, bbox_bottom) & tile_index_mask;
if( t1 != 0 || t2 != 0){
x = ((bbox_right & ~15) - 1) - sprite_bbox_right
hsp = 0;
}
} else { // left movement
var t1 = tilemap_get_at_pixel(tilemap, bbox_left, bbox_top) & tile_index_mask;
var t2 = tilemap_get_at_pixel(tilemap, bbox_right, bbox_bottom) & tile_index_mask;
if( t1 != 0 || t2 != 0){
x = ((bbox_left + 16) & ~15) - sprite_bbox_left
hsp = 0;
}
}
#endregion
//Jump
if (jump) && (jumps > 0)
{
//sprite_index = sPlayer_Jump_Base;
//image_speed = 0.5;
//scr_screenShake(2,10);
//audio_play_sound(sound_Jump, 10, false);
//jumps -= 1
vsp = -SPD_JUMP;
onGround = false;
jumps -= 1
}
Last edited: