diff options
Diffstat (limited to 'actions.c')
-rw-r--r-- | actions.c | 68 |
1 files changed, 55 insertions, 13 deletions
@@ -4,6 +4,7 @@ #include "constantes.h" +#include "target.h" #include "character.h" static int compute_damages(const struct character_t *src, const struct character_t *dest, @@ -64,40 +65,71 @@ static int compute_cure(const struct character_t *src, const struct character_t return rand() % (max - min + 1) + min; } -void attack(SURFACES *surfaces, POSITIONS *positions, struct character_t *src, struct character_t *dest, void *data) +static +void __attack(SURFACES *surfaces, POSITIONS *positions, struct character_t *src, struct character_t *dest) { int damages; - (void) data; - damages = compute_damages(src, dest, DAMAGES_PHYSICAL, ELEMENT_NONE); damage_target_hp(surfaces, positions, dest, damages); } -void cast_element(SURFACES *surfaces, POSITIONS *positions, struct character_t *src, struct character_t *dest, void *data) +void attack(SURFACES *surfaces, POSITIONS *positions, struct character_t *src, struct target_t *dest, void *data) +{ + (void) data; + + __attack(surfaces, positions, src, dest->chr); +} + +void cast_element(SURFACES *surfaces, POSITIONS *positions, struct character_t *src, struct target_t *dest, void *data) { int damages; enum element_t elem = *((enum element_t *)data); /* TODO remove the MP */ - damages = compute_damages(src, dest, DAMAGES_MAGICAL, elem); - damage_target_hp(surfaces, positions, dest, damages); + if (dest->is_chr) { + damages = compute_damages(src, dest->chr, DAMAGES_MAGICAL, elem); + damage_target_hp(surfaces, positions, dest->chr, damages); + } else { + for (int i = 0; i < dest->team->chr_cnt; ++i) { + struct character_t *target = &dest->team->chrs[i]; + + if (!target->alive) + continue; + + damages = compute_damages(src, target, DAMAGES_MAGICAL, elem); + damage_target_hp(surfaces, positions, target, damages / 3); + } + } } -void cast_cure(SURFACES *surfaces, POSITIONS *positions, struct character_t *src, struct character_t *dest, void *data) +void cast_cure(SURFACES *surfaces, POSITIONS *positions, struct character_t *src, struct target_t *dest, void *data) { int cure; (void) data; - cure = compute_cure(src, dest); - cure_target_hp(surfaces, positions, dest, cure); + if (dest->is_chr) { + cure = compute_cure(src, dest->chr); + cure_target_hp(surfaces, positions, dest->chr, cure); + } else { + for (int i = 0; i < dest->team->chr_cnt; ++i) { + struct character_t *target = &dest->team->chrs[i]; + + if (!target->alive) + continue; + + cure = compute_cure(src, target); + cure_target_hp(surfaces, positions, target, cure / 3); + } + } } -void use_potion(SURFACES *surfaces, POSITIONS *positions, struct character_t *src, struct character_t *dest, void *data) + +static +void __use_potion(SURFACES *surfaces, POSITIONS *positions, struct character_t *src, struct character_t *dest, int type) { - int type = *((int *)data); int cure; switch (type) { @@ -116,9 +148,14 @@ void use_potion(SURFACES *surfaces, POSITIONS *positions, struct character_t *sr cure_target_hp(surfaces, positions, dest, cure); } -void use_ether(SURFACES *surfaces, POSITIONS *positions, struct character_t *src, struct character_t *dest, void *data) +void use_potion(SURFACES *surfaces, POSITIONS *positions, struct character_t *src, struct target_t *dest, void *data) +{ + __use_potion(surfaces, positions, src, dest->chr, *((int *)data)); +} + +static +void __use_ether(SURFACES *surfaces, POSITIONS *positions, struct character_t *src, struct character_t *dest, int type) { - int type = *((int *)data); int cure; switch (type) { @@ -136,3 +173,8 @@ void use_ether(SURFACES *surfaces, POSITIONS *positions, struct character_t *src cure_target_mp(surfaces, positions, dest, cure); } + +void use_ether(SURFACES *surfaces, POSITIONS *positions, struct character_t *src, struct target_t *dest, void *data) +{ + __use_ether(surfaces, positions, src, dest->chr, *((int *)data)); +} |