summaryrefslogtreecommitdiff |
diff options
author | nsensfel <SpamShield0@noot-noot.org> | 2018-09-10 18:04:34 +0200 |
---|---|---|
committer | nsensfel <SpamShield0@noot-noot.org> | 2018-09-10 18:04:34 +0200 |
commit | 4089e04b953ce2799d839d841278446d7f0b4c32 (patch) | |
tree | e1877866c559544a97a4557cc99c025184f122c1 | |
parent | 04e4ce4137fe3ffb0ccc6dc8635db3e202517945 (diff) |
character -> roster-editor
-rw-r--r-- | src/character/src/Struct/Armor.elm | 177 | ||||
-rw-r--r-- | src/character/src/Struct/Statistics.elm | 176 | ||||
-rw-r--r-- | src/character/src/Struct/UI.elm | 135 | ||||
-rw-r--r-- | src/character/src/Struct/Weapon.elm | 248 | ||||
-rw-r--r-- | src/character/src/Update/HandleServerReply.elm | 230 | ||||
-rw-r--r-- | src/roster-editor/Makefile (renamed from src/character/Makefile) | 0 | ||||
-rw-r--r-- | src/roster-editor/elm-package.json (renamed from src/character/elm-package.json) | 0 | ||||
-rw-r--r-- | src/roster-editor/src/Comm/AddArmor.elm (renamed from src/character/src/Comm/AddArmor.elm) | 0 | ||||
-rw-r--r-- | src/roster-editor/src/Comm/AddChar.elm (renamed from src/character/src/Comm/AddChar.elm) | 0 | ||||
-rw-r--r-- | src/roster-editor/src/Comm/AddWeapon.elm (renamed from src/character/src/Comm/AddWeapon.elm) | 0 | ||||
-rw-r--r-- | src/roster-editor/src/Comm/LoadRoster.elm (renamed from src/character/src/Comm/LoadRoster.elm) | 5 | ||||
-rw-r--r-- | src/roster-editor/src/Comm/Send.elm (renamed from src/character/src/Comm/Send.elm) | 13 | ||||
-rw-r--r-- | src/roster-editor/src/Constants/IO.elm.m4 (renamed from src/character/src/Constants/IO.elm.m4) | 4 | ||||
-rw-r--r-- | src/roster-editor/src/Constants/Movement.elm | 10 | ||||
-rw-r--r-- | src/roster-editor/src/Constants/UI.elm | 16 | ||||
-rw-r--r-- | src/roster-editor/src/ElmModule/Init.elm (renamed from src/character/src/ElmModule/Init.elm) | 0 | ||||
-rw-r--r-- | src/roster-editor/src/ElmModule/Subscriptions.elm (renamed from src/character/src/ElmModule/Subscriptions.elm) | 2 | ||||
-rw-r--r-- | src/roster-editor/src/ElmModule/Update.elm (renamed from src/character/src/ElmModule/Update.elm) | 10 | ||||
-rw-r--r-- | src/roster-editor/src/ElmModule/View.elm (renamed from src/character/src/ElmModule/View.elm) | 29 | ||||
-rw-r--r-- | src/roster-editor/src/Main.elm (renamed from src/character/src/Main.elm) | 0 | ||||
-rw-r--r-- | src/roster-editor/src/Struct/Armor.elm | 70 | ||||
-rw-r--r-- | src/roster-editor/src/Struct/Attributes.elm (renamed from src/character/src/Struct/Attributes.elm) | 69 | ||||
-rw-r--r-- | src/roster-editor/src/Struct/Character.elm (renamed from src/character/src/Struct/Character.elm) | 101 | ||||
-rw-r--r-- | src/roster-editor/src/Struct/DamageType.elm | 55 | ||||
-rw-r--r-- | src/roster-editor/src/Struct/Error.elm (renamed from src/character/src/Struct/Error.elm) | 0 | ||||
-rw-r--r-- | src/roster-editor/src/Struct/Event.elm (renamed from src/character/src/Struct/Event.elm) | 22 | ||||
-rw-r--r-- | src/roster-editor/src/Struct/HelpRequest.elm (renamed from src/character/src/Struct/HelpRequest.elm) | 0 | ||||
-rw-r--r-- | src/roster-editor/src/Struct/Model.elm (renamed from src/character/src/Struct/Model.elm) | 69 | ||||
-rw-r--r-- | src/roster-editor/src/Struct/Omnimods.elm | 180 | ||||
-rw-r--r-- | src/roster-editor/src/Struct/ServerReply.elm (renamed from src/character/src/Struct/ServerReply.elm) | 10 | ||||
-rw-r--r-- | src/roster-editor/src/Struct/Statistics.elm | 210 | ||||
-rw-r--r-- | src/roster-editor/src/Struct/UI.elm | 52 | ||||
-rw-r--r-- | src/roster-editor/src/Struct/Weapon.elm | 99 | ||||
-rw-r--r-- | src/roster-editor/src/Struct/WeaponSet.elm (renamed from src/character/src/Struct/WeaponSet.elm) | 0 | ||||
-rw-r--r-- | src/roster-editor/src/Update/DisplayCharacterInfo.elm (renamed from src/character/src/Update/DisplayCharacterInfo.elm) | 0 | ||||
-rw-r--r-- | src/roster-editor/src/Update/GoToMainMenu.elm | 24 | ||||
-rw-r--r-- | src/roster-editor/src/Update/HandleServerReply.elm | 174 | ||||
-rw-r--r-- | src/roster-editor/src/Update/SelectCharacter.elm (renamed from src/character/src/Update/SelectCharacter.elm) | 2 | ||||
-rw-r--r-- | src/roster-editor/src/Update/SelectTab.elm (renamed from src/character/src/Update/SelectTab.elm) | 0 | ||||
-rw-r--r-- | src/roster-editor/src/Update/SendLoadRosterRequest.elm (renamed from src/character/src/Update/SendLoadRosterRequest.elm) | 9 | ||||
-rw-r--r-- | src/roster-editor/src/Update/SetRequestedHelp.elm (renamed from src/character/src/Update/SetRequestedHelp.elm) | 0 | ||||
-rw-r--r-- | src/roster-editor/src/View/Character.elm (renamed from src/character/src/View/Character.elm) | 0 | ||||
-rw-r--r-- | src/roster-editor/src/View/CharacterIcon.elm | 218 | ||||
-rw-r--r-- | src/roster-editor/src/View/Controlled.elm (renamed from src/character/src/View/Controlled.elm) | 37 | ||||
-rw-r--r-- | src/roster-editor/src/View/Controlled/CharacterCard.elm (renamed from src/character/src/View/Controlled/CharacterCard.elm) | 311 | ||||
-rw-r--r-- | src/roster-editor/src/View/Controlled/ManualControls.elm (renamed from src/character/src/View/Controlled/ManualControls.elm) | 0 | ||||
-rw-r--r-- | src/roster-editor/src/View/Controlled/Targets.elm (renamed from src/character/src/View/Controlled/Targets.elm) | 0 | ||||
-rw-r--r-- | src/roster-editor/src/View/CurrentTab.elm | 40 | ||||
-rw-r--r-- | src/roster-editor/src/View/Gauge.elm (renamed from src/character/src/View/Gauge.elm) | 0 | ||||
-rw-r--r-- | src/roster-editor/src/View/MainMenu.elm (renamed from src/character/src/View/MainMenu.elm) | 22 | ||||
-rw-r--r-- | src/roster-editor/src/View/MessageBoard.elm (renamed from src/character/src/View/MessageBoard.elm) | 0 | ||||
-rw-r--r-- | src/roster-editor/src/View/MessageBoard/Animator.elm (renamed from src/character/src/View/MessageBoard/Animator.elm) | 0 | ||||
-rw-r--r-- | src/roster-editor/src/View/MessageBoard/Animator/Attack.elm (renamed from src/character/src/View/MessageBoard/Animator/Attack.elm) | 0 | ||||
-rw-r--r-- | src/roster-editor/src/View/MessageBoard/Error.elm (renamed from src/character/src/View/MessageBoard/Error.elm) | 0 | ||||
-rw-r--r-- | src/roster-editor/src/View/MessageBoard/Help.elm (renamed from src/character/src/View/MessageBoard/Help.elm) | 0 | ||||
-rw-r--r-- | src/roster-editor/src/View/MessageBoard/Help/Guide.elm (renamed from src/character/src/View/MessageBoard/Help/Guide.elm) | 35 | ||||
-rw-r--r-- | src/roster-editor/src/View/MessageBoard/Help/Rank.elm (renamed from src/character/src/View/MessageBoard/Help/Rank.elm) | 0 | ||||
-rw-r--r-- | src/roster-editor/src/View/SubMenu.elm (renamed from src/character/src/View/SubMenu.elm) | 0 | ||||
-rw-r--r-- | src/roster-editor/src/View/SubMenu/Characters.elm (renamed from src/character/src/View/SubMenu/Characters.elm) | 0 | ||||
-rw-r--r-- | src/roster-editor/src/View/SubMenu/Settings.elm (renamed from src/character/src/View/SubMenu/Settings.elm) | 0 | ||||
-rw-r--r-- | src/roster-editor/src/View/SubMenu/Status.elm (renamed from src/character/src/View/SubMenu/Status.elm) | 0 | ||||
-rw-r--r-- | src/roster-editor/src/View/SubMenu/Status/CharacterInfo.elm (renamed from src/character/src/View/SubMenu/Status/CharacterInfo.elm) | 0 | ||||
-rw-r--r-- | src/roster-editor/src/View/SubMenu/Status/TileInfo.elm (renamed from src/character/src/View/SubMenu/Status/TileInfo.elm) | 52 | ||||
-rw-r--r-- | src/roster-editor/src/View/SubMenu/Timeline.elm (renamed from src/character/src/View/SubMenu/Timeline.elm) | 0 | ||||
-rw-r--r-- | src/roster-editor/src/View/SubMenu/Timeline/Attack.elm (renamed from src/character/src/View/SubMenu/Timeline/Attack.elm) | 0 | ||||
-rw-r--r-- | src/roster-editor/src/View/SubMenu/Timeline/Movement.elm (renamed from src/character/src/View/SubMenu/Timeline/Movement.elm) | 0 | ||||
-rw-r--r-- | src/roster-editor/src/View/SubMenu/Timeline/PlayerDefeat.elm (renamed from src/character/src/View/SubMenu/Timeline/PlayerDefeat.elm) | 0 | ||||
-rw-r--r-- | src/roster-editor/src/View/SubMenu/Timeline/PlayerTurnStart.elm (renamed from src/character/src/View/SubMenu/Timeline/PlayerTurnStart.elm) | 0 | ||||
-rw-r--r-- | src/roster-editor/src/View/SubMenu/Timeline/PlayerVictory.elm (renamed from src/character/src/View/SubMenu/Timeline/PlayerVictory.elm) | 0 | ||||
-rw-r--r-- | src/roster-editor/src/View/SubMenu/Timeline/WeaponSwitch.elm (renamed from src/character/src/View/SubMenu/Timeline/WeaponSwitch.elm) | 0 | ||||
-rw-r--r-- | src/roster-editor/www/index.html (renamed from src/character/www/index.html) | 2 |
71 files changed, 1599 insertions, 1319 deletions
diff --git a/src/character/src/Struct/Armor.elm b/src/character/src/Struct/Armor.elm deleted file mode 100644 index 04a0428..0000000 --- a/src/character/src/Struct/Armor.elm +++ /dev/null @@ -1,177 +0,0 @@ -module Struct.Armor exposing - ( - Type, - Ref, - Category(..), - new, - get_id, - get_name, - get_category, - get_resistance_to, - get_image_id, - decoder, - none, - apply_to_attributes - ) - --- Elm ------------------------------------------------------------------------- -import Json.Decode -import Json.Decode.Pipeline - --- Map ------------------------------------------------------------------- -import Struct.Attributes -import Struct.Weapon - --------------------------------------------------------------------------------- --- TYPES ----------------------------------------------------------------------- --------------------------------------------------------------------------------- -type alias PartiallyDecoded = - { - id : Int, - nam : String, - ct : String, - cf : Float - } - -type alias Type = - { - id : Int, - name : String, - category : Category, - coef : Float - } - -type alias Ref = Int - -type Category = - Kinetic - | Leather - | Chain - | Plate - --------------------------------------------------------------------------------- --- LOCAL ----------------------------------------------------------------------- --------------------------------------------------------------------------------- -finish_decoding : PartiallyDecoded -> Type -finish_decoding add_armor = - { - id = add_armor.id, - name = add_armor.nam, - category = - ( - case add_armor.ct of - "k" -> Kinetic - "c" -> Chain - "p" -> Plate - _ -> Leather - ), - coef = add_armor.cf - } - --------------------------------------------------------------------------------- --- EXPORTED -------------------------------------------------------------------- --------------------------------------------------------------------------------- -new : Int -> String -> Category -> Float -> Type -new id name category coef = - { - id = id, - name = name, - category = category, - coef = coef - } - -get_id : Type -> Ref -get_id ar = ar.id - -get_name : Type -> String -get_name ar = ar.name - -get_category : Type -> String -get_category ar = ar.name - -get_image_id : Type -> String -get_image_id ar = (toString ar.id) - -get_resistance_to : Struct.Weapon.DamageType -> Type -> Int -get_resistance_to dmg_type ar = - (ceiling - ( - ar.coef - * - ( - case (dmg_type, ar.category) of - (Struct.Weapon.Slash, Kinetic) -> 0.0 - (Struct.Weapon.Slash, Leather) -> 20.0 - (Struct.Weapon.Slash, Chain) -> 30.0 - (Struct.Weapon.Slash, Plate) -> 30.0 - (Struct.Weapon.Blunt, Kinetic) -> 30.0 - (Struct.Weapon.Blunt, Leather) -> 20.0 - (Struct.Weapon.Blunt, Chain) -> 20.0 - (Struct.Weapon.Blunt, Plate) -> 20.0 - (Struct.Weapon.Pierce, Kinetic) -> 20.0 - (Struct.Weapon.Pierce, Leather) -> 20.0 - (Struct.Weapon.Pierce, Chain) -> 20.0 - (Struct.Weapon.Pierce, Plate) -> 30.0 - ) - ) - ) - -apply_to_attributes : Type -> Struct.Attributes.Type -> Struct.Attributes.Type -apply_to_attributes ar atts = - let - impact = (-1 * (ceiling (20.0 * ar.coef))) - half_impact = (-1 * (ceiling (10.0 * ar.coef))) - in - case ar.category of - Kinetic -> (Struct.Attributes.mod_mind impact atts) - Leather -> - (Struct.Attributes.mod_constitution - half_impact - (Struct.Attributes.mod_dexterity - half_impact - atts - ) - ) - - Chain -> - (Struct.Attributes.mod_constitution - half_impact - (Struct.Attributes.mod_dexterity - half_impact - (Struct.Attributes.mod_speed impact atts) - ) - ) - - Plate -> - (Struct.Attributes.mod_constitution - half_impact - (Struct.Attributes.mod_dexterity - half_impact - (Struct.Attributes.mod_speed - impact - (Struct.Attributes.mod_strength impact atts) - ) - ) - ) - -decoder : (Json.Decode.Decoder Type) -decoder = - (Json.Decode.map - (finish_decoding) - (Json.Decode.Pipeline.decode - PartiallyDecoded - |> (Json.Decode.Pipeline.required "id" Json.Decode.int) - |> (Json.Decode.Pipeline.required "nam" Json.Decode.string) - |> (Json.Decode.Pipeline.required "ct" Json.Decode.string) - |> (Json.Decode.Pipeline.required "cf" Json.Decode.float) - ) - ) - -none : Type -none = - (new - 0 - "None" - Leather - 0.0 - ) diff --git a/src/character/src/Struct/Statistics.elm b/src/character/src/Struct/Statistics.elm deleted file mode 100644 index aa3de39..0000000 --- a/src/character/src/Struct/Statistics.elm +++ /dev/null @@ -1,176 +0,0 @@ -module Struct.Statistics exposing - ( - Type, - get_movement_points, - get_max_health, - get_dodges, - get_parries, - get_damage_min, - get_damage_max, - get_accuracy, - get_double_hits, - get_critical_hits, - new - ) - --- Elm ------------------------------------------------------------------------- -import List - --- Map ------------------------------------------------------------------- -import Struct.Attributes -import Struct.Armor -import Struct.Weapon -import Struct.WeaponSet - --------------------------------------------------------------------------------- --- TYPES ----------------------------------------------------------------------- --------------------------------------------------------------------------------- -type alias Type = - { - movement_points : Int, - max_health : Int, - dodges : Int, - parries : Int, - damage_min : Int, - damage_max : Int, - accuracy : Int, - double_hits : Int, - critical_hits : Int - } - --------------------------------------------------------------------------------- --- LOCAL ----------------------------------------------------------------------- --------------------------------------------------------------------------------- -average : (List Int) -> Float -average l = ((toFloat (List.sum l)) / (toFloat (List.length l))) - -float_to_int : Float -> Int -float_to_int f = - (ceiling f) - -gentle_squared_growth : Int -> Int -gentle_squared_growth v = (float_to_int (((toFloat v)^1.8)/20.0)) - -gentle_squared_growth_f : Float -> Int -gentle_squared_growth_f v = (float_to_int ((v^1.8)/20.0)) - -sudden_squared_growth : Int -> Int -sudden_squared_growth v = (float_to_int (((toFloat v)^2.5)/1000.0)) - -sudden_squared_growth_f : Float -> Int -sudden_squared_growth_f v = (float_to_int ((v^2.5)/1000.0)) - -sudden_exp_growth : Int -> Int -sudden_exp_growth v = (float_to_int (4.0^((toFloat v)/25.0))) - -sudden_exp_growth_f : Float -> Int -sudden_exp_growth_f f = (float_to_int (4.0^(f/25.0))) - -already_high_slow_growth : Int -> Int -already_high_slow_growth v = - (float_to_int - (30.0 * (logBase 2.718281828459 (((toFloat v) + 5.0)/4.0))) - ) - -damage_base_mod : Float -> Float -damage_base_mod str = (((str^1.8)/2000.0) - 0.75) - -apply_damage_base_mod : Float -> Float -> Int -apply_damage_base_mod bmod dmg = - (max 0 (float_to_int (dmg + (bmod * dmg)))) - --------------------------------------------------------------------------------- --- EXPORTED -------------------------------------------------------------------- --------------------------------------------------------------------------------- -get_movement_points : Type -> Int -get_movement_points t = t.movement_points - -get_max_health : Type -> Int -get_max_health t = t.max_health - -get_dodges : Type -> Int -get_dodges t = t.dodges - -get_parries : Type -> Int -get_parries t = t.parries - -get_damage_min : Type -> Int -get_damage_min t = t.damage_min - -get_damage_max : Type -> Int -get_damage_max t = t.damage_max - -get_accuracy : Type -> Int -get_accuracy t = t.accuracy - -get_double_hits : Type -> Int -get_double_hits t = t.double_hits - -get_critical_hits : Type -> Int -get_critical_hits t = t.critical_hits - -new : ( - Struct.Attributes.Type -> - Struct.WeaponSet.Type -> - Struct.Armor.Type -> - Type - ) -new att wp_set ar = - let - active_weapon = (Struct.WeaponSet.get_active_weapon wp_set) - actual_att = - (Struct.Armor.apply_to_attributes - ar - (Struct.Weapon.apply_to_attributes active_weapon att) - ) - constitution = (Struct.Attributes.get_constitution actual_att) - dexterity = (Struct.Attributes.get_dexterity actual_att) - intelligence = (Struct.Attributes.get_intelligence actual_att) - mind = (Struct.Attributes.get_mind actual_att) - speed = (Struct.Attributes.get_speed actual_att) - strength = (Struct.Attributes.get_strength actual_att) - dmg_bmod = (damage_base_mod (toFloat strength)) - in - { - movement_points = - (gentle_squared_growth_f - (average [mind, constitution, constitution, speed, speed, speed]) - ), - max_health = - (gentle_squared_growth_f - (average [constitution, constitution, constitution, mind]) - ), - dodges = - (clamp - 0 - 100 - (sudden_exp_growth_f - (average - [dexterity, mind, speed] - ) - ) - ), - parries = - (clamp - 0 - 75 - (sudden_exp_growth_f - (average [dexterity, intelligence, speed, strength]) - ) - ), - damage_min = - (apply_damage_base_mod - dmg_bmod - (toFloat (Struct.Weapon.get_min_damage active_weapon)) - ), - damage_max = - (apply_damage_base_mod - dmg_bmod - (toFloat (Struct.Weapon.get_max_damage active_weapon)) - ), - accuracy = (sudden_squared_growth dexterity), - double_hits = - (clamp 0 100 (sudden_squared_growth_f (average [mind, speed]))), - critical_hits = - (clamp 0 100 (sudden_squared_growth intelligence)) - } diff --git a/src/character/src/Struct/UI.elm b/src/character/src/Struct/UI.elm deleted file mode 100644 index 4837434..0000000 --- a/src/character/src/Struct/UI.elm +++ /dev/null @@ -1,135 +0,0 @@ -module Struct.UI exposing - ( - Type, - Tab(..), - Action(..), - default, - -- Zoom - get_zoom_level, - reset_zoom_level, - mod_zoom_level, - -- Tab - try_getting_displayed_tab, - set_displayed_tab, - reset_displayed_tab, - to_string, - get_all_tabs, - -- Navigator - try_getting_displayed_nav, - set_displayed_nav, - reset_displayed_nav, - -- Manual Controls - has_manual_controls_enabled, - -- Previous Action - get_previous_action, - set_previous_action - ) - --- Map ------------------------------------------------------------------- -import Struct.Location -import Struct.Navigator - --------------------------------------------------------------------------------- --- TYPES ----------------------------------------------------------------------- --------------------------------------------------------------------------------- -type Tab = - StatusTab - | CharactersTab - | SettingsTab - | TimelineTab - -type Action = - UsedManualControls - | SelectedLocation Struct.Location.Ref - | SelectedCharacter Int - | AttackedCharacter Int - -type alias Type = - { - zoom_level : Float, - show_manual_controls : Bool, - displayed_tab : (Maybe Tab), - previous_action : (Maybe Action), - displayed_nav : (Maybe Struct.Navigator.Type) - } - --------------------------------------------------------------------------------- --- LOCAL ----------------------------------------------------------------------- --------------------------------------------------------------------------------- - --------------------------------------------------------------------------------- --- EXPORTED -------------------------------------------------------------------- --------------------------------------------------------------------------------- -default : Type -default = - { - zoom_level = 1.0, - show_manual_controls = True, - displayed_tab = Nothing, - previous_action = Nothing, - displayed_nav = Nothing - } - --- Zoom ------------------------------------------------------------------------ -get_zoom_level : Type -> Float -get_zoom_level ui = ui.zoom_level - -reset_zoom_level : Type -> Type -reset_zoom_level ui = {ui | zoom_level = 1.0} - -mod_zoom_level : Float -> Type -> Type -mod_zoom_level mod ui = {ui | zoom_level = (mod * ui.zoom_level)} - --- Tab ------------------------------------------------------------------------- -try_getting_displayed_tab : Type -> (Maybe Tab) -try_getting_displayed_tab ui = ui.displayed_tab - -set_displayed_tab : Tab -> Type -> Type -set_displayed_tab tab ui = {ui | displayed_tab = (Just tab)} - -reset_displayed_tab : Type -> Type -reset_displayed_tab ui = {ui | displayed_tab = Nothing} - -to_string : Tab -> String -to_string tab = - case tab of - StatusTab -> "Status" - CharactersTab -> "Characters" - SettingsTab -> "Settings" - TimelineTab -> "Timeline" - -get_all_tabs : (List Tab) -get_all_tabs = - [StatusTab, CharactersTab, SettingsTab, TimelineTab] - --- Navigator ------------------------------------------------------------------- -try_getting_displayed_nav : Type -> (Maybe Struct.Navigator.Type) -try_getting_displayed_nav ui = ui.displayed_nav - -set_displayed_nav : Struct.Navigator.Type -> Type -> Type -set_displayed_nav nav ui = {ui | displayed_nav = (Just nav)} - -reset_displayed_nav : Type -> Type -reset_displayed_nav ui = {ui | displayed_nav = Nothing} - --- ManualControls -------------------------------------------------------------- -has_manual_controls_enabled : Type -> Bool -has_manual_controls_enabled ui = ui.show_manual_controls - -toggle_manual_controls : Type -> Type -toggle_manual_controls ui = - if (ui.show_manual_controls) - then - {ui | show_manual_controls = False} - else - {ui | show_manual_controls = True} - -set_enable_manual_controls : Bool -> Type -> Type -set_enable_manual_controls val ui = {ui | show_manual_controls = val} - --- Previous Action ------------------------------------------------------------- -set_previous_action : (Maybe Action) -> Type -> Type -set_previous_action act ui = {ui | previous_action = act} - -get_previous_action : Type -> (Maybe Action) -get_previous_action ui = ui.previous_action diff --git a/src/character/src/Struct/Weapon.elm b/src/character/src/Struct/Weapon.elm deleted file mode 100644 index d572ed6..0000000 --- a/src/character/src/Struct/Weapon.elm +++ /dev/null @@ -1,248 +0,0 @@ -module Struct.Weapon exposing - ( - Type, - Ref, - RangeType(..), - RangeModifier(..), - DamageType(..), - DamageModifier(..), - new, - get_id, - get_name, - get_range_type, - get_range_modifier, - get_damage_type, - get_damage_modifier, - get_attack_range, - get_defense_range, - get_max_damage, - get_min_damage, - decoder, - none, - apply_to_attributes - ) - --- Elm ------------------------------------------------------------------------- -import Json.Decode -import Json.Decode.Pipeline - --- Map ------------------------------------------------------------------- -import Struct.Attributes - --------------------------------------------------------------------------------- --- TYPES ----------------------------------------------------------------------- --------------------------------------------------------------------------------- -type alias PartiallyDecoded = - { - id : Int, - nam : String, - rt : String, - rm : String, - dt : String, - dm : String, - cf : Float - } - -type alias Type = - { - id : Int, - name : String, - coef : Float, - range_type : RangeType, - range_mod : RangeModifier, - dmg_type : DamageType, - dmg_mod : DamageModifier, - def_range : Int, - atk_range : Int, - dmg_min : Int, - dmg_max : Int - } - -type alias Ref = Int - -type RangeType = Ranged | Melee -type RangeModifier = Long | Short --- Having multiple types at the same time, like Warframe does, would be nice. -type DamageType = Slash | Blunt | Pierce -type DamageModifier = Heavy | Light - -type alias WeaponType = - { - range : RangeType, - range_mod : RangeModifier, - dmg_type : DamageType - } - --------------------------------------------------------------------------------- --- LOCAL ----------------------------------------------------------------------- --------------------------------------------------------------------------------- -get_ranges : RangeType -> RangeModifier -> (Int, Int) -get_ranges rt rm = - case (rt, rm) of - (Ranged, Long) -> (2, 6) - (Ranged, Short) -> (1, 4) - (Melee, Long) -> (0, 2) - (Melee, Short) -> (0, 1) - -get_damages : Float -> RangeType -> DamageModifier -> (Int, Int) -get_damages coef rt dm = - case (rt, dm) of - (Ranged, Heavy) -> ((ceiling (15.0 * coef)), (ceiling (30.0 * coef))) - (Ranged, Light) -> ((ceiling (10.0 * coef)), (ceiling (25.0 * coef))) - (Melee, Heavy) -> ((ceiling (20.0 * coef)), (ceiling (35.0 * coef))) - (Melee, Light) -> ((ceiling (15.0 * coef)), (ceiling (30.0 * coef))) - --------------------------------------------------------------------------------- --- EXPORTED -------------------------------------------------------------------- --------------------------------------------------------------------------------- -new : ( - Int -> - String -> - Float -> - RangeType -> - RangeModifier -> - DamageType -> - DamageModifier -> - Type - ) -new - id name coef - range_type range_mod - dmg_type dmg_mod - = - let - (def_range, atk_range) = (get_ranges range_type range_mod) - (dmg_min, dmg_max) = (get_damages coef range_type dmg_mod) - in - { - id = id, - name = name, - coef = coef, - range_type = range_type, - range_mod = range_mod, - dmg_type = dmg_type, - dmg_mod = dmg_mod, - def_range = def_range, - atk_range = atk_range, - dmg_min = dmg_min, - dmg_max = dmg_max - } - -get_id : Type -> Int -get_id wp = wp.id - -get_name : Type -> String -get_name wp = wp.name - -get_range_type : Type -> RangeType -get_range_type wp = wp.range_type - -get_range_modifier : Type -> RangeModifier -get_range_modifier wp = wp.range_mod - -get_damage_type : Type -> DamageType -get_damage_type wp = wp.dmg_type - -get_damage_modifier : Type -> DamageModifier -get_damage_modifier wp = wp.dmg_mod - -get_attack_range : Type -> Int -get_attack_range wp = wp.atk_range - -get_defense_range : Type -> Int -get_defense_range wp = wp.def_range - -get_max_damage : Type -> Int -get_max_damage wp = wp.dmg_max - -get_min_damage : Type -> Int -get_min_damage wp = wp.dmg_min - -apply_to_attributes : Type -> Struct.Attributes.Type -> Struct.Attributes.Type -apply_to_attributes wp atts = - let - impact = (20.0 * wp.coef) - full_impact = (-1 * (ceiling impact)) - quarter_impact = (-1 * (ceiling (impact / 4.0))) - in - case (wp.range_mod, wp.dmg_mod) of - (Long, Heavy) -> - (Struct.Attributes.mod_dexterity - full_impact - (Struct.Attributes.mod_speed full_impact atts) - ) - - (Long, Light) -> - (Struct.Attributes.mod_dexterity - full_impact - (Struct.Attributes.mod_speed quarter_impact atts) - ) - - (Short, Heavy) -> - (Struct.Attributes.mod_dexterity - quarter_impact - (Struct.Attributes.mod_speed full_impact atts) - ) - - (Short, Light) -> - (Struct.Attributes.mod_dexterity - quarter_impact - (Struct.Attributes.mod_speed quarter_impact atts) - ) - -finish_decoding : PartiallyDecoded -> Type -finish_decoding add_weapon = - (new - add_weapon.id - add_weapon.nam - add_weapon.cf - ( - case add_weapon.rt of - "m" -> Melee - _ -> Ranged - ) - ( - case add_weapon.rm of - "l" -> Long - _ -> Short - ) - ( - case add_weapon.dt of - "s" -> Slash - "p" -> Pierce - _ -> Blunt - ) - ( - case add_weapon.dm of - "l" -> Light - _ -> Heavy - ) - ) - -decoder : (Json.Decode.Decoder Type) -decoder = - (Json.Decode.map - (finish_decoding) - (Json.Decode.Pipeline.decode - PartiallyDecoded - |> (Json.Decode.Pipeline.required "id" Json.Decode.int) - |> (Json.Decode.Pipeline.required "nam" Json.Decode.string) - |> (Json.Decode.Pipeline.required "rt" Json.Decode.string) - |> (Json.Decode.Pipeline.required "rm" Json.Decode.string) - |> (Json.Decode.Pipeline.required "dt" Json.Decode.string) - |> (Json.Decode.Pipeline.required "dm" Json.Decode.string) - |> (Json.Decode.Pipeline.required "cf" Json.Decode.float) - ) - ) - -none : Type -none = - (new - 0 - "None" - 0.0 - Melee - Short - Blunt - Light - ) diff --git a/src/character/src/Update/HandleServerReply.elm b/src/character/src/Update/HandleServerReply.elm deleted file mode 100644 index ff6cc67..0000000 --- a/src/character/src/Update/HandleServerReply.elm +++ /dev/null @@ -1,230 +0,0 @@ -module Update.HandleServerReply exposing (apply_to) - --- Elm ------------------------------------------------------------------------- -import Array - -import Delay - -import Dict - -import Http - -import Time - --- Map ------------------------------------------------------------------- -import Struct.Armor -import Struct.Map -import Struct.Character -import Struct.Error -import Struct.Event -import Struct.Model -import Struct.ServerReply -import Struct.Tile -import Struct.TurnResult -import Struct.TurnResultAnimator -import Struct.UI -import Struct.Weapon - --------------------------------------------------------------------------------- --- TYPES ----------------------------------------------------------------------- --------------------------------------------------------------------------------- - --------------------------------------------------------------------------------- --- LOCAL ----------------------------------------------------------------------- --------------------------------------------------------------------------------- -weapon_getter : Struct.Model.Type -> Struct.Weapon.Ref -> Struct.Weapon.Type -weapon_getter model ref = - case (Dict.get ref model.weapons) of - (Just w) -> w - Nothing -> Struct.Weapon.none - -armor_getter : Struct.Model.Type -> Struct.Armor.Ref -> Struct.Armor.Type -armor_getter model ref = - case (Dict.get ref model.armors) of - (Just w) -> w - Nothing -> Struct.Armor.none - ------------ - -add_armor : ( - Struct.Armor.Type -> - (Struct.Model.Type, (Maybe Struct.Error.Type)) -> - (Struct.Model.Type, (Maybe Struct.Error.Type)) - ) -add_armor ar current_state = - case current_state of - (_, (Just _)) -> current_state - (model, _) -> ((Struct.Model.add_armor ar model), Nothing) - -add_tile : ( - Struct.Tile.Type -> - (Struct.Model.Type, (Maybe Struct.Error.Type)) -> - (Struct.Model.Type, (Maybe Struct.Error.Type)) - ) -add_tile tl current_state = - case current_state of - (_, (Just _)) -> current_state - (model, _) -> ((Struct.Model.add_tile tl model), Nothing) - -add_weapon : ( - Struct.Weapon.Type -> - (Struct.Model.Type, (Maybe Struct.Error.Type)) -> - (Struct.Model.Type, (Maybe Struct.Error.Type)) - ) -add_weapon wp current_state = - case current_state of - (_, (Just _)) -> current_state - (model, _) -> ((Struct.Model.add_weapon wp model), Nothing) - -add_character : ( - (Struct.Character.Type, Int, Int, Int) -> - (Struct.Model.Type, (Maybe Struct.Error.Type)) -> - (Struct.Model.Type, (Maybe Struct.Error.Type)) - ) -add_character char_and_refs current_state = - case current_state of - (_, (Just _)) -> current_state - (model, _) -> - let - (char, awp_ref, swp_ref, ar_ref) = char_and_refs - awp = (weapon_getter model awp_ref) - swp = (weapon_getter model swp_ref) - ar = (armor_getter model ar_ref) - in - ( - (Struct.Model.add_character - (Struct.Character.fill_missing_equipment awp swp ar char) - model - ), - Nothing - ) - -set_map : ( - Struct.Map.Type -> - (Struct.Model.Type, (Maybe Struct.Error.Type)) -> - (Struct.Model.Type, (Maybe Struct.Error.Type)) - ) -set_map map current_state = - case current_state of - (_, (Just _)) -> current_state - (model, _) -> - ( - {model | - map = - (Struct.Map.solve_tiles model.tiles map) - }, - Nothing - ) - -add_to_timeline : ( - (List Struct.TurnResult.Type) -> - (Struct.Model.Type, (Maybe Struct.Error.Type)) -> - (Struct.Model.Type, (Maybe Struct.Error.Type)) - ) -add_to_timeline turn_results current_state = - case current_state of - (_, (Just _)) -> current_state - - (model, _) -> - ( - {model | - animator = - (Struct.TurnResultAnimator.maybe_new - (List.reverse turn_results) - False - ), - timeline = - (Array.append - (Array.fromList turn_results) - model.timeline - ), - ui = - (Struct.UI.set_displayed_tab - Struct.UI.TimelineTab - model.ui - ) - }, - Nothing - ) - -set_timeline : ( - (List Struct.TurnResult.Type) -> - (Struct.Model.Type, (Maybe Struct.Error.Type)) -> - (Struct.Model.Type, (Maybe Struct.Error.Type)) - ) -set_timeline turn_results current_state = - case current_state of - (_, (Just _)) -> current_state - - (model, _) -> - ( - {model | timeline = (Array.fromList turn_results)}, - Nothing - ) - -apply_command : ( - Struct.ServerReply.Type -> - (Struct.Model.Type, (Maybe Struct.Error.Type)) -> - (Struct.Model.Type, (Maybe Struct.Error.Type)) - ) -apply_command command current_state = - case command of - (Struct.ServerReply.AddWeapon wp) -> - (add_weapon wp current_state) - - (Struct.ServerReply.AddArmor ar) -> - (add_armor ar current_state) - - (Struct.ServerReply.AddTile tl) -> - (add_tile tl current_state) - - (Struct.ServerReply.AddCharacter char) -> - (add_character char current_state) - - (Struct.ServerReply.SetMap map) -> - (set_map map current_state) - - (Struct.ServerReply.TurnResults results) -> - (add_to_timeline results current_state) - - (Struct.ServerReply.SetTimeline timeline) -> - (set_timeline timeline current_state) - - Struct.ServerReply.Okay -> current_state - --------------------------------------------------------------------------------- --- EXPORTED -------------------------------------------------------------------- --------------------------------------------------------------------------------- -apply_to : ( - Struct.Model.Type -> - (Result Http.Error (List Struct.ServerReply.Type)) -> - (Struct.Model.Type, (Cmd Struct.Event.Type)) - ) -apply_to model query_result = - case query_result of - (Result.Err error) -> - ( - (Struct.Model.invalidate - (Struct.Error.new Struct.Error.Networking (toString error)) - model - ), - Cmd.none - ) - - (Result.Ok commands) -> - let - new_model = - ( - case (List.foldl (apply_command) (model, Nothing) commands) of - (updated_model, Nothing) -> updated_model - (_, (Just error)) -> (Struct.Model.invalidate error model) - ) - in - ( - new_model, - if (new_model.animator == Nothing) - then - Cmd.none - else - (Delay.after 1 Time.millisecond Struct.Event.AnimationEnded) - ) diff --git a/src/character/Makefile b/src/roster-editor/Makefile index 3b58a08..3b58a08 100644 --- a/src/character/Makefile +++ b/src/roster-editor/Makefile diff --git a/src/character/elm-package.json b/src/roster-editor/elm-package.json index d62239e..d62239e 100644 --- a/src/character/elm-package.json +++ b/src/roster-editor/elm-package.json diff --git a/src/character/src/Comm/AddArmor.elm b/src/roster-editor/src/Comm/AddArmor.elm index 480b823..480b823 100644 --- a/src/character/src/Comm/AddArmor.elm +++ b/src/roster-editor/src/Comm/AddArmor.elm diff --git a/src/character/src/Comm/AddChar.elm b/src/roster-editor/src/Comm/AddChar.elm index 32227a8..32227a8 100644 --- a/src/character/src/Comm/AddChar.elm +++ b/src/roster-editor/src/Comm/AddChar.elm diff --git a/src/character/src/Comm/AddWeapon.elm b/src/roster-editor/src/Comm/AddWeapon.elm index 7061dea..7061dea 100644 --- a/src/character/src/Comm/AddWeapon.elm +++ b/src/roster-editor/src/Comm/AddWeapon.elm diff --git a/src/character/src/Comm/LoadRoster.elm b/src/roster-editor/src/Comm/LoadRoster.elm index 4058b6d..524605f 100644 --- a/src/character/src/Comm/LoadRoster.elm +++ b/src/roster-editor/src/Comm/LoadRoster.elm @@ -3,7 +3,7 @@ module Comm.LoadRoster exposing (try) -- Elm ------------------------------------------------------------------------- import Json.Encode --- Map ------------------------------------------------------------------- +-- Roster Editor --------------------------------------------------------------- import Comm.Send import Constants.IO @@ -24,7 +24,8 @@ try_encoding model = (Json.Encode.object [ ("stk", (Json.Encode.string model.session_token)), - ("pid", (Json.Encode.string model.player_id)) + ("pid", (Json.Encode.string model.player_id)), + ("rid", (Json.Encode.string model.roster_id)) ] ) ) diff --git a/src/character/src/Comm/Send.elm b/src/roster-editor/src/Comm/Send.elm index 98e3ba4..ec9e359 100644 --- a/src/character/src/Comm/Send.elm +++ b/src/roster-editor/src/Comm/Send.elm @@ -6,14 +6,10 @@ import Http import Json.Decode import Json.Encode --- Map ------------------------------------------------------------------- +--- Roster Editor -------------------------------------------------------------- import Comm.AddArmor import Comm.AddChar -import Comm.AddTile import Comm.AddWeapon -import Comm.SetMap -import Comm.SetTimeline -import Comm.TurnResults import Struct.Event import Struct.ServerReply @@ -29,13 +25,12 @@ import Struct.Model internal_decoder : String -> (Json.Decode.Decoder Struct.ServerReply.Type) internal_decoder reply_type = case reply_type of - "add_tile" -> (Comm.AddTile.decode) "add_armor" -> (Comm.AddArmor.decode) "add_char" -> (Comm.AddChar.decode) "add_weapon" -> (Comm.AddWeapon.decode) - "set_map" -> (Comm.SetMap.decode) - "turn_results" -> (Comm.TurnResults.decode) - "set_timeline" -> (Comm.SetTimeline.decode) + "disconnected" -> (Json.Decode.succeed Struct.ServerReply.Disconnected) + "okay" -> (Json.Decode.succeed Struct.ServerReply.Okay) + other -> (Json.Decode.fail ( diff --git a/src/character/src/Constants/IO.elm.m4 b/src/roster-editor/src/Constants/IO.elm.m4 index c0f4a9f..c78c717 100644 --- a/src/character/src/Constants/IO.elm.m4 +++ b/src/roster-editor/src/Constants/IO.elm.m4 @@ -4,7 +4,7 @@ base_url : String base_url = "__CONF_SERVER_URL" roster_handler_url : String -roster_handler_url = (base_url ++ "/handler/roster/") +roster_handler_url = (base_url ++ "/handler/roster") roster_loading_handler : String -roster_loading_handler = (roster_handler_url ++ "/chr_load") +roster_loading_handler = (map_handler_url ++ "/rst_load") diff --git a/src/roster-editor/src/Constants/Movement.elm b/src/roster-editor/src/Constants/Movement.elm new file mode 100644 index 0000000..a2a5c1e --- /dev/null +++ b/src/roster-editor/src/Constants/Movement.elm @@ -0,0 +1,10 @@ +module Constants.Movement exposing (..) + +max_points : Int +max_points = 200 + +cost_when_occupied_tile : Int +cost_when_occupied_tile = 201 + +cost_when_out_of_bounds : Int +cost_when_out_of_bounds = 255 diff --git a/src/roster-editor/src/Constants/UI.elm b/src/roster-editor/src/Constants/UI.elm new file mode 100644 index 0000000..6a0b948 --- /dev/null +++ b/src/roster-editor/src/Constants/UI.elm @@ -0,0 +1,16 @@ +module Constants.UI exposing (..) + +tile_size : Int +tile_size = 32 + +local_variants_per_tile : Int +local_variants_per_tile = 16 + +viewer_html_id : String +viewer_html_id = "map_viewer" + +half_viewer_min_width : Float +half_viewer_min_width = 109.0 + +half_viewer_min_height : Float +half_viewer_min_height = 180.0 diff --git a/src/character/src/ElmModule/Init.elm b/src/roster-editor/src/ElmModule/Init.elm index 4fccd82..4fccd82 100644 --- a/src/character/src/ElmModule/Init.elm +++ b/src/roster-editor/src/ElmModule/Init.elm diff --git a/src/character/src/ElmModule/Subscriptions.elm b/src/roster-editor/src/ElmModule/Subscriptions.elm index fe276f4..198833a 100644 --- a/src/character/src/ElmModule/Subscriptions.elm +++ b/src/roster-editor/src/ElmModule/Subscriptions.elm @@ -2,7 +2,7 @@ module ElmModule.Subscriptions exposing (..) -- Elm ------------------------------------------------------------------------- --- Map ------------------------------------------------------------------- +-- Roster Editor --------------------------------------------------------------- import Struct.Model import Struct.Event diff --git a/src/character/src/ElmModule/Update.elm b/src/roster-editor/src/ElmModule/Update.elm index eafac01..f9d7d38 100644 --- a/src/character/src/ElmModule/Update.elm +++ b/src/roster-editor/src/ElmModule/Update.elm @@ -2,7 +2,7 @@ module ElmModule.Update exposing (update) -- Elm ------------------------------------------------------------------------- --- Map ------------------------------------------------------------------- +-- Battle ---------------------------------------------------------------------- import Struct.Event import Struct.Model @@ -11,6 +11,7 @@ import Update.AttackWithoutMoving import Update.ChangeScale import Update.DisplayCharacterInfo import Update.EndTurn +import Update.GoToMainMenu import Update.HandleAnimationEnded import Update.HandleServerReply import Update.LookForCharacter @@ -24,6 +25,7 @@ import Update.SetRequestedHelp import Update.SwitchTeam import Update.SwitchWeapon import Update.TestAnimation +import Update.UndoAction -------------------------------------------------------------------------------- -- LOCAL ----------------------------------------------------------------------- @@ -102,5 +104,11 @@ update event model = Struct.Event.AbortTurnRequest -> (Update.AbortTurn.apply_to new_model) + Struct.Event.UndoActionRequest -> + (Update.UndoAction.apply_to new_model) + (Struct.Event.RequestedHelp help_request) -> (Update.SetRequestedHelp.apply_to new_model help_request) + + Struct.Event.GoToMainMenu -> + (Update.GoToMainMenu.apply_to new_model) diff --git a/src/character/src/ElmModule/View.elm b/src/roster-editor/src/ElmModule/View.elm index 069b0bf..3f643f5 100644 --- a/src/character/src/ElmModule/View.elm +++ b/src/roster-editor/src/ElmModule/View.elm @@ -11,11 +11,12 @@ import Constants.UI import Struct.Event import Struct.Model -import View.Map -import View.Controlled import View.MessageBoard import View.MainMenu -import View.SubMenu +import View.CharacterSelection +import View.PortraitSelection +import View.WeaponSelection +import View. -------------------------------------------------------------------------------- -- LOCAL ----------------------------------------------------------------------- @@ -32,26 +33,8 @@ view model = ] [ (View.MainMenu.get_html), - (Html.Lazy.lazy2 - (View.Controlled.get_html) - model.char_turn - model.player_ix - ), - (Html.div - [ - (Html.Attributes.class "battle-container-centerer") - ] - [ - (Html.div - [ - (Html.Attributes.class "battle-container"), - (Html.Attributes.id Constants.UI.viewer_html_id) - ] - [(View.Map.get_html model)] - ) - ] - ), - (View.SubMenu.get_html model), + (View.CurrentTab.get_html model), + (View.Controlled.get_html model), (View.MessageBoard.get_html model) ] ) diff --git a/src/character/src/Main.elm b/src/roster-editor/src/Main.elm index 8140041..8140041 100644 --- a/src/character/src/Main.elm +++ b/src/roster-editor/src/Main.elm diff --git a/src/roster-editor/src/Struct/Armor.elm b/src/roster-editor/src/Struct/Armor.elm new file mode 100644 index 0000000..659f2c3 --- /dev/null +++ b/src/roster-editor/src/Struct/Armor.elm @@ -0,0 +1,70 @@ +module Struct.Armor exposing + ( + Type, + Ref, + new, + get_id, + get_name, + get_image_id, + get_omnimods, + decoder, + none + ) + +-- Elm ------------------------------------------------------------------------- +import Json.Decode +import Json.Decode.Pipeline + +-- Battle ---------------------------------------------------------------------- +import Struct.Omnimods + +-------------------------------------------------------------------------------- +-- TYPES ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +type alias Type = + { + id : Int, + name : String, + omnimods : Struct.Omnimods.Type + } + +type alias Ref = Int + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +new : Int -> String -> Struct.Omnimods.Type -> Type +new id name omnimods = + { + id = id, + name = name, + omnimods = omnimods + } + +get_id : Type -> Ref +get_id ar = ar.id + +get_name : Type -> String +get_name ar = ar.name + +get_image_id : Type -> String +get_image_id ar = (toString ar.id) + +get_omnimods : Type -> Struct.Omnimods.Type +get_omnimods ar = ar.omnimods + +decoder : (Json.Decode.Decoder Type) +decoder = + (Json.Decode.Pipeline.decode + Type + |> (Json.Decode.Pipeline.required "id" Json.Decode.int) + |> (Json.Decode.Pipeline.required "nam" Json.Decode.string) + |> (Json.Decode.Pipeline.required "omni" Struct.Omnimods.decoder) + ) + +none : Type +none = (new 0 "None" (Struct.Omnimods.new [] [] [] [])) diff --git a/src/character/src/Struct/Attributes.elm b/src/roster-editor/src/Struct/Attributes.elm index 50b4ad4..ce871dd 100644 --- a/src/character/src/Struct/Attributes.elm +++ b/src/roster-editor/src/Struct/Attributes.elm @@ -1,6 +1,7 @@ module Struct.Attributes exposing ( Type, + Category(..), get_constitution, get_dexterity, get_intelligence, @@ -13,19 +14,28 @@ module Struct.Attributes exposing mod_mind, mod_speed, mod_strength, + mod, + get, new, - decoder + decode_category, + default ) -- Elm ------------------------------------------------------------------------- -import Json.Decode -import Json.Decode.Pipeline --- Map ------------------------------------------------------------------- +-- Battle ---------------------------------------------------------------------- -------------------------------------------------------------------------------- -- TYPES ----------------------------------------------------------------------- -------------------------------------------------------------------------------- +type Category = + Constitution + | Dexterity + | Intelligence + | Mind + | Speed + | Strength + type alias Type = { constitution : Int, @@ -102,6 +112,26 @@ mod_strength i t = strength = (get_within_att_range (i + t.strength)) } +mod : Category -> Int -> Type -> Type +mod cat i t = + case cat of + Constitution -> (mod_constitution i t) + Dexterity -> (mod_dexterity i t) + Intelligence -> (mod_intelligence i t) + Mind -> (mod_mind i t) + Speed -> (mod_speed i t) + Strength -> (mod_strength i t) + +get : Category -> Type -> Int +get cat t = + case cat of + Constitution -> (get_constitution t) + Dexterity -> (get_dexterity t) + Intelligence -> (get_intelligence t) + Mind -> (get_mind t) + Speed -> (get_speed t) + Strength -> (get_strength t) + new : ( Int -> -- constitution Int -> -- dexterity @@ -121,14 +151,23 @@ new con dex int min spe str = strength = str } -decoder : (Json.Decode.Decoder Type) -decoder = - (Json.Decode.Pipeline.decode - Type - |> (Json.Decode.Pipeline.required "con" Json.Decode.int) - |> (Json.Decode.Pipeline.required "dex" Json.Decode.int) - |> (Json.Decode.Pipeline.required "int" Json.Decode.int) - |> (Json.Decode.Pipeline.required "min" Json.Decode.int) - |> (Json.Decode.Pipeline.required "spe" Json.Decode.int) - |> (Json.Decode.Pipeline.required "str" Json.Decode.int) - ) +default : Type +default = + { + constitution = 50, + dexterity = 50, + intelligence = 50, + mind = 50, + speed = 50, + strength = 50 + } + +decode_category : String -> Category +decode_category str = + case str of + "con" -> Constitution + "dex" -> Dexterity + "int" -> Intelligence + "min" -> Mind + "spe" -> Speed + _ -> Strength diff --git a/src/character/src/Struct/Character.elm b/src/roster-editor/src/Struct/Character.elm index f854b44..b837962 100644 --- a/src/character/src/Struct/Character.elm +++ b/src/roster-editor/src/Struct/Character.elm @@ -11,6 +11,7 @@ module Struct.Character exposing get_armor, get_armor_variation, get_current_health, + get_current_omnimods, get_sane_current_health, set_current_health, get_location, @@ -25,7 +26,8 @@ module Struct.Character exposing get_weapons, set_weapons, decoder, - fill_missing_equipment + refresh_omnimods, + fill_missing_equipment_and_omnimods ) -- Elm ------------------------------------------------------------------------- @@ -36,6 +38,7 @@ import Json.Decode.Pipeline import Struct.Armor import Struct.Attributes import Struct.Location +import Struct.Omnimods import Struct.Statistics import Struct.Weapon import Struct.WeaponSet @@ -55,10 +58,10 @@ type alias PartiallyDecoded = pla : Int, ena : Bool, dea : Bool, - att : Struct.Attributes.Type, awp : Int, swp : Int, - ar : Int + ar : Int, + omni : Struct.Omnimods.Type } type Rank = @@ -81,7 +84,9 @@ type alias Type = attributes : Struct.Attributes.Type, statistics : Struct.Statistics.Type, weapons : Struct.WeaponSet.Type, - armor : Struct.Armor.Type + armor : Struct.Armor.Type, + current_omnimods : Struct.Omnimods.Type, + permanent_omnimods : Struct.Omnimods.Type } -------------------------------------------------------------------------------- @@ -99,6 +104,7 @@ finish_decoding add_char = let weapon_set = (Struct.WeaponSet.new Struct.Weapon.none Struct.Weapon.none) armor = Struct.Armor.none + default_attributes = (Struct.Attributes.default) almost_char = { ix = add_char.ix, @@ -108,13 +114,15 @@ finish_decoding add_char = portrait = add_char.prt, location = add_char.lc, health = add_char.hea, - attributes = add_char.att, - statistics = (Struct.Statistics.new add_char.att weapon_set armor), + attributes = default_attributes, + statistics = (Struct.Statistics.new_raw default_attributes), player_ix = add_char.pla, enabled = add_char.ena, defeated = add_char.dea, weapons = weapon_set, - armor = armor + armor = armor, + current_omnimods = (Struct.Omnimods.new [] [] [] []), + permanent_omnimods = add_char.omni } in (almost_char, add_char.awp, add_char.swp, add_char.ar) @@ -143,6 +151,9 @@ get_portrait_id c = c.portrait get_current_health : Type -> Int get_current_health c = c.health +get_current_omnimods : Type -> Struct.Omnimods.Type +get_current_omnimods c = c.current_omnimods + get_sane_current_health : Type -> Int get_sane_current_health c = (max 0 c.health) @@ -193,8 +204,7 @@ get_armor_variation char = set_weapons : Struct.WeaponSet.Type -> Type -> Type set_weapons weapons char = {char | - weapons = weapons, - statistics = (Struct.Statistics.new char.attributes weapons char.armor) + weapons = weapons } decoder : (Json.Decode.Decoder (Type, Int, Int, Int)) @@ -208,31 +218,82 @@ decoder = |> (Json.Decode.Pipeline.required "rnk" Json.Decode.string) |> (Json.Decode.Pipeline.required "ico" Json.Decode.string) |> (Json.Decode.Pipeline.required "prt" Json.Decode.string) - |> (Json.Decode.Pipeline.required "lc" (Struct.Location.decoder)) + |> (Json.Decode.Pipeline.required "lc" Struct.Location.decoder) |> (Json.Decode.Pipeline.required "hea" Json.Decode.int) |> (Json.Decode.Pipeline.required "pla" Json.Decode.int) |> (Json.Decode.Pipeline.required "ena" Json.Decode.bool) |> (Json.Decode.Pipeline.required "dea" Json.Decode.bool) - |> (Json.Decode.Pipeline.required "att" (Struct.Attributes.decoder)) |> (Json.Decode.Pipeline.required "awp" Json.Decode.int) |> (Json.Decode.Pipeline.required "swp" Json.Decode.int) |> (Json.Decode.Pipeline.required "ar" Json.Decode.int) + |> (Json.Decode.Pipeline.required "pomni" Struct.Omnimods.decoder) ) ) -fill_missing_equipment : ( - Struct.Weapon.Type -> - Struct.Weapon.Type -> - Struct.Armor.Type -> +refresh_omnimods : ( + (Struct.Location.Type -> Struct.Omnimods.Type) -> Type -> Type ) -fill_missing_equipment awp swp ar char = +refresh_omnimods tile_omnimods_fun char = let - weapon_set = (Struct.WeaponSet.new awp swp) + previous_max_health = (Struct.Statistics.get_max_health char.statistics) + current_omnimods = + (Struct.Omnimods.merge + (Struct.Weapon.get_omnimods + (Struct.WeaponSet.get_active_weapon char.weapons) + ) + (Struct.Omnimods.merge + (tile_omnimods_fun char.location) + char.permanent_omnimods + ) + ) + current_attributes = + (Struct.Omnimods.apply_to_attributes + current_omnimods + (Struct.Attributes.default) + ) + current_statistics = + (Struct.Omnimods.apply_to_statistics + current_omnimods + (Struct.Statistics.new_raw current_attributes) + ) + new_max_health = (Struct.Statistics.get_max_health current_statistics) in {char | - statistics = (Struct.Statistics.new char.attributes weapon_set ar), - weapons = weapon_set, - armor = ar + attributes = current_attributes, + statistics = current_statistics, + current_omnimods = current_omnimods, + health = + (clamp + 1 + new_max_health + (round + ( + ((toFloat char.health) / (toFloat previous_max_health)) + * (toFloat new_max_health) + ) + ) + ) } + +fill_missing_equipment_and_omnimods : ( + (Struct.Location.Type -> Struct.Omnimods.Type) -> + Struct.Weapon.Type -> + Struct.Weapon.Type -> + Struct.Armor.Type -> + Type -> + Type + ) +fill_missing_equipment_and_omnimods tile_omnimods_fun awp swp ar char = + (set_current_health + -- We just changed the omnimods, but already had the right health value + char.health + (refresh_omnimods + (tile_omnimods_fun) + {char | + weapons = (Struct.WeaponSet.new awp swp), + armor = ar + } + ) + ) diff --git a/src/roster-editor/src/Struct/DamageType.elm b/src/roster-editor/src/Struct/DamageType.elm new file mode 100644 index 0000000..b7bced7 --- /dev/null +++ b/src/roster-editor/src/Struct/DamageType.elm @@ -0,0 +1,55 @@ +module Struct.DamageType exposing + ( + Type(..), + encode, + decode, + to_string + ) + +-- Elm ------------------------------------------------------------------------- + +-- Map ------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- TYPES ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +type Type = + Base + | Slash + | Blunt + | Pierce + | None + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +decode : String -> Type +decode str = + case str of + "bse" -> Base + "slh" -> Slash + "pie" -> Pierce + "blu" -> Blunt + _ -> None + +encode : Type -> String +encode t = + case t of + Base -> "bse" + Slash -> "slh" + Pierce -> "pie" + Blunt -> "blu" + None -> "non" + +to_string : Type -> String +to_string t = + case t of + Base -> "Base" + Slash -> "Slash" + Pierce -> "Piercing" + Blunt -> "Bludgeoning" + None -> "ERROR" diff --git a/src/character/src/Struct/Error.elm b/src/roster-editor/src/Struct/Error.elm index 5f40c09..5f40c09 100644 --- a/src/character/src/Struct/Error.elm +++ b/src/roster-editor/src/Struct/Error.elm diff --git a/src/character/src/Struct/Event.elm b/src/roster-editor/src/Struct/Event.elm index dedb606..e95d029 100644 --- a/src/character/src/Struct/Event.elm +++ b/src/roster-editor/src/Struct/Event.elm @@ -3,10 +3,8 @@ module Struct.Event exposing (Type(..), attempted) -- Elm ------------------------------------------------------------------------- import Http --- Map ------------------------------------------------------------------- -import Struct.Direction +-- Roster Editor --------------------------------------------------------------- import Struct.Error -import Struct.Location import Struct.ServerReply import Struct.HelpRequest import Struct.UI @@ -15,26 +13,14 @@ import Struct.UI -- TYPES ----------------------------------------------------------------------- -------------------------------------------------------------------------------- type Type = - AbortTurnRequest - | AnimationEnded - | AttackWithoutMovingRequest - | CharacterInfoRequested Int + None | CharacterSelected Int - | DebugLoadBattleRequest - | DebugTeamSwitchRequest - | DebugTestAnimation - | DirectionRequested Struct.Direction.Type | Failed Struct.Error.Type - | LookingForCharacter Int - | None - | ScaleChangeRequested Float + | GoToMainMenu + | RequestedHelp Struct.HelpRequest.Type | ServerReplied (Result Http.Error (List Struct.ServerReply.Type)) | TabSelected Struct.UI.Tab | TileSelected Struct.Location.Ref - | CharacterOrTileSelected Struct.Location.Ref - | TurnEnded - | RequestedHelp Struct.HelpRequest.Type - | WeaponSwitchRequest attempted : (Result.Result err val) -> Type attempted act = diff --git a/src/character/src/Struct/HelpRequest.elm b/src/roster-editor/src/Struct/HelpRequest.elm index a0693e2..a0693e2 100644 --- a/src/character/src/Struct/HelpRequest.elm +++ b/src/roster-editor/src/Struct/HelpRequest.elm diff --git a/src/character/src/Struct/Model.elm b/src/roster-editor/src/Struct/Model.elm index d1f2fc7..3e7fc01 100644 --- a/src/character/src/Struct/Model.elm +++ b/src/roster-editor/src/Struct/Model.elm @@ -8,7 +8,6 @@ module Struct.Model exposing add_weapon, add_armor, invalidate, - reset, clear_error ) @@ -17,17 +16,16 @@ import Array import Dict --- Map ------------------------------------------------------------------- +-- Shared ---------------------------------------------------------------------- +import Struct.Flags + +-- Roster Editor --------------------------------------------------------------- import Struct.Armor -import Struct.Map import Struct.Character import Struct.CharacterTurn import Struct.Error -import Struct.Flags import Struct.HelpRequest -import Struct.Tile -import Struct.TurnResult -import Struct.TurnResultAnimator +import Struct.Omnimods import Struct.UI import Struct.Weapon @@ -38,12 +36,14 @@ import Util.Array -------------------------------------------------------------------------------- type alias Type = { + flags: Struct.Flags.Type, help_request: Struct.HelpRequest.Type, characters: (Array.Array Struct.Character.Type), weapons: (Dict.Dict Struct.Weapon.Ref Struct.Weapon.Type), armors: (Dict.Dict Struct.Armor.Ref Struct.Armor.Type), error: (Maybe Struct.Error.Type), player_id: String, + roster_id: String, session_token: String, ui: Struct.UI.Type } @@ -57,21 +57,38 @@ type alias Type = -------------------------------------------------------------------------------- new : Struct.Flags.Type -> Type new flags = - { - help_request = Struct.HelpRequest.None, - characters = (Array.empty), - weapons = (Dict.empty), - armors = (Dict.empty), - error = Nothing, - player_id = - ( - if (flags.user_id == "") - then "0" - else flags.user_id - ), - session_token = flags.token, - ui = (Struct.UI.default) - } + let + maybe_roster_id = (Struct.Flags.maybe_get_param "id" flags) + model = + { + flags = flags, + help_request = Struct.HelpRequest.None, + characters = (Array.empty), + weapons = (Dict.empty), + armors = (Dict.empty), + error = Nothing, + roster_id = "", + player_id = + ( + if (flags.user_id == "") + then "0" + else flags.user_id + ), + session_token = flags.token, + ui = (Struct.UI.default) + } + in + case maybe_roster_id of + Nothing -> + (invalidate + (Struct.Error.new + Struct.Error.Failure + "Could not find roster id." + ) + model + ) + + (Just id) -> {model | roster_id = id} add_character : Struct.Character.Type -> Type -> Type add_character char model = @@ -105,14 +122,6 @@ add_armor ar model = ) } -reset : Type -> Type -reset model = - {model | - help_request = Struct.HelpRequest.None, - error = Nothing, - ui = (Struct.UI.set_previous_action Nothing model.ui) - } - update_character : Int -> Struct.Character.Type -> Type -> Type update_character ix new_val model = {model | diff --git a/src/roster-editor/src/Struct/Omnimods.elm b/src/roster-editor/src/Struct/Omnimods.elm new file mode 100644 index 0000000..5876454 --- /dev/null +++ b/src/roster-editor/src/Struct/Omnimods.elm @@ -0,0 +1,180 @@ +module Struct.Omnimods exposing + ( + Type, + new, + merge, + apply_to_attributes, + apply_to_statistics, + get_attack_damage, + get_damage_sum, + get_attributes_mods, + get_statistics_mods, + get_attack_mods, + get_defense_mods, + decoder + ) + +-- Elm ------------------------------------------------------------------------- +import Dict + +import Json.Decode +import Json.Decode.Pipeline + +-- Map ------------------------------------------------------------------- +import Struct.Attributes +import Struct.Statistics +import Struct.DamageType + +-------------------------------------------------------------------------------- +-- TYPES ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +type alias Type = + { + attributes : (Dict.Dict String Int), + statistics : (Dict.Dict String Int), + attack : (Dict.Dict String Int), + defense : (Dict.Dict String Int) + } + +type alias GenericMod = + { + t : String, + v : Int + } +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +generic_mods_decoder : (Json.Decode.Decoder (Dict.Dict String Int)) +generic_mods_decoder = + (Json.Decode.map + (Dict.fromList) + (Json.Decode.list + (Json.Decode.map + (\gm -> (gm.t, gm.v)) + (Json.Decode.Pipeline.decode + GenericMod + |> (Json.Decode.Pipeline.required "t" Json.Decode.string) + |> (Json.Decode.Pipeline.required "v" Json.Decode.int) + ) + ) + ) + ) + +merge_mods : ( + (Dict.Dict String Int) -> + (Dict.Dict String Int) -> + (Dict.Dict String Int) + ) +merge_mods a_mods b_mods = + (Dict.merge + (Dict.insert) + (\t -> \v_a -> \v_b -> \r -> (Dict.insert t (v_a + v_b) r)) + (Dict.insert) + a_mods + b_mods + (Dict.empty) + ) + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +decoder : (Json.Decode.Decoder Type) +decoder = + (Json.Decode.Pipeline.decode + Type + |> (Json.Decode.Pipeline.required "attm" generic_mods_decoder) + |> (Json.Decode.Pipeline.required "stam" generic_mods_decoder) + |> (Json.Decode.Pipeline.required "atkm" generic_mods_decoder) + |> (Json.Decode.Pipeline.required "defm" generic_mods_decoder) + ) + +new : ( + (List (String, Int)) -> + (List (String, Int)) -> + (List (String, Int)) -> + (List (String, Int)) -> + Type + ) +new attribute_mods statistic_mods attack_mods defense_mods = + { + attributes = (Dict.fromList attribute_mods), + statistics = (Dict.fromList statistic_mods), + attack = (Dict.fromList attack_mods), + defense = (Dict.fromList defense_mods) + } + +merge : Type -> Type -> Type +merge omni_a omni_b = + { + attributes = (merge_mods omni_a.attributes omni_b.attributes), + statistics = (merge_mods omni_a.statistics omni_b.statistics), + attack = (merge_mods omni_a.attack omni_b.attack), + defense = (merge_mods omni_a.defense omni_b.defense) + } + +apply_to_attributes : Type -> Struct.Attributes.Type -> Struct.Attributes.Type +apply_to_attributes omnimods attributes = + (Dict.foldl + ((Struct.Attributes.decode_category) >> (Struct.Attributes.mod)) + attributes + omnimods.attributes + ) + +apply_to_statistics : Type -> Struct.Statistics.Type -> Struct.Statistics.Type +apply_to_statistics omnimods statistics = + (Dict.foldl + ((Struct.Statistics.decode_category) >> (Struct.Statistics.mod)) + statistics + omnimods.statistics + ) + +get_damage_sum : Type -> Int +get_damage_sum omni = + (Dict.foldl (\t -> \v -> \result -> (result + v)) 0 omni.attack) + +get_attack_damage : Float -> Type -> Type -> Int +get_attack_damage dmg_modifier atk_omni def_omni = + let + base_def = + ( + case + (Dict.get + (Struct.DamageType.encode Struct.DamageType.Base) + def_omni.defense + ) + of + (Just v) -> v + Nothing -> 0 + ) + in + (Dict.foldl + (\t -> \v -> \result -> + let + actual_atk = + (max + 0 + ( + (ceiling ((toFloat v) * dmg_modifier)) + - base_def + ) + ) + in + case (Dict.get t def_omni.defense) of + (Just def_v) -> (result + (max 0 (actual_atk - def_v))) + Nothing -> (result + actual_atk) + ) + 0 + atk_omni.attack + ) + +get_attributes_mods : Type -> (List (String, Int)) +get_attributes_mods omnimods = (Dict.toList omnimods.attributes) + +get_statistics_mods : Type -> (List (String, Int)) +get_statistics_mods omnimods = (Dict.toList omnimods.statistics) + +get_attack_mods : Type -> (List (String, Int)) +get_attack_mods omnimods = (Dict.toList omnimods.attack) + +get_defense_mods : Type -> (List (String, Int)) +get_defense_mods omnimods = (Dict.toList omnimods.defense) diff --git a/src/character/src/Struct/ServerReply.elm b/src/roster-editor/src/Struct/ServerReply.elm index 87325a5..50968f6 100644 --- a/src/character/src/Struct/ServerReply.elm +++ b/src/roster-editor/src/Struct/ServerReply.elm @@ -2,12 +2,9 @@ module Struct.ServerReply exposing (Type(..)) -- Elm ------------------------------------------------------------------------- --- Map ------------------------------------------------------------------- +-- Character ------------------------------------------------------------------- import Struct.Armor -import Struct.Map import Struct.Character -import Struct.Tile -import Struct.TurnResult import Struct.Weapon -------------------------------------------------------------------------------- @@ -16,13 +13,10 @@ import Struct.Weapon type Type = Okay + | Disconnected | AddArmor Struct.Armor.Type | AddWeapon Struct.Weapon.Type | AddCharacter (Struct.Character.Type, Int, Int, Int) - | AddTile Struct.Tile.Type - | SetMap Struct.Map.Type - | TurnResults (List Struct.TurnResult.Type) - | SetTimeline (List Struct.TurnResult.Type) -------------------------------------------------------------------------------- -- LOCAL ----------------------------------------------------------------------- diff --git a/src/roster-editor/src/Struct/Statistics.elm b/src/roster-editor/src/Struct/Statistics.elm new file mode 100644 index 0000000..f676648 --- /dev/null +++ b/src/roster-editor/src/Struct/Statistics.elm @@ -0,0 +1,210 @@ +module Struct.Statistics exposing + ( + Type, + Category(..), + get_movement_points, + get_max_health, + get_dodges, + get_parries, + get_accuracy, + get_double_hits, + get_critical_hits, + get_damage_modifier, + decode_category, + mod, + new_raw + ) + +-- Elm ------------------------------------------------------------------------- +import List + +-- Battle ---------------------------------------------------------------------- +import Struct.Attributes + +-------------------------------------------------------------------------------- +-- TYPES ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +type Category = + MovementPoints + | MaxHealth + | Dodges + | Parries + | Accuracy + | DoubleHits + | CriticalHits + +type alias Type = + { + movement_points : Int, + max_health : Int, + dodges : Int, + parries : Int, + accuracy : Int, + double_hits : Int, + critical_hits : Int, + damage_modifier : Float + } + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +average : (List Int) -> Float +average l = ((toFloat (List.sum l)) / (toFloat (List.length l))) + +float_to_int : Float -> Int +float_to_int f = + (ceiling f) + +gentle_squared_growth : Int -> Int +gentle_squared_growth v = (float_to_int (((toFloat v)^1.8)/20.0)) + +gentle_squared_growth_f : Float -> Int +gentle_squared_growth_f v = (float_to_int ((v^1.8)/20.0)) + +sudden_squared_growth : Int -> Int +sudden_squared_growth v = (float_to_int (((toFloat v)^2.5)/1000.0)) + +sudden_squared_growth_f : Float -> Int +sudden_squared_growth_f v = (float_to_int ((v^2.5)/1000.0)) + +sudden_exp_growth : Int -> Int +sudden_exp_growth v = (float_to_int (4.0^((toFloat v)/25.0))) + +sudden_exp_growth_f : Float -> Int +sudden_exp_growth_f f = (float_to_int (4.0^(f/25.0))) + +damage_base_mod : Float -> Float +damage_base_mod str = ((((str + 10) * 4)^1.5)/3000.0) + +make_movement_points_safe : Int -> Int +make_movement_points_safe val = (clamp 0 200 val) + +make_max_health_safe : Int -> Int +make_max_health_safe val = (max 1 val) + +make_dodges_safe : Int -> Int +make_dodges_safe val = (clamp 0 100 val) + +make_parries_safe : Int -> Int +make_parries_safe val = (clamp 0 75 val) + +make_accuracy_safe : Int -> Int +make_accuracy_safe val = (clamp 0 100 val) + +make_double_hits_safe : Int -> Int +make_double_hits_safe val = (clamp 0 100 val) + +make_critical_hits_safe : Int -> Int +make_critical_hits_safe val = (clamp 0 100 val) + +mod_movement_points : Int -> Type -> Type +mod_movement_points v t = + {t | + movement_points = (make_movement_points_safe (t.movement_points + v)) + } + +mod_max_health : Int -> Type -> Type +mod_max_health v t = + {t | + max_health = (make_max_health_safe (t.max_health + v)) + } + +mod_dodges : Int -> Type -> Type +mod_dodges v t = {t | dodges = (make_dodges_safe (t.dodges + v))} + +mod_parries : Int -> Type -> Type +mod_parries v t = {t | parries = (make_parries_safe (t.parries + v))} + +mod_accuracy : Int -> Type -> Type +mod_accuracy v t = {t | accuracy = (make_accuracy_safe (t.accuracy + v))} + +mod_double_hits : Int -> Type -> Type +mod_double_hits v t = + {t | + double_hits = (make_double_hits_safe (t.double_hits + v)) + } + +mod_critical_hits : Int -> Type -> Type +mod_critical_hits v t = + {t | + critical_hits = (make_critical_hits_safe (t.critical_hits + v)) + } + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +get_movement_points : Type -> Int +get_movement_points t = t.movement_points + +get_max_health : Type -> Int +get_max_health t = t.max_health + +get_dodges : Type -> Int +get_dodges t = t.dodges + +get_parries : Type -> Int +get_parries t = t.parries + +get_accuracy : Type -> Int +get_accuracy t = t.accuracy + +get_double_hits : Type -> Int +get_double_hits t = t.double_hits + +get_critical_hits : Type -> Int +get_critical_hits t = t.critical_hits + +get_damage_modifier : Type -> Float +get_damage_modifier t = t.damage_modifier + +mod : Category -> Int -> Type -> Type +mod cat v t = + case cat of + MaxHealth -> (mod_max_health v t) + MovementPoints -> (mod_movement_points v t) + Dodges -> (mod_dodges v t) + Parries -> (mod_parries v t) + Accuracy -> (mod_accuracy v t) + DoubleHits -> (mod_double_hits v t) + CriticalHits -> (mod_critical_hits v t) + +new_raw : (Struct.Attributes.Type -> Type) +new_raw att = + let + constitution = (Struct.Attributes.get_constitution att) + dexterity = (Struct.Attributes.get_dexterity att) + intelligence = (Struct.Attributes.get_intelligence att) + mind = (Struct.Attributes.get_mind att) + speed = (Struct.Attributes.get_speed att) + strength = (Struct.Attributes.get_strength att) + in + { + movement_points = + (gentle_squared_growth_f + (average [mind, constitution, constitution, speed, speed, speed]) + ), + max_health = + (gentle_squared_growth_f + (average [constitution, constitution, constitution, mind]) + ), + dodges = (sudden_exp_growth_f (average [dexterity, mind, speed])), + parries = + (sudden_exp_growth_f + (average [dexterity, intelligence, speed, strength]) + ), + accuracy = (sudden_squared_growth dexterity), + double_hits = (sudden_squared_growth_f (average [mind, speed])), + critical_hits = (sudden_squared_growth intelligence), + damage_modifier = (damage_base_mod (toFloat strength)) + } + +decode_category : String -> Category +decode_category str = + case str of + "mheal" -> MaxHealth + "mpts" -> MovementPoints + "dodg" -> Dodges + "pary" -> Parries + "accu" -> Accuracy + "dhit" -> DoubleHits + _ -> CriticalHits diff --git a/src/roster-editor/src/Struct/UI.elm b/src/roster-editor/src/Struct/UI.elm new file mode 100644 index 0000000..2831bc0 --- /dev/null +++ b/src/roster-editor/src/Struct/UI.elm @@ -0,0 +1,52 @@ +module Struct.UI exposing + ( + Type, + Tab(..), + default, + -- Tab + get_displayed_tab, + set_displayed_tab, + reset_displayed_tab + ) + +-- Elm ------------------------------------------------------------------------- + +-- Roster Editor --------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- TYPES ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +type Tab = + CharacterSelectionTab + | PortraitSelectionTab +-- | AccessorySelectionTab + | WeaponSelectionTab + | GlyphManagementTab + +type alias Type = + { + displayed_tab : Tab + } + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +default : Type +default = + { + displayed_tab = CharacterSelectionTab, + } + +-- Tab ------------------------------------------------------------------------- +get_displayed_tab : Type -> Tab +get_displayed_tab ui = ui.displayed_tab + +set_displayed_tab : Tab -> Type -> Type +set_displayed_tab tab ui = {ui | displayed_tab = tab} + +reset_displayed_tab : Type -> Type +reset_displayed_tab ui = {ui | displayed_tab = CharacterSelectionTab} diff --git a/src/roster-editor/src/Struct/Weapon.elm b/src/roster-editor/src/Struct/Weapon.elm new file mode 100644 index 0000000..2035fe4 --- /dev/null +++ b/src/roster-editor/src/Struct/Weapon.elm @@ -0,0 +1,99 @@ +module Struct.Weapon exposing + ( + Type, + Ref, + new, + get_id, + get_name, + get_attack_range, + get_defense_range, + get_omnimods, + get_damage_sum, + decoder, + none + ) + +-- Elm ------------------------------------------------------------------------- +import Json.Decode +import Json.Decode.Pipeline + +-- Map ------------------------------------------------------------------- +import Struct.Omnimods + +-------------------------------------------------------------------------------- +-- TYPES ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +type alias PartiallyDecoded = + { + id : Int, + nam : String, + rmi : Int, + rma : Int, + omni : String + } + +type alias Type = + { + id : Int, + name : String, + def_range : Int, + atk_range : Int, + omnimods : Struct.Omnimods.Type, + damage_sum : Int + } + +type alias Ref = Int + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +new : Int -> String -> Int -> Int -> Struct.Omnimods.Type -> Type +new id name range_min range_max omnimods = + { + id = id, + name = name, + def_range = range_min, + atk_range = range_max, + omnimods = omnimods, + damage_sum = (Struct.Omnimods.get_damage_sum omnimods) + } + +get_id : Type -> Int +get_id wp = wp.id + +get_name : Type -> String +get_name wp = wp.name + +get_attack_range : Type -> Int +get_attack_range wp = wp.atk_range + +get_defense_range : Type -> Int +get_defense_range wp = wp.def_range + +get_omnimods : Type -> Struct.Omnimods.Type +get_omnimods wp = wp.omnimods + +get_damage_sum : Type -> Int +get_damage_sum wp = wp.damage_sum + +decoder : (Json.Decode.Decoder Type) +decoder = + (Json.Decode.map + (\e -> {e | damage_sum = (Struct.Omnimods.get_damage_sum e.omnimods)}) + (Json.Decode.Pipeline.decode + Type + |> (Json.Decode.Pipeline.required "id" Json.Decode.int) + |> (Json.Decode.Pipeline.required "nam" Json.Decode.string) + |> (Json.Decode.Pipeline.required "rmi" Json.Decode.int) + |> (Json.Decode.Pipeline.required "rma" Json.Decode.int) + |> (Json.Decode.Pipeline.required "omni" Struct.Omnimods.decoder) + |> (Json.Decode.Pipeline.hardcoded 0) + ) + ) + +none : Type +none = (new 0 "None" 0 0 (Struct.Omnimods.new [] [] [] [])) diff --git a/src/character/src/Struct/WeaponSet.elm b/src/roster-editor/src/Struct/WeaponSet.elm index de96daf..de96daf 100644 --- a/src/character/src/Struct/WeaponSet.elm +++ b/src/roster-editor/src/Struct/WeaponSet.elm diff --git a/src/character/src/Update/DisplayCharacterInfo.elm b/src/roster-editor/src/Update/DisplayCharacterInfo.elm index e482e2f..e482e2f 100644 --- a/src/character/src/Update/DisplayCharacterInfo.elm +++ b/src/roster-editor/src/Update/DisplayCharacterInfo.elm diff --git a/src/roster-editor/src/Update/GoToMainMenu.elm b/src/roster-editor/src/Update/GoToMainMenu.elm new file mode 100644 index 0000000..f2ec989 --- /dev/null +++ b/src/roster-editor/src/Update/GoToMainMenu.elm @@ -0,0 +1,24 @@ +module Update.GoToMainMenu exposing (apply_to) +-- Elm ------------------------------------------------------------------------- + +-- Battle ---------------------------------------------------------------------- +import Action.Ports + +import Constants.IO + +import Struct.Model +import Struct.Event + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +apply_to : Struct.Model.Type -> (Struct.Model.Type, (Cmd Struct.Event.Type)) +apply_to model = + ( + model, + (Action.Ports.go_to (Constants.IO.base_url ++"/main-menu/")) + ) diff --git a/src/roster-editor/src/Update/HandleServerReply.elm b/src/roster-editor/src/Update/HandleServerReply.elm new file mode 100644 index 0000000..22261da --- /dev/null +++ b/src/roster-editor/src/Update/HandleServerReply.elm @@ -0,0 +1,174 @@ +module Update.HandleServerReply exposing (apply_to) + +-- Elm ------------------------------------------------------------------------- +import Array + +import Delay + +import Dict + +import Http + +import Time + +-- Shared ---------------------------------------------------------------------- +import Action.Ports + +import Struct.Flags + +-- Roster Editor --------------------------------------------------------------- +import Constants.IO + +import Struct.Armor +import Struct.Character +import Struct.Error +import Struct.Event +import Struct.Model +import Struct.ServerReply +import Struct.UI +import Struct.Weapon + +-------------------------------------------------------------------------------- +-- TYPES ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +weapon_getter : Struct.Model.Type -> Struct.Weapon.Ref -> Struct.Weapon.Type +weapon_getter model ref = + case (Dict.get ref model.weapons) of + (Just w) -> w + Nothing -> Struct.Weapon.none + +armor_getter : Struct.Model.Type -> Struct.Armor.Ref -> Struct.Armor.Type +armor_getter model ref = + case (Dict.get ref model.armors) of + (Just w) -> w + Nothing -> Struct.Armor.none + +----------- + +disconnected : ( + (Struct.Model.Type, (List (Cmd Struct.Event.Type))) -> + (Struct.Model.Type, (List (Cmd Struct.Event.Type))) + ) +disconnected current_state = + let (model, cmds) = current_state in + ( + model, + [ + (Action.Ports.go_to + ( + Constants.IO.base_url + ++ "/login/?action=disconnect&goto=" + ++ + (Http.encodeUri + ( + "/roster-editor/?" + ++ (Struct.Flags.get_params_as_url model.flags) + ) + ) + ) + ) + ] + ) + +add_armor : ( + Struct.Armor.Type -> + (Struct.Model.Type, (List (Cmd Struct.Event.Type))) -> + (Struct.Model.Type, (List (Cmd Struct.Event.Type))) + ) +add_armor ar current_state = + let (model, cmds) = current_state in + ((Struct.Model.add_armor ar model), cmds) + +add_weapon : ( + Struct.Weapon.Type -> + (Struct.Model.Type, (List (Cmd Struct.Event.Type))) -> + (Struct.Model.Type, (List (Cmd Struct.Event.Type))) + ) +add_weapon wp current_state = + let (model, cmds) = current_state in + ((Struct.Model.add_weapon wp model), cmds) + +add_character : ( + (Struct.Character.Type, Int, Int, Int) -> + (Struct.Model.Type, (List (Cmd Struct.Event.Type))) -> + (Struct.Model.Type, (List (Cmd Struct.Event.Type))) + ) +add_character char_and_refs current_state = + let + (model, cmds) = current_state + (char, awp_ref, swp_ref, ar_ref) = char_and_refs + awp = (weapon_getter model awp_ref) + swp = (weapon_getter model swp_ref) + ar = (armor_getter model ar_ref) + in + ( + (Struct.Model.add_character + (Struct.Character.fill_missing_equipment_and_omnimods + (Struct.Model.tile_omnimods_fun model) + awp + swp + ar + char + ) + model + ), + cmds + ) + +apply_command : ( + Struct.ServerReply.Type -> + (Struct.Model.Type, (List (Cmd Struct.Event.Type))) -> + (Struct.Model.Type, (List (Cmd Struct.Event.Type))) + ) +apply_command command current_state = + case command of + Struct.ServerReply.Disconnected -> (disconnected current_state) + + (Struct.ServerReply.AddWeapon wp) -> + (add_weapon wp current_state) + + (Struct.ServerReply.AddArmor ar) -> + (add_armor ar current_state) + + (Struct.ServerReply.AddCharacter char) -> + (add_character char current_state) + + Struct.ServerReply.Okay -> current_state + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +apply_to : ( + Struct.Model.Type -> + (Result Http.Error (List Struct.ServerReply.Type)) -> + (Struct.Model.Type, (Cmd Struct.Event.Type)) + ) +apply_to model query_result = + case query_result of + (Result.Err error) -> + ( + (Struct.Model.invalidate + (Struct.Error.new Struct.Error.Networking (toString error)) + model + ), + Cmd.none + ) + + (Result.Ok commands) -> + let + (new_model, elm_commands) = + (List.foldl (apply_command) (model, [Cmd.none]) commands) + in + ( + new_model, + ( + case elm_commands of + [] -> Cmd.none + [cmd] -> cmd + _ -> (Cmd.batch elm_commands) + ) + ) diff --git a/src/character/src/Update/SelectCharacter.elm b/src/roster-editor/src/Update/SelectCharacter.elm index 1137435..169046c 100644 --- a/src/character/src/Update/SelectCharacter.elm +++ b/src/roster-editor/src/Update/SelectCharacter.elm @@ -41,8 +41,8 @@ get_character_navigator model char = (Struct.Statistics.get_movement_points (Struct.Character.get_statistics char) ) - (Struct.Weapon.get_attack_range weapon) (Struct.Weapon.get_defense_range weapon) + (Struct.Weapon.get_attack_range weapon) (Struct.Map.get_movement_cost_function model.map (Struct.Character.get_location char) diff --git a/src/character/src/Update/SelectTab.elm b/src/roster-editor/src/Update/SelectTab.elm index d15a463..d15a463 100644 --- a/src/character/src/Update/SelectTab.elm +++ b/src/roster-editor/src/Update/SelectTab.elm diff --git a/src/character/src/Update/SendLoadRosterRequest.elm b/src/roster-editor/src/Update/SendLoadRosterRequest.elm index b7b5f11..2bbe9da 100644 --- a/src/character/src/Update/SendLoadRosterRequest.elm +++ b/src/roster-editor/src/Update/SendLoadRosterRequest.elm @@ -1,7 +1,7 @@ module Update.SendLoadRosterRequest exposing (apply_to) -- Elm ------------------------------------------------------------------------- --- Map ------------------------------------------------------------------- +-- Roster Editor --------------------------------------------------------------- import Comm.LoadRoster import Struct.Event @@ -14,13 +14,10 @@ import Struct.Model -------------------------------------------------------------------------------- -- EXPORTED -------------------------------------------------------------------- -------------------------------------------------------------------------------- -apply_to : ( - Struct.Model.Type -> - (Struct.Model.Type, (Cmd Struct.Event.Type)) - ) +apply_to : Struct.Model.Type -> (Struct.Model.Type, (Cmd Struct.Event.Type)) apply_to model = ( - (Struct.Model.reset model), + model, (case (Comm.LoadRoster.try model) of (Just cmd) -> cmd Nothing -> Cmd.none diff --git a/src/character/src/Update/SetRequestedHelp.elm b/src/roster-editor/src/Update/SetRequestedHelp.elm index dfc58db..dfc58db 100644 --- a/src/character/src/Update/SetRequestedHelp.elm +++ b/src/roster-editor/src/Update/SetRequestedHelp.elm diff --git a/src/character/src/View/Character.elm b/src/roster-editor/src/View/Character.elm index d33feb1..d33feb1 100644 --- a/src/character/src/View/Character.elm +++ b/src/roster-editor/src/View/Character.elm diff --git a/src/roster-editor/src/View/CharacterIcon.elm b/src/roster-editor/src/View/CharacterIcon.elm new file mode 100644 index 0000000..aaf7cb2 --- /dev/null +++ b/src/roster-editor/src/View/CharacterIcon.elm @@ -0,0 +1,218 @@ +module View.Map.Character exposing (get_html) + +-- Elm ------------------------------------------------------------------------- +import Html +import Html.Attributes +import Html.Events + +-- Map ------------------------------------------------------------------ +import Constants.UI + +import Util.Html + +import Struct.Character +import Struct.CharacterTurn +import Struct.Event +import Struct.Model +import Struct.TurnResult +import Struct.TurnResultAnimator +import Struct.UI + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +get_animation_class : ( + Struct.Model.Type -> + Struct.Character.Type -> + (Html.Attribute Struct.Event.Type) + ) +get_animation_class model char = + case model.animator of + Nothing -> (Html.Attributes.class "") + (Just animator) -> + case (Struct.TurnResultAnimator.get_current_animation animator) of + (Struct.TurnResultAnimator.Focus char_index) -> + if ((Struct.Character.get_index char) /= char_index) + then + (Html.Attributes.class "") + else + (Html.Attributes.class "battle-character-selected") + + (Struct.TurnResultAnimator.TurnResult current_action) -> + if + ( + (Struct.TurnResult.get_actor_index current_action) + /= + (Struct.Character.get_index char) + ) + then + (Html.Attributes.class "") + else + case current_action of + (Struct.TurnResult.Moved _) -> + (Html.Attributes.class + "battle-animated-character-icon" + ) + + _ -> (Html.Attributes.class "") + _ -> (Html.Attributes.class "") + +get_activation_level_class : ( + Struct.Character.Type -> + (Html.Attribute Struct.Event.Type) + ) +get_activation_level_class char = + if (Struct.Character.is_enabled char) + then + (Html.Attributes.class "battle-character-icon-enabled") + else + (Html.Attributes.class "battle-character-icon-disabled") + +get_alliance_class : ( + Struct.Model.Type -> + Struct.Character.Type -> + (Html.Attribute Struct.Event.Type) + ) +get_alliance_class model char = + if ((Struct.Character.get_player_ix char) == model.player_ix) + then + (Html.Attributes.class "battle-character-ally") + else + (Html.Attributes.class "battle-character-enemy") + +get_position_style : ( + Struct.Character.Type -> + (Html.Attribute Struct.Event.Type) + ) +get_position_style char = + let char_loc = (Struct.Character.get_location char) in + (Html.Attributes.style + [ + ("top", ((toString (char_loc.y * Constants.UI.tile_size)) ++ "px")), + ("left", ((toString (char_loc.x * Constants.UI.tile_size)) ++ "px")) + ] + ) + +get_focus_class : ( + Struct.Model.Type -> + Struct.Character.Type -> + (Html.Attribute Struct.Event.Type) + ) +get_focus_class model char = + if + ( + (Struct.UI.get_previous_action model.ui) + == + (Just (Struct.UI.SelectedCharacter (Struct.Character.get_index char))) + ) + then + (Html.Attributes.class "battle-character-selected") + else + if + ( + (Struct.CharacterTurn.try_getting_target model.char_turn) + == + (Just (Struct.Character.get_index char)) + ) + then + (Html.Attributes.class "battle-character-targeted") + else + (Html.Attributes.class "") + +get_body_html : Struct.Character.Type -> (Html.Html Struct.Event.Type) +get_body_html char = + (Html.div + [ + (Html.Attributes.class "battle-character-icon-body"), + (Html.Attributes.class + ( + "asset-character-team-body-" + ++ (toString (Struct.Character.get_player_ix char)) + ) + ) + ] + [ + ] + ) + +get_head_html : Struct.Character.Type -> (Html.Html Struct.Event.Type) +get_head_html char = + (Html.div + [ + (Html.Attributes.class "battle-character-icon-head"), + (Html.Attributes.class + ("asset-character-icon-" ++ (Struct.Character.get_icon_id char)) + ) + ] + [ + ] + ) + +get_banner_html : Struct.Character.Type -> (Html.Html Struct.Event.Type) +get_banner_html char = + case (Struct.Character.get_rank char) of + Struct.Character.Commander -> + (Html.div + [ + (Html.Attributes.class "battle-character-icon-banner"), + (Html.Attributes.class "asset-character-icon-commander-banner") + ] + [ + ] + ) + + Struct.Character.Target -> + (Html.div + [ + (Html.Attributes.class "battle-character-icon-banner"), + (Html.Attributes.class "asset-character-icon-target-banner") + ] + [ + ] + ) + + _ -> (Util.Html.nothing) + +get_actual_html : ( + Struct.Model.Type -> + Struct.Character.Type -> + (Html.Html Struct.Event.Type) + ) +get_actual_html model char = + (Html.div + [ + (Html.Attributes.class "battle-tiled"), + (Html.Attributes.class "battle-character-icon"), + (get_animation_class model char), + (get_activation_level_class char), + (get_alliance_class model char), + (get_position_style char), + (get_focus_class model char), + (Html.Attributes.class "clickable"), + (Html.Events.onClick + (Struct.Event.CharacterSelected + (Struct.Character.get_index char) + ) + ) + ] + [ + (get_body_html char), + (get_head_html char), + (get_banner_html char) + ] + ) + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +get_html : ( + Struct.Model.Type -> + Struct.Character.Type -> + (Html.Html Struct.Event.Type) + ) +get_html model char = + if (Struct.Character.is_alive char) + then + (get_actual_html model char) + else + (Util.Html.nothing) diff --git a/src/character/src/View/Controlled.elm b/src/roster-editor/src/View/Controlled.elm index e0e20bf..d0c33a5 100644 --- a/src/character/src/View/Controlled.elm +++ b/src/roster-editor/src/View/Controlled.elm @@ -47,6 +47,13 @@ abort_button = [ (Html.text "Abort") ] ) +undo_button : (Html.Html Struct.Event.Type) +undo_button = + (Html.button + [ (Html.Events.onClick Struct.Event.UndoActionRequest) ] + [ (Html.text "Undo") ] + ) + end_turn_button : String -> (Html.Html Struct.Event.Type) end_turn_button suffix = (Html.button @@ -57,11 +64,19 @@ end_turn_button suffix = [ (Html.text ("End Turn" ++ suffix)) ] ) -inventory_button : (Html.Html Struct.Event.Type) -inventory_button = +inventory_button : Bool -> (Html.Html Struct.Event.Type) +inventory_button go_prefix = (Html.button [ (Html.Events.onClick Struct.Event.WeaponSwitchRequest) ] - [ (Html.text "Switch Weapon") ] + [ + (Html.text + ( + if (go_prefix) + then ("Go & Switch Weapon") + else ("Switch Weapon") + ) + ) + ] ) get_available_actions : ( @@ -73,20 +88,30 @@ get_available_actions char_turn = Struct.CharacterTurn.SelectedCharacter -> [ (attack_button char_turn), - (inventory_button), + (inventory_button (has_a_path char_turn)), (end_turn_button " Doing Nothing"), (abort_button) ] Struct.CharacterTurn.MovedCharacter -> [ - (end_turn_button " Without Attacking"), + (inventory_button False), + (end_turn_button " by Moving"), + (undo_button), (abort_button) ] Struct.CharacterTurn.ChoseTarget -> [ - (end_turn_button " By Attacking"), + (end_turn_button " by Attacking"), + (undo_button), + (abort_button) + ] + + Struct.CharacterTurn.SwitchedWeapons -> + [ + (end_turn_button " by Switching Weapons"), + (undo_button), (abort_button) ] diff --git a/src/character/src/View/Controlled/CharacterCard.elm b/src/roster-editor/src/View/Controlled/CharacterCard.elm index 0e29502..ac56cbb 100644 --- a/src/character/src/View/Controlled/CharacterCard.elm +++ b/src/roster-editor/src/View/Controlled/CharacterCard.elm @@ -6,18 +6,20 @@ module View.Controlled.CharacterCard exposing ) -- Elm ------------------------------------------------------------------------- +import List + import Html import Html.Attributes import Html.Events --- Map ------------------------------------------------------------------- +-- Battle ---------------------------------------------------------------------- import Struct.Armor -import Struct.Attributes import Struct.Character import Struct.CharacterTurn import Struct.Event import Struct.HelpRequest import Struct.Navigator +import Struct.Omnimods import Struct.Statistics import Struct.Weapon import Struct.WeaponSet @@ -192,20 +194,19 @@ get_movement_bar char_turn char = Nothing -> (get_inactive_movement_bar char) -get_weapon_details : ( - Struct.Statistics.Type -> +get_weapon_field_header : ( + Float -> Struct.Weapon.Type -> (Html.Html Struct.Event.Type) ) -get_weapon_details stats weapon = +get_weapon_field_header damage_multiplier weapon = (Html.div [ - (Html.Attributes.class "battle-character-card-weapon") + (Html.Attributes.class "battle-character-card-header") ] [ (Html.div [ - (Html.Attributes.class "battle-character-card-weapon-name") ] [ (Html.text (Struct.Weapon.get_name weapon)) @@ -213,27 +214,25 @@ get_weapon_details stats weapon = ), (Html.div [ - (Html.Attributes.class "battle-character-card-weapon-name") ] [ (Html.text ( - "[" - ++ (toString (Struct.Statistics.get_damage_min stats)) - ++ ", " - ++ (toString (Struct.Statistics.get_damage_max stats)) - ++ "] " - ++ - (case (Struct.Weapon.get_damage_type weapon) of - Struct.Weapon.Slash -> "slashing " - Struct.Weapon.Pierce -> "piercing " - Struct.Weapon.Blunt -> "bludgeoning " - ) + "~" ++ - (case (Struct.Weapon.get_range_type weapon) of - Struct.Weapon.Ranged -> "ranged" - Struct.Weapon.Melee -> "melee" + (toString + (ceiling + ( + (toFloat (Struct.Weapon.get_damage_sum weapon)) + * damage_multiplier + ) + ) ) + ++ " dmg @ [" + ++ (toString (Struct.Weapon.get_defense_range weapon)) + ++ ", " + ++ (toString (Struct.Weapon.get_attack_range weapon)) + ++ "]" ) ) ] @@ -241,53 +240,88 @@ get_weapon_details stats weapon = ] ) -get_weapon_summary : ( +get_mod_html : (String, Int) -> (Html.Html Struct.Event.Type) +get_mod_html mod = + let + (category, value) = mod + in + (Html.div + [ + (Html.Attributes.class "battle-info-card-mod") + ] + [ + (Html.text + (category ++ ": " ++ (toString value)) + ) + ] + ) + +get_multiplied_mod_html : Float -> (String, Int) -> (Html.Html Struct.Event.Type) +get_multiplied_mod_html multiplier mod = + let + (category, value) = mod + in + (Html.div + [ + (Html.Attributes.class "battle-character-card-mod") + ] + [ + (Html.text + ( + category + ++ ": " + ++ (toString (ceiling ((toFloat value) * multiplier))) + ) + ) + ] + ) + +get_weapon_details : ( + Struct.Omnimods.Type -> + Float -> Struct.Weapon.Type -> (Html.Html Struct.Event.Type) ) -get_weapon_summary weapon = +get_weapon_details omnimods damage_multiplier weapon = (Html.div [ - (Html.Attributes.class "battle-character-card-weapon-summary") + (Html.Attributes.class "battle-character-card-weapon") ] [ + (get_weapon_field_header damage_multiplier weapon), (Html.div [ - (Html.Attributes.class "battle-character-card-weapon-name") - ] - [ - (Html.text (Struct.Weapon.get_name weapon)) - ] - ), - (Html.div - [ - (Html.Attributes.class "battle-character-card-weapon-name") - ] - [ - (Html.text - ( - (case (Struct.Weapon.get_damage_type weapon) of - Struct.Weapon.Slash -> "Slashing " - Struct.Weapon.Pierce -> "Piercing " - Struct.Weapon.Blunt -> "Bludgeoning " - ) - ++ - (case (Struct.Weapon.get_range_type weapon) of - Struct.Weapon.Ranged -> "ranged" - Struct.Weapon.Melee -> "melee" - ) - ) - ) + (Html.Attributes.class "battle-info-card-omnimods-listing") ] + (List.map + (get_multiplied_mod_html damage_multiplier) + (Struct.Omnimods.get_attack_mods omnimods) + ) ) ] ) +get_weapon_summary : ( + Float -> + Struct.Weapon.Type -> + (Html.Html Struct.Event.Type) + ) +get_weapon_summary damage_multiplier weapon = + (Html.div + [ + (Html.Attributes.class "battle-character-card-weapon-summary") + ] + [ + (get_weapon_field_header damage_multiplier weapon) + ] + ) + get_armor_details : ( + Struct.Omnimods.Type -> Struct.Armor.Type -> (Html.Html Struct.Event.Type) ) -get_armor_details armor = +get_armor_details omnimods armor = (Html.div [ (Html.Attributes.class "battle-character-card-armor") @@ -303,25 +337,12 @@ get_armor_details armor = ), (Html.div [ - (Html.Attributes.class "battle-character-card-armor-stats") - ] - [ - (stat_name "Slash"), - (stat_val - (Struct.Armor.get_resistance_to Struct.Weapon.Slash armor) - False - ), - (stat_name "Pierc."), - (stat_val - (Struct.Armor.get_resistance_to Struct.Weapon.Pierce armor) - False - ), - (stat_name "Blund."), - (stat_val - (Struct.Armor.get_resistance_to Struct.Weapon.Blunt armor) - False - ) + (Html.Attributes.class "battle-info-card-omnimods-listing") ] + (List.map + (get_mod_html) + (Struct.Omnimods.get_defense_mods omnimods) + ) ) ] ) @@ -360,123 +381,28 @@ stat_val val perc = ] ) -att_dual_val : Int -> Int -> (Html.Html Struct.Event.Type) -att_dual_val base active = - let - diff = (active - base) - in - (Html.div - [ - (Html.Attributes.class "battle-character-card-att-dual-val") - ] - [ - (Html.text - ( - (toString base) - ++ " (" - ++ - ( - if (diff > 0) - then - ("+" ++ (toString diff)) - else - if (diff == 0) - then - "~" - else - (toString diff) - ) - ++ ")" - ) - ) - ] - ) - get_relevant_stats : ( - Struct.Character.Type -> - Struct.Weapon.Type -> + Struct.Statistics.Type -> (Html.Html Struct.Event.Type) ) -get_relevant_stats char weapon = - let - stats = (Struct.Character.get_statistics char) - in - (Html.div - [ - (Html.Attributes.class "battle-character-card-stats") - ] - [ - (stat_name "Dodge"), - (stat_val (Struct.Statistics.get_dodges stats) True), - (stat_name "Parry"), - (stat_val - (case (Struct.Weapon.get_range_type weapon) of - Struct.Weapon.Ranged -> 0 - Struct.Weapon.Melee -> (Struct.Statistics.get_parries stats) - ) - True - ), - (stat_name "Accu."), - (stat_val (Struct.Statistics.get_accuracy stats) False), - (stat_name "2xHit"), - (stat_val (Struct.Statistics.get_double_hits stats) True), - (stat_name "Crit."), - (stat_val (Struct.Statistics.get_critical_hits stats) True) - ] - ) - -get_attributes : ( - Struct.Character.Type -> - Struct.Weapon.Type -> - Struct.Armor.Type -> - (Html.Html Struct.Event.Type) +get_relevant_stats stats = + (Html.div + [ + (Html.Attributes.class "battle-character-card-stats") + ] + [ + (stat_name "Dodge"), + (stat_val (Struct.Statistics.get_dodges stats) True), + (stat_name "Parry"), + (stat_val (Struct.Statistics.get_parries stats) True), + (stat_name "Accu."), + (stat_val (Struct.Statistics.get_accuracy stats) False), + (stat_name "2xHit"), + (stat_val (Struct.Statistics.get_double_hits stats) True), + (stat_name "Crit."), + (stat_val (Struct.Statistics.get_critical_hits stats) True) + ] ) -get_attributes char weapon armor = - let - base_atts = (Struct.Character.get_attributes char) - active_atts = - (Struct.Armor.apply_to_attributes - armor - (Struct.Weapon.apply_to_attributes weapon base_atts) - ) - in - (Html.div - [ - (Html.Attributes.class "battle-character-card-stats") - ] - [ - (stat_name "Con"), - (att_dual_val - (Struct.Attributes.get_constitution base_atts) - (Struct.Attributes.get_constitution active_atts) - ), - (stat_name "Dex"), - (att_dual_val - (Struct.Attributes.get_dexterity base_atts) - (Struct.Attributes.get_dexterity active_atts) - ), - (stat_name "Int"), - (att_dual_val - (Struct.Attributes.get_intelligence base_atts) - (Struct.Attributes.get_intelligence active_atts) - ), - (stat_name "Min"), - (att_dual_val - (Struct.Attributes.get_mind base_atts) - (Struct.Attributes.get_mind active_atts) - ), - (stat_name "Spe"), - (att_dual_val - (Struct.Attributes.get_speed base_atts) - (Struct.Attributes.get_speed active_atts) - ), - (stat_name "Str"), - (att_dual_val - (Struct.Attributes.get_strength base_atts) - (Struct.Attributes.get_strength active_atts) - ) - ] - ) -------------------------------------------------------------------------------- -- EXPORTED -------------------------------------------------------------------- @@ -529,7 +455,9 @@ get_summary_html char_turn player_ix char = weapon_set = (Struct.Character.get_weapons char) main_weapon = (Struct.WeaponSet.get_active_weapon weapon_set) char_statistics = (Struct.Character.get_statistics char) + damage_modifier = (Struct.Statistics.get_damage_modifier char_statistics) secondary_weapon = (Struct.WeaponSet.get_secondary_weapon weapon_set) + omnimods = (Struct.Character.get_current_omnimods char) in (Html.div [ @@ -556,10 +484,10 @@ get_summary_html char_turn player_ix char = (get_statuses char) ] ), - (get_weapon_details char_statistics main_weapon), - (get_armor_details (Struct.Character.get_armor char)), - (get_relevant_stats char main_weapon), - (get_weapon_summary secondary_weapon) + (get_weapon_details omnimods damage_modifier main_weapon), + (get_armor_details omnimods (Struct.Character.get_armor char)), + (get_relevant_stats char_statistics), + (get_weapon_summary damage_modifier secondary_weapon) ] ) @@ -573,8 +501,10 @@ get_full_html player_ix char = weapon_set = (Struct.Character.get_weapons char) main_weapon = (Struct.WeaponSet.get_active_weapon weapon_set) char_statistics = (Struct.Character.get_statistics char) + damage_modifier = (Struct.Statistics.get_damage_modifier char_statistics) secondary_weapon = (Struct.WeaponSet.get_secondary_weapon weapon_set) armor = (Struct.Character.get_armor char) + omnimods = (Struct.Character.get_current_omnimods char) in (Html.div [ @@ -602,10 +532,9 @@ get_full_html player_ix char = (get_statuses char) ] ), - (get_weapon_details char_statistics main_weapon), - (get_armor_details armor), - (get_relevant_stats char main_weapon), - (get_weapon_summary secondary_weapon), - (get_attributes char main_weapon armor) + (get_weapon_details omnimods damage_modifier main_weapon), + (get_armor_details omnimods armor), + (get_relevant_stats char_statistics), + (get_weapon_summary damage_modifier secondary_weapon) ] ) diff --git a/src/character/src/View/Controlled/ManualControls.elm b/src/roster-editor/src/View/Controlled/ManualControls.elm index 1dceafb..1dceafb 100644 --- a/src/character/src/View/Controlled/ManualControls.elm +++ b/src/roster-editor/src/View/Controlled/ManualControls.elm diff --git a/src/character/src/View/Controlled/Targets.elm b/src/roster-editor/src/View/Controlled/Targets.elm index eee5a54..eee5a54 100644 --- a/src/character/src/View/Controlled/Targets.elm +++ b/src/roster-editor/src/View/Controlled/Targets.elm diff --git a/src/roster-editor/src/View/CurrentTab.elm b/src/roster-editor/src/View/CurrentTab.elm new file mode 100644 index 0000000..8a062a9 --- /dev/null +++ b/src/roster-editor/src/View/CurrentTab.elm @@ -0,0 +1,40 @@ +module View.CurrentTab exposing (get_html) + +-- Elm ------------------------------------------------------------------------- +import Html + +-- Roster Editor --------------------------------------------------------------- +import Struct.Event +import Struct.Model +import Struct.UI + +import View.CharacterSelection +import View.PortraitSelection +import View.WeaponSelection +import View.ArmorSelection +import View.GlyphManagement + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +get_html : Struct.Model.Type -> (Html.Html Struct.Event.Type) +get_html model = + case (Struct.UI.get_displayed_tab model.ui) of + Struct.UI.CharacterSelectionTab -> + (View.CharacterSelection.get_html model) + + Struct.UI.PortraitSelectionTab -> + (View.PortraitSelection.get_html model) + + Struct.UI.WeaponSelectionTab -> + (View.WeaponSelection.get_html model) + + Struct.UI.ArmorSelectionTab -> + (View.ArmorSelection.get_html model) + + Struct.UI.GlyphManagementTab -> + (View.GlyphManagement.get_html model) diff --git a/src/character/src/View/Gauge.elm b/src/roster-editor/src/View/Gauge.elm index cf89f3a..cf89f3a 100644 --- a/src/character/src/View/Gauge.elm +++ b/src/roster-editor/src/View/Gauge.elm diff --git a/src/character/src/View/MainMenu.elm b/src/roster-editor/src/View/MainMenu.elm index 9f3099b..96bf539 100644 --- a/src/character/src/View/MainMenu.elm +++ b/src/roster-editor/src/View/MainMenu.elm @@ -12,16 +12,20 @@ import Struct.UI -------------------------------------------------------------------------------- -- LOCAL ----------------------------------------------------------------------- -------------------------------------------------------------------------------- -get_menu_button_html : ( - Struct.UI.Tab -> - (Html.Html Struct.Event.Type) - ) +get_menu_button_html : Struct.UI.Tab -> (Html.Html Struct.Event.Type) get_menu_button_html tab = (Html.button [ (Html.Events.onClick (Struct.Event.TabSelected tab)) ] [ (Html.text (Struct.UI.to_string tab)) ] ) +get_main_menu_button_html : (Html.Html Struct.Event.Type) +get_main_menu_button_html = + (Html.button + [ (Html.Events.onClick Struct.Event.GoToMainMenu) ] + [ (Html.text "Main Menu") ] + ) + -------------------------------------------------------------------------------- -- EXPORTED -------------------------------------------------------------------- -------------------------------------------------------------------------------- @@ -31,8 +35,12 @@ get_html = [ (Html.Attributes.class "battle-main-menu") ] - (List.map - (get_menu_button_html) - (Struct.UI.get_all_tabs) + ( + (get_main_menu_button_html) + :: + (List.map + (get_menu_button_html) + (Struct.UI.get_all_tabs) + ) ) ) diff --git a/src/character/src/View/MessageBoard.elm b/src/roster-editor/src/View/MessageBoard.elm index 736f938..736f938 100644 --- a/src/character/src/View/MessageBoard.elm +++ b/src/roster-editor/src/View/MessageBoard.elm diff --git a/src/character/src/View/MessageBoard/Animator.elm b/src/roster-editor/src/View/MessageBoard/Animator.elm index 49bb83a..49bb83a 100644 --- a/src/character/src/View/MessageBoard/Animator.elm +++ b/src/roster-editor/src/View/MessageBoard/Animator.elm diff --git a/src/character/src/View/MessageBoard/Animator/Attack.elm b/src/roster-editor/src/View/MessageBoard/Animator/Attack.elm index 437a76d..437a76d 100644 --- a/src/character/src/View/MessageBoard/Animator/Attack.elm +++ b/src/roster-editor/src/View/MessageBoard/Animator/Attack.elm diff --git a/src/character/src/View/MessageBoard/Error.elm b/src/roster-editor/src/View/MessageBoard/Error.elm index 797d89f..797d89f 100644 --- a/src/character/src/View/MessageBoard/Error.elm +++ b/src/roster-editor/src/View/MessageBoard/Error.elm diff --git a/src/character/src/View/MessageBoard/Help.elm b/src/roster-editor/src/View/MessageBoard/Help.elm index 6c20bbc..6c20bbc 100644 --- a/src/character/src/View/MessageBoard/Help.elm +++ b/src/roster-editor/src/View/MessageBoard/Help.elm diff --git a/src/character/src/View/MessageBoard/Help/Guide.elm b/src/roster-editor/src/View/MessageBoard/Help/Guide.elm index 0a41e91..7268c12 100644 --- a/src/character/src/View/MessageBoard/Help/Guide.elm +++ b/src/roster-editor/src/View/MessageBoard/Help/Guide.elm @@ -41,12 +41,13 @@ get_selected_character_html_contents = get_moved_character_html_contents : (List (Html.Html Struct.Event.Type)) get_moved_character_html_contents = [ - (get_header_html "Selecting a Target"), + (get_header_html "Selecting an Action"), (Html.text ( - "You can now choose a target in range. Dashed tiles indicate" - ++ " where your character will not be able to defend themselves" - ++ " against counter attacks." + """You can now choose an action for this character. Either attack + a target in range by clicking twice on it, or switch weapons by using the menu + on the left. Dashes indicate tiles this character will be unable to defend + from. Crossed shields indicate the equivalent for the current selection.""" ) ) ] @@ -54,12 +55,27 @@ get_moved_character_html_contents = get_chose_target_html_contents : (List (Html.Html Struct.Event.Type)) get_chose_target_html_contents = [ - (get_header_html "Finalizing the Character's Turn"), + (get_header_html "End the Turn by an Attack"), (Html.text ( - "If you are satisfied with your choices, you can end this" - ++ " character's turn and see the results unfold. Otherwise, click" - ++ " on the abort button to undo it all." + """A target for the attack has been selected. If you are satisfied +with your choices, you can end this character's turn and see the results unfold. +Otherwise, click on the "Undo" button to change the action, or the "Abort" +button to start this turn over.""" + ) + ) + ] + +get_switched_weapons_html_contents : (List (Html.Html Struct.Event.Type)) +get_switched_weapons_html_contents = + [ + (get_header_html "End the Turn by Switching Weapons"), + (Html.text + ( + """The character will switch weapons. If you are satisfied +with your choices, you can end this character's turn and see the results unfold. +Otherwise, click on the "Undo" button to change the action, or the "Abort" +button to start this turn over.""" ) ) ] @@ -96,5 +112,8 @@ get_html_contents model = Struct.CharacterTurn.ChoseTarget -> (get_chose_target_html_contents) + Struct.CharacterTurn.SwitchedWeapons -> + (get_switched_weapons_html_contents) + _ -> (get_default_html_contents) diff --git a/src/character/src/View/MessageBoard/Help/Rank.elm b/src/roster-editor/src/View/MessageBoard/Help/Rank.elm index 4a01e75..4a01e75 100644 --- a/src/character/src/View/MessageBoard/Help/Rank.elm +++ b/src/roster-editor/src/View/MessageBoard/Help/Rank.elm diff --git a/src/character/src/View/SubMenu.elm b/src/roster-editor/src/View/SubMenu.elm index e661b9c..e661b9c 100644 --- a/src/character/src/View/SubMenu.elm +++ b/src/roster-editor/src/View/SubMenu.elm diff --git a/src/character/src/View/SubMenu/Characters.elm b/src/roster-editor/src/View/SubMenu/Characters.elm index 396dbee..396dbee 100644 --- a/src/character/src/View/SubMenu/Characters.elm +++ b/src/roster-editor/src/View/SubMenu/Characters.elm diff --git a/src/character/src/View/SubMenu/Settings.elm b/src/roster-editor/src/View/SubMenu/Settings.elm index e0ad4d7..e0ad4d7 100644 --- a/src/character/src/View/SubMenu/Settings.elm +++ b/src/roster-editor/src/View/SubMenu/Settings.elm diff --git a/src/character/src/View/SubMenu/Status.elm b/src/roster-editor/src/View/SubMenu/Status.elm index 485704e..485704e 100644 --- a/src/character/src/View/SubMenu/Status.elm +++ b/src/roster-editor/src/View/SubMenu/Status.elm diff --git a/src/character/src/View/SubMenu/Status/CharacterInfo.elm b/src/roster-editor/src/View/SubMenu/Status/CharacterInfo.elm index 814ce5f..814ce5f 100644 --- a/src/character/src/View/SubMenu/Status/CharacterInfo.elm +++ b/src/roster-editor/src/View/SubMenu/Status/CharacterInfo.elm diff --git a/src/character/src/View/SubMenu/Status/TileInfo.elm b/src/roster-editor/src/View/SubMenu/Status/TileInfo.elm index 920b5ce..cace444 100644 --- a/src/character/src/View/SubMenu/Status/TileInfo.elm +++ b/src/roster-editor/src/View/SubMenu/Status/TileInfo.elm @@ -6,12 +6,13 @@ import Dict import Html import Html.Attributes --- Struct.Map ------------------------------------------------------------------- +-- Battle ---------------------------------------------------------------------- import Constants.Movement import Struct.Map import Struct.Event import Struct.Location +import Struct.Omnimods import Struct.Model import Struct.Tile @@ -58,7 +59,7 @@ get_name model tile = ] ) -get_cost : (Struct.Tile.Instance -> (Html.Html Struct.Event.Type)) +get_cost : Struct.Tile.Instance -> (Html.Html Struct.Event.Type) get_cost tile = let cost = (Struct.Tile.get_instance_cost tile) @@ -79,7 +80,7 @@ get_cost tile = ] ) -get_location : (Struct.Tile.Instance -> (Html.Html Struct.Event.Type)) +get_location : Struct.Tile.Instance -> (Html.Html Struct.Event.Type) get_location tile = let tile_location = (Struct.Tile.get_location tile) @@ -102,6 +103,48 @@ get_location tile = ] ) +get_mod_html : (String, Int) -> (Html.Html Struct.Event.Type) +get_mod_html mod = + let + (category, value) = mod + in + (Html.div + [ + (Html.Attributes.class "battle-info-card-mod") + ] + [ + (Html.text + (category ++ ": " ++ (toString value)) + ) + ] + ) + +get_omnimods_listing : (List (String, Int)) -> (Html.Html Struct.Event.Type) +get_omnimods_listing mod_list = + (Html.div + [ + (Html.Attributes.class "battle-info-card-omnimods-listing") + ] + (List.map (get_mod_html) mod_list) + ) + +get_omnimods : Struct.Omnimods.Type -> (Html.Html Struct.Event.Type) +get_omnimods omnimods = + (Html.div + [ + (Html.Attributes.class "battle-info-card-omnimods") + ] + [ + (Html.text "Attribute Modifiers"), + (get_omnimods_listing (Struct.Omnimods.get_attributes_mods omnimods)), + (Html.text "Statistics Modifiers"), + (get_omnimods_listing (Struct.Omnimods.get_statistics_mods omnimods)), + (Html.text "Attack Modifiers"), + (get_omnimods_listing (Struct.Omnimods.get_attack_mods omnimods)), + (Html.text "Defense Modifiers"), + (get_omnimods_listing (Struct.Omnimods.get_defense_mods omnimods)) + ] + ) -------------------------------------------------------------------------------- -- EXPORTED -------------------------------------------------------------------- -------------------------------------------------------------------------------- @@ -130,7 +173,8 @@ get_html model loc = (get_location tile), (get_cost tile) ] - ) + ), + (get_omnimods ((Struct.Model.tile_omnimods_fun model) loc)) ] ) diff --git a/src/character/src/View/SubMenu/Timeline.elm b/src/roster-editor/src/View/SubMenu/Timeline.elm index 7fb1813..7fb1813 100644 --- a/src/character/src/View/SubMenu/Timeline.elm +++ b/src/roster-editor/src/View/SubMenu/Timeline.elm diff --git a/src/character/src/View/SubMenu/Timeline/Attack.elm b/src/roster-editor/src/View/SubMenu/Timeline/Attack.elm index 682540d..682540d 100644 --- a/src/character/src/View/SubMenu/Timeline/Attack.elm +++ b/src/roster-editor/src/View/SubMenu/Timeline/Attack.elm diff --git a/src/character/src/View/SubMenu/Timeline/Movement.elm b/src/roster-editor/src/View/SubMenu/Timeline/Movement.elm index 0746f1f..0746f1f 100644 --- a/src/character/src/View/SubMenu/Timeline/Movement.elm +++ b/src/roster-editor/src/View/SubMenu/Timeline/Movement.elm diff --git a/src/character/src/View/SubMenu/Timeline/PlayerDefeat.elm b/src/roster-editor/src/View/SubMenu/Timeline/PlayerDefeat.elm index db5e023..db5e023 100644 --- a/src/character/src/View/SubMenu/Timeline/PlayerDefeat.elm +++ b/src/roster-editor/src/View/SubMenu/Timeline/PlayerDefeat.elm diff --git a/src/character/src/View/SubMenu/Timeline/PlayerTurnStart.elm b/src/roster-editor/src/View/SubMenu/Timeline/PlayerTurnStart.elm index a6486fa..a6486fa 100644 --- a/src/character/src/View/SubMenu/Timeline/PlayerTurnStart.elm +++ b/src/roster-editor/src/View/SubMenu/Timeline/PlayerTurnStart.elm diff --git a/src/character/src/View/SubMenu/Timeline/PlayerVictory.elm b/src/roster-editor/src/View/SubMenu/Timeline/PlayerVictory.elm index 4d47f62..4d47f62 100644 --- a/src/character/src/View/SubMenu/Timeline/PlayerVictory.elm +++ b/src/roster-editor/src/View/SubMenu/Timeline/PlayerVictory.elm diff --git a/src/character/src/View/SubMenu/Timeline/WeaponSwitch.elm b/src/roster-editor/src/View/SubMenu/Timeline/WeaponSwitch.elm index 499e0c3..499e0c3 100644 --- a/src/character/src/View/SubMenu/Timeline/WeaponSwitch.elm +++ b/src/roster-editor/src/View/SubMenu/Timeline/WeaponSwitch.elm diff --git a/src/character/www/index.html b/src/roster-editor/www/index.html index 65f0d02..a2a6034 100644 --- a/src/character/www/index.html +++ b/src/roster-editor/www/index.html @@ -2,7 +2,7 @@ <html> <head> <link rel="stylesheet" type="text/css" href="../css/global.css"> - <link rel="stylesheet" type="text/css" href="../css/character.css"> + <link rel="stylesheet" type="text/css" href="../css/roster-editor.css"> <link rel="stylesheet" type="text/css" href="../asset/characters.css"> <link rel="stylesheet" type="text/css" href="../asset/armors.css"> <link rel="icon" type="image/x-icon" href="/favicon.ico"> |