1
0
Fork 0
forked from NotAShelf/rogged

initial commit

Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: Ie3b66d17f6f660c9b9a719210bd86f9f6a6a6964
This commit is contained in:
raf 2026-03-17 23:34:37 +03:00
commit b381e2efbd
Signed by: NotAShelf
GPG key ID: 29D95B64378DB4BF
29 changed files with 1633 additions and 0 deletions

71
src/combat.c Normal file
View 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;
}