summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/battle/struct/btl_turn_result.erl')
-rw-r--r--src/battle/struct/btl_turn_result.erl91
1 files changed, 72 insertions, 19 deletions
diff --git a/src/battle/struct/btl_turn_result.erl b/src/battle/struct/btl_turn_result.erl
index eaf974b..3e1be50 100644
--- a/src/battle/struct/btl_turn_result.erl
+++ b/src/battle/struct/btl_turn_result.erl
@@ -24,11 +24,15 @@
-record
(
- attacked,
+ hit,
{
attacker_ix :: non_neg_integer(),
defender_ix :: non_neg_integer(),
- sequence :: list(btl_attack:type()),
+ category :: btl_attack:category(),
+ precision :: btl_attack:precision(),
+ is_critical :: boolean(),
+ is_parry :: boolean(),
+ damage :: non_neg_integer(),
attacker_luck :: integer(),
defender_luck :: integer()
}
@@ -36,6 +40,16 @@
-record
(
+ targetted,
+ {
+ attacker_ix :: non_neg_integer(),
+ defender_ix :: non_neg_integer()
+ }
+).
+
+
+-record
+(
player_won,
{
player_ix :: non_neg_integer()
@@ -61,7 +75,8 @@
-opaque type() :: (
#switched_weapon{}
| #moved{}
- | #attacked{}
+ | #hit{}
+ | #targetted{}
| #player_won{}
| #player_lost{}
| #player_turn_started{}
@@ -80,7 +95,8 @@
new_player_turn_started/1,
new_character_switched_weapons/1,
new_character_moved/3,
- new_character_attacked/5
+ new_character_hit/9,
+ new_character_targetted/2
]
).
@@ -129,28 +145,48 @@ new_character_moved (CharacterIX, Path, NewLocation) ->
new_location = NewLocation
}.
--spec new_character_attacked
+-spec new_character_targetted (non_neg_integer(), non_neg_integer()) -> type().
+new_character_targetted (AttackerIX, DefenderIX) ->
+ #targetted
+ {
+ attacker_ix = AttackerIX,
+ defender_ix = DefenderIX
+ }.
+
+-spec new_character_hit
(
non_neg_integer(),
non_neg_integer(),
- list(btl_attack:type()),
+ btl_attack:category(),
+ btl_attack:precision(),
+ boolean(),
+ boolean(),
+ non_neg_integer(),
integer(),
integer()
)
-> type().
-new_character_attacked
+new_character_hit
(
AttackerIX,
DefenderIX,
- AttackSequence,
+ Category,
+ Precision,
+ IsCritical,
+ IsParry,
+ Damage,
AttackerLuck,
DefenderLuck
) ->
- #attacked
+ #hit
{
attacker_ix = AttackerIX,
defender_ix = DefenderIX,
- sequence = AttackSequence,
+ category = Category,
+ precision = Precision,
+ is_critical = IsCritical,
+ is_parry = IsParry,
+ damage = Damage,
attacker_luck = AttackerLuck,
defender_luck = DefenderLuck
}.
@@ -181,25 +217,42 @@ encode (TurnResult) when is_record(TurnResult, moved) ->
{<<"nlc">>, EncodedNewLocation}
]
};
-encode (TurnResult) when is_record(TurnResult, attacked) ->
- AttackerIX = TurnResult#attacked.attacker_ix,
- DefenderIX = TurnResult#attacked.defender_ix,
- Sequence = TurnResult#attacked.sequence,
- AttackerLuck = TurnResult#attacked.attacker_luck,
- DefenderLuck = TurnResult#attacked.defender_luck,
-
- EncodedSequence = lists:map(fun btl_attack:encode/1, Sequence),
+encode (TurnResult) when is_record(TurnResult, hit) ->
+ AttackerIX = TurnResult#hit.attacker_ix,
+ DefenderIX = TurnResult#hit.defender_ix,
+ Category = TurnResult#hit.category,
+ Precision = TurnResult#hit.precision,
+ IsCritical = TurnResult#hit.is_critical,
+ IsParry = TurnResult#hit.is_parry,
+ Damage = TurnResult#hit.damage,
+ AttackerLuck = TurnResult#hit.attacker_luck,
+ DefenderLuck = TurnResult#hit.defender_luck,
{
[
{<<"t">>, <<"atk">>},
{<<"aix">>, AttackerIX},
{<<"dix">>, DefenderIX},
- {<<"seq">>, EncodedSequence},
+ {<<"ord">>, btl_attack:encode_category(Category)},
+ {<<"pre">>, btl_attack:encode_precision(Precision)},
+ {<<"cri">>, IsCritical},
+ {<<"par">>, IsParry},
+ {<<"dmg">>, Damage},
{<<"alk">>, AttackerLuck},
{<<"dlk">>, DefenderLuck}
]
};
+encode (TurnResult) when is_record(TurnResult, targetted) ->
+ AttackerIX = TurnResult#targetted.attacker_ix,
+ DefenderIX = TurnResult#targetted.defender_ix,
+
+ {
+ [
+ {<<"t">>, <<"tar">>},
+ {<<"aix">>, AttackerIX},
+ {<<"dix">>, DefenderIX}
+ ]
+ };
encode (TurnResult) when is_record(TurnResult, player_won) ->
PlayerIX = TurnResult#player_won.player_ix,