mirror of
https://github.com/zeldaret/oot.git
synced 2025-05-11 03:23:46 +00:00
Merge remote-tracking branch 'origin/main' into save_flags_redo
This commit is contained in:
commit
af127d31c8
149 changed files with 4202 additions and 870 deletions
13
Dockerfile
13
Dockerfile
|
@ -1,5 +1,7 @@
|
|||
FROM ubuntu:22.04 as build
|
||||
FROM ubuntu:24.04 AS build
|
||||
|
||||
ENV TZ=UTC
|
||||
ENV LANG=C.UTF-8
|
||||
|
||||
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && \
|
||||
apt-get update && \
|
||||
|
@ -19,15 +21,8 @@ RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone &
|
|||
apt-get clean && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
RUN python3 -m pip install --user colorama ansiwrap attrs watchdog python-Levenshtein "mapfile-parser>=1.2.1,<2.0.0" "rabbitizer>=1.0.0,<2.0.0"
|
||||
RUN python3 -m pip install --upgrade attrs pycparser
|
||||
|
||||
ENV LANG C.UTF-8
|
||||
|
||||
RUN mkdir /oot
|
||||
WORKDIR /oot
|
||||
|
||||
RUN git config --global --add safe.directory /oot
|
||||
|
||||
CMD ["/bin/sh", "-c", \
|
||||
"echo 'usage:\n docker run --rm --mount type=bind,source=\"$(pwd)\",destination=/oot oot make -j$(nproc) setup\n docker run --rm --mount type=bind,source=\"$(pwd)\",destination=/oot oot make -j$(nproc)'"]
|
||||
CMD make -j $(nproc) setup && make -j $(nproc) && tail -f /dev/null
|
||||
|
|
77
Makefile
77
Makefile
|
@ -66,6 +66,7 @@ ifeq ($(VERSION),ntsc-1.0)
|
|||
REGION ?= JP
|
||||
PLATFORM := N64
|
||||
DEBUG_FEATURES ?= 0
|
||||
BUILD_CREATOR := zelda@srd44
|
||||
BUILD_DATE := 98-10-21
|
||||
BUILD_TIME := 04:56:31
|
||||
REVISION := 0
|
||||
|
@ -74,6 +75,7 @@ else ifeq ($(VERSION),ntsc-1.1)
|
|||
REGION ?= JP
|
||||
PLATFORM := N64
|
||||
DEBUG_FEATURES ?= 0
|
||||
BUILD_CREATOR := zelda@srd44
|
||||
BUILD_DATE := 98-10-26
|
||||
BUILD_TIME := 10:58:45
|
||||
REVISION := 1
|
||||
|
@ -81,6 +83,7 @@ else ifeq ($(VERSION),pal-1.0)
|
|||
REGION ?= EU
|
||||
PLATFORM := N64
|
||||
DEBUG_FEATURES ?= 0
|
||||
BUILD_CREATOR := zelda@srd44
|
||||
BUILD_DATE := 98-11-10
|
||||
BUILD_TIME := 14:34:22
|
||||
REVISION := 0
|
||||
|
@ -89,6 +92,7 @@ else ifeq ($(VERSION),ntsc-1.2)
|
|||
REGION ?= JP
|
||||
PLATFORM := N64
|
||||
DEBUG_FEATURES ?= 0
|
||||
BUILD_CREATOR := zelda@srd44
|
||||
BUILD_DATE := 98-11-12
|
||||
BUILD_TIME := 18:17:03
|
||||
REVISION := 2
|
||||
|
@ -96,6 +100,7 @@ else ifeq ($(VERSION),pal-1.1)
|
|||
REGION ?= EU
|
||||
PLATFORM := N64
|
||||
DEBUG_FEATURES ?= 0
|
||||
BUILD_CREATOR := zelda@srd44
|
||||
BUILD_DATE := 98-11-18
|
||||
BUILD_TIME := 17:36:49
|
||||
REVISION := 1
|
||||
|
@ -103,6 +108,7 @@ else ifeq ($(VERSION),gc-jp)
|
|||
REGION ?= JP
|
||||
PLATFORM := GC
|
||||
DEBUG_FEATURES ?= 0
|
||||
BUILD_CREATOR := zelda@srd022j
|
||||
BUILD_DATE := 02-10-29
|
||||
BUILD_TIME := 23:49:53
|
||||
REVISION := 15
|
||||
|
@ -110,6 +116,7 @@ else ifeq ($(VERSION),gc-jp-mq)
|
|||
REGION ?= JP
|
||||
PLATFORM := GC
|
||||
DEBUG_FEATURES ?= 0
|
||||
BUILD_CREATOR := zelda@srd022j
|
||||
BUILD_DATE := 02-10-30
|
||||
BUILD_TIME := 00:15:15
|
||||
REVISION := 15
|
||||
|
@ -117,6 +124,7 @@ else ifeq ($(VERSION),gc-us)
|
|||
REGION ?= US
|
||||
PLATFORM := GC
|
||||
DEBUG_FEATURES ?= 0
|
||||
BUILD_CREATOR := zelda@srd022j
|
||||
BUILD_DATE := 02-12-19
|
||||
BUILD_TIME := 13:28:09
|
||||
REVISION := 15
|
||||
|
@ -124,6 +132,7 @@ else ifeq ($(VERSION),gc-us-mq)
|
|||
REGION ?= US
|
||||
PLATFORM := GC
|
||||
DEBUG_FEATURES ?= 0
|
||||
BUILD_CREATOR := zelda@srd022j
|
||||
BUILD_DATE := 02-12-19
|
||||
BUILD_TIME := 14:05:42
|
||||
REVISION := 15
|
||||
|
@ -131,6 +140,7 @@ else ifeq ($(VERSION),gc-eu-mq-dbg)
|
|||
REGION ?= EU
|
||||
PLATFORM := GC
|
||||
DEBUG_FEATURES ?= 1
|
||||
BUILD_CREATOR := zelda@srd022j
|
||||
BUILD_DATE := 03-02-21
|
||||
BUILD_TIME := 00:16:31
|
||||
REVISION := 15
|
||||
|
@ -138,6 +148,7 @@ else ifeq ($(VERSION),gc-eu)
|
|||
REGION ?= EU
|
||||
PLATFORM := GC
|
||||
DEBUG_FEATURES ?= 0
|
||||
BUILD_CREATOR := zelda@srd022j
|
||||
BUILD_DATE := 03-02-21
|
||||
BUILD_TIME := 20:12:23
|
||||
REVISION := 15
|
||||
|
@ -145,6 +156,7 @@ else ifeq ($(VERSION),gc-eu-mq)
|
|||
REGION ?= EU
|
||||
PLATFORM := GC
|
||||
DEBUG_FEATURES ?= 0
|
||||
BUILD_CREATOR := zelda@srd022j
|
||||
BUILD_DATE := 03-02-21
|
||||
BUILD_TIME := 20:37:19
|
||||
REVISION := 15
|
||||
|
@ -152,23 +164,23 @@ else ifeq ($(VERSION),gc-jp-ce)
|
|||
REGION ?= JP
|
||||
PLATFORM := GC
|
||||
DEBUG_FEATURES ?= 0
|
||||
BUILD_CREATOR := zelda@srd022j
|
||||
BUILD_DATE := 03-10-08
|
||||
BUILD_TIME := 21:53:00
|
||||
REVISION := 15
|
||||
else ifeq ($(VERSION),ique-cn)
|
||||
COMPARE := 0
|
||||
REGION ?= US
|
||||
PLATFORM := IQUE
|
||||
DEBUG_FEATURES ?= 0
|
||||
BUILD_CREATOR := build@toad.routefree.com
|
||||
BUILD_DATE := 03-10-22
|
||||
BUILD_TIME := 16:23:19
|
||||
REVISION := 0
|
||||
else
|
||||
$(error Unsupported version $(VERSION))
|
||||
endif
|
||||
|
||||
ifeq ($(PLATFORM),N64)
|
||||
BUILD_CREATOR := zelda@srd44
|
||||
LIBULTRA_VERSION := I
|
||||
LIBULTRA_PATCH := 1
|
||||
else
|
||||
BUILD_CREATOR := zelda@srd022j
|
||||
LIBULTRA_VERSION := L
|
||||
LIBULTRA_PATCH := 0
|
||||
endif
|
||||
|
||||
# ORIG_COMPILER cannot be combined with a non-IDO compiler. Check for this case and error out if found.
|
||||
ifneq ($(COMPILER),ido)
|
||||
ifeq ($(ORIG_COMPILER),1)
|
||||
|
@ -196,6 +208,22 @@ VENV := .venv
|
|||
MAKE = make
|
||||
CPPFLAGS += -P -xc -fno-dollars-in-identifiers
|
||||
|
||||
ifeq ($(PLATFORM),N64)
|
||||
CPP_DEFINES += -DPLATFORM_N64=1 -DPLATFORM_GC=0 -DPLATFORM_IQUE=0
|
||||
LIBULTRA_VERSION := I
|
||||
LIBULTRA_PATCH := 1
|
||||
else ifeq ($(PLATFORM),GC)
|
||||
CPP_DEFINES += -DPLATFORM_N64=0 -DPLATFORM_GC=1 -DPLATFORM_IQUE=0
|
||||
LIBULTRA_VERSION := L
|
||||
LIBULTRA_PATCH := 0
|
||||
else ifeq ($(PLATFORM),IQUE)
|
||||
CPP_DEFINES += -DPLATFORM_N64=0 -DPLATFORM_GC=0 -DPLATFORM_IQUE=1
|
||||
LIBULTRA_VERSION := L
|
||||
LIBULTRA_PATCH := 0
|
||||
else
|
||||
$(error Unsupported platform $(PLATFORM))
|
||||
endif
|
||||
|
||||
# Converts e.g. ntsc-1.0 to NTSC_1_0
|
||||
VERSION_MACRO := $(shell echo $(VERSION) | tr a-z-. A-Z__)
|
||||
CPP_DEFINES += -DOOT_VERSION=$(VERSION_MACRO) -DOOT_REVISION=$(REVISION)
|
||||
|
@ -204,14 +232,6 @@ CPP_DEFINES += -DBUILD_CREATOR="\"$(BUILD_CREATOR)\"" -DBUILD_DATE="\"$(BUILD_DA
|
|||
CPP_DEFINES += -DLIBULTRA_VERSION=LIBULTRA_VERSION_$(LIBULTRA_VERSION)
|
||||
CPP_DEFINES += -DLIBULTRA_PATCH=$(LIBULTRA_PATCH)
|
||||
|
||||
ifeq ($(PLATFORM),N64)
|
||||
CPP_DEFINES += -DPLATFORM_N64=1 -DPLATFORM_GC=0
|
||||
else ifeq ($(PLATFORM),GC)
|
||||
CPP_DEFINES += -DPLATFORM_N64=0 -DPLATFORM_GC=1
|
||||
else
|
||||
$(error Unsupported platform $(PLATFORM))
|
||||
endif
|
||||
|
||||
ifeq ($(DEBUG_FEATURES),1)
|
||||
CPP_DEFINES += -DDEBUG_FEATURES=1
|
||||
OPTFLAGS := -O2
|
||||
|
@ -266,6 +286,13 @@ OBJCOPY := $(MIPS_BINUTILS_PREFIX)objcopy
|
|||
OBJDUMP := $(MIPS_BINUTILS_PREFIX)objdump
|
||||
NM := $(MIPS_BINUTILS_PREFIX)nm
|
||||
|
||||
# The default iconv on macOS has some differences from GNU iconv, so we use the Homebrew version instead
|
||||
ifeq ($(UNAME_S),Darwin)
|
||||
ICONV := $(shell brew --prefix)/opt/libiconv/bin/iconv
|
||||
else
|
||||
ICONV := iconv
|
||||
endif
|
||||
|
||||
INC := -Iinclude -Iinclude/libc -Isrc -I$(BUILD_DIR) -I. -I$(EXTRACTED_DIR)
|
||||
|
||||
# Check code syntax with host compiler
|
||||
|
@ -598,7 +625,7 @@ $(BUILD_DIR)/assets/misc/z_select_static/%.o: GBI_DEFINES := -DF3DEX_GBI
|
|||
|
||||
ifeq ($(PERMUTER),) # permuter + preprocess.py misbehaves, permuter doesn't care about rodata diffs or bss ordering so just don't use it in that case
|
||||
# Handle encoding (UTF-8 -> EUC-JP) and custom pragmas
|
||||
$(BUILD_DIR)/src/%.o: CC := ./tools/preprocess.sh -v $(VERSION) -- $(CC)
|
||||
$(BUILD_DIR)/src/%.o: CC := ./tools/preprocess.sh -v $(VERSION) -i $(ICONV) -- $(CC)
|
||||
endif
|
||||
|
||||
else
|
||||
|
@ -781,6 +808,14 @@ endif
|
|||
$(CC) -c $(CFLAGS) $(MIPS_VERSION) $(OPTFLAGS) -o $@ $<
|
||||
@$(OBJDUMP) $(OBJDUMP_FLAGS) $@ > $(@:.o=.s)
|
||||
|
||||
$(BUILD_DIR)/src/audio/session_init.o: src/audio/session_init.c $(BUILD_DIR)/assets/audio/soundfont_sizes.h $(BUILD_DIR)/assets/audio/sequence_sizes.h
|
||||
ifneq ($(RUN_CC_CHECK),0)
|
||||
$(CC_CHECK) $<
|
||||
endif
|
||||
$(CC) -c $(CFLAGS) $(MIPS_VERSION) $(OPTFLAGS) -o $(@:.o=.tmp) $<
|
||||
$(LD) -r -T linker_scripts/data_with_rodata.ld -o $@ $(@:.o=.tmp)
|
||||
@$(OBJDUMP) $(OBJDUMP_FLAGS) $@ > $(@:.o=.s)
|
||||
|
||||
$(BUILD_DIR)/src/libultra/libc/ll.o: src/libultra/libc/ll.c
|
||||
ifneq ($(RUN_CC_CHECK),0)
|
||||
$(CC_CHECK) $<
|
||||
|
@ -898,7 +933,7 @@ $(BUILD_DIR)/assets/audio/soundfonts/%.o: $(BUILD_DIR)/assets/audio/soundfonts/%
|
|||
$(SFPATCH) $(@:.o=.tmp2) $(@:.o=.tmp2)
|
||||
# write start and size symbols afterwards, filename != symbolic name so source symbolic name from the .name file written by sfc
|
||||
# also write a .note.name section containing the symbolic name of the soundfont
|
||||
$(OBJCOPY) --add-symbol $$(cat $(<:.c=.name) | head -c -1)_Start=.rodata:0,global --redefine-sym __LEN__=$$(cat $(<:.c=.name) | head -c -1)_Size --add-section .note.name=$(<:.c=.name) $(@:.o=.tmp2) $@
|
||||
$(OBJCOPY) --add-symbol $$(cat $(<:.c=.name) | tr -d '\0')_Start=.rodata:0,global --redefine-sym __LEN__=$$(cat $(<:.c=.name) | tr -d '\0')_Size --add-section .note.name=$(<:.c=.name) $(@:.o=.tmp2) $@
|
||||
# cleanup temp files
|
||||
@$(RM) $(@:.o=.tmp) $(@:.o=.tmp2)
|
||||
ifeq ($(AUDIO_BUILD_DEBUG),1)
|
||||
|
@ -960,8 +995,6 @@ $(BUILD_DIR)/assets/audio/sequence_font_table.o: $(BUILD_DIR)/assets/audio/seque
|
|||
|
||||
# make headers with file sizes and amounts
|
||||
|
||||
$(BUILD_DIR)/src/audio/session_config.o: $(BUILD_DIR)/assets/audio/soundfont_sizes.h $(BUILD_DIR)/assets/audio/sequence_sizes.h
|
||||
|
||||
$(BUILD_DIR)/assets/audio/soundfont_sizes.h: $(SOUNDFONT_O_FILES)
|
||||
$(AFILE_SIZES) $@ NUM_SOUNDFONTS SOUNDFONT_SIZES .rodata $^
|
||||
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
# Possibly from a SHIFT-JIS extension, python doesn't have builtin support
|
||||
'┯' : (None, 0x86D3),
|
||||
|
||||
'‾' : (0x7F, None),
|
||||
'À' : (0x80, None),
|
||||
'î' : (0x81, None),
|
||||
'Â' : (0x82, None),
|
||||
|
|
21
assets/xml/objects/object_mag_ique.xml
Normal file
21
assets/xml/objects/object_mag_ique.xml
Normal file
|
@ -0,0 +1,21 @@
|
|||
<Root>
|
||||
<File Name="object_mag" Segment="6">
|
||||
<Texture Name="gTitleZeldaShieldLogoTex" OutName="title_zelda_shield_logo" Format="rgba32" Width="160" Height="160" Offset="0x0"/>
|
||||
<Texture Name="gTitleCopyright19982003Tex" OutName="title_copyright_19982003" Format="ia8" Width="128" Height="16" Offset="0x19000"/>
|
||||
<Texture Name="gTitleCopyright2003iQueTex" OutName="title_copyright_2003_ique" Format="ia8" Width="128" Height="16" Offset="0x19800"/>
|
||||
<Texture Name="gTitleDiskTex" OutName="title_disk" Format="ia8" Width="48" Height="16" Offset="0x1A000"/>
|
||||
<Texture Name="gTitleEffectMask00Tex" OutName="title_effect_mask_0_0" Format="i4" Width="64" Height="64" Offset="0x1A300"/>
|
||||
<Texture Name="gTitleEffectMask01Tex" OutName="title_effect_mask_0_1" Format="i4" Width="64" Height="64" Offset="0x1AB00"/>
|
||||
<Texture Name="gTitleEffectMask02Tex" OutName="title_effect_mask_0_2" Format="i4" Width="64" Height="64" Offset="0x1B300"/>
|
||||
<Texture Name="gTitleEffectMask10Tex" OutName="title_effect_mask_1_0" Format="i4" Width="64" Height="64" Offset="0x1BB00"/>
|
||||
<Texture Name="gTitleEffectMask11Tex" OutName="title_effect_mask_1_1" Format="i4" Width="64" Height="64" Offset="0x1C300"/>
|
||||
<Texture Name="gTitleEffectMask12Tex" OutName="title_effect_mask_1_2" Format="i4" Width="64" Height="64" Offset="0x1CB00"/>
|
||||
<Texture Name="gTitleEffectMask20Tex" OutName="title_effect_mask_2_0" Format="i4" Width="64" Height="64" Offset="0x1D300"/>
|
||||
<Texture Name="gTitleEffectMask21Tex" OutName="title_effect_mask_2_1" Format="i4" Width="64" Height="64" Offset="0x1DB00"/>
|
||||
<Texture Name="gTitleEffectMask22Tex" OutName="title_effect_mask_2_2" Format="i4" Width="64" Height="64" Offset="0x1E300"/>
|
||||
<Texture Name="gTitleFlameEffectTex" OutName="title_flame_effect" Format="i8" Width="32" Height="32" Offset="0x1EB00"/>
|
||||
<Texture Name="gTitleTheLegendOfTextTex" OutName="title_the_legend_of_text" Format="i8" Width="72" Height="8" Offset="0x1EF00"/>
|
||||
<Texture Name="gTitleOcarinaOfTimeTMTextTex" OutName="title_ocarina_of_time_tm_text" Format="i8" Width="96" Height="8" Offset="0x1F140"/>
|
||||
<Texture Name="gTitleTitleCNTex" OutName="title_title_cn" Format="i8" Width="128" Height="16" Offset="0x1F440"/>
|
||||
</File>
|
||||
</Root>
|
26
assets/xml/overlays/ovl_End_Title_ique.xml
Normal file
26
assets/xml/overlays/ovl_End_Title_ique.xml
Normal file
|
@ -0,0 +1,26 @@
|
|||
<Root>
|
||||
<File Name="ovl_End_Title">
|
||||
<DList Name="sEmptyDL1" Offset="0x0"/>
|
||||
<Texture Name="sIQueTop" OutName="ique_top" Format="ia8" Width="128" Height="24" Offset="0x8"/>
|
||||
<Texture Name="sIQueBottom" OutName="ique_bottom" Format="ia8" Width="128" Height="24" Offset="0xC08"/>
|
||||
<DList Name="sEmptyDL2" Offset="0x1808"/>
|
||||
<Texture Name="sNintendoLeftTex" OutName="nintendo_left" Format="ia8" Width="64" Height="48" Offset="0x1810"/>
|
||||
<DList Name="sEmptyDL3" Offset="0x2410"/>
|
||||
<Texture Name="sNintendoRightTex" OutName="nintendo_right" Format="ia8" Width="64" Height="48" Offset="0x2418"/>
|
||||
<DList Name="sEmptyDL4" Offset="0x3018"/>
|
||||
<Texture Name="sPresentedByTex" OutName="presented_by" Format="ia8" Width="96" Height="16" Offset="0x3020"/>
|
||||
<DList Name="sEmptyDL5" Offset="0x3620"/>
|
||||
<Texture Name="sTheEndTex" OutName="the_end" Format="ia8" Width="80" Height="24" Offset="0x3628"/>
|
||||
<DList Name="sEmptyDL6" Offset="0x3DA8"/>
|
||||
<Texture Name="sTheLegendOfZeldaTex" OutName="the_legend_of_zelda" Format="ia8" Width="120" Height="24" Offset="0x3DB0"/>
|
||||
<DList Name="sEmptyDL7" Offset="0x48F0"/>
|
||||
<Texture Name="sOcarinaOfTimeTex" OutName="ocarina_of_time" Format="ia8" Width="112" Height="16" Offset="0x48F8"/>
|
||||
|
||||
<Array Name="sTriforceVtx" Count="6" Offset="0x4FF8">
|
||||
<Vtx/>
|
||||
</Array>
|
||||
<DList Name="sTriforceDL" Offset="0x5058"/>
|
||||
|
||||
<DList Name="sPresentedByNintendoDL" Offset="0x50B8"/>
|
||||
</File>
|
||||
</Root>
|
|
@ -1,7 +1,7 @@
|
|||
<Root>
|
||||
<File Name="bdan_scene" Segment="2">
|
||||
<Cutscene Name="gJabuIntroCs" Offset="0x155E0"/>
|
||||
<Cutscene Name="gJabuSapphireRetrieveUnusedCs" Offset="0x13080"/>
|
||||
<Cutscene Name="gJabuRutoObtainingSapphireUnusedCs" Offset="0x13080"/>
|
||||
<Scene Name="bdan_scene" Offset="0x0"/>
|
||||
</File>
|
||||
<File Name="bdan_room_0" Segment="3">
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<Root>
|
||||
<File Name="bdan_scene" Segment="2">
|
||||
<Cutscene Name="gJabuIntroCs" Offset="0x15600"/>
|
||||
<Cutscene Name="gJabuSapphireRetrieveUnusedCs" Offset="0x130A0"/>
|
||||
<Cutscene Name="gJabuRutoObtainingSapphireUnusedCs" Offset="0x130A0"/>
|
||||
<Scene Name="bdan_scene" Offset="0x0"/>
|
||||
</File>
|
||||
<File Name="bdan_room_0" Segment="3">
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
<Root>
|
||||
<File Name="kenjyanoma_scene" Segment="2">
|
||||
<Scene Name="kenjyanoma_scene" Offset="0x0"/>
|
||||
<Cutscene Name="gChamberOfSagesRauruFinalMsgCs" Offset="0x12A0"/>
|
||||
<Cutscene Name="gChamberOfSagesLightMedallionCs" Offset="0x0120"/>
|
||||
<Cutscene Name="gChamberOfSagesSealOpeningCs" Offset="0x1690"/>
|
||||
</File>
|
||||
<File Name="kenjyanoma_room_0" Segment="3">
|
||||
<Room Name="kenjyanoma_room_0" Offset="0x0"/>
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
<Root>
|
||||
<File Name="link_home_scene" Segment="2">
|
||||
<Scene Name="link_home_scene" Offset="0x0"/>
|
||||
<Cutscene Name="gLinkHouseIntroWakeUpCs" Offset="0x1040"/>
|
||||
<Cutscene Name="gLinkHouseIntroSleepCs" Offset="0x15D0"/>
|
||||
</File>
|
||||
<File Name="link_home_room_0" Segment="3">
|
||||
<Room Name="link_home_room_0" Offset="0x0"/>
|
||||
|
|
|
@ -4,6 +4,8 @@
|
|||
<Cutscene Name="gZeldasCourtyardWindowCs" Offset="0x444"/>
|
||||
<Cutscene Name="gZeldasCourtyardMeetCs" Offset="0x3994"/>
|
||||
<Cutscene Name="gZeldasCourtyardLullabyCs" Offset="0x2524"/>
|
||||
<Cutscene Name="gZeldasCourtyardTheEndCs" Offset="0x1C04"/>
|
||||
<Cutscene Name="gZeldasCourtyardLullabyUnusedCs" Offset="0x34B0"/>
|
||||
|
||||
<Scene Name="nakaniwa_scene" Offset="0x0"/>
|
||||
</File>
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
<Root>
|
||||
<File Name="syatekijyou_scene" Segment="2">
|
||||
<Scene Name="syatekijyou_scene" Offset="0x0"/>
|
||||
<Cutscene Name="gShootingGalleryCameraRoll1UnusedCs" Offset="0x1450"/>
|
||||
<Cutscene Name="gShootingGalleryCameraRoll2UnusedCs" Offset="0x1640"/>
|
||||
<Cutscene Name="gShootingGalleryCameraRoll3UnusedCs" Offset="0x1830"/>
|
||||
</File>
|
||||
<File Name="syatekijyou_room_0" Segment="3">
|
||||
<Room Name="syatekijyou_room_0" Offset="0x0"/>
|
||||
|
|
|
@ -1,8 +1,18 @@
|
|||
<Root>
|
||||
<File Name="tokinoma_scene" Segment="2">
|
||||
<Cutscene Name="gTempleOfTimeFirstAdultCs" Offset="0x46F0"/>
|
||||
<Cutscene Name="gTempleOfTimePreludeCs" Offset="0x6D20"/>
|
||||
<Cutscene Name="gTempleOfTimeFirstAdultCs" Offset="0x46F0"/>
|
||||
<Cutscene Name="gTempleOfTimePreludeCs" Offset="0x6D20"/>
|
||||
<Cutscene Name="gTempleOfTimeIntroCs" Offset="0xCE00"/>
|
||||
<Cutscene Name="gTempleOfTimeSapphireRestoredUnusedCs" Offset="0xBE90"/>
|
||||
<Cutscene Name="gTempleOfTimeCreditsCs" Offset="0x3BB0"/>
|
||||
<Cutscene Name="gTempleOfTimeSheikRevealCs" Offset="0x8BC0"/>
|
||||
<Cutscene Name="gTempleOfTimeLightArrowsAndZeldaCapturedCs" Offset="0x9F70"/>
|
||||
<Cutscene Name="gTempleOfTimeRubyRestoredUnusedCs" Offset="0x35D0"/>
|
||||
<Cutscene Name="gTempleOfTimeEmeraldRestoredUnusedCs" Offset="0x38C0"/>
|
||||
<Cutscene Name="gTempleOfTimeSongOfTimeCs" Offset="0x61C0"/>
|
||||
<Cutscene Name="gTempleOfTimeSheikRevealStartCs" Offset="0x84E0"/>
|
||||
<Cutscene Name="gTempleOfTimeDoorOpeningUnusedCs" Offset="0x3330"/>
|
||||
|
||||
<Scene Name="tokinoma_scene" Offset="0x0"/>
|
||||
</File>
|
||||
<File Name="tokinoma_room_0" Segment="3">
|
||||
|
|
|
@ -1,8 +1,17 @@
|
|||
<Root>
|
||||
<File Name="tokinoma_scene" Segment="2">
|
||||
<Cutscene Name="gTempleOfTimeFirstAdultCs" Offset="0x4700"/>
|
||||
<Cutscene Name="gTempleOfTimePreludeCs" Offset="0x6D34"/>
|
||||
<Cutscene Name="gTempleOfTimeFirstAdultCs" Offset="0x4700"/>
|
||||
<Cutscene Name="gTempleOfTimePreludeCs" Offset="0x6D34"/>
|
||||
<Cutscene Name="gTempleOfTimeIntroCs" Offset="0xCE20"/>
|
||||
<Cutscene Name="gTempleOfTimeSapphireRestoredUnusedCs" Offset="0xBEB0"/>
|
||||
<Cutscene Name="gTempleOfTimeCreditsCs" Offset="0x3BB4"/>
|
||||
<Cutscene Name="gTempleOfTimeSheikRevealsCs" Offset="0x8BE0"/>
|
||||
<Cutscene Name="gTempleOfTimeLightArrowsAndZeldaCapturedCs" Offset="0x9F90"/>
|
||||
<Cutscene Name="gTempleOfTimeRubyRestoredUnusedCs" Offset="0x35D0"/>
|
||||
<Cutscene Name="gTempleOfTimeEmeraldRestoredUnusedCs" Offset="0x38C0"/>
|
||||
<Cutscene Name="gTempleOfTimeSongOfTimeCs" Offset="0x61D0"/>
|
||||
<Cutscene Name="gTempleOfTimeSheikRevealsStartCs" Offset="0x8500"/>
|
||||
<Cutscene Name="gTempleOfTimeDoorOpeningUnusedCs" Offset="0x3330"/>
|
||||
<Scene Name="tokinoma_scene" Offset="0x0"/>
|
||||
</File>
|
||||
<File Name="tokinoma_room_0" Segment="3">
|
||||
|
|
|
@ -2,9 +2,9 @@
|
|||
<File Name="spot02_scene" Segment="2">
|
||||
<Scene Name="spot02_scene" Offset="0x0"/>
|
||||
|
||||
<Cutscene Name="spot02_scene_Cs_003C80" Offset="0x3C80"/>
|
||||
|
||||
<Cutscene Name="spot02_scene_Cs_005020" Offset="0x5020"/>
|
||||
<Cutscene Name="gGraveyardTombOpeningAdultCs" Offset="0x3C80"/>
|
||||
<Cutscene Name="gGraveyardTombOpeningChildCs" Offset="0x5020"/>
|
||||
<Cutscene Name="gGraveyardSunsSongPart2Cs" Offset="0x4E90"/>
|
||||
<Cutscene Name="gGraveyardIntroCs" Offset="0x70C0"/>
|
||||
</File>
|
||||
<File Name="spot02_room_0" Segment="3">
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
<Root>
|
||||
<File Name="spot05_scene" Segment="2">
|
||||
<Cutscene Name="gMinuetCs" Offset="0x3F80"/>
|
||||
|
||||
<Cutscene Name="spot05_scene_Cs_005730" Offset="0x5730"/>
|
||||
<Cutscene Name="gMeadowMinuetCs" Offset="0x3F80"/>
|
||||
<Cutscene Name="gMeadowSariasSongCs" Offset="0x5730"/>
|
||||
|
||||
<Path Name="spot05_scenePathList_0069D8" Offset="0x69D8" NumPaths="5"/>
|
||||
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
<Root>
|
||||
<File Name="spot05_scene" Segment="2">
|
||||
<Cutscene Name="gMinuetCs" Offset="0x3F84"/>
|
||||
|
||||
<Cutscene Name="spot05_scene_Cs_005730" Offset="0x5740"/>
|
||||
<Cutscene Name="gMeadowMinuetCs" Offset="0x3F84"/>
|
||||
<Cutscene Name="gMeadowSariasSongCs" Offset="0x5740"/>
|
||||
|
||||
<Path Name="spot05_scenePathList_0069D8" Offset="0x69E8" NumPaths="5"/>
|
||||
|
||||
|
|
|
@ -2,8 +2,11 @@
|
|||
<File Name="spot06_scene" Segment="2">
|
||||
<Cutscene Name="gLakeHyliaFireArrowsCS" Offset="0x7020"/>
|
||||
<Cutscene Name="gLakeHyliaOwlCs" Offset="0x1B0C0"/>
|
||||
<Path Name="spot06_scenePathList_007764" Offset="0x7764" NumPaths="2"/>
|
||||
<Cutscene Name="gLakeHyliaIntroCs" Offset="0x7A30"/>
|
||||
<Cutscene Name="gLakeHyliaCreditsCs" Offset="0x6E90"/>
|
||||
<Cutscene Name="gLakeHyliaRestoredCs" Offset="0x55E0"/>
|
||||
|
||||
<Path Name="spot06_scenePathList_007764" Offset="0x7764" NumPaths="2"/>
|
||||
<Scene Name="spot06_scene" Offset="0x0"/>
|
||||
</File>
|
||||
<File Name="spot06_room_0" Segment="3">
|
||||
|
|
|
@ -2,8 +2,11 @@
|
|||
<File Name="spot06_scene" Segment="2">
|
||||
<Cutscene Name="gLakeHyliaFireArrowsCS" Offset="0x7030"/>
|
||||
<Cutscene Name="gLakeHyliaOwlCs" Offset="0x1B0D0"/>
|
||||
<Path Name="spot06_scenePathList_007764" Offset="0x7774" NumPaths="2"/>
|
||||
<Cutscene Name="gLakeHyliaIntroCs" Offset="0x7A40"/>
|
||||
<Cutscene Name="gLakeHyliaCreditsCs" Offset="0x6E94"/>
|
||||
<Cutscene Name="gLakeHyliaRestoredCs" Offset="0x55E0"/>
|
||||
|
||||
<Path Name="spot06_scenePathList_007764" Offset="0x7774" NumPaths="2"/>
|
||||
<Scene Name="spot06_scene" Offset="0x0"/>
|
||||
</File>
|
||||
<File Name="spot06_room_0" Segment="3">
|
||||
|
|
|
@ -2,6 +2,11 @@
|
|||
<File Name="spot16_scene" Segment="2">
|
||||
<Cutscene Name="gDMTOwlCs" Offset="0x1E6A0"/>
|
||||
<Cutscene Name="gDMTIntroCs" Offset="0x7EA0"/>
|
||||
<Cutscene Name="gDMTKokiriEmeraldPart6Cs" Offset="0x3D40"/>
|
||||
<Cutscene Name="gDMTGoronRubyCs" Offset="0x40B0"/>
|
||||
<Cutscene Name="gDMTUnusedCs" Offset="0x63D0"/>
|
||||
<Cutscene Name="gDMTCreditsSixSagesCs" Offset="0x66E0"/>
|
||||
<Cutscene Name="gDMTCreditsShowGoronCityCs" Offset="0x6550"/>
|
||||
<Path Name="spot16_scenePathList_000254" Offset="0x254" NumPaths="2"/>
|
||||
<Path Name="spot16_scenePathList_007884" Offset="0x7884" NumPaths="3"/>
|
||||
<Scene Name="spot16_scene" Offset="0x0"/>
|
||||
|
|
|
@ -2,6 +2,11 @@
|
|||
<File Name="spot16_scene" Segment="2">
|
||||
<Cutscene Name="gDMTOwlCs" Offset="0x1E6D0"/>
|
||||
<Cutscene Name="gDMTIntroCs" Offset="0x7ED0"/>
|
||||
<Cutscene Name="gDMTKokiriEmeraldPart6Cs" Offset="0x3D44"/>
|
||||
<Cutscene Name="gDMTGoronRubyCs" Offset="0x40C0"/>
|
||||
<Cutscene Name="gDMTUnusedCs" Offset="0x63E0"/>
|
||||
<Cutscene Name="gDMTCreditsSixSagesCs" Offset="0x6704"/>
|
||||
<Cutscene Name="gDMTCreditsShowGoronCityCs" Offset="0x6564"/>
|
||||
<Path Name="spot16_scenePathList_000254" Offset="0x254" NumPaths="2"/>
|
||||
<Path Name="spot16_scenePathList_007884" Offset="0x78B4" NumPaths="3"/>
|
||||
<Scene Name="spot16_scene" Offset="0x0"/>
|
||||
|
|
|
@ -2,6 +2,11 @@
|
|||
<File Name="spot16_scene" Segment="2">
|
||||
<Cutscene Name="gDMTOwlCs" Offset="0x1E6A0"/>
|
||||
<Cutscene Name="gDMTIntroCs" Offset="0x7EA0"/>
|
||||
<Cutscene Name="gDMTKokiriEmeraldPart6Cs" Offset="0x3D40"/>
|
||||
<Cutscene Name="gDMTGoronRubyCs" Offset="0x40B0"/>
|
||||
<Cutscene Name="gDMTUnusedCs" Offset="0x63D0"/>
|
||||
<Cutscene Name="gDMTCreditsSixSagesCs" Offset="0x66E0"/>
|
||||
<Cutscene Name="gDMTCreditsShowGoronCityCs" Offset="0x6550"/>
|
||||
<Path Name="spot16_scenePathList_000254" Offset="0x254" NumPaths="2"/>
|
||||
<Path Name="spot16_scenePathList_007884" Offset="0x7884" NumPaths="3"/>
|
||||
<Scene Name="spot16_scene" Offset="0x0"/>
|
||||
|
|
145
assets/xml/textures/nes_font_static_ique_cn.xml
Normal file
145
assets/xml/textures/nes_font_static_ique_cn.xml
Normal file
|
@ -0,0 +1,145 @@
|
|||
<Root>
|
||||
<File Name="nes_font_static" Segment="10">
|
||||
<!-- The two-digit number after the prefix is the character's codepoint: the hexadecimal byte it corresponds to in the text data -->
|
||||
<Texture Name="gMsgChar20SpaceTex" OutName="msg_char_20_space" Format="i4" Width="16" Height="16" Offset="0x0"/>
|
||||
<Texture Name="gMsgChar21ExclamationMarkTex" OutName="msg_char_21_exclamation_mark" Format="i4" Width="16" Height="16" Offset="0x80"/>
|
||||
<Texture Name="gMsgChar22QuotationMarkTex" OutName="msg_char_22_quotation_mark" Format="i4" Width="16" Height="16" Offset="0x100"/>
|
||||
<Texture Name="gMsgChar23NumberSignTex" OutName="msg_char_23_number_sign" Format="i4" Width="16" Height="16" Offset="0x180"/>
|
||||
<Texture Name="gMsgChar24DollarSignTex" OutName="msg_char_24_dollar_sign" Format="i4" Width="16" Height="16" Offset="0x200"/>
|
||||
<Texture Name="gMsgChar25PercentSignTex" OutName="msg_char_25_percent_sign" Format="i4" Width="16" Height="16" Offset="0x280"/>
|
||||
<Texture Name="gMsgChar26AmpersandTex" OutName="msg_char_26_ampersand" Format="i4" Width="16" Height="16" Offset="0x300"/>
|
||||
<Texture Name="gMsgChar27ApostropheTex" OutName="msg_char_27_apostrophe" Format="i4" Width="16" Height="16" Offset="0x380"/>
|
||||
<Texture Name="gMsgChar28LeftParenthesesTex" OutName="msg_char_28_left_parentheses" Format="i4" Width="16" Height="16" Offset="0x400"/>
|
||||
<Texture Name="gMsgChar29RightParenthesesTex" OutName="msg_char_29_right_parentheses" Format="i4" Width="16" Height="16" Offset="0x480"/>
|
||||
<Texture Name="gMsgChar2AAsteriskTex" OutName="msg_char_2a_asterisk" Format="i4" Width="16" Height="16" Offset="0x500"/>
|
||||
<Texture Name="gMsgChar2BPlusSignTex" OutName="msg_char_2b_plus_sign" Format="i4" Width="16" Height="16" Offset="0x580"/>
|
||||
<Texture Name="gMsgChar2CCommaTex" OutName="msg_char_2c_comma" Format="i4" Width="16" Height="16" Offset="0x600"/>
|
||||
<Texture Name="gMsgChar2DHyphenMinusTex" OutName="msg_char_2d_hyphen_minus" Format="i4" Width="16" Height="16" Offset="0x680"/>
|
||||
<Texture Name="gMsgChar2EFullStopTex" OutName="msg_char_2e_full_stop" Format="i4" Width="16" Height="16" Offset="0x700"/>
|
||||
<Texture Name="gMsgChar2FSolidusTex" OutName="msg_char_2f_solidus" Format="i4" Width="16" Height="16" Offset="0x780"/>
|
||||
<Texture Name="gMsgChar30Digit0Tex" OutName="msg_char_30_digit_0" Format="i4" Width="16" Height="16" Offset="0x800"/>
|
||||
<Texture Name="gMsgChar31Digit1Tex" OutName="msg_char_31_digit_1" Format="i4" Width="16" Height="16" Offset="0x880"/>
|
||||
<Texture Name="gMsgChar32Digit2Tex" OutName="msg_char_32_digit_2" Format="i4" Width="16" Height="16" Offset="0x900"/>
|
||||
<Texture Name="gMsgChar33Digit3Tex" OutName="msg_char_33_digit_3" Format="i4" Width="16" Height="16" Offset="0x980"/>
|
||||
<Texture Name="gMsgChar34Digit4Tex" OutName="msg_char_34_digit_4" Format="i4" Width="16" Height="16" Offset="0xA00"/>
|
||||
<Texture Name="gMsgChar35Digit5Tex" OutName="msg_char_35_digit_5" Format="i4" Width="16" Height="16" Offset="0xA80"/>
|
||||
<Texture Name="gMsgChar36Digit6Tex" OutName="msg_char_36_digit_6" Format="i4" Width="16" Height="16" Offset="0xB00"/>
|
||||
<Texture Name="gMsgChar37Digit7Tex" OutName="msg_char_37_digit_7" Format="i4" Width="16" Height="16" Offset="0xB80"/>
|
||||
<Texture Name="gMsgChar38Digit8Tex" OutName="msg_char_38_digit_8" Format="i4" Width="16" Height="16" Offset="0xC00"/>
|
||||
<Texture Name="gMsgChar39Digit9Tex" OutName="msg_char_39_digit_9" Format="i4" Width="16" Height="16" Offset="0xC80"/>
|
||||
<Texture Name="gMsgChar3AColonTex" OutName="msg_char_3a_colon" Format="i4" Width="16" Height="16" Offset="0xD00"/>
|
||||
<Texture Name="gMsgChar3BSemicolonTex" OutName="msg_char_3b_semicolon" Format="i4" Width="16" Height="16" Offset="0xD80"/>
|
||||
<Texture Name="gMsgChar3CLessThanSignTex" OutName="msg_char_3c_less_than_sign" Format="i4" Width="16" Height="16" Offset="0xE00"/>
|
||||
<Texture Name="gMsgChar3DEqualsSignTex" OutName="msg_char_3d_equals_sign" Format="i4" Width="16" Height="16" Offset="0xE80"/>
|
||||
<Texture Name="gMsgChar3EGreaterThanSignTex" OutName="msg_char_3e_greater_than_sign" Format="i4" Width="16" Height="16" Offset="0xF00"/>
|
||||
<Texture Name="gMsgChar3FQuestionMarkTex" OutName="msg_char_3f_question_mark" Format="i4" Width="16" Height="16" Offset="0xF80"/>
|
||||
<Texture Name="gMsgChar40CommercialAtTex" OutName="msg_char_40_commercial_at" Format="i4" Width="16" Height="16" Offset="0x1000"/>
|
||||
<Texture Name="gMsgChar41LatinCapitalLetterATex" OutName="msg_char_41_latin_capital_letter_a" Format="i4" Width="16" Height="16" Offset="0x1080"/>
|
||||
<Texture Name="gMsgChar42LatinCapitalLetterBTex" OutName="msg_char_42_latin_capital_letter_b" Format="i4" Width="16" Height="16" Offset="0x1100"/>
|
||||
<Texture Name="gMsgChar43LatinCapitalLetterCTex" OutName="msg_char_43_latin_capital_letter_c" Format="i4" Width="16" Height="16" Offset="0x1180"/>
|
||||
<Texture Name="gMsgChar44LatinCapitalLetterDTex" OutName="msg_char_44_latin_capital_letter_d" Format="i4" Width="16" Height="16" Offset="0x1200"/>
|
||||
<Texture Name="gMsgChar45LatinCapitalLetterETex" OutName="msg_char_45_latin_capital_letter_e" Format="i4" Width="16" Height="16" Offset="0x1280"/>
|
||||
<Texture Name="gMsgChar46LatinCapitalLetterFTex" OutName="msg_char_46_latin_capital_letter_f" Format="i4" Width="16" Height="16" Offset="0x1300"/>
|
||||
<Texture Name="gMsgChar47LatinCapitalLetterGTex" OutName="msg_char_47_latin_capital_letter_g" Format="i4" Width="16" Height="16" Offset="0x1380"/>
|
||||
<Texture Name="gMsgChar48LatinCapitalLetterHTex" OutName="msg_char_48_latin_capital_letter_h" Format="i4" Width="16" Height="16" Offset="0x1400"/>
|
||||
<Texture Name="gMsgChar49LatinCapitalLetterITex" OutName="msg_char_49_latin_capital_letter_i" Format="i4" Width="16" Height="16" Offset="0x1480"/>
|
||||
<Texture Name="gMsgChar4ALatinCapitalLetterJTex" OutName="msg_char_4a_latin_capital_letter_j" Format="i4" Width="16" Height="16" Offset="0x1500"/>
|
||||
<Texture Name="gMsgChar4BLatinCapitalLetterKTex" OutName="msg_char_4b_latin_capital_letter_k" Format="i4" Width="16" Height="16" Offset="0x1580"/>
|
||||
<Texture Name="gMsgChar4CLatinCapitalLetterLTex" OutName="msg_char_4c_latin_capital_letter_l" Format="i4" Width="16" Height="16" Offset="0x1600"/>
|
||||
<Texture Name="gMsgChar4DLatinCapitalLetterMTex" OutName="msg_char_4d_latin_capital_letter_m" Format="i4" Width="16" Height="16" Offset="0x1680"/>
|
||||
<Texture Name="gMsgChar4ELatinCapitalLetterNTex" OutName="msg_char_4e_latin_capital_letter_n" Format="i4" Width="16" Height="16" Offset="0x1700"/>
|
||||
<Texture Name="gMsgChar4FLatinCapitalLetterOTex" OutName="msg_char_4f_latin_capital_letter_o" Format="i4" Width="16" Height="16" Offset="0x1780"/>
|
||||
<Texture Name="gMsgChar50LatinCapitalLetterPTex" OutName="msg_char_50_latin_capital_letter_p" Format="i4" Width="16" Height="16" Offset="0x1800"/>
|
||||
<Texture Name="gMsgChar51LatinCapitalLetterQTex" OutName="msg_char_51_latin_capital_letter_q" Format="i4" Width="16" Height="16" Offset="0x1880"/>
|
||||
<Texture Name="gMsgChar52LatinCapitalLetterRTex" OutName="msg_char_52_latin_capital_letter_r" Format="i4" Width="16" Height="16" Offset="0x1900"/>
|
||||
<Texture Name="gMsgChar53LatinCapitalLetterSTex" OutName="msg_char_53_latin_capital_letter_s" Format="i4" Width="16" Height="16" Offset="0x1980"/>
|
||||
<Texture Name="gMsgChar54LatinCapitalLetterTTex" OutName="msg_char_54_latin_capital_letter_t" Format="i4" Width="16" Height="16" Offset="0x1A00"/>
|
||||
<Texture Name="gMsgChar55LatinCapitalLetterUTex" OutName="msg_char_55_latin_capital_letter_u" Format="i4" Width="16" Height="16" Offset="0x1A80"/>
|
||||
<Texture Name="gMsgChar56LatinCapitalLetterVTex" OutName="msg_char_56_latin_capital_letter_v" Format="i4" Width="16" Height="16" Offset="0x1B00"/>
|
||||
<Texture Name="gMsgChar57LatinCapitalLetterWTex" OutName="msg_char_57_latin_capital_letter_w" Format="i4" Width="16" Height="16" Offset="0x1B80"/>
|
||||
<Texture Name="gMsgChar58LatinCapitalLetterXTex" OutName="msg_char_58_latin_capital_letter_x" Format="i4" Width="16" Height="16" Offset="0x1C00"/>
|
||||
<Texture Name="gMsgChar59LatinCapitalLetterYTex" OutName="msg_char_59_latin_capital_letter_y" Format="i4" Width="16" Height="16" Offset="0x1C80"/>
|
||||
<Texture Name="gMsgChar5ALatinCapitalLetterZTex" OutName="msg_char_5a_latin_capital_letter_z" Format="i4" Width="16" Height="16" Offset="0x1D00"/>
|
||||
<Texture Name="gMsgChar5BLeftSquareBracketTex" OutName="msg_char_5b_left_square_bracket" Format="i4" Width="16" Height="16" Offset="0x1D80"/>
|
||||
<Texture Name="gMsgChar5CYenSignTex" OutName="msg_char_5c_yen_sign" Format="i4" Width="16" Height="16" Offset="0x1E00"/>
|
||||
<Texture Name="gMsgChar5DRightSquareBracketTex" OutName="msg_char_5d_right_square_bracket" Format="i4" Width="16" Height="16" Offset="0x1E80"/>
|
||||
<Texture Name="gMsgChar5ECircumflexAccentTex" OutName="msg_char_5e_circumflex_accent" Format="i4" Width="16" Height="16" Offset="0x1F00"/>
|
||||
<Texture Name="gMsgChar5FLowLineTex" OutName="msg_char_5f_low_line" Format="i4" Width="16" Height="16" Offset="0x1F80"/>
|
||||
<Texture Name="gMsgChar60GraveAccentTex" OutName="msg_char_60_grave_accent" Format="i4" Width="16" Height="16" Offset="0x2000"/>
|
||||
<Texture Name="gMsgChar61LatinSmallLetterATex" OutName="msg_char_61_latin_small_letter_a" Format="i4" Width="16" Height="16" Offset="0x2080"/>
|
||||
<Texture Name="gMsgChar62LatinSmallLetterBTex" OutName="msg_char_62_latin_small_letter_b" Format="i4" Width="16" Height="16" Offset="0x2100"/>
|
||||
<Texture Name="gMsgChar63LatinSmallLetterCTex" OutName="msg_char_63_latin_small_letter_c" Format="i4" Width="16" Height="16" Offset="0x2180"/>
|
||||
<Texture Name="gMsgChar64LatinSmallLetterDTex" OutName="msg_char_64_latin_small_letter_d" Format="i4" Width="16" Height="16" Offset="0x2200"/>
|
||||
<Texture Name="gMsgChar65LatinSmallLetterETex" OutName="msg_char_65_latin_small_letter_e" Format="i4" Width="16" Height="16" Offset="0x2280"/>
|
||||
<Texture Name="gMsgChar66LatinSmallLetterFTex" OutName="msg_char_66_latin_small_letter_f" Format="i4" Width="16" Height="16" Offset="0x2300"/>
|
||||
<Texture Name="gMsgChar67LatinSmallLetterGTex" OutName="msg_char_67_latin_small_letter_g" Format="i4" Width="16" Height="16" Offset="0x2380"/>
|
||||
<Texture Name="gMsgChar68LatinSmallLetterHTex" OutName="msg_char_68_latin_small_letter_h" Format="i4" Width="16" Height="16" Offset="0x2400"/>
|
||||
<Texture Name="gMsgChar69LatinSmallLetterITex" OutName="msg_char_69_latin_small_letter_i" Format="i4" Width="16" Height="16" Offset="0x2480"/>
|
||||
<Texture Name="gMsgChar6ALatinSmallLetterJTex" OutName="msg_char_6a_latin_small_letter_j" Format="i4" Width="16" Height="16" Offset="0x2500"/>
|
||||
<Texture Name="gMsgChar6BLatinSmallLetterKTex" OutName="msg_char_6b_latin_small_letter_k" Format="i4" Width="16" Height="16" Offset="0x2580"/>
|
||||
<Texture Name="gMsgChar6CLatinSmallLetterLTex" OutName="msg_char_6c_latin_small_letter_l" Format="i4" Width="16" Height="16" Offset="0x2600"/>
|
||||
<Texture Name="gMsgChar6DLatinSmallLetterMTex" OutName="msg_char_6d_latin_small_letter_m" Format="i4" Width="16" Height="16" Offset="0x2680"/>
|
||||
<Texture Name="gMsgChar6ELatinSmallLetterNTex" OutName="msg_char_6e_latin_small_letter_n" Format="i4" Width="16" Height="16" Offset="0x2700"/>
|
||||
<Texture Name="gMsgChar6FLatinSmallLetterOTex" OutName="msg_char_6f_latin_small_letter_o" Format="i4" Width="16" Height="16" Offset="0x2780"/>
|
||||
<Texture Name="gMsgChar70LatinSmallLetterPTex" OutName="msg_char_70_latin_small_letter_p" Format="i4" Width="16" Height="16" Offset="0x2800"/>
|
||||
<Texture Name="gMsgChar71LatinSmallLetterQTex" OutName="msg_char_71_latin_small_letter_q" Format="i4" Width="16" Height="16" Offset="0x2880"/>
|
||||
<Texture Name="gMsgChar72LatinSmallLetterRTex" OutName="msg_char_72_latin_small_letter_r" Format="i4" Width="16" Height="16" Offset="0x2900"/>
|
||||
<Texture Name="gMsgChar73LatinSmallLetterSTex" OutName="msg_char_73_latin_small_letter_s" Format="i4" Width="16" Height="16" Offset="0x2980"/>
|
||||
<Texture Name="gMsgChar74LatinSmallLetterTTex" OutName="msg_char_74_latin_small_letter_t" Format="i4" Width="16" Height="16" Offset="0x2A00"/>
|
||||
<Texture Name="gMsgChar75LatinSmallLetterUTex" OutName="msg_char_75_latin_small_letter_u" Format="i4" Width="16" Height="16" Offset="0x2A80"/>
|
||||
<Texture Name="gMsgChar76LatinSmallLetterVTex" OutName="msg_char_76_latin_small_letter_v" Format="i4" Width="16" Height="16" Offset="0x2B00"/>
|
||||
<Texture Name="gMsgChar77LatinSmallLetterWTex" OutName="msg_char_77_latin_small_letter_w" Format="i4" Width="16" Height="16" Offset="0x2B80"/>
|
||||
<Texture Name="gMsgChar78LatinSmallLetterXTex" OutName="msg_char_78_latin_small_letter_x" Format="i4" Width="16" Height="16" Offset="0x2C00"/>
|
||||
<Texture Name="gMsgChar79LatinSmallLetterYTex" OutName="msg_char_79_latin_small_letter_y" Format="i4" Width="16" Height="16" Offset="0x2C80"/>
|
||||
<Texture Name="gMsgChar7ALatinSmallLetterZTex" OutName="msg_char_7a_latin_small_letter_z" Format="i4" Width="16" Height="16" Offset="0x2D00"/>
|
||||
<Texture Name="gMsgChar7BLeftCurlyBracketTex" OutName="msg_char_7b_left_curly_bracket" Format="i4" Width="16" Height="16" Offset="0x2D80"/>
|
||||
<Texture Name="gMsgChar7CVerticalLineTex" OutName="msg_char_7c_vertical_line" Format="i4" Width="16" Height="16" Offset="0x2E00"/>
|
||||
<Texture Name="gMsgChar7DRightCurlyBracketTex" OutName="msg_char_7d_right_curly_bracket" Format="i4" Width="16" Height="16" Offset="0x2E80"/>
|
||||
<Texture Name="gMsgChar7ETildeTex" OutName="msg_char_7e_tilde" Format="i4" Width="16" Height="16" Offset="0x2F00"/>
|
||||
<Texture Name="gMsgChar7FBlankTex" OutName="msg_char_7f_blank" Format="i4" Width="16" Height="16" Offset="0x2F80"/>
|
||||
<Texture Name="gMsgChar80LatinCapitalLetterAWithGraveTex" OutName="msg_char_80_latin_capital_letter_a_with_grave" Format="i4" Width="16" Height="16" Offset="0x3000"/>
|
||||
<Texture Name="gMsgChar81LatinCapitalLetterIWithCircumflexTex" OutName="msg_char_81_latin_capital_letter_i_with_circumflex" Format="i4" Width="16" Height="16" Offset="0x3080"/>
|
||||
<Texture Name="gMsgChar82LatinCapitalLetterAWithCircumflexTex" OutName="msg_char_82_latin_capital_letter_a_with_circumflex" Format="i4" Width="16" Height="16" Offset="0x3100"/>
|
||||
<Texture Name="gMsgChar83LatinCapitalLetterAWithDiaeresisTex" OutName="msg_char_83_latin_capital_letter_a_with_diaeresis" Format="i4" Width="16" Height="16" Offset="0x3180"/>
|
||||
<Texture Name="gMsgChar84LatinCapitalLetterCWithCedillaTex" OutName="msg_char_84_latin_capital_letter_c_with_cedilla" Format="i4" Width="16" Height="16" Offset="0x3200"/>
|
||||
<Texture Name="gMsgChar85LatinCapitalLetterEWithGraveTex" OutName="msg_char_85_latin_capital_letter_e_with_grave" Format="i4" Width="16" Height="16" Offset="0x3280"/>
|
||||
<Texture Name="gMsgChar86LatinCapitalLetterEWithAcuteTex" OutName="msg_char_86_latin_capital_letter_e_with_acute" Format="i4" Width="16" Height="16" Offset="0x3300"/>
|
||||
<Texture Name="gMsgChar87LatinCapitalLetterEWithCircumflexTex" OutName="msg_char_87_latin_capital_letter_e_with_circumflex" Format="i4" Width="16" Height="16" Offset="0x3380"/>
|
||||
<Texture Name="gMsgChar88LatinCapitalLetterEWithDiaeresisTex" OutName="msg_char_88_latin_capital_letter_e_with_diaeresis" Format="i4" Width="16" Height="16" Offset="0x3400"/>
|
||||
<Texture Name="gMsgChar89LatinCapitalLetterIWithDiaeresisTex" OutName="msg_char_89_latin_capital_letter_i_with_diaeresis" Format="i4" Width="16" Height="16" Offset="0x3480"/>
|
||||
<Texture Name="gMsgChar8ALatinCapitalLetterOWithCircumflexTex" OutName="msg_char_8a_latin_capital_letter_o_with_circumflex" Format="i4" Width="16" Height="16" Offset="0x3500"/>
|
||||
<Texture Name="gMsgChar8BLatinCapitalLetterOWithDiaeresisTex" OutName="msg_char_8b_latin_capital_letter_o_with_diaeresis" Format="i4" Width="16" Height="16" Offset="0x3580"/>
|
||||
<Texture Name="gMsgChar8CLatinCapitalLetterUWithGraveTex" OutName="msg_char_8c_latin_capital_letter_u_with_grave" Format="i4" Width="16" Height="16" Offset="0x3600"/>
|
||||
<Texture Name="gMsgChar8DLatinCapitalLetterUWithCircumflexTex" OutName="msg_char_8d_latin_capital_letter_u_with_circumflex" Format="i4" Width="16" Height="16" Offset="0x3680"/>
|
||||
<Texture Name="gMsgChar8ELatinCapitalLetterUWithDiaeresisTex" OutName="msg_char_8e_latin_capital_letter_u_with_diaeresis" Format="i4" Width="16" Height="16" Offset="0x3700"/>
|
||||
<Texture Name="gMsgChar8FLatinSmallLetterSharpSTex" OutName="msg_char_8f_latin_small_letter_sharp_s" Format="i4" Width="16" Height="16" Offset="0x3780"/>
|
||||
<Texture Name="gMsgChar90LatinSmallLetterAWithGraveTex" OutName="msg_char_90_latin_small_letter_a_with_grave" Format="i4" Width="16" Height="16" Offset="0x3800"/>
|
||||
<Texture Name="gMsgChar91LatinSmallLetterAWithAcuteTex" OutName="msg_char_91_latin_small_letter_a_with_acute" Format="i4" Width="16" Height="16" Offset="0x3880"/>
|
||||
<Texture Name="gMsgChar92LatinSmallLetterAWithCircumflexTex" OutName="msg_char_92_latin_small_letter_a_with_circumflex" Format="i4" Width="16" Height="16" Offset="0x3900"/>
|
||||
<Texture Name="gMsgChar93LatinSmallLetterAWithDiaeresisTex" OutName="msg_char_93_latin_small_letter_a_with_diaeresis" Format="i4" Width="16" Height="16" Offset="0x3980"/>
|
||||
<Texture Name="gMsgChar94LatinSmallLetterCWithCedillaTex" OutName="msg_char_94_latin_small_letter_c_with_cedilla" Format="i4" Width="16" Height="16" Offset="0x3A00"/>
|
||||
<Texture Name="gMsgChar95LatinSmallLetterEWithGraveTex" OutName="msg_char_95_latin_small_letter_e_with_grave" Format="i4" Width="16" Height="16" Offset="0x3A80"/>
|
||||
<Texture Name="gMsgChar96LatinSmallLetterEWithAcuteTex" OutName="msg_char_96_latin_small_letter_e_with_acute" Format="i4" Width="16" Height="16" Offset="0x3B00"/>
|
||||
<Texture Name="gMsgChar97LatinSmallLetterEWithCircumflexTex" OutName="msg_char_97_latin_small_letter_e_with_circumflex" Format="i4" Width="16" Height="16" Offset="0x3B80"/>
|
||||
<Texture Name="gMsgChar98LatinSmallLetterEWithDiaeresisTex" OutName="msg_char_98_latin_small_letter_e_with_diaeresis" Format="i4" Width="16" Height="16" Offset="0x3C00"/>
|
||||
<Texture Name="gMsgChar99LatinSmallLetterIWithDiaeresisTex" OutName="msg_char_99_latin_small_letter_i_with_diaeresis" Format="i4" Width="16" Height="16" Offset="0x3C80"/>
|
||||
<Texture Name="gMsgChar9ALatinSmallLetterOWithCircumflexTex" OutName="msg_char_9a_latin_small_letter_o_with_circumflex" Format="i4" Width="16" Height="16" Offset="0x3D00"/>
|
||||
<Texture Name="gMsgChar9BLatinSmallLetterOWithDiaeresisTex" OutName="msg_char_9b_latin_small_letter_o_with_diaeresis" Format="i4" Width="16" Height="16" Offset="0x3D80"/>
|
||||
<Texture Name="gMsgChar9CLatinSmallLetterUWithGraveTex" OutName="msg_char_9c_latin_small_letter_u_with_grave" Format="i4" Width="16" Height="16" Offset="0x3E00"/>
|
||||
<Texture Name="gMsgChar9DLatinSmallLetterUWithCircumflexTex" OutName="msg_char_9d_latin_small_letter_u_with_circumflex" Format="i4" Width="16" Height="16" Offset="0x3E80"/>
|
||||
<Texture Name="gMsgChar9ELatinSmallLetterUWithDiaeresisTex" OutName="msg_char_9e_latin_small_letter_u_with_diaeresis" Format="i4" Width="16" Height="16" Offset="0x3F00"/>
|
||||
<Texture Name="gMsgChar9FButtonATex" OutName="msg_char_9f_button_a" Format="i4" Width="16" Height="16" Offset="0x3F80"/>
|
||||
<Texture Name="gMsgCharA0ButtonBTex" OutName="msg_char_a0_button_b" Format="i4" Width="16" Height="16" Offset="0x4000"/>
|
||||
<Texture Name="gMsgCharA1ButtonCTex" OutName="msg_char_a1_button_c" Format="i4" Width="16" Height="16" Offset="0x4080"/>
|
||||
<Texture Name="gMsgCharA2ButtonLTex" OutName="msg_char_a2_button_l" Format="i4" Width="16" Height="16" Offset="0x4100"/>
|
||||
<Texture Name="gMsgCharA3ButtonRTex" OutName="msg_char_a3_button_r" Format="i4" Width="16" Height="16" Offset="0x4180"/>
|
||||
<Texture Name="gMsgCharA4ButtonZTex" OutName="msg_char_a4_button_z" Format="i4" Width="16" Height="16" Offset="0x4200"/>
|
||||
<Texture Name="gMsgCharA5ButtonCUpTex" OutName="msg_char_a5_button_c_up" Format="i4" Width="16" Height="16" Offset="0x4280"/>
|
||||
<Texture Name="gMsgCharA6ButtonCDownTex" OutName="msg_char_a6_button_c_down" Format="i4" Width="16" Height="16" Offset="0x4300"/>
|
||||
<Texture Name="gMsgCharA7ButtonCLeftTex" OutName="msg_char_a7_button_c_left" Format="i4" Width="16" Height="16" Offset="0x4380"/>
|
||||
<Texture Name="gMsgCharA8ButtonCRightTex" OutName="msg_char_a8_button_c_right" Format="i4" Width="16" Height="16" Offset="0x4400"/>
|
||||
<Texture Name="gMsgCharA9ZTargetSignTex" OutName="msg_char_a9_z_target_sign" Format="i4" Width="16" Height="16" Offset="0x4480"/>
|
||||
<Texture Name="gMsgCharAAControlStickTex" OutName="msg_char_aa_control_stick" Format="i4" Width="16" Height="16" Offset="0x4500"/>
|
||||
<!-- TODO: Chinese characters -->
|
||||
</File>
|
||||
</Root>
|
|
@ -1,5 +1,5 @@
|
|||
dmadata_start: 0x12F70
|
||||
text_lang_pal: true
|
||||
text_lang: PAL
|
||||
incbins:
|
||||
- name: ipl3
|
||||
segment: makerom
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
dmadata_start: 0x7170
|
||||
text_lang_pal: true
|
||||
text_lang: PAL
|
||||
incbins:
|
||||
- name: ipl3
|
||||
segment: makerom
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
dmadata_start: 0x7170
|
||||
text_lang_pal: true
|
||||
text_lang: PAL
|
||||
incbins:
|
||||
- name: ipl3
|
||||
segment: makerom
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
dmadata_start: 0x7170
|
||||
text_lang_pal: false
|
||||
text_lang: NTSC
|
||||
incbins:
|
||||
- name: ipl3
|
||||
segment: makerom
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
dmadata_start: 0x7170
|
||||
text_lang_pal: false
|
||||
text_lang: NTSC
|
||||
incbins:
|
||||
- name: ipl3
|
||||
segment: makerom
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
dmadata_start: 0x7170
|
||||
text_lang_pal: false
|
||||
text_lang: NTSC
|
||||
incbins:
|
||||
- name: ipl3
|
||||
segment: makerom
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
dmadata_start: 0x7170
|
||||
text_lang_pal: false
|
||||
text_lang: NTSC
|
||||
incbins:
|
||||
- name: ipl3
|
||||
segment: makerom
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
dmadata_start: 0x7170
|
||||
text_lang_pal: false
|
||||
text_lang: NTSC
|
||||
incbins:
|
||||
- name: ipl3
|
||||
segment: makerom
|
||||
|
|
1
baseroms/ique-cn/checksum-compressed.md5
Normal file
1
baseroms/ique-cn/checksum-compressed.md5
Normal file
|
@ -0,0 +1 @@
|
|||
0ab48b2d44a74b3bb2d384f6170c2742 build/ique-cn/oot-ique-cn-compressed.z64
|
1
baseroms/ique-cn/checksum.md5
Normal file
1
baseroms/ique-cn/checksum.md5
Normal file
|
@ -0,0 +1 @@
|
|||
17a9f30d722c29e6912bd4b66713d2b0 build/ique-cn/oot-ique-cn.z64
|
1212
baseroms/ique-cn/config.yml
Normal file
1212
baseroms/ique-cn/config.yml
Normal file
File diff suppressed because it is too large
Load diff
1510
baseroms/ique-cn/segments.csv
Normal file
1510
baseroms/ique-cn/segments.csv
Normal file
File diff suppressed because it is too large
Load diff
|
@ -2,7 +2,7 @@ checksums:
|
|||
- checksum-JP
|
||||
- checksum-US
|
||||
dmadata_start: 0x7430
|
||||
text_lang_pal: false
|
||||
text_lang: NTSC
|
||||
incbins:
|
||||
- name: ipl3
|
||||
segment: makerom
|
||||
|
|
|
@ -2,7 +2,7 @@ checksums:
|
|||
- checksum-JP
|
||||
- checksum-US
|
||||
dmadata_start: 0x7430
|
||||
text_lang_pal: false
|
||||
text_lang: NTSC
|
||||
incbins:
|
||||
- name: ipl3
|
||||
segment: makerom
|
||||
|
|
|
@ -2,7 +2,7 @@ checksums:
|
|||
- checksum-JP
|
||||
- checksum-US
|
||||
dmadata_start: 0x7960
|
||||
text_lang_pal: false
|
||||
text_lang: NTSC
|
||||
incbins:
|
||||
- name: ipl3
|
||||
segment: makerom
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
dmadata_start: 0x7950
|
||||
text_lang_pal: true
|
||||
text_lang: PAL
|
||||
incbins:
|
||||
- name: ipl3
|
||||
segment: makerom
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
dmadata_start: 0x7950
|
||||
text_lang_pal: true
|
||||
text_lang: PAL
|
||||
incbins:
|
||||
- name: ipl3
|
||||
segment: makerom
|
||||
|
|
|
@ -1,11 +1,8 @@
|
|||
version: "3"
|
||||
services:
|
||||
oot:
|
||||
build:
|
||||
dockerfile: Dockerfile
|
||||
volumes:
|
||||
- oot-sync:/oot:nocopy
|
||||
image: "oot:latest"
|
||||
- ./:/oot
|
||||
tty: true
|
||||
|
||||
volumes:
|
||||
oot-sync:
|
||||
external: true
|
||||
stdin_open: true
|
||||
|
|
|
@ -6,22 +6,20 @@ To use Docker, you'll need either Docker Desktop or Docker Toolbox installed and
|
|||
|
||||
You'll also need to prepare a local version of the project with a copied base ROM (see steps [2](../README.md#2-clone-the-repository) and [3](../README.md#3-prepare-a-base-rom) of the Linux instructions).
|
||||
|
||||
## 2. Create the Docker image
|
||||
## 2. Create and start the Docker image build
|
||||
|
||||
From inside your local project, run the following command:
|
||||
From the root of your local project, run the following command:
|
||||
|
||||
```bash
|
||||
docker build . -t oot
|
||||
docker-compose up --build
|
||||
```
|
||||
|
||||
## 3. Start the container
|
||||
This should immediately begin steps [4](../README.md#4-setup-the-rom-and-build-process) and [5](../README.md#5-build-the-rom) within the Docker container.
|
||||
|
||||
To start the container, you can mount your local filesystem into the Docker container and run an interactive bash session.
|
||||
## 3. Shell into the 'oot' container
|
||||
|
||||
To exec into the oot Docker image at any time, run the following command either during or after the build:
|
||||
|
||||
```bash
|
||||
docker run -it --rm --mount type=bind,source="$(pwd)",destination=/oot oot /bin/bash
|
||||
docker-compose exec oot bash
|
||||
```
|
||||
|
||||
## 4. Setup and Build the ROM
|
||||
|
||||
Once inside the container, you can follow steps [4](../README.md#4-setup-the-rom-and-build-process) and [5](../README.md#5-build-the-rom) of the Linux instructions to setup and build the ROM, or run any other command you need.
|
||||
|
|
|
@ -14,12 +14,13 @@ For macOS, use Homebrew to install the following dependencies:
|
|||
* bash
|
||||
* clang-format
|
||||
* libxml2
|
||||
* libiconv
|
||||
|
||||
You can install them with the following commands:
|
||||
|
||||
```bash
|
||||
brew update
|
||||
brew install coreutils make python3 libpng bash clang-format libxml2
|
||||
brew install coreutils make python3 libpng bash clang-format libxml2 libiconv
|
||||
```
|
||||
|
||||
(The repository expects Homebrew-installed programs to be either linked correctly in `$PATH` etc. or in their default locations.)
|
||||
|
@ -64,9 +65,9 @@ make -j
|
|||
sudo make install
|
||||
```
|
||||
|
||||
Edit your `~/.bash_profile`/`~/.zsh_profile` (or whichever shell you use) to add the new binutils binaries to the system PATH
|
||||
Edit your `~/.bash_profile`/`~/.zprofile` (or whichever shell you use) to add the new binutils binaries to the system PATH
|
||||
```bash
|
||||
echo "export PATH=$PATH:/opt/cross/bin" >> ~/.bash_profile
|
||||
echo 'export PATH="$PATH:/opt/cross/bin"' >> ~/.bash_profile
|
||||
```
|
||||
|
||||
Reload `~/.bash_profile` (or just launch a new terminal tab)
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
#include "attributes.h"
|
||||
#include "padmgr.h"
|
||||
|
||||
#if PLATFORM_GC
|
||||
#if !PLATFORM_N64
|
||||
// These are the same as the 3-bit ansi color codes
|
||||
#define FAULT_COLOR_BLACK 0
|
||||
#define FAULT_COLOR_RED 1
|
||||
|
@ -33,7 +33,7 @@ typedef struct FaultClient {
|
|||
/* 0x0C */ void* arg1;
|
||||
} FaultClient; // size = 0x10
|
||||
|
||||
#if PLATFORM_GC
|
||||
#if !PLATFORM_N64
|
||||
typedef struct FaultAddrConvClient {
|
||||
/* 0x00 */ struct FaultAddrConvClient* next;
|
||||
/* 0x04 */ void* callback;
|
||||
|
@ -78,7 +78,7 @@ void func_800AE1F8(void);
|
|||
#define Fault_SetFontColor(color) (void)0
|
||||
#define Fault_SetCharPad(padW, padH) (void)0
|
||||
|
||||
#elif PLATFORM_GC
|
||||
#else
|
||||
|
||||
void Fault_InitDrawer(void);
|
||||
void Fault_SetForeColor(u16 color);
|
||||
|
@ -98,7 +98,7 @@ extern volatile OSThread* gFaultFaultedThread;
|
|||
|
||||
#define FAULT_MSG_ID gFaultMsgId
|
||||
|
||||
#elif PLATFORM_GC
|
||||
#else
|
||||
|
||||
typedef struct FaultMgr {
|
||||
/* 0x000 */ OSThread thread;
|
||||
|
|
|
@ -71,13 +71,6 @@ void CutsceneFlags_UnsetAll(PlayState* play);
|
|||
void CutsceneFlags_Set(PlayState* play, s16 flag);
|
||||
void CutsceneFlags_Unset(PlayState* play, s16 flag);
|
||||
s32 CutsceneFlags_Get(PlayState* play, s16 flag);
|
||||
s32 func_8006CFC0(s32 sceneId);
|
||||
void func_8006D074(PlayState* play);
|
||||
void func_8006D0AC(PlayState* play);
|
||||
void func_8006D0EC(PlayState* play, Player* player);
|
||||
void func_8006D684(PlayState* play, Player* player);
|
||||
void func_8006DC68(PlayState* play, Player* player);
|
||||
void func_8006DD9C(Actor* actor, Vec3f* arg1, s16 arg2);
|
||||
|
||||
s32 Kanji_OffsetFromShiftJIS(s32 character);
|
||||
void Font_LoadCharWide(Font* font, u16 character, u16 codePointIndex);
|
||||
|
|
|
@ -11,7 +11,7 @@ typedef struct Arena {
|
|||
#if PLATFORM_N64
|
||||
/* 0x08 */ u32 size;
|
||||
/* 0x0C */ u8 allocFailures;
|
||||
#elif PLATFORM_GC
|
||||
#else
|
||||
/* 0x08 */ OSMesgQueue lockQueue;
|
||||
/* 0x20 */ u8 allocFailures; // only used in non-debug builds
|
||||
/* 0x21 */ u8 isInit;
|
||||
|
|
67
include/line_numbers.h
Normal file
67
include/line_numbers.h
Normal file
|
@ -0,0 +1,67 @@
|
|||
#ifndef LINE_NUMBERS_H
|
||||
#define LINE_NUMBERS_H
|
||||
|
||||
// The macros in this file serve to reduce clutter from version differences that are only due to line numbers being different.
|
||||
|
||||
// The "LN" macros defined here are not meant to be used directly. See the wrapper macros below.
|
||||
#if OOT_VERSION == NTSC_1_0
|
||||
#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (ntsc_1_0)
|
||||
#elif OOT_VERSION == NTSC_1_1
|
||||
#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (ntsc_1_1)
|
||||
#elif OOT_VERSION == PAL_1_0
|
||||
#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (pal_1_0)
|
||||
#elif OOT_VERSION == NTSC_1_2
|
||||
#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (ntsc_1_2)
|
||||
#elif OOT_VERSION == PAL_1_1
|
||||
#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (pal_1_1)
|
||||
#elif OOT_VERSION == GC_JP
|
||||
#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (gc_jp)
|
||||
#elif OOT_VERSION == GC_JP_MQ
|
||||
#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (gc_jp_mq)
|
||||
#elif OOT_VERSION == GC_US
|
||||
#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (gc_us)
|
||||
#elif OOT_VERSION == GC_US_MQ
|
||||
#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (gc_us_mq)
|
||||
#elif OOT_VERSION == GC_EU_MQ_DBG
|
||||
#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (gc_eu_mq_dbg)
|
||||
#elif OOT_VERSION == GC_EU
|
||||
#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (gc_eu)
|
||||
#elif OOT_VERSION == GC_EU_MQ
|
||||
#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (gc_eu_mq)
|
||||
#elif OOT_VERSION == GC_JP_CE
|
||||
#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (gc_jp_ce)
|
||||
#elif OOT_VERSION == IQUE_CN
|
||||
#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (ique_cn)
|
||||
#else
|
||||
#error "Unsupported OOT version"
|
||||
#endif
|
||||
|
||||
/**
|
||||
* These wrappers exist to remove duplication of line numbers being passed to LN.
|
||||
* The wrappers have ambiguous names purposefully so they are short and don't add clutter.
|
||||
*
|
||||
* The groupings of different line numbers are difficult to name, as the exact grouping
|
||||
* depends on which versions happen to have changes in a given file.
|
||||
*/
|
||||
|
||||
// NTSC 1.0 and all the other versions
|
||||
#define LN1(ntsc_1_0, other) \
|
||||
LN(ntsc_1_0, other, other, other, other, other, other, other, other, other, other, other, other, other)
|
||||
|
||||
// NTSC 1.0, NTSC 1.1, and all the other versions
|
||||
#define LN2(ntsc_1_0, ntsc_1_1, other) \
|
||||
LN(ntsc_1_0, ntsc_1_1, other, other, other, other, other, other, other, other, other, other, other, other)
|
||||
|
||||
// NTSC 1.0, Gamecube, and all the other versions
|
||||
#define LN3(ntsc_1_0, other, gc) \
|
||||
LN(ntsc_1_0, other, other, other, other, gc, gc, gc, gc, gc, gc, gc, gc, gc)
|
||||
|
||||
// NTSC 1.0, NTSC 1.1, Gamecube, and all the other versions
|
||||
#define LN4(ntsc_1_0, ntsc_1_1, other, gc) \
|
||||
LN(ntsc_1_0, ntsc_1_1, other, other, other, gc, gc, gc, gc, gc, gc, gc, gc, gc)
|
||||
|
||||
// NTSC 1.0, NTSC 1.1, NTSC 1.2/PAL 1.0, Gamecube US/JP, Gamecube EU, and Gamecube CE
|
||||
#define LN5(ntsc_1_0, ntsc_1_1, other, pal_1_1, gc_ntsc, gc_eu, gc_jp_ce) \
|
||||
LN(ntsc_1_0, ntsc_1_1, other, other, pal_1_1, gc_ntsc, gc_ntsc, gc_ntsc, gc_ntsc, gc_eu, gc_eu, gc_eu, gc_jp_ce, gc_jp_ce)
|
||||
|
||||
#endif
|
|
@ -118,6 +118,8 @@
|
|||
#define R_MESSAGE_DEBUGGER_TEXTID YREG(79)
|
||||
#define R_C_UP_ICON_X YREG(88)
|
||||
#define R_C_UP_ICON_Y YREG(89)
|
||||
#define R_EXITED_SCENE_RIDING_HORSE AREG(6) // Used to spawn the player on top of Epona in the next scene
|
||||
#define R_DEBUG_FORCE_EPONA_OBTAINED DREG(1) // If set, overrides EVENTCHKINF_EPONA_OBTAINED state giving Epona
|
||||
#define R_EPONAS_SONG_PLAYED DREG(53)
|
||||
#define R_MAGIC_FILL_COLOR(i) ZREG(0 + (i))
|
||||
#define R_PAUSE_PAGE_SWITCH_FRAME_ADVANCE_ON ZREG(13)
|
||||
|
|
|
@ -133,8 +133,8 @@ extern s32 gSystemArenaLogSeverity;
|
|||
extern u8 __osPfsInodeCacheBank;
|
||||
extern s32 __osPfsLastChannel;
|
||||
|
||||
extern const TempoData gTempoData;
|
||||
extern const AudioHeapInitSizes gAudioHeapInitSizes;
|
||||
extern TempoData gTempoData;
|
||||
extern AudioHeapInitSizes gAudioHeapInitSizes;
|
||||
extern s16 gOcarinaSongItemMap[];
|
||||
extern AudioTable gSoundFontTable;
|
||||
extern u8 gSequenceFontTable[];
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#define GC_EU 11
|
||||
#define GC_EU_MQ 12
|
||||
#define GC_JP_CE 13
|
||||
#define IQUE_CN 14
|
||||
|
||||
// NTSC/PAL
|
||||
#if OOT_VERSION == PAL_1_0 || OOT_VERSION == PAL_1_1 || OOT_VERSION == GC_EU || OOT_VERSION == GC_EU_MQ || OOT_VERSION == GC_EU_MQ_DBG
|
||||
|
|
|
@ -838,10 +838,10 @@ int func_8002DD78(struct Player* player);
|
|||
s32 func_8002DDE4(struct PlayState* play);
|
||||
s32 func_8002DDF4(struct PlayState* play);
|
||||
void Actor_SwapHookshotAttachment(struct PlayState* play, Actor* srcActor, Actor* destActor);
|
||||
void func_8002DE74(struct PlayState* play, struct Player* player);
|
||||
void Actor_RequestHorseCameraSetting(struct PlayState* play, struct Player* player);
|
||||
void Actor_MountHorse(struct PlayState* play, struct Player* player, Actor* horse);
|
||||
int func_8002DEEC(struct Player* player);
|
||||
void func_8002DF18(struct PlayState* play, struct Player* player);
|
||||
void Actor_InitPlayerHorse(struct PlayState* play, struct Player* player);
|
||||
s32 Player_SetCsAction(struct PlayState* play, Actor* csActor, u8 csAction);
|
||||
s32 Player_SetCsActionWithHaltedActors(struct PlayState* play, Actor* csActor, u8 csAction);
|
||||
void func_8002DF90(DynaPolyActor* dynaActor);
|
||||
|
@ -868,7 +868,7 @@ s32 Actor_OfferTalkExchangeEquiCylinder(Actor* actor, struct PlayState* play, f3
|
|||
s32 Actor_OfferTalk(Actor* actor, struct PlayState* play, f32 radius);
|
||||
s32 Actor_OfferTalkNearColChkInfoCylinder(Actor* actor, struct PlayState* play);
|
||||
u32 Actor_TextboxIsClosing(Actor* actor, struct PlayState* play);
|
||||
s8 func_8002F368(struct PlayState* play);
|
||||
s8 Actor_GetPlayerExchangeItemId(struct PlayState* play);
|
||||
void Actor_GetScreenPos(struct PlayState* play, Actor* actor, s16* x, s16* y);
|
||||
u32 Actor_HasParent(Actor* actor, struct PlayState* play);
|
||||
s32 Actor_OfferGetItem(Actor* actor, struct PlayState* play, s32 getItemId, f32 xzRange, f32 yRange);
|
||||
|
|
16
include/z64horse.h
Normal file
16
include/z64horse.h
Normal file
|
@ -0,0 +1,16 @@
|
|||
#ifndef Z64HORSE_H
|
||||
#define Z64HORSE_H
|
||||
|
||||
#include "ultra64.h"
|
||||
#include "z64math.h"
|
||||
|
||||
struct PlayState;
|
||||
struct Actor;
|
||||
struct Player;
|
||||
|
||||
void Horse_ResetHorseData(struct PlayState* play);
|
||||
void Horse_FixLakeHyliaPosition(struct PlayState* play);
|
||||
void Horse_InitPlayerHorse(struct PlayState* play, struct Player* player);
|
||||
void Horse_RotateToPoint(struct Actor* actor, Vec3f* pos, s16 turnAmount);
|
||||
|
||||
#endif
|
|
@ -470,14 +470,18 @@ typedef enum LinkAge {
|
|||
* When this is the case, an EVENTCHKINF_INDEX_* constant is defined for accessing a specific eventChkInf variable.
|
||||
*/
|
||||
|
||||
#define GET_EVENTCHKINF(flag) (gSaveContext.save.info.eventChkInf[(flag) >> 4] & (1 << ((flag) & 0xF)))
|
||||
#define SET_EVENTCHKINF(flag) (gSaveContext.save.info.eventChkInf[(flag) >> 4] |= (1 << ((flag) & 0xF)))
|
||||
#define CLEAR_EVENTCHKINF(flag) (gSaveContext.save.info.eventChkInf[(flag) >> 4] &= ~(1 << ((flag) & 0xF)))
|
||||
#define EVENTCHKINF_INDEX(flag) ((flag) >> 4)
|
||||
#define EVENTCHKINF_MASK(flag) (1 << ((flag) & 0xF))
|
||||
|
||||
#define GET_EVENTCHKINF_VAR(flag) (gSaveContext.save.info.eventChkInf[(flag) >> 4])
|
||||
#define GET_EVENTCHKINF_MASK(flag) (1 << ((flag) & 0xF))
|
||||
#define GET_EVENTCHKINF(flag) (gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX(flag)] & EVENTCHKINF_MASK(flag))
|
||||
#define SET_EVENTCHKINF(flag) (gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX(flag)] |= EVENTCHKINF_MASK(flag))
|
||||
#define CLEAR_EVENTCHKINF(flag) (gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX(flag)] &= ~EVENTCHKINF_MASK(flag))
|
||||
|
||||
#define GET_EVENTCHKINF_VAR(flag) (gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX(flag)])
|
||||
#define EVENTCHKINF_MASK(flag) (1 << ((flag) & 0xF))
|
||||
|
||||
// EVENTCHKINF 0x00-0x0F
|
||||
#define EVENTCHKINF_INDEX_0 0
|
||||
#define EVENTCHKINF_00_UNUSED 0x00 // flag is set in the debug save, but has no functionality
|
||||
#define EVENTCHKINF_01_UNUSED 0x01 // flag is set in the debug save, but has no functionality
|
||||
#define EVENTCHKINF_MIDO_DENIED_DEKU_TREE_ACCESS 0x02
|
||||
|
@ -524,7 +528,7 @@ typedef enum LinkAge {
|
|||
#define EVENTCHKINF_DEFEATED_NABOORU_KNUCKLE 0x3C
|
||||
|
||||
// EVENTCHKINF 0x40
|
||||
#define EVENTCHKINF_INDEX_40 (EVENTCHKINF_40 >> 4)
|
||||
#define EVENTCHKINF_INDEX_40 EVENTCHKINF_INDEX(EVENTCHKINF_40)
|
||||
#define EVENTCHKINF_40 0x40
|
||||
|
||||
#define EVENTCHKINF_41 0x41
|
||||
|
@ -538,7 +542,7 @@ typedef enum LinkAge {
|
|||
#define EVENTCHKINF_4C 0x4C
|
||||
#define EVENTCHKINF_CREATED_RAINBOW_BRIDGE 0x4D
|
||||
#define EVENTCHKINF_CAUGHT_BY_CASTLE_GUARDS 0x4E // set but unused
|
||||
#define EVENTCHKINF_WATCHED_SHEIK_AFTER_MASTER_SWORD_CS 0x4F // Cutscene in Temple of Time as adult after pulling the Master Sword for the first time
|
||||
#define EVENTCHKINF_REVEALED_MASTER_SWORD 0x4F // Cutscene in Temple of Time when entering the Master Sword chamber for the first time
|
||||
#define EVENTCHKINF_50 0x50
|
||||
#define EVENTCHKINF_51 0x51
|
||||
#define EVENTCHKINF_52 0x52
|
||||
|
@ -555,22 +559,23 @@ typedef enum LinkAge {
|
|||
#define EVENTCHKINF_TALON_WOKEN_IN_KAKARIKO 0x6A
|
||||
|
||||
// EVENTCHKINF 0x6B
|
||||
#define EVENTCHKINF_INDEX_TALON_RETURNED_FROM_KAKARIKO EVENTCHKINF_INDEX(EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO)
|
||||
#define EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO 0x6B
|
||||
|
||||
#define ENHY_GET_COPY_EVENTCHKINF(flag) GET_EVENTCHKINF_VAR(flag)
|
||||
#define ENHY_CHECK_COPY_EVENTCHKINF(v, flag) ((v) & GET_EVENTCHKINF_MASK((flag)))
|
||||
#define ENHY_CHECK_COPY_EVENTCHKINF(v, flag) ((v) & EVENTCHKINF_MASK((flag)))
|
||||
|
||||
#define EVENTCHKINF_6E 0x6E
|
||||
#define EVENTCHKINF_6F 0x6F
|
||||
#define EVENTCHKINF_70 0x70
|
||||
#define EVENTCHKINF_71 0x71
|
||||
#define EVENTCHKINF_72 0x72
|
||||
#define EVENTCHKINF_73 0x73
|
||||
#define EVENTCHKINF_74 0x74
|
||||
#define EVENTCHKINF_75 0x75
|
||||
#define EVENTCHKINF_76 0x76
|
||||
#define EVENTCHKINF_77 0x77
|
||||
#define EVENTCHKINF_78 0x78
|
||||
#define EVENTCHKINF_BEGAN_GOHMA_BATTLE 0x70
|
||||
#define EVENTCHKINF_BEGAN_KING_DODONGO_BATTLE 0x71
|
||||
#define EVENTCHKINF_BEGAN_PHANTOM_GANON_BATTLE 0x72
|
||||
#define EVENTCHKINF_BEGAN_VOLVAGIA_BATTLE 0x73
|
||||
#define EVENTCHKINF_BEGAN_MORPHA_BATTLE 0x74
|
||||
#define EVENTCHKINF_BEGAN_TWINROVA_BATTLE 0x75
|
||||
#define EVENTCHKINF_BEGAN_BARINADE_BATTLE 0x76
|
||||
#define EVENTCHKINF_BEGAN_BONGO_BONGO_BATTLE 0x77
|
||||
#define EVENTCHKINF_BEGAN_GANONDORF_BATTLE 0x78
|
||||
#define EVENTCHKINF_80 0x80
|
||||
#define EVENTCHKINF_82 0x82
|
||||
#define EVENTCHKINF_PAID_BACK_KEATON_MASK 0x8C
|
||||
|
@ -587,10 +592,10 @@ typedef enum LinkAge {
|
|||
#define EVENTCHKINF_CARPENTER_3_FREED 0x93
|
||||
|
||||
#define EVENTCHKINF_CARPENTERS_FREE_MASK_ALL \
|
||||
( GET_EVENTCHKINF_MASK(EVENTCHKINF_CARPENTER_0_FREED) \
|
||||
| GET_EVENTCHKINF_MASK(EVENTCHKINF_CARPENTER_1_FREED) \
|
||||
| GET_EVENTCHKINF_MASK(EVENTCHKINF_CARPENTER_2_FREED) \
|
||||
| GET_EVENTCHKINF_MASK(EVENTCHKINF_CARPENTER_3_FREED))
|
||||
( EVENTCHKINF_MASK(EVENTCHKINF_CARPENTER_0_FREED) \
|
||||
| EVENTCHKINF_MASK(EVENTCHKINF_CARPENTER_1_FREED) \
|
||||
| EVENTCHKINF_MASK(EVENTCHKINF_CARPENTER_2_FREED) \
|
||||
| EVENTCHKINF_MASK(EVENTCHKINF_CARPENTER_3_FREED))
|
||||
|
||||
#define GET_EVENTCHKINF_CARPENTERS_FREE_ALL() \
|
||||
CHECK_FLAG_ALL(gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX_CARPENTERS_FREED], \
|
||||
|
@ -657,7 +662,7 @@ typedef enum LinkAge {
|
|||
#define EVENTCHKINF_C9 0xC9
|
||||
|
||||
// EVENTCHKINF 0xD0-0xD6
|
||||
#define EVENTCHKINF_INDEX_SONGS_FOR_FROGS (EVENTCHKINF_SONGS_FOR_FROGS_CHOIR >> 4)
|
||||
#define EVENTCHKINF_INDEX_SONGS_FOR_FROGS EVENTCHKINF_INDEX(EVENTCHKINF_SONGS_FOR_FROGS_CHOIR)
|
||||
#define EVENTCHKINF_SONGS_FOR_FROGS_CHOIR 0xD0
|
||||
#define EVENTCHKINF_SONGS_FOR_FROGS_ZL 0xD1
|
||||
#define EVENTCHKINF_SONGS_FOR_FROGS_EPONA 0xD2
|
||||
|
@ -667,7 +672,7 @@ typedef enum LinkAge {
|
|||
#define EVENTCHKINF_SONGS_FOR_FROGS_STORMS 0xD6
|
||||
|
||||
// EVENTCHKINF 0xDA-0xDE
|
||||
#define EVENTCHKINF_INDEX_SKULLTULA_REWARD (EVENTCHKINF_SKULLTULA_REWARD_10 >> 4)
|
||||
#define EVENTCHKINF_INDEX_SKULLTULA_REWARD EVENTCHKINF_INDEX(EVENTCHKINF_SKULLTULA_REWARD_10)
|
||||
#define EVENTCHKINF_SKULLTULA_REWARD_10 0xDA
|
||||
#define EVENTCHKINF_SKULLTULA_REWARD_20 0xDB
|
||||
#define EVENTCHKINF_SKULLTULA_REWARD_30 0xDC
|
||||
|
@ -687,10 +692,11 @@ typedef enum LinkAge {
|
|||
* When this is the case, an ITEMGETINF_INDEX_* constant is defined for accessing a specific itemGetInf variable.
|
||||
*/
|
||||
|
||||
#define GET_ITEMGETINF(flag) (gSaveContext.save.info.itemGetInf[(flag) >> 4] & (1 << ((flag) & 0xF)))
|
||||
#define SET_ITEMGETINF(flag) (gSaveContext.save.info.itemGetInf[(flag) >> 4] |= (1 << ((flag) & 0xF)))
|
||||
#define ITEMGETINF_INDEX(flag) ((flag) >> 4)
|
||||
#define ITEMGETINF_MASK(flag) (1 << ((flag) & 0xF))
|
||||
|
||||
#define GET_ITEMGETINF_MASK(flag) (1 << ((flag) & 0xF))
|
||||
#define GET_ITEMGETINF(flag) (gSaveContext.save.info.itemGetInf[ITEMGETINF_INDEX(flag)] & ITEMGETINF_MASK(flag))
|
||||
#define SET_ITEMGETINF(flag) (gSaveContext.save.info.itemGetInf[ITEMGETINF_INDEX(flag)] |= ITEMGETINF_MASK(flag))
|
||||
|
||||
#define ITEMGETINF_TALON_BOTTLE 0x02
|
||||
#define ITEMGETINF_03 0x03
|
||||
|
@ -715,7 +721,7 @@ typedef enum LinkAge {
|
|||
#define ITEMGETINF_17 0x17
|
||||
|
||||
// ITEMGETINF 0x18-0x1A
|
||||
#define ITEMGETINF_INDEX_GREAT_FAIRY_ITEM (ITEMGETINF_FARORES_WIND >> 4)
|
||||
#define ITEMGETINF_INDEX_GREAT_FAIRY_ITEM 1
|
||||
#define ITEMGETINF_FARORES_WIND 0x18
|
||||
#define ITEMGETINF_DINS_FIRE 0x19
|
||||
#define ITEMGETINF_NAYRUS_LOVE 0x1A
|
||||
|
@ -755,12 +761,15 @@ typedef enum LinkAge {
|
|||
* When this is the case, an INFTABLE_INDEX_* constant is defined for accessing a specific infTable variable.
|
||||
*/
|
||||
|
||||
#define GET_INFTABLE(flag) (gSaveContext.save.info.infTable[(flag) >> 4] & (1 << ((flag) & 0xF)))
|
||||
#define SET_INFTABLE(flag) (gSaveContext.save.info.infTable[(flag) >> 4] |= (1 << ((flag) & 0xF)))
|
||||
#define CLEAR_INFTABLE(flag) (gSaveContext.save.info.infTable[(flag) >> 4] &= ~(1 << ((flag) & 0xF)))
|
||||
#define INFTABLE_INDEX(flag) ((flag) >> 4)
|
||||
#define INFTABLE_MASK(flag) (1 << ((flag) & 0xF))
|
||||
|
||||
#define GET_INFTABLE_MASK(flag) (1 << ((flag) & 0xF))
|
||||
#define GET_INFTABLE(flag) (gSaveContext.save.info.infTable[INFTABLE_INDEX(flag)] & INFTABLE_MASK(flag))
|
||||
#define SET_INFTABLE(flag) (gSaveContext.save.info.infTable[INFTABLE_INDEX(flag)] |= INFTABLE_MASK(flag))
|
||||
#define CLEAR_INFTABLE(flag) (gSaveContext.save.info.infTable[INFTABLE_INDEX(flag)] &= ~INFTABLE_MASK(flag))
|
||||
|
||||
// INFTABLE 0x0-0xF
|
||||
#define INFTABLE_INDEX_0 0
|
||||
#define INFTABLE_00 0x00
|
||||
#define INFTABLE_01 0x01
|
||||
#define INFTABLE_03 0x03
|
||||
|
@ -900,13 +909,13 @@ typedef enum LinkAge {
|
|||
|
||||
#define INFTABLE_RESET_KAKARIKO_CUCCOS() \
|
||||
gSaveContext.save.info.infTable[INFTABLE_INDEX_KAKARIKO_CUCCO] &= \
|
||||
(u16) ~(GET_INFTABLE_MASK(INFTABLE_199) | GET_INFTABLE_MASK(INFTABLE_19A) | GET_INFTABLE_MASK(INFTABLE_19B) | \
|
||||
GET_INFTABLE_MASK(INFTABLE_19C) | GET_INFTABLE_MASK(INFTABLE_19D) | GET_INFTABLE_MASK(INFTABLE_19E) | \
|
||||
GET_INFTABLE_MASK(INFTABLE_19F));
|
||||
(u16) ~(INFTABLE_MASK(INFTABLE_199) | INFTABLE_MASK(INFTABLE_19A) | INFTABLE_MASK(INFTABLE_19B) | \
|
||||
INFTABLE_MASK(INFTABLE_19C) | INFTABLE_MASK(INFTABLE_19D) | INFTABLE_MASK(INFTABLE_19E) | \
|
||||
INFTABLE_MASK(INFTABLE_19F));
|
||||
|
||||
|
||||
// INFTABLE 0x1A0-0x1AF
|
||||
#define INFTABLE_INDEX_OVERWORLD_ENTRANCE_ICON (INFTABLE_1A0 >> 4)
|
||||
#define INFTABLE_INDEX_OVERWORLD_ENTRANCE_ICON INFTABLE_INDEX(INFTABLE_1A0)
|
||||
#define INFTABLE_1A0 0x1A0
|
||||
#define INFTABLE_1A1 0x1A1
|
||||
#define INFTABLE_1A2 0x1A2
|
||||
|
@ -935,7 +944,7 @@ typedef enum LinkAge {
|
|||
#define MINIMAP_INFTABLE_TO_OW_ENTRANCE_FLAG(flag) ((flag) - INFTABLE_1A0)
|
||||
|
||||
// 0x1D0-0x1DF
|
||||
#define INFTABLE_INDEX_1DX (0x1D0 >> 4)
|
||||
#define INFTABLE_INDEX_1DX INFTABLE_INDEX(INFTABLE_1D0)
|
||||
#define INFTABLE_1D0 0x1D0
|
||||
|
||||
|
||||
|
@ -950,9 +959,12 @@ typedef enum LinkAge {
|
|||
* When this is the case, an EVENTINF_INDEX_* constant is defined for accessing a specific eventInf variable.
|
||||
*/
|
||||
|
||||
#define GET_EVENTINF(flag) (gSaveContext.eventInf[(flag) >> 4] & (1 << ((flag) & 0xF)))
|
||||
#define SET_EVENTINF(flag) (gSaveContext.eventInf[(flag) >> 4] |= (1 << ((flag) & 0xF)))
|
||||
#define CLEAR_EVENTINF(flag) (gSaveContext.eventInf[(flag) >> 4] &= ~(1 << ((flag) & 0xF)))
|
||||
#define EVENTINF_INDEX(flag) ((flag) >> 4)
|
||||
#define EVENTINF_MASK(flag) (1 << ((flag) & 0xF))
|
||||
|
||||
#define GET_EVENTINF(flag) (gSaveContext.eventInf[EVENTINF_INDEX(flag)] & EVENTINF_MASK(flag))
|
||||
#define SET_EVENTINF(flag) (gSaveContext.eventInf[EVENTINF_INDEX(flag)] |= EVENTINF_MASK(flag))
|
||||
#define CLEAR_EVENTINF(flag) (gSaveContext.eventInf[EVENTINF_INDEX(flag)] &= ~EVENTINF_MASK(flag))
|
||||
#define RESET_EVENTINF() \
|
||||
gSaveContext.eventInf[0] = 0; \
|
||||
gSaveContext.eventInf[1] = 0; \
|
||||
|
@ -961,29 +973,27 @@ typedef enum LinkAge {
|
|||
#define RESET_EVENTINF2() \
|
||||
gSaveContext.eventInf[0] = gSaveContext.eventInf[1] = gSaveContext.eventInf[2] = gSaveContext.eventInf[3] = 0;
|
||||
|
||||
#define GET_EVENTINF_MASK(flag) (1 << ((flag) & 0xF))
|
||||
|
||||
// EVENTINF 0x00-0x0F
|
||||
// Ingo Race, Lon Lon Ranch minigames, and Horseback Archery minigame flags
|
||||
#define EVENTINF_INDEX_INGORACE (0x00 >> 4)
|
||||
#define EVENTINF_INDEX_INGO_RACE 0
|
||||
// EVENTINF 0x00-0x03 reserved for IngoRaceState
|
||||
#define EVENTINF_INGORACE_STATE_MASK \
|
||||
(GET_EVENTINF_MASK(0x00) | GET_EVENTINF_MASK(0x01) | GET_EVENTINF_MASK(0x02) | GET_EVENTINF_MASK(0x03))
|
||||
#define EVENTINF_INGO_RACE_STATE_MASK \
|
||||
(EVENTINF_MASK(0x00) | EVENTINF_MASK(0x01) | EVENTINF_MASK(0x02) | EVENTINF_MASK(0x03))
|
||||
|
||||
typedef enum IngoRaceState {
|
||||
/* 0 */ INGORACE_STATE_OFFER_RENTAL,
|
||||
/* 1 */ INGORACE_STATE_HORSE_RENTAL_PERIOD,
|
||||
/* 2 */ INGORACE_STATE_RACING,
|
||||
/* 3 */ INGORACE_STATE_PLAYER_LOSE,
|
||||
/* 4 */ INGORACE_STATE_FIRST_WIN,
|
||||
/* 5 */ INGORACE_STATE_TRAPPED_WIN_UNUSED,
|
||||
/* 6 */ INGORACE_STATE_TRAPPED_WIN_EPONA, // Ingo Traps you in Lon Lon
|
||||
/* 7 */ INGORACE_STATE_REMATCH
|
||||
/* 0 */ INGO_RACE_STATE_OFFER_RENTAL,
|
||||
/* 1 */ INGO_RACE_STATE_HORSE_RENTAL_PERIOD,
|
||||
/* 2 */ INGO_RACE_STATE_RACING,
|
||||
/* 3 */ INGO_RACE_STATE_PLAYER_LOSE,
|
||||
/* 4 */ INGO_RACE_STATE_FIRST_WIN,
|
||||
/* 5 */ INGO_RACE_STATE_TRAPPED_WIN_UNUSED,
|
||||
/* 6 */ INGO_RACE_STATE_TRAPPED_WIN_EPONA, // Ingo Traps you in Lon Lon
|
||||
/* 7 */ INGO_RACE_STATE_REMATCH
|
||||
} IngoRaceState;
|
||||
|
||||
#define EVENTINF_INGORACE_HORSETYPE 0x04
|
||||
#define EVENTINF_INGORACE_LOST_ONCE 0x05
|
||||
#define EVENTINF_INGORACE_SECOND_RACE 0x06
|
||||
#define EVENTINF_INGO_RACE_HORSETYPE 0x04
|
||||
#define EVENTINF_INGO_RACE_LOST_ONCE 0x05
|
||||
#define EVENTINF_INGO_RACE_SECOND_RACE 0x06
|
||||
// Used in z_en_ta (Talon) to store Cucco game winning status
|
||||
// and in z_en_ge1 (Gerudo) to store archery in-progress status
|
||||
#define EVENTINF_HORSES_08 0x08
|
||||
|
@ -991,37 +1001,37 @@ typedef enum IngoRaceState {
|
|||
// Used in z_en_ta (Talon) and z_en_ma3 (Malon) to store minigame finishing status
|
||||
#define EVENTINF_HORSES_0A 0x0A
|
||||
#define EVENTINF_CUCCO_GAME_FINISHED EVENTINF_HORSES_0A
|
||||
#define EVENTINF_INGORACE_0F 0x0F // unused?
|
||||
#define EVENTINF_INGO_RACE_0F 0x0F // unused?
|
||||
|
||||
// "InRaceSeq"
|
||||
#define GET_EVENTINF_INGORACE_STATE() (gSaveContext.eventInf[EVENTINF_INDEX_INGORACE] & EVENTINF_INGORACE_STATE_MASK)
|
||||
#define GET_EVENTINF_INGO_RACE_STATE() (gSaveContext.eventInf[EVENTINF_INDEX_INGO_RACE] & EVENTINF_INGO_RACE_STATE_MASK)
|
||||
|
||||
#define SET_EVENTINF_INGORACE_STATE(v) \
|
||||
gSaveContext.eventInf[EVENTINF_INDEX_INGORACE] = \
|
||||
(gSaveContext.eventInf[EVENTINF_INDEX_INGORACE] & ~EVENTINF_INGORACE_STATE_MASK) | (v)
|
||||
#define SET_EVENTINF_INGO_RACE_STATE(v) \
|
||||
gSaveContext.eventInf[EVENTINF_INDEX_INGO_RACE] = \
|
||||
(gSaveContext.eventInf[EVENTINF_INDEX_INGO_RACE] & ~EVENTINF_INGO_RACE_STATE_MASK) | (v)
|
||||
|
||||
#define SET_EVENTINF_INGORACE_FLAG(flag) \
|
||||
gSaveContext.eventInf[EVENTINF_INDEX_INGORACE] = \
|
||||
(gSaveContext.eventInf[EVENTINF_INDEX_INGORACE] & 0xFFFF) | (1 << ((flag) & 0xF))
|
||||
#define SET_EVENTINF_INGO_RACE_FLAG(flag) \
|
||||
gSaveContext.eventInf[EVENTINF_INDEX_INGO_RACE] = \
|
||||
(gSaveContext.eventInf[EVENTINF_INDEX_INGO_RACE] & 0xFFFF) | (1 << ((flag) & 0xF))
|
||||
|
||||
#define WRITE_EVENTINF_INGORACE_FLAG(flag, v) \
|
||||
gSaveContext.eventInf[EVENTINF_INDEX_INGORACE] = \
|
||||
(gSaveContext.eventInf[EVENTINF_INDEX_INGORACE] & ~(1 << ((flag)&0xF))) | ((v) << ((flag) & 0xF))
|
||||
#define WRITE_EVENTINF_INGO_RACE_FLAG(flag, v) \
|
||||
gSaveContext.eventInf[EVENTINF_INDEX_INGO_RACE] = \
|
||||
(gSaveContext.eventInf[EVENTINF_INDEX_INGO_RACE] & ~(1 << ((flag)&0xF))) | ((v) << ((flag) & 0xF))
|
||||
|
||||
#define RESET_EVENTINF_INGORACE() \
|
||||
gSaveContext.eventInf[EVENTINF_INDEX_INGORACE] &= \
|
||||
(u16) ~(EVENTINF_INGORACE_STATE_MASK | GET_EVENTINF_MASK(EVENTINF_INGORACE_HORSETYPE) | \
|
||||
GET_EVENTINF_MASK(EVENTINF_INGORACE_LOST_ONCE) | GET_EVENTINF_MASK(EVENTINF_INGORACE_SECOND_RACE) | \
|
||||
GET_EVENTINF_MASK(EVENTINF_INGORACE_0F))
|
||||
#define RESET_EVENTINF_INGO_RACE() \
|
||||
gSaveContext.eventInf[EVENTINF_INDEX_INGO_RACE] &= \
|
||||
(u16) ~(EVENTINF_INGO_RACE_STATE_MASK | EVENTINF_MASK(EVENTINF_INGO_RACE_HORSETYPE) | \
|
||||
EVENTINF_MASK(EVENTINF_INGO_RACE_LOST_ONCE) | EVENTINF_MASK(EVENTINF_INGO_RACE_SECOND_RACE) | \
|
||||
EVENTINF_MASK(EVENTINF_INGO_RACE_0F))
|
||||
|
||||
#define RESET_EVENTINF_INGORACE2() \
|
||||
gSaveContext.eventInf[EVENTINF_INDEX_INGORACE] = 0;
|
||||
#define RESET_EVENTINF_INGO_RACE2() \
|
||||
gSaveContext.eventInf[EVENTINF_INDEX_INGO_RACE] = 0;
|
||||
|
||||
#define GET_EVENTINF_INGORACE_HORSETYPE() \
|
||||
(GET_EVENTINF(EVENTINF_INGORACE_HORSETYPE) >> (EVENTINF_INGORACE_HORSETYPE & 0xF))
|
||||
#define WRITE_EVENTINF_INGORACE_HORSETYPE(v) WRITE_EVENTINF_INGORACE_FLAG(EVENTINF_INGORACE_HORSETYPE, v)
|
||||
#define GET_EVENTINF_INGO_RACE_HORSETYPE() \
|
||||
(GET_EVENTINF(EVENTINF_INGO_RACE_HORSETYPE) >> (EVENTINF_INGO_RACE_HORSETYPE & 0xF))
|
||||
#define WRITE_EVENTINF_INGO_RACE_HORSETYPE(v) WRITE_EVENTINF_INGO_RACE_FLAG(EVENTINF_INGO_RACE_HORSETYPE, v)
|
||||
|
||||
#define WRITE_EVENTINF_INGORACE_0F(v) WRITE_EVENTINF_INGORACE_FLAG(EVENTINF_INGORACE_0F, v)
|
||||
#define WRITE_EVENTINF_INGO_RACE_0F(v) WRITE_EVENTINF_INGO_RACE_FLAG(EVENTINF_INGO_RACE_0F, v)
|
||||
|
||||
// Is the running man race active
|
||||
#define EVENTINF_MARATHON_ACTIVE 0x10
|
||||
|
@ -1035,8 +1045,8 @@ typedef enum IngoRaceState {
|
|||
#define EVENTINF_24 0x24
|
||||
|
||||
#define EVENTINF_HAGGLING_TOWNSFOLK_MASK \
|
||||
(GET_EVENTINF_MASK(EVENTINF_20) | GET_EVENTINF_MASK(EVENTINF_21) | GET_EVENTINF_MASK(EVENTINF_22) | \
|
||||
GET_EVENTINF_MASK(EVENTINF_23) | GET_EVENTINF_MASK(EVENTINF_24))
|
||||
(EVENTINF_MASK(EVENTINF_20) | EVENTINF_MASK(EVENTINF_21) | EVENTINF_MASK(EVENTINF_22) | \
|
||||
EVENTINF_MASK(EVENTINF_23) | EVENTINF_MASK(EVENTINF_24))
|
||||
|
||||
#define ENMU_GET_TALK_FLAGS() \
|
||||
gSaveContext.eventInf[EVENTINF_INDEX_HAGGLING_TOWNSFOLK] & EVENTINF_HAGGLING_TOWNSFOLK_MASK
|
||||
|
|
3
spec
3
spec
|
@ -740,6 +740,7 @@ beginseg
|
|||
include "$(BUILD_DIR)/src/audio/sequence.o"
|
||||
include "$(BUILD_DIR)/src/audio/data.o"
|
||||
include "$(BUILD_DIR)/src/audio/session_config.o"
|
||||
include "$(BUILD_DIR)/src/audio/session_init.o"
|
||||
#if PLATFORM_N64
|
||||
include "$(BUILD_DIR)/src/libu64/gfxprint.o"
|
||||
include "$(BUILD_DIR)/src/libu64/rcp_utils.o"
|
||||
|
@ -889,7 +890,7 @@ beginseg
|
|||
include "$(BUILD_DIR)/src/libultra/mgu/translate.o"
|
||||
#endif
|
||||
include "$(BUILD_DIR)/src/libultra/io/contramwrite.o"
|
||||
#if OOT_VERSION == NTSC_1_2 || (PLATFORM_GC && !DEBUG_FEATURES)
|
||||
#if OOT_VERSION >= PAL_1_0 && !(OOT_PAL_N64 || DEBUG_FEATURES)
|
||||
include "$(BUILD_DIR)/src/libultra/io/vimodefpallan1.o"
|
||||
#endif
|
||||
#if !DEBUG_FEATURES
|
||||
|
|
|
@ -1250,8 +1250,7 @@ void AudioLoad_Init(void* heap, u32 heapSize) {
|
|||
|
||||
ramAddr = AudioHeap_Alloc(&gAudioCtx.initPool, gAudioHeapInitSizes.permanentPoolSize);
|
||||
if (ramAddr == NULL) {
|
||||
// cast away const from gAudioHeapInitSizes
|
||||
*((u32*)&gAudioHeapInitSizes.permanentPoolSize) = 0;
|
||||
gAudioHeapInitSizes.permanentPoolSize = 0;
|
||||
}
|
||||
|
||||
AudioHeap_InitPool(&gAudioCtx.permanentPool, ramAddr, gAudioHeapInitSizes.permanentPoolSize);
|
||||
|
|
|
@ -1,33 +1,9 @@
|
|||
#include "global.h"
|
||||
#include "assets/audio/sequence_sizes.h"
|
||||
#include "assets/audio/soundfont_sizes.h"
|
||||
#define SFX_SEQ_SIZE Sequence_0_SIZE
|
||||
#define SFX_SOUNDFONTS_SIZE (Soundfont_0_SIZE + Soundfont_1_SIZE)
|
||||
|
||||
AudioContext gAudioCtx;
|
||||
AudioCustomUpdateFunction gAudioCustomUpdateFunction;
|
||||
s32 D_801755D8[3]; // unused
|
||||
|
||||
const TempoData gTempoData = {
|
||||
0x1C00, // unk_00
|
||||
SEQTICKS_PER_BEAT, // seqTicksPerBeat
|
||||
};
|
||||
|
||||
// Sizes of everything on the init pool
|
||||
#define AI_BUFFERS_SIZE (AIBUF_SIZE * ARRAY_COUNT(gAudioCtx.aiBuffers))
|
||||
#define SOUNDFONT_LIST_SIZE (NUM_SOUNDFONTS * sizeof(SoundFont))
|
||||
#if OOT_VERSION < PAL_1_0 || PLATFORM_GC
|
||||
#define PERMANENT_POOL_SIZE (SFX_SEQ_SIZE + SFX_SOUNDFONTS_SIZE)
|
||||
#else
|
||||
#define PERMANENT_POOL_SIZE (SFX_SEQ_SIZE + SFX_SOUNDFONTS_SIZE + 0x10)
|
||||
#endif
|
||||
|
||||
const AudioHeapInitSizes gAudioHeapInitSizes = {
|
||||
ALIGN16(sizeof(gAudioHeap) - 0x100), // audio heap size
|
||||
ALIGN16(PERMANENT_POOL_SIZE + AI_BUFFERS_SIZE + SOUNDFONT_LIST_SIZE), // init pool size
|
||||
ALIGN16(PERMANENT_POOL_SIZE), // permanent pool size
|
||||
};
|
||||
|
||||
#define DEFAULT_REVERB_SETTINGS \
|
||||
{ 1, 0x30, 0x3000, 0, 0, 0x7FFF, 0x0000, 0x0000, 0xFF, 0x3000, 0x0, 0x0 }
|
||||
|
||||
|
|
26
src/audio/session_init.c
Normal file
26
src/audio/session_init.c
Normal file
|
@ -0,0 +1,26 @@
|
|||
#include "global.h"
|
||||
#include "assets/audio/sequence_sizes.h"
|
||||
#include "assets/audio/soundfont_sizes.h"
|
||||
|
||||
#define SFX_SEQ_SIZE Sequence_0_SIZE
|
||||
#define SFX_SOUNDFONTS_SIZE (Soundfont_0_SIZE + Soundfont_1_SIZE)
|
||||
|
||||
TempoData gTempoData = {
|
||||
0x1C00, // unk_00
|
||||
SEQTICKS_PER_BEAT, // seqTicksPerBeat
|
||||
};
|
||||
|
||||
// Sizes of everything on the init pool
|
||||
#define AI_BUFFERS_SIZE (AIBUF_SIZE * ARRAY_COUNT(gAudioCtx.aiBuffers))
|
||||
#define SOUNDFONT_LIST_SIZE (NUM_SOUNDFONTS * sizeof(SoundFont))
|
||||
#if OOT_VERSION < PAL_1_0 || PLATFORM_GC
|
||||
#define PERMANENT_POOL_SIZE (SFX_SEQ_SIZE + SFX_SOUNDFONTS_SIZE)
|
||||
#else
|
||||
#define PERMANENT_POOL_SIZE (SFX_SEQ_SIZE + SFX_SOUNDFONTS_SIZE + 0x10)
|
||||
#endif
|
||||
|
||||
AudioHeapInitSizes gAudioHeapInitSizes = {
|
||||
ALIGN16(sizeof(gAudioHeap) - 0x100), // audio heap size
|
||||
ALIGN16(PERMANENT_POOL_SIZE + AI_BUFFERS_SIZE + SOUNDFONT_LIST_SIZE), // init pool size
|
||||
ALIGN16(PERMANENT_POOL_SIZE), // permanent pool size
|
||||
};
|
|
@ -2,6 +2,7 @@
|
|||
#include "region.h"
|
||||
#include "terminal.h"
|
||||
#include "versions.h"
|
||||
#include "line_numbers.h"
|
||||
|
||||
s32 gCurrentRegion = 0;
|
||||
|
||||
|
@ -39,15 +40,7 @@ void Locale_Init(void) {
|
|||
PRINTF(VT_COL(RED, WHITE));
|
||||
PRINTF(T("z_locale_init: 日本用かアメリカ用か判別できません\n",
|
||||
"z_locale_init: Can't tell if it's for Japan or America\n"));
|
||||
#if OOT_VERSION < NTSC_1_1
|
||||
LogUtils_HungupThread("../z_locale.c", 86);
|
||||
#elif OOT_VERSION < PAL_1_0
|
||||
LogUtils_HungupThread("../z_locale.c", 92);
|
||||
#elif OOT_VERSION < GC_JP
|
||||
LogUtils_HungupThread("../z_locale.c", 101);
|
||||
#else
|
||||
LogUtils_HungupThread("../z_locale.c", 118);
|
||||
#endif
|
||||
LogUtils_HungupThread("../z_locale.c", LN4(86, 92, 101, 118));
|
||||
PRINTF(VT_RST);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include "fault.h"
|
||||
#include "stack.h"
|
||||
#include "terminal.h"
|
||||
#include "line_numbers.h"
|
||||
#if PLATFORM_N64
|
||||
#include "n64dd.h"
|
||||
#endif
|
||||
|
@ -296,14 +297,9 @@ NORETURN void DmaMgr_Error(DmaRequest* req, const char* filename, const char* er
|
|||
Fault_AddHungupAndCrashImpl(buff1, buff2);
|
||||
}
|
||||
|
||||
#define DMA_ERROR(req, filename, errorName, errorDesc, file, line1, line2, line3) \
|
||||
DmaMgr_Error(req, filename, errorName, errorDesc)
|
||||
#elif OOT_VERSION < NTSC_1_1
|
||||
#define DMA_ERROR(req, filename, errorName, errorDesc, file, line1, line2, line3) Fault_AddHungupAndCrash(file, line1)
|
||||
#elif OOT_VERSION < GC_JP
|
||||
#define DMA_ERROR(req, filename, errorName, errorDesc, file, line1, line2, line3) Fault_AddHungupAndCrash(file, line2)
|
||||
#define DMA_ERROR(req, filename, errorName, errorDesc, file, line) DmaMgr_Error(req, filename, errorName, errorDesc)
|
||||
#else
|
||||
#define DMA_ERROR(req, filename, errorName, errorDesc, file, line1, line2, line3) Fault_AddHungupAndCrash(file, line3)
|
||||
#define DMA_ERROR(req, filename, errorName, errorDesc, file, line) Fault_AddHungupAndCrash(file, line)
|
||||
#endif
|
||||
|
||||
#if PLATFORM_GC
|
||||
|
@ -409,7 +405,7 @@ void DmaMgr_ProcessRequest(DmaRequest* req) {
|
|||
DMA_ERROR(req, filename, "Segment Alignment Error",
|
||||
T("セグメント境界をまたがってDMA転送することはできません",
|
||||
"DMA transfers cannot cross segment boundaries"),
|
||||
"../z_std_dma.c", 575, 578, 726);
|
||||
"../z_std_dma.c", LN3(575, 578, 726));
|
||||
}
|
||||
|
||||
DmaMgr_DmaRomToRam(iter->romStart + (vrom - iter->file.vromStart), ram, size);
|
||||
|
@ -430,7 +426,7 @@ void DmaMgr_ProcessRequest(DmaRequest* req) {
|
|||
DMA_ERROR(req, filename, "Can't Transfer Segment",
|
||||
T("圧縮されたセグメントの途中からはDMA転送することはできません",
|
||||
"DMA transfer cannot be performed from the middle of a compressed segment"),
|
||||
"../z_std_dma.c", 595, 598, 746);
|
||||
"../z_std_dma.c", LN3(595, 598, 746));
|
||||
}
|
||||
|
||||
if (size != iter->file.vromEnd - iter->file.vromStart) {
|
||||
|
@ -439,7 +435,7 @@ void DmaMgr_ProcessRequest(DmaRequest* req) {
|
|||
DMA_ERROR(req, filename, "Can't Transfer Segment",
|
||||
T("圧縮されたセグメントの一部だけをDMA転送することはできません",
|
||||
"It is not possible to DMA only part of a compressed segment"),
|
||||
"../z_std_dma.c", 601, 604, 752);
|
||||
"../z_std_dma.c", LN3(601, 604, 752));
|
||||
}
|
||||
|
||||
// Reduce the thread priority and decompress the file, the decompression routine handles the DMA
|
||||
|
@ -472,8 +468,8 @@ void DmaMgr_ProcessRequest(DmaRequest* req) {
|
|||
// Error, rom is compressed so DMA may only be requested within the filesystem bounds
|
||||
|
||||
DMA_ERROR(req, NULL, "DATA DON'T EXIST",
|
||||
T("該当するデータが存在しません", "Corresponding data does not exist"), "../z_std_dma.c", 621,
|
||||
624, 771);
|
||||
T("該当するデータが存在しません", "Corresponding data does not exist"), "../z_std_dma.c",
|
||||
LN3(621, 624, 771));
|
||||
return;
|
||||
} else {
|
||||
// ROM is uncompressed, allow arbitrary DMA even if the region is not marked in the filesystem
|
||||
|
@ -543,7 +539,7 @@ s32 DmaMgr_RequestAsync(DmaRequest* req, void* ram, uintptr_t vrom, size_t size,
|
|||
(size == 0) || (size & 1)) {
|
||||
//! @bug `req` is passed to `DMA_ERROR` without rom, ram and size being set
|
||||
DMA_ERROR(req, NULL, "ILLIGAL DMA-FUNCTION CALL", T("パラメータ異常です", "Parameter error"), "../z_std_dma.c",
|
||||
UNK_LINE, UNK_LINE, UNK_LINE);
|
||||
UNK_LINE);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -645,13 +641,7 @@ void DmaMgr_Init(void) {
|
|||
PRINTF("_bootSegmentRomStart(%08x) != dma_rom_ad[0].rom_b(%08x)\n", _bootSegmentRomStart,
|
||||
gDmaDataTable[0].file.vromEnd);
|
||||
//! @bug The main code file where fault.c resides is not yet loaded
|
||||
#if OOT_VERSION < NTSC_1_1
|
||||
Fault_AddHungupAndCrash("../z_std_dma.c", 837);
|
||||
#elif OOT_VERSION < GC_JP
|
||||
Fault_AddHungupAndCrash("../z_std_dma.c", 840);
|
||||
#else
|
||||
Fault_AddHungupAndCrash("../z_std_dma.c", 1055);
|
||||
#endif
|
||||
Fault_AddHungupAndCrash("../z_std_dma.c", LN3(837, 840, 1055));
|
||||
}
|
||||
|
||||
// Start the DMA manager
|
||||
|
|
|
@ -522,11 +522,11 @@ void PreRender_CopyImageRegion(PreRender* this, Gfx** gfxP) {
|
|||
* This filter performs a linear interpolation on partially covered pixels between the current pixel color (called
|
||||
* foreground color) and a "background" pixel color obtained by sampling fully covered pixels at the six highlighted
|
||||
* points in the following 5x3 neighborhood:
|
||||
* _ _ _ _ _
|
||||
* - - - - -
|
||||
* | o o |
|
||||
* | o X o |
|
||||
* | o o |
|
||||
* ‾ ‾ ‾ ‾ ‾
|
||||
* - - - - -
|
||||
* Whether a pixel is partially covered is determined by reading the coverage values associated with the image.
|
||||
* Coverage is a measure of how many subpixels the last drawn primitive covered. A fully covered pixel is one with a
|
||||
* full coverage value, the entire pixel was covered by the primitive.
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
* DPad-Up may be pressed to enable sending fault pages over osSyncPrintf as well as displaying them on-screen.
|
||||
* DPad-Down disables sending fault pages over osSyncPrintf.
|
||||
*/
|
||||
#if PLATFORM_GC
|
||||
#if !PLATFORM_N64
|
||||
|
||||
#pragma increment_block_number "gc-eu:160 gc-eu-mq:160 gc-eu-mq-dbg:160 gc-jp:176 gc-jp-ce:176 gc-jp-mq:176 gc-us:176" \
|
||||
"gc-us-mq:176"
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
#include "terminal.h"
|
||||
#pragma increment_block_number "gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128"
|
||||
|
||||
#if PLATFORM_GC
|
||||
#if !PLATFORM_N64
|
||||
|
||||
typedef struct FaultDrawer {
|
||||
/* 0x00 */ u16* fb;
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
#include "libc64/os_malloc.h"
|
||||
#include "terminal.h"
|
||||
#include "versions.h"
|
||||
#include "line_numbers.h"
|
||||
#if PLATFORM_N64
|
||||
#include "n64dd.h"
|
||||
#endif
|
||||
|
@ -390,15 +391,7 @@ void GameState_InitArena(GameState* gameState, size_t size) {
|
|||
} else {
|
||||
THA_Init(&gameState->tha, NULL, 0);
|
||||
PRINTF(T("ハイラル確保失敗\n", "Failure to secure Hyrule\n"));
|
||||
#if OOT_VERSION < NTSC_1_1
|
||||
HUNGUP_AND_CRASH("../game.c", 895);
|
||||
#elif OOT_VERSION < PAL_1_0
|
||||
HUNGUP_AND_CRASH("../game.c", 898);
|
||||
#elif OOT_VERSION < GC_JP
|
||||
HUNGUP_AND_CRASH("../game.c", 985);
|
||||
#else
|
||||
HUNGUP_AND_CRASH("../game.c", 999);
|
||||
#endif
|
||||
HUNGUP_AND_CRASH("../game.c", LN4(895, 898, 985, 999));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -439,15 +432,7 @@ void GameState_Realloc(GameState* gameState, size_t size) {
|
|||
SystemArena_Display();
|
||||
#endif
|
||||
|
||||
#if OOT_VERSION < NTSC_1_1
|
||||
HUNGUP_AND_CRASH("../game.c", 940);
|
||||
#elif OOT_VERSION < PAL_1_0
|
||||
HUNGUP_AND_CRASH("../game.c", 943);
|
||||
#elif OOT_VERSION < GC_JP
|
||||
HUNGUP_AND_CRASH("../game.c", 1030);
|
||||
#else
|
||||
HUNGUP_AND_CRASH("../game.c", 1044);
|
||||
#endif
|
||||
HUNGUP_AND_CRASH("../game.c", LN4(940, 943, 1030, 1044));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
#include "terminal.h"
|
||||
#include "ucode_disas.h"
|
||||
#include "versions.h"
|
||||
#include "line_numbers.h"
|
||||
|
||||
#define GFXPOOL_HEAD_MAGIC 0x1234
|
||||
#define GFXPOOL_TAIL_MAGIC 0x5678
|
||||
|
@ -379,30 +380,15 @@ void Graph_Update(GraphicsContext* gfxCtx, GameState* gameState) {
|
|||
PRINTF("%c", BEL);
|
||||
PRINTF(VT_COL(RED, WHITE) T("ダイナミック領域先頭が破壊されています\n", "Dynamic area head is destroyed\n")
|
||||
VT_RST);
|
||||
#if OOT_VERSION < NTSC_1_1
|
||||
Fault_AddHungupAndCrash("../graph.c", 937);
|
||||
#elif OOT_VERSION < PAL_1_0
|
||||
Fault_AddHungupAndCrash("../graph.c", 940);
|
||||
#elif OOT_VERSION < GC_JP
|
||||
Fault_AddHungupAndCrash("../graph.c", 951);
|
||||
#else
|
||||
Fault_AddHungupAndCrash("../graph.c", 1070);
|
||||
#endif
|
||||
Fault_AddHungupAndCrash("../graph.c", LN4(937, 940, 951, 1070));
|
||||
}
|
||||
|
||||
if (pool->tailMagic != GFXPOOL_TAIL_MAGIC) {
|
||||
problem = true;
|
||||
PRINTF("%c", BEL);
|
||||
PRINTF(VT_COL(RED, WHITE)
|
||||
T("ダイナミック領域末尾が破壊されています\n", "Dynamic region tail is destroyed\n") VT_RST);
|
||||
#if OOT_VERSION < NTSC_1_1
|
||||
Fault_AddHungupAndCrash("../graph.c", 943);
|
||||
#elif OOT_VERSION < PAL_1_0
|
||||
Fault_AddHungupAndCrash("../graph.c", 946);
|
||||
#elif OOT_VERSION < GC_JP
|
||||
Fault_AddHungupAndCrash("../graph.c", 957);
|
||||
#else
|
||||
Fault_AddHungupAndCrash("../graph.c", 1076);
|
||||
#endif
|
||||
Fault_AddHungupAndCrash("../graph.c", LN4(943, 946, 957, 1076));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -494,14 +480,8 @@ void Graph_ThreadEntry(void* arg0) {
|
|||
|
||||
sprintf(faultMsg, "CLASS SIZE= %d bytes", size);
|
||||
Fault_AddHungupAndCrashImpl("GAME CLASS MALLOC FAILED", faultMsg);
|
||||
#elif OOT_VERSION < NTSC_1_1
|
||||
Fault_AddHungupAndCrash("../graph.c", 1067);
|
||||
#elif OOT_VERSION < PAL_1_0
|
||||
Fault_AddHungupAndCrash("../graph.c", 1070);
|
||||
#elif OOT_VERSION < GC_JP
|
||||
Fault_AddHungupAndCrash("../graph.c", 1081);
|
||||
#else
|
||||
Fault_AddHungupAndCrash("../graph.c", 1200);
|
||||
Fault_AddHungupAndCrash("../graph.c", LN4(1067, 1070, 1081, 1200));
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
#include "global.h"
|
||||
#include "fault.h"
|
||||
#include "terminal.h"
|
||||
#include "line_numbers.h"
|
||||
|
||||
#define PADMGR_LOG(controllerNum, msg) \
|
||||
if (DEBUG_FEATURES) { \
|
||||
|
@ -326,13 +327,7 @@ void PadMgr_UpdateInputs(PadMgr* padMgr) {
|
|||
default:
|
||||
// Unknown error response
|
||||
LOG_HEX("padnow1->errno", pad->errno, "../padmgr.c", 396);
|
||||
#if OOT_VERSION < NTSC_1_1
|
||||
Fault_AddHungupAndCrash("../padmgr.c", 379);
|
||||
#elif OOT_VERSION < GC_JP
|
||||
Fault_AddHungupAndCrash("../padmgr.c", 382);
|
||||
#else
|
||||
Fault_AddHungupAndCrash("../padmgr.c", 397);
|
||||
#endif
|
||||
Fault_AddHungupAndCrash("../padmgr.c", LN3(379, 382, 397));
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#include "global.h"
|
||||
#include "line_numbers.h"
|
||||
|
||||
#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
|
||||
"pal-1.1:128"
|
||||
|
@ -33,15 +34,7 @@ void SysCfb_Init(s32 n64dd) {
|
|||
PRINTF("RAM4M mode\n");
|
||||
sSysCfbEnd = 0x80400000;
|
||||
} else {
|
||||
#if OOT_VERSION < NTSC_1_1
|
||||
LogUtils_HungupThread("../sys_cfb.c", 305);
|
||||
#elif OOT_VERSION < PAL_1_0
|
||||
LogUtils_HungupThread("../sys_cfb.c", 308);
|
||||
#elif OOT_VERSION < GC_JP
|
||||
LogUtils_HungupThread("../sys_cfb.c", 322);
|
||||
#else
|
||||
LogUtils_HungupThread("../sys_cfb.c", 354);
|
||||
#endif
|
||||
LogUtils_HungupThread("../sys_cfb.c", LN4(305, 308, 322, 354));
|
||||
}
|
||||
|
||||
screenSize = SCREEN_WIDTH * SCREEN_HEIGHT;
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
#include "rand.h"
|
||||
#include "terminal.h"
|
||||
#include "versions.h"
|
||||
#include "z64horse.h"
|
||||
|
||||
#include "overlays/actors/ovl_Arms_Hook/z_arms_hook.h"
|
||||
#include "overlays/actors/ovl_En_Part/z_en_part.h"
|
||||
|
@ -1139,7 +1140,7 @@ void Actor_SwapHookshotAttachment(PlayState* play, Actor* srcActor, Actor* destA
|
|||
srcActor->flags &= ~ACTOR_FLAG_HOOKSHOT_ATTACHED;
|
||||
}
|
||||
|
||||
void func_8002DE74(PlayState* play, Player* player) {
|
||||
void Actor_RequestHorseCameraSetting(PlayState* play, Player* player) {
|
||||
if ((play->roomCtx.curRoom.type != ROOM_TYPE_4) && Play_CamIsNotFixed(play)) {
|
||||
Camera_RequestSetting(Play_GetCamera(play, CAM_ID_MAIN), CAM_SET_HORSE);
|
||||
}
|
||||
|
@ -1156,8 +1157,8 @@ int func_8002DEEC(Player* player) {
|
|||
(player->csAction != PLAYER_CSACTION_NONE);
|
||||
}
|
||||
|
||||
void func_8002DF18(PlayState* play, Player* player) {
|
||||
func_8006DC68(play, player);
|
||||
void Actor_InitPlayerHorse(PlayState* play, Player* player) {
|
||||
Horse_InitPlayerHorse(play, player);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1768,7 +1769,7 @@ u32 Actor_TextboxIsClosing(Actor* actor, PlayState* play) {
|
|||
}
|
||||
}
|
||||
|
||||
s8 func_8002F368(PlayState* play) {
|
||||
s8 Actor_GetPlayerExchangeItemId(PlayState* play) {
|
||||
Player* player = GET_PLAYER(play);
|
||||
|
||||
return player->exchangeItemId;
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#include "global.h"
|
||||
#include "terminal.h"
|
||||
#include "line_numbers.h"
|
||||
|
||||
#pragma increment_block_number "ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128"
|
||||
|
||||
|
@ -1610,13 +1611,11 @@ void BgCheck_Allocate(CollisionContext* colCtx, PlayState* play, CollisionHeader
|
|||
colCtx->subdivAmount.x * sizeof(StaticLookup) * colCtx->subdivAmount.y *
|
||||
colCtx->subdivAmount.z,
|
||||
ALIGNOF_MASK(StaticLookup));
|
||||
|
||||
if (colCtx->lookupTbl == NULL) {
|
||||
#if OOT_VERSION < NTSC_1_1
|
||||
LogUtils_HungupThread("../z_bgcheck.c", 4173);
|
||||
#else
|
||||
LogUtils_HungupThread("../z_bgcheck.c", 4176);
|
||||
#endif
|
||||
LogUtils_HungupThread("../z_bgcheck.c", LN1(4173, 4176));
|
||||
}
|
||||
|
||||
colCtx->minBounds.x = colCtx->colHeader->minBounds.x;
|
||||
colCtx->minBounds.y = colCtx->colHeader->minBounds.y;
|
||||
colCtx->minBounds.z = colCtx->colHeader->minBounds.z;
|
||||
|
@ -1633,17 +1632,14 @@ void BgCheck_Allocate(CollisionContext* colCtx, PlayState* play, CollisionHeader
|
|||
colCtx->colHeader->numPolygons * sizeof(u8) + colCtx->dyna.polyNodesMax * sizeof(SSNode) +
|
||||
colCtx->dyna.polyListMax * sizeof(CollisionPoly) + colCtx->dyna.vtxListMax * sizeof(Vec3s) +
|
||||
sizeof(CollisionContext);
|
||||
|
||||
if (customNodeListMax > 0) {
|
||||
// tblMax is set without checking if customNodeListMax will result in a memory overflow
|
||||
// this is a non-issue as long as sceneSubdivisionList.nodeListMax is -1
|
||||
tblMax = customNodeListMax;
|
||||
} else {
|
||||
if (colCtx->memSize < memSize) {
|
||||
#if OOT_VERSION < NTSC_1_1
|
||||
LogUtils_HungupThread("../z_bgcheck.c", 4227);
|
||||
#else
|
||||
LogUtils_HungupThread("../z_bgcheck.c", 4230);
|
||||
#endif
|
||||
LogUtils_HungupThread("../z_bgcheck.c", LN1(4227, 4230));
|
||||
}
|
||||
tblMax = (colCtx->memSize - memSize) / sizeof(SSNode);
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
#include "overlays/actors/ovl_En_Horse/z_en_horse.h"
|
||||
|
||||
#pragma increment_block_number "gc-eu:192 gc-eu-mq:192 gc-jp:192 gc-jp-ce:192 gc-jp-mq:192 gc-us:192 gc-us-mq:192" \
|
||||
"ntsc-1.0:192 ntsc-1.1:192 ntsc-1.2:192 pal-1.0:192 pal-1.1:192"
|
||||
"ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
|
||||
|
||||
s16 Camera_RequestSettingImpl(Camera* camera, s16 requestedSetting, s16 flags);
|
||||
s32 Camera_RequestModeImpl(Camera* camera, s16 requestedMode, u8 forceModeChange);
|
||||
|
@ -3639,7 +3639,7 @@ s32 Camera_KeepOn3(Camera* camera) {
|
|||
}
|
||||
|
||||
#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
|
||||
"ntsc-1.0:83 ntsc-1.1:83 ntsc-1.2:83 pal-1.0:81 pal-1.1:81"
|
||||
"ntsc-1.0:144 ntsc-1.1:144 ntsc-1.2:144 pal-1.0:142 pal-1.1:142"
|
||||
|
||||
s32 Camera_KeepOn4(Camera* camera) {
|
||||
static Vec3f D_8015BD50;
|
||||
|
|
|
@ -734,7 +734,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
|
|||
|
||||
case CS_DEST_TEMPLE_OF_TIME_AFTER_LIGHT_MEDALLION:
|
||||
#if DEBUG_FEATURES
|
||||
SET_EVENTCHKINF(EVENTCHKINF_WATCHED_SHEIK_AFTER_MASTER_SWORD_CS);
|
||||
SET_EVENTCHKINF(EVENTCHKINF_REVEALED_MASTER_SWORD);
|
||||
#endif
|
||||
play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_4;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
|
@ -905,7 +905,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
|
|||
|
||||
case CS_DEST_TEMPLE_OF_TIME_AFTER_LIGHT_MEDALLION_ALT:
|
||||
#if DEBUG_FEATURES
|
||||
SET_EVENTCHKINF(EVENTCHKINF_WATCHED_SHEIK_AFTER_MASTER_SWORD_CS);
|
||||
SET_EVENTCHKINF(EVENTCHKINF_REVEALED_MASTER_SWORD);
|
||||
#endif
|
||||
play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_4;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
|
|
|
@ -75,64 +75,293 @@ static void* sItemDropTex[] = {
|
|||
};
|
||||
|
||||
static u8 sItemDropIds[] = {
|
||||
ITEM00_RUPEE_GREEN, ITEM00_RUPEE_BLUE, ITEM00_NONE, ITEM00_NONE, ITEM00_RUPEE_BLUE,
|
||||
ITEM00_RUPEE_GREEN, ITEM00_MAGIC_SMALL, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_NONE,
|
||||
ITEM00_MAGIC_SMALL, ITEM00_FLEXIBLE, ITEM00_SEEDS, ITEM00_SEEDS, ITEM00_NONE,
|
||||
ITEM00_RUPEE_BLUE, ITEM00_RUPEE_GREEN, ITEM00_MAGIC_SMALL, ITEM00_RUPEE_GREEN, ITEM00_RUPEE_BLUE,
|
||||
ITEM00_RECOVERY_HEART, ITEM00_NONE, ITEM00_RECOVERY_HEART, ITEM00_NONE, ITEM00_FLEXIBLE,
|
||||
ITEM00_NONE, ITEM00_BOMBS_A, ITEM00_NONE, ITEM00_SEEDS, ITEM00_NONE,
|
||||
ITEM00_NONE, ITEM00_MAGIC_SMALL, ITEM00_RUPEE_GREEN, ITEM00_RUPEE_GREEN, ITEM00_MAGIC_SMALL,
|
||||
ITEM00_NONE, ITEM00_RECOVERY_HEART, ITEM00_NONE, ITEM00_NONE, ITEM00_RECOVERY_HEART,
|
||||
ITEM00_NONE, ITEM00_SEEDS, ITEM00_SEEDS, ITEM00_NONE, ITEM00_BOMBS_A,
|
||||
ITEM00_NONE, ITEM00_FLEXIBLE, ITEM00_MAGIC_SMALL, ITEM00_RUPEE_GREEN, ITEM00_RUPEE_GREEN,
|
||||
ITEM00_NUTS, ITEM00_NONE, ITEM00_SEEDS, ITEM00_SEEDS, ITEM00_NUTS,
|
||||
ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_SEEDS, ITEM00_NONE, ITEM00_FLEXIBLE,
|
||||
ITEM00_NONE, ITEM00_NONE, ITEM00_NONE, ITEM00_NONE, ITEM00_RUPEE_GREEN,
|
||||
ITEM00_RUPEE_GREEN, ITEM00_SEEDS, ITEM00_BOMBS_A, ITEM00_MAGIC_SMALL, ITEM00_BOMBS_A,
|
||||
ITEM00_NONE, ITEM00_NONE, ITEM00_RECOVERY_HEART, ITEM00_NONE, ITEM00_NONE,
|
||||
ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_NONE, ITEM00_NONE, ITEM00_MAGIC_SMALL,
|
||||
ITEM00_RUPEE_GREEN, ITEM00_MAGIC_SMALL, ITEM00_RUPEE_GREEN, ITEM00_NONE, ITEM00_RUPEE_BLUE,
|
||||
ITEM00_NONE, ITEM00_NONE, ITEM00_RECOVERY_HEART, ITEM00_NONE, ITEM00_NONE,
|
||||
ITEM00_RECOVERY_HEART, ITEM00_FLEXIBLE, ITEM00_SEEDS, ITEM00_SEEDS, ITEM00_NONE,
|
||||
ITEM00_MAGIC_SMALL, ITEM00_RUPEE_GREEN, ITEM00_RUPEE_BLUE, ITEM00_NONE, ITEM00_RUPEE_GREEN,
|
||||
ITEM00_NONE, ITEM00_RECOVERY_HEART, ITEM00_NONE, ITEM00_NONE, ITEM00_BOMBS_A,
|
||||
ITEM00_ARROWS_SMALL, ITEM00_NONE, ITEM00_ARROWS_MEDIUM, ITEM00_MAGIC_SMALL, ITEM00_FLEXIBLE,
|
||||
ITEM00_NONE, ITEM00_MAGIC_LARGE, ITEM00_RUPEE_GREEN, ITEM00_NONE, ITEM00_RUPEE_BLUE,
|
||||
ITEM00_NONE, ITEM00_RUPEE_GREEN, ITEM00_RECOVERY_HEART, ITEM00_FLEXIBLE, ITEM00_BOMBS_A,
|
||||
ITEM00_ARROWS_SMALL, ITEM00_NONE, ITEM00_NONE, ITEM00_NONE, ITEM00_MAGIC_SMALL,
|
||||
ITEM00_NONE, ITEM00_NONE, ITEM00_MAGIC_LARGE, ITEM00_ARROWS_LARGE, ITEM00_ARROWS_MEDIUM,
|
||||
ITEM00_ARROWS_MEDIUM, ITEM00_ARROWS_SMALL, ITEM00_ARROWS_SMALL, ITEM00_FLEXIBLE, ITEM00_ARROWS_SMALL,
|
||||
ITEM00_ARROWS_SMALL, ITEM00_ARROWS_SMALL, ITEM00_ARROWS_MEDIUM, ITEM00_ARROWS_SMALL, ITEM00_ARROWS_SMALL,
|
||||
ITEM00_ARROWS_SMALL, ITEM00_ARROWS_MEDIUM, ITEM00_ARROWS_LARGE, ITEM00_ARROWS_LARGE, ITEM00_MAGIC_LARGE,
|
||||
ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_LARGE,
|
||||
ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_LARGE, ITEM00_MAGIC_SMALL,
|
||||
ITEM00_MAGIC_LARGE, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_LARGE,
|
||||
ITEM00_BOMBS_A, ITEM00_NONE, ITEM00_BOMBS_A, ITEM00_NONE, ITEM00_BOMBS_A,
|
||||
ITEM00_FLEXIBLE, ITEM00_BOMBS_A, ITEM00_BOMBS_A, ITEM00_BOMBS_A, ITEM00_NONE,
|
||||
ITEM00_NONE, ITEM00_NONE, ITEM00_NONE, ITEM00_BOMBS_A, ITEM00_NONE,
|
||||
ITEM00_BOMBS_A, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART,
|
||||
ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART,
|
||||
ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART,
|
||||
ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RUPEE_RED, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_BLUE,
|
||||
ITEM00_RUPEE_RED, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_RED,
|
||||
ITEM00_RUPEE_RED, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_RED, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_RED,
|
||||
ITEM00_RUPEE_RED, ITEM00_RUPEE_RED, ITEM00_RUPEE_RED, ITEM00_SEEDS, ITEM00_NONE,
|
||||
ITEM00_NUTS, ITEM00_NONE, ITEM00_STICK, ITEM00_NONE, ITEM00_NONE,
|
||||
ITEM00_SEEDS, ITEM00_NONE, ITEM00_NONE, ITEM00_NONE, ITEM00_NUTS,
|
||||
ITEM00_NONE, ITEM00_NUTS, ITEM00_RECOVERY_HEART, ITEM00_SEEDS, ITEM00_RECOVERY_HEART,
|
||||
ITEM00_NONE, ITEM00_SEEDS, ITEM00_NONE, ITEM00_RECOVERY_HEART, ITEM00_NONE,
|
||||
ITEM00_NONE, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_NONE, ITEM00_NONE,
|
||||
ITEM00_RECOVERY_HEART, ITEM00_NONE, ITEM00_RECOVERY_HEART, ITEM00_SEEDS, ITEM00_FLEXIBLE,
|
||||
// 0
|
||||
ITEM00_RUPEE_GREEN,
|
||||
ITEM00_RUPEE_BLUE,
|
||||
ITEM00_NONE,
|
||||
ITEM00_NONE,
|
||||
ITEM00_RUPEE_BLUE,
|
||||
ITEM00_RUPEE_GREEN,
|
||||
ITEM00_MAGIC_SMALL,
|
||||
ITEM00_RECOVERY_HEART,
|
||||
ITEM00_RECOVERY_HEART,
|
||||
ITEM00_NONE,
|
||||
ITEM00_MAGIC_SMALL,
|
||||
ITEM00_FLEXIBLE,
|
||||
ITEM00_SEEDS,
|
||||
ITEM00_SEEDS,
|
||||
ITEM00_NONE,
|
||||
ITEM00_RUPEE_BLUE,
|
||||
|
||||
// 1
|
||||
ITEM00_RUPEE_GREEN,
|
||||
ITEM00_MAGIC_SMALL,
|
||||
ITEM00_RUPEE_GREEN,
|
||||
ITEM00_RUPEE_BLUE,
|
||||
ITEM00_RECOVERY_HEART,
|
||||
ITEM00_NONE,
|
||||
ITEM00_RECOVERY_HEART,
|
||||
ITEM00_NONE,
|
||||
ITEM00_FLEXIBLE,
|
||||
ITEM00_NONE,
|
||||
ITEM00_BOMBS_A,
|
||||
ITEM00_NONE,
|
||||
ITEM00_SEEDS,
|
||||
ITEM00_NONE,
|
||||
ITEM00_NONE,
|
||||
ITEM00_MAGIC_SMALL,
|
||||
|
||||
// 2
|
||||
ITEM00_RUPEE_GREEN,
|
||||
ITEM00_RUPEE_GREEN,
|
||||
ITEM00_MAGIC_SMALL,
|
||||
ITEM00_NONE,
|
||||
ITEM00_RECOVERY_HEART,
|
||||
ITEM00_NONE,
|
||||
ITEM00_NONE,
|
||||
ITEM00_RECOVERY_HEART,
|
||||
ITEM00_NONE,
|
||||
ITEM00_SEEDS,
|
||||
ITEM00_SEEDS,
|
||||
ITEM00_NONE,
|
||||
ITEM00_BOMBS_A,
|
||||
ITEM00_NONE,
|
||||
ITEM00_FLEXIBLE,
|
||||
ITEM00_MAGIC_SMALL,
|
||||
|
||||
// 3
|
||||
ITEM00_RUPEE_GREEN,
|
||||
ITEM00_RUPEE_GREEN,
|
||||
ITEM00_NUTS,
|
||||
ITEM00_NONE,
|
||||
ITEM00_SEEDS,
|
||||
ITEM00_SEEDS,
|
||||
ITEM00_NUTS,
|
||||
ITEM00_RECOVERY_HEART,
|
||||
ITEM00_RECOVERY_HEART,
|
||||
ITEM00_SEEDS,
|
||||
ITEM00_NONE,
|
||||
ITEM00_FLEXIBLE,
|
||||
ITEM00_NONE,
|
||||
ITEM00_NONE,
|
||||
ITEM00_NONE,
|
||||
ITEM00_NONE,
|
||||
|
||||
// 4
|
||||
ITEM00_RUPEE_GREEN,
|
||||
ITEM00_RUPEE_GREEN,
|
||||
ITEM00_SEEDS,
|
||||
ITEM00_BOMBS_A,
|
||||
ITEM00_MAGIC_SMALL,
|
||||
ITEM00_BOMBS_A,
|
||||
ITEM00_NONE,
|
||||
ITEM00_NONE,
|
||||
ITEM00_RECOVERY_HEART,
|
||||
ITEM00_NONE,
|
||||
ITEM00_NONE,
|
||||
ITEM00_RECOVERY_HEART,
|
||||
ITEM00_RECOVERY_HEART,
|
||||
ITEM00_NONE,
|
||||
ITEM00_NONE,
|
||||
ITEM00_MAGIC_SMALL,
|
||||
|
||||
// 5
|
||||
ITEM00_RUPEE_GREEN,
|
||||
ITEM00_MAGIC_SMALL,
|
||||
ITEM00_RUPEE_GREEN,
|
||||
ITEM00_NONE,
|
||||
ITEM00_RUPEE_BLUE,
|
||||
ITEM00_NONE,
|
||||
ITEM00_NONE,
|
||||
ITEM00_RECOVERY_HEART,
|
||||
ITEM00_NONE,
|
||||
ITEM00_NONE,
|
||||
ITEM00_RECOVERY_HEART,
|
||||
ITEM00_FLEXIBLE,
|
||||
ITEM00_SEEDS,
|
||||
ITEM00_SEEDS,
|
||||
ITEM00_NONE,
|
||||
ITEM00_MAGIC_SMALL,
|
||||
|
||||
// 6
|
||||
ITEM00_RUPEE_GREEN,
|
||||
ITEM00_RUPEE_BLUE,
|
||||
ITEM00_NONE,
|
||||
ITEM00_RUPEE_GREEN,
|
||||
ITEM00_NONE,
|
||||
ITEM00_RECOVERY_HEART,
|
||||
ITEM00_NONE,
|
||||
ITEM00_NONE,
|
||||
ITEM00_BOMBS_A,
|
||||
ITEM00_ARROWS_SMALL,
|
||||
ITEM00_NONE,
|
||||
ITEM00_ARROWS_MEDIUM,
|
||||
ITEM00_MAGIC_SMALL,
|
||||
ITEM00_FLEXIBLE,
|
||||
ITEM00_NONE,
|
||||
ITEM00_MAGIC_LARGE,
|
||||
|
||||
// 7
|
||||
ITEM00_RUPEE_GREEN,
|
||||
ITEM00_NONE,
|
||||
ITEM00_RUPEE_BLUE,
|
||||
ITEM00_NONE,
|
||||
ITEM00_RUPEE_GREEN,
|
||||
ITEM00_RECOVERY_HEART,
|
||||
ITEM00_FLEXIBLE,
|
||||
ITEM00_BOMBS_A,
|
||||
ITEM00_ARROWS_SMALL,
|
||||
ITEM00_NONE,
|
||||
ITEM00_NONE,
|
||||
ITEM00_NONE,
|
||||
ITEM00_MAGIC_SMALL,
|
||||
ITEM00_NONE,
|
||||
ITEM00_NONE,
|
||||
ITEM00_MAGIC_LARGE,
|
||||
|
||||
// 8
|
||||
ITEM00_ARROWS_LARGE,
|
||||
ITEM00_ARROWS_MEDIUM,
|
||||
ITEM00_ARROWS_MEDIUM,
|
||||
ITEM00_ARROWS_SMALL,
|
||||
ITEM00_ARROWS_SMALL,
|
||||
ITEM00_FLEXIBLE,
|
||||
ITEM00_ARROWS_SMALL,
|
||||
ITEM00_ARROWS_SMALL,
|
||||
ITEM00_ARROWS_SMALL,
|
||||
ITEM00_ARROWS_MEDIUM,
|
||||
ITEM00_ARROWS_SMALL,
|
||||
ITEM00_ARROWS_SMALL,
|
||||
ITEM00_ARROWS_SMALL,
|
||||
ITEM00_ARROWS_MEDIUM,
|
||||
ITEM00_ARROWS_LARGE,
|
||||
ITEM00_ARROWS_LARGE,
|
||||
|
||||
// 9
|
||||
ITEM00_MAGIC_LARGE,
|
||||
ITEM00_MAGIC_SMALL,
|
||||
ITEM00_MAGIC_SMALL,
|
||||
ITEM00_MAGIC_SMALL,
|
||||
ITEM00_MAGIC_SMALL,
|
||||
ITEM00_MAGIC_LARGE,
|
||||
ITEM00_MAGIC_SMALL,
|
||||
ITEM00_MAGIC_SMALL,
|
||||
ITEM00_MAGIC_SMALL,
|
||||
ITEM00_MAGIC_LARGE,
|
||||
ITEM00_MAGIC_SMALL,
|
||||
ITEM00_MAGIC_LARGE,
|
||||
ITEM00_MAGIC_SMALL,
|
||||
ITEM00_MAGIC_SMALL,
|
||||
ITEM00_MAGIC_SMALL,
|
||||
ITEM00_MAGIC_LARGE,
|
||||
|
||||
// 10
|
||||
ITEM00_BOMBS_A,
|
||||
ITEM00_NONE,
|
||||
ITEM00_BOMBS_A,
|
||||
ITEM00_NONE,
|
||||
ITEM00_BOMBS_A,
|
||||
ITEM00_FLEXIBLE,
|
||||
ITEM00_BOMBS_A,
|
||||
ITEM00_BOMBS_A,
|
||||
ITEM00_BOMBS_A,
|
||||
ITEM00_NONE,
|
||||
ITEM00_NONE,
|
||||
ITEM00_NONE,
|
||||
ITEM00_NONE,
|
||||
ITEM00_BOMBS_A,
|
||||
ITEM00_NONE,
|
||||
ITEM00_BOMBS_A,
|
||||
|
||||
// 11
|
||||
ITEM00_RECOVERY_HEART,
|
||||
ITEM00_RECOVERY_HEART,
|
||||
ITEM00_RECOVERY_HEART,
|
||||
ITEM00_RECOVERY_HEART,
|
||||
ITEM00_RECOVERY_HEART,
|
||||
ITEM00_RECOVERY_HEART,
|
||||
ITEM00_RECOVERY_HEART,
|
||||
ITEM00_RECOVERY_HEART,
|
||||
ITEM00_RECOVERY_HEART,
|
||||
ITEM00_RECOVERY_HEART,
|
||||
ITEM00_RECOVERY_HEART,
|
||||
ITEM00_RECOVERY_HEART,
|
||||
ITEM00_RECOVERY_HEART,
|
||||
ITEM00_RECOVERY_HEART,
|
||||
ITEM00_RECOVERY_HEART,
|
||||
ITEM00_RECOVERY_HEART,
|
||||
|
||||
// 12
|
||||
ITEM00_RUPEE_RED,
|
||||
ITEM00_RUPEE_BLUE,
|
||||
ITEM00_RUPEE_BLUE,
|
||||
ITEM00_RUPEE_RED,
|
||||
ITEM00_RUPEE_BLUE,
|
||||
ITEM00_RUPEE_BLUE,
|
||||
ITEM00_RUPEE_BLUE,
|
||||
ITEM00_RUPEE_RED,
|
||||
ITEM00_RUPEE_RED,
|
||||
ITEM00_RUPEE_BLUE,
|
||||
ITEM00_RUPEE_RED,
|
||||
ITEM00_RUPEE_BLUE,
|
||||
ITEM00_RUPEE_RED,
|
||||
ITEM00_RUPEE_RED,
|
||||
ITEM00_RUPEE_RED,
|
||||
ITEM00_RUPEE_RED,
|
||||
|
||||
// 13
|
||||
ITEM00_SEEDS,
|
||||
ITEM00_NONE,
|
||||
ITEM00_NUTS,
|
||||
ITEM00_NONE,
|
||||
ITEM00_STICK,
|
||||
ITEM00_NONE,
|
||||
ITEM00_NONE,
|
||||
ITEM00_SEEDS,
|
||||
ITEM00_NONE,
|
||||
ITEM00_NONE,
|
||||
ITEM00_NONE,
|
||||
ITEM00_NUTS,
|
||||
ITEM00_NONE,
|
||||
ITEM00_NUTS,
|
||||
ITEM00_RECOVERY_HEART,
|
||||
ITEM00_SEEDS,
|
||||
|
||||
// 14
|
||||
ITEM00_RECOVERY_HEART,
|
||||
ITEM00_NONE,
|
||||
ITEM00_SEEDS,
|
||||
ITEM00_NONE,
|
||||
ITEM00_RECOVERY_HEART,
|
||||
ITEM00_NONE,
|
||||
ITEM00_NONE,
|
||||
ITEM00_RECOVERY_HEART,
|
||||
ITEM00_RECOVERY_HEART,
|
||||
ITEM00_NONE,
|
||||
ITEM00_NONE,
|
||||
ITEM00_RECOVERY_HEART,
|
||||
ITEM00_NONE,
|
||||
ITEM00_RECOVERY_HEART,
|
||||
ITEM00_SEEDS,
|
||||
ITEM00_FLEXIBLE,
|
||||
};
|
||||
|
||||
static u8 sDropQuantities[] = {
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
|
||||
1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 3, 3, 1, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 0, 0, 0, 0,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 2
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, // 3
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, // 4
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, // 5
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 6
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 7
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 8
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 9
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, // 10
|
||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // 11
|
||||
3, 3, 3, 1, 3, 3, 3, 1, 1, 3, 1, 3, 1, 1, 1, 3, // 12
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 13
|
||||
3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, // 14
|
||||
};
|
||||
|
||||
void EnItem00_SetupAction(EnItem00* this, EnItem00ActionFunc actionFunc) {
|
||||
|
|
|
@ -1,30 +1,47 @@
|
|||
#include "global.h"
|
||||
#include "terminal.h"
|
||||
#include "z_lib.h"
|
||||
#include "regs.h"
|
||||
#include "z64horse.h"
|
||||
#include "z64play.h"
|
||||
#include "z64player.h"
|
||||
#include "src/overlays/actors/ovl_En_Horse/z_en_horse.h"
|
||||
|
||||
s32 func_8006CFC0(s32 sceneId) {
|
||||
/**
|
||||
* Tests if the player horse can be spawned
|
||||
*
|
||||
* @param sceneId the checked scene
|
||||
* @return true if the player horse can appear in the scene, else false
|
||||
*/
|
||||
s32 Horse_CanSpawn(s32 sceneId) {
|
||||
s32 validSceneIds[] = { SCENE_HYRULE_FIELD, SCENE_LAKE_HYLIA, SCENE_GERUDO_VALLEY, SCENE_GERUDOS_FORTRESS,
|
||||
SCENE_LON_LON_RANCH };
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(validSceneIds); i++) {
|
||||
if (sceneId == validSceneIds[i]) {
|
||||
return 1;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
void func_8006D074(PlayState* play) {
|
||||
/**
|
||||
* Sets horseData to a neutral spawn in Hyrule Field
|
||||
*/
|
||||
void Horse_ResetHorseData(PlayState* play) {
|
||||
gSaveContext.save.info.horseData.sceneId = SCENE_HYRULE_FIELD;
|
||||
gSaveContext.save.info.horseData.pos.x = -1840;
|
||||
gSaveContext.save.info.horseData.pos.y = 72;
|
||||
gSaveContext.save.info.horseData.pos.z = 5497;
|
||||
gSaveContext.save.info.horseData.angle = -27353;
|
||||
gSaveContext.save.info.horseData.angle = -0x6AD9;
|
||||
}
|
||||
|
||||
void func_8006D0AC(PlayState* play) {
|
||||
/**
|
||||
* Forces the player horse to spawn in a safe spot if the current spawn is in Lake Hylia
|
||||
* This prevents the horse from spawning underwater after obtaining the Water Medallion
|
||||
*/
|
||||
void Horse_FixLakeHyliaPosition(PlayState* play) {
|
||||
if (gSaveContext.save.info.horseData.sceneId == SCENE_LAKE_HYLIA) {
|
||||
gSaveContext.save.info.horseData.sceneId = SCENE_LAKE_HYLIA;
|
||||
gSaveContext.save.info.horseData.pos.x = -2065;
|
||||
|
@ -41,49 +58,59 @@ typedef struct HorseSpawn {
|
|||
/* 0x0A */ s16 type;
|
||||
} HorseSpawn;
|
||||
|
||||
void func_8006D0EC(PlayState* play, Player* player) {
|
||||
void Horse_SetupInGameplay(PlayState* play, Player* player) {
|
||||
s32 i;
|
||||
HorseSpawn horseSpawns[] = {
|
||||
{ SCENE_HYRULE_FIELD, -460, 100, 6640, 0, 2 }, { SCENE_LAKE_HYLIA, -1929, -1025, 768, 0, 2 },
|
||||
{ SCENE_GERUDO_VALLEY, 2566, -259, 767, 0, 2 }, { SCENE_GERUDOS_FORTRESS, -328, 10, 953, 0, 2 },
|
||||
{ SCENE_LON_LON_RANCH, 928, 0, -2280, 0, 2 },
|
||||
{ SCENE_HYRULE_FIELD, -460, 100, 6640, 0, HORSE_PTYPE_INACTIVE },
|
||||
{ SCENE_LAKE_HYLIA, -1929, -1025, 768, 0, HORSE_PTYPE_INACTIVE },
|
||||
{ SCENE_GERUDO_VALLEY, 2566, -259, 767, 0, HORSE_PTYPE_INACTIVE },
|
||||
{ SCENE_GERUDOS_FORTRESS, -328, 10, 953, 0, HORSE_PTYPE_INACTIVE },
|
||||
{ SCENE_LON_LON_RANCH, 928, 0, -2280, 0, HORSE_PTYPE_INACTIVE },
|
||||
};
|
||||
|
||||
if ((AREG(6) != 0) && (Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || (DREG(1) != 0))) {
|
||||
player->rideActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, player->actor.world.pos.x,
|
||||
player->actor.world.pos.y, player->actor.world.pos.z, player->actor.shape.rot.x,
|
||||
player->actor.shape.rot.y, player->actor.shape.rot.z, 9);
|
||||
if (R_EXITED_SCENE_RIDING_HORSE &&
|
||||
(Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || R_DEBUG_FORCE_EPONA_OBTAINED)) {
|
||||
// Player entering scene on top of horse
|
||||
player->rideActor =
|
||||
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, player->actor.world.pos.x, player->actor.world.pos.y,
|
||||
player->actor.world.pos.z, player->actor.shape.rot.x, player->actor.shape.rot.y,
|
||||
player->actor.shape.rot.z, HORSE_PTYPE_PLAYER_SPAWNED_RIDING);
|
||||
|
||||
ASSERT(player->rideActor != NULL, "player->ride.actor != NULL", "../z_horse.c", 343);
|
||||
|
||||
Actor_MountHorse(play, player, player->rideActor);
|
||||
func_8002DE74(play, player);
|
||||
Actor_RequestHorseCameraSetting(play, player);
|
||||
gSaveContext.save.info.horseData.sceneId = play->sceneId;
|
||||
|
||||
if (play->sceneId == SCENE_GERUDOS_FORTRESS) {
|
||||
player->rideActor->room = -1;
|
||||
}
|
||||
} else if ((play->sceneId == SCENE_GERUDOS_FORTRESS) && (gSaveContext.minigameState == 3)) {
|
||||
// Completed Horseback Archery Minigame
|
||||
Actor* horseActor;
|
||||
gSaveContext.minigameState = 0;
|
||||
horseActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, 3586.0f, 1413.0f, -402.0f, 0, 0x4000, 0, 1);
|
||||
horseActor =
|
||||
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, 3586.0f, 1413.0f, -402.0f, 0, 0x4000, 0, HORSE_PTYPE_1);
|
||||
horseActor->room = -1;
|
||||
} else if ((gSaveContext.save.entranceIndex == ENTR_LON_LON_RANCH_7) &&
|
||||
GET_EVENTCHKINF(EVENTCHKINF_EPONA_OBTAINED)) {
|
||||
// Completed Horse Race
|
||||
Actor* horseActor =
|
||||
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, -25.0f, 0.0f, -1600.0f, 0, -0x4000, 0, 1);
|
||||
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, -25.0f, 0.0f, -1600.0f, 0, -0x4000, 0, HORSE_PTYPE_1);
|
||||
ASSERT(horseActor != NULL, "horse_actor != NULL", "../z_horse.c", 389);
|
||||
} else if ((play->sceneId == gSaveContext.save.info.horseData.sceneId) &&
|
||||
(Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || DREG(1) != 0)) {
|
||||
(Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || R_DEBUG_FORCE_EPONA_OBTAINED)) {
|
||||
// Player enters a scene where the horse was left previously
|
||||
PRINTF(T("馬存在によるセット %d %d %d\n", "Set by existence of horse %d %d %d\n"),
|
||||
gSaveContext.save.info.horseData.sceneId, Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED), DREG(1));
|
||||
gSaveContext.save.info.horseData.sceneId, Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED),
|
||||
R_DEBUG_FORCE_EPONA_OBTAINED);
|
||||
|
||||
if (func_8006CFC0(gSaveContext.save.info.horseData.sceneId)) {
|
||||
if (Horse_CanSpawn(gSaveContext.save.info.horseData.sceneId)) {
|
||||
Actor* horseActor =
|
||||
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, gSaveContext.save.info.horseData.pos.x,
|
||||
gSaveContext.save.info.horseData.pos.y, gSaveContext.save.info.horseData.pos.z, 0,
|
||||
gSaveContext.save.info.horseData.angle, 0, 1);
|
||||
gSaveContext.save.info.horseData.angle, 0, HORSE_PTYPE_1);
|
||||
ASSERT(horseActor != NULL, "horse_actor != NULL", "../z_horse.c", 414);
|
||||
|
||||
if (play->sceneId == SCENE_GERUDOS_FORTRESS) {
|
||||
horseActor->room = -1;
|
||||
}
|
||||
|
@ -93,13 +120,16 @@ void func_8006D0EC(PlayState* play, Player* player) {
|
|||
T("Horse_SetNormal():%d セットスポットまずいです。\n", "Horse_SetNormal():%d set spot is no good.\n"),
|
||||
gSaveContext.save.info.horseData.sceneId);
|
||||
PRINTF(VT_RST);
|
||||
func_8006D074(play);
|
||||
Horse_ResetHorseData(play);
|
||||
}
|
||||
} else if ((play->sceneId == SCENE_LON_LON_RANCH) && !Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) &&
|
||||
(DREG(1) == 0)) {
|
||||
Actor* horseActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, 0.0f, 0.0f, -500.0f, 0, 0, 0, 1);
|
||||
} else if ((play->sceneId == SCENE_LON_LON_RANCH) &&
|
||||
!(Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || R_DEBUG_FORCE_EPONA_OBTAINED)) {
|
||||
// Player spawns in Lon-Lon Ranch without owning Epona
|
||||
Actor* horseActor =
|
||||
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, 0.0f, 0.0f, -500.0f, 0, 0, 0, HORSE_PTYPE_1);
|
||||
ASSERT(horseActor != NULL, "horse_actor != NULL", "../z_horse.c", 443);
|
||||
} else if (Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || (DREG(1) != 0)) {
|
||||
} else if (Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || R_DEBUG_FORCE_EPONA_OBTAINED) {
|
||||
// Player owns Epona, but isn't riding her and the current scene is not the same as the horse's last location.
|
||||
for (i = 0; i < ARRAY_COUNT(horseSpawns); i++) {
|
||||
HorseSpawn* horseSpawn = &horseSpawns[i];
|
||||
if (horseSpawn->sceneId == play->sceneId) {
|
||||
|
@ -107,135 +137,145 @@ void func_8006D0EC(PlayState* play, Player* player) {
|
|||
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, horseSpawn->pos.x, horseSpawn->pos.y,
|
||||
horseSpawn->pos.z, 0, horseSpawn->angle, 0, horseSpawn->type);
|
||||
ASSERT(horseActor != NULL, "horse_actor != NULL", "../z_horse.c", 466);
|
||||
|
||||
if (play->sceneId == SCENE_GERUDOS_FORTRESS) {
|
||||
horseActor->room = -1;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else if (!Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED)) {
|
||||
if ((DREG(1) == 0) && (play->sceneId == SCENE_LON_LON_BUILDINGS) && !IS_DAY) {
|
||||
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, 0.0f, 0.0f, -60.0f, 0, 0x7360, 0, 1);
|
||||
}
|
||||
} else if (!(Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || R_DEBUG_FORCE_EPONA_OBTAINED) &&
|
||||
(play->sceneId == SCENE_LON_LON_BUILDINGS) && !IS_DAY) {
|
||||
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, 0.0f, 0.0f, -60.0f, 0, 0x7360, 0, HORSE_PTYPE_1);
|
||||
}
|
||||
}
|
||||
|
||||
typedef struct struct_8011F9B8 {
|
||||
typedef struct HorseCutsceneSpawn {
|
||||
/* 0x00 */ s16 sceneId;
|
||||
/* 0x04 */ s32 cutsceneIndex;
|
||||
/* 0x08 */ Vec3s pos;
|
||||
/* 0x0E */ s16 angle;
|
||||
/* 0x10 */ s16 type;
|
||||
} struct_8011F9B8;
|
||||
} HorseCutsceneSpawn;
|
||||
|
||||
void func_8006D684(PlayState* play, Player* player) {
|
||||
static struct_8011F9B8 D_8011F9B8[] = {
|
||||
{ SCENE_GERUDOS_FORTRESS, 0xFFF0, { 3600, 1413, 360 }, 0x8001, 8 },
|
||||
{ SCENE_LON_LON_RANCH, 0xFFF0, { -250, 1, -1580 }, 0x4000, 6 },
|
||||
{ SCENE_LON_LON_RANCH, 0xFFF1, { 0, 0, 0 }, 0x0000, 5 },
|
||||
{ SCENE_LON_LON_RANCH, 0xFFF5, { 0, 0, 0 }, 0x0000, 7 },
|
||||
{ SCENE_HYRULE_FIELD, 0xFFF3, { -2961, 313, 7700 }, 0x0000, 7 },
|
||||
{ SCENE_HYRULE_FIELD, 0xFFF4, { -1900, 313, 7015 }, 0x0000, 7 },
|
||||
{ SCENE_HYRULE_FIELD, 0xFFF5, { -4043, 313, 6933 }, 0x0000, 7 },
|
||||
{ SCENE_HYRULE_FIELD, 0xFFF6, { -4043, 313, 6933 }, 0x0000, 7 },
|
||||
void Horse_SetupInCutscene(PlayState* play, Player* player) {
|
||||
static HorseCutsceneSpawn horseSpawns[] = {
|
||||
{ SCENE_GERUDOS_FORTRESS, 0xFFF0, { 3600, 1413, 360 }, 0x8001, HORSE_PTYPE_HORSEBACK_ARCHERY },
|
||||
{ SCENE_LON_LON_RANCH, 0xFFF0, { -250, 1, -1580 }, 0x4000, HORSE_PTYPE_6 }, // Horse Race
|
||||
{ SCENE_LON_LON_RANCH, 0xFFF1, { 0, 0, 0 }, 0x0000, HORSE_PTYPE_5 }, // Learned Epona's Song
|
||||
{ SCENE_LON_LON_RANCH, 0xFFF5, { 0, 0, 0 }, 0x0000, HORSE_PTYPE_7 }, // Credits
|
||||
{ SCENE_HYRULE_FIELD, 0xFFF3, { -2961, 313, 7700 }, 0x0000, HORSE_PTYPE_7 }, // Title Screen
|
||||
{ SCENE_HYRULE_FIELD, 0xFFF4, { -1900, 313, 7015 }, 0x0000, HORSE_PTYPE_7 },
|
||||
{ SCENE_HYRULE_FIELD, 0xFFF5, { -4043, 313, 6933 }, 0x0000, HORSE_PTYPE_7 }, // Credits
|
||||
{ SCENE_HYRULE_FIELD, 0xFFF6, { -4043, 313, 6933 }, 0x0000, HORSE_PTYPE_7 }, // Unused. Hopping Lon Lon
|
||||
// Ranch North Gate
|
||||
};
|
||||
s32 pad;
|
||||
s32 i;
|
||||
Vec3s spawnPos;
|
||||
|
||||
if ((gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_11 ||
|
||||
gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_12 ||
|
||||
gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_13 ||
|
||||
gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_15) &&
|
||||
(gSaveContext.respawnFlag == 0)) {
|
||||
// Epona hopping over one of the Lon Lon Ranch fences
|
||||
Vec3s spawnPos;
|
||||
Vec3s spawnPositions[] = {
|
||||
{ -2961, 313, 7700 },
|
||||
{ -1900, 313, 7015 },
|
||||
{ -4043, 313, 6933 },
|
||||
{ -2313, 313, 5990 },
|
||||
// Note: The east and west positions are paired with the wrong entranceIndex. However, the subsequent
|
||||
// cutscene repositions the horse will override these coordinates while the horse is still obstructed, so no
|
||||
// visual glitch occurs.
|
||||
{ -2961, 313, 7700 }, // South
|
||||
{ -1900, 313, 7015 }, // East
|
||||
{ -4043, 313, 6933 }, // West
|
||||
{ -2313, 313, 5990 }, // North-East
|
||||
};
|
||||
|
||||
// South of Lon Lon player spawn
|
||||
if (gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_11) {
|
||||
spawnPos = spawnPositions[0];
|
||||
// West of Lon Lon player spawn
|
||||
} else if (gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_12) {
|
||||
spawnPos = spawnPositions[1];
|
||||
// East of Lon Lon player spawn
|
||||
} else if (gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_13) {
|
||||
spawnPos = spawnPositions[2];
|
||||
// Lon Lon exit player spawn
|
||||
} else {
|
||||
spawnPos = spawnPositions[3];
|
||||
}
|
||||
|
||||
player->rideActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, spawnPos.x, spawnPos.y, spawnPos.z, 0,
|
||||
player->actor.world.rot.y, 0, 7);
|
||||
player->actor.world.rot.y, 0, HORSE_PTYPE_7);
|
||||
ASSERT(player->rideActor != NULL, "player->ride.actor != NULL", "../z_horse.c", 561);
|
||||
|
||||
Actor_MountHorse(play, player, player->rideActor);
|
||||
func_8002DE74(play, player);
|
||||
Actor_RequestHorseCameraSetting(play, player);
|
||||
gSaveContext.save.info.horseData.sceneId = play->sceneId;
|
||||
} else if ((play->sceneId == SCENE_LON_LON_RANCH) &&
|
||||
(GET_EVENTINF_INGORACE_STATE() == INGORACE_STATE_TRAPPED_WIN_EPONA) &&
|
||||
!Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) && (DREG(1) == 0)) {
|
||||
(GET_EVENTINF_INGO_RACE_STATE() == INGO_RACE_STATE_TRAPPED_WIN_EPONA) &&
|
||||
!(Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || R_DEBUG_FORCE_EPONA_OBTAINED)) {
|
||||
player->rideActor =
|
||||
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, 894.0f, 0.0f, -2084.0f, 0, -0x7FFF, 0, 5);
|
||||
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, 894.0f, 0.0f, -2084.0f, 0, -0x7FFF, 0, HORSE_PTYPE_5);
|
||||
ASSERT(player->rideActor != NULL, "player->ride.actor != NULL", "../z_horse.c", 582);
|
||||
|
||||
Actor_MountHorse(play, player, player->rideActor);
|
||||
func_8002DE74(play, player);
|
||||
Actor_RequestHorseCameraSetting(play, player);
|
||||
gSaveContext.save.info.horseData.sceneId = play->sceneId;
|
||||
|
||||
if (play->sceneId == SCENE_GERUDOS_FORTRESS) {
|
||||
player->rideActor->room = -1;
|
||||
}
|
||||
} else {
|
||||
for (i = 0; i < ARRAY_COUNT(D_8011F9B8); i++) {
|
||||
if ((play->sceneId == D_8011F9B8[i].sceneId) &&
|
||||
(((void)0, gSaveContext.save.cutsceneIndex) == D_8011F9B8[i].cutsceneIndex)) {
|
||||
if (D_8011F9B8[i].type == 7) {
|
||||
for (i = 0; i < ARRAY_COUNT(horseSpawns); i++) {
|
||||
if ((play->sceneId == horseSpawns[i].sceneId) &&
|
||||
(((void)0, gSaveContext.save.cutsceneIndex) == horseSpawns[i].cutsceneIndex)) {
|
||||
if (horseSpawns[i].type == HORSE_PTYPE_7) {
|
||||
if ((play->sceneId == SCENE_LON_LON_RANCH) &&
|
||||
(((void)0, gSaveContext.save.cutsceneIndex) == 0xFFF1)) {
|
||||
D_8011F9B8[i].pos.x = player->actor.world.pos.x;
|
||||
D_8011F9B8[i].pos.y = player->actor.world.pos.y;
|
||||
D_8011F9B8[i].pos.z = player->actor.world.pos.z;
|
||||
horseSpawns[i].pos.x = player->actor.world.pos.x;
|
||||
horseSpawns[i].pos.y = player->actor.world.pos.y;
|
||||
horseSpawns[i].pos.z = player->actor.world.pos.z;
|
||||
}
|
||||
|
||||
player->rideActor =
|
||||
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, D_8011F9B8[i].pos.x, D_8011F9B8[i].pos.y,
|
||||
D_8011F9B8[i].pos.z, 0, player->actor.world.rot.y, 0, D_8011F9B8[i].type);
|
||||
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, horseSpawns[i].pos.x, horseSpawns[i].pos.y,
|
||||
horseSpawns[i].pos.z, 0, player->actor.world.rot.y, 0, horseSpawns[i].type);
|
||||
ASSERT(player->rideActor != NULL, "player->ride.actor != NULL", "../z_horse.c", 628);
|
||||
|
||||
Actor_MountHorse(play, player, player->rideActor);
|
||||
func_8002DE74(play, player);
|
||||
} else if ((D_8011F9B8[i].type == 5) || (D_8011F9B8[i].type == 6) || (D_8011F9B8[i].type == 8)) {
|
||||
Vec3f sp54;
|
||||
s32 temp = 0;
|
||||
Actor_RequestHorseCameraSetting(play, player);
|
||||
} else if ((horseSpawns[i].type == HORSE_PTYPE_5) || (horseSpawns[i].type == HORSE_PTYPE_6) ||
|
||||
(horseSpawns[i].type == HORSE_PTYPE_HORSEBACK_ARCHERY)) {
|
||||
Vec3f eye;
|
||||
s32 paramFlag = 0;
|
||||
|
||||
if (GET_EVENTINF_INGORACE_HORSETYPE() != HORSE_EPONA && D_8011F9B8[i].type == 6) {
|
||||
temp = 0x8000;
|
||||
if (GET_EVENTINF_INGO_RACE_HORSETYPE() != HORSE_EPONA && horseSpawns[i].type == HORSE_PTYPE_6) {
|
||||
// HORSE_HNI
|
||||
paramFlag = 0x8000;
|
||||
}
|
||||
|
||||
player->rideActor =
|
||||
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, D_8011F9B8[i].pos.x, D_8011F9B8[i].pos.y,
|
||||
D_8011F9B8[i].pos.z, 0, D_8011F9B8[i].angle, 0, D_8011F9B8[i].type | temp);
|
||||
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, horseSpawns[i].pos.x, horseSpawns[i].pos.y,
|
||||
horseSpawns[i].pos.z, 0, horseSpawns[i].angle, 0, horseSpawns[i].type | paramFlag);
|
||||
ASSERT(player->rideActor != NULL, "player->ride.actor != NULL", "../z_horse.c", 667);
|
||||
|
||||
player->actor.world.pos.x = D_8011F9B8[i].pos.x;
|
||||
player->actor.world.pos.y = D_8011F9B8[i].pos.y;
|
||||
player->actor.world.pos.z = D_8011F9B8[i].pos.z;
|
||||
player->actor.world.pos.x = horseSpawns[i].pos.x;
|
||||
player->actor.world.pos.y = horseSpawns[i].pos.y;
|
||||
player->actor.world.pos.z = horseSpawns[i].pos.z;
|
||||
player->actor.shape.rot.x = player->actor.shape.rot.z = 0;
|
||||
player->actor.shape.rot.y = D_8011F9B8[i].angle;
|
||||
player->actor.shape.rot.y = horseSpawns[i].angle;
|
||||
|
||||
Actor_MountHorse(play, player, player->rideActor);
|
||||
func_8002DE74(play, player);
|
||||
Actor_RequestHorseCameraSetting(play, player);
|
||||
|
||||
sp54.x = player->actor.world.pos.x - 200.0f;
|
||||
sp54.y = player->actor.world.pos.y + 100.0f;
|
||||
sp54.z = player->actor.world.pos.z;
|
||||
eye.x = player->actor.world.pos.x - 200.0f;
|
||||
eye.y = player->actor.world.pos.y + 100.0f;
|
||||
eye.z = player->actor.world.pos.z;
|
||||
|
||||
Play_SetCameraAtEye(play, play->activeCamId, &player->actor.world.pos, &sp54);
|
||||
Play_SetCameraAtEye(play, play->activeCamId, &player->actor.world.pos, &eye);
|
||||
} else {
|
||||
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, D_8011F9B8[i].pos.x, D_8011F9B8[i].pos.y,
|
||||
D_8011F9B8[i].pos.z, 0, D_8011F9B8[i].angle, 0, D_8011F9B8[i].type);
|
||||
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, horseSpawns[i].pos.x, horseSpawns[i].pos.y,
|
||||
horseSpawns[i].pos.z, 0, horseSpawns[i].angle, 0, horseSpawns[i].type);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -243,42 +283,49 @@ void func_8006D684(PlayState* play, Player* player) {
|
|||
}
|
||||
}
|
||||
|
||||
void func_8006DC68(PlayState* play, Player* player) {
|
||||
/**
|
||||
* Initializes the player's horse, but only if required.
|
||||
*
|
||||
* This function should be called during `Play_Init`.
|
||||
*/
|
||||
void Horse_InitPlayerHorse(PlayState* play, Player* player) {
|
||||
if (LINK_IS_ADULT) {
|
||||
if (!func_8006CFC0(gSaveContext.save.info.horseData.sceneId)) {
|
||||
if (!Horse_CanSpawn(gSaveContext.save.info.horseData.sceneId)) {
|
||||
PRINTF(VT_COL(RED, WHITE));
|
||||
PRINTF(
|
||||
T("Horse_Set_Check():%d セットスポットまずいです。\n", "Horse_Set_Check():%d set spot is no good.\n"),
|
||||
gSaveContext.save.info.horseData.sceneId);
|
||||
PRINTF(VT_RST);
|
||||
func_8006D074(play);
|
||||
Horse_ResetHorseData(play);
|
||||
}
|
||||
|
||||
if (func_8006CFC0(play->sceneId)) {
|
||||
if (Horse_CanSpawn(play->sceneId)) {
|
||||
if (IS_CUTSCENE_LAYER ||
|
||||
// has hopped over one of the Lon-Lon Ranch fences
|
||||
((gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_11 ||
|
||||
gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_12 ||
|
||||
gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_13 ||
|
||||
gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_15) &&
|
||||
(gSaveContext.respawnFlag == 0)) ||
|
||||
// trapped in Lon Lon Ranch
|
||||
((play->sceneId == SCENE_LON_LON_RANCH) &&
|
||||
(GET_EVENTINF_INGORACE_STATE() == INGORACE_STATE_TRAPPED_WIN_EPONA) &&
|
||||
!Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) && (DREG(1) == 0))) {
|
||||
func_8006D684(play, player);
|
||||
(GET_EVENTINF_INGO_RACE_STATE() == INGO_RACE_STATE_TRAPPED_WIN_EPONA) &&
|
||||
!(Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || R_DEBUG_FORCE_EPONA_OBTAINED))) {
|
||||
Horse_SetupInCutscene(play, player);
|
||||
} else {
|
||||
func_8006D0EC(play, player);
|
||||
Horse_SetupInGameplay(play, player);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void func_8006DD9C(Actor* actor, Vec3f* arg1, s16 arg2) {
|
||||
s16 x = Math_Vec3f_Yaw(&actor->world.pos, arg1) - actor->world.rot.y;
|
||||
void Horse_RotateToPoint(Actor* actor, Vec3f* pos, s16 turnAmount) {
|
||||
s16 x = Math_Vec3f_Yaw(&actor->world.pos, pos) - actor->world.rot.y;
|
||||
|
||||
if (x > arg2) {
|
||||
actor->world.rot.y += arg2;
|
||||
} else if (x < -arg2) {
|
||||
actor->world.rot.y -= arg2;
|
||||
if (x > turnAmount) {
|
||||
actor->world.rot.y += turnAmount;
|
||||
} else if (x < -turnAmount) {
|
||||
actor->world.rot.y -= turnAmount;
|
||||
} else {
|
||||
actor->world.rot.y += x;
|
||||
}
|
||||
|
|
|
@ -905,7 +905,7 @@ f32 sFontWidths[144] = {
|
|||
5.0f, // '|'
|
||||
7.0f, // '}'
|
||||
10.0f, // '~'
|
||||
10.0f, // '‾'
|
||||
10.0f, // ' '
|
||||
12.0f, // 'À'
|
||||
#if OOT_NTSC
|
||||
12.0f, // 'î'
|
||||
|
@ -3444,7 +3444,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
|
|||
if (msgCtx->disableWarpSongs || interfaceCtx->restrictions.warpSongs == 3) {
|
||||
Message_StartTextbox(play, 0x88C, NULL); // "You can't warp here!"
|
||||
play->msgCtx.ocarinaMode = OCARINA_MODE_04;
|
||||
} else if (GET_EVENTINF_INGORACE_STATE() != INGORACE_STATE_HORSE_RENTAL_PERIOD) {
|
||||
} else if (GET_EVENTINF_INGO_RACE_STATE() != INGO_RACE_STATE_HORSE_RENTAL_PERIOD) {
|
||||
Message_StartTextbox(play, msgCtx->lastPlayedSong + 0x88D,
|
||||
NULL); // "Warp to [place name]?"
|
||||
play->msgCtx.ocarinaMode = OCARINA_MODE_01;
|
||||
|
@ -4247,7 +4247,7 @@ void Message_Update(PlayState* play) {
|
|||
if (Message_ShouldAdvance(play)) {
|
||||
PRINTF("OCARINA_MODE=%d -> ", play->msgCtx.ocarinaMode);
|
||||
play->msgCtx.ocarinaMode = (msgCtx->choiceIndex == 0) ? OCARINA_MODE_02 : OCARINA_MODE_04;
|
||||
PRINTF("InRaceSeq=%d(%d) OCARINA_MODE=%d --> ", GET_EVENTINF_INGORACE_STATE(), 1,
|
||||
PRINTF("InRaceSeq=%d(%d) OCARINA_MODE=%d --> ", GET_EVENTINF_INGO_RACE_STATE(), 1,
|
||||
play->msgCtx.ocarinaMode);
|
||||
Message_CloseTextbox(play);
|
||||
PRINTF("OCARINA_MODE=%d\n", play->msgCtx.ocarinaMode);
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#include "global.h"
|
||||
#include "terminal.h"
|
||||
#include "versions.h"
|
||||
#include "z64horse.h"
|
||||
#include "assets/textures/parameter_static/parameter_static.h"
|
||||
#include "assets/textures/do_action_static/do_action_static.h"
|
||||
#include "assets/textures/icon_item_static/icon_item_static.h"
|
||||
|
@ -790,7 +791,7 @@ void func_80083108(PlayState* play) {
|
|||
gSaveContext.hudVisibilityMode = HUD_VISIBILITY_NO_CHANGE;
|
||||
Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_ALL);
|
||||
}
|
||||
} else if (GET_EVENTINF_INGORACE_STATE() == INGORACE_STATE_HORSE_RENTAL_PERIOD) {
|
||||
} else if (GET_EVENTINF_INGO_RACE_STATE() == INGO_RACE_STATE_HORSE_RENTAL_PERIOD) {
|
||||
if (player->stateFlags1 & PLAYER_STATE1_23) {
|
||||
if ((gSaveContext.save.info.equips.buttonItems[0] != ITEM_NONE) &&
|
||||
(gSaveContext.save.info.equips.buttonItems[0] != ITEM_BOW)) {
|
||||
|
@ -1387,7 +1388,7 @@ u8 Item_Give(PlayState* play, u8 item) {
|
|||
PRINTF(VT_RST);
|
||||
|
||||
if (item == ITEM_MEDALLION_WATER) {
|
||||
func_8006D0AC(play);
|
||||
Horse_FixLakeHyliaPosition(play);
|
||||
}
|
||||
|
||||
return ITEM_NONE;
|
||||
|
@ -3544,8 +3545,8 @@ void Interface_Draw(PlayState* play) {
|
|||
for (svar1 = 0; svar1 < ARRAY_COUNT(gSpoilingItems); svar1++) {
|
||||
if (INV_CONTENT(ITEM_TRADE_ADULT) == gSpoilingItems[svar1]) {
|
||||
#if OOT_VERSION >= NTSC_1_1
|
||||
RESET_EVENTINF_INGORACE();
|
||||
PRINTF("EVENT_INF=%x\n", gSaveContext.eventInf[EVENTINF_INDEX_INGORACE]);
|
||||
RESET_EVENTINF_INGO_RACE();
|
||||
PRINTF("EVENT_INF=%x\n", gSaveContext.eventInf[EVENTINF_INDEX_INGO_RACE]);
|
||||
#endif
|
||||
play->nextEntranceIndex = spoilingItemEntrances[svar1];
|
||||
INV_CONTENT(gSpoilingItemReverts[svar1]) = gSpoilingItemReverts[svar1];
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
#include "quake.h"
|
||||
#include "terminal.h"
|
||||
#include "versions.h"
|
||||
#include "line_numbers.h"
|
||||
#if PLATFORM_N64
|
||||
#include "n64dd.h"
|
||||
#endif
|
||||
|
@ -176,21 +177,7 @@ void Play_SetupTransition(PlayState* this, s32 transitionType) {
|
|||
break;
|
||||
|
||||
default:
|
||||
#if OOT_VERSION < NTSC_1_1
|
||||
HUNGUP_AND_CRASH("../z_play.c", 2263);
|
||||
#elif OOT_VERSION < PAL_1_0
|
||||
HUNGUP_AND_CRASH("../z_play.c", 2266);
|
||||
#elif OOT_VERSION < PAL_1_1
|
||||
HUNGUP_AND_CRASH("../z_play.c", 2269);
|
||||
#elif OOT_VERSION < GC_JP
|
||||
HUNGUP_AND_CRASH("../z_play.c", 2272);
|
||||
#elif OOT_VERSION < GC_EU_MQ_DBG
|
||||
HUNGUP_AND_CRASH("../z_play.c", 2287);
|
||||
#elif OOT_VERSION < GC_JP_CE
|
||||
HUNGUP_AND_CRASH("../z_play.c", 2290);
|
||||
#else
|
||||
HUNGUP_AND_CRASH("../z_play.c", 2293);
|
||||
#endif
|
||||
HUNGUP_AND_CRASH("../z_play.c", LN5(2263, 2266, 2269, 2272, 2287, 2290, 2293));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -502,7 +489,7 @@ void Play_Init(GameState* thisx) {
|
|||
Environment_PlaySceneSequence(this);
|
||||
gSaveContext.seqId = this->sceneSequences.seqId;
|
||||
gSaveContext.natureAmbienceId = this->sceneSequences.natureAmbienceId;
|
||||
func_8002DF18(this, GET_PLAYER(this));
|
||||
Actor_InitPlayerHorse(this, GET_PLAYER(this));
|
||||
AnimTaskQueue_Update(this, &this->animTaskQueue);
|
||||
gSaveContext.respawnFlag = 0;
|
||||
|
||||
|
@ -1892,6 +1879,7 @@ void Play_LoadToLastEntrance(PlayState* this) {
|
|||
(gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_12) ||
|
||||
(gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_13) ||
|
||||
(gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_15)) {
|
||||
// Avoid re-triggering the hop over Lon Lon fence cutscenes
|
||||
this->nextEntranceIndex = ENTR_HYRULE_FIELD_6;
|
||||
#endif
|
||||
} else {
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#include "fault.h"
|
||||
#include "terminal.h"
|
||||
#include "versions.h"
|
||||
#include "line_numbers.h"
|
||||
#if PLATFORM_N64
|
||||
#include "n64dd.h"
|
||||
#endif
|
||||
|
@ -456,14 +457,11 @@ RoomShapeImageMultiBgEntry* Room_GetImageMultiBgEntry(RoomShapeImageMulti* roomS
|
|||
PRINTF(VT_COL(RED, WHITE) T("z_room.c:カメラIDに一致するデータが存在しません camid=%d\n",
|
||||
"z_room.c: Data consistent with camera id does not exist camid=%d\n") VT_RST,
|
||||
bgCamIndex);
|
||||
#if OOT_VERSION < NTSC_1_1
|
||||
Fault_AddHungupAndCrash("../z_room.c", 724);
|
||||
#elif OOT_VERSION < PAL_1_0
|
||||
Fault_AddHungupAndCrash("../z_room.c", 727);
|
||||
#elif OOT_VERSION < GC_JP
|
||||
Fault_AddHungupAndCrash("../z_room.c", 721);
|
||||
#else
|
||||
|
||||
#if PLATFORM_GC
|
||||
LogUtils_HungupThread("../z_room.c", 726);
|
||||
#else
|
||||
Fault_AddHungupAndCrash("../z_room.c", LN2(724, 727, 721));
|
||||
#endif
|
||||
|
||||
return NULL;
|
||||
|
@ -547,14 +545,10 @@ void Room_DrawImage(PlayState* play, Room* room, u32 flags) {
|
|||
} else if (roomShape->amountType == ROOM_SHAPE_IMAGE_AMOUNT_MULTI) {
|
||||
Room_DrawImageMulti(play, room, flags);
|
||||
} else {
|
||||
#if OOT_VERSION < NTSC_1_1
|
||||
Fault_AddHungupAndCrash("../z_room.c", 849);
|
||||
#elif OOT_VERSION < PAL_1_0
|
||||
Fault_AddHungupAndCrash("../z_room.c", 852);
|
||||
#elif OOT_VERSION < GC_JP
|
||||
Fault_AddHungupAndCrash("../z_room.c", 836);
|
||||
#else
|
||||
#if PLATFORM_GC
|
||||
LogUtils_HungupThread("../z_room.c", 841);
|
||||
#else
|
||||
Fault_AddHungupAndCrash("../z_room.c", LN2(849, 852, 836));
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
|
|
@ -325,14 +325,14 @@ void Sram_InitDebugSave(void) {
|
|||
gSaveContext.save.info.horseData.pos.y = 72;
|
||||
gSaveContext.save.info.horseData.pos.z = 5497;
|
||||
gSaveContext.save.info.horseData.angle = -0x6AD9;
|
||||
gSaveContext.save.info.infTable[0] |= GET_INFTABLE_MASK(INFTABLE_00) | GET_INFTABLE_MASK(INFTABLE_03) |
|
||||
GET_INFTABLE_MASK(INFTABLE_0C) | GET_INFTABLE_MASK(INFTABLE_0E);
|
||||
gSaveContext.save.info.infTable[INFTABLE_INDEX_0] |= INFTABLE_MASK(INFTABLE_00) | INFTABLE_MASK(INFTABLE_03) |
|
||||
INFTABLE_MASK(INFTABLE_0C) | INFTABLE_MASK(INFTABLE_0E);
|
||||
|
||||
gSaveContext.save.info.eventChkInf[0] |=
|
||||
GET_EVENTCHKINF_MASK(EVENTCHKINF_00_UNUSED) | GET_EVENTCHKINF_MASK(EVENTCHKINF_01_UNUSED) |
|
||||
GET_EVENTCHKINF_MASK(EVENTCHKINF_MIDO_DENIED_DEKU_TREE_ACCESS) | GET_EVENTCHKINF_MASK(EVENTCHKINF_03) |
|
||||
GET_EVENTCHKINF_MASK(EVENTCHKINF_04) | GET_EVENTCHKINF_MASK(EVENTCHKINF_05) |
|
||||
GET_EVENTCHKINF_MASK(EVENTCHKINF_09) | GET_EVENTCHKINF_MASK(EVENTCHKINF_0C);
|
||||
gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX_0] |=
|
||||
EVENTCHKINF_MASK(EVENTCHKINF_00_UNUSED) | EVENTCHKINF_MASK(EVENTCHKINF_01_UNUSED) |
|
||||
EVENTCHKINF_MASK(EVENTCHKINF_MIDO_DENIED_DEKU_TREE_ACCESS) | EVENTCHKINF_MASK(EVENTCHKINF_03) |
|
||||
EVENTCHKINF_MASK(EVENTCHKINF_04) | EVENTCHKINF_MASK(EVENTCHKINF_05) | EVENTCHKINF_MASK(EVENTCHKINF_09) |
|
||||
EVENTCHKINF_MASK(EVENTCHKINF_0C);
|
||||
|
||||
SET_EVENTCHKINF(EVENTCHKINF_80);
|
||||
SET_EVENTCHKINF(EVENTCHKINF_C4);
|
||||
|
@ -505,7 +505,7 @@ void Sram_OpenSave(SramContext* sramCtx) {
|
|||
|
||||
// if zelda cutscene has been watched but lullaby was not obtained, restore cutscene and take away letter
|
||||
if (GET_EVENTCHKINF(EVENTCHKINF_40) && !CHECK_QUEST_ITEM(QUEST_SONG_LULLABY)) {
|
||||
i = gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX_40] & ~GET_EVENTCHKINF_MASK(EVENTCHKINF_40);
|
||||
i = gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX_40] & ~EVENTCHKINF_MASK(EVENTCHKINF_40);
|
||||
gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX_40] = i;
|
||||
|
||||
INV_CONTENT(ITEM_ZELDAS_LETTER) = ITEM_CHICKEN;
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
#include "libc64/os_malloc.h"
|
||||
#include "terminal.h"
|
||||
|
||||
#if PLATFORM_GC
|
||||
#if !PLATFORM_N64
|
||||
|
||||
#define FILL_ALLOC_BLOCK_FLAG (1 << 0)
|
||||
#define FILL_FREE_BLOCK_FLAG (1 << 1)
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
#include "n64dd.h"
|
||||
#include "stack.h"
|
||||
#include "versions.h"
|
||||
#include "line_numbers.h"
|
||||
|
||||
#pragma increment_block_number "ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
|
||||
|
||||
|
@ -112,14 +113,9 @@ void func_801C6FD8(void) {
|
|||
// Adds a HungupAndCrash
|
||||
void func_801C7018(void) {
|
||||
if (D_80121213 != 0) {
|
||||
#if OOT_VERSION < NTSC_1_1
|
||||
Fault_AddHungupAndCrash("../z_n64dd.c", 503);
|
||||
#elif OOT_VERSION < PAL_1_0
|
||||
Fault_AddHungupAndCrash("../z_n64dd.c", 551);
|
||||
#else
|
||||
Fault_AddHungupAndCrash("../z_n64dd.c", 573);
|
||||
#endif
|
||||
Fault_AddHungupAndCrash("../z_n64dd.c", LN2(503, 551, 573));
|
||||
}
|
||||
|
||||
D_80121213 = 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -699,9 +699,8 @@ static s16 sExItemTypes[] = { EXITEM_MAGIC_WIND, EXITEM_MAGIC_FIRE, EXITEM_MAGIC
|
|||
#define GREAT_FAIRY_SET_MAGIC_SPELL_OBTAINED(exItemIndex) \
|
||||
gSaveContext.save.info.itemGetInf[ITEMGETINF_INDEX_GREAT_FAIRY_ITEM] |= sItemGetFlagMasks[exItemIndex];
|
||||
|
||||
static s16 sItemGetFlagMasks[] = { GET_ITEMGETINF_MASK(ITEMGETINF_FARORES_WIND),
|
||||
GET_ITEMGETINF_MASK(ITEMGETINF_DINS_FIRE),
|
||||
GET_ITEMGETINF_MASK(ITEMGETINF_NAYRUS_LOVE) };
|
||||
static s16 sItemGetFlagMasks[] = { ITEMGETINF_MASK(ITEMGETINF_FARORES_WIND), ITEMGETINF_MASK(ITEMGETINF_DINS_FIRE),
|
||||
ITEMGETINF_MASK(ITEMGETINF_NAYRUS_LOVE) };
|
||||
|
||||
static u8 sItemIds[] = { ITEM_FARORES_WIND, ITEM_DINS_FIRE, ITEM_NAYRUS_LOVE };
|
||||
|
||||
|
|
|
@ -84,7 +84,7 @@ void BgGndIceblock_Destroy(Actor* thisx, PlayState* play) {
|
|||
* | 3 h8 15 19 |
|
||||
* | 4 9 11 XX *20*|
|
||||
* |*5* XX 12 *21*|
|
||||
* ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
|
||||
* ----------------------
|
||||
* XX are rocks
|
||||
* ** are pits
|
||||
* h is the hole.
|
||||
|
|
|
@ -52,7 +52,7 @@ void BgInGate_Init(Actor* thisx, PlayState* play) {
|
|||
|
||||
Actor_SetScale(&this->dyna.actor, 0.1f);
|
||||
if ((PARAMS_GET_U(this->dyna.actor.params, 0, 1) != 0) &&
|
||||
(GET_EVENTINF_INGORACE_STATE() == INGORACE_STATE_TRAPPED_WIN_EPONA)) {
|
||||
(GET_EVENTINF_INGO_RACE_STATE() == INGO_RACE_STATE_TRAPPED_WIN_EPONA)) {
|
||||
play->csCtx.curFrame = 0;
|
||||
BgInGate_SetupAction(this, func_80892890);
|
||||
} else {
|
||||
|
|
|
@ -18,9 +18,9 @@ void func_808BAF40(BgTokiSwd* this, PlayState* play);
|
|||
void func_808BB0AC(BgTokiSwd* this, PlayState* play);
|
||||
void func_808BB128(BgTokiSwd* this, PlayState* play);
|
||||
|
||||
extern CutsceneData D_808BB2F0[];
|
||||
extern CutsceneData D_808BB7A0[];
|
||||
extern CutsceneData D_808BBD90[];
|
||||
extern CutsceneData gPullMasterSwordCs[];
|
||||
extern CutsceneData gPlaceMasterSwordCs[];
|
||||
extern CutsceneData gRevealMasterSwordCs[];
|
||||
|
||||
ActorProfile Bg_Toki_Swd_Profile = {
|
||||
/**/ ACTOR_BG_TOKI_SWD,
|
||||
|
@ -93,19 +93,19 @@ void BgTokiSwd_Destroy(Actor* thisx, PlayState* play) {
|
|||
}
|
||||
|
||||
void func_808BAF40(BgTokiSwd* this, PlayState* play) {
|
||||
if (!GET_EVENTCHKINF(EVENTCHKINF_WATCHED_SHEIK_AFTER_MASTER_SWORD_CS) && !IS_CUTSCENE_LAYER &&
|
||||
if (!GET_EVENTCHKINF(EVENTCHKINF_REVEALED_MASTER_SWORD) && !IS_CUTSCENE_LAYER &&
|
||||
Actor_IsFacingAndNearPlayer(&this->actor, 800.0f, 0x7530) && !Play_InCsMode(play)) {
|
||||
SET_EVENTCHKINF(EVENTCHKINF_WATCHED_SHEIK_AFTER_MASTER_SWORD_CS);
|
||||
play->csCtx.script = D_808BBD90;
|
||||
SET_EVENTCHKINF(EVENTCHKINF_REVEALED_MASTER_SWORD);
|
||||
play->csCtx.script = gRevealMasterSwordCs;
|
||||
gSaveContext.cutsceneTrigger = 1;
|
||||
}
|
||||
if (!LINK_IS_ADULT || GET_EVENTCHKINF(EVENTCHKINF_55)) {
|
||||
if (Actor_HasParent(&this->actor, play)) {
|
||||
if (!LINK_IS_ADULT) {
|
||||
Item_Give(play, ITEM_SWORD_MASTER);
|
||||
play->csCtx.script = D_808BB2F0;
|
||||
play->csCtx.script = gPullMasterSwordCs;
|
||||
} else {
|
||||
play->csCtx.script = D_808BB7A0;
|
||||
play->csCtx.script = gPlaceMasterSwordCs;
|
||||
}
|
||||
SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0);
|
||||
SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, 0, NA_BGM_MASTER_SWORD);
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
#include "z64cutscene_commands.h"
|
||||
|
||||
// clang-format off
|
||||
CutsceneData D_808BB2F0[] = {
|
||||
CutsceneData gPullMasterSwordCs[] = {
|
||||
CS_HEADER(9, 425),
|
||||
CS_PLAYER_CUE_LIST(1),
|
||||
CS_PLAYER_CUE(PLAYER_CUEID_12, 0, 256, 0x0000, 0x0000, 0x0000, 0, 54, 52, 0, 54, 52, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
#include "z64cutscene_commands.h"
|
||||
|
||||
// clang-format off
|
||||
CutsceneData D_808BB7A0[] = {
|
||||
CutsceneData gPlaceMasterSwordCs[] = {
|
||||
CS_HEADER(9, 368),
|
||||
CS_CAM_EYE_SPLINE(0, 126),
|
||||
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, CS_FLOAT(0x42700000, 60.0f), -1, 101, -110, 0x616D),
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
#include "z64cutscene_commands.h"
|
||||
|
||||
// clang-format off
|
||||
CutsceneData D_808BBD90[] = {
|
||||
CutsceneData gRevealMasterSwordCs[] = {
|
||||
CS_HEADER(11, 3000),
|
||||
CS_UNK_DATA_LIST(0x00000021, 1),
|
||||
CS_UNK_DATA(0x00010000, 0x0BB80000, 0x00000000, 0x00000000, 0xFFFFFFF8, 0xFFFFFFFF, 0x00000000, 0xFFFFFFF8, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000),
|
||||
|
@ -18,11 +18,11 @@ CutsceneData D_808BBD90[] = {
|
|||
CS_MISC(CS_MISC_STOP_CUTSCENE, 340, 341, 0x0000, 0x00000000, 0xFFFFFFFF, 0x00000000, 0xFFFFFFFD, 0xFFFFFFFF, 0x00000000, 0xFFFFFFFD, 0x00000000, 0x00000000, 0x00000000),
|
||||
CS_TEXT_LIST(6),
|
||||
CS_TEXT_NONE(0, 50),
|
||||
CS_TEXT(0x70E6, 50, 60, 0x0000, 0x0000, 0x0000),
|
||||
CS_TEXT(0x70E6, 50, 60, CS_TEXT_NORMAL, 0x0000, 0x0000),
|
||||
CS_TEXT_NONE(60, 250),
|
||||
CS_TEXT(0x70E7, 250, 260, 0x0000, 0x0000, 0x0000),
|
||||
CS_TEXT(0x70E7, 250, 260, CS_TEXT_NORMAL, 0x0000, 0x0000),
|
||||
CS_TEXT_NONE(260, 290),
|
||||
CS_TEXT(0x70E8, 290, 320, 0x0000, 0x0000, 0x0000),
|
||||
CS_TEXT(0x70E8, 290, 320, CS_TEXT_NORMAL, 0x0000, 0x0000),
|
||||
CS_CAM_EYE_SPLINE(0, 251),
|
||||
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, CS_FLOAT(0x42700000, 60.0f), -59, 12, 690, 0x0222),
|
||||
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, CS_FLOAT(0x42700000, 60.0f), -59, 12, 690, 0x00FA),
|
||||
|
|
|
@ -25,10 +25,10 @@ void func_808BC8B8(BgTreemouth* this, PlayState* play);
|
|||
void func_808BC9EC(BgTreemouth* this, PlayState* play);
|
||||
void func_808BCAF0(BgTreemouth* this, PlayState* play);
|
||||
|
||||
extern CutsceneData D_808BCE20[];
|
||||
extern CutsceneData D_808BD2A0[];
|
||||
extern CutsceneData D_808BD520[];
|
||||
extern CutsceneData D_808BD790[];
|
||||
extern CutsceneData gDekuTreeMeetingCs[];
|
||||
extern CutsceneData gDekuTreeChoiceCs[];
|
||||
extern CutsceneData gDekuTreeMouthOpeningCs[];
|
||||
extern CutsceneData gDekuTreeAskAgainCs[];
|
||||
|
||||
ActorProfile Bg_Treemouth_Profile = {
|
||||
/**/ ACTOR_BG_TREEMOUTH,
|
||||
|
@ -146,14 +146,14 @@ void func_808BC8B8(BgTreemouth* this, PlayState* play) {
|
|||
this->dyna.actor.flags |= ACTOR_FLAG_ATTENTION_ENABLED;
|
||||
if (this->dyna.actor.isLockedOn) {
|
||||
this->dyna.actor.flags &= ~ACTOR_FLAG_ATTENTION_ENABLED;
|
||||
play->csCtx.script = D_808BD2A0;
|
||||
play->csCtx.script = gDekuTreeChoiceCs;
|
||||
gSaveContext.cutsceneTrigger = 1;
|
||||
BgTreemouth_SetupAction(this, func_808BC9EC);
|
||||
}
|
||||
}
|
||||
} else if (Actor_IsFacingAndNearPlayer(&this->dyna.actor, 1658.0f, 0x4E20)) {
|
||||
Flags_SetEventChkInf(EVENTCHKINF_0C);
|
||||
play->csCtx.script = D_808BCE20;
|
||||
play->csCtx.script = gDekuTreeMeetingCs;
|
||||
gSaveContext.cutsceneTrigger = 1;
|
||||
BgTreemouth_SetupAction(this, func_808BC9EC);
|
||||
}
|
||||
|
@ -186,11 +186,11 @@ void func_808BC9EC(BgTreemouth* this, PlayState* play) {
|
|||
play->csCtx.state = CS_STATE_RUN;
|
||||
|
||||
if (play->msgCtx.choiceIndex == 0) {
|
||||
play->csCtx.script = D_808BD520;
|
||||
play->csCtx.script = gDekuTreeMouthOpeningCs;
|
||||
Flags_SetEventChkInf(EVENTCHKINF_05);
|
||||
BgTreemouth_SetupAction(this, func_808BCAF0);
|
||||
} else {
|
||||
play->csCtx.script = D_808BD790;
|
||||
play->csCtx.script = gDekuTreeAskAgainCs;
|
||||
play->csCtx.curFrame = 0;
|
||||
BgTreemouth_SetupAction(this, func_808BC8B8);
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
#include "z64cutscene_commands.h"
|
||||
|
||||
// clang-format off
|
||||
CutsceneData D_808BCE20[] = {
|
||||
CutsceneData gDekuTreeMeetingCs[] = {
|
||||
CS_HEADER(12, 3000),
|
||||
CS_UNK_DATA_LIST(0x00000015, 1),
|
||||
CS_UNK_DATA(0x00010000, 0x0BB80000, 0x00000000, 0x00000000, 0x0000000F, 0xFFFFFFDE, 0x00000000, 0x0000000F, 0xFFFFFFDE, 0x00000000, 0x00000000, 0x00000000),
|
||||
|
@ -43,9 +43,9 @@ CutsceneData D_808BCE20[] = {
|
|||
CS_CAM_POINT(CS_CAM_STOP, 0x00, 30, CS_FLOAT(0x423CCCC1, 47.199955f), 2673, 127, -267, 0x7805),
|
||||
CS_TEXT_LIST(4),
|
||||
CS_TEXT_NONE(0, 40),
|
||||
CS_TEXT(0x107D, 40, 60, 0x0000, 0xFFFF, 0xFFFF),
|
||||
CS_TEXT(0x107D, 40, 60, CS_TEXT_NORMAL, 0xFFFF, 0xFFFF),
|
||||
CS_TEXT_NONE(60, 160),
|
||||
CS_TEXT(0x1015, 160, 170, 0x0000, 0xFFFF, 0xFFFF),
|
||||
CS_TEXT(0x1015, 160, 170, CS_TEXT_NORMAL, 0xFFFF, 0xFFFF),
|
||||
CS_MISC_LIST(1),
|
||||
CS_MISC(CS_MISC_STOP_CUTSCENE, 180, 200, 0x0000, 0x00000000, 0x00000000, 0xFFFFFFF7, 0xFFFFFFDB, 0x00000000, 0xFFFFFFF7, 0xFFFFFFDB, 0x00000000, 0x00000000, 0x00000000),
|
||||
CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_0_6, 1),
|
||||
|
@ -62,7 +62,7 @@ CutsceneData D_808BCE20[] = {
|
|||
CS_END_OF_SCRIPT(),
|
||||
};
|
||||
|
||||
CutsceneData D_808BD2A0[] = {
|
||||
CutsceneData gDekuTreeChoiceCs[] = {
|
||||
CS_HEADER(9, 3000),
|
||||
CS_UNK_DATA_LIST(0x00000015, 1),
|
||||
CS_UNK_DATA(0x00010000, 0x0BB80000, 0x00000000, 0x00000000, 0x0000000F, 0xFFFFFFDE, 0x00000000, 0x0000000F, 0xFFFFFFDE, 0x00000000, 0x00000000, 0x00000000),
|
||||
|
@ -96,13 +96,13 @@ CutsceneData D_808BD2A0[] = {
|
|||
CS_CAM_POINT(CS_CAM_STOP, 0x00, 30, CS_FLOAT(0x42700000, 60.0f), 1, 35, -36, 0x9D94),
|
||||
CS_TEXT_LIST(2),
|
||||
CS_TEXT_NONE(0, 20),
|
||||
CS_TEXT(0x1016, 20, 80, 0x0000, 0xFFFF, 0xFFFF),
|
||||
CS_TEXT(0x1016, 20, 80, CS_TEXT_NORMAL, 0xFFFF, 0xFFFF),
|
||||
CS_START_SEQ_LIST(1),
|
||||
CS_START_SEQ(NA_BGM_DEKU_TREE_CS, 0, 1, 0x0000, 0x00000000, 0x00000000, 0xFFFFFFAC, 0x0000007E, 0x00000000, 0xFFFFFFAC, 0x0000007E),
|
||||
CS_END_OF_SCRIPT(),
|
||||
};
|
||||
|
||||
CutsceneData D_808BD520[] = {
|
||||
CutsceneData gDekuTreeMouthOpeningCs[] = {
|
||||
CS_HEADER(8, 3000),
|
||||
CS_UNK_DATA_LIST(0x00000015, 1),
|
||||
CS_UNK_DATA(0x00010000, 0x0BB80000, 0x00000000, 0x00000000, 0x0000000F, 0xFFFFFFDE, 0x00000000, 0x0000000F, 0xFFFFFFDE, 0x00000000, 0x00000000, 0x00000000),
|
||||
|
@ -127,7 +127,7 @@ CutsceneData D_808BD520[] = {
|
|||
CS_CAM_POINT(CS_CAM_STOP, 0x00, 30, CS_FLOAT(0x4223FFED, 40.999928f), 3765, -118, -617, 0x01BC),
|
||||
CS_TEXT_LIST(2),
|
||||
CS_TEXT_NONE(0, 20),
|
||||
CS_TEXT(0x1017, 20, 60, 0x0000, 0xFFFF, 0xFFFF),
|
||||
CS_TEXT(0x1017, 20, 60, CS_TEXT_NORMAL, 0xFFFF, 0xFFFF),
|
||||
CS_MISC_LIST(1),
|
||||
CS_MISC(CS_MISC_STOP_CUTSCENE, 100, 150, 0x0000, 0x00000000, 0x00000000, 0xFFFFFFF5, 0x00000010, 0x00000000, 0xFFFFFFF5, 0x00000010, 0x00000000, 0x00000000, 0x00000000),
|
||||
CS_STOP_SEQ_LIST(1),
|
||||
|
@ -137,7 +137,7 @@ CutsceneData D_808BD520[] = {
|
|||
CS_END_OF_SCRIPT(),
|
||||
};
|
||||
|
||||
CutsceneData D_808BD790[] = {
|
||||
CutsceneData gDekuTreeAskAgainCs[] = {
|
||||
CS_HEADER(8, 3000),
|
||||
CS_UNK_DATA_LIST(0x00000015, 1),
|
||||
CS_UNK_DATA(0x00010000, 0x0BB80000, 0x00000000, 0x00000000, 0x0000000F, 0xFFFFFFDE, 0x00000000, 0x0000000F, 0xFFFFFFDE, 0x00000000, 0x00000000, 0x00000000),
|
||||
|
@ -157,7 +157,7 @@ CutsceneData D_808BD790[] = {
|
|||
CS_CAM_POINT(CS_CAM_STOP, 0x00, 30, CS_FLOAT(0x4297331E, 75.59984f), 3769, 718, -1186, 0x56AC),
|
||||
CS_TEXT_LIST(2),
|
||||
CS_TEXT_NONE(0, 20),
|
||||
CS_TEXT(0x1018, 20, 60, 0x0000, 0xFFFF, 0xFFFF),
|
||||
CS_TEXT(0x1018, 20, 60, CS_TEXT_NORMAL, 0xFFFF, 0xFFFF),
|
||||
CS_MISC_LIST(1),
|
||||
CS_MISC(CS_MISC_STOP_CUTSCENE, 80, 110, 0x0000, 0x00000000, 0x00000000, 0xFFFFFFEA, 0x00000006, 0x00000000, 0xFFFFFFEA, 0x00000006, 0x00000000, 0x00000000, 0x00000000),
|
||||
CS_STOP_SEQ_LIST(1),
|
||||
|
|
|
@ -41,7 +41,7 @@ void BgUmaJump_Init(Actor* thisx, PlayState* play) {
|
|||
this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader);
|
||||
|
||||
if (this->dyna.actor.params == 1) {
|
||||
if (!Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) && (DREG(1) == 0)) {
|
||||
if (!(Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || R_DEBUG_FORCE_EPONA_OBTAINED)) {
|
||||
Actor_Kill(&this->dyna.actor);
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -335,7 +335,7 @@ void BossDodongo_IntroCutscene(BossDodongo* this, PlayState* play) {
|
|||
this->subCamAt.z = player->actor.world.pos.z;
|
||||
}
|
||||
|
||||
if (GET_EVENTCHKINF(EVENTCHKINF_71)) {
|
||||
if (GET_EVENTCHKINF(EVENTCHKINF_BEGAN_KING_DODONGO_BATTLE)) {
|
||||
if (this->unk_198 == 100) {
|
||||
this->actor.world.pos.x = -1114.0f;
|
||||
this->actor.world.pos.z = -2804.0f;
|
||||
|
@ -376,7 +376,7 @@ void BossDodongo_IntroCutscene(BossDodongo* this, PlayState* play) {
|
|||
case 4:
|
||||
Math_SmoothStepToF(&this->unk_20C, 0.0f, 1.0f, 0.01f, 0.0f);
|
||||
|
||||
if (GET_EVENTCHKINF(EVENTCHKINF_71)) {
|
||||
if (GET_EVENTCHKINF(EVENTCHKINF_BEGAN_KING_DODONGO_BATTLE)) {
|
||||
phi_f0 = -50.0f;
|
||||
} else {
|
||||
phi_f0 = 0.0f;
|
||||
|
@ -404,7 +404,7 @@ void BossDodongo_IntroCutscene(BossDodongo* this, PlayState* play) {
|
|||
}
|
||||
|
||||
if (this->unk_198 == 0x5A) {
|
||||
if (!GET_EVENTCHKINF(EVENTCHKINF_71)) {
|
||||
if (!GET_EVENTCHKINF(EVENTCHKINF_BEGAN_KING_DODONGO_BATTLE)) {
|
||||
TitleCard_InitBossName(play, &play->actorCtx.titleCtx,
|
||||
SEGMENTED_TO_VIRTUAL(gKingDodongoTitleCardTex), 160, 180, 128, 40);
|
||||
}
|
||||
|
@ -423,7 +423,7 @@ void BossDodongo_IntroCutscene(BossDodongo* this, PlayState* play) {
|
|||
this->unk_1DA = 50;
|
||||
this->unk_1BC = 0;
|
||||
player->actor.shape.rot.y = -0x4002;
|
||||
SET_EVENTCHKINF(EVENTCHKINF_71);
|
||||
SET_EVENTCHKINF(EVENTCHKINF_BEGAN_KING_DODONGO_BATTLE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -339,7 +339,7 @@ void BossFd_Fly(BossFd* this, PlayState* play) {
|
|||
this->timers[0] = 0;
|
||||
this->subCamVelFactor = 0.0f;
|
||||
this->subCamAccel = 0.0f;
|
||||
if (GET_EVENTCHKINF(EVENTCHKINF_73)) {
|
||||
if (GET_EVENTCHKINF(EVENTCHKINF_BEGAN_VOLVAGIA_BATTLE)) {
|
||||
this->introState = BFD_CS_EMERGE;
|
||||
this->subCamEyeNext.x = player2->actor.world.pos.x + 100.0f + 300.0f - 600.0f;
|
||||
this->subCamEyeNext.y = player2->actor.world.pos.y + 100.0f - 50.0f;
|
||||
|
@ -461,7 +461,7 @@ void BossFd_Fly(BossFd* this, PlayState* play) {
|
|||
PRINTF("WAY_SPD X = %f\n", this->subCamAtVel.x);
|
||||
PRINTF("WAY_SPD Y = %f\n", this->subCamAtVel.y);
|
||||
PRINTF("WAY_SPD Z = %f\n", this->subCamAtVel.z);
|
||||
if ((this->timers[3] > 190) && !GET_EVENTCHKINF(EVENTCHKINF_73)) {
|
||||
if ((this->timers[3] > 190) && !GET_EVENTCHKINF(EVENTCHKINF_BEGAN_VOLVAGIA_BATTLE)) {
|
||||
Audio_PlaySfxGeneral(NA_SE_EN_DODO_K_ROLL - SFX_FLAG, &this->actor.projectedPos, 4,
|
||||
&gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
|
||||
}
|
||||
|
@ -488,7 +488,7 @@ void BossFd_Fly(BossFd* this, PlayState* play) {
|
|||
if (this->timers[3] == 160) {
|
||||
SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, 0, NA_BGM_FIRE_BOSS);
|
||||
}
|
||||
if ((this->timers[3] == 130) && !GET_EVENTCHKINF(EVENTCHKINF_73)) {
|
||||
if ((this->timers[3] == 130) && !GET_EVENTCHKINF(EVENTCHKINF_BEGAN_VOLVAGIA_BATTLE)) {
|
||||
TitleCard_InitBossName(play, &play->actorCtx.titleCtx, SEGMENTED_TO_VIRTUAL(gVolvagiaTitleCardTex),
|
||||
160, 180, 128, 40);
|
||||
}
|
||||
|
@ -541,7 +541,7 @@ void BossFd_Fly(BossFd* this, PlayState* play) {
|
|||
Player_SetCsActionWithHaltedActors(play, &this->actor, PLAYER_CSACTION_7);
|
||||
this->actionFunc = BossFd_Wait;
|
||||
this->handoffSignal = FD2_SIGNAL_GROUND;
|
||||
SET_EVENTCHKINF(EVENTCHKINF_73);
|
||||
SET_EVENTCHKINF(EVENTCHKINF_BEGAN_VOLVAGIA_BATTLE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -580,7 +580,7 @@ void BossGanon_IntroCutscene(BossGanon* this, PlayState* play) {
|
|||
Play_ChangeCameraStatus(play, this->csCamIndex, CAM_STAT_ACTIVE);
|
||||
this->csCamFov = 60.0f;
|
||||
|
||||
if (GET_EVENTCHKINF(EVENTCHKINF_78)) {
|
||||
if (GET_EVENTCHKINF(EVENTCHKINF_BEGAN_GANONDORF_BATTLE)) {
|
||||
// watched cutscene already, skip most of it
|
||||
this->csState = 17;
|
||||
this->csTimer = 0;
|
||||
|
@ -1098,12 +1098,12 @@ void BossGanon_IntroCutscene(BossGanon* this, PlayState* play) {
|
|||
gSegments[6] =
|
||||
VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[Object_GetSlot(&play->objectCtx, OBJECT_GANON)].segment);
|
||||
|
||||
if (!GET_EVENTCHKINF(EVENTCHKINF_78)) {
|
||||
if (!GET_EVENTCHKINF(EVENTCHKINF_BEGAN_GANONDORF_BATTLE)) {
|
||||
TitleCard_InitBossName(play, &play->actorCtx.titleCtx, SEGMENTED_TO_VIRTUAL(gGanondorfTitleCardTex),
|
||||
160, 180, 128, 40);
|
||||
}
|
||||
|
||||
SET_EVENTCHKINF(EVENTCHKINF_78);
|
||||
SET_EVENTCHKINF(EVENTCHKINF_BEGAN_GANONDORF_BATTLE);
|
||||
}
|
||||
|
||||
if (this->csTimer >= 20) {
|
||||
|
|
|
@ -684,7 +684,7 @@ void BossGoma_Encounter(BossGoma* this, PlayState* play) {
|
|||
// entrance of the boss room
|
||||
if (fabsf(player->actor.world.pos.x - 150.0f) < 60.0f &&
|
||||
fabsf(player->actor.world.pos.z - 350.0f) < 60.0f) {
|
||||
if (GET_EVENTCHKINF(EVENTCHKINF_70)) {
|
||||
if (GET_EVENTCHKINF(EVENTCHKINF_BEGAN_GOHMA_BATTLE)) {
|
||||
BossGoma_SetupEncounterState4(this, play);
|
||||
Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_DOOR_SHUTTER, 164.72f, -480.0f,
|
||||
397.68002f, 0, -0x705C, 0, DOORSHUTTER_PARAMS(SHUTTER_GOHMA_BLOCK, 0));
|
||||
|
@ -922,13 +922,13 @@ void BossGoma_Encounter(BossGoma* this, PlayState* play) {
|
|||
if (Animation_OnFrame(&this->skelanime, 40.0f)) {
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EN_GOMA_CRY1);
|
||||
|
||||
if (!GET_EVENTCHKINF(EVENTCHKINF_70)) {
|
||||
if (!GET_EVENTCHKINF(EVENTCHKINF_BEGAN_GOHMA_BATTLE)) {
|
||||
TitleCard_InitBossName(play, &play->actorCtx.titleCtx, SEGMENTED_TO_VIRTUAL(gGohmaTitleCardTex),
|
||||
160, 180, 128, 40);
|
||||
}
|
||||
|
||||
SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, 0, NA_BGM_BOSS);
|
||||
SET_EVENTCHKINF(EVENTCHKINF_70);
|
||||
SET_EVENTCHKINF(EVENTCHKINF_BEGAN_GOHMA_BATTLE);
|
||||
}
|
||||
|
||||
if (Animation_OnFrame(&this->skelanime, this->currentAnimFrameCount)) {
|
||||
|
|
|
@ -364,7 +364,7 @@ void BossMo_Init(Actor* thisx, PlayState* play2) {
|
|||
MO_WATER_LEVEL(play) = -500;
|
||||
return;
|
||||
}
|
||||
if (GET_EVENTCHKINF(EVENTCHKINF_74)) {
|
||||
if (GET_EVENTCHKINF(EVENTCHKINF_BEGAN_MORPHA_BATTLE)) {
|
||||
SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, 0, NA_BGM_BOSS);
|
||||
this->tentMaxAngle = 5.0f;
|
||||
this->timers[0] = 50;
|
||||
|
@ -1434,7 +1434,7 @@ void BossMo_IntroCs(BossMo* this, PlayState* play) {
|
|||
if (this->timers[2] == 130) {
|
||||
TitleCard_InitBossName(play, &play->actorCtx.titleCtx, SEGMENTED_TO_VIRTUAL(gMorphaTitleCardTex), 160,
|
||||
180, 128, 40);
|
||||
SET_EVENTCHKINF(EVENTCHKINF_74);
|
||||
SET_EVENTCHKINF(EVENTCHKINF_BEGAN_MORPHA_BATTLE);
|
||||
}
|
||||
break;
|
||||
case MO_INTRO_FINISH:
|
||||
|
|
|
@ -383,7 +383,7 @@ void BossSst_HeadSetupIntro(BossSst* this, PlayState* play) {
|
|||
Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STAT_WAIT);
|
||||
Play_ChangeCameraStatus(play, sSubCamId, CAM_STAT_ACTIVE);
|
||||
Math_Vec3f_Copy(&sSubCamAt, &player->actor.world.pos);
|
||||
if (GET_EVENTCHKINF(EVENTCHKINF_77)) {
|
||||
if (GET_EVENTCHKINF(EVENTCHKINF_BEGAN_BONGO_BONGO_BATTLE)) {
|
||||
sSubCamEye.z = ROOM_CENTER_Z - 100.0f;
|
||||
}
|
||||
|
||||
|
@ -419,7 +419,7 @@ void BossSst_HeadIntro(BossSst* this, PlayState* play) {
|
|||
Play_ChangeCameraStatus(play, sSubCamId, CAM_STAT_WAIT);
|
||||
Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STAT_ACTIVE);
|
||||
Play_ClearCamera(play, sSubCamId);
|
||||
SET_EVENTCHKINF(EVENTCHKINF_77);
|
||||
SET_EVENTCHKINF(EVENTCHKINF_BEGAN_BONGO_BONGO_BATTLE);
|
||||
BossSst_HeadSetupNeutral(this);
|
||||
this->colliderJntSph.base.ocFlags1 |= OC1_ON;
|
||||
sHands[LEFT]->colliderJntSph.base.ocFlags1 |= OC1_ON;
|
||||
|
@ -442,7 +442,7 @@ void BossSst_HeadIntro(BossSst* this, PlayState* play) {
|
|||
this->ready = true;
|
||||
Rumble_Request(this->actor.xyzDistToPlayerSq, 255, 20, 150);
|
||||
Actor_PlaySfx(&sFloor->dyna.actor, NA_SE_EN_SHADEST_TAIKO_HIGH);
|
||||
} else if (GET_EVENTCHKINF(EVENTCHKINF_77)) {
|
||||
} else if (GET_EVENTCHKINF(EVENTCHKINF_BEGAN_BONGO_BONGO_BATTLE)) {
|
||||
//! @bug This condition assumes that the second bounce on the ground will occur before frame 545 on the
|
||||
//! timer. However, it is possible to delay Player's descent to the ground by, for example, jumpslashing
|
||||
//! on the last possible frame before the cutscene takes control. This delays Player's fall to the
|
||||
|
@ -575,7 +575,7 @@ void BossSst_HeadIntro(BossSst* this, PlayState* play) {
|
|||
}
|
||||
if (this->timer <= 198) {
|
||||
revealStateTimer = 198 - this->timer;
|
||||
if (GET_EVENTCHKINF(EVENTCHKINF_77) && (revealStateTimer <= 44)) {
|
||||
if (GET_EVENTCHKINF(EVENTCHKINF_BEGAN_BONGO_BONGO_BATTLE) && (revealStateTimer <= 44)) {
|
||||
sSubCamAt.x += 492.0f * 0.01f;
|
||||
sSubCamAt.y += 200.0f * 0.01f;
|
||||
sSubCamEye.x -= 80.0f * 0.01f;
|
||||
|
@ -604,7 +604,7 @@ void BossSst_HeadIntro(BossSst* this, PlayState* play) {
|
|||
sSubCamEye.y += 125.0f * 0.01f;
|
||||
sSubCamEye.z -= 350.0f * 0.01f;
|
||||
} else if (revealStateTimer == 85) {
|
||||
if (!GET_EVENTCHKINF(EVENTCHKINF_77)) {
|
||||
if (!GET_EVENTCHKINF(EVENTCHKINF_BEGAN_BONGO_BONGO_BATTLE)) {
|
||||
TitleCard_InitBossName(play, &play->actorCtx.titleCtx, SEGMENTED_TO_VIRTUAL(gBongoTitleCardTex),
|
||||
160, 180, 128, 40);
|
||||
}
|
||||
|
|
|
@ -515,7 +515,7 @@ void BossTw_Init(Actor* thisx, PlayState* play2) {
|
|||
this->actor.naviEnemyId = NAVI_ENEMY_TWINROVA_KOTAKE;
|
||||
SkelAnime_InitFlex(play, &this->skelAnime, &gTwinrovaKotakeSkel, &gTwinrovaKotakeKoumeFlyAnim, NULL, NULL, 0);
|
||||
|
||||
if (GET_EVENTCHKINF(EVENTCHKINF_75)) {
|
||||
if (GET_EVENTCHKINF(EVENTCHKINF_BEGAN_TWINROVA_BATTLE)) {
|
||||
// began twinrova battle
|
||||
BossTw_SetupFlyTo(this, play);
|
||||
this->actor.world.pos.x = -600.0f;
|
||||
|
@ -533,7 +533,7 @@ void BossTw_Init(Actor* thisx, PlayState* play2) {
|
|||
this->actor.naviEnemyId = NAVI_ENEMY_TWINROVA_KOUME;
|
||||
SkelAnime_InitFlex(play, &this->skelAnime, &gTwinrovaKoumeSkel, &gTwinrovaKotakeKoumeFlyAnim, NULL, NULL, 0);
|
||||
|
||||
if (GET_EVENTCHKINF(EVENTCHKINF_75)) {
|
||||
if (GET_EVENTCHKINF(EVENTCHKINF_BEGAN_TWINROVA_BATTLE)) {
|
||||
// began twinrova battle
|
||||
BossTw_SetupFlyTo(this, play);
|
||||
this->actor.world.pos.x = 600.0f;
|
||||
|
@ -555,7 +555,7 @@ void BossTw_Init(Actor* thisx, PlayState* play2) {
|
|||
SkelAnime_InitFlex(play, &this->skelAnime, &gTwinrovaSkel, &gTwinrovaTPoseAnim, NULL, NULL, 0);
|
||||
Animation_MorphToLoop(&this->skelAnime, &gTwinrovaTPoseAnim, -3.0f);
|
||||
|
||||
if (GET_EVENTCHKINF(EVENTCHKINF_75)) {
|
||||
if (GET_EVENTCHKINF(EVENTCHKINF_BEGAN_TWINROVA_BATTLE)) {
|
||||
// began twinrova battle
|
||||
BossTw_SetupWait(this, play);
|
||||
} else {
|
||||
|
@ -2219,7 +2219,7 @@ void BossTw_TwinrovaIntroCS(BossTw* this, PlayState* play) {
|
|||
play->envCtx.lightBlend = 0.0f;
|
||||
TitleCard_InitBossName(play, &play->actorCtx.titleCtx, SEGMENTED_TO_VIRTUAL(gTwinrovaTitleCardTex), 160,
|
||||
180, 128, 40);
|
||||
SET_EVENTCHKINF(EVENTCHKINF_75);
|
||||
SET_EVENTCHKINF(EVENTCHKINF_BEGAN_TWINROVA_BATTLE);
|
||||
SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, 0, NA_BGM_BOSS);
|
||||
}
|
||||
|
||||
|
|
|
@ -642,7 +642,7 @@ void BossVa_Init(Actor* thisx, PlayState* play2) {
|
|||
} else {
|
||||
this->actor.colChkInfo.damageTable = sDamageTable;
|
||||
sPhase2Timer = 0xFFFF;
|
||||
if (GET_EVENTCHKINF(EVENTCHKINF_76)) {
|
||||
if (GET_EVENTCHKINF(EVENTCHKINF_BEGAN_BARINADE_BATTLE)) {
|
||||
sCsState = INTRO_CALL_BARI;
|
||||
sDoorState = 100;
|
||||
Player_SetCsActionWithHaltedActors(play, &this->actor, PLAYER_CSACTION_1);
|
||||
|
@ -977,7 +977,7 @@ void BossVa_BodyIntro(BossVa* this, PlayState* play) {
|
|||
sSubCamAtNext.y = 140.0f;
|
||||
sSubCamAtNext.z = -200.0f;
|
||||
|
||||
if (!GET_EVENTCHKINF(EVENTCHKINF_76)) {
|
||||
if (!GET_EVENTCHKINF(EVENTCHKINF_BEGAN_BARINADE_BATTLE)) {
|
||||
TitleCard_InitBossName(play, &play->actorCtx.titleCtx, SEGMENTED_TO_VIRTUAL(gBarinadeTitleCardTex),
|
||||
160, 180, 128, 40);
|
||||
}
|
||||
|
@ -1019,7 +1019,7 @@ void BossVa_BodyIntro(BossVa* this, PlayState* play) {
|
|||
Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STAT_ACTIVE);
|
||||
Player_SetCsActionWithHaltedActors(play, &this->actor, PLAYER_CSACTION_7);
|
||||
sCsState++;
|
||||
SET_EVENTCHKINF(EVENTCHKINF_76);
|
||||
SET_EVENTCHKINF(EVENTCHKINF_BEGAN_BARINADE_BATTLE);
|
||||
player->actor.shape.rot.y = player->actor.world.rot.y = this->actor.yawTowardsPlayer + 0x8000;
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -39,15 +39,15 @@ static CutsceneData gFireMedallionCs[] = {
|
|||
CS_FADE_OUT_SEQ(CS_FADE_OUT_BGM_MAIN, 500, 550, 0x0000, 0x00000000, 0x00000000, 0xFFFFFFC3, 0x0000006E, 0x00000000, 0xFFFFFFC3, 0x0000006E),
|
||||
CS_TEXT_LIST(10),
|
||||
CS_TEXT_NONE(0, 310),
|
||||
CS_TEXT(0x303C, 310, 323, 0x0000, 0x0000, 0x0000),
|
||||
CS_TEXT(0x303C, 310, 323, CS_TEXT_NORMAL, 0x0000, 0x0000),
|
||||
CS_TEXT_NONE(323, 344),
|
||||
CS_TEXT(0x3045, 344, 394, 0x0000, 0x0000, 0x0000),
|
||||
CS_TEXT(0x3045, 344, 394, CS_TEXT_NORMAL, 0x0000, 0x0000),
|
||||
CS_TEXT_NONE(394, 415),
|
||||
CS_TEXT(0x3046, 415, 465, 0x0000, 0x0000, 0x0000),
|
||||
CS_TEXT(0x3046, 415, 465, CS_TEXT_NORMAL, 0x0000, 0x0000),
|
||||
CS_TEXT_NONE(465, 800),
|
||||
CS_TEXT(0x003C, 800, 805, 0x0000, 0x0000, 0x0000),
|
||||
CS_TEXT(0x003C, 800, 805, CS_TEXT_NORMAL, 0x0000, 0x0000),
|
||||
CS_TEXT_NONE(805, 865),
|
||||
CS_TEXT(0x303D, 865, 875, 0x0000, 0x0000, 0x0000),
|
||||
CS_TEXT(0x303D, 865, 875, CS_TEXT_NORMAL, 0x0000, 0x0000),
|
||||
CS_CAM_EYE_SPLINE(0, 1361),
|
||||
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, CS_FLOAT(0x4271999A, 60.4f), -85, 3211, 795, 0x00C6),
|
||||
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, CS_FLOAT(0x4271999A, 60.4f), -85, 3211, 795, 0x00C8),
|
||||
|
|
|
@ -35,19 +35,19 @@ static CutsceneData gShadowMedallionCs[] = {
|
|||
CS_START_SEQ(NA_BGM_MEDALLION_GET, 770, 771, 0x0000, 0x00000000, 0x00000000, 0xFFFFFFC9, 0x0000005C, 0x00000000, 0xFFFFFFC9, 0x0000005C),
|
||||
CS_TEXT_LIST(14),
|
||||
CS_TEXT_NONE(0, 340),
|
||||
CS_TEXT(0x5022, 340, 353, 0x0000, 0x0000, 0x0000),
|
||||
CS_TEXT(0x5022, 340, 353, CS_TEXT_NORMAL, 0x0000, 0x0000),
|
||||
CS_TEXT_NONE(353, 374),
|
||||
CS_TEXT(0x5025, 374, 404, 0x0000, 0x0000, 0x0000),
|
||||
CS_TEXT(0x5025, 374, 404, CS_TEXT_NORMAL, 0x0000, 0x0000),
|
||||
CS_TEXT_NONE(404, 424),
|
||||
CS_TEXT(0x502B, 424, 474, 0x0000, 0x0000, 0x0000),
|
||||
CS_TEXT(0x502B, 424, 474, CS_TEXT_NORMAL, 0x0000, 0x0000),
|
||||
CS_TEXT_NONE(474, 494),
|
||||
CS_TEXT(0x502C, 494, 543, 0x0000, 0x0000, 0x0000),
|
||||
CS_TEXT(0x502C, 494, 543, CS_TEXT_NORMAL, 0x0000, 0x0000),
|
||||
CS_TEXT_NONE(543, 564),
|
||||
CS_TEXT(0x5026, 564, 613, 0x0000, 0x0000, 0x0000),
|
||||
CS_TEXT(0x5026, 564, 613, CS_TEXT_NORMAL, 0x0000, 0x0000),
|
||||
CS_TEXT_NONE(613, 955),
|
||||
CS_TEXT(0x0041, 955, 959, 0x0000, 0x0000, 0x0000),
|
||||
CS_TEXT(0x0041, 955, 959, CS_TEXT_NORMAL, 0x0000, 0x0000),
|
||||
CS_TEXT_NONE(959, 1020),
|
||||
CS_TEXT(0x5023, 1020, 1029, 0x0000, 0x0000, 0x0000),
|
||||
CS_TEXT(0x5023, 1020, 1029, CS_TEXT_NORMAL, 0x0000, 0x0000),
|
||||
CS_DESTINATION(CS_DEST_GRAVEYARD_FROM_CHAMBER_OF_SAGES, 1060, 1061),
|
||||
CS_FADE_OUT_SEQ_LIST(1),
|
||||
CS_FADE_OUT_SEQ(CS_FADE_OUT_BGM_MAIN, 673, 723, 0x0000, 0x00000000, 0x00000000, 0xFFFFFFC1, 0x00000058, 0x00000000, 0xFFFFFFC1, 0x00000058),
|
||||
|
|
|
@ -30,15 +30,15 @@ static CutsceneData gForestMedallionCs[] = {
|
|||
CS_DESTINATION(CS_DEST_KOKIRI_FOREST_FROM_CHAMBER_OF_SAGES, 974, 1050),
|
||||
CS_TEXT_LIST(10),
|
||||
CS_TEXT_NONE(0, 303),
|
||||
CS_TEXT(0x106A, 303, 323, 0x0000, 0x0000, 0x0000),
|
||||
CS_TEXT(0x106A, 303, 323, CS_TEXT_NORMAL, 0x0000, 0x0000),
|
||||
CS_TEXT_NONE(323, 344),
|
||||
CS_TEXT(0x108F, 344, 394, 0x0000, 0x0000, 0x0000),
|
||||
CS_TEXT(0x108F, 344, 394, CS_TEXT_NORMAL, 0x0000, 0x0000),
|
||||
CS_TEXT_NONE(394, 415),
|
||||
CS_TEXT(0x1090, 415, 465, 0x0000, 0x0000, 0x0000),
|
||||
CS_TEXT(0x1090, 415, 465, CS_TEXT_NORMAL, 0x0000, 0x0000),
|
||||
CS_TEXT_NONE(465, 871),
|
||||
CS_TEXT(0x003E, 871, 875, 0x0000, 0x0000, 0x0000),
|
||||
CS_TEXT(0x003E, 871, 875, CS_TEXT_NORMAL, 0x0000, 0x0000),
|
||||
CS_TEXT_NONE(875, 936),
|
||||
CS_TEXT(0x106B, 936, 946, 0x0000, 0x0000, 0x0000),
|
||||
CS_TEXT(0x106B, 936, 946, CS_TEXT_NORMAL, 0x0000, 0x0000),
|
||||
CS_START_SEQ_LIST(1),
|
||||
CS_START_SEQ(NA_BGM_MEDALLION_GET, 686, 687, 0x0000, 0x00000000, 0x00000000, 0xFFFFFFC5, 0x00000057, 0x00000000, 0xFFFFFFC5, 0x00000057),
|
||||
CS_FADE_OUT_SEQ_LIST(1),
|
||||
|
|
|
@ -879,7 +879,7 @@ void DoorShutter_GohmaBlockFall(DoorShutter* this, PlayState* play) {
|
|||
Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_2);
|
||||
if (this->dyna.actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
|
||||
DoorShutter_SetupAction(this, DoorShutter_GohmaBlockBounce);
|
||||
if (!GET_EVENTCHKINF(EVENTCHKINF_70)) {
|
||||
if (!GET_EVENTCHKINF(EVENTCHKINF_BEGAN_GOHMA_BATTLE)) {
|
||||
BossGoma* parent = (BossGoma*)this->dyna.actor.parent;
|
||||
|
||||
this->isActive = 10;
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue