View difference between Paste ID: QdaKrBEH and bzEK3sre
SHOW: | | - or go back to the newest paste.
1
/* Creator (and original version at): https://pastebin.com/u/ShaunJS */
2
3
//decimal fractions of hsp are stored in hsp_f
4
//every frame this fraction is added back in and the new fraction removed again
5
//this moves us in whole integers each frame that are still representative of decimal movement
6
//for example, at a hsp of 0.1 you would move 1 pixel every 10 frames.
7
//this resolves any issues of not detecting a collision at a fractional target (ie: no collision at 3.8, when there is at 4.0)
8
//which sometimes caused the player after rounding, to be drawn overlapping walls by 1 pixel.
9
10
hsp_final = hsp + hsp_f;
11
hsp_f = hsp_final - floor(abs(hsp_final))*sign(hsp_final);
12
hsp_final -= hsp_f;
13
14
vsp_final = vsp + vsp_f;
15
vsp_f = vsp_final - floor(abs(vsp_final))*sign(vsp_final);
16
vsp_final -= vsp_f;
17
18
//same old place_meeting collision code.
19
if (place_meeting(x+hsp_final,y,par_collide))
20
{
21
    var inc = sign(hsp_final);
22
    while (!place_meeting(x+inc,y,par_collide)) x+= inc;
23
    hsp_final = 0;
24
    hsp = 0;
25
}
26
x+=hsp_final;
27
28
if (place_meeting(x,y+vsp_final,par_collide))
29
{
30
    var inc = sign(vsp_final);
31
    while (!place_meeting(x,y+inc,par_collide)) y+= inc;
32
    vsp_final = 0;
33
    vsp = 0;
34
}
35
y+=vsp_final;