ootAI/oot/inventory.ml

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