From ed78baff64fe45479ca6c480d985ce0f9c0c9515 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Sat, 2 Nov 2024 23:11:42 +0100 Subject: more bug fixes --- backend/ArmorObject.cpp | 4 ++-- backend/ArmorObject.h | 6 +++--- backend/ObjectFactory.h | 2 +- backend/Player.cpp | 8 ++++++-- 4 files changed, 12 insertions(+), 8 deletions(-) (limited to 'backend') 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 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; -- cgit v1.2.3