aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpecksin <78765996+pecksin@users.noreply.github.com>2022-02-16 17:06:00 -0500
committerGitHub <noreply@github.com>2022-02-16 17:06:00 -0500
commit5d0b18a0d0bd02a9b77b8948d6887bb661a385da (patch)
treea510f83ee2e0cc78687a9009d127505a41bc2d62
parent258ae994915e1b9fc5b3a72627886f2ce4334902 (diff)
downloadminetest-5d0b18a0d0bd02a9b77b8948d6887bb661a385da.tar.gz
minetest-5d0b18a0d0bd02a9b77b8948d6887bb661a385da.tar.bz2
minetest-5d0b18a0d0bd02a9b77b8948d6887bb661a385da.zip
Use absolute value for bouncy in collision (#11969)
* use abs(bouncy) in collision * test case for negative bouncy * send abs(bouncy) to old clients
-rw-r--r--games/devtest/mods/testnodes/properties.lua4
-rw-r--r--src/collision.cpp3
-rw-r--r--src/nodedef.cpp7
3 files changed, 10 insertions, 4 deletions
diff --git a/games/devtest/mods/testnodes/properties.lua b/games/devtest/mods/testnodes/properties.lua
index 51f703d7c..89facf71c 100644
--- a/games/devtest/mods/testnodes/properties.lua
+++ b/games/devtest/mods/testnodes/properties.lua
@@ -252,9 +252,9 @@ for i=-100, 100, 25 do
end
-- Bouncy nodes (various bounce levels)
-for i=20, 180, 20 do
+for i=-140, 180, 20 do
local val = math.floor(((i-20)/200)*255)
- minetest.register_node("testnodes:bouncy"..i, {
+ minetest.register_node(("testnodes:bouncy"..i):gsub("-","NEG"), {
description = S("Bouncy Node (@1%)", i),
groups = {bouncy=i, dig_immediate=3},
diff --git a/src/collision.cpp b/src/collision.cpp
index d85a56884..ccc3a058d 100644
--- a/src/collision.cpp
+++ b/src/collision.cpp
@@ -303,7 +303,8 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef,
if (!f.walkable)
continue;
- int n_bouncy_value = itemgroup_get(f.groups, "bouncy");
+ // Negative bouncy may have a meaning, but we need +value here.
+ int n_bouncy_value = abs(itemgroup_get(f.groups, "bouncy"));
int neighbors = 0;
if (f.drawtype == NDT_NODEBOX &&
diff --git a/src/nodedef.cpp b/src/nodedef.cpp
index 8a5542837..fe0cc4bb0 100644
--- a/src/nodedef.cpp
+++ b/src/nodedef.cpp
@@ -452,7 +452,12 @@ void ContentFeatures::serialize(std::ostream &os, u16 protocol_version) const
writeU16(os, groups.size());
for (const auto &group : groups) {
os << serializeString16(group.first);
- writeS16(os, group.second);
+ if (protocol_version < 41 && group.first.compare("bouncy") == 0) {
+ // Old clients may choke on negative bouncy value
+ writeS16(os, abs(group.second));
+ } else {
+ writeS16(os, group.second);
+ }
}
writeU8(os, param_type);
writeU8(os, param_type_2);