open import "prelude.ml" open import "../pretty.ml" open import "../mem/decode.ml" open import "../mem/int.ml" open import "./item_equips.ml" open import "./inventory.ml" 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, (* u32 unk_54, *) (* char unk_58[0x0E], *) saved_scene_num: s16, equips: item_equips, inventory: inventory } instance decode save_context begin let decode addr = SaveContext { entrance_index = decode (addr + 0x0000), link_age = decode (addr + 0x0004), cutscene_index = decode (addr + 0x0008), day_time = decode (addr + 0x000C), night_flag = decode (addr + 0x0010), num_days = decode (addr + 0x0014), claim_days = decode (addr + 0x0018), (* newf, *) deaths = decode (addr + 0x0022), (* player_name, *) n64dd_flag = decode (addr + 0x002C), health_capacity = decode (addr + 0x002E), health = decode (addr + 0x0030), magic_level = decode (addr + 0x0032), magic = decode (addr + 0x0033), rupees = decode (addr + 0x0034), sword_health = decode (addr + 0x0036), navi_timer = decode (addr + 0x0038), magic_acquired = decode (addr + 0x003A), (* unk_3B *) double_magic = decode (addr + 0x003C), double_defense = decode (addr + 0x003D), bgs_flag = decode (addr + 0x003E), ocarina_game_reward = decode (addr + 0x003F), child_equips = decode (addr + 0x0040), adult_equips = decode (addr + 0x004A), (* unk_54, *) saved_scene_num = decode (addr + 0x0066), equips = decode (addr + 0x0068), inventory = decode (addr + 0x0074) } 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), (* ("newf", S x.newf ), *) ("deaths", S x.deaths), (* ("player_name", S x.player_name) *) ("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), (* ("unk_3B", *) ("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), (* ("unk_54" *) (* ("unk_58" *) ("saved_scene_num", S x.saved_scene_num), ("equips", P x.equips), ("inventory", P x.inventory) ] end instance pretty save_context begin let pretty = pretty_from_record end