open import "prelude.ml" open import "lua/bit.ml" open Ops open import "../dolphin.ml" open import "../pretty.ml" open import "../mem/decode.ml" open import "../mem/int.ml" type sword = | NoSword | KokiriSword | MasterSword | BiggoronsSword instance show sword begin let show = function | NoSword -> "No Sword" | KokiriSword -> "Kokiri Sword" | MasterSword -> "Master Sword" | BiggoronsSword -> "Biggoron's Sword" end let sword_from_index = function | 0 -> NoSword | 1 -> KokiriSword | 2 -> MasterSword | 3 -> BiggoronsSword type shield = | NoShield | DekuShield | HylianShield | MirrorShield instance show shield begin let show = function | NoShield -> "No Shield" | DekuShield -> "Deku Shield" | HylianShield -> "Hylian Shield" | MirrorShield -> "Mirror Shield" end let shield_from_index = function | 0 -> NoShield | 1 -> DekuShield | 2 -> HylianShield | 3 -> MirrorShield type tunic = | KokiriTunic | GoronTunic | ZoraTunic instance show tunic begin let show = function | KokiriTunic -> "Kokiri Tunic" | GoronTunic -> "Goron Tunic" | ZoraTunic -> "Zora Tunic" end let tunic_from_index = function | 1 -> KokiriTunic | 2 -> GoronTunic | 3 -> ZoraTunic type boots = | KokiriBoots | IronBoots | HoverBoots instance show boots begin let show = function | KokiriBoots -> "Kokiri Boots" | IronBoots -> "Iron Boots" | HoverBoots -> "Hover Boots" end let boots_from_index = function | 1 -> KokiriBoots | 2 -> IronBoots | 3 -> HoverBoots type equipment = Equipment of { sword: sword, shield: shield, tunic: tunic, boots: boots } instance decode equipment begin let decode addr = let code = Dolphin.read_value_16 addr let sword_index = (code .>>. 0) .&. 0xF let shield_index = (code .>>. 4) .&. 0xF let tunic_index = (code .>>. 8) .&. 0xF let boots_index = (code .>>. 12) .&. 0xF Equipment { sword = sword_from_index sword_index, shield = shield_from_index shield_index, tunic = tunic_from_index tunic_index, boots = boots_from_index boots_index } end instance prettyrecord equipment begin let name _ = "Equipment" let fields (Equipment x) = [ ("sword", S x.sword), ("shield", S x.shield), ("tunic", S x.tunic), ("boots", S x.boots) ] end instance pretty equipment begin let pretty = pretty_from_record end