summaryrefslogtreecommitdiff |
diff options
author | nsensfel <SpamShield0@noot-noot.org> | 2019-11-19 18:07:19 +0100 |
---|---|---|
committer | nsensfel <SpamShield0@noot-noot.org> | 2019-11-19 18:07:19 +0100 |
commit | 6375ecebd314a070b0514e70fd31dc9e3002dfe5 (patch) | |
tree | 671954fcc8a4f20d173d7d21afc862e1823152be /src | |
parent | 587c59f6a34eb9392ce24c062a501d371ed9c791 (diff) |
...
Diffstat (limited to 'src')
-rw-r--r-- | src/battle/src/Struct/Model.elm | 24 | ||||
-rw-r--r-- | src/roster-editor/src/Struct/Model.elm | 108 | ||||
-rw-r--r-- | src/roster-editor/src/Update/HandleServerReply.elm | 32 | ||||
-rw-r--r-- | src/shared/battle-characters/BattleCharacters/Struct/Equipment.elm | 32 | ||||
-rw-r--r-- | src/shared/battle-characters/BattleCharacters/Struct/Inventory.elm | 266 | ||||
-rw-r--r-- | src/shared/battle-characters/BattleCharacters/Struct/Skill.elm | 123 |
6 files changed, 440 insertions, 145 deletions
diff --git a/src/battle/src/Struct/Model.elm b/src/battle/src/Struct/Model.elm index c4fe728..314a7a5 100644 --- a/src/battle/src/Struct/Model.elm +++ b/src/battle/src/Struct/Model.elm @@ -10,6 +10,7 @@ module Struct.Model exposing add_portrait, add_glyph_board, add_glyph, + add_skill, add_player, add_tile, invalidate, @@ -36,11 +37,12 @@ import Struct.Flags import Battle.Struct.Omnimods -- Battle Characters ----------------------------------------------------------- -import BattleCharacters.Struct.Character import BattleCharacters.Struct.Armor -import BattleCharacters.Struct.Portrait +import BattleCharacters.Struct.Character import BattleCharacters.Struct.Glyph import BattleCharacters.Struct.GlyphBoard +import BattleCharacters.Struct.Portrait +import BattleCharacters.Struct.Skill import BattleCharacters.Struct.Weapon -- Battle Map ------------------------------------------------------------------ @@ -97,6 +99,11 @@ type alias Type = BattleCharacters.Struct.Glyph.Ref BattleCharacters.Struct.Glyph.Type ), + skills : + (Dict.Dict + BattleCharacters.Struct.Skill.Ref + BattleCharacters.Struct.Skill.Type + ), tiles : (Dict.Dict BattleMap.Struct.Tile.Ref BattleMap.Struct.Tile.Type), error : (Maybe Struct.Error.Type), player_id : String, @@ -184,6 +191,7 @@ new flags = portraits = (Dict.empty), glyph_boards = (Dict.empty), glyphs = (Dict.empty), + skills = (Dict.empty), tiles = (Dict.empty), players = (Array.empty), error = Nothing, @@ -277,6 +285,17 @@ add_glyph pt model = ) } +add_skill : BattleCharacters.Struct.Skill.Type -> Type -> Type +add_skill sk model = + {model | + skills = + (Dict.insert + (BattleCharacters.Struct.Skill.get_id sk) + sk + model.skills + ) + } + add_player : Struct.Player.Type -> Type -> Type add_player pl model = {model | @@ -326,6 +345,7 @@ full_debug_reset model = portraits = (Dict.empty), glyph_boards = (Dict.empty), glyphs = (Dict.empty), + skills = (Dict.empty), tiles = (Dict.empty), error = Nothing, ui = (Struct.UI.default), diff --git a/src/roster-editor/src/Struct/Model.elm b/src/roster-editor/src/Struct/Model.elm index 879e185..3e573f9 100644 --- a/src/roster-editor/src/Struct/Model.elm +++ b/src/roster-editor/src/Struct/Model.elm @@ -7,11 +7,6 @@ module Struct.Model exposing update_character, update_character_fun, save_character, - add_weapon, - add_armor, - add_portrait, - add_glyph, - add_glyph_board, invalidate, clear_error ) @@ -52,31 +47,7 @@ type alias Type = help_request : Struct.HelpRequest.Type, characters : (Array.Array Struct.Character.Type), unresolved_characters : (List Struct.Character.Unresolved), - weapons : - (Dict.Dict - BattleCharacters.Struct.Weapon.Ref - BattleCharacters.Struct.Weapon.Type - ), - armors : - (Dict.Dict - BattleCharacters.Struct.Armor.Ref - BattleCharacters.Struct.Armor.Type - ), - glyphs : - (Dict.Dict - BattleCharacters.Struct.Glyph.Ref - BattleCharacters.Struct.Glyph.Type - ), - glyph_boards : - (Dict.Dict - BattleCharacters.Struct.GlyphBoard.Ref - BattleCharacters.Struct.GlyphBoard.Type - ), - portraits : - (Dict.Dict - BattleCharacters.Struct.Portrait.Ref - BattleCharacters.Struct.Portrait.Type - ), + inventory : BattleCharacters.Struct.Inventory.Type, error : (Maybe Struct.Error.Type), battle_order : (Array.Array Int), player_id : String, @@ -95,13 +66,7 @@ add_character_from_unresolved char_ref model = let char = (Struct.Character.resolve - (BattleCharacters.Struct.Equipment.resolve - (BattleCharacters.Struct.Weapon.find model.weapons) - (BattleCharacters.Struct.Armor.find model.armors) - (BattleCharacters.Struct.Portrait.find model.portraits) - (BattleCharacters.Struct.GlyphBoard.find model.glyph_boards) - (BattleCharacters.Struct.Glyph.find model.glyphs) - ) + (BattleCharacters.Struct.Equipment.resolve model.inventory) char_ref ) in @@ -118,14 +83,7 @@ has_loaded_data : Type -> Bool has_loaded_data model = ( ((Array.length model.characters) > 0) - || - ( - (model.portraits /= (Dict.empty)) - && (model.weapons /= (Dict.empty)) - && (model.armors /= (Dict.empty)) - && (model.glyph_boards /= (Dict.empty)) - && (model.glyphs /= (Dict.empty)) - ) + || (BattleCharacters.Struct.Inventory.is_ready model.inventory) ) -------------------------------------------------------------------------------- @@ -138,11 +96,7 @@ new flags = help_request = Struct.HelpRequest.None, characters = (Array.empty), unresolved_characters = [], - weapons = (Dict.empty), - armors = (Dict.empty), - glyphs = (Dict.empty), - glyph_boards = (Dict.empty), - portraits = (Dict.empty), + inventory = (BattleCharacters.Struct.Inventory.new), error = Nothing, roster_id = "", player_id = @@ -191,60 +145,6 @@ resolve_all_characters model = else model -add_weapon : BattleCharacters.Struct.Weapon.Type -> Type -> Type -add_weapon wp model = - {model | - weapons = - (Dict.insert - (BattleCharacters.Struct.Weapon.get_id wp) - wp - model.weapons - ) - } - -add_armor : BattleCharacters.Struct.Armor.Type -> Type -> Type -add_armor ar model = - {model | - armors = - (Dict.insert - (BattleCharacters.Struct.Armor.get_id ar) - ar - model.armors - ) - } - -add_portrait : BattleCharacters.Struct.Portrait.Type -> Type -> Type -add_portrait pt model = - {model | - portraits = - (Dict.insert - (BattleCharacters.Struct.Portrait.get_id pt) - pt - model.portraits - ) - } - -add_glyph : BattleCharacters.Struct.Glyph.Type -> Type -> Type -add_glyph gl model = - {model | - glyphs = - (Dict.insert - (BattleCharacters.Struct.Glyph.get_id gl) - gl - model.glyphs - ) - } - -add_glyph_board : BattleCharacters.Struct.GlyphBoard.Type -> Type -> Type -add_glyph_board glb model = - {model | - glyph_boards = - (Dict.insert - (BattleCharacters.Struct.GlyphBoard.get_id glb) - glb - model.glyph_boards - ) - } update_character : Int -> Struct.Character.Type -> Type -> Type update_character ix new_val model = diff --git a/src/roster-editor/src/Update/HandleServerReply.elm b/src/roster-editor/src/Update/HandleServerReply.elm index 5f1bc52..617b72a 100644 --- a/src/roster-editor/src/Update/HandleServerReply.elm +++ b/src/roster-editor/src/Update/HandleServerReply.elm @@ -38,38 +38,6 @@ import Struct.ServerReply -------------------------------------------------------------------------------- -- LOCAL ----------------------------------------------------------------------- -------------------------------------------------------------------------------- -weapon_getter : ( - Struct.Model.Type -> - BattleCharacters.Struct.Weapon.Ref -> - BattleCharacters.Struct.Weapon.Type - ) -weapon_getter model ref = - case (Dict.get ref model.weapons) of - (Just w) -> w - Nothing -> BattleCharacters.Struct.Weapon.none - -armor_getter : ( - Struct.Model.Type -> - BattleCharacters.Struct.Armor.Ref -> - BattleCharacters.Struct.Armor.Type - ) -armor_getter model ref = - case (Dict.get ref model.armors) of - (Just w) -> w - Nothing -> BattleCharacters.Struct.Armor.none - -portrait_getter : ( - Struct.Model.Type -> - BattleCharacters.Struct.Portrait.Ref -> - BattleCharacters.Struct.Portrait.Type - ) -portrait_getter model ref = - case (Dict.get ref model.portraits) of - (Just w) -> w - Nothing -> BattleCharacters.Struct.Portrait.default - ------------ - disconnected : ( (Struct.Model.Type, (List (Cmd Struct.Event.Type))) -> (Struct.Model.Type, (List (Cmd Struct.Event.Type))) diff --git a/src/shared/battle-characters/BattleCharacters/Struct/Equipment.elm b/src/shared/battle-characters/BattleCharacters/Struct/Equipment.elm index 4d0b1fb..0722a96 100644 --- a/src/shared/battle-characters/BattleCharacters/Struct/Equipment.elm +++ b/src/shared/battle-characters/BattleCharacters/Struct/Equipment.elm @@ -8,6 +8,7 @@ module BattleCharacters.Struct.Equipment exposing get_portrait, get_glyph_board, get_glyphs, + get_skill, set_primary_weapon, set_secondary_weapon, set_armor, @@ -15,6 +16,7 @@ module BattleCharacters.Struct.Equipment exposing set_glyph_board, set_glyphs, set_glyph, + set_skill, decoder, encode, resolve, @@ -32,11 +34,12 @@ import Json.Decode.Pipeline import Json.Encode -- Battle ---------------------------------------------------------------------- -import BattleCharacters.Struct.Weapon import BattleCharacters.Struct.Armor -import BattleCharacters.Struct.Portrait import BattleCharacters.Struct.Glyph import BattleCharacters.Struct.GlyphBoard +import BattleCharacters.Struct.Portrait +import BattleCharacters.Struct.Skill +import BattleCharacters.Struct.Weapon -------------------------------------------------------------------------------- -- TYPES ----------------------------------------------------------------------- @@ -48,7 +51,8 @@ type alias Type = armor : BattleCharacters.Struct.Armor.Type, portrait : BattleCharacters.Struct.Portrait.Type, glyph_board : BattleCharacters.Struct.GlyphBoard.Type, - glyphs : (Array.Array BattleCharacters.Struct.Glyph.Type) + glyphs : (Array.Array BattleCharacters.Struct.Glyph.Type), + skill : BattleCharacters.Struct.Skill.Type } type alias Unresolved = @@ -58,7 +62,8 @@ type alias Unresolved = armor : BattleCharacters.Struct.Armor.Ref, portrait : BattleCharacters.Struct.Portrait.Ref, glyph_board : BattleCharacters.Struct.GlyphBoard.Ref, - glyphs : (Array.Array BattleCharacters.Struct.Glyph.Ref) + glyphs : (Array.Array BattleCharacters.Struct.Glyph.Ref), + skill : BattleCharacters.Struct.Skill.Ref } -------------------------------------------------------------------------------- @@ -86,6 +91,9 @@ get_glyph_board equipment = equipment.glyph_board get_glyphs : Type -> (Array.Array BattleCharacters.Struct.Glyph.Type) get_glyphs equipment = equipment.glyphs +get_skill : Type -> BattleCharacters.Struct.Skill.Type +get_skill equipment = equipment.skill + set_primary_weapon : BattleCharacters.Struct.Weapon.Type -> Type -> Type set_primary_weapon wp equipment = { equipment | primary = wp } @@ -116,6 +124,9 @@ set_glyph : Int -> BattleCharacters.Struct.Glyph.Type -> Type -> Type set_glyph index glyph equipment = { equipment | glyphs = (Array.set index glyph equipment.glyphs) } +set_skill : BattleCharacters.Struct.Skill.Type -> Type -> Type +set_skill sk equipment = { equipment | skill = sk } + decoder : (Json.Decode.Decoder Unresolved) decoder = (Json.Decode.succeed @@ -130,6 +141,7 @@ decoder = "gl" (Json.Decode.array (Json.Decode.string)) ) + |> (Json.Decode.Pipeline.required "sk" Json.Decode.string) ) encode : Unresolved -> Json.Encode.Value @@ -166,17 +178,22 @@ resolve : ( BattleCharacters.Struct.Glyph.Ref -> BattleCharacters.Struct.Glyph.Type ) -> + ( + BattleCharacters.Struct.Skill.Ref -> + BattleCharacters.Struct.Skill.Type + ) -> Unresolved -> Type ) -resolve resolve_wp resolve_ar resolve_pt resolve_gb resolve_gl ref = +resolve resolve_wp resolve_ar resolve_pt resolve_gb resolve_gl resolve_sk ref = { primary = (resolve_wp ref.primary), secondary = (resolve_wp ref.secondary), armor = (resolve_ar ref.armor), portrait = (resolve_pt ref.portrait), glyph_board = (resolve_gb ref.glyph_board), - glyphs = (Array.map (resolve_gl) ref.glyphs) + glyphs = (Array.map (resolve_gl) ref.glyphs), + skill = (resolve_sk ref.skill) } to_unresolved : Type -> Unresolved @@ -189,6 +206,7 @@ to_unresolved equipment = glyph_board = (BattleCharacters.Struct.GlyphBoard.get_id equipment.glyph_board), glyphs = - (Array.map (BattleCharacters.Struct.Glyph.get_id) equipment.glyphs) + (Array.map (BattleCharacters.Struct.Glyph.get_id) equipment.glyphs), + skill = (BattleCharacters.Struct.Skill.get_id equipment.skill) } diff --git a/src/shared/battle-characters/BattleCharacters/Struct/Inventory.elm b/src/shared/battle-characters/BattleCharacters/Struct/Inventory.elm new file mode 100644 index 0000000..9e1347e --- /dev/null +++ b/src/shared/battle-characters/BattleCharacters/Struct/Inventory.elm @@ -0,0 +1,266 @@ +module BattleCharacters.Struct.Inventory exposing + ( + Type, + new, + is_ready, + get_weapon, + add_weapon, + get_armor, + add_armor, + get_portrait, + add_portrait, + get_glyph, + add_glyph, + get_glyph_board, + add_glyph_board, + get_skill, + add_skill + ) + +-- Elm ------------------------------------------------------------------------- +import Dict + +-- Battle ---------------------------------------------------------------------- +import BattleCharacters.Struct.Armor +import BattleCharacters.Struct.Glyph +import BattleCharacters.Struct.GlyphBoard +import BattleCharacters.Struct.Portrait +import BattleCharacters.Struct.Skill +import BattleCharacters.Struct.Weapon + +-------------------------------------------------------------------------------- +-- TYPES ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +type alias Type = + { + weapons : + (Dict.Dict + BattleCharacters.Struct.Weapon.Ref + BattleCharacters.Struct.Weapon.Type + ), + armors : + (Dict.Dict + BattleCharacters.Struct.Armor.Ref + BattleCharacters.Struct.Armor.Type + ), + glyphs : + (Dict.Dict + BattleCharacters.Struct.Glyph.Ref + BattleCharacters.Struct.Glyph.Type + ), + glyph_boards : + (Dict.Dict + BattleCharacters.Struct.GlyphBoard.Ref + BattleCharacters.Struct.GlyphBoard.Type + ), + portraits : + (Dict.Dict + BattleCharacters.Struct.Portrait.Ref + BattleCharacters.Struct.Portrait.Type + ), + skills : + (Dict.Dict + BattleCharacters.Struct.Skill.Ref + BattleCharacters.Struct.Skill.Type + ) + } + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +new : Type +new = + { + weapons : + (Dict.Dict + BattleCharacters.Struct.Weapon.Ref + BattleCharacters.Struct.Weapon.Type + ), + armors : + (Dict.Dict + BattleCharacters.Struct.Armor.Ref + BattleCharacters.Struct.Armor.Type + ), + glyphs : + (Dict.Dict + BattleCharacters.Struct.Glyph.Ref + BattleCharacters.Struct.Glyph.Type + ), + glyph_boards : + (Dict.Dict + BattleCharacters.Struct.GlyphBoard.Ref + BattleCharacters.Struct.GlyphBoard.Type + ), + portraits : + (Dict.Dict + BattleCharacters.Struct.Portrait.Ref + BattleCharacters.Struct.Portrait.Type + ), + skills : + (Dict.Dict + BattleCharacters.Struct.Portrait.Ref + BattleCharacters.Struct.Portrait.Type + ), + } + +is_ready : Type -> Bool +is_ready inventory = + ( + (inventory.portraits /= (Dict.empty)) + && (inventory.weapons /= (Dict.empty)) + && (inventory.armors /= (Dict.empty)) + && (inventory.glyph_boards /= (Dict.empty)) + && (inventory.glyphs /= (Dict.empty)) + && (inventory.skills /= (Dict.empty)) + ) + +---- Accessors ----------------------------------------------------------------- + +---------------- +---- Weapon ---- +---------------- +get_weapon : ( + BattleCharacters.Struct.Weapon.Ref -> + Type -> + BattleCharacters.Struct.Weapon.Type + ) +get_weapon wp_id inventory = + case (Dict.get wp_id inventory.weapons) of + (Just wp) -> wp + Nothing -> BattleCharacters.Struct.Weapon.none + +add_weapon : BattleCharacters.Struct.Weapon.Type -> Type -> Type +add_weapon wp inventory = + {inventory | + weapons = + (Dict.insert + (BattleCharacters.Struct.Weapon.get_id wp) + wp + inventory.weapons + ) + } + +--------------- +---- Armor ---- +--------------- +get_armor : ( + BattleCharacters.Struct.Armor.Ref -> + Type -> + BattleCharacters.Struct.Armor.Type + ) +get_armor ar_id inventory = + case (Dict.get ar_id inventory.armors) of + (Just ar) -> ar + Nothing -> BattleCharacters.Struct.Armor.none + +add_armor : BattleCharacters.Struct.Armor.Type -> Type -> Type +add_armor ar inventory = + {inventory | + armors = + (Dict.insert + (BattleCharacters.Struct.Armor.get_id ar) + ar + inventory.armors + ) + } + +------------------ +---- Portrait ---- +------------------ +get_portrait : ( + BattleCharacters.Struct.Portrait.Ref -> + Type -> + BattleCharacters.Struct.Portrait.Type + ) +get_portrait pt_id inventory = + case (Dict.get pt_id inventory.portraits) of + (Just pt) -> pt + Nothing -> BattleCharacters.Struct.Portrait.none + +add_portrait : BattleCharacters.Struct.Portrait.Type -> Type -> Type +add_portrait pt inventory = + {inventory | + portraits = + (Dict.insert + (BattleCharacters.Struct.Portrait.get_id pt) + pt + inventory.portraits + ) + } + +--------------- +---- Glyph ---- +--------------- +get_glyph : ( + BattleCharacters.Struct.Glyph.Ref -> + Type -> + BattleCharacters.Struct.Glyph.Type + ) +get_glyph gl_id inventory = + case (Dict.get gl_id inventory.glyphs) of + (Just gl) -> gl + Nothing -> BattleCharacters.Struct.Glyph.none + +add_glyph : BattleCharacters.Struct.Glyph.Type -> Type -> Type +add_glyph gl inventory = + {inventory | + glyphs = + (Dict.insert + (BattleCharacters.Struct.Glyph.get_id gl) + gl + inventory.glyphs + ) + } + +--------------------- +---- Glyph Board ---- +--------------------- +get_glyph_board : ( + BattleCharacters.Struct.GlyphBoard.Ref -> + Type -> + BattleCharacters.Struct.GlyphBoard.Type + ) +get_glyph_board gb_id inventory = + case (Dict.get gb_id inventory.glyph_boards) of + (Just gb) -> gb + Nothing -> BattleCharacters.Struct.GlyphBoard.none + +add_glyph_board : BattleCharacters.Struct.GlyphBoard.Type -> Type -> Type +add_glyph_board glb inventory = + {inventory | + glyph_boards = + (Dict.insert + (BattleCharacters.Struct.GlyphBoard.get_id glb) + glb + inventory.glyph_boards + ) + } + +--------------- +---- Skill ---- +--------------- +get_skill : ( + BattleCharacters.Struct.Skill.Ref -> + Type -> + BattleCharacters.Struct.Skill.Type + ) +get_skill sk_id inventory = + case (Dict.get sk_id inventory.skills) of + (Just sk) -> sk + Nothing -> BattleCharacters.Struct.Skill.none + +add_skill : BattleCharacters.Struct.Skill.Type -> Type -> Type +add_skill sk inventory = + {inventory | + skills = + (Dict.insert + (BattleCharacters.Struct.Skill.get_id sk) + sk + inventory.skills + ) + } + diff --git a/src/shared/battle-characters/BattleCharacters/Struct/Skill.elm b/src/shared/battle-characters/BattleCharacters/Struct/Skill.elm new file mode 100644 index 0000000..709c17f --- /dev/null +++ b/src/shared/battle-characters/BattleCharacters/Struct/Skill.elm @@ -0,0 +1,123 @@ +module BattleCharacters.Struct.Skill exposing + ( + Type, + Ref, + find, + default, + get_id, + get_name, + get_cost, + get_reserve, + get_locations, + get_duration, + get_uses, + get_chance, + get_power, + get_range, + decoder + ) + +-- Elm ------------------------------------------------------------------------- +import Dict + +import Json.Decode +import Json.Decode.Pipeline + +-------------------------------------------------------------------------------- +-- TYPES ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +type alias Type = + { + id : String, + name : String, + cost : Int, + reserve : Int, + targets : Int, + locations : Int, + duration : Int, + uses : Int, + chance : Int, + power : Int, + range : Int + } + +type alias Ref = String + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +find : (Dict.Dict Ref Type) -> Ref -> Type +find dict ref = + case (Dict.get ref dict) of + (Just e) -> e + Nothing -> default + +default : Type +default = + { + id = "", + name = "Skill Not Found", + cost = 999, + reserve = 999, + targets = -1, + locations = -1, + duration = -1, + uses = -1, + chance = -1, + power = -1, + range = -1 + } + +get_id : Type -> String +get_id p = p.id + +get_name : Type -> String +get_name p = p.name + +get_cost : Type -> Int +get_cost p = p.cost + +get_reserve : Type -> Int +get_reserve p = p.reserve + +get_targets : Type -> Int +get_targets p = p.targets + +get_locations : Type -> Int +get_locations p = p.locations + +get_duration : Type -> Int +get_duration p = p.duration + +get_uses : Type -> Int +get_uses p = p.uses + +get_chance : Type -> Int +get_chance p = p.chance + +get_power : Type -> Int +get_power p = p.power + +get_range : Type -> Int +get_range p = p.range + +decoder : (Json.Decode.Decoder Type) +decoder = + (Json.Decode.succeed + Type + |> (Json.Decode.Pipeline.required "id" Json.Decode.string) + |> (Json.Decode.Pipeline.required "nam" Json.Decode.string) + |> (Json.Decode.Pipeline.required "cos" Json.Decode.int) + |> (Json.Decode.Pipeline.required "res" Json.Decode.int) + |> (Json.Decode.Pipeline.required "tar" Json.Decode.int) + |> (Json.Decode.Pipeline.required "loc" Json.Decode.int) + |> (Json.Decode.Pipeline.required "dur" Json.Decode.int) + |> (Json.Decode.Pipeline.required "use" Json.Decode.int) + |> (Json.Decode.Pipeline.required "cha" Json.Decode.int) + |> (Json.Decode.Pipeline.required "pow" Json.Decode.int) + |> (Json.Decode.Pipeline.required "ran" Json.Decode.int) + ) |