summaryrefslogtreecommitdiff |
diff options
author | nsensfel <SpamShield0@noot-noot.org> | 2018-02-23 18:46:05 +0100 |
---|---|---|
committer | nsensfel <SpamShield0@noot-noot.org> | 2018-02-23 18:46:05 +0100 |
commit | f512cb83df8dea9fb39bd98540b0616fe7607f6d (patch) | |
tree | 1e11c44c66533a3ce6e55c1c7533f9a0c04a662d /src/query/character_turn | |
parent | acf9e9f1eb880ffb8ab918c40724eda566aefcc7 (diff) |
Rewritting "character_turn.erl"...
Diffstat (limited to 'src/query/character_turn')
-rw-r--r-- | src/query/character_turn/handle_character_attacking_2.erl | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/query/character_turn/handle_character_attacking_2.erl b/src/query/character_turn/handle_character_attacking_2.erl new file mode 100644 index 0000000..3fd2687 --- /dev/null +++ b/src/query/character_turn/handle_character_attacking_2.erl @@ -0,0 +1,59 @@ +roll_hits (AttackerStatistics, DefenderStatistics) -> + MissChance = + max + ( + 0, + ( + statistics:get_dodges(DefenderStatistics) + - + statistics:get_accuracy(AttackerStatistics) + ) + ), + case roll:percentage() of + X when (X < MissChance) -> misses; + X when (X < (MissChance * 2)) -> grazes; + _ -> hits + end. + +roll_damage (AttackerStatistics, _DefenderStatistics) -> + {MinimumDamage, MaximumDamage} = statistics:get_damages(AttackerStatistics), + MaximumRoll = max(1, MaximumDamage - MinimumDamage), + MinimumDamage + (rand:uniform(MaximumRoll) - 1). + +handle_character_attacking (QueryState, Input) -> + BattlemapInstance = QueryState#query_state.battlemap_instance, + ControlledCharacterInstance = QueryState#query_state.character_instance, + ControlledCharacter = + character_instance:get_character(ControlledCharacterInstance), + ControlledCharacterStatistics = + character:get_statistics(ControlledCharacter), + TargettedCharacterInstance = + array:get + ( + Input#input.target_id, + battlemap_instance:get_characters(BattlemapInstance) + ), + TargettedCharacter = + character_instance:get_character(TargettedCharacterInstance), + TargettedCharacterStatistics = character:get_statistics(TargettedCharacter), + RequiredRange = + movement:steps_between + ( + character_instance:get_location(ControlledCharacterInstance), + character_instance:get_location(TargettedCharacterInstance) + ), + {AttackingWeaponID, _} = character:get_weapon_ids(ControlledCharacter), + AttackingWeapon = weapon:from_id(AttackingWeaponID), + {_, AttackingWeaponRange} = weapon:get_ranges(AttackingWeapon), + {DefendingWeaponID, _} = character:get_weapon_ids(TargettedCharacter), + DefendingWeapon = weapon:from_id(DefendingWeaponID), + {DefendingWeaponRange, _} = weapon:get_ranges(DefendingWeapon), + + true = (RequiredRange =< AttackingWeaponRange), + + {Rolls, HealthMod} = + handle_attack + ( + ControlledCharacterStatistics, + TargettedCharacterStatistics + ). |