aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/client/clientenvironment.cpp7
-rw-r--r--src/client/content_cao.cpp3
-rw-r--r--src/client/localplayer.h1
-rw-r--r--src/script/lua_api/l_localplayer.cpp3
-rw-r--r--src/script/lua_api/l_object.cpp3
-rw-r--r--src/server/player_sao.cpp2
-rw-r--r--src/server/player_sao.h1
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;
};