52 lines
1.3 KiB
OCaml
52 lines
1.3 KiB
OCaml
open import "prelude.ml"
|
|
open import "data/array.ml"
|
|
open import "../pretty.ml"
|
|
open import "../mem/decode.ml"
|
|
open import "../mem/int.ml"
|
|
|
|
type inventory = Inventory of {
|
|
items: array u8,
|
|
ammo: array s8,
|
|
equipment: u16,
|
|
upgrades: u32,
|
|
quest_items: u32,
|
|
dungeon_items: array u8,
|
|
dungeon_keys: array s8,
|
|
defense_hearts: s8,
|
|
gs_tokens: s16
|
|
}
|
|
|
|
instance decode inventory begin
|
|
let decode addr = Inventory {
|
|
items = init 24 (fun i -> decode (addr + 0x00 + i)),
|
|
ammo = init 16 (fun i -> decode (addr + 0x18 + i)),
|
|
equipment = decode (addr + 0x28),
|
|
upgrades = decode (addr + 0x2C),
|
|
quest_items = decode (addr + 0x30),
|
|
dungeon_items = init 20 (fun i -> decode (addr + 0x34 + i)),
|
|
dungeon_keys = init 19 (fun i -> decode (addr + 0x48 + i)),
|
|
defense_hearts = decode (addr + 0x5B),
|
|
gs_tokens = decode (addr + 0x5C)
|
|
}
|
|
end
|
|
|
|
instance prettyrecord inventory begin
|
|
let name _ = "Inventory"
|
|
let fields (Inventory x) =
|
|
[
|
|
("items", S x.items),
|
|
("ammo", S x.ammo),
|
|
("equipment", S x.equipment),
|
|
("upgrades", S x.upgrades),
|
|
("quest_items", S x.quest_items),
|
|
("dungeon_items", S x.dungeon_items),
|
|
("dungeon_keys", S x.dungeon_keys),
|
|
("defense_hearts", S x.defense_hearts),
|
|
("gs_tokens", S x.gs_tokens)
|
|
]
|
|
end
|
|
|
|
instance pretty inventory begin
|
|
let pretty = pretty_from_record
|
|
end
|