diff --git a/pkg/base/obj_player.lua b/pkg/base/obj_player.lua index 288f391..9792cac 100644 --- a/pkg/base/obj_player.lua +++ b/pkg/base/obj_player.lua @@ -834,7 +834,8 @@ function new_player(settings) this.vz = this.vz * alt_a if this.mode == PLM_NORMAL then - this.vy = (this.vy + 2.0*MODE_GRAVITY*sec_delta) * alt_a + --this.vy = (this.vy + 2.0*MODE_GRAVITY*sec_delta) * alt_a + this.vy = (this.vy + 2.0*MODE_GRAVITY*sec_delta) else this.vy = (this.vy + mvy*mmul) * alt_a end @@ -1135,6 +1136,15 @@ function new_player(settings) local tx1,ty1,tz1 ox, oy, oz = this.x, this.y, this.z nx, ny, nz = this.x + this.vx*sec_delta, this.y + this.vy*sec_delta, this.z + this.vz*sec_delta + if this.mode == PLM_NORMAL then + -- mostly correct gravity + -- FIXME: physics is still a bit of a hack + -- FIXME: need to incorporate air friction properly + local alt_a = math.exp(-sec_delta*mvchange*MODE_PSPEED_CONV_BRAKES) + local accel_grav = 2.0*MODE_GRAVITY + ny = ny + accel_grav/2.0*sec_delta*sec_delta + end + local wasgrounded = this.grounded tx1, ty1, tz1 = this.calc_motion_trace(sec_current, sec_delta, ox, oy, oz, nx, ny, nz) this.x, this.y, this.z = tx1, ty1, tz1