aboutsummaryrefslogtreecommitdiff
path: root/backend
diff options
context:
space:
mode:
authorLoek Le Blansch <loek@pipeframe.xyz>2024-11-02 23:11:42 +0100
committerLoek Le Blansch <loek@pipeframe.xyz>2024-11-02 23:11:42 +0100
commited78baff64fe45479ca6c480d985ce0f9c0c9515 (patch)
treeb3224d0d01dc0c563c8e49751c628994b66f58b6 /backend
parent07b8a5b0baed8c7b23681c99f25f297045945bfc (diff)
more bug fixes
Diffstat (limited to 'backend')
-rw-r--r--backend/ArmorObject.cpp4
-rw-r--r--backend/ArmorObject.h6
-rw-r--r--backend/ObjectFactory.h2
-rw-r--r--backend/Player.cpp8
4 files changed, 12 insertions, 8 deletions
diff --git a/backend/ArmorObject.cpp b/backend/ArmorObject.cpp
index 3e0a4e2..a9fd51f 100644
--- a/backend/ArmorObject.cpp
+++ b/backend/ArmorObject.cpp
@@ -1,9 +1,9 @@
#include "ArmorObject.h"
-void ArmorObject::set_protection(int protection) {
+void ArmorObject::set_protection(unsigned int protection) {
this->protection = protection;
}
-int ArmorObject::get_protection() const {
+unsigned int ArmorObject::get_protection() const {
return this->protection;
}
diff --git a/backend/ArmorObject.h b/backend/ArmorObject.h
index 068594e..74af728 100644
--- a/backend/ArmorObject.h
+++ b/backend/ArmorObject.h
@@ -6,12 +6,12 @@ class ArmorObject : public Object {
using Object::Object;
public:
- void set_protection(int protection);
- int get_protection() const;
+ void set_protection(unsigned int protection);
+ unsigned int get_protection() const;
virtual String get_displayname() const;
private:
- int protection = 0;
+ unsigned int protection = 0;
};
diff --git a/backend/ObjectFactory.h b/backend/ObjectFactory.h
index 735ac1f..1578198 100644
--- a/backend/ObjectFactory.h
+++ b/backend/ObjectFactory.h
@@ -9,7 +9,7 @@ struct UniversalObject {
String description;
String type;
Range<int> value;
- int protection;
+ unsigned int protection;
};
class ObjectFactory {
diff --git a/backend/Player.cpp b/backend/Player.cpp
index 6c2cf6b..66197fa 100644
--- a/backend/Player.cpp
+++ b/backend/Player.cpp
@@ -29,9 +29,13 @@ void Player::take_damage(unsigned int dmg) {
if (this->cheating) return;
if (this->is_dead()) return;
- dmg = min(dmg, this->health_points);
+ // reduce damage by armor's protection value (if player is wearing any)
if (this->armor != nullptr)
- dmg = max(0u, dmg - this->armor->get_protection());
+ dmg -= min(dmg, this->armor->get_protection());
+
+ // make sure health_points doesn't go below 0
+ dmg = min(dmg, this->health_points);
+
this->health_points -= dmg;
auto & hp = this->health_points;