From e32a16b7007551f5445cd3734943011a71921d2f Mon Sep 17 00:00:00 2001 From: Abdulmujeeb Raji Date: Fri, 30 Aug 2024 12:02:39 +0100 Subject: [PATCH] Armour system --- armour.c | 18 ++++++++++++++++++ assets/starterarmour.png | Bin 0 -> 188 bytes entity.c | 2 ++ entry_helpless.c | 6 ++++++ player.c | 1 + sprite.c | 1 + 6 files changed, 28 insertions(+) create mode 100644 armour.c create mode 100644 assets/starterarmour.png diff --git a/armour.c b/armour.c new file mode 100644 index 0000000..1dbb3fe --- /dev/null +++ b/armour.c @@ -0,0 +1,18 @@ +typedef enum Armour { + ARMOUR_none = 0, + ARMOUR_starter = 1, +} Armour; + +Sprite_ID armour_sprite_id(Armour armour) { + switch (armour) { + case ARMOUR_starter: return SPRITE_starterarmour; break; + default: return SPRITE_nil; + } +} + +float armour_damage_multiplier(Armour armour) { + switch (armour) { + case ARMOUR_starter: return 0.8; break; + default: return 1; + } +} diff --git a/assets/starterarmour.png b/assets/starterarmour.png new file mode 100644 index 0000000000000000000000000000000000000000..d209026e09546556f8fff83bc5c6ba921ba93a13 GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^>_9BY!3HAlZVLrcjKx9jP7LeL$-D$|$~;{hLnNjq zr!+K~cpv_6@NLcG=aP~VKyXp@f@p%rp&vdktR^rj+gZarmour); en->health = clamp(en->health - damage, 0, en->max_health); // todo add knockback } \ No newline at end of file diff --git a/entry_helpless.c b/entry_helpless.c index 8a1a701..6619e4f 100644 --- a/entry_helpless.c +++ b/entry_helpless.c @@ -1,5 +1,6 @@ #include "util.c" #include "sprite.c" +#include "armour.c" #include "entity.c" #include "gjk.c" #include "weapon.c" @@ -43,6 +44,7 @@ int entry(int argc, char **argv) { sprite_load(STR("assets/spider.png"), SPRITE_spider); sprite_load(STR("assets/startersword.png"), SPRITE_startersword); sprite_load(STR("assets/starterbow.png"), SPRITE_starterbow); + sprite_load(STR("assets/starterarmour.png"), SPRITE_starterarmour); sprite_load(STR("assets/arrow.png"), SPRITE_arrow); Gfx_Font* font = load_font_from_disk(STR("assets/m3x6.ttf"), get_heap_allocator()); @@ -222,6 +224,10 @@ int entry(int argc, char **argv) { xform = m4_translate(xform, v3(sprite->size.x * -0.5, sprite->size.y * -0.5, 0)); draw_image_xform(sprite->image, xform, sprite->size, COLOR_WHITE); + if (en->armour != ARMOUR_none) { + Sprite* armour_sprite = sprite_get(armour_sprite_id(en->armour)); + draw_image_xform(armour_sprite->image, xform, armour_sprite->size, COLOR_WHITE); + } } } diff --git a/player.c b/player.c index 1c6a91a..bd07d58 100644 --- a/player.c +++ b/player.c @@ -4,6 +4,7 @@ void player_setup(Entity* en) { en->is_animate = true; en->max_health = 100; en->health = en->max_health; + en->armour = ARMOUR_starter; } void player_process_input(Entity* player, Entity* player_weapon, float delta_time) { diff --git a/sprite.c b/sprite.c index 8ab48bf..0971dab 100644 --- a/sprite.c +++ b/sprite.c @@ -11,6 +11,7 @@ typedef enum Sprite_ID { SPRITE_tree, SPRITE_startersword, SPRITE_starterbow, + SPRITE_starterarmour, SPRITE_arrow, SPRITE_MAX, } Sprite_ID;