diff options
-rw-r--r-- | src/client/clientenvironment.cpp | 7 | ||||
-rw-r--r-- | src/client/content_cao.cpp | 3 | ||||
-rw-r--r-- | src/client/localplayer.h | 1 | ||||
-rw-r--r-- | src/script/lua_api/l_localplayer.cpp | 3 | ||||
-rw-r--r-- | src/script/lua_api/l_object.cpp | 3 | ||||
-rw-r--r-- | src/server/player_sao.cpp | 2 | ||||
-rw-r--r-- | src/server/player_sao.h | 1 |
7 files changed, 19 insertions, 1 deletions
diff --git a/src/client/clientenvironment.cpp b/src/client/clientenvironment.cpp index 448af36c6..6c7ea6578 100644 --- a/src/client/clientenvironment.cpp +++ b/src/client/clientenvironment.cpp @@ -197,6 +197,8 @@ void ClientEnvironment::step(float dtime) if (!free_move) { // Gravity v3f speed = lplayer->getSpeed(); + v3f old_speed = speed; + if (!is_climbing && !lplayer->in_liquid) speed.Y -= lplayer->movement_gravity * lplayer->physics_override_gravity * dtime_part * 2.0f; @@ -233,7 +235,10 @@ void ClientEnvironment::step(float dtime) speed += d; } - lplayer->setSpeed(speed); + lplayer->setSpeed(lplayer->physics_override_new_gravity + ? (speed + old_speed) / 2.0f + : speed + ); } /* diff --git a/src/client/content_cao.cpp b/src/client/content_cao.cpp index a80a3ce4e..46007a622 100644 --- a/src/client/content_cao.cpp +++ b/src/client/content_cao.cpp @@ -1771,6 +1771,8 @@ void GenericCAO::processMessage(const std::string &data) bool sneak = !readU8(is); bool sneak_glitch = !readU8(is); bool new_move = !readU8(is); + // this one is off by default + bool new_gravity = readU8(is); if(m_is_local_player) @@ -1782,6 +1784,7 @@ void GenericCAO::processMessage(const std::string &data) player->physics_override_sneak = sneak; player->physics_override_sneak_glitch = sneak_glitch; player->physics_override_new_move = new_move; + player->physics_override_new_gravity = new_gravity; } } else if (cmd == AO_CMD_SET_ANIMATION) { // TODO: change frames send as v2s32 value diff --git a/src/client/localplayer.h b/src/client/localplayer.h index 13b35ae4e..04b78298b 100644 --- a/src/client/localplayer.h +++ b/src/client/localplayer.h @@ -68,6 +68,7 @@ public: bool physics_override_sneak_glitch = false; // Temporary option for old move code bool physics_override_new_move = true; + bool physics_override_new_gravity = false; void move(f32 dtime, Environment *env, f32 pos_max_d); void move(f32 dtime, Environment *env, f32 pos_max_d, diff --git a/src/script/lua_api/l_localplayer.cpp b/src/script/lua_api/l_localplayer.cpp index bdbe98cb0..703b13d65 100644 --- a/src/script/lua_api/l_localplayer.cpp +++ b/src/script/lua_api/l_localplayer.cpp @@ -176,6 +176,9 @@ int LuaLocalPlayer::l_get_physics_override(lua_State *L) lua_pushboolean(L, player->physics_override_new_move); lua_setfield(L, -2, "new_move"); + lua_pushboolean(L, player->physics_override_new_gravity); + lua_setfield(L, -2, "new_gravity"); + return 1; } diff --git a/src/script/lua_api/l_object.cpp b/src/script/lua_api/l_object.cpp index 072b13d80..3cb5882f0 100644 --- a/src/script/lua_api/l_object.cpp +++ b/src/script/lua_api/l_object.cpp @@ -1434,6 +1434,7 @@ int ObjectRef::l_set_physics_override(lua_State *L) modified |= getboolfield(L, 2, "sneak", playersao->m_physics_override_sneak); modified |= getboolfield(L, 2, "sneak_glitch", playersao->m_physics_override_sneak_glitch); modified |= getboolfield(L, 2, "new_move", playersao->m_physics_override_new_move); + modified |= getboolfield(L, 2, "new_gravity", playersao->m_physics_override_new_gravity); if (modified) playersao->m_physics_override_sent = false; } else { @@ -1479,6 +1480,8 @@ int ObjectRef::l_get_physics_override(lua_State *L) lua_setfield(L, -2, "sneak_glitch"); lua_pushboolean(L, playersao->m_physics_override_new_move); lua_setfield(L, -2, "new_move"); + lua_pushboolean(L, playersao->m_physics_override_new_gravity); + lua_setfield(L, -2, "new_gravity"); return 1; } diff --git a/src/server/player_sao.cpp b/src/server/player_sao.cpp index 83e17f830..174bef1b3 100644 --- a/src/server/player_sao.cpp +++ b/src/server/player_sao.cpp @@ -316,6 +316,8 @@ std::string PlayerSAO::generateUpdatePhysicsOverrideCommand() const writeU8(os, !m_physics_override_sneak); writeU8(os, !m_physics_override_sneak_glitch); writeU8(os, !m_physics_override_new_move); + // this one is off by default + writeU8(os, m_physics_override_new_gravity); return os.str(); } diff --git a/src/server/player_sao.h b/src/server/player_sao.h index 47fe85413..66a0fb275 100644 --- a/src/server/player_sao.h +++ b/src/server/player_sao.h @@ -227,6 +227,7 @@ public: bool m_physics_override_sneak = true; bool m_physics_override_sneak_glitch = false; bool m_physics_override_new_move = true; + bool m_physics_override_new_gravity = false; bool m_physics_override_sent = false; }; |