Skip to content

Commit 15be265

Browse files
committedDec 3, 2013
Add sneak and sneak_glitch to set_physics_override()
1 parent d9de9f2 commit 15be265

11 files changed

+53
-13
lines changed
 

‎doc/lua_api.txt

+2-1
Original file line numberDiff line numberDiff line change
@@ -1706,10 +1706,11 @@ Player-only: (no-op for other objects)
17061706
{jump=bool,right=bool,left=bool,LMB=bool,RMB=bool,sneak=bool,aux1=bool,down=bool,up=bool}
17071707
- get_player_control_bits(): returns integer with bit packed player pressed keys
17081708
bit nr/meaning: 0/up ,1/down ,2/left ,3/right ,4/jump ,5/aux1 ,6/sneak ,7/LMB ,8/RMB
1709-
- set_physics_override(speed, jump, gravity)
1709+
- set_physics_override(speed, jump, gravity, sneak, sneak_glitch)
17101710
modifies per-player walking speed, jump height, and gravity.
17111711
Values default to 1 and act as offsets to the physics settings
17121712
in minetest.conf. nil will keep the current setting.
1713+
sneak and sneak_glitch are booleans, default is true
17131714
- hud_add(hud definition): add a HUD element described by HUD def, returns ID number on success
17141715
- hud_remove(id): remove the HUD element of the specified id
17151716
- hud_change(id, stat, value): change a value of a previously added HUD element

‎src/content_cao.cpp

+6
Original file line numberDiff line numberDiff line change
@@ -1693,12 +1693,18 @@ class GenericCAO : public ClientActiveObject
16931693
float override_speed = readF1000(is);
16941694
float override_jump = readF1000(is);
16951695
float override_gravity = readF1000(is);
1696+
// these are sent inverted so we get true when the server sends nothing
1697+
bool sneak = !readU8(is);
1698+
bool sneak_glitch = !readU8(is);
1699+
16961700
if(m_is_local_player)
16971701
{
16981702
LocalPlayer *player = m_env->getLocalPlayer();
16991703
player->physics_override_speed = override_speed;
17001704
player->physics_override_jump = override_jump;
17011705
player->physics_override_gravity = override_gravity;
1706+
player->physics_override_sneak = sneak;
1707+
player->physics_override_sneak_glitch = sneak_glitch;
17021708
}
17031709
}
17041710
else if(cmd == GENERIC_CMD_SET_ANIMATION)

‎src/content_sao.cpp

+8-2
Original file line numberDiff line numberDiff line change
@@ -969,6 +969,8 @@ PlayerSAO::PlayerSAO(ServerEnvironment *env_, Player *player_, u16 peer_id_,
969969
m_physics_override_speed(1),
970970
m_physics_override_jump(1),
971971
m_physics_override_gravity(1),
972+
m_physics_override_sneak(true),
973+
m_physics_override_sneak_glitch(true),
972974
m_physics_override_sent(false)
973975
{
974976
assert(m_player);
@@ -1060,7 +1062,9 @@ std::string PlayerSAO::getClientInitializationData(u16 protocol_version)
10601062
os<<serializeLongString(gob_cmd_update_bone_position((*ii).first, (*ii).second.X, (*ii).second.Y)); // m_bone_position.size
10611063
}
10621064
os<<serializeLongString(gob_cmd_update_attachment(m_attachment_parent_id, m_attachment_bone, m_attachment_position, m_attachment_rotation)); // 4
1063-
os<<serializeLongString(gob_cmd_update_physics_override(m_physics_override_speed, m_physics_override_jump, m_physics_override_gravity)); // 5
1065+
os<<serializeLongString(gob_cmd_update_physics_override(m_physics_override_speed,
1066+
m_physics_override_jump, m_physics_override_gravity, m_physics_override_sneak,
1067+
m_physics_override_sneak_glitch)); // 5
10641068
}
10651069
else
10661070
{
@@ -1187,7 +1191,9 @@ void PlayerSAO::step(float dtime, bool send_recommended)
11871191

11881192
if(m_physics_override_sent == false){
11891193
m_physics_override_sent = true;
1190-
std::string str = gob_cmd_update_physics_override(m_physics_override_speed, m_physics_override_jump, m_physics_override_gravity);
1194+
std::string str = gob_cmd_update_physics_override(m_physics_override_speed,
1195+
m_physics_override_jump, m_physics_override_gravity,
1196+
m_physics_override_sneak, m_physics_override_sneak_glitch);
11911197
// create message and add to list
11921198
ActiveObjectMessage aom(getId(), true, str);
11931199
m_messages_out.push_back(aom);

‎src/content_sao.h

+2
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,8 @@ class PlayerSAO : public ServerActiveObject
330330
float m_physics_override_speed;
331331
float m_physics_override_jump;
332332
float m_physics_override_gravity;
333+
bool m_physics_override_sneak;
334+
bool m_physics_override_sneak_glitch;
333335
bool m_physics_override_sent;
334336
};
335337

‎src/genericobject.cpp

+5-1
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,8 @@ std::string gob_cmd_update_armor_groups(const ItemGroupList &armor_groups)
117117
return os.str();
118118
}
119119

120-
std::string gob_cmd_update_physics_override(float physics_override_speed, float physics_override_jump, float physics_override_gravity)
120+
std::string gob_cmd_update_physics_override(float physics_override_speed, float physics_override_jump,
121+
float physics_override_gravity, bool sneak, bool sneak_glitch)
121122
{
122123
std::ostringstream os(std::ios::binary);
123124
// command
@@ -126,6 +127,9 @@ std::string gob_cmd_update_physics_override(float physics_override_speed, float
126127
writeF1000(os, physics_override_speed);
127128
writeF1000(os, physics_override_jump);
128129
writeF1000(os, physics_override_gravity);
130+
// these are sent inverted so we get true when the server sends nothing
131+
writeU8(os, !sneak);
132+
writeU8(os, !sneak_glitch);
129133
return os.str();
130134
}
131135

‎src/genericobject.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@ std::string gob_cmd_punched(s16 damage, s16 result_hp);
6363
#include "itemgroup.h"
6464
std::string gob_cmd_update_armor_groups(const ItemGroupList &armor_groups);
6565

66-
std::string gob_cmd_update_physics_override(float physics_override_speed, float physics_override_jump, float physics_override_gravity);
66+
std::string gob_cmd_update_physics_override(float physics_override_speed,
67+
float physics_override_jump, float physics_override_gravity, bool sneak, bool sneak_glitch);
6768

6869
std::string gob_cmd_update_animation(v2f frames, float frame_speed, float frame_blend);
6970

‎src/localplayer.cpp

+9-3
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,9 @@ void LocalPlayer::move(f32 dtime, ClientEnvironment *env, f32 pos_max_d,
165165
If sneaking, keep in range from the last walked node and don't
166166
fall off from it
167167
*/
168-
if(control.sneak && m_sneak_node_exists && !(fly_allowed && g_settings->getBool("free_move")) && !in_liquid)
168+
if(control.sneak && m_sneak_node_exists &&
169+
!(fly_allowed && g_settings->getBool("free_move")) && !in_liquid &&
170+
physics_override_sneak)
169171
{
170172
f32 maxd = 0.5*BS + sneak_max;
171173
v3f lwn_f = intToFloat(m_sneak_node, BS);
@@ -225,7 +227,7 @@ void LocalPlayer::move(f32 dtime, ClientEnvironment *env, f32 pos_max_d,
225227
// node.
226228
m_need_to_get_new_sneak_node = true;
227229
}
228-
if(m_need_to_get_new_sneak_node)
230+
if(m_need_to_get_new_sneak_node && physics_override_sneak)
229231
{
230232
v3s16 pos_i_bottom = floatToInt(position - v3f(0,BS/2,0), BS);
231233
v2f player_p2df(position.X, position.Z);
@@ -264,6 +266,10 @@ void LocalPlayer::move(f32 dtime, ClientEnvironment *env, f32 pos_max_d,
264266
// And the node above it has to be nonwalkable
265267
if(nodemgr->get(map->getNode(p+v3s16(0,1,0))).walkable == true)
266268
continue;
269+
if (!physics_override_sneak_glitch) {
270+
if (nodemgr->get(map->getNode(p+v3s16(0,2,0))).walkable)
271+
continue;
272+
}
267273
}
268274
catch(InvalidPositionException &e)
269275
{
@@ -576,6 +582,6 @@ v3s16 LocalPlayer::getStandingNodePos()
576582
{
577583
if(m_sneak_node_exists)
578584
return m_sneak_node;
579-
return floatToInt(getPosition(), BS);
585+
return floatToInt(getPosition() - v3f(0, BS, 0), BS);
580586
}
581587

‎src/player.cpp

+5-3
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,11 @@ Player::Player(IGameDef *gamedef):
8585
movement_gravity = 9.81 * BS;
8686

8787
// Movement overrides are multipliers and must be 1 by default
88-
physics_override_speed = 1;
89-
physics_override_jump = 1;
90-
physics_override_gravity = 1;
88+
physics_override_speed = 1;
89+
physics_override_jump = 1;
90+
physics_override_gravity = 1;
91+
physics_override_sneak = true;
92+
physics_override_sneak_glitch = true;
9193

9294
hud_flags = HUD_FLAG_HOTBAR_VISIBLE | HUD_FLAG_HEALTHBAR_VISIBLE |
9395
HUD_FLAG_CROSSHAIR_VISIBLE | HUD_FLAG_WIELDITEM_VISIBLE |

‎src/player.h

+2
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,8 @@ class Player
266266
float physics_override_speed;
267267
float physics_override_jump;
268268
float physics_override_gravity;
269+
bool physics_override_sneak;
270+
bool physics_override_sneak_glitch;
269271

270272
u16 hp;
271273

‎src/script/lua_api/l_object.cpp

+10-1
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,8 @@ int ObjectRef::l_set_armor_groups(lua_State *L)
349349
return 0;
350350
}
351351

352-
// set_physics_override(self, physics_override_speed, physics_override_jump, physics_override_gravity)
352+
// set_physics_override(self, physics_override_speed, physics_override_jump,
353+
// physics_override_gravity, sneak, sneak_glitch)
353354
int ObjectRef::l_set_physics_override(lua_State *L)
354355
{
355356
ObjectRef *ref = checkobject(L, 1);
@@ -368,6 +369,14 @@ int ObjectRef::l_set_physics_override(lua_State *L)
368369
co->m_physics_override_gravity = lua_tonumber(L, 4);
369370
co->m_physics_override_sent = false;
370371
}
372+
if (lua_isboolean(L, 5)) {
373+
co->m_physics_override_sneak = lua_toboolean(L, 5);
374+
co->m_physics_override_sent = false;
375+
}
376+
if (lua_isboolean(L, 6)) {
377+
co->m_physics_override_sneak_glitch = lua_toboolean(L, 6);
378+
co->m_physics_override_sent = false;
379+
}
371380
return 0;
372381
}
373382

‎src/script/lua_api/l_object.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,8 @@ class ObjectRef : public ModApiBase {
101101
// set_armor_groups(self, groups)
102102
static int l_set_armor_groups(lua_State *L);
103103

104-
// set_physics_override(self, physics_override_speed, physics_override_jump, physics_override_gravity)
104+
// set_physics_override(self, physics_override_speed, physics_override_jump,
105+
// physics_override_gravity, sneak, sneak_glitch)
105106
static int l_set_physics_override(lua_State *L);
106107

107108
// set_animation(self, frame_range, frame_speed, frame_blend)

0 commit comments

Comments
 (0)
Please sign in to comment.