diff --git a/Makefile b/Makefile
index d6bd20cc8c..1739a85b3b 100644
--- a/Makefile
+++ b/Makefile
@@ -30,7 +30,8 @@ COMPILER ?= ido
# gc-eu-mq GameCube Europe/PAL Master Quest
# gc-jp-ce GameCube Japan (Collector's Edition disc)
# The following versions are work-in-progress and not yet matching:
-# (none currently)
+# ntsc-1.0 N64 NTSC 1.0 (Japan/US depending on REGION)
+# ntsc-1.1 N64 NTSC 1.1 (Japan/US depending on REGION)
VERSION ?= gc-eu-mq-dbg
# Number of threads to extract and compress with
N_THREADS ?= $(shell nproc)
@@ -50,7 +51,19 @@ CPP_DEFINES ?=
REGIONAL_CHECKSUM := 0
# Version-specific settings
-ifeq ($(VERSION),pal-1.0)
+ifeq ($(VERSION),ntsc-1.0)
+ REGIONAL_CHECKSUM := 1
+ REGION ?= JP
+ PLATFORM := N64
+ DEBUG := 0
+ COMPARE := 0
+else ifeq ($(VERSION),ntsc-1.1)
+ REGIONAL_CHECKSUM := 1
+ REGION ?= JP
+ PLATFORM := N64
+ DEBUG := 0
+ COMPARE := 0
+else ifeq ($(VERSION),pal-1.0)
REGION ?= EU
PLATFORM := N64
DEBUG := 0
diff --git a/assets/xml/scenes/dungeons/ddan_boss.xml b/assets/xml/scenes/dungeons/ddan_boss.xml
index 2b61024906..86a34e6d9a 100644
--- a/assets/xml/scenes/dungeons/ddan_boss.xml
+++ b/assets/xml/scenes/dungeons/ddan_boss.xml
@@ -6,7 +6,7 @@
-
+
diff --git a/assets/xml/scenes/dungeons/ddan_boss_v2.xml b/assets/xml/scenes/dungeons/ddan_boss_v2.xml
new file mode 100644
index 0000000000..2b61024906
--- /dev/null
+++ b/assets/xml/scenes/dungeons/ddan_boss_v2.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/scenes/dungeons/ice_doukutu.xml b/assets/xml/scenes/dungeons/ice_doukutu.xml
index 4d25aa74f4..f816d7ca24 100644
--- a/assets/xml/scenes/dungeons/ice_doukutu.xml
+++ b/assets/xml/scenes/dungeons/ice_doukutu.xml
@@ -1,8 +1,8 @@
-
-
+
+
diff --git a/assets/xml/scenes/dungeons/ice_doukutu_v2.xml b/assets/xml/scenes/dungeons/ice_doukutu_v2.xml
new file mode 100644
index 0000000000..4d25aa74f4
--- /dev/null
+++ b/assets/xml/scenes/dungeons/ice_doukutu_v2.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/scenes/overworld/spot01.xml b/assets/xml/scenes/overworld/spot01.xml
index 4a57964115..205da509c3 100644
--- a/assets/xml/scenes/overworld/spot01.xml
+++ b/assets/xml/scenes/overworld/spot01.xml
@@ -7,7 +7,6 @@
-
diff --git a/assets/xml/scenes/overworld/spot02.xml b/assets/xml/scenes/overworld/spot02.xml
index 334d0e5991..45708dd3ac 100644
--- a/assets/xml/scenes/overworld/spot02.xml
+++ b/assets/xml/scenes/overworld/spot02.xml
@@ -8,7 +8,6 @@
-
diff --git a/assets/xml/scenes/overworld/spot04.xml b/assets/xml/scenes/overworld/spot04.xml
index 3cfc140950..c861d45278 100644
--- a/assets/xml/scenes/overworld/spot04.xml
+++ b/assets/xml/scenes/overworld/spot04.xml
@@ -14,8 +14,6 @@
-
-
diff --git a/assets/xml/scenes/overworld/spot09.xml b/assets/xml/scenes/overworld/spot09.xml
index a447c9df44..7b7ec2ce5e 100644
--- a/assets/xml/scenes/overworld/spot09.xml
+++ b/assets/xml/scenes/overworld/spot09.xml
@@ -8,9 +8,6 @@
-
-
-
diff --git a/assets/xml/scenes/overworld/spot16.xml b/assets/xml/scenes/overworld/spot16.xml
index 57a64323b2..f3d92c8fe7 100644
--- a/assets/xml/scenes/overworld/spot16.xml
+++ b/assets/xml/scenes/overworld/spot16.xml
@@ -10,6 +10,6 @@
-
+
diff --git a/assets/xml/scenes/overworld/spot16_v2.xml b/assets/xml/scenes/overworld/spot16_v2.xml
new file mode 100644
index 0000000000..57a64323b2
--- /dev/null
+++ b/assets/xml/scenes/overworld/spot16_v2.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/textures/nintendo_rogo_static.xml b/assets/xml/textures/nintendo_rogo_static.xml
index 7a60524b20..295bbfcfa2 100644
--- a/assets/xml/textures/nintendo_rogo_static.xml
+++ b/assets/xml/textures/nintendo_rogo_static.xml
@@ -3,6 +3,6 @@
-
+
diff --git a/assets/xml/textures/nintendo_rogo_static_v2.xml b/assets/xml/textures/nintendo_rogo_static_v2.xml
new file mode 100644
index 0000000000..7a60524b20
--- /dev/null
+++ b/assets/xml/textures/nintendo_rogo_static_v2.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/baseroms/gc-eu-mq-dbg/config.yml b/baseroms/gc-eu-mq-dbg/config.yml
index 007665d84d..84a6d3b6c7 100644
--- a/baseroms/gc-eu-mq-dbg/config.yml
+++ b/baseroms/gc-eu-mq-dbg/config.yml
@@ -988,7 +988,7 @@ assets:
- name: scenes/dungeons/ddan
xml_path: assets/xml/scenes/dungeons/ddan_mq.xml
- name: scenes/dungeons/ddan_boss
- xml_path: assets/xml/scenes/dungeons/ddan_boss.xml
+ xml_path: assets/xml/scenes/dungeons/ddan_boss_v2.xml
- name: scenes/dungeons/FIRE_bs
xml_path: assets/xml/scenes/dungeons/FIRE_bs.xml
- name: scenes/dungeons/ganon
@@ -1160,7 +1160,7 @@ assets:
- name: scenes/overworld/spot15
xml_path: assets/xml/scenes/overworld/spot15.xml
- name: scenes/overworld/spot16
- xml_path: assets/xml/scenes/overworld/spot16.xml
+ xml_path: assets/xml/scenes/overworld/spot16_v2.xml
- name: scenes/overworld/spot17
xml_path: assets/xml/scenes/overworld/spot17.xml
- name: scenes/overworld/spot18
@@ -1236,7 +1236,7 @@ assets:
- name: textures/nes_font_static
xml_path: assets/xml/textures/nes_font_static_v2.xml
- name: textures/nintendo_rogo_static
- xml_path: assets/xml/textures/nintendo_rogo_static.xml
+ xml_path: assets/xml/textures/nintendo_rogo_static_v2.xml
- name: textures/parameter_static
xml_path: assets/xml/textures/parameter_static.xml
- name: textures/place_title_cards
diff --git a/baseroms/gc-eu-mq/config.yml b/baseroms/gc-eu-mq/config.yml
index 2716a23e1a..f29e904e85 100644
--- a/baseroms/gc-eu-mq/config.yml
+++ b/baseroms/gc-eu-mq/config.yml
@@ -972,7 +972,7 @@ assets:
- name: scenes/dungeons/ddan
xml_path: assets/xml/scenes/dungeons/ddan_mq.xml
- name: scenes/dungeons/ddan_boss
- xml_path: assets/xml/scenes/dungeons/ddan_boss.xml
+ xml_path: assets/xml/scenes/dungeons/ddan_boss_v2.xml
- name: scenes/dungeons/FIRE_bs
xml_path: assets/xml/scenes/dungeons/FIRE_bs.xml
- name: scenes/dungeons/ganon
@@ -1142,7 +1142,7 @@ assets:
- name: scenes/overworld/spot15
xml_path: assets/xml/scenes/overworld/spot15.xml
- name: scenes/overworld/spot16
- xml_path: assets/xml/scenes/overworld/spot16.xml
+ xml_path: assets/xml/scenes/overworld/spot16_v2.xml
- name: scenes/overworld/spot17
xml_path: assets/xml/scenes/overworld/spot17.xml
- name: scenes/overworld/spot18
@@ -1202,7 +1202,7 @@ assets:
- name: textures/nes_font_static
xml_path: assets/xml/textures/nes_font_static_v2.xml
- name: textures/nintendo_rogo_static
- xml_path: assets/xml/textures/nintendo_rogo_static.xml
+ xml_path: assets/xml/textures/nintendo_rogo_static_v2.xml
- name: textures/parameter_static
xml_path: assets/xml/textures/parameter_static.xml
- name: textures/place_title_cards
diff --git a/baseroms/gc-eu/config.yml b/baseroms/gc-eu/config.yml
index 97cd20648e..de1d26194c 100644
--- a/baseroms/gc-eu/config.yml
+++ b/baseroms/gc-eu/config.yml
@@ -972,7 +972,7 @@ assets:
- name: scenes/dungeons/ddan
xml_path: assets/xml/scenes/dungeons/ddan.xml
- name: scenes/dungeons/ddan_boss
- xml_path: assets/xml/scenes/dungeons/ddan_boss.xml
+ xml_path: assets/xml/scenes/dungeons/ddan_boss_v2.xml
- name: scenes/dungeons/FIRE_bs
xml_path: assets/xml/scenes/dungeons/FIRE_bs.xml
- name: scenes/dungeons/ganon
@@ -1000,7 +1000,7 @@ assets:
- name: scenes/dungeons/HIDAN
xml_path: assets/xml/scenes/dungeons/HIDAN.xml
- name: scenes/dungeons/ice_doukutu
- xml_path: assets/xml/scenes/dungeons/ice_doukutu.xml
+ xml_path: assets/xml/scenes/dungeons/ice_doukutu_v2.xml
- name: scenes/dungeons/jyasinboss
xml_path: assets/xml/scenes/dungeons/jyasinboss.xml
- name: scenes/dungeons/jyasinzou
@@ -1142,7 +1142,7 @@ assets:
- name: scenes/overworld/spot15
xml_path: assets/xml/scenes/overworld/spot15.xml
- name: scenes/overworld/spot16
- xml_path: assets/xml/scenes/overworld/spot16.xml
+ xml_path: assets/xml/scenes/overworld/spot16_v2.xml
- name: scenes/overworld/spot17
xml_path: assets/xml/scenes/overworld/spot17.xml
- name: scenes/overworld/spot18
@@ -1202,7 +1202,7 @@ assets:
- name: textures/nes_font_static
xml_path: assets/xml/textures/nes_font_static_v2.xml
- name: textures/nintendo_rogo_static
- xml_path: assets/xml/textures/nintendo_rogo_static.xml
+ xml_path: assets/xml/textures/nintendo_rogo_static_v2.xml
- name: textures/parameter_static
xml_path: assets/xml/textures/parameter_static.xml
- name: textures/place_title_cards
diff --git a/baseroms/gc-jp-ce/config.yml b/baseroms/gc-jp-ce/config.yml
index 59c57730af..3a3de8c818 100644
--- a/baseroms/gc-jp-ce/config.yml
+++ b/baseroms/gc-jp-ce/config.yml
@@ -971,7 +971,7 @@ assets:
- name: scenes/dungeons/ddan
xml_path: assets/xml/scenes/dungeons/ddan.xml
- name: scenes/dungeons/ddan_boss
- xml_path: assets/xml/scenes/dungeons/ddan_boss.xml
+ xml_path: assets/xml/scenes/dungeons/ddan_boss_v2.xml
- name: scenes/dungeons/FIRE_bs
xml_path: assets/xml/scenes/dungeons/FIRE_bs.xml
- name: scenes/dungeons/ganon
@@ -999,7 +999,7 @@ assets:
- name: scenes/dungeons/HIDAN
xml_path: assets/xml/scenes/dungeons/HIDAN.xml
- name: scenes/dungeons/ice_doukutu
- xml_path: assets/xml/scenes/dungeons/ice_doukutu.xml
+ xml_path: assets/xml/scenes/dungeons/ice_doukutu_v2.xml
- name: scenes/dungeons/jyasinboss
xml_path: assets/xml/scenes/dungeons/jyasinboss.xml
- name: scenes/dungeons/jyasinzou
@@ -1141,7 +1141,7 @@ assets:
- name: scenes/overworld/spot15
xml_path: assets/xml/scenes/overworld/spot15.xml
- name: scenes/overworld/spot16
- xml_path: assets/xml/scenes/overworld/spot16.xml
+ xml_path: assets/xml/scenes/overworld/spot16_v2.xml
- name: scenes/overworld/spot17
xml_path: assets/xml/scenes/overworld/spot17.xml
- name: scenes/overworld/spot18
@@ -1201,7 +1201,7 @@ assets:
- name: textures/nes_font_static
xml_path: assets/xml/textures/nes_font_static_v2.xml
- name: textures/nintendo_rogo_static
- xml_path: assets/xml/textures/nintendo_rogo_static.xml
+ xml_path: assets/xml/textures/nintendo_rogo_static_v2.xml
- name: textures/parameter_static
xml_path: assets/xml/textures/parameter_static.xml
- name: textures/place_title_cards
diff --git a/baseroms/gc-jp-mq/config.yml b/baseroms/gc-jp-mq/config.yml
index 433e3fe6ad..6e1ab6b0ef 100644
--- a/baseroms/gc-jp-mq/config.yml
+++ b/baseroms/gc-jp-mq/config.yml
@@ -971,7 +971,7 @@ assets:
- name: scenes/dungeons/ddan
xml_path: assets/xml/scenes/dungeons/ddan_mq.xml
- name: scenes/dungeons/ddan_boss
- xml_path: assets/xml/scenes/dungeons/ddan_boss.xml
+ xml_path: assets/xml/scenes/dungeons/ddan_boss_v2.xml
- name: scenes/dungeons/FIRE_bs
xml_path: assets/xml/scenes/dungeons/FIRE_bs.xml
- name: scenes/dungeons/ganon
@@ -1141,7 +1141,7 @@ assets:
- name: scenes/overworld/spot15
xml_path: assets/xml/scenes/overworld/spot15.xml
- name: scenes/overworld/spot16
- xml_path: assets/xml/scenes/overworld/spot16.xml
+ xml_path: assets/xml/scenes/overworld/spot16_v2.xml
- name: scenes/overworld/spot17
xml_path: assets/xml/scenes/overworld/spot17.xml
- name: scenes/overworld/spot18
@@ -1201,7 +1201,7 @@ assets:
- name: textures/nes_font_static
xml_path: assets/xml/textures/nes_font_static.xml
- name: textures/nintendo_rogo_static
- xml_path: assets/xml/textures/nintendo_rogo_static.xml
+ xml_path: assets/xml/textures/nintendo_rogo_static_v2.xml
- name: textures/parameter_static
xml_path: assets/xml/textures/parameter_static.xml
- name: textures/place_title_cards
diff --git a/baseroms/gc-jp/config.yml b/baseroms/gc-jp/config.yml
index f86773ac41..08df45e6ae 100644
--- a/baseroms/gc-jp/config.yml
+++ b/baseroms/gc-jp/config.yml
@@ -971,7 +971,7 @@ assets:
- name: scenes/dungeons/ddan
xml_path: assets/xml/scenes/dungeons/ddan.xml
- name: scenes/dungeons/ddan_boss
- xml_path: assets/xml/scenes/dungeons/ddan_boss.xml
+ xml_path: assets/xml/scenes/dungeons/ddan_boss_v2.xml
- name: scenes/dungeons/FIRE_bs
xml_path: assets/xml/scenes/dungeons/FIRE_bs.xml
- name: scenes/dungeons/ganon
@@ -999,7 +999,7 @@ assets:
- name: scenes/dungeons/HIDAN
xml_path: assets/xml/scenes/dungeons/HIDAN.xml
- name: scenes/dungeons/ice_doukutu
- xml_path: assets/xml/scenes/dungeons/ice_doukutu.xml
+ xml_path: assets/xml/scenes/dungeons/ice_doukutu_v2.xml
- name: scenes/dungeons/jyasinboss
xml_path: assets/xml/scenes/dungeons/jyasinboss.xml
- name: scenes/dungeons/jyasinzou
@@ -1141,7 +1141,7 @@ assets:
- name: scenes/overworld/spot15
xml_path: assets/xml/scenes/overworld/spot15.xml
- name: scenes/overworld/spot16
- xml_path: assets/xml/scenes/overworld/spot16.xml
+ xml_path: assets/xml/scenes/overworld/spot16_v2.xml
- name: scenes/overworld/spot17
xml_path: assets/xml/scenes/overworld/spot17.xml
- name: scenes/overworld/spot18
@@ -1201,7 +1201,7 @@ assets:
- name: textures/nes_font_static
xml_path: assets/xml/textures/nes_font_static.xml
- name: textures/nintendo_rogo_static
- xml_path: assets/xml/textures/nintendo_rogo_static.xml
+ xml_path: assets/xml/textures/nintendo_rogo_static_v2.xml
- name: textures/parameter_static
xml_path: assets/xml/textures/parameter_static.xml
- name: textures/place_title_cards
diff --git a/baseroms/gc-us-mq/config.yml b/baseroms/gc-us-mq/config.yml
index 1a64ec2dbd..df026951f4 100644
--- a/baseroms/gc-us-mq/config.yml
+++ b/baseroms/gc-us-mq/config.yml
@@ -971,7 +971,7 @@ assets:
- name: scenes/dungeons/ddan
xml_path: assets/xml/scenes/dungeons/ddan_mq.xml
- name: scenes/dungeons/ddan_boss
- xml_path: assets/xml/scenes/dungeons/ddan_boss.xml
+ xml_path: assets/xml/scenes/dungeons/ddan_boss_v2.xml
- name: scenes/dungeons/FIRE_bs
xml_path: assets/xml/scenes/dungeons/FIRE_bs.xml
- name: scenes/dungeons/ganon
@@ -1141,7 +1141,7 @@ assets:
- name: scenes/overworld/spot15
xml_path: assets/xml/scenes/overworld/spot15.xml
- name: scenes/overworld/spot16
- xml_path: assets/xml/scenes/overworld/spot16.xml
+ xml_path: assets/xml/scenes/overworld/spot16_v2.xml
- name: scenes/overworld/spot17
xml_path: assets/xml/scenes/overworld/spot17.xml
- name: scenes/overworld/spot18
@@ -1201,7 +1201,7 @@ assets:
- name: textures/nes_font_static
xml_path: assets/xml/textures/nes_font_static_v2.xml
- name: textures/nintendo_rogo_static
- xml_path: assets/xml/textures/nintendo_rogo_static.xml
+ xml_path: assets/xml/textures/nintendo_rogo_static_v2.xml
- name: textures/parameter_static
xml_path: assets/xml/textures/parameter_static.xml
- name: textures/place_title_cards
diff --git a/baseroms/gc-us/config.yml b/baseroms/gc-us/config.yml
index 3a63996ed1..60050cb7ec 100644
--- a/baseroms/gc-us/config.yml
+++ b/baseroms/gc-us/config.yml
@@ -971,7 +971,7 @@ assets:
- name: scenes/dungeons/ddan
xml_path: assets/xml/scenes/dungeons/ddan.xml
- name: scenes/dungeons/ddan_boss
- xml_path: assets/xml/scenes/dungeons/ddan_boss.xml
+ xml_path: assets/xml/scenes/dungeons/ddan_boss_v2.xml
- name: scenes/dungeons/FIRE_bs
xml_path: assets/xml/scenes/dungeons/FIRE_bs.xml
- name: scenes/dungeons/ganon
@@ -999,7 +999,7 @@ assets:
- name: scenes/dungeons/HIDAN
xml_path: assets/xml/scenes/dungeons/HIDAN.xml
- name: scenes/dungeons/ice_doukutu
- xml_path: assets/xml/scenes/dungeons/ice_doukutu.xml
+ xml_path: assets/xml/scenes/dungeons/ice_doukutu_v2.xml
- name: scenes/dungeons/jyasinboss
xml_path: assets/xml/scenes/dungeons/jyasinboss.xml
- name: scenes/dungeons/jyasinzou
@@ -1141,7 +1141,7 @@ assets:
- name: scenes/overworld/spot15
xml_path: assets/xml/scenes/overworld/spot15.xml
- name: scenes/overworld/spot16
- xml_path: assets/xml/scenes/overworld/spot16.xml
+ xml_path: assets/xml/scenes/overworld/spot16_v2.xml
- name: scenes/overworld/spot17
xml_path: assets/xml/scenes/overworld/spot17.xml
- name: scenes/overworld/spot18
@@ -1201,7 +1201,7 @@ assets:
- name: textures/nes_font_static
xml_path: assets/xml/textures/nes_font_static_v2.xml
- name: textures/nintendo_rogo_static
- xml_path: assets/xml/textures/nintendo_rogo_static.xml
+ xml_path: assets/xml/textures/nintendo_rogo_static_v2.xml
- name: textures/parameter_static
xml_path: assets/xml/textures/parameter_static.xml
- name: textures/place_title_cards
diff --git a/baseroms/ntsc-1.0/checksum-JP-compressed.md5 b/baseroms/ntsc-1.0/checksum-JP-compressed.md5
new file mode 100644
index 0000000000..b371d6ee69
--- /dev/null
+++ b/baseroms/ntsc-1.0/checksum-JP-compressed.md5
@@ -0,0 +1 @@
+9f04c8e68534b870f707c247fa4b50fc build/ntsc-1.0/oot-ntsc-1.0-compressed.z64
diff --git a/baseroms/ntsc-1.0/checksum-JP.md5 b/baseroms/ntsc-1.0/checksum-JP.md5
new file mode 100644
index 0000000000..0bdeb74cb9
--- /dev/null
+++ b/baseroms/ntsc-1.0/checksum-JP.md5
@@ -0,0 +1 @@
+963d8ee3bd921f4d3c833b82004a76d2 build/ntsc-1.0/oot-ntsc-1.0.z64
diff --git a/baseroms/ntsc-1.0/checksum-US-compressed.md5 b/baseroms/ntsc-1.0/checksum-US-compressed.md5
new file mode 100644
index 0000000000..7aa912648b
--- /dev/null
+++ b/baseroms/ntsc-1.0/checksum-US-compressed.md5
@@ -0,0 +1 @@
+5bd1fe107bf8106b2ab6650abecd54d6 build/ntsc-1.0/oot-ntsc-1.0-compressed.z64
diff --git a/baseroms/ntsc-1.0/checksum-US.md5 b/baseroms/ntsc-1.0/checksum-US.md5
new file mode 100644
index 0000000000..fda12ac58c
--- /dev/null
+++ b/baseroms/ntsc-1.0/checksum-US.md5
@@ -0,0 +1 @@
+6829a16db1a34e8ce989847cd8da8d9a build/ntsc-1.0/oot-ntsc-1.0.z64
diff --git a/baseroms/ntsc-1.0/config.yml b/baseroms/ntsc-1.0/config.yml
new file mode 100644
index 0000000000..072aebec3d
--- /dev/null
+++ b/baseroms/ntsc-1.0/config.yml
@@ -0,0 +1,1219 @@
+checksums:
+ - checksum-JP
+ - checksum-US
+dmadata_start: 0x7430
+text_lang_pal: false
+incbins:
+ - name: ipl3
+ segment: makerom
+ vram: 0x80000040
+ size: 0xFC0
+ - name: rspbootText
+ segment: boot
+ vram: 0x800060B0
+ size: 0x160
+ - name: aspMainText
+ segment: code
+ vram: 0x800E2FC0
+ size: 0xFB0
+ - name: gspF3DZEX2_NoN_PosLight_fifoText
+ segment: code
+ vram: 0x800E3F70
+ size: 0x1390
+ - name: gspS2DEX2d_fifoText
+ segment: code
+ vram: 0x800E5300
+ size: 0x18C0
+ - name: njpgdspMainText
+ segment: code
+ vram: 0x800E6BC0
+ size: 0xAF0
+ - name: aspMainData
+ segment: code
+ vram: 0x801142E0
+ size: 0x2E0
+ - name: gspF3DZEX2_NoN_PosLight_fifoData
+ segment: code
+ vram: 0x801145C0
+ size: 0x420
+ - name: gspS2DEX2d_fifoData
+ segment: code
+ vram: 0x801149E0
+ size: 0x390
+ - name: njpgdspMainData
+ segment: code
+ vram: 0x80114D70
+ size: 0x60
+variables:
+ gMtxClear: 0x800FEDB0
+ sJpnMessageEntryTable: 0x8010A94C
+ sNesMessageEntryTable: 0x8010EA8C
+ sStaffMessageEntryTable: 0x80112CAC
+ gSoundFontTable: 0x80113740
+ gSequenceFontTable: 0x801139B0
+ gSequenceTable: 0x80113B70
+ gSampleBankTable: 0x80114260
+ sShadowTex: 0x80AE0AE0
+assets:
+- name: code/fbdemo_circle
+ xml_path: assets/xml/code/fbdemo_circle.xml
+ start_offset: 0xEC0A8
+ end_offset: 0xED2C8
+- name: code/fbdemo_triforce
+ xml_path: assets/xml/code/fbdemo_triforce.xml
+ start_offset: 0xEB530
+ end_offset: 0xEB600
+- name: code/fbdemo_wipe1
+ xml_path: assets/xml/code/fbdemo_wipe1.xml
+ start_offset: 0xEB600
+ end_offset: 0xEBF90
+- name: n64dd/error_textures
+ xml_path: assets/xml/n64dd/error_textures.xml
+ start_offset: 0xC160
+ end_offset: 0x11D60
+- name: misc/link_animetion
+ xml_path: assets/xml/misc/link_animetion.xml
+- name: misc/z_select_static
+ xml_path: assets/xml/misc/z_select_static.xml
+- name: objects/gameplay_dangeon_keep
+ xml_path: assets/xml/objects/gameplay_dangeon_keep.xml
+- name: objects/gameplay_field_keep
+ xml_path: assets/xml/objects/gameplay_field_keep.xml
+- name: objects/gameplay_keep
+ xml_path: assets/xml/objects/gameplay_keep.xml
+- name: objects/object_ahg
+ xml_path: assets/xml/objects/object_ahg.xml
+- name: objects/object_am
+ xml_path: assets/xml/objects/object_am.xml
+- name: objects/object_ane
+ xml_path: assets/xml/objects/object_ane.xml
+- name: objects/object_ani
+ xml_path: assets/xml/objects/object_ani.xml
+- name: objects/object_anubice
+ xml_path: assets/xml/objects/object_anubice.xml
+- name: objects/object_aob
+ xml_path: assets/xml/objects/object_aob.xml
+- name: objects/object_b_heart
+ xml_path: assets/xml/objects/object_b_heart.xml
+- name: objects/object_Bb
+ xml_path: assets/xml/objects/object_Bb.xml
+- name: objects/object_bba
+ xml_path: assets/xml/objects/object_bba.xml
+- name: objects/object_bdan_objects
+ xml_path: assets/xml/objects/object_bdan_objects.xml
+- name: objects/object_bdoor
+ xml_path: assets/xml/objects/object_bdoor.xml
+- name: objects/object_bg
+ xml_path: assets/xml/objects/object_bg.xml
+- name: objects/object_bigokuta
+ xml_path: assets/xml/objects/object_bigokuta.xml
+- name: objects/object_bird
+ xml_path: assets/xml/objects/object_bird.xml
+- name: objects/object_bji
+ xml_path: assets/xml/objects/object_bji.xml
+- name: objects/object_bl
+ xml_path: assets/xml/objects/object_bl.xml
+- name: objects/object_blkobj
+ xml_path: assets/xml/objects/object_blkobj.xml
+- name: objects/object_bob
+ xml_path: assets/xml/objects/object_bob.xml
+- name: objects/object_boj
+ xml_path: assets/xml/objects/object_boj.xml
+- name: objects/object_bombf
+ xml_path: assets/xml/objects/object_bombf.xml
+- name: objects/object_bombiwa
+ xml_path: assets/xml/objects/object_bombiwa.xml
+- name: objects/object_bowl
+ xml_path: assets/xml/objects/object_bowl.xml
+- name: objects/object_box
+ xml_path: assets/xml/objects/object_box.xml
+- name: objects/object_brob
+ xml_path: assets/xml/objects/object_brob.xml
+- name: objects/object_bubble
+ xml_path: assets/xml/objects/object_bubble.xml
+- name: objects/object_bv
+ xml_path: assets/xml/objects/object_bv.xml
+- name: objects/object_bw
+ xml_path: assets/xml/objects/object_bw.xml
+- name: objects/object_bwall
+ xml_path: assets/xml/objects/object_bwall.xml
+- name: objects/object_bxa
+ xml_path: assets/xml/objects/object_bxa.xml
+- name: objects/object_cne
+ xml_path: assets/xml/objects/object_cne.xml
+- name: objects/object_cob
+ xml_path: assets/xml/objects/object_cob.xml
+- name: objects/object_cow
+ xml_path: assets/xml/objects/object_cow.xml
+- name: objects/object_crow
+ xml_path: assets/xml/objects/object_crow.xml
+- name: objects/object_cs
+ xml_path: assets/xml/objects/object_cs.xml
+- name: objects/object_d_elevator
+ xml_path: assets/xml/objects/object_d_elevator.xml
+- name: objects/object_d_hsblock
+ xml_path: assets/xml/objects/object_d_hsblock.xml
+- name: objects/object_d_lift
+ xml_path: assets/xml/objects/object_d_lift.xml
+- name: objects/object_daiku
+ xml_path: assets/xml/objects/object_daiku.xml
+- name: objects/object_ddan_objects
+ xml_path: assets/xml/objects/object_ddan_objects.xml
+- name: objects/object_dekubaba
+ xml_path: assets/xml/objects/object_dekubaba.xml
+- name: objects/object_dekujr
+ xml_path: assets/xml/objects/object_dekujr.xml
+- name: objects/object_dekunuts
+ xml_path: assets/xml/objects/object_dekunuts.xml
+- name: objects/object_demo_6k
+ xml_path: assets/xml/objects/object_demo_6k.xml
+- name: objects/object_demo_kekkai
+ xml_path: assets/xml/objects/object_demo_kekkai.xml
+- name: objects/object_demo_tre_lgt
+ xml_path: assets/xml/objects/object_demo_tre_lgt.xml
+- name: objects/object_dh
+ xml_path: assets/xml/objects/object_dh.xml
+- name: objects/object_dnk
+ xml_path: assets/xml/objects/object_dnk.xml
+- name: objects/object_dns
+ xml_path: assets/xml/objects/object_dns.xml
+- name: objects/object_dodojr
+ xml_path: assets/xml/objects/object_dodojr.xml
+- name: objects/object_dodongo
+ xml_path: assets/xml/objects/object_dodongo.xml
+- name: objects/object_dog
+ xml_path: assets/xml/objects/object_dog.xml
+- name: objects/object_door_gerudo
+ xml_path: assets/xml/objects/object_door_gerudo.xml
+- name: objects/object_door_killer
+ xml_path: assets/xml/objects/object_door_killer.xml
+- name: objects/object_ds
+ xml_path: assets/xml/objects/object_ds.xml
+- name: objects/object_ds2
+ xml_path: assets/xml/objects/object_ds2.xml
+- name: objects/object_du
+ xml_path: assets/xml/objects/object_du.xml
+- name: objects/object_dy_obj
+ xml_path: assets/xml/objects/object_dy_obj.xml
+- name: objects/object_ec
+ xml_path: assets/xml/objects/object_ec.xml
+- name: objects/object_efc_crystal_light
+ xml_path: assets/xml/objects/object_efc_crystal_light.xml
+- name: objects/object_efc_doughnut
+ xml_path: assets/xml/objects/object_efc_doughnut.xml
+- name: objects/object_efc_erupc
+ xml_path: assets/xml/objects/object_efc_erupc.xml
+- name: objects/object_efc_fire_ball
+ xml_path: assets/xml/objects/object_efc_fire_ball.xml
+- name: objects/object_efc_flash
+ xml_path: assets/xml/objects/object_efc_flash.xml
+- name: objects/object_efc_lgt_shower
+ xml_path: assets/xml/objects/object_efc_lgt_shower.xml
+- name: objects/object_efc_star_field
+ xml_path: assets/xml/objects/object_efc_star_field.xml
+- name: objects/object_efc_tw
+ xml_path: assets/xml/objects/object_efc_tw.xml
+- name: objects/object_ei
+ xml_path: assets/xml/objects/object_ei.xml
+- name: objects/object_fa
+ xml_path: assets/xml/objects/object_fa.xml
+- name: objects/object_fd
+ xml_path: assets/xml/objects/object_fd.xml
+- name: objects/object_fd2
+ xml_path: assets/xml/objects/object_fd2.xml
+- name: objects/object_fhg
+ xml_path: assets/xml/objects/object_fhg.xml
+- name: objects/object_fire
+ xml_path: assets/xml/objects/object_fire.xml
+- name: objects/object_firefly
+ xml_path: assets/xml/objects/object_firefly.xml
+- name: objects/object_fish
+ xml_path: assets/xml/objects/object_fish.xml
+- name: objects/object_fr
+ xml_path: assets/xml/objects/object_fr.xml
+- name: objects/object_fu
+ xml_path: assets/xml/objects/object_fu.xml
+- name: objects/object_fw
+ xml_path: assets/xml/objects/object_fw.xml
+- name: objects/object_fz
+ xml_path: assets/xml/objects/object_fz.xml
+- name: objects/object_ganon
+ xml_path: assets/xml/objects/object_ganon.xml
+- name: objects/object_ganon2
+ xml_path: assets/xml/objects/object_ganon2.xml
+- name: objects/object_ganon_anime1
+ xml_path: assets/xml/objects/object_ganon_anime1.xml
+- name: objects/object_ganon_anime2
+ xml_path: assets/xml/objects/object_ganon_anime2.xml
+- name: objects/object_ganon_anime3
+ xml_path: assets/xml/objects/object_ganon_anime3.xml
+- name: objects/object_ganon_objects
+ xml_path: assets/xml/objects/object_ganon_objects.xml
+- name: objects/object_ge1
+ xml_path: assets/xml/objects/object_ge1.xml
+- name: objects/object_geff
+ xml_path: assets/xml/objects/object_geff.xml
+- name: objects/object_geldb
+ xml_path: assets/xml/objects/object_geldb.xml
+- name: objects/object_gi_arrow
+ xml_path: assets/xml/objects/object_gi_arrow.xml
+- name: objects/object_gi_arrowcase
+ xml_path: assets/xml/objects/object_gi_arrowcase.xml
+- name: objects/object_gi_bean
+ xml_path: assets/xml/objects/object_gi_bean.xml
+- name: objects/object_gi_bomb_1
+ xml_path: assets/xml/objects/object_gi_bomb_1.xml
+- name: objects/object_gi_bomb_2
+ xml_path: assets/xml/objects/object_gi_bomb_2.xml
+- name: objects/object_gi_bombpouch
+ xml_path: assets/xml/objects/object_gi_bombpouch.xml
+- name: objects/object_gi_boomerang
+ xml_path: assets/xml/objects/object_gi_boomerang.xml
+- name: objects/object_gi_boots_2
+ xml_path: assets/xml/objects/object_gi_boots_2.xml
+- name: objects/object_gi_bosskey
+ xml_path: assets/xml/objects/object_gi_bosskey.xml
+- name: objects/object_gi_bottle
+ xml_path: assets/xml/objects/object_gi_bottle.xml
+- name: objects/object_gi_bottle_letter
+ xml_path: assets/xml/objects/object_gi_bottle_letter.xml
+- name: objects/object_gi_bow
+ xml_path: assets/xml/objects/object_gi_bow.xml
+- name: objects/object_gi_bracelet
+ xml_path: assets/xml/objects/object_gi_bracelet.xml
+- name: objects/object_gi_brokensword
+ xml_path: assets/xml/objects/object_gi_brokensword.xml
+- name: objects/object_gi_butterfly
+ xml_path: assets/xml/objects/object_gi_butterfly.xml
+- name: objects/object_gi_clothes
+ xml_path: assets/xml/objects/object_gi_clothes.xml
+- name: objects/object_gi_coin
+ xml_path: assets/xml/objects/object_gi_coin.xml
+- name: objects/object_gi_compass
+ xml_path: assets/xml/objects/object_gi_compass.xml
+- name: objects/object_gi_dekupouch
+ xml_path: assets/xml/objects/object_gi_dekupouch.xml
+- name: objects/object_gi_egg
+ xml_path: assets/xml/objects/object_gi_egg.xml
+- name: objects/object_gi_eye_lotion
+ xml_path: assets/xml/objects/object_gi_eye_lotion.xml
+- name: objects/object_gi_fire
+ xml_path: assets/xml/objects/object_gi_fire.xml
+- name: objects/object_gi_fish
+ xml_path: assets/xml/objects/object_gi_fish.xml
+- name: objects/object_gi_frog
+ xml_path: assets/xml/objects/object_gi_frog.xml
+- name: objects/object_gi_gerudo
+ xml_path: assets/xml/objects/object_gi_gerudo.xml
+- name: objects/object_gi_gerudomask
+ xml_path: assets/xml/objects/object_gi_gerudomask.xml
+- name: objects/object_gi_ghost
+ xml_path: assets/xml/objects/object_gi_ghost.xml
+- name: objects/object_gi_glasses
+ xml_path: assets/xml/objects/object_gi_glasses.xml
+- name: objects/object_gi_gloves
+ xml_path: assets/xml/objects/object_gi_gloves.xml
+- name: objects/object_gi_goddess
+ xml_path: assets/xml/objects/object_gi_goddess.xml
+- name: objects/object_gi_golonmask
+ xml_path: assets/xml/objects/object_gi_golonmask.xml
+- name: objects/object_gi_grass
+ xml_path: assets/xml/objects/object_gi_grass.xml
+- name: objects/object_gi_hammer
+ xml_path: assets/xml/objects/object_gi_hammer.xml
+- name: objects/object_gi_heart
+ xml_path: assets/xml/objects/object_gi_heart.xml
+- name: objects/object_gi_hearts
+ xml_path: assets/xml/objects/object_gi_hearts.xml
+- name: objects/object_gi_hookshot
+ xml_path: assets/xml/objects/object_gi_hookshot.xml
+- name: objects/object_gi_hoverboots
+ xml_path: assets/xml/objects/object_gi_hoverboots.xml
+- name: objects/object_gi_insect
+ xml_path: assets/xml/objects/object_gi_insect.xml
+- name: objects/object_gi_jewel
+ xml_path: assets/xml/objects/object_gi_jewel.xml
+- name: objects/object_gi_key
+ xml_path: assets/xml/objects/object_gi_key.xml
+- name: objects/object_gi_ki_tan_mask
+ xml_path: assets/xml/objects/object_gi_ki_tan_mask.xml
+- name: objects/object_gi_letter
+ xml_path: assets/xml/objects/object_gi_letter.xml
+- name: objects/object_gi_liquid
+ xml_path: assets/xml/objects/object_gi_liquid.xml
+- name: objects/object_gi_longsword
+ xml_path: assets/xml/objects/object_gi_longsword.xml
+- name: objects/object_gi_m_arrow
+ xml_path: assets/xml/objects/object_gi_m_arrow.xml
+- name: objects/object_gi_magicpot
+ xml_path: assets/xml/objects/object_gi_magicpot.xml
+- name: objects/object_gi_map
+ xml_path: assets/xml/objects/object_gi_map.xml
+- name: objects/object_gi_medal
+ xml_path: assets/xml/objects/object_gi_medal.xml
+- name: objects/object_gi_melody
+ xml_path: assets/xml/objects/object_gi_melody.xml
+- name: objects/object_gi_milk
+ xml_path: assets/xml/objects/object_gi_milk.xml
+- name: objects/object_gi_mushroom
+ xml_path: assets/xml/objects/object_gi_mushroom.xml
+- name: objects/object_gi_niwatori
+ xml_path: assets/xml/objects/object_gi_niwatori.xml
+- name: objects/object_gi_nuts
+ xml_path: assets/xml/objects/object_gi_nuts.xml
+- name: objects/object_gi_ocarina
+ xml_path: assets/xml/objects/object_gi_ocarina.xml
+- name: objects/object_gi_ocarina_0
+ xml_path: assets/xml/objects/object_gi_ocarina_0.xml
+- name: objects/object_gi_pachinko
+ xml_path: assets/xml/objects/object_gi_pachinko.xml
+- name: objects/object_gi_powder
+ xml_path: assets/xml/objects/object_gi_powder.xml
+- name: objects/object_gi_prescription
+ xml_path: assets/xml/objects/object_gi_prescription.xml
+- name: objects/object_gi_purse
+ xml_path: assets/xml/objects/object_gi_purse.xml
+- name: objects/object_gi_rabit_mask
+ xml_path: assets/xml/objects/object_gi_rabit_mask.xml
+- name: objects/object_gi_redead_mask
+ xml_path: assets/xml/objects/object_gi_redead_mask.xml
+- name: objects/object_gi_rupy
+ xml_path: assets/xml/objects/object_gi_rupy.xml
+- name: objects/object_gi_saw
+ xml_path: assets/xml/objects/object_gi_saw.xml
+- name: objects/object_gi_scale
+ xml_path: assets/xml/objects/object_gi_scale.xml
+- name: objects/object_gi_seed
+ xml_path: assets/xml/objects/object_gi_seed.xml
+- name: objects/object_gi_shield_1
+ xml_path: assets/xml/objects/object_gi_shield_1.xml
+- name: objects/object_gi_shield_2
+ xml_path: assets/xml/objects/object_gi_shield_2.xml
+- name: objects/object_gi_shield_3
+ xml_path: assets/xml/objects/object_gi_shield_3.xml
+- name: objects/object_gi_skj_mask
+ xml_path: assets/xml/objects/object_gi_skj_mask.xml
+- name: objects/object_gi_soldout
+ xml_path: assets/xml/objects/object_gi_soldout.xml
+- name: objects/object_gi_soul
+ xml_path: assets/xml/objects/object_gi_soul.xml
+- name: objects/object_gi_stick
+ xml_path: assets/xml/objects/object_gi_stick.xml
+- name: objects/object_gi_sutaru
+ xml_path: assets/xml/objects/object_gi_sutaru.xml
+- name: objects/object_gi_sword_1
+ xml_path: assets/xml/objects/object_gi_sword_1.xml
+- name: objects/object_gi_ticketstone
+ xml_path: assets/xml/objects/object_gi_ticketstone.xml
+- name: objects/object_gi_truth_mask
+ xml_path: assets/xml/objects/object_gi_truth_mask.xml
+- name: objects/object_gi_zoramask
+ xml_path: assets/xml/objects/object_gi_zoramask.xml
+- name: objects/object_gj
+ xml_path: assets/xml/objects/object_gj.xml
+- name: objects/object_gjyo_objects
+ xml_path: assets/xml/objects/object_gjyo_objects.xml
+- name: objects/object_gla
+ xml_path: assets/xml/objects/object_gla.xml
+- name: objects/object_gm
+ xml_path: assets/xml/objects/object_gm.xml
+- name: objects/object_gnd
+ xml_path: assets/xml/objects/object_gnd.xml
+- name: objects/object_gnd_magic
+ xml_path: assets/xml/objects/object_gnd_magic.xml
+- name: objects/object_gndd
+ xml_path: assets/xml/objects/object_gndd.xml
+- name: objects/object_god_lgt
+ xml_path: assets/xml/objects/object_god_lgt.xml
+- name: objects/object_gol
+ xml_path: assets/xml/objects/object_gol.xml
+- name: objects/object_goma
+ xml_path: assets/xml/objects/object_goma.xml
+- name: objects/object_goroiwa
+ xml_path: assets/xml/objects/object_goroiwa.xml
+- name: objects/object_gr
+ xml_path: assets/xml/objects/object_gr.xml
+- name: objects/object_gs
+ xml_path: assets/xml/objects/object_gs.xml
+- name: objects/object_gt
+ xml_path: assets/xml/objects/object_gt.xml
+- name: objects/object_haka
+ xml_path: assets/xml/objects/object_haka.xml
+- name: objects/object_haka_door
+ xml_path: assets/xml/objects/object_haka_door.xml
+- name: objects/object_haka_objects
+ xml_path: assets/xml/objects/object_haka_objects.xml
+- name: objects/object_hakach_objects
+ xml_path: assets/xml/objects/object_hakach_objects.xml
+- name: objects/object_hata
+ xml_path: assets/xml/objects/object_hata.xml
+- name: objects/object_heavy_object
+ xml_path: assets/xml/objects/object_heavy_object.xml
+- name: objects/object_hidan_objects
+ xml_path: assets/xml/objects/object_hidan_objects.xml
+- name: objects/object_hintnuts
+ xml_path: assets/xml/objects/object_hintnuts.xml
+- name: objects/object_hni
+ xml_path: assets/xml/objects/object_hni.xml
+- name: objects/object_horse
+ xml_path: assets/xml/objects/object_horse.xml
+- name: objects/object_horse_ganon
+ xml_path: assets/xml/objects/object_horse_ganon.xml
+- name: objects/object_horse_link_child
+ xml_path: assets/xml/objects/object_horse_link_child.xml
+- name: objects/object_horse_normal
+ xml_path: assets/xml/objects/object_horse_normal.xml
+- name: objects/object_horse_zelda
+ xml_path: assets/xml/objects/object_horse_zelda.xml
+- name: objects/object_hs
+ xml_path: assets/xml/objects/object_hs.xml
+- name: objects/object_human
+ xml_path: assets/xml/objects/object_human.xml
+- name: objects/object_ice_objects
+ xml_path: assets/xml/objects/object_ice_objects.xml
+- name: objects/object_ik
+ xml_path: assets/xml/objects/object_ik.xml
+- name: objects/object_im
+ xml_path: assets/xml/objects/object_im.xml
+- name: objects/object_in
+ xml_path: assets/xml/objects/object_in.xml
+- name: objects/object_ingate
+ xml_path: assets/xml/objects/object_ingate.xml
+- name: objects/object_jj
+ xml_path: assets/xml/objects/object_jj.xml
+- name: objects/object_js
+ xml_path: assets/xml/objects/object_js.xml
+- name: objects/object_jya_door
+ xml_path: assets/xml/objects/object_jya_door.xml
+- name: objects/object_jya_iron
+ xml_path: assets/xml/objects/object_jya_iron.xml
+- name: objects/object_jya_obj
+ xml_path: assets/xml/objects/object_jya_obj.xml
+- name: objects/object_ka
+ xml_path: assets/xml/objects/object_ka.xml
+- name: objects/object_kanban
+ xml_path: assets/xml/objects/object_kanban.xml
+- name: objects/object_kibako2
+ xml_path: assets/xml/objects/object_kibako2.xml
+- name: objects/object_kingdodongo
+ xml_path: assets/xml/objects/object_kingdodongo.xml
+- name: objects/object_km1
+ xml_path: assets/xml/objects/object_km1.xml
+- name: objects/object_kusa
+ xml_path: assets/xml/objects/object_kusa.xml
+- name: objects/object_kw1
+ xml_path: assets/xml/objects/object_kw1.xml
+- name: objects/object_kz
+ xml_path: assets/xml/objects/object_kz.xml
+- name: objects/object_light_ring
+ xml_path: assets/xml/objects/object_light_ring.xml
+- name: objects/object_lightbox
+ xml_path: assets/xml/objects/object_lightbox.xml
+- name: objects/object_lightswitch
+ xml_path: assets/xml/objects/object_lightswitch.xml
+- name: objects/object_link_boy
+ xml_path: assets/xml/objects/object_link_boy.xml
+- name: objects/object_link_child
+ xml_path: assets/xml/objects/object_link_child.xml
+- name: objects/object_ma1
+ xml_path: assets/xml/objects/object_ma1.xml
+- name: objects/object_ma2
+ xml_path: assets/xml/objects/object_ma2.xml
+- name: objects/object_mag
+ xml_path: assets/xml/objects/object_mag.xml
+- name: objects/object_mamenoki
+ xml_path: assets/xml/objects/object_mamenoki.xml
+- name: objects/object_mastergolon
+ xml_path: assets/xml/objects/object_mastergolon.xml
+- name: objects/object_masterkokiri
+ xml_path: assets/xml/objects/object_masterkokiri.xml
+- name: objects/object_masterkokirihead
+ xml_path: assets/xml/objects/object_masterkokirihead.xml
+- name: objects/object_masterzoora
+ xml_path: assets/xml/objects/object_masterzoora.xml
+- name: objects/object_mb
+ xml_path: assets/xml/objects/object_mb.xml
+- name: objects/object_md
+ xml_path: assets/xml/objects/object_md.xml
+- name: objects/object_medal
+ xml_path: assets/xml/objects/object_medal.xml
+- name: objects/object_menkuri_objects
+ xml_path: assets/xml/objects/object_menkuri_objects.xml
+- name: objects/object_mir_ray
+ xml_path: assets/xml/objects/object_mir_ray.xml
+- name: objects/object_mizu_objects
+ xml_path: assets/xml/objects/object_mizu_objects.xml
+- name: objects/object_mjin
+ xml_path: assets/xml/objects/object_mjin.xml
+- name: objects/object_mjin_dark
+ xml_path: assets/xml/objects/object_mjin_dark.xml
+- name: objects/object_mjin_flame
+ xml_path: assets/xml/objects/object_mjin_flame.xml
+- name: objects/object_mjin_flash
+ xml_path: assets/xml/objects/object_mjin_flash.xml
+- name: objects/object_mjin_ice
+ xml_path: assets/xml/objects/object_mjin_ice.xml
+- name: objects/object_mjin_oka
+ xml_path: assets/xml/objects/object_mjin_oka.xml
+- name: objects/object_mjin_soul
+ xml_path: assets/xml/objects/object_mjin_soul.xml
+- name: objects/object_mjin_wind
+ xml_path: assets/xml/objects/object_mjin_wind.xml
+- name: objects/object_mk
+ xml_path: assets/xml/objects/object_mk.xml
+- name: objects/object_mm
+ xml_path: assets/xml/objects/object_mm.xml
+- name: objects/object_mo
+ xml_path: assets/xml/objects/object_mo.xml
+- name: objects/object_mori_hineri1
+ xml_path: assets/xml/objects/object_mori_hineri1.xml
+- name: objects/object_mori_hineri1a
+ xml_path: assets/xml/objects/object_mori_hineri1a.xml
+- name: objects/object_mori_hineri2
+ xml_path: assets/xml/objects/object_mori_hineri2.xml
+- name: objects/object_mori_hineri2a
+ xml_path: assets/xml/objects/object_mori_hineri2a.xml
+- name: objects/object_mori_objects
+ xml_path: assets/xml/objects/object_mori_objects.xml
+- name: objects/object_mori_tex
+ xml_path: assets/xml/objects/object_mori_tex.xml
+- name: objects/object_ms
+ xml_path: assets/xml/objects/object_ms.xml
+- name: objects/object_mu
+ xml_path: assets/xml/objects/object_mu.xml
+- name: objects/object_nb
+ xml_path: assets/xml/objects/object_nb.xml
+- name: objects/object_niw
+ xml_path: assets/xml/objects/object_niw.xml
+- name: objects/object_nwc
+ xml_path: assets/xml/objects/object_nwc.xml
+- name: objects/object_ny
+ xml_path: assets/xml/objects/object_ny.xml
+- name: objects/object_o_anime
+ xml_path: assets/xml/objects/object_o_anime.xml
+- name: objects/object_oA1
+ xml_path: assets/xml/objects/object_oA1.xml
+- name: objects/object_oA2
+ xml_path: assets/xml/objects/object_oA2.xml
+- name: objects/object_oA3
+ xml_path: assets/xml/objects/object_oA3.xml
+- name: objects/object_oA4
+ xml_path: assets/xml/objects/object_oA4.xml
+- name: objects/object_oA5
+ xml_path: assets/xml/objects/object_oA5.xml
+- name: objects/object_oA6
+ xml_path: assets/xml/objects/object_oA6.xml
+- name: objects/object_oA7
+ xml_path: assets/xml/objects/object_oA7.xml
+- name: objects/object_oA8
+ xml_path: assets/xml/objects/object_oA8.xml
+- name: objects/object_oA9
+ xml_path: assets/xml/objects/object_oA9.xml
+- name: objects/object_oA10
+ xml_path: assets/xml/objects/object_oA10.xml
+- name: objects/object_oA11
+ xml_path: assets/xml/objects/object_oA11.xml
+- name: objects/object_oB1
+ xml_path: assets/xml/objects/object_oB1.xml
+- name: objects/object_oB2
+ xml_path: assets/xml/objects/object_oB2.xml
+- name: objects/object_oB3
+ xml_path: assets/xml/objects/object_oB3.xml
+- name: objects/object_oB4
+ xml_path: assets/xml/objects/object_oB4.xml
+- name: objects/object_oE1
+ xml_path: assets/xml/objects/object_oE1.xml
+- name: objects/object_oE1s
+ xml_path: assets/xml/objects/object_oE1s.xml
+- name: objects/object_oE2
+ xml_path: assets/xml/objects/object_oE2.xml
+- name: objects/object_oE3
+ xml_path: assets/xml/objects/object_oE3.xml
+- name: objects/object_oE4
+ xml_path: assets/xml/objects/object_oE4.xml
+- name: objects/object_oE4s
+ xml_path: assets/xml/objects/object_oE4s.xml
+- name: objects/object_oE5
+ xml_path: assets/xml/objects/object_oE5.xml
+- name: objects/object_oE6
+ xml_path: assets/xml/objects/object_oE6.xml
+- name: objects/object_oE7
+ xml_path: assets/xml/objects/object_oE7.xml
+- name: objects/object_oE8
+ xml_path: assets/xml/objects/object_oE8.xml
+- name: objects/object_oE9
+ xml_path: assets/xml/objects/object_oE9.xml
+- name: objects/object_oE10
+ xml_path: assets/xml/objects/object_oE10.xml
+- name: objects/object_oE11
+ xml_path: assets/xml/objects/object_oE11.xml
+- name: objects/object_oE12
+ xml_path: assets/xml/objects/object_oE12.xml
+- name: objects/object_oE_anime
+ xml_path: assets/xml/objects/object_oE_anime.xml
+- name: objects/object_oF1d_map
+ xml_path: assets/xml/objects/object_oF1d_map.xml
+- name: objects/object_oF1s
+ xml_path: assets/xml/objects/object_oF1s.xml
+- name: objects/object_okuta
+ xml_path: assets/xml/objects/object_okuta.xml
+- name: objects/object_opening_demo1
+ xml_path: assets/xml/objects/object_opening_demo1.xml
+- name: objects/object_os
+ xml_path: assets/xml/objects/object_os.xml
+- name: objects/object_os_anime
+ xml_path: assets/xml/objects/object_os_anime.xml
+- name: objects/object_ossan
+ xml_path: assets/xml/objects/object_ossan.xml
+- name: objects/object_ouke_haka
+ xml_path: assets/xml/objects/object_ouke_haka.xml
+- name: objects/object_owl
+ xml_path: assets/xml/objects/object_owl.xml
+- name: objects/object_peehat
+ xml_path: assets/xml/objects/object_peehat.xml
+- name: objects/object_po_composer
+ xml_path: assets/xml/objects/object_po_composer.xml
+- name: objects/object_po_field
+ xml_path: assets/xml/objects/object_po_field.xml
+- name: objects/object_po_sisters
+ xml_path: assets/xml/objects/object_po_sisters.xml
+- name: objects/object_poh
+ xml_path: assets/xml/objects/object_poh.xml
+- name: objects/object_ps
+ xml_path: assets/xml/objects/object_ps.xml
+- name: objects/object_pu_box
+ xml_path: assets/xml/objects/object_pu_box.xml
+- name: objects/object_rd
+ xml_path: assets/xml/objects/object_rd.xml
+- name: objects/object_reeba
+ xml_path: assets/xml/objects/object_reeba.xml
+- name: objects/object_relay_objects
+ xml_path: assets/xml/objects/object_relay_objects.xml
+- name: objects/object_rl
+ xml_path: assets/xml/objects/object_rl.xml
+- name: objects/object_rr
+ xml_path: assets/xml/objects/object_rr.xml
+- name: objects/object_rs
+ xml_path: assets/xml/objects/object_rs.xml
+- name: objects/object_ru1
+ xml_path: assets/xml/objects/object_ru1.xml
+- name: objects/object_ru2
+ xml_path: assets/xml/objects/object_ru2.xml
+- name: objects/object_sa
+ xml_path: assets/xml/objects/object_sa.xml
+- name: objects/object_sb
+ xml_path: assets/xml/objects/object_sb.xml
+- name: objects/object_sd
+ xml_path: assets/xml/objects/object_sd.xml
+- name: objects/object_shop_dungen
+ xml_path: assets/xml/objects/object_shop_dungen.xml
+- name: objects/object_shopnuts
+ xml_path: assets/xml/objects/object_shopnuts.xml
+- name: objects/object_siofuki
+ xml_path: assets/xml/objects/object_siofuki.xml
+- name: objects/object_sk2
+ xml_path: assets/xml/objects/object_sk2.xml
+- name: objects/object_skb
+ xml_path: assets/xml/objects/object_skb.xml
+- name: objects/object_skj
+ xml_path: assets/xml/objects/object_skj.xml
+- name: objects/object_spot00_break
+ xml_path: assets/xml/objects/object_spot00_break.xml
+- name: objects/object_spot00_objects
+ xml_path: assets/xml/objects/object_spot00_objects.xml
+- name: objects/object_spot01_matoya
+ xml_path: assets/xml/objects/object_spot01_matoya.xml
+- name: objects/object_spot01_matoyab
+ xml_path: assets/xml/objects/object_spot01_matoyab.xml
+- name: objects/object_spot01_objects
+ xml_path: assets/xml/objects/object_spot01_objects.xml
+- name: objects/object_spot01_objects2
+ xml_path: assets/xml/objects/object_spot01_objects2.xml
+- name: objects/object_spot02_objects
+ xml_path: assets/xml/objects/object_spot02_objects.xml
+- name: objects/object_spot03_object
+ xml_path: assets/xml/objects/object_spot03_object.xml
+- name: objects/object_spot04_objects
+ xml_path: assets/xml/objects/object_spot04_objects.xml
+- name: objects/object_spot05_objects
+ xml_path: assets/xml/objects/object_spot05_objects.xml
+- name: objects/object_spot06_objects
+ xml_path: assets/xml/objects/object_spot06_objects.xml
+- name: objects/object_spot07_object
+ xml_path: assets/xml/objects/object_spot07_object.xml
+- name: objects/object_spot08_obj
+ xml_path: assets/xml/objects/object_spot08_obj.xml
+- name: objects/object_spot09_obj
+ xml_path: assets/xml/objects/object_spot09_obj.xml
+- name: objects/object_spot11_obj
+ xml_path: assets/xml/objects/object_spot11_obj.xml
+- name: objects/object_spot12_obj
+ xml_path: assets/xml/objects/object_spot12_obj.xml
+- name: objects/object_spot15_obj
+ xml_path: assets/xml/objects/object_spot15_obj.xml
+- name: objects/object_spot16_obj
+ xml_path: assets/xml/objects/object_spot16_obj.xml
+- name: objects/object_spot17_obj
+ xml_path: assets/xml/objects/object_spot17_obj.xml
+- name: objects/object_spot18_obj
+ xml_path: assets/xml/objects/object_spot18_obj.xml
+- name: objects/object_ssh
+ xml_path: assets/xml/objects/object_ssh.xml
+- name: objects/object_sst
+ xml_path: assets/xml/objects/object_sst.xml
+- name: objects/object_st
+ xml_path: assets/xml/objects/object_st.xml
+- name: objects/object_stream
+ xml_path: assets/xml/objects/object_stream.xml
+- name: objects/object_syokudai
+ xml_path: assets/xml/objects/object_syokudai.xml
+- name: objects/object_ta
+ xml_path: assets/xml/objects/object_ta.xml
+- name: objects/object_timeblock
+ xml_path: assets/xml/objects/object_timeblock.xml
+- name: objects/object_tite
+ xml_path: assets/xml/objects/object_tite.xml
+- name: objects/object_tk
+ xml_path: assets/xml/objects/object_tk.xml
+- name: objects/object_toki_objects
+ xml_path: assets/xml/objects/object_toki_objects.xml
+- name: objects/object_torch2
+ xml_path: assets/xml/objects/object_torch2.xml
+- name: objects/object_toryo
+ xml_path: assets/xml/objects/object_toryo.xml
+- name: objects/object_tp
+ xml_path: assets/xml/objects/object_tp.xml
+- name: objects/object_tr
+ xml_path: assets/xml/objects/object_tr.xml
+- name: objects/object_trap
+ xml_path: assets/xml/objects/object_trap.xml
+- name: objects/object_triforce_spot
+ xml_path: assets/xml/objects/object_triforce_spot.xml
+- name: objects/object_ts
+ xml_path: assets/xml/objects/object_ts.xml
+- name: objects/object_tsubo
+ xml_path: assets/xml/objects/object_tsubo.xml
+- name: objects/object_tw
+ xml_path: assets/xml/objects/object_tw.xml
+- name: objects/object_umajump
+ xml_path: assets/xml/objects/object_umajump.xml
+- name: objects/object_vali
+ xml_path: assets/xml/objects/object_vali.xml
+- name: objects/object_vase
+ xml_path: assets/xml/objects/object_vase.xml
+- name: objects/object_vm
+ xml_path: assets/xml/objects/object_vm.xml
+- name: objects/object_wallmaster
+ xml_path: assets/xml/objects/object_wallmaster.xml
+- name: objects/object_warp1
+ xml_path: assets/xml/objects/object_warp1.xml
+- name: objects/object_warp2
+ xml_path: assets/xml/objects/object_warp2.xml
+- name: objects/object_wf
+ xml_path: assets/xml/objects/object_wf.xml
+- name: objects/object_wood02
+ xml_path: assets/xml/objects/object_wood02.xml
+- name: objects/object_xc
+ xml_path: assets/xml/objects/object_xc.xml
+- name: objects/object_yabusame_point
+ xml_path: assets/xml/objects/object_yabusame_point.xml
+- name: objects/object_ydan_objects
+ xml_path: assets/xml/objects/object_ydan_objects.xml
+- name: objects/object_yukabyun
+ xml_path: assets/xml/objects/object_yukabyun.xml
+- name: objects/object_zf
+ xml_path: assets/xml/objects/object_zf.xml
+- name: objects/object_zg
+ xml_path: assets/xml/objects/object_zg.xml
+- name: objects/object_zl1
+ xml_path: assets/xml/objects/object_zl1.xml
+- name: objects/object_zl2
+ xml_path: assets/xml/objects/object_zl2.xml
+- name: objects/object_zl2_anime1
+ xml_path: assets/xml/objects/object_zl2_anime1.xml
+- name: objects/object_zl2_anime2
+ xml_path: assets/xml/objects/object_zl2_anime2.xml
+- name: objects/object_zl4
+ xml_path: assets/xml/objects/object_zl4.xml
+- name: objects/object_zo
+ xml_path: assets/xml/objects/object_zo.xml
+- name: overlays/ovl_Arrow_Fire
+ xml_path: assets/xml/overlays/ovl_Arrow_Fire.xml
+ start_offset: 0x960
+ end_offset: 0x1D80
+- name: overlays/ovl_Arrow_Ice
+ xml_path: assets/xml/overlays/ovl_Arrow_Ice.xml
+ start_offset: 0x980
+ end_offset: 0x1DA0
+- name: overlays/ovl_Arrow_Light
+ xml_path: assets/xml/overlays/ovl_Arrow_Light.xml
+ start_offset: 0x990
+ end_offset: 0x1DB0
+- name: overlays/ovl_Bg_Ganon_Otyuka
+ xml_path: assets/xml/overlays/ovl_Bg_Ganon_Otyuka.xml
+ start_offset: 0x1110
+ end_offset: 0x24EC
+- name: overlays/ovl_Bg_Jya_Cobra
+ xml_path: assets/xml/overlays/ovl_Bg_Jya_Cobra.xml
+ start_offset: 0x1830
+ end_offset: 0x18A8
+- name: overlays/ovl_Boss_Dodongo
+ xml_path: assets/xml/overlays/ovl_Boss_Dodongo.xml
+ start_offset: 0x61C8
+ end_offset: 0x91C8
+- name: overlays/ovl_Boss_Ganon
+ xml_path: assets/xml/overlays/ovl_Boss_Ganon.xml
+ start_offset: 0xE398
+ end_offset: 0x20EB8
+- name: overlays/ovl_Boss_Ganon2
+ xml_path: assets/xml/overlays/ovl_Boss_Ganon2.xml
+ start_offset: 0x9F48
+ end_offset: 0x103F8
+- name: overlays/ovl_Boss_Sst
+ xml_path: assets/xml/overlays/ovl_Boss_Sst.xml
+ start_offset: 0xA330
+ end_offset: 0xACE0
+- name: overlays/ovl_Demo_Shd
+ xml_path: assets/xml/overlays/ovl_Demo_Shd.xml
+ start_offset: 0x410
+ end_offset: 0x2390
+- name: overlays/ovl_Effect_Ss_Fhg_Flash
+ xml_path: assets/xml/overlays/ovl_Effect_Ss_Fhg_Flash.xml
+ start_offset: 0x9F0
+ end_offset: 0xEA8
+- name: overlays/ovl_En_Bili
+ xml_path: assets/xml/overlays/ovl_En_Bili.xml
+ start_offset: 0x1E40
+ end_offset: 0x1E60
+- name: overlays/ovl_En_Clear_Tag
+ xml_path: assets/xml/overlays/ovl_En_Clear_Tag.xml
+ start_offset: 0x2600
+ end_offset: 0x8900
+- name: overlays/ovl_En_Ganon_Mant
+ xml_path: assets/xml/overlays/ovl_En_Ganon_Mant.xml
+ start_offset: 0x11E8
+ end_offset: 0x40E8
+- name: overlays/ovl_En_Ganon_Organ
+ xml_path: assets/xml/overlays/ovl_En_Ganon_Organ.xml
+ start_offset: 0x328
+ end_offset: 0x6EB0
+- name: overlays/ovl_En_Holl
+ xml_path: assets/xml/overlays/ovl_En_Holl.xml
+ start_offset: 0xE68
+ end_offset: 0xED0
+- name: overlays/ovl_En_Jsjutan
+ xml_path: assets/xml/overlays/ovl_En_Jsjutan.xml
+ start_offset: 0x12B8
+ end_offset: 0x4C50
+- name: overlays/ovl_En_Kanban
+ xml_path: assets/xml/overlays/ovl_En_Kanban.xml
+ start_offset: 0x2E70
+ end_offset: 0x2F30
+- name: overlays/ovl_En_Sda
+ xml_path: assets/xml/overlays/ovl_En_Sda.xml
+ start_offset: 0x14A8
+ end_offset: 0x1538
+- name: overlays/ovl_En_Ssh
+ xml_path: assets/xml/overlays/ovl_En_Ssh.xml
+ start_offset: 0x2150
+ end_offset: 0x21E0
+- name: overlays/ovl_En_St
+ xml_path: assets/xml/overlays/ovl_En_St.xml
+ start_offset: 0x26A0
+ end_offset: 0x2730
+- name: overlays/ovl_En_Sth
+ xml_path: assets/xml/overlays/ovl_En_Sth.xml
+ start_offset: 0xE60
+ end_offset: 0x3E34
+- name: overlays/ovl_End_Title
+ xml_path: assets/xml/overlays/ovl_End_Title.xml
+ start_offset: 0x6F0
+ end_offset: 0x4098
+- name: overlays/ovl_file_choose
+ xml_path: assets/xml/overlays/ovl_file_choose.xml
+ start_offset: 0xEC50
+ end_offset: 0xF330
+- name: overlays/ovl_Magic_Dark
+ xml_path: assets/xml/overlays/ovl_Magic_Dark.xml
+ start_offset: 0xC90
+ end_offset: 0x16C0
+- name: overlays/ovl_Magic_Fire
+ xml_path: assets/xml/overlays/ovl_Magic_Fire.xml
+ start_offset: 0xB20
+ end_offset: 0x2170
+- name: overlays/ovl_Magic_Wind
+ xml_path: assets/xml/overlays/ovl_Magic_Wind.xml
+ start_offset: 0x6A0
+ end_offset: 0x1BB8
+- name: overlays/ovl_Oceff_Spot
+ xml_path: assets/xml/overlays/ovl_Oceff_Spot.xml
+ start_offset: 0x780
+ end_offset: 0xE58
+- name: overlays/ovl_Oceff_Storm
+ xml_path: assets/xml/overlays/ovl_Oceff_Storm.xml
+ start_offset: 0x740
+ end_offset: 0x1AD0
+- name: overlays/ovl_Oceff_Wipe
+ xml_path: assets/xml/overlays/ovl_Oceff_Wipe.xml
+ start_offset: 0x4F0
+ end_offset: 0xCB0
+- name: overlays/ovl_Oceff_Wipe2
+ xml_path: assets/xml/overlays/ovl_Oceff_Wipe2.xml
+ start_offset: 0x430
+ end_offset: 0x1698
+- name: overlays/ovl_Oceff_Wipe3
+ xml_path: assets/xml/overlays/ovl_Oceff_Wipe3.xml
+ start_offset: 0x430
+ end_offset: 0x1678
+- name: overlays/ovl_Oceff_Wipe4
+ xml_path: assets/xml/overlays/ovl_Oceff_Wipe4.xml
+ start_offset: 0x410
+ end_offset: 0xEF8
+- name: scenes/dungeons/bdan
+ xml_path: assets/xml/scenes/dungeons/bdan.xml
+- name: scenes/dungeons/bdan_boss
+ xml_path: assets/xml/scenes/dungeons/bdan_boss.xml
+- name: scenes/dungeons/Bmori1
+ xml_path: assets/xml/scenes/dungeons/Bmori1.xml
+- name: scenes/dungeons/ddan
+ xml_path: assets/xml/scenes/dungeons/ddan.xml
+- name: scenes/dungeons/ddan_boss
+ xml_path: assets/xml/scenes/dungeons/ddan_boss.xml
+- name: scenes/dungeons/FIRE_bs
+ xml_path: assets/xml/scenes/dungeons/FIRE_bs.xml
+- name: scenes/dungeons/ganon
+ xml_path: assets/xml/scenes/dungeons/ganon.xml
+- name: scenes/dungeons/ganon_boss
+ xml_path: assets/xml/scenes/dungeons/ganon_boss.xml
+- name: scenes/dungeons/ganon_demo
+ xml_path: assets/xml/scenes/dungeons/ganon_demo.xml
+- name: scenes/dungeons/ganon_final
+ xml_path: assets/xml/scenes/dungeons/ganon_final.xml
+- name: scenes/dungeons/ganon_sonogo
+ xml_path: assets/xml/scenes/dungeons/ganon_sonogo.xml
+- name: scenes/dungeons/ganontika
+ xml_path: assets/xml/scenes/dungeons/ganontika.xml
+- name: scenes/dungeons/ganontikasonogo
+ xml_path: assets/xml/scenes/dungeons/ganontikasonogo.xml
+- name: scenes/dungeons/gerudoway
+ xml_path: assets/xml/scenes/dungeons/gerudoway.xml
+- name: scenes/dungeons/HAKAdan
+ xml_path: assets/xml/scenes/dungeons/HAKAdan.xml
+- name: scenes/dungeons/HAKAdan_bs
+ xml_path: assets/xml/scenes/dungeons/HAKAdan_bs.xml
+- name: scenes/dungeons/HAKAdanCH
+ xml_path: assets/xml/scenes/dungeons/HAKAdanCH.xml
+- name: scenes/dungeons/HIDAN
+ xml_path: assets/xml/scenes/dungeons/HIDAN.xml
+- name: scenes/dungeons/ice_doukutu
+ xml_path: assets/xml/scenes/dungeons/ice_doukutu.xml
+- name: scenes/dungeons/jyasinboss
+ xml_path: assets/xml/scenes/dungeons/jyasinboss.xml
+- name: scenes/dungeons/jyasinzou
+ xml_path: assets/xml/scenes/dungeons/jyasinzou.xml
+- name: scenes/dungeons/men
+ xml_path: assets/xml/scenes/dungeons/men.xml
+- name: scenes/dungeons/MIZUsin
+ xml_path: assets/xml/scenes/dungeons/MIZUsin.xml
+- name: scenes/dungeons/MIZUsin_bs
+ xml_path: assets/xml/scenes/dungeons/MIZUsin_bs.xml
+- name: scenes/dungeons/moribossroom
+ xml_path: assets/xml/scenes/dungeons/moribossroom.xml
+- name: scenes/dungeons/ydan
+ xml_path: assets/xml/scenes/dungeons/ydan.xml
+- name: scenes/dungeons/ydan_boss
+ xml_path: assets/xml/scenes/dungeons/ydan_boss.xml
+- name: scenes/indoors/bowling
+ xml_path: assets/xml/scenes/indoors/bowling.xml
+- name: scenes/indoors/daiyousei_izumi
+ xml_path: assets/xml/scenes/indoors/daiyousei_izumi.xml
+- name: scenes/indoors/hairal_niwa
+ xml_path: assets/xml/scenes/indoors/hairal_niwa.xml
+- name: scenes/indoors/hairal_niwa_n
+ xml_path: assets/xml/scenes/indoors/hairal_niwa_n.xml
+- name: scenes/indoors/hakasitarelay
+ xml_path: assets/xml/scenes/indoors/hakasitarelay.xml
+- name: scenes/indoors/hut
+ xml_path: assets/xml/scenes/indoors/hut.xml
+- name: scenes/indoors/hylia_labo
+ xml_path: assets/xml/scenes/indoors/hylia_labo.xml
+- name: scenes/indoors/impa
+ xml_path: assets/xml/scenes/indoors/impa.xml
+- name: scenes/indoors/kakariko
+ xml_path: assets/xml/scenes/indoors/kakariko.xml
+- name: scenes/indoors/kenjyanoma
+ xml_path: assets/xml/scenes/indoors/kenjyanoma.xml
+- name: scenes/indoors/kokiri_home
+ xml_path: assets/xml/scenes/indoors/kokiri_home.xml
+- name: scenes/indoors/kokiri_home3
+ xml_path: assets/xml/scenes/indoors/kokiri_home3.xml
+- name: scenes/indoors/kokiri_home4
+ xml_path: assets/xml/scenes/indoors/kokiri_home4.xml
+- name: scenes/indoors/kokiri_home5
+ xml_path: assets/xml/scenes/indoors/kokiri_home5.xml
+- name: scenes/indoors/labo
+ xml_path: assets/xml/scenes/indoors/labo.xml
+- name: scenes/indoors/link_home
+ xml_path: assets/xml/scenes/indoors/link_home.xml
+- name: scenes/indoors/mahouya
+ xml_path: assets/xml/scenes/indoors/mahouya.xml
+- name: scenes/indoors/malon_stable
+ xml_path: assets/xml/scenes/indoors/malon_stable.xml
+- name: scenes/indoors/miharigoya
+ xml_path: assets/xml/scenes/indoors/miharigoya.xml
+- name: scenes/indoors/nakaniwa
+ xml_path: assets/xml/scenes/indoors/nakaniwa.xml
+- name: scenes/indoors/souko
+ xml_path: assets/xml/scenes/indoors/souko.xml
+- name: scenes/indoors/syatekijyou
+ xml_path: assets/xml/scenes/indoors/syatekijyou.xml
+- name: scenes/indoors/takaraya
+ xml_path: assets/xml/scenes/indoors/takaraya.xml
+- name: scenes/indoors/tent
+ xml_path: assets/xml/scenes/indoors/tent.xml
+- name: scenes/indoors/tokinoma
+ xml_path: assets/xml/scenes/indoors/tokinoma.xml
+- name: scenes/indoors/yousei_izumi_tate
+ xml_path: assets/xml/scenes/indoors/yousei_izumi_tate.xml
+- name: scenes/indoors/yousei_izumi_yoko
+ xml_path: assets/xml/scenes/indoors/yousei_izumi_yoko.xml
+- name: scenes/misc/enrui
+ xml_path: assets/xml/scenes/misc/enrui.xml
+- name: scenes/misc/entra
+ xml_path: assets/xml/scenes/misc/entra.xml
+- name: scenes/misc/entra_n
+ xml_path: assets/xml/scenes/misc/entra_n.xml
+- name: scenes/misc/hakaana
+ xml_path: assets/xml/scenes/misc/hakaana.xml
+- name: scenes/misc/hakaana2
+ xml_path: assets/xml/scenes/misc/hakaana2.xml
+- name: scenes/misc/hakaana_ouke
+ xml_path: assets/xml/scenes/misc/hakaana_ouke.xml
+- name: scenes/misc/hiral_demo
+ xml_path: assets/xml/scenes/misc/hiral_demo.xml
+- name: scenes/misc/kakariko3
+ xml_path: assets/xml/scenes/misc/kakariko3.xml
+- name: scenes/misc/kakusiana
+ xml_path: assets/xml/scenes/misc/kakusiana.xml
+- name: scenes/misc/kinsuta
+ xml_path: assets/xml/scenes/misc/kinsuta.xml
+- name: scenes/misc/market_alley
+ xml_path: assets/xml/scenes/misc/market_alley.xml
+- name: scenes/misc/market_alley_n
+ xml_path: assets/xml/scenes/misc/market_alley_n.xml
+- name: scenes/misc/market_day
+ xml_path: assets/xml/scenes/misc/market_day.xml
+- name: scenes/misc/market_night
+ xml_path: assets/xml/scenes/misc/market_night.xml
+- name: scenes/misc/market_ruins
+ xml_path: assets/xml/scenes/misc/market_ruins.xml
+- name: scenes/misc/shrine
+ xml_path: assets/xml/scenes/misc/shrine.xml
+- name: scenes/misc/shrine_n
+ xml_path: assets/xml/scenes/misc/shrine_n.xml
+- name: scenes/misc/shrine_r
+ xml_path: assets/xml/scenes/misc/shrine_r.xml
+- name: scenes/misc/turibori
+ xml_path: assets/xml/scenes/misc/turibori.xml
+- name: scenes/overworld/ganon_tou
+ xml_path: assets/xml/scenes/overworld/ganon_tou.xml
+- name: scenes/overworld/spot00
+ xml_path: assets/xml/scenes/overworld/spot00.xml
+- name: scenes/overworld/spot01
+ xml_path: assets/xml/scenes/overworld/spot01.xml
+- name: scenes/overworld/spot02
+ xml_path: assets/xml/scenes/overworld/spot02.xml
+- name: scenes/overworld/spot03
+ xml_path: assets/xml/scenes/overworld/spot03.xml
+- name: scenes/overworld/spot04
+ xml_path: assets/xml/scenes/overworld/spot04.xml
+- name: scenes/overworld/spot05
+ xml_path: assets/xml/scenes/overworld/spot05.xml
+- name: scenes/overworld/spot06
+ xml_path: assets/xml/scenes/overworld/spot06.xml
+- name: scenes/overworld/spot07
+ xml_path: assets/xml/scenes/overworld/spot07.xml
+- name: scenes/overworld/spot08
+ xml_path: assets/xml/scenes/overworld/spot08.xml
+- name: scenes/overworld/spot09
+ xml_path: assets/xml/scenes/overworld/spot09.xml
+- name: scenes/overworld/spot10
+ xml_path: assets/xml/scenes/overworld/spot10.xml
+- name: scenes/overworld/spot11
+ xml_path: assets/xml/scenes/overworld/spot11.xml
+- name: scenes/overworld/spot12
+ xml_path: assets/xml/scenes/overworld/spot12.xml
+- name: scenes/overworld/spot13
+ xml_path: assets/xml/scenes/overworld/spot13.xml
+- name: scenes/overworld/spot15
+ xml_path: assets/xml/scenes/overworld/spot15.xml
+- name: scenes/overworld/spot16
+ xml_path: assets/xml/scenes/overworld/spot16.xml
+- name: scenes/overworld/spot17
+ xml_path: assets/xml/scenes/overworld/spot17.xml
+- name: scenes/overworld/spot18
+ xml_path: assets/xml/scenes/overworld/spot18.xml
+- name: scenes/overworld/spot20
+ xml_path: assets/xml/scenes/overworld/spot20.xml
+- name: scenes/shops/alley_shop
+ xml_path: assets/xml/scenes/shops/alley_shop.xml
+- name: scenes/shops/drag
+ xml_path: assets/xml/scenes/shops/drag.xml
+- name: scenes/shops/face_shop
+ xml_path: assets/xml/scenes/shops/face_shop.xml
+- name: scenes/shops/golon
+ xml_path: assets/xml/scenes/shops/golon.xml
+- name: scenes/shops/kokiri_shop
+ xml_path: assets/xml/scenes/shops/kokiri_shop.xml
+- name: scenes/shops/night_shop
+ xml_path: assets/xml/scenes/shops/night_shop.xml
+- name: scenes/shops/shop1
+ xml_path: assets/xml/scenes/shops/shop1.xml
+- name: scenes/shops/zoora
+ xml_path: assets/xml/scenes/shops/zoora.xml
+- name: textures/backgrounds
+ xml_path: assets/xml/textures/backgrounds.xml
+- name: textures/do_action_static
+ xml_path: assets/xml/textures/do_action_static.xml
+- name: textures/icon_item_24_static
+ xml_path: assets/xml/textures/icon_item_24_static.xml
+- name: textures/icon_item_dungeon_static
+ xml_path: assets/xml/textures/icon_item_dungeon_static.xml
+- name: textures/icon_item_field_static
+ xml_path: assets/xml/textures/icon_item_field_static.xml
+- name: textures/icon_item_gameover_static
+ xml_path: assets/xml/textures/icon_item_gameover_static.xml
+- name: textures/icon_item_jpn_static
+ xml_path: assets/xml/textures/icon_item_jpn_static.xml
+- name: textures/icon_item_nes_static
+ xml_path: assets/xml/textures/icon_item_nes_static.xml
+- name: textures/icon_item_static
+ xml_path: assets/xml/textures/icon_item_static.xml
+- name: textures/item_name_static
+ xml_path: assets/xml/textures/item_name_static.xml
+- name: textures/kanji
+ xml_path: assets/xml/textures/kanji.xml
+- name: textures/map_48x85_static
+ xml_path: assets/xml/textures/map_48x85_static.xml
+- name: textures/map_grand_static
+ xml_path: assets/xml/textures/map_grand_static.xml
+- name: textures/map_i_static
+ xml_path: assets/xml/textures/map_i_static.xml
+- name: textures/map_name_static
+ xml_path: assets/xml/textures/map_name_static.xml
+- name: textures/message_static
+ xml_path: assets/xml/textures/message_static.xml
+- name: textures/message_texture_static
+ xml_path: assets/xml/textures/message_texture_static.xml
+- name: textures/nes_font_static
+ xml_path: assets/xml/textures/nes_font_static.xml
+- name: textures/nintendo_rogo_static
+ xml_path: assets/xml/textures/nintendo_rogo_static.xml
+- name: textures/parameter_static
+ xml_path: assets/xml/textures/parameter_static.xml
+- name: textures/place_title_cards
+ xml_path: assets/xml/textures/place_title_cards.xml
+- name: textures/skyboxes
+ xml_path: assets/xml/textures/skyboxes.xml
+- name: textures/title_static
+ xml_path: assets/xml/textures/title_static.xml
diff --git a/baseroms/ntsc-1.0/segments.csv b/baseroms/ntsc-1.0/segments.csv
new file mode 100644
index 0000000000..cb73e168af
--- /dev/null
+++ b/baseroms/ntsc-1.0/segments.csv
@@ -0,0 +1,1511 @@
+Name,VRAM start
+makerom,80000000
+boot,80000460
+dmadata,
+Audiobank,
+Audioseq,
+Audiotable,
+kanji,
+link_animetion,
+icon_item_static,
+icon_item_24_static,
+icon_item_field_static,
+icon_item_dungeon_static,
+icon_item_gameover_static,
+icon_item_jpn_static,
+icon_item_nes_static,
+item_name_static,
+map_name_static,
+do_action_static,
+message_static,
+jpn_message_data_static,
+message_texture_static,
+nes_font_static,
+nes_message_data_static,
+staff_message_data_static,
+map_grand_static,
+map_i_static,
+map_48x85_static,
+code,800110A0
+n64dd,801C6E80
+ovl_title,80800000
+ovl_select,808009C0
+ovl_opening,80803720
+ovl_file_choose,80803880
+ovl_kaleido_scope,808137C0
+ovl_player_actor,808301C0
+ovl_map_mark_data,808567F0
+ovl_En_Test,8085D350
+ovl_En_GirlA,80862C00
+ovl_En_Part,80865520
+ovl_En_Light,80866B30
+ovl_En_Door,80867920
+ovl_En_Box,80868750
+ovl_En_Poh,8086A290
+ovl_En_Okuta,8086E420
+ovl_En_Bom,80870A00
+ovl_En_Wallmas,808718D0
+ovl_En_Dodongo,808732E0
+ovl_En_Firefly,80876080
+ovl_En_Horse,808781F0
+ovl_En_Arrow,80884410
+ovl_En_Elf,80885B00
+ovl_En_Niw,8088A4C0
+ovl_En_Tite,8088D7F0
+ovl_En_Reeba,80890590
+ovl_En_Peehat,80892000
+ovl_En_Holl,80895700
+ovl_En_Scene_Change,808966D0
+ovl_En_Zf,80896800
+ovl_En_Hata,8089D300
+ovl_Boss_Dodongo,8089D890
+ovl_Boss_Goma,808A7370
+ovl_En_Zl1,808AD2F0
+ovl_En_Viewer,808B10F0
+ovl_En_Goma,808B3FC0
+ovl_Bg_Pushbox,808B6C50
+ovl_En_Bubble,808B6F50
+ovl_Door_Shutter,808B8370
+ovl_En_Dodojr,808BA5F0
+ovl_En_Bdfire,808BC490
+ovl_En_Boom,808BD020
+ovl_En_Torch2,808BD8E0
+ovl_En_Bili,808C0080
+ovl_En_Tp,808C2350
+ovl_En_St,808C41A0
+ovl_En_Bw,808C6E10
+ovl_En_Eiyer,808CA170
+ovl_En_River_Sound,808CBDD0
+ovl_En_Horse_Normal,808CC760
+ovl_En_Ossan,808CED80
+ovl_Bg_Treemouth,808D5360
+ovl_Bg_Dodoago,808D69B0
+ovl_Bg_Hidan_Dalm,808D7760
+ovl_Bg_Hidan_Hrock,808D7FB0
+ovl_En_Horse_Ganon,808D87E0
+ovl_Bg_Hidan_Rock,808D9560
+ovl_Bg_Hidan_Rsekizou,808DA650
+ovl_Bg_Hidan_Sekizou,808DB230
+ovl_Bg_Hidan_Sima,808DC680
+ovl_Bg_Hidan_Syoku,808DD5A0
+ovl_En_Xc,808DDA00
+ovl_Bg_Hidan_Curtain,808E4190
+ovl_Bg_Spot00_Hanebasi,808E4C30
+ovl_En_Mb,808E5D40
+ovl_En_Bombf,808E9E80
+ovl_Bg_Hidan_Firewall,808EB2F0
+ovl_Bg_Dy_Yoseizo,808EBA50
+ovl_En_Zl2,808EE7A0
+ovl_Bg_Hidan_Fslift,808F2ED0
+ovl_En_OE2,808F33A0
+ovl_Bg_Ydan_Hasi,808F3480
+ovl_Bg_Ydan_Maruta,808F3C30
+ovl_Boss_Ganondrof,808F4310
+ovl_En_Am,808F9080
+ovl_En_Dekubaba,808FB480
+ovl_En_M_Fire1,808FEF20
+ovl_En_M_Thunder,808FF0C0
+ovl_Bg_Ddan_Jd,809006B0
+ovl_Bg_Breakwall,80900D00
+ovl_En_Jj,80901B70
+ovl_En_Horse_Zelda,80903140
+ovl_Bg_Ddan_Kd,80903C30
+ovl_Door_Warp1,80904520
+ovl_Obj_Syokudai,809087D0
+ovl_Item_B_Heart,80909410
+ovl_En_Dekunuts,80909800
+ovl_Bg_Menkuri_Kaiten,8090B000
+ovl_Bg_Menkuri_Eye,8090B190
+ovl_En_Vali,8090B630
+ovl_Bg_Mizu_Movebg,8090DCD0
+ovl_Bg_Mizu_Water,8090EE70
+ovl_Arms_Hook,8090FB40
+ovl_En_fHG,809108A0
+ovl_Bg_Mori_Hineri,809131D0
+ovl_En_Bb,80913EA0
+ovl_Bg_Toki_Hikari,80917B70
+ovl_En_Yukabyun,80918910
+ovl_Bg_Toki_Swd,80918F20
+ovl_En_Fhg_Fire,8091A570
+ovl_Bg_Mjin,8091CB90
+ovl_Bg_Hidan_Kousi,8091CF70
+ovl_Door_Toki,8091D4F0
+ovl_Bg_Hidan_Hamstep,8091D650
+ovl_En_Bird,8091E4E0
+ovl_En_Wood02,8091E9A0
+ovl_En_Lightbox,8091FB80
+ovl_En_Pu_box,80920000
+ovl_En_Trap,80920340
+ovl_En_Arow_Trap,809215E0
+ovl_En_Vase,80921730
+ovl_En_Ta,80921830
+ovl_En_Tk,809251F0
+ovl_Bg_Mori_Bigst,80927020
+ovl_Bg_Mori_Elevator,80927950
+ovl_Bg_Mori_Kaitenkabe,80928440
+ovl_Bg_Mori_Rakkatenjo,80928AA0
+ovl_En_Vm,80929410
+ovl_Demo_Effect,8092ACC0
+ovl_Demo_Kankyo,809307C0
+ovl_Bg_Hidan_Fwbig,809344C0
+ovl_En_Floormas,809351A0
+ovl_En_Heishi1,80938580
+ovl_En_Rd,80939A90
+ovl_En_Po_Sisters,8093C340
+ovl_Bg_Heavy_Block,80941030
+ovl_Bg_Po_Event,80942920
+ovl_Obj_Mure,80944760
+ovl_En_Sw,80945770
+ovl_Boss_Fd,80948F60
+ovl_Object_Kankyo,80950290
+ovl_En_Du,809534B0
+ovl_En_Fd,80954F50
+ovl_En_Horse_Link_Child,80957C10
+ovl_Door_Ana,80959A10
+ovl_Bg_Spot02_Objects,8095A080
+ovl_Bg_Haka,8095B3D0
+ovl_Magic_Wind,8095BA90
+ovl_Magic_Fire,8095D790
+ovl_En_Ru1,8095FA60
+ovl_Boss_Fd2,80967100
+ovl_En_Fd_Fire,8096AE30
+ovl_En_Dh,8096BB40
+ovl_En_Dha,8096D610
+ovl_En_Rl,8096E5E0
+ovl_En_Encount1,8096F4C0
+ovl_Demo_Du,80970020
+ovl_Demo_Im,80973800
+ovl_Demo_Tre_Lgt,80977770
+ovl_En_Fw,80977E80
+ovl_Bg_Vb_Sima,80979630
+ovl_En_Vb_Ball,80979D40
+ovl_Bg_Haka_Megane,8097AEE0
+ovl_Bg_Haka_MeganeBG,8097B2E0
+ovl_Bg_Haka_Ship,8097B9A0
+ovl_Bg_Haka_Sgami,8097C3E0
+ovl_En_Heishi2,8097D000
+ovl_En_Encount2,8097F200
+ovl_En_Fire_Rock,80980430
+ovl_En_Brob,80981540
+ovl_Mir_Ray,80982630
+ovl_Bg_Spot09_Obj,80983EF0
+ovl_Bg_Spot18_Obj,80984400
+ovl_Boss_Va,80984CD0
+ovl_Bg_Haka_Tubo,8099BEC0
+ovl_Bg_Haka_Trap,8099C8E0
+ovl_Bg_Haka_Huta,8099DEB0
+ovl_Bg_Haka_Zou,8099E950
+ovl_Bg_Spot17_Funen,8099FB40
+ovl_En_Syateki_Itm,8099FD90
+ovl_En_Syateki_Man,809A0B30
+ovl_En_Tana,809A18F0
+ovl_En_Nb,809A1B90
+ovl_Boss_Mo,809A6160
+ovl_En_Sb,809B6210
+ovl_En_Bigokuta,809B7650
+ovl_En_Karebaba,809BA160
+ovl_Bg_Bdan_Objects,809BBA50
+ovl_Demo_Sa,809BCD20
+ovl_Demo_Go,809BF840
+ovl_En_In,809C05A0
+ovl_En_Tr,809C3300
+ovl_Bg_Spot16_Bombstone,809C4C00
+ovl_Bg_Hidan_Kowarerukabe,809C6140
+ovl_Bg_Bombwall,809C7010
+ovl_En_Ru2,809C78D0
+ovl_Obj_Dekujr,809CA650
+ovl_Bg_Mizu_Uzu,809CAC90
+ovl_Bg_Spot06_Objects,809CAE60
+ovl_Bg_Ice_Objects,809CC270
+ovl_Bg_Haka_Water,809CD1B0
+ovl_En_Ma2,809CD990
+ovl_En_Bom_Chu,809CE9F0
+ovl_En_Horse_Game_Check,809D0090
+ovl_Boss_Tw,809D1160
+ovl_En_Rr,809E6C60
+ovl_En_Ba,809E9180
+ovl_En_Bx,809EB050
+ovl_En_Anubice,809EBB40
+ovl_En_Anubice_Fire,809ECDF0
+ovl_Bg_Mori_Hashigo,809EDBB0
+ovl_Bg_Mori_Hashira4,809EE470
+ovl_Bg_Mori_Idomizu,809EEA00
+ovl_Bg_Spot16_Doughnut,809EF040
+ovl_Bg_Bdan_Switch,809EF5F0
+ovl_En_Ma1,809F0A20
+ovl_Boss_Ganon,809F1D00
+ovl_Boss_Sst,80A17AF0
+ovl_En_Ny,80A24050
+ovl_En_Fr,80A25980
+ovl_Item_Shield,80A28410
+ovl_Bg_Ice_Shelter,80A28E20
+ovl_En_Ice_Hono,80A2A050
+ovl_Item_Ocarina,80A2B240
+ovl_Magic_Dark,80A2BA10
+ovl_Demo_6K,80A2D260
+ovl_En_Anubice_Tag,80A2FF70
+ovl_Bg_Haka_Gate,80A30240
+ovl_Bg_Spot15_Saku,80A312D0
+ovl_Bg_Jya_Goroiwa,80A31610
+ovl_Bg_Jya_Zurerukabe,80A31D90
+ovl_Bg_Jya_Cobra,80A32440
+ovl_Bg_Jya_Kanaami,80A34160
+ovl_Fishing,80A34510
+ovl_Obj_Oshihiki,80A4EFC0
+ovl_Bg_Gate_Shutter,80A50A70
+ovl_Eff_Dust,80A50EF0
+ovl_Bg_Spot01_Fusya,80A522D0
+ovl_Bg_Spot01_Idohashira,80A52570
+ovl_Bg_Spot01_Idomizu,80A53170
+ovl_Bg_Po_Syokudai,80A53480
+ovl_Bg_Ganon_Otyuka,80A53DD0
+ovl_Bg_Spot15_Rrbox,80A56410
+ovl_Bg_Umajump,80A571F0
+ovl_En_Insect,80A57380
+ovl_En_Butte,80A598A0
+ovl_En_Fish,80A5AE70
+ovl_Bg_Spot08_Iceblock,80A5CF80
+ovl_Item_Etcetera,80A5DFC0
+ovl_Arrow_Fire,80A5E890
+ovl_Arrow_Ice,80A60750
+ovl_Arrow_Light,80A62630
+ovl_Obj_Kibako,80A64520
+ovl_Obj_Tsubo,80A65220
+ovl_En_Wonder_Item,80A66210
+ovl_En_Ik,80A66F40
+ovl_Demo_Ik,80A6B580
+ovl_En_Skj,80A6CA90
+ovl_En_Skjneedle,80A703D0
+ovl_En_G_Switch,80A706E0
+ovl_Demo_Ext,80A71F10
+ovl_Demo_Shd,80A72850
+ovl_En_Dns,80A74C60
+ovl_Elf_Msg,80A75FF0
+ovl_En_Honotrap,80A765E0
+ovl_En_Tubo_Trap,80A77B30
+ovl_Obj_Ice_Poly,80A787D0
+ovl_Bg_Spot03_Taki,80A79180
+ovl_Bg_Spot07_Taki,80A79A70
+ovl_En_Fz,80A7A030
+ovl_En_Po_Relay,80A7C040
+ovl_Bg_Relay_Objects,80A7D750
+ovl_En_Diving_Game,80A7DF00
+ovl_En_Kusa,80A7F8B0
+ovl_Obj_Bean,80A80D90
+ovl_Obj_Bombiwa,80A83520
+ovl_Obj_Switch,80A83A90
+ovl_Obj_Elevator,80A85850
+ovl_Obj_Lift,80A85C10
+ovl_Obj_Hsblock,80A86630
+ovl_En_Okarina_Tag,80A86C00
+ovl_En_Yabusame_Mark,80A880E0
+ovl_En_Goroiwa,80A887B0
+ovl_En_Ex_Ruppy,80A8AB70
+ovl_En_Toryo,80A8BC30
+ovl_En_Daiku,80A8C8C0
+ovl_En_Nwc,80A8E000
+ovl_En_Blkobj,80A8EA40
+ovl_Item_Inbox,80A8EFA0
+ovl_En_Ge1,80A8F100
+ovl_Obj_Blockstop,80A91130
+ovl_En_Sda,80A912D0
+ovl_En_Clear_Tag,80A929D0
+ovl_En_Niw_Lady,80A9DF70
+ovl_En_Gm,80A9F850
+ovl_En_Ms,80AA0580
+ovl_En_Hs,80AA0C70
+ovl_Bg_Ingate,80AA1810
+ovl_En_Kanban,80AA1BA0
+ovl_En_Heishi3,80AA4CF0
+ovl_En_Syateki_Niw,80AA56C0
+ovl_En_Attack_Niw,80AA7750
+ovl_Bg_Spot01_Idosoko,80AA89B0
+ovl_En_Sa,80AA8BC0
+ovl_En_Wonder_Talk,80AAAE30
+ovl_Bg_Gjyo_Bridge,80AAB4C0
+ovl_En_Ds,80AAB9C0
+ovl_En_Mk,80AAC5E0
+ovl_En_Bom_Bowl_Man,80AAD470
+ovl_En_Bom_Bowl_Pit,80AAE9B0
+ovl_En_Owl,80AAF320
+ovl_En_Ishi,80AB2EC0
+ovl_Obj_Hana,80ABC010
+ovl_Obj_Lightswitch,80ABC320
+ovl_Obj_Mure2,80ABD750
+ovl_En_Go,80ABE170
+ovl_En_Fu,80AC27B0
+ovl_En_Changer,80AC3500
+ovl_Bg_Jya_Megami,80AC3EE0
+ovl_Bg_Jya_Lift,80AC50C0
+ovl_Bg_Jya_Bigmirror,80AC5610
+ovl_Bg_Jya_Bombchuiwa,80AC5E50
+ovl_Bg_Jya_Amishutter,80AC6980
+ovl_Bg_Jya_Bombiwa,80AC6D10
+ovl_Bg_Spot18_Basket,80AC72D0
+ovl_En_Ganon_Organ,80AC82C0
+ovl_En_Siofuki,80ACF2C0
+ovl_En_Stream,80AD0070
+ovl_En_Mm,80AD0600
+ovl_En_Ko,80AD1C20
+ovl_En_Kz,80AD5D60
+ovl_En_Weather_Tag,80AD7270
+ovl_Bg_Sst_Floor,80AD8160
+ovl_En_Ani,80AD86C0
+ovl_En_Ex_Item,80AD9430
+ovl_Bg_Jya_Ironobj,80ADA5A0
+ovl_En_Js,80ADB350
+ovl_En_Jsjutan,80ADBD20
+ovl_En_Cs,80AE1640
+ovl_En_Md,80AE2870
+ovl_En_Hy,80AE4EE0
+ovl_En_Ganon_Mant,80AE8820
+ovl_En_Okarina_Effect,80AECA40
+ovl_En_Mag,80AECDF0
+ovl_Door_Gerudo,80AF1D00
+ovl_Elf_Msg2,80AF22F0
+ovl_Demo_Gt,80AF2760
+ovl_En_Po_Field,80AF7D60
+ovl_Efc_Erupc,80AFB7D0
+ovl_Bg_Zg,80AFC2B0
+ovl_En_Heishi4,80AFC720
+ovl_En_Zl3,80AFD620
+ovl_Boss_Ganon2,80B05470
+ovl_En_Kakasi,80B18280
+ovl_En_Takara_Man,80B18FC0
+ovl_Obj_Makeoshihiki,80B19880
+ovl_Oceff_Spot,80B19D10
+ovl_End_Title,80B1AC40
+ovl_En_Torch,80B1ED70
+ovl_Demo_Ec,80B1EE60
+ovl_Shot_Sun,80B226C0
+ovl_En_Dy_Extra,80B22D80
+ovl_En_Wonder_Talk2,80B23300
+ovl_En_Ge2,80B239A0
+ovl_Obj_Roomtimer,80B25340
+ovl_En_Ssh,80B25590
+ovl_En_Sth,80B27B80
+ovl_Oceff_Wipe,80B2BC30
+ovl_Effect_Ss_Dust,80B2C980
+ovl_Effect_Ss_KiraKira,80B2D1B0
+ovl_Effect_Ss_Bomb,80B2D820
+ovl_Effect_Ss_Bomb2,80B2DC40
+ovl_Effect_Ss_Blast,80B2E570
+ovl_Effect_Ss_G_Spk,80B2E900
+ovl_Effect_Ss_D_Fire,80B2EEB0
+ovl_Effect_Ss_Bubble,80B2F3A0
+ovl_Effect_Ss_G_Ripple,80B2F820
+ovl_Effect_Ss_G_Splash,80B2FD80
+ovl_Effect_Ss_G_Magma,80B30230
+ovl_Effect_Ss_G_Fire,80B30490
+ovl_Effect_Ss_Lightning,80B30720
+ovl_Effect_Ss_Dt_Bubble,80B30DF0
+ovl_Effect_Ss_Hahen,80B31380
+ovl_Effect_Ss_Stick,80B319C0
+ovl_Effect_Ss_Sibuki,80B31D60
+ovl_Effect_Ss_Sibuki2,80B32430
+ovl_Effect_Ss_G_Magma2,80B32760
+ovl_Effect_Ss_Stone1,80B32C70
+ovl_Effect_Ss_HitMark,80B33000
+ovl_Effect_Ss_Fhg_Flash,80B33550
+ovl_Effect_Ss_K_Fire,80B344D0
+ovl_Effect_Ss_Solder_Srch_Ball,80B34900
+ovl_Effect_Ss_Kakera,80B34AB0
+ovl_Effect_Ss_Ice_Piece,80B35B40
+ovl_Effect_Ss_En_Ice,80B35F80
+ovl_Effect_Ss_Fire_Tail,80B36790
+ovl_Effect_Ss_En_Fire,80B36E90
+ovl_Effect_Ss_Extra,80B375D0
+ovl_Effect_Ss_Fcircle,80B37990
+ovl_Effect_Ss_Dead_Db,80B37E40
+ovl_Effect_Ss_Dead_Dd,80B38320
+ovl_Effect_Ss_Dead_Ds,80B388B0
+ovl_Effect_Ss_Dead_Sound,80B38D30
+ovl_Oceff_Storm,80B38E70
+ovl_En_Weiyer,80B3AA10
+ovl_Bg_Spot05_Soko,80B3C410
+ovl_Bg_Jya_1flift,80B3C730
+ovl_Bg_Jya_Haheniron,80B3CDC0
+ovl_Bg_Spot12_Gate,80B3D5B0
+ovl_Bg_Spot12_Saku,80B3D9C0
+ovl_En_Hintnuts,80B3DE80
+ovl_En_Nutsball,80B3F8B0
+ovl_Bg_Spot00_Break,80B3FED0
+ovl_En_Shopnuts,80B40070
+ovl_En_It,80B40F80
+ovl_En_GeldB,80B41110
+ovl_Oceff_Wipe2,80B464C0
+ovl_Oceff_Wipe3,80B47C30
+ovl_En_Niw_Girl,80B49380
+ovl_En_Dog,80B49E50
+ovl_En_Si,80B4B000
+ovl_Bg_Spot01_Objects2,80B4B500
+ovl_Obj_Comb,80B4B9C0
+ovl_Bg_Spot11_Bakudankabe,80B4C220
+ovl_Obj_Kibako2,80B4C860
+ovl_En_Dnt_Demo,80B4CF20
+ovl_En_Dnt_Jiji,80B4DC40
+ovl_En_Dnt_Nomal,80B4F150
+ovl_En_Guest,80B51F50
+ovl_Bg_Bom_Guard,80B528F0
+ovl_En_Hs2,80B52B10
+ovl_Demo_Kekkai,80B530F0
+ovl_Bg_Spot08_Bakudankabe,80B543D0
+ovl_Bg_Spot17_Bakudankabe,80B54A70
+ovl_Obj_Mure3,80B55150
+ovl_En_Tg,80B55920
+ovl_En_Mu,80B55FF0
+ovl_En_Go2,80B56910
+ovl_En_Wf,80B5C930
+ovl_En_Skb,80B60C40
+ovl_Demo_Gj,80B62530
+ovl_Demo_Geff,80B661E0
+ovl_Bg_Gnd_Firemeiro,80B66A00
+ovl_Bg_Gnd_Darkmeiro,80B66F40
+ovl_Bg_Gnd_Soulmeiro,80B67700
+ovl_Bg_Gnd_Nisekabe,80B67F60
+ovl_Bg_Gnd_Iceblock,80B680D0
+ovl_Bg_Ydan_Sp,80B691D0
+ovl_En_Gb,80B6A940
+ovl_En_Gs,80B6C070
+ovl_Bg_Mizu_Bwall,80B6DF10
+ovl_Bg_Mizu_Shutter,80B6F3E0
+ovl_En_Daiku_Kakariko,80B6FBE0
+ovl_Bg_Bowl_Wall,80B70FA0
+ovl_En_Wall_Tubo,80B71920
+ovl_En_Po_Desert,80B71E10
+ovl_En_Crow,80B72BD0
+ovl_Door_Killer,80B74270
+ovl_Bg_Spot11_Oasis,80B757E0
+ovl_Bg_Spot18_Futa,80B75F10
+ovl_Bg_Spot18_Shutter,80B760B0
+ovl_En_Ma3,80B76600
+ovl_En_Cow,80B77570
+ovl_Bg_Ice_Turara,80B789D0
+ovl_Bg_Ice_Shutter,80B79200
+ovl_En_Kakasi2,80B79670
+ovl_En_Kakasi3,80B79D90
+ovl_Oceff_Wipe4,80B7AE70
+ovl_En_Eg,80B7BE50
+ovl_Bg_Menkuri_Nisekabe,80B7C000
+ovl_En_Zo,80B7C150
+ovl_Effect_Ss_Ice_Smoke,80B7E700
+ovl_Obj_Makekinsuta,80B7EBC0
+ovl_En_Ge3,80B7ED10
+ovl_Obj_Timeblock,80B7F860
+ovl_Obj_Hamishi,80B804A0
+ovl_En_Zl4,80B80CF0
+ovl_En_Mm2,80B85720
+ovl_Bg_Jya_Block,80B864E0
+ovl_Obj_Warp2block,80B86750
+gameplay_keep,
+gameplay_field_keep,
+gameplay_dangeon_keep,
+gameplay_object_exchange_static,
+object_link_boy,
+object_link_child,
+object_box,
+object_human,
+object_okuta,
+object_poh,
+object_wallmaster,
+object_dy_obj,
+object_firefly,
+object_dodongo,
+object_fire,
+object_niw,
+object_tite,
+object_reeba,
+object_peehat,
+object_kingdodongo,
+object_horse,
+object_zf,
+object_goma,
+object_zl1,
+object_gol,
+object_bubble,
+object_dodojr,
+object_torch2,
+object_bl,
+object_tp,
+object_oA1,
+object_st,
+object_bw,
+object_ei,
+object_horse_normal,
+object_oB1,
+object_o_anime,
+object_spot04_objects,
+object_ddan_objects,
+object_hidan_objects,
+object_horse_ganon,
+object_oA2,
+object_spot00_objects,
+object_mb,
+object_bombf,
+object_sk2,
+object_oE1,
+object_oE_anime,
+object_oE2,
+object_ydan_objects,
+object_gnd,
+object_am,
+object_dekubaba,
+object_oA3,
+object_oA4,
+object_oA5,
+object_oA6,
+object_oA7,
+object_jj,
+object_oA8,
+object_oA9,
+object_oB2,
+object_oB3,
+object_oB4,
+object_horse_zelda,
+object_opening_demo1,
+object_warp1,
+object_b_heart,
+object_dekunuts,
+object_oE3,
+object_oE4,
+object_menkuri_objects,
+object_oE5,
+object_oE6,
+object_oE7,
+object_oE8,
+object_oE9,
+object_oE10,
+object_oE11,
+object_oE12,
+object_vali,
+object_oA10,
+object_oA11,
+object_mizu_objects,
+object_fhg,
+object_ossan,
+object_mori_hineri1,
+object_Bb,
+object_toki_objects,
+object_yukabyun,
+object_zl2,
+object_mjin,
+object_mjin_flash,
+object_mjin_dark,
+object_mjin_flame,
+object_mjin_ice,
+object_mjin_soul,
+object_mjin_wind,
+object_mjin_oka,
+object_haka_objects,
+object_spot06_objects,
+object_ice_objects,
+object_relay_objects,
+object_mori_hineri1a,
+object_mori_hineri2,
+object_mori_hineri2a,
+object_mori_objects,
+object_mori_tex,
+object_spot08_obj,
+object_warp2,
+object_hata,
+object_bird,
+object_wood02,
+object_lightbox,
+object_pu_box,
+object_trap,
+object_vase,
+object_im,
+object_ta,
+object_tk,
+object_xc,
+object_vm,
+object_bv,
+object_hakach_objects,
+object_efc_crystal_light,
+object_efc_fire_ball,
+object_efc_flash,
+object_efc_lgt_shower,
+object_efc_star_field,
+object_god_lgt,
+object_light_ring,
+object_triforce_spot,
+object_medal,
+object_bdan_objects,
+object_sd,
+object_rd,
+object_po_sisters,
+object_heavy_object,
+object_gndd,
+object_fd,
+object_du,
+object_fw,
+object_horse_link_child,
+object_spot02_objects,
+object_haka,
+object_ru1,
+object_syokudai,
+object_fd2,
+object_dh,
+object_rl,
+object_efc_tw,
+object_demo_tre_lgt,
+object_gi_key,
+object_mir_ray,
+object_brob,
+object_gi_jewel,
+object_spot09_obj,
+object_spot18_obj,
+object_bdoor,
+object_spot17_obj,
+object_shop_dungen,
+object_nb,
+object_mo,
+object_sb,
+object_gi_melody,
+object_gi_heart,
+object_gi_compass,
+object_gi_bosskey,
+object_gi_medal,
+object_gi_nuts,
+object_sa,
+object_gi_hearts,
+object_gi_arrowcase,
+object_gi_bombpouch,
+object_in,
+object_tr,
+object_spot16_obj,
+object_oE1s,
+object_oE4s,
+object_os_anime,
+object_gi_bottle,
+object_gi_stick,
+object_gi_map,
+object_oF1d_map,
+object_ru2,
+object_gi_shield_1,
+object_dekujr,
+object_gi_magicpot,
+object_gi_bomb_1,
+object_oF1s,
+object_ma2,
+object_gi_purse,
+object_hni,
+object_tw,
+object_rr,
+object_bxa,
+object_anubice,
+object_gi_gerudo,
+object_gi_arrow,
+object_gi_bomb_2,
+object_gi_egg,
+object_gi_scale,
+object_gi_shield_2,
+object_gi_hookshot,
+object_gi_ocarina,
+object_gi_milk,
+object_ma1,
+object_ganon,
+object_sst,
+object_ny,
+object_fr,
+object_gi_pachinko,
+object_gi_boomerang,
+object_gi_bow,
+object_gi_glasses,
+object_gi_liquid,
+object_ani,
+object_demo_6k,
+object_gi_shield_3,
+object_gi_letter,
+object_spot15_obj,
+object_jya_obj,
+object_gi_clothes,
+object_gi_bean,
+object_gi_fish,
+object_gi_saw,
+object_gi_hammer,
+object_gi_grass,
+object_gi_longsword,
+object_spot01_objects,
+object_md,
+object_km1,
+object_kw1,
+object_zo,
+object_kz,
+object_umajump,
+object_masterkokiri,
+object_masterkokirihead,
+object_mastergolon,
+object_masterzoora,
+object_aob,
+object_ik,
+object_ahg,
+object_cne,
+object_gi_niwatori,
+object_skj,
+object_gi_bottle_letter,
+object_bji,
+object_bba,
+object_gi_ocarina_0,
+object_ds,
+object_ane,
+object_boj,
+object_spot03_object,
+object_spot07_object,
+object_fz,
+object_bob,
+object_ge1,
+object_yabusame_point,
+object_gi_boots_2,
+object_gi_seed,
+object_gnd_magic,
+object_d_elevator,
+object_d_hsblock,
+object_d_lift,
+object_mamenoki,
+object_goroiwa,
+object_toryo,
+object_daiku,
+object_nwc,
+object_blkobj,
+object_gm,
+object_ms,
+object_hs,
+object_ingate,
+object_lightswitch,
+object_kusa,
+object_tsubo,
+object_gi_gloves,
+object_gi_coin,
+object_kanban,
+object_gjyo_objects,
+object_owl,
+object_mk,
+object_fu,
+object_gi_ki_tan_mask,
+object_gi_redead_mask,
+object_gi_skj_mask,
+object_gi_rabit_mask,
+object_gi_truth_mask,
+object_ganon_objects,
+object_siofuki,
+object_stream,
+object_mm,
+object_fa,
+object_os,
+object_gi_eye_lotion,
+object_gi_powder,
+object_gi_mushroom,
+object_gi_ticketstone,
+object_gi_brokensword,
+object_js,
+object_cs,
+object_gi_prescription,
+object_gi_bracelet,
+object_gi_soldout,
+object_gi_frog,
+object_mag,
+object_door_gerudo,
+object_gt,
+object_efc_erupc,
+object_zl2_anime1,
+object_zl2_anime2,
+object_gi_golonmask,
+object_gi_zoramask,
+object_gi_gerudomask,
+object_ganon2,
+object_ka,
+object_ts,
+object_zg,
+object_gi_hoverboots,
+object_gi_m_arrow,
+object_ds2,
+object_ec,
+object_fish,
+object_gi_sutaru,
+object_gi_goddess,
+object_ssh,
+object_bigokuta,
+object_bg,
+object_spot05_objects,
+object_spot12_obj,
+object_bombiwa,
+object_hintnuts,
+object_rs,
+object_spot00_break,
+object_gla,
+object_shopnuts,
+object_geldb,
+object_gr,
+object_dog,
+object_jya_iron,
+object_jya_door,
+object_spot01_objects2,
+object_spot11_obj,
+object_kibako2,
+object_dns,
+object_dnk,
+object_gi_fire,
+object_gi_insect,
+object_gi_butterfly,
+object_gi_ghost,
+object_gi_soul,
+object_bowl,
+object_po_field,
+object_demo_kekkai,
+object_efc_doughnut,
+object_gi_dekupouch,
+object_ganon_anime1,
+object_ganon_anime2,
+object_ganon_anime3,
+object_gi_rupy,
+object_spot01_matoya,
+object_spot01_matoyab,
+object_po_composer,
+object_mu,
+object_wf,
+object_skb,
+object_gj,
+object_geff,
+object_haka_door,
+object_gs,
+object_ps,
+object_bwall,
+object_crow,
+object_cow,
+object_cob,
+object_gi_sword_1,
+object_door_killer,
+object_ouke_haka,
+object_timeblock,
+object_zl4,
+g_pn_01,
+g_pn_02,
+g_pn_03,
+g_pn_04,
+g_pn_05,
+g_pn_06,
+g_pn_07,
+g_pn_08,
+g_pn_09,
+g_pn_10,
+g_pn_11,
+g_pn_12,
+g_pn_13,
+g_pn_14,
+g_pn_15,
+g_pn_16,
+g_pn_17,
+g_pn_18,
+g_pn_19,
+g_pn_20,
+g_pn_21,
+g_pn_22,
+g_pn_23,
+g_pn_24,
+g_pn_25,
+g_pn_26,
+g_pn_27,
+g_pn_28,
+g_pn_29,
+g_pn_30,
+g_pn_31,
+g_pn_32,
+g_pn_33,
+g_pn_34,
+g_pn_35,
+g_pn_36,
+g_pn_37,
+g_pn_38,
+g_pn_39,
+g_pn_40,
+g_pn_41,
+g_pn_42,
+g_pn_43,
+g_pn_44,
+g_pn_45,
+g_pn_46,
+g_pn_47,
+g_pn_48,
+g_pn_49,
+g_pn_50,
+g_pn_51,
+g_pn_52,
+g_pn_53,
+g_pn_54,
+g_pn_55,
+g_pn_56,
+g_pn_57,
+z_select_static,
+nintendo_rogo_static,
+title_static,
+parameter_static,
+vr_fine0_static,
+vr_fine0_pal_static,
+vr_fine1_static,
+vr_fine1_pal_static,
+vr_fine2_static,
+vr_fine2_pal_static,
+vr_fine3_static,
+vr_fine3_pal_static,
+vr_cloud0_static,
+vr_cloud0_pal_static,
+vr_cloud1_static,
+vr_cloud1_pal_static,
+vr_cloud2_static,
+vr_cloud2_pal_static,
+vr_cloud3_static,
+vr_cloud3_pal_static,
+vr_holy0_static,
+vr_holy0_pal_static,
+vr_holy1_static,
+vr_holy1_pal_static,
+vr_MDVR_static,
+vr_MDVR_pal_static,
+vr_MNVR_static,
+vr_MNVR_pal_static,
+vr_RUVR_static,
+vr_RUVR_pal_static,
+vr_LHVR_static,
+vr_LHVR_pal_static,
+vr_KHVR_static,
+vr_KHVR_pal_static,
+vr_K3VR_static,
+vr_K3VR_pal_static,
+vr_K4VR_static,
+vr_K4VR_pal_static,
+vr_K5VR_static,
+vr_K5VR_pal_static,
+vr_SP1a_static,
+vr_SP1a_pal_static,
+vr_MLVR_static,
+vr_MLVR_pal_static,
+vr_KKRVR_static,
+vr_KKRVR_pal_static,
+vr_KR3VR_static,
+vr_KR3VR_pal_static,
+vr_IPVR_static,
+vr_IPVR_pal_static,
+vr_KSVR_static,
+vr_KSVR_pal_static,
+vr_GLVR_static,
+vr_GLVR_pal_static,
+vr_ZRVR_static,
+vr_ZRVR_pal_static,
+vr_DGVR_static,
+vr_DGVR_pal_static,
+vr_ALVR_static,
+vr_ALVR_pal_static,
+vr_NSVR_static,
+vr_NSVR_pal_static,
+vr_LBVR_static,
+vr_LBVR_pal_static,
+vr_TTVR_static,
+vr_TTVR_pal_static,
+vr_FCVR_static,
+vr_FCVR_pal_static,
+elf_message_field,
+elf_message_ydan,
+ddan_scene,
+ddan_room_0,
+ddan_room_1,
+ddan_room_2,
+ddan_room_3,
+ddan_room_4,
+ddan_room_5,
+ddan_room_6,
+ddan_room_7,
+ddan_room_8,
+ddan_room_9,
+ddan_room_10,
+ddan_room_11,
+ddan_room_12,
+ddan_room_13,
+ddan_room_14,
+ddan_room_15,
+ddan_room_16,
+spot00_scene,
+spot00_room_0,
+spot01_scene,
+spot01_room_0,
+spot02_scene,
+spot02_room_0,
+spot02_room_1,
+spot03_scene,
+spot03_room_0,
+spot03_room_1,
+spot04_scene,
+spot04_room_0,
+spot04_room_1,
+spot04_room_2,
+spot05_scene,
+spot05_room_0,
+spot06_scene,
+spot06_room_0,
+spot07_scene,
+spot07_room_0,
+spot07_room_1,
+spot08_scene,
+spot08_room_0,
+spot09_scene,
+spot09_room_0,
+spot10_scene,
+spot10_room_0,
+spot10_room_1,
+spot10_room_2,
+spot10_room_3,
+spot10_room_4,
+spot10_room_5,
+spot10_room_6,
+spot10_room_7,
+spot10_room_8,
+spot10_room_9,
+spot11_scene,
+spot11_room_0,
+spot12_scene,
+spot12_room_0,
+spot12_room_1,
+spot13_scene,
+spot13_room_0,
+spot13_room_1,
+spot15_scene,
+spot15_room_0,
+spot16_scene,
+spot16_room_0,
+spot17_scene,
+spot17_room_0,
+spot17_room_1,
+spot18_scene,
+spot18_room_0,
+spot18_room_1,
+spot18_room_2,
+spot18_room_3,
+market_day_scene,
+market_day_room_0,
+market_night_scene,
+market_night_room_0,
+HIDAN_scene,
+HIDAN_room_0,
+HIDAN_room_1,
+HIDAN_room_2,
+HIDAN_room_3,
+HIDAN_room_4,
+HIDAN_room_5,
+HIDAN_room_6,
+HIDAN_room_7,
+HIDAN_room_8,
+HIDAN_room_9,
+HIDAN_room_10,
+HIDAN_room_11,
+HIDAN_room_12,
+HIDAN_room_13,
+HIDAN_room_14,
+HIDAN_room_15,
+HIDAN_room_16,
+HIDAN_room_17,
+HIDAN_room_18,
+HIDAN_room_19,
+HIDAN_room_20,
+HIDAN_room_21,
+HIDAN_room_22,
+HIDAN_room_23,
+HIDAN_room_24,
+HIDAN_room_25,
+HIDAN_room_26,
+Bmori1_scene,
+Bmori1_room_0,
+Bmori1_room_1,
+Bmori1_room_2,
+Bmori1_room_3,
+Bmori1_room_4,
+Bmori1_room_5,
+Bmori1_room_6,
+Bmori1_room_7,
+Bmori1_room_8,
+Bmori1_room_9,
+Bmori1_room_10,
+Bmori1_room_11,
+Bmori1_room_12,
+Bmori1_room_13,
+Bmori1_room_14,
+Bmori1_room_15,
+Bmori1_room_16,
+Bmori1_room_17,
+Bmori1_room_18,
+Bmori1_room_19,
+Bmori1_room_20,
+Bmori1_room_21,
+Bmori1_room_22,
+ydan_scene,
+ydan_room_0,
+ydan_room_1,
+ydan_room_2,
+ydan_room_3,
+ydan_room_4,
+ydan_room_5,
+ydan_room_6,
+ydan_room_7,
+ydan_room_8,
+ydan_room_9,
+ydan_room_10,
+ydan_room_11,
+kenjyanoma_scene,
+kenjyanoma_room_0,
+tokinoma_scene,
+tokinoma_room_0,
+tokinoma_room_1,
+link_home_scene,
+link_home_room_0,
+kokiri_shop_scene,
+kokiri_shop_room_0,
+MIZUsin_scene,
+MIZUsin_room_0,
+MIZUsin_room_1,
+MIZUsin_room_2,
+MIZUsin_room_3,
+MIZUsin_room_4,
+MIZUsin_room_5,
+MIZUsin_room_6,
+MIZUsin_room_7,
+MIZUsin_room_8,
+MIZUsin_room_9,
+MIZUsin_room_10,
+MIZUsin_room_11,
+MIZUsin_room_12,
+MIZUsin_room_13,
+MIZUsin_room_14,
+MIZUsin_room_15,
+MIZUsin_room_16,
+MIZUsin_room_17,
+MIZUsin_room_18,
+MIZUsin_room_19,
+MIZUsin_room_20,
+MIZUsin_room_21,
+MIZUsin_room_22,
+kokiri_home_scene,
+kokiri_home_room_0,
+kakusiana_scene,
+kakusiana_room_0,
+kakusiana_room_1,
+kakusiana_room_2,
+kakusiana_room_3,
+kakusiana_room_4,
+kakusiana_room_5,
+kakusiana_room_6,
+kakusiana_room_7,
+kakusiana_room_8,
+kakusiana_room_9,
+kakusiana_room_10,
+kakusiana_room_11,
+kakusiana_room_12,
+kakusiana_room_13,
+entra_scene,
+entra_room_0,
+bdan_scene,
+bdan_room_0,
+bdan_room_1,
+bdan_room_2,
+bdan_room_3,
+bdan_room_4,
+bdan_room_5,
+bdan_room_6,
+bdan_room_7,
+bdan_room_8,
+bdan_room_9,
+bdan_room_10,
+bdan_room_11,
+bdan_room_12,
+bdan_room_13,
+bdan_room_14,
+bdan_room_15,
+HAKAdan_scene,
+HAKAdan_room_0,
+HAKAdan_room_1,
+HAKAdan_room_2,
+HAKAdan_room_3,
+HAKAdan_room_4,
+HAKAdan_room_5,
+HAKAdan_room_6,
+HAKAdan_room_7,
+HAKAdan_room_8,
+HAKAdan_room_9,
+HAKAdan_room_10,
+HAKAdan_room_11,
+HAKAdan_room_12,
+HAKAdan_room_13,
+HAKAdan_room_14,
+HAKAdan_room_15,
+HAKAdan_room_16,
+HAKAdan_room_17,
+HAKAdan_room_18,
+HAKAdan_room_19,
+HAKAdan_room_20,
+HAKAdan_room_21,
+HAKAdan_room_22,
+moribossroom_scene,
+moribossroom_room_0,
+moribossroom_room_1,
+syatekijyou_scene,
+syatekijyou_room_0,
+men_scene,
+men_room_0,
+men_room_1,
+men_room_2,
+men_room_3,
+men_room_4,
+men_room_5,
+men_room_6,
+men_room_7,
+men_room_8,
+men_room_9,
+men_room_10,
+shop1_scene,
+shop1_room_0,
+hairal_niwa_scene,
+hairal_niwa_room_0,
+ganon_tou_scene,
+ganon_tou_room_0,
+market_alley_scene,
+market_alley_room_0,
+spot20_scene,
+spot20_room_0,
+market_ruins_scene,
+market_ruins_room_0,
+entra_n_scene,
+entra_n_room_0,
+enrui_scene,
+enrui_room_0,
+market_alley_n_scene,
+market_alley_n_room_0,
+hiral_demo_scene,
+hiral_demo_room_0,
+kokiri_home3_scene,
+kokiri_home3_room_0,
+jyasinzou_scene,
+jyasinzou_room_0,
+jyasinzou_room_1,
+jyasinzou_room_2,
+jyasinzou_room_3,
+jyasinzou_room_4,
+jyasinzou_room_5,
+jyasinzou_room_6,
+jyasinzou_room_7,
+jyasinzou_room_8,
+jyasinzou_room_9,
+jyasinzou_room_10,
+jyasinzou_room_11,
+jyasinzou_room_12,
+jyasinzou_room_13,
+jyasinzou_room_14,
+jyasinzou_room_15,
+jyasinzou_room_16,
+jyasinzou_room_17,
+jyasinzou_room_18,
+jyasinzou_room_19,
+jyasinzou_room_20,
+jyasinzou_room_21,
+jyasinzou_room_22,
+jyasinzou_room_23,
+jyasinzou_room_24,
+jyasinzou_room_25,
+jyasinzou_room_26,
+jyasinzou_room_27,
+jyasinzou_room_28,
+ice_doukutu_scene,
+ice_doukutu_room_0,
+ice_doukutu_room_1,
+ice_doukutu_room_2,
+ice_doukutu_room_3,
+ice_doukutu_room_4,
+ice_doukutu_room_5,
+ice_doukutu_room_6,
+ice_doukutu_room_7,
+ice_doukutu_room_8,
+ice_doukutu_room_9,
+ice_doukutu_room_10,
+ice_doukutu_room_11,
+malon_stable_scene,
+malon_stable_room_0,
+kakariko_scene,
+kakariko_room_0,
+bdan_boss_scene,
+bdan_boss_room_0,
+bdan_boss_room_1,
+FIRE_bs_scene,
+FIRE_bs_room_0,
+FIRE_bs_room_1,
+hut_scene,
+hut_room_0,
+daiyousei_izumi_scene,
+daiyousei_izumi_room_0,
+hakaana_scene,
+hakaana_room_0,
+yousei_izumi_tate_scene,
+yousei_izumi_tate_room_0,
+yousei_izumi_yoko_scene,
+yousei_izumi_yoko_room_0,
+golon_scene,
+golon_room_0,
+zoora_scene,
+zoora_room_0,
+drag_scene,
+drag_room_0,
+alley_shop_scene,
+alley_shop_room_0,
+night_shop_scene,
+night_shop_room_0,
+impa_scene,
+impa_room_0,
+labo_scene,
+labo_room_0,
+tent_scene,
+tent_room_0,
+nakaniwa_scene,
+nakaniwa_room_0,
+ddan_boss_scene,
+ddan_boss_room_0,
+ddan_boss_room_1,
+ydan_boss_scene,
+ydan_boss_room_0,
+ydan_boss_room_1,
+HAKAdan_bs_scene,
+HAKAdan_bs_room_0,
+HAKAdan_bs_room_1,
+MIZUsin_bs_scene,
+MIZUsin_bs_room_0,
+MIZUsin_bs_room_1,
+ganon_scene,
+ganon_room_0,
+ganon_room_1,
+ganon_room_2,
+ganon_room_3,
+ganon_room_4,
+ganon_room_5,
+ganon_room_6,
+ganon_room_7,
+ganon_room_8,
+ganon_room_9,
+ganon_boss_scene,
+ganon_boss_room_0,
+jyasinboss_scene,
+jyasinboss_room_0,
+jyasinboss_room_1,
+jyasinboss_room_2,
+jyasinboss_room_3,
+kokiri_home4_scene,
+kokiri_home4_room_0,
+kokiri_home5_scene,
+kokiri_home5_room_0,
+ganon_final_scene,
+ganon_final_room_0,
+kakariko3_scene,
+kakariko3_room_0,
+hakasitarelay_scene,
+hakasitarelay_room_0,
+hakasitarelay_room_1,
+hakasitarelay_room_2,
+hakasitarelay_room_3,
+hakasitarelay_room_4,
+hakasitarelay_room_5,
+hakasitarelay_room_6,
+shrine_scene,
+shrine_room_0,
+turibori_scene,
+turibori_room_0,
+shrine_n_scene,
+shrine_n_room_0,
+shrine_r_scene,
+shrine_r_room_0,
+ganontika_scene,
+ganontika_room_0,
+ganontika_room_1,
+ganontika_room_2,
+ganontika_room_3,
+ganontika_room_4,
+ganontika_room_5,
+ganontika_room_6,
+ganontika_room_7,
+ganontika_room_8,
+ganontika_room_9,
+ganontika_room_10,
+ganontika_room_11,
+ganontika_room_12,
+ganontika_room_13,
+ganontika_room_14,
+ganontika_room_15,
+ganontika_room_16,
+ganontika_room_17,
+ganontika_room_18,
+ganontika_room_19,
+hakaana2_scene,
+hakaana2_room_0,
+gerudoway_scene,
+gerudoway_room_0,
+gerudoway_room_1,
+gerudoway_room_2,
+gerudoway_room_3,
+gerudoway_room_4,
+gerudoway_room_5,
+HAKAdanCH_scene,
+HAKAdanCH_room_0,
+HAKAdanCH_room_1,
+HAKAdanCH_room_2,
+HAKAdanCH_room_3,
+HAKAdanCH_room_4,
+HAKAdanCH_room_5,
+HAKAdanCH_room_6,
+hairal_niwa_n_scene,
+hairal_niwa_n_room_0,
+bowling_scene,
+bowling_room_0,
+hakaana_ouke_scene,
+hakaana_ouke_room_0,
+hakaana_ouke_room_1,
+hakaana_ouke_room_2,
+hylia_labo_scene,
+hylia_labo_room_0,
+souko_scene,
+souko_room_0,
+souko_room_1,
+souko_room_2,
+miharigoya_scene,
+miharigoya_room_0,
+mahouya_scene,
+mahouya_room_0,
+takaraya_scene,
+takaraya_room_0,
+takaraya_room_1,
+takaraya_room_2,
+takaraya_room_3,
+takaraya_room_4,
+takaraya_room_5,
+takaraya_room_6,
+ganon_sonogo_scene,
+ganon_sonogo_room_0,
+ganon_sonogo_room_1,
+ganon_sonogo_room_2,
+ganon_sonogo_room_3,
+ganon_sonogo_room_4,
+ganon_demo_scene,
+ganon_demo_room_0,
+face_shop_scene,
+face_shop_room_0,
+kinsuta_scene,
+kinsuta_room_0,
+ganontikasonogo_scene,
+ganontikasonogo_room_0,
+ganontikasonogo_room_1,
+bump_texture_static,
+anime_model_1_static,
+anime_model_2_static,
+anime_model_3_static,
+anime_model_4_static,
+anime_model_5_static,
+anime_model_6_static,
+anime_texture_1_static,
+anime_texture_2_static,
+anime_texture_3_static,
+anime_texture_4_static,
+anime_texture_5_static,
+anime_texture_6_static,
+softsprite_matrix_static,
diff --git a/baseroms/ntsc-1.1/checksum-JP-compressed.md5 b/baseroms/ntsc-1.1/checksum-JP-compressed.md5
new file mode 100644
index 0000000000..f02c9c055f
--- /dev/null
+++ b/baseroms/ntsc-1.1/checksum-JP-compressed.md5
@@ -0,0 +1 @@
+1bf5f42b98c3e97948f01155f12e2d88 build/ntsc-1.1/oot-ntsc-1.1-compressed.z64
diff --git a/baseroms/ntsc-1.1/checksum-JP.md5 b/baseroms/ntsc-1.1/checksum-JP.md5
new file mode 100644
index 0000000000..771035379f
--- /dev/null
+++ b/baseroms/ntsc-1.1/checksum-JP.md5
@@ -0,0 +1 @@
+8b07c719217cb89334edf481a52ef392 build/ntsc-1.1/oot-ntsc-1.1.z64
diff --git a/baseroms/ntsc-1.1/checksum-US-compressed.md5 b/baseroms/ntsc-1.1/checksum-US-compressed.md5
new file mode 100644
index 0000000000..4d13bee152
--- /dev/null
+++ b/baseroms/ntsc-1.1/checksum-US-compressed.md5
@@ -0,0 +1 @@
+721fdcc6f5f34be55c43a807f2a16af4 build/ntsc-1.1/oot-ntsc-1.1-compressed.z64
diff --git a/baseroms/ntsc-1.1/checksum-US.md5 b/baseroms/ntsc-1.1/checksum-US.md5
new file mode 100644
index 0000000000..df5611fe03
--- /dev/null
+++ b/baseroms/ntsc-1.1/checksum-US.md5
@@ -0,0 +1 @@
+a11496a4abcd9f173f2f2a342a6370d2 build/ntsc-1.1/oot-ntsc-1.1.z64
diff --git a/baseroms/ntsc-1.1/config.yml b/baseroms/ntsc-1.1/config.yml
new file mode 100644
index 0000000000..6726cc59f6
--- /dev/null
+++ b/baseroms/ntsc-1.1/config.yml
@@ -0,0 +1,1219 @@
+checksums:
+ - checksum-JP
+ - checksum-US
+dmadata_start: 0x7430
+text_lang_pal: false
+incbins:
+ - name: ipl3
+ segment: makerom
+ vram: 0x80000040
+ size: 0xFC0
+ - name: rspbootText
+ segment: boot
+ vram: 0x800060B0
+ size: 0x160
+ - name: aspMainText
+ segment: code
+ vram: 0x800E3180
+ size: 0xFB0
+ - name: gspF3DZEX2_NoN_PosLight_fifoText
+ segment: code
+ vram: 0x800E4130
+ size: 0x1390
+ - name: gspS2DEX2d_fifoText
+ segment: code
+ vram: 0x800E54C0
+ size: 0x18C0
+ - name: njpgdspMainText
+ segment: code
+ vram: 0x800E6D80
+ size: 0xAF0
+ - name: aspMainData
+ segment: code
+ vram: 0x801144A0
+ size: 0x2E0
+ - name: gspF3DZEX2_NoN_PosLight_fifoData
+ segment: code
+ vram: 0x80114780
+ size: 0x420
+ - name: gspS2DEX2d_fifoData
+ segment: code
+ vram: 0x80114BA0
+ size: 0x390
+ - name: njpgdspMainData
+ segment: code
+ vram: 0x80114F30
+ size: 0x60
+variables:
+ gMtxClear: 0x800FEF70
+ sJpnMessageEntryTable: 0x8010AB0C
+ sNesMessageEntryTable: 0x8010EC4C
+ sStaffMessageEntryTable: 0x80112E6C
+ gSoundFontTable: 0x80113900
+ gSequenceFontTable: 0x80113B70
+ gSequenceTable: 0x80113D30
+ gSampleBankTable: 0x80114420
+ sShadowTex: 0x80AE0C80
+assets:
+- name: code/fbdemo_circle
+ xml_path: assets/xml/code/fbdemo_circle.xml
+ start_offset: 0xEC268
+ end_offset: 0xED488
+- name: code/fbdemo_triforce
+ xml_path: assets/xml/code/fbdemo_triforce.xml
+ start_offset: 0xEB6F0
+ end_offset: 0xEB7C0
+- name: code/fbdemo_wipe1
+ xml_path: assets/xml/code/fbdemo_wipe1.xml
+ start_offset: 0xEB7C0
+ end_offset: 0xEC150
+- name: n64dd/error_textures
+ xml_path: assets/xml/n64dd/error_textures.xml
+ start_offset: 0xC140
+ end_offset: 0x11D40
+- name: misc/link_animetion
+ xml_path: assets/xml/misc/link_animetion.xml
+- name: misc/z_select_static
+ xml_path: assets/xml/misc/z_select_static.xml
+- name: objects/gameplay_dangeon_keep
+ xml_path: assets/xml/objects/gameplay_dangeon_keep.xml
+- name: objects/gameplay_field_keep
+ xml_path: assets/xml/objects/gameplay_field_keep.xml
+- name: objects/gameplay_keep
+ xml_path: assets/xml/objects/gameplay_keep.xml
+- name: objects/object_ahg
+ xml_path: assets/xml/objects/object_ahg.xml
+- name: objects/object_am
+ xml_path: assets/xml/objects/object_am.xml
+- name: objects/object_ane
+ xml_path: assets/xml/objects/object_ane.xml
+- name: objects/object_ani
+ xml_path: assets/xml/objects/object_ani.xml
+- name: objects/object_anubice
+ xml_path: assets/xml/objects/object_anubice.xml
+- name: objects/object_aob
+ xml_path: assets/xml/objects/object_aob.xml
+- name: objects/object_b_heart
+ xml_path: assets/xml/objects/object_b_heart.xml
+- name: objects/object_Bb
+ xml_path: assets/xml/objects/object_Bb.xml
+- name: objects/object_bba
+ xml_path: assets/xml/objects/object_bba.xml
+- name: objects/object_bdan_objects
+ xml_path: assets/xml/objects/object_bdan_objects.xml
+- name: objects/object_bdoor
+ xml_path: assets/xml/objects/object_bdoor.xml
+- name: objects/object_bg
+ xml_path: assets/xml/objects/object_bg.xml
+- name: objects/object_bigokuta
+ xml_path: assets/xml/objects/object_bigokuta.xml
+- name: objects/object_bird
+ xml_path: assets/xml/objects/object_bird.xml
+- name: objects/object_bji
+ xml_path: assets/xml/objects/object_bji.xml
+- name: objects/object_bl
+ xml_path: assets/xml/objects/object_bl.xml
+- name: objects/object_blkobj
+ xml_path: assets/xml/objects/object_blkobj.xml
+- name: objects/object_bob
+ xml_path: assets/xml/objects/object_bob.xml
+- name: objects/object_boj
+ xml_path: assets/xml/objects/object_boj.xml
+- name: objects/object_bombf
+ xml_path: assets/xml/objects/object_bombf.xml
+- name: objects/object_bombiwa
+ xml_path: assets/xml/objects/object_bombiwa.xml
+- name: objects/object_bowl
+ xml_path: assets/xml/objects/object_bowl.xml
+- name: objects/object_box
+ xml_path: assets/xml/objects/object_box.xml
+- name: objects/object_brob
+ xml_path: assets/xml/objects/object_brob.xml
+- name: objects/object_bubble
+ xml_path: assets/xml/objects/object_bubble.xml
+- name: objects/object_bv
+ xml_path: assets/xml/objects/object_bv.xml
+- name: objects/object_bw
+ xml_path: assets/xml/objects/object_bw.xml
+- name: objects/object_bwall
+ xml_path: assets/xml/objects/object_bwall.xml
+- name: objects/object_bxa
+ xml_path: assets/xml/objects/object_bxa.xml
+- name: objects/object_cne
+ xml_path: assets/xml/objects/object_cne.xml
+- name: objects/object_cob
+ xml_path: assets/xml/objects/object_cob.xml
+- name: objects/object_cow
+ xml_path: assets/xml/objects/object_cow.xml
+- name: objects/object_crow
+ xml_path: assets/xml/objects/object_crow.xml
+- name: objects/object_cs
+ xml_path: assets/xml/objects/object_cs.xml
+- name: objects/object_d_elevator
+ xml_path: assets/xml/objects/object_d_elevator.xml
+- name: objects/object_d_hsblock
+ xml_path: assets/xml/objects/object_d_hsblock.xml
+- name: objects/object_d_lift
+ xml_path: assets/xml/objects/object_d_lift.xml
+- name: objects/object_daiku
+ xml_path: assets/xml/objects/object_daiku.xml
+- name: objects/object_ddan_objects
+ xml_path: assets/xml/objects/object_ddan_objects.xml
+- name: objects/object_dekubaba
+ xml_path: assets/xml/objects/object_dekubaba.xml
+- name: objects/object_dekujr
+ xml_path: assets/xml/objects/object_dekujr.xml
+- name: objects/object_dekunuts
+ xml_path: assets/xml/objects/object_dekunuts.xml
+- name: objects/object_demo_6k
+ xml_path: assets/xml/objects/object_demo_6k.xml
+- name: objects/object_demo_kekkai
+ xml_path: assets/xml/objects/object_demo_kekkai.xml
+- name: objects/object_demo_tre_lgt
+ xml_path: assets/xml/objects/object_demo_tre_lgt.xml
+- name: objects/object_dh
+ xml_path: assets/xml/objects/object_dh.xml
+- name: objects/object_dnk
+ xml_path: assets/xml/objects/object_dnk.xml
+- name: objects/object_dns
+ xml_path: assets/xml/objects/object_dns.xml
+- name: objects/object_dodojr
+ xml_path: assets/xml/objects/object_dodojr.xml
+- name: objects/object_dodongo
+ xml_path: assets/xml/objects/object_dodongo.xml
+- name: objects/object_dog
+ xml_path: assets/xml/objects/object_dog.xml
+- name: objects/object_door_gerudo
+ xml_path: assets/xml/objects/object_door_gerudo.xml
+- name: objects/object_door_killer
+ xml_path: assets/xml/objects/object_door_killer.xml
+- name: objects/object_ds
+ xml_path: assets/xml/objects/object_ds.xml
+- name: objects/object_ds2
+ xml_path: assets/xml/objects/object_ds2.xml
+- name: objects/object_du
+ xml_path: assets/xml/objects/object_du.xml
+- name: objects/object_dy_obj
+ xml_path: assets/xml/objects/object_dy_obj.xml
+- name: objects/object_ec
+ xml_path: assets/xml/objects/object_ec.xml
+- name: objects/object_efc_crystal_light
+ xml_path: assets/xml/objects/object_efc_crystal_light.xml
+- name: objects/object_efc_doughnut
+ xml_path: assets/xml/objects/object_efc_doughnut.xml
+- name: objects/object_efc_erupc
+ xml_path: assets/xml/objects/object_efc_erupc.xml
+- name: objects/object_efc_fire_ball
+ xml_path: assets/xml/objects/object_efc_fire_ball.xml
+- name: objects/object_efc_flash
+ xml_path: assets/xml/objects/object_efc_flash.xml
+- name: objects/object_efc_lgt_shower
+ xml_path: assets/xml/objects/object_efc_lgt_shower.xml
+- name: objects/object_efc_star_field
+ xml_path: assets/xml/objects/object_efc_star_field.xml
+- name: objects/object_efc_tw
+ xml_path: assets/xml/objects/object_efc_tw.xml
+- name: objects/object_ei
+ xml_path: assets/xml/objects/object_ei.xml
+- name: objects/object_fa
+ xml_path: assets/xml/objects/object_fa.xml
+- name: objects/object_fd
+ xml_path: assets/xml/objects/object_fd.xml
+- name: objects/object_fd2
+ xml_path: assets/xml/objects/object_fd2.xml
+- name: objects/object_fhg
+ xml_path: assets/xml/objects/object_fhg.xml
+- name: objects/object_fire
+ xml_path: assets/xml/objects/object_fire.xml
+- name: objects/object_firefly
+ xml_path: assets/xml/objects/object_firefly.xml
+- name: objects/object_fish
+ xml_path: assets/xml/objects/object_fish.xml
+- name: objects/object_fr
+ xml_path: assets/xml/objects/object_fr.xml
+- name: objects/object_fu
+ xml_path: assets/xml/objects/object_fu.xml
+- name: objects/object_fw
+ xml_path: assets/xml/objects/object_fw.xml
+- name: objects/object_fz
+ xml_path: assets/xml/objects/object_fz.xml
+- name: objects/object_ganon
+ xml_path: assets/xml/objects/object_ganon.xml
+- name: objects/object_ganon2
+ xml_path: assets/xml/objects/object_ganon2.xml
+- name: objects/object_ganon_anime1
+ xml_path: assets/xml/objects/object_ganon_anime1.xml
+- name: objects/object_ganon_anime2
+ xml_path: assets/xml/objects/object_ganon_anime2.xml
+- name: objects/object_ganon_anime3
+ xml_path: assets/xml/objects/object_ganon_anime3.xml
+- name: objects/object_ganon_objects
+ xml_path: assets/xml/objects/object_ganon_objects.xml
+- name: objects/object_ge1
+ xml_path: assets/xml/objects/object_ge1.xml
+- name: objects/object_geff
+ xml_path: assets/xml/objects/object_geff.xml
+- name: objects/object_geldb
+ xml_path: assets/xml/objects/object_geldb.xml
+- name: objects/object_gi_arrow
+ xml_path: assets/xml/objects/object_gi_arrow.xml
+- name: objects/object_gi_arrowcase
+ xml_path: assets/xml/objects/object_gi_arrowcase.xml
+- name: objects/object_gi_bean
+ xml_path: assets/xml/objects/object_gi_bean.xml
+- name: objects/object_gi_bomb_1
+ xml_path: assets/xml/objects/object_gi_bomb_1.xml
+- name: objects/object_gi_bomb_2
+ xml_path: assets/xml/objects/object_gi_bomb_2.xml
+- name: objects/object_gi_bombpouch
+ xml_path: assets/xml/objects/object_gi_bombpouch.xml
+- name: objects/object_gi_boomerang
+ xml_path: assets/xml/objects/object_gi_boomerang.xml
+- name: objects/object_gi_boots_2
+ xml_path: assets/xml/objects/object_gi_boots_2.xml
+- name: objects/object_gi_bosskey
+ xml_path: assets/xml/objects/object_gi_bosskey.xml
+- name: objects/object_gi_bottle
+ xml_path: assets/xml/objects/object_gi_bottle.xml
+- name: objects/object_gi_bottle_letter
+ xml_path: assets/xml/objects/object_gi_bottle_letter.xml
+- name: objects/object_gi_bow
+ xml_path: assets/xml/objects/object_gi_bow.xml
+- name: objects/object_gi_bracelet
+ xml_path: assets/xml/objects/object_gi_bracelet.xml
+- name: objects/object_gi_brokensword
+ xml_path: assets/xml/objects/object_gi_brokensword.xml
+- name: objects/object_gi_butterfly
+ xml_path: assets/xml/objects/object_gi_butterfly.xml
+- name: objects/object_gi_clothes
+ xml_path: assets/xml/objects/object_gi_clothes.xml
+- name: objects/object_gi_coin
+ xml_path: assets/xml/objects/object_gi_coin.xml
+- name: objects/object_gi_compass
+ xml_path: assets/xml/objects/object_gi_compass.xml
+- name: objects/object_gi_dekupouch
+ xml_path: assets/xml/objects/object_gi_dekupouch.xml
+- name: objects/object_gi_egg
+ xml_path: assets/xml/objects/object_gi_egg.xml
+- name: objects/object_gi_eye_lotion
+ xml_path: assets/xml/objects/object_gi_eye_lotion.xml
+- name: objects/object_gi_fire
+ xml_path: assets/xml/objects/object_gi_fire.xml
+- name: objects/object_gi_fish
+ xml_path: assets/xml/objects/object_gi_fish.xml
+- name: objects/object_gi_frog
+ xml_path: assets/xml/objects/object_gi_frog.xml
+- name: objects/object_gi_gerudo
+ xml_path: assets/xml/objects/object_gi_gerudo.xml
+- name: objects/object_gi_gerudomask
+ xml_path: assets/xml/objects/object_gi_gerudomask.xml
+- name: objects/object_gi_ghost
+ xml_path: assets/xml/objects/object_gi_ghost.xml
+- name: objects/object_gi_glasses
+ xml_path: assets/xml/objects/object_gi_glasses.xml
+- name: objects/object_gi_gloves
+ xml_path: assets/xml/objects/object_gi_gloves.xml
+- name: objects/object_gi_goddess
+ xml_path: assets/xml/objects/object_gi_goddess.xml
+- name: objects/object_gi_golonmask
+ xml_path: assets/xml/objects/object_gi_golonmask.xml
+- name: objects/object_gi_grass
+ xml_path: assets/xml/objects/object_gi_grass.xml
+- name: objects/object_gi_hammer
+ xml_path: assets/xml/objects/object_gi_hammer.xml
+- name: objects/object_gi_heart
+ xml_path: assets/xml/objects/object_gi_heart.xml
+- name: objects/object_gi_hearts
+ xml_path: assets/xml/objects/object_gi_hearts.xml
+- name: objects/object_gi_hookshot
+ xml_path: assets/xml/objects/object_gi_hookshot.xml
+- name: objects/object_gi_hoverboots
+ xml_path: assets/xml/objects/object_gi_hoverboots.xml
+- name: objects/object_gi_insect
+ xml_path: assets/xml/objects/object_gi_insect.xml
+- name: objects/object_gi_jewel
+ xml_path: assets/xml/objects/object_gi_jewel.xml
+- name: objects/object_gi_key
+ xml_path: assets/xml/objects/object_gi_key.xml
+- name: objects/object_gi_ki_tan_mask
+ xml_path: assets/xml/objects/object_gi_ki_tan_mask.xml
+- name: objects/object_gi_letter
+ xml_path: assets/xml/objects/object_gi_letter.xml
+- name: objects/object_gi_liquid
+ xml_path: assets/xml/objects/object_gi_liquid.xml
+- name: objects/object_gi_longsword
+ xml_path: assets/xml/objects/object_gi_longsword.xml
+- name: objects/object_gi_m_arrow
+ xml_path: assets/xml/objects/object_gi_m_arrow.xml
+- name: objects/object_gi_magicpot
+ xml_path: assets/xml/objects/object_gi_magicpot.xml
+- name: objects/object_gi_map
+ xml_path: assets/xml/objects/object_gi_map.xml
+- name: objects/object_gi_medal
+ xml_path: assets/xml/objects/object_gi_medal.xml
+- name: objects/object_gi_melody
+ xml_path: assets/xml/objects/object_gi_melody.xml
+- name: objects/object_gi_milk
+ xml_path: assets/xml/objects/object_gi_milk.xml
+- name: objects/object_gi_mushroom
+ xml_path: assets/xml/objects/object_gi_mushroom.xml
+- name: objects/object_gi_niwatori
+ xml_path: assets/xml/objects/object_gi_niwatori.xml
+- name: objects/object_gi_nuts
+ xml_path: assets/xml/objects/object_gi_nuts.xml
+- name: objects/object_gi_ocarina
+ xml_path: assets/xml/objects/object_gi_ocarina.xml
+- name: objects/object_gi_ocarina_0
+ xml_path: assets/xml/objects/object_gi_ocarina_0.xml
+- name: objects/object_gi_pachinko
+ xml_path: assets/xml/objects/object_gi_pachinko.xml
+- name: objects/object_gi_powder
+ xml_path: assets/xml/objects/object_gi_powder.xml
+- name: objects/object_gi_prescription
+ xml_path: assets/xml/objects/object_gi_prescription.xml
+- name: objects/object_gi_purse
+ xml_path: assets/xml/objects/object_gi_purse.xml
+- name: objects/object_gi_rabit_mask
+ xml_path: assets/xml/objects/object_gi_rabit_mask.xml
+- name: objects/object_gi_redead_mask
+ xml_path: assets/xml/objects/object_gi_redead_mask.xml
+- name: objects/object_gi_rupy
+ xml_path: assets/xml/objects/object_gi_rupy.xml
+- name: objects/object_gi_saw
+ xml_path: assets/xml/objects/object_gi_saw.xml
+- name: objects/object_gi_scale
+ xml_path: assets/xml/objects/object_gi_scale.xml
+- name: objects/object_gi_seed
+ xml_path: assets/xml/objects/object_gi_seed.xml
+- name: objects/object_gi_shield_1
+ xml_path: assets/xml/objects/object_gi_shield_1.xml
+- name: objects/object_gi_shield_2
+ xml_path: assets/xml/objects/object_gi_shield_2.xml
+- name: objects/object_gi_shield_3
+ xml_path: assets/xml/objects/object_gi_shield_3.xml
+- name: objects/object_gi_skj_mask
+ xml_path: assets/xml/objects/object_gi_skj_mask.xml
+- name: objects/object_gi_soldout
+ xml_path: assets/xml/objects/object_gi_soldout.xml
+- name: objects/object_gi_soul
+ xml_path: assets/xml/objects/object_gi_soul.xml
+- name: objects/object_gi_stick
+ xml_path: assets/xml/objects/object_gi_stick.xml
+- name: objects/object_gi_sutaru
+ xml_path: assets/xml/objects/object_gi_sutaru.xml
+- name: objects/object_gi_sword_1
+ xml_path: assets/xml/objects/object_gi_sword_1.xml
+- name: objects/object_gi_ticketstone
+ xml_path: assets/xml/objects/object_gi_ticketstone.xml
+- name: objects/object_gi_truth_mask
+ xml_path: assets/xml/objects/object_gi_truth_mask.xml
+- name: objects/object_gi_zoramask
+ xml_path: assets/xml/objects/object_gi_zoramask.xml
+- name: objects/object_gj
+ xml_path: assets/xml/objects/object_gj.xml
+- name: objects/object_gjyo_objects
+ xml_path: assets/xml/objects/object_gjyo_objects.xml
+- name: objects/object_gla
+ xml_path: assets/xml/objects/object_gla.xml
+- name: objects/object_gm
+ xml_path: assets/xml/objects/object_gm.xml
+- name: objects/object_gnd
+ xml_path: assets/xml/objects/object_gnd.xml
+- name: objects/object_gnd_magic
+ xml_path: assets/xml/objects/object_gnd_magic.xml
+- name: objects/object_gndd
+ xml_path: assets/xml/objects/object_gndd.xml
+- name: objects/object_god_lgt
+ xml_path: assets/xml/objects/object_god_lgt.xml
+- name: objects/object_gol
+ xml_path: assets/xml/objects/object_gol.xml
+- name: objects/object_goma
+ xml_path: assets/xml/objects/object_goma.xml
+- name: objects/object_goroiwa
+ xml_path: assets/xml/objects/object_goroiwa.xml
+- name: objects/object_gr
+ xml_path: assets/xml/objects/object_gr.xml
+- name: objects/object_gs
+ xml_path: assets/xml/objects/object_gs.xml
+- name: objects/object_gt
+ xml_path: assets/xml/objects/object_gt.xml
+- name: objects/object_haka
+ xml_path: assets/xml/objects/object_haka.xml
+- name: objects/object_haka_door
+ xml_path: assets/xml/objects/object_haka_door.xml
+- name: objects/object_haka_objects
+ xml_path: assets/xml/objects/object_haka_objects.xml
+- name: objects/object_hakach_objects
+ xml_path: assets/xml/objects/object_hakach_objects.xml
+- name: objects/object_hata
+ xml_path: assets/xml/objects/object_hata.xml
+- name: objects/object_heavy_object
+ xml_path: assets/xml/objects/object_heavy_object.xml
+- name: objects/object_hidan_objects
+ xml_path: assets/xml/objects/object_hidan_objects.xml
+- name: objects/object_hintnuts
+ xml_path: assets/xml/objects/object_hintnuts.xml
+- name: objects/object_hni
+ xml_path: assets/xml/objects/object_hni.xml
+- name: objects/object_horse
+ xml_path: assets/xml/objects/object_horse.xml
+- name: objects/object_horse_ganon
+ xml_path: assets/xml/objects/object_horse_ganon.xml
+- name: objects/object_horse_link_child
+ xml_path: assets/xml/objects/object_horse_link_child.xml
+- name: objects/object_horse_normal
+ xml_path: assets/xml/objects/object_horse_normal.xml
+- name: objects/object_horse_zelda
+ xml_path: assets/xml/objects/object_horse_zelda.xml
+- name: objects/object_hs
+ xml_path: assets/xml/objects/object_hs.xml
+- name: objects/object_human
+ xml_path: assets/xml/objects/object_human.xml
+- name: objects/object_ice_objects
+ xml_path: assets/xml/objects/object_ice_objects.xml
+- name: objects/object_ik
+ xml_path: assets/xml/objects/object_ik.xml
+- name: objects/object_im
+ xml_path: assets/xml/objects/object_im.xml
+- name: objects/object_in
+ xml_path: assets/xml/objects/object_in.xml
+- name: objects/object_ingate
+ xml_path: assets/xml/objects/object_ingate.xml
+- name: objects/object_jj
+ xml_path: assets/xml/objects/object_jj.xml
+- name: objects/object_js
+ xml_path: assets/xml/objects/object_js.xml
+- name: objects/object_jya_door
+ xml_path: assets/xml/objects/object_jya_door.xml
+- name: objects/object_jya_iron
+ xml_path: assets/xml/objects/object_jya_iron.xml
+- name: objects/object_jya_obj
+ xml_path: assets/xml/objects/object_jya_obj.xml
+- name: objects/object_ka
+ xml_path: assets/xml/objects/object_ka.xml
+- name: objects/object_kanban
+ xml_path: assets/xml/objects/object_kanban.xml
+- name: objects/object_kibako2
+ xml_path: assets/xml/objects/object_kibako2.xml
+- name: objects/object_kingdodongo
+ xml_path: assets/xml/objects/object_kingdodongo.xml
+- name: objects/object_km1
+ xml_path: assets/xml/objects/object_km1.xml
+- name: objects/object_kusa
+ xml_path: assets/xml/objects/object_kusa.xml
+- name: objects/object_kw1
+ xml_path: assets/xml/objects/object_kw1.xml
+- name: objects/object_kz
+ xml_path: assets/xml/objects/object_kz.xml
+- name: objects/object_light_ring
+ xml_path: assets/xml/objects/object_light_ring.xml
+- name: objects/object_lightbox
+ xml_path: assets/xml/objects/object_lightbox.xml
+- name: objects/object_lightswitch
+ xml_path: assets/xml/objects/object_lightswitch.xml
+- name: objects/object_link_boy
+ xml_path: assets/xml/objects/object_link_boy.xml
+- name: objects/object_link_child
+ xml_path: assets/xml/objects/object_link_child.xml
+- name: objects/object_ma1
+ xml_path: assets/xml/objects/object_ma1.xml
+- name: objects/object_ma2
+ xml_path: assets/xml/objects/object_ma2.xml
+- name: objects/object_mag
+ xml_path: assets/xml/objects/object_mag.xml
+- name: objects/object_mamenoki
+ xml_path: assets/xml/objects/object_mamenoki.xml
+- name: objects/object_mastergolon
+ xml_path: assets/xml/objects/object_mastergolon.xml
+- name: objects/object_masterkokiri
+ xml_path: assets/xml/objects/object_masterkokiri.xml
+- name: objects/object_masterkokirihead
+ xml_path: assets/xml/objects/object_masterkokirihead.xml
+- name: objects/object_masterzoora
+ xml_path: assets/xml/objects/object_masterzoora.xml
+- name: objects/object_mb
+ xml_path: assets/xml/objects/object_mb.xml
+- name: objects/object_md
+ xml_path: assets/xml/objects/object_md.xml
+- name: objects/object_medal
+ xml_path: assets/xml/objects/object_medal.xml
+- name: objects/object_menkuri_objects
+ xml_path: assets/xml/objects/object_menkuri_objects.xml
+- name: objects/object_mir_ray
+ xml_path: assets/xml/objects/object_mir_ray.xml
+- name: objects/object_mizu_objects
+ xml_path: assets/xml/objects/object_mizu_objects.xml
+- name: objects/object_mjin
+ xml_path: assets/xml/objects/object_mjin.xml
+- name: objects/object_mjin_dark
+ xml_path: assets/xml/objects/object_mjin_dark.xml
+- name: objects/object_mjin_flame
+ xml_path: assets/xml/objects/object_mjin_flame.xml
+- name: objects/object_mjin_flash
+ xml_path: assets/xml/objects/object_mjin_flash.xml
+- name: objects/object_mjin_ice
+ xml_path: assets/xml/objects/object_mjin_ice.xml
+- name: objects/object_mjin_oka
+ xml_path: assets/xml/objects/object_mjin_oka.xml
+- name: objects/object_mjin_soul
+ xml_path: assets/xml/objects/object_mjin_soul.xml
+- name: objects/object_mjin_wind
+ xml_path: assets/xml/objects/object_mjin_wind.xml
+- name: objects/object_mk
+ xml_path: assets/xml/objects/object_mk.xml
+- name: objects/object_mm
+ xml_path: assets/xml/objects/object_mm.xml
+- name: objects/object_mo
+ xml_path: assets/xml/objects/object_mo.xml
+- name: objects/object_mori_hineri1
+ xml_path: assets/xml/objects/object_mori_hineri1.xml
+- name: objects/object_mori_hineri1a
+ xml_path: assets/xml/objects/object_mori_hineri1a.xml
+- name: objects/object_mori_hineri2
+ xml_path: assets/xml/objects/object_mori_hineri2.xml
+- name: objects/object_mori_hineri2a
+ xml_path: assets/xml/objects/object_mori_hineri2a.xml
+- name: objects/object_mori_objects
+ xml_path: assets/xml/objects/object_mori_objects.xml
+- name: objects/object_mori_tex
+ xml_path: assets/xml/objects/object_mori_tex.xml
+- name: objects/object_ms
+ xml_path: assets/xml/objects/object_ms.xml
+- name: objects/object_mu
+ xml_path: assets/xml/objects/object_mu.xml
+- name: objects/object_nb
+ xml_path: assets/xml/objects/object_nb.xml
+- name: objects/object_niw
+ xml_path: assets/xml/objects/object_niw.xml
+- name: objects/object_nwc
+ xml_path: assets/xml/objects/object_nwc.xml
+- name: objects/object_ny
+ xml_path: assets/xml/objects/object_ny.xml
+- name: objects/object_o_anime
+ xml_path: assets/xml/objects/object_o_anime.xml
+- name: objects/object_oA1
+ xml_path: assets/xml/objects/object_oA1.xml
+- name: objects/object_oA2
+ xml_path: assets/xml/objects/object_oA2.xml
+- name: objects/object_oA3
+ xml_path: assets/xml/objects/object_oA3.xml
+- name: objects/object_oA4
+ xml_path: assets/xml/objects/object_oA4.xml
+- name: objects/object_oA5
+ xml_path: assets/xml/objects/object_oA5.xml
+- name: objects/object_oA6
+ xml_path: assets/xml/objects/object_oA6.xml
+- name: objects/object_oA7
+ xml_path: assets/xml/objects/object_oA7.xml
+- name: objects/object_oA8
+ xml_path: assets/xml/objects/object_oA8.xml
+- name: objects/object_oA9
+ xml_path: assets/xml/objects/object_oA9.xml
+- name: objects/object_oA10
+ xml_path: assets/xml/objects/object_oA10.xml
+- name: objects/object_oA11
+ xml_path: assets/xml/objects/object_oA11.xml
+- name: objects/object_oB1
+ xml_path: assets/xml/objects/object_oB1.xml
+- name: objects/object_oB2
+ xml_path: assets/xml/objects/object_oB2.xml
+- name: objects/object_oB3
+ xml_path: assets/xml/objects/object_oB3.xml
+- name: objects/object_oB4
+ xml_path: assets/xml/objects/object_oB4.xml
+- name: objects/object_oE1
+ xml_path: assets/xml/objects/object_oE1.xml
+- name: objects/object_oE1s
+ xml_path: assets/xml/objects/object_oE1s.xml
+- name: objects/object_oE2
+ xml_path: assets/xml/objects/object_oE2.xml
+- name: objects/object_oE3
+ xml_path: assets/xml/objects/object_oE3.xml
+- name: objects/object_oE4
+ xml_path: assets/xml/objects/object_oE4.xml
+- name: objects/object_oE4s
+ xml_path: assets/xml/objects/object_oE4s.xml
+- name: objects/object_oE5
+ xml_path: assets/xml/objects/object_oE5.xml
+- name: objects/object_oE6
+ xml_path: assets/xml/objects/object_oE6.xml
+- name: objects/object_oE7
+ xml_path: assets/xml/objects/object_oE7.xml
+- name: objects/object_oE8
+ xml_path: assets/xml/objects/object_oE8.xml
+- name: objects/object_oE9
+ xml_path: assets/xml/objects/object_oE9.xml
+- name: objects/object_oE10
+ xml_path: assets/xml/objects/object_oE10.xml
+- name: objects/object_oE11
+ xml_path: assets/xml/objects/object_oE11.xml
+- name: objects/object_oE12
+ xml_path: assets/xml/objects/object_oE12.xml
+- name: objects/object_oE_anime
+ xml_path: assets/xml/objects/object_oE_anime.xml
+- name: objects/object_oF1d_map
+ xml_path: assets/xml/objects/object_oF1d_map.xml
+- name: objects/object_oF1s
+ xml_path: assets/xml/objects/object_oF1s.xml
+- name: objects/object_okuta
+ xml_path: assets/xml/objects/object_okuta.xml
+- name: objects/object_opening_demo1
+ xml_path: assets/xml/objects/object_opening_demo1.xml
+- name: objects/object_os
+ xml_path: assets/xml/objects/object_os.xml
+- name: objects/object_os_anime
+ xml_path: assets/xml/objects/object_os_anime.xml
+- name: objects/object_ossan
+ xml_path: assets/xml/objects/object_ossan.xml
+- name: objects/object_ouke_haka
+ xml_path: assets/xml/objects/object_ouke_haka.xml
+- name: objects/object_owl
+ xml_path: assets/xml/objects/object_owl.xml
+- name: objects/object_peehat
+ xml_path: assets/xml/objects/object_peehat.xml
+- name: objects/object_po_composer
+ xml_path: assets/xml/objects/object_po_composer.xml
+- name: objects/object_po_field
+ xml_path: assets/xml/objects/object_po_field.xml
+- name: objects/object_po_sisters
+ xml_path: assets/xml/objects/object_po_sisters.xml
+- name: objects/object_poh
+ xml_path: assets/xml/objects/object_poh.xml
+- name: objects/object_ps
+ xml_path: assets/xml/objects/object_ps.xml
+- name: objects/object_pu_box
+ xml_path: assets/xml/objects/object_pu_box.xml
+- name: objects/object_rd
+ xml_path: assets/xml/objects/object_rd.xml
+- name: objects/object_reeba
+ xml_path: assets/xml/objects/object_reeba.xml
+- name: objects/object_relay_objects
+ xml_path: assets/xml/objects/object_relay_objects.xml
+- name: objects/object_rl
+ xml_path: assets/xml/objects/object_rl.xml
+- name: objects/object_rr
+ xml_path: assets/xml/objects/object_rr.xml
+- name: objects/object_rs
+ xml_path: assets/xml/objects/object_rs.xml
+- name: objects/object_ru1
+ xml_path: assets/xml/objects/object_ru1.xml
+- name: objects/object_ru2
+ xml_path: assets/xml/objects/object_ru2.xml
+- name: objects/object_sa
+ xml_path: assets/xml/objects/object_sa.xml
+- name: objects/object_sb
+ xml_path: assets/xml/objects/object_sb.xml
+- name: objects/object_sd
+ xml_path: assets/xml/objects/object_sd.xml
+- name: objects/object_shop_dungen
+ xml_path: assets/xml/objects/object_shop_dungen.xml
+- name: objects/object_shopnuts
+ xml_path: assets/xml/objects/object_shopnuts.xml
+- name: objects/object_siofuki
+ xml_path: assets/xml/objects/object_siofuki.xml
+- name: objects/object_sk2
+ xml_path: assets/xml/objects/object_sk2.xml
+- name: objects/object_skb
+ xml_path: assets/xml/objects/object_skb.xml
+- name: objects/object_skj
+ xml_path: assets/xml/objects/object_skj.xml
+- name: objects/object_spot00_break
+ xml_path: assets/xml/objects/object_spot00_break.xml
+- name: objects/object_spot00_objects
+ xml_path: assets/xml/objects/object_spot00_objects.xml
+- name: objects/object_spot01_matoya
+ xml_path: assets/xml/objects/object_spot01_matoya.xml
+- name: objects/object_spot01_matoyab
+ xml_path: assets/xml/objects/object_spot01_matoyab.xml
+- name: objects/object_spot01_objects
+ xml_path: assets/xml/objects/object_spot01_objects.xml
+- name: objects/object_spot01_objects2
+ xml_path: assets/xml/objects/object_spot01_objects2.xml
+- name: objects/object_spot02_objects
+ xml_path: assets/xml/objects/object_spot02_objects.xml
+- name: objects/object_spot03_object
+ xml_path: assets/xml/objects/object_spot03_object.xml
+- name: objects/object_spot04_objects
+ xml_path: assets/xml/objects/object_spot04_objects.xml
+- name: objects/object_spot05_objects
+ xml_path: assets/xml/objects/object_spot05_objects.xml
+- name: objects/object_spot06_objects
+ xml_path: assets/xml/objects/object_spot06_objects.xml
+- name: objects/object_spot07_object
+ xml_path: assets/xml/objects/object_spot07_object.xml
+- name: objects/object_spot08_obj
+ xml_path: assets/xml/objects/object_spot08_obj.xml
+- name: objects/object_spot09_obj
+ xml_path: assets/xml/objects/object_spot09_obj.xml
+- name: objects/object_spot11_obj
+ xml_path: assets/xml/objects/object_spot11_obj.xml
+- name: objects/object_spot12_obj
+ xml_path: assets/xml/objects/object_spot12_obj.xml
+- name: objects/object_spot15_obj
+ xml_path: assets/xml/objects/object_spot15_obj.xml
+- name: objects/object_spot16_obj
+ xml_path: assets/xml/objects/object_spot16_obj.xml
+- name: objects/object_spot17_obj
+ xml_path: assets/xml/objects/object_spot17_obj.xml
+- name: objects/object_spot18_obj
+ xml_path: assets/xml/objects/object_spot18_obj.xml
+- name: objects/object_ssh
+ xml_path: assets/xml/objects/object_ssh.xml
+- name: objects/object_sst
+ xml_path: assets/xml/objects/object_sst.xml
+- name: objects/object_st
+ xml_path: assets/xml/objects/object_st.xml
+- name: objects/object_stream
+ xml_path: assets/xml/objects/object_stream.xml
+- name: objects/object_syokudai
+ xml_path: assets/xml/objects/object_syokudai.xml
+- name: objects/object_ta
+ xml_path: assets/xml/objects/object_ta.xml
+- name: objects/object_timeblock
+ xml_path: assets/xml/objects/object_timeblock.xml
+- name: objects/object_tite
+ xml_path: assets/xml/objects/object_tite.xml
+- name: objects/object_tk
+ xml_path: assets/xml/objects/object_tk.xml
+- name: objects/object_toki_objects
+ xml_path: assets/xml/objects/object_toki_objects.xml
+- name: objects/object_torch2
+ xml_path: assets/xml/objects/object_torch2.xml
+- name: objects/object_toryo
+ xml_path: assets/xml/objects/object_toryo.xml
+- name: objects/object_tp
+ xml_path: assets/xml/objects/object_tp.xml
+- name: objects/object_tr
+ xml_path: assets/xml/objects/object_tr.xml
+- name: objects/object_trap
+ xml_path: assets/xml/objects/object_trap.xml
+- name: objects/object_triforce_spot
+ xml_path: assets/xml/objects/object_triforce_spot.xml
+- name: objects/object_ts
+ xml_path: assets/xml/objects/object_ts.xml
+- name: objects/object_tsubo
+ xml_path: assets/xml/objects/object_tsubo.xml
+- name: objects/object_tw
+ xml_path: assets/xml/objects/object_tw.xml
+- name: objects/object_umajump
+ xml_path: assets/xml/objects/object_umajump.xml
+- name: objects/object_vali
+ xml_path: assets/xml/objects/object_vali.xml
+- name: objects/object_vase
+ xml_path: assets/xml/objects/object_vase.xml
+- name: objects/object_vm
+ xml_path: assets/xml/objects/object_vm.xml
+- name: objects/object_wallmaster
+ xml_path: assets/xml/objects/object_wallmaster.xml
+- name: objects/object_warp1
+ xml_path: assets/xml/objects/object_warp1.xml
+- name: objects/object_warp2
+ xml_path: assets/xml/objects/object_warp2.xml
+- name: objects/object_wf
+ xml_path: assets/xml/objects/object_wf.xml
+- name: objects/object_wood02
+ xml_path: assets/xml/objects/object_wood02.xml
+- name: objects/object_xc
+ xml_path: assets/xml/objects/object_xc.xml
+- name: objects/object_yabusame_point
+ xml_path: assets/xml/objects/object_yabusame_point.xml
+- name: objects/object_ydan_objects
+ xml_path: assets/xml/objects/object_ydan_objects.xml
+- name: objects/object_yukabyun
+ xml_path: assets/xml/objects/object_yukabyun.xml
+- name: objects/object_zf
+ xml_path: assets/xml/objects/object_zf.xml
+- name: objects/object_zg
+ xml_path: assets/xml/objects/object_zg.xml
+- name: objects/object_zl1
+ xml_path: assets/xml/objects/object_zl1.xml
+- name: objects/object_zl2
+ xml_path: assets/xml/objects/object_zl2.xml
+- name: objects/object_zl2_anime1
+ xml_path: assets/xml/objects/object_zl2_anime1.xml
+- name: objects/object_zl2_anime2
+ xml_path: assets/xml/objects/object_zl2_anime2.xml
+- name: objects/object_zl4
+ xml_path: assets/xml/objects/object_zl4.xml
+- name: objects/object_zo
+ xml_path: assets/xml/objects/object_zo.xml
+- name: overlays/ovl_Arrow_Fire
+ xml_path: assets/xml/overlays/ovl_Arrow_Fire.xml
+ start_offset: 0x960
+ end_offset: 0x1D80
+- name: overlays/ovl_Arrow_Ice
+ xml_path: assets/xml/overlays/ovl_Arrow_Ice.xml
+ start_offset: 0x980
+ end_offset: 0x1DA0
+- name: overlays/ovl_Arrow_Light
+ xml_path: assets/xml/overlays/ovl_Arrow_Light.xml
+ start_offset: 0x990
+ end_offset: 0x1DB0
+- name: overlays/ovl_Bg_Ganon_Otyuka
+ xml_path: assets/xml/overlays/ovl_Bg_Ganon_Otyuka.xml
+ start_offset: 0x1110
+ end_offset: 0x24EC
+- name: overlays/ovl_Bg_Jya_Cobra
+ xml_path: assets/xml/overlays/ovl_Bg_Jya_Cobra.xml
+ start_offset: 0x1830
+ end_offset: 0x18A8
+- name: overlays/ovl_Boss_Dodongo
+ xml_path: assets/xml/overlays/ovl_Boss_Dodongo.xml
+ start_offset: 0x61C8
+ end_offset: 0x91C8
+- name: overlays/ovl_Boss_Ganon
+ xml_path: assets/xml/overlays/ovl_Boss_Ganon.xml
+ start_offset: 0xE398
+ end_offset: 0x20EB8
+- name: overlays/ovl_Boss_Ganon2
+ xml_path: assets/xml/overlays/ovl_Boss_Ganon2.xml
+ start_offset: 0x9F48
+ end_offset: 0x103F8
+- name: overlays/ovl_Boss_Sst
+ xml_path: assets/xml/overlays/ovl_Boss_Sst.xml
+ start_offset: 0xA330
+ end_offset: 0xACE0
+- name: overlays/ovl_Demo_Shd
+ xml_path: assets/xml/overlays/ovl_Demo_Shd.xml
+ start_offset: 0x410
+ end_offset: 0x2390
+- name: overlays/ovl_Effect_Ss_Fhg_Flash
+ xml_path: assets/xml/overlays/ovl_Effect_Ss_Fhg_Flash.xml
+ start_offset: 0x9F0
+ end_offset: 0xEA8
+- name: overlays/ovl_En_Bili
+ xml_path: assets/xml/overlays/ovl_En_Bili.xml
+ start_offset: 0x1E40
+ end_offset: 0x1E60
+- name: overlays/ovl_En_Clear_Tag
+ xml_path: assets/xml/overlays/ovl_En_Clear_Tag.xml
+ start_offset: 0x2600
+ end_offset: 0x8900
+- name: overlays/ovl_En_Ganon_Mant
+ xml_path: assets/xml/overlays/ovl_En_Ganon_Mant.xml
+ start_offset: 0x11E8
+ end_offset: 0x40E8
+- name: overlays/ovl_En_Ganon_Organ
+ xml_path: assets/xml/overlays/ovl_En_Ganon_Organ.xml
+ start_offset: 0x328
+ end_offset: 0x6EB0
+- name: overlays/ovl_En_Holl
+ xml_path: assets/xml/overlays/ovl_En_Holl.xml
+ start_offset: 0xE68
+ end_offset: 0xED0
+- name: overlays/ovl_En_Jsjutan
+ xml_path: assets/xml/overlays/ovl_En_Jsjutan.xml
+ start_offset: 0x12B8
+ end_offset: 0x4C50
+- name: overlays/ovl_En_Kanban
+ xml_path: assets/xml/overlays/ovl_En_Kanban.xml
+ start_offset: 0x2E70
+ end_offset: 0x2F30
+- name: overlays/ovl_En_Sda
+ xml_path: assets/xml/overlays/ovl_En_Sda.xml
+ start_offset: 0x14A8
+ end_offset: 0x1538
+- name: overlays/ovl_En_Ssh
+ xml_path: assets/xml/overlays/ovl_En_Ssh.xml
+ start_offset: 0x2150
+ end_offset: 0x21E0
+- name: overlays/ovl_En_St
+ xml_path: assets/xml/overlays/ovl_En_St.xml
+ start_offset: 0x26A0
+ end_offset: 0x2730
+- name: overlays/ovl_En_Sth
+ xml_path: assets/xml/overlays/ovl_En_Sth.xml
+ start_offset: 0xE60
+ end_offset: 0x3E34
+- name: overlays/ovl_End_Title
+ xml_path: assets/xml/overlays/ovl_End_Title.xml
+ start_offset: 0x6F0
+ end_offset: 0x4098
+- name: overlays/ovl_file_choose
+ xml_path: assets/xml/overlays/ovl_file_choose.xml
+ start_offset: 0xEC50
+ end_offset: 0xF330
+- name: overlays/ovl_Magic_Dark
+ xml_path: assets/xml/overlays/ovl_Magic_Dark.xml
+ start_offset: 0xC90
+ end_offset: 0x16C0
+- name: overlays/ovl_Magic_Fire
+ xml_path: assets/xml/overlays/ovl_Magic_Fire.xml
+ start_offset: 0xB20
+ end_offset: 0x2170
+- name: overlays/ovl_Magic_Wind
+ xml_path: assets/xml/overlays/ovl_Magic_Wind.xml
+ start_offset: 0x6A0
+ end_offset: 0x1BB8
+- name: overlays/ovl_Oceff_Spot
+ xml_path: assets/xml/overlays/ovl_Oceff_Spot.xml
+ start_offset: 0x780
+ end_offset: 0xE58
+- name: overlays/ovl_Oceff_Storm
+ xml_path: assets/xml/overlays/ovl_Oceff_Storm.xml
+ start_offset: 0x740
+ end_offset: 0x1AD0
+- name: overlays/ovl_Oceff_Wipe
+ xml_path: assets/xml/overlays/ovl_Oceff_Wipe.xml
+ start_offset: 0x4F0
+ end_offset: 0xCB0
+- name: overlays/ovl_Oceff_Wipe2
+ xml_path: assets/xml/overlays/ovl_Oceff_Wipe2.xml
+ start_offset: 0x430
+ end_offset: 0x1698
+- name: overlays/ovl_Oceff_Wipe3
+ xml_path: assets/xml/overlays/ovl_Oceff_Wipe3.xml
+ start_offset: 0x430
+ end_offset: 0x1678
+- name: overlays/ovl_Oceff_Wipe4
+ xml_path: assets/xml/overlays/ovl_Oceff_Wipe4.xml
+ start_offset: 0x410
+ end_offset: 0xEF8
+- name: scenes/dungeons/bdan
+ xml_path: assets/xml/scenes/dungeons/bdan.xml
+- name: scenes/dungeons/bdan_boss
+ xml_path: assets/xml/scenes/dungeons/bdan_boss.xml
+- name: scenes/dungeons/Bmori1
+ xml_path: assets/xml/scenes/dungeons/Bmori1.xml
+- name: scenes/dungeons/ddan
+ xml_path: assets/xml/scenes/dungeons/ddan.xml
+- name: scenes/dungeons/ddan_boss
+ xml_path: assets/xml/scenes/dungeons/ddan_boss.xml
+- name: scenes/dungeons/FIRE_bs
+ xml_path: assets/xml/scenes/dungeons/FIRE_bs.xml
+- name: scenes/dungeons/ganon
+ xml_path: assets/xml/scenes/dungeons/ganon.xml
+- name: scenes/dungeons/ganon_boss
+ xml_path: assets/xml/scenes/dungeons/ganon_boss.xml
+- name: scenes/dungeons/ganon_demo
+ xml_path: assets/xml/scenes/dungeons/ganon_demo.xml
+- name: scenes/dungeons/ganon_final
+ xml_path: assets/xml/scenes/dungeons/ganon_final.xml
+- name: scenes/dungeons/ganon_sonogo
+ xml_path: assets/xml/scenes/dungeons/ganon_sonogo.xml
+- name: scenes/dungeons/ganontika
+ xml_path: assets/xml/scenes/dungeons/ganontika.xml
+- name: scenes/dungeons/ganontikasonogo
+ xml_path: assets/xml/scenes/dungeons/ganontikasonogo.xml
+- name: scenes/dungeons/gerudoway
+ xml_path: assets/xml/scenes/dungeons/gerudoway.xml
+- name: scenes/dungeons/HAKAdan
+ xml_path: assets/xml/scenes/dungeons/HAKAdan.xml
+- name: scenes/dungeons/HAKAdan_bs
+ xml_path: assets/xml/scenes/dungeons/HAKAdan_bs.xml
+- name: scenes/dungeons/HAKAdanCH
+ xml_path: assets/xml/scenes/dungeons/HAKAdanCH.xml
+- name: scenes/dungeons/HIDAN
+ xml_path: assets/xml/scenes/dungeons/HIDAN.xml
+- name: scenes/dungeons/ice_doukutu
+ xml_path: assets/xml/scenes/dungeons/ice_doukutu.xml
+- name: scenes/dungeons/jyasinboss
+ xml_path: assets/xml/scenes/dungeons/jyasinboss.xml
+- name: scenes/dungeons/jyasinzou
+ xml_path: assets/xml/scenes/dungeons/jyasinzou.xml
+- name: scenes/dungeons/men
+ xml_path: assets/xml/scenes/dungeons/men.xml
+- name: scenes/dungeons/MIZUsin
+ xml_path: assets/xml/scenes/dungeons/MIZUsin.xml
+- name: scenes/dungeons/MIZUsin_bs
+ xml_path: assets/xml/scenes/dungeons/MIZUsin_bs.xml
+- name: scenes/dungeons/moribossroom
+ xml_path: assets/xml/scenes/dungeons/moribossroom.xml
+- name: scenes/dungeons/ydan
+ xml_path: assets/xml/scenes/dungeons/ydan.xml
+- name: scenes/dungeons/ydan_boss
+ xml_path: assets/xml/scenes/dungeons/ydan_boss.xml
+- name: scenes/indoors/bowling
+ xml_path: assets/xml/scenes/indoors/bowling.xml
+- name: scenes/indoors/daiyousei_izumi
+ xml_path: assets/xml/scenes/indoors/daiyousei_izumi.xml
+- name: scenes/indoors/hairal_niwa
+ xml_path: assets/xml/scenes/indoors/hairal_niwa.xml
+- name: scenes/indoors/hairal_niwa_n
+ xml_path: assets/xml/scenes/indoors/hairal_niwa_n.xml
+- name: scenes/indoors/hakasitarelay
+ xml_path: assets/xml/scenes/indoors/hakasitarelay.xml
+- name: scenes/indoors/hut
+ xml_path: assets/xml/scenes/indoors/hut.xml
+- name: scenes/indoors/hylia_labo
+ xml_path: assets/xml/scenes/indoors/hylia_labo.xml
+- name: scenes/indoors/impa
+ xml_path: assets/xml/scenes/indoors/impa.xml
+- name: scenes/indoors/kakariko
+ xml_path: assets/xml/scenes/indoors/kakariko.xml
+- name: scenes/indoors/kenjyanoma
+ xml_path: assets/xml/scenes/indoors/kenjyanoma.xml
+- name: scenes/indoors/kokiri_home
+ xml_path: assets/xml/scenes/indoors/kokiri_home.xml
+- name: scenes/indoors/kokiri_home3
+ xml_path: assets/xml/scenes/indoors/kokiri_home3.xml
+- name: scenes/indoors/kokiri_home4
+ xml_path: assets/xml/scenes/indoors/kokiri_home4.xml
+- name: scenes/indoors/kokiri_home5
+ xml_path: assets/xml/scenes/indoors/kokiri_home5.xml
+- name: scenes/indoors/labo
+ xml_path: assets/xml/scenes/indoors/labo.xml
+- name: scenes/indoors/link_home
+ xml_path: assets/xml/scenes/indoors/link_home.xml
+- name: scenes/indoors/mahouya
+ xml_path: assets/xml/scenes/indoors/mahouya.xml
+- name: scenes/indoors/malon_stable
+ xml_path: assets/xml/scenes/indoors/malon_stable.xml
+- name: scenes/indoors/miharigoya
+ xml_path: assets/xml/scenes/indoors/miharigoya.xml
+- name: scenes/indoors/nakaniwa
+ xml_path: assets/xml/scenes/indoors/nakaniwa.xml
+- name: scenes/indoors/souko
+ xml_path: assets/xml/scenes/indoors/souko.xml
+- name: scenes/indoors/syatekijyou
+ xml_path: assets/xml/scenes/indoors/syatekijyou.xml
+- name: scenes/indoors/takaraya
+ xml_path: assets/xml/scenes/indoors/takaraya.xml
+- name: scenes/indoors/tent
+ xml_path: assets/xml/scenes/indoors/tent.xml
+- name: scenes/indoors/tokinoma
+ xml_path: assets/xml/scenes/indoors/tokinoma.xml
+- name: scenes/indoors/yousei_izumi_tate
+ xml_path: assets/xml/scenes/indoors/yousei_izumi_tate.xml
+- name: scenes/indoors/yousei_izumi_yoko
+ xml_path: assets/xml/scenes/indoors/yousei_izumi_yoko.xml
+- name: scenes/misc/enrui
+ xml_path: assets/xml/scenes/misc/enrui.xml
+- name: scenes/misc/entra
+ xml_path: assets/xml/scenes/misc/entra.xml
+- name: scenes/misc/entra_n
+ xml_path: assets/xml/scenes/misc/entra_n.xml
+- name: scenes/misc/hakaana
+ xml_path: assets/xml/scenes/misc/hakaana.xml
+- name: scenes/misc/hakaana2
+ xml_path: assets/xml/scenes/misc/hakaana2.xml
+- name: scenes/misc/hakaana_ouke
+ xml_path: assets/xml/scenes/misc/hakaana_ouke.xml
+- name: scenes/misc/hiral_demo
+ xml_path: assets/xml/scenes/misc/hiral_demo.xml
+- name: scenes/misc/kakariko3
+ xml_path: assets/xml/scenes/misc/kakariko3.xml
+- name: scenes/misc/kakusiana
+ xml_path: assets/xml/scenes/misc/kakusiana.xml
+- name: scenes/misc/kinsuta
+ xml_path: assets/xml/scenes/misc/kinsuta.xml
+- name: scenes/misc/market_alley
+ xml_path: assets/xml/scenes/misc/market_alley.xml
+- name: scenes/misc/market_alley_n
+ xml_path: assets/xml/scenes/misc/market_alley_n.xml
+- name: scenes/misc/market_day
+ xml_path: assets/xml/scenes/misc/market_day.xml
+- name: scenes/misc/market_night
+ xml_path: assets/xml/scenes/misc/market_night.xml
+- name: scenes/misc/market_ruins
+ xml_path: assets/xml/scenes/misc/market_ruins.xml
+- name: scenes/misc/shrine
+ xml_path: assets/xml/scenes/misc/shrine.xml
+- name: scenes/misc/shrine_n
+ xml_path: assets/xml/scenes/misc/shrine_n.xml
+- name: scenes/misc/shrine_r
+ xml_path: assets/xml/scenes/misc/shrine_r.xml
+- name: scenes/misc/turibori
+ xml_path: assets/xml/scenes/misc/turibori.xml
+- name: scenes/overworld/ganon_tou
+ xml_path: assets/xml/scenes/overworld/ganon_tou.xml
+- name: scenes/overworld/spot00
+ xml_path: assets/xml/scenes/overworld/spot00.xml
+- name: scenes/overworld/spot01
+ xml_path: assets/xml/scenes/overworld/spot01.xml
+- name: scenes/overworld/spot02
+ xml_path: assets/xml/scenes/overworld/spot02.xml
+- name: scenes/overworld/spot03
+ xml_path: assets/xml/scenes/overworld/spot03.xml
+- name: scenes/overworld/spot04
+ xml_path: assets/xml/scenes/overworld/spot04.xml
+- name: scenes/overworld/spot05
+ xml_path: assets/xml/scenes/overworld/spot05.xml
+- name: scenes/overworld/spot06
+ xml_path: assets/xml/scenes/overworld/spot06.xml
+- name: scenes/overworld/spot07
+ xml_path: assets/xml/scenes/overworld/spot07.xml
+- name: scenes/overworld/spot08
+ xml_path: assets/xml/scenes/overworld/spot08.xml
+- name: scenes/overworld/spot09
+ xml_path: assets/xml/scenes/overworld/spot09.xml
+- name: scenes/overworld/spot10
+ xml_path: assets/xml/scenes/overworld/spot10.xml
+- name: scenes/overworld/spot11
+ xml_path: assets/xml/scenes/overworld/spot11.xml
+- name: scenes/overworld/spot12
+ xml_path: assets/xml/scenes/overworld/spot12.xml
+- name: scenes/overworld/spot13
+ xml_path: assets/xml/scenes/overworld/spot13.xml
+- name: scenes/overworld/spot15
+ xml_path: assets/xml/scenes/overworld/spot15.xml
+- name: scenes/overworld/spot16
+ xml_path: assets/xml/scenes/overworld/spot16.xml
+- name: scenes/overworld/spot17
+ xml_path: assets/xml/scenes/overworld/spot17.xml
+- name: scenes/overworld/spot18
+ xml_path: assets/xml/scenes/overworld/spot18.xml
+- name: scenes/overworld/spot20
+ xml_path: assets/xml/scenes/overworld/spot20.xml
+- name: scenes/shops/alley_shop
+ xml_path: assets/xml/scenes/shops/alley_shop.xml
+- name: scenes/shops/drag
+ xml_path: assets/xml/scenes/shops/drag.xml
+- name: scenes/shops/face_shop
+ xml_path: assets/xml/scenes/shops/face_shop.xml
+- name: scenes/shops/golon
+ xml_path: assets/xml/scenes/shops/golon.xml
+- name: scenes/shops/kokiri_shop
+ xml_path: assets/xml/scenes/shops/kokiri_shop.xml
+- name: scenes/shops/night_shop
+ xml_path: assets/xml/scenes/shops/night_shop.xml
+- name: scenes/shops/shop1
+ xml_path: assets/xml/scenes/shops/shop1.xml
+- name: scenes/shops/zoora
+ xml_path: assets/xml/scenes/shops/zoora.xml
+- name: textures/backgrounds
+ xml_path: assets/xml/textures/backgrounds.xml
+- name: textures/do_action_static
+ xml_path: assets/xml/textures/do_action_static.xml
+- name: textures/icon_item_24_static
+ xml_path: assets/xml/textures/icon_item_24_static.xml
+- name: textures/icon_item_dungeon_static
+ xml_path: assets/xml/textures/icon_item_dungeon_static.xml
+- name: textures/icon_item_field_static
+ xml_path: assets/xml/textures/icon_item_field_static.xml
+- name: textures/icon_item_gameover_static
+ xml_path: assets/xml/textures/icon_item_gameover_static.xml
+- name: textures/icon_item_jpn_static
+ xml_path: assets/xml/textures/icon_item_jpn_static.xml
+- name: textures/icon_item_nes_static
+ xml_path: assets/xml/textures/icon_item_nes_static.xml
+- name: textures/icon_item_static
+ xml_path: assets/xml/textures/icon_item_static.xml
+- name: textures/item_name_static
+ xml_path: assets/xml/textures/item_name_static.xml
+- name: textures/kanji
+ xml_path: assets/xml/textures/kanji.xml
+- name: textures/map_48x85_static
+ xml_path: assets/xml/textures/map_48x85_static.xml
+- name: textures/map_grand_static
+ xml_path: assets/xml/textures/map_grand_static.xml
+- name: textures/map_i_static
+ xml_path: assets/xml/textures/map_i_static.xml
+- name: textures/map_name_static
+ xml_path: assets/xml/textures/map_name_static.xml
+- name: textures/message_static
+ xml_path: assets/xml/textures/message_static.xml
+- name: textures/message_texture_static
+ xml_path: assets/xml/textures/message_texture_static.xml
+- name: textures/nes_font_static
+ xml_path: assets/xml/textures/nes_font_static.xml
+- name: textures/nintendo_rogo_static
+ xml_path: assets/xml/textures/nintendo_rogo_static_v2.xml
+- name: textures/parameter_static
+ xml_path: assets/xml/textures/parameter_static.xml
+- name: textures/place_title_cards
+ xml_path: assets/xml/textures/place_title_cards.xml
+- name: textures/skyboxes
+ xml_path: assets/xml/textures/skyboxes.xml
+- name: textures/title_static
+ xml_path: assets/xml/textures/title_static.xml
diff --git a/baseroms/ntsc-1.1/segments.csv b/baseroms/ntsc-1.1/segments.csv
new file mode 100644
index 0000000000..78f80b081e
--- /dev/null
+++ b/baseroms/ntsc-1.1/segments.csv
@@ -0,0 +1,1511 @@
+Name,VRAM start
+makerom,80000000
+boot,80000460
+dmadata,
+Audiobank,
+Audioseq,
+Audiotable,
+kanji,
+link_animetion,
+icon_item_static,
+icon_item_24_static,
+icon_item_field_static,
+icon_item_dungeon_static,
+icon_item_gameover_static,
+icon_item_jpn_static,
+icon_item_nes_static,
+item_name_static,
+map_name_static,
+do_action_static,
+message_static,
+jpn_message_data_static,
+message_texture_static,
+nes_font_static,
+nes_message_data_static,
+staff_message_data_static,
+map_grand_static,
+map_i_static,
+map_48x85_static,
+code,800110A0
+n64dd,801C7040
+ovl_title,80800000
+ovl_select,808009C0
+ovl_opening,80803720
+ovl_file_choose,80803880
+ovl_kaleido_scope,808137C0
+ovl_player_actor,808301C0
+ovl_map_mark_data,80856810
+ovl_En_Test,8085D370
+ovl_En_GirlA,80862C20
+ovl_En_Part,80865540
+ovl_En_Light,80866B50
+ovl_En_Door,80867940
+ovl_En_Box,80868780
+ovl_En_Poh,8086A2C0
+ovl_En_Okuta,8086E450
+ovl_En_Bom,80870A30
+ovl_En_Wallmas,80871900
+ovl_En_Dodongo,80873310
+ovl_En_Firefly,808760B0
+ovl_En_Horse,80878220
+ovl_En_Arrow,80884440
+ovl_En_Elf,80885B30
+ovl_En_Niw,8088A4F0
+ovl_En_Tite,8088D820
+ovl_En_Reeba,808905C0
+ovl_En_Peehat,80892030
+ovl_En_Holl,80895730
+ovl_En_Scene_Change,80896700
+ovl_En_Zf,80896830
+ovl_En_Hata,8089D330
+ovl_Boss_Dodongo,8089D8C0
+ovl_Boss_Goma,808A73A0
+ovl_En_Zl1,808AD320
+ovl_En_Viewer,808B1120
+ovl_En_Goma,808B3FF0
+ovl_Bg_Pushbox,808B6C80
+ovl_En_Bubble,808B6F80
+ovl_Door_Shutter,808B83A0
+ovl_En_Dodojr,808BA620
+ovl_En_Bdfire,808BC4C0
+ovl_En_Boom,808BD050
+ovl_En_Torch2,808BD910
+ovl_En_Bili,808C00B0
+ovl_En_Tp,808C2380
+ovl_En_St,808C41D0
+ovl_En_Bw,808C6E40
+ovl_En_Eiyer,808CA1A0
+ovl_En_River_Sound,808CBE00
+ovl_En_Horse_Normal,808CC790
+ovl_En_Ossan,808CEDB0
+ovl_Bg_Treemouth,808D5390
+ovl_Bg_Dodoago,808D69E0
+ovl_Bg_Hidan_Dalm,808D7790
+ovl_Bg_Hidan_Hrock,808D7FE0
+ovl_En_Horse_Ganon,808D8810
+ovl_Bg_Hidan_Rock,808D9590
+ovl_Bg_Hidan_Rsekizou,808DA680
+ovl_Bg_Hidan_Sekizou,808DB260
+ovl_Bg_Hidan_Sima,808DC6B0
+ovl_Bg_Hidan_Syoku,808DD5D0
+ovl_En_Xc,808DDA30
+ovl_Bg_Hidan_Curtain,808E41C0
+ovl_Bg_Spot00_Hanebasi,808E4C60
+ovl_En_Mb,808E5D70
+ovl_En_Bombf,808E9F00
+ovl_Bg_Hidan_Firewall,808EB370
+ovl_Bg_Dy_Yoseizo,808EBAD0
+ovl_En_Zl2,808EE8D0
+ovl_Bg_Hidan_Fslift,808F3000
+ovl_En_OE2,808F34D0
+ovl_Bg_Ydan_Hasi,808F35B0
+ovl_Bg_Ydan_Maruta,808F3D60
+ovl_Boss_Ganondrof,808F4440
+ovl_En_Am,808F91B0
+ovl_En_Dekubaba,808FB5B0
+ovl_En_M_Fire1,808FF050
+ovl_En_M_Thunder,808FF1F0
+ovl_Bg_Ddan_Jd,809007E0
+ovl_Bg_Breakwall,80900E30
+ovl_En_Jj,80901CA0
+ovl_En_Horse_Zelda,80903270
+ovl_Bg_Ddan_Kd,80903D60
+ovl_Door_Warp1,80904650
+ovl_Obj_Syokudai,80908900
+ovl_Item_B_Heart,80909540
+ovl_En_Dekunuts,80909930
+ovl_Bg_Menkuri_Kaiten,8090B130
+ovl_Bg_Menkuri_Eye,8090B2C0
+ovl_En_Vali,8090B760
+ovl_Bg_Mizu_Movebg,8090DE00
+ovl_Bg_Mizu_Water,8090EFA0
+ovl_Arms_Hook,8090FC70
+ovl_En_fHG,809109D0
+ovl_Bg_Mori_Hineri,80913300
+ovl_En_Bb,80913FD0
+ovl_Bg_Toki_Hikari,80917CA0
+ovl_En_Yukabyun,80918A40
+ovl_Bg_Toki_Swd,80919050
+ovl_En_Fhg_Fire,8091A6A0
+ovl_Bg_Mjin,8091CCC0
+ovl_Bg_Hidan_Kousi,8091D0A0
+ovl_Door_Toki,8091D620
+ovl_Bg_Hidan_Hamstep,8091D780
+ovl_En_Bird,8091E610
+ovl_En_Wood02,8091EAD0
+ovl_En_Lightbox,8091FCB0
+ovl_En_Pu_box,80920130
+ovl_En_Trap,80920470
+ovl_En_Arow_Trap,80921710
+ovl_En_Vase,80921860
+ovl_En_Ta,80921960
+ovl_En_Tk,80925320
+ovl_Bg_Mori_Bigst,80927150
+ovl_Bg_Mori_Elevator,80927A80
+ovl_Bg_Mori_Kaitenkabe,80928570
+ovl_Bg_Mori_Rakkatenjo,80928BD0
+ovl_En_Vm,80929540
+ovl_Demo_Effect,8092ADF0
+ovl_Demo_Kankyo,809308F0
+ovl_Bg_Hidan_Fwbig,809345F0
+ovl_En_Floormas,809352D0
+ovl_En_Heishi1,809386B0
+ovl_En_Rd,80939BC0
+ovl_En_Po_Sisters,8093C470
+ovl_Bg_Heavy_Block,80941160
+ovl_Bg_Po_Event,80942A50
+ovl_Obj_Mure,80944890
+ovl_En_Sw,809458A0
+ovl_Boss_Fd,80949090
+ovl_Object_Kankyo,809503C0
+ovl_En_Du,809535E0
+ovl_En_Fd,80955080
+ovl_En_Horse_Link_Child,80957D40
+ovl_Door_Ana,80959B40
+ovl_Bg_Spot02_Objects,8095A1B0
+ovl_Bg_Haka,8095B500
+ovl_Magic_Wind,8095BBC0
+ovl_Magic_Fire,8095D8C0
+ovl_En_Ru1,8095FB90
+ovl_Boss_Fd2,80967230
+ovl_En_Fd_Fire,8096AF60
+ovl_En_Dh,8096BC70
+ovl_En_Dha,8096D740
+ovl_En_Rl,8096E730
+ovl_En_Encount1,8096F610
+ovl_Demo_Du,80970170
+ovl_Demo_Im,80973950
+ovl_Demo_Tre_Lgt,809778C0
+ovl_En_Fw,80977FD0
+ovl_Bg_Vb_Sima,80979780
+ovl_En_Vb_Ball,80979E90
+ovl_Bg_Haka_Megane,8097B030
+ovl_Bg_Haka_MeganeBG,8097B430
+ovl_Bg_Haka_Ship,8097BAF0
+ovl_Bg_Haka_Sgami,8097C530
+ovl_En_Heishi2,8097D150
+ovl_En_Encount2,8097F350
+ovl_En_Fire_Rock,80980580
+ovl_En_Brob,80981690
+ovl_Mir_Ray,80982780
+ovl_Bg_Spot09_Obj,80984040
+ovl_Bg_Spot18_Obj,80984550
+ovl_Boss_Va,80984E20
+ovl_Bg_Haka_Tubo,8099C010
+ovl_Bg_Haka_Trap,8099CA30
+ovl_Bg_Haka_Huta,8099E000
+ovl_Bg_Haka_Zou,8099EAA0
+ovl_Bg_Spot17_Funen,8099FC90
+ovl_En_Syateki_Itm,8099FEE0
+ovl_En_Syateki_Man,809A0C80
+ovl_En_Tana,809A1A40
+ovl_En_Nb,809A1CE0
+ovl_Boss_Mo,809A62B0
+ovl_En_Sb,809B6360
+ovl_En_Bigokuta,809B77A0
+ovl_En_Karebaba,809BA2B0
+ovl_Bg_Bdan_Objects,809BBBA0
+ovl_Demo_Sa,809BCE70
+ovl_Demo_Go,809BF990
+ovl_En_In,809C06F0
+ovl_En_Tr,809C3450
+ovl_Bg_Spot16_Bombstone,809C4D50
+ovl_Bg_Hidan_Kowarerukabe,809C6290
+ovl_Bg_Bombwall,809C7160
+ovl_En_Ru2,809C7A20
+ovl_Obj_Dekujr,809CA7A0
+ovl_Bg_Mizu_Uzu,809CADE0
+ovl_Bg_Spot06_Objects,809CAFB0
+ovl_Bg_Ice_Objects,809CC3C0
+ovl_Bg_Haka_Water,809CD300
+ovl_En_Ma2,809CDAE0
+ovl_En_Bom_Chu,809CEB40
+ovl_En_Horse_Game_Check,809D01E0
+ovl_Boss_Tw,809D12B0
+ovl_En_Rr,809E6DB0
+ovl_En_Ba,809E92E0
+ovl_En_Bx,809EB1B0
+ovl_En_Anubice,809EBCA0
+ovl_En_Anubice_Fire,809ECF50
+ovl_Bg_Mori_Hashigo,809EDD10
+ovl_Bg_Mori_Hashira4,809EE5D0
+ovl_Bg_Mori_Idomizu,809EEB60
+ovl_Bg_Spot16_Doughnut,809EF1A0
+ovl_Bg_Bdan_Switch,809EF750
+ovl_En_Ma1,809F0B80
+ovl_Boss_Ganon,809F1E60
+ovl_Boss_Sst,80A17C50
+ovl_En_Ny,80A241B0
+ovl_En_Fr,80A25AE0
+ovl_Item_Shield,80A28570
+ovl_Bg_Ice_Shelter,80A28F80
+ovl_En_Ice_Hono,80A2A1B0
+ovl_Item_Ocarina,80A2B3A0
+ovl_Magic_Dark,80A2BB70
+ovl_Demo_6K,80A2D3C0
+ovl_En_Anubice_Tag,80A300D0
+ovl_Bg_Haka_Gate,80A303A0
+ovl_Bg_Spot15_Saku,80A31430
+ovl_Bg_Jya_Goroiwa,80A31770
+ovl_Bg_Jya_Zurerukabe,80A31EF0
+ovl_Bg_Jya_Cobra,80A325A0
+ovl_Bg_Jya_Kanaami,80A342C0
+ovl_Fishing,80A34670
+ovl_Obj_Oshihiki,80A4F120
+ovl_Bg_Gate_Shutter,80A50BD0
+ovl_Eff_Dust,80A51050
+ovl_Bg_Spot01_Fusya,80A52430
+ovl_Bg_Spot01_Idohashira,80A526D0
+ovl_Bg_Spot01_Idomizu,80A532D0
+ovl_Bg_Po_Syokudai,80A535E0
+ovl_Bg_Ganon_Otyuka,80A53F30
+ovl_Bg_Spot15_Rrbox,80A56570
+ovl_Bg_Umajump,80A57350
+ovl_En_Insect,80A574E0
+ovl_En_Butte,80A59A00
+ovl_En_Fish,80A5AFD0
+ovl_Bg_Spot08_Iceblock,80A5D0E0
+ovl_Item_Etcetera,80A5E120
+ovl_Arrow_Fire,80A5E9F0
+ovl_Arrow_Ice,80A608B0
+ovl_Arrow_Light,80A62790
+ovl_Obj_Kibako,80A64680
+ovl_Obj_Tsubo,80A65380
+ovl_En_Wonder_Item,80A66370
+ovl_En_Ik,80A670A0
+ovl_Demo_Ik,80A6B6E0
+ovl_En_Skj,80A6CBF0
+ovl_En_Skjneedle,80A70530
+ovl_En_G_Switch,80A70840
+ovl_Demo_Ext,80A72070
+ovl_Demo_Shd,80A729B0
+ovl_En_Dns,80A74DC0
+ovl_Elf_Msg,80A76150
+ovl_En_Honotrap,80A76740
+ovl_En_Tubo_Trap,80A77C90
+ovl_Obj_Ice_Poly,80A78930
+ovl_Bg_Spot03_Taki,80A792E0
+ovl_Bg_Spot07_Taki,80A79BD0
+ovl_En_Fz,80A7A190
+ovl_En_Po_Relay,80A7C1A0
+ovl_Bg_Relay_Objects,80A7D8B0
+ovl_En_Diving_Game,80A7E060
+ovl_En_Kusa,80A7FA10
+ovl_Obj_Bean,80A80EF0
+ovl_Obj_Bombiwa,80A83680
+ovl_Obj_Switch,80A83BF0
+ovl_Obj_Elevator,80A859B0
+ovl_Obj_Lift,80A85D70
+ovl_Obj_Hsblock,80A86790
+ovl_En_Okarina_Tag,80A86D60
+ovl_En_Yabusame_Mark,80A88260
+ovl_En_Goroiwa,80A88930
+ovl_En_Ex_Ruppy,80A8ACF0
+ovl_En_Toryo,80A8BDB0
+ovl_En_Daiku,80A8CA40
+ovl_En_Nwc,80A8E180
+ovl_En_Blkobj,80A8EBC0
+ovl_Item_Inbox,80A8F120
+ovl_En_Ge1,80A8F280
+ovl_Obj_Blockstop,80A912B0
+ovl_En_Sda,80A91450
+ovl_En_Clear_Tag,80A92B50
+ovl_En_Niw_Lady,80A9E0F0
+ovl_En_Gm,80A9F9F0
+ovl_En_Ms,80AA0720
+ovl_En_Hs,80AA0E10
+ovl_Bg_Ingate,80AA19B0
+ovl_En_Kanban,80AA1D40
+ovl_En_Heishi3,80AA4E90
+ovl_En_Syateki_Niw,80AA5860
+ovl_En_Attack_Niw,80AA78F0
+ovl_Bg_Spot01_Idosoko,80AA8B50
+ovl_En_Sa,80AA8D60
+ovl_En_Wonder_Talk,80AAAFD0
+ovl_Bg_Gjyo_Bridge,80AAB660
+ovl_En_Ds,80AABB60
+ovl_En_Mk,80AAC780
+ovl_En_Bom_Bowl_Man,80AAD610
+ovl_En_Bom_Bowl_Pit,80AAEB50
+ovl_En_Owl,80AAF4C0
+ovl_En_Ishi,80AB3060
+ovl_Obj_Hana,80ABC1B0
+ovl_Obj_Lightswitch,80ABC4C0
+ovl_Obj_Mure2,80ABD8F0
+ovl_En_Go,80ABE310
+ovl_En_Fu,80AC2950
+ovl_En_Changer,80AC36A0
+ovl_Bg_Jya_Megami,80AC4080
+ovl_Bg_Jya_Lift,80AC5260
+ovl_Bg_Jya_Bigmirror,80AC57B0
+ovl_Bg_Jya_Bombchuiwa,80AC5FF0
+ovl_Bg_Jya_Amishutter,80AC6B20
+ovl_Bg_Jya_Bombiwa,80AC6EB0
+ovl_Bg_Spot18_Basket,80AC7470
+ovl_En_Ganon_Organ,80AC8460
+ovl_En_Siofuki,80ACF460
+ovl_En_Stream,80AD0210
+ovl_En_Mm,80AD07A0
+ovl_En_Ko,80AD1DC0
+ovl_En_Kz,80AD5F00
+ovl_En_Weather_Tag,80AD7410
+ovl_Bg_Sst_Floor,80AD8300
+ovl_En_Ani,80AD8860
+ovl_En_Ex_Item,80AD95D0
+ovl_Bg_Jya_Ironobj,80ADA740
+ovl_En_Js,80ADB4F0
+ovl_En_Jsjutan,80ADBEC0
+ovl_En_Cs,80AE17E0
+ovl_En_Md,80AE2A10
+ovl_En_Hy,80AE5080
+ovl_En_Ganon_Mant,80AE89C0
+ovl_En_Okarina_Effect,80AECBE0
+ovl_En_Mag,80AECF90
+ovl_Door_Gerudo,80AF1EA0
+ovl_Elf_Msg2,80AF2490
+ovl_Demo_Gt,80AF2900
+ovl_En_Po_Field,80AF7F00
+ovl_Efc_Erupc,80AFB970
+ovl_Bg_Zg,80AFC450
+ovl_En_Heishi4,80AFC8C0
+ovl_En_Zl3,80AFD7C0
+ovl_Boss_Ganon2,80B05610
+ovl_En_Kakasi,80B18420
+ovl_En_Takara_Man,80B19160
+ovl_Obj_Makeoshihiki,80B19A20
+ovl_Oceff_Spot,80B19EB0
+ovl_End_Title,80B1ADE0
+ovl_En_Torch,80B1EF10
+ovl_Demo_Ec,80B1F000
+ovl_Shot_Sun,80B22860
+ovl_En_Dy_Extra,80B22F20
+ovl_En_Wonder_Talk2,80B234A0
+ovl_En_Ge2,80B23B40
+ovl_Obj_Roomtimer,80B254E0
+ovl_En_Ssh,80B25730
+ovl_En_Sth,80B27D20
+ovl_Oceff_Wipe,80B2BDD0
+ovl_Effect_Ss_Dust,80B2CB20
+ovl_Effect_Ss_KiraKira,80B2D350
+ovl_Effect_Ss_Bomb,80B2D9C0
+ovl_Effect_Ss_Bomb2,80B2DDE0
+ovl_Effect_Ss_Blast,80B2E710
+ovl_Effect_Ss_G_Spk,80B2EAA0
+ovl_Effect_Ss_D_Fire,80B2F050
+ovl_Effect_Ss_Bubble,80B2F540
+ovl_Effect_Ss_G_Ripple,80B2F9C0
+ovl_Effect_Ss_G_Splash,80B2FF20
+ovl_Effect_Ss_G_Magma,80B303D0
+ovl_Effect_Ss_G_Fire,80B30630
+ovl_Effect_Ss_Lightning,80B308C0
+ovl_Effect_Ss_Dt_Bubble,80B30F90
+ovl_Effect_Ss_Hahen,80B31520
+ovl_Effect_Ss_Stick,80B31B60
+ovl_Effect_Ss_Sibuki,80B31F00
+ovl_Effect_Ss_Sibuki2,80B325D0
+ovl_Effect_Ss_G_Magma2,80B32900
+ovl_Effect_Ss_Stone1,80B32E10
+ovl_Effect_Ss_HitMark,80B331A0
+ovl_Effect_Ss_Fhg_Flash,80B336F0
+ovl_Effect_Ss_K_Fire,80B34670
+ovl_Effect_Ss_Solder_Srch_Ball,80B34AA0
+ovl_Effect_Ss_Kakera,80B34C50
+ovl_Effect_Ss_Ice_Piece,80B35CE0
+ovl_Effect_Ss_En_Ice,80B36120
+ovl_Effect_Ss_Fire_Tail,80B369E0
+ovl_Effect_Ss_En_Fire,80B370E0
+ovl_Effect_Ss_Extra,80B37820
+ovl_Effect_Ss_Fcircle,80B37BE0
+ovl_Effect_Ss_Dead_Db,80B38090
+ovl_Effect_Ss_Dead_Dd,80B38570
+ovl_Effect_Ss_Dead_Ds,80B38B00
+ovl_Effect_Ss_Dead_Sound,80B38F80
+ovl_Oceff_Storm,80B390C0
+ovl_En_Weiyer,80B3AC60
+ovl_Bg_Spot05_Soko,80B3C660
+ovl_Bg_Jya_1flift,80B3C980
+ovl_Bg_Jya_Haheniron,80B3D010
+ovl_Bg_Spot12_Gate,80B3D800
+ovl_Bg_Spot12_Saku,80B3DC10
+ovl_En_Hintnuts,80B3E0D0
+ovl_En_Nutsball,80B3FB00
+ovl_Bg_Spot00_Break,80B40120
+ovl_En_Shopnuts,80B402C0
+ovl_En_It,80B411D0
+ovl_En_GeldB,80B41360
+ovl_Oceff_Wipe2,80B46710
+ovl_Oceff_Wipe3,80B47E80
+ovl_En_Niw_Girl,80B495D0
+ovl_En_Dog,80B4A0A0
+ovl_En_Si,80B4B250
+ovl_Bg_Spot01_Objects2,80B4B750
+ovl_Obj_Comb,80B4BC10
+ovl_Bg_Spot11_Bakudankabe,80B4C470
+ovl_Obj_Kibako2,80B4CAB0
+ovl_En_Dnt_Demo,80B4D170
+ovl_En_Dnt_Jiji,80B4DE90
+ovl_En_Dnt_Nomal,80B4F3A0
+ovl_En_Guest,80B521A0
+ovl_Bg_Bom_Guard,80B52B40
+ovl_En_Hs2,80B52D60
+ovl_Demo_Kekkai,80B53340
+ovl_Bg_Spot08_Bakudankabe,80B54620
+ovl_Bg_Spot17_Bakudankabe,80B54CC0
+ovl_Obj_Mure3,80B553A0
+ovl_En_Tg,80B55B70
+ovl_En_Mu,80B56240
+ovl_En_Go2,80B56B60
+ovl_En_Wf,80B5CB80
+ovl_En_Skb,80B60E90
+ovl_Demo_Gj,80B62780
+ovl_Demo_Geff,80B66430
+ovl_Bg_Gnd_Firemeiro,80B66C50
+ovl_Bg_Gnd_Darkmeiro,80B67190
+ovl_Bg_Gnd_Soulmeiro,80B67950
+ovl_Bg_Gnd_Nisekabe,80B681B0
+ovl_Bg_Gnd_Iceblock,80B68320
+ovl_Bg_Ydan_Sp,80B69420
+ovl_En_Gb,80B6AB90
+ovl_En_Gs,80B6C2C0
+ovl_Bg_Mizu_Bwall,80B6E160
+ovl_Bg_Mizu_Shutter,80B6F630
+ovl_En_Daiku_Kakariko,80B6FE30
+ovl_Bg_Bowl_Wall,80B711F0
+ovl_En_Wall_Tubo,80B71B70
+ovl_En_Po_Desert,80B72060
+ovl_En_Crow,80B72E20
+ovl_Door_Killer,80B744C0
+ovl_Bg_Spot11_Oasis,80B75A30
+ovl_Bg_Spot18_Futa,80B76160
+ovl_Bg_Spot18_Shutter,80B76300
+ovl_En_Ma3,80B76850
+ovl_En_Cow,80B777C0
+ovl_Bg_Ice_Turara,80B78C20
+ovl_Bg_Ice_Shutter,80B79450
+ovl_En_Kakasi2,80B798C0
+ovl_En_Kakasi3,80B79FE0
+ovl_Oceff_Wipe4,80B7B0C0
+ovl_En_Eg,80B7C0A0
+ovl_Bg_Menkuri_Nisekabe,80B7C250
+ovl_En_Zo,80B7C3A0
+ovl_Effect_Ss_Ice_Smoke,80B7E950
+ovl_Obj_Makekinsuta,80B7EE10
+ovl_En_Ge3,80B7EF60
+ovl_Obj_Timeblock,80B7FAB0
+ovl_Obj_Hamishi,80B806F0
+ovl_En_Zl4,80B80F40
+ovl_En_Mm2,80B85970
+ovl_Bg_Jya_Block,80B86730
+ovl_Obj_Warp2block,80B869A0
+gameplay_keep,
+gameplay_field_keep,
+gameplay_dangeon_keep,
+gameplay_object_exchange_static,
+object_link_boy,
+object_link_child,
+object_box,
+object_human,
+object_okuta,
+object_poh,
+object_wallmaster,
+object_dy_obj,
+object_firefly,
+object_dodongo,
+object_fire,
+object_niw,
+object_tite,
+object_reeba,
+object_peehat,
+object_kingdodongo,
+object_horse,
+object_zf,
+object_goma,
+object_zl1,
+object_gol,
+object_bubble,
+object_dodojr,
+object_torch2,
+object_bl,
+object_tp,
+object_oA1,
+object_st,
+object_bw,
+object_ei,
+object_horse_normal,
+object_oB1,
+object_o_anime,
+object_spot04_objects,
+object_ddan_objects,
+object_hidan_objects,
+object_horse_ganon,
+object_oA2,
+object_spot00_objects,
+object_mb,
+object_bombf,
+object_sk2,
+object_oE1,
+object_oE_anime,
+object_oE2,
+object_ydan_objects,
+object_gnd,
+object_am,
+object_dekubaba,
+object_oA3,
+object_oA4,
+object_oA5,
+object_oA6,
+object_oA7,
+object_jj,
+object_oA8,
+object_oA9,
+object_oB2,
+object_oB3,
+object_oB4,
+object_horse_zelda,
+object_opening_demo1,
+object_warp1,
+object_b_heart,
+object_dekunuts,
+object_oE3,
+object_oE4,
+object_menkuri_objects,
+object_oE5,
+object_oE6,
+object_oE7,
+object_oE8,
+object_oE9,
+object_oE10,
+object_oE11,
+object_oE12,
+object_vali,
+object_oA10,
+object_oA11,
+object_mizu_objects,
+object_fhg,
+object_ossan,
+object_mori_hineri1,
+object_Bb,
+object_toki_objects,
+object_yukabyun,
+object_zl2,
+object_mjin,
+object_mjin_flash,
+object_mjin_dark,
+object_mjin_flame,
+object_mjin_ice,
+object_mjin_soul,
+object_mjin_wind,
+object_mjin_oka,
+object_haka_objects,
+object_spot06_objects,
+object_ice_objects,
+object_relay_objects,
+object_mori_hineri1a,
+object_mori_hineri2,
+object_mori_hineri2a,
+object_mori_objects,
+object_mori_tex,
+object_spot08_obj,
+object_warp2,
+object_hata,
+object_bird,
+object_wood02,
+object_lightbox,
+object_pu_box,
+object_trap,
+object_vase,
+object_im,
+object_ta,
+object_tk,
+object_xc,
+object_vm,
+object_bv,
+object_hakach_objects,
+object_efc_crystal_light,
+object_efc_fire_ball,
+object_efc_flash,
+object_efc_lgt_shower,
+object_efc_star_field,
+object_god_lgt,
+object_light_ring,
+object_triforce_spot,
+object_medal,
+object_bdan_objects,
+object_sd,
+object_rd,
+object_po_sisters,
+object_heavy_object,
+object_gndd,
+object_fd,
+object_du,
+object_fw,
+object_horse_link_child,
+object_spot02_objects,
+object_haka,
+object_ru1,
+object_syokudai,
+object_fd2,
+object_dh,
+object_rl,
+object_efc_tw,
+object_demo_tre_lgt,
+object_gi_key,
+object_mir_ray,
+object_brob,
+object_gi_jewel,
+object_spot09_obj,
+object_spot18_obj,
+object_bdoor,
+object_spot17_obj,
+object_shop_dungen,
+object_nb,
+object_mo,
+object_sb,
+object_gi_melody,
+object_gi_heart,
+object_gi_compass,
+object_gi_bosskey,
+object_gi_medal,
+object_gi_nuts,
+object_sa,
+object_gi_hearts,
+object_gi_arrowcase,
+object_gi_bombpouch,
+object_in,
+object_tr,
+object_spot16_obj,
+object_oE1s,
+object_oE4s,
+object_os_anime,
+object_gi_bottle,
+object_gi_stick,
+object_gi_map,
+object_oF1d_map,
+object_ru2,
+object_gi_shield_1,
+object_dekujr,
+object_gi_magicpot,
+object_gi_bomb_1,
+object_oF1s,
+object_ma2,
+object_gi_purse,
+object_hni,
+object_tw,
+object_rr,
+object_bxa,
+object_anubice,
+object_gi_gerudo,
+object_gi_arrow,
+object_gi_bomb_2,
+object_gi_egg,
+object_gi_scale,
+object_gi_shield_2,
+object_gi_hookshot,
+object_gi_ocarina,
+object_gi_milk,
+object_ma1,
+object_ganon,
+object_sst,
+object_ny,
+object_fr,
+object_gi_pachinko,
+object_gi_boomerang,
+object_gi_bow,
+object_gi_glasses,
+object_gi_liquid,
+object_ani,
+object_demo_6k,
+object_gi_shield_3,
+object_gi_letter,
+object_spot15_obj,
+object_jya_obj,
+object_gi_clothes,
+object_gi_bean,
+object_gi_fish,
+object_gi_saw,
+object_gi_hammer,
+object_gi_grass,
+object_gi_longsword,
+object_spot01_objects,
+object_md,
+object_km1,
+object_kw1,
+object_zo,
+object_kz,
+object_umajump,
+object_masterkokiri,
+object_masterkokirihead,
+object_mastergolon,
+object_masterzoora,
+object_aob,
+object_ik,
+object_ahg,
+object_cne,
+object_gi_niwatori,
+object_skj,
+object_gi_bottle_letter,
+object_bji,
+object_bba,
+object_gi_ocarina_0,
+object_ds,
+object_ane,
+object_boj,
+object_spot03_object,
+object_spot07_object,
+object_fz,
+object_bob,
+object_ge1,
+object_yabusame_point,
+object_gi_boots_2,
+object_gi_seed,
+object_gnd_magic,
+object_d_elevator,
+object_d_hsblock,
+object_d_lift,
+object_mamenoki,
+object_goroiwa,
+object_toryo,
+object_daiku,
+object_nwc,
+object_blkobj,
+object_gm,
+object_ms,
+object_hs,
+object_ingate,
+object_lightswitch,
+object_kusa,
+object_tsubo,
+object_gi_gloves,
+object_gi_coin,
+object_kanban,
+object_gjyo_objects,
+object_owl,
+object_mk,
+object_fu,
+object_gi_ki_tan_mask,
+object_gi_redead_mask,
+object_gi_skj_mask,
+object_gi_rabit_mask,
+object_gi_truth_mask,
+object_ganon_objects,
+object_siofuki,
+object_stream,
+object_mm,
+object_fa,
+object_os,
+object_gi_eye_lotion,
+object_gi_powder,
+object_gi_mushroom,
+object_gi_ticketstone,
+object_gi_brokensword,
+object_js,
+object_cs,
+object_gi_prescription,
+object_gi_bracelet,
+object_gi_soldout,
+object_gi_frog,
+object_mag,
+object_door_gerudo,
+object_gt,
+object_efc_erupc,
+object_zl2_anime1,
+object_zl2_anime2,
+object_gi_golonmask,
+object_gi_zoramask,
+object_gi_gerudomask,
+object_ganon2,
+object_ka,
+object_ts,
+object_zg,
+object_gi_hoverboots,
+object_gi_m_arrow,
+object_ds2,
+object_ec,
+object_fish,
+object_gi_sutaru,
+object_gi_goddess,
+object_ssh,
+object_bigokuta,
+object_bg,
+object_spot05_objects,
+object_spot12_obj,
+object_bombiwa,
+object_hintnuts,
+object_rs,
+object_spot00_break,
+object_gla,
+object_shopnuts,
+object_geldb,
+object_gr,
+object_dog,
+object_jya_iron,
+object_jya_door,
+object_spot01_objects2,
+object_spot11_obj,
+object_kibako2,
+object_dns,
+object_dnk,
+object_gi_fire,
+object_gi_insect,
+object_gi_butterfly,
+object_gi_ghost,
+object_gi_soul,
+object_bowl,
+object_po_field,
+object_demo_kekkai,
+object_efc_doughnut,
+object_gi_dekupouch,
+object_ganon_anime1,
+object_ganon_anime2,
+object_ganon_anime3,
+object_gi_rupy,
+object_spot01_matoya,
+object_spot01_matoyab,
+object_po_composer,
+object_mu,
+object_wf,
+object_skb,
+object_gj,
+object_geff,
+object_haka_door,
+object_gs,
+object_ps,
+object_bwall,
+object_crow,
+object_cow,
+object_cob,
+object_gi_sword_1,
+object_door_killer,
+object_ouke_haka,
+object_timeblock,
+object_zl4,
+g_pn_01,
+g_pn_02,
+g_pn_03,
+g_pn_04,
+g_pn_05,
+g_pn_06,
+g_pn_07,
+g_pn_08,
+g_pn_09,
+g_pn_10,
+g_pn_11,
+g_pn_12,
+g_pn_13,
+g_pn_14,
+g_pn_15,
+g_pn_16,
+g_pn_17,
+g_pn_18,
+g_pn_19,
+g_pn_20,
+g_pn_21,
+g_pn_22,
+g_pn_23,
+g_pn_24,
+g_pn_25,
+g_pn_26,
+g_pn_27,
+g_pn_28,
+g_pn_29,
+g_pn_30,
+g_pn_31,
+g_pn_32,
+g_pn_33,
+g_pn_34,
+g_pn_35,
+g_pn_36,
+g_pn_37,
+g_pn_38,
+g_pn_39,
+g_pn_40,
+g_pn_41,
+g_pn_42,
+g_pn_43,
+g_pn_44,
+g_pn_45,
+g_pn_46,
+g_pn_47,
+g_pn_48,
+g_pn_49,
+g_pn_50,
+g_pn_51,
+g_pn_52,
+g_pn_53,
+g_pn_54,
+g_pn_55,
+g_pn_56,
+g_pn_57,
+z_select_static,
+nintendo_rogo_static,
+title_static,
+parameter_static,
+vr_fine0_static,
+vr_fine0_pal_static,
+vr_fine1_static,
+vr_fine1_pal_static,
+vr_fine2_static,
+vr_fine2_pal_static,
+vr_fine3_static,
+vr_fine3_pal_static,
+vr_cloud0_static,
+vr_cloud0_pal_static,
+vr_cloud1_static,
+vr_cloud1_pal_static,
+vr_cloud2_static,
+vr_cloud2_pal_static,
+vr_cloud3_static,
+vr_cloud3_pal_static,
+vr_holy0_static,
+vr_holy0_pal_static,
+vr_holy1_static,
+vr_holy1_pal_static,
+vr_MDVR_static,
+vr_MDVR_pal_static,
+vr_MNVR_static,
+vr_MNVR_pal_static,
+vr_RUVR_static,
+vr_RUVR_pal_static,
+vr_LHVR_static,
+vr_LHVR_pal_static,
+vr_KHVR_static,
+vr_KHVR_pal_static,
+vr_K3VR_static,
+vr_K3VR_pal_static,
+vr_K4VR_static,
+vr_K4VR_pal_static,
+vr_K5VR_static,
+vr_K5VR_pal_static,
+vr_SP1a_static,
+vr_SP1a_pal_static,
+vr_MLVR_static,
+vr_MLVR_pal_static,
+vr_KKRVR_static,
+vr_KKRVR_pal_static,
+vr_KR3VR_static,
+vr_KR3VR_pal_static,
+vr_IPVR_static,
+vr_IPVR_pal_static,
+vr_KSVR_static,
+vr_KSVR_pal_static,
+vr_GLVR_static,
+vr_GLVR_pal_static,
+vr_ZRVR_static,
+vr_ZRVR_pal_static,
+vr_DGVR_static,
+vr_DGVR_pal_static,
+vr_ALVR_static,
+vr_ALVR_pal_static,
+vr_NSVR_static,
+vr_NSVR_pal_static,
+vr_LBVR_static,
+vr_LBVR_pal_static,
+vr_TTVR_static,
+vr_TTVR_pal_static,
+vr_FCVR_static,
+vr_FCVR_pal_static,
+elf_message_field,
+elf_message_ydan,
+ddan_scene,
+ddan_room_0,
+ddan_room_1,
+ddan_room_2,
+ddan_room_3,
+ddan_room_4,
+ddan_room_5,
+ddan_room_6,
+ddan_room_7,
+ddan_room_8,
+ddan_room_9,
+ddan_room_10,
+ddan_room_11,
+ddan_room_12,
+ddan_room_13,
+ddan_room_14,
+ddan_room_15,
+ddan_room_16,
+spot00_scene,
+spot00_room_0,
+spot01_scene,
+spot01_room_0,
+spot02_scene,
+spot02_room_0,
+spot02_room_1,
+spot03_scene,
+spot03_room_0,
+spot03_room_1,
+spot04_scene,
+spot04_room_0,
+spot04_room_1,
+spot04_room_2,
+spot05_scene,
+spot05_room_0,
+spot06_scene,
+spot06_room_0,
+spot07_scene,
+spot07_room_0,
+spot07_room_1,
+spot08_scene,
+spot08_room_0,
+spot09_scene,
+spot09_room_0,
+spot10_scene,
+spot10_room_0,
+spot10_room_1,
+spot10_room_2,
+spot10_room_3,
+spot10_room_4,
+spot10_room_5,
+spot10_room_6,
+spot10_room_7,
+spot10_room_8,
+spot10_room_9,
+spot11_scene,
+spot11_room_0,
+spot12_scene,
+spot12_room_0,
+spot12_room_1,
+spot13_scene,
+spot13_room_0,
+spot13_room_1,
+spot15_scene,
+spot15_room_0,
+spot16_scene,
+spot16_room_0,
+spot17_scene,
+spot17_room_0,
+spot17_room_1,
+spot18_scene,
+spot18_room_0,
+spot18_room_1,
+spot18_room_2,
+spot18_room_3,
+market_day_scene,
+market_day_room_0,
+market_night_scene,
+market_night_room_0,
+HIDAN_scene,
+HIDAN_room_0,
+HIDAN_room_1,
+HIDAN_room_2,
+HIDAN_room_3,
+HIDAN_room_4,
+HIDAN_room_5,
+HIDAN_room_6,
+HIDAN_room_7,
+HIDAN_room_8,
+HIDAN_room_9,
+HIDAN_room_10,
+HIDAN_room_11,
+HIDAN_room_12,
+HIDAN_room_13,
+HIDAN_room_14,
+HIDAN_room_15,
+HIDAN_room_16,
+HIDAN_room_17,
+HIDAN_room_18,
+HIDAN_room_19,
+HIDAN_room_20,
+HIDAN_room_21,
+HIDAN_room_22,
+HIDAN_room_23,
+HIDAN_room_24,
+HIDAN_room_25,
+HIDAN_room_26,
+Bmori1_scene,
+Bmori1_room_0,
+Bmori1_room_1,
+Bmori1_room_2,
+Bmori1_room_3,
+Bmori1_room_4,
+Bmori1_room_5,
+Bmori1_room_6,
+Bmori1_room_7,
+Bmori1_room_8,
+Bmori1_room_9,
+Bmori1_room_10,
+Bmori1_room_11,
+Bmori1_room_12,
+Bmori1_room_13,
+Bmori1_room_14,
+Bmori1_room_15,
+Bmori1_room_16,
+Bmori1_room_17,
+Bmori1_room_18,
+Bmori1_room_19,
+Bmori1_room_20,
+Bmori1_room_21,
+Bmori1_room_22,
+ydan_scene,
+ydan_room_0,
+ydan_room_1,
+ydan_room_2,
+ydan_room_3,
+ydan_room_4,
+ydan_room_5,
+ydan_room_6,
+ydan_room_7,
+ydan_room_8,
+ydan_room_9,
+ydan_room_10,
+ydan_room_11,
+kenjyanoma_scene,
+kenjyanoma_room_0,
+tokinoma_scene,
+tokinoma_room_0,
+tokinoma_room_1,
+link_home_scene,
+link_home_room_0,
+kokiri_shop_scene,
+kokiri_shop_room_0,
+MIZUsin_scene,
+MIZUsin_room_0,
+MIZUsin_room_1,
+MIZUsin_room_2,
+MIZUsin_room_3,
+MIZUsin_room_4,
+MIZUsin_room_5,
+MIZUsin_room_6,
+MIZUsin_room_7,
+MIZUsin_room_8,
+MIZUsin_room_9,
+MIZUsin_room_10,
+MIZUsin_room_11,
+MIZUsin_room_12,
+MIZUsin_room_13,
+MIZUsin_room_14,
+MIZUsin_room_15,
+MIZUsin_room_16,
+MIZUsin_room_17,
+MIZUsin_room_18,
+MIZUsin_room_19,
+MIZUsin_room_20,
+MIZUsin_room_21,
+MIZUsin_room_22,
+kokiri_home_scene,
+kokiri_home_room_0,
+kakusiana_scene,
+kakusiana_room_0,
+kakusiana_room_1,
+kakusiana_room_2,
+kakusiana_room_3,
+kakusiana_room_4,
+kakusiana_room_5,
+kakusiana_room_6,
+kakusiana_room_7,
+kakusiana_room_8,
+kakusiana_room_9,
+kakusiana_room_10,
+kakusiana_room_11,
+kakusiana_room_12,
+kakusiana_room_13,
+entra_scene,
+entra_room_0,
+bdan_scene,
+bdan_room_0,
+bdan_room_1,
+bdan_room_2,
+bdan_room_3,
+bdan_room_4,
+bdan_room_5,
+bdan_room_6,
+bdan_room_7,
+bdan_room_8,
+bdan_room_9,
+bdan_room_10,
+bdan_room_11,
+bdan_room_12,
+bdan_room_13,
+bdan_room_14,
+bdan_room_15,
+HAKAdan_scene,
+HAKAdan_room_0,
+HAKAdan_room_1,
+HAKAdan_room_2,
+HAKAdan_room_3,
+HAKAdan_room_4,
+HAKAdan_room_5,
+HAKAdan_room_6,
+HAKAdan_room_7,
+HAKAdan_room_8,
+HAKAdan_room_9,
+HAKAdan_room_10,
+HAKAdan_room_11,
+HAKAdan_room_12,
+HAKAdan_room_13,
+HAKAdan_room_14,
+HAKAdan_room_15,
+HAKAdan_room_16,
+HAKAdan_room_17,
+HAKAdan_room_18,
+HAKAdan_room_19,
+HAKAdan_room_20,
+HAKAdan_room_21,
+HAKAdan_room_22,
+moribossroom_scene,
+moribossroom_room_0,
+moribossroom_room_1,
+syatekijyou_scene,
+syatekijyou_room_0,
+men_scene,
+men_room_0,
+men_room_1,
+men_room_2,
+men_room_3,
+men_room_4,
+men_room_5,
+men_room_6,
+men_room_7,
+men_room_8,
+men_room_9,
+men_room_10,
+shop1_scene,
+shop1_room_0,
+hairal_niwa_scene,
+hairal_niwa_room_0,
+ganon_tou_scene,
+ganon_tou_room_0,
+market_alley_scene,
+market_alley_room_0,
+spot20_scene,
+spot20_room_0,
+market_ruins_scene,
+market_ruins_room_0,
+entra_n_scene,
+entra_n_room_0,
+enrui_scene,
+enrui_room_0,
+market_alley_n_scene,
+market_alley_n_room_0,
+hiral_demo_scene,
+hiral_demo_room_0,
+kokiri_home3_scene,
+kokiri_home3_room_0,
+jyasinzou_scene,
+jyasinzou_room_0,
+jyasinzou_room_1,
+jyasinzou_room_2,
+jyasinzou_room_3,
+jyasinzou_room_4,
+jyasinzou_room_5,
+jyasinzou_room_6,
+jyasinzou_room_7,
+jyasinzou_room_8,
+jyasinzou_room_9,
+jyasinzou_room_10,
+jyasinzou_room_11,
+jyasinzou_room_12,
+jyasinzou_room_13,
+jyasinzou_room_14,
+jyasinzou_room_15,
+jyasinzou_room_16,
+jyasinzou_room_17,
+jyasinzou_room_18,
+jyasinzou_room_19,
+jyasinzou_room_20,
+jyasinzou_room_21,
+jyasinzou_room_22,
+jyasinzou_room_23,
+jyasinzou_room_24,
+jyasinzou_room_25,
+jyasinzou_room_26,
+jyasinzou_room_27,
+jyasinzou_room_28,
+ice_doukutu_scene,
+ice_doukutu_room_0,
+ice_doukutu_room_1,
+ice_doukutu_room_2,
+ice_doukutu_room_3,
+ice_doukutu_room_4,
+ice_doukutu_room_5,
+ice_doukutu_room_6,
+ice_doukutu_room_7,
+ice_doukutu_room_8,
+ice_doukutu_room_9,
+ice_doukutu_room_10,
+ice_doukutu_room_11,
+malon_stable_scene,
+malon_stable_room_0,
+kakariko_scene,
+kakariko_room_0,
+bdan_boss_scene,
+bdan_boss_room_0,
+bdan_boss_room_1,
+FIRE_bs_scene,
+FIRE_bs_room_0,
+FIRE_bs_room_1,
+hut_scene,
+hut_room_0,
+daiyousei_izumi_scene,
+daiyousei_izumi_room_0,
+hakaana_scene,
+hakaana_room_0,
+yousei_izumi_tate_scene,
+yousei_izumi_tate_room_0,
+yousei_izumi_yoko_scene,
+yousei_izumi_yoko_room_0,
+golon_scene,
+golon_room_0,
+zoora_scene,
+zoora_room_0,
+drag_scene,
+drag_room_0,
+alley_shop_scene,
+alley_shop_room_0,
+night_shop_scene,
+night_shop_room_0,
+impa_scene,
+impa_room_0,
+labo_scene,
+labo_room_0,
+tent_scene,
+tent_room_0,
+nakaniwa_scene,
+nakaniwa_room_0,
+ddan_boss_scene,
+ddan_boss_room_0,
+ddan_boss_room_1,
+ydan_boss_scene,
+ydan_boss_room_0,
+ydan_boss_room_1,
+HAKAdan_bs_scene,
+HAKAdan_bs_room_0,
+HAKAdan_bs_room_1,
+MIZUsin_bs_scene,
+MIZUsin_bs_room_0,
+MIZUsin_bs_room_1,
+ganon_scene,
+ganon_room_0,
+ganon_room_1,
+ganon_room_2,
+ganon_room_3,
+ganon_room_4,
+ganon_room_5,
+ganon_room_6,
+ganon_room_7,
+ganon_room_8,
+ganon_room_9,
+ganon_boss_scene,
+ganon_boss_room_0,
+jyasinboss_scene,
+jyasinboss_room_0,
+jyasinboss_room_1,
+jyasinboss_room_2,
+jyasinboss_room_3,
+kokiri_home4_scene,
+kokiri_home4_room_0,
+kokiri_home5_scene,
+kokiri_home5_room_0,
+ganon_final_scene,
+ganon_final_room_0,
+kakariko3_scene,
+kakariko3_room_0,
+hakasitarelay_scene,
+hakasitarelay_room_0,
+hakasitarelay_room_1,
+hakasitarelay_room_2,
+hakasitarelay_room_3,
+hakasitarelay_room_4,
+hakasitarelay_room_5,
+hakasitarelay_room_6,
+shrine_scene,
+shrine_room_0,
+turibori_scene,
+turibori_room_0,
+shrine_n_scene,
+shrine_n_room_0,
+shrine_r_scene,
+shrine_r_room_0,
+ganontika_scene,
+ganontika_room_0,
+ganontika_room_1,
+ganontika_room_2,
+ganontika_room_3,
+ganontika_room_4,
+ganontika_room_5,
+ganontika_room_6,
+ganontika_room_7,
+ganontika_room_8,
+ganontika_room_9,
+ganontika_room_10,
+ganontika_room_11,
+ganontika_room_12,
+ganontika_room_13,
+ganontika_room_14,
+ganontika_room_15,
+ganontika_room_16,
+ganontika_room_17,
+ganontika_room_18,
+ganontika_room_19,
+hakaana2_scene,
+hakaana2_room_0,
+gerudoway_scene,
+gerudoway_room_0,
+gerudoway_room_1,
+gerudoway_room_2,
+gerudoway_room_3,
+gerudoway_room_4,
+gerudoway_room_5,
+HAKAdanCH_scene,
+HAKAdanCH_room_0,
+HAKAdanCH_room_1,
+HAKAdanCH_room_2,
+HAKAdanCH_room_3,
+HAKAdanCH_room_4,
+HAKAdanCH_room_5,
+HAKAdanCH_room_6,
+hairal_niwa_n_scene,
+hairal_niwa_n_room_0,
+bowling_scene,
+bowling_room_0,
+hakaana_ouke_scene,
+hakaana_ouke_room_0,
+hakaana_ouke_room_1,
+hakaana_ouke_room_2,
+hylia_labo_scene,
+hylia_labo_room_0,
+souko_scene,
+souko_room_0,
+souko_room_1,
+souko_room_2,
+miharigoya_scene,
+miharigoya_room_0,
+mahouya_scene,
+mahouya_room_0,
+takaraya_scene,
+takaraya_room_0,
+takaraya_room_1,
+takaraya_room_2,
+takaraya_room_3,
+takaraya_room_4,
+takaraya_room_5,
+takaraya_room_6,
+ganon_sonogo_scene,
+ganon_sonogo_room_0,
+ganon_sonogo_room_1,
+ganon_sonogo_room_2,
+ganon_sonogo_room_3,
+ganon_sonogo_room_4,
+ganon_demo_scene,
+ganon_demo_room_0,
+face_shop_scene,
+face_shop_room_0,
+kinsuta_scene,
+kinsuta_room_0,
+ganontikasonogo_scene,
+ganontikasonogo_room_0,
+ganontikasonogo_room_1,
+bump_texture_static,
+anime_model_1_static,
+anime_model_2_static,
+anime_model_3_static,
+anime_model_4_static,
+anime_model_5_static,
+anime_model_6_static,
+anime_texture_1_static,
+anime_texture_2_static,
+anime_texture_3_static,
+anime_texture_4_static,
+anime_texture_5_static,
+anime_texture_6_static,
+softsprite_matrix_static,
diff --git a/baseroms/ntsc-1.2/config.yml b/baseroms/ntsc-1.2/config.yml
index 9dc77744df..f9293586f9 100644
--- a/baseroms/ntsc-1.2/config.yml
+++ b/baseroms/ntsc-1.2/config.yml
@@ -978,7 +978,7 @@ assets:
- name: scenes/dungeons/ddan
xml_path: assets/xml/scenes/dungeons/ddan.xml
- name: scenes/dungeons/ddan_boss
- xml_path: assets/xml/scenes/dungeons/ddan_boss.xml
+ xml_path: assets/xml/scenes/dungeons/ddan_boss_v2.xml
- name: scenes/dungeons/FIRE_bs
xml_path: assets/xml/scenes/dungeons/FIRE_bs.xml
- name: scenes/dungeons/ganon
@@ -1006,7 +1006,7 @@ assets:
- name: scenes/dungeons/HIDAN
xml_path: assets/xml/scenes/dungeons/HIDAN.xml
- name: scenes/dungeons/ice_doukutu
- xml_path: assets/xml/scenes/dungeons/ice_doukutu.xml
+ xml_path: assets/xml/scenes/dungeons/ice_doukutu_v2.xml
- name: scenes/dungeons/jyasinboss
xml_path: assets/xml/scenes/dungeons/jyasinboss.xml
- name: scenes/dungeons/jyasinzou
@@ -1148,7 +1148,7 @@ assets:
- name: scenes/overworld/spot15
xml_path: assets/xml/scenes/overworld/spot15.xml
- name: scenes/overworld/spot16
- xml_path: assets/xml/scenes/overworld/spot16.xml
+ xml_path: assets/xml/scenes/overworld/spot16_v2.xml
- name: scenes/overworld/spot17
xml_path: assets/xml/scenes/overworld/spot17.xml
- name: scenes/overworld/spot18
@@ -1208,7 +1208,7 @@ assets:
- name: textures/nes_font_static
xml_path: assets/xml/textures/nes_font_static.xml
- name: textures/nintendo_rogo_static
- xml_path: assets/xml/textures/nintendo_rogo_static.xml
+ xml_path: assets/xml/textures/nintendo_rogo_static_v2.xml
- name: textures/parameter_static
xml_path: assets/xml/textures/parameter_static.xml
- name: textures/place_title_cards
diff --git a/baseroms/pal-1.0/config.yml b/baseroms/pal-1.0/config.yml
index a6f882ab10..1a80071bbb 100644
--- a/baseroms/pal-1.0/config.yml
+++ b/baseroms/pal-1.0/config.yml
@@ -984,7 +984,7 @@ assets:
- name: scenes/dungeons/ddan
xml_path: assets/xml/scenes/dungeons/ddan.xml
- name: scenes/dungeons/ddan_boss
- xml_path: assets/xml/scenes/dungeons/ddan_boss.xml
+ xml_path: assets/xml/scenes/dungeons/ddan_boss_v2.xml
- name: scenes/dungeons/FIRE_bs
xml_path: assets/xml/scenes/dungeons/FIRE_bs.xml
- name: scenes/dungeons/ganon
@@ -1214,7 +1214,7 @@ assets:
- name: textures/nes_font_static
xml_path: assets/xml/textures/nes_font_static.xml
- name: textures/nintendo_rogo_static
- xml_path: assets/xml/textures/nintendo_rogo_static.xml
+ xml_path: assets/xml/textures/nintendo_rogo_static_v2.xml
- name: textures/parameter_static
xml_path: assets/xml/textures/parameter_static.xml
- name: textures/place_title_cards
diff --git a/baseroms/pal-1.1/config.yml b/baseroms/pal-1.1/config.yml
index 7dc75e5306..57f037b350 100644
--- a/baseroms/pal-1.1/config.yml
+++ b/baseroms/pal-1.1/config.yml
@@ -984,7 +984,7 @@ assets:
- name: scenes/dungeons/ddan
xml_path: assets/xml/scenes/dungeons/ddan.xml
- name: scenes/dungeons/ddan_boss
- xml_path: assets/xml/scenes/dungeons/ddan_boss.xml
+ xml_path: assets/xml/scenes/dungeons/ddan_boss_v2.xml
- name: scenes/dungeons/FIRE_bs
xml_path: assets/xml/scenes/dungeons/FIRE_bs.xml
- name: scenes/dungeons/ganon
@@ -1214,7 +1214,7 @@ assets:
- name: textures/nes_font_static
xml_path: assets/xml/textures/nes_font_static.xml
- name: textures/nintendo_rogo_static
- xml_path: assets/xml/textures/nintendo_rogo_static.xml
+ xml_path: assets/xml/textures/nintendo_rogo_static_v2.xml
- name: textures/parameter_static
xml_path: assets/xml/textures/parameter_static.xml
- name: textures/place_title_cards
diff --git a/include/audio/aseq.h b/include/audio/aseq.h
index 1c66a3a2c3..ac600738b0 100644
--- a/include/audio/aseq.h
+++ b/include/audio/aseq.h
@@ -52,6 +52,8 @@
#ifndef ASEQ_H
#define ASEQ_H
+#include "versions.h"
+
/**
* IO Ports
*/
diff --git a/include/macros.h b/include/macros.h
index dc317c22bf..744fd51cb0 100644
--- a/include/macros.h
+++ b/include/macros.h
@@ -18,6 +18,7 @@
#define ARRAY_COUNT(arr) (s32)(sizeof(arr) / sizeof(arr[0]))
#define ARRAY_COUNTU(arr) (u32)(sizeof(arr) / sizeof(arr[0]))
+#define ARRAY_COUNT_2D(arr) (s32)(sizeof(arr) / sizeof(arr[0][0]))
#define PHYSICAL_TO_VIRTUAL(addr) (void*)((uintptr_t)(addr) + 0x80000000)
#define VIRTUAL_TO_PHYSICAL(addr) (uintptr_t)((u8*)(addr) - 0x80000000)
diff --git a/include/regs.h b/include/regs.h
index 61f1ad6426..335861f25d 100644
--- a/include/regs.h
+++ b/include/regs.h
@@ -48,6 +48,7 @@
#define R_ENV_Z_FAR REG(13)
#define R_ENV_FOG_NEAR REG(14)
#define R_ENV_TIME_SPEED_OLD REG(15) // Most likely used during development. Unused in the final game.
+#define R_DECELERATE_RATE REG(43)
#define R_RUN_SPEED_LIMIT REG(45)
#define R_ENABLE_ARENA_DBG SREG(0)
#define R_AUDIOMGR_DEBUG_LEVEL SREG(20)
diff --git a/include/sequence.h b/include/sequence.h
index c895cd980e..d405e32362 100644
--- a/include/sequence.h
+++ b/include/sequence.h
@@ -2,6 +2,7 @@
#define SEQUENCE_H
#include "ultra64.h"
+#include "versions.h"
#define DEFINE_SEQUENCE(_0, seqId, _2, _3, _4) seqId,
#define DEFINE_SEQUENCE_PTR(_0, seqId, _2, _3, _4) seqId,
diff --git a/include/sfx.h b/include/sfx.h
index a55ca01885..4d90cf5a6a 100644
--- a/include/sfx.h
+++ b/include/sfx.h
@@ -2,6 +2,7 @@
#define SFX_H
#include "ultra64.h"
+#include "versions.h"
#include "z64math.h"
typedef enum SfxBankType {
diff --git a/include/tables/sequence_table.h b/include/tables/sequence_table.h
index d813cfb0da..3e8f13e5f9 100644
--- a/include/tables/sequence_table.h
+++ b/include/tables/sequence_table.h
@@ -15,10 +15,10 @@
* - Argument 3: Cache load policy for the sequence (AudioCacheLoadType)
* - Argument 4: Sequence flags
*/
-#if PLATFORM_N64
-#define SEQ_0_FLAGS SEQ_FLAG_FANFARE | SEQ_FLAG_ENEMY
-#else
+#if OOT_VERSION < PAL_1_0 || PLATFORM_GC
#define SEQ_0_FLAGS SEQ_FLAG_FANFARE
+#else
+#define SEQ_0_FLAGS SEQ_FLAG_FANFARE | SEQ_FLAG_ENEMY
#endif
DEFINE_SEQUENCE (Sequence_0, NA_BGM_GENERAL_SFX, MEDIUM_CART, CACHE_LOAD_PERMANENT, SEQ_0_FLAGS ) // general_sfx
DEFINE_SEQUENCE (Sequence_1, NA_BGM_NATURE_AMBIENCE, MEDIUM_CART, CACHE_LOAD_TEMPORARY, SEQ_FLAG_ENEMY ) // nature_ambience
diff --git a/include/tables/sfx/enemybank_table.h b/include/tables/sfx/enemybank_table.h
index ae2c3b7148..de741033e8 100644
--- a/include/tables/sfx/enemybank_table.h
+++ b/include/tables/sfx/enemybank_table.h
@@ -334,10 +334,10 @@
/* 0x3942 */ DEFINE_SFX(CHAN_4EA8, NA_SE_EN_BALINADE_THUNDER, 0x34, 3, 0, 0)
/* 0x3943 */ DEFINE_SFX(CHAN_415D, NA_SE_EN_BALINADE_BL_SPARK, 0x20, 2, 0, 0)
/* 0x3944 */ DEFINE_SFX(CHAN_4184, NA_SE_EN_BALINADE_BL_DEAD, 0x34, 3, 0, 0)
-#if PLATFORM_N64
-/* 0x3945 */ DEFINE_SFX(CHAN_4E86, NA_SE_EN_BALINADE_BREAK2, 0x34, 3, 0, 0)
-#else
+#if OOT_VERSION < PAL_1_0 || PLATFORM_GC
/* 0x3945 */ DEFINE_SFX(CHAN_4E86, NA_SE_EN_BALINADE_BREAK2, 0x30, 3, 0, 0)
+#else
+/* 0x3945 */ DEFINE_SFX(CHAN_4E86, NA_SE_EN_BALINADE_BREAK2, 0x34, 3, 0, 0)
#endif
/* 0x3946 */ DEFINE_SFX(CHAN_425D, NA_SE_EN_BALINADE_HIT_RINK, 0x38, 3, 0, 0)
/* 0x3947 */ DEFINE_SFX(CHAN_3AF4, NA_SE_EN_GANON_WAVE_GND, 0x20, 3, 0, 0)
diff --git a/include/tables/sfx/environmentbank_table.h b/include/tables/sfx/environmentbank_table.h
index 08bd08de7e..a2ecf23c0d 100644
--- a/include/tables/sfx/environmentbank_table.h
+++ b/include/tables/sfx/environmentbank_table.h
@@ -43,10 +43,10 @@
/* 0x281F */ DEFINE_SFX(CHAN_1B61, NA_SE_EV_TBOX_UNLOCK, 0x30, 0, 0, 0)
/* 0x2820 */ DEFINE_SFX(CHAN_1B7D, NA_SE_EV_TBOX_OPEN, 0x30, 0, 0, 0)
/* 0x2821 */ DEFINE_SFX(CHAN_1B93, NA_SE_SY_TIMER, 0xA0, 0, 0, SFX_FLAG_13 | SFX_FLAG_3)
-#if PLATFORM_N64
-/* 0x2822 */ DEFINE_SFX(CHAN_1BE9, NA_SE_EV_FLAME_IGNITION, 0x2D, 2, 0, 0)
-#else
+#if OOT_VERSION < PAL_1_0 || PLATFORM_GC
/* 0x2822 */ DEFINE_SFX(CHAN_1BE9, NA_SE_EV_FLAME_IGNITION, 0x20, 2, 0, 0)
+#else
+/* 0x2822 */ DEFINE_SFX(CHAN_1BE9, NA_SE_EV_FLAME_IGNITION, 0x2D, 2, 0, 0)
#endif
/* 0x2823 */ DEFINE_SFX(CHAN_1BF9, NA_SE_EV_SPEAR_HIT, 0x30, 0, 0, 0)
/* 0x2824 */ DEFINE_SFX(CHAN_1C14, NA_SE_EV_ELEVATOR_MOVE, 0x30, 0, 0, SFX_FLAG_11)
@@ -108,10 +108,10 @@
/* 0x285C */ DEFINE_SFX(CHAN_2374, NA_SE_EV_BLOCKSINK, 0x30, 2, 0, 0)
/* 0x285D */ DEFINE_SFX(CHAN_2389, NA_SE_EV_CROWD, 0x30, 0, 0, SFX_FLAG_13 | SFX_FLAG_12 | SFX_FLAG_11)
/* 0x285E */ DEFINE_SFX(CHAN_23A6, NA_SE_EV_WATER_LEVEL_DOWN, 0x30, 0, 0, 0)
-#if PLATFORM_N64
-/* 0x285F */ DEFINE_SFX(CHAN_23D5, NA_SE_EV_NAVY_VANISH, 0x2C, 0, 0, 0)
-#else
+#if OOT_VERSION < PAL_1_0 || PLATFORM_GC
/* 0x285F */ DEFINE_SFX(CHAN_23D5, NA_SE_EV_NAVY_VANISH, 0x30, 0, 0, 0)
+#else
+/* 0x285F */ DEFINE_SFX(CHAN_23D5, NA_SE_EV_NAVY_VANISH, 0x2C, 0, 0, 0)
#endif
/* 0x2860 */ DEFINE_SFX(CHAN_23EB, NA_SE_EV_LADDER_DOUND, 0x30, 3, 0, 0)
/* 0x2861 */ DEFINE_SFX(CHAN_2401, NA_SE_EV_WEB_VIBRATION, 0x30, 0, 0, 0)
diff --git a/include/tables/sfx/itembank_table.h b/include/tables/sfx/itembank_table.h
index 53f2ffadb2..ed2001a557 100644
--- a/include/tables/sfx/itembank_table.h
+++ b/include/tables/sfx/itembank_table.h
@@ -28,10 +28,10 @@
/* 0x1810 */ DEFINE_SFX(CHAN_10A2, NA_SE_IT_BOOMERANG_FLY, 0x30, 0, 0, SFX_FLAG_10)
/* 0x1811 */ DEFINE_SFX(CHAN_10D2, NA_SE_IT_SWORD_STRIKE, 0x40, 2, 0, 0)
/* 0x1812 */ DEFINE_SFX(CHAN_10E6, NA_SE_IT_HAMMER_SWING, 0x30, 0, 1, 0)
-#if PLATFORM_N64
-/* 0x1813 */ DEFINE_SFX(CHAN_10F4, NA_SE_IT_HOOKSHOT_REFLECT, 0x20, 0, 0, 0)
-#else
+#if OOT_VERSION < PAL_1_0 || PLATFORM_GC
/* 0x1813 */ DEFINE_SFX(CHAN_10F4, NA_SE_IT_HOOKSHOT_REFLECT, 0x30, 0, 0, 0)
+#else
+/* 0x1813 */ DEFINE_SFX(CHAN_10F4, NA_SE_IT_HOOKSHOT_REFLECT, 0x20, 0, 0, 0)
#endif
/* 0x1814 */ DEFINE_SFX(CHAN_110B, NA_SE_IT_ARROW_STICK_CRE, 0x30, 0, 0, 0)
/* 0x1815 */ DEFINE_SFX(CHAN_1120, NA_SE_IT_ARROW_STICK_OBJ, 0x34, 0, 0, 0)
diff --git a/include/z64.h b/include/z64.h
index d52d459de3..5779205b38 100644
--- a/include/z64.h
+++ b/include/z64.h
@@ -389,10 +389,12 @@ ALIGNED(4) typedef struct PreNmiBuff {
} PreNmiBuff; // size = 0x18 (actually osAppNMIBuffer is 0x40 bytes large but the rest is unused)
typedef enum ViModeEditState {
- /* 0 */ VI_MODE_EDIT_STATE_INACTIVE,
- /* 1 */ VI_MODE_EDIT_STATE_ACTIVE,
- /* 2 */ VI_MODE_EDIT_STATE_2, // active, more adjustments
- /* 3 */ VI_MODE_EDIT_STATE_3 // active, more adjustments, print comparison with NTSC LAN1 mode
+ /* -2 */ VI_MODE_EDIT_STATE_NEGATIVE_2 = -2,
+ /* -1 */ VI_MODE_EDIT_STATE_NEGATIVE_1,
+ /* 0 */ VI_MODE_EDIT_STATE_INACTIVE,
+ /* 1 */ VI_MODE_EDIT_STATE_ACTIVE,
+ /* 2 */ VI_MODE_EDIT_STATE_2, // active, more adjustments
+ /* 3 */ VI_MODE_EDIT_STATE_3 // active, more adjustments, print comparison with NTSC LAN1 mode
} ViModeEditState;
typedef struct ViMode {
diff --git a/include/z64player.h b/include/z64player.h
index 9b92a5fce1..a12f3022cb 100644
--- a/include/z64player.h
+++ b/include/z64player.h
@@ -70,6 +70,12 @@ typedef enum PlayerEnvHazard {
/* 0x4 */ PLAYER_ENV_HAZARD_UNDERWATER_FREE
} PlayerEnvHazard;
+typedef enum PlayerIdleType {
+ /* -0x1 */ PLAYER_IDLE_CRIT_HEALTH = -1,
+ /* 0x0 */ PLAYER_IDLE_DEFAULT,
+ /* 0x1 */ PLAYER_IDLE_FIDGET
+} PlayerIdleType;
+
typedef enum PlayerItemAction {
/* 0x00 */ PLAYER_IA_NONE,
/* 0x01 */ PLAYER_IA_SWORD_CS, // Hold sword without shield in hand. The sword is not usable.
@@ -669,7 +675,7 @@ typedef struct WeaponInfo {
#define PLAYER_STATE1_3 (1 << 3)
#define PLAYER_STATE1_HOSTILE_LOCK_ON (1 << 4) // Currently locked onto a hostile actor. Triggers a "battle" variant of many actions.
#define PLAYER_STATE1_5 (1 << 5)
-#define PLAYER_STATE1_6 (1 << 6)
+#define PLAYER_STATE1_TALKING (1 << 6) // Currently talking to an actor. This includes item exchanges.
#define PLAYER_STATE1_DEAD (1 << 7) // Player has died. Note that this gets set when the death cutscene has started, after landing from the air.
#define PLAYER_STATE1_START_CHANGING_HELD_ITEM (1 << 8) // Item change process has begun
#define PLAYER_STATE1_9 (1 << 9)
@@ -724,7 +730,7 @@ typedef struct WeaponInfo {
#define PLAYER_STATE2_25 (1 << 25)
#define PLAYER_STATE2_26 (1 << 26)
#define PLAYER_STATE2_27 (1 << 27)
-#define PLAYER_STATE2_28 (1 << 28)
+#define PLAYER_STATE2_IDLE_FIDGET (1 << 28) // Playing a fidget idle animation (under typical circumstances, see `Player_ChooseNextIdleAnim` for more info)
#define PLAYER_STATE2_29 (1 << 29)
#define PLAYER_STATE2_30 (1 << 30)
#define PLAYER_STATE2_31 (1 << 31)
@@ -742,6 +748,16 @@ typedef void (*PlayerActionFunc)(struct Player*, struct PlayState*);
typedef s32 (*UpperActionFunc)(struct Player*, struct PlayState*);
typedef void (*AfterPutAwayFunc)(struct PlayState*, struct Player*);
+#define UNK6AE_ROT_FOCUS_X (1 << 0)
+#define UNK6AE_ROT_FOCUS_Y (1 << 1)
+#define UNK6AE_ROT_FOCUS_Z (1 << 2)
+#define UNK6AE_ROT_HEAD_X (1 << 3)
+#define UNK6AE_ROT_HEAD_Y (1 << 4)
+#define UNK6AE_ROT_HEAD_Z (1 << 5)
+#define UNK6AE_ROT_UPPER_X (1 << 6)
+#define UNK6AE_ROT_UPPER_Y (1 << 7)
+#define UNK6AE_ROT_UPPER_Z (1 << 8)
+
typedef struct Player {
/* 0x0000 */ Actor actor;
/* 0x014C */ s8 currentTunic; // current tunic from `PlayerTunic`
@@ -830,17 +846,13 @@ typedef struct Player {
/* 0x06A0 */ f32 unk_6A0;
/* 0x06A4 */ f32 closestSecretDistSq;
/* 0x06A8 */ Actor* unk_6A8;
- /* 0x06AC */ s8 unk_6AC;
+ /* 0x06AC */ s8 idleType;
/* 0x06AD */ u8 unk_6AD;
- /* 0x06AE */ u16 unk_6AE;
- /* 0x06B0 */ s16 unk_6B0;
+ /* 0x06AE */ u16 unk_6AE_rotFlags; // See `UNK6AE_ROT_` macros. If its flag isn't set, a rot steps to 0.
+ /* 0x06B0 */ s16 upperLimbYawSecondary;
/* 0x06B2 */ char unk_6B4[0x004];
- /* 0x06B6 */ s16 unk_6B6;
- /* 0x06B8 */ s16 unk_6B8;
- /* 0x06BA */ s16 unk_6BA;
- /* 0x06BC */ s16 unk_6BC;
- /* 0x06BE */ s16 unk_6BE;
- /* 0x06C0 */ s16 unk_6C0;
+ /* 0x06B6 */ Vec3s headLimbRot;
+ /* 0x06BC */ Vec3s upperLimbRot;
/* 0x06C2 */ s16 unk_6C2;
/* 0x06C4 */ f32 unk_6C4;
/* 0x06C8 */ SkelAnime upperSkelAnime;
@@ -870,6 +882,7 @@ typedef struct Player {
/* 0x0850 */ union {
s16 actionVar2;
+ s16 fallDamageStunTimer; // Player_Action_Idle: Prevents any movement and shakes model up and down quickly to indicate fall damage stun
s16 bonked; // Player_Action_Roll: set to true after bonking into a wall or an actor
s16 startedTextbox; // Player_Action_SwingBottle: set to true when the textbox is started
s16 useWaterBottleSwingAnimations; // Player_Action_SwingBottle: used to determine which bottle swing animation to use
@@ -893,7 +906,7 @@ typedef struct Player {
/* 0x0888 */ f32 distToInteractWall; // xyz distance to the interact wall
/* 0x088C */ u8 ledgeClimbType;
/* 0x088D */ u8 ledgeClimbDelayTimer;
- /* 0x088E */ u8 unk_88E;
+ /* 0x088E */ u8 textboxBtnCooldownTimer; // Prevents usage of A/B/C-up when counting down
/* 0x088F */ u8 damageFlickerAnimCounter; // Used to flicker Link after taking damage
/* 0x0890 */ u8 unk_890;
/* 0x0891 */ u8 bodyShockTimer;
diff --git a/src/audio/general.c b/src/audio/general.c
index e75b0361bc..090a727a42 100644
--- a/src/audio/general.c
+++ b/src/audio/general.c
@@ -1188,7 +1188,7 @@ u8 D_8016B9F3;
u8 sFanfareStartTimer;
u16 sFanfareSeqId;
-#if PLATFORM_N64
+#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
u16 sPrevAmbienceSeqId;
#endif
@@ -1706,7 +1706,7 @@ void AudioOcarina_PlayControllerInput(u8 unused) {
} else {
// no bending or vibrato for recording state OCARINA_RECORD_SCARECROW_SPAWN
sCurOcarinaBendIndex = 0;
-#if PLATFORM_N64
+#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
sCurOcarinaVibrato = 0;
#endif
sCurOcarinaBendFreq = 1.0f; // No bend
@@ -1852,18 +1852,17 @@ void AudioOcarina_PlaybackSong(void) {
sRelativeNotePlaybackVolume = sNotePlaybackVolume / 127.0f;
}
-#if PLATFORM_N64
- // Update vibrato
- sNotePlaybackVibrato = sPlaybackSong[sPlaybackNotePos].vibrato;
- // Sets vibrato to io port 6
- AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, SFX_CHANNEL_OCARINA, 6, sNotePlaybackVibrato);
-#else
// Update vibrato
+#if OOT_VERSION < PAL_1_0 || PLATFORM_GC
if (sNotePlaybackVibrato != sPlaybackSong[sPlaybackNotePos].vibrato) {
sNotePlaybackVibrato = sPlaybackSong[sPlaybackNotePos].vibrato;
// Sets vibrato to io port 6
AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, SFX_CHANNEL_OCARINA, 6, sNotePlaybackVibrato);
}
+#else
+ sNotePlaybackVibrato = sPlaybackSong[sPlaybackNotePos].vibrato;
+ // Sets vibrato to io port 6
+ AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, SFX_CHANNEL_OCARINA, 6, sNotePlaybackVibrato);
#endif
// Update bend
@@ -2145,7 +2144,7 @@ void AudioOcarina_RecordSong(void) {
} else if (sRecordOcarinaVolume != sCurOcarinaVolume) {
noteChanged = true;
} else if (sRecordOcarinaVibrato != sCurOcarinaVibrato) {
-#if PLATFORM_N64
+#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
if (sRecordingState != OCARINA_RECORD_SCARECROW_SPAWN) {
noteChanged = true;
}
@@ -2153,7 +2152,7 @@ void AudioOcarina_RecordSong(void) {
noteChanged = true;
#endif
} else if (sRecordOcarinaBendIndex != sCurOcarinaBendIndex) {
-#if PLATFORM_N64
+#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
if (sRecordingState != OCARINA_RECORD_SCARECROW_SPAWN) {
noteChanged = true;
}
@@ -2494,7 +2493,7 @@ f32 Audio_ComputeSfxFreqScale(u8 bankId, u8 entryIdx) {
switch (bankId) {
case BANK_VOICE:
-#if PLATFORM_N64
+#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
if (((entry->sfxId & 0xFF) < 0x40) && (sAudioBaseFilter2 != 0)) {
phi_v0 = true;
} else if (((entry->sfxId & 0xFF) >= 0x40) && (sAudioExtraFilter2 != 0)) {
@@ -2615,7 +2614,7 @@ void Audio_SetSfxProperties(u8 bankId, u8 entryIdx, u8 channelIndex) {
f32 behindScreenZ;
u8 baseFilter = 0;
SfxBankEntry* entry = &gSfxBanks[bankId][entryIdx];
-#if PLATFORM_N64
+#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
s32 pad;
#endif
@@ -2656,7 +2655,7 @@ void Audio_SetSfxProperties(u8 bankId, u8 entryIdx, u8 channelIndex) {
}
}
if (sAudioBaseFilter != 0) {
-#if PLATFORM_N64
+#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
if ((bankId == BANK_PLAYER) || (bankId == BANK_ITEM) ||
((bankId == BANK_VOICE) && ((entry->sfxId & 0xFF) < 0x40)))
#else
@@ -3240,7 +3239,7 @@ void Audio_PlaySceneSequence(u16 seqId) {
AUDIOCMD_GLOBAL_STOP_AUDIOCMDS();
}
-#if PLATFORM_N64
+#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
if (Audio_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) != NA_BGM_DISABLED) {
Audio_StopSequence(SEQ_PLAYER_BGM_MAIN, 0);
AUDIOCMD_GLOBAL_STOP_AUDIOCMDS();
@@ -3384,7 +3383,7 @@ void func_800F5B58(void) {
if (sPrevMainBgmSeqId == NA_BGM_DISABLED) {
SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0);
} else {
-#if PLATFORM_N64
+#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
if (sPrevMainBgmSeqId == NA_BGM_NATURE_AMBIENCE) {
sPrevMainBgmSeqId = sPrevAmbienceSeqId;
}
@@ -3520,10 +3519,10 @@ void Audio_SetSequenceMode(u8 seqMode) {
volumeFadeInTimer);
SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_SUB, 10, 8, NA_BGM_ENEMY);
-#if PLATFORM_N64
- if (seqId > NA_BGM_NATURE_AMBIENCE)
-#else
+#if OOT_VERSION < PAL_1_0 || PLATFORM_GC
if (seqId != NA_BGM_NATURE_AMBIENCE)
+#else
+ if (seqId > NA_BGM_NATURE_AMBIENCE)
#endif
{
Audio_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, VOL_SCALE_INDEX_BGM_SUB,
@@ -3545,14 +3544,20 @@ void Audio_SetSequenceMode(u8 seqMode) {
sPrevSeqMode = seqMode + 0x80;
} else {
-#if PLATFORM_N64
- if (seqMode == SEQ_MODE_ENEMY) {
- // If both seqMode = sPrevSeqMode = SEQ_MODE_ENEMY
- if ((Audio_GetActiveSeqId(SEQ_PLAYER_BGM_SUB) == NA_BGM_DISABLED) && (seqId != NA_BGM_DISABLED) &&
- (sSeqFlags[seqId & 0xFF & 0xFF] & SEQ_FLAG_ENEMY)) {
- SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_SUB, 10, 8, NA_BGM_ENEMY);
- sPrevSeqMode = seqMode + 0x80;
- }
+#if OOT_VERSION < NTSC_1_1 || PLATFORM_GC
+ // Empty
+#elif OOT_VERSION < PAL_1_0
+ if ((seqMode == SEQ_MODE_ENEMY) && (seqId != NA_BGM_FIELD_LOGIC) &&
+ (Audio_GetActiveSeqId(SEQ_PLAYER_BGM_SUB) == NA_BGM_DISABLED)) {
+ SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_SUB, 10, 8, NA_BGM_ENEMY);
+ sPrevSeqMode = seqMode + 0x80;
+ }
+#else
+ // If both seqMode = sPrevSeqMode = SEQ_MODE_ENEMY
+ if ((seqMode == SEQ_MODE_ENEMY) && (Audio_GetActiveSeqId(SEQ_PLAYER_BGM_SUB) == NA_BGM_DISABLED) &&
+ (seqId != NA_BGM_DISABLED) && (sSeqFlags[seqId & 0xFF & 0xFF] & SEQ_FLAG_ENEMY)) {
+ SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_SUB, 10, 8, NA_BGM_ENEMY);
+ sPrevSeqMode = seqMode + 0x80;
}
#endif
}
@@ -3595,20 +3600,20 @@ void Audio_SetBgmEnemyVolume(f32 dist) {
sAudioEnemyVol = ((350.0f - adjDist) * 127.0f) / 350.0f;
Audio_SetVolumeScale(SEQ_PLAYER_BGM_SUB, VOL_SCALE_INDEX_BGM_SUB, sAudioEnemyVol, 10);
-#if PLATFORM_N64
- if (gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId > NA_BGM_NATURE_AMBIENCE)
-#else
+#if OOT_VERSION < PAL_1_0 || PLATFORM_GC
if (gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId != NA_BGM_NATURE_AMBIENCE)
+#else
+ if (gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId > NA_BGM_NATURE_AMBIENCE)
#endif
{
Audio_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, VOL_SCALE_INDEX_BGM_SUB, (0x7F - sAudioEnemyVol), 10);
}
}
-#if PLATFORM_N64
- if (gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId > NA_BGM_NATURE_AMBIENCE)
-#else
+#if OOT_VERSION < PAL_1_0 || PLATFORM_GC
if (gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId != NA_BGM_NATURE_AMBIENCE)
+#else
+ if (gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId > NA_BGM_NATURE_AMBIENCE)
#endif
{
Audio_SplitBgmChannels(sAudioEnemyVol);
@@ -3923,7 +3928,7 @@ void func_800F6C34(void) {
sFanfareStartTimer = 0;
D_8016B9F3 = 1;
sMalonSingingDisabled = false;
-#if PLATFORM_N64
+#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
sPrevAmbienceSeqId = NA_BGM_DISABLED;
#endif
}
@@ -3984,7 +3989,7 @@ void Audio_StartNatureAmbienceSequence(u16 playerIO, u16 channelMask) {
}
#endif
-#if PLATFORM_N64
+#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
if ((Audio_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) != NA_BGM_DISABLED) &&
(Audio_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) != NA_BGM_NATURE_AMBIENCE)) {
Audio_StopSequence(SEQ_PLAYER_BGM_MAIN, 0);
@@ -4018,7 +4023,7 @@ void Audio_PlayNatureAmbienceSequence(u8 natureAmbienceId) {
if ((gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId == NA_BGM_DISABLED) ||
!(sSeqFlags[gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId & 0xFF & 0xFF] & SEQ_FLAG_NO_AMBIENCE)) {
-#if PLATFORM_N64
+#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
if (gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId != NA_BGM_NATURE_AMBIENCE) {
sPrevAmbienceSeqId = gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId;
}
diff --git a/src/audio/lib/seqplayer.c b/src/audio/lib/seqplayer.c
index 63aedeb56b..71132797e2 100644
--- a/src/audio/lib/seqplayer.c
+++ b/src/audio/lib/seqplayer.c
@@ -437,7 +437,7 @@ void AudioSeq_SequencePlayerDisableAsFinished(SequencePlayer* seqPlayer) {
void AudioSeq_SequencePlayerDisable(SequencePlayer* seqPlayer) {
s32 finished = 0;
-#if PLATFORM_N64
+#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
if (seqPlayer->finished == 1) {
finished = 1;
}
@@ -457,7 +457,7 @@ void AudioSeq_SequencePlayerDisable(SequencePlayer* seqPlayer) {
}
if (AudioLoad_IsFontLoadComplete(seqPlayer->defaultFont)) {
-#if PLATFORM_N64
+#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
if (finished == 1) {
AudioHeap_ReleaseNotesForFont(seqPlayer->defaultFont);
}
diff --git a/src/audio/lib/synthesis.c b/src/audio/lib/synthesis.c
index d2214d99ac..d19ed4ae5f 100644
--- a/src/audio/lib/synthesis.c
+++ b/src/audio/lib/synthesis.c
@@ -644,10 +644,10 @@ Acmd* AudioSynth_DoOneAudioUpdate(s16* aiBuf, s32 aiBufLen, Acmd* cmd, s32 updat
// Leak reverb between the left and right channels
-#if PLATFORM_N64
- if (((reverb->leakRtl != 0) || (reverb->leakLtr != 0)) && (gAudioCtx.soundMode != SOUNDMODE_MONO))
-#else
+#if OOT_VERSION < NTSC_1_1 || PLATFORM_GC
if ((reverb->leakRtl != 0) || (reverb->leakLtr != 0))
+#else
+ if (((reverb->leakRtl != 0) || (reverb->leakLtr != 0)) && (gAudioCtx.soundMode != SOUNDMODE_MONO))
#endif
{
cmd = AudioSynth_LeakReverb(cmd, reverb);
@@ -785,7 +785,7 @@ Acmd* AudioSynth_ProcessNote(s32 noteIndex, NoteSubEu* noteSubEu, NoteSynthesisS
samplesLenFixedPoint = (resamplingRateFixedPoint * aiBufLen * 2) + synthState->samplePosFrac;
numSamplesToLoad = samplesLenFixedPoint >> 16;
-#if PLATFORM_N64
+#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
if (numSamplesToLoad == 0) {
skipBytes = false;
}
diff --git a/src/audio/lib/thread.c b/src/audio/lib/thread.c
index 561e95e14c..c074f596a1 100644
--- a/src/audio/lib/thread.c
+++ b/src/audio/lib/thread.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "versions.h"
#define SAMPLES_TO_OVERPRODUCE 0x10
#define EXTRA_BUFFERED_AI_SAMPLES_TARGET 0x80
@@ -16,7 +17,7 @@ AudioTask* AudioThread_Update(void) {
return AudioThread_UpdateImpl();
}
-#if PLATFORM_N64
+#if !(OOT_VERSION < PAL_1_0 || PLATFORM_GC)
static s32 sMaxAbiCmdCnt = 0x80;
static AudioTask* sWaitingAudioTask = NULL;
#endif
@@ -25,7 +26,7 @@ static AudioTask* sWaitingAudioTask = NULL;
* This is Audio_Update for the audio thread
*/
AudioTask* AudioThread_UpdateImpl(void) {
-#if !PLATFORM_N64
+#if OOT_VERSION < PAL_1_0 || PLATFORM_GC
static s32 sMaxAbiCmdCnt = 0x80;
static AudioTask* sWaitingAudioTask = NULL;
#endif
diff --git a/src/audio/session_config.c b/src/audio/session_config.c
index 8d1d97ca0c..8c2824eee4 100644
--- a/src/audio/session_config.c
+++ b/src/audio/session_config.c
@@ -18,10 +18,10 @@ const TempoData gTempoData = {
// Sizes of everything on the init pool
#define AI_BUFFERS_SIZE (AIBUF_SIZE * ARRAY_COUNT(gAudioCtx.aiBuffers))
#define SOUNDFONT_LIST_SIZE (NUM_SOUNDFONTS * sizeof(SoundFont))
-#if PLATFORM_N64
-#define PERMANENT_POOL_SIZE (SFX_SEQ_SIZE + SFX_SOUNDFONT_1_SIZE + SFX_SOUNDFONT_2_SIZE + 0x10)
-#else
+#if OOT_VERSION < PAL_1_0 || PLATFORM_GC
#define PERMANENT_POOL_SIZE (SFX_SEQ_SIZE + SFX_SOUNDFONT_1_SIZE + SFX_SOUNDFONT_2_SIZE)
+#else
+#define PERMANENT_POOL_SIZE (SFX_SEQ_SIZE + SFX_SOUNDFONT_1_SIZE + SFX_SOUNDFONT_2_SIZE + 0x10)
#endif
const AudioHeapInitSizes gAudioHeapInitSizes = {
diff --git a/src/audio/sfx.c b/src/audio/sfx.c
index 90ed7a28f6..b3de8eef5d 100644
--- a/src/audio/sfx.c
+++ b/src/audio/sfx.c
@@ -342,7 +342,7 @@ void Audio_ChooseActiveSfx(u8 bankId) {
entry->sfxId, entry->posX, entry->posZ, *entry->posX, *entry->posY, *entry->posZ);
}
entry->priority = (u32)entry->dist + (SQ(0xFF - sfxImportance) * SQ(76));
-#if !PLATFORM_N64
+#if OOT_VERSION < NTSC_1_1 || PLATFORM_GC
temp3 = entry->sfxId; // fake
entry->priority = entry->priority + temp3 - temp3;
#endif
diff --git a/src/audio/sfx_params.c b/src/audio/sfx_params.c
index 4f52fbdf0a..7dc1bbd2c7 100644
--- a/src/audio/sfx_params.c
+++ b/src/audio/sfx_params.c
@@ -1,5 +1,6 @@
#include "ultra64.h"
#include "global.h"
+#include "versions.h"
#define DEFINE_SFX(_0, _1, importance, distParam, randParam, flags) \
{ importance, ((((distParam) << SFX_PARAM_01_SHIFT) & SFX_PARAM_01_MASK) | \
diff --git a/src/audio/tables/sequence_table.c b/src/audio/tables/sequence_table.c
index 7a08ce79c5..dc3321d2b4 100644
--- a/src/audio/tables/sequence_table.c
+++ b/src/audio/tables/sequence_table.c
@@ -1,5 +1,6 @@
#include "attributes.h"
#include "z64audio.h"
+#include "versions.h"
// Symbol definition
diff --git a/src/boot/cic6105.c b/src/boot/cic6105.c
index e0ddcb2c49..85ae47b0c7 100644
--- a/src/boot/cic6105.c
+++ b/src/boot/cic6105.c
@@ -39,7 +39,11 @@ void CIC6105_FaultClient(void) {
Fault_Printf(" [Creator:%s]", gBuildCreator);
Fault_SetCursor(56, 192);
Fault_Printf("[Date:%s]", gBuildDate);
+#if OOT_VERSION < PAL_1_0
+ Fault_SetCursor(128, 24);
+#else
Fault_SetCursor(96, 32);
+#endif
Fault_Printf("I LOVE YOU %08x", func_80001714());
}
diff --git a/src/boot/is_debug.c b/src/boot/is_debug.c
index dc2cedc4b8..44d22fa874 100644
--- a/src/boot/is_debug.c
+++ b/src/boot/is_debug.c
@@ -48,6 +48,11 @@ void rmonPrintf(const char* fmt, ...) {
va_end(args);
}
+#if OOT_VERSION < PAL_1_0
+void func_800015F4(void) {
+}
+#endif
+
#if OOT_DEBUG
void* is_proutSyncPrintf(void* arg, const char* str, size_t count) {
u32 data;
diff --git a/src/boot/z_locale.c b/src/boot/z_locale.c
index 6d60af64b4..ec752bcd05 100644
--- a/src/boot/z_locale.c
+++ b/src/boot/z_locale.c
@@ -39,7 +39,11 @@ void Locale_Init(void) {
PRINTF(VT_COL(RED, WHITE));
PRINTF(T("z_locale_init: 日本用かアメリカ用か判別できません\n",
"z_locale_init: Can't tell if it's for Japan or America\n"));
-#if PLATFORM_N64
+#if OOT_VERSION < NTSC_1_1
+ LogUtils_HungupThread("../z_locale.c", 86);
+#elif OOT_VERSION < PAL_1_0
+ LogUtils_HungupThread("../z_locale.c", 92);
+#elif OOT_VERSION < GC_JP
LogUtils_HungupThread("../z_locale.c", 101);
#else
LogUtils_HungupThread("../z_locale.c", 118);
diff --git a/src/boot/z_std_dma.c b/src/boot/z_std_dma.c
index 3c6019182b..d609ce6f10 100644
--- a/src/boot/z_std_dma.c
+++ b/src/boot/z_std_dma.c
@@ -27,7 +27,7 @@
#endif
#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
- "ntsc-1.2:94 pal-1.0:92 pal-1.1:92"
+ "ntsc-1.2:92 pal-1.0:90 pal-1.1:90"
StackEntry sDmaMgrStackInfo;
OSMesgQueue sDmaMgrMsgQueue;
@@ -296,12 +296,14 @@ NORETURN void DmaMgr_Error(DmaRequest* req, const char* filename, const char* er
Fault_AddHungupAndCrashImpl(buff1, buff2);
}
-#define DMA_ERROR(req, filename, errorName, errorDesc, file, n64Line, gcLine) \
+#define DMA_ERROR(req, filename, errorName, errorDesc, file, line1, line2, line3) \
DmaMgr_Error(req, filename, errorName, errorDesc)
-#elif PLATFORM_N64
-#define DMA_ERROR(req, filename, errorName, errorDesc, file, n64Line, gcLine) Fault_AddHungupAndCrash(file, n64Line)
-#elif PLATFORM_GC
-#define DMA_ERROR(req, filename, errorName, errorDesc, file, n64Line, gcLine) Fault_AddHungupAndCrash(file, gcLine)
+#elif OOT_VERSION < NTSC_1_1
+#define DMA_ERROR(req, filename, errorName, errorDesc, file, line1, line2, line3) Fault_AddHungupAndCrash(file, line1)
+#elif OOT_VERSION < GC_JP
+#define DMA_ERROR(req, filename, errorName, errorDesc, file, line1, line2, line3) Fault_AddHungupAndCrash(file, line2)
+#else
+#define DMA_ERROR(req, filename, errorName, errorDesc, file, line1, line2, line3) Fault_AddHungupAndCrash(file, line3)
#endif
#if PLATFORM_GC
@@ -407,7 +409,7 @@ void DmaMgr_ProcessRequest(DmaRequest* req) {
DMA_ERROR(req, filename, "Segment Alignment Error",
T("セグメント境界をまたがってDMA転送することはできません",
"DMA transfers cannot cross segment boundaries"),
- "../z_std_dma.c", 578, 726);
+ "../z_std_dma.c", 575, 578, 726);
}
DmaMgr_DmaRomToRam(iter->romStart + (vrom - iter->file.vromStart), ram, size);
@@ -428,7 +430,7 @@ void DmaMgr_ProcessRequest(DmaRequest* req) {
DMA_ERROR(req, filename, "Can't Transfer Segment",
T("圧縮されたセグメントの途中からはDMA転送することはできません",
"DMA transfer cannot be performed from the middle of a compressed segment"),
- "../z_std_dma.c", 598, 746);
+ "../z_std_dma.c", 595, 598, 746);
}
if (size != iter->file.vromEnd - iter->file.vromStart) {
@@ -437,7 +439,7 @@ void DmaMgr_ProcessRequest(DmaRequest* req) {
DMA_ERROR(req, filename, "Can't Transfer Segment",
T("圧縮されたセグメントの一部だけをDMA転送することはできません",
"It is not possible to DMA only part of a compressed segment"),
- "../z_std_dma.c", 604, 752);
+ "../z_std_dma.c", 601, 604, 752);
}
// Reduce the thread priority and decompress the file, the decompression routine handles the DMA
@@ -470,8 +472,8 @@ void DmaMgr_ProcessRequest(DmaRequest* req) {
// Error, rom is compressed so DMA may only be requested within the filesystem bounds
DMA_ERROR(req, NULL, "DATA DON'T EXIST",
- T("該当するデータが存在しません", "Corresponding data does not exist"), "../z_std_dma.c", 624,
- 771);
+ T("該当するデータが存在しません", "Corresponding data does not exist"), "../z_std_dma.c", 621,
+ 624, 771);
return;
} else {
// ROM is uncompressed, allow arbitrary DMA even if the region is not marked in the filesystem
@@ -543,7 +545,7 @@ s32 DmaMgr_RequestAsync(DmaRequest* req, void* ram, uintptr_t vrom, size_t size,
// its line number is unknown.
//! @bug `req` is passed to `DMA_ERROR` without rom, ram and size being set
DMA_ERROR(req, NULL, "ILLIGAL DMA-FUNCTION CALL", T("パラメータ異常です", "Parameter error"), "../z_std_dma.c",
- 0, 0);
+ 0, 0, 0);
}
#endif
@@ -645,7 +647,9 @@ void DmaMgr_Init(void) {
PRINTF("_bootSegmentRomStart(%08x) != dma_rom_ad[0].rom_b(%08x)\n", _bootSegmentRomStart,
gDmaDataTable[0].file.vromEnd);
//! @bug The main code file where fault.c resides is not yet loaded
-#if PLATFORM_N64
+#if OOT_VERSION < NTSC_1_1
+ Fault_AddHungupAndCrash("../z_std_dma.c", 837);
+#elif OOT_VERSION < GC_JP
Fault_AddHungupAndCrash("../z_std_dma.c", 840);
#else
Fault_AddHungupAndCrash("../z_std_dma.c", 1055);
diff --git a/src/code/game.c b/src/code/game.c
index 2b665e0d8d..bd129ef775 100644
--- a/src/code/game.c
+++ b/src/code/game.c
@@ -386,7 +386,11 @@ void GameState_InitArena(GameState* gameState, size_t size) {
} else {
THA_Init(&gameState->tha, NULL, 0);
PRINTF(T("ハイラル確保失敗\n", "Failure to secure Hyrule\n"));
-#if PLATFORM_N64
+#if OOT_VERSION < NTSC_1_1
+ HUNGUP_AND_CRASH("../game.c", 895);
+#elif OOT_VERSION < PAL_1_0
+ HUNGUP_AND_CRASH("../game.c", 898);
+#elif OOT_VERSION < GC_JP
HUNGUP_AND_CRASH("../game.c", 985);
#else
HUNGUP_AND_CRASH("../game.c", 999);
@@ -431,7 +435,11 @@ void GameState_Realloc(GameState* gameState, size_t size) {
SystemArena_Display();
#endif
-#if PLATFORM_N64
+#if OOT_VERSION < NTSC_1_1
+ HUNGUP_AND_CRASH("../game.c", 940);
+#elif OOT_VERSION < PAL_1_0
+ HUNGUP_AND_CRASH("../game.c", 943);
+#elif OOT_VERSION < GC_JP
HUNGUP_AND_CRASH("../game.c", 1030);
#else
HUNGUP_AND_CRASH("../game.c", 1044);
diff --git a/src/code/graph.c b/src/code/graph.c
index bf16214521..1a98ab1afb 100644
--- a/src/code/graph.c
+++ b/src/code/graph.c
@@ -379,7 +379,11 @@ void Graph_Update(GraphicsContext* gfxCtx, GameState* gameState) {
PRINTF("%c", BEL);
PRINTF(VT_COL(RED, WHITE) T("ダイナミック領域先頭が破壊されています\n", "Dynamic area head is destroyed\n")
VT_RST);
-#if PLATFORM_N64
+#if OOT_VERSION < NTSC_1_1
+ Fault_AddHungupAndCrash("../graph.c", 937);
+#elif OOT_VERSION < PAL_1_0
+ Fault_AddHungupAndCrash("../graph.c", 940);
+#elif OOT_VERSION < GC_JP
Fault_AddHungupAndCrash("../graph.c", 951);
#else
Fault_AddHungupAndCrash("../graph.c", 1070);
@@ -390,7 +394,11 @@ void Graph_Update(GraphicsContext* gfxCtx, GameState* gameState) {
PRINTF("%c", BEL);
PRINTF(VT_COL(RED, WHITE)
T("ダイナミック領域末尾が破壊されています\n", "Dynamic region tail is destroyed\n") VT_RST);
-#if PLATFORM_N64
+#if OOT_VERSION < NTSC_1_1
+ Fault_AddHungupAndCrash("../graph.c", 943);
+#elif OOT_VERSION < PAL_1_0
+ Fault_AddHungupAndCrash("../graph.c", 946);
+#elif OOT_VERSION < GC_JP
Fault_AddHungupAndCrash("../graph.c", 957);
#else
Fault_AddHungupAndCrash("../graph.c", 1076);
@@ -486,7 +494,11 @@ void Graph_ThreadEntry(void* arg0) {
sprintf(faultMsg, "CLASS SIZE= %d bytes", size);
Fault_AddHungupAndCrashImpl("GAME CLASS MALLOC FAILED", faultMsg);
-#elif PLATFORM_N64
+#elif OOT_VERSION < NTSC_1_1
+ Fault_AddHungupAndCrash("../graph.c", 1067);
+#elif OOT_VERSION < PAL_1_0
+ Fault_AddHungupAndCrash("../graph.c", 1070);
+#elif OOT_VERSION < GC_JP
Fault_AddHungupAndCrash("../graph.c", 1081);
#else
Fault_AddHungupAndCrash("../graph.c", 1200);
diff --git a/src/code/irqmgr.c b/src/code/irqmgr.c
index d623ddad88..3a1e3cdf55 100644
--- a/src/code/irqmgr.c
+++ b/src/code/irqmgr.c
@@ -34,6 +34,7 @@
*/
#include "global.h"
#include "terminal.h"
+#include "versions.h"
vu32 gIrqMgrResetStatus = IRQ_RESET_STATUS_IDLE;
volatile OSTime sIrqMgrResetTime = 0;
@@ -43,9 +44,13 @@ u32 sIrqMgrRetraceCount = 0;
// Internal messages
#define IRQ_RETRACE_MSG 666
#define IRQ_PRENMI_MSG 669
+#if OOT_VERSION < PAL_1_0
+#define IRQ_PRENMI500_MSG 670
+#else
#define IRQ_PRENMI450_MSG 671
#define IRQ_PRENMI480_MSG 672
#define IRQ_PRENMI500_MSG 673
+#endif
/**
* Registers a client and an associated message queue with the IRQ manager. When an
@@ -163,8 +168,13 @@ void IrqMgr_HandlePreNMI(IrqMgr* irqMgr) {
irqMgr->resetStatus = IRQ_RESET_STATUS_PRENMI;
sIrqMgrResetTime = irqMgr->resetTime = osGetTime();
+#if OOT_VERSION < PAL_1_0
+ // Schedule a PRENMI500 message to be handled in 500ms
+ osSetTimer(&irqMgr->timer, OS_USEC_TO_CYCLES(500000), 0, &irqMgr->queue, (OSMesg)IRQ_PRENMI500_MSG);
+#else
// Schedule a PRENMI450 message to be handled in 450ms
osSetTimer(&irqMgr->timer, OS_USEC_TO_CYCLES(450000), 0, &irqMgr->queue, (OSMesg)IRQ_PRENMI450_MSG);
+#endif
IrqMgr_JamMesgToClients(irqMgr, (OSMesg)&irqMgr->prenmiMsg);
}
@@ -183,6 +193,27 @@ void IrqMgr_CheckStacks(void) {
}
}
+#if OOT_VERSION < PAL_1_0
+
+void IrqMgr_HandlePreNMI500(IrqMgr* irqMgr) {
+ u64 nmi = IRQ_RESET_STATUS_NMI; // required to match
+ u32 result;
+
+ gIrqMgrResetStatus = nmi;
+ irqMgr->resetStatus = IRQ_RESET_STATUS_NMI;
+
+ IrqMgr_SendMesgToClients(irqMgr, (OSMesg)&irqMgr->nmiMsg);
+
+ result = osAfterPreNMI();
+ if (result != 0) {
+ // Schedule another PRENMI500 message to be handled in 1ms
+ osSetTimer(&irqMgr->timer, OS_USEC_TO_CYCLES(1000), 0, &irqMgr->queue, (OSMesg)IRQ_PRENMI500_MSG);
+ }
+ IrqMgr_CheckStacks();
+}
+
+#else
+
void IrqMgr_HandlePreNMI450(IrqMgr* irqMgr) {
u64 nmi = IRQ_RESET_STATUS_NMI; // required to match
@@ -215,6 +246,8 @@ void IrqMgr_HandlePreNMI500(IrqMgr* irqMgr) {
IrqMgr_CheckStacks();
}
+#endif
+
/**
* Runs on each vertical retrace
*
@@ -244,6 +277,11 @@ void IrqMgr_ThreadEntry(void* arg) {
while (!exit) {
osRecvMesg(&irqMgr->queue, (OSMesg*)&msg, OS_MESG_BLOCK);
switch (msg) {
+#if OOT_VERSION < PAL_1_0
+ default:
+ break;
+#endif
+
case IRQ_RETRACE_MSG:
IrqMgr_HandleRetrace(irqMgr);
break;
@@ -254,6 +292,7 @@ void IrqMgr_ThreadEntry(void* arg) {
IrqMgr_HandlePreNMI(irqMgr);
break;
+#if OOT_VERSION >= PAL_1_0
case IRQ_PRENMI450_MSG:
PRINTF("PRENMI450_MSG\n");
PRINTF(T("スケジューラ:PRENMI450メッセージを受信\n", "Scheduler: Receives PRENMI450 message\n"));
@@ -265,6 +304,7 @@ void IrqMgr_ThreadEntry(void* arg) {
PRINTF(T("スケジューラ:PRENMI480メッセージを受信\n", "Scheduler: Receives PRENMI480 message\n"));
IrqMgr_HandlePreNMI480(irqMgr);
break;
+#endif
case IRQ_PRENMI500_MSG:
PRINTF("PRENMI500_MSG\n");
@@ -273,11 +313,13 @@ void IrqMgr_ThreadEntry(void* arg) {
exit = true;
break;
+#if OOT_VERSION >= PAL_1_0
default:
PRINTF(T("irqmgr.c:予期しないメッセージを受け取りました(%08x)\n",
"irqmgr.c: Unexpected message received (%08x)\n"),
msg);
break;
+#endif
}
}
diff --git a/src/code/main.c b/src/code/main.c
index 03831ffb32..6c2b35af29 100644
--- a/src/code/main.c
+++ b/src/code/main.c
@@ -1,4 +1,5 @@
#include "ultra64.h"
+#include "versions.h"
// Declared before including other headers for BSS ordering
extern uintptr_t gSegments[NUM_SEGMENTS];
@@ -23,7 +24,7 @@ extern struct IrqMgr gIrqMgr;
#endif
#pragma increment_block_number "gc-eu:160 gc-eu-mq:160 gc-jp:160 gc-jp-ce:160 gc-jp-mq:160 gc-us:160 gc-us-mq:160" \
- "ntsc-1.2:154 pal-1.0:152 pal-1.1:152"
+ "ntsc-1.2:151 pal-1.0:149 pal-1.1:149"
extern u8 _buffersSegmentEnd[];
@@ -39,7 +40,11 @@ uintptr_t gSegments[NUM_SEGMENTS];
OSThread sGraphThread;
STACK(sGraphStack, 0x1800);
+#if OOT_VERSION < PAL_1_0
+STACK(sSchedStack, 0x400);
+#else
STACK(sSchedStack, 0x600);
+#endif
STACK(sAudioStack, 0x800);
STACK(sPadMgrStack, 0x500);
STACK(sIrqMgrStack, 0x500);
@@ -78,7 +83,7 @@ void Main(void* arg) {
#if PLATFORM_N64
func_800AD410();
if (D_80121211 != 0) {
- systemHeapStart = (uintptr_t)&_n64ddSegmentEnd;
+ systemHeapStart = (uintptr_t)_n64ddSegmentEnd;
SysCfb_Init(1);
} else {
func_800AD488();
@@ -150,7 +155,10 @@ void Main(void* arg) {
StackCheck_Init(&sGraphStackInfo, sGraphStack, STACK_TOP(sGraphStack), 0, 0x100, "graph");
osCreateThread(&sGraphThread, THREAD_ID_GRAPH, Graph_ThreadEntry, arg, STACK_TOP(sGraphStack), THREAD_PRI_GRAPH);
osStartThread(&sGraphThread);
+
+#if OOT_VERSION >= PAL_1_0
osSetThreadPri(NULL, THREAD_PRI_MAIN);
+#endif
while (true) {
s16* msg = NULL;
@@ -162,6 +170,9 @@ void Main(void* arg) {
switch (*msg) {
case OS_SC_PRE_NMI_MSG:
PRINTF(T("main.c: リセットされたみたいだよ\n", "main.c: Looks like it's been reset\n"));
+#if OOT_VERSION < PAL_1_0
+ StackCheck_Check(NULL);
+#endif
PreNmiBuff_SetReset(gAppNmiBufferPtr);
break;
}
diff --git a/src/code/padmgr.c b/src/code/padmgr.c
index 58e0ba2f32..f9ccce7809 100644
--- a/src/code/padmgr.c
+++ b/src/code/padmgr.c
@@ -326,7 +326,9 @@ void PadMgr_UpdateInputs(PadMgr* padMgr) {
default:
// Unknown error response
LOG_HEX("padnow1->errno", pad->errno, "../padmgr.c", 396);
-#if PLATFORM_N64
+#if OOT_VERSION < NTSC_1_1
+ Fault_AddHungupAndCrash("../padmgr.c", 379);
+#elif OOT_VERSION < GC_JP
Fault_AddHungupAndCrash("../padmgr.c", 382);
#else
Fault_AddHungupAndCrash("../padmgr.c", 397);
diff --git a/src/code/sys_cfb.c b/src/code/sys_cfb.c
index 553cc50d87..76012588b2 100644
--- a/src/code/sys_cfb.c
+++ b/src/code/sys_cfb.c
@@ -33,7 +33,11 @@ void SysCfb_Init(s32 n64dd) {
PRINTF("RAM4M mode\n");
sSysCfbEnd = 0x80400000;
} else {
-#if PLATFORM_N64
+#if OOT_VERSION < NTSC_1_1
+ LogUtils_HungupThread("../sys_cfb.c", 305);
+#elif OOT_VERSION < PAL_1_0
+ LogUtils_HungupThread("../sys_cfb.c", 308);
+#elif OOT_VERSION < GC_JP
LogUtils_HungupThread("../sys_cfb.c", 322);
#else
LogUtils_HungupThread("../sys_cfb.c", 354);
diff --git a/src/code/z_actor.c b/src/code/z_actor.c
index 71e25d9530..49ee50fbe8 100644
--- a/src/code/z_actor.c
+++ b/src/code/z_actor.c
@@ -389,7 +389,7 @@ void Attention_Draw(Attention* attention, PlayState* play) {
Attention_SetReticlePos(attention, attention->curReticle, projectedPos.x, projectedPos.y, projectedPos.z);
- if (!(player->stateFlags1 & PLAYER_STATE1_6) || (actor != player->focusActor)) {
+ if (!(player->stateFlags1 & PLAYER_STATE1_TALKING) || (actor != player->focusActor)) {
OVERLAY_DISP = Gfx_SetupDL(OVERLAY_DISP, SETUPDL_57);
for (i = 0, curReticle = attention->curReticle; i < numReticles;
@@ -1098,7 +1098,7 @@ int func_8002DD6C(Player* player) {
}
int func_8002DD78(Player* player) {
- return func_8002DD6C(player) && player->unk_834;
+ return func_8002DD6C(player) && (player->unk_834 != 0);
}
int func_8002DDA8(PlayState* play) {
@@ -2308,29 +2308,29 @@ void Actor_InitContext(PlayState* play, ActorContext* actorCtx, ActorEntry* play
u32 sCategoryFreezeMasks[ACTORCAT_MAX] = {
// ACTORCAT_SWITCH
- PLAYER_STATE1_6 | PLAYER_STATE1_DEAD | PLAYER_STATE1_28,
+ PLAYER_STATE1_TALKING | PLAYER_STATE1_DEAD | PLAYER_STATE1_28,
// ACTORCAT_BG
- PLAYER_STATE1_6 | PLAYER_STATE1_DEAD | PLAYER_STATE1_28,
+ PLAYER_STATE1_TALKING | PLAYER_STATE1_DEAD | PLAYER_STATE1_28,
// ACTORCAT_PLAYER
0,
// ACTORCAT_EXPLOSIVE
- PLAYER_STATE1_6 | PLAYER_STATE1_DEAD | PLAYER_STATE1_10 | PLAYER_STATE1_28,
+ PLAYER_STATE1_TALKING | PLAYER_STATE1_DEAD | PLAYER_STATE1_10 | PLAYER_STATE1_28,
// ACTORCAT_NPC
PLAYER_STATE1_DEAD,
// ACTORCAT_ENEMY
- PLAYER_STATE1_6 | PLAYER_STATE1_DEAD | PLAYER_STATE1_28 | PLAYER_STATE1_29,
+ PLAYER_STATE1_TALKING | PLAYER_STATE1_DEAD | PLAYER_STATE1_28 | PLAYER_STATE1_29,
// ACTORCAT_PROP
PLAYER_STATE1_DEAD | PLAYER_STATE1_28,
// ACTORCAT_ITEMACTION
0,
// ACTORCAT_MISC
- PLAYER_STATE1_6 | PLAYER_STATE1_DEAD | PLAYER_STATE1_28 | PLAYER_STATE1_29,
+ PLAYER_STATE1_TALKING | PLAYER_STATE1_DEAD | PLAYER_STATE1_28 | PLAYER_STATE1_29,
// ACTORCAT_BOSS
- PLAYER_STATE1_6 | PLAYER_STATE1_DEAD | PLAYER_STATE1_10 | PLAYER_STATE1_28,
+ PLAYER_STATE1_TALKING | PLAYER_STATE1_DEAD | PLAYER_STATE1_10 | PLAYER_STATE1_28,
// ACTORCAT_DOOR
0,
// ACTORCAT_CHEST
- PLAYER_STATE1_6 | PLAYER_STATE1_DEAD | PLAYER_STATE1_28,
+ PLAYER_STATE1_TALKING | PLAYER_STATE1_DEAD | PLAYER_STATE1_28,
};
void Actor_UpdateAll(PlayState* play, ActorContext* actorCtx) {
@@ -2381,7 +2381,7 @@ void Actor_UpdateAll(PlayState* play, ActorContext* actorCtx) {
requiredActorFlag = ACTOR_FLAG_25;
}
- if ((player->stateFlags1 & PLAYER_STATE1_6) && ((player->actor.textId & 0xFF00) != 0x600)) {
+ if ((player->stateFlags1 & PLAYER_STATE1_TALKING) && ((player->actor.textId & 0xFF00) != 0x600)) {
sp74 = player->talkActor;
}
diff --git a/src/code/z_bgcheck.c b/src/code/z_bgcheck.c
index 431578d36f..163b9a2b37 100644
--- a/src/code/z_bgcheck.c
+++ b/src/code/z_bgcheck.c
@@ -1,7 +1,7 @@
#include "global.h"
#include "terminal.h"
-#pragma increment_block_number "ntsc-1.2:140"
+#pragma increment_block_number "ntsc-1.2:136"
u16 DynaSSNodeList_GetNextNodeIdx(DynaSSNodeList* nodeList);
void BgCheck_GetStaticLookupIndicesFromPos(CollisionContext* colCtx, Vec3f* pos, Vec3i* sector);
@@ -1611,7 +1611,11 @@ void BgCheck_Allocate(CollisionContext* colCtx, PlayState* play, CollisionHeader
colCtx->subdivAmount.z,
ALIGNOF_MASK(StaticLookup));
if (colCtx->lookupTbl == NULL) {
+#if OOT_VERSION < NTSC_1_1
+ LogUtils_HungupThread("../z_bgcheck.c", 4173);
+#else
LogUtils_HungupThread("../z_bgcheck.c", 4176);
+#endif
}
colCtx->minBounds.x = colCtx->colHeader->minBounds.x;
colCtx->minBounds.y = colCtx->colHeader->minBounds.y;
@@ -1635,7 +1639,11 @@ void BgCheck_Allocate(CollisionContext* colCtx, PlayState* play, CollisionHeader
tblMax = customNodeListMax;
} else {
if (colCtx->memSize < memSize) {
+#if OOT_VERSION < NTSC_1_1
+ LogUtils_HungupThread("../z_bgcheck.c", 4227);
+#else
LogUtils_HungupThread("../z_bgcheck.c", 4230);
+#endif
}
tblMax = (colCtx->memSize - memSize) / sizeof(SSNode);
}
diff --git a/src/code/z_camera.c b/src/code/z_camera.c
index 6e092f7354..053151a42c 100644
--- a/src/code/z_camera.c
+++ b/src/code/z_camera.c
@@ -3639,7 +3639,7 @@ s32 Camera_KeepOn3(Camera* camera) {
}
#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
- "ntsc-1.2:96 pal-1.0:94 pal-1.1:94"
+ "ntsc-1.2:93 pal-1.0:91 pal-1.1:91"
s32 Camera_KeepOn4(Camera* camera) {
static Vec3f D_8015BD50;
diff --git a/src/code/z_collision_check.c b/src/code/z_collision_check.c
index 14a12b96b7..41555de22e 100644
--- a/src/code/z_collision_check.c
+++ b/src/code/z_collision_check.c
@@ -1,13 +1,22 @@
-#include "global.h"
+#include "gfx.h"
+#include "macros.h"
+#include "regs.h"
+#include "sfx.h"
+#include "sys_math3d.h"
+#include "sys_matrix.h"
#include "terminal.h"
#include "versions.h"
-
+#include "z64collision_check.h"
+#include "z64effect.h"
#include "z64frame_advance.h"
+#include "zelda_arena.h"
+#include "z64play.h"
#include "overlays/effects/ovl_Effect_Ss_HitMark/z_eff_ss_hitmark.h"
+#include "z_lib.h"
-#pragma increment_block_number "gc-eu:0 gc-eu-mq:0 gc-jp:0 gc-jp-ce:0 gc-jp-mq:0 gc-us:0 gc-us-mq:0 ntsc-1.2:208" \
- "pal-1.0:200 pal-1.1:200"
+#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
+ "ntsc-1.2:104 pal-1.0:104 pal-1.1:104"
typedef s32 (*ColChkResetFunc)(PlayState*, Collider*);
typedef void (*ColChkApplyFunc)(PlayState*, CollisionCheckContext*, Collider*);
diff --git a/src/code/z_construct.c b/src/code/z_construct.c
index 0720bc8b9a..374665d385 100644
--- a/src/code/z_construct.c
+++ b/src/code/z_construct.c
@@ -52,17 +52,17 @@ void Interface_Init(PlayState* play) {
#if OOT_NTSC
if (gSaveContext.language == LANGUAGE_JPN) {
- doActionOffset = LANGUAGE_JPN * DO_ACTION_MAX * DO_ACTION_TEX_SIZE;
+ doActionOffset = (LANGUAGE_JPN * DO_ACTION_MAX + DO_ACTION_ATTACK) * DO_ACTION_TEX_SIZE;
} else {
- doActionOffset = LANGUAGE_ENG * DO_ACTION_MAX * DO_ACTION_TEX_SIZE;
+ doActionOffset = (LANGUAGE_ENG * DO_ACTION_MAX + DO_ACTION_ATTACK) * DO_ACTION_TEX_SIZE;
}
#else
if (gSaveContext.language == LANGUAGE_ENG) {
- doActionOffset = LANGUAGE_ENG * DO_ACTION_MAX * DO_ACTION_TEX_SIZE;
+ doActionOffset = (LANGUAGE_ENG * DO_ACTION_MAX + DO_ACTION_ATTACK) * DO_ACTION_TEX_SIZE;
} else if (gSaveContext.language == LANGUAGE_GER) {
- doActionOffset = LANGUAGE_GER * DO_ACTION_MAX * DO_ACTION_TEX_SIZE;
+ doActionOffset = (LANGUAGE_GER * DO_ACTION_MAX + DO_ACTION_ATTACK) * DO_ACTION_TEX_SIZE;
} else {
- doActionOffset = LANGUAGE_FRA * DO_ACTION_MAX * DO_ACTION_TEX_SIZE;
+ doActionOffset = (LANGUAGE_FRA * DO_ACTION_MAX + DO_ACTION_ATTACK) * DO_ACTION_TEX_SIZE;
}
#endif
@@ -71,17 +71,17 @@ void Interface_Init(PlayState* play) {
#if OOT_NTSC
if (gSaveContext.language == LANGUAGE_JPN) {
- doActionOffset = 3 * DO_ACTION_TEX_SIZE + LANGUAGE_JPN * DO_ACTION_MAX * DO_ACTION_TEX_SIZE;
+ doActionOffset = (LANGUAGE_JPN * DO_ACTION_MAX + DO_ACTION_RETURN) * DO_ACTION_TEX_SIZE;
} else {
- doActionOffset = 3 * DO_ACTION_TEX_SIZE + LANGUAGE_ENG * DO_ACTION_MAX * DO_ACTION_TEX_SIZE;
+ doActionOffset = (LANGUAGE_ENG * DO_ACTION_MAX + DO_ACTION_RETURN) * DO_ACTION_TEX_SIZE;
}
#else
if (gSaveContext.language == LANGUAGE_ENG) {
- doActionOffset = 3 * DO_ACTION_TEX_SIZE + LANGUAGE_ENG * DO_ACTION_MAX * DO_ACTION_TEX_SIZE;
+ doActionOffset = (LANGUAGE_ENG * DO_ACTION_MAX + DO_ACTION_RETURN) * DO_ACTION_TEX_SIZE;
} else if (gSaveContext.language == LANGUAGE_GER) {
- doActionOffset = 3 * DO_ACTION_TEX_SIZE + LANGUAGE_GER * DO_ACTION_MAX * DO_ACTION_TEX_SIZE;
+ doActionOffset = (LANGUAGE_GER * DO_ACTION_MAX + DO_ACTION_RETURN) * DO_ACTION_TEX_SIZE;
} else {
- doActionOffset = 3 * DO_ACTION_TEX_SIZE + LANGUAGE_FRA * DO_ACTION_MAX * DO_ACTION_TEX_SIZE;
+ doActionOffset = (LANGUAGE_FRA * DO_ACTION_MAX + DO_ACTION_RETURN) * DO_ACTION_TEX_SIZE;
}
#endif
@@ -326,7 +326,7 @@ void Regs_InitDataImpl(void) {
ZREG(10) = 200;
ZREG(11) = 0;
ZREG(12) = 200;
- ZREG(13) = 0;
+ R_PAUSE_PAGE_SWITCH_FRAME_ADVANCE_ON = false;
ZREG(14) = 110;
ZREG(15) = 56;
ZREG(16) = 1;
@@ -619,11 +619,12 @@ void Regs_InitDataImpl(void) {
R_MINIMAP_COLOR(2) = 255;
}
- VREG(21) = 0;
- VREG(22) = 0;
- VREG(23) = 0;
- VREG(24) = 0;
- VREG(25) = 0;
+ R_PAUSE_SONG_OCA_BTN_Y(OCARINA_BTN_A) = 0;
+ R_PAUSE_SONG_OCA_BTN_Y(OCARINA_BTN_C_DOWN) = 0;
+ R_PAUSE_SONG_OCA_BTN_Y(OCARINA_BTN_C_RIGHT) = 0;
+ R_PAUSE_SONG_OCA_BTN_Y(OCARINA_BTN_C_LEFT) = 0;
+ R_PAUSE_SONG_OCA_BTN_Y(OCARINA_BTN_C_UP) = 0;
+
VREG(26) = 0;
VREG(27) = 0;
R_OCARINA_BUTTONS_XPOS = 98;
@@ -649,7 +650,7 @@ void Regs_InitDataImpl(void) {
R_OCARINA_BUTTONS_YPOS(2) = 176;
R_OCARINA_BUTTONS_YPOS(3) = 172;
R_OCARINA_BUTTONS_YPOS(4) = 170;
- VREG(50) = 30;
+ R_OCARINA_BUTTONS_APPEAR_ALPHA_STEP = 30;
R_OCARINA_BUTTONS_YPOS_OFFSET = 0;
VREG(52) = -16;
VREG(53) = 230;
diff --git a/src/code/z_demo.c b/src/code/z_demo.c
index cada27694b..4b48261cd7 100644
--- a/src/code/z_demo.c
+++ b/src/code/z_demo.c
@@ -124,7 +124,7 @@ u16 gCamAtSplinePointsAppliedFrame;
u16 gCamEyePointAppliedFrame;
u16 gCamAtPointAppliedFrame;
-#pragma increment_block_number "gc-eu:192 gc-eu-mq:176 gc-jp:192 gc-jp-ce:192 gc-jp-mq:176 gc-us:192 gc-us-mq:176" \
+#pragma increment_block_number "gc-eu:188 gc-eu-mq:176 gc-jp:188 gc-jp-ce:188 gc-jp-mq:176 gc-us:188 gc-us-mq:176" \
"ntsc-1.2:80 pal-1.0:80 pal-1.1:80"
// Cam ID to return to when a scripted cutscene is finished
diff --git a/src/code/z_kaleido_scope_call.c b/src/code/z_kaleido_scope_call.c
index 985b6c3b70..0b18477e5b 100644
--- a/src/code/z_kaleido_scope_call.c
+++ b/src/code/z_kaleido_scope_call.c
@@ -1,5 +1,5 @@
#pragma increment_block_number "gc-eu:224 gc-eu-mq:224 gc-jp:224 gc-jp-ce:224 gc-jp-mq:224 gc-us:224 gc-us-mq:224" \
- "ntsc-1.2:0"
+ "ntsc-1.2:224 pal-1.0:224 pal-1.1:224"
#include "global.h"
#include "terminal.h"
diff --git a/src/code/z_kaleido_setup.c b/src/code/z_kaleido_setup.c
index 1079cd0838..990b1c0405 100644
--- a/src/code/z_kaleido_setup.c
+++ b/src/code/z_kaleido_setup.c
@@ -144,7 +144,7 @@ void KaleidoSetup_Init(PlayState* play) {
pauseCtx->cursorPoint[PAUSE_ITEM] = 0;
pauseCtx->cursorPoint[PAUSE_MAP] = VREG(30) + 3;
- pauseCtx->cursorPoint[PAUSE_QUEST] = 0;
+ pauseCtx->cursorPoint[PAUSE_QUEST] = QUEST_MEDALLION_FOREST;
pauseCtx->cursorPoint[PAUSE_EQUIP] = 1;
pauseCtx->cursorPoint[PAUSE_WORLD_MAP] = 10;
diff --git a/src/code/z_kankyo.c b/src/code/z_kankyo.c
index 27157ae2e9..f6cde3a952 100644
--- a/src/code/z_kankyo.c
+++ b/src/code/z_kankyo.c
@@ -1,5 +1,5 @@
-#pragma increment_block_number "gc-eu:248 gc-eu-mq:248 gc-jp:240 gc-jp-ce:240 gc-jp-mq:240 gc-us:240 gc-us-mq:240" \
- "ntsc-1.2:0 pal-1.0:252 pal-1.1:252"
+#pragma increment_block_number "gc-eu:244 gc-eu-mq:244 gc-jp:224 gc-jp-ce:224 gc-jp-mq:224 gc-us:224 gc-us-mq:224" \
+ "ntsc-1.2:224 pal-1.0:252 pal-1.1:252"
#include "global.h"
#include "ultra64.h"
@@ -215,7 +215,7 @@ s16 sSunDepthTestX;
s16 sSunDepthTestY;
#pragma increment_block_number "gc-eu:240 gc-eu-mq:240 gc-jp:224 gc-jp-ce:224 gc-jp-mq:224 gc-us:224 gc-us-mq:224" \
- "ntsc-1.2:216 pal-1.0:240 pal-1.1:240"
+ "ntsc-1.2:224 pal-1.0:240 pal-1.1:240"
LightNode* sNGameOverLightNode;
LightInfo sNGameOverLightInfo;
diff --git a/src/code/z_message.c b/src/code/z_message.c
index fe60644dd5..1bd060944f 100644
--- a/src/code/z_message.c
+++ b/src/code/z_message.c
@@ -3889,7 +3889,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
if (1) {}
if (sOcarinaButtonAlphaValues[i] != 255) {
- sOcarinaButtonAlphaValues[i] += VREG(50);
+ sOcarinaButtonAlphaValues[i] += R_OCARINA_BUTTONS_APPEAR_ALPHA_STEP;
if (sOcarinaButtonAlphaValues[i] >= 255) {
sOcarinaButtonAlphaValues[i] = 255;
}
diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c
index c7289316cc..a2959e0ade 100644
--- a/src/code/z_parameter.c
+++ b/src/code/z_parameter.c
@@ -2125,9 +2125,9 @@ void Interface_LoadActionLabel(InterfaceContext* interfaceCtx, u16 action, s16 l
#endif
#if OOT_VERSION < PAL_1_0
- if ((action != DO_ACTION_NONE) && (action != DO_ACTION_MAX + DO_ACTION_NONE))
+ if ((action != 0 * DO_ACTION_MAX + DO_ACTION_NONE) && (action != 1 * DO_ACTION_MAX + DO_ACTION_NONE))
#else
- if ((action != DO_ACTION_NONE) && (action != DO_ACTION_MAX + DO_ACTION_NONE) &&
+ if ((action != 0 * DO_ACTION_MAX + DO_ACTION_NONE) && (action != 1 * DO_ACTION_MAX + DO_ACTION_NONE) &&
(action != 2 * DO_ACTION_MAX + DO_ACTION_NONE))
#endif
{
diff --git a/src/code/z_play.c b/src/code/z_play.c
index e4269a2c2f..3cfedca3de 100644
--- a/src/code/z_play.c
+++ b/src/code/z_play.c
@@ -176,7 +176,11 @@ void Play_SetupTransition(PlayState* this, s32 transitionType) {
break;
default:
-#if OOT_VERSION < PAL_1_1
+#if OOT_VERSION < NTSC_1_1
+ HUNGUP_AND_CRASH("../z_play.c", 2263);
+#elif OOT_VERSION < PAL_1_0
+ HUNGUP_AND_CRASH("../z_play.c", 2266);
+#elif OOT_VERSION < PAL_1_1
HUNGUP_AND_CRASH("../z_play.c", 2269);
#elif OOT_VERSION < GC_JP
HUNGUP_AND_CRASH("../z_play.c", 2272);
diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c
index c9815c3137..1699dd2003 100644
--- a/src/code/z_player_lib.c
+++ b/src/code/z_player_lib.c
@@ -24,8 +24,8 @@ s16 sBootData[PLAYER_BOOTS_MAX][17] = {
FRAMERATE_CONST(270, 324), // REG(36)
600, // REG(37)
FRAMERATE_CONST(350, 420), // REG(38)
- 800, // REG(43)
- 600, // REG(45)
+ 800, // R_DECELERATE_RATE
+ 600, // R_RUN_SPEED_LIMIT
-100, // REG(68)
600, // REG(69)
590, // IREG(66)
@@ -44,8 +44,8 @@ s16 sBootData[PLAYER_BOOTS_MAX][17] = {
FRAMERATE_CONST(270, 324), // REG(36)
1000, // REG(37)
FRAMERATE_CONST(0, 0), // REG(38)
- 800, // REG(43)
- 300, // REG(45)
+ 800, // R_DECELERATE_RATE
+ 300, // R_RUN_SPEED_LIMIT
-160, // REG(68)
600, // REG(69)
590, // IREG(66)
@@ -64,8 +64,8 @@ s16 sBootData[PLAYER_BOOTS_MAX][17] = {
FRAMERATE_CONST(270, 324), // REG(36)
600, // REG(37)
FRAMERATE_CONST(600, 720), // REG(38)
- 800, // REG(43)
- 550, // REG(45)
+ 800, // R_DECELERATE_RATE
+ 550, // R_RUN_SPEED_LIMIT
-100, // REG(68)
600, // REG(69)
540, // IREG(66)
@@ -84,8 +84,8 @@ s16 sBootData[PLAYER_BOOTS_MAX][17] = {
FRAMERATE_CONST(400, 480), // REG(36)
0, // REG(37)
FRAMERATE_CONST(300, 360), // REG(38)
- 800, // REG(43)
- 500, // REG(45)
+ 800, // R_DECELERATE_RATE
+ 500, // R_RUN_SPEED_LIMIT
-100, // REG(68)
600, // REG(69)
590, // IREG(66)
@@ -104,8 +104,8 @@ s16 sBootData[PLAYER_BOOTS_MAX][17] = {
FRAMERATE_CONST(270, 324), // REG(36)
600, // REG(37)
FRAMERATE_CONST(50, 60), // REG(38)
- 800, // REG(43)
- 550, // REG(45)
+ 800, // R_DECELERATE_RATE
+ 550, // R_RUN_SPEED_LIMIT
-40, // REG(68)
400, // REG(69)
540, // IREG(66)
@@ -124,8 +124,8 @@ s16 sBootData[PLAYER_BOOTS_MAX][17] = {
FRAMERATE_CONST(400, 480), // REG(36)
800, // REG(37)
FRAMERATE_CONST(400, 480), // REG(38)
- 800, // REG(43)
- 550, // REG(45)
+ 800, // R_DECELERATE_RATE
+ 550, // R_RUN_SPEED_LIMIT
-100, // REG(68)
600, // REG(69)
540, // IREG(66)
@@ -589,8 +589,8 @@ void Player_SetBootData(PlayState* play, Player* this) {
REG(36) = bootRegs[5];
REG(37) = bootRegs[6];
REG(38) = bootRegs[7];
- REG(43) = bootRegs[8];
- REG(45) = bootRegs[9];
+ R_DECELERATE_RATE = bootRegs[8];
+ R_RUN_SPEED_LIMIT = bootRegs[9];
REG(68) = bootRegs[10];
REG(69) = bootRegs[11];
IREG(66) = bootRegs[12];
@@ -600,7 +600,7 @@ void Player_SetBootData(PlayState* play, Player* this) {
MREG(95) = bootRegs[16];
if (play->roomCtx.curRoom.behaviorType1 == ROOM_BEHAVIOR_TYPE1_2) {
- REG(45) = 500;
+ R_RUN_SPEED_LIMIT = 500;
}
}
@@ -1295,22 +1295,22 @@ s32 Player_OverrideLimbDrawGameplayCommon(PlayState* play, s32 limbIndex, Gfx**
}
if (limbIndex == PLAYER_LIMB_HEAD) {
- rot->x += this->unk_6BA;
- rot->y -= this->unk_6B8;
- rot->z += this->unk_6B6;
+ rot->x += this->headLimbRot.z;
+ rot->y -= this->headLimbRot.y;
+ rot->z += this->headLimbRot.x;
} else if (limbIndex == PLAYER_LIMB_UPPER) {
- if (this->unk_6B0 != 0) {
+ if (this->upperLimbYawSecondary != 0) {
Matrix_RotateZ(BINANG_TO_RAD(0x44C), MTXMODE_APPLY);
- Matrix_RotateY(BINANG_TO_RAD(this->unk_6B0), MTXMODE_APPLY);
+ Matrix_RotateY(BINANG_TO_RAD(this->upperLimbYawSecondary), MTXMODE_APPLY);
}
- if (this->unk_6BE != 0) {
- Matrix_RotateY(BINANG_TO_RAD(this->unk_6BE), MTXMODE_APPLY);
+ if (this->upperLimbRot.y != 0) {
+ Matrix_RotateY(BINANG_TO_RAD(this->upperLimbRot.y), MTXMODE_APPLY);
}
- if (this->unk_6BC != 0) {
- Matrix_RotateX(BINANG_TO_RAD(this->unk_6BC), MTXMODE_APPLY);
+ if (this->upperLimbRot.x != 0) {
+ Matrix_RotateX(BINANG_TO_RAD(this->upperLimbRot.x), MTXMODE_APPLY);
}
- if (this->unk_6C0 != 0) {
- Matrix_RotateZ(BINANG_TO_RAD(this->unk_6C0), MTXMODE_APPLY);
+ if (this->upperLimbRot.z != 0) {
+ Matrix_RotateZ(BINANG_TO_RAD(this->upperLimbRot.z), MTXMODE_APPLY);
}
} else if (limbIndex == PLAYER_LIMB_L_THIGH) {
s32 pad;
@@ -1788,7 +1788,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList, Ve
Matrix_MtxFToYXZRotS(&sp44, &heldActor->world.rot, 0);
heldActor->shape.rot = heldActor->world.rot;
- if (func_8002DD78(this) != 0) {
+ if (func_8002DD78(this)) {
Matrix_Translate(500.0f, 300.0f, 0.0f, MTXMODE_APPLY);
Player_DrawHookshotReticle(play, this,
(this->heldItemAction == PLAYER_IA_HOOKSHOT) ? 38600.0f : 77600.0f);
diff --git a/src/code/z_room.c b/src/code/z_room.c
index 6ac20bbd9a..80154f61c3 100644
--- a/src/code/z_room.c
+++ b/src/code/z_room.c
@@ -456,7 +456,11 @@ RoomShapeImageMultiBgEntry* Room_GetImageMultiBgEntry(RoomShapeImageMulti* roomS
PRINTF(VT_COL(RED, WHITE) T("z_room.c:カメラIDに一致するデータが存在しません camid=%d\n",
"z_room.c: Data consistent with camera id does not exist camid=%d\n") VT_RST,
bgCamIndex);
-#if PLATFORM_N64
+#if OOT_VERSION < NTSC_1_1
+ Fault_AddHungupAndCrash("../z_room.c", 724);
+#elif OOT_VERSION < PAL_1_0
+ Fault_AddHungupAndCrash("../z_room.c", 727);
+#elif OOT_VERSION < GC_JP
Fault_AddHungupAndCrash("../z_room.c", 721);
#else
LogUtils_HungupThread("../z_room.c", 726);
@@ -543,7 +547,11 @@ void Room_DrawImage(PlayState* play, Room* room, u32 flags) {
} else if (roomShape->amountType == ROOM_SHAPE_IMAGE_AMOUNT_MULTI) {
Room_DrawImageMulti(play, room, flags);
} else {
-#if PLATFORM_N64
+#if OOT_VERSION < NTSC_1_1
+ Fault_AddHungupAndCrash("../z_room.c", 849);
+#elif OOT_VERSION < PAL_1_0
+ Fault_AddHungupAndCrash("../z_room.c", 852);
+#elif OOT_VERSION < GC_JP
Fault_AddHungupAndCrash("../z_room.c", 836);
#else
LogUtils_HungupThread("../z_room.c", 841);
diff --git a/src/code/z_vimode.c b/src/code/z_vimode.c
index 8abcb62e79..a971810758 100644
--- a/src/code/z_vimode.c
+++ b/src/code/z_vimode.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "ultra64/viint.h"
+#include "versions.h"
void ViMode_LogPrint(OSViMode* osViMode) {
LOG_ADDRESS("osvimodep", osViMode, "../z_vimode.c", 87);
@@ -182,6 +183,7 @@ void ViMode_Save(ViMode* viMode) {
R_VI_MODE_EDIT_ULX_ADJ = viMode->leftAdjust;
R_VI_MODE_EDIT_LRX_ADJ = viMode->rightAdjust;
+#if OOT_VERSION >= PAL_1_0
if (SREG(58) == 1) {
SREG(58) = 0;
@@ -200,6 +202,7 @@ void ViMode_Save(ViMode* viMode) {
break;
}
}
+#endif
}
void ViMode_Load(ViMode* viMode) {
@@ -270,8 +273,18 @@ void ViMode_Update(ViMode* viMode, Input* input) {
// Load state from REGs
ViMode_Load(viMode);
+#if OOT_VERSION < PAL_1_0
+ if (viMode->editState == VI_MODE_EDIT_STATE_NEGATIVE_2) {
+ // Log comparison between the NTSC LAN1 mode and the custom mode
+ ViMode_LogPrint(&osViModeNtscLan1);
+ ViMode_LogPrint(&viMode->customViMode);
+ viMode->editState = VI_MODE_EDIT_STATE_NEGATIVE_1;
+ } else if ((viMode->editState == VI_MODE_EDIT_STATE_2) || (viMode->editState == VI_MODE_EDIT_STATE_3))
+#else
if ((viMode->editState == VI_MODE_EDIT_STATE_ACTIVE) || (viMode->editState == VI_MODE_EDIT_STATE_2) ||
- (viMode->editState == VI_MODE_EDIT_STATE_3)) {
+ (viMode->editState == VI_MODE_EDIT_STATE_3))
+#endif
+ {
gScreenWidth = viMode->viWidth;
gScreenHeight = viMode->viHeight;
@@ -333,6 +346,21 @@ void ViMode_Update(ViMode* viMode, Input* input) {
}
// Clamp adjustments
+#if OOT_VERSION < PAL_1_0
+ // Do not allow parts of the framebuffer to end up offscreen
+ if (viMode->leftAdjust < 0) {
+ viMode->leftAdjust = 0;
+ }
+ if (viMode->upperAdjust < 0) {
+ viMode->upperAdjust = 0;
+ }
+ if (viMode->rightAdjust > 0) {
+ viMode->rightAdjust = 0;
+ }
+ if (viMode->lowerAdjust > 0) {
+ viMode->lowerAdjust = 0;
+ }
+#else
if (viMode->editState >= VI_MODE_EDIT_STATE_2) {
// Allow parts of the framebuffer to possibly be offscreen by a small margin
if (viMode->leftAdjust < -16) {
@@ -362,11 +390,21 @@ void ViMode_Update(ViMode* viMode, Input* input) {
viMode->lowerAdjust = 0;
}
}
+#endif
// Configure the custom VI mode with the selected settings
ViMode_Configure(viMode, OS_VI_MPAL_LPN1, osTvType, viMode->loRes, viMode->antialiasOff, viMode->modeN,
viMode->fb16Bit, viMode->viWidth, viMode->viHeight, viMode->leftAdjust, viMode->rightAdjust,
viMode->upperAdjust, viMode->lowerAdjust);
+
+#if OOT_VERSION < PAL_1_0
+ if (viMode->editState == VI_MODE_EDIT_STATE_3) {
+ // Log comparison between the NTSC LAN1 mode and the custom mode
+ ViMode_LogPrint(&osViModeNtscLan1);
+ ViMode_LogPrint(&viMode->customViMode);
+ }
+#endif
+
ViMode_ConfigureFeatures(viMode, viMode->viFeatures);
if (viMode->editState == VI_MODE_EDIT_STATE_3) {
diff --git a/src/n64dd/z_n64dd.c b/src/n64dd/z_n64dd.c
index 60dbe7d917..a2fd113309 100644
--- a/src/n64dd/z_n64dd.c
+++ b/src/n64dd/z_n64dd.c
@@ -112,9 +112,9 @@ void func_801C6FD8(void) {
// Adds a HungupAndCrash
void func_801C7018(void) {
if (D_80121213 != 0) {
-#if OOT_VERSION == NTSC_1_0
+#if OOT_VERSION < NTSC_1_1
Fault_AddHungupAndCrash("../z_n64dd.c", 503);
-#elif OOT_VERSION == NTSC_1_1
+#elif OOT_VERSION < PAL_1_0
Fault_AddHungupAndCrash("../z_n64dd.c", 551);
#else
Fault_AddHungupAndCrash("../z_n64dd.c", 573);
@@ -215,7 +215,7 @@ void func_801C7268(void) {
} else if (B_801D9DC8 != 0) {
B_801D9DC8 = 0;
}
-#if OOT_VERSION == NTSC_1_0
+#if OOT_VERSION < NTSC_1_1
if (B_801D9DC0 != 0) {
sp1C = (osGetTime() - B_801D9DC0) * 64 / 3000;
@@ -338,7 +338,7 @@ s32 func_801C7658(void) {
B_801D9D50.unk_00 = 13;
(&func_801C8000)(&B_801D9D50);
-#if OOT_VERSION > NTSC_1_1
+#if OOT_VERSION >= PAL_1_0
StackCheck_Init(&B_801DAF88, B_801D9F88, STACK_TOP(B_801D9F88), 0, 0x100, "ddmsg");
osCreateThread(&B_801D9DD8, THREAD_ID_DDMSG, &func_801C711C, &B_801D9B90, STACK_TOP(B_801D9F88), THREAD_PRI_DDMSG);
osStartThread(&B_801D9DD8);
@@ -519,7 +519,7 @@ void func_801C7C1C(void* dest, s32 offset, s32 size) {
bcopy((u8*)sp4C, (u8*)dest + func_801C7BEC(sp5C) - sp54 + var_s1, sp50);
}
}
-#if OOT_VERSION == NTSC_1_0
+#if OOT_VERSION < NTSC_1_1
if (B_801D9DC0 != 0) {
temp_v1_2 = (osGetTime() - B_801D9DC0) * 64 / 3000;
if (1000000 - temp_v1_2 > 0) {
diff --git a/src/overlays/actors/ovl_Bg_Haka_Sgami/z_bg_haka_sgami.c b/src/overlays/actors/ovl_Bg_Haka_Sgami/z_bg_haka_sgami.c
index 3ac31d0c5c..4bb944cb9d 100644
--- a/src/overlays/actors/ovl_Bg_Haka_Sgami/z_bg_haka_sgami.c
+++ b/src/overlays/actors/ovl_Bg_Haka_Sgami/z_bg_haka_sgami.c
@@ -289,7 +289,7 @@ void BgHakaSgami_Update(Actor* thisx, PlayState* play) {
BgHakaSgami* this = (BgHakaSgami*)thisx;
Player* player = GET_PLAYER(play);
- if (!(player->stateFlags1 & (PLAYER_STATE1_6 | PLAYER_STATE1_DEAD | PLAYER_STATE1_28 | PLAYER_STATE1_29)) ||
+ if (!(player->stateFlags1 & (PLAYER_STATE1_TALKING | PLAYER_STATE1_DEAD | PLAYER_STATE1_28 | PLAYER_STATE1_29)) ||
(this->actionFunc == BgHakaSgami_SetupSpin)) {
this->actionFunc(this, play);
}
diff --git a/src/overlays/actors/ovl_Bg_Jya_Goroiwa/z_bg_jya_goroiwa.c b/src/overlays/actors/ovl_Bg_Jya_Goroiwa/z_bg_jya_goroiwa.c
index 4b49c9b87b..9e2a0d9ad4 100644
--- a/src/overlays/actors/ovl_Bg_Jya_Goroiwa/z_bg_jya_goroiwa.c
+++ b/src/overlays/actors/ovl_Bg_Jya_Goroiwa/z_bg_jya_goroiwa.c
@@ -200,7 +200,7 @@ void BgJyaGoroiwa_Update(Actor* thisx, PlayState* play) {
s32 bgId;
Vec3f checkPos;
- if (!(player->stateFlags1 & (PLAYER_STATE1_6 | PLAYER_STATE1_DEAD | PLAYER_STATE1_28 | PLAYER_STATE1_29))) {
+ if (!(player->stateFlags1 & (PLAYER_STATE1_TALKING | PLAYER_STATE1_DEAD | PLAYER_STATE1_28 | PLAYER_STATE1_29))) {
this->actionFunc(this, play);
BgJyaGoroiwa_UpdateRotation(this);
checkPos.x = this->actor.world.pos.x;
diff --git a/src/overlays/actors/ovl_Boss_Mo/z_boss_mo.c b/src/overlays/actors/ovl_Boss_Mo/z_boss_mo.c
index f80a01a11e..1849c7e41e 100644
--- a/src/overlays/actors/ovl_Boss_Mo/z_boss_mo.c
+++ b/src/overlays/actors/ovl_Boss_Mo/z_boss_mo.c
@@ -381,7 +381,7 @@ void BossMo_Init(Actor* thisx, PlayState* play2) {
} else {
Actor_SetScale(&this->actor, 0.01f);
BossMo_SetupTentacle(this, play);
- this->actor.colChkInfo.mass = 0xFF;
+ this->actor.colChkInfo.mass = MASS_IMMOVABLE;
MO_WATER_LEVEL(play) = -50;
this->waterTexAlpha = 90.0f;
this->actor.world.pos.y = MO_WATER_LEVEL(play);
diff --git a/src/overlays/actors/ovl_Boss_Tw/z_boss_tw.c b/src/overlays/actors/ovl_Boss_Tw/z_boss_tw.c
index 67b820b93a..72b07e4e01 100644
--- a/src/overlays/actors/ovl_Boss_Tw/z_boss_tw.c
+++ b/src/overlays/actors/ovl_Boss_Tw/z_boss_tw.c
@@ -484,7 +484,7 @@ void BossTw_Init(Actor* thisx, PlayState* play2) {
}
Actor_SetScale(&this->actor, 2.5 * 0.01f);
- this->actor.colChkInfo.mass = 255;
+ this->actor.colChkInfo.mass = MASS_IMMOVABLE;
this->actor.colChkInfo.health = 0;
Collider_InitCylinder(play, &this->collider);
diff --git a/src/overlays/actors/ovl_Boss_Va/z_boss_va.c b/src/overlays/actors/ovl_Boss_Va/z_boss_va.c
index 5fc0865c51..dac0649e4c 100644
--- a/src/overlays/actors/ovl_Boss_Va/z_boss_va.c
+++ b/src/overlays/actors/ovl_Boss_Va/z_boss_va.c
@@ -10,7 +10,7 @@
#include "assets/objects/gameplay_keep/gameplay_keep.h"
#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
- "ntsc-1.2:128"
+ "ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4 | ACTOR_FLAG_5)
diff --git a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c
index 11525d2fc2..9cb632da8a 100644
--- a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c
+++ b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c
@@ -6,6 +6,9 @@
#include "assets/objects/object_efc_star_field/object_efc_star_field.h"
#include "assets/objects/object_toki_objects/object_toki_objects.h"
+#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
+ "ntsc-1.2:128"
+
#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
void DemoKankyo_Init(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c
index e34ea1fae9..1cfb4255d3 100644
--- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c
+++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c
@@ -915,7 +915,7 @@ void DoorShutter_Update(Actor* thisx, PlayState* play) {
DoorShutter* this = (DoorShutter*)thisx;
Player* player = GET_PLAYER(play);
- if (!(player->stateFlags1 & (PLAYER_STATE1_6 | PLAYER_STATE1_DEAD | PLAYER_STATE1_10 | PLAYER_STATE1_28)) ||
+ if (!(player->stateFlags1 & (PLAYER_STATE1_TALKING | PLAYER_STATE1_DEAD | PLAYER_STATE1_10 | PLAYER_STATE1_28)) ||
(this->actionFunc == DoorShutter_WaitForObject)) {
this->actionFunc(this, play);
}
diff --git a/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c b/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c
index 3577d1394b..c21d760eb9 100644
--- a/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c
+++ b/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c
@@ -178,7 +178,7 @@ void EnDekunuts_SetupBurrow(EnDekunuts* this) {
void EnDekunuts_SetupBeginRun(EnDekunuts* this) {
Animation_MorphToPlayOnce(&this->skelAnime, &gDekuNutsUnburrowAnim, -3.0f);
this->collider.dim.height = 37;
- this->actor.colChkInfo.mass = 0x32;
+ this->actor.colChkInfo.mass = 50;
Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_DAMAGE);
this->collider.base.acFlags &= ~AC_ON;
this->actionFunc = EnDekunuts_BeginRun;
@@ -446,7 +446,7 @@ void EnDekunuts_ColliderCheck(EnDekunuts* this, PlayState* play) {
if (this->collider.base.acFlags & AC_HIT) {
this->collider.base.acFlags &= ~AC_HIT;
Actor_SetDropFlag(&this->actor, &this->collider.elem, true);
- if (this->actor.colChkInfo.mass == 0x32) {
+ if (this->actor.colChkInfo.mass == 50) {
if ((this->actor.colChkInfo.damageEffect != 0) || (this->actor.colChkInfo.damage != 0)) {
if (this->actor.colChkInfo.damageEffect != 1) {
if (this->actor.colChkInfo.damageEffect == 2) {
diff --git a/src/overlays/actors/ovl_En_Dnt_Jiji/z_en_dnt_jiji.c b/src/overlays/actors/ovl_En_Dnt_Jiji/z_en_dnt_jiji.c
index 5bd9228946..fb0b7bc340 100644
--- a/src/overlays/actors/ovl_En_Dnt_Jiji/z_en_dnt_jiji.c
+++ b/src/overlays/actors/ovl_En_Dnt_Jiji/z_en_dnt_jiji.c
@@ -83,7 +83,7 @@ void EnDntJiji_Init(Actor* thisx, PlayState* play) {
// "Deku Scrub mask show elder"
PRINTF(VT_FGCOL(YELLOW) "☆☆☆☆☆ デグナッツお面品評会長老 ☆☆☆☆☆ %x\n" VT_RST, this->stage);
this->actor.flags &= ~ACTOR_FLAG_ATTENTION_ENABLED;
- this->actor.colChkInfo.mass = 0xFF;
+ this->actor.colChkInfo.mass = MASS_IMMOVABLE;
this->actor.attentionRangeType = ATTENTION_RANGE_6;
this->actionFunc = EnDntJiji_SetFlower;
this->actor.gravity = -2.0f;
diff --git a/src/overlays/actors/ovl_En_Dnt_Nomal/z_en_dnt_nomal.c b/src/overlays/actors/ovl_En_Dnt_Nomal/z_en_dnt_nomal.c
index f6eaf076b5..2863aa1f80 100644
--- a/src/overlays/actors/ovl_En_Dnt_Nomal/z_en_dnt_nomal.c
+++ b/src/overlays/actors/ovl_En_Dnt_Nomal/z_en_dnt_nomal.c
@@ -128,7 +128,7 @@ void EnDntNomal_Init(Actor* thisx, PlayState* play) {
this->type = ENDNTNOMAL_TARGET;
}
this->actor.flags &= ~ACTOR_FLAG_ATTENTION_ENABLED;
- this->actor.colChkInfo.mass = 0xFF;
+ this->actor.colChkInfo.mass = MASS_IMMOVABLE;
this->objectId = -1;
if (this->type == ENDNTNOMAL_TARGET) {
PRINTF("\n\n");
@@ -676,7 +676,7 @@ void EnDntNomal_SetupStageAttack(EnDntNomal* this, PlayState* play) {
if (this->timer3 == 0) {
this->endFrame = (f32)Animation_GetLastFrame(&gDntStageSpitAnim);
Animation_Change(&this->skelAnime, &gDntStageSpitAnim, 1.0f, 0.0f, this->endFrame, ANIMMODE_ONCE, -10.0f);
- this->actor.colChkInfo.mass = 0xFF;
+ this->actor.colChkInfo.mass = MASS_IMMOVABLE;
this->isSolid = true;
this->timer2 = 0;
Actor_ChangeCategory(play, &play->actorCtx, &this->actor, ACTORCAT_ENEMY);
diff --git a/src/overlays/actors/ovl_En_Dodojr/z_en_dodojr.c b/src/overlays/actors/ovl_En_Dodojr/z_en_dodojr.c
index 7b5d7a7586..0090a17cd3 100644
--- a/src/overlays/actors/ovl_En_Dodojr/z_en_dodojr.c
+++ b/src/overlays/actors/ovl_En_Dodojr/z_en_dodojr.c
@@ -63,7 +63,7 @@ static ColliderCylinderInit sCylinderInit = {
{ 18, 20, 0, { 0, 0, 0 } },
};
-static CollisionCheckInfoInit2 sColChkInit = { 1, 2, 25, 25, 0xFF };
+static CollisionCheckInfoInit2 sColChkInit = { 1, 2, 25, 25, MASS_IMMOVABLE };
void EnDodojr_Init(Actor* thisx, PlayState* play) {
EnDodojr* this = (EnDodojr*)thisx;
diff --git a/src/overlays/actors/ovl_En_Gb/z_en_gb.c b/src/overlays/actors/ovl_En_Gb/z_en_gb.c
index e7fa809a06..40612e8646 100644
--- a/src/overlays/actors/ovl_En_Gb/z_en_gb.c
+++ b/src/overlays/actors/ovl_En_Gb/z_en_gb.c
@@ -176,7 +176,7 @@ void EnGb_Init(Actor* thisx, PlayState* play) {
ActorShape_Init(&this->dyna.actor.shape, 0.0f, ActorShadow_DrawCircle, 35.0f);
Actor_SetScale(&this->dyna.actor, 0.01f);
- this->dyna.actor.colChkInfo.mass = 0xFF;
+ this->dyna.actor.colChkInfo.mass = MASS_IMMOVABLE;
this->dyna.actor.speed = 0.0f;
this->dyna.actor.velocity.y = 0.0f;
this->dyna.actor.gravity = -1.0f;
diff --git a/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c b/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c
index a4f7d74c1e..209b0b7c4d 100644
--- a/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c
+++ b/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c
@@ -739,7 +739,7 @@ void EnGoroiwa_Update(Actor* thisx, PlayState* play) {
s32 pad;
s32 bgId;
- if (!(player->stateFlags1 & (PLAYER_STATE1_6 | PLAYER_STATE1_DEAD | PLAYER_STATE1_28 | PLAYER_STATE1_29))) {
+ if (!(player->stateFlags1 & (PLAYER_STATE1_TALKING | PLAYER_STATE1_DEAD | PLAYER_STATE1_28 | PLAYER_STATE1_29))) {
if (this->collisionDisabledTimer > 0) {
this->collisionDisabledTimer--;
}
diff --git a/src/overlays/actors/ovl_En_Horse/z_en_horse.c b/src/overlays/actors/ovl_En_Horse/z_en_horse.c
index fb57ef0148..843427fc8b 100644
--- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c
+++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c
@@ -724,7 +724,7 @@ void EnHorse_ResetRace(EnHorse* this, PlayState* play) {
s32 EnHorse_PlayerCanMove(EnHorse* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if ((player->stateFlags1 & PLAYER_STATE1_0) || func_8002DD78(GET_PLAYER(play)) == 1 ||
+ if ((player->stateFlags1 & PLAYER_STATE1_0) || func_8002DD78(GET_PLAYER(play)) == true ||
(player->stateFlags1 & PLAYER_STATE1_20) || ((this->stateFlags & ENHORSE_FLAG_19) && !this->inRace) ||
this->action == ENHORSE_ACT_HBA || player->actor.flags & ACTOR_FLAG_TALK ||
play->csCtx.state != CS_STATE_IDLE) {
@@ -3608,9 +3608,9 @@ void EnHorse_Update(Actor* thisx, PlayState* play2) {
}
if (thisx->speed == 0.0f && !(this->stateFlags & ENHORSE_FLAG_19)) {
- thisx->colChkInfo.mass = 0xFF;
+ thisx->colChkInfo.mass = MASS_IMMOVABLE;
} else {
- thisx->colChkInfo.mass = 0xFE;
+ thisx->colChkInfo.mass = MASS_HEAVY;
}
if (thisx->speed >= 5.0f) {
diff --git a/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c b/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c
index 25683388aa..839b25df2b 100644
--- a/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c
+++ b/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c
@@ -90,7 +90,11 @@ s32 EnHorseGameCheck_InitIngoRace(EnHorseGameCheckBase* base, PlayState* play) {
this->ingoHorse = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, -250.0f, 1.0f, -1650.0f, 0, 0x4000, 0, 0x8003);
if (this->ingoHorse == NULL) {
+#if OOT_VERSION < NTSC_1_1
+ LogUtils_HungupThread("../z_en_horse_game_check.c", 382);
+#else
LogUtils_HungupThread("../z_en_horse_game_check.c", 385);
+#endif
}
this->startTimer = 0;
this->finishTimer = 0;
diff --git a/src/overlays/actors/ovl_En_Mk/z_en_mk.c b/src/overlays/actors/ovl_En_Mk/z_en_mk.c
index ba73bf7732..ab748fe164 100644
--- a/src/overlays/actors/ovl_En_Mk/z_en_mk.c
+++ b/src/overlays/actors/ovl_En_Mk/z_en_mk.c
@@ -60,7 +60,7 @@ void EnMk_Init(Actor* thisx, PlayState* play) {
Animation_PlayLoop(&this->skelAnime, &object_mk_Anim_000D88);
Collider_InitCylinder(play, &this->collider);
Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
- this->actor.colChkInfo.mass = 0xFF;
+ this->actor.colChkInfo.mass = MASS_IMMOVABLE;
Actor_SetScale(&this->actor, 0.01f);
this->actionFunc = EnMk_Wait;
diff --git a/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c b/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c
index 5a89a5e2b3..d2f6fbdea6 100644
--- a/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c
+++ b/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c
@@ -147,7 +147,7 @@ void EnNutsball_Update(Actor* thisx, PlayState* play) {
Player* player = GET_PLAYER(play);
s32 pad;
- if (!(player->stateFlags1 & (PLAYER_STATE1_6 | PLAYER_STATE1_DEAD | PLAYER_STATE1_28 | PLAYER_STATE1_29)) ||
+ if (!(player->stateFlags1 & (PLAYER_STATE1_TALKING | PLAYER_STATE1_DEAD | PLAYER_STATE1_28 | PLAYER_STATE1_29)) ||
(this->actionFunc == func_80ABBB34)) {
this->actionFunc(this, play);
diff --git a/src/overlays/actors/ovl_En_Ny/z_en_ny.c b/src/overlays/actors/ovl_En_Ny/z_en_ny.c
index 2c04b71db8..e31bd37d52 100644
--- a/src/overlays/actors/ovl_En_Ny/z_en_ny.c
+++ b/src/overlays/actors/ovl_En_Ny/z_en_ny.c
@@ -138,7 +138,7 @@ void EnNy_Init(Actor* thisx, PlayState* play) {
// "Dummy new initials"
PRINTF("ダミーニュウ イニシャル[ %d ] !!\n", this->actor.params);
PRINTF("En_Ny_actor_move2[ %x ] !!\n", EnNy_UpdateUnused);
- this->actor.colChkInfo.mass = 0xFF;
+ this->actor.colChkInfo.mass = MASS_IMMOVABLE;
this->actor.update = EnNy_UpdateUnused;
this->collider.base.colMaterial = COL_MATERIAL_METAL;
}
diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c
index 04450335d0..45b047f53f 100644
--- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c
+++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c
@@ -578,7 +578,7 @@ void EnOkuta_Update(Actor* thisx, PlayState* play2) {
Vec3f prevPos;
s32 canRestorePrevPos;
- if (!(player->stateFlags1 & (PLAYER_STATE1_6 | PLAYER_STATE1_DEAD | PLAYER_STATE1_28 | PLAYER_STATE1_29))) {
+ if (!(player->stateFlags1 & (PLAYER_STATE1_TALKING | PLAYER_STATE1_DEAD | PLAYER_STATE1_28 | PLAYER_STATE1_29))) {
if (this->actor.params == 0) {
EnOkuta_ColliderCheck(this, play);
if (!WaterBox_GetSurfaceImpl(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z,
diff --git a/src/overlays/actors/ovl_En_Ru1/z_en_ru1.c b/src/overlays/actors/ovl_En_Ru1/z_en_ru1.c
index c6c8effa6a..fc5a5a441c 100644
--- a/src/overlays/actors/ovl_En_Ru1/z_en_ru1.c
+++ b/src/overlays/actors/ovl_En_Ru1/z_en_ru1.c
@@ -1658,7 +1658,7 @@ void func_80AEE7C4(EnRu1* this, PlayState* play) {
*unk_370 = 0.0f;
} else {
player = GET_PLAYER(play);
- if (player->stateFlags2 & PLAYER_STATE2_28) {
+ if (player->stateFlags2 & PLAYER_STATE2_IDLE_FIDGET) {
this->unk_370 += 1.0f;
if (this->action != 32) {
if (*unk_370 > 30.0f) {
diff --git a/src/overlays/actors/ovl_En_Skb/z_en_skb.c b/src/overlays/actors/ovl_En_Skb/z_en_skb.c
index 824528d5d9..da5b8bd4bc 100644
--- a/src/overlays/actors/ovl_En_Skb/z_en_skb.c
+++ b/src/overlays/actors/ovl_En_Skb/z_en_skb.c
@@ -160,7 +160,7 @@ void EnSkb_Init(Actor* thisx, PlayState* play) {
this->actor.colChkInfo.damageTable = &sDamageTable;
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 0.0f);
this->actor.focus.pos = this->actor.world.pos;
- this->actor.colChkInfo.mass = 0xFE;
+ this->actor.colChkInfo.mass = MASS_HEAVY;
this->actor.colChkInfo.health = 2;
this->actor.shape.yOffset = -8000.0f;
SkelAnime_Init(play, &this->skelAnime, &gStalchildSkel, &gStalchildUncurlingAnim, this->jointTable,
diff --git a/src/overlays/actors/ovl_En_Trap/z_en_trap.c b/src/overlays/actors/ovl_En_Trap/z_en_trap.c
index 8763edd047..420e5a1ca1 100644
--- a/src/overlays/actors/ovl_En_Trap/z_en_trap.c
+++ b/src/overlays/actors/ovl_En_Trap/z_en_trap.c
@@ -113,7 +113,7 @@ void EnTrap_Init(Actor* thisx, PlayState* play) {
Collider_SetCylinder(play, &this->collider, thisx, &sCylinderInit);
ActorShape_Init(&thisx->shape, 0.0f, ActorShadow_DrawCircle, 0.0f);
thisx->attentionRangeType = ATTENTION_RANGE_3;
- thisx->colChkInfo.mass = 0xFF;
+ thisx->colChkInfo.mass = MASS_IMMOVABLE;
}
void EnTrap_Destroy(Actor* thisx, PlayState* play) {
diff --git a/src/overlays/actors/ovl_Fishing/z_fishing.c b/src/overlays/actors/ovl_Fishing/z_fishing.c
index 72fe16901f..255d5fc336 100644
--- a/src/overlays/actors/ovl_Fishing/z_fishing.c
+++ b/src/overlays/actors/ovl_Fishing/z_fishing.c
@@ -35,7 +35,7 @@
#include "cic6105.h"
#endif
-#pragma increment_block_number "gc-eu:183 gc-eu-mq:183 gc-jp:183 gc-jp-ce:183 gc-jp-mq:183 gc-us:183 gc-us-mq:183" \
+#pragma increment_block_number "gc-eu:180 gc-eu-mq:180 gc-jp:180 gc-jp-ce:180 gc-jp-mq:180 gc-us:180 gc-us-mq:180" \
"ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
#define FLAGS ACTOR_FLAG_4
diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c
index 4453a78805..f3ed0fd249 100644
--- a/src/overlays/actors/ovl_player_actor/z_player.c
+++ b/src/overlays/actors/ovl_player_actor/z_player.c
@@ -256,11 +256,11 @@ s32 func_80852F38(PlayState* play, Player* this);
s32 Player_TryCsAction(PlayState* play, Actor* actor, s32 csAction);
void func_80853080(Player* this, PlayState* play);
s32 Player_InflictDamage(PlayState* play, s32 damage);
-void func_80853148(PlayState* play, Actor* actor);
+void Player_StartTalking(PlayState* play, Actor* actor);
void Player_Action_80840450(Player* this, PlayState* play);
void Player_Action_808407CC(Player* this, PlayState* play);
-void Player_Action_80840BC8(Player* this, PlayState* play);
+void Player_Action_Idle(Player* this, PlayState* play);
void Player_Action_80840DE4(Player* this, PlayState* play);
void Player_Action_808414F8(Player* this, PlayState* play);
void Player_Action_8084170C(Player* this, PlayState* play);
@@ -298,7 +298,7 @@ void Player_Action_80846408(Player* this, PlayState* play);
void Player_Action_808464B0(Player* this, PlayState* play);
void Player_Action_80846578(Player* this, PlayState* play);
void Player_Action_8084B1D8(Player* this, PlayState* play);
-void Player_Action_8084B530(Player* this, PlayState* play);
+void Player_Action_Talk(Player* this, PlayState* play);
void Player_Action_8084B78C(Player* this, PlayState* play);
void Player_Action_8084B898(Player* this, PlayState* play);
void Player_Action_8084B9E4(Player* this, PlayState* play);
@@ -326,7 +326,7 @@ void Player_Action_8084EAC0(Player* this, PlayState* play);
void Player_Action_SwingBottle(Player* this, PlayState* play);
void Player_Action_8084EED8(Player* this, PlayState* play);
void Player_Action_8084EFC0(Player* this, PlayState* play);
-void Player_Action_8084F104(Player* this, PlayState* play);
+void Player_Action_ExchangeItem(Player* this, PlayState* play);
void Player_Action_8084F390(Player* this, PlayState* play);
void Player_Action_8084F608(Player* this, PlayState* play);
void Player_Action_8084F698(Player* this, PlayState* play);
@@ -1111,40 +1111,84 @@ static LinkAnimationHeader* D_80853D4C[][3] = {
&gPlayerAnim_link_fighter_Rside_jump_endR },
};
-static LinkAnimationHeader* sSpecialIdleAnimations[][2] = {
+typedef enum FidgetType {
+ /* 0x00 */ FIDGET_LOOK_AROUND,
+ /* 0x01 */ FIDGET_COLD,
+ /* 0x02 */ FIDGET_WARM,
+ /* 0x03 */ FIDGET_HOT, // same animations as FIDGET_WARM
+ /* 0x04 */ FIDGET_STRETCH_1,
+ /* 0x05 */ FIDGET_STRETCH_2, // same animations as FIDGET_STRETCH_1
+ /* 0x06 */ FIDGET_STRETCH_3, // same animations as FIDGET_STRETCH_1
+ /* 0x07 */ FIDGET_CRIT_HEALTH_START,
+ /* 0x08 */ FIDGET_CRIT_HEALTH_LOOP,
+ /* 0x09 */ FIDGET_SWORD_SWING,
+ /* 0x0A */ FIDGET_ADJUST_TUNIC,
+ /* 0x0B */ FIDGET_TAP_FEET,
+ /* 0x0C */ FIDGET_ADJUST_SHIELD,
+ /* 0x0D */ FIDGET_SWORD_SWING_TWO_HAND
+} FidgetType;
+
+static LinkAnimationHeader* sFidgetAnimations[][2] = {
+ // FIDGET_LOOK_AROUND
{ &gPlayerAnim_link_normal_wait_typeA_20f, &gPlayerAnim_link_normal_waitF_typeA_20f },
+
+ // FIDGET_COLD
{ &gPlayerAnim_link_normal_wait_typeC_20f, &gPlayerAnim_link_normal_waitF_typeC_20f },
+
+ // FIDGET_WARM
{ &gPlayerAnim_link_normal_wait_typeB_20f, &gPlayerAnim_link_normal_waitF_typeB_20f },
+
+ // FIDGET_HOT
{ &gPlayerAnim_link_normal_wait_typeB_20f, &gPlayerAnim_link_normal_waitF_typeB_20f },
+
+ // FIDGET_STRETCH_1
{ &gPlayerAnim_link_wait_typeD_20f, &gPlayerAnim_link_waitF_typeD_20f },
+
+ // FIDGET_STRETCH_2
{ &gPlayerAnim_link_wait_typeD_20f, &gPlayerAnim_link_waitF_typeD_20f },
+
+ // FIDGET_STRETCH_3
{ &gPlayerAnim_link_wait_typeD_20f, &gPlayerAnim_link_waitF_typeD_20f },
+
+ // FIDGET_CRIT_HEALTH_START
{ &gPlayerAnim_link_wait_heat1_20f, &gPlayerAnim_link_waitF_heat1_20f },
+
+ // FIDGET_CRIT_HEALTH_LOOP
{ &gPlayerAnim_link_wait_heat2_20f, &gPlayerAnim_link_waitF_heat2_20f },
+
+ // FIDGET_SWORD_SWING
{ &gPlayerAnim_link_wait_itemD1_20f, &gPlayerAnim_link_wait_itemD1_20f },
+
+ // FIDGET_ADJUST_TUNIC
{ &gPlayerAnim_link_wait_itemA_20f, &gPlayerAnim_link_waitF_itemA_20f },
+
+ // FIDGET_TAP_FEET
{ &gPlayerAnim_link_wait_itemB_20f, &gPlayerAnim_link_waitF_itemB_20f },
+
+ // FIDGET_ADJUST_SHIELD
{ &gPlayerAnim_link_wait_itemC_20f, &gPlayerAnim_link_wait_itemC_20f },
+
+ // FIDGET_SWORD_SWING_TWO_HAND
{ &gPlayerAnim_link_wait_itemD2_20f, &gPlayerAnim_link_wait_itemD2_20f }
};
-static AnimSfxEntry sSpecialIdleAnimSfxSneeze[] = {
+static AnimSfxEntry sFidgetAnimSfxSneeze[] = {
{ NA_SE_VO_LI_SNEEZE, -ANIMSFX_DATA(ANIMSFX_TYPE_VOICE, 8) },
};
-static AnimSfxEntry sSpecialIdleAnimSfxSweat[] = {
+static AnimSfxEntry sFidgetAnimSfxSweat[] = {
{ NA_SE_VO_LI_SWEAT, -ANIMSFX_DATA(ANIMSFX_TYPE_VOICE, 18) },
};
-static AnimSfxEntry sSpecialIdleAnimSfxHeat1[] = {
+static AnimSfxEntry sFidgetAnimSfxCritHealthStart[] = {
{ NA_SE_VO_LI_BREATH_REST, -ANIMSFX_DATA(ANIMSFX_TYPE_VOICE, 13) },
};
-static AnimSfxEntry sSpecialIdleAnimSfxHeat2[] = {
+static AnimSfxEntry sFidgetAnimSfxCritHealthLoop[] = {
{ NA_SE_VO_LI_BREATH_REST, -ANIMSFX_DATA(ANIMSFX_TYPE_VOICE, 10) },
};
-static AnimSfxEntry sSpecialIdleAnimSfxBelt[] = {
+static AnimSfxEntry sFidgetAnimSfxTunic[] = {
{ NA_SE_PL_CALM_HIT, ANIMSFX_DATA(ANIMSFX_TYPE_GENERAL, 44) },
{ NA_SE_PL_CALM_HIT, ANIMSFX_DATA(ANIMSFX_TYPE_GENERAL, 48) },
{ NA_SE_PL_CALM_HIT, ANIMSFX_DATA(ANIMSFX_TYPE_GENERAL, 52) },
@@ -1152,96 +1196,96 @@ static AnimSfxEntry sSpecialIdleAnimSfxBelt[] = {
{ NA_SE_PL_CALM_HIT, -ANIMSFX_DATA(ANIMSFX_TYPE_GENERAL, 60) },
};
-static AnimSfxEntry sSpecialIdleAnimSfxFootTap[] = {
+static AnimSfxEntry sFidgetAnimSfxTapFeet[] = {
{ 0, ANIMSFX_DATA(ANIMSFX_TYPE_WALKING, 25) }, { 0, ANIMSFX_DATA(ANIMSFX_TYPE_WALKING, 30) },
{ 0, ANIMSFX_DATA(ANIMSFX_TYPE_WALKING, 44) }, { 0, ANIMSFX_DATA(ANIMSFX_TYPE_WALKING, 48) },
{ 0, ANIMSFX_DATA(ANIMSFX_TYPE_WALKING, 52) }, { 0, -ANIMSFX_DATA(ANIMSFX_TYPE_WALKING, 56) },
};
-static AnimSfxEntry sSpecialIdleAnimSfxShield[] = {
+static AnimSfxEntry sFidgetAnimSfxShield[] = {
{ NA_SE_IT_SHIELD_POSTURE, ANIMSFX_DATA(ANIMSFX_TYPE_GENERAL, 16) },
{ NA_SE_IT_SHIELD_POSTURE, ANIMSFX_DATA(ANIMSFX_TYPE_GENERAL, 20) },
{ NA_SE_IT_SHIELD_POSTURE, -ANIMSFX_DATA(ANIMSFX_TYPE_GENERAL, 70) },
};
-static AnimSfxEntry sSpecialIdleAnimSfxSword1[] = {
+static AnimSfxEntry sFidgetAnimSfxSword[] = {
{ NA_SE_IT_HAMMER_SWING, ANIMSFX_DATA(ANIMSFX_TYPE_GENERAL, 10) },
{ NA_SE_VO_LI_AUTO_JUMP, ANIMSFX_DATA(ANIMSFX_TYPE_VOICE, 10) },
{ NA_SE_IT_SWORD_SWING, ANIMSFX_DATA(ANIMSFX_TYPE_GENERAL, 22) },
{ NA_SE_VO_LI_SWORD_N, -ANIMSFX_DATA(ANIMSFX_TYPE_VOICE, 22) },
};
-static AnimSfxEntry sSpecialIdleAnimSfxSword2[] = {
+static AnimSfxEntry sFidgetAnimSfxSwordTwoHand[] = {
{ NA_SE_IT_SWORD_SWING, ANIMSFX_DATA(ANIMSFX_TYPE_GENERAL, 39) },
{ NA_SE_VO_LI_SWORD_N, -ANIMSFX_DATA(ANIMSFX_TYPE_VOICE, 39) },
};
-static AnimSfxEntry sSpecialIdleAnimSfxRelax[] = {
+static AnimSfxEntry sFidgetAnimSfxStretch[] = {
{ NA_SE_VO_LI_RELAX, -ANIMSFX_DATA(ANIMSFX_TYPE_VOICE, 20) },
};
-typedef enum SpecialIdleAnimSfxType {
- /* 0x0 */ SPECIAL_IDLE_ANIMSFX_NONE,
- /* 0x1 */ SPECIAL_IDLE_ANIMSFX_SNEEZE,
- /* 0x2 */ SPECIAL_IDLE_ANIMSFX_SWEAT,
- /* 0x3 */ SPECIAL_IDLE_ANIMSFX_HEAT_1,
- /* 0x4 */ SPECIAL_IDLE_ANIMSFX_HEAT_2,
- /* 0x5 */ SPECIAL_IDLE_ANIMSFX_BELT,
- /* 0x6 */ SPECIAL_IDLE_ANIMSFX_FOOT_TAP,
- /* 0x7 */ SPECIAL_IDLE_ANIMSFX_SHIELD,
- /* 0x8 */ SPECIAL_IDLE_ANIMSFX_SWORD_1,
- /* 0x9 */ SPECIAL_IDLE_ANIMSFX_SWORD_2,
- /* 0xA */ SPECIAL_IDLE_ANIMSFX_RELAX,
-} SpecialIdleAnimSfxType;
+typedef enum FidgetAnimSfxType {
+ /* 0x0 */ FIDGET_ANIMSFX_NONE,
+ /* 0x1 */ FIDGET_ANIMSFX_SNEEZE,
+ /* 0x2 */ FIDGET_ANIMSFX_SWEAT,
+ /* 0x3 */ FIDGET_ANIMSFX_CRIT_HEALTH_START,
+ /* 0x4 */ FIDGET_ANIMSFX_CRIT_HEALTH_LOOP,
+ /* 0x5 */ FIDGET_ANIMSFX_TUNIC,
+ /* 0x6 */ FIDGET_ANIMSFX_TAP_FEET,
+ /* 0x7 */ FIDGET_ANIMSFX_SHIELD,
+ /* 0x8 */ FIDGET_ANIMSFX_SWORD,
+ /* 0x9 */ FIDGET_ANIMSFX_SWORD_TWO_HAND,
+ /* 0xA */ FIDGET_ANIMSFX_STRETCH
+} FidgetAnimSfxType;
-static AnimSfxEntry* sSpecialIdleAnimSfxLists[] = {
- sSpecialIdleAnimSfxSneeze, // SPECIAL_IDLE_ANIMSFX_SNEEZE
- sSpecialIdleAnimSfxSweat, // SPECIAL_IDLE_ANIMSFX_SWEAT
- sSpecialIdleAnimSfxHeat1, // SPECIAL_IDLE_ANIMSFX_HEAT_1
- sSpecialIdleAnimSfxHeat2, // SPECIAL_IDLE_ANIMSFX_HEAT_2
- sSpecialIdleAnimSfxBelt, // SPECIAL_IDLE_ANIMSFX_BELT
- sSpecialIdleAnimSfxFootTap, // SPECIAL_IDLE_ANIMSFX_FOOT_TAP
- sSpecialIdleAnimSfxShield, // SPECIAL_IDLE_ANIMSFX_SHIELD
- sSpecialIdleAnimSfxSword1, // SPECIAL_IDLE_ANIMSFX_SWORD_1
- sSpecialIdleAnimSfxSword2, // SPECIAL_IDLE_ANIMSFX_SWORD_2
- sSpecialIdleAnimSfxRelax, // SPECIAL_IDLE_ANIMSFX_RELAX
- NULL, // unused entry
+static AnimSfxEntry* sFidgetAnimSfxLists[] = {
+ sFidgetAnimSfxSneeze, // FIDGET_ANIMSFX_SNEEZE
+ sFidgetAnimSfxSweat, // FIDGET_ANIMSFX_SWEAT
+ sFidgetAnimSfxCritHealthStart, // FIDGET_ANIMSFX_CRIT_HEALTH_START
+ sFidgetAnimSfxCritHealthLoop, // FIDGET_ANIMSFX_CRIT_HEALTH_LOOP
+ sFidgetAnimSfxTunic, // FIDGET_ANIMSFX_TUNIC
+ sFidgetAnimSfxTapFeet, // FIDGET_ANIMSFX_TAP_FEET
+ sFidgetAnimSfxShield, // FIDGET_ANIMSFX_SHIELD
+ sFidgetAnimSfxSword, // FIDGET_ANIMSFX_SWORD
+ sFidgetAnimSfxSwordTwoHand, // FIDGET_ANIMSFX_SWORD_TWO_HAND
+ sFidgetAnimSfxStretch, // FIDGET_ANIMSFX_STRETCH
+ NULL, // unused entry
};
/**
- * The indices in this array correspond 1 to 1 with the entries of sSpecialIdleAnimations.
- * There is also an extra SPECIAL_IDLE_ANIMSFX_NONE at the end that doesn't correspond to any animation.
+ * The indices in this array correspond 1 to 1 with the entries of sFidgetAnimations.
+ * There is also an extra FIDGET_ANIMSFX_NONE at the end that doesn't correspond to any animation.
*/
-static u8 sSpecialIdleAnimSfxTypes[] = {
- SPECIAL_IDLE_ANIMSFX_NONE, // used by gPlayerAnim_link_normal_wait_typeA_20f
- SPECIAL_IDLE_ANIMSFX_NONE, // used by gPlayerAnim_link_normal_waitF_typeA_20f
- SPECIAL_IDLE_ANIMSFX_SNEEZE, // used by gPlayerAnim_link_normal_wait_typeC_20f
- SPECIAL_IDLE_ANIMSFX_SNEEZE, // used by gPlayerAnim_link_normal_waitF_typeC_20f
- SPECIAL_IDLE_ANIMSFX_SWEAT, // used by gPlayerAnim_link_normal_wait_typeB_20f
- SPECIAL_IDLE_ANIMSFX_SWEAT, // used by gPlayerAnim_link_normal_waitF_typeB_20f
- SPECIAL_IDLE_ANIMSFX_SWEAT, // used by gPlayerAnim_link_normal_wait_typeB_20f
- SPECIAL_IDLE_ANIMSFX_SWEAT, // used by gPlayerAnim_link_normal_waitF_typeB_20f
- SPECIAL_IDLE_ANIMSFX_RELAX, // used by gPlayerAnim_link_wait_typeD_20f
- SPECIAL_IDLE_ANIMSFX_RELAX, // used by gPlayerAnim_link_waitF_typeD_20f
- SPECIAL_IDLE_ANIMSFX_RELAX, // used by gPlayerAnim_link_wait_typeD_20f
- SPECIAL_IDLE_ANIMSFX_RELAX, // used by gPlayerAnim_link_waitF_typeD_20f
- SPECIAL_IDLE_ANIMSFX_RELAX, // used by gPlayerAnim_link_wait_typeD_20f
- SPECIAL_IDLE_ANIMSFX_RELAX, // used by gPlayerAnim_link_waitF_typeD_20f
- SPECIAL_IDLE_ANIMSFX_HEAT_1, // used by gPlayerAnim_link_wait_heat1_20f
- SPECIAL_IDLE_ANIMSFX_HEAT_1, // used by gPlayerAnim_link_waitF_heat1_20f
- SPECIAL_IDLE_ANIMSFX_HEAT_2, // used by gPlayerAnim_link_wait_heat2_20f
- SPECIAL_IDLE_ANIMSFX_HEAT_2, // used by gPlayerAnim_link_waitF_heat2_20f
- SPECIAL_IDLE_ANIMSFX_SWORD_1, // used by gPlayerAnim_link_wait_itemD1_20f
- SPECIAL_IDLE_ANIMSFX_SWORD_1, // used by gPlayerAnim_link_wait_itemD1_20f
- SPECIAL_IDLE_ANIMSFX_BELT, // used by gPlayerAnim_link_wait_itemA_20f
- SPECIAL_IDLE_ANIMSFX_BELT, // used by gPlayerAnim_link_waitF_itemA_20f
- SPECIAL_IDLE_ANIMSFX_FOOT_TAP, // used by gPlayerAnim_link_wait_itemB_20f
- SPECIAL_IDLE_ANIMSFX_FOOT_TAP, // used by gPlayerAnim_link_waitF_itemB_20f
- SPECIAL_IDLE_ANIMSFX_SHIELD, // used by gPlayerAnim_link_wait_itemC_20f
- SPECIAL_IDLE_ANIMSFX_SHIELD, // used by gPlayerAnim_link_wait_itemC_20f
- SPECIAL_IDLE_ANIMSFX_SWORD_2, // used by gPlayerAnim_link_wait_itemD2_20f
- SPECIAL_IDLE_ANIMSFX_SWORD_2, // used by gPlayerAnim_link_wait_itemD2_20f
- SPECIAL_IDLE_ANIMSFX_NONE, // unused, doesnt correspond to any animation
+static u8 sFidgetAnimSfxTypes[] = {
+ FIDGET_ANIMSFX_NONE, // FIDGET_LOOK_AROUND
+ FIDGET_ANIMSFX_NONE, // FIDGET_LOOK_AROUND (sword/shield in hand)
+ FIDGET_ANIMSFX_SNEEZE, // FIDGET_COLD
+ FIDGET_ANIMSFX_SNEEZE, // FIDGET_COLD (sword/shield in hand)
+ FIDGET_ANIMSFX_SWEAT, // FIDGET_WARM
+ FIDGET_ANIMSFX_SWEAT, // FIDGET_WARM (sword/shield in hand)
+ FIDGET_ANIMSFX_SWEAT, // FIDGET_HOT
+ FIDGET_ANIMSFX_SWEAT, // FIDGET_HOT (sword/shield in hand)
+ FIDGET_ANIMSFX_STRETCH, // FIDGET_STRETCH_1
+ FIDGET_ANIMSFX_STRETCH, // FIDGET_STRETCH_1 (sword/shield in hand)
+ FIDGET_ANIMSFX_STRETCH, // FIDGET_STRETCH_2
+ FIDGET_ANIMSFX_STRETCH, // FIDGET_STRETCH_2 (sword/shield in hand)
+ FIDGET_ANIMSFX_STRETCH, // FIDGET_STRETCH_3
+ FIDGET_ANIMSFX_STRETCH, // FIDGET_STRETCH_3 (sword/shield in hand)
+ FIDGET_ANIMSFX_CRIT_HEALTH_START, // FIDGET_CRIT_HEALTH_START
+ FIDGET_ANIMSFX_CRIT_HEALTH_START, // FIDGET_CRIT_HEALTH_START (sword/shield in hand)
+ FIDGET_ANIMSFX_CRIT_HEALTH_LOOP, // FIDGET_CRIT_HEALTH_LOOP
+ FIDGET_ANIMSFX_CRIT_HEALTH_LOOP, // FIDGET_CRIT_HEALTH_LOOP (sword/shield in hand)
+ FIDGET_ANIMSFX_SWORD, // FIDGET_SWORD_SWING
+ FIDGET_ANIMSFX_SWORD, // FIDGET_SWORD_SWING (sword/shield in hand)
+ FIDGET_ANIMSFX_TUNIC, // FIDGET_ADJUST_TUNIC
+ FIDGET_ANIMSFX_TUNIC, // FIDGET_ADJUST_TUNIC (sword/shield in hand)
+ FIDGET_ANIMSFX_TAP_FEET, // FIDGET_TAP_FEET
+ FIDGET_ANIMSFX_TAP_FEET, // FIDGET_TAP_FEET (sword/shield in hand)
+ FIDGET_ANIMSFX_SHIELD, // FIDGET_ADJUST_SHIELD
+ FIDGET_ANIMSFX_SHIELD, // FIDGET_ADJUST_SHIELD (sword/shield in hand)
+ FIDGET_ANIMSFX_SWORD_TWO_HAND, // FIDGET_SWORD_SWING_TWO_HAND
+ FIDGET_ANIMSFX_SWORD_TWO_HAND, // FIDGET_SWORD_SWING_TWO_HAND (sword/shield in hand)
+ FIDGET_ANIMSFX_NONE, // unused, doesnt correspond to any animation
};
// Used to map item IDs to item actions
@@ -1680,7 +1724,7 @@ BAD_RETURN(s32) func_80832224(Player* this) {
this->unk_6AD = 0;
}
-s32 func_8083224C(PlayState* play) {
+s32 Player_IsTalking(PlayState* play) {
Player* this = GET_PLAYER(play);
return CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_TALK);
@@ -2185,41 +2229,49 @@ void func_808332F4(Player* this, PlayState* play) {
/**
* Get the appropriate Idle animation based on current `modelAnimType`.
- * This is used as the "primary" idle animation.
+ * This is the default idle animation.
*
- * For special idle animations (which for example, change based on environment)
- * see `sSpecialIdleAnimations`.
+ * For fidget idle animations (which can for example, change based on environment)
+ * see `sFidgetAnimations`.
*/
LinkAnimationHeader* Player_GetIdleAnim(Player* this) {
return GET_PLAYER_ANIM(PLAYER_ANIMGROUP_wait, this->modelAnimType);
}
/**
- * Checks if the current animation is a "special" idle animation.
- * If it is, the index into `sSpecialIdleAnimations` is returned (plus one).
- * If the current animation is a "primary" idle animation, -1 is returned.
+ * Return values for `Player_CheckForIdleAnim`
+ */
+#define IDLE_ANIM_DEFAULT -1
+#define IDLE_ANIM_NONE 0
+// Fidget idle anims are returned by index. See `sFidgetAnimations` and `FidgetType`.
+
+/**
+ * Checks if the current animation is an idle animation.
+ * If the current animation is a fidget animation, the index into
+ * `sFidgetAnimations` is returned (plus one).
+ * If the current animation is a default idle animation, -1 is returned.
* Lastly if the current animation is neither of these, 0 is returned.
*/
-s32 Player_CheckSpecialIdleAnim(Player* this) {
+s32 Player_CheckForIdleAnim(Player* this) {
if (Player_GetIdleAnim(this) != this->skelAnime.animation) {
- LinkAnimationHeader** specialAnim;
+ LinkAnimationHeader** fidgetAnim;
s32 i;
- for (i = 0, specialAnim = &sSpecialIdleAnimations[0][0]; i < 28; i++, specialAnim++) {
- if (this->skelAnime.animation == *specialAnim) {
+ for (i = 0, fidgetAnim = &sFidgetAnimations[0][0]; i < ARRAY_COUNT_2D(sFidgetAnimations); i++, fidgetAnim++) {
+ if (this->skelAnime.animation == *fidgetAnim) {
return i + 1;
}
}
- return 0;
+ return IDLE_ANIM_NONE;
}
- return -1;
+ return IDLE_ANIM_DEFAULT;
}
-void Player_ProcessSpecialIdleAnimSfxList(Player* this, s32 specialIdleAnimIndex) {
- if (sSpecialIdleAnimSfxTypes[specialIdleAnimIndex] != SPECIAL_IDLE_ANIMSFX_NONE) {
- Player_ProcessAnimSfxList(this, sSpecialIdleAnimSfxLists[sSpecialIdleAnimSfxTypes[specialIdleAnimIndex] - 1]);
+void Player_ProcessFidgetAnimSfxList(Player* this, s32 fidgetAnimIndex) {
+ if (sFidgetAnimSfxTypes[fidgetAnimIndex] != FIDGET_ANIMSFX_NONE) {
+ Player_ProcessAnimSfxList(this, sFidgetAnimSfxLists[sFidgetAnimSfxTypes[fidgetAnimIndex] - 1]);
}
}
@@ -2785,7 +2837,7 @@ void func_80834644(PlayState* play, Player* this) {
Player_SetUpperActionFunc(this, sItemActionUpdateFuncs[this->heldItemAction]);
this->unk_834 = 0;
- this->unk_6AC = 0;
+ this->idleType = PLAYER_IDLE_DEFAULT;
Player_DetachHeldActor(play, this);
this->stateFlags1 &= ~PLAYER_STATE1_START_CHANGING_HELD_ITEM;
}
@@ -2883,16 +2935,16 @@ s32 Player_UpperAction_ChangeHeldItem(Player* this, PlayState* play) {
(sUseHeldItem || ((this->modelAnimType != PLAYER_ANIMTYPE_3) && (play->shootingGalleryStatus == 0)))))) {
Player_SetUpperActionFunc(this, sItemActionUpdateFuncs[this->heldItemAction]);
this->unk_834 = 0;
- this->unk_6AC = 0;
+ this->idleType = PLAYER_IDLE_DEFAULT;
sHeldItemButtonIsHeldDown = sUseHeldItem;
return this->upperActionFunc(this, play);
}
- if (Player_CheckSpecialIdleAnim(this) != 0) {
+ if (Player_CheckForIdleAnim(this) != IDLE_ANIM_NONE) {
Player_WaitToFinishItemChange(play, this);
Player_AnimPlayOnce(play, this, Player_GetIdleAnim(this));
- this->unk_6AC = 0;
+ this->idleType = PLAYER_IDLE_DEFAULT;
} else {
Player_WaitToFinishItemChange(play, this);
}
@@ -2936,7 +2988,7 @@ s32 func_80834C74(Player* this, PlayState* play) {
Player_SetUpperActionFunc(this, sItemActionUpdateFuncs[this->heldItemAction]);
LinkAnimation_PlayLoop(play, &this->upperSkelAnime,
GET_PLAYER_ANIM(PLAYER_ANIMGROUP_wait, this->modelAnimType));
- this->unk_6AC = 0;
+ this->idleType = PLAYER_IDLE_DEFAULT;
this->upperActionFunc(this, play);
return false;
@@ -3082,10 +3134,10 @@ s32 func_808351D4(Player* this, PlayState* play) {
sp2C = 1;
}
- Math_ScaledStepToS(&this->unk_6C0, 1200, 400);
- this->unk_6AE |= 0x100;
+ Math_ScaledStepToS(&this->upperLimbRot.z, 1200, 400);
+ this->unk_6AE_rotFlags |= UNK6AE_ROT_UPPER_Z;
- if ((this->unk_836 == 0) && (Player_CheckSpecialIdleAnim(this) == 0) &&
+ if ((this->unk_836 == 0) && (Player_CheckForIdleAnim(this) == IDLE_ANIM_NONE) &&
(this->skelAnime.animation == &gPlayerAnim_link_bow_side_walk)) {
LinkAnimation_PlayOnce(play, &this->upperSkelAnime, D_808543CC[sp2C]);
this->unk_836 = -1;
@@ -3379,38 +3431,56 @@ s32 Player_SetupAction(PlayState* play, Player* this, PlayerActionFunc actionFun
Player_FinishAnimMovement(this);
- this->stateFlags1 &= ~(PLAYER_STATE1_2 | PLAYER_STATE1_6 | PLAYER_STATE1_26 | PLAYER_STATE1_28 | PLAYER_STATE1_29 |
- PLAYER_STATE1_31);
- this->stateFlags2 &= ~(PLAYER_STATE2_19 | PLAYER_STATE2_27 | PLAYER_STATE2_28);
+ this->stateFlags1 &= ~(PLAYER_STATE1_2 | PLAYER_STATE1_TALKING | PLAYER_STATE1_26 | PLAYER_STATE1_28 |
+ PLAYER_STATE1_29 | PLAYER_STATE1_31);
+ this->stateFlags2 &= ~(PLAYER_STATE2_19 | PLAYER_STATE2_27 | PLAYER_STATE2_IDLE_FIDGET);
this->stateFlags3 &= ~(PLAYER_STATE3_1 | PLAYER_STATE3_3 | PLAYER_STATE3_FLYING_WITH_HOOKSHOT);
this->av1.actionVar1 = 0;
this->av2.actionVar2 = 0;
- this->unk_6AC = 0;
+ this->idleType = PLAYER_IDLE_DEFAULT;
func_808326F0(this);
return 1;
}
-void func_80835DAC(PlayState* play, Player* this, PlayerActionFunc actionFunc, s32 flags) {
- s32 temp;
+/**
+ * Calls `Player_SetupAction` to setup a new action, but takes extra measures to
+ * preserve AnimMovement while doing so.
+ */
+void Player_SetupActionPreserveAnimMovement(PlayState* play, Player* this, PlayerActionFunc actionFunc, s32 flags) {
+ s32 savedMovementFlags;
- temp = this->skelAnime.movementFlags;
+ savedMovementFlags = this->skelAnime.movementFlags;
+
+ // Setting `skelAnime.movementFlags` to 0 will prevent `Player_FinishAnimMovement` from ending
+ // AnimMovement when `Player_SetupAction` is called.
this->skelAnime.movementFlags = 0;
+
Player_SetupAction(play, this, actionFunc, flags);
- this->skelAnime.movementFlags = temp;
+ this->skelAnime.movementFlags = savedMovementFlags;
}
-void func_80835DE4(PlayState* play, Player* this, PlayerActionFunc actionFunc, s32 flags) {
- s32 temp;
+/**
+ * Calls `Player_SetupAction` to setup a new action, but takes extra measures to
+ * preserve the current itemAction while doing so.
+ *
+ * Note that `itemAction` must be PLAYER_IA_NONE or higher for the action change to take place.
+ */
+void Player_SetupActionPreserveItemAction(PlayState* play, Player* this, PlayerActionFunc actionFunc, s32 flags) {
+ s32 savedItemAction;
- if (this->itemAction >= 0) {
- temp = this->itemAction;
+ if (this->itemAction >= PLAYER_IA_NONE) {
+ savedItemAction = this->itemAction;
+
+ // Setting `itemAction` to `heldItemAction` will prevent `func_8008EC70` from running when
+ // `Player_SetupAction` is called.
this->itemAction = this->heldItemAction;
+
Player_SetupAction(play, this, actionFunc, flags);
- this->itemAction = temp;
+ this->itemAction = savedItemAction;
Player_SetModels(this, Player_ActionToModelGroup(this, this->itemAction));
}
}
@@ -3616,7 +3686,7 @@ s32 Player_UpdateUpperBody(Player* this, PlayState* play) {
this->yaw = this->actor.shape.rot.y;
this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
this->hoverBootsTimer = 0;
- this->unk_6AE |= 0x43;
+ this->unk_6AE_rotFlags |= UNK6AE_ROT_FOCUS_X | UNK6AE_ROT_FOCUS_Y | UNK6AE_ROT_UPPER_X;
Player_PlayVoiceSfx(this, NA_SE_VO_LI_LASH);
return true;
}
@@ -3635,14 +3705,14 @@ s32 Player_UpdateUpperBody(Player* this, PlayState* play) {
if (this->upperAnimInterpWeight != 0.0f) {
// The functionality contained within this block of code is never used in practice
// because `upperAnimInterpWeight` is always 0.
- if ((Player_CheckSpecialIdleAnim(this) == 0) || (this->speedXZ != 0.0f)) {
+ if ((Player_CheckForIdleAnim(this) == IDLE_ANIM_NONE) || (this->speedXZ != 0.0f)) {
AnimTaskQueue_AddCopyUsingMapInverted(play, this->skelAnime.limbCount, this->upperSkelAnime.jointTable,
this->skelAnime.jointTable, sUpperBodyLimbCopyMap);
}
Math_StepToF(&this->upperAnimInterpWeight, 0.0f, 0.25f);
AnimTaskQueue_AddInterp(play, this->skelAnime.limbCount, this->skelAnime.jointTable,
this->upperSkelAnime.jointTable, 1.0f - this->upperAnimInterpWeight);
- } else if ((Player_CheckSpecialIdleAnim(this) == 0) || (this->speedXZ != 0.0f)) {
+ } else if ((Player_CheckForIdleAnim(this) == IDLE_ANIM_NONE) || (this->speedXZ != 0.0f)) {
// Only copy the upper body animation to the upper body limbs in the main skeleton.
// Doing so allows the main skeleton to play its own animation for the lower body limbs.
AnimTaskQueue_AddCopyUsingMap(play, this->skelAnime.limbCount, this->skelAnime.jointTable,
@@ -3704,48 +3774,68 @@ void Player_UpdateShapeYaw(Player* this, PlayState* play) {
this->unk_87C = this->actor.shape.rot.y - previousYaw;
}
-s32 func_808369C8(s16* pValue, s16 arg1, s16 arg2, s16 arg3, s16 arg4, s16 arg5) {
- s16 temp1;
- s16 temp2;
- s16 temp3;
+/**
+ * Step a value by `step` to a `target` value.
+ * Constrains the value to be no further than `constraintRange` from `constraintMid` (accounting for wrapping).
+ * Constrains the value to be no further than `overflowRange` from 0.
+ * If this second constraint is enforced, return how much the value was past by the range, or return 0.
+ *
+ * @return The amount by which the value overflowed the absolute range defined by `overflowRange`
+ */
+s32 Player_ScaledStepBinangClamped(s16* pValue, s16 target, s16 step, s16 overflowRange, s16 constraintMid,
+ s16 constraintRange) {
+ s16 diff;
+ s16 clampedDiff;
+ s16 valueBeforeOverflowClamp;
- temp1 = temp2 = arg4 - *pValue;
- temp2 = CLAMP(temp2, -arg5, arg5);
- *pValue += (s16)(temp1 - temp2);
+ // Clamp value to [constraintMid - constraintRange , constraintMid + constraintRange]
+ // This is more involved than a simple `CLAMP`, to account for binang wrapping
+ diff = clampedDiff = constraintMid - *pValue;
+ clampedDiff = CLAMP(clampedDiff, -constraintRange, constraintRange);
+ *pValue += (s16)(diff - clampedDiff);
- Math_ScaledStepToS(pValue, arg1, arg2);
+ Math_ScaledStepToS(pValue, target, step);
- temp3 = *pValue;
- if (*pValue < -arg3) {
- *pValue = -arg3;
- } else if (*pValue > arg3) {
- *pValue = arg3;
+ valueBeforeOverflowClamp = *pValue;
+ if (*pValue < -overflowRange) {
+ *pValue = -overflowRange;
+ } else if (*pValue > overflowRange) {
+ *pValue = overflowRange;
}
- return temp3 - *pValue;
+ return valueBeforeOverflowClamp - *pValue;
}
s32 func_80836AB8(Player* this, s32 arg1) {
- s16 sp36;
- s16 var;
+ s16 targetUpperBodyYaw;
+ s16 yaw;
- var = this->actor.shape.rot.y;
- if (arg1 != 0) {
- var = this->actor.focus.rot.y;
- this->unk_6BC = this->actor.focus.rot.x;
- this->unk_6AE |= 0x41;
+ yaw = this->actor.shape.rot.y;
+ if (arg1) {
+ yaw = this->actor.focus.rot.y;
+ this->upperLimbRot.x = this->actor.focus.rot.x;
+ this->unk_6AE_rotFlags |= UNK6AE_ROT_FOCUS_X | UNK6AE_ROT_UPPER_X;
} else {
- func_808369C8(&this->unk_6BC,
- func_808369C8(&this->unk_6B6, this->actor.focus.rot.x, 600, 10000, this->actor.focus.rot.x, 0),
- 200, 4000, this->unk_6B6, 10000);
- sp36 = this->actor.focus.rot.y - var;
- func_808369C8(&sp36, 0, 200, 24000, this->unk_6BE, 8000);
- var = this->actor.focus.rot.y - sp36;
- func_808369C8(&this->unk_6B8, sp36 - this->unk_6BE, 200, 8000, sp36, 8000);
- func_808369C8(&this->unk_6BE, sp36, 200, 8000, this->unk_6B8, 8000);
- this->unk_6AE |= 0xD9;
+ // Step the head pitch to the focus pitch.
+ // If the head cannot be pitched enough, pitch the upper body.
+ Player_ScaledStepBinangClamped(&this->upperLimbRot.x,
+ Player_ScaledStepBinangClamped(&this->headLimbRot.x, this->actor.focus.rot.x,
+ 600, 10000, this->actor.focus.rot.x, 0),
+ 200, 4000, this->headLimbRot.x, 10000);
+
+ // Step the upper body and head yaw to the focus yaw.
+ // Eventually prefers turning the upper body rather than the head.
+ targetUpperBodyYaw = this->actor.focus.rot.y - yaw;
+ Player_ScaledStepBinangClamped(&targetUpperBodyYaw, 0, 200, 24000, this->upperLimbRot.y, 8000);
+ yaw = this->actor.focus.rot.y - targetUpperBodyYaw;
+ Player_ScaledStepBinangClamped(&this->headLimbRot.y, targetUpperBodyYaw - this->upperLimbRot.y, 200, 8000,
+ targetUpperBodyYaw, 8000);
+ Player_ScaledStepBinangClamped(&this->upperLimbRot.y, targetUpperBodyYaw, 200, 8000, this->headLimbRot.y, 8000);
+
+ this->unk_6AE_rotFlags |=
+ UNK6AE_ROT_FOCUS_X | UNK6AE_ROT_HEAD_X | UNK6AE_ROT_HEAD_Y | UNK6AE_ROT_UPPER_X | UNK6AE_ROT_UPPER_Y;
}
- return var;
+ return yaw;
}
/**
@@ -3817,7 +3907,7 @@ void Player_UpdateZTargeting(Player* this, PlayState* play) {
ignoreLeash = true;
}
- isTalking = func_8083224C(play);
+ isTalking = Player_IsTalking(play);
if (isTalking || (this->zTargetActiveTimer != 0) ||
(this->stateFlags1 & (PLAYER_STATE1_CHARGING_SPIN_ATTACK | PLAYER_STATE1_BOOMERANG_THROWN))) {
@@ -3998,8 +4088,14 @@ s32 Player_CalcSpeedAndYawFromControlStick(PlayState* play, Player* this, f32* o
return false;
}
-s32 func_8083721C(Player* this) {
- return Math_StepToF(&this->speedXZ, 0.0f, REG(43) / 100.0f);
+/**
+ * Steps speed toward zero to at a rate defined by current boot data.
+ * After zero is reached, speed will be held at zero.
+ *
+ * @return true if speed is 0, false otherwise
+ */
+s32 Player_DecelerateToZero(Player* this) {
+ return Math_StepToF(&this->speedXZ, 0.0f, R_DECELERATE_RATE / 100.0f);
}
/**
@@ -4085,7 +4181,7 @@ static s8 sActionHandlerList6[] = {
-PLAYER_ACTION_HANDLER_7,
};
-static s8 sActionHandlerList7[] = {
+static s8 sActionHandlerListIdle[] = {
PLAYER_ACTION_HANDLER_0, PLAYER_ACTION_HANDLER_11, PLAYER_ACTION_HANDLER_1, PLAYER_ACTION_HANDLER_2,
PLAYER_ACTION_HANDLER_3, PLAYER_ACTION_HANDLER_5, PLAYER_ACTION_HANDLER_TALK, PLAYER_ACTION_HANDLER_9,
PLAYER_ACTION_HANDLER_8, PLAYER_ACTION_HANDLER_7, -PLAYER_ACTION_HANDLER_ROLL,
@@ -4182,7 +4278,7 @@ s32 Player_TryActionHandlerList(PlayState* play, Player* this, s8* actionHandler
}
if (func_8008F128(this)) {
- this->unk_6AE |= 0x41;
+ this->unk_6AE_rotFlags |= UNK6AE_ROT_FOCUS_X | UNK6AE_ROT_UPPER_X;
return true;
}
@@ -4215,14 +4311,14 @@ typedef enum PlayerActionInterruptResult {
/**
* An Action Interrupt allows for ending an action early, toward the end of an animation.
*
- * First, `sActionHandlerList7` will be checked to see if any of those actions should be used.
+ * First, `sActionHandlerListIdle` will be checked to see if any of those actions should be used.
* It should be noted that the `updateUpperBody` argument passed to `Player_TryActionHandlerList`
* is `true`. This means that an item can be used during the interrupt window.
*
* If no actions from the Action Handler List are used, then the control stick is checked to see if
* any movement should occur.
*
- * Note that while this function can set up a new action with `sActionHandlerList7`, this function
+ * Note that while this function can set up a new action with `sActionHandlerListIdle`, this function
* will not set up an appropriate action for moving.
* It is the callers responsibility to react accordingly to `PLAYER_INTERRUPT_MOVE`.
*
@@ -4234,7 +4330,7 @@ s32 Player_TryActionInterrupt(PlayState* play, Player* this, SkelAnime* skelAnim
s16 yawTarget;
if ((skelAnime->endFrame - frameRange) <= skelAnime->curFrame) {
- if (Player_TryActionHandlerList(play, this, sActionHandlerList7, true)) {
+ if (Player_TryActionHandlerList(play, this, sActionHandlerListIdle, true)) {
return PLAYER_INTERRUPT_NEW_ACTION;
}
@@ -5273,7 +5369,7 @@ s32 Player_ActionHandler_1(Player* this, PlayState* play) {
if (this->doorType <= PLAYER_DOORTYPE_AJAR) {
doorActor->textId = 0xD0;
- func_80853148(play, doorActor);
+ Player_StartTalking(play, doorActor);
return 0;
}
@@ -5474,7 +5570,7 @@ void func_80839FFC(Player* this, PlayState* play) {
} else if (Player_FriendlyLockOnOrParallel(this)) {
actionFunc = Player_Action_808407CC;
} else {
- actionFunc = Player_Action_80840BC8;
+ actionFunc = Player_Action_Idle;
}
Player_SetupAction(play, this, actionFunc, 1);
@@ -5482,6 +5578,7 @@ void func_80839FFC(Player* this, PlayState* play) {
void func_8083A060(Player* this, PlayState* play) {
func_80839FFC(this, play);
+
if (Player_CheckHostileLockOn(this)) {
this->av2.actionVar2 = 1;
}
@@ -5537,10 +5634,10 @@ void func_8083A0F4(PlayState* play, Player* this) {
}
}
-void func_8083A2F8(PlayState* play, Player* this) {
- func_80835DAC(play, this, Player_Action_8084B530, 0);
+void Player_SetupTalk(PlayState* play, Player* this) {
+ Player_SetupActionPreserveAnimMovement(play, this, Player_Action_Talk, 0);
- this->stateFlags1 |= PLAYER_STATE1_6 | PLAYER_STATE1_29;
+ this->stateFlags1 |= PLAYER_STATE1_TALKING | PLAYER_STATE1_29;
if (this->actor.textId != 0) {
Message_StartTextbox(play, this->actor.textId, this->talkActor);
@@ -5549,7 +5646,7 @@ void func_8083A2F8(PlayState* play, Player* this) {
}
void func_8083A360(PlayState* play, Player* this) {
- func_80835DAC(play, this, Player_Action_8084CC98, 0);
+ Player_SetupActionPreserveAnimMovement(play, this, Player_Action_8084CC98, 0);
}
void func_8083A388(PlayState* play, Player* this) {
@@ -5560,7 +5657,7 @@ void func_8083A3B0(PlayState* play, Player* this) {
s32 sp1C = this->av2.actionVar2;
s32 sp18 = this->av1.actionVar1;
- func_80835DAC(play, this, Player_Action_8084BF1C, 0);
+ Player_SetupActionPreserveAnimMovement(play, this, Player_Action_8084BF1C, 0);
this->actor.velocity.y = 0.0f;
this->av2.actionVar2 = sp1C;
@@ -5568,11 +5665,11 @@ void func_8083A3B0(PlayState* play, Player* this) {
}
void func_8083A40C(PlayState* play, Player* this) {
- func_80835DAC(play, this, Player_Action_8084C760, 0);
+ Player_SetupActionPreserveAnimMovement(play, this, Player_Action_8084C760, 0);
}
void func_8083A434(PlayState* play, Player* this) {
- func_80835DAC(play, this, Player_Action_8084E6D4, 0);
+ Player_SetupActionPreserveAnimMovement(play, this, Player_Action_8084E6D4, 0);
this->stateFlags1 |= PLAYER_STATE1_10 | PLAYER_STATE1_29;
@@ -5843,7 +5940,7 @@ void func_8083AE40(Player* this, s16 objectId) {
}
void func_8083AF44(PlayState* play, Player* this, s32 magicSpell) {
- func_80835DE4(play, this, Player_Action_808507F4, 0);
+ Player_SetupActionPreserveItemAction(play, this, Player_Action_808507F4, 0);
this->av1.actionVar1 = magicSpell - 3;
@@ -5866,8 +5963,8 @@ void func_8083AF44(PlayState* play, Player* this, s32 magicSpell) {
}
void func_8083B010(Player* this) {
- this->actor.focus.rot.x = this->actor.focus.rot.z = this->unk_6B6 = this->unk_6B8 = this->unk_6BA = this->unk_6BC =
- this->unk_6BE = this->unk_6C0 = 0;
+ this->actor.focus.rot.x = this->actor.focus.rot.z = this->headLimbRot.x = this->headLimbRot.y =
+ this->headLimbRot.z = this->upperLimbRot.x = this->upperLimbRot.y = this->upperLimbRot.z = 0;
this->actor.focus.rot.y = this->actor.shape.rot.y;
}
@@ -5946,14 +6043,14 @@ s32 Player_ActionHandler_13(Player* this, PlayState* play) {
(this->exchangeItemId == EXCH_ITEM_BOTTLE_BLUE_FIRE))))))) {
if ((play->actorCtx.titleCtx.delayTimer == 0) && (play->actorCtx.titleCtx.alpha == 0)) {
- func_80835DE4(play, this, Player_Action_8084F104, 0);
+ Player_SetupActionPreserveItemAction(play, this, Player_Action_ExchangeItem, 0);
if (sp2C >= 0) {
giEntry = &sGetItemTable[D_80854528[sp2C] - 1];
func_8083AE40(this, giEntry->objectId);
}
- this->stateFlags1 |= PLAYER_STATE1_6 | PLAYER_STATE1_28 | PLAYER_STATE1_29;
+ this->stateFlags1 |= PLAYER_STATE1_TALKING | PLAYER_STATE1_28 | PLAYER_STATE1_29;
if (sp2C >= 0) {
sp2C = sp2C + 1;
@@ -5973,7 +6070,7 @@ s32 Player_ActionHandler_13(Player* this, PlayState* play) {
(this->itemAction == PLAYER_IA_MAGIC_BEAN))) {
if (this->exchangeItemId == EXCH_ITEM_MAGIC_BEAN) {
Inventory_ChangeAmmo(ITEM_MAGIC_BEAN, -1);
- func_80835DE4(play, this, Player_Action_8084279C, 0);
+ Player_SetupActionPreserveItemAction(play, this, Player_Action_8084279C, 0);
this->stateFlags1 |= PLAYER_STATE1_29;
this->av2.actionVar2 = 0x50;
this->av1.actionVar1 = -1;
@@ -6008,20 +6105,20 @@ s32 Player_ActionHandler_13(Player* this, PlayState* play) {
sp2C = Player_ActionToBottle(this, this->itemAction);
if (sp2C >= 0) {
if (sp2C == 0xC) {
- func_80835DE4(play, this, Player_Action_8084EED8, 0);
+ Player_SetupActionPreserveItemAction(play, this, Player_Action_8084EED8, 0);
Player_AnimPlayOnceAdjusted(play, this, &gPlayerAnim_link_bottle_bug_out);
func_80835EA4(play, 3);
} else if ((sp2C > 0) && (sp2C < 4)) {
- func_80835DE4(play, this, Player_Action_8084EFC0, 0);
+ Player_SetupActionPreserveItemAction(play, this, Player_Action_8084EFC0, 0);
Player_AnimPlayOnceAdjusted(play, this, &gPlayerAnim_link_bottle_fish_out);
func_80835EA4(play, (sp2C == 1) ? 1 : 5);
} else {
- func_80835DE4(play, this, Player_Action_8084EAC0, 0);
+ Player_SetupActionPreserveItemAction(play, this, Player_Action_8084EAC0, 0);
Player_AnimChangeOnceMorphAdjusted(play, this, &gPlayerAnim_link_bottle_drink_demo_start);
func_80835EA4(play, 2);
}
} else {
- func_80835DE4(play, this, Player_Action_8084E3C4, 0);
+ Player_SetupActionPreserveItemAction(play, this, Player_Action_8084E3C4, 0);
Player_AnimPlayOnceAdjusted(play, this, &gPlayerAnim_link_normal_okarina_start);
this->stateFlags2 |= PLAYER_STATE2_27;
func_80835EA4(play, (this->unk_6A8 != NULL) ? 0x5B : 0x5A);
@@ -6151,7 +6248,7 @@ s32 Player_ActionHandler_Talk(Player* this, PlayState* play) {
// This is especially important to prevent unwanted behavior with regards to mask trading.
this->currentMask = sSavedCurrentMask;
- func_80853148(play, talkOfferActor);
+ Player_StartTalking(play, talkOfferActor);
return true;
}
@@ -6337,7 +6434,7 @@ void func_8083C0B8(Player* this, PlayState* play) {
}
void func_8083C0E8(Player* this, PlayState* play) {
- Player_SetupAction(play, this, Player_Action_80840BC8, 1);
+ Player_SetupAction(play, this, Player_Action_Idle, 1);
Player_AnimPlayOnce(play, this, Player_GetIdleAnim(this));
this->yaw = this->actor.shape.rot.y;
}
@@ -6413,7 +6510,7 @@ s32 Player_ActionHandler_11(Player* this, PlayState* play) {
this->unk_86C = 0.0f;
func_80833C3C(this);
}
- this->unk_6BC = this->unk_6BE = this->unk_6C0 = 0;
+ this->upperLimbRot.x = this->upperLimbRot.y = this->upperLimbRot.z = 0;
}
frame = Animation_GetLastFrame(anim);
@@ -6436,7 +6533,7 @@ s32 func_8083C484(Player* this, f32* arg1, s16* arg2) {
s16 yaw = this->yaw - *arg2;
if (ABS(yaw) > 0x6000) {
- if (func_8083721C(this)) {
+ if (Player_DecelerateToZero(this)) {
*arg1 = 0.0f;
*arg2 = this->yaw;
} else {
@@ -6668,7 +6765,7 @@ void func_8083CD54(PlayState* play, Player* this, s16 yaw) {
void func_8083CE0C(Player* this, PlayState* play) {
LinkAnimationHeader* anim;
- Player_SetupAction(play, this, Player_Action_80840BC8, 1);
+ Player_SetupAction(play, this, Player_Action_Idle, 1);
if (this->unk_870 < 0.5f) {
anim = GET_PLAYER_ANIM(PLAYER_ANIMGROUP_waitR2wait, this->modelAnimType);
@@ -6973,18 +7070,21 @@ void func_8083D6EC(PlayState* play, Player* this) {
s32 func_8083DB98(Player* this, s32 arg1) {
Actor* focusActor = this->focusActor;
- Vec3f sp30;
- s16 sp2E;
- s16 sp2C;
+ Vec3f playerHeadPos;
+ s16 targetFocusRotX;
+ s16 targetFocusRotY;
- sp30.x = this->actor.world.pos.x;
- sp30.y = this->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f;
- sp30.z = this->actor.world.pos.z;
- sp2E = Math_Vec3f_Pitch(&sp30, &focusActor->focus.pos);
- sp2C = Math_Vec3f_Yaw(&sp30, &focusActor->focus.pos);
- Math_SmoothStepToS(&this->actor.focus.rot.y, sp2C, 4, 10000, 0);
- Math_SmoothStepToS(&this->actor.focus.rot.x, sp2E, 4, 10000, 0);
- this->unk_6AE |= 2;
+ playerHeadPos.x = this->actor.world.pos.x;
+ playerHeadPos.y = this->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f;
+ playerHeadPos.z = this->actor.world.pos.z;
+
+ targetFocusRotX = Math_Vec3f_Pitch(&playerHeadPos, &focusActor->focus.pos);
+ targetFocusRotY = Math_Vec3f_Yaw(&playerHeadPos, &focusActor->focus.pos);
+
+ Math_SmoothStepToS(&this->actor.focus.rot.y, targetFocusRotY, 4, 10000, 0);
+ Math_SmoothStepToS(&this->actor.focus.rot.x, targetFocusRotX, 4, 10000, 0);
+
+ this->unk_6AE_rotFlags |= UNK6AE_ROT_FOCUS_Y;
return func_80836AB8(this, arg1);
}
@@ -6999,9 +7099,9 @@ void func_8083DC54(Player* this, PlayState* play) {
if (this->focusActor != NULL) {
if (func_8002DD78(this) || func_808334B4(this)) {
- func_8083DB98(this, 1);
+ func_8083DB98(this, true);
} else {
- func_8083DB98(this, 0);
+ func_8083DB98(this, false);
}
return;
}
@@ -7024,22 +7124,22 @@ void func_8083DC54(Player* this, PlayState* play) {
void func_8083DDC8(Player* this, PlayState* play) {
if (!func_8002DD78(this) && !func_808334B4(this) && (this->speedXZ > 5.0f)) {
- s16 temp1;
- s16 temp2;
+ s16 targetPitch;
+ s16 targetRoll;
- temp1 = this->speedXZ * 200.0f;
- temp2 = (s16)(this->yaw - this->actor.shape.rot.y) * this->speedXZ * 0.1f;
+ targetPitch = this->speedXZ * 200.0f;
+ targetRoll = (s16)(this->yaw - this->actor.shape.rot.y) * this->speedXZ * 0.1f;
- temp1 = CLAMP(temp1, -4000, 4000);
- temp2 = CLAMP(-temp2, -4000, 4000);
+ targetPitch = CLAMP(targetPitch, -4000, 4000);
+ targetRoll = CLAMP(-targetRoll, -4000, 4000);
- Math_ScaledStepToS(&this->unk_6BC, temp1, 900);
- this->unk_6B6 = -(f32)this->unk_6BC * 0.5f;
+ Math_ScaledStepToS(&this->upperLimbRot.x, targetPitch, 900);
+ this->headLimbRot.x = -(f32)this->upperLimbRot.x * 0.5f;
- Math_ScaledStepToS(&this->unk_6BA, temp2, 300);
- Math_ScaledStepToS(&this->unk_6C0, temp2, 200);
+ Math_ScaledStepToS(&this->headLimbRot.z, targetRoll, 300);
+ Math_ScaledStepToS(&this->upperLimbRot.z, targetRoll, 200);
- this->unk_6AE |= 0x168;
+ this->unk_6AE_rotFlags |= UNK6AE_ROT_HEAD_X | UNK6AE_ROT_HEAD_Z | UNK6AE_ROT_UPPER_X | UNK6AE_ROT_UPPER_Z;
} else {
func_8083DC54(this, play);
}
@@ -7471,7 +7571,7 @@ s32 func_8083EC18(Player* this, PlayState* play, u32 wallFlags) {
}
void func_8083F070(Player* this, LinkAnimationHeader* anim, PlayState* play) {
- func_80835DAC(play, this, Player_Action_8084C5F8, 0);
+ Player_SetupActionPreserveAnimMovement(play, this, Player_Action_8084C5F8, 0);
LinkAnimation_PlayOnceSetSpeed(play, &this->skelAnime, anim, (4.0f / 3.0f));
}
@@ -7808,10 +7908,10 @@ s32 func_8083FD78(Player* this, f32* arg1, s16* arg2, PlayState* play) {
}
if (this->focusActor != NULL) {
- func_8083DB98(this, 1);
+ func_8083DB98(this, true);
} else {
Math_SmoothStepToS(&this->actor.focus.rot.x, sControlInput->rel.stick_y * 240.0f, 14, 4000, 30);
- func_80836AB8(this, 1);
+ func_80836AB8(this, true);
}
} else {
if (this->focusActor != NULL) {
@@ -7958,7 +8058,7 @@ void Player_Action_80840450(Player* this, PlayState* play) {
func_808401B0(play, this);
}
- func_8083721C(this);
+ Player_DecelerateToZero(this);
if (!Player_TryActionHandlerList(play, this, sActionHandlerList1, true)) {
if (!Player_UpdateHostileLockOn(this) &&
@@ -8025,7 +8125,7 @@ void Player_Action_808407CC(Player* this, PlayState* play) {
Player_AnimPlayOnce(play, this, Player_GetIdleAnim(this));
}
- func_8083721C(this);
+ Player_DecelerateToZero(this);
if (!Player_TryActionHandlerList(play, this, sActionHandlerList2, true)) {
if (Player_UpdateHostileLockOn(this)) {
@@ -8034,7 +8134,7 @@ void Player_Action_808407CC(Player* this, PlayState* play) {
}
if (!Player_FriendlyLockOnOrParallel(this)) {
- func_80835DAC(play, this, Player_Action_80840BC8, 1);
+ Player_SetupActionPreserveAnimMovement(play, this, Player_Action_Idle, 1);
this->yaw = this->actor.shape.rot.y;
return;
}
@@ -8077,47 +8177,84 @@ void Player_Action_808407CC(Player* this, PlayState* play) {
}
}
-void func_808409CC(PlayState* play, Player* this) {
+void Player_ChooseNextIdleAnim(PlayState* play, Player* this) {
LinkAnimationHeader* anim;
- LinkAnimationHeader** animPtr;
+ LinkAnimationHeader** fidgetAnimPtr;
s32 heathIsCritical;
- s32 sp38;
- s32 sp34;
+ s32 fidgetType;
+ s32 commonType;
if ((this->focusActor != NULL) ||
- (!(heathIsCritical = Health_IsCritical()) && ((this->unk_6AC = (this->unk_6AC + 1) & 1) != 0))) {
- this->stateFlags2 &= ~PLAYER_STATE2_28;
+ (!(heathIsCritical = Health_IsCritical()) && ((this->idleType = (this->idleType + 1) & 1) != 0))) {
+ this->stateFlags2 &= ~PLAYER_STATE2_IDLE_FIDGET;
anim = Player_GetIdleAnim(this);
} else {
- this->stateFlags2 |= PLAYER_STATE2_28;
+ this->stateFlags2 |= PLAYER_STATE2_IDLE_FIDGET;
+
if (this->stateFlags1 & PLAYER_STATE1_CARRYING_ACTOR) {
+ // Default idle animation will play if carrying an actor.
+ // Note that in this case, `PLAYER_STATE2_IDLE_FIDGET` is still set even though the
+ // animation that plays isn't a fidget animation.
anim = Player_GetIdleAnim(this);
} else {
- sp38 = play->roomCtx.curRoom.behaviorType2;
+ // Pick fidget type based on room behavior.
+ // This may be changed below.
+ fidgetType = play->roomCtx.curRoom.behaviorType2;
+
if (heathIsCritical) {
- if (this->unk_6AC >= 0) {
- sp38 = 7;
- this->unk_6AC = -1;
+ if (this->idleType >= PLAYER_IDLE_DEFAULT) {
+ fidgetType = FIDGET_CRIT_HEALTH_START;
+
+ // When health is critical, `idleType` will not be updated.
+ // It will stay as `PLAYER_IDLE_CRIT_HEALTH` until health is no longer critical.
+ this->idleType = PLAYER_IDLE_CRIT_HEALTH;
} else {
- sp38 = 8;
+ // Keep looping the critical health animation until critical health ends
+ fidgetType = FIDGET_CRIT_HEALTH_LOOP;
}
} else {
- sp34 = Rand_ZeroOne() * 5.0f;
- if (sp34 < 4) {
- if (((sp34 != 0) && (sp34 != 3)) || ((this->rightHandType == PLAYER_MODELTYPE_RH_SHIELD) &&
- ((sp34 == 3) || (Player_GetMeleeWeaponHeld2(this) != 0)))) {
- if ((sp34 == 0) && Player_HoldsTwoHandedWeapon(this)) {
- sp34 = 4;
+ commonType = Rand_ZeroOne() * 5;
+
+ // There is a 4/5 chance that a common fidget type will be considered.
+ // However it may get rejected by the conditions below.
+ // The type determined by `curRoom.behaviorType2` will be used if a common type is rejected.
+ if (commonType < 4) {
+ // `FIDGET_ADJUST_TUNIC` and `FIDGET_TAP_FEET` are accepted unconditionally.
+ // The sword and shield related common types have extra restrictions.
+ //
+ // Note that `FIDGET_SWORD_SWING` is the first common fidget type, which is why
+ // all operations are done relative to this type.
+ if (((commonType + FIDGET_SWORD_SWING != FIDGET_SWORD_SWING) &&
+ (commonType + FIDGET_SWORD_SWING != FIDGET_ADJUST_SHIELD)) ||
+ ((this->rightHandType == PLAYER_MODELTYPE_RH_SHIELD) &&
+ ((commonType + FIDGET_SWORD_SWING == FIDGET_ADJUST_SHIELD) ||
+ (Player_GetMeleeWeaponHeld2(this) != 0)))) {
+ //! @bug It is possible for `FIDGET_ADJUST_SHIELD` to be used even if
+ //! a shield is not currently equipped. This is because of how being shieldless
+ //! is implemented. There is no sword-only model type, only
+ //! `PLAYER_MODELGROUP_SWORD_AND_SHIELD` exists. Therefore, the right hand type will be
+ //! `PLAYER_MODELTYPE_RH_SHIELD` if sword is in hand, even if no shield is equipped.
+ if ((commonType + FIDGET_SWORD_SWING == FIDGET_SWORD_SWING) &&
+ Player_HoldsTwoHandedWeapon(this)) {
+ //! @bug This code is unreachable.
+ //! The check above groups the `Player_GetMeleeWeaponHeld2` check and
+ //! `PLAYER_MODELTYPE_RH_SHIELD` conditions together, meaning sword and shield must be
+ //! in hand. However shield is not in hand when using a two handed melee weapon.
+ commonType = FIDGET_SWORD_SWING_TWO_HAND - FIDGET_SWORD_SWING;
}
- sp38 = sp34 + 9;
+
+ fidgetType = FIDGET_SWORD_SWING + commonType;
}
}
}
- animPtr = &sSpecialIdleAnimations[sp38][0];
+
+ fidgetAnimPtr = &sFidgetAnimations[fidgetType][0];
+
if (this->modelAnimType != PLAYER_ANIMTYPE_1) {
- animPtr = &sSpecialIdleAnimations[sp38][1];
+ fidgetAnimPtr = &sFidgetAnimations[fidgetType][1];
}
- anim = *animPtr;
+
+ anim = *fidgetAnimPtr;
}
}
@@ -8125,34 +8262,37 @@ void func_808409CC(PlayState* play, Player* this) {
ANIMMODE_ONCE, -6.0f);
}
-void Player_Action_80840BC8(Player* this, PlayState* play) {
- s32 specialIdleAnimIndex = Player_CheckSpecialIdleAnim(this);
- s32 sp40 = LinkAnimation_Update(play, &this->skelAnime);
+void Player_Action_Idle(Player* this, PlayState* play) {
+ s32 idleAnimResult = Player_CheckForIdleAnim(this);
+ s32 animDone = LinkAnimation_Update(play, &this->skelAnime);
f32 speedTarget;
s16 yawTarget;
- s16 temp;
+ s16 yawDiff;
- if (specialIdleAnimIndex > 0) {
- Player_ProcessSpecialIdleAnimSfxList(this, specialIdleAnimIndex - 1);
+ if (idleAnimResult > IDLE_ANIM_NONE) {
+ Player_ProcessFidgetAnimSfxList(this, idleAnimResult - 1);
}
- if (sp40 != 0) {
- if (this->av2.actionVar2 != 0) {
- if (DECR(this->av2.actionVar2) == 0) {
+ if (animDone) {
+ if (this->av2.fallDamageStunTimer != 0) {
+ if (DECR(this->av2.fallDamageStunTimer) == 0) {
this->skelAnime.endFrame = this->skelAnime.animLength - 1.0f;
}
+
+ // Offset model y position.
+ // Depending on if the timer is even or odd, the offset will be 40 or -40 model space units.
this->skelAnime.jointTable[0].y =
- (this->skelAnime.jointTable[0].y + ((this->av2.actionVar2 & 1) * 0x50)) - 0x28;
+ (this->skelAnime.jointTable[0].y + ((this->av2.fallDamageStunTimer & 1) * 80)) - 40;
} else {
Player_FinishAnimMovement(this);
- func_808409CC(play, this);
+ Player_ChooseNextIdleAnim(play, this);
}
}
- func_8083721C(this);
+ Player_DecelerateToZero(this);
- if (this->av2.actionVar2 == 0) {
- if (!Player_TryActionHandlerList(play, this, sActionHandlerList7, true)) {
+ if (this->av2.fallDamageStunTimer == 0) {
+ if (!Player_TryActionHandlerList(play, this, sActionHandlerListIdle, true)) {
if (Player_UpdateHostileLockOn(this)) {
func_8083CEAC(this, play);
return;
@@ -8170,14 +8310,16 @@ void Player_Action_80840BC8(Player* this, PlayState* play) {
return;
}
- temp = yawTarget - this->actor.shape.rot.y;
- if (ABS(temp) > 800) {
+ yawDiff = yawTarget - this->actor.shape.rot.y;
+
+ if (ABS(yawDiff) > 800) {
func_8083CD54(play, this, yawTarget);
return;
}
Math_ScaledStepToS(&this->actor.shape.rot.y, yawTarget, 1200);
this->yaw = this->actor.shape.rot.y;
+
if (Player_GetIdleAnim(this) == this->skelAnime.animation) {
func_8083DC54(this, play);
}
@@ -8330,7 +8472,7 @@ s32 func_80841458(Player* this, f32* arg1, s16* arg2, PlayState* play) {
}
if (*arg1 != 0.0f) {
- if (func_8083721C(this)) {
+ if (Player_DecelerateToZero(this)) {
*arg1 = 0.0f;
*arg2 = this->yaw;
} else {
@@ -8391,7 +8533,7 @@ void Player_Action_8084170C(Player* this, PlayState* play) {
s16 yawTarget;
sp34 = LinkAnimation_Update(play, &this->skelAnime);
- func_8083721C(this);
+ Player_DecelerateToZero(this);
if (!Player_TryActionHandlerList(play, this, sActionHandlerList4, true)) {
Player_GetMovementSpeedAndYaw(this, &speedTarget, &yawTarget, SPEED_MODE_LINEAR, play);
@@ -8691,7 +8833,7 @@ void Player_Action_808423EC(Player* this, PlayState* play) {
Player_GetMovementSpeedAndYaw(this, &speedTarget, &yawTarget, SPEED_MODE_LINEAR, play);
if ((this->skelAnime.morphWeight == 0.0f) && (this->skelAnime.curFrame > 5.0f)) {
- func_8083721C(this);
+ Player_DecelerateToZero(this);
if ((this->skelAnime.curFrame > 10.0f) && (func_8083FC68(this, speedTarget, yawTarget) < 0)) {
func_8083CBF0(this, yawTarget, play);
@@ -8712,7 +8854,7 @@ void Player_Action_8084251C(Player* this, PlayState* play) {
sp34 = LinkAnimation_Update(play, &this->skelAnime);
- func_8083721C(this);
+ Player_DecelerateToZero(this);
if (!Player_TryActionHandlerList(play, this, sActionHandlerList10, true)) {
Player_GetMovementSpeedAndYaw(this, &speedTarget, &yawTarget, SPEED_MODE_LINEAR, play);
@@ -8785,7 +8927,7 @@ s32 func_808428D8(Player* this, PlayState* play) {
Player_AnimPlayOnce(play, this, &gPlayerAnim_link_normal_defense_kiru);
this->av1.actionVar1 = 1;
this->meleeWeaponAnimation = PLAYER_MWA_STAB_1H;
- this->yaw = this->actor.shape.rot.y + this->unk_6BE;
+ this->yaw = this->actor.shape.rot.y + this->upperLimbRot.y;
return 1;
}
@@ -8991,7 +9133,7 @@ void Player_Action_80843188(Player* this, PlayState* play) {
this->stateFlags1 &= ~PLAYER_STATE1_22;
}
- func_8083721C(this);
+ Player_DecelerateToZero(this);
if (this->av2.actionVar2 != 0) {
f32 sp54;
@@ -9021,14 +9163,14 @@ void Player_Action_80843188(Player* this, PlayState* play) {
sp48 = 100;
}
- sp46 = ABS(sp4A - this->unk_6BE) * 0.25f;
+ sp46 = ABS(sp4A - this->upperLimbRot.y) * 0.25f;
if (sp46 < 50) {
sp46 = 50;
}
Math_ScaledStepToS(&this->actor.focus.rot.x, sp4C, sp48);
- this->unk_6BC = this->actor.focus.rot.x;
- Math_ScaledStepToS(&this->unk_6BE, sp4A, sp46);
+ this->upperLimbRot.x = this->actor.focus.rot.x;
+ Math_ScaledStepToS(&this->upperLimbRot.y, sp4A, sp46);
if (this->av1.actionVar1 != 0) {
if (!func_80842DF4(play, this)) {
@@ -9070,7 +9212,7 @@ void Player_Action_80843188(Player* this, PlayState* play) {
this->stateFlags1 |= PLAYER_STATE1_22;
Player_SetModelsForHoldingShield(this);
- this->unk_6AE |= 0xC1;
+ this->unk_6AE_rotFlags |= UNK6AE_ROT_FOCUS_X | UNK6AE_ROT_UPPER_X | UNK6AE_ROT_UPPER_Y;
}
void Player_Action_808435C4(Player* this, PlayState* play) {
@@ -9078,7 +9220,7 @@ void Player_Action_808435C4(Player* this, PlayState* play) {
LinkAnimationHeader* anim;
f32 frames;
- func_8083721C(this);
+ Player_DecelerateToZero(this);
if (this->av1.actionVar1 == 0) {
sUpperBodyIsBusy = Player_UpdateUpperBody(this, play);
@@ -9105,7 +9247,7 @@ void Player_Action_808435C4(Player* this, PlayState* play) {
void Player_Action_8084370C(Player* this, PlayState* play) {
s32 interruptResult;
- func_8083721C(this);
+ Player_DecelerateToZero(this);
interruptResult = Player_TryActionInterrupt(play, this, &this->skelAnime, 16.0f);
@@ -9168,7 +9310,7 @@ void Player_Action_80843954(Player* this, PlayState* play) {
this->stateFlags2 |= PLAYER_STATE2_5 | PLAYER_STATE2_6;
func_808382BC(this);
- func_8083721C(this);
+ Player_DecelerateToZero(this);
if (LinkAnimation_Update(play, &this->skelAnime) && (this->speedXZ == 0.0f)) {
if (this->stateFlags1 & PLAYER_STATE1_29) {
@@ -9269,7 +9411,7 @@ void Player_Action_80843CEC(Player* this, PlayState* play) {
}
}
- func_8083721C(this);
+ Player_DecelerateToZero(this);
if (LinkAnimation_Update(play, &this->skelAnime)) {
if (this->actor.category == ACTORCAT_PLAYER) {
@@ -9481,10 +9623,15 @@ void Player_Action_8084411C(Player* this, PlayState* play) {
if (sp3C > 0) {
func_8083A098(this, GET_PLAYER_ANIM(PLAYER_ANIMGROUP_landing, this->modelAnimType), play);
this->skelAnime.endFrame = 8.0f;
+
+ // `func_8083A098` above can choose from a few different "idle" action variants.
+ // However `fallDamageStunTimer` is only processed by `Player_Action_Idle`.
+ // This means it is possible for the stun to not take effect
+ // (for example, by holding Z when landing).
if (sp3C == 1) {
- this->av2.actionVar2 = 10;
+ this->av2.fallDamageStunTimer = 10;
} else {
- this->av2.actionVar2 = 20;
+ this->av2.fallDamageStunTimer = 20;
}
} else if (sp3C == 0) {
func_8083A098(this, anim, play);
@@ -9704,7 +9851,7 @@ void Player_Action_80844E68(Player* this, PlayState* play) {
this->av2.actionVar2 = -1;
}
- func_8083721C(this);
+ Player_DecelerateToZero(this);
if (!func_80842964(this, play) && (this->av2.actionVar2 != 0)) {
func_80844E3C(this);
@@ -10128,7 +10275,7 @@ void Player_Action_80845EF8(Player* this, PlayState* play) {
}
void Player_Action_80846050(Player* this, PlayState* play) {
- func_8083721C(this);
+ Player_DecelerateToZero(this);
if (LinkAnimation_Update(play, &this->skelAnime)) {
func_80839F90(this, play);
@@ -10181,7 +10328,7 @@ void Player_Action_80846120(Player* this, PlayState* play) {
}
void Player_Action_80846260(Player* this, PlayState* play) {
- func_8083721C(this);
+ Player_DecelerateToZero(this);
if (LinkAnimation_Update(play, &this->skelAnime)) {
Player_AnimPlayLoop(play, this, &gPlayerAnim_link_silver_wait);
@@ -10238,7 +10385,7 @@ void Player_Action_80846408(Player* this, PlayState* play) {
}
void Player_Action_808464B0(Player* this, PlayState* play) {
- func_8083721C(this);
+ Player_DecelerateToZero(this);
if (LinkAnimation_Update(play, &this->skelAnime)) {
func_80839F90(this, play);
@@ -10263,7 +10410,7 @@ void Player_Action_80846578(Player* this, PlayState* play) {
f32 speedTarget;
s16 yawTarget;
- func_8083721C(this);
+ Player_DecelerateToZero(this);
if (LinkAnimation_Update(play, &this->skelAnime) ||
((this->skelAnime.curFrame >= 8.0f) &&
@@ -10512,7 +10659,7 @@ void Player_Init(Actor* thisx, PlayState* play2) {
play->tryPlayerCsAction = Player_TryCsAction;
play->func_11D54 = func_80853080;
play->damagePlayer = Player_InflictDamage;
- play->talkWithPlayer = func_80853148;
+ play->talkWithPlayer = Player_StartTalking;
thisx->room = -1;
this->ageProperties = &sAgeProperties[gSaveContext.save.linkAge];
@@ -10618,60 +10765,60 @@ void Player_Init(Actor* thisx, PlayState* play2) {
MREG(64) = 0;
}
-void func_808471F4(s16* pValue) {
+void Player_ApproachZeroBinang(s16* pValue) {
s16 step;
- step = (ABS(*pValue) * 100.0f) / 1000.0f;
+ step = ABS(*pValue) * 100.0f / 1000.0f;
step = CLAMP(step, 400, 4000);
Math_ScaledStepToS(pValue, 0, step);
}
void func_80847298(Player* this) {
- if (!(this->unk_6AE & 2)) {
- s16 sp26 = this->actor.focus.rot.y - this->actor.shape.rot.y;
+ if (!(this->unk_6AE_rotFlags & UNK6AE_ROT_FOCUS_Y)) {
+ s16 diff = this->actor.focus.rot.y - this->actor.shape.rot.y;
- func_808471F4(&sp26);
- this->actor.focus.rot.y = this->actor.shape.rot.y + sp26;
+ Player_ApproachZeroBinang(&diff);
+ this->actor.focus.rot.y = this->actor.shape.rot.y + diff;
}
- if (!(this->unk_6AE & 1)) {
- func_808471F4(&this->actor.focus.rot.x);
+ if (!(this->unk_6AE_rotFlags & UNK6AE_ROT_FOCUS_X)) {
+ Player_ApproachZeroBinang(&this->actor.focus.rot.x);
}
- if (!(this->unk_6AE & 8)) {
- func_808471F4(&this->unk_6B6);
+ if (!(this->unk_6AE_rotFlags & UNK6AE_ROT_HEAD_X)) {
+ Player_ApproachZeroBinang(&this->headLimbRot.x);
}
- if (!(this->unk_6AE & 0x40)) {
- func_808471F4(&this->unk_6BC);
+ if (!(this->unk_6AE_rotFlags & UNK6AE_ROT_UPPER_X)) {
+ Player_ApproachZeroBinang(&this->upperLimbRot.x);
}
- if (!(this->unk_6AE & 4)) {
- func_808471F4(&this->actor.focus.rot.z);
+ if (!(this->unk_6AE_rotFlags & UNK6AE_ROT_FOCUS_Z)) {
+ Player_ApproachZeroBinang(&this->actor.focus.rot.z);
}
- if (!(this->unk_6AE & 0x10)) {
- func_808471F4(&this->unk_6B8);
+ if (!(this->unk_6AE_rotFlags & UNK6AE_ROT_HEAD_Y)) {
+ Player_ApproachZeroBinang(&this->headLimbRot.y);
}
- if (!(this->unk_6AE & 0x20)) {
- func_808471F4(&this->unk_6BA);
+ if (!(this->unk_6AE_rotFlags & UNK6AE_ROT_HEAD_Z)) {
+ Player_ApproachZeroBinang(&this->headLimbRot.z);
}
- if (!(this->unk_6AE & 0x80)) {
- if (this->unk_6B0 != 0) {
- func_808471F4(&this->unk_6B0);
+ if (!(this->unk_6AE_rotFlags & UNK6AE_ROT_UPPER_Y)) {
+ if (this->upperLimbYawSecondary != 0) {
+ Player_ApproachZeroBinang(&this->upperLimbYawSecondary);
} else {
- func_808471F4(&this->unk_6BE);
+ Player_ApproachZeroBinang(&this->upperLimbRot.y);
}
}
- if (!(this->unk_6AE & 0x100)) {
- func_808471F4(&this->unk_6C0);
+ if (!(this->unk_6AE_rotFlags & UNK6AE_ROT_UPPER_Z)) {
+ Player_ApproachZeroBinang(&this->upperLimbRot.z);
}
- this->unk_6AE = 0;
+ this->unk_6AE_rotFlags = 0;
}
static f32 D_80854784[] = { 120.0f, 240.0f, 360.0f };
@@ -11487,8 +11634,8 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) {
this->unk_A73--;
}
- if (this->unk_88E != 0) {
- this->unk_88E--;
+ if (this->textboxBtnCooldownTimer != 0) {
+ this->textboxBtnCooldownTimer--;
}
if (this->unk_A87 != 0) {
@@ -11928,7 +12075,9 @@ void Player_Update(Actor* thisx, PlayState* play) {
} else {
input = play->state.input[0];
- if (this->unk_88E != 0) {
+ if (this->textboxBtnCooldownTimer != 0) {
+ // Prevent the usage of A/B/C-up.
+ // Helps avoid accidental inputs when mashing to close the final textbox.
input.cur.button &= ~(BTN_A | BTN_B | BTN_CUP);
input.press.button &= ~(BTN_A | BTN_B | BTN_CUP);
}
@@ -12151,7 +12300,7 @@ s16 func_8084ABD8(PlayState* play, Player* this, s32 arg2, s16 arg3) {
s16 temp2;
s16 temp3;
- if (!func_8002DD78(this) && !func_808334B4(this) && (arg2 == 0)) {
+ if (!func_8002DD78(this) && !func_808334B4(this) && !arg2) {
temp2 = sControlInput->rel.stick_y * 240.0f;
Math_SmoothStepToS(&this->actor.focus.rot.x, temp2, 14, 4000, 30);
@@ -12173,7 +12322,7 @@ s16 func_8084ABD8(PlayState* play, Player* this, s32 arg2, s16 arg3) {
this->actor.focus.rot.y = CLAMP(temp2, -temp1, temp1) + this->actor.shape.rot.y;
}
- this->unk_6AE |= 2;
+ this->unk_6AE_rotFlags |= UNK6AE_ROT_FOCUS_Y;
return func_80836AB8(this, (play->shootingGalleryStatus != 0) || func_8002DD78(this) || func_808334B4(this)) - arg3;
}
@@ -12274,7 +12423,7 @@ void Player_Action_8084B1D8(Player* this, PlayState* play) {
func_8084B000(this);
func_8084AEEC(this, &this->speedXZ, 0, this->actor.shape.rot.y);
} else {
- func_8083721C(this);
+ Player_DecelerateToZero(this);
}
if ((this->unk_6AD == 2) && (func_8002DD6C(this) || func_808332E4(this))) {
@@ -12294,9 +12443,9 @@ void Player_Action_8084B1D8(Player* this, PlayState* play) {
Sfx_PlaySfxCentered(NA_SE_SY_CAMERA_ZOOM_UP);
} else if ((DECR(this->av2.actionVar2) == 0) || (this->unk_6AD != 2)) {
if (func_8008F128(this)) {
- this->unk_6AE |= 0x43;
+ this->unk_6AE_rotFlags |= UNK6AE_ROT_FOCUS_X | UNK6AE_ROT_FOCUS_Y | UNK6AE_ROT_UPPER_X;
} else {
- this->actor.shape.rot.y = func_8084ABD8(play, this, 0, 0);
+ this->actor.shape.rot.y = func_8084ABD8(play, this, false, 0);
}
}
@@ -12339,8 +12488,9 @@ s32 func_8084B4D4(PlayState* play, Player* this) {
return 0;
}
-void Player_Action_8084B530(Player* this, PlayState* play) {
+void Player_Action_Talk(Player* this, PlayState* play) {
this->stateFlags2 |= PLAYER_STATE2_5;
+
Player_UpdateUpperBody(this, play);
if (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) {
@@ -12366,7 +12516,7 @@ void Player_Action_8084B530(Player* this, PlayState* play) {
}
}
- this->unk_88E = 10;
+ this->textboxBtnCooldownTimer = 10;
return;
}
@@ -12377,6 +12527,7 @@ void Player_Action_8084B530(Player* this, PlayState* play) {
} else if (!Player_CheckHostileLockOn(this) && LinkAnimation_Update(play, &this->skelAnime)) {
if (this->skelAnime.movementFlags != 0) {
Player_FinishAnimMovement(this);
+
if ((this->talkActor->category == ACTORCAT_NPC) && (this->heldItemAction != PLAYER_IA_FISHING_POLE)) {
Player_AnimPlayOnceAdjusted(play, this, &gPlayerAnim_link_normal_talk_free);
} else {
@@ -12388,7 +12539,7 @@ void Player_Action_8084B530(Player* this, PlayState* play) {
}
if (this->focusActor != NULL) {
- this->yaw = this->actor.shape.rot.y = func_8083DB98(this, 0);
+ this->yaw = this->actor.shape.rot.y = func_8083DB98(this, false);
}
}
@@ -12924,7 +13075,7 @@ s32 func_8084C9BC(Player* this, PlayState* play) {
if (EN_HORSE_CHECK_1(rideActor) ||
(EN_HORSE_CHECK_4(rideActor) && CHECK_BTN_ALL(sControlInput->press.button, BTN_A))) {
rideActor->actor.child = NULL;
- func_80835DAC(play, this, Player_Action_8084D3E4, 0);
+ Player_SetupActionPreserveAnimMovement(play, this, Player_Action_8084D3E4, 0);
this->unk_878 = sp34 - rideActor->actor.world.pos.y;
Player_AnimPlayOnce(play, this,
(this->mountSide < 0) ? &gPlayerAnim_link_uma_left_down
@@ -13064,7 +13215,7 @@ void Player_Action_8084CC98(Player* this, PlayState* play) {
}
if (this->av2.actionVar2 == 1) {
- if (sUpperBodyIsBusy || func_8083224C(play)) {
+ if (sUpperBodyIsBusy || Player_IsTalking(play)) {
Player_AnimPlayOnce(play, this, &gPlayerAnim_link_uma_wait_3);
} else if (LinkAnimation_Update(play, &this->skelAnime)) {
this->av2.actionVar2 = 99;
@@ -13099,7 +13250,7 @@ void Player_Action_8084CC98(Player* this, PlayState* play) {
this->yaw = this->actor.shape.rot.y = rideActor->actor.shape.rot.y;
if ((this->csAction != PLAYER_CSACTION_NONE) ||
- (!func_8083224C(play) && ((rideActor->actor.speed != 0.0f) || !Player_ActionHandler_Talk(this, play)) &&
+ (!Player_IsTalking(play) && ((rideActor->actor.speed != 0.0f) || !Player_ActionHandler_Talk(this, play)) &&
!Player_ActionHandler_Roll(this, play))) {
if (!sUpperBodyIsBusy) {
if (this->av1.actionVar1 != 0) {
@@ -13149,9 +13300,9 @@ void Player_Action_8084CC98(Player* this, PlayState* play) {
this->unk_6AD = 0;
this->stateFlags1 &= ~PLAYER_STATE1_20;
} else {
- this->unk_6BE = func_8084ABD8(play, this, 1, -5000) - this->actor.shape.rot.y;
- this->unk_6BE += 5000;
- this->unk_6B0 = -5000;
+ this->upperLimbRot.y = func_8084ABD8(play, this, true, -5000) - this->actor.shape.rot.y;
+ this->upperLimbRot.y += 5000;
+ this->upperLimbYawSecondary = -5000;
}
return;
}
@@ -13159,20 +13310,20 @@ void Player_Action_8084CC98(Player* this, PlayState* play) {
if ((this->csAction != PLAYER_CSACTION_NONE) ||
(!func_8084C9BC(this, play) && !Player_ActionHandler_13(this, play))) {
if (this->focusActor != NULL) {
- if (func_8002DD78(this) != 0) {
- this->unk_6BE = func_8083DB98(this, 1) - this->actor.shape.rot.y;
- this->unk_6BE = CLAMP(this->unk_6BE, -0x4AAA, 0x4AAA);
- this->actor.focus.rot.y = this->actor.shape.rot.y + this->unk_6BE;
- this->unk_6BE += 5000;
- this->unk_6AE |= 0x80;
+ if (func_8002DD78(this)) {
+ this->upperLimbRot.y = func_8083DB98(this, true) - this->actor.shape.rot.y;
+ this->upperLimbRot.y = CLAMP(this->upperLimbRot.y, -0x4AAA, 0x4AAA);
+ this->actor.focus.rot.y = this->actor.shape.rot.y + this->upperLimbRot.y;
+ this->upperLimbRot.y += 5000;
+ this->unk_6AE_rotFlags |= UNK6AE_ROT_UPPER_Y;
} else {
- func_8083DB98(this, 0);
+ func_8083DB98(this, false);
}
} else {
- if (func_8002DD78(this) != 0) {
- this->unk_6BE = func_8084ABD8(play, this, 1, -5000) - this->actor.shape.rot.y;
- this->unk_6BE += 5000;
- this->unk_6B0 = -5000;
+ if (func_8002DD78(this)) {
+ this->upperLimbRot.y = func_8084ABD8(play, this, true, -5000) - this->actor.shape.rot.y;
+ this->upperLimbRot.y += 5000;
+ this->upperLimbYawSecondary = -5000;
}
}
}
@@ -13239,7 +13390,7 @@ void Player_Action_8084D610(Player* this, PlayState* play) {
func_80832CB0(play, this, &gPlayerAnim_link_swimer_swim_wait);
func_8084B000(this);
- if (!func_8083224C(play) && !Player_TryActionHandlerList(play, this, sActionHandlerList11, true) &&
+ if (!Player_IsTalking(play) && !Player_TryActionHandlerList(play, this, sActionHandlerList11, true) &&
!func_8083D12C(play, this, sControlInput)) {
f32 speedTarget;
s16 yawTarget;
@@ -13408,7 +13559,7 @@ void Player_Action_8084DC48(Player* this, PlayState* play) {
this->actor.velocity.y = -2.0f;
}
- func_8083721C(this);
+ Player_DecelerateToZero(this);
return;
}
@@ -13586,11 +13737,11 @@ void Player_Action_8084E3C4(Player* this, PlayState* play) {
Camera_SetFinishedFlag(Play_GetCamera(play, CAM_ID_MAIN));
if ((this->talkActor != NULL) && (this->talkActor == this->unk_6A8)) {
- func_80853148(play, this->talkActor);
+ Player_StartTalking(play, this->talkActor);
} else if (this->naviTextId < 0) {
this->talkActor = this->naviActor;
this->naviActor->textId = -this->naviTextId;
- func_80853148(play, this->talkActor);
+ Player_StartTalking(play, this->talkActor);
} else if (!Player_ActionHandler_13(this, play)) {
func_8083A098(this, &gPlayerAnim_link_normal_okarina_end, play);
}
@@ -13634,7 +13785,7 @@ void Player_Action_8084E604(Player* this, PlayState* play) {
Player_PlayVoiceSfx(this, NA_SE_VO_LI_SWORD_N);
}
- func_8083721C(this);
+ Player_DecelerateToZero(this);
}
static AnimSfxEntry D_808549E0[] = {
@@ -13663,7 +13814,7 @@ void Player_Action_8084E6D4(Player* this, PlayState* play) {
this->exchangeItemId = EXCH_ITEM_NONE;
if (func_8084B4D4(play, this) == 0) {
- func_80853148(play, this->talkActor);
+ Player_StartTalking(play, this->talkActor);
}
} else {
func_8084DFAC(play, this);
@@ -13831,7 +13982,7 @@ void Player_Action_SwingBottle(Player* this, PlayState* play) {
BottleCatchAnimationData* bottleCatchAnimationData =
&sBottleCatchAnimationDatas[this->av2.useWaterBottleSwingAnimations];
- func_8083721C(this);
+ Player_DecelerateToZero(this);
if (LinkAnimation_Update(play, &this->skelAnime)) {
if (this->av1.bottleCatchIndex != 0) {
@@ -13915,7 +14066,7 @@ static AnimSfxEntry D_80854A34[] = {
};
void Player_Action_8084EFC0(Player* this, PlayState* play) {
- func_8083721C(this);
+ Player_DecelerateToZero(this);
if (LinkAnimation_Update(play, &this->skelAnime)) {
func_8083C0E8(this, play);
@@ -13938,7 +14089,7 @@ static AnimSfxEntry D_80854A3C[] = {
{ NA_SE_PL_PUT_OUT_ITEM, -ANIMSFX_DATA(ANIMSFX_TYPE_GENERAL, 30) },
};
-void Player_Action_8084F104(Player* this, PlayState* play) {
+void Player_Action_ExchangeItem(Player* this, PlayState* play) {
this->stateFlags2 |= PLAYER_STATE2_5;
if (LinkAnimation_Update(play, &this->skelAnime)) {
@@ -13952,7 +14103,7 @@ void Player_Action_8084F104(Player* this, PlayState* play) {
this->actor.flags |= ACTOR_FLAG_TALK;
}
- func_80853148(play, talkActor);
+ Player_StartTalking(play, talkActor);
} else {
GetItemEntry* giEntry = &sGetItemTable[D_80854528[this->exchangeItemId - 1] - 1];
@@ -13989,7 +14140,7 @@ void Player_Action_8084F104(Player* this, PlayState* play) {
}
if ((this->av1.actionVar1 == 0) && (this->focusActor != NULL)) {
- this->yaw = this->actor.shape.rot.y = func_8083DB98(this, 0);
+ this->yaw = this->actor.shape.rot.y = func_8083DB98(this, false);
}
}
@@ -14169,8 +14320,8 @@ void Player_Action_8084FA54(Player* this, PlayState* play) {
LinkAnimation_Update(play, &this->skelAnime);
Player_UpdateUpperBody(this, play);
- this->unk_6BE = func_8084ABD8(play, this, 1, 0) - this->actor.shape.rot.y;
- this->unk_6AE |= 0x80;
+ this->upperLimbRot.y = func_8084ABD8(play, this, true, 0) - this->actor.shape.rot.y;
+ this->unk_6AE_rotFlags |= UNK6AE_ROT_UPPER_Y;
if (play->shootingGalleryStatus < 0) {
play->shootingGalleryStatus++;
@@ -14447,7 +14598,7 @@ void Player_Action_808502D0(Player* this, PlayState* play) {
sp2C = this->actor.world.pos.y - shockwavePos.y;
Math_ScaledStepToS(&this->actor.focus.rot.x, Math_Atan2S(45.0f, sp2C), 800);
- func_80836AB8(this, 1);
+ func_80836AB8(this, true);
if ((((this->meleeWeaponAnimation == PLAYER_MWA_HAMMER_FORWARD) &&
LinkAnimation_OnFrame(&this->skelAnime, 7.0f)) ||
@@ -14464,7 +14615,7 @@ void Player_Action_808502D0(Player* this, PlayState* play) {
void Player_Action_808505DC(Player* this, PlayState* play) {
LinkAnimation_Update(play, &this->skelAnime);
- func_8083721C(this);
+ Player_DecelerateToZero(this);
if (this->skelAnime.curFrame >= 6.0f) {
func_80839FFC(this, play);
@@ -14627,7 +14778,7 @@ void Player_Action_808507F4(Player* this, PlayState* play) {
}
}
- func_8083721C(this);
+ Player_DecelerateToZero(this);
}
void Player_Action_80850AEC(Player* this, PlayState* play) {
@@ -14693,7 +14844,7 @@ void Player_Action_80850C68(Player* this, PlayState* play) {
this->av2.actionVar2 = 1;
}
- func_8083721C(this);
+ Player_DecelerateToZero(this);
if (this->unk_860 == 0) {
func_80853080(this, play);
@@ -15065,7 +15216,7 @@ void func_80851314(Player* this) {
this->focusActor = this->csActor;
if (this->focusActor != NULL) {
- this->actor.shape.rot.y = func_8083DB98(this, 0);
+ this->actor.shape.rot.y = func_8083DB98(this, false);
}
}
@@ -15335,7 +15486,7 @@ void func_80851CA4(PlayState* play, Player* this, CsCmdActorCue* cue) {
}
if (this->av2.actionVar2 != 0) {
- func_8083721C(this);
+ Player_DecelerateToZero(this);
}
}
@@ -15861,7 +16012,7 @@ s32 Player_TryCsAction(PlayState* play, Actor* actor, s32 csAction) {
}
void func_80853080(Player* this, PlayState* play) {
- Player_SetupAction(play, this, Player_Action_80840BC8, 1);
+ Player_SetupAction(play, this, Player_Action_Idle, 1);
Player_AnimChangeOnceMorph(play, this, Player_GetIdleAnim(this));
this->yaw = this->actor.shape.rot.y;
}
@@ -15877,8 +16028,13 @@ s32 Player_InflictDamage(PlayState* play, s32 damage) {
return 0;
}
-// Start talking with the given actor
-void func_80853148(PlayState* play, Actor* actor) {
+/**
+ * Start talking to the specified actor.
+ *
+ * This function does not concern trading exchange items.
+ * For item exchanges see relevant code in `Player_ActionChange_13` and `Player_Action_ExchangeItem`.
+ */
+void Player_StartTalking(PlayState* play, Actor* actor) {
Player* this = GET_PLAYER(play);
s32 pad;
@@ -15891,6 +16047,8 @@ void func_80853148(PlayState* play, Actor* actor) {
this->exchangeItemId = EXCH_ITEM_NONE;
if (actor->textId == 0xFFFF) {
+ // Player will stand and look at the actor with no text appearing.
+ // This can be used to delay text from appearing, for example.
Player_SetCsActionWithHaltedActors(play, actor, PLAYER_CSACTION_1);
actor->flags |= ACTOR_FLAG_TALK;
Player_PutAwayHeldItem(play, this);
@@ -15906,15 +16064,15 @@ void func_80853148(PlayState* play, Actor* actor) {
s32 sp24 = this->av2.actionVar2;
Player_PutAwayHeldItem(play, this);
- func_8083A2F8(play, this);
+ Player_SetupTalk(play, this);
this->av2.actionVar2 = sp24;
} else {
if (func_808332B8(this)) {
- Player_SetupWaitForPutAway(play, this, func_8083A2F8);
+ Player_SetupWaitForPutAway(play, this, Player_SetupTalk);
Player_AnimChangeLoopSlowMorph(play, this, &gPlayerAnim_link_swimer_swim_wait);
} else if ((actor->category != ACTORCAT_NPC) || (this->heldItemAction == PLAYER_IA_FISHING_POLE)) {
- func_8083A2F8(play, this);
+ Player_SetupTalk(play, this);
if (!Player_CheckHostileLockOn(this)) {
if ((actor != this->naviActor) && (actor->xzDistToPlayer < 40.0f)) {
@@ -15924,7 +16082,7 @@ void func_80853148(PlayState* play, Actor* actor) {
}
}
} else {
- Player_SetupWaitForPutAway(play, this, func_8083A2F8);
+ Player_SetupWaitForPutAway(play, this, Player_SetupTalk);
Player_AnimPlayOnceAdjusted(play, this,
(actor->xzDistToPlayer < 40.0f) ? &gPlayerAnim_link_normal_backspace
: &gPlayerAnim_link_normal_talk_free);
@@ -15938,7 +16096,7 @@ void func_80853148(PlayState* play, Actor* actor) {
func_80832224(this);
}
- this->stateFlags1 |= PLAYER_STATE1_6 | PLAYER_STATE1_29;
+ this->stateFlags1 |= PLAYER_STATE1_TALKING | PLAYER_STATE1_29;
}
if ((this->naviActor == this->talkActor) && ((this->talkActor->textId & 0xFF00) != 0x200)) {
diff --git a/src/overlays/effects/ovl_Effect_Ss_HitMark/z_eff_ss_hitmark.c b/src/overlays/effects/ovl_Effect_Ss_HitMark/z_eff_ss_hitmark.c
index 8a67d26faf..2e279a5b12 100644
--- a/src/overlays/effects/ovl_Effect_Ss_HitMark/z_eff_ss_hitmark.c
+++ b/src/overlays/effects/ovl_Effect_Ss_HitMark/z_eff_ss_hitmark.c
@@ -5,6 +5,7 @@
*/
#include "z_eff_ss_hitmark.h"
+#include "global.h"
#include "assets/objects/gameplay_keep/gameplay_keep.h"
#define rTexIndex regs[0]
diff --git a/src/overlays/effects/ovl_Effect_Ss_HitMark/z_eff_ss_hitmark.h b/src/overlays/effects/ovl_Effect_Ss_HitMark/z_eff_ss_hitmark.h
index 6859910455..591ba5a7d0 100644
--- a/src/overlays/effects/ovl_Effect_Ss_HitMark/z_eff_ss_hitmark.h
+++ b/src/overlays/effects/ovl_Effect_Ss_HitMark/z_eff_ss_hitmark.h
@@ -2,7 +2,7 @@
#define Z_EFF_SS_HITMARK_H
#include "ultra64.h"
-#include "global.h"
+#include "z64math.h"
typedef struct EffectSsHitMarkInitParams {
/* 0x00 */ s32 type;
diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_choose.c b/src/overlays/gamestates/ovl_file_choose/z_file_choose.c
index 61a2eb1f61..ef4d6cd779 100644
--- a/src/overlays/gamestates/ovl_file_choose/z_file_choose.c
+++ b/src/overlays/gamestates/ovl_file_choose/z_file_choose.c
@@ -1135,7 +1135,10 @@ static void* sQuestItemTextures[] = {
static s16 sQuestItemRed[] = { 255, 255, 255, 0, 255, 0, 255, 200, 200 };
static s16 sQuestItemGreen[] = { 255, 255, 255, 255, 60, 100, 130, 50, 200 };
static s16 sQuestItemBlue[] = { 255, 255, 255, 0, 0, 255, 0, 255, 0 };
-static s16 sQuestItemFlags[] = { 0x0012, 0x0013, 0x0014, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005 };
+static s16 sQuestItemFlags[] = {
+ QUEST_KOKIRI_EMERALD, QUEST_GORON_RUBY, QUEST_ZORA_SAPPHIRE, QUEST_MEDALLION_FOREST, QUEST_MEDALLION_FIRE,
+ QUEST_MEDALLION_WATER, QUEST_MEDALLION_SPIRIT, QUEST_MEDALLION_SHADOW, QUEST_MEDALLION_LIGHT,
+};
#if OOT_NTSC && OOT_VERSION < GC_JP_CE
static void* sSaveXTextures[] = { gFileSelSaveXJPNTex, gFileSelSaveXENGTex };
diff --git a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect.c b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect.c
index 7a9d3b5e78..4828f726eb 100644
--- a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect.c
+++ b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect.c
@@ -578,7 +578,7 @@ void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx) {
sHpPrimBlue = sHpPrimColors[sHpPrimState][2];
sHpPrimAlpha = sHpPrimColors[sHpPrimState][3];
sHpPrimTimer = ZREG(24 + sHpPrimState);
- if (++sHpPrimState >= 4) {
+ if (++sHpPrimState >= ARRAY_COUNT(sHpPrimColors)) {
sHpPrimState = 0;
}
}
diff --git a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_map.c b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_map.c
index 4b964dff86..b873337030 100644
--- a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_map.c
+++ b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_map.c
@@ -648,7 +648,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play, GraphicsContext* gfxCtx) {
gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_RGBA16);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
- gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[188], 32, 0);
+ gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[(PAGE_BG_QUADS + WORLD_MAP_QUAD_IMAGE_FIRST) * 4], 32, 0);
for (j = t = i = 0; i < 8; i++, t++, j += 4) {
gDPLoadTextureBlock(
@@ -659,7 +659,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play, GraphicsContext* gfxCtx) {
gSP1Quadrangle(POLY_OPA_DISP++, j, j + 2, j + 3, j + 1, 0);
}
- gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[220], 28, 0);
+ gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[(PAGE_BG_QUADS + WORLD_MAP_QUAD_IMAGE_FIRST + 8) * 4], 28, 0);
for (j = i = 0; i < 6; i++, t++, j += 4) {
gDPLoadTextureBlock(
@@ -681,8 +681,9 @@ void KaleidoScope_DrawWorldMap(PlayState* play, GraphicsContext* gfxCtx) {
gSPLoadUcodeL(gfx++, gspS2DEX2d_fifo);
- Room_DrawBackground2D(&gfx, gWorldMapImageTex, gWorldMapImageTLUT, 216, 128, G_IM_FMT_CI, G_IM_SIZ_8b,
- G_TT_RGBA16, 256, HREG(13) / 100.0f, HREG(14) / 100.0f);
+ Room_DrawBackground2D(&gfx, gWorldMapImageTex, gWorldMapImageTLUT, WORLD_MAP_IMAGE_WIDTH,
+ WORLD_MAP_IMAGE_HEIGHT, G_IM_FMT_CI, G_IM_SIZ_8b, G_TT_RGBA16, 256, HREG(13) / 100.0f,
+ HREG(14) / 100.0f);
gSPLoadUcode(gfx++, SysUcode_GetUCode(), SysUcode_GetUCodeData());
@@ -764,25 +765,33 @@ void KaleidoScope_DrawWorldMap(PlayState* play, GraphicsContext* gfxCtx) {
// Quad PAGE_BG_QUADS + WORLD_MAP_QUAD_28
- pauseCtx->mapPageVtx[172].v.ob[0] = pauseCtx->mapPageVtx[174].v.ob[0] =
- areaBoxPosX[((void)0, gSaveContext.worldMapArea)];
+ pauseCtx->mapPageVtx[(PAGE_BG_QUADS + WORLD_MAP_QUAD_28) * 4 + 0].v.ob[0] =
+ pauseCtx->mapPageVtx[(PAGE_BG_QUADS + WORLD_MAP_QUAD_28) * 4 + 2].v.ob[0] =
+ areaBoxPosX[((void)0, gSaveContext.worldMapArea)];
- pauseCtx->mapPageVtx[173].v.ob[0] = pauseCtx->mapPageVtx[175].v.ob[0] =
- pauseCtx->mapPageVtx[172].v.ob[0] + areaBoxWidths[((void)0, gSaveContext.worldMapArea)];
+ pauseCtx->mapPageVtx[(PAGE_BG_QUADS + WORLD_MAP_QUAD_28) * 4 + 1].v.ob[0] =
+ pauseCtx->mapPageVtx[(PAGE_BG_QUADS + WORLD_MAP_QUAD_28) * 4 + 3].v.ob[0] =
+ pauseCtx->mapPageVtx[(PAGE_BG_QUADS + WORLD_MAP_QUAD_28) * 4 + 0].v.ob[0] +
+ areaBoxWidths[((void)0, gSaveContext.worldMapArea)];
- pauseCtx->mapPageVtx[172].v.ob[1] = pauseCtx->mapPageVtx[173].v.ob[1] =
- areaBoxPosY[((void)0, gSaveContext.worldMapArea)] + pauseCtx->pagesYOrigin1;
+ pauseCtx->mapPageVtx[(PAGE_BG_QUADS + WORLD_MAP_QUAD_28) * 4 + 0].v.ob[1] =
+ pauseCtx->mapPageVtx[(PAGE_BG_QUADS + WORLD_MAP_QUAD_28) * 4 + 1].v.ob[1] =
+ areaBoxPosY[((void)0, gSaveContext.worldMapArea)] + pauseCtx->pagesYOrigin1;
- pauseCtx->mapPageVtx[174].v.ob[1] = pauseCtx->mapPageVtx[175].v.ob[1] =
- pauseCtx->mapPageVtx[172].v.ob[1] - areaBoxHeights[((void)0, gSaveContext.worldMapArea)];
+ pauseCtx->mapPageVtx[(PAGE_BG_QUADS + WORLD_MAP_QUAD_28) * 4 + 2].v.ob[1] =
+ pauseCtx->mapPageVtx[(PAGE_BG_QUADS + WORLD_MAP_QUAD_28) * 4 + 3].v.ob[1] =
+ pauseCtx->mapPageVtx[(PAGE_BG_QUADS + WORLD_MAP_QUAD_28) * 4 + 0].v.ob[1] -
+ areaBoxHeights[((void)0, gSaveContext.worldMapArea)];
- pauseCtx->mapPageVtx[173].v.tc[0] = pauseCtx->mapPageVtx[175].v.tc[0] =
- areaBoxWidths[((void)0, gSaveContext.worldMapArea)] << 5;
+ pauseCtx->mapPageVtx[(PAGE_BG_QUADS + WORLD_MAP_QUAD_28) * 4 + 1].v.tc[0] =
+ pauseCtx->mapPageVtx[(PAGE_BG_QUADS + WORLD_MAP_QUAD_28) * 4 + 3].v.tc[0] =
+ areaBoxWidths[((void)0, gSaveContext.worldMapArea)] << 5;
- pauseCtx->mapPageVtx[174].v.tc[1] = pauseCtx->mapPageVtx[175].v.tc[1] =
- areaBoxHeights[((void)0, gSaveContext.worldMapArea)] << 5;
+ pauseCtx->mapPageVtx[(PAGE_BG_QUADS + WORLD_MAP_QUAD_28) * 4 + 2].v.tc[1] =
+ pauseCtx->mapPageVtx[(PAGE_BG_QUADS + WORLD_MAP_QUAD_28) * 4 + 3].v.tc[1] =
+ areaBoxHeights[((void)0, gSaveContext.worldMapArea)] << 5;
- gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[172], 4, 0);
+ gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[(PAGE_BG_QUADS + WORLD_MAP_QUAD_28) * 4], 4, 0);
gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 100, 255, 255, pauseCtx->alpha);
diff --git a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.c b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.c
index 3ae7c53313..71104dd545 100644
--- a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.c
+++ b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.c
@@ -2494,10 +2494,12 @@ s16 KaleidoScope_SetPageVertices(PlayState* play, Vtx* vtx, s16 vtxPage, s16 num
pageBgQuadX = 0 - (PAGE_BG_COLS * PAGE_BG_QUAD_WIDTH) / 2 - PAGE_BG_QUAD_WIDTH;
- for (bufI = 0, j = 0; j < 3; j++) {
+ // For each column
+ for (bufI = 0, j = 0; j < PAGE_BG_COLS; j++) {
pageBgQuadX += PAGE_BG_QUAD_WIDTH;
- for (pageBgQuadY = (PAGE_BG_ROWS * PAGE_BG_QUAD_HEIGHT) / 2, i = 0; i < 5;
+ // For each row
+ for (pageBgQuadY = (PAGE_BG_ROWS * PAGE_BG_QUAD_HEIGHT) / 2, i = 0; i < PAGE_BG_ROWS;
i++, bufI += 4, pageBgQuadY -= PAGE_BG_QUAD_HEIGHT) {
vtx[bufI + 0].v.ob[0] = vtx[bufI + 2].v.ob[0] = pageBgQuadX;
@@ -2579,9 +2581,9 @@ s16 KaleidoScope_SetPageVertices(PlayState* play, Vtx* vtx, s16 vtxPage, s16 num
}
if (vtxPage == VTX_PAGE_MAP_WORLD) {
- // For world map page, initialize vtx beyond VTX_PAGE_MAP_WORLD_QUADS
+ // WORLD_MAP_QUAD_TRADE_QUEST_MARKER
- bufI -= 12;
+ bufI -= ((VTX_PAGE_MAP_WORLD_QUADS - WORLD_MAP_QUAD_TRADE_QUEST_MARKER) * 4);
j = gSaveContext.worldMapArea;
@@ -2595,7 +2597,7 @@ s16 KaleidoScope_SetPageVertices(PlayState* play, Vtx* vtx, s16 vtxPage, s16 num
vtx[bufI + 2].v.ob[1] = vtx[bufI + 3].v.ob[1] = vtx[bufI + 0].v.ob[1] - sVtxMapWorldAreaHeight[j];
- bufI += 12;
+ bufI += ((VTX_PAGE_MAP_WORLD_QUADS - WORLD_MAP_QUAD_TRADE_QUEST_MARKER) * 4);
if (pauseCtx->tradeQuestMarker != TRADE_QUEST_MARKER_NONE) {
if (sTradeQuestMarkerBobTimer == 0) {
@@ -2893,7 +2895,7 @@ void KaleidoScope_SetVertices(PlayState* play, GraphicsContext* gfxCtx) {
pauseCtx->questPageVtx = GRAPH_ALLOC(gfxCtx, ((PAGE_BG_QUADS + VTX_PAGE_QUEST_QUADS) * 4) * sizeof(Vtx));
KaleidoScope_SetPageVertices(play, pauseCtx->questPageVtx, VTX_PAGE_QUEST, VTX_PAGE_QUEST_QUADS);
- pauseCtx->cursorVtx = GRAPH_ALLOC(gfxCtx, PAUSE_CURSOR_QUAD_MAX * 4 * sizeof(Vtx));
+ pauseCtx->cursorVtx = GRAPH_ALLOC(gfxCtx, (PAUSE_CURSOR_QUAD_MAX * 4) * sizeof(Vtx));
for (i = 0; i < (PAUSE_CURSOR_QUAD_MAX * 4); i++) {
pauseCtx->cursorVtx[i].v.ob[0] = pauseCtx->cursorVtx[i].v.ob[1] = pauseCtx->cursorVtx[i].v.ob[2] = 0;
@@ -2925,6 +2927,7 @@ void KaleidoScope_SetVertices(PlayState* play, GraphicsContext* gfxCtx) {
pauseCtx->itemVtx = GRAPH_ALLOC(gfxCtx, (ITEM_QUAD_MAX * 4) * sizeof(Vtx));
// ITEM_QUAD_GRID_FIRST to ITEM_QUAD_GRID_LAST
+
for (k = 0, i = 0, y = (ITEM_GRID_ROWS * ITEM_GRID_CELL_HEIGHT) / 2 - 6; k < ITEM_GRID_ROWS;
k++, y -= ITEM_GRID_CELL_HEIGHT) {
for (x = 0 - (ITEM_GRID_COLS * ITEM_GRID_CELL_WIDTH) / 2, j = 0; j < ITEM_GRID_COLS;
@@ -3396,11 +3399,11 @@ void KaleidoScope_UpdateOpening(PlayState* play) {
func_80084BF4(play, 1);
- gSaveContext.buttonStatus[0] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex][0];
- gSaveContext.buttonStatus[1] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex][1];
- gSaveContext.buttonStatus[2] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex][2];
- gSaveContext.buttonStatus[3] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex][3];
- gSaveContext.buttonStatus[4] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex][4];
+ gSaveContext.buttonStatus[0] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex + PAGE_SWITCH_PT_LEFT][0];
+ gSaveContext.buttonStatus[1] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex + PAGE_SWITCH_PT_LEFT][1];
+ gSaveContext.buttonStatus[2] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex + PAGE_SWITCH_PT_LEFT][2];
+ gSaveContext.buttonStatus[3] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex + PAGE_SWITCH_PT_LEFT][3];
+ gSaveContext.buttonStatus[4] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex + PAGE_SWITCH_PT_LEFT][4];
pauseCtx->pageIndex = sPageSwitchNextPageIndex[pauseCtx->nextPageMode];
@@ -3583,8 +3586,10 @@ void KaleidoScope_Update(PlayState* play) {
if ((((u32)pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) ||
(pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)) &&
(pauseCtx->state == PAUSE_STATE_MAIN)) {
+
pauseCtx->stickAdjX = input->rel.stick_x;
pauseCtx->stickAdjY = input->rel.stick_y;
+
KaleidoScope_UpdateCursorVtx(play);
KaleidoScope_HandlePageToggles(pauseCtx, input);
} else if ((pauseCtx->pageIndex == PAUSE_QUEST) && ((pauseCtx->mainState < PAUSE_MAIN_STATE_3) ||
@@ -4028,7 +4033,7 @@ void KaleidoScope_Update(PlayState* play) {
break;
case PAUSE_MAIN_STATE_SWITCHING_PAGE:
- KaleidoScope_UpdatePageSwitch(play, play->state.input);
+ KaleidoScope_UpdatePageSwitch(play, &play->state.input[0]);
break;
case PAUSE_MAIN_STATE_SONG_PLAYBACK:
diff --git a/tools/ZAPDConfigs/ntsc-1.0/Config.xml b/tools/ZAPDConfigs/ntsc-1.0/Config.xml
new file mode 100644
index 0000000000..b2f4e3e4d3
--- /dev/null
+++ b/tools/ZAPDConfigs/ntsc-1.0/Config.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/tools/ZAPDConfigs/ntsc-1.0/SymbolMap.txt b/tools/ZAPDConfigs/ntsc-1.0/SymbolMap.txt
new file mode 100644
index 0000000000..f19720a6c6
--- /dev/null
+++ b/tools/ZAPDConfigs/ntsc-1.0/SymbolMap.txt
@@ -0,0 +1,2 @@
+800FEDB0 gMtxClear
+80AE0AE0 sShadowTex
diff --git a/tools/ZAPDConfigs/ntsc-1.1/Config.xml b/tools/ZAPDConfigs/ntsc-1.1/Config.xml
new file mode 100644
index 0000000000..b2f4e3e4d3
--- /dev/null
+++ b/tools/ZAPDConfigs/ntsc-1.1/Config.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/tools/ZAPDConfigs/ntsc-1.1/SymbolMap.txt b/tools/ZAPDConfigs/ntsc-1.1/SymbolMap.txt
new file mode 100644
index 0000000000..8bf78d7c3c
--- /dev/null
+++ b/tools/ZAPDConfigs/ntsc-1.1/SymbolMap.txt
@@ -0,0 +1,2 @@
+800FEF70 gMtxClear
+80AE0C80 sShadowTex