RogueLife/src/comp/fighter.c

34 lines
781 B
C
Raw Normal View History

#include "comp/entity.h"
#include "comp/fighter.h"
#include "comp/visible.h"
#include "enemies.h"
#include <stdlib.h>
int fighter_damage(entity_t *e, int base_damage)
{
fighter_t *f = getcomp(e, fighter);
if(f->HP == 0) return 0;
base_damage -= f->DEF;
if(base_damage <= 0) return 0;
int variation = (base_damage >= 4) ? (rand() % (base_damage / 4)) : 0;
int damage = (base_damage * 7) / 8 + variation;
if(f->HP < damage) f->HP = 0;
else f->HP -= damage;
if(f->enemy_data != NULL) {
if(f->HP == 0)
visible_set_anim(e, f->enemy_data->anim_death, 4);
else
visible_set_anim(e, f->enemy_data->anim_hit, 3);
}
else {
visible_set_anim(e, &anims_player_Hit, 3);
}
return damage;
}