forked from NotAShelf/rogged
initial commit
Signed-off-by: NotAShelf <raf@notashelf.dev> Change-Id: Ie3b66d17f6f660c9b9a719210bd86f9f6a6a6964
This commit is contained in:
commit
b381e2efbd
29 changed files with 1633 additions and 0 deletions
71
src/combat.c
Normal file
71
src/combat.c
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
#include "combat.h"
|
||||
#include "common.h"
|
||||
#include <stddef.h>
|
||||
|
||||
// Track combat events for feedback
|
||||
typedef struct {
|
||||
const char *message;
|
||||
int damage;
|
||||
int is_player_damage;
|
||||
} CombatEvent;
|
||||
|
||||
static CombatEvent last_event = {NULL, 0, 0};
|
||||
|
||||
const char *combat_get_last_message(void) { return last_event.message; }
|
||||
|
||||
int combat_get_last_damage(void) { return last_event.damage; }
|
||||
|
||||
int combat_was_player_damage(void) { return last_event.is_player_damage; }
|
||||
|
||||
void combat_player_attack(Player *p, Enemy *e) {
|
||||
if (e == NULL || !e->alive)
|
||||
return;
|
||||
|
||||
// Deal damage
|
||||
int damage = p->attack;
|
||||
e->hp -= damage;
|
||||
|
||||
// Set combat event
|
||||
last_event.damage = damage;
|
||||
last_event.is_player_damage = 0;
|
||||
|
||||
// Check if enemy died
|
||||
if (e->hp <= 0) {
|
||||
e->hp = 0;
|
||||
e->alive = 0;
|
||||
last_event.message = "Enemy killed!";
|
||||
} else {
|
||||
last_event.message = "You hit the enemy";
|
||||
}
|
||||
}
|
||||
|
||||
void combat_enemy_attack(Enemy *e, Player *p) {
|
||||
if (e == NULL || !e->alive)
|
||||
return;
|
||||
if (p == NULL)
|
||||
return;
|
||||
|
||||
// Deal damage reduced by defense (minimum 1 damage)
|
||||
int damage = e->attack - p->defense;
|
||||
if (damage < 1)
|
||||
damage = 1;
|
||||
p->hp -= damage;
|
||||
|
||||
// Set combat event
|
||||
last_event.damage = damage;
|
||||
last_event.is_player_damage = 1;
|
||||
|
||||
// Check if player died
|
||||
if (p->hp <= 0) {
|
||||
p->hp = 0;
|
||||
last_event.message = "You died!";
|
||||
} else {
|
||||
last_event.message = "Enemy attacks!";
|
||||
}
|
||||
}
|
||||
|
||||
void combat_reset_event(void) {
|
||||
last_event.message = NULL;
|
||||
last_event.damage = 0;
|
||||
last_event.is_player_damage = 0;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue