2021-03-10 00:01:09 +00:00
|
|
|
open import "prelude.ml"
|
|
|
|
open import "../pretty.ml"
|
|
|
|
open import "../mem/decode.ml"
|
|
|
|
open import "../mem/int.ml"
|
2021-03-10 00:35:24 +00:00
|
|
|
open import "./item_equips.ml"
|
2021-04-02 04:40:47 +00:00
|
|
|
open import "./inventory.ml"
|
2021-03-10 00:01:09 +00:00
|
|
|
|
|
|
|
type save_context = SaveContext of {
|
2021-04-02 04:40:47 +00:00
|
|
|
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,
|
2021-03-10 00:35:24 +00:00
|
|
|
rupees: s16,
|
2021-04-02 04:40:47 +00:00
|
|
|
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,
|
2021-03-10 00:35:24 +00:00
|
|
|
child_equips: item_equips,
|
|
|
|
adult_equips: item_equips,
|
2021-04-02 04:40:47 +00:00
|
|
|
(* u32 unk_54, *)
|
|
|
|
(* char unk_58[0x0E], *)
|
|
|
|
saved_scene_num: s16,
|
|
|
|
equips: item_equips,
|
|
|
|
inventory: inventory
|
2021-03-10 00:01:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
instance decode save_context begin
|
|
|
|
let decode addr = SaveContext {
|
2021-04-02 04:40:47 +00:00
|
|
|
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),
|
2021-03-10 00:35:24 +00:00
|
|
|
rupees = decode (addr + 0x0034),
|
2021-04-02 04:40:47 +00:00
|
|
|
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),
|
2021-03-10 00:35:24 +00:00
|
|
|
child_equips = decode (addr + 0x0040),
|
|
|
|
adult_equips = decode (addr + 0x004A),
|
2021-04-02 04:40:47 +00:00
|
|
|
(* unk_54, *)
|
|
|
|
saved_scene_num = decode (addr + 0x0066),
|
|
|
|
equips = decode (addr + 0x0068),
|
|
|
|
inventory = decode (addr + 0x0074)
|
2021-03-10 00:01:09 +00:00
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
instance prettyrecord save_context begin
|
|
|
|
let name _ = "SaveContext"
|
|
|
|
let fields (SaveContext x) =
|
|
|
|
[
|
2021-04-02 04:40:47 +00:00
|
|
|
("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),
|
2021-03-10 00:35:24 +00:00
|
|
|
("rupees", S x.rupees),
|
2021-04-02 04:40:47 +00:00
|
|
|
("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),
|
2021-03-10 00:35:24 +00:00
|
|
|
("child_equips", P x.child_equips),
|
|
|
|
("adult_equips", P x.adult_equips),
|
2021-04-02 04:40:47 +00:00
|
|
|
(* ("unk_54" *)
|
|
|
|
(* ("unk_58" *)
|
|
|
|
("saved_scene_num", S x.saved_scene_num),
|
|
|
|
("equips", P x.equips),
|
|
|
|
("inventory", P x.inventory)
|
2021-03-10 00:01:09 +00:00
|
|
|
]
|
|
|
|
end
|
|
|
|
|
|
|
|
instance pretty save_context begin
|
|
|
|
let pretty = pretty_from_record
|
|
|
|
end
|