| 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 +      ). | 


