summaryrefslogtreecommitdiff
path: root/character.c
diff options
context:
space:
mode:
Diffstat (limited to 'character.c')
-rw-r--r--character.c58
1 files changed, 58 insertions, 0 deletions
diff --git a/character.c b/character.c
new file mode 100644
index 0000000..4a3a260
--- /dev/null
+++ b/character.c
@@ -0,0 +1,58 @@
+#include <SDL/SDL.h>
+#include "players.h"
+#include "blits.h"
+
+static void incr_hp(SURFACES *surfaces, POSITIONS *positions, struct character_t *target, int incr)
+{
+ SDL_Color color;
+
+ target->hp += incr;
+
+ if (target->hp <= 0) {
+ target->hp = 0;
+ target->alive = false;
+ } else if (target->hp > target->max_hp) {
+ target->hp = target->max_hp;
+ }
+
+ color = (incr < 0) ? (SDL_Color){0xe0, 0x00, 0x00, 0x00} : (SDL_Color){0x00, 0xe0, 0x00, 0x00};
+
+ display_incr(surfaces, positions, target, (incr >= 0) ? incr : -incr, color);
+}
+
+static void incr_mp(SURFACES *surfaces, POSITIONS *positions, struct character_t *target, int incr)
+{
+ SDL_Color color;
+
+ target->hp += incr;
+
+ if (target->mp <= 0) {
+ target->mp = 0;
+ } else if (target->mp > target->max_mp) {
+ target->mp = target->max_mp;
+ }
+
+ color = (incr < 0) ? (SDL_Color){0xe0, 0x00, 0x00, 0x00} : (SDL_Color){0x00, 0xe0, 0x00, 0x00};
+
+ display_incr(surfaces, positions, target, (incr >= 0) ? incr : -incr, color);
+}
+
+void damage_target_hp(SURFACES *surfaces, POSITIONS *positions, struct character_t *target, int damages)
+{
+ incr_hp(surfaces, positions, target, -damages);
+}
+
+void cure_target_hp(SURFACES *surfaces, POSITIONS *positions, struct character_t *target, int cure)
+{
+ incr_hp(surfaces, positions, target, cure);
+}
+
+void damage_target_mp(SURFACES *surfaces, POSITIONS *positions, struct character_t *target, int damages)
+{
+ incr_mp(surfaces, positions, target, -damages);
+}
+
+void cure_target_mp(SURFACES *surfaces, POSITIONS *positions, struct character_t *target, int cure)
+{
+ incr_mp(surfaces, positions, target, cure);
+}