Set up multiversion assets with ZAPD and match gc-eu (#1967)

* Add ZAPD hack to deal with extracted/VERSION/ in include paths

* Extract assets to extracted/VERSION

* Add ZAPD flags to override virtual address / start offset / end offset

* Configure offsets for code and overlay assets

* Reorganize ZAPD configs

* Match gc-eu-mq

* Match gc-eu

* Remove old asset dirs during distclean

* Revert "Remove old asset dirs during distclean"

This reverts commit fc8027a75f.

* make zapd addresses globals int64_t so they can store uint32_t addresses and -1

* slight cleanup extract_assets.py

* git subrepo pull --force tools/ZAPD

subrepo:
  subdir:   "tools/ZAPD"
  merged:   "0285e11f0"
upstream:
  origin:   "https://github.com/zeldaret/ZAPD.git"
  branch:   "master"
  commit:   "0285e11f0"
git-subrepo:
  version:  "0.4.6"
  origin:   "git@github.com:ingydotnet/git-subrepo.git"
  commit:   "110b9eb"

---------

Co-authored-by: Dragorn421 <Dragorn421@users.noreply.github.com>
This commit is contained in:
cadmic 2024-06-24 06:22:39 -07:00 committed by GitHub
parent b2d80568b9
commit 9def6f4d0d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
92 changed files with 4911 additions and 487 deletions

View File

@ -15,10 +15,11 @@ ORIG_COMPILER := 0
# If COMPILER is "gcc", compile with GCC instead of IDO.
COMPILER := ido
# Target game version. Currently the following versions are supported:
# gc-eu GameCube Europe/PAL
# gc-eu-mq GameCube Europe/PAL Master Quest
# gc-eu-mq-dbg GameCube Europe/PAL Master Quest Debug (default)
# The following versions are work-in-progress and not yet matching:
# gc-eu GameCube Europe/PAL
# (none currently)
VERSION := gc-eu-mq-dbg
# Number of threads to extract and compress with
N_THREADS := $(shell nproc)
@ -53,7 +54,6 @@ endif
# Version-specific settings
ifeq ($(VERSION),gc-eu)
DEBUG := 0
COMPARE := 0
else ifeq ($(VERSION),gc-eu-mq)
DEBUG := 0
CPP_DEFINES += -DOOT_MQ
@ -211,11 +211,12 @@ else
SRC_DIRS := $(shell find src -type d)
endif
ASSET_BIN_DIRS := $(shell find assets/* -type d -not -path "assets/xml*" -not -path "assets/text")
ASSET_FILES_XML := $(foreach dir,$(ASSET_BIN_DIRS),$(wildcard $(dir)/*.xml))
# create extracted directories
$(shell mkdir -p $(EXTRACTED_DIR) $(EXTRACTED_DIR)/assets $(EXTRACTED_DIR)/text)
ASSET_BIN_DIRS := $(shell find $(EXTRACTED_DIR)/assets -type d)
ASSET_FILES_BIN := $(foreach dir,$(ASSET_BIN_DIRS),$(wildcard $(dir)/*.bin))
ASSET_FILES_OUT := $(foreach f,$(ASSET_FILES_XML:.xml=.c),$f) \
$(foreach f,$(ASSET_FILES_BIN:.bin=.bin.inc.c),$(BUILD_DIR)/$f) \
ASSET_FILES_OUT := $(foreach f,$(ASSET_FILES_BIN:.bin=.bin.inc.c),$(f:$(EXTRACTED_DIR)/%=$(BUILD_DIR)/%)) \
$(foreach f,$(wildcard assets/text/*.c),$(BUILD_DIR)/$(f:.c=.o))
UNDECOMPILED_DATA_DIRS := $(shell find data -type d)
@ -223,10 +224,12 @@ UNDECOMPILED_DATA_DIRS := $(shell find data -type d)
BASEROM_BIN_FILES := $(wildcard $(EXTRACTED_DIR)/baserom/*)
# source files
C_FILES := $(filter-out %.inc.c,$(foreach dir,$(SRC_DIRS) $(ASSET_BIN_DIRS),$(wildcard $(dir)/*.c)))
SRC_C_FILES := $(filter-out %.inc.c,$(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.c)))
ASSET_C_FILES := $(filter-out %.inc.c,$(foreach dir,$(ASSET_BIN_DIRS),$(wildcard $(dir)/*.c)))
S_FILES := $(foreach dir,$(SRC_DIRS) $(UNDECOMPILED_DATA_DIRS),$(wildcard $(dir)/*.s))
O_FILES := $(foreach f,$(S_FILES:.s=.o),$(BUILD_DIR)/$f) \
$(foreach f,$(C_FILES:.c=.o),$(BUILD_DIR)/$f) \
$(foreach f,$(SRC_C_FILES:.c=.o),$(BUILD_DIR)/$f) \
$(foreach f,$(ASSET_C_FILES:.c=.o),$(f:$(EXTRACTED_DIR)/%=$(BUILD_DIR)/%)) \
$(foreach f,$(BASEROM_BIN_FILES),$(BUILD_DIR)/baserom/$(notdir $f).o)
OVL_RELOC_FILES := $(shell $(CPP) $(CPPFLAGS) $(SPEC) | $(SPEC_REPLACE_VARS) | grep -o '[^"]*_reloc.o' )
@ -238,11 +241,11 @@ DEP_FILES := $(O_FILES:.o=.asmproc.d) $(OVL_RELOC_FILES:.o=.d)
TEXTURE_FILES_PNG := $(foreach dir,$(ASSET_BIN_DIRS),$(wildcard $(dir)/*.png))
TEXTURE_FILES_JPG := $(foreach dir,$(ASSET_BIN_DIRS),$(wildcard $(dir)/*.jpg))
TEXTURE_FILES_OUT := $(foreach f,$(TEXTURE_FILES_PNG:.png=.inc.c),$(BUILD_DIR)/$f) \
$(foreach f,$(TEXTURE_FILES_JPG:.jpg=.jpg.inc.c),$(BUILD_DIR)/$f) \
TEXTURE_FILES_OUT := $(foreach f,$(TEXTURE_FILES_PNG:.png=.inc.c),$(f:$(EXTRACTED_DIR)/%=$(BUILD_DIR)/%)) \
$(foreach f,$(TEXTURE_FILES_JPG:.jpg=.jpg.inc.c),$(f:$(EXTRACTED_DIR)/%=$(BUILD_DIR)/%))
# create build directories
$(shell mkdir -p $(BUILD_DIR)/baserom $(EXTRACTED_DIR)/text $(BUILD_DIR)/assets/text $(foreach dir,$(SRC_DIRS) $(UNDECOMPILED_DATA_DIRS) $(ASSET_BIN_DIRS),$(BUILD_DIR)/$(dir)))
$(shell mkdir -p $(BUILD_DIR)/baserom $(BUILD_DIR)/assets/text $(foreach dir,$(SRC_DIRS) $(UNDECOMPILED_DATA_DIRS),$(BUILD_DIR)/$(dir)) $(foreach dir,$(ASSET_BIN_DIRS),$(dir:$(EXTRACTED_DIR)/%=$(BUILD_DIR)/%)))
ifeq ($(COMPILER),ido)
$(BUILD_DIR)/src/boot/stackcheck.o: OPTFLAGS := -O2
@ -356,12 +359,9 @@ clean:
$(RM) -r $(BUILD_DIR)
assetclean:
$(RM) -r $(ASSET_BIN_DIRS)
$(RM) -r $(EXTRACTED_DIR)
$(RM) -r $(BUILD_DIR)/assets
$(RM) -r .extracted-assets.json
distclean: assetclean
distclean:
$(RM) -r extracted/
$(RM) -r build/
$(MAKE) -C tools distclean
@ -378,10 +378,7 @@ setup: venv
$(PYTHON) tools/decompress_baserom.py $(VERSION)
$(PYTHON) tools/extract_baserom.py $(BASEROM_DIR)/baserom-decompressed.z64 --oot-version $(VERSION) -o $(EXTRACTED_DIR)/baserom
$(PYTHON) tools/msgdis.py --oot-version $(VERSION) --text-out $(EXTRACTED_DIR)/text/message_data.h --staff-text-out $(EXTRACTED_DIR)/text/message_data_staff.h
# TODO: for now, we only extract assets from the Debug ROM
ifeq ($(VERSION),gc-eu-mq-dbg)
$(PYTHON) extract_assets.py -j$(N_THREADS)
endif
$(PYTHON) extract_assets.py -v $(VERSION) -j$(N_THREADS)
disasm:
$(RM) -r $(EXPECTED_DIR)
@ -447,7 +444,11 @@ $(BUILD_DIR)/assets/text/nes_message_data_static.o: $(BUILD_DIR)/assets/text/mes
$(BUILD_DIR)/assets/text/staff_message_data_static.o: $(BUILD_DIR)/assets/text/message_data_staff.enc.h
$(BUILD_DIR)/src/code/z_message_PAL.o: $(BUILD_DIR)/assets/text/message_data.enc.h $(BUILD_DIR)/assets/text/message_data_staff.enc.h
$(BUILD_DIR)/assets/%.o: assets/%.c
$(BUILD_DIR)/assets/text/%.o: assets/text/%.c
$(CC) -c $(CFLAGS) $(MIPS_VERSION) $(OPTFLAGS) -o $@ $<
$(OBJCOPY) -O binary $@ $@.bin
$(BUILD_DIR)/assets/%.o: $(EXTRACTED_DIR)/assets/%.c
$(CC) -c $(CFLAGS) $(MIPS_VERSION) $(OPTFLAGS) -o $@ $<
$(OBJCOPY) -O binary $@ $@.bin
@ -498,13 +499,13 @@ $(BUILD_DIR)/src/overlays/%_reloc.o: $(BUILD_DIR)/$(SPEC)
$(FADO) $$(tools/reloc_prereq $< $(notdir $*)) -n $(notdir $*) -o $(@:.o=.s) -M $(@:.o=.d)
$(AS) $(ASFLAGS) $(@:.o=.s) -o $@
$(BUILD_DIR)/%.inc.c: %.png
$(BUILD_DIR)/assets/%.inc.c: $(EXTRACTED_DIR)/assets/%.png
$(ZAPD) btex -eh -tt $(subst .,,$(suffix $*)) -i $< -o $@
$(BUILD_DIR)/assets/%.bin.inc.c: assets/%.bin
$(BUILD_DIR)/assets/%.bin.inc.c: $(EXTRACTED_DIR)/assets/%.bin
$(ZAPD) bblb -eh -i $< -o $@
$(BUILD_DIR)/assets/%.jpg.inc.c: assets/%.jpg
$(BUILD_DIR)/assets/%.jpg.inc.c: $(EXTRACTED_DIR)/assets/%.jpg
$(ZAPD) bren -eh -i $< -o $@
-include $(DEP_FILES)

7
assets/.gitignore vendored
View File

@ -1,7 +0,0 @@
*.bin
*.c
*.h
!text/*.[ch]
*.cfg
*.vtx.inc
*.dlist.inc

View File

@ -1,13 +1,13 @@
<Root>
<File Name="code" OutName="z_fbdemo_circle" RangeStart="0x10ED48" RangeEnd="0x10FF68">
<Texture Name="sTransCircleNormalTex" OutName="trans_circle_normal" Format="i8" Width="16" Height="64" Offset="0x10ED48"/>
<Texture Name="sTransCircleWaveTex" OutName="trans_circle_wave" Format="i8" Width="16" Height="64" Offset="0x10F148"/>
<Texture Name="sTransCircleRippleTex" OutName="trans_circle_ripple" Format="i8" Width="16" Height="64" Offset="0x10F548"/>
<Texture Name="sTransCircleStarburstTex" OutName="trans_circle_starburst" Format="i8" Width="16" Height="64" Offset="0x10F948"/>
<Array Name="sTransCircleVtx" Count="34" Offset="0x10FD48">
<File Name="code" OutName="z_fbdemo_circle">
<Texture Name="sTransCircleNormalTex" OutName="trans_circle_normal" Format="i8" Width="16" Height="64" Offset="0x0"/>
<Texture Name="sTransCircleWaveTex" OutName="trans_circle_wave" Format="i8" Width="16" Height="64" Offset="0x400"/>
<Texture Name="sTransCircleRippleTex" OutName="trans_circle_ripple" Format="i8" Width="16" Height="64" Offset="0x800"/>
<Texture Name="sTransCircleStarburstTex" OutName="trans_circle_starburst" Format="i8" Width="16" Height="64" Offset="0xC00"/>
<Array Name="sTransCircleVtx" Count="34" Offset="0x1000">
<Vtx/>
</Array>
<!-- ZAPD isn't finding symbols correctly, instead finding them much later in `code`-->
<!--<DList Name="sTransCircleDL" Offset="0x10FF68"/>-->
<!--<DList Name="sTransCircleDL" Offset="0x1220"/>-->
</File>
</Root>

View File

@ -1,7 +1,7 @@
<Root>
<File Name="code" OutName="z_fbdemo_triforce" RangeStart="0x10E1D0" RangeEnd="0x10E2A0">
<DList Name="sTransTriforceDL" Offset="0x10E1D0"/>
<Array Name="sTransTriforceVtx" Count="10" Offset="0x10E200">
<File Name="code" OutName="z_fbdemo_triforce">
<DList Name="sTransTriforceDL" Offset="0x0"/>
<Array Name="sTransTriforceVtx" Count="10" Offset="0x30">
<Vtx/>
</Array>
</File>

View File

@ -1,10 +1,10 @@
<Root>
<File Name="code" OutName="z_fbdemo_wipe1" RangeStart="0x10E2A0" RangeEnd="0x10EC30">
<Array Name="sTransWipeVtx" Count="25" Offset="0x10E2A0">
<File Name="code" OutName="z_fbdemo_wipe1">
<Array Name="sTransWipeVtx" Count="25" Offset="0x0">
<Vtx/>
</Array>
<Texture Name="sTransWipeTex" OutName="trans_wipe" Format="i4" Width="64" Height="64" Offset="0x10E430"/>
<Texture Name="sTransWipeTex" OutName="trans_wipe" Format="i4" Width="64" Height="64" Offset="0x190"/>
<!-- ZAPD isn't finding symbols correctly, instead finding them much later in `code`-->
<!-- <DList Name="sTransWipeDL" Offset="0x10EC30"/> -->
<!-- <DList Name="sTransWipeDL" Offset="0x990"/> -->
</File>
</Root>

View File

@ -3,21 +3,19 @@
<Texture Name="gTitleZeldaShieldLogoMQTex" OutName="title_zelda_shield_logo_mq" Format="rgba32" Width="160" Height="160" Offset="0x0"/>
<Texture Name="gTitleCopyright19982002Tex" OutName="title_copyright_19982002" Format="ia8" Width="160" Height="16" Offset="0x19000"/>
<Texture Name="gTitleCopyright19982003Tex" OutName="title_copyright_19982003" Format="ia8" Width="160" Height="16" Offset="0x19A00"/>
<Texture Name="gTitleMasterQuestSubtitleTex" OutName="title_master_quest_subtitle" Format="rgba32" Width="128" Height="32" Offset="0x1A400"/>
<Texture Name="gTitleEffectMask00Tex" OutName="title_effect_mask_0_0" Format="i4" Width="64" Height="64" Offset="0x20000"/>
<Texture Name="gTitleEffectMask01Tex" OutName="title_effect_mask_0_1" Format="i4" Width="64" Height="64" Offset="0x20800"/>
<Texture Name="gTitleEffectMask02Tex" OutName="title_effect_mask_0_2" Format="i4" Width="64" Height="64" Offset="0x21000"/>
<Texture Name="gTitleEffectMask10Tex" OutName="title_effect_mask_1_0" Format="i4" Width="64" Height="64" Offset="0x21800"/>
<Texture Name="gTitleEffectMask11Tex" OutName="title_effect_mask_1_1" Format="i4" Width="64" Height="64" Offset="0x22000"/>
<Texture Name="gTitleEffectMask12Tex" OutName="title_effect_mask_1_2" Format="i4" Width="64" Height="64" Offset="0x22800"/>
<Texture Name="gTitleEffectMask20Tex" OutName="title_effect_mask_2_0" Format="i4" Width="64" Height="64" Offset="0x23000"/>
<Texture Name="gTitleEffectMask21Tex" OutName="title_effect_mask_2_1" Format="i4" Width="64" Height="64" Offset="0x23800"/>
<Texture Name="gTitleEffectMask22Tex" OutName="title_effect_mask_2_2" Format="i4" Width="64" Height="64" Offset="0x24000"/>
<Texture Name="gTitleFlameEffectTex" OutName="title_flame_effect" Format="i8" Width="32" Height="32" Offset="0x24800"/>
<Texture Name="gTitleTheLegendOfTextTex" OutName="title_the_legend_of_text" Format="i8" Width="72" Height="8" Offset="0x24C00"/>
<Texture Name="gTitleOcarinaOfTimeTMTextTex" OutName="title_ocarina_of_time_tm_text" Format="i8" Width="96" Height="8" Offset="0x24E40"/>
<Texture Name="gTitleUraLogoTex" OutName="title_ura_logo" Format="rgba32" Width="40" Height="40" Offset="0x1E400"/>
<Texture Name="gTitleDiskTex" OutName="title_disk" Format="ia8" Width="48" Height="16" Offset="0x1FD00"/>
<Texture Name="gTitleTitleJPNTex" OutName="title_title_jpn" Format="i8" Width="128" Height="16" Offset="0x25140"/>
<Texture Name="gTitleDiskTex" OutName="title_disk" Format="ia8" Width="48" Height="16" Offset="0x1A400"/>
<Texture Name="gTitleEffectMask00Tex" OutName="title_effect_mask_0_0" Format="i4" Width="64" Height="64" Offset="0x1A700"/>
<Texture Name="gTitleEffectMask01Tex" OutName="title_effect_mask_0_1" Format="i4" Width="64" Height="64" Offset="0x1AF00"/>
<Texture Name="gTitleEffectMask02Tex" OutName="title_effect_mask_0_2" Format="i4" Width="64" Height="64" Offset="0x1B700"/>
<Texture Name="gTitleEffectMask10Tex" OutName="title_effect_mask_1_0" Format="i4" Width="64" Height="64" Offset="0x1BF00"/>
<Texture Name="gTitleEffectMask11Tex" OutName="title_effect_mask_1_1" Format="i4" Width="64" Height="64" Offset="0x1C700"/>
<Texture Name="gTitleEffectMask12Tex" OutName="title_effect_mask_1_2" Format="i4" Width="64" Height="64" Offset="0x1CF00"/>
<Texture Name="gTitleEffectMask20Tex" OutName="title_effect_mask_2_0" Format="i4" Width="64" Height="64" Offset="0x1D700"/>
<Texture Name="gTitleEffectMask21Tex" OutName="title_effect_mask_2_1" Format="i4" Width="64" Height="64" Offset="0x1DF00"/>
<Texture Name="gTitleEffectMask22Tex" OutName="title_effect_mask_2_2" Format="i4" Width="64" Height="64" Offset="0x1E700"/>
<Texture Name="gTitleFlameEffectTex" OutName="title_flame_effect" Format="i8" Width="32" Height="32" Offset="0x1EF00"/>
<Texture Name="gTitleTheLegendOfTextTex" OutName="title_the_legend_of_text" Format="i8" Width="72" Height="8" Offset="0x1F300"/>
<Texture Name="gTitleOcarinaOfTimeTMTextTex" OutName="title_ocarina_of_time_tm_text" Format="i8" Width="96" Height="8" Offset="0x1F540"/>
<Texture Name="gTitleTitleJPNTex" OutName="title_title_jpn" Format="i8" Width="128" Height="16" Offset="0x1F840"/>
</File>
</Root>

View File

@ -0,0 +1,23 @@
<Root>
<File Name="object_mag" Segment="6">
<Texture Name="gTitleZeldaShieldLogoMQTex" OutName="title_zelda_shield_logo_mq" Format="rgba32" Width="160" Height="160" Offset="0x0"/>
<Texture Name="gTitleCopyright19982002Tex" OutName="title_copyright_19982002" Format="ia8" Width="160" Height="16" Offset="0x19000"/>
<Texture Name="gTitleCopyright19982003Tex" OutName="title_copyright_19982003" Format="ia8" Width="160" Height="16" Offset="0x19A00"/>
<Texture Name="gTitleMasterQuestSubtitleTex" OutName="title_master_quest_subtitle" Format="rgba32" Width="128" Height="32" Offset="0x1A400"/>
<Texture Name="gTitleEffectMask00Tex" OutName="title_effect_mask_0_0" Format="i4" Width="64" Height="64" Offset="0x20000"/>
<Texture Name="gTitleEffectMask01Tex" OutName="title_effect_mask_0_1" Format="i4" Width="64" Height="64" Offset="0x20800"/>
<Texture Name="gTitleEffectMask02Tex" OutName="title_effect_mask_0_2" Format="i4" Width="64" Height="64" Offset="0x21000"/>
<Texture Name="gTitleEffectMask10Tex" OutName="title_effect_mask_1_0" Format="i4" Width="64" Height="64" Offset="0x21800"/>
<Texture Name="gTitleEffectMask11Tex" OutName="title_effect_mask_1_1" Format="i4" Width="64" Height="64" Offset="0x22000"/>
<Texture Name="gTitleEffectMask12Tex" OutName="title_effect_mask_1_2" Format="i4" Width="64" Height="64" Offset="0x22800"/>
<Texture Name="gTitleEffectMask20Tex" OutName="title_effect_mask_2_0" Format="i4" Width="64" Height="64" Offset="0x23000"/>
<Texture Name="gTitleEffectMask21Tex" OutName="title_effect_mask_2_1" Format="i4" Width="64" Height="64" Offset="0x23800"/>
<Texture Name="gTitleEffectMask22Tex" OutName="title_effect_mask_2_2" Format="i4" Width="64" Height="64" Offset="0x24000"/>
<Texture Name="gTitleFlameEffectTex" OutName="title_flame_effect" Format="i8" Width="32" Height="32" Offset="0x24800"/>
<Texture Name="gTitleTheLegendOfTextTex" OutName="title_the_legend_of_text" Format="i8" Width="72" Height="8" Offset="0x24C00"/>
<Texture Name="gTitleOcarinaOfTimeTMTextTex" OutName="title_ocarina_of_time_tm_text" Format="i8" Width="96" Height="8" Offset="0x24E40"/>
<Texture Name="gTitleUraLogoTex" OutName="title_ura_logo" Format="rgba32" Width="40" Height="40" Offset="0x1E400"/>
<Texture Name="gTitleDiskTex" OutName="title_disk" Format="ia8" Width="48" Height="16" Offset="0x1FD00"/>
<Texture Name="gTitleTitleJPNTex" OutName="title_title_jpn" Format="i8" Width="128" Height="16" Offset="0x25140"/>
</File>
</Root>

View File

@ -1,11 +1,11 @@
<Root>
<File Name="ovl_Arrow_Fire" BaseAddress="0x80865d10" RangeStart="0x9D0" RangeEnd="0x1DF0">
<Texture Name="s1Tex" OutName="fire_tex_1" Format="i8" Width="32" Height="64" Offset="0x9D0" Static="On"/>
<Texture Name="s2Tex" OutName="fire_tex_2" Format="i8" Width="32" Height="64" Offset="0x11D0" Static="On"/>
<Array Name="sVtx" Count="43" Offset="0x19D0" Static="On">
<File Name="ovl_Arrow_Fire">
<Texture Name="s1Tex" OutName="fire_tex_1" Format="i8" Width="32" Height="64" Offset="0x0" Static="On"/>
<Texture Name="s2Tex" OutName="fire_tex_2" Format="i8" Width="32" Height="64" Offset="0x800" Static="On"/>
<Array Name="sVtx" Count="43" Offset="0x1000" Static="On">
<Vtx/>
</Array>
<DList Name="sMaterialDL" Offset="0x1C80" Static="On"/>
<DList Name="sModelDL" Offset="0x1D30" Static="On"/>
<DList Name="sMaterialDL" Offset="0x12B0" Static="On"/>
<DList Name="sModelDL" Offset="0x1360" Static="On"/>
</File>
</Root>

View File

@ -1,11 +1,11 @@
<Root>
<File Name="ovl_Arrow_Ice" BaseAddress="0x80867cd0" RangeStart="0x9F0" RangeEnd="0x1E10">
<Texture Name="s1Tex" OutName="ice_tex_1" Format="i8" Width="32" Height="64" Offset="0x9F0" Static="On"/>
<Texture Name="s2Tex" OutName="ice_tex_2" Format="i8" Width="32" Height="64" Offset="0x11F0" Static="On"/>
<Array Name="sVtx" Count="43" Offset="0x19F0" Static="On">
<File Name="ovl_Arrow_Ice">
<Texture Name="s1Tex" OutName="ice_tex_1" Format="i8" Width="32" Height="64" Offset="0x0" Static="On"/>
<Texture Name="s2Tex" OutName="ice_tex_2" Format="i8" Width="32" Height="64" Offset="0x800" Static="On"/>
<Array Name="sVtx" Count="43" Offset="0x1000" Static="On">
<Vtx/>
</Array>
<DList Name="sMaterialDL" Offset="0x1CA0" Static="On"/>
<DList Name="sModelDL" Offset="0x1D50" Static="On"/>
<DList Name="sMaterialDL" Offset="0x12B0" Static="On"/>
<DList Name="sModelDL" Offset="0x1360" Static="On"/>
</File>
</Root>

View File

@ -1,11 +1,11 @@
<Root>
<File Name="ovl_Arrow_Light" BaseAddress="0x80869cb0" RangeStart="0xA00" RangeEnd="0x1E20">
<Texture Name="s1Tex" OutName="light_tex_1" Format="i8" Width="32" Height="64" Offset="0xA00" Static="On"/>
<Texture Name="s2Tex" OutName="light_tex_2" Format="i8" Width="32" Height="64" Offset="0x1200" Static="On"/>
<Array Name="sVtx" Count="43" Offset="0x1A00" Static="On">
<File Name="ovl_Arrow_Light">
<Texture Name="s1Tex" OutName="light_tex_1" Format="i8" Width="32" Height="64" Offset="0x0" Static="On"/>
<Texture Name="s2Tex" OutName="light_tex_2" Format="i8" Width="32" Height="64" Offset="0x800" Static="On"/>
<Array Name="sVtx" Count="43" Offset="0x1000" Static="On">
<Vtx/>
</Array>
<DList Name="sMaterialDL" Offset="0x1CB0" Static="On"/>
<DList Name="sModelDL" Offset="0x1D60" Static="On"/>
<DList Name="sMaterialDL" Offset="0x12B0" Static="On"/>
<DList Name="sModelDL" Offset="0x1360" Static="On"/>
</File>
</Root>

View File

@ -1,29 +1,29 @@
<Root>
<File Name="ovl_Bg_Ganon_Otyuka" BaseAddress="0x80875920" RangeStart="0x11C0" RangeEnd="0x259C">
<Texture Name="sPlatformTex" OutName="platform_tex" Format="rgba16" Width="32" Height="32" Offset="0x11C0"/>
<File Name="ovl_Bg_Ganon_Otyuka">
<Texture Name="sPlatformTex" OutName="platform_tex" Format="rgba16" Width="32" Height="32" Offset="0x0"/>
<Array Name="sPlatformTopVtx" Count="4" Offset="0x19C8">
<Array Name="sPlatformTopVtx" Count="4" Offset="0x808">
<Vtx/>
</Array>
<DList Name="sPlatformMaterialDL" Offset="0x1A08"/>
<DList Name="sPlatformTopDL" Offset="0x1A90"/>
<DList Name="sPlatformMaterialDL" Offset="0x848"/>
<DList Name="sPlatformTopDL" Offset="0x8D0"/>
<Array Name="sPlatformBottomVtx" Count="4" Offset="0x1AA8">
<Array Name="sPlatformBottomVtx" Count="4" Offset="0x8E8">
<Vtx/>
</Array>
<DList Name="sPlatformBottomDL" Offset="0x1AE8"/>
<DList Name="sPlatformBottomDL" Offset="0x928"/>
<Array Name="sPlatformSideVtx" Count="4" Offset="0x01B00">
<Array Name="sPlatformSideVtx" Count="4" Offset="0x940">
<Vtx/>
</Array>
<DList Name="sPlatformSideDL" Offset="0x1B40"/>
<DList Name="sPlatformSideDL" Offset="0x980"/>
<Texture Name="sFlashTex" OutName="flash_tex" Format="i8" Width="32" Height="64" Offset="0x1B58"/>
<Array Name="sFlashVtx" Count="8" Offset="0x2358">
<Texture Name="sFlashTex" OutName="flash_tex" Format="i8" Width="32" Height="64" Offset="0x998"/>
<Array Name="sFlashVtx" Count="8" Offset="0x1198">
<Vtx/>
</Array>
<DList Name="sFlashDL" Offset="0x23D8"/>
<DList Name="sFlashDL" Offset="0x1218"/>
<Collision Name="sCol" Offset="0x2570"/>
<Collision Name="sCol" Offset="0x13B0"/>
</File>
</Root>

View File

@ -1,10 +1,10 @@
<Root>
<File Name="ovl_Bg_Jya_Cobra" BaseAddress="0x808958f0" RangeStart="0x1980" RangeEnd="0x19F8">
<Array Name="sShadowVtx" Count="4" Offset="0x1980">
<File Name="ovl_Bg_Jya_Cobra">
<Array Name="sShadowVtx" Count="4" Offset="0x0">
<Vtx/>
</Array>
<DList Name="sShadowDL" Offset="0x19C0"/>
<DList Name="sShadowDL" Offset="0x40"/>
</File>
</Root>

View File

@ -1,6 +1,6 @@
<Root>
<File Name="ovl_Boss_Dodongo" BaseAddress="0x808C1190" RangeStart="0x6238" RangeEnd="0x9238">
<Texture Name="sLavaFloorLavaTex" OutName="lava_floor_lava" Format="rgba16" Width="64" Height="64" Offset="0x6238"/>
<Texture Name="sLavaFloorRockTex" OutName="lava_floor_rock" Format="rgba16" Width="32" Height="64" Offset="0x8238"/>
<File Name="ovl_Boss_Dodongo">
<Texture Name="sLavaFloorLavaTex" OutName="lava_floor_lava" Format="rgba16" Width="64" Height="64" Offset="0x0"/>
<Texture Name="sLavaFloorRockTex" OutName="lava_floor_rock" Format="rgba16" Width="32" Height="64" Offset="0x2000"/>
</File>
</Root>

View File

@ -1,53 +1,53 @@
<Root>
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="assets/objects/gameplay_keep/"/>
<File Name="ovl_Boss_Ganon" BaseAddress="0x808D6870" RangeStart="0xE6B8" RangeEnd="0x211D8">
<Texture Name="gGanondorfLightning1Tex" OutName="lightning_1" Format="i8" Width="32" Height="96" Offset="0x11600" Static="Off"/>
<Texture Name="gGanondorfLightning2Tex" OutName="lightning_2" Format="i8" Width="32" Height="96" Offset="0x12200" Static="Off"/>
<Texture Name="gGanondorfLightning3Tex" OutName="lightning_3" Format="i8" Width="32" Height="96" Offset="0x12E00" Static="Off"/>
<Texture Name="gGanondorfLightning4Tex" OutName="lightning_4" Format="i8" Width="32" Height="96" Offset="0x13A00" Static="Off"/>
<Texture Name="gGanondorfLightning5Tex" OutName="lightning_5" Format="i8" Width="32" Height="96" Offset="0x14600" Static="Off"/>
<Texture Name="gGanondorfLightning6Tex" OutName="lightning_6" Format="i8" Width="32" Height="96" Offset="0x15200" Static="Off"/>
<Texture Name="gGanondorfLightning7Tex" OutName="lightning_7" Format="i8" Width="32" Height="96" Offset="0x15E00" Static="Off"/>
<Texture Name="gGanondorfLightning8Tex" OutName="lightning_8" Format="i8" Width="32" Height="96" Offset="0x16A00" Static="Off"/>
<Texture Name="gGanondorfLightning9Tex" OutName="lightning_9" Format="i8" Width="32" Height="96" Offset="0x17600" Static="Off"/>
<Texture Name="gGanondorfLightning10Tex" OutName="lightning_10" Format="i8" Width="32" Height="96" Offset="0x18200" Static="Off"/>
<Texture Name="gGanondorfLightning11Tex" OutName="lightning_11" Format="i8" Width="32" Height="96" Offset="0x18E00" Static="Off"/>
<Texture Name="gGanondorfLightning12Tex" OutName="lightning_12" Format="i8" Width="32" Height="96" Offset="0x19A00" Static="Off"/>
<File Name="ovl_Boss_Ganon">
<Texture Name="gGanondorfLightning1Tex" OutName="lightning_1" Format="i8" Width="32" Height="96" Offset="0x2F48" Static="Off"/>
<Texture Name="gGanondorfLightning2Tex" OutName="lightning_2" Format="i8" Width="32" Height="96" Offset="0x3B48" Static="Off"/>
<Texture Name="gGanondorfLightning3Tex" OutName="lightning_3" Format="i8" Width="32" Height="96" Offset="0x4748" Static="Off"/>
<Texture Name="gGanondorfLightning4Tex" OutName="lightning_4" Format="i8" Width="32" Height="96" Offset="0x5348" Static="Off"/>
<Texture Name="gGanondorfLightning5Tex" OutName="lightning_5" Format="i8" Width="32" Height="96" Offset="0x5F48" Static="Off"/>
<Texture Name="gGanondorfLightning6Tex" OutName="lightning_6" Format="i8" Width="32" Height="96" Offset="0x6B48" Static="Off"/>
<Texture Name="gGanondorfLightning7Tex" OutName="lightning_7" Format="i8" Width="32" Height="96" Offset="0x7748" Static="Off"/>
<Texture Name="gGanondorfLightning8Tex" OutName="lightning_8" Format="i8" Width="32" Height="96" Offset="0x8348" Static="Off"/>
<Texture Name="gGanondorfLightning9Tex" OutName="lightning_9" Format="i8" Width="32" Height="96" Offset="0x8F48" Static="Off"/>
<Texture Name="gGanondorfLightning10Tex" OutName="lightning_10" Format="i8" Width="32" Height="96" Offset="0x9B48" Static="Off"/>
<Texture Name="gGanondorfLightning11Tex" OutName="lightning_11" Format="i8" Width="32" Height="96" Offset="0xA748" Static="Off"/>
<Texture Name="gGanondorfLightning12Tex" OutName="lightning_12" Format="i8" Width="32" Height="96" Offset="0xB348" Static="Off"/>
<Texture Name="gGanondorfWindowShatterTemplateTex" OutName="window_shatter_template" Format="i8" Width="32" Height="64" Offset="0xFD38" Static="Off"/>
<Texture Name="gGanondorfWindowShatterTemplateTex" OutName="window_shatter_template" Format="i8" Width="32" Height="64" Offset="0x1680" Static="Off"/>
<DList Name="gGanondorfLightStreak1DL" Offset="0x1FCF0" Static="Off"/>
<DList Name="gGanondorfLightStreak2DL" Offset="0x1FD28" Static="Off"/>
<DList Name="gGanondorfLightStreak3DL" Offset="0x1FD60" Static="Off"/>
<DList Name="gGanondorfLightStreak4DL" Offset="0x1FD98" Static="Off"/>
<DList Name="gGanondorfLightStreak5DL" Offset="0x1FDD0" Static="Off"/>
<DList Name="gGanondorfLightStreak6DL" Offset="0x1FE08" Static="Off"/>
<DList Name="gGanondorfLightStreak7DL" Offset="0x1FE40" Static="Off"/>
<DList Name="gGanondorfLightStreak8DL" Offset="0x1FE78" Static="Off"/>
<DList Name="gGanondorfLightStreak9DL" Offset="0x1FEB0" Static="Off"/>
<DList Name="gGanondorfLightStreak10DL" Offset="0x1FEE8" Static="Off"/>
<DList Name="gGanondorfLightStreak11DL" Offset="0x1FF20" Static="Off"/>
<DList Name="gGanondorfLightStreak12DL" Offset="0x1FF58" Static="Off"/>
<DList Name="gGanondorfLightStreak1DL" Offset="0x11638" Static="Off"/>
<DList Name="gGanondorfLightStreak2DL" Offset="0x11670" Static="Off"/>
<DList Name="gGanondorfLightStreak3DL" Offset="0x116A8" Static="Off"/>
<DList Name="gGanondorfLightStreak4DL" Offset="0x116E0" Static="Off"/>
<DList Name="gGanondorfLightStreak5DL" Offset="0x11718" Static="Off"/>
<DList Name="gGanondorfLightStreak6DL" Offset="0x11750" Static="Off"/>
<DList Name="gGanondorfLightStreak7DL" Offset="0x11788" Static="Off"/>
<DList Name="gGanondorfLightStreak8DL" Offset="0x117C0" Static="Off"/>
<DList Name="gGanondorfLightStreak9DL" Offset="0x117F8" Static="Off"/>
<DList Name="gGanondorfLightStreak10DL" Offset="0x11830" Static="Off"/>
<DList Name="gGanondorfLightStreak11DL" Offset="0x11868" Static="Off"/>
<DList Name="gGanondorfLightStreak12DL" Offset="0x118A0" Static="Off"/>
<DList Name="gGanondorfShadowSetupDL" Offset="0xE6F8" Static="Off"/>
<DList Name="gGanondorfShadowModelDL" Offset="0xE718" Static="Off"/>
<DList Name="gGanondorfTriforceDL" Offset="0xF788" Static="Off"/>
<DList Name="gGanondorfWindowShardMaterialDL" Offset="0xFC78" Static="Off"/>
<DList Name="gGanondorfWindowShardModelDL" Offset="0xFD20" Static="Off"/>
<DList Name="gGanondorfLightBallMaterialDL" Offset="0x11578" Static="Off"/>
<DList Name="gGanondorfSquareDL" Offset="0x115E8" Static="Off"/>
<DList Name="gGanondorfLightningDL" Offset="0x1A640" Static="Off"/>
<DList Name="gGanondorfUnusedDL" Offset="0x1A6F0" Static="Off"/>
<DList Name="gGanondorfLightRayTriDL" Offset="0x1A768" Static="Off"/>
<DList Name="gGanondorfLightFlecksDL" Offset="0x1C1C0" Static="Off"/>
<DList Name="gGanondorfBigMagicBGCircleDL" Offset="0x1C2B0" Static="Off"/>
<DList Name="gGanondorfDotDL" Offset="0x1C358" Static="Off"/>
<DList Name="gGanondorfShockwaveDL" Offset="0x1CDC0" Static="Off"/>
<DList Name="gGanondorfImpactDarkDL" Offset="0x1DC58" Static="Off"/>
<DList Name="gGanondorfImpactLightDL" Offset="0x1DD70" Static="Off"/>
<DList Name="gGanondorfShockGlowDL" Offset="0x1EEC8" Static="Off"/>
<DList Name="gGanondorfLightCoreDL" Offset="0x20228" Static="Off"/>
<DList Name="gGanondorfShockDL" Offset="0x202F0" Static="Off"/>
<DList Name="gGanondorfVortexDL" Offset="0x210D0" Static="Off"/>
<DList Name="gGanondorfShadowSetupDL" Offset="0x40" Static="Off"/>
<DList Name="gGanondorfShadowModelDL" Offset="0x60" Static="Off"/>
<DList Name="gGanondorfTriforceDL" Offset="0x10D0" Static="Off"/>
<DList Name="gGanondorfWindowShardMaterialDL" Offset="0x15C0" Static="Off"/>
<DList Name="gGanondorfWindowShardModelDL" Offset="0x1668" Static="Off"/>
<DList Name="gGanondorfLightBallMaterialDL" Offset="0x2EC0" Static="Off"/>
<DList Name="gGanondorfSquareDL" Offset="0x2F30" Static="Off"/>
<DList Name="gGanondorfLightningDL" Offset="0xBF88" Static="Off"/>
<DList Name="gGanondorfUnusedDL" Offset="0xC038" Static="Off"/>
<DList Name="gGanondorfLightRayTriDL" Offset="0xC0B0" Static="Off"/>
<DList Name="gGanondorfLightFlecksDL" Offset="0xDB08" Static="Off"/>
<DList Name="gGanondorfBigMagicBGCircleDL" Offset="0xDBF8" Static="Off"/>
<DList Name="gGanondorfDotDL" Offset="0xDCA0" Static="Off"/>
<DList Name="gGanondorfShockwaveDL" Offset="0xE708" Static="Off"/>
<DList Name="gGanondorfImpactDarkDL" Offset="0xF5A0" Static="Off"/>
<DList Name="gGanondorfImpactLightDL" Offset="0xF6B8" Static="Off"/>
<DList Name="gGanondorfShockGlowDL" Offset="0x10810" Static="Off"/>
<DList Name="gGanondorfLightCoreDL" Offset="0x11B70" Static="Off"/>
<DList Name="gGanondorfShockDL" Offset="0x11C38" Static="Off"/>
<DList Name="gGanondorfVortexDL" Offset="0x12A18" Static="Off"/>
</File>
</Root>

View File

@ -1,29 +1,29 @@
<Root>
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="assets/objects/gameplay_keep/"/>
<File Name="ovl_Boss_Ganon2" BaseAddress="0x808FCF40" RangeStart="0xA2C8" RangeEnd="0x10778">
<Texture Name="gGanonLightOrbTex" OutName="ganon_light_orb" Format="i8" Width="64" Height="64" Offset="0xA2C8"/>
<DList Name="gGanonLightOrbMaterialDL" Offset="0xB308"/>
<DList Name="gGanonLightOrbModelDL" Offset="0xB378"/>
<DList Name="gGanonShadowMaterialDL" Offset="0xB3D0"/>
<DList Name="gGanonShadowModelDL" Offset="0xB3F0"/>
<Texture Name="gGanonSwordTrailTex" OutName="ganon_sword_trail" Format="i8" Width="32" Height="32" Offset="0xB420"/>
<Texture Name="gGanonSwordTrailMaskTex" OutName="ganon_sword_trail_mask" Format="i4" Width="32" Height="32" Offset="0xB820"/>
<Array Name="gGanonSwordTrailVtx" Count="22" Offset="0xBA20">
<File Name="ovl_Boss_Ganon2">
<Texture Name="gGanonLightOrbTex" OutName="ganon_light_orb" Format="i8" Width="64" Height="64" Offset="0x0"/>
<DList Name="gGanonLightOrbMaterialDL" Offset="0x1040"/>
<DList Name="gGanonLightOrbModelDL" Offset="0x10B0"/>
<DList Name="gGanonShadowMaterialDL" Offset="0x1108"/>
<DList Name="gGanonShadowModelDL" Offset="0x1128"/>
<Texture Name="gGanonSwordTrailTex" OutName="ganon_sword_trail" Format="i8" Width="32" Height="32" Offset="0x1158"/>
<Texture Name="gGanonSwordTrailMaskTex" OutName="ganon_sword_trail_mask" Format="i4" Width="32" Height="32" Offset="0x1558"/>
<Array Name="gGanonSwordTrailVtx" Count="22" Offset="0x1758">
<Vtx/>
</Array>
<DList Name="gGanonSwordTrailDL" Offset="0xBB80"/>
<Texture Name="gGanonTriforceTex" OutName="ganon_triforce" Format="i8" Width="64" Height="64" Offset="0xBC98"/>
<DList Name="gGanonTriforceDL" Offset="0xCCD8"/>
<Texture Name="gGanonLightningTex" OutName="ganon_lightning" Format="i4" Width="32" Height="160" Offset="0xCD58"/>
<DList Name="gGanonLightningDL" Offset="0xD798"/> <!-- Original name might be "efc_fg2_thunder1_modelT" -->
<Texture Name="gGanonFireRingTex" OutName="ganon_fire_ring" Format="i8" Width="32" Height="64" Offset="0xD820"/>
<DList Name="gGanonFireRingDL" Offset="0xE1C0"/> <!-- Original name is "ganon_fire_modelT" -->
<Texture Name="gGanonZeldaMagicTex" OutName="ganon_zelda_magic" Format="i8" Width="32" Height="64" Offset="0xE2E0"/>
<DList Name="gGanonZeldaMagicDL" Offset="0xEC40"/> <!-- Original name is "efc_ganon2_hadou_modelT" ("wave motion; undulation; surge") -->
<Texture Name="gGanonMasterSwordShadowTex" OutName="ganon_master_sword_shadow" Format="i8" Width="32" Height="32" Offset="0xED48"/>
<DList Name="gGanonMasterSwordShadowDL" Offset="0xF188"/> <!-- Original name is "master_sword_shadow_model" -->
<Texture Name="gGanonMasterSwordPommelTex" OutName="ganon_master_sword_pommel" Format="rgba16" Width="16" Height="16" Offset="0xF208"/>
<Texture Name="gGanonMasterSwordGuardTex" OutName="ganon_master_sword_guard" Format="rgba16" Width="32" Height="32" Offset="0xF408"/>
<DList Name="gGanonMasterSwordDL" Offset="0x103A8"/> <!-- Original name is "master_gn2_swordB_model" -->
<DList Name="gGanonSwordTrailDL" Offset="0x18B8"/>
<Texture Name="gGanonTriforceTex" OutName="ganon_triforce" Format="i8" Width="64" Height="64" Offset="0x19D0"/>
<DList Name="gGanonTriforceDL" Offset="0x2A10"/>
<Texture Name="gGanonLightningTex" OutName="ganon_lightning" Format="i4" Width="32" Height="160" Offset="0x2A90"/>
<DList Name="gGanonLightningDL" Offset="0x34D0"/> <!-- Original name might be "efc_fg2_thunder1_modelT" -->
<Texture Name="gGanonFireRingTex" OutName="ganon_fire_ring" Format="i8" Width="32" Height="64" Offset="0x3558"/>
<DList Name="gGanonFireRingDL" Offset="0x3EF8"/> <!-- Original name is "ganon_fire_modelT" -->
<Texture Name="gGanonZeldaMagicTex" OutName="ganon_zelda_magic" Format="i8" Width="32" Height="64" Offset="0x4018"/>
<DList Name="gGanonZeldaMagicDL" Offset="0x4978"/> <!-- Original name is "efc_ganon2_hadou_modelT" ("wave motion; undulation; surge") -->
<Texture Name="gGanonMasterSwordShadowTex" OutName="ganon_master_sword_shadow" Format="i8" Width="32" Height="32" Offset="0x4A80"/>
<DList Name="gGanonMasterSwordShadowDL" Offset="0x4EC0"/> <!-- Original name is "master_sword_shadow_model" -->
<Texture Name="gGanonMasterSwordPommelTex" OutName="ganon_master_sword_pommel" Format="rgba16" Width="16" Height="16" Offset="0x4F40"/>
<Texture Name="gGanonMasterSwordGuardTex" OutName="ganon_master_sword_guard" Format="rgba16" Width="32" Height="32" Offset="0x5140"/>
<DList Name="gGanonMasterSwordDL" Offset="0x60E0"/> <!-- Original name is "master_gn2_swordB_model" -->
</File>
</Root>

View File

@ -1,8 +1,8 @@
<Root>
<File Name="ovl_Boss_Sst" BaseAddress="0x8092C5D0" RangeStart="0xA3C0" RangeEnd="0xAD70">
<DList Name="sBodyStaticDList" Offset="0xA3C0"/>
<DList Name="sHandTrailDList" Offset="0xA3D8"/>
<DList Name="sIntroVanishDList" Offset="0xA838"/>
<DList Name="sShadowDList" Offset="0xACF0"/>
<File Name="ovl_Boss_Sst">
<DList Name="sBodyStaticDList" Offset="0x0"/>
<DList Name="sHandTrailDList" Offset="0x18"/>
<DList Name="sIntroVanishDList" Offset="0x478"/>
<DList Name="sShadowDList" Offset="0x930"/>
</File>
</Root>

View File

@ -1,8 +1,8 @@
<Root>
<File Name="ovl_Demo_Shd" BaseAddress="0x80991230" RangeStart="0x450" RangeEnd="0x23D0">
<File Name="ovl_Demo_Shd">
<DList Name="D_809932D0" Offset="0x20A0"/>
<DList Name="D_80993390" Offset="0x2160"/>
<DList Name="D_809934B8" Offset="0x2288"/>
<DList Name="D_809932D0" Offset="0x1C50"/>
<DList Name="D_80993390" Offset="0x1D10"/>
<DList Name="D_809934B8" Offset="0x1E38"/>
</File>
</Root>

View File

@ -1,9 +1,9 @@
<Root>
<File Name="ovl_Effect_Ss_Fhg_Flash" BaseAddress="0x809A4660" RangeStart="0xA60" RangeEnd="0xF18">
<Array Name="sShockVtx" Count="4" Offset="0xA60">
<File Name="ovl_Effect_Ss_Fhg_Flash">
<Array Name="sShockVtx" Count="4" Offset="0x0">
<Vtx/>
</Array>
<DList Name="sShockDL" Offset="0xAA0"/>
<Texture Name="sShockTex" OutName="shock" Format="i8" Width="32" Height="32" Offset="0xB18"/>
<DList Name="sShockDL" Offset="0x40"/>
<Texture Name="sShockTex" OutName="shock" Format="i8" Width="32" Height="32" Offset="0xB8"/>
</File>
</Root>

View File

@ -1,16 +1,16 @@
<Root>
<File Name="ovl_Elf_Msg" BaseAddress="0x809ACB20" RangeStart="0x758" RangeEnd="0x9D8">
<File Name="ovl_Elf_Msg">
<DList Name="D_809AD278" Offset="0x758"/>
<DList Name="D_809AD278" Offset="0x0"/>
<Array Name="sCylinderVtx" Count="16" Offset="0x798">
<Array Name="sCylinderVtx" Count="16" Offset="0x40">
<Vtx/>
</Array>
<DList Name="sCylinderDL" Offset="0x898"/>
<DList Name="sCylinderDL" Offset="0x140"/>
<Array Name="sCubeVtx" Count="8" Offset="0x918">
<Array Name="sCubeVtx" Count="8" Offset="0x1C0">
<Vtx/>
</Array>
<DList Name="sCubeDL" Offset="0x998"/>
<DList Name="sCubeDL" Offset="0x240"/>
</File>
</Root>

View File

@ -1,11 +1,11 @@
<Root>
<File Name="ovl_Elf_Msg2" BaseAddress="0x809AD700" RangeStart="0x538" RangeEnd="0x638">
<File Name="ovl_Elf_Msg2">
<DList Name="D_809ADC38" Offset="0x538"/>
<DList Name="D_809ADC38" Offset="0x0"/>
<Array Name="sCubeVtx" Count="8" Offset="0x578">
<Array Name="sCubeVtx" Count="8" Offset="0x40">
<Vtx/>
</Array>
<DList Name="sCubeDL" Offset="0x5F8"/>
<DList Name="sCubeDL" Offset="0xC0"/>
</File>
</Root>

View File

@ -1,7 +1,7 @@
<Root>
<File Name="ovl_En_Bili" BaseAddress="0x809BF8A0" RangeStart="0x1E50" RangeEnd="0x1E70">
<DList Name="D_809C16F0" Offset="0x1E50"/>
<DList Name="D_809C1700" Offset="0x1E60"/>
<File Name="ovl_En_Bili">
<DList Name="D_809C16F0" Offset="0x0"/>
<DList Name="D_809C1700" Offset="0x10"/>
</File>
</Root>

View File

@ -1,14 +1,14 @@
<Root>
<File Name="ovl_En_Clear_Tag" BaseAddress="0x809D35B0" RangeStart="0x26F0" RangeEnd="0x89F0">
<DList Name="gArwingDL" Offset="0x26F0"/>
<DList Name="gArwingLaserDL" Offset="0x6388"/>
<DList Name="gArwingBackfireDL" Offset="0x6688"/>
<DList Name="gArwingDebrisEffectMaterialDL" Offset="0x6A38"/>
<DList Name="gArwingDebrisEffectDL" Offset="0x6AB8"/>
<DList Name="gArwingFireEffectMaterialDL" Offset="0x7100"/>
<DList Name="gArwingFireEffectDL" Offset="0x71A8"/>
<DList Name="gArwingFlashEffectDL" Offset="0x8208"/>
<DList Name="gArwingFlashEffectGroundDL" Offset="0x84B8"/>
<DList Name="gArwingShadowDL" Offset="0x8970"/>
<File Name="ovl_En_Clear_Tag">
<DList Name="gArwingDL" Offset="0x0"/>
<DList Name="gArwingLaserDL" Offset="0x3C98"/>
<DList Name="gArwingBackfireDL" Offset="0x3F98"/>
<DList Name="gArwingDebrisEffectMaterialDL" Offset="0x4348"/>
<DList Name="gArwingDebrisEffectDL" Offset="0x43C8"/>
<DList Name="gArwingFireEffectMaterialDL" Offset="0x4A10"/>
<DList Name="gArwingFireEffectDL" Offset="0x4AB8"/>
<DList Name="gArwingFlashEffectDL" Offset="0x5B18"/>
<DList Name="gArwingFlashEffectGroundDL" Offset="0x5DC8"/>
<DList Name="gArwingShadowDL" Offset="0x6280"/>
</File>
</Root>

View File

@ -1,21 +1,21 @@
<Root>
<File Name="ovl_En_Ganon_Mant" BaseAddress="0x80A23D60" RangeStart="0x1218" RangeEnd="0x4118">
<Texture Name="gMantTex" OutName="mant" Format="rgba16" Width="32" Height="64" Offset="0x1218"/>
<File Name="ovl_En_Ganon_Mant">
<Texture Name="gMantTex" OutName="mant" Format="rgba16" Width="32" Height="64" Offset="0x0"/>
<Texture Name="gMantUnusedTex" OutName="mant_unused" Format="rgba16" Width="32" Height="32" Offset="0x2218"/>
<Texture Name="gMantUnusedTex" OutName="mant_unused" Format="rgba16" Width="32" Height="32" Offset="0x1000"/>
<Array Name="gMant1Vtx" Count="144" Offset="0x2A18">
<Array Name="gMant1Vtx" Count="144" Offset="0x1800">
<Vtx/>
</Array>
<DList Name="gMantMaterialDL" Offset="0x3318"/>
<DList Name="gMantMaterialDL" Offset="0x2100"/>
<!-- ! @bug gMantUnusedTex is 32x32 not 32x64, however this dlist is unused -->
<DList Name="gMantUnusedMaterialDL" Offset="0x3370"/>
<DList Name="gMantUnusedMaterialDL" Offset="0x2158"/>
<DList Name="gMantDL" Offset="0x33C8"/>
<DList Name="gMantDL" Offset="0x21B0"/>
<Array Name="gMant2Vtx" Count="144" Offset="0x3818">
<Array Name="gMant2Vtx" Count="144" Offset="0x2600">
<Vtx/>
</Array>
</File>

View File

@ -1,19 +1,19 @@
<Root>
<File Name="ovl_En_Ganon_Organ" BaseAddress="0x80A28000" RangeStart="0x3E0" RangeEnd="0x6F70">
<Texture Name="sRoomCarpetTex" OutName="room_carpet" Format="rgba16" Width="64" Height="16" Offset="0x3E8"/>
<Texture Name="sRoomOrganPipeTex" OutName="room_organ_pipe" Format="i4" Width="16" Height="64" Offset="0xBE8"/>
<Texture Name="sRoomOrganCorbelsTex" OutName="room_organ_corbels" Format="i4" Width="16" Height="16" Offset="0xDE8"/>
<Texture Name="sRoomOrganGrillTex" OutName="room_organ_grill" Format="rgba16" Width="16" Height="16" Offset="0xE68"/>
<Texture Name="sRoomCrestFriezeTex" OutName="room_crest_frieze" Format="i4" Width="32" Height="32" Offset="0x1068"/>
<Texture Name="sRoomColumnFriezeAndCanopyTex" OutName="room_column_frieze_and_canopy" Format="i4" Width="16" Height="16" Offset="0x1268"/>
<Texture Name="sRoomColumnMetalEdgingTex" OutName="room_metal_edging" Format="rgba16" Width="16" Height="16" Offset="0x12E8"/>
<Texture Name="sRoomStatueWingTex" OutName="room_statue_wing" Format="rgba16" Width="16" Height="16" Offset="0x14E8"/>
<Texture Name="sRoomPillarTex" OutName="room_pillar" Format="i8" Width="8" Height="32" Offset="0x16E8"/>
<Texture Name="sRoomOrganKeyboardTex" OutName="room_organ_keyboard" Format="rgba16" Width="32" Height="8" Offset="0x17E8"/>
<Texture Name="sRoomOrganKeyEndTex" OutName="room_organ_key_end" Format="rgba16" Width="4" Height="8" Offset="0x19E8"/>
<Texture Name="sRoomStepTex" OutName="room_step" Format="i4" Width="16" Height="16" Offset="0x1A28"/>
<File Name="ovl_En_Ganon_Organ">
<Texture Name="sRoomCarpetTex" OutName="room_carpet" Format="rgba16" Width="64" Height="16" Offset="0x0"/>
<Texture Name="sRoomOrganPipeTex" OutName="room_organ_pipe" Format="i4" Width="16" Height="64" Offset="0x800"/>
<Texture Name="sRoomOrganCorbelsTex" OutName="room_organ_corbels" Format="i4" Width="16" Height="16" Offset="0xA00"/>
<Texture Name="sRoomOrganGrillTex" OutName="room_organ_grill" Format="rgba16" Width="16" Height="16" Offset="0xA80"/>
<Texture Name="sRoomCrestFriezeTex" OutName="room_crest_frieze" Format="i4" Width="32" Height="32" Offset="0xC80"/>
<Texture Name="sRoomColumnFriezeAndCanopyTex" OutName="room_column_frieze_and_canopy" Format="i4" Width="16" Height="16" Offset="0xE80"/>
<Texture Name="sRoomColumnMetalEdgingTex" OutName="room_metal_edging" Format="rgba16" Width="16" Height="16" Offset="0xF00"/>
<Texture Name="sRoomStatueWingTex" OutName="room_statue_wing" Format="rgba16" Width="16" Height="16" Offset="0x1100"/>
<Texture Name="sRoomPillarTex" OutName="room_pillar" Format="i8" Width="8" Height="32" Offset="0x1300"/>
<Texture Name="sRoomOrganKeyboardTex" OutName="room_organ_keyboard" Format="rgba16" Width="32" Height="8" Offset="0x1400"/>
<Texture Name="sRoomOrganKeyEndTex" OutName="room_organ_key_end" Format="rgba16" Width="4" Height="8" Offset="0x1600"/>
<Texture Name="sRoomStepTex" OutName="room_step" Format="i4" Width="16" Height="16" Offset="0x1640"/>
<DList Name="sRoomOrganAndFloorDL" Offset="0x4CA8"/>
<DList Name="sRoomStatuesDL" Offset="0x6AB0"/>
<DList Name="sRoomOrganAndFloorDL" Offset="0x48C0"/>
<DList Name="sRoomStatuesDL" Offset="0x66C8"/>
</File>
</Root>

View File

@ -1,8 +1,8 @@
<Root>
<File Name="ovl_En_Holl" BaseAddress="0x80A58C10" RangeStart="0xE78" RangeEnd="0xEE0">
<Array Name="sPlaneVtx" Count="4" Offset="0xE78">
<File Name="ovl_En_Holl">
<Array Name="sPlaneVtx" Count="4" Offset="0x0">
<Vtx/>
</Array>
<DList Name="sPlaneDL" Offset="0xEB8"/>
<DList Name="sPlaneDL" Offset="0x40"/>
</File>
</Root>

View File

@ -1,38 +1,38 @@
<Root>
<File Name="ovl_En_Jsjutan" BaseAddress="0x80A897A0" RangeStart="0x12F8" RangeEnd="0x4C88">
<File Name="ovl_En_Jsjutan">
<!-- D_80A8AA98. Carpet texture. -->
<Texture Name="sCarpetTex" OutName="carpet" Format="rgba16" Width="32" Height="64" Offset="0x12F8"/>
<Texture Name="sCarpetTex" OutName="carpet" Format="rgba16" Width="32" Height="64" Offset="0x0"/>
<!-- D_80A8BA98. Carpet's shadow vertices. Same vertex type as sShadowEvenVtx. Used when gameplayFrames is odd. -->
<Array Name="gShadowOddVtx" Count="144" Offset="0x22F8">
<Array Name="gShadowOddVtx" Count="144" Offset="0x1000">
<Vtx/>
</Array>
<!-- D_80A8C398. Carpet's shadow vertices. Same vertex type as gShadowOddVtx. Used when gameplayFrames is even. -->
<Array Name="sShadowEvenVtx" Count="144" Offset="0x2BF8">
<Array Name="sShadowEvenVtx" Count="144" Offset="0x1900">
<Vtx/>
</Array>
<!-- D_80A8CC98. Carpet vertices. Same vertex type as sCarpetEvenVtx. Used when gameplayFrames is odd. -->
<Array Name="sCarpetOddVtx" Count="144" Offset="0x34F8">
<Array Name="sCarpetOddVtx" Count="144" Offset="0x2200">
<Vtx/>
</Array>
<!-- D_80A8E610. Variable declared in `.bss` of EnJsjutan. Used by sShadowMaterialDL -->
<Symbol Name="sShadowTex" Type="u8" TypeSize="1" Count="0x800" Offset="0x4E70"/>
<Symbol Name="sShadowTex" Type="u8" TypeSize="1" Count="0x800" Offset="0x3B78"/>
<!-- D_80A8D598. Draws the carpet's texture. -->
<DList Name="sCarpetMaterialDL" Offset="0x3DF8"/>
<DList Name="sCarpetMaterialDL" Offset="0x2B00"/>
<!-- D_80A8D618. Draws the carpet's shadow texture. -->
<DList Name="sShadowMaterialDL" Offset="0x3E78"/>
<DList Name="sShadowMaterialDL" Offset="0x2B80"/>
<!-- D_80A8D688. Draws vertices in segment 0x0C. -->
<DList Name="sModelDL" Offset="0x3EE8"/>
<DList Name="sModelDL" Offset="0x2BF0"/>
<!-- D_80A8DAB8. Carpet vertices. Same vertex type as sCarpetOddVtx. Used when gameplayFrames is even. -->
<Array Name="sCarpetEvenVtx" Count="144" Offset="0x4318">
<Array Name="sCarpetEvenVtx" Count="144" Offset="0x3020">
<Vtx/>
</Array>
<!-- D_80A8E400 -->
<Collision Name="sCol" Offset="0x4C60"/>
<Collision Name="sCol" Offset="0x3968"/>
</File>
</Root>

View File

@ -1,8 +1,8 @@
<Root>
<File Name="ovl_En_Kanban" BaseAddress="0x80A91FA0" RangeStart="0x2F80" RangeEnd="0x3040">
<Array Name="sShadowVtx" Count="4" Offset="0x2F80">
<File Name="ovl_En_Kanban">
<Array Name="sShadowVtx" Count="4" Offset="0x0">
<Vtx/>
</Array>
<DList Name="sShadowDL" Offset="0x2FC0"/>
<DList Name="sShadowDL" Offset="0x40"/>
</File>
</Root>

View File

@ -1,9 +1,9 @@
<Root>
<File Name="ovl_En_Sda" BaseAddress="0x80AF8E20" RangeStart="0x1578" RangeEnd="0x1608">
<Array Name="D_80AFA398" Count="4" Offset="0x1578">
<File Name="ovl_En_Sda">
<Array Name="D_80AFA398" Count="4" Offset="0x0">
<Vtx/>
</Array>
<DList Name="D_80AFA3D8" Offset="0x15B8"/>
<DList Name="D_80AFA3F8" Offset="0x15D8"/>
<DList Name="D_80AFA3D8" Offset="0x40"/>
<DList Name="D_80AFA3F8" Offset="0x60"/>
</File>
</Root>

View File

@ -1,8 +1,8 @@
<Root>
<File Name="ovl_En_Ssh" BaseAddress="0x80B02270" RangeStart="0x2150" RangeEnd="0x21E0">
<Array Name="D_80B043C0" Count="4" Offset="0x2150">
<File Name="ovl_En_Ssh">
<Array Name="D_80B043C0" Count="4" Offset="0x0">
<Vtx/>
</Array>
<DList Name="D_80B04400" Offset="0x2190"/>
<DList Name="D_80B04400" Offset="0x40"/>
</File>
</Root>

View File

@ -1,8 +1,8 @@
<Root>
<File Name="ovl_En_St" BaseAddress="0x80B04890" RangeStart="0x26B0" RangeEnd="0x2740">
<Array Name="sSkulltulaUnusedVtx" Count="4" Offset="0x26B0">
<File Name="ovl_En_St">
<Array Name="sSkulltulaUnusedVtx" Count="4" Offset="0x0">
<Vtx/>
</Array>
<DList Name="sSkulltulaUnusedDL" Offset="0x26F0"/>
<DList Name="sSkulltulaUnusedDL" Offset="0x40"/>
</File>
</Root>

View File

@ -1,15 +1,15 @@
<Root>
<File Name="ovl_En_Sth" BaseAddress="0x80B07540" RangeStart="0xEF0" RangeEnd="0x3EC4">
<Texture Name="sNoseTex" OutName="nose" Format="rgba16" Width="8" Height="8" Offset="0xEF0"/>
<Texture Name="sHair1Tex" OutName="hair_1" Format="rgba16" Width="8" Height="16" Offset="0xF70"/>
<Texture Name="sEar1Tex" OutName="ear_1" Format="rgba16" Width="8" Height="8" Offset="0x1070"/>
<Texture Name="sEyeTex" OutName="eye" Format="rgba16" Width="32" Height="32" Offset="0x10F0"/>
<Texture Name="sMouthTex" OutName="mouth" Format="rgba16" Width="32" Height="16" Offset="0x18F0"/>
<Texture Name="sEar2Tex" OutName="ear_2" Format="rgba16" Width="8" Height="8" Offset="0x1CF0"/>
<Texture Name="sHair2Tex" OutName="hair_2" Format="rgba16" Width="8" Height="16" Offset="0x1D70"/>
<DList Name="D_80B0A050" Offset="0x2B10"/>
<DList Name="D_80B0A3C0" Offset="0x2E80"/>
<Animation Name="sChildDanceAnim" Offset="0x3620"/>
<Animation Name="sParentDanceAnim" Offset="0x3EB4"/>
<File Name="ovl_En_Sth">
<Texture Name="sNoseTex" OutName="nose" Format="rgba16" Width="8" Height="8" Offset="0x0"/>
<Texture Name="sHair1Tex" OutName="hair_1" Format="rgba16" Width="8" Height="16" Offset="0x80"/>
<Texture Name="sEar1Tex" OutName="ear_1" Format="rgba16" Width="8" Height="8" Offset="0x180"/>
<Texture Name="sEyeTex" OutName="eye" Format="rgba16" Width="32" Height="32" Offset="0x200"/>
<Texture Name="sMouthTex" OutName="mouth" Format="rgba16" Width="32" Height="16" Offset="0xA00"/>
<Texture Name="sEar2Tex" OutName="ear_2" Format="rgba16" Width="8" Height="8" Offset="0xE00"/>
<Texture Name="sHair2Tex" OutName="hair_2" Format="rgba16" Width="8" Height="16" Offset="0xE80"/>
<DList Name="D_80B0A050" Offset="0x1C20"/>
<DList Name="D_80B0A3C0" Offset="0x1F90"/>
<Animation Name="sChildDanceAnim" Offset="0x2730"/>
<Animation Name="sParentDanceAnim" Offset="0x2FC4"/>
</File>
</Root>

View File

@ -1,17 +1,17 @@
<Root>
<File Name="ovl_End_Title" BaseAddress="0x80B65720" RangeStart="0x780" RangeEnd="0x4128">
<Texture Name="sTheLegendOfZeldaTex" OutName="the_legend_of_zelda" Format="ia8" Width="120" Height="24" Offset="0x780"/>
<Texture Name="sOcarinaOfTimeTex" OutName="ocarina_of_time" Format="ia8" Width="112" Height="16" Offset="0x12C0"/>
<Texture Name="sTheEndTex" OutName="the_end" Format="ia8" Width="80" Height="24" Offset="0x19C0"/>
<Texture Name="sNintendoLeftTex" OutName="nintendo_left" Format="ia8" Width="64" Height="48" Offset="0x2140"/>
<Texture Name="sNintendoRightTex" OutName="nintendo_right" Format="ia8" Width="64" Height="48" Offset="0x2D40"/>
<Texture Name="sPresentedByTex" OutName="presented_by" Format="ia8" Width="96" Height="16" Offset="0x3940"/>
<File Name="ovl_End_Title">
<Texture Name="sTheLegendOfZeldaTex" OutName="the_legend_of_zelda" Format="ia8" Width="120" Height="24" Offset="0x0"/>
<Texture Name="sOcarinaOfTimeTex" OutName="ocarina_of_time" Format="ia8" Width="112" Height="16" Offset="0xB40"/>
<Texture Name="sTheEndTex" OutName="the_end" Format="ia8" Width="80" Height="24" Offset="0x1240"/>
<Texture Name="sNintendoLeftTex" OutName="nintendo_left" Format="ia8" Width="64" Height="48" Offset="0x19C0"/>
<Texture Name="sNintendoRightTex" OutName="nintendo_right" Format="ia8" Width="64" Height="48" Offset="0x25C0"/>
<Texture Name="sPresentedByTex" OutName="presented_by" Format="ia8" Width="96" Height="16" Offset="0x31C0"/>
<Array Name="sTriforceVtx" Count="6" Offset="0x3F40">
<Array Name="sTriforceVtx" Count="6" Offset="0x37C0">
<Vtx/>
</Array>
<DList Name="sTriforceDL" Offset="0x3FA0"/>
<DList Name="sTriforceDL" Offset="0x3820"/>
<DList Name="sPresentedByNintendoDL" Offset="0x4000"/>
<DList Name="sPresentedByNintendoDL" Offset="0x3880"/>
</File>
</Root>

View File

@ -1,28 +0,0 @@
<Root>
<File Name="ovl_file_choose" BaseAddress="0x80803D40" RangeStart="0xDE70" RangeEnd="0xE6B0">
<Array Name="D_80811BB0" Count="24" Offset="0xDE70" Static="Off">
<Vtx/>
</Array>
<Array Name="D_80811D30" Count="16" Offset="0xDFF0" Static="Off">
<Vtx/>
</Array>
<Array Name="D_80811E30" Count="16" Offset="0xE0F0" Static="Off">
<Vtx/>
</Array>
<Array Name="D_80811F30" Count="32" Offset="0xE1F0" Static="Off">
<Vtx/>
</Array>
<Array Name="D_80812130" Count="32" Offset="0xE3F0" Static="Off">
<Vtx/>
</Array>
<Array Name="gOptionsDividerTopVtx" Count="4" Offset="0xE5F0" Static="Off">
<Vtx/>
</Array>
<Array Name="gOptionsDividerMiddleVtx" Count="4" Offset="0xE630" Static="Off">
<Vtx/>
</Array>
<Array Name="gOptionsDividerBottomVtx" Count="4" Offset="0xE670" Static="Off">
<Vtx/>
</Array>
</File>
</Root>

View File

@ -1,13 +1,13 @@
<Root>
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="assets/objects/gameplay_keep/"/>
<File Name="ovl_Magic_Dark" BaseAddress="0x80B873D0" RangeStart="0xD10" RangeEnd="0x1740">
<Texture Name="sDiamondTex" OutName="diamond_texture" Format="i8" Width="32" Height="64" Offset="0xD10"/>
<File Name="ovl_Magic_Dark">
<Texture Name="sDiamondTex" OutName="diamond_texture" Format="i8" Width="32" Height="64" Offset="0x0"/>
<Array Name="sDiamondVtx" Count="20" Offset="0x1510">
<Array Name="sDiamondVtx" Count="20" Offset="0x800">
<Vtx/>
</Array>
<DList Name="sDiamondMaterialDL" Offset="0x1650"/>
<DList Name="sDiamondModelDL" Offset="0x1700"/>
<DList Name="sDiamondMaterialDL" Offset="0x940"/>
<DList Name="sDiamondModelDL" Offset="0x9F0"/>
</File>
</Root>

View File

@ -1,10 +1,10 @@
<Root>
<File Name="ovl_Magic_Fire" BaseAddress="0x80B88D70" RangeStart="0xB90" RangeEnd="0x21E0">
<Texture Name="sTex" OutName="dins_fire" Format="i8" Width="64" Height="64" Offset="0xB90"/>
<Array Name="sSphereVtx" Count="76" Offset="0x1B90">
<File Name="ovl_Magic_Fire">
<Texture Name="sTex" OutName="dins_fire" Format="i8" Width="64" Height="64" Offset="0x0"/>
<Array Name="sSphereVtx" Count="76" Offset="0x1000">
<Vtx/>
</Array>
<DList Name="sMaterialDL" Offset="0x2050"/>
<DList Name="sModelDL" Offset="0x2078"/>
<DList Name="sMaterialDL" Offset="0x14C0"/>
<DList Name="sModelDL" Offset="0x14E8"/>
</File>
</Root>

View File

@ -1,15 +1,15 @@
<Root>
<File Name="ovl_Magic_Wind" BaseAddress="0x80B8B100" RangeStart="0x780" RangeEnd="0x1C98">
<Skeleton Name="sSkel" Type="Curve" LimbType="Curve" Offset="0x1C90"/>
<CurveAnimation Name="sAnim" SkelOffset="0x1C90" Offset="0x1C50"/>
<Limb Name="sRootLimb" LimbType="Curve" Offset="0x1C60"/>
<Limb Name="sInnerCylinderLimb" LimbType="Curve" Offset="0x1C6C"/>
<Limb Name="sOuterCylinderLimb" LimbType="Curve" Offset="0x1C78"/>
<Array Name="sCylinderVtx" Count="36" Offset="0x780">
<File Name="ovl_Magic_Wind">
<Skeleton Name="sSkel" Type="Curve" LimbType="Curve" Offset="0x1510"/>
<CurveAnimation Name="sAnim" SkelOffset="0x1510" Offset="0x14D0"/>
<Limb Name="sRootLimb" LimbType="Curve" Offset="0x14E0"/>
<Limb Name="sInnerCylinderLimb" LimbType="Curve" Offset="0x14EC"/>
<Limb Name="sOuterCylinderLimb" LimbType="Curve" Offset="0x14F8"/>
<Array Name="sCylinderVtx" Count="36" Offset="0x0">
<Vtx/>
</Array>
<Texture Name="sTex" OutName="magic_wind" Format="i8" Width="64" Height="64" Offset="0x9C0"/>
<DList Name="sInnerCylinderDL" Offset="0x19C0"/>
<DList Name="sOuterCylinderDL" Offset="0x1AC8"/>
<Texture Name="sTex" OutName="magic_wind" Format="i8" Width="64" Height="64" Offset="0x240"/>
<DList Name="sInnerCylinderDL" Offset="0x1240"/>
<DList Name="sOuterCylinderDL" Offset="0x1348"/>
</File>
</Root>

View File

@ -1,10 +1,10 @@
<Root>
<File Name="ovl_Oceff_Spot" BaseAddress="0x80BA6070" RangeStart="0x7F0" RangeEnd="0xEC8">
<Texture Name="sTex" OutName="sun_song_effect" Format="i8" Width="32" Height="32" Offset="0x7F0"/>
<Array Name="sCylinderVtx" Count="27" Offset="0xBF0">
<File Name="ovl_Oceff_Spot">
<Texture Name="sTex" OutName="sun_song_effect" Format="i8" Width="32" Height="32" Offset="0x0"/>
<Array Name="sCylinderVtx" Count="27" Offset="0x400">
<Vtx/>
</Array>
<DList Name="sCylinderMaterialDL" Offset="0xDA0"/>
<DList Name="sCylinderModelDL" Offset="0xE38"/>
<DList Name="sCylinderMaterialDL" Offset="0x5B0"/>
<DList Name="sCylinderModelDL" Offset="0x648"/>
</File>
</Root>

View File

@ -1,12 +1,12 @@
<Root>
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="assets/objects/gameplay_keep/"/>
<File Name="ovl_Oceff_Storm" BaseAddress="0x80BA70E0" RangeStart="0x7B0" RangeEnd="0x1B40">
<Texture Name="sTex" OutName="song_of_storms_effect" Format="i8" Width="64" Height="64" Offset="0x7B0"/>
<DList Name="sMaterialDL" Offset="0x17B0"/>
<Array Name="sCylinderVtx" Count="27" Offset="0x1858">
<File Name="ovl_Oceff_Storm">
<Texture Name="sTex" OutName="song_of_storms_effect" Format="i8" Width="64" Height="64" Offset="0x0"/>
<DList Name="sMaterialDL" Offset="0x1000"/>
<Array Name="sCylinderVtx" Count="27" Offset="0x10A8">
<Vtx/>
</Array>
<DList Name="sCylinderMaterialDL" Offset="0x1A08"/>
<DList Name="sCylinderModelDL" Offset="0x1AB0"/>
<DList Name="sCylinderMaterialDL" Offset="0x1258"/>
<DList Name="sCylinderModelDL" Offset="0x1300"/>
</File>
</Root>

View File

@ -1,10 +1,10 @@
<Root>
<File Name="ovl_Oceff_Wipe" BaseAddress="0x80BA8D90" RangeStart="0x550" RangeEnd="0xD10">
<Texture Name="sTex" OutName="oceff" Format="i8" Width="32" Height="32" Offset="0x550"/>
<Array Name="sFrustumVtx" Count="40" Offset="0x950">
<File Name="ovl_Oceff_Wipe">
<Texture Name="sTex" OutName="oceff" Format="i8" Width="32" Height="32" Offset="0x0"/>
<Array Name="sFrustumVtx" Count="40" Offset="0x400">
<Vtx/>
</Array>
<DList Name="sMaterialDL" Offset="0xBD0"/>
<DList Name="sFrustumDL" Offset="0xC58"/>
<DList Name="sMaterialDL" Offset="0x680"/>
<DList Name="sFrustumDL" Offset="0x708"/>
</File>
</Root>

View File

@ -1,11 +1,11 @@
<Root>
<File Name="ovl_Oceff_Wipe2" BaseAddress="0x80BA9BB0" RangeStart="0x480" RangeEnd="0x16E8">
<Texture Name="s1Tex" OutName="eponas_song_effect_1" Format="i4" Width="64" Height="64" Offset="0x480"/>
<Texture Name="s2Tex" OutName="eponas_song_effect_2" Format="i4" Width="64" Height="64" Offset="0xC80"/>
<Array Name="sFrustumVtx" Count="22" Offset="0x1480">
<File Name="ovl_Oceff_Wipe2">
<Texture Name="s1Tex" OutName="eponas_song_effect_1" Format="i4" Width="64" Height="64" Offset="0x0"/>
<Texture Name="s2Tex" OutName="eponas_song_effect_2" Format="i4" Width="64" Height="64" Offset="0x800"/>
<Array Name="sFrustumVtx" Count="22" Offset="0x1000">
<Vtx/>
</Array>
<DList Name="sMaterialDL" Offset="0x15E0"/>
<DList Name="sFrustumDL" Offset="0x1688"/>
<DList Name="sMaterialDL" Offset="0x1160"/>
<DList Name="sFrustumDL" Offset="0x1208"/>
</File>
</Root>

View File

@ -1,10 +1,10 @@
<Root>
<File Name="ovl_Oceff_Wipe3" BaseAddress="0x80BAB3F0" RangeStart="0x480" RangeEnd="0x16C8">
<Texture Name="sTex" OutName="saria_song_effect" Format="i8" Width="64" Height="64" Offset="0x480"/>
<Array Name="sFrustumVtx" Count="22" Offset="0x1480">
<File Name="ovl_Oceff_Wipe3">
<Texture Name="sTex" OutName="saria_song_effect" Format="i8" Width="64" Height="64" Offset="0x0"/>
<Array Name="sFrustumVtx" Count="22" Offset="0x1000">
<Vtx/>
</Array>
<DList Name="sMaterialDL" Offset="0x15E0"/>
<DList Name="sFrustumDL" Offset="0x1668"/>
<DList Name="sMaterialDL" Offset="0x1160"/>
<DList Name="sFrustumDL" Offset="0x11E8"/>
</File>
</Root>

View File

@ -1,12 +1,12 @@
<Root>
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="assets/objects/gameplay_keep/"/>
<File Name="ovl_Oceff_Wipe4" BaseAddress="0x80BACC10" RangeStart="0x460" RangeEnd="0xF48">
<Texture Name="sTex" OutName="scarecrow_song_effect" Format="i8" Width="32" Height="64" Offset="0x460"/>
<Array Name="sFrustumVtx" Count="22" Offset="0xC60">
<File Name="ovl_Oceff_Wipe4">
<Texture Name="sTex" OutName="scarecrow_song_effect" Format="i8" Width="32" Height="64" Offset="0x0"/>
<Array Name="sFrustumVtx" Count="22" Offset="0x800">
<Vtx/>
</Array>
<DList Name="sMaterialDL" Offset="0xDC0"/>
<DList Name="sUnusedMaterialDL" Offset="0xE28"/>
<DList Name="sMaterial2DL" Offset="0xE90"/>
<DList Name="sMaterialDL" Offset="0x960"/>
<DList Name="sUnusedMaterialDL" Offset="0x9C8"/>
<DList Name="sMaterial2DL" Offset="0xA30"/>
</File>
</Root>

View File

@ -0,0 +1,28 @@
<Root>
<File Name="ovl_file_choose">
<Array Name="D_80811BB0" Count="24" Offset="0x0" Static="Off">
<Vtx/>
</Array>
<Array Name="D_80811D30" Count="16" Offset="0x180" Static="Off">
<Vtx/>
</Array>
<Array Name="D_80811E30" Count="16" Offset="0x280" Static="Off">
<Vtx/>
</Array>
<Array Name="D_80811F30" Count="32" Offset="0x380" Static="Off">
<Vtx/>
</Array>
<Array Name="D_80812130" Count="32" Offset="0x580" Static="Off">
<Vtx/>
</Array>
<Array Name="gOptionsDividerTopVtx" Count="4" Offset="0x780" Static="Off">
<Vtx/>
</Array>
<Array Name="gOptionsDividerMiddleVtx" Count="4" Offset="0x7C0" Static="Off">
<Vtx/>
</Array>
<Array Name="gOptionsDividerBottomVtx" Count="4" Offset="0x800" Static="Off">
<Vtx/>
</Array>
</File>
</Root>

View File

@ -0,0 +1,76 @@
<Root>
<File Name="Bmori1_scene" Segment="2">
<Texture Name="gForestTempleDayEntranceTex" OutName="day_entrance" Format="ia16" Width="8" Height="128" Offset="0x14D90"/>
<Texture Name="gForestTempleNightEntranceTex" OutName="night_entrance" Format="ia16" Width="8" Height="128" Offset="0x14590"/>
<Scene Name="Bmori1_scene" Offset="0x0"/>
</File>
<File Name="Bmori1_room_0" Segment="3">
<Room Name="Bmori1_room_0" Offset="0x0"/>
</File>
<File Name="Bmori1_room_1" Segment="3">
<Room Name="Bmori1_room_1" Offset="0x0"/>
</File>
<File Name="Bmori1_room_2" Segment="3">
<Room Name="Bmori1_room_2" Offset="0x0"/>
</File>
<File Name="Bmori1_room_3" Segment="3">
<Room Name="Bmori1_room_3" Offset="0x0"/>
</File>
<File Name="Bmori1_room_4" Segment="3">
<Room Name="Bmori1_room_4" Offset="0x0"/>
</File>
<File Name="Bmori1_room_5" Segment="3">
<Room Name="Bmori1_room_5" Offset="0x0"/>
</File>
<File Name="Bmori1_room_6" Segment="3">
<Room Name="Bmori1_room_6" Offset="0x0"/>
</File>
<File Name="Bmori1_room_7" Segment="3">
<Room Name="Bmori1_room_7" Offset="0x0"/>
</File>
<File Name="Bmori1_room_8" Segment="3">
<Room Name="Bmori1_room_8" Offset="0x0"/>
</File>
<File Name="Bmori1_room_9" Segment="3">
<Room Name="Bmori1_room_9" Offset="0x0"/>
</File>
<File Name="Bmori1_room_10" Segment="3">
<Room Name="Bmori1_room_10" Offset="0x0"/>
</File>
<File Name="Bmori1_room_11" Segment="3">
<Room Name="Bmori1_room_11" Offset="0x0"/>
</File>
<File Name="Bmori1_room_12" Segment="3">
<Room Name="Bmori1_room_12" Offset="0x0"/>
</File>
<File Name="Bmori1_room_13" Segment="3">
<Room Name="Bmori1_room_13" Offset="0x0"/>
</File>
<File Name="Bmori1_room_14" Segment="3">
<Room Name="Bmori1_room_14" Offset="0x0"/>
</File>
<File Name="Bmori1_room_15" Segment="3">
<Room Name="Bmori1_room_15" Offset="0x0"/>
</File>
<File Name="Bmori1_room_16" Segment="3">
<Room Name="Bmori1_room_16" Offset="0x0"/>
</File>
<File Name="Bmori1_room_17" Segment="3">
<Room Name="Bmori1_room_17" Offset="0x0"/>
</File>
<File Name="Bmori1_room_18" Segment="3">
<Room Name="Bmori1_room_18" Offset="0x0"/>
</File>
<File Name="Bmori1_room_19" Segment="3">
<Room Name="Bmori1_room_19" Offset="0x0"/>
</File>
<File Name="Bmori1_room_20" Segment="3">
<Room Name="Bmori1_room_20" Offset="0x0"/>
</File>
<File Name="Bmori1_room_21" Segment="3">
<Room Name="Bmori1_room_21" Offset="0x0"/>
</File>
<File Name="Bmori1_room_22" Segment="3">
<Room Name="Bmori1_room_22" Offset="0x0"/>
</File>
</Root>

View File

@ -1,6 +1,6 @@
<Root>
<File Name="HAKAdanCH_scene" Segment="2">
<Path Name="HAKAdanCH_scenePathList_000248" Offset="0x0248" NumPaths="2"/>
<Path Name="HAKAdanCH_scenePathList_000220" Offset="0x0220" NumPaths="1"/>
<Scene Name="HAKAdanCH_scene" Offset="0x0"/>
</File>
<File Name="HAKAdanCH_room_0" Segment="3">

View File

@ -0,0 +1,27 @@
<Root>
<File Name="HAKAdanCH_scene" Segment="2">
<Path Name="HAKAdanCH_scenePathList_000248" Offset="0x0248" NumPaths="2"/>
<Scene Name="HAKAdanCH_scene" Offset="0x0"/>
</File>
<File Name="HAKAdanCH_room_0" Segment="3">
<Room Name="HAKAdanCH_room_0" Offset="0x0"/>
</File>
<File Name="HAKAdanCH_room_1" Segment="3">
<Room Name="HAKAdanCH_room_1" Offset="0x0"/>
</File>
<File Name="HAKAdanCH_room_2" Segment="3">
<Room Name="HAKAdanCH_room_2" Offset="0x0"/>
</File>
<File Name="HAKAdanCH_room_3" Segment="3">
<Room Name="HAKAdanCH_room_3" Offset="0x0"/>
</File>
<File Name="HAKAdanCH_room_4" Segment="3">
<Room Name="HAKAdanCH_room_4" Offset="0x0"/>
</File>
<File Name="HAKAdanCH_room_5" Segment="3">
<Room Name="HAKAdanCH_room_5" Offset="0x0"/>
</File>
<File Name="HAKAdanCH_room_6" Segment="3">
<Room Name="HAKAdanCH_room_6" Offset="0x0"/>
</File>
</Root>

View File

@ -0,0 +1,74 @@
<Root>
<File Name="HAKAdan_scene" Segment="2">
<Scene Name="HAKAdan_scene" Offset="0x0"/>
</File>
<File Name="HAKAdan_room_0" Segment="3">
<Room Name="HAKAdan_room_0" Offset="0x0"/>
</File>
<File Name="HAKAdan_room_1" Segment="3">
<Room Name="HAKAdan_room_1" Offset="0x0"/>
</File>
<File Name="HAKAdan_room_2" Segment="3">
<Room Name="HAKAdan_room_2" Offset="0x0"/>
</File>
<File Name="HAKAdan_room_3" Segment="3">
<Room Name="HAKAdan_room_3" Offset="0x0"/>
</File>
<File Name="HAKAdan_room_4" Segment="3">
<Room Name="HAKAdan_room_4" Offset="0x0"/>
</File>
<File Name="HAKAdan_room_5" Segment="3">
<Room Name="HAKAdan_room_5" Offset="0x0"/>
</File>
<File Name="HAKAdan_room_6" Segment="3">
<Room Name="HAKAdan_room_6" Offset="0x0"/>
</File>
<File Name="HAKAdan_room_7" Segment="3">
<Room Name="HAKAdan_room_7" Offset="0x0"/>
</File>
<File Name="HAKAdan_room_8" Segment="3">
<Room Name="HAKAdan_room_8" Offset="0x0"/>
</File>
<File Name="HAKAdan_room_9" Segment="3">
<Room Name="HAKAdan_room_9" Offset="0x0"/>
</File>
<File Name="HAKAdan_room_10" Segment="3">
<Room Name="HAKAdan_room_10" Offset="0x0"/>
</File>
<File Name="HAKAdan_room_11" Segment="3">
<Room Name="HAKAdan_room_11" Offset="0x0"/>
</File>
<File Name="HAKAdan_room_12" Segment="3">
<Room Name="HAKAdan_room_12" Offset="0x0"/>
</File>
<File Name="HAKAdan_room_13" Segment="3">
<Room Name="HAKAdan_room_13" Offset="0x0"/>
</File>
<File Name="HAKAdan_room_14" Segment="3">
<Room Name="HAKAdan_room_14" Offset="0x0"/>
</File>
<File Name="HAKAdan_room_15" Segment="3">
<Room Name="HAKAdan_room_15" Offset="0x0"/>
</File>
<File Name="HAKAdan_room_16" Segment="3">
<Room Name="HAKAdan_room_16" Offset="0x0"/>
</File>
<File Name="HAKAdan_room_17" Segment="3">
<Room Name="HAKAdan_room_17" Offset="0x0"/>
</File>
<File Name="HAKAdan_room_18" Segment="3">
<Room Name="HAKAdan_room_18" Offset="0x0"/>
</File>
<File Name="HAKAdan_room_19" Segment="3">
<Room Name="HAKAdan_room_19" Offset="0x0"/>
</File>
<File Name="HAKAdan_room_20" Segment="3">
<Room Name="HAKAdan_room_20" Offset="0x0"/>
</File>
<File Name="HAKAdan_room_21" Segment="3">
<Room Name="HAKAdan_room_21" Offset="0x0"/>
</File>
<File Name="HAKAdan_room_22" Segment="3">
<Room Name="HAKAdan_room_22" Offset="0x0"/>
</File>
</Root>

View File

@ -1,6 +1,6 @@
<Root>
<File Name="HIDAN_scene" Segment="2">
<Path Name="HIDAN_scenePathList_000440" Offset="0x0440" NumPaths="4"/>
<Path Name="HIDAN_scenePathList_000558" Offset="0x0558" NumPaths="19"/>
<Scene Name="HIDAN_scene" Offset="0x0"/>
</File>
<File Name="HIDAN_room_0" Segment="3">

View File

@ -0,0 +1,87 @@
<Root>
<File Name="HIDAN_scene" Segment="2">
<Path Name="HIDAN_scenePathList_000440" Offset="0x0440" NumPaths="4"/>
<Scene Name="HIDAN_scene" Offset="0x0"/>
</File>
<File Name="HIDAN_room_0" Segment="3">
<Room Name="HIDAN_room_0" Offset="0x0"/>
</File>
<File Name="HIDAN_room_1" Segment="3">
<Room Name="HIDAN_room_1" Offset="0x0"/>
</File>
<File Name="HIDAN_room_2" Segment="3">
<Room Name="HIDAN_room_2" Offset="0x0"/>
</File>
<File Name="HIDAN_room_3" Segment="3">
<Room Name="HIDAN_room_3" Offset="0x0"/>
</File>
<File Name="HIDAN_room_4" Segment="3">
<Room Name="HIDAN_room_4" Offset="0x0"/>
</File>
<File Name="HIDAN_room_5" Segment="3">
<Room Name="HIDAN_room_5" Offset="0x0"/>
</File>
<File Name="HIDAN_room_6" Segment="3">
<Room Name="HIDAN_room_6" Offset="0x0"/>
</File>
<File Name="HIDAN_room_7" Segment="3">
<Room Name="HIDAN_room_7" Offset="0x0"/>
</File>
<File Name="HIDAN_room_8" Segment="3">
<Room Name="HIDAN_room_8" Offset="0x0"/>
</File>
<File Name="HIDAN_room_9" Segment="3">
<Room Name="HIDAN_room_9" Offset="0x0"/>
</File>
<File Name="HIDAN_room_10" Segment="3">
<Room Name="HIDAN_room_10" Offset="0x0"/>
</File>
<File Name="HIDAN_room_11" Segment="3">
<Room Name="HIDAN_room_11" Offset="0x0"/>
</File>
<File Name="HIDAN_room_12" Segment="3">
<Room Name="HIDAN_room_12" Offset="0x0"/>
</File>
<File Name="HIDAN_room_13" Segment="3">
<Room Name="HIDAN_room_13" Offset="0x0"/>
</File>
<File Name="HIDAN_room_14" Segment="3">
<Room Name="HIDAN_room_14" Offset="0x0"/>
</File>
<File Name="HIDAN_room_15" Segment="3">
<Room Name="HIDAN_room_15" Offset="0x0"/>
</File>
<File Name="HIDAN_room_16" Segment="3">
<Room Name="HIDAN_room_16" Offset="0x0"/>
</File>
<File Name="HIDAN_room_17" Segment="3">
<Room Name="HIDAN_room_17" Offset="0x0"/>
</File>
<File Name="HIDAN_room_18" Segment="3">
<Room Name="HIDAN_room_18" Offset="0x0"/>
</File>
<File Name="HIDAN_room_19" Segment="3">
<Room Name="HIDAN_room_19" Offset="0x0"/>
</File>
<File Name="HIDAN_room_20" Segment="3">
<Room Name="HIDAN_room_20" Offset="0x0"/>
</File>
<File Name="HIDAN_room_21" Segment="3">
<Room Name="HIDAN_room_21" Offset="0x0"/>
</File>
<File Name="HIDAN_room_22" Segment="3">
<Room Name="HIDAN_room_22" Offset="0x0"/>
</File>
<File Name="HIDAN_room_23" Segment="3">
<Room Name="HIDAN_room_23" Offset="0x0"/>
</File>
<File Name="HIDAN_room_24" Segment="3">
<Room Name="HIDAN_room_24" Offset="0x0"/>
</File>
<File Name="HIDAN_room_25" Segment="3">
<Room Name="HIDAN_room_25" Offset="0x0"/>
</File>
<File Name="HIDAN_room_26" Segment="3">
<Room Name="HIDAN_room_26" Offset="0x0"/>
</File>
</Root>

View File

@ -1,8 +1,8 @@
<Root>
<File Name="MIZUsin_scene" Segment="2">
<Path Name="MIZUsin_scenePathList_000384" Offset="0x0384" NumPaths="2"/>
<Texture Name="gWaterTempleDayEntranceTex" OutName="day_entrance" Format="ia16" Width="8" Height="64" Offset="0x14C30"/>
<Texture Name="gWaterTempleNightEntranceTex" OutName="night_entrance" Format="ia16" Width="8" Height="64" Offset="0x15830"/>
<Path Name="MIZUsin_scenePathList_000424" Offset="0x0424" NumPaths="7"/>
<Texture Name="gWaterTempleDayEntranceTex" OutName="day_entrance" Format="ia16" Width="8" Height="64" Offset="0x14CF0"/>
<Texture Name="gWaterTempleNightEntranceTex" OutName="night_entrance" Format="ia16" Width="8" Height="64" Offset="0x158F0"/>
<Scene Name="MIZUsin_scene" Offset="0x0"/>
</File>
<File Name="MIZUsin_room_0" Segment="3">

View File

@ -0,0 +1,77 @@
<Root>
<File Name="MIZUsin_scene" Segment="2">
<Path Name="MIZUsin_scenePathList_000384" Offset="0x0384" NumPaths="2"/>
<Texture Name="gWaterTempleDayEntranceTex" OutName="day_entrance" Format="ia16" Width="8" Height="64" Offset="0x14C30"/>
<Texture Name="gWaterTempleNightEntranceTex" OutName="night_entrance" Format="ia16" Width="8" Height="64" Offset="0x15830"/>
<Scene Name="MIZUsin_scene" Offset="0x0"/>
</File>
<File Name="MIZUsin_room_0" Segment="3">
<Room Name="MIZUsin_room_0" Offset="0x0"/>
</File>
<File Name="MIZUsin_room_1" Segment="3">
<Room Name="MIZUsin_room_1" Offset="0x0"/>
</File>
<File Name="MIZUsin_room_2" Segment="3">
<Room Name="MIZUsin_room_2" Offset="0x0"/>
</File>
<File Name="MIZUsin_room_3" Segment="3">
<Room Name="MIZUsin_room_3" Offset="0x0"/>
</File>
<File Name="MIZUsin_room_4" Segment="3">
<Room Name="MIZUsin_room_4" Offset="0x0"/>
</File>
<File Name="MIZUsin_room_5" Segment="3">
<Room Name="MIZUsin_room_5" Offset="0x0"/>
</File>
<File Name="MIZUsin_room_6" Segment="3">
<Room Name="MIZUsin_room_6" Offset="0x0"/>
</File>
<File Name="MIZUsin_room_7" Segment="3">
<Room Name="MIZUsin_room_7" Offset="0x0"/>
</File>
<File Name="MIZUsin_room_8" Segment="3">
<Room Name="MIZUsin_room_8" Offset="0x0"/>
</File>
<File Name="MIZUsin_room_9" Segment="3">
<Room Name="MIZUsin_room_9" Offset="0x0"/>
</File>
<File Name="MIZUsin_room_10" Segment="3">
<Room Name="MIZUsin_room_10" Offset="0x0"/>
</File>
<File Name="MIZUsin_room_11" Segment="3">
<Room Name="MIZUsin_room_11" Offset="0x0"/>
</File>
<File Name="MIZUsin_room_12" Segment="3">
<Room Name="MIZUsin_room_12" Offset="0x0"/>
</File>
<File Name="MIZUsin_room_13" Segment="3">
<Room Name="MIZUsin_room_13" Offset="0x0"/>
</File>
<File Name="MIZUsin_room_14" Segment="3">
<Room Name="MIZUsin_room_14" Offset="0x0"/>
</File>
<File Name="MIZUsin_room_15" Segment="3">
<Room Name="MIZUsin_room_15" Offset="0x0"/>
</File>
<File Name="MIZUsin_room_16" Segment="3">
<Room Name="MIZUsin_room_16" Offset="0x0"/>
</File>
<File Name="MIZUsin_room_17" Segment="3">
<Room Name="MIZUsin_room_17" Offset="0x0"/>
</File>
<File Name="MIZUsin_room_18" Segment="3">
<Room Name="MIZUsin_room_18" Offset="0x0"/>
</File>
<File Name="MIZUsin_room_19" Segment="3">
<Room Name="MIZUsin_room_19" Offset="0x0"/>
</File>
<File Name="MIZUsin_room_20" Segment="3">
<Room Name="MIZUsin_room_20" Offset="0x0"/>
</File>
<File Name="MIZUsin_room_21" Segment="3">
<Room Name="MIZUsin_room_21" Offset="0x0"/>
</File>
<File Name="MIZUsin_room_22" Segment="3">
<Room Name="MIZUsin_room_22" Offset="0x0"/>
</File>
</Root>

View File

@ -1,6 +1,6 @@
<Root>
<File Name="bdan_scene" Segment="2">
<Cutscene Name="gJabuJabuIntroCs" Offset="0x15600"/>
<Cutscene Name="gJabuJabuIntroCs" Offset="0x155E0"/>
<Scene Name="bdan_scene" Offset="0x0"/>
</File>
<File Name="bdan_room_0" Segment="3">

View File

@ -0,0 +1,54 @@
<Root>
<File Name="bdan_scene" Segment="2">
<Cutscene Name="gJabuJabuIntroCs" Offset="0x15600"/>
<Scene Name="bdan_scene" Offset="0x0"/>
</File>
<File Name="bdan_room_0" Segment="3">
<Room Name="bdan_room_0" Offset="0x0"/>
</File>
<File Name="bdan_room_1" Segment="3">
<Room Name="bdan_room_1" Offset="0x0"/>
</File>
<File Name="bdan_room_2" Segment="3">
<Room Name="bdan_room_2" Offset="0x0"/>
</File>
<File Name="bdan_room_3" Segment="3">
<Room Name="bdan_room_3" Offset="0x0"/>
</File>
<File Name="bdan_room_4" Segment="3">
<Room Name="bdan_room_4" Offset="0x0"/>
</File>
<File Name="bdan_room_5" Segment="3">
<Room Name="bdan_room_5" Offset="0x0"/>
</File>
<File Name="bdan_room_6" Segment="3">
<Room Name="bdan_room_6" Offset="0x0"/>
</File>
<File Name="bdan_room_7" Segment="3">
<Room Name="bdan_room_7" Offset="0x0"/>
</File>
<File Name="bdan_room_8" Segment="3">
<Room Name="bdan_room_8" Offset="0x0"/>
</File>
<File Name="bdan_room_9" Segment="3">
<Room Name="bdan_room_9" Offset="0x0"/>
</File>
<File Name="bdan_room_10" Segment="3">
<Room Name="bdan_room_10" Offset="0x0"/>
</File>
<File Name="bdan_room_11" Segment="3">
<Room Name="bdan_room_11" Offset="0x0"/>
</File>
<File Name="bdan_room_12" Segment="3">
<Room Name="bdan_room_12" Offset="0x0"/>
</File>
<File Name="bdan_room_13" Segment="3">
<Room Name="bdan_room_13" Offset="0x0"/>
</File>
<File Name="bdan_room_14" Segment="3">
<Room Name="bdan_room_14" Offset="0x0"/>
</File>
<File Name="bdan_room_15" Segment="3">
<Room Name="bdan_room_15" Offset="0x0"/>
</File>
</Root>

View File

@ -0,0 +1,70 @@
<Root>
<File Name="ddan_scene" Segment="2">
<Texture Name="gDCDayEntranceTex" OutName="day_entrance" Format="ci8" Width="32" Height="64" Offset="0x12378" TlutOffset="0x11D70"/>
<Texture Name="gDCNightEntranceTex" OutName="night_entrance" Format="ci8" Width="32" Height="64" Offset="0x13378" TlutOffset="0x11D70"/>
<!-- These textures are used in room 0 with a TLUT at 0x11290 in room 0, and in room 3 with a TLUT at 0x008630 in room 3 (those two TLUTs are identical, but duplicated) -->
<Texture Name="gDCLavaFloor1Tex" OutName="lava_floor_1" Format="ci8" Width="32" Height="32" Offset="0x11F78" ExternalTlut="ddan_room_0" ExternalTlutOffset="0x11290"/>
<Texture Name="gDCLavaFloor2Tex" OutName="lava_floor_2" Format="ci8" Width="32" Height="32" Offset="0x14778" ExternalTlut="ddan_room_0" ExternalTlutOffset="0x11290"/>
<Texture Name="gDCLavaFloor3Tex" OutName="lava_floor_3" Format="ci8" Width="32" Height="32" Offset="0x14378" ExternalTlut="ddan_room_0" ExternalTlutOffset="0x11290"/>
<Texture Name="gDCLavaFloor4Tex" OutName="lava_floor_4" Format="ci8" Width="32" Height="32" Offset="0x13F78" ExternalTlut="ddan_room_0" ExternalTlutOffset="0x11290"/>
<Texture Name="gDCLavaFloor5Tex" OutName="lava_floor_5" Format="ci8" Width="32" Height="32" Offset="0x14B78" ExternalTlut="ddan_room_0" ExternalTlutOffset="0x11290"/>
<Texture Name="gDCLavaFloor6Tex" OutName="lava_floor_6" Format="ci8" Width="32" Height="32" Offset="0x13B78" ExternalTlut="ddan_room_0" ExternalTlutOffset="0x11290"/>
<Texture Name="gDCLavaFloor7Tex" OutName="lava_floor_7" Format="ci8" Width="32" Height="32" Offset="0x12F78" ExternalTlut="ddan_room_0" ExternalTlutOffset="0x11290"/>
<Texture Name="gDCLavaFloor8Tex" OutName="lava_floor_8" Format="ci8" Width="32" Height="32" Offset="0x12B78" ExternalTlut="ddan_room_0" ExternalTlutOffset="0x11290"/>
<Cutscene Name="gDcOpeningCs" Offset="0x14F80"/>
<Scene Name="ddan_scene" Offset="0x0"/>
</File>
<File Name="ddan_room_0" Segment="3">
<Room Name="ddan_room_0" Offset="0x0"/>
</File>
<File Name="ddan_room_1" Segment="3">
<Room Name="ddan_room_1" Offset="0x0"/>
</File>
<File Name="ddan_room_2" Segment="3">
<Room Name="ddan_room_2" Offset="0x0"/>
</File>
<File Name="ddan_room_3" Segment="3">
<Room Name="ddan_room_3" Offset="0x0"/>
</File>
<File Name="ddan_room_4" Segment="3">
<Room Name="ddan_room_4" Offset="0x0"/>
</File>
<File Name="ddan_room_5" Segment="3">
<Room Name="ddan_room_5" Offset="0x0"/>
</File>
<File Name="ddan_room_6" Segment="3">
<Room Name="ddan_room_6" Offset="0x0"/>
</File>
<File Name="ddan_room_7" Segment="3">
<Room Name="ddan_room_7" Offset="0x0"/>
</File>
<File Name="ddan_room_8" Segment="3">
<Room Name="ddan_room_8" Offset="0x0"/>
</File>
<File Name="ddan_room_9" Segment="3">
<Room Name="ddan_room_9" Offset="0x0"/>
</File>
<File Name="ddan_room_10" Segment="3">
<Room Name="ddan_room_10" Offset="0x0"/>
</File>
<File Name="ddan_room_11" Segment="3">
<Room Name="ddan_room_11" Offset="0x0"/>
</File>
<File Name="ddan_room_12" Segment="3">
<Room Name="ddan_room_12" Offset="0x0"/>
</File>
<File Name="ddan_room_13" Segment="3">
<Room Name="ddan_room_13" Offset="0x0"/>
</File>
<File Name="ddan_room_14" Segment="3">
<Room Name="ddan_room_14" Offset="0x0"/>
</File>
<File Name="ddan_room_15" Segment="3">
<Room Name="ddan_room_15" Offset="0x0"/>
</File>
<File Name="ddan_room_16" Segment="3">
<Room Name="ddan_room_16" Offset="0x0"/>
</File>
</Root>

View File

@ -1,22 +1,22 @@
<Root>
<File Name="ganontika_scene" Segment="2">
<Cutscene Name="gForestTrialSageCs" Offset="0x19EE0"/>
<Cutscene Name="gWaterTrialSageCs" Offset="0x1A8E0"/>
<Cutscene Name="gShadowTrialSageCs" Offset="0x1B2B0"/>
<Cutscene Name="gFireTrialSageCs" Offset="0x1BC80"/>
<Cutscene Name="gLightTrialSageCs" Offset="0x1C6B0"/>
<Cutscene Name="gSpiritTrialSageCs" Offset="0x1D080"/>
<Cutscene Name="gForestTrialSageCs" Offset="0x19ED0"/>
<Cutscene Name="gWaterTrialSageCs" Offset="0x1A8D0"/>
<Cutscene Name="gShadowTrialSageCs" Offset="0x1B2A0"/>
<Cutscene Name="gFireTrialSageCs" Offset="0x1BC70"/>
<Cutscene Name="gLightTrialSageCs" Offset="0x1C6A0"/>
<Cutscene Name="gSpiritTrialSageCs" Offset="0x1D070"/>
<Cutscene Name="gTowerBarrierCs" Offset="0x1DA50"/>
<Cutscene Name="gTowerBarrierCs" Offset="0x1DA40"/>
<Cutscene Name="gLightBarrierCs" Offset="0x1DF90"/>
<Cutscene Name="gFireBarrierCs" Offset="0x1E3E0"/>
<Cutscene Name="gForestBarrierCs" Offset="0x1E790"/>
<Cutscene Name="gSpiritBarrierCs" Offset="0x1EB40"/>
<Cutscene Name="gWaterBarrierCs" Offset="0x1EF70"/>
<Cutscene Name="gShadowBarrierCs" Offset="0x21380"/>
<Cutscene Name="gLightBarrierCs" Offset="0x1DF80"/>
<Cutscene Name="gFireBarrierCs" Offset="0x1E3D0"/>
<Cutscene Name="gForestBarrierCs" Offset="0x1E780"/>
<Cutscene Name="gSpiritBarrierCs" Offset="0x1EB30"/>
<Cutscene Name="gWaterBarrierCs" Offset="0x1EF60"/>
<Cutscene Name="gShadowBarrierCs" Offset="0x21370"/>
<Path Name="ganontika_scenePathList_000668" Offset="0x0668" NumPaths="6"/>
<Path Name="ganontika_scenePathList_000674" Offset="0x0674" NumPaths="3"/>
<Scene Name="ganontika_scene" Offset="0x0"/>
</File>
<File Name="ganontika_room_0" Segment="3">

View File

@ -0,0 +1,82 @@
<Root>
<File Name="ganontika_scene" Segment="2">
<Cutscene Name="gForestTrialSageCs" Offset="0x19EE0"/>
<Cutscene Name="gWaterTrialSageCs" Offset="0x1A8E0"/>
<Cutscene Name="gShadowTrialSageCs" Offset="0x1B2B0"/>
<Cutscene Name="gFireTrialSageCs" Offset="0x1BC80"/>
<Cutscene Name="gLightTrialSageCs" Offset="0x1C6B0"/>
<Cutscene Name="gSpiritTrialSageCs" Offset="0x1D080"/>
<Cutscene Name="gTowerBarrierCs" Offset="0x1DA50"/>
<Cutscene Name="gLightBarrierCs" Offset="0x1DF90"/>
<Cutscene Name="gFireBarrierCs" Offset="0x1E3E0"/>
<Cutscene Name="gForestBarrierCs" Offset="0x1E790"/>
<Cutscene Name="gSpiritBarrierCs" Offset="0x1EB40"/>
<Cutscene Name="gWaterBarrierCs" Offset="0x1EF70"/>
<Cutscene Name="gShadowBarrierCs" Offset="0x21380"/>
<Path Name="ganontika_scenePathList_000668" Offset="0x0668" NumPaths="6"/>
<Scene Name="ganontika_scene" Offset="0x0"/>
</File>
<File Name="ganontika_room_0" Segment="3">
<Room Name="ganontika_room_0" Offset="0x0"/>
</File>
<File Name="ganontika_room_1" Segment="3">
<Room Name="ganontika_room_1" Offset="0x0"/>
</File>
<File Name="ganontika_room_2" Segment="3">
<Room Name="ganontika_room_2" Offset="0x0"/>
</File>
<File Name="ganontika_room_3" Segment="3">
<Room Name="ganontika_room_3" Offset="0x0"/>
</File>
<File Name="ganontika_room_4" Segment="3">
<Room Name="ganontika_room_4" Offset="0x0"/>
</File>
<File Name="ganontika_room_5" Segment="3">
<Room Name="ganontika_room_5" Offset="0x0"/>
</File>
<File Name="ganontika_room_6" Segment="3">
<Room Name="ganontika_room_6" Offset="0x0"/>
</File>
<File Name="ganontika_room_7" Segment="3">
<Room Name="ganontika_room_7" Offset="0x0"/>
</File>
<File Name="ganontika_room_8" Segment="3">
<Room Name="ganontika_room_8" Offset="0x0"/>
</File>
<File Name="ganontika_room_9" Segment="3">
<Room Name="ganontika_room_9" Offset="0x0"/>
</File>
<File Name="ganontika_room_10" Segment="3">
<Room Name="ganontika_room_10" Offset="0x0"/>
</File>
<File Name="ganontika_room_11" Segment="3">
<Room Name="ganontika_room_11" Offset="0x0"/>
</File>
<File Name="ganontika_room_12" Segment="3">
<Room Name="ganontika_room_12" Offset="0x0"/>
</File>
<File Name="ganontika_room_13" Segment="3">
<Room Name="ganontika_room_13" Offset="0x0"/>
</File>
<File Name="ganontika_room_14" Segment="3">
<Room Name="ganontika_room_14" Offset="0x0"/>
</File>
<File Name="ganontika_room_15" Segment="3">
<Room Name="ganontika_room_15" Offset="0x0"/>
</File>
<File Name="ganontika_room_16" Segment="3">
<Room Name="ganontika_room_16" Offset="0x0"/>
</File>
<File Name="ganontika_room_17" Segment="3">
<Room Name="ganontika_room_17" Offset="0x0"/>
</File>
<File Name="ganontika_room_18" Segment="3">
<Room Name="ganontika_room_18" Offset="0x0"/>
</File>
<File Name="ganontika_room_19" Segment="3">
<Room Name="ganontika_room_19" Offset="0x0"/>
</File>
</Root>

View File

@ -1,9 +1,8 @@
<Root>
<File Name="ice_doukutu_scene" Segment="2">
<Path Name="ice_doukutu_scenePathList_000304" Offset="0x0304" NumPaths="5"/>
<Cutscene Name="gIceCavernSerenadeCs" Offset="0x330"/>
<Texture Name="gIceCavernNightEntranceTex" OutName="night_entrance" Format="ia16" Width="64" Height="4" Offset="0xF8C0"/>
<Texture Name="gIceCavernDayEntranceTex" OutName="day_entrance" Format="ia16" Width="64" Height="4" Offset="0xFAC0"/>
<Cutscene Name="gIceCavernSerenadeCs" Offset="0x250"/>
<Texture Name="gIceCavernNightEntranceTex" OutName="night_entrance" Format="ia16" Width="64" Height="4" Offset="0xF7F0"/>
<Texture Name="gIceCavernDayEntranceTex" OutName="day_entrance" Format="ia16" Width="64" Height="4" Offset="0xF9F0"/>
<Scene Name="ice_doukutu_scene" Offset="0x0"/>
</File>
<File Name="ice_doukutu_room_0" Segment="3">

View File

@ -0,0 +1,45 @@
<Root>
<File Name="ice_doukutu_scene" Segment="2">
<Path Name="ice_doukutu_scenePathList_000304" Offset="0x0304" NumPaths="5"/>
<Cutscene Name="gIceCavernSerenadeCs" Offset="0x330"/>
<Texture Name="gIceCavernNightEntranceTex" OutName="night_entrance" Format="ia16" Width="64" Height="4" Offset="0xF8C0"/>
<Texture Name="gIceCavernDayEntranceTex" OutName="day_entrance" Format="ia16" Width="64" Height="4" Offset="0xFAC0"/>
<Scene Name="ice_doukutu_scene" Offset="0x0"/>
</File>
<File Name="ice_doukutu_room_0" Segment="3">
<Room Name="ice_doukutu_room_0" Offset="0x0"/>
</File>
<File Name="ice_doukutu_room_1" Segment="3">
<Room Name="ice_doukutu_room_1" Offset="0x0"/>
</File>
<File Name="ice_doukutu_room_2" Segment="3">
<Room Name="ice_doukutu_room_2" Offset="0x0"/>
</File>
<File Name="ice_doukutu_room_3" Segment="3">
<Room Name="ice_doukutu_room_3" Offset="0x0"/>
</File>
<File Name="ice_doukutu_room_4" Segment="3">
<Room Name="ice_doukutu_room_4" Offset="0x0"/>
</File>
<File Name="ice_doukutu_room_5" Segment="3">
<Room Name="ice_doukutu_room_5" Offset="0x0"/>
</File>
<File Name="ice_doukutu_room_6" Segment="3">
<Room Name="ice_doukutu_room_6" Offset="0x0"/>
</File>
<File Name="ice_doukutu_room_7" Segment="3">
<Room Name="ice_doukutu_room_7" Offset="0x0"/>
</File>
<File Name="ice_doukutu_room_8" Segment="3">
<Room Name="ice_doukutu_room_8" Offset="0x0"/>
</File>
<File Name="ice_doukutu_room_9" Segment="3">
<Room Name="ice_doukutu_room_9" Offset="0x0"/>
</File>
<File Name="ice_doukutu_room_10" Segment="3">
<Room Name="ice_doukutu_room_10" Offset="0x0"/>
</File>
<File Name="ice_doukutu_room_11" Segment="3">
<Room Name="ice_doukutu_room_11" Offset="0x0"/>
</File>
</Root>

View File

@ -1,11 +1,11 @@
<Root>
<File Name="jyasinzou_scene" Segment="2">
<Path Name="jyasinzou_scenePathList_00049C" Offset="0x049C" NumPaths="5"/>
<Texture Name="gSpiritTempleDayEntranceTex" OutName="day_entrance" Format="ia16" Width="8" Height="128" Offset="0x18920"/>
<Texture Name="gSpiritTempleNightEntranceTex" OutName="night_entrance" Format="ia16" Width="8" Height="128" Offset="0x18020"/>
<Path Name="jyasinzou_scenePathList_0004C0" Offset="0x04C0" NumPaths="6"/>
<Texture Name="gSpiritTempleDayEntranceTex" OutName="day_entrance" Format="ia16" Width="8" Height="128" Offset="0x18940"/>
<Texture Name="gSpiritTempleNightEntranceTex" OutName="night_entrance" Format="ia16" Width="8" Height="128" Offset="0x18040"/>
<Scene Name="jyasinzou_scene" Offset="0x0"/>
<Scene Name="jyasinzou_scene_unused1" Offset="0x17200"/>
<Scene Name="jyasinzou_scene_unused2" Offset="0x176F0"/>
<Scene Name="jyasinzou_scene_unused1" Offset="0x17220"/>
<Scene Name="jyasinzou_scene_unused2" Offset="0x17710"/>
</File>
<File Name="jyasinzou_room_0" Segment="3">
<Room Name="jyasinzou_room_0" Offset="0x0"/>

View File

@ -0,0 +1,97 @@
<Root>
<File Name="jyasinzou_scene" Segment="2">
<Path Name="jyasinzou_scenePathList_00049C" Offset="0x049C" NumPaths="5"/>
<Texture Name="gSpiritTempleDayEntranceTex" OutName="day_entrance" Format="ia16" Width="8" Height="128" Offset="0x18920"/>
<Texture Name="gSpiritTempleNightEntranceTex" OutName="night_entrance" Format="ia16" Width="8" Height="128" Offset="0x18020"/>
<Scene Name="jyasinzou_scene" Offset="0x0"/>
<Scene Name="jyasinzou_scene_unused1" Offset="0x17200"/>
<Scene Name="jyasinzou_scene_unused2" Offset="0x176F0"/>
</File>
<File Name="jyasinzou_room_0" Segment="3">
<Room Name="jyasinzou_room_0" Offset="0x0"/>
</File>
<File Name="jyasinzou_room_1" Segment="3">
<Room Name="jyasinzou_room_1" Offset="0x0"/>
</File>
<File Name="jyasinzou_room_2" Segment="3">
<Room Name="jyasinzou_room_2" Offset="0x0"/>
</File>
<File Name="jyasinzou_room_3" Segment="3">
<Room Name="jyasinzou_room_3" Offset="0x0"/>
</File>
<File Name="jyasinzou_room_4" Segment="3">
<Room Name="jyasinzou_room_4" Offset="0x0"/>
</File>
<File Name="jyasinzou_room_5" Segment="3">
<Room Name="jyasinzou_room_5" Offset="0x0"/>
</File>
<File Name="jyasinzou_room_6" Segment="3">
<Room Name="jyasinzou_room_6" Offset="0x0"/>
</File>
<File Name="jyasinzou_room_7" Segment="3">
<Room Name="jyasinzou_room_7" Offset="0x0"/>
</File>
<File Name="jyasinzou_room_8" Segment="3">
<Room Name="jyasinzou_room_8" Offset="0x0"/>
</File>
<File Name="jyasinzou_room_9" Segment="3">
<Room Name="jyasinzou_room_9" Offset="0x0"/>
</File>
<File Name="jyasinzou_room_10" Segment="3">
<Room Name="jyasinzou_room_10" Offset="0x0"/>
</File>
<File Name="jyasinzou_room_11" Segment="3">
<Room Name="jyasinzou_room_11" Offset="0x0"/>
</File>
<File Name="jyasinzou_room_12" Segment="3">
<Room Name="jyasinzou_room_12" Offset="0x0"/>
</File>
<File Name="jyasinzou_room_13" Segment="3">
<Room Name="jyasinzou_room_13" Offset="0x0"/>
</File>
<File Name="jyasinzou_room_14" Segment="3">
<Room Name="jyasinzou_room_14" Offset="0x0"/>
</File>
<File Name="jyasinzou_room_15" Segment="3">
<Room Name="jyasinzou_room_15" Offset="0x0"/>
</File>
<File Name="jyasinzou_room_16" Segment="3">
<Room Name="jyasinzou_room_16" Offset="0x0"/>
</File>
<File Name="jyasinzou_room_17" Segment="3">
<Room Name="jyasinzou_room_17" Offset="0x0"/>
</File>
<File Name="jyasinzou_room_18" Segment="3">
<Room Name="jyasinzou_room_18" Offset="0x0"/>
</File>
<File Name="jyasinzou_room_19" Segment="3">
<Room Name="jyasinzou_room_19" Offset="0x0"/>
</File>
<File Name="jyasinzou_room_20" Segment="3">
<Room Name="jyasinzou_room_20" Offset="0x0"/>
</File>
<File Name="jyasinzou_room_21" Segment="3">
<Room Name="jyasinzou_room_21" Offset="0x0"/>
</File>
<File Name="jyasinzou_room_22" Segment="3">
<Room Name="jyasinzou_room_22" Offset="0x0"/>
</File>
<File Name="jyasinzou_room_23" Segment="3">
<Room Name="jyasinzou_room_23" Offset="0x0"/>
</File>
<File Name="jyasinzou_room_24" Segment="3">
<Room Name="jyasinzou_room_24" Offset="0x0"/>
</File>
<File Name="jyasinzou_room_25" Segment="3">
<Room Name="jyasinzou_room_25" Offset="0x0"/>
</File>
<File Name="jyasinzou_room_26" Segment="3">
<Room Name="jyasinzou_room_26" Offset="0x0"/>
</File>
<File Name="jyasinzou_room_27" Segment="3">
<Room Name="jyasinzou_room_27" Offset="0x0"/>
</File>
<File Name="jyasinzou_room_28" Segment="3">
<Room Name="jyasinzou_room_28" Offset="0x0"/>
</File>
</Root>

View File

@ -1,7 +1,7 @@
<Root>
<File Name="men_scene" Segment="2">
<Texture Name="gGTGDayEntranceTex" OutName="day_entrance" Format="ia16" Width="8" Height="128" Offset="0xF8C0"/>
<Texture Name="gGTGNightEntranceTex" OutName="night_entrance" Format="ia16" Width="8" Height="128" Offset="0x100C0"/>
<Texture Name="gGTGDayEntranceTex" OutName="day_entrance" Format="ia16" Width="8" Height="128" Offset="0xF930"/>
<Texture Name="gGTGNightEntranceTex" OutName="night_entrance" Format="ia16" Width="8" Height="128" Offset="0x10130"/>
<Scene Name="men_scene" Offset="0x0"/>
</File>
<File Name="men_room_0" Segment="3">

View File

@ -0,0 +1,42 @@
<Root>
<File Name="men_scene" Segment="2">
<Texture Name="gGTGDayEntranceTex" OutName="day_entrance" Format="ia16" Width="8" Height="128" Offset="0xF8C0"/>
<Texture Name="gGTGNightEntranceTex" OutName="night_entrance" Format="ia16" Width="8" Height="128" Offset="0x100C0"/>
<Scene Name="men_scene" Offset="0x0"/>
</File>
<File Name="men_room_0" Segment="3">
<DList Name="gMenDL_008118" Offset="0x8118"/>
<DList Name="gMenDL_00FF78" Offset="0xFF78"/>
<Room Name="men_room_0" Offset="0x0"/>
</File>
<File Name="men_room_1" Segment="3">
<Room Name="men_room_1" Offset="0x0"/>
</File>
<File Name="men_room_2" Segment="3">
<Room Name="men_room_2" Offset="0x0"/>
</File>
<File Name="men_room_3" Segment="3">
<Room Name="men_room_3" Offset="0x0"/>
</File>
<File Name="men_room_4" Segment="3">
<Room Name="men_room_4" Offset="0x0"/>
</File>
<File Name="men_room_5" Segment="3">
<Room Name="men_room_5" Offset="0x0"/>
</File>
<File Name="men_room_6" Segment="3">
<Room Name="men_room_6" Offset="0x0"/>
</File>
<File Name="men_room_7" Segment="3">
<Room Name="men_room_7" Offset="0x0"/>
</File>
<File Name="men_room_8" Segment="3">
<Room Name="men_room_8" Offset="0x0"/>
</File>
<File Name="men_room_9" Segment="3">
<Room Name="men_room_9" Offset="0x0"/>
</File>
<File Name="men_room_10" Segment="3">
<Room Name="men_room_10" Offset="0x0"/>
</File>
</Root>

View File

@ -1,8 +1,8 @@
<Root>
<File Name="ydan_scene" Segment="2">
<Cutscene Name="gDekuTreeIntroCs" Offset="0xB650"/>
<Texture Name="gYdanTex_00BA18" Format="rgba16" Width="32" Height="64" Offset="0xBA18"/>
<Texture Name="gYdanTex_00CA18" Format="rgba16" Width="32" Height="64" Offset="0xCA18"/>
<Cutscene Name="gDekuTreeIntroCs" Offset="0xB640"/>
<Texture Name="gYdanTex_00BA18" Format="rgba16" Width="32" Height="64" Offset="0xBA08"/>
<Texture Name="gYdanTex_00CA18" Format="rgba16" Width="32" Height="64" Offset="0xCA08"/>
<Scene Name="ydan_scene" Offset="0x0"/>
</File>

View File

@ -0,0 +1,45 @@
<Root>
<File Name="ydan_scene" Segment="2">
<Cutscene Name="gDekuTreeIntroCs" Offset="0xB650"/>
<Texture Name="gYdanTex_00BA18" Format="rgba16" Width="32" Height="64" Offset="0xBA18"/>
<Texture Name="gYdanTex_00CA18" Format="rgba16" Width="32" Height="64" Offset="0xCA18"/>
<Scene Name="ydan_scene" Offset="0x0"/>
</File>
<File Name="ydan_room_0" Segment="3">
<Room Name="ydan_room_0" Offset="0x0"/>
</File>
<File Name="ydan_room_1" Segment="3">
<Room Name="ydan_room_1" Offset="0x0"/>
</File>
<File Name="ydan_room_2" Segment="3">
<Room Name="ydan_room_2" Offset="0x0"/>
</File>
<File Name="ydan_room_3" Segment="3">
<Room Name="ydan_room_3" Offset="0x0"/>
</File>
<File Name="ydan_room_4" Segment="3">
<Room Name="ydan_room_4" Offset="0x0"/>
</File>
<File Name="ydan_room_5" Segment="3">
<Room Name="ydan_room_5" Offset="0x0"/>
</File>
<File Name="ydan_room_6" Segment="3">
<Room Name="ydan_room_6" Offset="0x0"/>
</File>
<File Name="ydan_room_7" Segment="3">
<Room Name="ydan_room_7" Offset="0x0"/>
</File>
<File Name="ydan_room_8" Segment="3">
<Room Name="ydan_room_8" Offset="0x0"/>
</File>
<File Name="ydan_room_9" Segment="3">
<Room Name="ydan_room_9" Offset="0x0"/>
</File>
<File Name="ydan_room_10" Segment="3">
<Room Name="ydan_room_10" Offset="0x0"/>
</File>
<File Name="ydan_room_11" Segment="3">
<Room Name="ydan_room_11" Offset="0x0"/>
</File>
</Root>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -8,8 +8,7 @@ import time
import multiprocessing
from pathlib import Path
EXTRACTED_ASSETS_NAMEFILE = ".extracted-assets.json"
from tools import version_config
def SignalHandler(sig, frame):
@ -17,20 +16,33 @@ def SignalHandler(sig, frame):
mainAbort.set()
# Don't exit immediately to update the extracted assets file.
def ExtractFile(xmlPath, outputPath, outputSourcePath):
def ExtractFile(assetConfig: version_config.AssetConfig, outputPath: Path, outputSourcePath: Path):
xmlPath = assetConfig.xml_path
version = globalVersionConfig.version
if globalAbort.is_set():
# Don't extract if another file wasn't extracted properly.
return
zapdPath = Path("tools") / "ZAPD" / "ZAPD.out"
configPath = Path("tools") / "ZAPDConfigs" / "MqDbg" / "Config.xml"
configPath = Path("tools") / "ZAPDConfigs" / version / "Config.xml"
Path(outputPath).mkdir(parents=True, exist_ok=True)
Path(outputSourcePath).mkdir(parents=True, exist_ok=True)
outputPath.mkdir(parents=True, exist_ok=True)
outputSourcePath.mkdir(parents=True, exist_ok=True)
execStr = f"{zapdPath} e -eh -i {xmlPath} -b extracted/gc-eu-mq-dbg/baserom -o {outputPath} -osf {outputSourcePath} -gsf 1 -rconf {configPath} --cs-float both {ZAPDArgs}"
execStr = f"{zapdPath} e -eh -i {xmlPath} -b extracted/{version}/baserom -o {outputPath} -osf {outputSourcePath} -gsf 1 -rconf {configPath} --cs-float both {ZAPDArgs}"
if "overlays" in xmlPath:
if "code" in xmlPath.parts or "overlays" in xmlPath.parts:
assert assetConfig.start_offset is not None
assert assetConfig.end_offset is not None
execStr += f" --start-offset 0x{assetConfig.start_offset:X}"
execStr += f" --end-offset 0x{assetConfig.end_offset:X}"
if "overlays" in xmlPath.parts:
overlayName = xmlPath.stem
baseAddress = globalVersionConfig.dmadata_segments[overlayName].vram + assetConfig.start_offset
execStr += f" --base-address 0x{baseAddress:X}"
execStr += " --static"
if globalUnaccounted:
@ -45,35 +57,39 @@ def ExtractFile(xmlPath, outputPath, outputSourcePath):
print("Aborting...", file=os.sys.stderr)
print("\n")
def ExtractFunc(fullPath):
*pathList, xmlName = fullPath.split(os.sep)
objectName = os.path.splitext(xmlName)[0]
def ExtractFunc(assetConfig: version_config.AssetConfig):
objectName = assetConfig.name
xml_path = assetConfig.xml_path
xml_path_str = str(xml_path)
outPath = os.path.join("assets", *pathList[2:], objectName)
version = globalVersionConfig.version
outPath = Path("extracted") / version / "assets" / objectName
outSourcePath = outPath
if fullPath in globalExtractedAssetsTracker:
timestamp = globalExtractedAssetsTracker[fullPath]["timestamp"]
modificationTime = int(os.path.getmtime(fullPath))
if xml_path_str in globalExtractedAssetsTracker:
timestamp = globalExtractedAssetsTracker[xml_path_str]["timestamp"]
modificationTime = int(os.path.getmtime(xml_path))
if modificationTime < timestamp:
# XML has not been modified since last extraction.
return
currentTimeStamp = int(time.time())
ExtractFile(fullPath, outPath, outSourcePath)
ExtractFile(assetConfig, outPath, outSourcePath)
if not globalAbort.is_set():
# Only update timestamp on succesful extractions
if fullPath not in globalExtractedAssetsTracker:
globalExtractedAssetsTracker[fullPath] = globalManager.dict()
globalExtractedAssetsTracker[fullPath]["timestamp"] = currentTimeStamp
if xml_path_str not in globalExtractedAssetsTracker:
globalExtractedAssetsTracker[xml_path_str] = globalManager.dict()
globalExtractedAssetsTracker[xml_path_str]["timestamp"] = currentTimeStamp
def initializeWorker(abort, unaccounted: bool, extractedAssetsTracker: dict, manager):
def initializeWorker(versionConfig: version_config.VersionConfig, abort, unaccounted: bool, extractedAssetsTracker: dict, manager):
global globalVersionConfig
global globalAbort
global globalUnaccounted
global globalExtractedAssetsTracker
global globalManager
globalVersionConfig = versionConfig
globalAbort = abort
globalUnaccounted = unaccounted
globalExtractedAssetsTracker = extractedAssetsTracker
@ -95,13 +111,17 @@ def processZAPDArgs(argsZ):
def main():
parser = argparse.ArgumentParser(description="baserom asset extractor")
parser.add_argument("-s", "--single", help="asset path relative to assets/, e.g. objects/gameplay_keep")
parser.add_argument("-v", "--oot-version", dest="oot_version", help="OOT game version", default="gc-eu-mq-dbg")
parser.add_argument("-s", "--single", help="Extract a single asset by name, e.g. objects/gameplay_keep")
parser.add_argument("-f", "--force", help="Force the extraction of every xml instead of checking the touched ones (overwriting current files).", action="store_true")
parser.add_argument("-j", "--jobs", help="Number of cpu cores to extract with.")
parser.add_argument("-u", "--unaccounted", help="Enables ZAPD unaccounted detector warning system.", action="store_true")
parser.add_argument("-Z", help="Pass the argument on to ZAPD, e.g. `-ZWunaccounted` to warn about unaccounted blocks in XMLs. Each argument should be passed separately, *without* the leading dash.", metavar="ZAPD_ARG", action="append")
args = parser.parse_args()
version: str = args.oot_version
versionConfig = version_config.load_version_config(version)
global ZAPDArgs
ZAPDArgs = processZAPDArgs(args.Z) if args.Z else ""
@ -110,31 +130,30 @@ def main():
manager = multiprocessing.Manager()
signal.signal(signal.SIGINT, SignalHandler)
extraction_times_p = Path("extracted") / version / "assets_extraction_times.json"
extractedAssetsTracker = manager.dict()
if os.path.exists(EXTRACTED_ASSETS_NAMEFILE) and not args.force:
with open(EXTRACTED_ASSETS_NAMEFILE, encoding='utf-8') as f:
if extraction_times_p.exists() and not args.force:
with extraction_times_p.open(encoding='utf-8') as f:
extractedAssetsTracker.update(json.load(f, object_hook=manager.dict))
asset_path = args.single
if asset_path is not None:
fullPath = os.path.join("assets", "xml", asset_path + ".xml")
if not os.path.exists(fullPath):
print(f"Error. File {fullPath} does not exist.", file=os.sys.stderr)
singleAssetName = args.single
if singleAssetName is not None:
assetConfig = None
for asset in versionConfig.assets:
if asset.name == singleAssetName:
assetConfig = asset
break
else:
print(f"Error. Asset {singleAssetName} not found in config.", file=os.sys.stderr)
exit(1)
initializeWorker(mainAbort, args.unaccounted, extractedAssetsTracker, manager)
initializeWorker(versionConfig, mainAbort, args.unaccounted, extractedAssetsTracker, manager)
# Always extract if -s is used.
fullPath = assetConfig.xml_path
if fullPath in extractedAssetsTracker:
del extractedAssetsTracker[fullPath]
ExtractFunc(fullPath)
ExtractFunc(assetConfig)
else:
xmlFiles = []
for currentPath, _, files in os.walk(os.path.join("assets", "xml")):
for file in files:
fullPath = os.path.join(currentPath, file)
if file.endswith(".xml"):
xmlFiles.append(fullPath)
class CannotMultiprocessError(Exception):
pass
@ -147,17 +166,17 @@ def main():
mp_context = multiprocessing.get_context("fork")
except ValueError as e:
raise CannotMultiprocessError() from e
with mp_context.Pool(numCores, initializer=initializeWorker, initargs=(mainAbort, args.unaccounted, extractedAssetsTracker, manager)) as p:
p.map(ExtractFunc, xmlFiles)
with mp_context.Pool(numCores, initializer=initializeWorker, initargs=(versionConfig, mainAbort, args.unaccounted, extractedAssetsTracker, manager)) as p:
p.map(ExtractFunc, versionConfig.assets)
except (multiprocessing.ProcessError, TypeError, CannotMultiprocessError):
print("Warning: Multiprocessing exception ocurred.", file=os.sys.stderr)
print("Disabling mutliprocessing.", file=os.sys.stderr)
initializeWorker(mainAbort, args.unaccounted, extractedAssetsTracker, manager)
for singlePath in xmlFiles:
ExtractFunc(singlePath)
initializeWorker(versionConfig, mainAbort, args.unaccounted, extractedAssetsTracker, manager)
for assetConfig in versionConfig.assets:
ExtractFunc(assetConfig)
with open(EXTRACTED_ASSETS_NAMEFILE, 'w', encoding='utf-8') as f:
with extraction_times_p.open('w', encoding='utf-8') as f:
serializableDict = dict()
for xml, data in extractedAssetsTracker.items():
serializableDict[xml] = dict(data)

5
spec
View File

@ -256,12 +256,7 @@ endseg
beginseg
name "nes_font_static"
romalign 0x1000
#if OOT_DEBUG
include "$(BUILD_DIR)/assets/textures/nes_font_static/nes_font_static.o"
#else
// TODO: Remove this hack once assets are extracted from gc-eu-mq
include "$(BUILD_DIR)/baserom/nes_font_static.o"
#endif
number 10
endseg

View File

@ -1,7 +1,7 @@
#include "file_select.h"
#include "terminal.h"
#include "assets/textures/title_static/title_static.h"
#include "assets/overlays/ovl_File_Choose/ovl_file_choose.h"
#include "assets/overlays/ovl_file_choose/ovl_file_choose.h"
static s16 D_808124C0[] = {
0x0002, 0x0003, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0001, 0x0002, 0x0000, 0x0001,

View File

@ -1,6 +1,6 @@
#include "file_select.h"
#include "assets/overlays/ovl_File_Choose/ovl_file_choose.c"
#include "assets/overlays/ovl_file_choose/ovl_file_choose.c"
s16 D_808123F0[] = {
0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016,

View File

@ -6,7 +6,7 @@
[subrepo]
remote = https://github.com/zeldaret/ZAPD.git
branch = master
commit = 1300a4f36584627aa784cbc252d1c8ecd7b40e68
parent = 4522ee2cae12b2d23b7ef0134f24f7c3e26935f0
commit = 0285e11f0a5937f60db023bfe5db273f2223fcf4
parent = afd82230e1bd6e043eabe613f5b31f6e96f0f88c
method = merge
cmdver = 0.4.6

View File

@ -119,9 +119,14 @@ ZAPD also accepts the following list of extra parameters:
- This behaviour can be overridden per asset using `Static=` in the respective XML node.
- `--cs-float` : How cutscene floats should be extracted.
- Valid values:
- `hex`
- `float`
- `both`
- `hex`: `0x42280000`
- `float`: `42.0f`
- `both`: `CS_FLOAT(0x42280000, 42.0f)`
- `hex-commented-left`: `/* 42.0f */ 0x42280000`
- `hex-commented-right`: `0x42280000 /* 42.0f */`
- `--base-address ADDRESS`: Override base virtual address for input files.
- `--start-offset OFFSET`: Override start offset for input files.
- `--end-offset OFFSET`: Override end offset for input files.
- `-W...`: warning flags, see below
Additionally, you can pass the flag `--version` to see the current ZAPD version. If that flag is passed, ZAPD will ignore any other parameter passed.

View File

@ -21,6 +21,8 @@ enum class CsFloatType
HexOnly,
FloatOnly,
HexAndFloat,
HexAndCommentedFloatLeft,
HexAndCommentedFloatRight,
};
class Globals
@ -39,6 +41,9 @@ public:
fs::path baseRomPath, inputPath, outputPath, sourceOutputPath, cfgPath;
TextureType texType;
CsFloatType floatType = CsFloatType::FloatOnly;
int64_t baseAddress = -1;
int64_t startOffset = -1;
int64_t endOffset = -1;
ZGame game;
GameConfig cfg;
bool verboseUnaccounted = false;

View File

@ -37,11 +37,14 @@ void Arg_EnableGCCCompat(int& i, char* argv[]);
void Arg_ForceStatic(int& i, char* argv[]);
void Arg_ForceUnaccountedStatic(int& i, char* argv[]);
void Arg_CsFloatMode(int& i, char* argv[]);
void Arg_BaseAddress(int& i, char* argv[]);
void Arg_StartOffset(int& i, char* argv[]);
void Arg_EndOffset(int& i, char* argv[]);
int main(int argc, char* argv[]);
bool Parse(const fs::path& xmlFilePath, const fs::path& basePath, const fs::path& outPath,
ZFileMode fileMode);
ZFileMode fileMode);
void ParseArgs(int& argc, char* argv[]);
@ -115,7 +118,7 @@ int main(int argc, char* argv[])
returnCode = HandleExtract(fileMode, exporterSet);
else if (fileMode == ZFileMode::BuildTexture)
BuildAssetTexture(Globals::Instance->inputPath, Globals::Instance->texType,
Globals::Instance->outputPath);
Globals::Instance->outputPath);
else if (fileMode == ZFileMode::BuildBackground)
BuildAssetBackground(Globals::Instance->inputPath, Globals::Instance->outputPath);
else if (fileMode == ZFileMode::BuildBlob)
@ -126,7 +129,7 @@ int main(int argc, char* argv[])
}
bool Parse(const fs::path& xmlFilePath, const fs::path& basePath, const fs::path& outPath,
ZFileMode fileMode)
ZFileMode fileMode)
{
tinyxml2::XMLDocument doc;
tinyxml2::XMLError eResult = doc.LoadFile(xmlFilePath.string().c_str());
@ -135,7 +138,7 @@ bool Parse(const fs::path& xmlFilePath, const fs::path& basePath, const fs::path
{
// TODO: use XMLDocument::ErrorIDToName to get more specific error messages here
HANDLE_ERROR(WarningType::InvalidXML,
StringHelper::Sprintf("invalid XML file: '%s'", xmlFilePath.c_str()), "");
StringHelper::Sprintf("invalid XML file: '%s'", xmlFilePath.c_str()), "");
return false;
}
@ -150,7 +153,7 @@ bool Parse(const fs::path& xmlFilePath, const fs::path& basePath, const fs::path
}
for (tinyxml2::XMLElement* child = root->FirstChildElement(); child != NULL;
child = child->NextSiblingElement())
child = child->NextSiblingElement())
{
if (std::string_view(child->Name()) == "File")
{
@ -254,6 +257,9 @@ void ParseArgs(int& argc, char* argv[])
{"-us", &Arg_ForceUnaccountedStatic},
{"--unaccounted-static", &Arg_ForceUnaccountedStatic},
{"--cs-float", &Arg_CsFloatMode},
{"--base-address", &Arg_BaseAddress},
{"--start-offset", &Arg_StartOffset},
{"--end-offset", &Arg_EndOffset},
};
for (int32_t i = 2; i < argc; i++)
@ -409,17 +415,47 @@ void Arg_CsFloatMode([[maybe_unused]] int& i, [[maybe_unused]] char* argv[])
{
Globals::Instance->floatType = CsFloatType::HexAndFloat;
}
else if (std::strcmp(argv[i], "hex-commented-left") == 0)
{
Globals::Instance->floatType = CsFloatType::HexAndCommentedFloatLeft;
}
else if (std::strcmp(argv[i], "hex-commented-right") == 0)
{
Globals::Instance->floatType = CsFloatType::HexAndCommentedFloatRight;
}
else
{
Globals::Instance->floatType = CsFloatType::FloatOnly;
HANDLE_WARNING(
WarningType::Always, "Invalid CS Float Type",
StringHelper::Sprintf("Invalid CS float type entered. Expected \"hex\", \"float\", or "
"\"both\". Got %s.\n Defaulting to \"float\".",
argv[i]));
StringHelper::Sprintf("Invalid CS float type entered. Expected \"hex\", \"float\", "
"\"both\", \"hex-commented-left\" or \"hex-commented-right\". "
"Got %s.\n Defaulting to \"float\".",
argv[i]));
}
}
uint32_t ParseU32Hex(char* str)
{
static_assert(sizeof(uint32_t) <= sizeof(unsigned long));
return (uint32_t)std::stoul(str, nullptr, 16);
}
void Arg_BaseAddress(int& i, char* argv[])
{
Globals::Instance->baseAddress = ParseU32Hex(argv[++i]);
}
void Arg_StartOffset(int& i, char* argv[])
{
Globals::Instance->startOffset = ParseU32Hex(argv[++i]);
}
void Arg_EndOffset(int& i, char* argv[])
{
Globals::Instance->endOffset = ParseU32Hex(argv[++i]);
}
int HandleExtract(ZFileMode fileMode, ExporterSet* exporterSet)
{
bool procFileModeSuccess = false;
@ -440,14 +476,14 @@ int HandleExtract(ZFileMode fileMode, ExporterSet* exporterSet)
printf("Parsing external file from config: '%s'\n", externalXmlFilePath.c_str());
parseSuccessful = Parse(externalXmlFilePath, Globals::Instance->baseRomPath,
extFile.outPath, ZFileMode::ExternalFile);
extFile.outPath, ZFileMode::ExternalFile);
if (!parseSuccessful)
return 1;
}
parseSuccessful = Parse(Globals::Instance->inputPath, Globals::Instance->baseRomPath,
Globals::Instance->outputPath, fileMode);
Globals::Instance->outputPath, fileMode);
if (!parseSuccessful)
return 1;
}

View File

@ -375,33 +375,22 @@ ZResourceType ZCutscene::GetResourceType() const
std::string ZCutscene::GetCsEncodedFloat(float f, CsFloatType type, bool useSciNotation)
{
uint32_t i;
std::memcpy(&i, &f, sizeof(i));
switch (type)
{
default:
// This default case will NEVER be reached, but GCC still gives a warning.
case CsFloatType::HexOnly:
{
uint32_t i;
std::memcpy(&i, &f, sizeof(i));
return StringHelper::Sprintf("0x%08X", i);
}
case CsFloatType::FloatOnly:
{
if (useSciNotation)
{
return StringHelper::Sprintf("%.8ef", f);
}
return StringHelper::Sprintf("%ff", f);
}
return StringHelper::Sprintf(useSciNotation ? "%.8ef" : "%ff", f);
case CsFloatType::HexAndFloat:
{
uint32_t i;
std::memcpy(&i, &f, sizeof(i));
if (useSciNotation)
{
return StringHelper::Sprintf("CS_FLOAT(0x%08X, %.8ef)", i, f);
}
return StringHelper::Sprintf("CS_FLOAT(0x%08X, %ff)", i, f);
}
return StringHelper::Sprintf(useSciNotation ? "CS_FLOAT(0x%08X, %.8ef)" : "CS_FLOAT(0x%08X, %ff)", i, f);
case CsFloatType::HexAndCommentedFloatLeft:
return StringHelper::Sprintf(useSciNotation ? "/* %.8ef */ 0x%08X" : "/* %ff */ 0x%08X", f, i);
case CsFloatType::HexAndCommentedFloatRight:
return StringHelper::Sprintf(useSciNotation ? "0x%08X /* %.8ef */" : "0x%08X /* %ff */", i, f);
}
}

View File

@ -120,6 +120,9 @@ void ZFile::ParseXML(tinyxml2::XMLElement* reader, const std::string& filename)
if (reader->Attribute("BaseAddress") != nullptr)
baseAddress = StringHelper::StrToL(reader->Attribute("BaseAddress"), 16);
if (mode == ZFileMode::Extract && Globals::Instance->baseAddress != -1)
baseAddress = Globals::Instance->baseAddress;
if (reader->Attribute("RangeStart") != nullptr)
rangeStart = StringHelper::StrToL(reader->Attribute("RangeStart"), 16);
@ -197,6 +200,9 @@ void ZFile::ParseXML(tinyxml2::XMLElement* reader, const std::string& filename)
}
rawData = File::ReadAllBytes((basePath / name).string());
if (mode == ZFileMode::Extract && Globals::Instance->startOffset != -1 && Globals::Instance->endOffset != -1)
rawData = std::vector<uint8_t>(rawData.begin() + Globals::Instance->startOffset,
rawData.begin() + Globals::Instance->endOffset);
if (reader->Attribute("RangeEnd") == nullptr)
rangeEnd = rawData.size();
@ -585,6 +591,12 @@ Declaration* ZFile::AddDeclarationIncludeArray(offset_t address, std::string& in
includePath = "assets/" + StringHelper::Split(includePath, "assets/extracted/")[1];
if (StringHelper::StartsWith(includePath, "assets/custom/"))
includePath = "assets/" + StringHelper::Split(includePath, "assets/custom/")[1];
// Hack for OOT: don't prefix include paths with extracted/VERSION/
if (StringHelper::StartsWith(includePath, "extracted/")) {
std::vector<std::string> parts = StringHelper::Split(includePath, "/");
parts.erase(parts.begin(), parts.begin() + 2);
includePath = StringHelper::Join(parts, "/");
}
Declaration* decl = GetDeclaration(address);
if (decl == nullptr)
@ -621,6 +633,12 @@ Declaration* ZFile::AddDeclarationIncludeArray(offset_t address, std::string& in
includePath = "assets/" + StringHelper::Split(includePath, "assets/extracted/")[1];
if (StringHelper::StartsWith(includePath, "assets/custom/"))
includePath = "assets/" + StringHelper::Split(includePath, "assets/custom/")[1];
// Hack for OOT: don't prefix include paths with extracted/VERSION/
if (StringHelper::StartsWith(includePath, "extracted/")) {
std::vector<std::string> parts = StringHelper::Split(includePath, "/");
parts.erase(parts.begin(), parts.begin() + 2);
includePath = StringHelper::Join(parts, "/");
}
Declaration* decl = GetDeclaration(address);
if (decl == nullptr)

View File

@ -30,6 +30,21 @@ public:
return result;
}
static std::string Join(const std::vector<std::string> parts, const std::string& delimiter)
{
std::string result;
for (size_t i = 0; i < parts.size(); i++)
{
result += parts[i];
if (i != parts.size() - 1)
result += delimiter;
}
return result;
}
static std::string Strip(std::string s, const std::string& delimiter)
{
size_t pos = 0;

View File

@ -1,9 +0,0 @@
<Root>
<SymbolMap File="SymbolMap_OoTMqDbg.txt"/>
<ActorList File="ActorList_OoTMqDbg.txt"/>
<ObjectList File="ObjectList_OoTMqDbg.txt"/>
<EntranceList File="EntranceList_OoTMqDbg.txt"/>
<SpecialEntranceList File="SpecialEntranceList_OoTMqDbg.txt"/>
<EnumData File="EnumData.xml"/>
<ExternalXMLFolder Path="assets/xml/"/>
</Root>

View File

@ -1 +0,0 @@
8012DB20 gMtxClear

View File

@ -0,0 +1,9 @@
<Root>
<SymbolMap File="SymbolMap.txt"/>
<ActorList File="../ActorList.txt"/>
<ObjectList File="../ObjectList.txt"/>
<EntranceList File="../EntranceList.txt"/>
<SpecialEntranceList File="../SpecialEntranceList.txt"/>
<EnumData File="../EnumData.xml"/>
<ExternalXMLFolder Path="assets/xml/"/>
</Root>

View File

@ -0,0 +1,2 @@
8012DB20 gMtxClear
80A8E610 sShadowTex

View File

@ -0,0 +1,9 @@
<Root>
<SymbolMap File="SymbolMap.txt"/>
<ActorList File="../ActorList.txt"/>
<ObjectList File="../ObjectList.txt"/>
<EntranceList File="../EntranceList.txt"/>
<SpecialEntranceList File="../SpecialEntranceList.txt"/>
<EnumData File="../EnumData.xml"/>
<ExternalXMLFolder Path="assets/xml/"/>
</Root>

View File

@ -0,0 +1,2 @@
800FBC00 gMtxClear
80A72FA0 sShadowTex

View File

@ -0,0 +1,9 @@
<Root>
<SymbolMap File="SymbolMap.txt"/>
<ActorList File="../ActorList.txt"/>
<ObjectList File="../ObjectList.txt"/>
<EntranceList File="../EntranceList.txt"/>
<SpecialEntranceList File="../SpecialEntranceList.txt"/>
<EnumData File="../EnumData.xml"/>
<ExternalXMLFolder Path="assets/xml/"/>
</Root>

View File

@ -0,0 +1,2 @@
800FBC20 gMtxClear
80A73020 sShadowTex

View File

@ -18,18 +18,30 @@ PROJECT_ROOT = Path(__file__).parent.parent
@dataclasses.dataclass
class VersionConfig:
# Version name
version: str
# ROM offset to start of DMA table
dmadata_start: int
# DMA segment information, in ROM order
dmadata_segments: OrderedDict[str, SegmentInfo]
# Addresses of important variables needed for asset extraction
variables: Dict[str, int]
variables: dict[str, int]
# Assets to extract
assets: list[AssetConfig]
@dataclasses.dataclass
class SegmentInfo:
name: str
vram: int | None
vram: Optional[int]
@dataclasses.dataclass
class AssetConfig:
name: str
xml_path: Path
start_offset: Optional[int]
end_offset: Optional[int]
def load_dmadata_segments(version: str) -> OrderedDict[str, SegmentInfo]:
@ -46,8 +58,19 @@ def load_dmadata_segments(version: str) -> OrderedDict[str, SegmentInfo]:
def load_version_config(version: str) -> VersionConfig:
with open(PROJECT_ROOT / f"baseroms/{version}/config.yml", "r") as f:
config = yaml.load(f, Loader=yaml.Loader)
assets = []
for asset in config["assets"]:
name = asset["name"]
xml_path = Path(asset["xml_path"])
start_offset = asset.get("start_offset", None)
end_offset = asset.get("end_offset", None)
assets.append(AssetConfig(name, xml_path, start_offset, end_offset))
return VersionConfig(
version=version,
dmadata_start=config["dmadata_start"],
dmadata_segments=load_dmadata_segments(version),
variables=config["variables"],
assets=assets,
)