summaryrefslogtreecommitdiff |
diff options
Diffstat (limited to 'src/battle/mechanic/condition/btl_cond_heal.erl')
-rw-r--r-- | src/battle/mechanic/condition/btl_cond_heal.erl | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/src/battle/mechanic/condition/btl_cond_heal.erl b/src/battle/mechanic/condition/btl_cond_heal.erl new file mode 100644 index 0000000..bbbbc96 --- /dev/null +++ b/src/battle/mechanic/condition/btl_cond_heal.erl @@ -0,0 +1,125 @@ +-module(btl_cond_heal). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-include("tacticians/conditions.hrl"). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-export +( + [ + apply/3 + ] +). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec apply_to_character + ( + btl_condition:type(), + btl_character:type() + ) + -> + { + btl_condition:type(), + btl_condition:update_action(), + [{btl_character:type(), ataxic:basic()}] + }. +apply_to_character (Condition, S0Character) -> + {_TargetIX, Amount} = btl_condition:get_parameters(Condition), + + case btl_character:get_is_alive(S0Character) of + false -> {Condition, none, []}; + true -> + RemainingUses = btl_condition:get_remaining_uses(Condition), + CurrentHealth = btl_character:get_current_health(S0Character), + MaxHealth = + shr_attributes:get_health + ( + shr_character:get_attributes + ( + btl_character:get_base_character(S0Character) + ) + ), + + UpdatedHealth = min(MaxHealth, (CurrentHealth + Amount)), + UpdatedRemainingUses = + + {S1Character, CharacterUpdate} = + btl_character:ataxia_set_current_health(UpdatedHealth, S0Character), + + if + (RemainingUses == -1) -> + { + Condition, + none, + [{S1Character, CharacterUpdate}] + }; + + (RemainingUses == 1) -> + { + btl_condition:set_remaining_uses + ( + UpdatedRemainingUses, + Condition + ), + remove, + [{S1Character, CharacterUpdate}] + }; + + (RemainingUses == 0) -> + { + Condition, + remove, + [{S1Character, CharacterUpdate}] + }; + + true -> + {UpdatedCondition, ConditionUpdate} = + btl_condition:ataxia_set_remaining_uses + ( + UpdatedRemainingUses, + Condition + ), + { + UpdatedCondition, + {update, ConditionUpdate}, + [{S1Character, CharacterUpdate}] + } + end + end. + +-spec handle_context + ( + shr_condition:context(), + btl_condition:type() + ) + -> shr_condition:context(). +handle_context ({Trigger, ReadOnly, VolatileData}, Condition) -> + {_TargetIX, _Amount} = btl_condition:get_parameters(Condition), + {Trigger, ReadOnly, VolatileData}. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec apply + ( + shr_condition:context(), + btl_condition:type(), + btl_character_turn_update:type() + ) -> + { + shr_condition:context(), + btl_character_turn_update:type(), + btl_condition:update_action() + }. +apply (S0Context, S0Condition, S0Update) -> + S1Context = handle_context(S0Context, S0Condition), + + {TargetIX, Amount} = btl_condition:get_parameters(S0Condition), + + {S1Context, S0Update, none}. |