summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--RomHack-template.toml11
m---------external/libtp_c0
-rw-r--r--external/misc/ad.py42
-rw-r--r--external/misc/hundo.py119
-rw-r--r--include/gz_flags.h4
-rw-r--r--include/menus/ad_saves_menu.h1
-rw-r--r--include/menus/hundo_saves_menu.h14
-rw-r--r--include/menus/tools_menu.h5
-rw-r--r--include/umd.h8
-rw-r--r--res/save_files/ad.binbin3920 -> 4080 bytes
-rw-r--r--res/save_files/ad/mountain_umd.binbin0 -> 2700 bytes
-rw-r--r--res/save_files/hundo.binbin6560 -> 6240 bytes
-rw-r--r--res/save_files/hundo/aeralfos_skip.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/ag.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/argorok.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/armogohma.binbin2700 -> 0 bytes
-rw-r--r--res/save_files/hundo/beast_ganon.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/blizzeta.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/boss_bug.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/camp.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/cats.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/cits_1.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/cits_2.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/cits_early.binbin2700 -> 0 bytes
-rw-r--r--res/save_files/hundo/cits_poe_cycle.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/coo.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/coo_10.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/coo_20.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/coo_30.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/corotd.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/dangoro.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/darkhammer.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/death_sword_skip.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/dot_skip.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/early_platform.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/fan_tower.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/fbf.binbin2700 -> 0 bytes
-rw-r--r--res/save_files/hundo/gm.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/gorge_arc.binbin2700 -> 0 bytes
-rw-r--r--res/save_files/hundo/grove_2.binbin2700 -> 0 bytes
-rw-r--r--res/save_files/hundo/grove_boost.binbin0 -> 2700 bytes
-rw-r--r--res/save_files/hundo/grove_skip.binbin0 -> 2700 bytes
-rw-r--r--res/save_files/hundo/hc.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/hc_darknut.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/hc_tower.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/horseback_ganon.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/hotspring.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/hv_archery.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/ice_puzzle.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/iza_1_skip.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/iza_2.binbin2700 -> 0 bytes
-rw-r--r--res/save_files/hundo/kb1.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/kb2.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/lakebed_bk_skip.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/lh_cave.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/mdh_bridge.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/mdh_tower.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/morpheel.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/mountain.binbin2700 -> 0 bytes
-rw-r--r--res/save_files/hundo/nf_bomb_boost.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/palace_1.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/palace_2.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/poe_1_skip.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/post_ag.binbin0 -> 2700 bytes
-rw-r--r--res/save_files/hundo/post_mdh.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/post_tot.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/silver_rupee.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/spr.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/spr_bk_lja.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/spr_superjump.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/stallord.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/star_1.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/star_2.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/tot.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/tot_darknut.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/tot_early_hp.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/tot_early_poe.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/tot_statue_throws.binbin2700 -> 2700 bytes
-rw-r--r--res/save_files/hundo/zant.binbin2700 -> 2700 bytes
-rw-r--r--src/gz_flags.cpp2
-rw-r--r--src/menus/ad_saves_menu.cpp3
-rw-r--r--src/menus/hundo_saves_menu.cpp23
-rw-r--r--src/menus/tools_menu.cpp13
-rw-r--r--src/umd.cpp134
-rw-r--r--src/utils/hook.cpp1
85 files changed, 264 insertions, 116 deletions
diff --git a/RomHack-template.toml b/RomHack-template.toml
index 447d28b..fbb4b02 100644
--- a/RomHack-template.toml
+++ b/RomHack-template.toml
@@ -109,7 +109,6 @@ libs = ["tpgz.a", "external/libtp_c/libtp_c.a", "external/gcn_c/gcn_c.a"]
"tpgz/save_files/hundo/spr.bin" = "res/save_files/hundo/spr.bin"
"tpgz/save_files/hundo/lakebed_1.bin" = "res/save_files/hundo/lakebed_1.bin"
"tpgz/save_files/hundo/ag.bin" = "res/save_files/hundo/ag.bin"
-"tpgz/save_files/hundo/cits_early.bin" = "res/save_files/hundo/cits_early.bin"
"tpgz/save_files/hundo/cits_1.bin" = "res/save_files/hundo/cits_1.bin"
"tpgz/save_files/hundo/cits_2.bin" = "res/save_files/hundo/cits_2.bin"
"tpgz/save_files/hundo/argorok.bin" = "res/save_files/hundo/argorok.bin"
@@ -131,27 +130,24 @@ libs = ["tpgz.a", "external/libtp_c/libtp_c.a", "external/gcn_c/gcn_c.a"]
"tpgz/save_files/hundo/morpheel.bin" = "res/save_files/hundo/morpheel.bin"
"tpgz/save_files/hundo/star_1.bin" = "res/save_files/hundo/star_1.bin"
"tpgz/save_files/hundo/post_mdh.bin" = "res/save_files/hundo/post_mdh.bin"
-"tpgz/save_files/hundo/mountain.bin" = "res/save_files/hundo/mountain.bin"
"tpgz/save_files/hundo/iza_1_skip.bin" = "res/save_files/hundo/iza_1_skip.bin"
-"tpgz/save_files/hundo/iza_2.bin" = "res/save_files/hundo/iza_2.bin"
"tpgz/save_files/hundo/lh_cave.bin" = "res/save_files/hundo/lh_cave.bin"
-"tpgz/save_files/hundo/gorge_arc.bin" = "res/save_files/hundo/gorge_arc.bin"
+"tpgz/save_files/hundo/post_ag.bin" = "res/save_files/hundo/post_ag.bin"
"tpgz/save_files/hundo/spr_superjump.bin" = "res/save_files/hundo/spr_superjump.bin"
"tpgz/save_files/hundo/spr_bk_lja.bin" = "res/save_files/hundo/spr_bk_lja.bin"
"tpgz/save_files/hundo/blizzeta.bin" = "res/save_files/hundo/blizzeta.bin"
"tpgz/save_files/hundo/nf_bomb_boost.bin" = "res/save_files/hundo/nf_bomb_boost.bin"
-"tpgz/save_files/hundo/grove_2.bin" = "res/save_files/hundo/grove_2.bin"
+"tpgz/save_files/hundo/grove_skip.bin" = "res/save_files/hundo/grove_skip.bin"
+"tpgz/save_files/hundo/grove_boost.bin" = "res/save_files/hundo/grove_boost.bin"
"tpgz/save_files/hundo/tot.bin" = "res/save_files/hundo/tot.bin"
"tpgz/save_files/hundo/tot_early_poe.bin" = "res/save_files/hundo/tot_early_poe.bin"
"tpgz/save_files/hundo/tot_statue_throws.bin" = "res/save_files/hundo/tot_statue_throws.bin"
"tpgz/save_files/hundo/tot_early_hp.bin" = "res/save_files/hundo/tot_early_hp.bin"
"tpgz/save_files/hundo/tot_darknut.bin" = "res/save_files/hundo/tot_darknut.bin"
"tpgz/save_files/hundo/dot_skip.bin" = "res/save_files/hundo/dot_skip.bin"
-"tpgz/save_files/hundo/armogohma.bin" = "res/save_files/hundo/armogohma.bin"
"tpgz/save_files/hundo/post_tot.bin" = "res/save_files/hundo/post_tot.bin"
"tpgz/save_files/hundo/hotspring.bin" = "res/save_files/hundo/hotspring.bin"
"tpgz/save_files/hundo/silver_rupee.bin" = "res/save_files/hundo/silver_rupee.bin"
-"tpgz/save_files/hundo/fbf.bin" = "res/save_files/hundo/fbf.bin"
"tpgz/save_files/hundo/ice_puzzle.bin" = "res/save_files/hundo/ice_puzzle.bin"
"tpgz/save_files/hundo/hv_archery.bin" = "res/save_files/hundo/hv_archery.bin"
"tpgz/save_files/hundo/cits_poe_cycle.bin" = "res/save_files/hundo/cits_poe_cycle.bin"
@@ -184,6 +180,7 @@ libs = ["tpgz.a", "external/libtp_c/libtp_c.a", "external/gcn_c/gcn_c.a"]
"tpgz/save_files/ad/morpheel.bin" = "res/save_files/ad/morpheel.bin"
"tpgz/save_files/ad/mdh.bin" = "res/save_files/ad/mdh.bin"
"tpgz/save_files/ad/mountain.bin" = "res/save_files/ad/mountain.bin"
+"tpgz/save_files/ad/mountain_umd.bin" = "res/save_files/ad/mountain_umd.bin"
"tpgz/save_files/ad/spr1.bin" = "res/save_files/ad/spr1.bin"
"tpgz/save_files/ad/darkhammer.bin" = "res/save_files/ad/darkhammer.bin"
"tpgz/save_files/ad/spr_boost.bin" = "res/save_files/ad/spr_boost.bin"
diff --git a/external/libtp_c b/external/libtp_c
-Subproject 06f0085e4918928f88b74bc360bd03b4da83de2
+Subproject ede70b4390a8e327936bc72144bb55a6ef2c1e7
diff --git a/external/misc/ad.py b/external/misc/ad.py
index a9f334b..8dfb36e 100644
--- a/external/misc/ad.py
+++ b/external/misc/ad.py
@@ -12,9 +12,9 @@ default_entry = {
}
# order matters
-file_names = ["ordon_gate_clip", "ordon_gate_clip", "goats", "hugo", "faron_twilight", "ems", "purple_mist", "forest_bit", "forest_escape", "pillar_clip", "lakebed1", "deku_toad", "karg_flight", "forest2", "diababa", "eldin_twilight", "lanayru_twilight", "post_lanayru", "bk_skip", "morpheel", "mdh", "mountain", "spr1", "darkhammer", "spr_boost", "blizzeta", "ag", "poe_skip", "deathsword", "stallord", "early_ele", "gm", "dangoro", "silver_rupee", "city1", "aeralfos", "city2", "argorok", "faron_boost", "grove2", "tot", "darknut", "dot_skip", "palace1", "palace2", "early_platform", "zant", "hc", "beast_ganon", "horseback_ganon", ]
+file_names = ["ordon_gate_clip", "ordon_gate_clip", "goats", "hugo", "faron_twilight", "ems", "purple_mist", "forest_bit", "forest_escape", "pillar_clip", "lakebed1", "deku_toad", "karg_flight", "forest2", "diababa", "eldin_twilight", "lanayru_twilight", "post_lanayru", "bk_skip", "morpheel", "mdh", "mountain", "mountain_umd", "spr1", "darkhammer", "spr_boost", "blizzeta", "ag", "poe_skip", "deathsword", "stallord", "early_ele", "gm", "dangoro", "silver_rupee", "city1", "aeralfos", "city2", "argorok", "faron_boost", "grove2", "tot", "darknut", "dot_skip", "palace1", "palace2", "early_platform", "zant", "hc", "beast_ganon", "horseback_ganon", ]
-ad_p = [{**default_entry, "id": i, "filename": file_names[i]} for i in range(49)]
+ad_p = [{**default_entry, "id": i, "filename": file_names[i]} for i in range(51)]
ad_p[0]["requirements"] = REQ_POS | REQ_CAM
ad_p[0]["pos"] = (827.450012, 216.490097, -4533.90625)
@@ -73,31 +73,31 @@ ad_p[19]["angle"] = 10754
ad_p[19]["counter"] = 20
# spr boost
-ad_p[24]["requirements"] = REQ_POS | REQ_CAM
-ad_p[24]["pos"] = (2019.5192, 200.00, -2865.9890)
-ad_p[24]["angle"] = 16384
-ad_p[24]["counter"] = 30
+ad_p[25]["requirements"] = REQ_POS | REQ_CAM
+ad_p[25]["pos"] = (2019.5192, 200.00, -2865.9890)
+ad_p[25]["angle"] = 16384
+ad_p[25]["counter"] = 30
# poe 1 skip
-ad_p[27]["requirements"] = REQ_POS | REQ_CAM
-ad_p[27]["pos"] = (-2046.97168, 0.0, -587.304871)
-ad_p[27]["angle"] = 49030
-ad_p[27]["cam"]["pos"] = (-1779.00293, 213.707397, -584.686768)
-ad_p[27]["cam"]["target"] = (-2047.97168, 130.16568, -587.317139)
-ad_p[27]["counter"] = 10
+ad_p[28]["requirements"] = REQ_POS | REQ_CAM
+ad_p[28]["pos"] = (-2046.97168, 0.0, -587.304871)
+ad_p[28]["angle"] = 49030
+ad_p[28]["cam"]["pos"] = (-1779.00293, 213.707397, -584.686768)
+ad_p[28]["cam"]["target"] = (-2047.97168, 130.16568, -587.317139)
+ad_p[28]["counter"] = 10
# early ele
-ad_p[30]["requirements"] = REQ_POS | REQ_CAM
-ad_p[30]["pos"] = (1304.8733, -355.5959, -5385.2314)
-ad_p[30]["angle"] = 45225
-ad_p[30]["counter"] = 30
+ad_p[31]["requirements"] = REQ_POS | REQ_CAM
+ad_p[31]["pos"] = (1304.8733, -355.5959, -5385.2314)
+ad_p[31]["angle"] = 45225
+ad_p[31]["counter"] = 30
# dot skip
-ad_p[42]["requirements"] = REQ_POS | REQ_CAM
-ad_p[42]["cam"]["target"] = 1361.59766, -33.1954155, -1090.47632
-ad_p[42]["cam"]["pos"] = 1396.36316, 9.51973343, -719.644531
-ad_p[42]["angle"] = 33673
-ad_p[42]["pos"] = 1361.68408, -143.56076, -1089.4801
+ad_p[43]["requirements"] = REQ_POS | REQ_CAM
+ad_p[43]["cam"]["target"] = 1361.59766, -33.1954155, -1090.47632
+ad_p[43]["cam"]["pos"] = 1396.36316, 9.51973343, -719.644531
+ad_p[43]["angle"] = 33673
+ad_p[43]["pos"] = 1361.68408, -143.56076, -1089.4801
file = open("ad.bin", "wb")
diff --git a/external/misc/hundo.py b/external/misc/hundo.py
index 33b34f8..9a5f9ae 100644
--- a/external/misc/hundo.py
+++ b/external/misc/hundo.py
@@ -12,9 +12,9 @@ default_entry = {
}
# order matters
-file_names = ["goats", "ordon_gate_clip", "goats_2", "faron_twilight", "ems", "purple_mist", "forest_bit", "forest_2", "ookless", "eldin_twilight", "lanayru_gate_clip", "pillar_clip", "lakebed_1", "deku_toad", "karg", "lanayru_twilight", "boss_bug", "kb2", "kb2", "corotd", "gm", "dangoro", "kb1", "lakebed_bk_skip", "morpheel", "star_1", "mdh_tower", "mdh_bridge", "post_mdh", "mountain", "iza_1_skip", "iza_2", "lh_cave", "camp", "ag", "poe_1_skip", "death_sword_skip", "stallord", "gorge_arc", "spr", "darkhammer", "spr_superjump", "spr_bk_lja", "spr_bk_lja", "blizzeta", "nf_bomb_boost", "grove_2", "tot", "tot_early_poe", "tot_statue_throws", "tot_early_hp", "tot_darknut", "dot_skip", "armogohma", "post_tot", "hotspring", "silver_rupee", "fbf", "ice_puzzle", "hv_archery", "cits_early", "cits_1", "aeralfos_skip", "cits_2", "cits_poe_cycle", "fan_tower", "argorok", "star_2", "palace_1", "palace_2", "early_platform", "zant", "coo", "coo_10", "coo_20", "coo_30", "cats", "hc", "hc_darknut", "hc_tower", "beast_ganon", "horseback_ganon", ]
+file_names = ["goats", "ordon_gate_clip", "goats_2", "faron_twilight", "ems", "purple_mist", "forest_bit", "forest_2", "ookless", "eldin_twilight", "lanayru_gate_clip", "pillar_clip", "lakebed_1", "deku_toad", "karg", "lanayru_twilight", "boss_bug", "kb2", "kb2", "corotd", "gm", "dangoro", "kb1", "lakebed_bk_skip", "morpheel", "star_1", "mdh_tower", "mdh_bridge", "post_mdh", "iza_1_skip", "lh_cave", "camp", "ag", "poe_1_skip", "death_sword_skip", "stallord", "post_ag", "spr", "darkhammer", "spr_superjump", "spr_bk_lja", "spr_bk_lja", "blizzeta", "nf_bomb_boost", "grove_skip", "grove_boost", "tot", "tot_early_poe", "tot_statue_throws", "tot_early_hp", "tot_darknut", "dot_skip", "post_tot", "hotspring", "silver_rupee", "ice_puzzle", "hv_archery", "cits_1", "aeralfos_skip", "cits_2", "cits_poe_cycle", "fan_tower", "argorok", "star_2", "palace_1", "palace_2", "early_platform", "zant", "coo", "coo_10", "coo_20", "coo_30", "cats", "hc", "hc_darknut", "hc_tower", "beast_ganon", "horseback_ganon", ]
-hundo_p = [{**default_entry, "id": i, "filename": file_names[i]} for i in range(82)]
+hundo_p = [{**default_entry, "id": i, "filename": file_names[i]} for i in range(78)]
hundo_p[1]["requirements"] = REQ_POS | REQ_CAM
@@ -64,61 +64,70 @@ hundo_p[26]["angle"] = 32025
hundo_p[26]["pos"] = 25254.6875, -3031.50854, 10222.1445
hundo_p[26]["counter"] = 15
-hundo_p[35]["requirements"] = REQ_POS | REQ_CAM
-hundo_p[35]["cam"]["target"] = -2047.97168, 130.16568, -587.317139
-hundo_p[35]["cam"]["pos"] = -1779.00293, 213.707397, -584.686768
-hundo_p[35]["angle"] = 49030
-hundo_p[35]["pos"] = -2046.97168, 0.0, -587.304871
-hundo_p[35]["counter"] = 10
-
-hundo_p[41]["requirements"] = REQ_POS | REQ_CAM
-hundo_p[41]["cam"]["target"] = 1529.35425, 466.16306, 3684.08252
-hundo_p[41]["cam"]["pos"] = 1765.20581, 691.830688, 3662.42749
-hundo_p[41]["angle"] = 50120
-hundo_p[41]["pos"] = 1530.35, 359.56, 3683.99
-hundo_p[41]["counter"] = 30
-
-hundo_p[42]["requirements"] = REQ_POS
-hundo_p[42]["angle"] = 32887
-hundo_p[42]["pos"] = -2171.19, 973.96, -2384.89
-hundo_p[42]["counter"] = 30
-
-hundo_p[52]["requirements"] = REQ_POS | REQ_CAM
-hundo_p[52]["cam"]["target"] = 1361.59766, -33.1954155, -1090.47632
-hundo_p[52]["cam"]["pos"] = 1396.36316, 9.51973343, -719.644531
-hundo_p[52]["angle"] = 33673
-hundo_p[52]["pos"] = 1361.68408, -143.56076, -1089.4801
-
-hundo_p[56]["requirements"] = REQ_POS | REQ_CAM
-hundo_p[56]["cam"]["target"] = 961.308044, 203.885788, 4184.82471
-hundo_p[56]["cam"]["pos"] = 1220.0835, 320.043884, 4269.48779
-hundo_p[56]["angle"] = 45836
-hundo_p[56]["pos"] = 962.257813, 100.0, 4185.1377
+hundo_p[33]["requirements"] = REQ_POS | REQ_CAM
+hundo_p[33]["cam"]["target"] = -2047.97168, 130.16568, -587.317139
+hundo_p[33]["cam"]["pos"] = -1779.00293, 213.707397, -584.686768
+hundo_p[33]["angle"] = 49030
+hundo_p[33]["pos"] = -2046.97168, 0.0, -587.304871
+hundo_p[33]["counter"] = 10
+
+hundo_p[39]["requirements"] = REQ_POS | REQ_CAM
+hundo_p[39]["cam"]["target"] = 1529.35425, 466.16306, 3684.08252
+hundo_p[39]["cam"]["pos"] = 1765.20581, 691.830688, 3662.42749
+hundo_p[39]["angle"] = 50120
+hundo_p[39]["pos"] = 1530.35, 359.56, 3683.99
+hundo_p[39]["counter"] = 30
+
+hundo_p[40]["requirements"] = REQ_POS
+hundo_p[40]["angle"] = 32887
+hundo_p[40]["pos"] = -2171.19, 973.96, -2384.89
+hundo_p[40]["counter"] = 30
+
+hundo_p[44]["requirements"] = REQ_POS
+hundo_p[44]["cam"]["target"] = -9965.82617, 2176.59863, 4084.57056
+hundo_p[44]["cam"]["pos"] = -10415.2363, 2212.92139, 4370.72852
+hundo_p[44]["angle"] = 22306
+hundo_p[44]["pos"] = -9966.6689, 2000.0, 4085.1082
+hundo_p[44]["counter"] = 30
+
+hundo_p[45]["requirements"] = REQ_POS
+hundo_p[45]["cam"]["target"] = -1765.32605, 1180.38452, 4303.98584
+hundo_p[45]["cam"]["pos"] = -1368.4314, 1347.8916, 4057.84863
+hundo_p[45]["angle"] = 54947
+hundo_p[45]["pos"] = -1764.4763, 1000.0, 4303.4585
+hundo_p[45]["counter"] = 30
+
+hundo_p[51]["requirements"] = REQ_POS | REQ_CAM
+hundo_p[51]["cam"]["target"] = 1361.59766, -33.1954155, -1090.47632
+hundo_p[51]["cam"]["pos"] = 1396.36316, 9.51973343, -719.644531
+hundo_p[51]["angle"] = 33673
+hundo_p[51]["pos"] = 1361.68408, -143.56076, -1089.4801
+
+hundo_p[54]["requirements"] = REQ_POS | REQ_CAM
+hundo_p[54]["cam"]["target"] = 961.308044, 203.885788, 4184.82471
+hundo_p[54]["cam"]["pos"] = 1220.0835, 320.043884, 4269.48779
+hundo_p[54]["angle"] = 45836
+hundo_p[54]["pos"] = 962.257813, 100.0, 4185.1377
+hundo_p[54]["counter"] = 30
+
+hundo_p[56]["requirements"] = REQ_POS
+hundo_p[56]["angle"] = 64520
+hundo_p[56]["pos"] = 3125.57, -62.16, -9360.22
hundo_p[56]["counter"] = 30
-hundo_p[59]["requirements"] = REQ_POS
-hundo_p[59]["angle"] = 64520
-hundo_p[59]["pos"] = 3125.57, -62.16, -9360.22
-hundo_p[59]["counter"] = 30
-
-hundo_p[60]["requirements"] = REQ_POS
-hundo_p[60]["angle"] = 21207
-hundo_p[60]["pos"] = 220.75, -769.96, -3299.14
-hundo_p[60]["counter"] = 30
-
-hundo_p[61]["requirements"] = REQ_POS | REQ_CAM
-hundo_p[61]["cam"]["target"] = 1313.54285, -234.203003, 5545.16846
-hundo_p[61]["cam"]["pos"] = 1027.53259, -108.096123, 5605.23047
-hundo_p[61]["angle"] = 16384
-hundo_p[61]["pos"] = 1309.60645, -240.0, 5533.43848
-hundo_p[61]["counter"] = 10
-
-hundo_p[76]["requirements"] = REQ_POS | REQ_CAM
-hundo_p[76]["cam"]["target"] = 5309.32373, 160.1, -3581.83423
-hundo_p[76]["cam"]["pos"] = 4893.25391, 160.117676, -3524.51245
-hundo_p[76]["angle"] = 17282
-hundo_p[76]["pos"] = 5238.59, 0.00, -3575.74
-hundo_p[76]["counter"] = 30
+hundo_p[57]["requirements"] = REQ_POS | REQ_CAM
+hundo_p[57]["cam"]["target"] = 1313.54285, -234.203003, 5545.16846
+hundo_p[57]["cam"]["pos"] = 1027.53259, -108.096123, 5605.23047
+hundo_p[57]["angle"] = 16384
+hundo_p[57]["pos"] = 1309.60645, -240.0, 5533.43848
+hundo_p[57]["counter"] = 10
+
+hundo_p[72]["requirements"] = REQ_POS | REQ_CAM
+hundo_p[72]["cam"]["target"] = 5309.32373, 160.1, -3581.83423
+hundo_p[72]["cam"]["pos"] = 4893.25391, 160.117676, -3524.51245
+hundo_p[72]["angle"] = 17282
+hundo_p[72]["pos"] = 5238.59, 0.00, -3575.74
+hundo_p[72]["counter"] = 30
file = open("hundo.bin", "wb")
diff --git a/include/gz_flags.h b/include/gz_flags.h
index 9464c93..7e6755c 100644
--- a/include/gz_flags.h
+++ b/include/gz_flags.h
@@ -1,10 +1,10 @@
#pragma once
#include "font.h"
#ifdef WII_PLATFORM
-#define MAX_GZ_FLAGS 15
+#define MAX_GZ_FLAGS 16
#endif
#ifdef GCN_PLATFORM
-#define MAX_GZ_FLAGS 14
+#define MAX_GZ_FLAGS 15
#endif
struct GZFlag {
diff --git a/include/menus/ad_saves_menu.h b/include/menus/ad_saves_menu.h
index 231abea..e592272 100644
--- a/include/menus/ad_saves_menu.h
+++ b/include/menus/ad_saves_menu.h
@@ -25,6 +25,7 @@ enum ADPracticeIndex {
AD_MORPHEEL_INDEX,
AD_MDH_INDEX,
AD_MOUNTAIN_INDEX,
+ AD_MOUNTAIN_UMD_INDEX,
AD_SPR_INDEX,
AD_DARK_HAMMER_INDEX,
AD_SPR_BOOST_INDEX,
diff --git a/include/menus/hundo_saves_menu.h b/include/menus/hundo_saves_menu.h
index 28199c2..f53e7a5 100644
--- a/include/menus/hundo_saves_menu.h
+++ b/include/menus/hundo_saves_menu.h
@@ -2,7 +2,7 @@
#include "menu.h"
-#define HND_SPECIALS_AMNT 27
+#define HND_SPECIALS_AMNT 26
enum HundoPracticeIndex {
HND_GOATS_1_INDEX,
@@ -34,38 +34,34 @@ enum HundoPracticeIndex {
HND_MDH_TOWER_INDEX,
HND_MDH_BRIDGE_INDEX,
HND_POST_MDH_INDEX,
- HND_MOUNTAIN_INDEX,
HND_IZA_1_SKIP_INDEX,
- HND_IZA_2_INDEX,
HND_LH_CAVE_INDEX,
HND_BULBLIN_CAMP_INDEX,
HND_AG_INDEX,
HND_POE_1_SKIP_INDEX,
HND_DSS_INDEX,
HND_STALLORD_INDEX,
- HND_GORGE_INDEX,
+ HND_POST_AG_INDEX,
HND_SPR_INDEX,
HND_DARK_HAMMER_INDEX,
HND_SPR_SUPERJUMP_INDEX,
HND_SPR_BK_LJA_INDEX,
HND_SPR_BK_ROOM_INDEX,
HND_BLIZZETA_INDEX,
- HND_BOMB_BOOST_INDEX,
- HND_GROVE_2_INDEX,
+ HND_FARON_BOOST_INDEX,
+ HND_GROVE_SKIP_INDEX,
+ HND_GROVE_BOOST_INDEX,
HND_TOT_INDEX,
HND_EARLY_POE_INDEX,
HND_STATUE_THROWS_INDEX,
HND_EARLY_HP_INDEX,
HND_DARKNUT_INDEX,
HND_DOT_SKIP_INDEX,
- HND_ARMOGOHMA_INDEX,
HND_POST_TOT_INDEX,
HND_HOTSPRING_INDEX,
HND_BELL_INDEX,
- HND_FBF_INDEX,
HND_PUZZLE_INDEX,
HND_ARCHERY_INDEX,
- HND_CITY_EARLY_INDEX,
HND_CITY_1_INDEX,
HND_AERALFOS_INDEX,
HND_CITY_2_INDEX,
diff --git a/include/menus/tools_menu.h b/include/menus/tools_menu.h
index e5e3c8e..3970ee1 100644
--- a/include/menus/tools_menu.h
+++ b/include/menus/tools_menu.h
@@ -3,10 +3,10 @@
#include "menu.h"
#ifdef WII_PLATFORM
-#define TOOL_AMNT 18
+#define TOOL_AMNT 19
#endif
#ifdef GCN_PLATFORM
-#define TOOL_AMNT 17
+#define TOOL_AMNT 18
#endif
namespace Tools {
enum ToolsIndex {
@@ -18,6 +18,7 @@ enum ToolsIndex {
BIT_INDEX,
#endif
COROTD_INDEX,
+ UMD_INDEX,
INPUT_VIEWER_INDEX,
LINK_DEBUG_INDEX,
SAND_INDEX,
diff --git a/include/umd.h b/include/umd.h
new file mode 100644
index 0000000..5a5303a
--- /dev/null
+++ b/include/umd.h
@@ -0,0 +1,8 @@
+#pragma once
+
+extern bool g_umd_active;
+
+namespace UMDIndicator {
+void render();
+void run();
+} // namespace UMDIndicator \ No newline at end of file
diff --git a/res/save_files/ad.bin b/res/save_files/ad.bin
index 901cf97..6af49aa 100644
--- a/res/save_files/ad.bin
+++ b/res/save_files/ad.bin
Binary files differ
diff --git a/res/save_files/ad/mountain_umd.bin b/res/save_files/ad/mountain_umd.bin
new file mode 100644
index 0000000..9e4669b
--- /dev/null
+++ b/res/save_files/ad/mountain_umd.bin
Binary files differ
diff --git a/res/save_files/hundo.bin b/res/save_files/hundo.bin
index cbb9990..2d24752 100644
--- a/res/save_files/hundo.bin
+++ b/res/save_files/hundo.bin
Binary files differ
diff --git a/res/save_files/hundo/aeralfos_skip.bin b/res/save_files/hundo/aeralfos_skip.bin
index d709105..9db0785 100644
--- a/res/save_files/hundo/aeralfos_skip.bin
+++ b/res/save_files/hundo/aeralfos_skip.bin
Binary files differ
diff --git a/res/save_files/hundo/ag.bin b/res/save_files/hundo/ag.bin
index 9db1233..eeaee28 100644
--- a/res/save_files/hundo/ag.bin
+++ b/res/save_files/hundo/ag.bin
Binary files differ
diff --git a/res/save_files/hundo/argorok.bin b/res/save_files/hundo/argorok.bin
index a542fcd..add9ddc 100644
--- a/res/save_files/hundo/argorok.bin
+++ b/res/save_files/hundo/argorok.bin
Binary files differ
diff --git a/res/save_files/hundo/armogohma.bin b/res/save_files/hundo/armogohma.bin
deleted file mode 100644
index 8dc651e..0000000
--- a/res/save_files/hundo/armogohma.bin
+++ /dev/null
Binary files differ
diff --git a/res/save_files/hundo/beast_ganon.bin b/res/save_files/hundo/beast_ganon.bin
index 9e88509..9014b4e 100644
--- a/res/save_files/hundo/beast_ganon.bin
+++ b/res/save_files/hundo/beast_ganon.bin
Binary files differ
diff --git a/res/save_files/hundo/blizzeta.bin b/res/save_files/hundo/blizzeta.bin
index 00380ed..fb211c0 100644
--- a/res/save_files/hundo/blizzeta.bin
+++ b/res/save_files/hundo/blizzeta.bin
Binary files differ
diff --git a/res/save_files/hundo/boss_bug.bin b/res/save_files/hundo/boss_bug.bin
index 8bb8b11..980611b 100644
--- a/res/save_files/hundo/boss_bug.bin
+++ b/res/save_files/hundo/boss_bug.bin
Binary files differ
diff --git a/res/save_files/hundo/camp.bin b/res/save_files/hundo/camp.bin
index 1e582db..61d5c0d 100644
--- a/res/save_files/hundo/camp.bin
+++ b/res/save_files/hundo/camp.bin
Binary files differ
diff --git a/res/save_files/hundo/cats.bin b/res/save_files/hundo/cats.bin
index 9ec0b43..ef04f2e 100644
--- a/res/save_files/hundo/cats.bin
+++ b/res/save_files/hundo/cats.bin
Binary files differ
diff --git a/res/save_files/hundo/cits_1.bin b/res/save_files/hundo/cits_1.bin
index 3b50715..c66d932 100644
--- a/res/save_files/hundo/cits_1.bin
+++ b/res/save_files/hundo/cits_1.bin
Binary files differ
diff --git a/res/save_files/hundo/cits_2.bin b/res/save_files/hundo/cits_2.bin
index fe3c4c7..bb8f48e 100644
--- a/res/save_files/hundo/cits_2.bin
+++ b/res/save_files/hundo/cits_2.bin
Binary files differ
diff --git a/res/save_files/hundo/cits_early.bin b/res/save_files/hundo/cits_early.bin
deleted file mode 100644
index 357c8cb..0000000
--- a/res/save_files/hundo/cits_early.bin
+++ /dev/null
Binary files differ
diff --git a/res/save_files/hundo/cits_poe_cycle.bin b/res/save_files/hundo/cits_poe_cycle.bin
index a90e6e2..fd63f6e 100644
--- a/res/save_files/hundo/cits_poe_cycle.bin
+++ b/res/save_files/hundo/cits_poe_cycle.bin
Binary files differ
diff --git a/res/save_files/hundo/coo.bin b/res/save_files/hundo/coo.bin
index 7cb1c82..c89cc4c 100644
--- a/res/save_files/hundo/coo.bin
+++ b/res/save_files/hundo/coo.bin
Binary files differ
diff --git a/res/save_files/hundo/coo_10.bin b/res/save_files/hundo/coo_10.bin
index bdff74a..394db6e 100644
--- a/res/save_files/hundo/coo_10.bin
+++ b/res/save_files/hundo/coo_10.bin
Binary files differ
diff --git a/res/save_files/hundo/coo_20.bin b/res/save_files/hundo/coo_20.bin
index c73c0a0..c2de385 100644
--- a/res/save_files/hundo/coo_20.bin
+++ b/res/save_files/hundo/coo_20.bin
Binary files differ
diff --git a/res/save_files/hundo/coo_30.bin b/res/save_files/hundo/coo_30.bin
index a66bb15..fb2bb44 100644
--- a/res/save_files/hundo/coo_30.bin
+++ b/res/save_files/hundo/coo_30.bin
Binary files differ
diff --git a/res/save_files/hundo/corotd.bin b/res/save_files/hundo/corotd.bin
index 49a09a8..ff1ac32 100644
--- a/res/save_files/hundo/corotd.bin
+++ b/res/save_files/hundo/corotd.bin
Binary files differ
diff --git a/res/save_files/hundo/dangoro.bin b/res/save_files/hundo/dangoro.bin
index 060a481..90ee061 100644
--- a/res/save_files/hundo/dangoro.bin
+++ b/res/save_files/hundo/dangoro.bin
Binary files differ
diff --git a/res/save_files/hundo/darkhammer.bin b/res/save_files/hundo/darkhammer.bin
index 9688172..a61c56e 100644
--- a/res/save_files/hundo/darkhammer.bin
+++ b/res/save_files/hundo/darkhammer.bin
Binary files differ
diff --git a/res/save_files/hundo/death_sword_skip.bin b/res/save_files/hundo/death_sword_skip.bin
index 0d47c49..08c274b 100644
--- a/res/save_files/hundo/death_sword_skip.bin
+++ b/res/save_files/hundo/death_sword_skip.bin
Binary files differ
diff --git a/res/save_files/hundo/dot_skip.bin b/res/save_files/hundo/dot_skip.bin
index c280e9e..42188ad 100644
--- a/res/save_files/hundo/dot_skip.bin
+++ b/res/save_files/hundo/dot_skip.bin
Binary files differ
diff --git a/res/save_files/hundo/early_platform.bin b/res/save_files/hundo/early_platform.bin
index fda2e99..4a472f2 100644
--- a/res/save_files/hundo/early_platform.bin
+++ b/res/save_files/hundo/early_platform.bin
Binary files differ
diff --git a/res/save_files/hundo/fan_tower.bin b/res/save_files/hundo/fan_tower.bin
index c71716e..270e21d 100644
--- a/res/save_files/hundo/fan_tower.bin
+++ b/res/save_files/hundo/fan_tower.bin
Binary files differ
diff --git a/res/save_files/hundo/fbf.bin b/res/save_files/hundo/fbf.bin
deleted file mode 100644
index 2b8d36b..0000000
--- a/res/save_files/hundo/fbf.bin
+++ /dev/null
Binary files differ
diff --git a/res/save_files/hundo/gm.bin b/res/save_files/hundo/gm.bin
index fc1fbe3..7306c21 100644
--- a/res/save_files/hundo/gm.bin
+++ b/res/save_files/hundo/gm.bin
Binary files differ
diff --git a/res/save_files/hundo/gorge_arc.bin b/res/save_files/hundo/gorge_arc.bin
deleted file mode 100644
index 9107af4..0000000
--- a/res/save_files/hundo/gorge_arc.bin
+++ /dev/null
Binary files differ
diff --git a/res/save_files/hundo/grove_2.bin b/res/save_files/hundo/grove_2.bin
deleted file mode 100644
index a76d49d..0000000
--- a/res/save_files/hundo/grove_2.bin
+++ /dev/null
Binary files differ
diff --git a/res/save_files/hundo/grove_boost.bin b/res/save_files/hundo/grove_boost.bin
new file mode 100644
index 0000000..5506f58
--- /dev/null
+++ b/res/save_files/hundo/grove_boost.bin
Binary files differ
diff --git a/res/save_files/hundo/grove_skip.bin b/res/save_files/hundo/grove_skip.bin
new file mode 100644
index 0000000..1a6773f
--- /dev/null
+++ b/res/save_files/hundo/grove_skip.bin
Binary files differ
diff --git a/res/save_files/hundo/hc.bin b/res/save_files/hundo/hc.bin
index bb17825..fc21a2b 100644
--- a/res/save_files/hundo/hc.bin
+++ b/res/save_files/hundo/hc.bin
Binary files differ
diff --git a/res/save_files/hundo/hc_darknut.bin b/res/save_files/hundo/hc_darknut.bin
index 4ada2f2..8ca953a 100644
--- a/res/save_files/hundo/hc_darknut.bin
+++ b/res/save_files/hundo/hc_darknut.bin
Binary files differ
diff --git a/res/save_files/hundo/hc_tower.bin b/res/save_files/hundo/hc_tower.bin
index 964b5e4..600dc67 100644
--- a/res/save_files/hundo/hc_tower.bin
+++ b/res/save_files/hundo/hc_tower.bin
Binary files differ
diff --git a/res/save_files/hundo/horseback_ganon.bin b/res/save_files/hundo/horseback_ganon.bin
index a98331c..b2475ed 100644
--- a/res/save_files/hundo/horseback_ganon.bin
+++ b/res/save_files/hundo/horseback_ganon.bin
Binary files differ
diff --git a/res/save_files/hundo/hotspring.bin b/res/save_files/hundo/hotspring.bin
index 8b726ce..bcfdaa3 100644
--- a/res/save_files/hundo/hotspring.bin
+++ b/res/save_files/hundo/hotspring.bin
Binary files differ
diff --git a/res/save_files/hundo/hv_archery.bin b/res/save_files/hundo/hv_archery.bin
index c3876b8..eae2735 100644
--- a/res/save_files/hundo/hv_archery.bin
+++ b/res/save_files/hundo/hv_archery.bin
Binary files differ
diff --git a/res/save_files/hundo/ice_puzzle.bin b/res/save_files/hundo/ice_puzzle.bin
index 232e3fd..061e8c0 100644
--- a/res/save_files/hundo/ice_puzzle.bin
+++ b/res/save_files/hundo/ice_puzzle.bin
Binary files differ
diff --git a/res/save_files/hundo/iza_1_skip.bin b/res/save_files/hundo/iza_1_skip.bin
index ece7c42..887ee68 100644
--- a/res/save_files/hundo/iza_1_skip.bin
+++ b/res/save_files/hundo/iza_1_skip.bin
Binary files differ
diff --git a/res/save_files/hundo/iza_2.bin b/res/save_files/hundo/iza_2.bin
deleted file mode 100644
index 2919ad6..0000000
--- a/res/save_files/hundo/iza_2.bin
+++ /dev/null
Binary files differ
diff --git a/res/save_files/hundo/kb1.bin b/res/save_files/hundo/kb1.bin
index e75bca0..1c2df4e 100644
--- a/res/save_files/hundo/kb1.bin
+++ b/res/save_files/hundo/kb1.bin
Binary files differ
diff --git a/res/save_files/hundo/kb2.bin b/res/save_files/hundo/kb2.bin
index 3281b93..117d77a 100644
--- a/res/save_files/hundo/kb2.bin
+++ b/res/save_files/hundo/kb2.bin
Binary files differ
diff --git a/res/save_files/hundo/lakebed_bk_skip.bin b/res/save_files/hundo/lakebed_bk_skip.bin
index 2dd3713..520f5db 100644
--- a/res/save_files/hundo/lakebed_bk_skip.bin
+++ b/res/save_files/hundo/lakebed_bk_skip.bin
Binary files differ
diff --git a/res/save_files/hundo/lh_cave.bin b/res/save_files/hundo/lh_cave.bin
index 0ad877d..fecb09e 100644
--- a/res/save_files/hundo/lh_cave.bin
+++ b/res/save_files/hundo/lh_cave.bin
Binary files differ
diff --git a/res/save_files/hundo/mdh_bridge.bin b/res/save_files/hundo/mdh_bridge.bin
index a3a89e8..3bee6cc 100644
--- a/res/save_files/hundo/mdh_bridge.bin
+++ b/res/save_files/hundo/mdh_bridge.bin
Binary files differ
diff --git a/res/save_files/hundo/mdh_tower.bin b/res/save_files/hundo/mdh_tower.bin
index a465fb7..518e836 100644
--- a/res/save_files/hundo/mdh_tower.bin
+++ b/res/save_files/hundo/mdh_tower.bin
Binary files differ
diff --git a/res/save_files/hundo/morpheel.bin b/res/save_files/hundo/morpheel.bin
index c44cc59..d000430 100644
--- a/res/save_files/hundo/morpheel.bin
+++ b/res/save_files/hundo/morpheel.bin
Binary files differ
diff --git a/res/save_files/hundo/mountain.bin b/res/save_files/hundo/mountain.bin
deleted file mode 100644
index 615749a..0000000
--- a/res/save_files/hundo/mountain.bin
+++ /dev/null
Binary files differ
diff --git a/res/save_files/hundo/nf_bomb_boost.bin b/res/save_files/hundo/nf_bomb_boost.bin
index 286cae8..8a8e885 100644
--- a/res/save_files/hundo/nf_bomb_boost.bin
+++ b/res/save_files/hundo/nf_bomb_boost.bin
Binary files differ
diff --git a/res/save_files/hundo/palace_1.bin b/res/save_files/hundo/palace_1.bin
index f31e3d5..346fa5e 100644
--- a/res/save_files/hundo/palace_1.bin
+++ b/res/save_files/hundo/palace_1.bin
Binary files differ
diff --git a/res/save_files/hundo/palace_2.bin b/res/save_files/hundo/palace_2.bin
index 3bd365a..ef62def 100644
--- a/res/save_files/hundo/palace_2.bin
+++ b/res/save_files/hundo/palace_2.bin
Binary files differ
diff --git a/res/save_files/hundo/poe_1_skip.bin b/res/save_files/hundo/poe_1_skip.bin
index 6e0f308..bd71381 100644
--- a/res/save_files/hundo/poe_1_skip.bin
+++ b/res/save_files/hundo/poe_1_skip.bin
Binary files differ
diff --git a/res/save_files/hundo/post_ag.bin b/res/save_files/hundo/post_ag.bin
new file mode 100644
index 0000000..dee29e7
--- /dev/null
+++ b/res/save_files/hundo/post_ag.bin
Binary files differ
diff --git a/res/save_files/hundo/post_mdh.bin b/res/save_files/hundo/post_mdh.bin
index 1fa2b51..b0f8a44 100644
--- a/res/save_files/hundo/post_mdh.bin
+++ b/res/save_files/hundo/post_mdh.bin
Binary files differ
diff --git a/res/save_files/hundo/post_tot.bin b/res/save_files/hundo/post_tot.bin
index eef813d..e51a94a 100644
--- a/res/save_files/hundo/post_tot.bin
+++ b/res/save_files/hundo/post_tot.bin
Binary files differ
diff --git a/res/save_files/hundo/silver_rupee.bin b/res/save_files/hundo/silver_rupee.bin
index 5a09030..f07a310 100644
--- a/res/save_files/hundo/silver_rupee.bin
+++ b/res/save_files/hundo/silver_rupee.bin
Binary files differ
diff --git a/res/save_files/hundo/spr.bin b/res/save_files/hundo/spr.bin
index 130834b..96fa41d 100644
--- a/res/save_files/hundo/spr.bin
+++ b/res/save_files/hundo/spr.bin
Binary files differ
diff --git a/res/save_files/hundo/spr_bk_lja.bin b/res/save_files/hundo/spr_bk_lja.bin
index ac21203..936895b 100644
--- a/res/save_files/hundo/spr_bk_lja.bin
+++ b/res/save_files/hundo/spr_bk_lja.bin
Binary files differ
diff --git a/res/save_files/hundo/spr_superjump.bin b/res/save_files/hundo/spr_superjump.bin
index e13e9c0..ce77221 100644
--- a/res/save_files/hundo/spr_superjump.bin
+++ b/res/save_files/hundo/spr_superjump.bin
Binary files differ
diff --git a/res/save_files/hundo/stallord.bin b/res/save_files/hundo/stallord.bin
index d382ca6..cb3b5ac 100644
--- a/res/save_files/hundo/stallord.bin
+++ b/res/save_files/hundo/stallord.bin
Binary files differ
diff --git a/res/save_files/hundo/star_1.bin b/res/save_files/hundo/star_1.bin
index 3430458..2d54393 100644
--- a/res/save_files/hundo/star_1.bin
+++ b/res/save_files/hundo/star_1.bin
Binary files differ
diff --git a/res/save_files/hundo/star_2.bin b/res/save_files/hundo/star_2.bin
index 8aefc0e..4151f0f 100644
--- a/res/save_files/hundo/star_2.bin
+++ b/res/save_files/hundo/star_2.bin
Binary files differ
diff --git a/res/save_files/hundo/tot.bin b/res/save_files/hundo/tot.bin
index ced5b05..fd043a0 100644
--- a/res/save_files/hundo/tot.bin
+++ b/res/save_files/hundo/tot.bin
Binary files differ
diff --git a/res/save_files/hundo/tot_darknut.bin b/res/save_files/hundo/tot_darknut.bin
index a360a33..ec14b69 100644
--- a/res/save_files/hundo/tot_darknut.bin
+++ b/res/save_files/hundo/tot_darknut.bin
Binary files differ
diff --git a/res/save_files/hundo/tot_early_hp.bin b/res/save_files/hundo/tot_early_hp.bin
index d540a9c..18afe93 100644
--- a/res/save_files/hundo/tot_early_hp.bin
+++ b/res/save_files/hundo/tot_early_hp.bin
Binary files differ
diff --git a/res/save_files/hundo/tot_early_poe.bin b/res/save_files/hundo/tot_early_poe.bin
index bb6e9c9..80d0769 100644
--- a/res/save_files/hundo/tot_early_poe.bin
+++ b/res/save_files/hundo/tot_early_poe.bin
Binary files differ
diff --git a/res/save_files/hundo/tot_statue_throws.bin b/res/save_files/hundo/tot_statue_throws.bin
index 66f0dc1..f077212 100644
--- a/res/save_files/hundo/tot_statue_throws.bin
+++ b/res/save_files/hundo/tot_statue_throws.bin
Binary files differ
diff --git a/res/save_files/hundo/zant.bin b/res/save_files/hundo/zant.bin
index 82288a6..3f8d8d1 100644
--- a/res/save_files/hundo/zant.bin
+++ b/res/save_files/hundo/zant.bin
Binary files differ
diff --git a/src/gz_flags.cpp b/src/gz_flags.cpp
index b843cf3..606594f 100644
--- a/src/gz_flags.cpp
+++ b/src/gz_flags.cpp
@@ -17,6 +17,7 @@
#include "save_manager.h"
#include "menus/memfiles_menu.h"
#include "corotdcheck.h"
+#include "umd.h"
bool inject_save_flag = false;
@@ -27,6 +28,7 @@ GZFlag GZ_Flags[MAX_GZ_FLAGS] = {
#endif
{&ToolItems[Tools::ROLL_INDEX].active, GAME_LOOP, RollIndicator::run},
{&ToolItems[Tools::COROTD_INDEX].active, GAME_LOOP, CoroTDChecker::run},
+ {&ToolItems[Tools::UMD_INDEX].active, POST_GAME_LOOP, UMDIndicator::run},
{&inject_save_flag, GAME_LOOP, SaveManager::trigger_load},
{&SceneItems[Scene::FREEZE_ACTOR_INDEX].active, GAME_LOOP, Actor::freeze_actors,
Actor::unfreeze_actors},
diff --git a/src/menus/ad_saves_menu.cpp b/src/menus/ad_saves_menu.cpp
index 84d0c7a..4a9c1e1 100644
--- a/src/menus/ad_saves_menu.cpp
+++ b/src/menus/ad_saves_menu.cpp
@@ -13,7 +13,7 @@
#include "libtp_c/include/utils.h"
#include "fs.h"
-#define LINES 50
+#define LINES 51
static Cursor cursor = {0, 0};
bool init_once = false;
@@ -41,6 +41,7 @@ Line lines[LINES] = {
{"morpheel", AD_MORPHEEL_INDEX, "Morpheel fight (no Zora Armor)"},
{"mdh", AD_MDH_INDEX, "MDH segment"},
{"mountain", AD_MOUNTAIN_INDEX, "Climbing up Snowpeak mountain"},
+ {"mountain umd", AD_MOUNTAIN_UMD_INDEX, "Snowpeak Mountain UMD"},
{"snowpeak", AD_SPR_INDEX, "The Snowpeak Ruins dungeon segment"},
{"dark hammer", AD_DARK_HAMMER_INDEX, "The Snowpeak Ruins miniboss"},
{"snowpeak bomb boost", AD_SPR_BOOST_INDEX, "Bomb boost to SPR 2nd floor"},
diff --git a/src/menus/hundo_saves_menu.cpp b/src/menus/hundo_saves_menu.cpp
index 11ea5f5..a6ddaf5 100644
--- a/src/menus/hundo_saves_menu.cpp
+++ b/src/menus/hundo_saves_menu.cpp
@@ -13,7 +13,7 @@
#include "libtp_c/include/utils.h"
#include "fs.h"
-#define LINES 82
+#define LINES 78
#define REQ_POS 1
#define REQ_CAM 2
@@ -48,41 +48,37 @@ Line lines[LINES] = {
{"lakebed bk skip", HND_LAKEBED_BK_SKIP_INDEX, "boss key skip in lakebed main room"},
{"morpheel", HND_MORPHEEL_INDEX, "the lakebed temple boss"},
{"star 1", HND_STAR_1_INDEX, "the first STAR minigame"},
- {"mdh tower", HND_MDH_TOWER_INDEX, "mdh tower climb before castle rooftops"},
- {"mdh bridge", HND_MDH_BRIDGE_INDEX, "the falling bridge on castle rooftops"},
- {"post mdh", HND_POST_MDH_INDEX, "the beginning of the first collection cycle"},
- {"mountain climb", HND_MOUNTAIN_INDEX, "the climb up snowpeak"},
+ {"mdh tower", HND_MDH_TOWER_INDEX, "mdh tower climb"},
+ {"mdh bridge", HND_MDH_BRIDGE_INDEX, "mdh castle rooftops"},
+ {"post mdh", HND_POST_MDH_INDEX, "collection cycle after mdh"},
{"iza 1 skip", HND_IZA_1_SKIP_INDEX, "plumm oob clip to skip iza boat ride"},
- {"iza 2", HND_IZA_2_INDEX, "the iza minigame"},
{"lake hylia cave", HND_LH_CAVE_INDEX, "the lake hylia dark cave"},
- {"bulblin camp", HND_BULBLIN_CAMP_INDEX, "the area before arbiter's grounds"},
+ {"bulblin camp", HND_BULBLIN_CAMP_INDEX, "the camp before arbiter's grounds"},
{"arbiter's grounds", HND_AG_INDEX, "the arbiter's grounds segment"},
{"poe 1 skip", HND_POE_1_SKIP_INDEX, "the pillar jump in arbiter's grounds"},
{"death sword", HND_DSS_INDEX, "the arbiter's grounds miniboss"},
{"stallord", HND_STALLORD_INDEX, "the arbiter's grounds boss"},
- {"gorge arc", HND_GORGE_INDEX, "the collection cycle from gorge to snowpeak"},
+ {"post ag", HND_POST_AG_INDEX, "collection cycle after arbiter's"},
{"snowpeak", HND_SPR_INDEX, "the snowpeak dungeon segment"},
{"darkhammer", HND_DARK_HAMMER_INDEX, "The snowpeak miniboss"},
{"spr superjump", HND_SPR_SUPERJUMP_INDEX, "the snowpeak superjump to second floor"},
{"spr boss key lja", HND_SPR_BK_LJA_INDEX, "the lja to get to snowpeak boss key early"},
{"spr boss key room", HND_SPR_BK_ROOM_INDEX, "the snowpeak boss key room"},
{"blizzeta", HND_BLIZZETA_INDEX, "the snowpeak ruins boss"},
- {"faron bomb boost", HND_BOMB_BOOST_INDEX, "the bomb boost to sacred grove"},
- {"grove 2", HND_GROVE_2_INDEX, "the second skull kid chase"},
+ {"faron boost", HND_FARON_BOOST_INDEX, "the boost to sacred grove"},
+ {"grove skip", HND_GROVE_SKIP_INDEX, "grove 2 skip w/ moon boots"},
+ {"grove boost", HND_GROVE_BOOST_INDEX, "boost to get to top floor of grove"},
{"temple of time", HND_TOT_INDEX, "the temple of time segment"},
{"tot early poe", HND_EARLY_POE_INDEX, "early first poe in temple of time"},
{"tot statue throws", HND_STATUE_THROWS_INDEX, "temple of time statue throws"},
{"tot early hp", HND_EARLY_HP_INDEX, "temple of time bomb boost to heart piece"},
{"tot darknut", HND_DARKNUT_INDEX, "the temple of time miniboss"},
{"dot skip", HND_DOT_SKIP_INDEX, "statue clip through door of time"},
- {"armogohma", HND_ARMOGOHMA_INDEX, "the temple of time boss"},
{"post tot", HND_POST_TOT_INDEX, "the collection cycle after temple of time"},
{"hotspring minigame", HND_HOTSPRING_INDEX, "the goron hotspring water minigame"},
{"silver rupee", HND_BELL_INDEX, "kakariko silver rupee collection"},
- {"rupee isle", HND_FBF_INDEX, "the rupee isle collection"},
{"ice puzzle", HND_PUZZLE_INDEX, "the ice puzzle segment"},
{"hugo archery", HND_ARCHERY_INDEX, "the first hidden village trip"},
- {"city in the sky early", HND_CITY_EARLY_INDEX, "clip to the canon early"},
{"city in the sky 1", HND_CITY_1_INDEX, "the first city in the sky segment"},
{"aeralfos skip", HND_AERALFOS_INDEX, "the city in the sky miniboss"},
{"city in the sky 2", HND_CITY_2_INDEX, "the second city in the sky segment"},
@@ -263,7 +259,6 @@ void HundoSavesMenu::render() {
special(HND_SPR_BK_ROOM_INDEX, spr_bosskey, nullptr),
special(HND_EARLY_POE_INDEX, nullptr, tot_early_poe),
special(HND_EARLY_HP_INDEX, nullptr, tot_early_hp),
- special(HND_CITY_EARLY_INDEX, hugo_archery, nullptr),
special(HND_POE_CYCLE_INDEX, nullptr, cits_poe_cycle),
special(HND_FAN_TOWER_INDEX, fan_tower, nullptr),
special(HND_ARGOROK_INDEX, nullptr, argorok),
diff --git a/src/menus/tools_menu.cpp b/src/menus/tools_menu.cpp
index b35fcc0..afa5000 100644
--- a/src/menus/tools_menu.cpp
+++ b/src/menus/tools_menu.cpp
@@ -14,6 +14,7 @@
#include "utils/cursor.h"
#include "utils/lines.h"
#include "libtp_c/include/d/com/d_com_inf_game.h"
+#include "umd.h"
#define LINES TOOL_AMNT
#define MAX_TUNIC_COLORS 7
using namespace Tools;
@@ -25,15 +26,16 @@ bool init_once = false;
bool g_tunic_color_flag;
Tool ToolItems[TOOL_AMNT] = {
- {RELOAD_AREA_INDEX, false}, {FAST_BONK_INDEX, false}, {FAST_MOVEMENT_INDEX, false},
+ {RELOAD_AREA_INDEX, false}, {FAST_BONK_INDEX, false}, {FAST_MOVEMENT_INDEX, false},
{GORGE_INDEX, false},
#ifdef WII_PLATFORM
{BIT_INDEX, false},
#endif
- {COROTD_INDEX, false}, {INPUT_VIEWER_INDEX, false}, {LINK_DEBUG_INDEX, false},
- {SAND_INDEX, false}, {ROLL_INDEX, false}, {TELEPORT_INDEX, false},
- {TURBO_MODE_INDEX, false}, {TIMER_INDEX, false}, {LOAD_TIMER_INDEX, false},
- {IGT_TIMER_INDEX, false}, {FREE_CAM_INDEX, false}, {MOVE_LINK_INDEX, false}};
+ {COROTD_INDEX, false}, {UMD_INDEX, false}, {INPUT_VIEWER_INDEX, false},
+ {LINK_DEBUG_INDEX, false}, {SAND_INDEX, false}, {ROLL_INDEX, false},
+ {TELEPORT_INDEX, false}, {TURBO_MODE_INDEX, false}, {TIMER_INDEX, false},
+ {LOAD_TIMER_INDEX, false}, {IGT_TIMER_INDEX, false}, {FREE_CAM_INDEX, false},
+ {MOVE_LINK_INDEX, false}};
Line lines[LINES] = {
{"area reload", RELOAD_AREA_INDEX, "Use " RELOAD_AREA_TEXT " to reload current area", true,
@@ -50,6 +52,7 @@ Line lines[LINES] = {
#endif
{"coro td checker", COROTD_INDEX, "Show frame info when doing coro td", true,
&ToolItems[COROTD_INDEX].active},
+ {"umd checker", UMD_INDEX, "Practice Snowpeak UMD timing", true, &ToolItems[UMD_INDEX].active},
{"input viewer", INPUT_VIEWER_INDEX, "Show current inputs", true,
&ToolItems[INPUT_VIEWER_INDEX].active},
{"link debug info", LINK_DEBUG_INDEX, "Show Link's position, angle, and speed", true,
diff --git a/src/umd.cpp b/src/umd.cpp
new file mode 100644
index 0000000..99ee3b3
--- /dev/null
+++ b/src/umd.cpp
@@ -0,0 +1,134 @@
+#include "umd.h"
+#include "controller.h"
+#include "gz_flags.h"
+#include "fifo_queue.h"
+#include "fs.h"
+#include "libtp_c/include/JSystem/JUtility/JUTGamePad.h"
+#include "libtp_c/include/msl_c/string.h"
+#include "libtp_c/include/d/com/d_com_inf_game.h"
+#include "libtp_c/include/SSystem/SComponent/c_counter.h"
+#include "libtp_c/include/f_op/f_op_scene_req.h"
+
+namespace UMDIndicator {
+using namespace Controller;
+
+static bool lastFrameADown = false;
+static bool lastFrameBDown = false;
+
+static bool start_timer = false;
+uint32_t previous_counter = 0;
+uint32_t current_counter = 0;
+uint32_t counter_difference = 0;
+static int firstPressedButton = -1;
+static bool exitCheck = false;
+static char buf[20];
+
+static const char* getPressedButtonText() {
+ if (!button_is_held(A, POST_GAME_LOOP) && button_is_down(A))
+ return "A";
+ else if (!button_is_held(B, POST_GAME_LOOP) && button_is_down(B))
+ return "B";
+
+ return "";
+}
+
+void run() {
+ // Reset everything if map is not active
+ if (g_meter2_info.mMapStatus != 2 && g_meter2_info.mMapStatus != 3) {
+ counter_difference = 0;
+ firstPressedButton = -1;
+ exitCheck = false;
+ start_timer = false;
+ }
+
+ if (g_meter2_info.mMenuWindowClass != NULL) {
+ current_counter = cCt_getFrameCount();
+
+ // Activate frame counter as soon as a map opening was scheduled
+ if (start_timer == false &&
+ (g_meter2_info.mMapStatus == 2 || g_meter2_info.mMapStatus == 3)) {
+ bool eventRunning = dMw_c__isEventCheck(g_meter2_info.mMenuWindowClass);
+
+ if (!eventRunning) {
+ start_timer = true;
+ previous_counter = current_counter;
+ counter_difference = 0;
+ }
+ }
+
+ if (start_timer == true && !exitCheck) {
+ counter_difference += current_counter - previous_counter;
+ previous_counter = current_counter;
+
+ // Only care up to 15f after
+ if (counter_difference < 15) {
+ // Ensure A or B was freshly pressed
+ if ((!button_is_held(A, POST_GAME_LOOP) && button_is_down(A)) ||
+ (!button_is_held(B, POST_GAME_LOOP) && button_is_down(B))) {
+ if (counter_difference == 0) {
+ // A or B were pressed together (first button) = BAD
+ if ((!button_is_held(A, POST_GAME_LOOP) && button_is_down(A)) &&
+ (!button_is_held(B, POST_GAME_LOOP) && button_is_down(B))) {
+ FIFOQueue::push("hit both A/B as first", Queue, 0x0000FF00);
+ exitCheck = true;
+ } else {
+ // A or B is pressed here (first button) = GOOD
+ if (!button_is_held(A, POST_GAME_LOOP) && button_is_down(A))
+ firstPressedButton = 0;
+ else
+ firstPressedButton = 1;
+
+ tp_sprintf(buf, "got first %s", getPressedButtonText());
+ FIFOQueue::push(buf, Queue, 0x00CC0000);
+ }
+
+ } else if (counter_difference == 1 && firstPressedButton != -1) {
+ // B or A was pressed here as second button, success
+ FIFOQueue::push("got UMD", Queue, 0x00CC0000);
+ exitCheck = true;
+ } else { // We went late
+
+ // Missed second button
+ if (firstPressedButton != -1) {
+ // Ensure this is the button that needs to be pressed
+ if ((firstPressedButton == 0 && button_is_down(B)) ||
+ (firstPressedButton == 1 && button_is_down(A))) {
+ tp_sprintf(buf, "%df late on second %s", counter_difference - 1,
+ getPressedButtonText());
+ FIFOQueue::push(buf, Queue, 0x99000000);
+ exitCheck = true;
+ }
+ } else { // Missed first button
+ tp_sprintf(buf, "%df late on first %s", counter_difference,
+ getPressedButtonText());
+ FIFOQueue::push(buf, Queue, 0x99000000);
+ exitCheck = true;
+ }
+ }
+ } else { // Neither A or B was freshly pressed
+
+ if (counter_difference ==
+ 0) { // A or B wasn't pressed on frame 0, we possibly went early
+
+ if (lastFrameADown && lastFrameBDown) {
+ FIFOQueue::push("1f early on A/B", Queue, 0x0000FF00);
+ exitCheck = true;
+ } else if (lastFrameADown) {
+ FIFOQueue::push("1f early on A", Queue, 0x0000FF00);
+ exitCheck = true;
+ } else if (lastFrameBDown) {
+ FIFOQueue::push("1f early on B", Queue, 0x0000FF00);
+ exitCheck = true;
+ }
+ }
+ }
+ } else {
+ exitCheck = true;
+ }
+ }
+ }
+
+ lastFrameADown = button_is_down(A) && !button_is_held(A, POST_GAME_LOOP);
+ lastFrameBDown = button_is_down(B) && !button_is_held(B, POST_GAME_LOOP);
+}
+} // namespace UMDIndicator \ No newline at end of file
diff --git a/src/utils/hook.cpp b/src/utils/hook.cpp
index a783d2d..80eaf49 100644
--- a/src/utils/hook.cpp
+++ b/src/utils/hook.cpp
@@ -62,6 +62,7 @@ void initHook(void* p1, void* p2, void* p3) {
void gameLoopHook(void) {
game_loop();
fapGm_ExecuteTrampoline();
+ post_game_loop();
}
void drawHook(void* p1) {