From b4038deb223e309fe886c71b3765a7e82e65f9bb Mon Sep 17 00:00:00 2001 From: Olivier Gayot Date: Fri, 9 Jan 2015 21:05:46 +0100 Subject: handle the different type of targets Signed-off-by: Olivier Gayot --- actions.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 55 insertions(+), 13 deletions(-) (limited to 'actions.c') diff --git a/actions.c b/actions.c index 5559bd1..e356a83 100644 --- a/actions.c +++ b/actions.c @@ -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)); +} -- cgit v1.2.3