ootAI/save_context.ml

133 lines
3.9 KiB
OCaml

open import "prelude.ml"
open import "./pretty.ml"
open import "./dolphin.ml"
type item_equips = ItemEquips of {
button_item_b: u8,
button_item_c_left: u8,
button_item_c_down: u8,
button_item_c_right: u8,
button_slot_c_left: u8,
button_slot_c_down: u8,
button_slot_c_right: u8,
equipment: u16
}
instance decode item_equips begin
let decode addr x = ItemEquips {
button_item_b = decode (addr + 0x00) x,
button_item_c_left = decode (addr + 0x01) x,
button_item_c_down = decode (addr + 0x02) x,
button_item_c_right = decode (addr + 0x03) x,
button_slot_c_left = decode (addr + 0x04) x,
button_slot_c_down = decode (addr + 0x05) x,
button_slot_c_right = decode (addr + 0x06) x,
equipment = decode (addr + 0x08) x
}
end
instance prettyrecord item_equips begin
let name _ = "ItemEquips"
let fields (ItemEquips x) =
[
("button_item_b", S x.button_item_b),
("button_item_c_left", S x.button_item_c_left),
("button_item_c_down", S x.button_item_c_down),
("button_item_c_right", S x.button_item_c_right),
("button_slot_c_left", S x.button_slot_c_left),
("button_slot_c_down", S x.button_slot_c_down),
("button_slot_c_right", S x.button_slot_c_right),
("equipment", S x.equipment)
]
end
type save_context = SaveContext of {
entrance_index: s32,
link_age: s32,
cutscene_index: s32,
day_time: u16,
night_flag: s32,
num_days: s32,
claim_days: s32,
(* char newf[6], *)
deaths: s16,
(* char playerName[8], *)
n64dd_flag: s16,
health_capacity: s16,
health: s16,
magic_level: s8,
magic: s8,
rupees: s16,
sword_health: u16,
navi_timer: u16,
magic_acquired: u8,
(* char unk_3B[0x01], *)
double_magic: u8,
double_defense: u8,
bgs_flag: u8,
ocarina_game_reward: u8,
child_equips: item_equips,
adult_equips: item_equips
}
instance decode save_context begin
let decode addr x = SaveContext {
entrance_index = decode (addr + 0x0000) x,
link_age = decode (addr + 0x0004) x,
cutscene_index = decode (addr + 0x0008) x,
day_time = decode (addr + 0x000C) x,
night_flag = decode (addr + 0x0010) x,
num_days = decode (addr + 0x0014) x,
claim_days = decode (addr + 0x0018) x,
(* newf, *)
deaths = decode (addr + 0x0022) x,
n64dd_flag = decode (addr + 0x002C) x,
health_capacity = decode (addr + 0x002E) x,
health = decode (addr + 0x0030) x,
magic_level = decode (addr + 0x0032) x,
magic = decode (addr + 0x0033) x,
rupees = decode (addr + 0x0034) x,
sword_health = decode (addr + 0x0036) x,
navi_timer = decode (addr + 0x0038) x,
magic_acquired = decode (addr + 0x003A) x,
double_magic = decode (addr + 0x003C) x,
double_defense = decode (addr + 0x003D) x,
bgs_flag = decode (addr + 0x003E) x,
ocarina_game_reward = decode (addr + 0x003F) x,
child_equips = decode (addr + 0x0040) x,
adult_equips = decode (addr + 0x004A) x
}
end
instance prettyrecord save_context begin
let name _ = "SaveContext"
let fields (SaveContext x) =
[
("entrance_index", S x.entrance_index),
("link_age", S x.link_age),
("cutscene_index", S x.cutscene_index),
("day_time", S x.day_time),
("night_flag", S x.night_flag),
("num_days", S x.num_days),
("claim_days", S x.claim_days),
("deaths", S x.deaths),
("n64dd_flag", S x.n64dd_flag),
("health_capacity", S x.health_capacity),
("health", S x.health),
("magic_level", S x.magic_level),
("magic", S x.magic),
("rupees", S x.rupees),
("sword_health", S x.sword_health),
("navi_timer", S x.navi_timer),
("magic_acquired", S x.magic_acquired),
("double_magic", S x.double_magic),
("double_defense", S x.double_defense),
("bgs_flag", S x.bgs_flag),
("ocarina_game_reward", S x.ocarina_game_reward),
("child_equips", P x.child_equips),
("adult_equips", P x.adult_equips)
]
end