summaryrefslogtreecommitdiff
path: root/src/tool.cpp
diff options
context:
space:
mode:
authorWuzzy <wuzzy2@mail.ru>2022-01-06 20:16:35 +0000
committerGitHub <noreply@github.com>2022-01-06 21:16:35 +0100
commitb81948a14c138517f6a227dac5b71f0b2facb33c (patch)
treeffa09a47f4d5ad118b165d889baff5f122e2ec2f /src/tool.cpp
parent85da2e284b8091062e1b53ad5a703aae6cbc3a3c (diff)
downloadminetest-b81948a14c138517f6a227dac5b71f0b2facb33c.tar.gz
minetest-b81948a14c138517f6a227dac5b71f0b2facb33c.tar.bz2
minetest-b81948a14c138517f6a227dac5b71f0b2facb33c.zip
Fix damage wraparound if very high damage (#11872)
Diffstat (limited to 'src/tool.cpp')
-rw-r--r--src/tool.cpp4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/tool.cpp b/src/tool.cpp
index b0749286d..075c6b3c5 100644
--- a/src/tool.cpp
+++ b/src/tool.cpp
@@ -306,7 +306,7 @@ HitParams getHitParams(const ItemGroupList &armor_groups,
const ToolCapabilities *tp, float time_from_last_punch,
u16 initial_wear)
{
- s16 damage = 0;
+ s32 damage = 0;
float result_wear = 0.0f;
float punch_interval_multiplier =
rangelim(time_from_last_punch / tp->full_punch_interval, 0.0f, 1.0f);
@@ -320,6 +320,8 @@ HitParams getHitParams(const ItemGroupList &armor_groups,
result_wear = calculateResultWear(tp->punch_attack_uses, initial_wear);
result_wear *= punch_interval_multiplier;
}
+ // Keep damage in sane bounds for simplicity
+ damage = rangelim(damage, -U16_MAX, U16_MAX);
u32 wear_i = (u32) result_wear;
return {damage, wear_i};