| summaryrefslogtreecommitdiff | 
diff options
Diffstat (limited to 'src/battle/game-logic')
| -rw-r--r-- | src/battle/game-logic/btl_movement.erl | 60 | ||||
| -rw-r--r-- | src/battle/game-logic/btl_next_turn.erl | 184 | ||||
| -rw-r--r-- | src/battle/game-logic/btl_turn_actions.erl | 99 | ||||
| -rw-r--r-- | src/battle/game-logic/btl_turn_actions_attack.erl | 225 | ||||
| -rw-r--r-- | src/battle/game-logic/btl_turn_actions_move.erl | 140 | ||||
| -rw-r--r-- | src/battle/game-logic/btl_turn_actions_switch_weapon.erl | 68 | ||||
| -rw-r--r-- | src/battle/game-logic/btl_victory.erl | 208 | 
7 files changed, 0 insertions, 984 deletions
diff --git a/src/battle/game-logic/btl_movement.erl b/src/battle/game-logic/btl_movement.erl deleted file mode 100644 index dd7eff9..0000000 --- a/src/battle/game-logic/btl_movement.erl +++ /dev/null @@ -1,60 +0,0 @@ --module(btl_movement). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --export([cross/4]). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec cross -   ( -      btl_map:type(), -      list(btl_location:type()), -      list(btl_direction:enum()), -      non_neg_integer(), -      btl_location:type() -   ) -   -> {btl_location:type(), non_neg_integer()}. -cross (_Map, _ForbiddenLocations, [], Cost, Location) -> -   {Location, Cost}; -cross (Map, ForbiddenLocations, [Step|NextSteps], Cost, Location) -> -   NextLocation = btl_location:apply_direction(Step, Location), -   NextTileInstance = btl_map:get_tile_instance(NextLocation, Map), -   NextTileClassID = shr_tile:extract_main_class_id(NextTileInstance), -   NextTile = shr_tile:from_class_id(NextTileClassID), -   NextCost = (Cost + shr_tile:get_cost(NextTile)), -   IsForbidden = -      lists:foldl -      ( -         fun (ForbiddenLocation, Prev) -> -            (Prev or (NextLocation == ForbiddenLocation)) -         end, -         false, -         ForbiddenLocations -      ), - -   IsForbidden = false, - -   cross(Map, ForbiddenLocations, NextSteps, NextCost, NextLocation). - --spec cross -   ( -      btl_map:type(), -      list(btl_location:type()), -      list(btl_direction:enum()), -      btl_location:type() -   ) -   -> {btl_location:type(), non_neg_integer()}. -cross (Map, ForbiddenLocations, Path, Location) -> -   cross(Map, ForbiddenLocations, Path, 0, Location). diff --git a/src/battle/game-logic/btl_next_turn.erl b/src/battle/game-logic/btl_next_turn.erl deleted file mode 100644 index 886916d..0000000 --- a/src/battle/game-logic/btl_next_turn.erl +++ /dev/null @@ -1,184 +0,0 @@ --module(btl_next_turn). -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --export -( -   [ -      update_if_needed/1 -   ] -). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec set_player_turn_to_next (btl_battle:type()) -   -> {btl_battle:type(), ataxic:basic()}. -set_player_turn_to_next (Battle) -> -   Players = btl_battle:get_players(Battle), -   CurrentPlayerTurn = btl_battle:get_current_player_turn(Battle), - -   NextPlayerTurn = btl_player_turn:next(Players, CurrentPlayerTurn), - -   UpdatedBattle = btl_battle:set_current_player_turn(NextPlayerTurn, Battle), - -   DBQuery = -      ataxic:update_field -      ( -         btl_battle:get_current_player_turn_field(), -         ataxic:constant(NextPlayerTurn) -      ), - -   {UpdatedBattle, DBQuery}. - --spec reset_next_player_timeline (btl_battle:type()) -   -> {btl_battle:type(), btl_player:type(), ataxic:basic()}. -reset_next_player_timeline (Battle) -> -   NextPlayerTurn = btl_battle:get_current_player_turn(Battle), -   NextPlayerIX = btl_player_turn:get_player_ix(NextPlayerTurn), -   NextPlayer = btl_battle:get_player(NextPlayerIX, Battle), - -   UpdatedNextPlayer = btl_player:reset_timeline(NextPlayer), -   UpdatedBattle = -      btl_battle:set_player(NextPlayerIX, UpdatedNextPlayer, Battle), - -   DBQuery = -      ataxic:update_field -      ( -         btl_battle:get_players_field(), -         ataxic_sugar:update_orddict_element -         ( -            NextPlayerIX, -            ataxic:update_field -            ( -               btl_player:get_timeline_field(), -               ataxic:constant([]) -            ) -         ) -      ), - -   {UpdatedBattle, UpdatedNextPlayer, DBQuery}. - - --spec activate_next_players_characters (btl_battle:type(), btl_player:type()) -   -> {btl_battle:type(), ataxic:basic()}. -activate_next_players_characters (Battle, NextPlayer) -> -   NextPlayerIX = btl_player:get_index(NextPlayer), -   Characters = btl_battle:get_characters(Battle), - -   {UpdatedCharacters, AtaxicUpdates} = -      orddict:fold -      ( -         fun (IX, Character, {Prev, Updates}) -> -            case (btl_character:get_player_index(Character) == NextPlayerIX) of -               true -> -                  { -                     orddict:store -                     ( -                        IX, -                        btl_character:set_is_active(true, Character), -                        Prev -                     ), -                     [ -                        ataxic_sugar:update_orddict_element -                        ( -                           IX, -                           ataxic:update_field -                           ( -                              btl_character:get_is_active_field(), -                              ataxic:constant(true) -                           ) -                        )|Updates -                     ] -                  }; - -               false -> {Prev, Updates} -            end -         end, -         {Characters, []}, -         Characters -      ), - -   DBQuery = -      ataxic:update_field -      ( -         btl_battle:get_characters_field(), -         ataxic:sequence(AtaxicUpdates) -      ), - -   UpdatedBattle = btl_battle:set_characters(UpdatedCharacters, Battle), - -   {UpdatedBattle, DBQuery}. - --spec update -   ( -      btl_character_turn_update:type() -   ) -   -> btl_character_turn_update:type(). -update (Update) -> -   Data = btl_character_turn_update:get_data(Update), -   Battle = btl_character_turn_data:get_battle(Data), - -   {S0Battle, DBQuery0} = set_player_turn_to_next(Battle), -   {S1Battle, NextPlayer, DBQuery1} = reset_next_player_timeline(S0Battle), -   {S2Battle, DBQuery2} = -      activate_next_players_characters(S1Battle, NextPlayer), - -   S0Data = btl_character_turn_data:set_battle(S2Battle, Data), -   S0Update = -      btl_character_turn_update:add_to_timeline -      ( -         btl_turn_result:new_player_turn_started -         ( -            btl_player:get_index(NextPlayer) -         ), -         DBQuery0, -         Update -      ), - -   S1Update = btl_character_turn_update:set_data(S0Data, S0Update), - -   S2Update = -      lists:foldl -      ( -         fun btl_character_turn_update:add_to_db/2, -         S1Update, -         [DBQuery1,DBQuery2] -      ), - -   S2Update. - --spec requires_update (btl_character_turn_update:type()) -> boolean(). -requires_update (Update) -> -   Data = btl_character_turn_update:get_data(Update), -   Battle = btl_character_turn_data:get_battle(Data), -   Characters = btl_battle:get_characters(Battle), - -   (not -      (lists:any -         ( -            fun ({_IX, Char}) -> -               btl_character:get_is_active(Char) -            end, -            orddict:to_list(Characters) -         ) -      ) -   ). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec update_if_needed -   ( -      btl_character_turn_update:type() -   ) -   -> btl_character_turn_update:type(). -update_if_needed (Update) -> -   case requires_update(Update) of -      true -> update(Update); -      _ -> Update -   end. diff --git a/src/battle/game-logic/btl_turn_actions.erl b/src/battle/game-logic/btl_turn_actions.erl deleted file mode 100644 index 4e469f1..0000000 --- a/src/battle/game-logic/btl_turn_actions.erl +++ /dev/null @@ -1,99 +0,0 @@ --module(btl_turn_actions). -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --export -( -   [ -      handle/2, -      handle_max_health_changes/2 -   ] -). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec mod_current_health -   ( -      non_neg_integer(), -      non_neg_integer(), -      btl_character_turn_update:type() -   ) -   -> btl_character_turn_update:type(). -mod_current_health (CurrentMaxHealth, PreviousMaxHealth, Update) -> -   Data = btl_character_turn_update:get_data(Update), -   Character = btl_character_turn_data:get_character(Data), -   CharacterIX = btl_character_turn_data:get_character_ix(Data), -   PreviousHealth = btl_character:get_current_health(Character), - -   PreviousHealthRatio = (PreviousHealth / PreviousMaxHealth), -   NewHealth = -      min -      ( -         CurrentMaxHealth, -         max(1, round(PreviousHealthRatio * CurrentMaxHealth)) -      ), - -   UpdatedCharacter = btl_character:set_current_health(NewHealth, Character), -   UpdatedData = btl_character_turn_data:set_character(UpdatedCharacter, Data), -   S0Update = btl_character_turn_update:set_data(UpdatedData, Update), - -   DBQuery = -      ataxic:update_field -      ( -         btl_battle:get_characters_field(), -         ataxic_sugar:update_orddict_element -         ( -            CharacterIX, -            ataxic:update_field -            ( -               btl_character:get_current_health_field(), -               ataxic:constant(NewHealth) -            ) -         ) -      ), - -   S1Update =  btl_character_turn_update:add_to_db(DBQuery, S0Update), - -   S1Update. - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec handle -( -   btl_battle_action:type(), -   btl_character_turn_update:type() -) --> btl_character_turn_update:type(). -handle (BattleAction, Update) -> -   case btl_battle_action:get_category(BattleAction) of -      move -> btl_turn_actions_move:handle(BattleAction, Update); -      switch_weapon -> btl_turn_actions_switch_weapon:handle(Update); -      attack -> btl_turn_actions_attack:handle(BattleAction, Update) -   end. - --spec handle_max_health_changes -   ( -      btl_character_current_data:type(), -      btl_character_turn_update:type() -   ) -   -> btl_character_turn_update:type(). -handle_max_health_changes (PreviousData, Update) -> -   Data = btl_character_turn_update:get_data(Update), -   CurrentData = btl_character_turn_data:get_character_current_data(Data), -   CurrentStats =  btl_character_current_data:get_statistics(CurrentData), -   PreviousStats = btl_character_current_data:get_statistics(PreviousData), - -   CurrentMaxHealth = shr_statistics:get_health(CurrentStats), -   PreviousMaxHealth = shr_statistics:get_health(PreviousStats), - -   case (CurrentMaxHealth == PreviousMaxHealth) of -      true -> Update; -      _ -> mod_current_health(CurrentMaxHealth, PreviousMaxHealth, Update) -   end. diff --git a/src/battle/game-logic/btl_turn_actions_attack.erl b/src/battle/game-logic/btl_turn_actions_attack.erl deleted file mode 100644 index 52dd3fb..0000000 --- a/src/battle/game-logic/btl_turn_actions_attack.erl +++ /dev/null @@ -1,225 +0,0 @@ --module(btl_turn_actions_attack). -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --export -( -   [ -      handle/2 -   ] -). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec handle_attack_sequence -   ( -      btl_character_current_data:type(), -      non_neg_integer(), -      btl_character_current_data:type(), -      non_neg_integer(), -      list(btl_attack:step()) -   ) -   -> {list(btl_attack:type()), non_neg_integer(), non_neg_integer()}. -handle_attack_sequence -( -   CharacterCurrentData, -   CharacterCurrentHealth, -   TargetCurrentData, -   TargetCurrentHealth, -   AttackSequence -) -> -   AttackPlannedEffects = -      lists:map -      ( -         fun (AttackStep) -> -            btl_attack:get_description_of -            ( -               AttackStep, -               CharacterCurrentData, -               TargetCurrentData -            ) -         end, -         AttackSequence -      ), - -   lists:foldl -   ( -      fun -      ( -         AttackEffectCandidate, -         {AttackValidEffects, AttackerHealth, DefenderHealth} -      ) -> -         {AttackResult, NewAttackerHealth, NewDefenderHealth} = -            btl_attack:apply_to_healths -            ( -               AttackEffectCandidate, -               AttackerHealth, -               DefenderHealth -            ), -         case AttackResult of -            nothing -> {AttackValidEffects, AttackerHealth, DefenderHealth}; -            _ -> -               { -                  (AttackValidEffects ++ [AttackResult]), -                  NewAttackerHealth, -                  NewDefenderHealth -               } -         end -      end, -      { -         [], -         CharacterCurrentHealth, -         TargetCurrentHealth -      }, -      AttackPlannedEffects -   ). - --spec get_attack_sequence -   ( -      btl_character:type(), -      btl_character:type() -   ) -   -> list(btl_attack:step()). -get_attack_sequence (Character, TargetCharacter) -> -   Range = -      btl_location:dist -      ( -         btl_character:get_location(Character), -         btl_character:get_location(TargetCharacter) -      ), - -   {AttackingWeaponID, _} = btl_character:get_weapon_ids(Character), -   {DefendingWeaponID, _} = btl_character:get_weapon_ids(TargetCharacter), - -   AttackingWeapon = shr_weapon:from_id(AttackingWeaponID), -   DefendingWeapon = shr_weapon:from_id(DefendingWeaponID), - -   btl_attack:get_sequence(Range, AttackingWeapon, DefendingWeapon). - - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec handle -   ( -      btl_battle_action:type(), -      btl_character_turn_update:type() -   ) -   -> btl_character_turn_update:type(). -handle (BattleAction, Update) -> -   Data = btl_character_turn_update:get_data(Update), -   Battle = btl_character_turn_data:get_battle(Data), -   Character = btl_character_turn_data:get_character(Data), -   CharacterIX = btl_character_turn_data:get_character_ix(Data), -   CharacterCurrentData = -      btl_character_turn_data:get_character_current_data(Data), - -   Map = btl_battle:get_map(Battle), -   TargetIX = btl_battle_action:get_target_ix(BattleAction), -   TargetCharacter = btl_battle:get_character(TargetIX, Battle), -   TargetCurrentData = btl_character_current_data:new(TargetCharacter, Map), - -   true = btl_character:get_is_alive(TargetCharacter), - -   AttackSequence = get_attack_sequence(Character, TargetCharacter), - -   {AttackEffects, RemainingAttackerHealth, RemainingDefenderHealth} = -      handle_attack_sequence -      ( -         CharacterCurrentData, -         btl_character:get_current_health(Character), -         TargetCurrentData, -         btl_character:get_current_health(TargetCharacter), -         AttackSequence -      ), - -   UpdatedCharacter = -      btl_character:set_current_health(RemainingAttackerHealth, Character), - -   UpdatedBattle = -      btl_battle:set_character -      ( -         TargetIX, -         btl_character:set_current_health -         ( -            RemainingDefenderHealth, -            TargetCharacter -         ), -         Battle -      ), - -   S0Data = btl_character_turn_data:set_battle(UpdatedBattle, Data), -   S1Data = btl_character_turn_data:set_character(UpdatedCharacter, S0Data), - -   TimelineItem = -      btl_turn_result:new_character_attacked -      ( -         CharacterIX, -         TargetIX, -         AttackEffects -      ), - -   DBQuery0 = -      ataxic:update_field -      ( -         btl_battle:get_characters_field(), -         ataxic_sugar:update_orddict_element -         ( -            TargetIX, -            ataxic:update_field -            ( -               btl_character:get_current_health_field(), -               ataxic:constant(RemainingDefenderHealth) -            ) -         ) -      ), - -   DBQuery1 = -      ataxic:update_field -      ( -         btl_battle:get_characters_field(), -         ataxic_sugar:update_orddict_element -         ( -            CharacterIX, -            ataxic:update_field -            ( -               btl_character:get_current_health_field(), -               ataxic:constant(RemainingAttackerHealth) -            ) -         ) -      ), - -   S0Update = -      btl_character_turn_update:add_to_timeline -      ( -         TimelineItem, -         DBQuery0, -         Update -      ), - -   S1Update = btl_character_turn_update:add_to_db(DBQuery1, S0Update), -   S2Update = btl_character_turn_update:set_data(S1Data, S1Update), - -   S3Update = -      btl_victory:handle_character_lost_health -      ( -         CharacterIX, -         RemainingAttackerHealth, -         S2Update -      ), - -   S4Update = -      btl_victory:handle_character_lost_health -      ( -         TargetIX, -         RemainingDefenderHealth, -         S3Update -      ), - -   S4Update. diff --git a/src/battle/game-logic/btl_turn_actions_move.erl b/src/battle/game-logic/btl_turn_actions_move.erl deleted file mode 100644 index 80e5170..0000000 --- a/src/battle/game-logic/btl_turn_actions_move.erl +++ /dev/null @@ -1,140 +0,0 @@ --module(btl_turn_actions_move). -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --export -( -   [ -      handle/2 -   ] -). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec get_path_cost_and_destination -   ( -      btl_character_turn_data:type(), -      list(btl_direction:type()) -   ) -   -> {non_neg_integer(), btl_location:type()}. -get_path_cost_and_destination (Data, Path) -> -   Character = btl_character_turn_data:get_character(Data), -   CharacterIX = btl_character_turn_data:get_character_ix(Data), -   Battle = btl_character_turn_data:get_battle(Data), -   Map = btl_battle:get_map(Battle), - -   ForbiddenLocations = -      orddict:fold -      ( -         fun (IX, Char, Prev) -> -            IsAlive = btl_character:get_is_alive(Char), -            if -               (IX == CharacterIX) -> Prev; -               (not IsAlive) -> Prev; -               true -> -                  ordsets:add_element(btl_character:get_location(Char), Prev) -            end -         end, -         ordsets:new(), -         btl_battle:get_characters(Battle) -      ), - -   {NewLocation, Cost} = -      btl_movement:cross -      ( -         Map, -         ForbiddenLocations, -         Path, -         btl_character:get_location(Character) -      ), - -   {Cost, NewLocation}. - --spec assert_character_can_move -   ( -      btl_character_turn_data:type(), -      non_neg_integer() -   ) -   -> 'ok'. -assert_character_can_move (Data, Cost) -> -   CharacterData = btl_character_turn_data:get_character_current_data(Data), -   CharacterStats= btl_character_current_data:get_statistics(CharacterData), -   CharacterMovementPoints = shr_statistics:get_movement_points(CharacterStats), - -   true = (Cost =< CharacterMovementPoints), - -   ok. - --spec commit_move -   ( -      btl_character_current_data:type(), -      btl_character_turn_update:type(), -      list(btl_direction:type()), -      btl_location:type() -   ) -   -> btl_character_turn_update:type(). -commit_move (PreviousCurrentData, Update, Path, NewLocation) -> -   Data = btl_character_turn_update:get_data(Update), -   Character = btl_character_turn_data:get_character(Data), -   CharacterIX = btl_character_turn_data:get_character_ix(Data), - -   UpdatedCharacter = btl_character:set_location(NewLocation, Character), -   S0Data = btl_character_turn_data:set_character(UpdatedCharacter, Data), -   S1Data = btl_character_turn_data:refresh_character_current_data(S0Data), - -   S0Update = btl_character_turn_update:set_data(S1Data, Update), -   S1Update = -      btl_turn_actions:handle_max_health_changes(PreviousCurrentData, S0Update), - -   TimelineItem = -      btl_turn_result:new_character_moved(CharacterIX, Path, NewLocation), - -   DBQuery = -      ataxic:update_field -      ( -         btl_battle:get_characters_field(), -         ataxic_sugar:update_orddict_element -         ( -            CharacterIX, -            ataxic:update_field -            ( -               btl_character:get_location_field(), -               ataxic:constant(NewLocation) -            ) -         ) -      ), - -   S2Update = -      btl_character_turn_update:add_to_timeline -      ( -         TimelineItem, -         DBQuery, -         S1Update -      ), - -   S2Update. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec handle -   ( -      btl_battle_action:type(), -      btl_character_turn_update:type() -   ) -   -> btl_character_turn_update:type(). -handle (BattleAction, Update) -> -   Data = btl_character_turn_update:get_data(Update), -   CharacterCurrentData = -      btl_character_turn_data:get_character_current_data(Data), -   Path = btl_battle_action:get_path(BattleAction), - -   {PathCost, NewLocation} = get_path_cost_and_destination(Data, Path), -   assert_character_can_move(Data, PathCost), - -   commit_move(CharacterCurrentData, Update, Path, NewLocation). diff --git a/src/battle/game-logic/btl_turn_actions_switch_weapon.erl b/src/battle/game-logic/btl_turn_actions_switch_weapon.erl deleted file mode 100644 index 990f91f..0000000 --- a/src/battle/game-logic/btl_turn_actions_switch_weapon.erl +++ /dev/null @@ -1,68 +0,0 @@ --module(btl_turn_actions_switch_weapon). -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --export -( -   [ -      handle/1 -   ] -). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec handle -   ( -      btl_character_turn_update:type() -   ) -   -> btl_character_turn_update:type(). -handle (Update) -> -   Data = btl_character_turn_update:get_data(Update), -   Character = btl_character_turn_data:get_character(Data), -   CharacterCurrentData = -      btl_character_turn_data:get_character_current_data(Data), -   CharacterIX = btl_character_turn_data:get_character_ix(Data), - -   {PrimaryWeaponID, SecondaryWeaponID} = btl_character:get_weapon_ids(Character), - -   UpdatedWeaponIDs = {SecondaryWeaponID, PrimaryWeaponID}, -   UpdatedCharacter = btl_character:set_weapon_ids(UpdatedWeaponIDs, Character), - -   S0Data = btl_character_turn_data:set_character(UpdatedCharacter, Data), -   S1Data = btl_character_turn_data:refresh_character_current_data(S0Data), - -   S0Update = btl_character_turn_update:set_data(S1Data, Update), -   S1Update = -      btl_turn_actions:handle_max_health_changes -      ( -         CharacterCurrentData, -         S0Update -      ), - -   TimelineItem = btl_turn_result:new_character_switched_weapons(CharacterIX), - -   DBQuery = -      ataxic:update_field -      ( -         btl_battle:get_characters_field(), -         ataxic_sugar:update_orddict_element -         ( -            CharacterIX, -            ataxic:update_field -            ( -               btl_character:get_weapons_field(), -               ataxic:constant(UpdatedWeaponIDs) -            ) -         ) -      ), - -   btl_character_turn_update:add_to_timeline(TimelineItem, DBQuery, S1Update). diff --git a/src/battle/game-logic/btl_victory.erl b/src/battle/game-logic/btl_victory.erl deleted file mode 100644 index 089af81..0000000 --- a/src/battle/game-logic/btl_victory.erl +++ /dev/null @@ -1,208 +0,0 @@ --module(btl_victory). -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --export -( -   [ -      handle_character_lost_health/3 -   ] -). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - --spec mark_players_characters_as_defeated -   ( -      non_neg_integer(), -      orddict:orddict(non_neg_integer(), btl_character:type()) -   ) -   -> -   { -      orddict:orddict(non_neg_integer(), btl_character:type()), -      list(ataxic:basic()) -   }. -mark_players_characters_as_defeated (PlayerIX, Characters) -> -   orddict:fold -   ( -      fun (IX, Character, {Dict, Updates}) -> -         case (btl_character:get_player_index(Character) == PlayerIX) of -            false -> {Dict, Updates}; -            true -> -               { -                  orddict:store -                  ( -                     IX, -                     btl_character:set_is_defeated(true, Character), -                     Dict -                  ), -                  [ -                     ataxic_sugar:update_orddict_element -                     ( -                        IX, -                        ataxic:update_field -                        ( -                           btl_character:get_is_defeated_field(), -                           ataxic:constant(true) -                        ) -                     ) -                  ] -               } -         end -      end, -      {Characters, []}, -      Characters -   ). - --spec handle_player_defeat -   ( -      non_neg_integer(), -      btl_character_turn_update:type() -   ) -   -> btl_character_turn_update:type(). -handle_player_defeat (PlayerIX, Update) -> -   Data = btl_character_turn_update:get_data(Update), -   Battle = btl_character_turn_data:get_battle(Data), -   Characters = btl_battle:get_characters(Battle), - -   %% FIXME [FUNCTION: battle][MEDIUM]: The controlled character might slip -   %% through. -   {UpdatedCharacters, AtaxicUpdates} = -      mark_players_characters_as_defeated(PlayerIX, Characters), - -   S0Battle = btl_battle:set_characters(UpdatedCharacters, Battle), -   S1Battle = -      btl_battle:set_player -      ( -         PlayerIX, -         btl_player:set_is_active -         ( -            false, -            btl_battle:get_player(PlayerIX, S0Battle) -         ), -         S0Battle -      ), - -   UpdatedData = btl_character_turn_data:set_battle(S1Battle, Data), -   S0Update = btl_character_turn_update:set_data(UpdatedData, Update), - -   DBQuery = -      ataxic:sequence -      ( -         [ -            ataxic:update_field -            ( -               btl_battle:get_players_field(), -               ataxic_sugar:update_orddict_element -               ( -                  PlayerIX, -                  ataxic:update_field -                  ( -                     btl_player:get_is_active_field(), -                     ataxic:constant(false) -                  ) -               ) -            ), -            ataxic:update_field -            ( -               btl_battle:get_characters_field(), -               ataxic:sequence(AtaxicUpdates) -            ) -         ] -      ), - -   S1Update = -      btl_character_turn_update:add_to_timeline -      ( -         btl_turn_result:new_player_lost(PlayerIX), -         DBQuery, -         S0Update -      ), - -   S1Update. - - --spec actually_handle_character_lost_health -   ( -      non_neg_integer(), -      btl_character_turn_update:type() -   ) -   -> btl_character_turn_update:type(). -actually_handle_character_lost_health (CharIX, Update) -> -   Data = btl_character_turn_update:get_data(Update), -   Battle = btl_character_turn_data:get_battle(Data), -   Character = btl_battle:get_character(CharIX, Battle), -   Characters = btl_battle:get_characters(Battle), -   CharacterPlayerIX = btl_character:get_player_index(Character), - -   case btl_character:get_rank(Character) of -      optional -> -         %% Let's not assume there is a commander -         StillHasAliveChar = -            lists:any -            ( -               fun ({IX, Char}) -> -                  ( -                     (CharacterPlayerIX == btl_character:get_player_index(Char)) -                     and (IX /= CharIX) -                     and btl_character:get_is_alive(Char) -                  ) -               end, -               orddict:to_list(Characters) -            ), - -         case StillHasAliveChar of -            true -> Update; -            _ -> handle_player_defeat(CharacterPlayerIX, Update) -         end; - -      commander -> handle_player_defeat(CharacterPlayerIX, Update); - -      target -> -         StillHasAliveChar = -            lists:any -            ( -               fun ({IX, Char}) -> -                  ( -                     (CharacterPlayerIX == btl_character:get_player_index(Char)) -                     and (IX /= CharIX) -                     and btl_character:get_is_alive(Char) -                  ) -               end, -               orddict:to_list(Characters) -            ), - -         case StillHasAliveChar of -            true -> Update; -            _ -> handle_player_defeat(CharacterPlayerIX, Update) -         end -   end. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec handle_character_lost_health -   ( -      non_neg_integer(), -      integer(), -      btl_character_turn_update:type() -   ) -   -> btl_character_turn_update:type(). -handle_character_lost_health (_, Health, Update) when (Health > 0) -> Update; -handle_character_lost_health (CharIX, _Health, Update) -> -   Data = btl_character_turn_update:get_data(Update), -   S1Data = btl_character_turn_data:clean_battle(Data), -   S1Update = btl_character_turn_update:set_data(S1Data, Update), - -   S2Update = actually_handle_character_lost_health(CharIX, S1Update), - -   S2Data = btl_character_turn_update:get_data(S2Update), -   S3Data = btl_character_turn_data:refreshr_character(S2Data), -   S3Update = btl_character_turn_update:set_data(S3Data, S2Update), - -   S3Update.  | 


