Merge remote-tracking branch 'upstream/master' into actor_table

This commit is contained in:
angie
2022-08-05 20:14:52 -04:00
122 changed files with 12035 additions and 2652 deletions
+27 -11
View File
@@ -113,6 +113,7 @@ ELF2ROM := tools/buildtools/elf2rom
MKLDSCRIPT := tools/buildtools/mkldscript
YAZ0 := tools/buildtools/yaz0
ZAPD := tools/ZAPD/ZAPD.out
FADO := tools/fado/fado.elf
OPTFLAGS := -O2 -g3
ASFLAGS := -march=vr4300 -32 -Iinclude
@@ -184,9 +185,11 @@ O_FILES := $(foreach f,$(S_FILES:.s=.o),build/$f) \
$(foreach f,$(C_FILES:.c=.o),build/$f) \
$(foreach f,$(BASEROM_FILES),build/$f.o)
OVL_RELOC_FILES := $(shell $(CPP) $(CPPFLAGS) $(SPEC) | grep -o '[^"]*_reloc.o' )
# Automatic dependency files
# (Only asm_processor dependencies are handled for now)
DEP_FILES := $(O_FILES:.o=.asmproc.d)
# (Only asm_processor dependencies and reloc dependencies are handled for now)
DEP_FILES := $(O_FILES:.o=.asmproc.d) $(OVL_RELOC_FILES:.o=.d)
# create build directories
$(shell mkdir -p build/baserom $(foreach dir,$(SRC_DIRS) $(ASM_DIRS) $(ASSET_BIN_DIRS),build/$(dir)))
@@ -262,9 +265,20 @@ $(ROM): $(ELF)
$(ROMC): $(ROM)
python3 tools/z64compress_wrapper.py $(COMPFLAGS) $(ROM) $@ $(ELF) build/$(SPEC)
$(ELF): $(TEXTURE_FILES_OUT) $(ASSET_FILES_OUT) $(O_FILES) build/ldscript.txt build/undefined_syms.txt
$(ELF): $(TEXTURE_FILES_OUT) $(ASSET_FILES_OUT) $(O_FILES) $(OVL_RELOC_FILES) build/ldscript.txt build/undefined_syms.txt
$(LD) -T build/undefined_syms.txt -T build/ldscript.txt --no-check-sections --accept-unknown-input-arch --emit-relocs -Map build/mm.map -o $@
## Order-only prerequisites
# These ensure e.g. the O_FILES are built before the OVL_RELOC_FILES.
# The intermediate phony targets avoid quadratically-many dependencies between the targets and prerequisites.
o_files: $(O_FILES)
$(OVL_RELOC_FILES): | o_files
asset_files: $(TEXTURE_FILES_OUT) $(ASSET_FILES_OUT)
$(O_FILES): | asset_files
.PHONY: o_files asset_files
#### Main commands ####
@@ -313,9 +327,11 @@ init:
build/undefined_syms.txt: undefined_syms.txt
$(CPP) $(CPPFLAGS) $< > build/undefined_syms.txt
build/ldscript.txt: $(SPEC)
$(CPP) $(CPPFLAGS) $< > build/spec
$(MKLDSCRIPT) build/spec $@
build/$(SPEC): $(SPEC)
$(CPP) $(CPPFLAGS) $< > $@
build/ldscript.txt: build/$(SPEC)
$(MKLDSCRIPT) $< $@
build/asm/%.o: asm/%.s
$(AS) $(ASFLAGS) $< -o $@
@@ -334,13 +350,13 @@ build/data/%.o: data/%.s
build/src/overlays/%.o: src/overlays/%.c
$(CC_CHECK) $<
$(CC) -c $(CFLAGS) $(MIPS_VERSION) $(OPTFLAGS) -o $@ $<
$(OBJDUMP_CMD)
# TODO: `() || true` is currently necessary to suppress `Error 1 (ignored)` make warnings caused by `test`, but this will go away if
# the following is moved to a separate rule that is only run once when all the required objects have been compiled.
$(ZAPD) bovl -eh -i $@ -cfg $< --outputpath $(@D)/$(notdir $(@D))_reloc.s
(test -f $(@D)/$(notdir $(@D))_reloc.s && $(AS) $(ASFLAGS) $(@D)/$(notdir $(@D))_reloc.s -o $(@D)/$(notdir $(@D))_reloc.o) || true
@$(OBJDUMP) -d $@ > $(@:.o=.s)
$(RM_MDEBUG)
build/src/overlays/%_reloc.o: build/$(SPEC)
$(FADO) $$(tools/buildtools/reloc_prereq $< $(notdir $*)) -n $(notdir $*) -o $(@:.o=.s) -M $(@:.o=.d)
$(AS) $(ASFLAGS) $(@:.o=.s) -o $@
build/src/%.o: src/%.c
$(CC_CHECK) $<
$(CC) -c $(CFLAGS) $(MIPS_VERSION) $(OPTFLAGS) -o $@ $<
+1 -1
View File
@@ -37,7 +37,7 @@ Please refer to the following for more information:
- [Website](https://zelda64.dev/)
- [Discord](https://discord.zelda64.dev/)
- [How to Contribute](CONTRIBUTING.md)
- [How to Contribute](docs/CONTRIBUTING.md)
## Installation
+79 -59
View File
@@ -1,63 +1,83 @@
<Root>
<!-- Assets for white-clothed Gerudo -->
<File Name="object_ge1" Segment="6">
<Animation Name="object_ge1_Anim_000594" Offset="0x594" />
<Animation Name="object_ge1_Anim_000ABC" Offset="0xABC" />
<Animation Name="object_ge1_Anim_000CF8" Offset="0xCF8" />
<Animation Name="object_ge1_Anim_0013CC" Offset="0x13CC" />
<Animation Name="object_ge1_Anim_00202C" Offset="0x202C" />
<Animation Name="object_ge1_Anim_002148" Offset="0x2148" />
<Animation Name="object_ge1_Anim_002954" Offset="0x2954" />
<Animation Name="object_ge1_Anim_002AD8" Offset="0x2AD8" />
<Animation Name="object_ge1_Anim_002B98" Offset="0x2B98" />
<Limb Name="object_ge1_Standardlimb_002BB0" Type="Standard" EnumName="OBJECT_GE1_LIMB_01" Offset="0x2BB0" />
<Limb Name="object_ge1_Standardlimb_002BBC" Type="Standard" EnumName="OBJECT_GE1_LIMB_02" Offset="0x2BBC" />
<Limb Name="object_ge1_Standardlimb_002BC8" Type="Standard" EnumName="OBJECT_GE1_LIMB_03" Offset="0x2BC8" />
<Limb Name="object_ge1_Standardlimb_002BD4" Type="Standard" EnumName="OBJECT_GE1_LIMB_04" Offset="0x2BD4" />
<Limb Name="object_ge1_Standardlimb_002BE0" Type="Standard" EnumName="OBJECT_GE1_LIMB_05" Offset="0x2BE0" />
<Limb Name="object_ge1_Standardlimb_002BEC" Type="Standard" EnumName="OBJECT_GE1_LIMB_06" Offset="0x2BEC" />
<Limb Name="object_ge1_Standardlimb_002BF8" Type="Standard" EnumName="OBJECT_GE1_LIMB_07" Offset="0x2BF8" />
<Limb Name="object_ge1_Standardlimb_002C04" Type="Standard" EnumName="OBJECT_GE1_LIMB_08" Offset="0x2C04" />
<Limb Name="object_ge1_Standardlimb_002C10" Type="Standard" EnumName="OBJECT_GE1_LIMB_09" Offset="0x2C10" />
<Limb Name="object_ge1_Standardlimb_002C1C" Type="Standard" EnumName="OBJECT_GE1_LIMB_0A" Offset="0x2C1C" />
<Limb Name="object_ge1_Standardlimb_002C28" Type="Standard" EnumName="OBJECT_GE1_LIMB_0B" Offset="0x2C28" />
<Limb Name="object_ge1_Standardlimb_002C34" Type="Standard" EnumName="OBJECT_GE1_LIMB_0C" Offset="0x2C34" />
<Limb Name="object_ge1_Standardlimb_002C40" Type="Standard" EnumName="OBJECT_GE1_LIMB_0D" Offset="0x2C40" />
<Limb Name="object_ge1_Standardlimb_002C4C" Type="Standard" EnumName="OBJECT_GE1_LIMB_0E" Offset="0x2C4C" />
<Limb Name="object_ge1_Standardlimb_002C58" Type="Standard" EnumName="OBJECT_GE1_LIMB_0F" Offset="0x2C58" />
<Skeleton Name="object_ge1_Skel_002CA0" Type="Flex" LimbType="Standard" LimbNone="OBJECT_GE1_LIMB_NONE" LimbMax="OBJECT_GE1_LIMB_MAX" EnumName="object_ge1_Limbs" Offset="0x2CA0" />
<Texture Name="object_ge1_TLUT_002CB8" OutName="tlut_002CB8" Format="rgba16" Width="16" Height="16" Offset="0x2CB8" />
<Texture Name="object_ge1_Tex_002EB8" OutName="tex_002EB8" Format="ci8" Width="8" Height="8" Offset="0x2EB8" />
<Texture Name="object_ge1_Tex_002EF8" OutName="tex_002EF8" Format="ci8" Width="16" Height="16" Offset="0x2EF8" />
<Texture Name="object_ge1_Tex_002FF8" OutName="tex_002FF8" Format="ci8" Width="8" Height="16" Offset="0x2FF8" />
<!-- <Blob Name="object_ge1_Blob_003078" Size="0x1800" Offset="0x3078" /> -->
<Texture Name="object_ge1_Tex_004878" OutName="tex_004878" Format="ci8" Width="32" Height="32" Offset="0x4878" />
<Texture Name="object_ge1_Tex_004C78" OutName="tex_004C78" Format="ci8" Width="8" Height="16" Offset="0x4C78" />
<Texture Name="object_ge1_Tex_004CF8" OutName="tex_004CF8" Format="ci8" Width="16" Height="16" Offset="0x4CF8" />
<Texture Name="object_ge1_Tex_004DF8" OutName="tex_004DF8" Format="ci8" Width="16" Height="16" Offset="0x4DF8" />
<Texture Name="object_ge1_Tex_004EF8" OutName="tex_004EF8" Format="ci8" Width="16" Height="16" Offset="0x4EF8" />
<Texture Name="object_ge1_Tex_004FF8" OutName="tex_004FF8" Format="ci8" Width="8" Height="8" Offset="0x4FF8" />
<Texture Name="object_ge1_Tex_005038" OutName="tex_005038" Format="ci8" Width="8" Height="16" Offset="0x5038" />
<Texture Name="object_ge1_Tex_0050B8" OutName="tex_0050B8" Format="ci8" Width="8" Height="8" Offset="0x50B8" />
<Texture Name="object_ge1_Tex_0050F8" OutName="tex_0050F8" Format="rgba16" Width="8" Height="8" Offset="0x50F8" />
<Texture Name="object_ge1_TLUT_005178" OutName="tlut_005178" Format="rgba16" Width="16" Height="16" Offset="0x5178" />
<Texture Name="object_ge1_Tex_005378" OutName="tex_005378" Format="ci8" Width="16" Height="16" Offset="0x5378" />
<DList Name="object_ge1_DL_007F78" Offset="0x7F78" />
<DList Name="object_ge1_DL_0085A8" Offset="0x85A8" />
<DList Name="object_ge1_DL_0089B0" Offset="0x89B0" />
<DList Name="object_ge1_DL_008B58" Offset="0x8B58" />
<DList Name="object_ge1_DL_008C88" Offset="0x8C88" />
<DList Name="object_ge1_DL_008E80" Offset="0x8E80" />
<DList Name="object_ge1_DL_009028" Offset="0x9028" />
<DList Name="object_ge1_DL_009158" Offset="0x9158" />
<DList Name="object_ge1_DL_009350" Offset="0x9350" />
<DList Name="object_ge1_DL_009440" Offset="0x9440" />
<DList Name="object_ge1_DL_009570" Offset="0x9570" />
<DList Name="object_ge1_DL_0097C0" Offset="0x97C0" />
<DList Name="object_ge1_DL_009A20" Offset="0x9A20" />
<DList Name="object_ge1_DL_009B50" Offset="0x9B50" />
<DList Name="object_ge1_DL_009D18" Offset="0x9D18" />
<DList Name="object_ge1_DL_00BB08" Offset="0xBB08" />
<DList Name="object_ge1_DL_00BDA0" Offset="0xBDA0" />
<DList Name="object_ge1_DL_00C000" Offset="0xC000" />
<!-- White-clothed Gerudo Animations -->
<Animation Name="gGerudoWhiteStandingHeadBowedAnim" Offset="0x594" /><!-- Original name may be "gb_ie" ("home")? -->
<Animation Name="gGerudoWhiteSaluteAnim" Offset="0xABC" /><!-- Original name: "gb_keirei" ("salute/bow") -->
<Animation Name="gGerudoWhiteStiffeningAnim" Offset="0xCF8" /><!-- Original name: "gb_kochoku" ("stiffening/rigidity") -->
<Animation Name="gGerudoWhiteStiffShiveringAnim" Offset="0x13CC" /><!-- Original name: "gb_kochoku_loop" ("stiffening loop") -->
<Animation Name="gGerudoWhiteTrudgingOffAnim" Offset="0x202C" /><!-- Original name: "gb_tobotobo" ("totteringly/trudgingly") -->
<Animation Name="gGerudoWhiteGreatBayCutsceneAnim" Offset="0x2148" /><!-- one frame used for each part of Great Bay Temple first entry cutscene. Original name: "gb_twister" -->
<Animation Name="gGerudoWhiteExcitedClappingAnim" Offset="0x2954" /><!-- Original name: "gb_wakuwaku", ("excited") -->
<Animation Name="gGerudoWhiteUnfoldingArmsAnim" Offset="0x2AD8" /><!-- Original name: "ge1_hanasi" ("talk") -->
<!-- From here to the end this file is identical to OoT's object_ge1, offset 0x0-0x9860 -->
<Animation Name="gGerudoWhiteArmsFoldedAnim" Offset="0x2B98" /><!-- Original name: "ge1_matsu" ("waiting") -->
<!-- White-clothed Gerudo Limbs -->
<Limb Name="gGerudoWhiteWaistLimb" Type="Standard" EnumName="GERUDO_WHITE_LIMB_WAIST" Offset="0x2BB0" />
<Limb Name="gGerudoWhiteLeftThighLimb" Type="Standard" EnumName="GERUDO_WHITE_LIMB_LEFT_THIGH" Offset="0x2BBC" />
<Limb Name="gGerudoWhiteLeftShinLimb" Type="Standard" EnumName="GERUDO_WHITE_LIMB_LEFT_LOWER_LEG" Offset="0x2BC8" />
<Limb Name="gGerudoWhiteLeftFootLimb" Type="Standard" EnumName="GERUDO_WHITE_LIMB_LEFT_FOOT" Offset="0x2BD4" />
<Limb Name="gGerudoWhiteRightThighLimb" Type="Standard" EnumName="GERUDO_WHITE_LIMB_RIGHT_THIGH" Offset="0x2BE0" />
<Limb Name="gGerudoWhiteRightShinLimb" Type="Standard" EnumName="GERUDO_WHITE_LIMB_RIGHT_LOWER_LEG" Offset="0x2BEC" />
<Limb Name="gGerudoWhiteRightFootLimb" Type="Standard" EnumName="GERUDO_WHITE_LIMB_RIGHT_FOOT" Offset="0x2BF8" />
<Limb Name="gGerudoWhiteTorsoLimb" Type="Standard" EnumName="GERUDO_WHITE_LIMB_TORSO" Offset="0x2C04" />
<Limb Name="gGerudoWhiteLeftUpperArmLimb" Type="Standard" EnumName="GERUDO_WHITE_LIMB_LEFT_UPPER_ARM" Offset="0x2C10" />
<Limb Name="gGerudoWhiteLeftForearmLimb" Type="Standard" EnumName="GERUDO_WHITE_LIMB_LEFT_FOREARM" Offset="0x2C1C" />
<Limb Name="gGerudoWhiteLeftHandLimb" Type="Standard" EnumName="GERUDO_WHITE_LIMB_LEFT_HAND" Offset="0x2C28" />
<Limb Name="gGerudoWhiteRightUpperArmLimb" Type="Standard" EnumName="GERUDO_WHITE_LIMB_RIGHT_UPPER_ARM" Offset="0x2C34" />
<Limb Name="gGerudoWhiteRightForearmLimb" Type="Standard" EnumName="GERUDO_WHITE_LIMB_RIGHT_FOREARM" Offset="0x2C40" />
<Limb Name="gGerudoWhiteRightHandLimb" Type="Standard" EnumName="GERUDO_WHITE_LIMB_RIGHT_HAND" Offset="0x2C4C" />
<Limb Name="gGerudoWhiteHeadLimb" Type="Standard" EnumName="GERUDO_WHITE_LIMB_HEAD" Offset="0x2C58" />
<!-- White-clothed Gerudo Skeleton -->
<Skeleton Name="gGerudoWhiteSkel" Type="Flex" LimbType="Standard" LimbNone="GERUDO_WHITE_LIMB_NONE" LimbMax="GERUDO_WHITE_LIMB_MAX" EnumName="GerudoWhiteLimb" Offset="0x2CA0" />
<Texture Name="gGerudoWhiteGeneralTLUT" OutName="gerudo_white_general_tlut" Format="rgba16" Width="16" Height="16" Offset="0x2CB8" />
<Texture Name="gGerudoWhiteSkinGradientTex" OutName="gerudo_white_skin_gradient" Format="ci8" Width="8" Height="8" Offset="0x2EB8" TlutOffset="0x2CB8" />
<Texture Name="gGerudoWhiteWhiteFabricLipsTex" OutName="gerudo_white_white_fabric_lips" Format="ci8" Width="16" Height="16" Offset="0x2EF8" TlutOffset="0x2CB8" />
<Texture Name="gGerudoWhiteEarTex" OutName="gerudo_white_ear" Format="ci8" Width="8" Height="16" Offset="0x2FF8" TlutOffset="0x2CB8" />
<!-- White-clothed Gerudo Eye Textures -->
<Texture Name="gGerudoWhiteEyeOpenTex" OutName="gerudo_white_eye_open" Format="rgba16" Width="32" Height="32" Offset="0x3078"/>
<Texture Name="gGerudoWhiteEyeHalfTex" OutName="gerudo_white_eye_half" Format="rgba16" Width="32" Height="32" Offset="0x3878"/>
<Texture Name="gGerudoWhiteEyeClosedTex" OutName="gerudo_white_eye_closed" Format="rgba16" Width="32" Height="32" Offset="0x4078"/>
<Texture Name="gGerudoWhiteFingersTex" OutName="gerudo_white_fingers" Format="ci8" Width="32" Height="32" Offset="0x4878" TlutOffset="0x2CB8" />
<Texture Name="gGerudoWhiteArmletTex" OutName="gerudo_white_armlet" Format="ci8" Width="8" Height="16" Offset="0x4C78" TlutOffset="0x2CB8" />
<Texture Name="gGerudoWhiteJacketTex" OutName="gerudo_white_jacket" Format="ci8" Width="16" Height="16" Offset="0x4CF8" TlutOffset="0x2CB8" />
<Texture Name="gGerudoWhiteTubeTopTex" OutName="gerudo_white_tube_top" Format="ci8" Width="16" Height="16" Offset="0x4DF8" TlutOffset="0x2CB8" />
<Texture Name="gGerudoWhiteNavelTex" OutName="gerudo_white_navel" Format="ci8" Width="16" Height="16" Offset="0x4EF8" TlutOffset="0x2CB8" />
<Texture Name="gGerudoWhiteCleavageTex" OutName="gerudo_white_cleavage" Format="ci8" Width="8" Height="8" Offset="0x4FF8" TlutOffset="0x2CB8" />
<Texture Name="gGerudoWhiteShoeUpperTex" OutName="gerudo_white_shoe_upper" Format="ci8" Width="8" Height="16" Offset="0x5038" TlutOffset="0x2CB8" />
<Texture Name="gGerudoWhiteShoeSoleTex" OutName="gerudo_white_shoe_sole" Format="ci8" Width="8" Height="8" Offset="0x50B8" TlutOffset="0x2CB8" />
<Texture Name="gGerudoWhiteCrotchTex" OutName="gerudo_white_crotch" Format="rgba16" Width="8" Height="8" Offset="0x50F8" />
<!-- White-clothed Gerudo Hair Textures -->
<Texture Name="gGerudoWhiteHairTLUT" OutName="gerudo_white_hair_tlut" Format="rgba16" Width="16" Height="16" Offset="0x5178" />
<Texture Name="gGerudoWhiteHairTex" OutName="gerudo_white_hair" Format="ci8" Width="16" Height="16" Offset="0x5378" TlutOffset="0x5178" />
<!-- White-clothed Gerudo Limb DisplayLists -->
<DList Name="gGerudoWhiteWaistDL" Offset="0x7F78" />
<DList Name="gGerudoWhiteLeftThighDL" Offset="0x85A8" />
<DList Name="gGerudoWhiteLeftShinDL" Offset="0x89B0" />
<DList Name="gGerudoWhiteLeftFootDL" Offset="0x8B58" />
<DList Name="gGerudoWhiteRightThighDL" Offset="0x8C88" />
<DList Name="gGerudoWhiteRightShinDL" Offset="0x8E80" />
<DList Name="gGerudoWhiteRightFootDL" Offset="0x9028" />
<DList Name="gGerudoWhiteTorsoDL" Offset="0x9158" />
<DList Name="gGerudoWhiteLeftUpperArmDL" Offset="0x9350" />
<DList Name="gGerudoWhiteLeftForearmDL" Offset="0x9440" />
<DList Name="gGerudoWhiteLeftHandDL" Offset="0x9570" />
<DList Name="gGerudoWhiteRightUpperArmDL" Offset="0x97C0" />
<DList Name="gGerudoWhiteRightForearmDL" Offset="0x9A20" />
<DList Name="gGerudoWhiteRightHandDL" Offset="0x9B50" />
<DList Name="gGerudoWhiteHeadDL" Offset="0x9D18" />
<!-- White-clothed Gerudo Hairstyle DisplayLists -->
<DList Name="gGerudoWhiteHairstyleBobDL" Offset="0xBB08" />
<DList Name="gGerudoWhiteHairstyleStraightFringeDL" Offset="0xBDA0" />
<DList Name="gGerudoWhiteHairstyleSpikyDL" Offset="0xC000" />
</File>
</Root>
+22 -56
View File
@@ -594,7 +594,7 @@ void ActorShadow_DrawFeet(Actor* actor, Lights* mapper, PlayState* play);
void Actor_SetFeetPos(Actor* actor, s32 limbIndex, s32 leftFootIndex, Vec3f* leftFootPos, s32 rightFootIndex, Vec3f* rightFootPos);
void func_800B4AEC(PlayState* play, Actor* actor, f32 y);
void func_800B4B50(Actor* actor, Lights* mapper, PlayState* play);
void Actor_GetProjectedPos(PlayState* play, Vec3f* arg1, Vec3f* arg2, f32* arg3);
void Actor_GetProjectedPos(PlayState* play, Vec3f* worldPos, Vec3f* projectedPos, f32* invW);
void Actor_DrawZTarget(TargetContext* targetCtx, PlayState* play);
@@ -2345,13 +2345,6 @@ void SkinMatrix_SetYRotation(MtxF* mf, s16 a);
void SkinMatrix_MulYRotation(MtxF* mf, s16 a);
void SkinMatrix_SetZRotation(MtxF* mf, s16 a);
s32 func_8013A240(PlayState* play);
void func_8013A41C(s32 flag);
void func_8013A46C(s32 flag);
u32 func_8013A4C4(s32 flag);
s16 func_8013A504(s16 val);
s32 func_8013A530(PlayState* play, Actor* actor, s32 flag, Vec3f* pos, Vec3s* rot, f32 distanceMin, f32 distanceMax, s16 angleError);
void View_ViewportToVp(Vp* dest, Viewport* src);
void View_Init(View* view, GraphicsContext* gfxCtx);
void View_SetViewOrientation(View* view, Vec3f* eye, Vec3f* at, Vec3f* up);
@@ -3195,51 +3188,24 @@ void AudioSeq_InitSequencePlayerChannels(s32 playerIndex);
void AudioSeq_InitSequencePlayers(void);
void func_8019AE40(s32 param_1, s32 param_2, u32 param_3, s32 param_4);
void func_8019AEC0(UNK_PTR param_1, UNK_PTR param_2);
// void func_8019AF00(void);
// void func_8019AF58(void);
// void func_8019AFE8(void);
// void func_8019B02C(void);
// void AudioOcarina_MapSongFromNotesToButtons(void);
// void func_8019B144(void);
// void func_8019B378(void);
// void func_8019B38C(void);
// void func_8019B3D0(void);
// void func_8019B4B8(void);
void AudioOcarina_StartDefault(u32 arg0);
// void func_8019B568(void);
// void func_8019B5AC(void);
// void func_8019B5EC(void);
// void func_8019B618(void);
// void func_8019B654(void);
// void func_8019B6B4(void);
// void func_8019BC44(void);
// void func_8019BE98(void);
// void func_8019C1D0(void);
// void func_8019C268(void);
// void func_8019C2E4(void);
u32 AudioOcarina_SetInstrumentId(u8 arg0);
// void func_8019C398(void);
// void func_8019C5A0(void);
// void func_8019C8D8(void);
// void func_8019CD08(void);
// void func_8019CE34(void);
// void func_8019CE6C(void);
// void func_8019CEBC(void);
// void func_8019CF6C(void);
// void func_8019CF78(void);
void AudioOcarina_SetSongStartingPos(void);
void AudioOcarina_StartAtSongStartingPos(u32 ocarinaFlags);
void AudioOcarina_StartForSongCheck(u32 ocarinaFlags, u8 ocarinaStaffPlayingPosStart);
void AudioOcarina_StartWithSongNoteLengths(u32 ocarinaFlags);
void AudioOcarina_StartDefault(u32 ocarinaFlags);
u8 func_8019B5AC(void);
void AudioOcarina_ResetAndReadInput(void);
void AudioOcarina_SetOcarinaDisableTimer(u8 resetUnused, u8 resetDelay);
u32 AudioOcarina_SetInstrument(u8 ocarinaInstrumentId);
void AudioOcarina_SetPlaybackSong(s8 songIndexPlusOne, u8 playbackState);
void AudioOcarina_SetRecordingState(u8 recordingState);
OcarinaStaff* AudioOcarina_GetRecordingStaff(void);
OcarinaStaff* AudioOcarina_GetPlayingStaff(void);
OcarinaStaff* AudioOcarina_GetPlaybackStaff(void);
// void func_8019CFA8(void);
// void AudioOcarina_TerminaWallValidateNotes(void);
void AudioOcarina_TerminaWallGenerateNotes(void);
// void AudioOcarina_MemoryGameSetNumNotes(void);
// void AudioOcarina_MemoryGameGenerateNotes(void);
// void func_8019D600(void);
void func_8019D758(void);
// void func_8019D864(void);
// void func_8019D8B4(void);
// void func_8019D8E4(void);
// void func_8019DF28(void);
// void func_8019DF64(void);
void AudioOcarina_PlayLongScarecrowAfterCredits(void);
void func_8019E014(void);
// void func_8019E110(void);
// void func_8019E14C(void);
@@ -3365,7 +3331,7 @@ void func_801A4058(UNK_TYPE arg0);
// void func_801A42C8(void);
// void func_801A4324(void);
// void func_801A4348(void);
// void func_801A4380(void);
void Audio_SetSfxVolumeExceptSystemAndOcarinaBanks(u8 arg0);
void func_801A4428(u8 reverbIndex);
void Audio_PreNMI(void);
// void func_801A44C4(void);
@@ -3402,9 +3368,9 @@ UNK_TYPE func_801A51F0(UNK_TYPE arg0);
// void func_801A5808(void);
// void func_801A5A10(void);
// void func_801A5A1C(void);
void func_801A5BD0(s32 param_1);
// void func_801A5C28(void);
// void func_801A5C8C(void);
void Audio_SetSfxBanksMute(u16 muteMask);
void Audio_SetFlagForBgmVolumeLow(u8 channelIndex);
void Audio_ClearFlagForBgmVolumeLow(u8 channelIndex);
void Audio_PlaySfxGeneral(u16 sfxId, Vec3f* param_2, u8 param_3, f32* param_4, f32* param_5, s8* param_6);
// void func_801A5DDC(void);
// void func_801A5F7C(void);
@@ -3417,7 +3383,7 @@ void func_801A7084(u8 bankId);
void Audio_StopSfxByPos(Vec3f* pos);
void func_801A7328(Vec3f* pos, u16 sfxId);
// void func_801A7484(void);
void func_801A75E8(u16 sfxId);
void Audio_StopSfxById(u16 sfxId);
// void func_801A7720(void);
void func_801A7794(u32 param_1, u32 param_2, u32 param_3);
// void func_801A7828(void);
+3
View File
@@ -11,6 +11,9 @@
#define SCREEN_WIDTH_HIGH_RES 576
#define SCREEN_HEIGHT_HIGH_RES 454
#define PROJECTED_TO_SCREEN_X(projectedPos, invW) ((projectedPos).x * (invW) * (SCREEN_WIDTH / 2) + (SCREEN_WIDTH / 2))
#define PROJECTED_TO_SCREEN_Y(projectedPos, invW) ((projectedPos).y * (invW) * (-SCREEN_HEIGHT / 2) + (SCREEN_HEIGHT / 2))
#define ARRAY_COUNT(arr) (s32)(sizeof(arr) / sizeof(arr[0]))
#define ARRAY_COUNTU(arr) (u32)(sizeof(arr) / sizeof(arr[0]))
+28 -348
View File
@@ -469,28 +469,6 @@
#define NA_SE_PL_BOUND_METAL 0x9CD
#define NA_SE_PL_WALK_WALL 0x9CE
#define NA_SE_PL_WALK_WALL_DEKU 0x9CF
#define NA_SE_PL_WALK_WALL_ZORA 0x9D0
#define NA_SE_PL_WALK_WALL_GORON 0x9D1
#define NA_SE_PL_DEKU_IDOLING1 0x9D2
#define NA_SE_PL_GOLON_IDOLING1 0x9D3
#define NA_SE_PL_ZORA_IDOLING1 0x9D4
#define NA_SE_PL_WALK_WALL2_METAL 0x9D5
#define NA_SE_PL_WALK_WALL2_DEKU 0x9D6
#define NA_SE_PL_WALK_WALL2_ZORA 0x9D7
#define NA_SE_PL_WALK_WALL2_GORON 0x9D8
#define NA_SE_PL_WALK_WEED 0x9D9
#define NA_SE_PL_WALK_WOOD 0x9DA
#define NA_SE_PL_JUMP_WOOD 0x9DB
#define NA_SE_PL_LAND_WOOD 0x9DC
#define NA_SE_PL_GIANT_SWING 0x9DD
#define NA_SE_PL_GIANT_SWING2 0x9DE
#define NA_SE_PL_GIANT_SWING_FINISH 0x9DF
#define NA_SE_PL_GIANT_GUARD 0x9E0
#define NA_SE_PL_GIANT_GUARD_OFF 0x9E1
#define NA_SE_PL_GORON_GAKKI_START 0x9E2
#define NA_SE_PL_KEIREI 0x9E3
#define NA_SE_PL_GIANT_LINK_FOOT 0x9E4
#define NA_SE_PL_DUMMY485 0x9E5
// ------------ ITEM ------------
@@ -605,6 +583,7 @@
#define NA_SE_IT_FISHING_WORM_BOUND 0x186C
#define NA_SE_IT_DUMMY_109 0x186D
#define NA_SE_IT_DUMMY_110 0x186E
#define NA_SE_IT_DUMMY_111 0x186F
// ------------ ENVIRONMENT ------------
@@ -1072,72 +1051,6 @@
#define NA_SE_EV_DEMO_KID_SAGURU 0x29CD
#define NA_SE_EV_WATER_WALL3 0x29CE
#define NA_SE_EV_BOMBERS_TAORE 0x29CF
#define NA_SE_EV_RIVER_STREAM_TOWER 0x29D0
#define NA_SE_EV_MONKEY_ROPE 0x29D1
#define NA_SE_EV_MONKEY_FOOT_PAN 0x29D2
#define NA_SE_EV_BODYFALL_SAND1 0x29D3
#define NA_SE_EV_SCOOP_SAND1 0x29D4
#define NA_SE_EV_CHICKEN_CRY_M_0600 0x29D5
#define NA_SE_EV_WATER_WALL_BIG2 0x29D6
#define NA_SE_EV_WATER_VOLTEX 0x29D7
#define NA_SE_EV_WATER_WALL_IKANA 0x29D8
#define NA_SE_EV_DOOR_OPEN_GATYA 0x29D9
#define NA_SE_EV_CLAP_1SHOT 0x29DA
#define NA_SE_EV_TRR_APPEAR 0x29DB
#define NA_SE_EV_ICE_MELT_SHORT 0x29DC
#define NA_SE_EV_DEMO37_CLOTH1 0x29DD
#define NA_SE_EV_DEMO37_CLOTH2 0x29DE
#define NA_SE_EV_DEMO37_CLOTH3 0x29DF
#define NA_SE_EV_DEMO37_CLOTH4 0x29E0
#define NA_SE_EV_WHITE_FAIRY_DASH_SHORT 0x29E1
#define NA_SE_EV_WHITE_FAIRY_DASH_SHORT2 0x29E2
#define NA_SE_EV_DEMO27_BODYFALL 0x29E3
#define NA_SE_EV_DEMO30_LINK_RIDE 0x29E4
#define NA_SE_EV_DEMO16_WHITEOUT 0x29E5
#define NA_SE_EV_DEMO16_MIKAU_FADE 0x29E6
#define NA_SE_EV_DEMO27_WHITEOUT 0x29E7
#define NA_SE_SC_ZHOP_WAVE 0x29E8
#define NA_SE_EV_DEMO02_ME1 0x29E9
#define NA_SE_EV_DEMO02_WHOOSH 0x29EA
#define NA_SE_EV_DEMO02_ME2 0x29EB
#define NA_SE_EV_DEMO25_ME1 0x29EC
#define NA_SE_EV_DEMO25_HEAD_HIT 0x29ED
#define NA_SE_EV_TENTI_GYAKUTEN 0x29EE
#define NA_SE_EV_IKANA_JYOUKA 0x29EF
#define NA_SE_EV_IKANA_SHARP 0x29F0
#define NA_SE_EV_IKANA_JYOUKA_FLASH 0x29F1
#define NA_SE_EV_IKACASTLE_SLIDE1 0x29F2
#define NA_SE_EV_OKUJYOU_WIND 0x29F3
#define NA_SE_EV_CAM_WHOOSH 0x29F4
#define NA_SE_EV_DESK_HIT 0x29F5
#define NA_SE_EV_DEMO08_FIRE 0x29F6
#define NA_SE_EV_DEMO08_ME1 0x29F7
#define NA_SE_EV_OCARINA_FALL 0x29F8
#define NA_SE_EV_LINK_WARP_LV 0x29F9
#define NA_SE_EV_DEMO_ATATAME 0x29FA
#define NA_SE_EV_DEMO12_KIRAKIRA 0x29FB
#define NA_SE_EV_DEMO32_FIRE_SIPPAI 0x29FC
#define NA_SE_EV_KYOJIN_DOWN 0x29FD
#define NA_SE_EV_FACE_BREAKDOWN_OFF 0x29FE
#define NA_SE_EV_DEMO_MOON_IN 0x29FF
#define NA_SE_EV_1ST_MODORU_ME 0x2A00
#define NA_SE_EV_WATER_WALL_BIG_SILENT2 0x2A01
#define NA_SE_EV_MOONFALL_WIND1 0x2A02
#define NA_SE_EV_MOONFALL_WIND2 0x2A03
#define NA_SE_EV_MOONFALL_WIND3 0x2A04
#define NA_SE_EV_MOONFALL_WIND4 0x2A05
#define NA_SE_EV_TOKEITOU_EXPLO1 0x2A06
#define NA_SE_EV_TOKEITOU_EXPLO2 0x2A07
#define NA_SE_EV_MOONFALL_WIND5 0x2A08
#define NA_SE_EV_MOONFALL_WIND6 0x2A09
#define NA_SE_EV_MOONFALL_WIND7 0x2A0A
#define NA_SE_EV_GIANT_DOWN 0x2A0B
#define NA_SE_SC_DEMO_SPLASH1 0x2A0C
#define NA_SE_EV_TURI_SPLASH 0x2A0D
#define NA_SE_EV_DUMMY_525 0x2A0E
#define NA_SE_EV_WAVE_S_TURIBORI 0x2A0F
#define NA_SE_EN_LAST_DAMAGE_3DOFF 0x2A10
#define NA_SE_EV_DUMMY_529 0x2A11
// ------------ ENEMY ------------
@@ -1877,41 +1790,6 @@
#define NA_SE_EN_KITA_SNORE 0x3ADD
#define NA_SE_EN_IRONNACK_DASH 0x3ADE
#define NA_SE_EN_TUBOOCK_FLY 0x3ADF
#define NA_SE_EN_MIMICK_BREATH 0x3AE0
#define NA_SE_EN_FANTOM_DEAD 0x3AE1
#define NA_SE_EN_KAICHO_PIYORI 0x3AE2
#define NA_SE_EN_READED_WALK 0x3AE3
#define NA_SE_EN_LEADED_WHITE 0x3AE4
#define NA_SE_EN_MIBOSS_APPEAR_B_OLD 0x3AE5
#define NA_SE_EN_MIBOSS_KICK_OLD 0x3AE6
#define NA_SE_EN_MIBOSS_HEADDOWN_OLD 0x3AE7
#define NA_SE_EN_MIBOSS_LEGDOWN_OLD 0x3AE8
#define NA_SE_EN_MIBOSS_WEAKWAIT_OLD 0x3AE9
#define NA_SE_EN_MIBOSS_THRUST1_OLD 0x3AEA
#define NA_SE_EN_MIBOSS_JUMP3_OLD 0x3AEB
#define NA_SE_EN_MIBOSS_SWORD_ROLL_OLD 0x3AEC
#define NA_SE_EN_MIBOSS_DANCE_THRUST_OLD 0x3AED
#define NA_SE_EN_MIBOSS_DANCE_FIRE_OLD 0x3AEE
#define NA_SE_EN_B_PAMET_ROCK 0x3AEF
#define NA_SE_EN_DUMMY753 0x3AF0
#define NA_SE_EN_DUMMY_754 0x3AF1
#define NA_SE_EN_FANTOM_FLOAT 0x3AF2
#define NA_SE_EN_KONB_SUIKOMI 0x3AF3
#define NA_SE_EN_KONB_LANDING_OLD 0x3AF4
#define NA_SE_EN_KONB_SIBUKI_OLD 0x3AF5
#define NA_SE_EN_KONB_PIYORI_OLD 0x3AF6
#define NA_SE_EN_KOUME_UBAITORU 0x3AF7
#define NA_SE_EN_STALKIDS_PSYCHO2 0x3AF8
#define NA_SE_EN_RIZA_ATTACK3 0x3AF9
#define NA_SE_EN_YASE_LAUGH_K_HOLD 0x3AFA
#define NA_SE_EN_WIZ_DEAD_NEW 0x3AFB
#define NA_SE_EN_HIPLOOP_BURN 0x3AFC
#define NA_SE_EN_EYEGOLE_HATAKI 0x3AFD
#define NA_SE_EN_DEKNUTS_DANCE_FADE 0x3AFE
#define NA_SE_EN_NUTS_FURUERU 0x3AFF
#define NA_SE_EN_PO_APPEAR_IDO 0x3B00
#define NA_SE_EN_FOLLOWERS_TO_KABE 0x3B01
#define NA_SE_EN_MUJURA_LAST_UP 0x3B02
// ------------ SYSTEM ------------
@@ -2011,31 +1889,6 @@
#define NA_SE_SY_TIME_CONTROL_SLOW 0x485D
#define NA_SE_SY_TIME_CONTROL_NORMAL 0x485E
#define NA_SE_SY_SECOM_WARNING 0x485F
#define NA_SE_SY_WIN_CHANGE 0x4860
#define NA_SE_SY_TOUCH1 0x4861
#define NA_SE_SY_MENU_CHAT_MOVE 0x4862
#define NA_SE_SY_YUBI_MOVE 0x4863
#define NA_SE_SY_CHAT_ALLERT_IN 0x4864
#define NA_SE_SY_CHAT_ALLERT 0x4865
#define NA_SE_SY_CHAT_ALLERT_OUT 0x4866
#define NA_SE_SY_TOUCH2 0x4867
#define NA_SE_SY_TOUCH2_OUT 0x4868
#define NA_SE_SY_TOUCH3 0x4869
#define NA_SE_SY_TOUCH4 0x486A
#define NA_SE_SY_YUBI_CURSOL_KEY 0x486B
#define NA_SE_SY_EVENT_INFO 0x486C
#define NA_SE_SY_CLEAR1 0x486D
#define NA_SE_SY_ALARM_MOVE 0x486E
#define NA_SE_SY_QUEST_NEW 0x486F
#define NA_SE_SY_EVENT_FAIL 0x4870
#define NA_SE_SY_QUEST_CLEAR 0x4871
#define NA_SE_SY_CHAT_ALARM_OFF 0x4872
#define NA_SE_SY_CHAT_ALARM_INFO 0x4873
#define NA_SE_SY_ICON_MOVE 0x4874
#define NA_SE_SY_ICON_MOVE_SET 0x4875
#define NA_SE_SY_DIAMOND_SWITCH 0x4876
#define NA_SE_SY_PREDEMO_EVIL 0x4877
#define NA_SE_SY_PREDEMO_OMEN 0x4878
// ------------ OCARINA ------------
@@ -2055,10 +1908,6 @@
#define NA_SE_OC_13 0x580D
#define NA_SE_OC_14 0x580E
#define NA_SE_OC_15 0x580F
#define NA_SE_OC_HINT_MOVIE 0x5810
#define NA_SE_OC_HINT_MOVIE2_WHITE 0x5811
#define NA_SE_OC_HINT_MOVIE_ZOOMIN 0x5812
#define NA_SE_OC_HIBIKI_ISHI 0x5813
// ------------ VOICE ------------
@@ -2458,205 +2307,36 @@
#define NA_SE_VO_DEMO_388 0x6989
#define NA_SE_VO_DEMO_389 0x698A
#define NA_SE_VO_DEMO_390 0x698B
#define NA_SE_VO_DEMO_391 0x698C
#define NA_SE_VO_DEMO_392 0x698D
#define NA_SE_VO_DEMO_393 0x698E
#define NA_SE_VO_DEMO_394 0x698F
// ------------ UNKNOWN ------------
// ------------ Sfx Table ------------
// TODO: Extract via table after 100% decompilation
/*
#define NA_BGM_DEMO_SE_SEQ 0x7800
#define NA_BGM_DEMO_SE_SEQ_1 0x7801
#define NA_BGM_DEMO_SE_SEQ_2 0x7802
#define NA_BGM_DEMO_SE_SEQ_3 0x7803
#define NA_BGM_DEMO_SE_SEQ_4 0x7804
#define NA_BGM_DEMO_SE_SEQ_5 0x7805
#define NA_BGM_DEMO_SE_SEQ_6 0x7806
#define NA_BGM_DEMO_SE_SEQ_7 0x7807
#define NA_BGM_DEMO_SE_SEQ_8 0x7808
#define NA_BGM_DEMO_SE_SEQ_9 0x7809
#define NA_BGM_DEMO_SE_SEQ_A 0x780A
#define NA_BGM_DEMO_SE_SEQ_B 0x780B
#define NA_BGM_DEMO_SE_SEQ_C 0x780C
#define NA_BGM_DEMO_SE_SEQ_D 0x780D
#define NA_BGM_DEMO_SE_SEQ_E 0x780E
#define NA_BGM_DEMO_SE_SEQ_F 0x780F
#define NA_SE_EN_MIBOSS_FALL 0x7810
#define NA_SE_EN_MIBOSS_DAMAGE 0x7811
#define NA_SE_EN_MIBOSS_DASH 0x7812
#define NA_SE_EN_MIBOSS_DEAD 0x7813
#define NA_SE_EN_MIBOSS_GND1 0x7814
#define NA_SE_EN_MIBOSS_GND2 0x7815
#define NA_SE_EN_MIBOSS_UNARI 0x7816
#define NA_SE_EN_MIBOSS_RHYTHM 0x7817
#define NA_SE_EN_MIBOSS_SWORD 0x7818
#define NA_SE_EN_MIBOSS_JUMP1_NOTUSE 0x7819
#define NA_SE_EN_MIBOSS_JUMP2_NOTUSE 0x781A
#define NA_SE_EN_MIBOSS_VOICE1 0x781B
#define NA_SE_EN_MIBOSS_VOICE2 0x781C
#define NA_SE_EN_MIBOSS_VOICE3 0x781D
#define NA_SE_EN_MIBOSS_FAINT 0x781E
#define NA_SE_EN_MIBOSS_ROLLING 0x781F
#define NA_SE_EN_MIBOSS_FREEZE 0x7820
#define NA_SE_EN_MIBOSS_APPEAR_B 0x7821
#define NA_SE_EN_MIBOSS_KICK 0x7822
#define NA_SE_EN_MIBOSS_HEADDOWN 0x7823
#define NA_SE_EN_MIBOSS_LEGDOWN 0x7824
#define NA_SE_EN_MIBOSS_WEAKWAIT 0x7825
#define NA_SE_EN_MIBOSS_THRUST1 0x7826
#define NA_SE_EN_MIBOSS_JUMP3 0x7827
#define NA_SE_EN_MIBOSS_SWORD_ROLL 0x7828
#define NA_SE_EN_MIBOSS_DANCE_THRUST 0x7829
#define NA_SE_EN_MIBOSS_DANCE_FIRE 0x782A
#define NA_SE_EN_ICEB_FOOTSTEP 0x782B
#define NA_SE_EN_ICEB_CRY 0x782C
#define NA_SE_EN_ICEB_STEAM_LONG 0x782D
#define NA_SE_EN_ICEB_STEAMS_DEMO 0x782E
#define NA_SE_EN_ICEB_STEAM_DEMO_UP 0x782F
#define NA_SE_EN_ICEB_DEAD 0x7830
#define NA_SE_EN_ICEB_DAMAGE 0x7831
#define NA_SE_EN_ICEB_SLIDING 0x7832
#define NA_SE_EN_ICEB_BACK_ATTACK2 0x7833
#define NA_SE_EN_KONB_BITE 0x7834
#define NA_SE_EN_KONB_BOUND 0x7835
#define NA_SE_EN_KONB_BOUND2 0x7836
#define NA_SE_EN_KONB_DAMAGE 0x7837
#define NA_SE_EN_KONB_DEAD 0x7838
#define NA_SE_EN_KONB_DEAD2 0x7839
#define NA_SE_EN_KONB_DEAD_JUMP 0x783A
#define NA_SE_EN_KONB_DEAD_JUMP2 0x783B
#define NA_SE_EN_KONB_DEMO_MOVE 0x783C
#define NA_SE_EN_KONB_INIT 0x783D
#define NA_SE_EN_KONB_JUMP 0x783E
#define NA_SE_EN_KONB_JUMP_LEV 0x783F
#define NA_SE_EN_KONB_LANDING 0x7840
#define NA_SE_EN_KONB_MINI_APPEAR_NOTUSE 0x7841
#define NA_SE_EN_KONB_PIYORI 0x7842
#define NA_SE_EN_KONB_PREATTACK 0x7843
#define NA_SE_EN_KONB_SIBUKI 0x7844
#define NA_SE_EN_KONB_SINK 0x7845
#define NA_SE_EN_KONB_WAIT 0x7846
#define NA_SE_EN_KONB_DODAI_FALL 0x7847
#define NA_SE_EN_KONB_SUIKOMU 0x7848
#define NA_SE_EN_KONB_TABERU 0x7849
#define NA_SE_EN_KONB_TOBIDASU 0x784A
#define NA_SE_EN_KONB_TOSSIN1_KAMAE 0x784B
#define NA_SE_EN_KONB_TOSSIN1_DASH 0x784C
#define NA_SE_EN_KONB_TOSSIN1_TYAKUSUI 0x784D
#define NA_SE_EN_KONB_BOMB1_INSIDE 0x784E
#define NA_SE_EN_KONB_BOMB1_OUTSIDE 0x784F
#define NA_SE_EN_KONB_MEDAMA_APPEAR 0x7850
#define NA_SE_EN_KONB_BOMB_CHAIN 0x7851
#define NA_SE_EN_KONB_CHIAN_SLASH 0x7852
#define NA_SE_EN_KONB_INFO_SAKEBI 0x7853
#define NA_SE_EN_KONB_INFO_SAKEBI_LONG 0x7854
#define NA_SE_EN_KONB_DODAI_ATTACK1 0x7855
#define NA_SE_EN_KONB_DODAI_ATTACK2 0x7856
#define NA_SE_EN_KONB_TAORE 0x7857
#define NA_SE_EN_INBOSS_SAND 0x7858
#define NA_SE_EN_INBOSS_ROAR 0x7859
#define NA_SE_EN_INBOSS_DAMAGE 0x785A
#define NA_SE_EN_INBOSS_DEAD_PRE2 0x785B
#define NA_SE_EN_INBOSS_DEAD 0x785C
#define NA_SE_EN_INBOSS_DOWN_PRE 0x785D
#define NA_SE_EN_INBOSS_BRESS_PRE 0x785E
#define NA_SE_EN_INBOSS_SANRAN 0x785F
#define NA_SE_EN_INBOSS_CHIBI_WALK 0x7860
#define NA_SE_EN_INBOSS_CHIBI_DAMAGE 0x7861
#define NA_SE_EN_INBOSS_CHIBI_DEAD 0x7862
#define NA_SE_EN_INBOSS_CHIBI_RUN 0x7863
#define NA_SE_EN_INBOSS_JIMEN_MORI 0x7864
#define NA_SE_EN_INBOSS_JIMEN_DERU 0x7865
#define NA_SE_EN_INBOSS_UNDER_MOVE 0x7866
#define NA_SE_EN_INBOSS_BREATH 0x7867
#define NA_SE_EN_INBOSS_DAMAGE_MOVE 0x7868
#define NA_SE_EN_INBOSS_MEDAMA_DERU 0x7869
#define NA_SE_EN_INBOSS_FIREBALL_FLY 0x786A
#define NA_SE_EN_INBOSS_SANRAN_SHORT 0x786B
#define NA_SE_EN_INBOSS_DOWN 0x786C
#define NA_SE_EN_INBOSS_DEAD_RED 0x786D
#define NA_SE_EN_INBOSS_TAME 0x786E
#define NA_SE_EN_LAST1_ATTACK 0x786F
#define NA_SE_EN_LAST1_ATTACK_2ND 0x7870
#define NA_SE_EN_LAST1_BEAM 0x7871
#define NA_SE_EN_LAST1_BEAM2 0x7872
#define NA_SE_EN_LAST1_BLOW 0x7873
#define NA_SE_EN_LAST1_DAMAGE1 0x7874
#define NA_SE_EN_LAST1_DAMAGE2 0x7875
#define NA_SE_EN_LAST1_DEAD 0x7876
#define NA_SE_EN_LAST1_DEMO_BREAK_NOUSE 0x7877
#define NA_SE_EN_LAST1_DEMO_WALL_NOUSE 0x7878
#define NA_SE_EN_LAST1_FALL 0x7879
#define NA_SE_EN_LAST1_FLOAT 0x787A
#define NA_SE_EN_LAST1_GROW_HEAD_NOTUSE 0x787B
#define NA_SE_EN_LAST1_ROLLING 0x787C
#define NA_SE_EN_LAST1_TRANSFORM_NOTUSE 0x787D
#define NA_SE_EN_LAST2_BALLET 0x787E
#define NA_SE_EN_LAST2_BIRD 0x787F
#define NA_SE_EN_LAST2_BIRD2 0x7880
#define NA_SE_EN_LAST2_DAMAGE 0x7881
#define NA_SE_EN_LAST2_DAMAGE2 0x7882
#define NA_SE_EN_LAST2_DEAD 0x7883
#define NA_SE_EN_LAST2_FIRE 0x7884
#define NA_SE_EN_LAST2_GROW_HEAD 0x7885
#define NA_SE_EN_LAST2_VOICE_UAUOO2 0x7886
#define NA_SE_EN_LAST2_GYM_B 0x7887
#define NA_SE_EN_LAST2_HEARTBEAT 0x7888
#define NA_SE_EN_LAST2_JUMP 0x7889
#define NA_SE_EN_LAST2_VOICE_UAUOO1 0x788A
#define NA_SE_EN_LAST2_MOONWALK 0x788B
#define NA_SE_EN_LAST2_PUMP_UP 0x788C
#define NA_SE_EN_LAST2_SHOUT_NOTUSE 0x788D
#define NA_SE_EN_LAST2_VOICE_SURPRISED 0x788E
#define NA_SE_EN_LAST2_UAUOO 0x788F
#define NA_SE_EN_LAST2_WAIT 0x7890
#define NA_SE_EN_LAST2_WALK 0x7891
#define NA_SE_EN_LAST2_WALK2 0x7892
#define NA_SE_EN_LAST3_COIL_ATTACK 0x7893
#define NA_SE_EN_LAST3_VOICE_DAMAGE 0x7894
#define NA_SE_EN_LAST3_VOICE_DAMAGE2 0x7895
#define NA_SE_EN_LAST3_VOICE_DEAD 0x7896
#define NA_SE_EN_LAST3_DEAD_DEAD1 0x7897
#define NA_SE_EN_LAST3_DEAD_DEAD2 0x7898
#define NA_SE_EN_LAST3_DEAD_FLOAT_NOTUSE 0x7899
#define NA_SE_EN_LAST3_DEAD_LIGHTS 0x789A
#define NA_SE_EN_LAST3_DEAD_ROD_NOTUSE 0x789B
#define NA_SE_EN_LAST3_DEAD_WIND1 0x789C
#define NA_SE_EN_LAST3_DEAD_WIND2 0x789D
#define NA_SE_EN_LAST3_DEAD_WIND3 0x789E
#define NA_SE_EN_LAST3_GET_LINK 0x789F
#define NA_SE_EN_LAST3_VOICE_KICK 0x78A0
#define NA_SE_EN_LAST3_KOMA 0x78A1
#define NA_SE_EN_LAST3_ROD_DANCE 0x78A2
#define NA_SE_EN_LAST3_ROD_MID 0x78A3
#define NA_SE_EN_LAST3_ROD_FLOOR 0x78A4
#define NA_SE_EN_LAST3_ROD_HOP 0x78A5
#define NA_SE_EN_LAST3_ROD_HOP2 0x78A6
#define NA_SE_EN_LAST3_ROD_WIND 0x78A7
#define NA_SE_EN_LAST3_VOICE_KOMA 0x78A8
#define NA_SE_EN_LAST3_VOICE_ROD 0x78A9
#define NA_SE_EN_LAST3_VOICE_THROW 0x78AA
#define NA_SE_EN_LAST3_VOICE_LAUGH 0x78AB
#define NA_SE_EN_LAST1_SIZZLE 0x78AC
#define NA_SE_EN_LAST1_LAND2 0x78AD
#define NA_SE_EN_LAST3_WHIP1 0x78AE
#define NA_SE_EV_LAVA_HIT 0x78AF
#define NA_SE_EV_LAVA_WHOOSH 0x78B0
#define Wind_seq1 0x78B1
#define Bird_seqs 0x78B2
#define Rain_seq0 0x78B3
#define Thun_seq0 0x78B4
#define NA_BGM_OCA_EPONA_SEQ 0x78B5
#define NA_BGM_OCA_TIME_SEQ 0x78B6
#define NA_BGM_OCA_STORM_SEQ 0x78B7
#define NA_BGM_OCA_BIGWING_SEQ 0x78B8
#define NA_BGM_OCA_TIME_SPEED_SEQ 0x78B9
#define NA_BGM_OCA_TIME_JUMP_SEQ 0x78BA
#define NA_BGM_OCA_AWAKING_SEQ 0x78BB
#define NA_BGM_OCA_CURE_SEQ 0x78BC
#define NA_BGM_OCA_LULLABY_HALF_SEQ 0x78BD
#define NA_BGM_OCA_LULLABY_SEQ 0x78BE
#define NA_BGM_OCA_PLEDGE_SEQ 0x78BF
#define NA_BGM_OCA_TIDE_SEQ 0x78C0
#define NA_BGM_OCA_SHELL_SEQ 0x78C1
#define NA_BGM_GERO_SEQ 0x78C2
#define DEFINE_SFX(enum, _1, _2, _3, _4, _5) enum,
typedef enum {
NA_SE_PL_BASE = 0x7FF,
#include "tables/sfx/playerbank_table.h"
NA_SE_IT_BASE = 0x17FF,
#include "tables/sfx/itembank_table.h"
NA_SE_EV_BASE = 0x27FF,
#include "tables/sfx/environmentbank_table.h"
NA_SE_EN_BASE = 0x37FF,
#include "tables/sfx/enemybank_table.h"
NA_SE_SY_BASE = 0x47FF,
#include "tables/sfx/systembank_table.h"
NA_SE_OC_BASE = 0x57FF,
#include "tables/sfx/ocarinabank_table.h"
NA_SE_VO_BASE = 0x67FF,
#include "tables/sfx/voicebank_table.h"
NA_SE_MAX
} SfxId;
#undef DEFINE_SFX
*/
#endif
+749
View File
@@ -0,0 +1,749 @@
/**
* Sfx Enemy Bank
*
* DEFINE_SFX should be used for all sfx define in the enemy bank from sequence 0
* - Argument 0: Enum value for this sfx
* - Argument 1: Importance for deciding which sfx to prioritize. Higher values have greater importance
* - Argument 2: Slows the decay of volume with distance (a 3-bit number ranging from 0-7)
* - Argument 3: Applies increasingly random offsets to frequency (a 2-bit number ranging from 0-3)
* - Argument 4: Various flags to add properties to the sfx
* - Argument 5: Various flags to add properties to the sfx
*
* WARNING: entries must align with the table defined for the enemy bank in sequence 0
*/
/* 0x3800 */ DEFINE_SFX(NA_SE_EN_DODO_J_WALK, 0x18, 1, 0, 0, 0)
/* 0x3801 */ DEFINE_SFX(NA_SE_EN_DODO_J_CRY, 0x30, 1, 0, 0, 0)
/* 0x3802 */ DEFINE_SFX(NA_SE_EN_DODO_J_FIRE, 0x30, 1, 0, 0, 0)
/* 0x3803 */ DEFINE_SFX(NA_SE_EN_DODO_J_DAMAGE, 0x38, 1, 0, 0, 0)
/* 0x3804 */ DEFINE_SFX(NA_SE_EN_DODO_J_DEAD, 0x40, 1, 0, 0, 0)
/* 0x3805 */ DEFINE_SFX(NA_SE_EN_BAKUO_ROLL, 0x30, 3, 0, 0, 0)
/* 0x3806 */ DEFINE_SFX(NA_SE_EN_MIZUBABA2_VOICE, 0x36, 0, 0, 0, 0)
/* 0x3807 */ DEFINE_SFX(NA_SE_EN_MIZUBABA2_DAMAGE, 0x38, 0, 0, 0, 0)
/* 0x3808 */ DEFINE_SFX(NA_SE_EN_MIBOSS_FALL_OLD_OLD, 0x40, 3, 0, 0, 0)
/* 0x3809 */ DEFINE_SFX(NA_SE_EN_MIBOSS_DAMAGE_OLD, 0x58, 3, 0, 0, 0)
/* 0x380A */ DEFINE_SFX(NA_SE_EN_MIBOSS_DASH_OLD, 0x40, 3, 0, 0, 0)
/* 0x380B */ DEFINE_SFX(NA_SE_EN_MIBOSS_DEAD_OLD, 0x68, 3, 0, 0, SFX_FLAG_12)
/* 0x380C */ DEFINE_SFX(NA_SE_EN_MIBOSS_GND1_OLD, 0x40, 3, 0, 0, 0)
/* 0x380D */ DEFINE_SFX(NA_SE_EN_GOMA_DOWN, 0x30, 3, 0, 0, 0)
/* 0x380E */ DEFINE_SFX(NA_SE_EN_MIBOSS_GND2_OLD, 0x40, 3, 0, 0, 0)
/* 0x380F */ DEFINE_SFX(NA_SE_EN_MIBOSS_UNARI_OLD, 0x40, 3, 0, 0, 0)
/* 0x3810 */ DEFINE_SFX(NA_SE_EN_MIBOSS_RHYTHM_OLD, 0x54, 3, 0, 0, SFX_FLAG_3)
/* 0x3811 */ DEFINE_SFX(NA_SE_EN_MIBOSS_SWORD_OLD, 0x54, 3, 0, 0, 0)
/* 0x3812 */ DEFINE_SFX(NA_SE_EN_ANSATSUSYA_ENTRY, 0x30, 3, 0, 0, 0)
/* 0x3813 */ DEFINE_SFX(NA_SE_EN_MIBOSS_JUMP1, 0x40, 3, 0, 0, 0)
/* 0x3814 */ DEFINE_SFX(NA_SE_EN_MIBOSS_JUMP2, 0x40, 3, 0, 0, 0)
/* 0x3815 */ DEFINE_SFX(NA_SE_EN_MIBOSS_VOICE1_OLD, 0x54, 3, 0, 0, 0)
/* 0x3816 */ DEFINE_SFX(NA_SE_EN_MIBOSS_VOICE2_OLD, 0x54, 3, 0, 0, 0)
/* 0x3817 */ DEFINE_SFX(NA_SE_EN_MIBOSS_VOICE3_OLD, 0x54, 3, 0, 0, 0)
/* 0x3818 */ DEFINE_SFX(NA_SE_EN_INBOSS_SAND_OLD, 0x30, 3, 0, 0, SFX_FLAG_13)
/* 0x3819 */ DEFINE_SFX(NA_SE_EN_INBOSS_ROAR_OLD, 0x50, 3, 0, 0, 0)
/* 0x381A */ DEFINE_SFX(NA_SE_EN_INBOSS_DAMAGE_OLD, 0x58, 3, 0, 0, 0)
/* 0x381B */ DEFINE_SFX(NA_SE_EN_COMMON_WEAKENED, 0x38, 3, 0, 0, 0)
/* 0x381C */ DEFINE_SFX(NA_SE_EN_MIBOSS_FAINT_OLD, 0x50, 3, 0, 0, 0)
/* 0x381D */ DEFINE_SFX(NA_SE_EN_MIBOSS_ROLLING_OLD, 0x30, 3, 0, 0, 0)
/* 0x381E */ DEFINE_SFX(NA_SE_EN_MIZUBABA1_DAMAGE, 0x38, 0, 0, 0, 0)
/* 0x381F */ DEFINE_SFX(NA_SE_EN_MIZUBABA_DEAD, 0x48, 0, 0, 0, 0)
/* 0x3820 */ DEFINE_SFX(NA_SE_EN_DODO_M_CRY, 0x30, 0, 0, 0, 0)
/* 0x3821 */ DEFINE_SFX(NA_SE_EN_DODO_M_DEAD, 0x40, 1, 0, 0, 0)
/* 0x3822 */ DEFINE_SFX(NA_SE_EN_DODO_M_MOVE, 0x18, 0, 0, 0, 0)
/* 0x3823 */ DEFINE_SFX(NA_SE_EN_DODO_M_DOWN, 0x14, 0, 0, 0, 0)
/* 0x3824 */ DEFINE_SFX(NA_SE_EN_DODO_M_UP, 0x14, 0, 0, 0, 0)
/* 0x3825 */ DEFINE_SFX(NA_SE_EN_MIZUBABA_TRANSFORM, 0x30, 0, 0, 0, 0)
/* 0x3826 */ DEFINE_SFX(NA_SE_EN_DODO_M_EAT, 0x30, 0, 0, 0, 0)
/* 0x3827 */ DEFINE_SFX(NA_SE_EN_MIZUBABA2_WALK, 0x28, 0, 0, 0, SFX_FLAG_14)
/* 0x3828 */ DEFINE_SFX(NA_SE_EN_BOMCHU_WALK, 0x28, 0, 0, 0, 0)
/* 0x3829 */ DEFINE_SFX(NA_SE_EN_RIZA_CRY, 0x30, 2, 0, 0, 0)
/* 0x382A */ DEFINE_SFX(NA_SE_EN_RIZA_ATTACK, 0x32, 2, 0, 0, 0)
/* 0x382B */ DEFINE_SFX(NA_SE_EN_RIZA_DAMAGE, 0x38, 1, 0, 0, 0)
/* 0x382C */ DEFINE_SFX(NA_SE_EN_RIZA_WARAU, 0x20, 0, 0, 0, 0)
/* 0x382D */ DEFINE_SFX(NA_SE_EN_RIZA_DEAD, 0x40, 1, 0, 0, 0)
/* 0x382E */ DEFINE_SFX(NA_SE_EN_RIZA_WALK, 0x18, 0, 0, 0, 0)
/* 0x382F */ DEFINE_SFX(NA_SE_EN_RIZA_JUMP, 0x28, 0, 0, 0, 0)
/* 0x3830 */ DEFINE_SFX(NA_SE_EN_STALKID_WALK, 0x18, 0, 1, 0, 0)
/* 0x3831 */ DEFINE_SFX(NA_SE_EN_STALKID_ATTACK, 0x30, 0, 0, 0, 0)
/* 0x3832 */ DEFINE_SFX(NA_SE_EN_STALKID_DAMAGE, 0x38, 1, 0, 0, 0)
/* 0x3833 */ DEFINE_SFX(NA_SE_EN_STALKID_DEAD, 0x40, 1, 0, 0, 0)
/* 0x3834 */ DEFINE_SFX(NA_SE_EN_FLOORMASTER_SLIDING, 0x14, 0, 0, 0, 0)
/* 0x3835 */ DEFINE_SFX(NA_SE_EN_TEKU_WALK_WATER, 0x18, 0, 2, 0, 0)
/* 0x3836 */ DEFINE_SFX(NA_SE_EN_LIGHT_ARROW_HIT, 0x38, 2, 0, 0, 0)
/* 0x3837 */ DEFINE_SFX(NA_SE_EN_MIZUBABA2_ATTACK, 0x34, 0, 0, 0, 0)
/* 0x3838 */ DEFINE_SFX(NA_SE_EN_STAL_WARAU, 0x28, 1, 0, 0, 0)
/* 0x3839 */ DEFINE_SFX(NA_SE_EN_STAL_SAKEBI, 0x30, 0, 0, 0, 0)
/* 0x383A */ DEFINE_SFX(NA_SE_EN_STAL_DAMAGE, 0x38, 1, 0, 0, 0)
/* 0x383B */ DEFINE_SFX(NA_SE_EN_STAL_DEAD, 0x40, 1, 0, 0, 0)
/* 0x383C */ DEFINE_SFX(NA_SE_EN_WOLFOS_APPEAR, 0x30, 0, 0, 0, 0)
/* 0x383D */ DEFINE_SFX(NA_SE_EN_STAL_WALK, 0x18, 0, 0, 0, 0)
/* 0x383E */ DEFINE_SFX(NA_SE_EN_WOLFOS_CRY, 0x20, 0, 0, 0, 0)
/* 0x383F */ DEFINE_SFX(NA_SE_EN_WOLFOS_ATTACK, 0x30, 0, 0, 0, 0)
/* 0x3840 */ DEFINE_SFX(NA_SE_EN_FFLY_ATTACK, 0x32, 0, 0, 0, 0)
/* 0x3841 */ DEFINE_SFX(NA_SE_EN_FFLY_FLY, 0x20, 1, 0, 0, 0)
/* 0x3842 */ DEFINE_SFX(NA_SE_EN_FFLY_DEAD, 0x37, 1, 0, 0, 0)
/* 0x3843 */ DEFINE_SFX(NA_SE_EN_WOLFOS_DAMAGE, 0x38, 1, 0, 0, 0)
/* 0x3844 */ DEFINE_SFX(NA_SE_EN_AMOS_WALK, 0x30, 0, 0, 0, 0)
/* 0x3845 */ DEFINE_SFX(NA_SE_EN_AMOS_WAVE, 0x30, 0, 0, 0, 0)
/* 0x3846 */ DEFINE_SFX(NA_SE_EN_EYEGOLE_DEAD, 0x40, 2, 0, 0, 0)
/* 0x3847 */ DEFINE_SFX(NA_SE_EN_EYEGOLE_DAMAGE, 0x38, 2, 0, 0, 0)
/* 0x3848 */ DEFINE_SFX(NA_SE_EN_AMOS_VOICE, 0x20, 0, 0, 0, 0)
/* 0x3849 */ DEFINE_SFX(NA_SE_EN_KUSAMUSHI_VIBE, 0x18, 0, 0, 0, 0)
/* 0x384A */ DEFINE_SFX(NA_SE_EN_BEE_FLY, 0x40, 7, 0, 0, SFX_FLAG_14)
/* 0x384B */ DEFINE_SFX(NA_SE_EN_WOLFOS_DEAD, 0x40, 1, 0, 0, 0)
/* 0x384C */ DEFINE_SFX(NA_SE_EN_COMMON_E_BALL, 0x30, 3, 0, 0, 0)
/* 0x384D */ DEFINE_SFX(NA_SE_EN_COMMON_THUNDER_THR, 0x30, 3, 0, 0, 0)
/* 0x384E */ DEFINE_SFX(NA_SE_EN_COMMON_E_BALL_HIT, 0x30, 3, 0, 0, 0)
/* 0x384F */ DEFINE_SFX(NA_SE_EN_COMMON_ELEC_ARK, 0x30, 3, 0, 0, 0)
/* 0x3850 */ DEFINE_SFX(NA_SE_EN_SUISEN_EAT, 0x30, 0, 0, 0, 0)
/* 0x3851 */ DEFINE_SFX(NA_SE_EN_SUISEN_DEAD, 0x40, 0, 0, 0, 0)
/* 0x3852 */ DEFINE_SFX(NA_SE_EN_COMMON_E_BALL_THR, 0x30, 3, 0, 0, 0)
/* 0x3853 */ DEFINE_SFX(NA_SE_EN_UTSUBO_APPEAR, 0x30, 3, 0, 0, 0)
/* 0x3854 */ DEFINE_SFX(NA_SE_EN_BOMCHU_VOICE, 0x34, 0, 0, 0, 0)
/* 0x3855 */ DEFINE_SFX(NA_SE_EN_BOMCHU_AIM, 0x34, 0, 0, 0, 0)
/* 0x3856 */ DEFINE_SFX(NA_SE_EN_BOMCHU_RUN, 0x36, 0, 0, 0, 0)
/* 0x3857 */ DEFINE_SFX(NA_SE_EN_UTSUBO_BACK, 0x30, 3, 0, 0, 0)
/* 0x3858 */ DEFINE_SFX(NA_SE_EN_DODO_J_BREATH, 0x28, 0, 0, 0, 0)
/* 0x3859 */ DEFINE_SFX(NA_SE_EN_DODO_J_TAIL, 0x30, 0, 0, 0, 0)
/* 0x385A */ DEFINE_SFX(NA_SE_EN_WOLFOS_WALK, 0x18, 0, 0, 0, 0)
/* 0x385B */ DEFINE_SFX(NA_SE_EN_DODO_J_EAT, 0x30, 0, 0, 0, 0)
/* 0x385C */ DEFINE_SFX(NA_SE_EN_DEKU_MOUTH, 0x28, 0, 3, 0, 0)
/* 0x385D */ DEFINE_SFX(NA_SE_EN_DEKU_ATTACK, 0x30, 0, 1, 0, 0)
/* 0x385E */ DEFINE_SFX(NA_SE_EN_DEKU_DAMAGE, 0x38, 1, 1, 0, 0)
/* 0x385F */ DEFINE_SFX(NA_SE_EN_DEKU_DEAD, 0x40, 1, 1, 0, 0)
/* 0x3860 */ DEFINE_SFX(NA_SE_EN_MIZUBABA1_MOUTH, 0x30, 0, 0, 0, 0)
/* 0x3861 */ DEFINE_SFX(NA_SE_EN_MIZUBABA1_ATTACK, 0x36, 0, 0, 0, 0)
/* 0x3862 */ DEFINE_SFX(NA_SE_EN_DEKU_JR_DEAD, 0x40, 1, 0, 0, 0)
/* 0x3863 */ DEFINE_SFX(NA_SE_EN_DEKU_SCRAPE, 0x14, 0, 0, 0, 0)
/* 0x3864 */ DEFINE_SFX(NA_SE_EN_TAIL_FLY, 0x30, 0, 0, 0, 0)
/* 0x3865 */ DEFINE_SFX(NA_SE_EN_TAIL_CRY, 0x20, 0, 0, 0, 0)
/* 0x3866 */ DEFINE_SFX(NA_SE_EN_TAIL_DEAD, 0x40, 1, 0, 0, 0)
/* 0x3867 */ DEFINE_SFX(NA_SE_EN_GOLON_STAND_IMT, 0x30, 3, 0, 0, 0)
/* 0x3868 */ DEFINE_SFX(NA_SE_EN_STALTU_DOWN, 0x30, 4, 0, 0, 0)
/* 0x3869 */ DEFINE_SFX(NA_SE_EN_STALTU_UP, 0x30, 4, 0, 0, 0)
/* 0x386A */ DEFINE_SFX(NA_SE_EN_STALTU_LAUGH, 0x20, 4, 0, 0, 0)
/* 0x386B */ DEFINE_SFX(NA_SE_EN_STALTU_DAMAGE, 0x38, 4, 0, 0, 0)
/* 0x386C */ DEFINE_SFX(NA_SE_EN_TEKU_JUMP, 0x20, 3, 0, 0, 0)
/* 0x386D */ DEFINE_SFX(NA_SE_EN_TEKU_DAMAGE, 0x38, 1, 0, 0, 0)
/* 0x386E */ DEFINE_SFX(NA_SE_EN_TEKU_DEAD, 0x40, 1, 0, 0, 0)
/* 0x386F */ DEFINE_SFX(NA_SE_EN_TEKU_WALK, 0x14, 0, 0, 0, 0)
/* 0x3870 */ DEFINE_SFX(NA_SE_EN_PO_KANTERA, 0x30, 3, 0, 0, 0)
/* 0x3871 */ DEFINE_SFX(NA_SE_EN_PO_FLY, 0x20, 1, 0, 0, 0)
/* 0x3872 */ DEFINE_SFX(NA_SE_EN_PO_AWAY, 0x20, 1, 0, 0, 0)
/* 0x3873 */ DEFINE_SFX(NA_SE_EN_STALKIDS_APPEAR, 0x30, 2, 0, 0, 0)
/* 0x3874 */ DEFINE_SFX(NA_SE_EN_PO_DISAPPEAR, 0x35, 2, 0, 0, 0)
/* 0x3875 */ DEFINE_SFX(NA_SE_EN_PO_DAMAGE, 0x38, 2, 0, 0, 0)
/* 0x3876 */ DEFINE_SFX(NA_SE_EN_PO_DEAD, 0x48, 2, 0, 0, 0)
/* 0x3877 */ DEFINE_SFX(NA_SE_EN_WIZ_DISAPPEAR, 0x40, 2, 0, 0, 0)
/* 0x3878 */ DEFINE_SFX(NA_SE_EN_EXTINCT, 0x45, 1, 2, 0, 0)
/* 0x3879 */ DEFINE_SFX(NA_SE_EN_GOLON_LAND_BIG, 0x34, 0, 0, 0, 0)
/* 0x387A */ DEFINE_SFX(NA_SE_EN_GERUDOFT_DOWN, 0x40, 0, 0, 0, 0)
/* 0x387B */ DEFINE_SFX(NA_SE_EN_EYEGOLE_ATTACK, 0x20, 2, 0, 0, 0)
/* 0x387C */ DEFINE_SFX(NA_SE_EN_NUTS_UP, 0x28, 0, 0, 0, 0)
/* 0x387D */ DEFINE_SFX(NA_SE_EN_NUTS_DOWN, 0x28, 0, 0, 0, 0)
/* 0x387E */ DEFINE_SFX(NA_SE_EN_NUTS_THROW, 0x30, 0, 0, 0, 0)
/* 0x387F */ DEFINE_SFX(NA_SE_EN_NUTS_WALK, 0x20, 4, 2, 0, 0)
/* 0x3880 */ DEFINE_SFX(NA_SE_EN_NUTS_DAMAGE, 0x38, 1, 0, 0, 0)
/* 0x3881 */ DEFINE_SFX(NA_SE_EN_NUTS_DEAD, 0x40, 1, 0, 0, 0)
/* 0x3882 */ DEFINE_SFX(NA_SE_EN_NUT_FAINT, 0x20, 0, 0, 0, 0)
/* 0x3883 */ DEFINE_SFX(NA_SE_EN_PO_BIG_GET, 0x30, 3, 0, 0, 0)
/* 0x3884 */ DEFINE_SFX(NA_SE_EN_STALTU_ROLL, 0x30, 4, 0, 0, 0)
/* 0x3885 */ DEFINE_SFX(NA_SE_EN_STALTU_DEAD, 0x40, 4, 0, 0, 0)
/* 0x3886 */ DEFINE_SFX(NA_SE_EN_PO_SISTER_DEAD, 0x40, 3, 0, 0, 0)
/* 0x3887 */ DEFINE_SFX(NA_SE_EN_BARI_SPLIT, 0x40, 1, 0, 0, 0)
/* 0x3888 */ DEFINE_SFX(NA_SE_EN_LAST1_GROW_HEAD, 0x28, 1, 0, 0, 0)
/* 0x3889 */ DEFINE_SFX(NA_SE_EN_NUTS_VOICE, 0x30, 3, 0, 0, 0)
/* 0x388A */ DEFINE_SFX(NA_SE_EN_TEKU_LAND_WATER, 0x20, 0, 0, 0, 0)
/* 0x388B */ DEFINE_SFX(NA_SE_EN_LAST_DAMAGE, 0x38, 1, 0, 0, 0)
/* 0x388C */ DEFINE_SFX(NA_SE_EN_STALWALL_ROLL, 0x30, 4, 0, 0, 0)
/* 0x388D */ DEFINE_SFX(NA_SE_EN_STALWALL_DASH, 0x30, 0, 0, 0, 0)
/* 0x388E */ DEFINE_SFX(NA_SE_EN_TEKU_JUMP_WATER, 0x20, 0, 0, 0, 0)
/* 0x388F */ DEFINE_SFX(NA_SE_EN_TEKU_LAND_WATER2, 0x20, 0, 0, 0, 0)
/* 0x3890 */ DEFINE_SFX(NA_SE_EN_FALL_AIM, 0x38, 0, 0, 0, SFX_FLAG_13)
/* 0x3891 */ DEFINE_SFX(NA_SE_EN_FALL_UP, 0x30, 3, 0, 0, 0)
/* 0x3892 */ DEFINE_SFX(NA_SE_EN_FALL_CATCH, 0x30, 0, 0, 0, SFX_FLAG_13)
/* 0x3893 */ DEFINE_SFX(NA_SE_EN_FALL_LAND, 0x30, 0, 0, 0, 0)
/* 0x3894 */ DEFINE_SFX(NA_SE_EN_FALL_WALK, 0x14, 0, 0, 0, 0)
/* 0x3895 */ DEFINE_SFX(NA_SE_EN_FALL_DAMAGE, 0x38, 1, 0, 0, 0)
/* 0x3896 */ DEFINE_SFX(NA_SE_EN_DAIOCTA_REVERSE, 0x40, 1, 0, 0, 0)
/* 0x3897 */ DEFINE_SFX(NA_SE_EN_KAICHO_FLUTTER, 0x14, 0, 0, 0, 0)
/* 0x3898 */ DEFINE_SFX(NA_SE_EN_BIRI_FLY, 0x20, 0, 0, 0, 0)
/* 0x3899 */ DEFINE_SFX(NA_SE_EN_BIRI_JUMP, 0x20, 0, 0, 0, 0)
/* 0x389A */ DEFINE_SFX(NA_SE_EN_BIRI_SPARK, 0x30, 0, 0, 0, 0)
/* 0x389B */ DEFINE_SFX(NA_SE_EN_BIRI_DEAD, 0x40, 1, 0, 0, 0)
/* 0x389C */ DEFINE_SFX(NA_SE_EN_COMMON_WATER_DEEP, 0x30, 0, 2, 0, 0)
/* 0x389D */ DEFINE_SFX(NA_SE_EN_BARI_ROLL, 0x30, 0, 0, 0, 0)
/* 0x389E */ DEFINE_SFX(NA_SE_EN_COMMON_FREEZE, 0x37, 1, 0, 0, 0)
/* 0x389F */ DEFINE_SFX(NA_SE_EN_BARI_DEAD, 0x40, 1, 0, 0, 0)
/* 0x38A0 */ DEFINE_SFX(NA_SE_EN_BATTA_FLY, 0x28, 5, 0, 0, 0)
/* 0x38A1 */ DEFINE_SFX(NA_SE_EN_BATTA_ATTACK, 0x36, 5, 0, 0, 0)
/* 0x38A2 */ DEFINE_SFX(NA_SE_EN_BATTA_DAMAGE, 0x38, 5, 0, 0, 0)
/* 0x38A3 */ DEFINE_SFX(NA_SE_EN_BATTA_DEAD, 0x48, 5, 0, 0, 0)
/* 0x38A4 */ DEFINE_SFX(NA_SE_EN_WIZ_UNARI, 0x30, 3, 0, 0, 0)
/* 0x38A5 */ DEFINE_SFX(NA_SE_EN_WIZ_RUN, 0x28, 2, 0, 0, 0)
/* 0x38A6 */ DEFINE_SFX(NA_SE_EN_WIZ_VOICE, 0x30, 3, 0, 0, 0)
/* 0x38A7 */ DEFINE_SFX(NA_SE_EN_WIZ_LAUGH, 0x30, 3, 0, 0, 0)
/* 0x38A8 */ DEFINE_SFX(NA_SE_EN_WIZ_ATTACK, 0x34, 3, 0, 0, 0)
/* 0x38A9 */ DEFINE_SFX(NA_SE_EN_WIZ_DAMAGE, 0x38, 3, 0, 0, 0)
/* 0x38AA */ DEFINE_SFX(NA_SE_EN_WIZ_DEAD, 0x40, 3, 0, 0, 0)
/* 0x38AB */ DEFINE_SFX(NA_SE_EN_WIZ_EXP, 0x30, 3, 0, 0, 0)
/* 0x38AC */ DEFINE_SFX(NA_SE_EN_DAIOCTA_DEAD, 0x30, 0, 0, 0, SFX_FLAG_13)
/* 0x38AD */ DEFINE_SFX(NA_SE_EN_DAIOCTA_DEAD2, 0x30, 3, 0, 0, 0)
/* 0x38AE */ DEFINE_SFX(NA_SE_EN_FANTOM_DAMAGE, 0x38, 3, 0, 0, 0)
/* 0x38AF */ DEFINE_SFX(NA_SE_EN_DAIOCTA_DAMAGE, 0x40, 3, 0, 0, 0)
/* 0x38B0 */ DEFINE_SFX(NA_SE_EN_WIZ_LAUGH2, 0x30, 3, 0, 0, 0)
/* 0x38B1 */ DEFINE_SFX(NA_SE_EN_GOLON_SIT_IMT, 0x30, 3, 0, 0, 0)
/* 0x38B2 */ DEFINE_SFX(NA_SE_EN_FANTOM_VOICE, 0x30, 3, 0, 0, SFX_FLAG_10)
/* 0x38B3 */ DEFINE_SFX(NA_SE_EN_KAICHO_DAMAGE, 0x38, 1, 0, 0, 0)
/* 0x38B4 */ DEFINE_SFX(NA_SE_EN_GOLON_COLD, 0x30, 3, 1, 0, 0)
/* 0x38B5 */ DEFINE_SFX(NA_SE_EN_GOLON_JUMP, 0x30, 3, 0, 0, 0)
/* 0x38B6 */ DEFINE_SFX(NA_SE_EN_KAICHO_CRY, 0x20, 0, 0, 0, 0)
/* 0x38B7 */ DEFINE_SFX(NA_SE_EN_KAICHO_ATTACK, 0x34, 0, 0, 0, 0)
/* 0x38B8 */ DEFINE_SFX(NA_SE_EN_GOLON_WALK, 0x18, 0, 2, 0, 0)
/* 0x38B9 */ DEFINE_SFX(NA_SE_EN_SLIME_JUMP, 0x30, 0, 0, 0, 0)
/* 0x38BA */ DEFINE_SFX(NA_SE_EN_SLIME_DAMAGE, 0x38, 0, 0, 0, 0)
/* 0x38BB */ DEFINE_SFX(NA_SE_EN_SLIME_BREAK, 0x30, 0, 0, 0, 0)
/* 0x38BC */ DEFINE_SFX(NA_SE_EN_KUROSUKE_MOVE, 0x14, 0, 0, 0, 0)
/* 0x38BD */ DEFINE_SFX(NA_SE_EN_KUROSUKE_ATTACK, 0x34, 0, 0, 0, 0)
/* 0x38BE */ DEFINE_SFX(NA_SE_EN_SLIME_DEAD, 0x40, 0, 0, 0, 0)
/* 0x38BF */ DEFINE_SFX(NA_SE_EN_SLIME_DEFENCE, 0x30, 3, 0, 0, 0)
/* 0x38C0 */ DEFINE_SFX(NA_SE_EN_OCTAROCK_ROCK, 0x20, 0, 0, 0, 0)
/* 0x38C1 */ DEFINE_SFX(NA_SE_EN_COMMON_WATER_SLW, 0x30, 0, 2, 0, 0)
/* 0x38C2 */ DEFINE_SFX(NA_SE_EN_OCTAROCK_JUMP, 0x30, 0, 0, 0, 0)
/* 0x38C3 */ DEFINE_SFX(NA_SE_EN_DAIOCTA_LAND, 0x30, 0, 0, 0, 0)
/* 0x38C4 */ DEFINE_SFX(NA_SE_EN_DAIOCTA_SINK, 0x28, 0, 0, 0, 0)
/* 0x38C5 */ DEFINE_SFX(NA_SE_EN_COMMON_WATER_MID, 0x30, 0, 2, 0, 0)
/* 0x38C6 */ DEFINE_SFX(NA_SE_EN_OCTAROCK_DEAD1, 0x40, 1, 0, 0, 0)
/* 0x38C7 */ DEFINE_SFX(NA_SE_EN_OCTAROCK_DEAD2, 0x40, 1, 0, 0, 0)
/* 0x38C8 */ DEFINE_SFX(NA_SE_EN_BUBLE_WING, 0x20, 0, 0, 0, 0)
/* 0x38C9 */ DEFINE_SFX(NA_SE_EN_BUBLE_MOUTH, 0x20, 0, 0, 0, 0)
/* 0x38CA */ DEFINE_SFX(NA_SE_EN_BUBLE_LAUGH, 0x14, 0, 0, 0, 0)
/* 0x38CB */ DEFINE_SFX(NA_SE_EN_BUBLE_BITE, 0x30, 0, 0, 0, 0)
/* 0x38CC */ DEFINE_SFX(NA_SE_EN_BUBLE_UP, 0x30, 0, 0, 0, 0)
/* 0x38CD */ DEFINE_SFX(NA_SE_EN_BUBLE_DOWN, 0x30, 0, 0, 0, 0)
/* 0x38CE */ DEFINE_SFX(NA_SE_EN_BUBLE_DEAD, 0x40, 1, 0, 0, 0)
/* 0x38CF */ DEFINE_SFX(NA_SE_EN_BUBLEFALL_FIRE, 0x30, 0, 0, 0, 0)
/* 0x38D0 */ DEFINE_SFX(NA_SE_EN_UTSUBO_DEAD, 0x30, 3, 0, 0, 0)
/* 0x38D1 */ DEFINE_SFX(NA_SE_EN_UTSUBO_DAMAGE, 0x38, 3, 0, 0, 0)
/* 0x38D2 */ DEFINE_SFX(NA_SE_EN_FROG_REAL, 0x40, 3, 0, 0, 0)
/* 0x38D3 */ DEFINE_SFX(NA_SE_EN_FROG_DAMAGE, 0x48, 3, 0, 0, 0)
/* 0x38D4 */ DEFINE_SFX(NA_SE_EN_B_SLIME_EAT, 0x30, 3, 0, 0, 0)
/* 0x38D5 */ DEFINE_SFX(NA_SE_EN_B_SLIME_LAUGH, 0x34, 3, 0, 0, 0)
/* 0x38D6 */ DEFINE_SFX(NA_SE_EN_FROG_DEAD, 0x48, 3, 0, 0, 0)
/* 0x38D7 */ DEFINE_SFX(NA_SE_EN_UTSUBO_BITE, 0x30, 3, 0, 0, 0)
/* 0x38D8 */ DEFINE_SFX(NA_SE_EN_B_SLIME_REVERSE, 0x34, 3, 0, 0, 0)
/* 0x38D9 */ DEFINE_SFX(NA_SE_EN_SLIME_JUMP1, 0x30, 3, 2, 0, SFX_FLAG_14)
/* 0x38DA */ DEFINE_SFX(NA_SE_EN_SLIME_JUMP2, 0x30, 3, 2, 0, SFX_FLAG_14)
/* 0x38DB */ DEFINE_SFX(NA_SE_EN_B_SLIME_BREAK, 0x40, 3, 0, 0, 0)
/* 0x38DC */ DEFINE_SFX(NA_SE_EN_BARI_DAMAGE, 0x38, 1, 0, 0, 0)
/* 0x38DD */ DEFINE_SFX(NA_SE_EN_HIPLOOP_LAND, 0x30, 1, 0, 0, 0)
/* 0x38DE */ DEFINE_SFX(NA_SE_EN_MOFER_CORE_MOVE_WT, 0x28, 3, 0, 0, 0)
/* 0x38DF */ DEFINE_SFX(NA_SE_EN_MOFER_CORE_SMJUMP, 0x28, 3, 0, 0, 0)
/* 0x38E0 */ DEFINE_SFX(NA_SE_EN_MONBLIN_GNDWAVE, 0x30, 3, 0, 0, 0)
/* 0x38E1 */ DEFINE_SFX(NA_SE_EN_MONBLIN_HAM_DOWN, 0x30, 3, 0, 0, 0)
/* 0x38E2 */ DEFINE_SFX(NA_SE_EN_MONBLIN_HAM_UP, 0x30, 3, 0, 0, SFX_FLAG_13)
/* 0x38E3 */ DEFINE_SFX(NA_SE_EN_BUBLE_DAMAGE, 0x38, 1, 0, 0, 0)
/* 0x38E4 */ DEFINE_SFX(NA_SE_EN_REDEAD_CRY, 0x20, 0, 0, 0, 0)
/* 0x38E5 */ DEFINE_SFX(NA_SE_EN_REDEAD_AIM, 0x34, 0, 0, 0, 0)
/* 0x38E6 */ DEFINE_SFX(NA_SE_EN_REDEAD_DAMAGE, 0x38, 1, 0, 0, 0)
/* 0x38E7 */ DEFINE_SFX(NA_SE_EN_REDEAD_DEAD, 0x40, 1, 0, 0, 0)
/* 0x38E8 */ DEFINE_SFX(NA_SE_EN_REDEAD_ATTACK, 0x34, 0, 0, 0, SFX_FLAG_13)
/* 0x38E9 */ DEFINE_SFX(NA_SE_EN_GOLON_KID_SOB, 0x20, 0, 0, 0, 0)
/* 0x38EA */ DEFINE_SFX(NA_SE_EN_GOLON_KID_CRY, 0x38, 2, 1, 0, 0)
/* 0x38EB */ DEFINE_SFX(NA_SE_EN_KAICHO_DEAD, 0x40, 1, 0, 0, 0)
/* 0x38EC */ DEFINE_SFX(NA_SE_EN_PO_LAUGH, 0x30, 3, 0, 0, 0)
/* 0x38ED */ DEFINE_SFX(NA_SE_EN_PO_CRY, 0x30, 2, 0, 0, 0)
/* 0x38EE */ DEFINE_SFX(NA_SE_EN_PO_ROLL, 0x30, 2, 0, 0, 0)
/* 0x38EF */ DEFINE_SFX(NA_SE_EN_PO_LAUGH2, 0x38, 3, 0, 0, 0)
/* 0x38F0 */ DEFINE_SFX(NA_SE_EN_GOLON_ROLLING, 0x30, 0, 0, 0, 0)
/* 0x38F1 */ DEFINE_SFX(NA_SE_EN_GOLON_READY, 0x30, 0, 0, 0, 0)
/* 0x38F2 */ DEFINE_SFX(NA_SE_EN_GOLON_DASH, 0x34, 0, 0, 0, 0)
/* 0x38F3 */ DEFINE_SFX(NA_SE_EN_PAMET_VOICE, 0x34, 3, 0, 0, 0)
/* 0x38F4 */ DEFINE_SFX(NA_SE_EN_PAMET_ROLL, 0x30, 3, 0, 0, 0)
/* 0x38F5 */ DEFINE_SFX(NA_SE_EN_PAMET_WALK, 0x24, 0, 1, 0, 0)
/* 0x38F6 */ DEFINE_SFX(NA_SE_EN_PAMET_ROAR, 0x30, 3, 0, 0, 0)
/* 0x38F7 */ DEFINE_SFX(NA_SE_EN_PAMET_WAKEUP, 0x28, 2, 2, 0, 0)
/* 0x38F8 */ DEFINE_SFX(NA_SE_EN_PAMET_REVERSE, 0x40, 3, 0, 0, 0)
/* 0x38F9 */ DEFINE_SFX(NA_SE_EN_PAMET_DAMAGE, 0x40, 3, 0, 0, 0)
/* 0x38FA */ DEFINE_SFX(NA_SE_EN_PAMET_DEAD, 0x30, 3, 0, 0, 0)
/* 0x38FB */ DEFINE_SFX(NA_SE_EN_BAKUO_VOICE, 0x34, 3, 0, 0, 0)
/* 0x38FC */ DEFINE_SFX(NA_SE_EN_GOLON_WAKE_UP, 0x20, 3, 2, 0, 0)
/* 0x38FD */ DEFINE_SFX(NA_SE_EN_GOLON_SIT_DOWN, 0x20, 0, 0, 0, 0)
/* 0x38FE */ DEFINE_SFX(NA_SE_EN_DAIGOLON_SLEEP3, 0x30, 3, 0, 0, 0)
/* 0x38FF */ DEFINE_SFX(NA_SE_EN_CHICKEN_FLUTTER, 0x20, 0, 2, 0, 0)
/* 0x3900 */ DEFINE_SFX(NA_SE_EN_KOUME_ILL, 0x30, 3, 2, 0, 0)
/* 0x3901 */ DEFINE_SFX(NA_SE_EN_KOUME_REGAIN, 0x18, 3, 2, 0, 0)
/* 0x3902 */ DEFINE_SFX(NA_SE_EN_KOUME_DRINK, 0x34, 3, 2, 0, 0)
/* 0x3903 */ DEFINE_SFX(NA_SE_EN_KOUME_LAUGH, 0x30, 3, 2, 0, 0)
/* 0x3904 */ DEFINE_SFX(NA_SE_EN_KOUME_FLY, 0x38, 3, 0, 0, 0)
/* 0x3905 */ DEFINE_SFX(NA_SE_EN_KOUME_AWAY, 0x18, 3, 0, 0, 0)
/* 0x3906 */ DEFINE_SFX(NA_SE_EN_KOUME_MAGIC, 0x30, 0, 0, 0, SFX_FLAG_13)
/* 0x3907 */ DEFINE_SFX(NA_SE_EN_DAIGOLON_SLEEP2, 0x38, 3, 0, 0, 0)
/* 0x3908 */ DEFINE_SFX(NA_SE_EN_STALKIDS_JUMP, 0x30, 3, 0, 0, 0)
/* 0x3909 */ DEFINE_SFX(NA_SE_EN_STALKIDS_FADEOUT, 0x40, 3, 0, 0, 0)
/* 0x390A */ DEFINE_SFX(NA_SE_EN_STALKIDS_LAUGH, 0x40, 4, 0, 0, SFX_FLAG_13)
/* 0x390B */ DEFINE_SFX(NA_SE_EN_STALKIDS_SHAKEHEAD, 0x38, 5, 0, 0, 0)
/* 0x390C */ DEFINE_SFX(NA_SE_EN_STALKIDS_ONGND, 0x30, 0, 0, 0, SFX_FLAG_13)
/* 0x390D */ DEFINE_SFX(NA_SE_EN_STALKIDS_SURPRISED, 0x30, 3, 0, 0, 0)
/* 0x390E */ DEFINE_SFX(NA_SE_EN_STALKIDS_WALK, 0x30, 0, 2, 0, 0)
/* 0x390F */ DEFINE_SFX(NA_SE_EN_STALKIDS_REVERSE, 0x30, 5, 0, 0, 0)
/* 0x3910 */ DEFINE_SFX(NA_SE_EN_STALKIDS_FLOAT, 0x30, 3, 0, 0, 0)
/* 0x3911 */ DEFINE_SFX(NA_SE_EN_EYEGOLE_EYE, 0x30, 2, 2, 0, 0)
/* 0x3912 */ DEFINE_SFX(NA_SE_EN_STALKIDS_CAUGHT, 0x30, 3, 0, 0, 0)
/* 0x3913 */ DEFINE_SFX(NA_SE_EN_STALKIDS_MASK_ON, 0x30, 5, 0, 0, 0)
/* 0x3914 */ DEFINE_SFX(NA_SE_EN_TWINROBA_CUTBODY, 0x30, 3, 0, 0, 0)
/* 0x3915 */ DEFINE_SFX(NA_SE_EN_STALKIDS_MASK_OFF, 0x30, 4, 2, 0, 0)
/* 0x3916 */ DEFINE_SFX(NA_SE_EN_STALKIDS_RIDE, 0x38, 0, 2, 0, 0)
/* 0x3917 */ DEFINE_SFX(NA_SE_EN_DEKNUTS_DANCE, 0x38, 3, 2, 0, SFX_FLAG_14 | SFX_FLAG_13)
/* 0x3918 */ DEFINE_SFX(NA_SE_EN_DEKNUTS_DANCE1, 0x38, 3, 2, 0, SFX_FLAG_14 | SFX_FLAG_13)
/* 0x3919 */ DEFINE_SFX(NA_SE_EN_DEKNUTS_DANCE2, 0x38, 3, 2, 0, SFX_FLAG_14 | SFX_FLAG_13)
/* 0x391A */ DEFINE_SFX(NA_SE_EN_DEKNUTS_DANCE_BIG, 0x38, 3, 2, 0, SFX_FLAG_14 | SFX_FLAG_13)
/* 0x391B */ DEFINE_SFX(NA_SE_EN_EYEGOLE_BEAM, 0x40, 2, 2, 0, SFX_FLAG_14)
/* 0x391C */ DEFINE_SFX(NA_SE_EN_GOLON_EYE_BIG, 0x18, 3, 2, 0, 0)
/* 0x391D */ DEFINE_SFX(NA_SE_EN_GOLON_GOOD_BIG, 0x30, 3, 0, 0, 0)
/* 0x391E */ DEFINE_SFX(NA_SE_EN_STALKIDS_LAUGH_MID, 0x30, 3, 0, 0, 0)
/* 0x391F */ DEFINE_SFX(NA_SE_EN_STALKIDS_FLOAT_COPY, 0x20, 3, 0, 0, 0)
/* 0x3920 */ DEFINE_SFX(NA_SE_EN_STALKIDS_TURN, 0x24, 5, 0, 0, 0)
/* 0x3921 */ DEFINE_SFX(NA_SE_EN_STALKIDS_DAMAGE, 0x28, 3, 0, 0, 0)
/* 0x3922 */ DEFINE_SFX(NA_SE_EN_STALKIDS_SCREAM, 0x30, 3, 0, 0, 0)
/* 0x3923 */ DEFINE_SFX(NA_SE_EN_STALKIDS_OTEDAMA2, 0x30, 5, 0, 0, 0)
/* 0x3924 */ DEFINE_SFX(NA_SE_EN_STALKIDS_STRETCH, 0x30, 5, 0, 0, 0)
/* 0x3925 */ DEFINE_SFX(NA_SE_EN_STALKIDS_LAUGH_MD2, 0x30, 0, 0, 0, 0)
/* 0x3926 */ DEFINE_SFX(NA_SE_EN_OWL_FLUTTER, 0x30, 0, 0, 0, 0)
/* 0x3927 */ DEFINE_SFX(NA_SE_EN_VALVAISA_LAND, 0x30, 3, 0, 0, 0)
/* 0x3928 */ DEFINE_SFX(NA_SE_EN_IRONNACK_WALK, 0x18, 1, 0, 0, 0)
/* 0x3929 */ DEFINE_SFX(NA_SE_EN_IRONNACK_SWING_AXE, 0x34, 3, 0, 0, 0)
/* 0x392A */ DEFINE_SFX(NA_SE_EN_STALKIDS_OTEDAMA1, 0x30, 5, 0, 0, 0)
/* 0x392B */ DEFINE_SFX(NA_SE_EN_PAMET_CUTTER_ON, 0x34, 3, 0, 0, 0)
/* 0x392C */ DEFINE_SFX(NA_SE_EN_IRONNACK_ARMOR_OFF_DEMO, 0x34, 3, 0, 0, 0)
/* 0x392D */ DEFINE_SFX(NA_SE_EN_PAMET_CUTTER_OFF, 0x34, 3, 0, 0, 0)
/* 0x392E */ DEFINE_SFX(NA_SE_EN_B_SLIME_JUMP1, 0x30, 3, 0, 0, 0)
/* 0x392F */ DEFINE_SFX(NA_SE_EN_B_SLIME_JUMP2, 0x30, 3, 0, 0, 0)
/* 0x3930 */ DEFINE_SFX(NA_SE_EN_FLOORMASTER_ATTACK, 0x30, 1, 0, 0, 0)
/* 0x3931 */ DEFINE_SFX(NA_SE_EN_FLOORMASTER_SM_WALK, 0x14, 0, 0, 0, 0)
/* 0x3932 */ DEFINE_SFX(NA_SE_EN_FLOORMASTER_SM_DEAD, 0x40, 1, 0, 0, 0)
/* 0x3933 */ DEFINE_SFX(NA_SE_EN_FLOORMASTER_RESTORE, 0x30, 1, 0, 0, 0)
/* 0x3934 */ DEFINE_SFX(NA_SE_EN_FLOORMASTER_EXPAND, 0x30, 1, 0, 0, 0)
/* 0x3935 */ DEFINE_SFX(NA_SE_EN_KUSAMUSHI_HIDE, 0x20, 1, 0, 0, 0)
/* 0x3936 */ DEFINE_SFX(NA_SE_EN_FLOORMASTER_SM_STICK, 0x38, 3, 0, 0, 0)
/* 0x3937 */ DEFINE_SFX(NA_SE_EN_FLOORMASTER_SM_LAND, 0x30, 0, 0, 0, 0)
/* 0x3938 */ DEFINE_SFX(NA_SE_EN_B_SLIME_COMBINE, 0x40, 3, 0, 0, SFX_FLAG_14)
/* 0x3939 */ DEFINE_SFX(NA_SE_EN_B_SLIME_PUNCH_MOVE, 0x30, 3, 0, 0, SFX_FLAG_14)
/* 0x393A */ DEFINE_SFX(NA_SE_EN_IRONNACK_ARMOR_HIT, 0x38, 3, 0, 0, 0)
/* 0x393B */ DEFINE_SFX(NA_SE_EN_CUTBODY, 0x38, 3, 0, 0, 0)
/* 0x393C */ DEFINE_SFX(NA_SE_EN_LAST1_TRANSFORM, 0x40, 3, 0, 0, 0)
/* 0x393D */ DEFINE_SFX(NA_SE_EN_LAST1_DEMO_BREAK, 0x40, 3, 2, 0, 0)
/* 0x393E */ DEFINE_SFX(NA_SE_EN_LAST1_DEMO_WALL, 0x40, 3, 2, 0, 0)
/* 0x393F */ DEFINE_SFX(NA_SE_EN_B_PAMET_BREAK, 0x40, 3, 0, 0, 0)
/* 0x3940 */ DEFINE_SFX(NA_SE_EN_KONB_DEMO_MOVE_OLD, 0x21, 3, 0, 0, SFX_FLAG_14)
/* 0x3941 */ DEFINE_SFX(NA_SE_EN_KONB_JUMP_OLD, 0x54, 3, 0, 0, 0)
/* 0x3942 */ DEFINE_SFX(NA_SE_EN_KONB_SINK_OLD, 0x54, 3, 0, 0, 0)
/* 0x3943 */ DEFINE_SFX(NA_SE_EN_UTSUBO_EAT, 0x54, 3, 0, 0, 0)
/* 0x3944 */ DEFINE_SFX(NA_SE_EN_YMAJIN_HOLD_SNOW, 0x34, 2, 0, 0, 0)
/* 0x3945 */ DEFINE_SFX(NA_SE_EN_KONB_DAMAGE_OLD, 0x58, 3, 0, 0, 0)
/* 0x3946 */ DEFINE_SFX(NA_SE_EN_KONB_DEAD_OLD, 0x68, 3, 0, 0, 0)
/* 0x3947 */ DEFINE_SFX(NA_SE_EN_KONB_BOUND_OLD, 0x50, 3, 3, 0, SFX_FLAG_14)
/* 0x3948 */ DEFINE_SFX(NA_SE_EN_AWA_BOUND, 0x14, 0, 0, 0, 0)
/* 0x3949 */ DEFINE_SFX(NA_SE_EN_AWA_BREAK, 0x20, 1, 0, 0, 0)
/* 0x394A */ DEFINE_SFX(NA_SE_EN_ICEB_FOOTSTEP_OLD, 0x48, 0, 2, 0, SFX_FLAG_14)
/* 0x394B */ DEFINE_SFX(NA_SE_EN_COMMON_THUNDER, 0x30, 0, 2, 0, SFX_FLAG_14)
/* 0x394C */ DEFINE_SFX(NA_SE_EN_ICEB_CRY_OLD, 0x50, 1, 0, 0, 0)
/* 0x394D */ DEFINE_SFX(NA_SE_EN_ICEB_STEAM_LONG_OLD, 0x50, 1, 0, 0, 0)
/* 0x394E */ DEFINE_SFX(NA_SE_EN_ICEB_STEAMS_DEMO_OLD, 0x50, 0, 0, 0, 0)
/* 0x394F */ DEFINE_SFX(NA_SE_EN_ICEB_STEAM_DEMO_UP_OLD, 0x50, 0, 0, 0, 0)
/* 0x3950 */ DEFINE_SFX(NA_SE_EN_ICEB_DEAD_OLD, 0x68, 3, 0, 0, 0)
/* 0x3951 */ DEFINE_SFX(NA_SE_EN_ICEB_DAMAGE_OLD, 0x58, 3, 0, 0, 0)
/* 0x3952 */ DEFINE_SFX(NA_SE_EN_KONB_INIT_OLD, 0x90, 3, 0, 0, 0)
/* 0x3953 */ DEFINE_SFX(NA_SE_EN_KONB_DEAD2_OLD, 0x48, 3, 0, 0, 0)
/* 0x3954 */ DEFINE_SFX(NA_SE_EN_PIHAT_UP, 0x28, 2, 0, 0, 0)
/* 0x3955 */ DEFINE_SFX(NA_SE_EN_PIHAT_FLY, 0x30, 0, 0, 0, 0)
/* 0x3956 */ DEFINE_SFX(NA_SE_EN_PIHAT_DAMAGE, 0x38, 1, 0, 0, 0)
/* 0x3957 */ DEFINE_SFX(NA_SE_EN_PIHAT_LAND, 0x28, 2, 0, 0, 0)
/* 0x3958 */ DEFINE_SFX(NA_SE_EN_KONB_BOUND2_OLD, 0x50, 3, 0, 0, 0)
/* 0x3959 */ DEFINE_SFX(NA_SE_EN_KONB_DEAD_JUMP_OLD, 0x50, 3, 0, 0, 0)
/* 0x395A */ DEFINE_SFX(NA_SE_EN_KONB_DEAD_JUMP2_OLD, 0x50, 3, 0, 0, 0)
/* 0x395B */ DEFINE_SFX(NA_SE_EN_FROG_JUMP, 0x40, 3, 2, 0, SFX_FLAG_14)
/* 0x395C */ DEFINE_SFX(NA_SE_EN_FROG_GREET, 0x40, 3, 0, 0, 0)
/* 0x395D */ DEFINE_SFX(NA_SE_EN_FROG_HOLD_SLIME, 0x40, 3, 0, 0, 0)
/* 0x395E */ DEFINE_SFX(NA_SE_EN_FROG_THROW_SLIME, 0x40, 3, 0, 0, 0)
/* 0x395F */ DEFINE_SFX(NA_SE_EN_FROG_JUMP_MID, 0x40, 3, 0, 0, 0)
/* 0x3960 */ DEFINE_SFX(NA_SE_EN_KONB_BITE_OLD, 0x54, 3, 0, 0, 0)
/* 0x3961 */ DEFINE_SFX(NA_SE_EN_FROG_PUNCH1, 0x40, 3, 0, 0, 0)
/* 0x3962 */ DEFINE_SFX(NA_SE_EN_FROG_PUNCH2, 0x40, 3, 0, 0, 0)
/* 0x3963 */ DEFINE_SFX(NA_SE_EN_UTSUBO_APPEAR_TRG, 0x48, 3, 0, 0, 0)
/* 0x3964 */ DEFINE_SFX(NA_SE_EN_FROG_DOWN, 0x48, 3, 0, 0, 0)
/* 0x3965 */ DEFINE_SFX(NA_SE_EN_FROG_JUMP_ABOVE, 0x48, 3, 0, 0, 0)
/* 0x3966 */ DEFINE_SFX(NA_SE_EN_FROG_KICK, 0x40, 3, 0, 0, 0)
/* 0x3967 */ DEFINE_SFX(NA_SE_EN_YMAJIN_MINI_HOLD, 0x34, 2, 0, 0, 0)
/* 0x3968 */ DEFINE_SFX(NA_SE_EN_YMAJIN_MINI_THROW, 0x34, 2, 0, 0, SFX_FLAG_13)
/* 0x3969 */ DEFINE_SFX(NA_SE_EN_YMAJIN_MOVE, 0x28, 2, 0, 0, 0)
/* 0x396A */ DEFINE_SFX(NA_SE_EN_YMAJIN_MINI_MOVE, 0x28, 2, 0, 0, 0)
/* 0x396B */ DEFINE_SFX(NA_SE_EN_YMAJIN_SURFACE, 0x30, 2, 0, 0, 0)
/* 0x396C */ DEFINE_SFX(NA_SE_EN_YMAJIN_HIDE, 0x30, 2, 0, 0, 0)
/* 0x396D */ DEFINE_SFX(NA_SE_EN_YMAJIN_SPLIT, 0x38, 2, 0, 0, 0)
/* 0x396E */ DEFINE_SFX(NA_SE_EN_YMAJIN_UNITE, 0x38, 2, 0, 0, 0)
/* 0x396F */ DEFINE_SFX(NA_SE_EN_YMAJIN_DEAD_BREAK, 0x48, 2, 0, 0, 0)
/* 0x3970 */ DEFINE_SFX(NA_SE_EN_BIMOS_ROLL_HEAD, 0x10, 0, 0, 0, 0)
/* 0x3971 */ DEFINE_SFX(NA_SE_EN_BIMOS_LAZER, 0x34, 0, 0, 0, 0)
/* 0x3972 */ DEFINE_SFX(NA_SE_EN_BIMOS_LAZER_GND, 0x18, 0, 0, 0, 0)
/* 0x3973 */ DEFINE_SFX(NA_SE_EN_BIMOS_AIM, 0x30, 0, 0, 0, 0)
/* 0x3974 */ DEFINE_SFX(NA_SE_EN_BUBLEWALK_WALK, 0x14, 0, 0, 0, 0)
/* 0x3975 */ DEFINE_SFX(NA_SE_EN_BUBLEWALK_AIM, 0x34, 0, 0, 0, 0)
/* 0x3976 */ DEFINE_SFX(NA_SE_EN_BUBLEWALK_REVERSE, 0x28, 1, 0, 0, 0)
/* 0x3977 */ DEFINE_SFX(NA_SE_EN_BUBLEWALK_DAMAGE, 0x38, 1, 0, 0, 0)
/* 0x3978 */ DEFINE_SFX(NA_SE_EN_BUBLEWALK_DEAD, 0x40, 1, 0, 0, 0)
/* 0x3979 */ DEFINE_SFX(NA_SE_EN_HIPLOOP_RUN, 0x30, 1, 0, 0, 0)
/* 0x397A */ DEFINE_SFX(NA_SE_EN_HIPLOOP_PAUSE, 0x38, 1, 0, 0, 0)
/* 0x397B */ DEFINE_SFX(NA_SE_EN_HIPLOOP_MASC_OFF, 0x36, 1, 0, 0, 0)
/* 0x397C */ DEFINE_SFX(NA_SE_EN_HIPLOOP_FOOT, 0x34, 1, 0, 0, 0)
/* 0x397D */ DEFINE_SFX(NA_SE_EN_HIPLOOP_DAMAGE, 0x38, 1, 0, 0, 0)
/* 0x397E */ DEFINE_SFX(NA_SE_EN_HIPLOOP_DEAD, 0x48, 1, 0, 0, 0)
/* 0x397F */ DEFINE_SFX(NA_SE_EN_HIPLOOP_FOOTSTEP, 0x30, 1, 0, 0, 0)
/* 0x3980 */ DEFINE_SFX(NA_SE_EN_DEKUHIME_WALK, 0x38, 3, 2, 0, 0)
/* 0x3981 */ DEFINE_SFX(NA_SE_EN_DEKUHIME_TURN, 0x30, 3, 0, 0, 0)
/* 0x3982 */ DEFINE_SFX(NA_SE_EN_DEKUHIME_GREET, 0x20, 0, 0, 0, SFX_FLAG_13)
/* 0x3983 */ DEFINE_SFX(NA_SE_EN_DEKUHIME_GREET2, 0x30, 3, 0, 0, 0)
/* 0x3984 */ DEFINE_SFX(NA_SE_EN_PIHAT_SM_FLY, 0x30, 0, 0, 0, 0)
/* 0x3985 */ DEFINE_SFX(NA_SE_EN_PIHAT_SM_DEAD, 0x40, 1, 0, 0, 0)
/* 0x3986 */ DEFINE_SFX(NA_SE_EN_STALKID_APPEAR, 0x30, 0, 0, 0, 0)
/* 0x3987 */ DEFINE_SFX(NA_SE_EN_AKINDONUTS_HIDE, 0x20, 0, 0, 0, 0)
/* 0x3988 */ DEFINE_SFX(NA_SE_EN_RIVA_DAMAGE, 0x38, 1, 0, 0, 0)
/* 0x3989 */ DEFINE_SFX(NA_SE_EN_RIVA_DEAD, 0x40, 1, 0, 0, 0)
/* 0x398A */ DEFINE_SFX(NA_SE_EN_RIVA_MOVE, 0x30, 0, 0, 0, 0)
/* 0x398B */ DEFINE_SFX(NA_SE_EN_DEKUHIME_VOICE_SAD, 0x30, 0, 0, 0, SFX_FLAG_13)
/* 0x398C */ DEFINE_SFX(NA_SE_EN_DEKUHIME_VOICE_JOY, 0x30, 3, 0, 0, 0)
/* 0x398D */ DEFINE_SFX(NA_SE_EN_NUTS_JUMP, 0x30, 2, 0, 0, 0)
/* 0x398E */ DEFINE_SFX(NA_SE_EN_NUTS_CLOTHES, 0x30, 3, 0, 0, 0)
/* 0x398F */ DEFINE_SFX(NA_SE_EN_SITSUJI_VOICE, 0x30, 3, 0, 0, 0)
/* 0x3990 */ DEFINE_SFX(NA_SE_EN_LIKE_WALK, 0x18, 0, 0, 0, 0)
/* 0x3991 */ DEFINE_SFX(NA_SE_EN_LIKE_UNARI, 0x28, 0, 0, 0, 0)
/* 0x3992 */ DEFINE_SFX(NA_SE_EN_SUISEN_DRINK, 0x34, 2, 0, 0, 0)
/* 0x3993 */ DEFINE_SFX(NA_SE_EN_EYEGOLE_DEMO_EYE, 0x34, 2, 0, 0, 0)
/* 0x3994 */ DEFINE_SFX(NA_SE_EN_SUISEN_THROW, 0x34, 0, 0, 0, 0)
/* 0x3995 */ DEFINE_SFX(NA_SE_EN_LIKE_DAMAGE, 0x38, 1, 0, 0, 0)
/* 0x3996 */ DEFINE_SFX(NA_SE_EN_LIKE_DEAD, 0x40, 1, 0, 0, 0)
/* 0x3997 */ DEFINE_SFX(NA_SE_EN_MGANON_SWORD, 0x30, 3, 0, 0, 0)
/* 0x3998 */ DEFINE_SFX(NA_SE_EN_PIRATE_ATTACK, 0x30, 2, 0, 0, 0)
/* 0x3999 */ DEFINE_SFX(NA_SE_EN_PIRATE_DAMAGE, 0x38, 0, 0, 0, 0)
/* 0x399A */ DEFINE_SFX(NA_SE_EN_PIRATE_DEAD, 0x48, 0, 0, 0, 0)
/* 0x399B */ DEFINE_SFX(NA_SE_EN_MB_MOTH_FLY, 0x28, 4, 0, 0, SFX_FLAG_14)
/* 0x399C */ DEFINE_SFX(NA_SE_EN_MB_MOTH_DEAD, 0x48, 4, 0, 0, 0)
/* 0x399D */ DEFINE_SFX(NA_SE_EN_MB_INSECT_WALK, 0x20, 4, 0, 0, 0)
/* 0x399E */ DEFINE_SFX(NA_SE_EN_B_PAMET_ROLL, 0x25, 3, 0, 0, 0)
/* 0x399F */ DEFINE_SFX(NA_SE_EN_FROG_VOICE1, 0x40, 2, 0, 0, 0)
/* 0x39A0 */ DEFINE_SFX(NA_SE_EN_GERUDOFT_WALK, 0x18, 0, 2, 0, 0)
/* 0x39A1 */ DEFINE_SFX(NA_SE_EN_FROG_VOICE2, 0x44, 3, 0, 0, 0)
/* 0x39A2 */ DEFINE_SFX(NA_SE_EN_B_PAMET_VOICE, 0x44, 0, 0, 0, 0)
/* 0x39A3 */ DEFINE_SFX(NA_SE_EN_B_PAMET_REVERSE, 0x18, 0, 0, 0, 0)
/* 0x39A4 */ DEFINE_SFX(NA_SE_EN_FREEZAD_BREATH, 0x30, 0, 0, 0, 0)
/* 0x39A5 */ DEFINE_SFX(NA_SE_EN_FREEZAD_DAMAGE, 0x38, 1, 0, 0, 0)
/* 0x39A6 */ DEFINE_SFX(NA_SE_EN_FREEZAD_DEAD, 0x40, 1, 0, 0, 0)
/* 0x39A7 */ DEFINE_SFX(NA_SE_EN_DEKUHIMA_VOICE_HURY, 0x18, 3, 0, 0, 0)
/* 0x39A8 */ DEFINE_SFX(NA_SE_EN_KINGNUTS_VOICE, 0x30, 3, 0, 0, 0)
/* 0x39A9 */ DEFINE_SFX(NA_SE_EN_FROG_RUNAWAY, 0x38, 3, 1, 0, 0)
/* 0x39AA */ DEFINE_SFX(NA_SE_EN_LAST3_DEAD_DEAD1_OLD, 0x30, 3, 0, 0, 0)
/* 0x39AB */ DEFINE_SFX(NA_SE_EN_LAST3_DEAD_DEAD2_OLD, 0x30, 3, 0, 0, 0)
/* 0x39AC */ DEFINE_SFX(NA_SE_EN_FROG_RUNAWAY2, 0x30, 3, 0, 0, 0)
/* 0x39AD */ DEFINE_SFX(NA_SE_EN_DAIGOLON_SLEEP1, 0x36, 3, 0, 0, 0)
/* 0x39AE */ DEFINE_SFX(NA_SE_EN_IRONNACK_HIT_GND, 0x34, 3, 0, 0, 0)
/* 0x39AF */ DEFINE_SFX(NA_SE_EN_LAST3_DEAD_WIND1_OLD, 0x34, 2, 2, 0, 0)
/* 0x39B0 */ DEFINE_SFX(NA_SE_EN_TWINROBA_LAUGH, 0x58, 3, 0, 0, 0)
/* 0x39B1 */ DEFINE_SFX(NA_SE_EN_TWINROBA_LAUGH2, 0x68, 3, 0, 0, 0)
/* 0x39B2 */ DEFINE_SFX(NA_SE_EN_IRONNACK_PULLOUT, 0x30, 3, 0, 0, 0)
/* 0x39B3 */ DEFINE_SFX(NA_SE_EN_TWINROBA_SHOOT_VOICE, 0x30, 3, 0, 0, 0)
/* 0x39B4 */ DEFINE_SFX(NA_SE_EN_LAST3_DEAD_WIND2_OLD, 0x34, 2, 0, 0, 0)
/* 0x39B5 */ DEFINE_SFX(NA_SE_EN_LAST3_DEAD_WIND3_OLD, 0x34, 3, 0, 0, 0)
/* 0x39B6 */ DEFINE_SFX(NA_SE_EN_LAST3_DEAD_LIGHTS_OLD, 0x40, 0, 0, 0, 0)
/* 0x39B7 */ DEFINE_SFX(NA_SE_EN_PIRATE_BREATH, 0x30, 3, 0, 0, 0)
/* 0x39B8 */ DEFINE_SFX(NA_SE_EN_LAST3_DEAD_ROD, 0x40, 0, 0, 0, SFX_FLAG_13)
/* 0x39B9 */ DEFINE_SFX(NA_SE_EN_LAST2_SHOUT, 0x30, 0, 0, 0, SFX_FLAG_13)
/* 0x39BA */ DEFINE_SFX(NA_SE_EN_LAST2_PUMP_UP_OLD, 0x30, 0, 3, 0, 0)
/* 0x39BB */ DEFINE_SFX(NA_SE_EN_LAST2_GROW_HEAD_OLD, 0x30, 0, 3, 0, 0)
/* 0x39BC */ DEFINE_SFX(NA_SE_EN_LAST2_HEARTBEAT_OLD, 0x40, 0, 0, 0, 0)
/* 0x39BD */ DEFINE_SFX(NA_SE_EN_ANSATSUSYA_MOVING, 0x30, 3, 0, 0, 0)
/* 0x39BE */ DEFINE_SFX(NA_SE_EN_ANSATSUSYA_DASH_2, 0x28, 3, 0, 0, 0)
/* 0x39BF */ DEFINE_SFX(NA_SE_EN_LAST3_DEAD_FLOAT, 0x40, 3, 0, 0, 0)
/* 0x39C0 */ DEFINE_SFX(NA_SE_EN_ANSATSUSYA_CRYING, 0x40, 3, 0, 0, 0)
/* 0x39C1 */ DEFINE_SFX(NA_SE_EN_ANSATSUSYA_SKIP, 0x30, 3, 0, 0, 0)
/* 0x39C2 */ DEFINE_SFX(NA_SE_EN_STALTURA_APPEAR, 0x30, 3, 0, 0, 0)
/* 0x39C3 */ DEFINE_SFX(NA_SE_EN_ANSATSUSYA_JUMP, 0x30, 3, 0, 0, 0)
/* 0x39C4 */ DEFINE_SFX(NA_SE_EN_ANSATSUSYA_FALL, 0x30, 3, 0, 0, 0)
/* 0x39C5 */ DEFINE_SFX(NA_SE_EN_ANSATSUSYA_DAMAGE, 0x38, 3, 0, 0, 0)
/* 0x39C6 */ DEFINE_SFX(NA_SE_EN_ANSATSUSYA_DEAD, 0x48, 3, 0, 0, 0)
/* 0x39C7 */ DEFINE_SFX(NA_SE_EN_ANSATSUSYA_SWORD, 0x20, 3, 0, 0, 0)
/* 0x39C8 */ DEFINE_SFX(NA_SE_EN_BAKUO_DEAD, 0x48, 3, 0, 0, 0)
/* 0x39C9 */ DEFINE_SFX(NA_SE_EN_BAKUO_APPEAR, 0x36, 3, 0, 0, 0)
/* 0x39CA */ DEFINE_SFX(NA_SE_EN_LAST3_ROD_WIND_OLD, 0x30, 3, 0, 0, 0)
/* 0x39CB */ DEFINE_SFX(NA_SE_EN_LAST3_ROD_FLOOR_OLD, 0x30, 3, 0, 0, 0)
/* 0x39CC */ DEFINE_SFX(NA_SE_EN_LAST3_ROD_DANCE_OLD, 0x38, 3, 0, 0, 0)
/* 0x39CD */ DEFINE_SFX(NA_SE_EN_LAST3_ROD_HOP_OLD, 0x38, 3, 0, 0, 0)
/* 0x39CE */ DEFINE_SFX(NA_SE_EN_LAST3_ROD_HOP2_OLD, 0x20, 3, 0, 0, 0)
/* 0x39CF */ DEFINE_SFX(NA_SE_EN_GANON_RESTORE, 0x30, 3, 0, 0, 0)
/* 0x39D0 */ DEFINE_SFX(NA_SE_EN_GOLON_CIRCLE, 0x44, 3, 0, 0, 0)
/* 0x39D1 */ DEFINE_SFX(NA_SE_EN_GOLON_CIRCLE_OFF, 0x30, 3, 2, 0, 0)
/* 0x39D2 */ DEFINE_SFX(NA_SE_EN_LAST1_BLOW_OLD, 0x30, 3, 0, 0, 0)
/* 0x39D3 */ DEFINE_SFX(NA_SE_EN_LAST1_BEAM_OLD, 0x30, 3, 0, 0, 0)
/* 0x39D4 */ DEFINE_SFX(NA_SE_EN_LAST1_ATTACK_OLD, 0x34, 3, 0, 0, 0)
/* 0x39D5 */ DEFINE_SFX(NA_SE_EN_LAST1_DAMAGE1_OLD, 0x30, 3, 0, 0, 0)
/* 0x39D6 */ DEFINE_SFX(NA_SE_EN_LAST1_DAMAGE2_OLD, 0x30, 3, 0, 0, 0)
/* 0x39D7 */ DEFINE_SFX(NA_SE_EN_LAST1_FALL_OLD, 0x20, 2, 0, 0, 0)
/* 0x39D8 */ DEFINE_SFX(NA_SE_EN_MGANON_STAND, 0x34, 3, 0, 0, 0)
/* 0x39D9 */ DEFINE_SFX(NA_SE_EN_LAST2_FIRE_OLD, 0x20, 3, 2, 0, 0)
/* 0x39DA */ DEFINE_SFX(NA_SE_EN_STALGOLD_ROLL, 0x30, 4, 0, 0, 0)
/* 0x39DB */ DEFINE_SFX(NA_SE_EN_LAST2_WALK_OLD, 0x30, 2, 1, 0, SFX_FLAG_14)
/* 0x39DC */ DEFINE_SFX(NA_SE_EN_LAST2_WAIT_OLD, 0x40, 2, 1, 0, SFX_FLAG_14)
/* 0x39DD */ DEFINE_SFX(NA_SE_EN_LAST2_JUMP_OLD, 0x40, 3, 2, 0, 0)
/* 0x39DE */ DEFINE_SFX(NA_SE_EN_LAST2_BIRD_OLD, 0x30, 2, 1, 0, SFX_FLAG_14)
/* 0x39DF */ DEFINE_SFX(NA_SE_EN_LAST2_BIRD2_OLD, 0x30, 2, 1, 0, SFX_FLAG_14)
/* 0x39E0 */ DEFINE_SFX(NA_SE_EN_STALTU_WAVE, 0x30, 0, 0, 0, 0)
/* 0x39E1 */ DEFINE_SFX(NA_SE_EN_STALTU_DOWN_SET, 0x30, 0, 0, 0, 0)
/* 0x39E2 */ DEFINE_SFX(NA_SE_EN_DEKU_WAKEUP, 0x30, 1, 0, 0, 0)
/* 0x39E3 */ DEFINE_SFX(NA_SE_EN_LAST2_WALK2_OLD, 0x32, 2, 2, 0, SFX_FLAG_14)
/* 0x39E4 */ DEFINE_SFX(NA_SE_EN_LAST1_FLOAT_OLD, 0x32, 3, 0, 0, 0)
/* 0x39E5 */ DEFINE_SFX(NA_SE_EN_LAST1_ATTACK_2ND_OLD, 0x54, 1, 0, 0, 0)
/* 0x39E6 */ DEFINE_SFX(NA_SE_EN_LAST1_ROLLING_OLD, 0x52, 0, 0, 0, 0)
/* 0x39E7 */ DEFINE_SFX(NA_SE_EN_LAST3_GET_LINK_OLD, 0x54, 3, 0, 0, 0)
/* 0x39E8 */ DEFINE_SFX(NA_SE_EN_PO_BIG_CRY, 0x30, 0, 0, 0, 0)
/* 0x39E9 */ DEFINE_SFX(NA_SE_EN_STALTURA_BOUND, 0x08, 1, 0, 0, 0)
/* 0x39EA */ DEFINE_SFX(NA_SE_EN_STALGOLD_UP_CRY, 0x30, 1, 0, 0, 0)
/* 0x39EB */ DEFINE_SFX(NA_SE_EN_GOLON_CRY, 0x30, 3, 0, 0, 0)
/* 0x39EC */ DEFINE_SFX(NA_SE_EN_LAST3_ROD_SOFT, 0x54, 3, 0, 0, 0)
/* 0x39ED */ DEFINE_SFX(NA_SE_EN_LAST3_ROD_MID_OLD, 0x54, 0, 0, 0, SFX_FLAG_13)
/* 0x39EE */ DEFINE_SFX(NA_SE_EN_RIVA_BIG_APPEAR, 0x34, 3, 0, 0, 0)
/* 0x39EF */ DEFINE_SFX(NA_SE_EN_LAST3_ROD_HARD, 0x54, 0, 0, 0, SFX_FLAG_13)
/* 0x39F0 */ DEFINE_SFX(NA_SE_EN_MUSI_WALK, 0x08, 0, 0, 0, 0)
/* 0x39F1 */ DEFINE_SFX(NA_SE_EN_LAST3_COIL_ATTACK_OLD, 0x54, 0, 0, 0, 0)
/* 0x39F2 */ DEFINE_SFX(NA_SE_EN_STALWALL_LAUGH, 0x34, 0, 0, 0, 0)
/* 0x39F3 */ DEFINE_SFX(NA_SE_EN_PIRANHA_EXIST, 0x15, 0, 0, 0, 0)
/* 0x39F4 */ DEFINE_SFX(NA_SE_EN_PIRANHA_ATTACK, 0x35, 0, 0, 0, 0)
/* 0x39F5 */ DEFINE_SFX(NA_SE_EN_PIRANHA_DEAD, 0x48, 0, 0, 0, 0)
/* 0x39F6 */ DEFINE_SFX(NA_SE_EN_KINGNUTS_DAMAGE, 0x38, 0, 0, 0, 0)
/* 0x39F7 */ DEFINE_SFX(NA_SE_EN_COMMON_DEADLIGHT, 0x30, 0, 0, 0, 0)
/* 0x39F8 */ DEFINE_SFX(NA_SE_EN_GOLONKID_WALK, 0x30, 2, 3, 0, 0)
/* 0x39F9 */ DEFINE_SFX(NA_SE_EN_YMAJIN_MINI_DAMAGE, 0x38, 2, 0, 0, 0)
/* 0x39FA */ DEFINE_SFX(NA_SE_EN_YMAJIN_DAMAGE, 0x38, 2, 0, 0, 0)
/* 0x39FB */ DEFINE_SFX(NA_SE_EN_KOTAKE_SURPRISED, 0x30, 0, 2, 0, 0)
/* 0x39FC */ DEFINE_SFX(NA_SE_EN_HANDW_GET, 0x30, 0, 0, 0, 0)
/* 0x39FD */ DEFINE_SFX(NA_SE_EN_HANDW_RELEASE, 0x30, 0, 0, 0, 0)
/* 0x39FE */ DEFINE_SFX(NA_SE_EN_SLIME_SURFACE, 0x30, 0, 0, 0, 0)
/* 0x39FF */ DEFINE_SFX(NA_SE_EN_KOTAKE_SLEEP, 0x30, 0, 0, 0, 0)
/* 0x3A00 */ DEFINE_SFX(NA_SE_EN_KOTAKE_SURPRISED2, 0x30, 0, 2, SFX_FLAG2_0, 0)
/* 0x3A01 */ DEFINE_SFX(NA_SE_EN_NEMURI_SLEEP, 0x30, 6, 0, SFX_FLAG2_7 | SFX_FLAG2_5 | SFX_FLAG2_4 | SFX_FLAG2_2, 0)
/* 0x3A02 */ DEFINE_SFX(NA_SE_EN_LAST1_DEAD_OLD, 0x30, 0, 0, 0, 0)
/* 0x3A03 */ DEFINE_SFX(NA_SE_EN_GOLON_SIRLOIN_ROLL, 0x30, 6, 0, 0, 0)
/* 0x3A04 */ DEFINE_SFX(NA_SE_EN_GOLON_VOICE_EATFULL, 0x30, 3, 2, 0, 0)
/* 0x3A05 */ DEFINE_SFX(NA_SE_EN_GOLON_SIRLOIN_EAT, 0x30, 0, 0, 0, 0)
/* 0x3A06 */ DEFINE_SFX(NA_SE_EN_EYEGOLE_WALK, 0x30, 2, 0, 0, 0)
/* 0x3A07 */ DEFINE_SFX(NA_SE_EN_EYEGOLE_STAND, 0x30, 2, 0, 0, 0)
/* 0x3A08 */ DEFINE_SFX(NA_SE_EN_EYEGOLE_SIT, 0x30, 2, 0, 0, 0)
/* 0x3A09 */ DEFINE_SFX(NA_SE_EN_INVADER_DEAD, 0x48, 2, 0, 0, 0)
/* 0x3A0A */ DEFINE_SFX(NA_SE_EN_FOLLOWERS_BEAM_PRE, 0x28, 1, 0, 0, 0)
/* 0x3A0B */ DEFINE_SFX(NA_SE_EN_FOLLOWERS_BEAM, 0x36, 0, 0, 0, 0)
/* 0x3A0C */ DEFINE_SFX(NA_SE_EN_FOLLOWERS_DAMAGE, 0x38, 0, 0, 0, 0)
/* 0x3A0D */ DEFINE_SFX(NA_SE_EN_FOLLOWERS_DEAD, 0x48, 0, 0, 0, 0)
/* 0x3A0E */ DEFINE_SFX(NA_SE_EN_INBOSS_DEAD_PRE2_OLD, 0x68, 3, 0, 0, 0)
/* 0x3A0F */ DEFINE_SFX(NA_SE_EN_IKURA_JUMP1, 0x30, 3, 0, 0, 0)
/* 0x3A10 */ DEFINE_SFX(NA_SE_EN_IKURA_JUMP2, 0x30, 3, 0, 0, 0)
/* 0x3A11 */ DEFINE_SFX(NA_SE_EN_IKURA_DAMAGE, 0x38, 3, 0, 0, 0)
/* 0x3A12 */ DEFINE_SFX(NA_SE_EN_IKURA_DEAD, 0x48, 3, 0, 0, 0)
/* 0x3A13 */ DEFINE_SFX(NA_SE_EN_ME_DAMAGE, 0x58, 3, 0, 0, 0)
/* 0x3A14 */ DEFINE_SFX(NA_SE_EN_ME_DEAD, 0x68, 3, 0, 0, 0)
/* 0x3A15 */ DEFINE_SFX(NA_SE_EN_ME_EXIST, 0x29, 3, 0, 0, 0)
/* 0x3A16 */ DEFINE_SFX(NA_SE_EN_ME_ATTACK, 0x54, 3, 0, 0, 0)
/* 0x3A17 */ DEFINE_SFX(NA_SE_EN_GOLONKID_SOB_TALK, 0x30, 0, 0, 0, 0)
/* 0x3A18 */ DEFINE_SFX(NA_SE_EN_GOLONKID_YAWN, 0x30, 0, 0, 0, 0)
/* 0x3A19 */ DEFINE_SFX(NA_SE_EN_GOLONKID_SNORE, 0x30, 0, 1, 0, 0)
/* 0x3A1A */ DEFINE_SFX(NA_SE_EN_GOLON_SNORE1, 0x30, 0, 1, 0, 0)
/* 0x3A1B */ DEFINE_SFX(NA_SE_EN_GOLON_SNORE2, 0x30, 0, 1, 0, 0)
/* 0x3A1C */ DEFINE_SFX(NA_SE_EN_BUBLEFALL_APPEAR, 0x30, 0, 0, 0, 0)
/* 0x3A1D */ DEFINE_SFX(NA_SE_EN_INBOSS_DEAD_OLD, 0x68, 3, 0, 0, 0)
/* 0x3A1E */ DEFINE_SFX(NA_SE_EN_LAST1_BEAM2_OLD, 0x30, 0, 0, 0, 0)
/* 0x3A1F */ DEFINE_SFX(NA_SE_EN_COMMON_EXTINCT_LEV, 0x45, 2, 0, 0, 0)
/* 0x3A20 */ DEFINE_SFX(NA_SE_EN_BOSU_HEAD_MID, 0x40, 3, 1, 0, SFX_FLAG_14)
/* 0x3A21 */ DEFINE_SFX(NA_SE_EN_BOSU_HEAD_SHORT, 0x40, 3, 1, 0, SFX_FLAG_14)
/* 0x3A22 */ DEFINE_SFX(NA_SE_EN_DEBU_HEAD_MID, 0x30, 3, 1, 0, SFX_FLAG_14)
/* 0x3A23 */ DEFINE_SFX(NA_SE_EN_DEBU_HEAD_SHORT, 0x30, 3, 1, 0, SFX_FLAG_14)
/* 0x3A24 */ DEFINE_SFX(NA_SE_EN_YASE_HEAD_MID, 0x30, 3, 1, 0, SFX_FLAG_14)
/* 0x3A25 */ DEFINE_SFX(NA_SE_EN_YASE_HEAD_SHORT, 0x30, 3, 1, 0, SFX_FLAG_14)
/* 0x3A26 */ DEFINE_SFX(NA_SE_EN_BOSU_WALK, 0x30, 3, 2, 0, SFX_FLAG_14)
/* 0x3A27 */ DEFINE_SFX(NA_SE_EN_DEBU_WALK, 0x30, 3, 2, 0, SFX_FLAG_14)
/* 0x3A28 */ DEFINE_SFX(NA_SE_EN_YASE_WALK, 0x30, 3, 2, 0, SFX_FLAG_14)
/* 0x3A29 */ DEFINE_SFX(NA_SE_EN_BOSU_SIT, 0x50, 3, 0, 0, 0)
/* 0x3A2A */ DEFINE_SFX(NA_SE_EN_BOSU_STAND, 0x30, 3, 0, 0, 0)
/* 0x3A2B */ DEFINE_SFX(NA_SE_EN_BOSU_HAND, 0x30, 3, 0, 0, 0)
/* 0x3A2C */ DEFINE_SFX(NA_SE_EN_LAST3_KOMA_OLD, 0x10, 0, 0, 0, 0)
/* 0x3A2D */ DEFINE_SFX(NA_SE_EN_KONB_PREATTACK_OLD, 0x54, 3, 0, 0, 0)
/* 0x3A2E */ DEFINE_SFX(NA_SE_EN_BOSU_SHOCK, 0x50, 3, 0, 0, 0)
/* 0x3A2F */ DEFINE_SFX(NA_SE_EN_BOSU_SHIT, 0x50, 3, 0, 0, 0)
/* 0x3A30 */ DEFINE_SFX(NA_SE_EN_BOSU_ATTACK, 0x54, 3, 1, 0, 0)
/* 0x3A31 */ DEFINE_SFX(NA_SE_EN_BOSU_CYNICAL, 0x50, 3, 1, 0, 0)
/* 0x3A32 */ DEFINE_SFX(NA_SE_EN_BOSU_LAUGH, 0x50, 3, 1, 0, 0)
/* 0x3A33 */ DEFINE_SFX(NA_SE_EN_BOSU_LAUGH_DEMO, 0x50, 3, 1, 0, 0)
/* 0x3A34 */ DEFINE_SFX(NA_SE_EN_DEBU_ATTACK, 0x36, 3, 1, 0, 0)
/* 0x3A35 */ DEFINE_SFX(NA_SE_EN_DEBU_LAUGH, 0x34, 3, 1, 0, 0)
/* 0x3A36 */ DEFINE_SFX(NA_SE_EN_DEBU_PAUSE, 0x34, 3, 2, 0, 0)
/* 0x3A37 */ DEFINE_SFX(NA_SE_EN_YASE_ATTACK, 0x36, 3, 1, 0, 0)
/* 0x3A38 */ DEFINE_SFX(NA_SE_EN_YASE_LAUGH, 0x35, 3, 1, 0, 0)
/* 0x3A39 */ DEFINE_SFX(NA_SE_EN_YASE_PAUSE, 0x34, 3, 2, 0, 0)
/* 0x3A3A */ DEFINE_SFX(NA_SE_EN_BOSU_DAMAGE, 0x58, 3, 1, 0, 0)
/* 0x3A3B */ DEFINE_SFX(NA_SE_EN_DEBU_DAMAGE, 0x68, 3, 1, 0, 0)
/* 0x3A3C */ DEFINE_SFX(NA_SE_EN_YASE_DAMAGE, 0x38, 3, 1, 0, 0)
/* 0x3A3D */ DEFINE_SFX(NA_SE_EN_BOSU_DEAD, 0x48, 3, 1, 0, 0)
/* 0x3A3E */ DEFINE_SFX(NA_SE_EN_DEBU_DEAD, 0x38, 3, 1, 0, 0)
/* 0x3A3F */ DEFINE_SFX(NA_SE_EN_YASE_DEAD, 0x48, 3, 1, 0, 0)
/* 0x3A40 */ DEFINE_SFX(NA_SE_EN_DEBU_PAUSE_K, 0x34, 3, 2, 0, 0)
/* 0x3A41 */ DEFINE_SFX(NA_SE_EN_DEBU_LAUGH_SHORT_K, 0x34, 3, 1, 0, SFX_FLAG_14)
/* 0x3A42 */ DEFINE_SFX(NA_SE_EN_DEBU_LAUGH_K, 0x34, 3, 1, 0, SFX_FLAG_14)
/* 0x3A43 */ DEFINE_SFX(NA_SE_EN_YASE_PAUSE_K, 0x34, 3, 2, 0, 0)
/* 0x3A44 */ DEFINE_SFX(NA_SE_EN_YASE_LAUGH_K, 0x34, 3, 1, 0, SFX_FLAG_14)
/* 0x3A45 */ DEFINE_SFX(NA_SE_EN_BOSU_LAUGH_DEMO_K, 0x50, 3, 1, 0, 0)
/* 0x3A46 */ DEFINE_SFX(NA_SE_EN_DEBU_LAUGH_SHORT, 0x34, 3, 1, 0, 0)
/* 0x3A47 */ DEFINE_SFX(NA_SE_EN_BOSU_LAUGH_K, 0x50, 3, 1, 0, 0)
/* 0x3A48 */ DEFINE_SFX(NA_SE_EN_DEBU_ATTACK_W, 0x36, 3, 1, 0, 0)
/* 0x3A49 */ DEFINE_SFX(NA_SE_EN_YASE_ATTACK_W, 0x36, 3, 1, 0, 0)
/* 0x3A4A */ DEFINE_SFX(NA_SE_EN_BOSU_ATTACK_W, 0x34, 3, 1, 0, 0)
/* 0x3A4B */ DEFINE_SFX(NA_SE_EN_STAL_FREEZE_LIGHTS, 0x37, 3, 0, 0, 0)
/* 0x3A4C */ DEFINE_SFX(NA_SE_EN_BOSU_ATTACK_K, 0x54, 3, 1, 0, 0)
/* 0x3A4D */ DEFINE_SFX(NA_SE_EN_BOSU_SWORD, 0x40, 3, 0, 0, 0)
/* 0x3A4E */ DEFINE_SFX(NA_SE_EN_KONB_JUMP_LEV_OLD, 0x40, 3, 0, 0, 0)
/* 0x3A4F */ DEFINE_SFX(NA_SE_EN_MIBOSS_FREEZE_OLD, 0x57, 3, 0, 0, 0)
/* 0x3A50 */ DEFINE_SFX(NA_SE_EN_YMAJIN_THROW, 0x34, 2, 0, 0, 0)
/* 0x3A51 */ DEFINE_SFX(NA_SE_EN_BOSU_HEAD_BITE, 0x40, 0, 0, 0, 0)
/* 0x3A52 */ DEFINE_SFX(NA_SE_EN_BOSU_HEAD_FLOAT, 0x32, 0, 0, 0, 0)
/* 0x3A53 */ DEFINE_SFX(NA_SE_EN_LAST3_VOICE_KICK_OLD, 0x50, 3, 2, 0, 0)
/* 0x3A54 */ DEFINE_SFX(NA_SE_EN_LAST3_VOICE_KOMA_OLD, 0x50, 3, 2, 0, 0)
/* 0x3A55 */ DEFINE_SFX(NA_SE_EN_LAST3_VOICE_ROD_OLD, 0x50, 3, 2, 0, 0)
/* 0x3A56 */ DEFINE_SFX(NA_SE_EN_LAST3_VOICE_THROW_OLD, 0x50, 3, 2, 0, 0)
/* 0x3A57 */ DEFINE_SFX(NA_SE_EN_LAST3_VOICE_LAUGH_OLD, 0x50, 3, 2, 0, 0)
/* 0x3A58 */ DEFINE_SFX(NA_SE_EN_LAST3_VOICE_DAMAGE_OLD, 0x58, 3, 2, 0, 0)
/* 0x3A59 */ DEFINE_SFX(NA_SE_EN_LAST3_VOICE_DAMAGE2_OLD, 0x58, 3, 2, 0, 0)
/* 0x3A5A */ DEFINE_SFX(NA_SE_EN_LAST3_VOICE_DEAD_OLD, 0x68, 3, 0, 0, 0)
/* 0x3A5B */ DEFINE_SFX(NA_SE_EN_BOSU_DEAD_VOICE, 0x68, 3, 0, 0, 0)
/* 0x3A5C */ DEFINE_SFX(NA_SE_EN_DEBU_DEAD_VOICE, 0x48, 3, 0, 0, 0)
/* 0x3A5D */ DEFINE_SFX(NA_SE_EN_YASE_DEAD_VOICE, 0x48, 3, 0, 0, 0)
/* 0x3A5E */ DEFINE_SFX(NA_SE_EN_LAST2_BALLET_OLD, 0x50, 3, 0, 0, 0)
/* 0x3A5F */ DEFINE_SFX(NA_SE_EN_LAST2_MOONWALK_OLD, 0x50, 3, 0, 0, 0)
/* 0x3A60 */ DEFINE_SFX(NA_SE_EN_SHARP_FLOAT, 0x28, 4, 0, 0, 0)
/* 0x3A61 */ DEFINE_SFX(NA_SE_EN_SHARP_REACTION, 0x34, 2, 0, 0, 0)
/* 0x3A62 */ DEFINE_SFX(NA_SE_EN_REDEAD_WEAKENED1, 0x30, 0, 2, 0, SFX_FLAG_14)
/* 0x3A63 */ DEFINE_SFX(NA_SE_EN_REDEAD_WEAKENED_L1, 0x30, 0, 2, 0, SFX_FLAG_14)
/* 0x3A64 */ DEFINE_SFX(NA_SE_EN_REDEAD_WEAKENED2, 0x30, 0, 2, 0, SFX_FLAG_14)
/* 0x3A65 */ DEFINE_SFX(NA_SE_EN_REDEAD_WEAKENED_L2, 0x30, 0, 2, 0, SFX_FLAG_14)
/* 0x3A66 */ DEFINE_SFX(NA_SE_EN_PIRATE_ONGND, 0x30, 1, 0, 0, 0)
/* 0x3A67 */ DEFINE_SFX(NA_SE_EN_FOLLOWERS_STAY, 0x30, 4, 2, 0, 0)
/* 0x3A68 */ DEFINE_SFX(NA_SE_EN_LAST2_VOICE_BALLET, 0x50, 3, 0, 0, 0)
/* 0x3A69 */ DEFINE_SFX(NA_SE_EN_LAST2_VOICE_UAUOO1_OLD, 0x50, 3, 0, 0, 0)
/* 0x3A6A */ DEFINE_SFX(NA_SE_EN_LAST2_VOICE_UAUOO2_OLD, 0x50, 3, 0, 0, 0)
/* 0x3A6B */ DEFINE_SFX(NA_SE_EN_LAST2_VOICE_SURPRISED_OLD, 0x50, 3, 0, 0, 0)
/* 0x3A6C */ DEFINE_SFX(NA_SE_EN_LAST2_DAMAGE_OLD, 0x58, 3, 0, 0, 0)
/* 0x3A6D */ DEFINE_SFX(NA_SE_EN_LAST2_DAMAGE2_OLD, 0x58, 3, 0, 0, 0)
/* 0x3A6E */ DEFINE_SFX(NA_SE_EN_LAST2_DEAD_OLD, 0x68, 3, 0, 0, 0)
/* 0x3A6F */ DEFINE_SFX(NA_SE_EN_LAST2_UAUOO_OLD, 0x50, 3, 0, 0, 0)
/* 0x3A70 */ DEFINE_SFX(NA_SE_EN_LAST2_GYM_B_OLD, 0x50, 3, 0, 0, 0)
/* 0x3A71 */ DEFINE_SFX(NA_SE_EN_PIRATE_COOL_LAUGH, 0x30, 1, 0, 0, 0)
/* 0x3A72 */ DEFINE_SFX(NA_SE_EN_PIRATE_CYNICAL, 0x30, 1, 0, 0, 0)
/* 0x3A73 */ DEFINE_SFX(NA_SE_EN_PIRATE_DAMM_BREATH, 0x30, 1, 0, 0, 0)
/* 0x3A74 */ DEFINE_SFX(NA_SE_EN_PIRATE_SHOUT, 0x30, 1, 0, 0, 0)
/* 0x3A75 */ DEFINE_SFX(NA_SE_EN_STAL01_LAUGH, 0x34, 0, 2, 0, 0)
/* 0x3A76 */ DEFINE_SFX(NA_SE_EN_STAL02_LAUGH_SHORT, 0x34, 0, 0, 0, 0)
/* 0x3A77 */ DEFINE_SFX(NA_SE_EN_STAL03_LAUGH_BIG, 0x34, 0, 0, 0, 0)
/* 0x3A78 */ DEFINE_SFX(NA_SE_EN_STAL04_ANGER, 0x34, 0, 0, 0, 0)
/* 0x3A79 */ DEFINE_SFX(NA_SE_EN_STAL05_CYNICAL, 0x34, 0, 0, 0, 0)
/* 0x3A7A */ DEFINE_SFX(NA_SE_EN_STAL06_SURPRISED, 0x34, 0, 0, 0, 0)
/* 0x3A7B */ DEFINE_SFX(NA_SE_EN_STAL07_ANTONISHED, 0x34, 0, 0, 0, 0)
/* 0x3A7C */ DEFINE_SFX(NA_SE_EN_STAL08_CRY_BIG, 0x34, 0, 0, 0, 0)
/* 0x3A7D */ DEFINE_SFX(NA_SE_EN_STAL09_SCREAM, 0x34, 0, 0, 0, 0)
/* 0x3A7E */ DEFINE_SFX(NA_SE_EN_STAL10_LAUGH_SHY, 0x34, 0, 0, 0, 0)
/* 0x3A7F */ DEFINE_SFX(NA_SE_EN_STAL11_LAUGH_SHY2, 0x54, 0, 0, 0, 0)
/* 0x3A80 */ DEFINE_SFX(NA_SE_EN_STAL12_LAUGH_KIDLY, 0x34, 0, 0, 0, 0)
/* 0x3A81 */ DEFINE_SFX(NA_SE_EN_STAL20_CALL_MOON, 0x34, 0, 0, 0, SFX_FLAG_13)
/* 0x3A82 */ DEFINE_SFX(NA_SE_EN_STAL20_CALL_MOON2, 0x34, 0, 0, 0, SFX_FLAG_13)
/* 0x3A83 */ DEFINE_SFX(NA_SE_EN_STAL21_PSYCHO_VOICE, 0x34, 0, 0, 0, 0)
/* 0x3A84 */ DEFINE_SFX(NA_SE_EN_STALKIDS_DOWN_K, 0x30, 5, 0, 0, 0)
/* 0x3A85 */ DEFINE_SFX(NA_SE_EN_AKINDO_FLY, 0x30, 1, 0, 0, 0)
/* 0x3A86 */ DEFINE_SFX(NA_SE_EN_NPC_APPEAR, 0x30, 0, 0, 0, 0)
/* 0x3A87 */ DEFINE_SFX(NA_SE_EN_NPC_FADEAWAY, 0x30, 0, 0, 0, 0)
/* 0x3A88 */ DEFINE_SFX(NA_SE_EN_DEBU_PAUSEx2, 0x34, 3, 2, 0, SFX_FLAG_14)
/* 0x3A89 */ DEFINE_SFX(NA_SE_EN_YASE_PAUSEx2, 0x34, 3, 2, 0, SFX_FLAG_14)
/* 0x3A8A */ DEFINE_SFX(NA_SE_EN_DEBU_HEAD_UP, 0x30, 3, 2, 0, SFX_FLAG_14)
/* 0x3A8B */ DEFINE_SFX(NA_SE_EN_YASE_HEAD_UP, 0x30, 3, 2, 0, SFX_FLAG_14)
/* 0x3A8C */ DEFINE_SFX(NA_SE_EN_STAL22_LAUGH_KID_L, 0x34, 0, 0, 0, 0)
/* 0x3A8D */ DEFINE_SFX(NA_SE_EN_EVIL_POWER, 0x30, 0, 0, 0, 0)
/* 0x3A8E */ DEFINE_SFX(NA_SE_NE_STAL23_COLD, 0x34, 3, 2, 0, SFX_FLAG_12)
/* 0x3A8F */ DEFINE_SFX(NA_SE_EN_STALKIDS_GASAGOSO, 0x30, 5, 0, 0, SFX_FLAG_12)
/* 0x3A90 */ DEFINE_SFX(NA_SE_EN_BOSU_TALK, 0x30, 0, 2, 0, SFX_FLAG_14)
/* 0x3A91 */ DEFINE_SFX(NA_SE_EN_FAMOS_REVERSE1, 0x34, 0, 0, 0, 0)
/* 0x3A92 */ DEFINE_SFX(NA_SE_EN_FAMOS_REVERSE2, 0x34, 0, 0, 0, 0)
/* 0x3A93 */ DEFINE_SFX(NA_SE_EN_FAMOS_FLOAT, 0x30, 6, 0, 0, 0)
/* 0x3A94 */ DEFINE_SFX(NA_SE_EN_FAMOS_FLOAT_REVERSE, 0x30, 6, 0, 0, 0)
/* 0x3A95 */ DEFINE_SFX(NA_SE_EN_KOTAKE_ROLL, 0x30, 5, 0, 0, 0)
/* 0x3A96 */ DEFINE_SFX(NA_SE_EN_KOTAKE_FLY, 0x30, 6, 0, 0, 0)
/* 0x3A97 */ DEFINE_SFX(NA_SE_EN_THIEFBIRD_VOICE, 0x34, 0, 0, 0, 0)
/* 0x3A98 */ DEFINE_SFX(NA_SE_EN_THIEFBIRD_DAMAGE, 0x38, 0, 0, 0, 0)
/* 0x3A99 */ DEFINE_SFX(NA_SE_EN_THIEFBIRD_DEAD, 0x48, 0, 0, 0, 0)
/* 0x3A9A */ DEFINE_SFX(NA_SE_EN_STALKIDS_BODY, 0x30, 0, 2, 0, 0)
/* 0x3A9B */ DEFINE_SFX(NA_SE_EN_STALKIDS_BODY_LEV, 0x30, 5, 2, 0, 0)
/* 0x3A9C */ DEFINE_SFX(NA_SE_EN_BOSU_STAND_RAPID, 0x30, 0, 0, 0, 0)
/* 0x3A9D */ DEFINE_SFX(NA_SE_EN_STAL24_SCREAM2, 0x30, 0, 0, 0, 0)
/* 0x3A9E */ DEFINE_SFX(NA_SE_EN_STALKIDS_EARTHQUAKE, 0x30, 0, 2, 0, 0)
/* 0x3A9F */ DEFINE_SFX(NA_SE_EN_MASK_FLOAT, 0x30, 0, 0, 0, 0)
/* 0x3AA0 */ DEFINE_SFX(NA_SE_EN_STALKIDS_PULLED, 0x30, 0, 0, 0, 0)
/* 0x3AA1 */ DEFINE_SFX(NA_SE_EN_KITA_SALUTE, 0x40, 2, 0, 0, 0)
/* 0x3AA2 */ DEFINE_SFX(NA_SE_EN_KTIA_WALK, 0x32, 0, 2, 0, 0)
/* 0x3AA3 */ DEFINE_SFX(NA_SE_EN_KTIA_PAUSE_K, 0x50, 2, 0, 0, 0)
/* 0x3AA4 */ DEFINE_SFX(NA_SE_EN_KITA_LAUGH_K, 0x50, 2, 0, 0, 0)
/* 0x3AA5 */ DEFINE_SFX(NA_SE_EN_KITA_DAMAGE, 0x58, 2, 0, 0, 0)
/* 0x3AA6 */ DEFINE_SFX(NA_SE_EN_KITA_DEAD, 0x68, 2, 0, 0, 0)
/* 0x3AA7 */ DEFINE_SFX(NA_SE_EN_STALBABY_LAUGH, 0x30, 0, 0, 0, 0)
/* 0x3AA8 */ DEFINE_SFX(NA_SE_EN_STALBABY_SURPRISED, 0x30, 0, 0, 0, 0)
/* 0x3AA9 */ DEFINE_SFX(NA_SE_EN_KITA_BREAK, 0x50, 2, 0, 0, 0)
/* 0x3AAA */ DEFINE_SFX(NA_SE_EN_KITA_ATTACK_W, 0x50, 2, 0, 0, 0)
/* 0x3AAB */ DEFINE_SFX(NA_SE_EN_KONB_WAIT_OLD, 0x30, 3, 0, 0, 0)
/* 0x3AAC */ DEFINE_SFX(NA_SE_EN_DEATH_SCYTHE, 0x54, 5, 0, 0, 0)
/* 0x3AAD */ DEFINE_SFX(NA_SE_EN_DEATH_ROLL, 0x28, 5, 0, 0, 0)
/* 0x3AAE */ DEFINE_SFX(NA_SE_EN_DEATH_SCYTHE_LEV, 0x78, 0, 0, 0, SFX_FLAG_13)
/* 0x3AAF */ DEFINE_SFX(NA_SE_EN_DEATH_SCYTHE_ONGND, 0x78, 0, 0, 0, SFX_FLAG_13)
/* 0x3AB0 */ DEFINE_SFX(NA_SE_EN_DEATH_VOICE, 0x50, 3, 0, 0, 0)
/* 0x3AB1 */ DEFINE_SFX(NA_SE_EN_DEATH_DAMAGE, 0x58, 3, 0, 0, 0)
/* 0x3AB2 */ DEFINE_SFX(NA_SE_EN_DEATH_DEAD, 0x68, 3, 0, 0, 0)
/* 0x3AB3 */ DEFINE_SFX(NA_SE_EN_DEATH_ATTACK, 0x54, 3, 0, 0, 0)
/* 0x3AB4 */ DEFINE_SFX(NA_SE_EN_DEATH_APPEAR, 0x40, 3, 0, 0, 0)
/* 0x3AB5 */ DEFINE_SFX(NA_SE_EN_DEATH_HEARTBREAK, 0x78, 3, 0, 0, 0)
/* 0x3AB6 */ DEFINE_SFX(NA_SE_EN_KONB_MINI_DEAD, 0x48, 0, 0, 0, 0)
/* 0x3AB7 */ DEFINE_SFX(NA_SE_EN_HALF_REDEAD_LOOP, 0x30, 3, 2, 0, 0)
/* 0x3AB8 */ DEFINE_SFX(NA_SE_EN_HALF_REDEAD_SURPRISE, 0x30, 3, 2, 0, 0)
/* 0x3AB9 */ DEFINE_SFX(NA_SE_EN_HALF_REDEAD_SCREAME, 0x30, 3, 2, 0, 0)
/* 0x3ABA */ DEFINE_SFX(NA_SE_EN_HALF_REDEAD_TRANS, 0x30, 3, 0, 0, 0)
/* 0x3ABB */ DEFINE_SFX(NA_SE_EN_GOLON_VOICE_GENERAL, 0x30, 0, 0, 0, 0)
/* 0x3ABC */ DEFINE_SFX(NA_SE_EN_IWAIGORON_EVERYBODY, 0x30, 0, 0, 0, 0)
/* 0x3ABD */ DEFINE_SFX(NA_SE_EN_IWAIGORON_SOLO, 0x30, 3, 3, 0, 0)
/* 0x3ABE */ DEFINE_SFX(NA_SE_EN_ROMANI_WALK, 0x30, 0, 2, 0, 0)
/* 0x3ABF */ DEFINE_SFX(NA_SE_EN_MOON_SCREAM1, 0x30, 0, 0, 0, SFX_FLAG_13)
/* 0x3AC0 */ DEFINE_SFX(NA_SE_EN_MOON_SCREAM2, 0x30, 0, 0, 0, SFX_FLAG_13)
/* 0x3AC1 */ DEFINE_SFX(NA_SE_EN_MOON_SCREAM3, 0x30, 0, 0, 0, SFX_FLAG_13)
/* 0x3AC2 */ DEFINE_SFX(NA_SE_EN_MOON_SCREAM4, 0x30, 0, 0, 0, SFX_FLAG_13)
/* 0x3AC3 */ DEFINE_SFX(NA_SE_EN_STALKIDS_HEADACHE, 0x30, 0, 0, 0, SFX_FLAG_13)
/* 0x3AC4 */ DEFINE_SFX(NA_SE_EN_BIGNUTS_WALK, 0x30, 5, 1, 0, 0)
/* 0x3AC5 */ DEFINE_SFX(NA_SE_EN_KITA_PAUSE, 0x60, 2, 0, 0, 0)
/* 0x3AC6 */ DEFINE_SFX(NA_SE_EN_ANSATSUSYA_LAUGH, 0x70, 0, 0, 0, SFX_FLAG_13)
/* 0x3AC7 */ DEFINE_SFX(NA_SE_EN__copy514, 0x30, 0, 2, 0, 0)
/* 0x3AC8 */ DEFINE_SFX(NA_SE_EN__copy515, 0x30, 0, 2, 0, 0)
/* 0x3AC9 */ DEFINE_SFX(NA_SE_EN__copy516, 0x30, 0, 2, 0, 0)
/* 0x3ACA */ DEFINE_SFX(NA_SE_EN__copy517, 0x30, 0, 2, 0, 0)
/* 0x3ACB */ DEFINE_SFX(NA_SE_EN__copy518, 0x30, 0, 2, 0, 0)
/* 0x3ACC */ DEFINE_SFX(NA_SE_EN__copy519, 0x30, 0, 2, 0, 0)
/* 0x3ACD */ DEFINE_SFX(NA_SE_EN_DALMANI_A, 0x30, 0, 2, 0, 0)
/* 0x3ACE */ DEFINE_SFX(NA_SE_EN_DALMANI_B, 0x30, 0, 2, 0, 0)
/* 0x3ACF */ DEFINE_SFX(NA_SE_EN_DALMANI_C, 0x30, 0, 2, 0, 0)
/* 0x3AD0 */ DEFINE_SFX(NA_SE_EN_DALMANI_D, 0x30, 0, 2, 0, 0)
/* 0x3AD1 */ DEFINE_SFX(NA_SE_EN__2d1, 0x30, 0, 0, 0, 0)
/* 0x3AD2 */ DEFINE_SFX(NA_SE_EN__2d2, 0x30, 0, 0, 0, 0)
/* 0x3AD3 */ DEFINE_SFX(NA_SE_EN_EVIL_POWER_PREDEMO, 0x30, 7, 0, 0, 0)
/* 0x3AD4 */ DEFINE_SFX(NA_SE_EN_KOUME_DAMAGE, 0x30, 4, 1, 0, 0)
/* 0x3AD5 */ DEFINE_SFX(NA_SE_EN_KOUME_DAMAGE2, 0x30, 4, 1, 0, 0)
/* 0x3AD6 */ DEFINE_SFX(NA_SE_EN_KONB_MINI_APPEAR, 0x30, 3, 2, 0, 0)
/* 0x3AD7 */ DEFINE_SFX(NA_SE_EN_IRONNACK_DAMAGE, 0x48, 3, 0, 0, 0)
/* 0x3AD8 */ DEFINE_SFX(NA_SE_EN_IRONNACK_DEAD, 0x58, 3, 0, 0, 0)
/* 0x3AD9 */ DEFINE_SFX(NA_SE_EN_ANSATSUSYA_ONGND, 0x30, 0, 0, 0, 0)
/* 0x3ADA */ DEFINE_SFX(NA_SE_EN_ANSATSUSYA_ROCK, 0x30, 3, 0, 0, 0)
/* 0x3ADB */ DEFINE_SFX(NA_SE_EN_REDEAD_REVERSE, 0x36, 0, 0, 0, 0)
/* 0x3ADC */ DEFINE_SFX(NA_SE_EN_STALKIDS_NOSE, 0x40, 2, 0, 0, 0)
/* 0x3ADD */ DEFINE_SFX(NA_SE_EN_KITA_SNORE, 0x30, 0, 0, 0, 0)
/* 0x3ADE */ DEFINE_SFX(NA_SE_EN_IRONNACK_DASH, 0x30, 0, 0, 0, 0)
/* 0x3ADF */ DEFINE_SFX(NA_SE_EN_TUBOOCK_FLY, 0x30, 0, 0, 0, 0)
+477
View File
@@ -0,0 +1,477 @@
/**
* Sfx Environment Bank
*
* DEFINE_SFX should be used for all sfx define in the environment bank from sequence 0
* - Argument 0: Enum value for this sfx
* - Argument 1: Importance for deciding which sfx to prioritize. Higher values have greater importance
* - Argument 2: Slows the decay of volume with distance (a 3-bit number ranging from 0-7)
* - Argument 3: Applies increasingly random offsets to frequency (a 2-bit number ranging from 0-3)
* - Argument 4: Various flags to add properties to the sfx
* - Argument 5: Various flags to add properties to the sfx
*
* WARNING: entries must align with the table defined for the environment bank in sequence 0
*/
/* 0x2800 */ DEFINE_SFX(NA_SE_EV_DOOR_OPEN, 0x70, 0, 1, 0, SFX_FLAG_10 | SFX_FLAG_9)
/* 0x2801 */ DEFINE_SFX(NA_SE_EV_DOOR_CLOSE, 0x80, 0, 1, 0, 0)
/* 0x2802 */ DEFINE_SFX(NA_SE_EV_EXPLOSION, 0x30, 0, 0, 0, 0)
/* 0x2803 */ DEFINE_SFX(NA_SE_EV_HORSE_WALK, 0x60, 0, 1, 0, 0)
/* 0x2804 */ DEFINE_SFX(NA_SE_EV_HORSE_RUN, 0x60, 0, 1, 0, 0)
/* 0x2805 */ DEFINE_SFX(NA_SE_EV_HORSE_NEIGH, 0x70, 0, 1, 0, 0)
/* 0x2806 */ DEFINE_SFX(NA_SE_EV_RIVER_STREAM, 0x30, 0, 2, 0, SFX_FLAG_10)
/* 0x2807 */ DEFINE_SFX(NA_SE_EV_WATER_WALL_BIG, 0x70, 2, 0, 0, 0)
/* 0x2808 */ DEFINE_SFX(NA_SE_EV_OUT_OF_WATER, 0x30, 0, 1, 0, 0)
/* 0x2809 */ DEFINE_SFX(NA_SE_EV_DIVE_WATER, 0x30, 0, 1, 0, 0)
/* 0x280A */ DEFINE_SFX(NA_SE_EV_ROCK_SLIDE, 0x80, 2, 0, 0, 0)
/* 0x280B */ DEFINE_SFX(NA_SE_EV_MAGMA_LEVEL, 0xA0, 3, 0, 0, 0)
/* 0x280C */ DEFINE_SFX(NA_SE_EV_BRIDGE_OPEN, 0x30, 3, 0, 0, SFX_FLAG_8)
/* 0x280D */ DEFINE_SFX(NA_SE_EV_BRIDGE_CLOSE, 0x30, 3, 0, 0, 0)
/* 0x280E */ DEFINE_SFX(NA_SE_EV_BRIDGE_OPEN_STOP, 0x30, 3, 0, 0, 0)
/* 0x280F */ DEFINE_SFX(NA_SE_EV_BRIDGE_CLOSE_STOP, 0x30, 3, 0, 0, 0)
/* 0x2810 */ DEFINE_SFX(NA_SE_EV_WALL_BROKEN, 0x30, 2, 0, 0, 0)
/* 0x2811 */ DEFINE_SFX(NA_SE_EV_CHICKEN_CRY_N, 0x30, 0, 1, 0, 0)
/* 0x2812 */ DEFINE_SFX(NA_SE_EV_CHICKEN_CRY_A, 0x30, 0, 1, 0, 0)
/* 0x2813 */ DEFINE_SFX(NA_SE_EV_CHICKEN_CRY_M, 0x50, 0, 0, 0, 0)
/* 0x2814 */ DEFINE_SFX(NA_SE_EV_SLIDE_DOOR_OPEN, 0x60, 2, 0, 0, 0)
/* 0x2815 */ DEFINE_SFX(NA_SE_EV_FOOT_SWITCH, 0x30, 3, 0, 0, 0)
/* 0x2816 */ DEFINE_SFX(NA_SE_EV_HORSE_GROAN, 0x60, 0, 0, 0, 0)
/* 0x2817 */ DEFINE_SFX(NA_SE_EV_BOMB_DROP_WATER, 0x30, 2, 2, 0, 0)
/* 0x2818 */ DEFINE_SFX(NA_SE_EV_HORSE_JUMP, 0x30, 0, 0, 0, 0)
/* 0x2819 */ DEFINE_SFX(NA_SE_EV_HORSE_LAND, 0x40, 0, 0, 0, 0)
/* 0x281A */ DEFINE_SFX(NA_SE_EV_HORSE_SLIP, 0x68, 0, 0, 0, 0)
/* 0x281B */ DEFINE_SFX(NA_SE_EV_WHITE_FAIRY_DASH, 0x58, 0, 1, 0, 0)
/* 0x281C */ DEFINE_SFX(NA_SE_EV_SLIDE_DOOR_CLOSE, 0x60, 0, 0, 0, 0)
/* 0x281D */ DEFINE_SFX(NA_SE_EV_BIGWALL_BOUND, 0x70, 3, 0, 0, 0)
/* 0x281E */ DEFINE_SFX(NA_SE_EV_STONE_STATUE_OPEN, 0x30, 3, 1, 0, 0)
/* 0x281F */ DEFINE_SFX(NA_SE_EV_TBOX_UNLOCK, 0x30, 0, 0, 0, 0)
/* 0x2820 */ DEFINE_SFX(NA_SE_EV_TBOX_OPEN, 0x30, 0, 0, 0, 0)
/* 0x2821 */ DEFINE_SFX(NA_SE_SY_TIMER, 0xA0, 0, 0, 0, SFX_FLAG_13 | SFX_FLAG_3)
/* 0x2822 */ DEFINE_SFX(NA_SE_EV_FLAME_IGNITION, 0x20, 2, 0, 0, 0)
/* 0x2823 */ DEFINE_SFX(NA_SE_EV_SPEAR_HIT, 0x30, 0, 0, 0, 0)
/* 0x2824 */ DEFINE_SFX(NA_SE_EV_ELEVATOR_MOVE, 0x30, 0, 0, 0, SFX_FLAG_11)
/* 0x2825 */ DEFINE_SFX(NA_SE_EV_WARP_HOLE, 0x30, 0, 0, 0, SFX_FLAG_15 | SFX_FLAG_11)
/* 0x2826 */ DEFINE_SFX(NA_SE_EV_LINK_WARP, 0x30, 0, 0, 0, SFX_FLAG_15)
/* 0x2827 */ DEFINE_SFX(NA_SE_EV_PILLAR_SINK, 0x30, 2, 0, 0, 0)
/* 0x2828 */ DEFINE_SFX(NA_SE_EV_WATER_WALL, 0x30, 0, 0, 0, 0)
/* 0x2829 */ DEFINE_SFX(NA_SE_EV_RIVER_STREAM_S, 0x30, 0, 0, 0, 0)
/* 0x282A */ DEFINE_SFX(NA_SE_EV_RIVER_STREAM_F, 0x30, 0, 0, 0, 0)
/* 0x282B */ DEFINE_SFX(NA_SE_EV_KID_HORSE_LAND2, 0x60, 0, 0, 0, 0)
/* 0x282C */ DEFINE_SFX(NA_SE_EV_KID_HORSE_SANDDUST, 0x60, 0, 0, 0, SFX_FLAG_10)
/* 0x282D */ DEFINE_SFX(NA_SE_EV_DUMMY_45, 0x30, 0, 0, 0, 0)
/* 0x282E */ DEFINE_SFX(NA_SE_EV_LIGHTNING, 0x80, 0, 0, 0, 0)
/* 0x282F */ DEFINE_SFX(NA_SE_EV_BOMB_BOUND, 0x30, 0, 2, 0, 0)
/* 0x2830 */ DEFINE_SFX(NA_SE_EV_WATERDROP, 0x30, 0, 1, 0, 0)
/* 0x2831 */ DEFINE_SFX(NA_SE_EV_TORCH, 0x10, 0, 0, 0, 0)
/* 0x2832 */ DEFINE_SFX(NA_SE_EV_MAGMA_LEVEL_M, 0xA0, 3, 0, 0, 0)
/* 0x2833 */ DEFINE_SFX(NA_SE_EV_FIRE_PILLAR, 0x30, 0, 0, 0, SFX_FLAG_8)
/* 0x2834 */ DEFINE_SFX(NA_SE_EV_FIRE_PLATE, 0x30, 0, 0, 0, SFX_FLAG_4)
/* 0x2835 */ DEFINE_SFX(NA_SE_EV_BLOCK_BOUND, 0x30, 3, 0, 0, 0)
/* 0x2836 */ DEFINE_SFX(NA_SE_EV_METALDOOR_SLIDE, 0x60, 3, 0, SFX_FLAG2_6, 0)
/* 0x2837 */ DEFINE_SFX(NA_SE_EV_METALDOOR_STOP, 0x30, 0, 0, 0, 0)
/* 0x2838 */ DEFINE_SFX(NA_SE_EV_BLOCK_SHAKE, 0x30, 0, 0, 0, 0)
/* 0x2839 */ DEFINE_SFX(NA_SE_EV_BOX_BREAK, 0x30, 2, 0, 0, 0)
/* 0x283A */ DEFINE_SFX(NA_SE_EV_HAMMER_SWITCH, 0x30, 0, 0, 0, 0)
/* 0x283B */ DEFINE_SFX(NA_SE_EV_MAGMA_LEVEL_L, 0xA0, 3, 0, 0, 0)
/* 0x283C */ DEFINE_SFX(NA_SE_EV_SPEAR_FENCE, 0x30, 0, 0, 0, 0)
/* 0x283D */ DEFINE_SFX(NA_SE_EV_WATERDROP_GRD, 0x30, 0, 0, 0, 0)
/* 0x283E */ DEFINE_SFX(NA_SE_EV_EXPLSION_LONG, 0x30, 3, 0, 0, 0)
/* 0x283F */ DEFINE_SFX(NA_SE_EV_WATER_WALL_BIG_SILENT, 0x70, 0, 0, 0, 0)
/* 0x2840 */ DEFINE_SFX(NA_SE_EV_DESERT_WARPHOLE, 0x60, 0, 0, 0, SFX_FLAG_15)
/* 0x2841 */ DEFINE_SFX(NA_SE_EV_FOUNTAIN, 0x30, 0, 0, 0, SFX_FLAG_15)
/* 0x2842 */ DEFINE_SFX(NA_SE_EV_KID_HORSE_WALK, 0x60, 0, 0, 0, 0)
/* 0x2843 */ DEFINE_SFX(NA_SE_EV_KID_HORSE_RUN, 0x60, 0, 0, 0, 0)
/* 0x2844 */ DEFINE_SFX(NA_SE_EV_KID_HORSE_NEIGH, 0x60, 0, 0, 0, 0)
/* 0x2845 */ DEFINE_SFX(NA_SE_EV_KID_HORSE_GROAN, 0x60, 0, 0, 0, 0)
/* 0x2846 */ DEFINE_SFX(NA_SE_EV_S_STONE_FLASH, 0x30, 3, 0, 0, SFX_FLAG_13)
/* 0x2847 */ DEFINE_SFX(NA_SE_EV_LIGHT_GATHER, 0x30, 0, 0, 0, 0)
/* 0x2848 */ DEFINE_SFX(NA_SE_EV_TREE_CUT, 0x30, 0, 0, 0, 0)
/* 0x2849 */ DEFINE_SFX(NA_SE_EV_VOLCANO, 0x30, 0, 0, 0, SFX_FLAG_13 | SFX_FLAG_4)
/* 0x284A */ DEFINE_SFX(NA_SE_EV_POSTMAN_WALK, 0x30, 0, 1, 0, 0)
/* 0x284B */ DEFINE_SFX(NA_SE_EV_POSTMACHINE_HIT_OPEN, 0x60, 0, 0, 0, 0)
/* 0x284C */ DEFINE_SFX(NA_SE_EV_POSTMACHINE_OPEN, 0x60, 3, 0, 0, 0)
/* 0x284D */ DEFINE_SFX(NA_SE_EV_CHINETRAP_DOWN, 0x30, 0, 0, 0, 0)
/* 0x284E */ DEFINE_SFX(NA_SE_EV_PLANT_BROKEN, 0x58, 1, 0, 0, 0)
/* 0x284F */ DEFINE_SFX(NA_SE_EV_STONE_SWITCH_ON, 0x30, 0, 0, 0, 0)
/* 0x2850 */ DEFINE_SFX(NA_SE_EV_FLUTTER_FLAG, 0x30, 0, 0, 0, 0)
/* 0x2851 */ DEFINE_SFX(NA_SE_EV_TRAP_BOUND, 0x40, 0, 0, 0, 0)
/* 0x2852 */ DEFINE_SFX(NA_SE_EV_ROCK_BROKEN, 0x30, 3, 3, 0, 0)
/* 0x2853 */ DEFINE_SFX(NA_SE_EV_FANTOM_WARP_S2, 0x70, 2, 0, 0, 0)
/* 0x2854 */ DEFINE_SFX(NA_SE_EV_FANTOM_WARP_L2, 0x60, 2, 0, 0, 0)
/* 0x2855 */ DEFINE_SFX(NA_SE_EV_COFFIN_CAP_OPEN, 0x30, 0, 0, 0, 0)
/* 0x2856 */ DEFINE_SFX(NA_SE_EV_TRE_BOX_BOUND, 0x60, 1, 1, 0, 0)
/* 0x2857 */ DEFINE_SFX(NA_SE_EV_WIND_TRAP, 0x30, 2, 0, 0, 0)
/* 0x2858 */ DEFINE_SFX(NA_SE_EV_TRAP_OBJ_SLIDE, 0x30, 0, 0, 0, 0)
/* 0x2859 */ DEFINE_SFX(NA_SE_EV_METALDOOR_OPEN, 0x90, 3, 0, 0, 0)
/* 0x285A */ DEFINE_SFX(NA_SE_EV_METALDOOR_CLOSE, 0x90, 3, 0, 0, 0)
/* 0x285B */ DEFINE_SFX(NA_SE_EV_BURN_OUT, 0x30, 0, 0, 0, 0)
/* 0x285C */ DEFINE_SFX(NA_SE_EV_BLOCKSINK, 0x30, 2, 0, 0, 0)
/* 0x285D */ DEFINE_SFX(NA_SE_EV_CROWD, 0x30, 0, 0, 0, SFX_FLAG_13 | SFX_FLAG_12 | SFX_FLAG_11)
/* 0x285E */ DEFINE_SFX(NA_SE_EV_WATER_LEVEL_DOWN, 0x30, 0, 0, 0, 0)
/* 0x285F */ DEFINE_SFX(NA_SE_EV_NAVY_VANISH, 0x30, 0, 0, 0, 0)
/* 0x2860 */ DEFINE_SFX(NA_SE_EV_STONE_SWITCH_OFF, 0x30, 3, 0, 0, 0)
/* 0x2861 */ DEFINE_SFX(NA_SE_EV_WEB_VIBRATION, 0x30, 0, 0, 0, 0)
/* 0x2862 */ DEFINE_SFX(NA_SE_EV_ICE_STAND_APPEAR, 0x30, 0, 0, 0, 0)
/* 0x2863 */ DEFINE_SFX(NA_SE_EV_ROLL_STAND, 0x30, 3, 0, 0, 0)
/* 0x2864 */ DEFINE_SFX(NA_SE_EV_SEESAW_WATER_BOUND, 0x30, 0, 1, 0, 0)
/* 0x2865 */ DEFINE_SFX(NA_SE_EV_SECOM_CONVEYOR, 0x30, 0, 0, 0, 0)
/* 0x2866 */ DEFINE_SFX(NA_SE_EV_WOODDOOR_OPEN, 0x30, 0, 0, 0, 0)
/* 0x2867 */ DEFINE_SFX(NA_SE_EV_METALGATE_OPEN, 0x30, 0, 0, 0, 0)
/* 0x2868 */ DEFINE_SFX(NA_SE_IT_SCOOP_UP_WATER, 0x30, 0, 0, 0, 0)
/* 0x2869 */ DEFINE_SFX(NA_SE_EV_FISH_LEAP, 0x30, 0, 0, 0, 0)
/* 0x286A */ DEFINE_SFX(NA_SE_EV_KAKASHI_SWING, 0x30, 0, 0, 0, 0)
/* 0x286B */ DEFINE_SFX(NA_SE_EV_KAKASHI_ROLL, 0x30, 0, 0, 0, 0)
/* 0x286C */ DEFINE_SFX(NA_SE_EV_BOTTLE_CAP_OPEN, 0x30, 3, 0, 0, 0)
/* 0x286D */ DEFINE_SFX(NA_SE_EV_G_STONE_CRUSH, 0x30, 3, 0, 0, SFX_FLAG_11)
/* 0x286E */ DEFINE_SFX(NA_SE_EV_KAKASH_LONGI_ROLL, 0x30, 0, 0, 0, 0)
/* 0x286F */ DEFINE_SFX(NA_SE_EV_SUN_MARK_FLASH, 0x30, 3, 0, 0, 0)
/* 0x2870 */ DEFINE_SFX(NA_SE_EV_FALL_DOWN_DIRT, 0x30, 0, 0, 0, 0)
/* 0x2871 */ DEFINE_SFX(NA_SE_EV_SEESAW_BOUND, 0x30, 0, 0, 0, 0)
/* 0x2872 */ DEFINE_SFX(NA_SE_EV_FAIRY_ATTACK, 0x30, 0, 2, 0, 0)
/* 0x2873 */ DEFINE_SFX(NA_SE_EV_WOOD_HIT, 0x30, 0, 0, 0, 0)
/* 0x2874 */ DEFINE_SFX(NA_SE_EV_SCOOPUP_WATER, 0x30, 0, 0, 0, 0)
/* 0x2875 */ DEFINE_SFX(NA_SE_EV_DROP_FALL, 0x30, 0, 0, 0, 0)
/* 0x2876 */ DEFINE_SFX(NA_SE_EV_WOOD_GEAR, 0x30, 2, 0, 0, 0)
/* 0x2877 */ DEFINE_SFX(NA_SE_EV_TREE_SWING, 0x60, 0, 0, 0, 0)
/* 0x2878 */ DEFINE_SFX(NA_SE_EV_AUTO_DOOR_CLOSE, 0x30, 0, 1, 0, SFX_FLAG_10 | SFX_FLAG_9)
/* 0x2879 */ DEFINE_SFX(NA_SE_EV_NAVY_FLY_REBIRTH, 0x30, 2, 0, 0, 0)
/* 0x287A */ DEFINE_SFX(NA_SE_EV_CHAINLIFT_STOP, 0x30, 2, 0, 0, 0)
/* 0x287B */ DEFINE_SFX(NA_SE_EV_TRE_BOX_APPEAR, 0x80, 2, 0, 0, 0)
/* 0x287C */ DEFINE_SFX(NA_SE_EV_CHAIN_KEY_UNLOCK, 0x40, 0, 0, 0, 0)
/* 0x287D */ DEFINE_SFX(NA_SE_EV_SPINE_TRAP_MOVE, 0x1C, 0, 0, 0, 0)
/* 0x287E */ DEFINE_SFX(NA_SE_EV_HEALING, 0x30, 0, 0, 0, 0)
/* 0x287F */ DEFINE_SFX(NA_SE_EV_GREAT_FAIRY_APPEAR, 0x30, 0, 0, 0, 0)
/* 0x2880 */ DEFINE_SFX(NA_SE_EV_GREAT_FAIRY_VANISH, 0x30, 0, 0, 0, 0)
/* 0x2881 */ DEFINE_SFX(NA_SE_EV_RED_EYE, 0x30, 0, 0, 0, 0)
/* 0x2882 */ DEFINE_SFX(NA_SE_EV_ROLL_STAND_2, 0x30, 0, 0, 0, 0)
/* 0x2883 */ DEFINE_SFX(NA_SE_EV_WALL_SLIDE, 0x30, 0, 0, 0, 0)
/* 0x2884 */ DEFINE_SFX(NA_SE_EV_TRE_BOX_FLASH, 0x30, 0, 0, 0, 0)
/* 0x2885 */ DEFINE_SFX(NA_SE_EV_WINDMILL_LEVEL, 0x60, 4, 0, 0, 0)
/* 0x2886 */ DEFINE_SFX(NA_SE_EV_GOTO_HEAVEN, 0x30, 0, 0, 0, SFX_FLAG_11)
/* 0x2887 */ DEFINE_SFX(NA_SE_EV_POT_BROKEN, 0x30, 0, 1, 0, 0)
/* 0x2888 */ DEFINE_SFX(NA_SE_PL_PUT_DOWN_POT, 0x30, 0, 0, 0, 0)
/* 0x2889 */ DEFINE_SFX(NA_SE_EV_DIVE_INTO_WATER, 0x60, 0, 0, 0, 0)
/* 0x288A */ DEFINE_SFX(NA_SE_EV_JUMP_OUT_WATER, 0x60, 0, 0, 0, 0)
/* 0x288B */ DEFINE_SFX(NA_SE_EV_ICE_PIECE, 0x30, 0, 0, 0, 0)
/* 0x288C */ DEFINE_SFX(NA_SE_EV_TRIFORCE, 0x30, 0, 0, 0, 0)
/* 0x288D */ DEFINE_SFX(NA_SE_EV_AURORA, 0x30, 0, 0, 0, 0)
/* 0x288E */ DEFINE_SFX(NA_SE_EV_CHIBI_FAIRY_SAVED, 0x60, 3, 0, 0, 0)
/* 0x288F */ DEFINE_SFX(NA_SE_EV_BUYOSTAND_RISING, 0x30, 3, 0, 0, 0)
/* 0x2890 */ DEFINE_SFX(NA_SE_EV_BUYOSTAND_FALL, 0x30, 3, 0, 0, 0)
/* 0x2891 */ DEFINE_SFX(NA_SE_EV_MILK_POT_BROKEN, 0x80, 0, 0, 0, 0)
/* 0x2892 */ DEFINE_SFX(NA_SE_EV_CHAIR_ROLL, 0x30, 0, 0, 0, SFX_FLAG_13)
/* 0x2893 */ DEFINE_SFX(NA_SE_EV_STONEDOOR_STOP, 0x30, 3, 0, 0, 0)
/* 0x2894 */ DEFINE_SFX(NA_SE_EV_S_STONE_REVIVAL, 0x30, 0, 0, 0, 0)
/* 0x2895 */ DEFINE_SFX(NA_SE_EV_WATER_TANK, 0x30, 0, 0, 0, 0)
/* 0x2896 */ DEFINE_SFX(NA_SE_EV_HUMAN_BOUND, 0x30, 0, 2, 0, 0)
/* 0x2897 */ DEFINE_SFX(NA_SE_EV_TOILET_WATER, 0x30, 0, 0, 0, 0)
/* 0x2898 */ DEFINE_SFX(NA_SE_EV_EARTHQUAKE, 0x30, 0, 0, 0, 0)
/* 0x2899 */ DEFINE_SFX(NA_SE_EV_SWEEP, 0x30, 0, 0, 0, 0)
/* 0x289A */ DEFINE_SFX(NA_SE_EV_GOD_LIGHTBALL_2, 0x30, 0, 0, 0, 0)
/* 0x289B */ DEFINE_SFX(NA_SE_EV_RUN_AROUND, 0x30, 0, 0, 0, 0)
/* 0x289C */ DEFINE_SFX(NA_SE_EV_CONSENTRATION, 0x30, 0, 0, 0, SFX_FLAG_11)
/* 0x289D */ DEFINE_SFX(NA_SE_EV_TIMETRIP_LIGHT, 0x30, 0, 0, 0, SFX_FLAG_11)
/* 0x289E */ DEFINE_SFX(NA_SE_EV_DOOR_BELL, 0x30, 2, 0, 0, 0)
/* 0x289F */ DEFINE_SFX(NA_SE_EV_BOUND_ON_MAGMA, 0x30, 3, 0, 0, 0)
/* 0x28A0 */ DEFINE_SFX(NA_SE_EV_HONEYCOMB_FALL, 0x30, 0, 0, 0, 0)
/* 0x28A1 */ DEFINE_SFX(NA_SE_EV_JUMP_CONC, 0x30, 0, 0, 0, 0)
/* 0x28A2 */ DEFINE_SFX(NA_SE_EV_ICE_MELT, 0x30, 0, 0, 0, 0)
/* 0x28A3 */ DEFINE_SFX(NA_SE_EV_FIRE_PILLAR_S, 0x30, 0, 0, 0, 0)
/* 0x28A4 */ DEFINE_SFX(NA_SE_EV_BLOCK_RISING, 0x20, 3, 0, 0, 0)
/* 0x28A5 */ DEFINE_SFX(NA_SE_EV_CHINCLE_SPELL_EFFECT, 0x30, 0, 0, 0, 0)
/* 0x28A6 */ DEFINE_SFX(NA_SE_EV_LINK_WARP_IN, 0x30, 0, 0, 0, SFX_FLAG_15)
/* 0x28A7 */ DEFINE_SFX(NA_SE_EV_LINK_WARP_OUT, 0x30, 0, 0, 0, 0)
/* 0x28A8 */ DEFINE_SFX(NA_SE_EV_FIATY_HEAL, 0x30, 0, 0, 0, 0)
/* 0x28A9 */ DEFINE_SFX(NA_SE_EV_CHAIN_KEY_UNLOCK_B, 0x30, 0, 0, 0, 0)
/* 0x28AA */ DEFINE_SFX(NA_SE_EV_WOODBOX_BREAK, 0x70, 2, 0, 0, 0)
/* 0x28AB */ DEFINE_SFX(NA_SE_EV_PUT_DOWN_WOODBOX, 0x30, 0, 0, 0, 0)
/* 0x28AC */ DEFINE_SFX(NA_SE_EV_LAND_DIRT, 0x30, 0, 0, 0, 0)
/* 0x28AD */ DEFINE_SFX(NA_SE_EV_FLOOR_ROLLING, 0x30, 0, 0, 0, 0)
/* 0x28AE */ DEFINE_SFX(NA_SE_EV_DOG_CRY_EVENING, 0x50, 0, 0, 0, 0)
/* 0x28AF */ DEFINE_SFX(NA_SE_EV_JABJAB_HICCUP, 0x30, 0, 0, 0, 0)
/* 0x28B0 */ DEFINE_SFX(NA_SE_EV_STICK_SWING, 0x30, 0, 0, 0, 0)
/* 0x28B1 */ DEFINE_SFX(NA_SE_EV_FROG_JUMP, 0x30, 0, 0, 0, 0)
/* 0x28B2 */ DEFINE_SFX(NA_SE_EV_ICE_FREEZE, 0x30, 3, 0, 0, SFX_FLAG_13)
/* 0x28B3 */ DEFINE_SFX(NA_SE_EV_BURNING, 0x20, 0, 0, 0, 0)
/* 0x28B4 */ DEFINE_SFX(NA_SE_EV_WOODPLATE_BOUND, 0x30, 0, 3, 0, 0)
/* 0x28B5 */ DEFINE_SFX(NA_SE_EV_MOON_CRY, 0x30, 0, 0, 0, SFX_FLAG_13)
/* 0x28B6 */ DEFINE_SFX(NA_SE_EV_JABJAB_GROAN, 0x30, 0, 0, 0, 0)
/* 0x28B7 */ DEFINE_SFX(NA_SE_EV_WAVE_S, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x28B8 */ DEFINE_SFX(NA_SE_EV_BIGBALL_ROLL, 0x30, 0, 0, 0, 0)
/* 0x28B9 */ DEFINE_SFX(NA_SE_EV_ELEVATOR_MOVE3, 0x30, 0, 0, 0, 0)
/* 0x28BA */ DEFINE_SFX(NA_SE_EV_DIAMOND_SWITCH, 0x30, 2, 0, 0, 0)
/* 0x28BB */ DEFINE_SFX(NA_SE_EV_FLAME_OF_FIRE, 0x30, 3, 0, 0, 0)
/* 0x28BC */ DEFINE_SFX(NA_SE_EV_FISH_GROW_UP, 0x30, 2, 0, 0, 0)
/* 0x28BD */ DEFINE_SFX(NA_SE_EV_FLYING_AIR, 0x30, 0, 0, 0, 0)
/* 0x28BE */ DEFINE_SFX(NA_SE_EV_PASS_AIR, 0x30, 0, 0, 0, 0)
/* 0x28BF */ DEFINE_SFX(NA_SE_EV_COME_UP_DEKU_JR, 0x30, 0, 0, 0, 0)
/* 0x28C0 */ DEFINE_SFX(NA_SE_EV_SAND_STORM, 0x30, 0, 0, 0, 0)
/* 0x28C1 */ DEFINE_SFX(NA_SE_EV_BOILED_WATER_S, 0x30, 6, 0, 0, 0)
/* 0x28C2 */ DEFINE_SFX(NA_SE_EV_GRAVE_EXPLOSION, 0xA0, 3, 0, 0, 0)
/* 0x28C3 */ DEFINE_SFX(NA_SE_EV_LURE_MOVE_W, 0x30, 0, 0, 0, 0)
/* 0x28C4 */ DEFINE_SFX(NA_SE_EV_POT_MOVE_START, 0x30, 0, 0, 0, 0)
/* 0x28C5 */ DEFINE_SFX(NA_SE_EV_DIVE_INTO_WATER_L, 0x30, 0, 0, 0, 0)
/* 0x28C6 */ DEFINE_SFX(NA_SE_EV_OUT_OF_WATER_L, 0x30, 0, 0, 0, 0)
/* 0x28C7 */ DEFINE_SFX(NA_SE_EV_BOILED_WATER_L, 0x30, 0, 0, 0, 0)
/* 0x28C8 */ DEFINE_SFX(NA_SE_EV_DIG_UP, 0x30, 0, 0, 0, 0)
/* 0x28C9 */ DEFINE_SFX(NA_SE_EV_WOOD_BOUND, 0x30, 0, 0, 0, 0)
/* 0x28CA */ DEFINE_SFX(NA_SE_EV_WATER_BUBBLE, 0x30, 0, 3, 0, 0)
/* 0x28CB */ DEFINE_SFX(NA_SE_EV_ICE_BROKEN, 0x30, 2, 0, 0, 0)
/* 0x28CC */ DEFINE_SFX(NA_SE_EV_FROG_GROW_UP, 0x30, 2, 0, 0, 0)
/* 0x28CD */ DEFINE_SFX(NA_SE_EV_WATER_CONVECTION, 0x30, 0, 0, 0, 0)
/* 0x28CE */ DEFINE_SFX(NA_SE_EV_GROUND_GATE_OPEN, 0x30, 3, 0, 0, 0)
/* 0x28CF */ DEFINE_SFX(NA_SE_EV_FACE_BREAKDOWN, 0x30, 3, 0, 0, 0)
/* 0x28D0 */ DEFINE_SFX(NA_SE_EV_TOILET_HAND_APPEAR, 0x30, 0, 0, 0, 0)
/* 0x28D1 */ DEFINE_SFX(NA_SE_EV_TOILET_HAND_VANISH, 0x30, 3, 2, 0, SFX_FLAG_14)
/* 0x28D2 */ DEFINE_SFX(NA_SE_EV_ROUND_TRAP_MOVE, 0x30, 0, 0, 0, 0)
/* 0x28D3 */ DEFINE_SFX(NA_SE_EV_HIT_SOUND, 0x30, 0, 0, 0, 0)
/* 0x28D4 */ DEFINE_SFX(NA_SE_EV_ICE_SWING, 0x30, 0, 0, 0, 0)
/* 0x28D5 */ DEFINE_SFX(NA_SE_EV_DOWN_TO_GROUND, 0x30, 0, 0, 0, 0)
/* 0x28D6 */ DEFINE_SFX(NA_SE_EV_BIG_TORTOISE_SWIM, 0x60, 3, 2, 0, 0)
/* 0x28D7 */ DEFINE_SFX(NA_SE_EV_TORTOISE_WAKE_UP, 0x80, 0, 0, 0, SFX_FLAG_13)
/* 0x28D8 */ DEFINE_SFX(NA_SE_EV_SMALL_DOG_BARK, 0x50, 0, 0, 0, 0)
/* 0x28D9 */ DEFINE_SFX(NA_SE_EV_RUPY_FALL, 0x60, 0, 0, 0, 0)
/* 0x28DA */ DEFINE_SFX(NA_SE_EV_RAIN, 0x90, 0, 0, 0, 0)
/* 0x28DB */ DEFINE_SFX(NA_SE_EV_IRON_DOOR_OPEN, 0x30, 0, 0, 0, 0)
/* 0x28DC */ DEFINE_SFX(NA_SE_EV_IRON_DOOR_CLOSE, 0x30, 0, 0, 0, 0)
/* 0x28DD */ DEFINE_SFX(NA_SE_EV_WHIRLPOOL, 0x30, 0, 0, 0, 0)
/* 0x28DE */ DEFINE_SFX(NA_SE_EV_BIG_TORTOISE_ROLL, 0x60, 0, 0, 0, SFX_FLAG_13)
/* 0x28DF */ DEFINE_SFX(NA_SE_EV_COW_CRY, 0x30, 0, 0, 0, 0)
/* 0x28E0 */ DEFINE_SFX(NA_SE_EV_METAL_BOX_BOUND, 0x30, 0, 0, 0, 0)
/* 0x28E1 */ DEFINE_SFX(NA_SE_EV_ELECTRIC_EXPLOSION, 0x30, 3, 0, 0, 0)
/* 0x28E2 */ DEFINE_SFX(NA_SE_EV_HEAVY_THROW, 0x30, 3, 0, 0, 0)
/* 0x28E3 */ DEFINE_SFX(NA_SE_EV_FROG_CRY_0, 0x30, 0, 0, 0, 0)
/* 0x28E4 */ DEFINE_SFX(NA_SE_EV_FROG_CRY_1, 0x30, 0, 0, 0, 0)
/* 0x28E5 */ DEFINE_SFX(NA_SE_EV_COW_CRY_LV, 0x30, 0, 0, 0, 0)
/* 0x28E6 */ DEFINE_SFX(NA_SE_EV_RONRON_DOOR_CLOSE, 0x30, 0, 0, 0, 0)
/* 0x28E7 */ DEFINE_SFX(NA_SE_EV_BUTTERFRY_TO_FAIRY, 0x30, 0, 0, 0, 0)
/* 0x28E8 */ DEFINE_SFX(NA_SE_EV_FIVE_COUNT_LUPY, 0xA0, 0, 0, 0, SFX_FLAG_11)
/* 0x28E9 */ DEFINE_SFX(NA_SE_EV_STONE_GROW_UP, 0x30, 0, 0, 0, 0)
/* 0x28EA */ DEFINE_SFX(NA_SE_EV_STONE_LAUNCH, 0x30, 0, 0, 0, 0)
/* 0x28EB */ DEFINE_SFX(NA_SE_EV_STONE_ROLLING, 0x30, 0, 0, 0, 0)
/* 0x28EC */ DEFINE_SFX(NA_SE_EV_TOGE_STICK_ROLLING, 0x30, 2, 0, 0, 0)
/* 0x28ED */ DEFINE_SFX(NA_SE_EV_TOWER_ENERGY, 0x30, 0, 0, 0, 0)
/* 0x28EE */ DEFINE_SFX(NA_SE_EV_MOON_LIGHT_PILLAR, 0x30, 3, 0, 0, 0)
/* 0x28EF */ DEFINE_SFX(NA_SE_EV_MONKEY_WALK, 0x20, 0, 0, 0, 0)
/* 0x28F0 */ DEFINE_SFX(NA_SE_EV_KNIGHT_WALK, 0x30, 0, 0, 0, 0)
/* 0x28F1 */ DEFINE_SFX(NA_SE_EV_PILLAR_MOVE_STOP, 0x30, 0, 1, 0, 0)
/* 0x28F2 */ DEFINE_SFX(NA_SE_EV_WAVE, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x28F3 */ DEFINE_SFX(NA_SE_EV_BIGBELL, 0x30, 2, 0, 0, 0)
/* 0x28F4 */ DEFINE_SFX(NA_SE_EV_NUTS_BROKEN, 0x30, 0, 0, 0, 0)
/* 0x28F5 */ DEFINE_SFX(NA_SE_EV_SNOWBALL_BROKEN, 0x30, 2, 0, 0, 0)
/* 0x28F6 */ DEFINE_SFX(NA_SE_EV_SMALLBALL_ROLL, 0x30, 5, 0, 0, 0)
/* 0x28F7 */ DEFINE_SFX(NA_SE_EV_FLOWERPETAL_MOVE, 0x30, 0, 0, 0, 0)
/* 0x28F8 */ DEFINE_SFX(NA_SE_EV_FLOWERPETAL_STOP, 0x30, 0, 0, 0, 0)
/* 0x28F9 */ DEFINE_SFX(NA_SE_EV_FLOWER_ROLLING, 0x40, 0, 0, 0, 0)
/* 0x28FA */ DEFINE_SFX(NA_SE_EV_GLASSBROKEN_IMPACT, 0x30, 0, 0, 0, 0)
/* 0x28FB */ DEFINE_SFX(NA_SE_EV_GLASSBROKEN_BOUND, 0x30, 0, 0, 0, 0)
/* 0x28FC */ DEFINE_SFX(NA_SE_EV_BIGBALL_ROLL_SR, 0x30, 5, 0, 0, 0)
/* 0x28FD */ DEFINE_SFX(NA_SE_EV_SMALL_SNOWBALL_BROKEN, 0x30, 2, 3, 0, 0)
/* 0x28FE */ DEFINE_SFX(NA_SE_EV_STATUE_VANISH, 0x30, 0, 0, 0, 0)
/* 0x28FF */ DEFINE_SFX(NA_SE_EV_BIGBALL_BOUND, 0x30, 0, 0, 0, 0)
/* 0x2900 */ DEFINE_SFX(NA_SE_EV_MONKEY_VO_WALK, 0x30, 0, 2, 0, 0)
/* 0x2901 */ DEFINE_SFX(NA_SE_EV_MONKEY_VO_JOY, 0x30, 0, 2, 0, 0)
/* 0x2902 */ DEFINE_SFX(NA_SE_EV_WALK_WATER, 0x30, 0, 0, 0, 0)
/* 0x2903 */ DEFINE_SFX(NA_SE_EV_PLATE_LIFT_LEVEL, 0x30, 2, 0, 0, 0)
/* 0x2904 */ DEFINE_SFX(NA_SE_EV_BIGBALL_ROLL_2, 0x30, 0, 0, 0, 0)
/* 0x2905 */ DEFINE_SFX(NA_SE_EV_BIGBALL_ROLL_SR_2, 0x30, 0, 0, 0, 0)
/* 0x2906 */ DEFINE_SFX(NA_SE_EV_BIGBALL_ROLL_3, 0x30, 0, 0, 0, 0)
/* 0x2907 */ DEFINE_SFX(NA_SE_EV_BIGBALL_ROLL_SR_3, 0x30, 0, 0, 0, 0)
/* 0x2908 */ DEFINE_SFX(NA_SE_EV_BEAVER_SWIM_MOTOR, 0x68, 2, 0, 0, 0)
/* 0x2909 */ DEFINE_SFX(NA_SE_EV_BEAVER_SWIM_HAND, 0x30, 2, 0, 0, 0)
/* 0x290A */ DEFINE_SFX(NA_SE_EV_SMALL_DOG_CRY, 0x30, 0, 1, 0, SFX_FLAG_14)
/* 0x290B */ DEFINE_SFX(NA_SE_EV_SMALL_DOG_GROAN, 0x30, 0, 0, 0, 0)
/* 0x290C */ DEFINE_SFX(NA_SE_EV_SMALL_DOG_ATK_BARK, 0x30, 0, 0, 0, 0)
/* 0x290D */ DEFINE_SFX(NA_SE_EV_ICE_PILLAR_RISING, 0x30, 2, 0, 0, 0)
/* 0x290E */ DEFINE_SFX(NA_SE_EV_ICE_PILLAR_FALL, 0x30, 2, 0, 0, 0)
/* 0x290F */ DEFINE_SFX(NA_SE_EV_GORON_CHEER, 0x30, 3, 0, 0, 0)
/* 0x2910 */ DEFINE_SFX(NA_SE_EV_SMALL_DOG_ANG_BARK, 0x30, 0, 0, 0, 0)
/* 0x2911 */ DEFINE_SFX(NA_SE_EV_COMICAL_JUMP, 0x30, 0, 0, 0, 0)
/* 0x2912 */ DEFINE_SFX(NA_SE_EV_LIGHTNING_HARD, 0x30, 0, 0, 0, 0)
/* 0x2913 */ DEFINE_SFX(NA_SE_EV_SMALL_DOG_WHINE, 0x30, 0, 3, 0, 0)
/* 0x2914 */ DEFINE_SFX(NA_SE_EV_PANIC_IN_HOUSE, 0x80, 0, 0, 0, 0)
/* 0x2915 */ DEFINE_SFX(NA_SE_EV_CLOCK_TOWER_BELL, 0x30, 0, 0, 0, 0)
/* 0x2916 */ DEFINE_SFX(NA_SE_EV_CLOCK_TOWER_SECOND_HAND, 0x30, 2, 0, 0, 0)
/* 0x2917 */ DEFINE_SFX(NA_SE_EV_SIGNAL_BIGBELL, 0xA0, 3, 0, 0, SFX_FLAG_15 | SFX_FLAG_13)
/* 0x2918 */ DEFINE_SFX(NA_SE_EV_DUMMY_280, 0x30, 0, 0, 0, 0)
/* 0x2919 */ DEFINE_SFX(NA_SE_EV_BEAVER_VOICE_0, 0x30, 0, 0, 0, 0)
/* 0x291A */ DEFINE_SFX(NA_SE_EV_BEAVER_VOICE_1, 0x30, 0, 0, 0, 0)
/* 0x291B */ DEFINE_SFX(NA_SE_EV_WATERWHEEL_LEVEL, 0x30, 0, 2, 0, 0)
/* 0x291C */ DEFINE_SFX(NA_SE_EV_WOOD_GATE_OPEN_N, 0x30, 0, 0, 0, 0)
/* 0x291D */ DEFINE_SFX(NA_SE_EV_INVISIBLE_MONKEY, 0x30, 5, 2, 0, 0)
/* 0x291E */ DEFINE_SFX(NA_SE_EV_CRUISER, 0x30, 0, 1, 0, 0)
/* 0x291F */ DEFINE_SFX(NA_SE_EV_SECRET_CHEER, 0x30, 0, 0, 0, 0)
/* 0x2920 */ DEFINE_SFX(NA_SE_EV_BOTTLE_WATERING, 0x30, 0, 0, 0, 0)
/* 0x2921 */ DEFINE_SFX(NA_SE_EV_MONKEY_VO_SADNESS, 0x30, 0, 0, 0, 0)
/* 0x2922 */ DEFINE_SFX(NA_SE_EV_SNOWSTORM_HARD, 0x60, 0, 0, 0, SFX_FLAG_13)
/* 0x2923 */ DEFINE_SFX(NA_SE_EV_UNSKILLFUL_OCARINA, 0x30, 0, 0, 0, 0)
/* 0x2924 */ DEFINE_SFX(NA_SE_EV_BLACK_FAIRY_DASH, 0x30, 0, 1, 0, 0)
/* 0x2925 */ DEFINE_SFX(NA_SE_EV_FAIRY_SURPRISE, 0x30, 0, 0, 0, 0)
/* 0x2926 */ DEFINE_SFX(NA_SE_EV_MONDO_SURPRISE, 0x30, 0, 0, 0, 0)
/* 0x2927 */ DEFINE_SFX(NA_SE_EV_SPOT_LIGHT_OPEN, 0x30, 0, 0, 0, SFX_FLAG_13)
/* 0x2928 */ DEFINE_SFX(NA_SE_EV_HOUSE_BROKEN, 0x30, 2, 0, 0, 0)
/* 0x2929 */ DEFINE_SFX(NA_SE_EV_MOON_FALL, 0x30, 3, 0, 0, 0)
/* 0x292A */ DEFINE_SFX(NA_SE_EV_OCARINA_BOUND_0, 0x30, 0, 0, 0, 0)
/* 0x292B */ DEFINE_SFX(NA_SE_EV_OCARINA_BOUND_1, 0x30, 0, 1, 0, 0)
/* 0x292C */ DEFINE_SFX(NA_SE_EV_BOMBERS_WALK, 0x30, 0, 1, 0, 0)
/* 0x292D */ DEFINE_SFX(NA_SE_EV_BOMBERS_LAND, 0x30, 0, 2, 0, 0)
/* 0x292E */ DEFINE_SFX(NA_SE_EV_BOMBERS_SHOT_BREATH, 0x30, 0, 0, 0, 0)
/* 0x292F */ DEFINE_SFX(NA_SE_EV_BOMBERS_SHOT_EXPLOSUIN, 0x30, 0, 0, 0, 0)
/* 0x2930 */ DEFINE_SFX(NA_SE_EV_BOMBERS_JUMP, 0x30, 0, 0, 0, 0)
/* 0x2931 */ DEFINE_SFX(NA_SE_EV_SOLDIER_WALK, 0x30, 0, 3, 0, 0)
/* 0x2932 */ DEFINE_SFX(NA_SE_EV_ROCK_CUBE_RISING, 0x30, 0, 0, 0, 0)
/* 0x2933 */ DEFINE_SFX(NA_SE_EV_ROCK_CUBE_FALL, 0x30, 0, 0, 0, 0)
/* 0x2934 */ DEFINE_SFX(NA_SE_EV_BELL_SPIT, 0x30, 0, 0, 0, 0)
/* 0x2935 */ DEFINE_SFX(NA_SE_EV_BELL_SIGH, 0x30, 0, 0, 0, 0)
/* 0x2936 */ DEFINE_SFX(NA_SE_EV_BELL_BRAKE, 0x30, 0, 0, 0, 0)
/* 0x2937 */ DEFINE_SFX(NA_SE_EV_DOG_SWIM, 0x30, 0, 0, 0, 0)
/* 0x2938 */ DEFINE_SFX(NA_SE_EV_CHIBI_FAIRY_HEAL_ORG, 0x80, 0, 0, 0, 0)
/* 0x2939 */ DEFINE_SFX(NA_SE_EV_BOMBERS_CLIMB, 0x30, 0, 0, 0, 0)
/* 0x293A */ DEFINE_SFX(NA_SE_EV_WOODPLATE_BROKEN, 0x30, 3, 1, 0, 0)
/* 0x293B */ DEFINE_SFX(NA_SE_EV_WATER_LEVEL_DOWN_FIX, 0x30, 0, 0, 0, SFX_FLAG_13)
/* 0x293C */ DEFINE_SFX(NA_SE_EV_HONEYCOMB_BROKEN, 0x30, 0, 0, 0, 0)
/* 0x293D */ DEFINE_SFX(NA_SE_EV_CLOCK_TOWER_UP, 0x30, 3, 0, 0, 0)
/* 0x293E */ DEFINE_SFX(NA_SE_EV_CLOCK_TOWER_STOP, 0x30, 3, 0, 0, 0)
/* 0x293F */ DEFINE_SFX(NA_SE_EV_CLOCK_TOWER_FALL, 0x30, 3, 0, 0, 0)
/* 0x2940 */ DEFINE_SFX(NA_SE_EV_CLOCK_TOWER_BOUND_0, 0x30, 3, 0, 0, 0)
/* 0x2941 */ DEFINE_SFX(NA_SE_EV_CLOCK_TOWER_BOUND_1, 0x30, 3, 0, 0, 0)
/* 0x2942 */ DEFINE_SFX(NA_SE_EV_CLOCK_TOWER_BOUND_2, 0x30, 3, 0, 0, 0)
/* 0x2943 */ DEFINE_SFX(NA_SE_EV_STONEDOOR_OPEN_S, 0x30, 0, 0, 0, 0)
/* 0x2944 */ DEFINE_SFX(NA_SE_EV_ICE_MELT_LEVEL, 0x30, 0, 0, 0, 0)
/* 0x2945 */ DEFINE_SFX(NA_SE_EV_CLOCK_TOWER_STAIR_MOVE, 0x30, 3, 0, 0, 0)
/* 0x2946 */ DEFINE_SFX(NA_SE_EV_DUMMY_326, 0xA0, 0, 0, 0, SFX_FLAG_14)
/* 0x2947 */ DEFINE_SFX(NA_SE_EV_OBJECT_STICK, 0x30, 3, 1, 0, 0)
/* 0x2948 */ DEFINE_SFX(NA_SE_EV_CHICK_TO_CHICKEN, 0x30, 0, 1, 0, 0)
/* 0x2949 */ DEFINE_SFX(NA_SE_EV_MUJURA_BALLOON_BROKEN, 0x60, 2, 0, 0, 0)
/* 0x294A */ DEFINE_SFX(NA_SE_EV_BALLOON_SWELL, 0x30, 0, 0, 0, 0)
/* 0x294B */ DEFINE_SFX(NA_SE_EV_SEAHORSE_OUT_BOTTLE, 0x30, 0, 0, 0, 0)
/* 0x294C */ DEFINE_SFX(NA_SE_EV_KYOJIN_VOICE_SUCCESS, 0x30, 0, 2, 0, SFX_FLAG_13)
/* 0x294D */ DEFINE_SFX(NA_SE_EV_KYOJIN_VOICE_FAIL, 0x30, 0, 2, 0, SFX_FLAG_13)
/* 0x294E */ DEFINE_SFX(NA_SE_EV_KYOJIN_WALK, 0x30, 0, 0, 0, SFX_FLAG_13)
/* 0x294F */ DEFINE_SFX(NA_SE_EV_MOON_FALL_LAST, 0x30, 0, 0, 0, 0)
/* 0x2950 */ DEFINE_SFX(NA_SE_EV_EARTHQUAKE_LAST, 0x30, 0, 0, 0, SFX_FLAG_13)
/* 0x2951 */ DEFINE_SFX(NA_SE_EV_SEAHORSE_SWIM, 0x30, 0, 0, 0, 0)
/* 0x2952 */ DEFINE_SFX(NA_SE_EV_OPEN_AMBRELLA, 0x30, 0, 0, 0, 0)
/* 0x2953 */ DEFINE_SFX(NA_SE_EV_BUTLER_FRY, 0x60, 0, 0, 0, 0)
/* 0x2954 */ DEFINE_SFX(NA_SE_EV_PIRATE_SHIP, 0x30, 2, 0, 0, 0)
/* 0x2955 */ DEFINE_SFX(NA_SE_EV_DRAIN, 0x30, 0, 0, 0, 0)
/* 0x2956 */ DEFINE_SFX(NA_SE_EV_DORA_L, 0x30, 2, 0, 0, 0)
/* 0x2957 */ DEFINE_SFX(NA_SE_EV_LOG_BOUND, 0x30, 0, 2, 0, 0)
/* 0x2958 */ DEFINE_SFX(NA_SE_EV_CART_WHEEL, 0x60, 2, 1, 0, 0)
/* 0x2959 */ DEFINE_SFX(NA_SE_EV_EARTHQUAKE_LAST2, 0x30, 0, 0, 0, SFX_FLAG_13)
/* 0x295A */ DEFINE_SFX(NA_SE_EV_DORA_S, 0x30, 0, 0, 0, 0)
/* 0x295B */ DEFINE_SFX(NA_SE_EV_ROCK_FALL, 0x30, 0, 0, 0, 0)
/* 0x295C */ DEFINE_SFX(NA_SE_EV_FREEZE_S, 0x30, 0, 0, 0, 0)
/* 0x295D */ DEFINE_SFX(NA_SE_EV_WOOD_BOUND_S, 0x30, 0, 0, 0, 0)
/* 0x295E */ DEFINE_SFX(NA_SE_EV_CLOSE_AMBRELLA, 0x30, 0, 0, 0, 0)
/* 0x295F */ DEFINE_SFX(NA_SE_EV_OBJECT_SLIDE, 0x30, 0, 0, 0, 0)
/* 0x2960 */ DEFINE_SFX(NA_SE_EV_ROLL_AND_FALL, 0x30, 0, 0, 0, SFX_FLAG_13)
/* 0x2961 */ DEFINE_SFX(NA_SE_EV_GORON_BOUND_0, 0x30, 0, 0, 0, SFX_FLAG_13)
/* 0x2962 */ DEFINE_SFX(NA_SE_EV_GORON_BOUND_1, 0x30, 0, 0, 0, SFX_FLAG_13)
/* 0x2963 */ DEFINE_SFX(NA_SE_EV_MONKEY_VO_DAMAGE, 0x30, 0, 0, 0, 0)
/* 0x2964 */ DEFINE_SFX(NA_SE_EV_FORT_RISING, 0x30, 0, 0, 0, SFX_FLAG_13)
/* 0x2965 */ DEFINE_SFX(NA_SE_EV_MONKEY_VO_REWARD, 0x30, 0, 0, 0, 0)
/* 0x2966 */ DEFINE_SFX(NA_SE_EV_WATER_PURIFICATION, 0x30, 0, 0, 0, SFX_FLAG_13)
/* 0x2967 */ DEFINE_SFX(NA_SE_EV_OWL_WARP_SWITCH_ON, 0x80, 0, 0, 0, 0)
/* 0x2968 */ DEFINE_SFX(NA_SE_EV_BIG_WATER_WHEEL_RR, 0x80, 3, 0, 0, 0)
/* 0x2969 */ DEFINE_SFX(NA_SE_EV_BIG_WATER_WHEEL_LR, 0x80, 3, 0, 0, 0)
/* 0x296A */ DEFINE_SFX(NA_SE_EV_SMALL_WATER_WHEEL, 0x30, 3, 0, 0, 0)
/* 0x296B */ DEFINE_SFX(NA_SE_EV_COCK_SWITCH_ROLL, 0x80, 2, 0, 0, 0)
/* 0x296C */ DEFINE_SFX(NA_SE_EV_COCK_SWITCH_STOP, 0x80, 2, 0, 0, 0)
/* 0x296D */ DEFINE_SFX(NA_SE_EV_PIPE_STREAM_START, 0x30, 0, 0, 0, 0)
/* 0x296E */ DEFINE_SFX(NA_SE_EV_WATER_PILLAR, 0x60, 0, 0, 0, 0)
/* 0x296F */ DEFINE_SFX(NA_SE_EV_SEESAW_INCLINE, 0x30, 0, 0, 0, 0)
/* 0x2970 */ DEFINE_SFX(NA_SE_EV_ZORA_WALK, 0x30, 2, 1, 0, 0)
/* 0x2971 */ DEFINE_SFX(NA_SE_EV_PIRATE_WALK, 0x30, 2, 1, 0, 0)
/* 0x2972 */ DEFINE_SFX(NA_SE_EV_PILLAR_UP_FAST, 0x30, 3, 1, 0, 0)
/* 0x2973 */ DEFINE_SFX(NA_SE_EV_DUMMY_WATER_WHEEL_RR, 0x60, 0, 0, SFX_FLAG2_7, SFX_FLAG_13)
/* 0x2974 */ DEFINE_SFX(NA_SE_EV_DUMMY_WATER_WHEEL_LR, 0x60, 0, 0, SFX_FLAG2_7, SFX_FLAG_13)
/* 0x2975 */ DEFINE_SFX(NA_SE_EV_MUJURA_FOLLOWERS_FLY, 0x30, 0, 0, 0, 0)
/* 0x2976 */ DEFINE_SFX(NA_SE_EV_MAKE_TURRET, 0x30, 0, 0, 0, 0)
/* 0x2977 */ DEFINE_SFX(NA_SE_EV_CHANDELIER_ROLL, 0x30, 3, 0, 0, 0)
/* 0x2978 */ DEFINE_SFX(NA_SE_EV_CHANDELIER_BROKEN, 0x30, 0, 0, 0, 0)
/* 0x2979 */ DEFINE_SFX(NA_SE_EV_SINK_WOOD_FLOOR, 0x30, 0, 0, 0, 0)
/* 0x297A */ DEFINE_SFX(NA_SE_EV_REBOUND_WOOD_FLOOR, 0x30, 0, 0, 0, 0)
/* 0x297B */ DEFINE_SFX(NA_SE_EV_UFO_APPEAR, 0x30, 3, 0, 0, 0)
/* 0x297C */ DEFINE_SFX(NA_SE_EV_UFO_DASH, 0x30, 0, 0, 0, SFX_FLAG_13)
/* 0x297D */ DEFINE_SFX(NA_SE_EV_TORNADE, 0x80, 0, 0, 0, SFX_FLAG_13)
/* 0x297E */ DEFINE_SFX(NA_SE_EV_MILK_POT_DAMAGE, 0x80, 3, 0, 0, 0)
/* 0x297F */ DEFINE_SFX(NA_SE_EV_DUMMY_383, 0x30, 0, 0, 0, 0)
/* 0x2980 */ DEFINE_SFX(NA_SE_EV_KYOJIN_SIGN, 0x30, 0, 0, 0, SFX_FLAG_13)
/* 0x2981 */ DEFINE_SFX(NA_SE_EV_KYOJIN_GRATITUDE0, 0x30, 0, 0, 0, SFX_FLAG_13)
/* 0x2982 */ DEFINE_SFX(NA_SE_EV_KYOJIN_GRATITUDE1, 0x30, 0, 0, 0, SFX_FLAG_13)
/* 0x2983 */ DEFINE_SFX(NA_SE_EV_KYOJIN_GRATITUDE2, 0x30, 0, 0, 0, SFX_FLAG_13)
/* 0x2984 */ DEFINE_SFX(NA_SE_EV_IKANA_DOOR_OPEN, 0x30, 0, 0, 0, 0)
/* 0x2985 */ DEFINE_SFX(NA_SE_EV_IKANA_DOOR_CLOSE, 0x30, 0, 0, 0, 0)
/* 0x2986 */ DEFINE_SFX(NA_SE_EV_MOONSTONE_FALL, 0x80, 3, 0, 0, 0)
/* 0x2987 */ DEFINE_SFX(NA_SE_EV_COMING_FIRE, 0x30, 0, 0, 0, SFX_FLAG_13)
/* 0x2988 */ DEFINE_SFX(NA_SE_EV_FAIRY_GROUP_FRY, 0x30, 0, 0, 0, 0)
/* 0x2989 */ DEFINE_SFX(NA_SE_EV_FAIRY_GROUP_HEAL, 0x30, 0, 0, 0, 0)
/* 0x298A */ DEFINE_SFX(NA_SE_EV_WOOD_DOOR_OPEN_SPEEDY, 0x30, 0, 0, 0, 0)
/* 0x298B */ DEFINE_SFX(NA_SE_EV_PAMERA_WALK, 0x30, 0, 0, 0, 0)
/* 0x298C */ DEFINE_SFX(NA_SE_EV_G_STONE_CHANGE_COLOR, 0x30, 0, 0, 0, 0)
/* 0x298D */ DEFINE_SFX(NA_SE_EV_CURTAIN_DOWN, 0x30, 0, 0, 0, 0)
/* 0x298E */ DEFINE_SFX(NA_SE_EV_GORON_HAND_HIT, 0x30, 3, 0, 0, 0)
/* 0x298F */ DEFINE_SFX(NA_SE_EV_SMALL_WOODPLATE_BOUND_0, 0x30, 3, 1, 0, 0)
/* 0x2990 */ DEFINE_SFX(NA_SE_EV_GET_UP_ON_BED, 0x30, 3, 0, 0, 0)
/* 0x2991 */ DEFINE_SFX(NA_SE_EV_LIE_DOWN_ON_BED, 0x30, 3, 0, 0, 0)
/* 0x2992 */ DEFINE_SFX(NA_SE_EV_BANK_MAN_HAND_HIT, 0x30, 0, 0, 0, 0)
/* 0x2993 */ DEFINE_SFX(NA_SE_EV_HANKO, 0x30, 0, 0, 0, SFX_FLAG_13)
/* 0x2994 */ DEFINE_SFX(NA_SE_EV_CHICK_SONG, 0x10, 7, 0, 0, 0)
/* 0x2995 */ DEFINE_SFX(NA_SE_EV_LAND_SAND, 0x30, 0, 0, 0, 0)
/* 0x2996 */ DEFINE_SFX(NA_SE_EV_JUMP_SAND, 0x30, 0, 0, 0, 0)
/* 0x2997 */ DEFINE_SFX(NA_SE_EV_SECRET_LADDER_APPEAR, 0x30, 0, 0, 0, 0)
/* 0x2998 */ DEFINE_SFX(NA_SE_EV_CLAPPING_2P, 0x30, 0, 0, 0, 0)
/* 0x2999 */ DEFINE_SFX(NA_SE_EV_DIVE_INTO_WEED, 0x30, 0, 0, 0, 0)
/* 0x299A */ DEFINE_SFX(NA_SE_EV_FAIRY_SHIVER, 0x30, 0, 0, 0, 0)
/* 0x299B */ DEFINE_SFX(NA_SE_EV_MASK_RISING, 0x30, 0, 0, 0, 0)
/* 0x299C */ DEFINE_SFX(NA_SE_EV_MOON_EYE_FLASH, 0x30, 0, 0, 0, SFX_FLAG_13)
/* 0x299D */ DEFINE_SFX(NA_SE_EV_SLIP_MOON, 0x30, 0, 0, 0, SFX_FLAG_13)
/* 0x299E */ DEFINE_SFX(NA_SE_EV_FALL_POWER, 0x30, 0, 0, 0, SFX_FLAG_13)
/* 0x299F */ DEFINE_SFX(NA_SE_EV_BELL_DASH_NORMAL, 0x58, 0, 1, 0, SFX_FLAG_5)
/* 0x29A0 */ DEFINE_SFX(NA_SE_EV_IKANA_BLOCK_MOVE_X, 0x60, 3, 0, 0, 0)
/* 0x29A1 */ DEFINE_SFX(NA_SE_EV_IKANA_BLOCK_MOVE_Z, 0x60, 3, 0, 0, 0)
/* 0x29A2 */ DEFINE_SFX(NA_SE_EV_IKANA_BLOCK_MOVE_Y, 0x60, 3, 0, 0, 0)
/* 0x29A3 */ DEFINE_SFX(NA_SE_EV_IKANA_BLOCK_STOP_C, 0x70, 3, 0, 0, 0)
/* 0x29A4 */ DEFINE_SFX(NA_SE_EV_IKANA_BLOCK_STOP_F, 0x70, 3, 0, 0, 0)
/* 0x29A5 */ DEFINE_SFX(NA_SE_EV_BELL_ANGER, 0x30, 0, 0, 0, 0)
/* 0x29A6 */ DEFINE_SFX(NA_SE_EV_IKANA_BLOCK_SWITCH, 0x70, 3, 0, 0, 0)
/* 0x29A7 */ DEFINE_SFX(NA_SE_EV_BAT_FLY, 0x30, 4, 0, 0, 0)
/* 0x29A8 */ DEFINE_SFX(NA_SE_EV_UFO_LIGHT_BEAM, 0x30, 3, 0, 0, 0)
/* 0x29A9 */ DEFINE_SFX(NA_SE_EV_DOOR_UNLOCK, 0x30, 0, 0, 0, 0)
/* 0x29AA */ DEFINE_SFX(NA_SE_EV_WOOD_WATER_WHEEL, 0x30, 0, 0, 0, 0)
/* 0x29AB */ DEFINE_SFX(NA_SE_EV_CONVEYOR_SHUTTER_OPEN, 0x60, 0, 0, 0, 0)
/* 0x29AC */ DEFINE_SFX(NA_SE_EV_CONVEYOR_SHUTTER_CLOSE, 0x60, 0, 0, 0, 0)
/* 0x29AD */ DEFINE_SFX(NA_SE_EV_ROOM_CARTAIN, 0x30, 0, 0, 0, 0)
/* 0x29AE */ DEFINE_SFX(NA_SE_EV_ZORA_KIDS_BORN, 0x30, 0, 0, SFX_FLAG2_7, 0)
/* 0x29AF */ DEFINE_SFX(NA_SE_EV_ZORA_KIDS_SWIM_0, 0x30, 0, 1, SFX_FLAG2_7, 0)
/* 0x29B0 */ DEFINE_SFX(NA_SE_EV_ZORA_KIDS_SWIM_1, 0x30, 0, 1, SFX_FLAG2_7, 0)
/* 0x29B1 */ DEFINE_SFX(NA_SE_EV_MOON_EXPLOSION, 0x60, 0, 0, 0, SFX_FLAG_13)
/* 0x29B2 */ DEFINE_SFX(NA_SE_EV_RAINBOW, 0x70, 0, 0, 0, SFX_FLAG_13)
/* 0x29B3 */ DEFINE_SFX(NA_SE_EV_OMENYA_WALK, 0x30, 0, 2, 0, 0)
/* 0x29B4 */ DEFINE_SFX(NA_SE_EV_KYOJIN_GROAN, 0x30, 0, 0, 0, SFX_FLAG_13)
/* 0x29B5 */ DEFINE_SFX(NA_SE_EV_UFO_FLY, 0x30, 3, 0, 0, 0)
/* 0x29B6 */ DEFINE_SFX(NA_SE_EV_GRASS_WALL_BROKEN, 0x30, 0, 0, 0, 0)
/* 0x29B7 */ DEFINE_SFX(NA_SE_EV_WARP_HOLE_ENERGY, 0x60, 3, 0, 0, 0)
/* 0x29B8 */ DEFINE_SFX(NA_SE_EV_BOSS_WARP_HOLE, 0x70, 0, 0, 0, 0)
/* 0x29B9 */ DEFINE_SFX(NA_SE_EV_FIREWORKS_LAUNCH, 0x30, 0, 0, 0, 0)
/* 0x29BA */ DEFINE_SFX(NA_SE_EV_IKANA_SOUL_LV, 0x30, 0, 0, 0, 0)
/* 0x29BB */ DEFINE_SFX(NA_SE_EV_IKANA_PURIFICATION, 0x30, 0, 0, 0, 0)
/* 0x29BC */ DEFINE_SFX(NA_SE_EV_ZORA_KIDS_SWIM_2, 0x30, 0, 0, 0, 0)
/* 0x29BD */ DEFINE_SFX(NA_SE_EV_DARUMA_VANISH, 0x30, 0, 0, 0, 0)
/* 0x29BE */ DEFINE_SFX(NA_SE_EV_IKANA_SOUL_TRANSFORM, 0x30, 0, 0, 0, 0)
/* 0x29BF */ DEFINE_SFX(NA_SE_EV_ROMANI_BOW_FLICK, 0x40, 0, 0, 0, 0)
/* 0x29C0 */ DEFINE_SFX(NA_SE_EV_WHITE_FAIRY_SHOT_DASH, 0x58, 0, 1, 0, 0)
/* 0x29C1 */ DEFINE_SFX(NA_SE_EV_BLACK_FAIRY_SHOT_DASH, 0x58, 0, 1, 0, 0)
/* 0x29C2 */ DEFINE_SFX(NA_SE_EV_SWORD_FORGE, 0x30, 0, 1, 0, 0)
/* 0x29C3 */ DEFINE_SFX(NA_SE_EV_STONEDOOR_CLOSE_S, 0x30, 1, 1, 0, 0)
/* 0x29C4 */ DEFINE_SFX(NA_SE_EV_BOTTLE_CAP_CLOSE, 0x30, 0, 0, 0, 0)
/* 0x29C5 */ DEFINE_SFX(NA_SE_EV_PAMET_ROCK_CRASH, 0x30, 0, 0, 0, 0)
/* 0x29C6 */ DEFINE_SFX(NA_SE_EV_GUILLOTINE_UP, 0x30, 0, 0, 0, 0)
/* 0x29C7 */ DEFINE_SFX(NA_SE_EV_ROCK_BROKEN2, 0x30, 0, 0, 0, 0)
/* 0x29C8 */ DEFINE_SFX(NA_SE_EV_OBJECT_STICK2, 0x30, 0, 0, 0, 0)
/* 0x29C9 */ DEFINE_SFX(NA_SE_EV_WOODBOX_BOUND2, 0x30, 0, 0, 0, 0)
/* 0x29CA */ DEFINE_SFX(NA_SE_EV_DEMO_KID_ATOZUSARI, 0x30, 0, 0, 0, 0)
/* 0x29CB */ DEFINE_SFX(NA_SE_EV_UNDER_WATER, 0x30, 0, 0, 0, 0)
/* 0x29CC */ DEFINE_SFX(NA_SE_EV_FREEZE2, 0x30, 0, 0, 0, 0)
/* 0x29CD */ DEFINE_SFX(NA_SE_EV_DEMO_KID_SAGURU, 0x30, 0, 0, 0, 0)
/* 0x29CE */ DEFINE_SFX(NA_SE_EV_WATER_WALL3, 0x30, 0, 0, 0, 0)
/* 0x29CF */ DEFINE_SFX(NA_SE_EV_BOMBERS_TAORE, 0x30, 0, 0, 0, 0)
+125
View File
@@ -0,0 +1,125 @@
/**
* Sfx Item Bank
*
* DEFINE_SFX should be used for all sfx define in the item bank from sequence 0
* - Argument 0: Enum value for this sfx
* - Argument 1: Importance for deciding which sfx to prioritize. Higher values have greater importance
* - Argument 2: Slows the decay of volume with distance (a 3-bit number ranging from 0-7)
* - Argument 3: Applies increasingly random offsets to frequency (a 2-bit number ranging from 0-3)
* - Argument 4: Various flags to add properties to the sfx
* - Argument 5: Various flags to add properties to the sfx
*
* WARNING: entries must align with the table defined for the item bank in sequence 0
*/
/* 0x1800 */ DEFINE_SFX(NA_SE_IT_SWORD_IMPACT, 0x30, 0, 1, 0, SFX_FLAG_15)
/* 0x1801 */ DEFINE_SFX(NA_SE_IT_SWORD_SWING, 0x30, 0, 1, 0, 0)
/* 0x1802 */ DEFINE_SFX(NA_SE_IT_SWORD_PUTAWAY, 0x30, 0, 0, 0, 0)
/* 0x1803 */ DEFINE_SFX(NA_SE_IT_SWORD_PICKOUT, 0x30, 0, 0, 0, 0)
/* 0x1804 */ DEFINE_SFX(NA_SE_IT_ARROW_SHOT, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x1805 */ DEFINE_SFX(NA_SE_IT_BOOMERANG_THROW, 0x30, 0, 1, 0, SFX_FLAG_10)
/* 0x1806 */ DEFINE_SFX(NA_SE_IT_SHIELD_BOUND, 0x60, 3, 2, 0, 0)
/* 0x1807 */ DEFINE_SFX(NA_SE_IT_BOW_DRAW, 0x30, 0, 1, 0, SFX_FLAG_10)
/* 0x1808 */ DEFINE_SFX(NA_SE_IT_SHIELD_REFLECT_SW, 0x80, 3, 1, 0, 0)
/* 0x1809 */ DEFINE_SFX(NA_SE_IT_ARROW_STICK_HRAD, 0x30, 0, 0, 0, 0)
/* 0x180A */ DEFINE_SFX(NA_SE_IT_HAMMER_HIT, 0x30, 0, 1, 0, 0)
/* 0x180B */ DEFINE_SFX(NA_SE_IT_HOOKSHOT_CHAIN, 0x38, 0, 0, 0, SFX_FLAG_10)
/* 0x180C */ DEFINE_SFX(NA_SE_IT_SHIELD_REFLECT_MG, 0x30, 1, 0, 0, SFX_FLAG_10)
/* 0x180D */ DEFINE_SFX(NA_SE_IT_BOMB_IGNIT, 0x50, 0, 0, 0, SFX_FLAG_8)
/* 0x180E */ DEFINE_SFX(NA_SE_IT_BOMB_EXPLOSION, 0x90, 2, 0, 0, 0)
/* 0x180F */ DEFINE_SFX(NA_SE_IT_BOMB_UNEXPLOSION, 0x50, 2, 0, 0, 0)
/* 0x1810 */ DEFINE_SFX(NA_SE_IT_BOOMERANG_FLY, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x1811 */ DEFINE_SFX(NA_SE_IT_SWORD_STRIKE, 0x40, 2, 0, 0, 0)
/* 0x1812 */ DEFINE_SFX(NA_SE_IT_HAMMER_SWING, 0x30, 0, 1, 0, 0)
/* 0x1813 */ DEFINE_SFX(NA_SE_IT_HOOKSHOT_REFLECT, 0x30, 0, 0, 0, 0)
/* 0x1814 */ DEFINE_SFX(NA_SE_IT_HOOKSHOT_STICK_CRE, 0x30, 0, 0, 0, 0)
/* 0x1815 */ DEFINE_SFX(NA_SE_IT_ARROW_STICK_OBJ, 0x34, 0, 0, 0, 0)
/* 0x1816 */ DEFINE_SFX(NA_SE_IT_SWORD_SLASH, 0x30, 0, 0, 0, 0)
/* 0x1817 */ DEFINE_SFX(NA_SE_IT_SWORD_SLASH_HARD, 0x30, 0, 0, 0, 0)
/* 0x1818 */ DEFINE_SFX(NA_SE_IT_SWORD_SWING_HARD, 0x30, 0, 0, 0, 0)
/* 0x1819 */ DEFINE_SFX(NA_SE_IT_BOMB_BOUND, 0x30, 0, 0, 0, 0)
/* 0x181A */ DEFINE_SFX(NA_SE_IT_WALL_HIT_HARD, 0x60, 0, 0, 0, 0)
/* 0x181B */ DEFINE_SFX(NA_SE_IT_WALL_HIT_SOFT, 0x30, 0, 0, 0, 0)
/* 0x181C */ DEFINE_SFX(NA_SE_IT_STONE_HIT, 0x30, 0, 0, 0, 0)
/* 0x181D */ DEFINE_SFX(NA_SE_IT_WOODSTICK_BROKEN, 0x30, 0, 0, 0, 0)
/* 0x181E */ DEFINE_SFX(NA_SE_IT_LASH, 0x30, 0, 2, 0, 0)
/* 0x181F */ DEFINE_SFX(NA_SE_IT_SHIELD_SWING, 0x30, 0, 1, 0, 0)
/* 0x1820 */ DEFINE_SFX(NA_SE_IT_SLING_SHOT, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x1821 */ DEFINE_SFX(NA_SE_IT_SLING_DRAW, 0x20, 0, 0, 0, SFX_FLAG_10)
/* 0x1822 */ DEFINE_SFX(NA_SE_IT_SWORD_CHARGE, 0x30, 0, 0, 0, 0)
/* 0x1823 */ DEFINE_SFX(NA_SE_IT_ROLLING_CUT, 0x30, 0, 0, 0, 0)
/* 0x1824 */ DEFINE_SFX(NA_SE_IT_SWORD_STRIKE_HARD, 0x30, 0, 0, 0, 0)
/* 0x1825 */ DEFINE_SFX(NA_SE_IT_SLING_REFLECT, 0x30, 0, 0, 0, 0)
/* 0x1826 */ DEFINE_SFX(NA_SE_IT_SHIELD_REMOVE, 0x30, 0, 0, 0, 0)
/* 0x1827 */ DEFINE_SFX(NA_SE_IT_HOOKSHOT_READY, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x1828 */ DEFINE_SFX(NA_SE_IT_HOOKSHOT_RECEIVE, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x1829 */ DEFINE_SFX(NA_SE_IT_HOOKSHOT_STICK_OBJ, 0x60, 3, 1, 0, 0)
/* 0x182A */ DEFINE_SFX(NA_SE_IT_SWORD_REFLECT_MG, 0x30, 1, 0, 0, 0)
/* 0x182B */ DEFINE_SFX(NA_SE_IT_DEKU, 0x30, 1, 0, 0, SFX_FLAG_10)
/* 0x182C */ DEFINE_SFX(NA_SE_IT_WALL_HIT_BUYO, 0x30, 0, 0, 0, 0)
/* 0x182D */ DEFINE_SFX(NA_SE_IT_SWORD_PUTAWAY_STN, 0x30, 0, 0, 0, 0)
/* 0x182E */ DEFINE_SFX(NA_SE_IT_ROLLING_CUT_LV1, 0xA0, 2, 0, 0, 0)
/* 0x182F */ DEFINE_SFX(NA_SE_IT_ROLLING_CUT_LV2, 0xA0, 2, 0, 0, 0)
/* 0x1830 */ DEFINE_SFX(NA_SE_IT_BOW_FLICK, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x1831 */ DEFINE_SFX(NA_SE_IT_BOMBCHU_MOVE, 0x30, 0, 0, 0, SFX_FLAG_8)
/* 0x1832 */ DEFINE_SFX(NA_SE_IT_SHIELD_CHARGE_LV1, 0x60, 0, 0, 0, 0)
/* 0x1833 */ DEFINE_SFX(NA_SE_IT_SHIELD_CHARGE_LV2, 0x60, 0, 0, 0, 0)
/* 0x1834 */ DEFINE_SFX(NA_SE_IT_SHIELD_CHARGE_LV3, 0x60, 0, 0, 0, 0)
/* 0x1835 */ DEFINE_SFX(NA_SE_IT_SLING_FLICK, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x1836 */ DEFINE_SFX(NA_SE_IT_SWORD_STICK_STN, 0x30, 0, 0, 0, 0)
/* 0x1837 */ DEFINE_SFX(NA_SE_IT_REFLECTION_WOOD, 0x60, 1, 2, 0, 0)
/* 0x1838 */ DEFINE_SFX(NA_SE_IT_SHIELD_REFLECT_MG2, 0x30, 0, 0, 0, 0)
/* 0x1839 */ DEFINE_SFX(NA_SE_IT_MAGIC_ARROW_SHOT, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x183A */ DEFINE_SFX(NA_SE_IT_EXPLOSION_FRAME, 0x60, 3, 0, 0, SFX_FLAG_15)
/* 0x183B */ DEFINE_SFX(NA_SE_IT_EXPLOSION_ICE, 0x60, 3, 0, 0, SFX_FLAG_15)
/* 0x183C */ DEFINE_SFX(NA_SE_IT_EXPLOSION_LIGHT, 0x60, 3, 0, 0, SFX_FLAG_15)
/* 0x183D */ DEFINE_SFX(NA_SE_IT_FISHING_REEL_SLOW, 0x30, 0, 0, 0, SFX_FLAG_14)
/* 0x183E */ DEFINE_SFX(NA_SE_IT_FISHING_REEL_HIGH, 0x30, 0, 0, 0, SFX_FLAG_14)
/* 0x183F */ DEFINE_SFX(NA_SE_IT_PULL_FISHING_ROD, 0x30, 0, 1, 0, 0)
/* 0x1840 */ DEFINE_SFX(NA_SE_IT_DM_FLYING_GOD_PASS, 0x80, 3, 0, 0, 0)
/* 0x1841 */ DEFINE_SFX(NA_SE_IT_DM_FLYING_GOD_DASH, 0x80, 3, 0, 0, 0)
/* 0x1842 */ DEFINE_SFX(NA_SE_IT_DM_RING_EXPLOSION, 0x30, 3, 0, 0, 0)
/* 0x1843 */ DEFINE_SFX(NA_SE_IT_DM_RING_GATHER, 0x30, 0, 0, 0, 0)
/* 0x1844 */ DEFINE_SFX(NA_SE_IT_INGO_HORSE_NEIGH, 0x30, 0, 1, 0, 0)
/* 0x1845 */ DEFINE_SFX(NA_SE_IT_EARTHQUAKE, 0x30, 0, 0, 0, 0)
/* 0x1846 */ DEFINE_SFX(NA_SE_IT_ERUPTION_PILLAR, 0x30, 0, 0, 0, 0)
/* 0x1847 */ DEFINE_SFX(NA_SE_IT_KAKASHI_JUMP, 0x30, 0, 0, 0, 0)
/* 0x1848 */ DEFINE_SFX(NA_SE_IT_FLAME, 0x30, 0, 0, 0, 0)
/* 0x1849 */ DEFINE_SFX(NA_SE_IT_SHIELD_BEAM, 0x30, 0, 0, 0, 0)
/* 0x184A */ DEFINE_SFX(NA_SE_IT_FISHING_HIT, 0x30, 0, 0, 0, 0)
/* 0x184B */ DEFINE_SFX(NA_SE_IT_GOODS_APPEAR, 0x30, 0, 0, 0, 0)
/* 0x184C */ DEFINE_SFX(NA_SE_IT_MAJIN_SWORD_BROKEN, 0x80, 0, 0, 0, 0)
/* 0x184D */ DEFINE_SFX(NA_SE_IT_HAND_CLAP, 0x30, 0, 0, 0, 0)
/* 0x184E */ DEFINE_SFX(NA_SE_IT_MASTER_SWORD_SWING, 0x30, 0, 0, 0, 0)
/* 0x184F */ DEFINE_SFX(NA_SE_IT_GORON_BALLFANG, 0x30, 0, 0, 0, 0)
/* 0x1850 */ DEFINE_SFX(NA_SE_IT_DEKUNUTS_FLOWER_OPEN, 0x80, 0, 0, 0, 0)
/* 0x1851 */ DEFINE_SFX(NA_SE_IT_DEKUNUTS_FLOWER_ROLL, 0x80, 0, 0, 0, 0)
/* 0x1852 */ DEFINE_SFX(NA_SE_IT_DEKUNUTS_FLOWER_CLOSE, 0x30, 0, 0, 0, 0)
/* 0x1853 */ DEFINE_SFX(NA_SE_IT_DEKUNUTS_BUBLE_BROKEN, 0x30, 0, 0, 0, 0)
/* 0x1854 */ DEFINE_SFX(NA_SE_IT_DEKUNUTS_BUBLE_VANISH, 0x30, 0, 0, 0, 0)
/* 0x1855 */ DEFINE_SFX(NA_SE_IT_DEKUNUTS_DROP_BOMB, 0x30, 0, 0, 0, 0)
/* 0x1856 */ DEFINE_SFX(NA_SE_IT_SET_TRANSFORM_MASK, 0x30, 0, 0, 0, 0)
/* 0x1857 */ DEFINE_SFX(NA_SE_IT_GORON_PUNCH_SWING, 0x30, 0, 0, 0, 0)
/* 0x1858 */ DEFINE_SFX(NA_SE_IT_TRANSFORM_MASK_BROKEN, 0x30, 0, 0, 0, 0)
/* 0x1859 */ DEFINE_SFX(NA_SE_IT_ZORA_KICK_SWING, 0x40, 0, 0, 0, 0)
/* 0x185A */ DEFINE_SFX(NA_SE_IT_DEKUNUTS_BUBLE_SHOT_LEVEL, 0x30, 0, 0, 0, 0)
/* 0x185B */ DEFINE_SFX(NA_SE_IT_BIG_BOMB_IGNIT, 0x60, 0, 0, 0, SFX_FLAG_8)
/* 0x185C */ DEFINE_SFX(NA_SE_IT_BIG_BOMB_EXPLOSION, 0x70, 0, 0, 0, 0)
/* 0x185D */ DEFINE_SFX(NA_SE_IT_REFLECTION_SNOW, 0x60, 0, 0, 0, 0)
/* 0x185E */ DEFINE_SFX(NA_SE_IT_GORON_ROLLING_REFLECTION, 0x30, 3, 2, 0, SFX_FLAG_10)
/* 0x185F */ DEFINE_SFX(NA_SE_IT_MASK_BOUND_0, 0x30, 0, 1, 0, 0)
/* 0x1860 */ DEFINE_SFX(NA_SE_IT_MASK_BOUND_1, 0x30, 0, 1, 0, 0)
/* 0x1861 */ DEFINE_SFX(NA_SE_IT_MASK_BOUND_SAND, 0x30, 0, 0, 0, 0)
/* 0x1862 */ DEFINE_SFX(NA_SE_IT_REFLECTION_WATER, 0x30, 0, 0, 0, 0)
/* 0x1863 */ DEFINE_SFX(NA_SE_IT_KYOJIN_BEARING, 0x60, 0, 0, 0, SFX_FLAG_13)
/* 0x1864 */ DEFINE_SFX(NA_SE_FISHING_REEL_SLOW2, 0x30, 0, 0, 0, 0)
/* 0x1865 */ DEFINE_SFX(NA_SE_IT_LURE_LAND1, 0x30, 0, 0, 0, 0)
/* 0x1866 */ DEFINE_SFX(NA_SE_IT_ROD_THROW, 0x30, 0, 0, 0, 0)
/* 0x1867 */ DEFINE_SFX(NA_SE_IT_REFLECT_BOSS, 0x30, 0, 0, 0, 0)
/* 0x1868 */ DEFINE_SFX(NA_SE_IT_SHIELD_SWING_ZORA, 0x30, 0, 0, 0, 0)
/* 0x1869 */ DEFINE_SFX(NA_SE_IT_SHIELD_REMOVE_ZORA, 0x30, 0, 0, 0, 0)
/* 0x186A */ DEFINE_SFX(NA_SE_IT_BOMB_EXPLOSION2, 0x30, 0, 0, 0, 0)
/* 0x186B */ DEFINE_SFX(NA_SE_IT_FISHING_REEL_REVERSE, 0x30, 0, 0, 0, 0)
/* 0x186C */ DEFINE_SFX(NA_SE_IT_FISHING_WORM_BOUND, 0x30, 0, 0, 0, 0)
/* 0x186D */ DEFINE_SFX(NA_SE_IT_DUMMY_109, 0x30, 0, 0, 0, 0)
/* 0x186E */ DEFINE_SFX(NA_SE_IT_DUMMY_110, 0x30, 0, 0, 0, 0)
/* 0x186F */ DEFINE_SFX(NA_SE_IT_DUMMY_111, 0x30, 0, 0, 0, 0)
+29
View File
@@ -0,0 +1,29 @@
/**
* Sfx Ocarina Bank
*
* DEFINE_SFX should be used for all sfx define in the ocarina bank from sequence 0
* - Argument 0: Enum value for this sfx
* - Argument 1: Importance for deciding which sfx to prioritize. Higher values have greater importance
* - Argument 2: Slows the decay of volume with distance (a 3-bit number ranging from 0-7)
* - Argument 3: Applies increasingly random offsets to frequency (a 2-bit number ranging from 0-3)
* - Argument 4: Various flags to add properties to the sfx
* - Argument 5: Various flags to add properties to the sfx
*
* WARNING: entries must align with the table defined for the ocarina bank in sequence 0
*/
/* 0x5800 */ DEFINE_SFX(NA_SE_OC_OCARINA, 0x30, 0, 0, 0, 0)
/* 0x5801 */ DEFINE_SFX(NA_SE_OC_ABYSS, 0x30, 0, 0, 0, SFX_FLAG_5)
/* 0x5802 */ DEFINE_SFX(NA_SE_OC_DOOR_OPEN, 0x30, 2, 1, 0, SFX_FLAG_10 | SFX_FLAG_9)
/* 0x5803 */ DEFINE_SFX(NA_SE_OC_SECRET_WARP_IN, 0x30, 0, 0, 0, 0)
/* 0x5804 */ DEFINE_SFX(NA_SE_OC_SECRET_WARP_OUT, 0x30, 0, 0, 0, 0)
/* 0x5805 */ DEFINE_SFX(NA_SE_OC_SECRET_HOLE_OUT, 0x30, 0, 0, 0, 0)
/* 0x5806 */ DEFINE_SFX(NA_SE_OC_REVENGE, 0x30, 0, 0, 0, 0)
/* 0x5807 */ DEFINE_SFX(NA_SE_OC_TUNAMI, 0x30, 0, 0, 0, 0)
/* 0x5808 */ DEFINE_SFX(NA_SE_OC_TELOP_IMPACT, 0x30, 0, 0, 0, 0)
/* 0x5809 */ DEFINE_SFX(NA_SE_OC_WOOD_GATE_OPEN, 0x30, 0, 0, 0, 0)
/* 0x580A */ DEFINE_SFX(NA_SE_OC_FIREWORKS, 0x30, 0, 0, 0, SFX_FLAG_13)
/* 0x580B */ DEFINE_SFX(NA_SE_OC_WHITE_OUT_INTO_KYOJIN, 0x30, 0, 0, 0, SFX_FLAG_13)
/* 0x580C */ DEFINE_SFX(NA_SE_OC_12, 0x30, 0, 0, 0, 0)
/* 0x580D */ DEFINE_SFX(NA_SE_OC_13, 0x30, 0, 0, 0, 0)
/* 0x580E */ DEFINE_SFX(NA_SE_OC_14, 0x30, 0, 0, 0, 0)
/* 0x580F */ DEFINE_SFX(NA_SE_OC_15, 0x30, 0, 0, 0, 0)
+477
View File
@@ -0,0 +1,477 @@
/**
* Sfx Player Bank
*
* DEFINE_SFX should be used for all sfx define in the player bank from sequence 0
* - Argument 0: Enum value for this sfx
* - Argument 1: Importance for deciding which sfx to prioritize. Higher values have greater importance
* - Argument 2: Slows the decay of volume with distance (a 3-bit number ranging from 0-7)
* - Argument 3: Applies increasingly random offsets to frequency (a 2-bit number ranging from 0-3)
* - Argument 4: Various flags to add properties to the sfx
* - Argument 5: Various flags to add properties to the sfx
*
* WARNING: entries must align with the table defined for the player bank in sequence 0
*/
/* 0x800 */ DEFINE_SFX(NA_SE_PL_WALK_GROUND, 0x20, 0, 2, 0, SFX_FLAG_10)
/* 0x801 */ DEFINE_SFX(NA_SE_PL_WALK_SAND, 0x20, 0, 2, 0, SFX_FLAG_10)
/* 0x802 */ DEFINE_SFX(NA_SE_PL_WALK_CONCRETE, 0x20, 0, 2, 0, SFX_FLAG_10)
/* 0x803 */ DEFINE_SFX(NA_SE_PL_WALK_DIRT, 0x20, 0, 2, 0, SFX_FLAG_10)
/* 0x804 */ DEFINE_SFX(NA_SE_PL_WALK_WATER0, 0x20, 0, 1, 0, SFX_FLAG_10)
/* 0x805 */ DEFINE_SFX(NA_SE_PL_WALK_WATER1, 0x20, 0, 1, 0, SFX_FLAG_10)
/* 0x806 */ DEFINE_SFX(NA_SE_PL_WALK_WATER2, 0x20, 0, 1, 0, SFX_FLAG_10)
/* 0x807 */ DEFINE_SFX(NA_SE_PL_WALK_MAGMA, 0x20, 0, 1, 0, SFX_FLAG_10)
/* 0x808 */ DEFINE_SFX(NA_SE_PL_WALK_GRASS, 0x20, 0, 2, 0, SFX_FLAG_10)
/* 0x809 */ DEFINE_SFX(NA_SE_PL_WALK_IRON, 0x20, 0, 1, 0, SFX_FLAG_10)
/* 0x80A */ DEFINE_SFX(NA_SE_PL_WALK_LADDER, 0x20, 0, 2, 0, SFX_FLAG_10)
/* 0x80B */ DEFINE_SFX(NA_SE_PL_WALK_GLASS, 0x20, 0, 0, 0, SFX_FLAG_10)
/* 0x80C */ DEFINE_SFX(NA_SE_PL_WALK_METAL1, 0x20, 0, 0, 0, SFX_FLAG_10)
/* 0x80D */ DEFINE_SFX(NA_CODE_DIRT_DEEP, 0x20, 0, 0, 0, SFX_FLAG_10)
/* 0x80E */ DEFINE_SFX(NA_SE_PL_WALK_SNOW, 0x20, 0, 0, 0, SFX_FLAG_10)
/* 0x80F */ DEFINE_SFX(NA_SE_PL_WALK_ICE, 0x20, 0, 0, 0, SFX_FLAG_10)
/* 0x810 */ DEFINE_SFX(NA_SE_PL_JUMP_GROUND, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x811 */ DEFINE_SFX(NA_SE_PL_JUMP_SAND, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x812 */ DEFINE_SFX(NA_SE_PL_JUMP_CONCRETE, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x813 */ DEFINE_SFX(NA_SE_PL_JUMP_DIRT, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x814 */ DEFINE_SFX(NA_SE_PL_JUMP_WATER0, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x815 */ DEFINE_SFX(NA_SE_PL_JUMP_WATER1, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x816 */ DEFINE_SFX(NA_SE_PL_JUMP_WATER2, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x817 */ DEFINE_SFX(NA_SE_PL_JUMP_MAGMA, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x818 */ DEFINE_SFX(NA_SE_PL_JUMP_GRASS, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x819 */ DEFINE_SFX(NA_SE_PL_JUMP_IRON, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x81A */ DEFINE_SFX(NA_SE_PL_JUMP_LADDER, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x81B */ DEFINE_SFX(NA_SE_PL_JUMP_GLASS, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x81C */ DEFINE_SFX(NA_SE_PL_DUMMY_28, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x81D */ DEFINE_SFX(NA_SE_PL_JUMP_HEAVYBOOTS, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x81E */ DEFINE_SFX(NA_SE_PL_JUMP_SNOW, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x81F */ DEFINE_SFX(NA_SE_PL_JUMP_ICE, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x820 */ DEFINE_SFX(NA_SE_PL_LAND_GROUND, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x821 */ DEFINE_SFX(NA_SE_PL_LAND_SAND, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x822 */ DEFINE_SFX(NA_SE_PL_LAND_CONCRETE, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x823 */ DEFINE_SFX(NA_SE_PL_LAND_DIRT, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x824 */ DEFINE_SFX(NA_SE_PL_LAND_WATER0, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x825 */ DEFINE_SFX(NA_SE_PL_LAND_WATER1, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x826 */ DEFINE_SFX(NA_SE_PL_LAND_WATER2, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x827 */ DEFINE_SFX(NA_SE_PL_LAND_MAGMA, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x828 */ DEFINE_SFX(NA_SE_PL_LAND_GRASS, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x829 */ DEFINE_SFX(NA_SE_PL_LAND_IRON, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x82A */ DEFINE_SFX(NA_SE_PL_LAND_LADDER, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x82B */ DEFINE_SFX(NA_SE_PL_LAND_GLASS, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x82C */ DEFINE_SFX(NA_SE_PL_DUMMY_44, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x82D */ DEFINE_SFX(NA_SE_PL_LAND_HEAVYBOOTS, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x82E */ DEFINE_SFX(NA_SE_PL_LAND_SNOW, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x82F */ DEFINE_SFX(NA_SE_PL_LAND_ICE, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x830 */ DEFINE_SFX(NA_SE_PL_SLIPDOWN, 0x30, 0, 2, 0, 0)
/* 0x831 */ DEFINE_SFX(NA_SE_PL_CLIMB_CLIFF, 0x30, 0, 0, 0, 0)
/* 0x832 */ DEFINE_SFX(NA_SE_PL_SIT_ON_HORSE, 0x30, 0, 0, 0, 0)
/* 0x833 */ DEFINE_SFX(NA_SE_PL_GET_OFF_HORSE, 0x30, 0, 0, 0, 0)
/* 0x834 */ DEFINE_SFX(NA_SE_PL_TAKE_OUT_SHIELD, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x835 */ DEFINE_SFX(NA_SE_PL_CHANGE_ARMS, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x836 */ DEFINE_SFX(NA_SE_PL_CATCH_BOOMERANG, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x837 */ DEFINE_SFX(NA_SE_PL_DIVE_INTO_WATER, 0x30, 0, 1, 0, 0)
/* 0x838 */ DEFINE_SFX(NA_SE_PL_JUMP_OUT_WATER, 0x30, 0, 1, 0, 0)
/* 0x839 */ DEFINE_SFX(NA_SE_PL_SWIM, 0x30, 0, 2, 0, 0)
/* 0x83A */ DEFINE_SFX(NA_SE_PL_THROW, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x83B */ DEFINE_SFX(NA_SE_PL_BODY_BOUND, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x83C */ DEFINE_SFX(NA_SE_PL_ROLL, 0x40, 0, 0, 0, SFX_FLAG_10)
/* 0x83D */ DEFINE_SFX(NA_SE_PL_SKIP, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x83E */ DEFINE_SFX(NA_SE_PL_BODY_HIT, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x83F */ DEFINE_SFX(NA_SE_PL_DAMAGE, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x840 */ DEFINE_SFX(NA_SE_PL_SLIP, 0x30, 0, 1, 0, 0)
/* 0x841 */ DEFINE_SFX(NA_SE_PL_SLIP_SAND, 0x30, 0, 1, 0, 0)
/* 0x842 */ DEFINE_SFX(NA_SE_PL_SLIP_CONCRETE, 0x30, 0, 1, 0, 0)
/* 0x843 */ DEFINE_SFX(NA_SE_PL_SLIP_DIRT, 0x30, 0, 1, 0, 0)
/* 0x844 */ DEFINE_SFX(NA_SE_PL_SLIP_WATER0, 0x30, 0, 1, 0, 0)
/* 0x845 */ DEFINE_SFX(NA_SE_PL_SLIP_WATER1, 0x30, 0, 1, 0, 0)
/* 0x846 */ DEFINE_SFX(NA_SE_PL_SLIP_WATER2, 0x30, 0, 1, 0, 0)
/* 0x847 */ DEFINE_SFX(NA_SE_PL_SLIP_MAGMA, 0x30, 0, 1, 0, 0)
/* 0x848 */ DEFINE_SFX(NA_SE_PL_SLIP_GRASS, 0x30, 0, 1, 0, 0)
/* 0x849 */ DEFINE_SFX(NA_SE_PL_SLIP_IRON, 0x30, 0, 1, 0, 0)
/* 0x84A */ DEFINE_SFX(NA_SE_PL_SLIP_LADDER, 0x30, 0, 1, 0, 0)
/* 0x84B */ DEFINE_SFX(NA_SE_PL_SLIP_GLASS, 0x30, 0, 1, 0, 0)
/* 0x84C */ DEFINE_SFX(NA_SE_PL_DUMMY76, 0x30, 0, 0, 0, 0)
/* 0x84D */ DEFINE_SFX(NA_SE_PL_SLIP_HEAVYBOOTS, 0x30, 0, 0, 0, 0)
/* 0x84E */ DEFINE_SFX(NA_SE_PL_SLIP_SNOW, 0x30, 0, 0, 0, 0)
/* 0x84F */ DEFINE_SFX(NA_SE_PL_SLIP_ICE, 0x30, 0, 0, 0, 0)
/* 0x850 */ DEFINE_SFX(NA_SE_PL_BOUND, 0x80, 0, 0, 0, 0)
/* 0x851 */ DEFINE_SFX(NA_SE_PL_BOUND_SAND, 0x80, 0, 0, 0, 0)
/* 0x852 */ DEFINE_SFX(NA_SE_PL_BOUND_CONCRETE, 0x80, 0, 0, 0, 0)
/* 0x853 */ DEFINE_SFX(NA_SE_PL_BOUND_DIRT, 0x80, 0, 0, 0, 0)
/* 0x854 */ DEFINE_SFX(NA_SE_PL_BOUND_WATER0, 0x80, 0, 0, 0, 0)
/* 0x855 */ DEFINE_SFX(NA_SE_PL_BOUND_WATER1, 0x80, 0, 0, 0, 0)
/* 0x856 */ DEFINE_SFX(NA_SE_PL_BOUND_WATER2, 0x80, 0, 0, 0, 0)
/* 0x857 */ DEFINE_SFX(NA_SE_PL_BOUND_MAGMA, 0x80, 0, 0, 0, 0)
/* 0x858 */ DEFINE_SFX(NA_SE_PL_BOUND_GRASS, 0x80, 0, 0, 0, 0)
/* 0x859 */ DEFINE_SFX(NA_SE_PL_BOUND_IRON, 0x80, 0, 0, 0, 0)
/* 0x85A */ DEFINE_SFX(NA_SE_PL_BOUND_LADDER, 0x80, 0, 0, 0, 0)
/* 0x85B */ DEFINE_SFX(NA_SE_PL_BOUND_WOOD, 0x80, 0, 0, 0, 0)
/* 0x85C */ DEFINE_SFX(NA_SE_PL_DUMMY_92, 0x80, 0, 0, 0, 0)
/* 0x85D */ DEFINE_SFX(NA_SE_PL_BOUND_HEAVYBOOTS, 0x80, 0, 0, 0, 0)
/* 0x85E */ DEFINE_SFX(NA_SE_PL_BOUND_SNOW, 0x80, 0, 0, 0, 0)
/* 0x85F */ DEFINE_SFX(NA_SE_PL_BOUND_ICE, 0x80, 0, 0, 0, 0)
/* 0x860 */ DEFINE_SFX(NA_SE_PL_BOW_DRAW, 0x30, 0, 1, 0, SFX_FLAG_10)
/* 0x861 */ DEFINE_SFX(NA_SE_PL_MEATL_BOOTS_JUMP, 0x30, 0, 0, 0, 0)
/* 0x862 */ DEFINE_SFX(NA_SE_PL_DUMMY_98, 0x30, 0, 0, 0, 0)
/* 0x863 */ DEFINE_SFX(NA_SE_PL_FACE_UP, 0x30, 0, 0, 0, 0)
/* 0x864 */ DEFINE_SFX(NA_SE_PL_DIVE_BUBBLE, 0x30, 0, 0, 0, 0)
/* 0x865 */ DEFINE_SFX(NA_SE_PL_MOVE_BUBBLE, 0x30, 0, 0, 0, 0)
/* 0x866 */ DEFINE_SFX(NA_SE_PL_METALEFFECT_KID, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x867 */ DEFINE_SFX(NA_SE_PL_METALEFFECT_ADULT, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x868 */ DEFINE_SFX(NA_SE_PL_SPARK, 0x30, 0, 0, 0, 0)
/* 0x869 */ DEFINE_SFX(NA_SE_PL_PULL_UP_PLANT, 0x30, 0, 0, 0, 0)
/* 0x86A */ DEFINE_SFX(NA_SE_PL_PULL_UP_ROCK, 0x30, 0, 0, 0, 0)
/* 0x86B */ DEFINE_SFX(NA_SE_PL_IN_BUBBLE, 0x30, 0, 0, 0, 0)
/* 0x86C */ DEFINE_SFX(NA_SE_PL_PULL_UP_BIGROCK, 0x30, 3, 0, 0, 0)
/* 0x86D */ DEFINE_SFX(NA_SE_PL_SWORD_CHARGE, 0x30, 0, 0, 0, 0)
/* 0x86E */ DEFINE_SFX(NA_SE_PL_FREEZE, 0x30, 0, 0, 0, 0)
/* 0x86F */ DEFINE_SFX(NA_SE_PL_PULL_UP_POT, 0x30, 0, 0, 0, 0)
/* 0x870 */ DEFINE_SFX(NA_SE_PL_KNOCK, 0x30, 0, 0, 0, 0)
/* 0x871 */ DEFINE_SFX(NA_SE_PL_CALM_HIT, 0x30, 0, 2, 0, 0)
/* 0x872 */ DEFINE_SFX(NA_SE_PL_CALM_PAT, 0x30, 0, 0, 0, 0)
/* 0x873 */ DEFINE_SFX(NA_SE_PL_SUBMERGE, 0x30, 0, 0, 0, 0)
/* 0x874 */ DEFINE_SFX(NA_SE_PL_FREEZE_S, 0x30, 3, 0, 0, 0)
/* 0x875 */ DEFINE_SFX(NA_SE_PL_ICE_BROKEN, 0x30, 1, 0, 0, 0)
/* 0x876 */ DEFINE_SFX(NA_SE_PL_SLIP_ICE_LELEL, 0x30, 0, 0, 0, 0)
/* 0x877 */ DEFINE_SFX(NA_SE_PL_PUT_OUT_ITEM, 0x30, 0, 0, 0, 0)
/* 0x878 */ DEFINE_SFX(NA_SE_PL_PULL_UP_WOODBOX, 0x30, 0, 0, 0, 0)
/* 0x879 */ DEFINE_SFX(NA_SE_PL_MAGIC_FIRE, 0x30, 0, 0, 0, 0)
/* 0x87A */ DEFINE_SFX(NA_SE_PL_MAGIC_WIND_NORMAL, 0x30, 0, 0, 0, 0)
/* 0x87B */ DEFINE_SFX(NA_SE_PL_MAGIC_WIND_WARP, 0x30, 0, 0, 0, SFX_FLAG_13)
/* 0x87C */ DEFINE_SFX(NA_SE_PL_MAGIC_SOUL_NORMAL, 0x30, 0, 0, 0, SFX_FLAG_11 | SFX_FLAG_10)
/* 0x87D */ DEFINE_SFX(NA_SE_PL_ARROW_CHARGE_FIRE, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x87E */ DEFINE_SFX(NA_SE_PL_ARROW_CHARGE_ICE, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x87F */ DEFINE_SFX(NA_SE_PL_ARROW_CHARGE_LIGHT, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x880 */ DEFINE_SFX(NA_SE_DUMMY_128, 0x20, 0, 2, 0, 0)
/* 0x881 */ DEFINE_SFX(NA_SE_DUMMY_129, 0x20, 0, 2, 0, 0)
/* 0x882 */ DEFINE_SFX(NA_SE_DUMMY_130, 0x20, 0, 2, 0, 0)
/* 0x883 */ DEFINE_SFX(NA_SE_PL_PULL_UP_RUTO, 0x20, 0, 2, 0, 0)
/* 0x884 */ DEFINE_SFX(NA_SE_DUMMY_132, 0x20, 0, 1, 0, 0)
/* 0x885 */ DEFINE_SFX(NA_SE_DUMMY_133, 0x20, 0, 1, 0, 0)
/* 0x886 */ DEFINE_SFX(NA_SE_DUMMY_134, 0x20, 0, 1, 0, 0)
/* 0x887 */ DEFINE_SFX(NA_SE_DUMMY_135, 0x20, 0, 1, 0, 0)
/* 0x888 */ DEFINE_SFX(NA_SE_DUMMY_136, 0x20, 0, 2, 0, 0)
/* 0x889 */ DEFINE_SFX(NA_SE_DUMMY_137, 0x20, 0, 2, 0, 0)
/* 0x88A */ DEFINE_SFX(NA_SE_DUMMY_138, 0x20, 0, 2, 0, 0)
/* 0x88B */ DEFINE_SFX(NA_SE_DUMMY_139, 0x20, 0, 0, 0, 0)
/* 0x88C */ DEFINE_SFX(NA_SE_DUMMY_140, 0x20, 0, 0, 0, 0)
/* 0x88D */ DEFINE_SFX(NA_SE_DUMMY_141, 0x20, 0, 0, 0, 0)
/* 0x88E */ DEFINE_SFX(NA_SE_DUMMY_142, 0x20, 0, 0, 0, 0)
/* 0x88F */ DEFINE_SFX(NA_SE_DUMMY_143, 0x20, 0, 0, 0, 0)
/* 0x890 */ DEFINE_SFX(NA_SE_DUMMY_144, 0x30, 0, 0, 0, 0)
/* 0x891 */ DEFINE_SFX(NA_SE_DUMMY_145, 0x30, 0, 0, 0, 0)
/* 0x892 */ DEFINE_SFX(NA_SE_DUMMY_146, 0x30, 0, 0, 0, 0)
/* 0x893 */ DEFINE_SFX(NA_SE_DUMMY_147, 0x30, 0, 0, 0, 0)
/* 0x894 */ DEFINE_SFX(NA_SE_DUMMY_148, 0x30, 0, 0, 0, 0)
/* 0x895 */ DEFINE_SFX(NA_SE_DUMMY_149, 0x30, 0, 0, 0, 0)
/* 0x896 */ DEFINE_SFX(NA_SE_DUMMY_150, 0x30, 0, 0, 0, 0)
/* 0x897 */ DEFINE_SFX(NA_SE_DUMMY_151, 0x30, 0, 0, 0, 0)
/* 0x898 */ DEFINE_SFX(NA_SE_DUMMY_152, 0x30, 0, 0, 0, 0)
/* 0x899 */ DEFINE_SFX(NA_SE_DUMMY_153, 0x30, 0, 0, 0, 0)
/* 0x89A */ DEFINE_SFX(NA_SE_DUMMY_154, 0x30, 0, 0, 0, 0)
/* 0x89B */ DEFINE_SFX(NA_SE_DUMMY_155, 0x30, 0, 0, 0, 0)
/* 0x89C */ DEFINE_SFX(NA_SE_DUMMY_156, 0x30, 0, 0, 0, 0)
/* 0x89D */ DEFINE_SFX(NA_SE_DUMMY_157, 0x30, 0, 0, 0, 0)
/* 0x89E */ DEFINE_SFX(NA_SE_DUMMY_158, 0x30, 0, 0, 0, 0)
/* 0x89F */ DEFINE_SFX(NA_SE_DUMMY_159, 0x30, 0, 0, 0, 0)
/* 0x8A0 */ DEFINE_SFX(NA_SE_DUMMY_160, 0x40, 0, 0, 0, 0)
/* 0x8A1 */ DEFINE_SFX(NA_SE_DUMMY_161, 0x40, 0, 0, 0, 0)
/* 0x8A2 */ DEFINE_SFX(NA_SE_DUMMY_162, 0x40, 0, 0, 0, 0)
/* 0x8A3 */ DEFINE_SFX(NA_SE_DUMMY_163, 0x40, 0, 0, 0, 0)
/* 0x8A4 */ DEFINE_SFX(NA_SE_DUMMY_164, 0x40, 0, 0, 0, 0)
/* 0x8A5 */ DEFINE_SFX(NA_SE_DUMMY_165, 0x40, 0, 0, 0, 0)
/* 0x8A6 */ DEFINE_SFX(NA_SE_DUMMY_166, 0x40, 0, 0, 0, 0)
/* 0x8A7 */ DEFINE_SFX(NA_SE_DUMMY_167, 0x40, 0, 0, 0, 0)
/* 0x8A8 */ DEFINE_SFX(NA_SE_DUMMY_168, 0x40, 0, 0, 0, 0)
/* 0x8A9 */ DEFINE_SFX(NA_SE_DUMMY_169, 0x40, 0, 0, 0, 0)
/* 0x8AA */ DEFINE_SFX(NA_SE_DUMMY_170, 0x40, 0, 0, 0, 0)
/* 0x8AB */ DEFINE_SFX(NA_SE_DUMMY_171, 0x40, 0, 0, 0, 0)
/* 0x8AC */ DEFINE_SFX(NA_SE_DUMMY_172, 0x40, 0, 0, 0, 0)
/* 0x8AD */ DEFINE_SFX(NA_SE_DUMMY_173, 0x40, 0, 0, 0, 0)
/* 0x8AE */ DEFINE_SFX(NA_SE_DUMMY_174, 0x40, 0, 0, 0, 0)
/* 0x8AF */ DEFINE_SFX(NA_SE_DUMMY_175, 0x40, 0, 0, 0, 0)
/* 0x8B0 */ DEFINE_SFX(NA_SE_PL_CRAWL, 0x30, 0, 1, 0, SFX_FLAG_10)
/* 0x8B1 */ DEFINE_SFX(NA_SE_PL_CRAWL_SAND, 0x30, 0, 1, 0, SFX_FLAG_10)
/* 0x8B2 */ DEFINE_SFX(NA_SE_PL_CRAWL_CONCRETE, 0x30, 0, 1, 0, SFX_FLAG_10)
/* 0x8B3 */ DEFINE_SFX(NA_SE_PL_CRAWL_DIRT, 0x30, 0, 1, 0, SFX_FLAG_10)
/* 0x8B4 */ DEFINE_SFX(NA_SE_PL_CRAWL_WATER0, 0x30, 0, 1, 0, SFX_FLAG_10)
/* 0x8B5 */ DEFINE_SFX(NA_SE_DUMMY_181, 0x30, 0, 1, 0, SFX_FLAG_10)
/* 0x8B6 */ DEFINE_SFX(NA_SE_DUMMY_182, 0x30, 0, 1, 0, SFX_FLAG_10)
/* 0x8B7 */ DEFINE_SFX(NA_SE_DUMMY_183, 0x30, 0, 1, 0, SFX_FLAG_10)
/* 0x8B8 */ DEFINE_SFX(NA_SE_DUMMY_184, 0x30, 0, 1, 0, SFX_FLAG_10)
/* 0x8B9 */ DEFINE_SFX(NA_SE_DUMMY_185, 0x30, 0, 1, 0, SFX_FLAG_10)
/* 0x8BA */ DEFINE_SFX(NA_SE_DUMMY_186, 0x30, 0, 1, 0, SFX_FLAG_10)
/* 0x8BB */ DEFINE_SFX(NA_SE_PL_CRAWL_WOOD, 0x30, 0, 1, 0, SFX_FLAG_10)
/* 0x8BC */ DEFINE_SFX(NA_SE_DUMMY_188, 0x30, 0, 1, 0, SFX_FLAG_10)
/* 0x8BD */ DEFINE_SFX(NA_SE_DUMMY_189, 0x30, 0, 1, 0, SFX_FLAG_10)
/* 0x8BE */ DEFINE_SFX(NA_SE_DUMMY_190, 0x30, 0, 1, 0, SFX_FLAG_10)
/* 0x8BF */ DEFINE_SFX(NA_SE_PL_CRAWL_ICE, 0x30, 0, 1, 0, SFX_FLAG_10)
/* 0x8C0 */ DEFINE_SFX(NA_SE_PL_MAGIC_SOUL_FLASH, 0x30, 0, 0, 0, SFX_FLAG_11 | SFX_FLAG_10)
/* 0x8C1 */ DEFINE_SFX(NA_SE_PL_ROLL_DUST, 0x30, 0, 2, 0, SFX_FLAG_14)
/* 0x8C2 */ DEFINE_SFX(NA_SE_DUMMY_194, 0x30, 0, 0, 0, 0)
/* 0x8C3 */ DEFINE_SFX(NA_SE_PL_MAGIC_SOUL_BALL, 0x30, 0, 0, 0, 0)
/* 0x8C4 */ DEFINE_SFX(NA_SE_PL_SPIRAL_HEAL_BEAM, 0x30, 0, 0, 0, 0)
/* 0x8C5 */ DEFINE_SFX(NA_SE_PL_BOUND_NOWEAPON, 0x30, 0, 0, 0, 0)
/* 0x8C6 */ DEFINE_SFX(NA_SE_PL_PLANT_GROW_UP, 0x30, 0, 0, 0, 0)
/* 0x8C7 */ DEFINE_SFX(NA_SE_PL_PLANT_TALLER, 0x30, 0, 0, 0, 0)
/* 0x8C8 */ DEFINE_SFX(NA_SE_PL_MAGIC_WIND_VANISH, 0x60, 2, 0, 0, 0)
/* 0x8C9 */ DEFINE_SFX(NA_SE_PL_HOBBERBOOTS_LV, 0x30, 0, 0, 0, 0)
/* 0x8CA */ DEFINE_SFX(NA_SE_PL_PLANT_MOVE, 0x30, 0, 0, 0, 0)
/* 0x8CB */ DEFINE_SFX(NA_SE_EV_WALL_MOVE_SP, 0x30, 0, 0, 0, SFX_FLAG_11)
/* 0x8CC */ DEFINE_SFX(NA_SE_PL_PLANT_GROW_BIG, 0x30, 0, 0, 0, 0)
/* 0x8CD */ DEFINE_SFX(NA_SE_PL_TELESCOPE_MOVEMENT, 0x30, 0, 0, 0, 0)
/* 0x8CE */ DEFINE_SFX(NA_SE_PL_GIANT_WALK, 0x30, 3, 0, 0, SFX_FLAG_10)
/* 0x8CF */ DEFINE_SFX(NA_SE_PL_CHIBI_FAIRY_HEAL, 0x30, 0, 0, 0, 0)
/* 0x8D0 */ DEFINE_SFX(NA_SE_PL_SLIP_LEVEL, 0x30, 0, 0, 0, 0)
/* 0x8D1 */ DEFINE_SFX(NA_SE_PL_SLIP_SAND_LEVEL, 0x30, 0, 0, 0, 0)
/* 0x8D2 */ DEFINE_SFX(NA_SE_PL_SLIP_CONCRETE_LEVEL, 0x30, 0, 0, 0, 0)
/* 0x8D3 */ DEFINE_SFX(NA_SE_PL_SLIP_DIRT_LEVEL, 0x30, 0, 0, 0, 0)
/* 0x8D4 */ DEFINE_SFX(NA_SE_PL_SLIP_WATER0_LEVEL, 0x30, 0, 0, 0, 0)
/* 0x8D5 */ DEFINE_SFX(NA_SE_PL_SLIP_WATER1_LEVEL, 0x30, 0, 0, 0, 0)
/* 0x8D6 */ DEFINE_SFX(NA_SE_PL_SLIP_WATER2_LEVEL, 0x30, 0, 0, 0, 0)
/* 0x8D7 */ DEFINE_SFX(NA_SE_PL_SLIP_MAGMA_LEVEL, 0x30, 0, 0, 0, 0)
/* 0x8D8 */ DEFINE_SFX(NA_SE_PL_SLIP_GRASS_LEVEL, 0x30, 0, 0, 0, 0)
/* 0x8D9 */ DEFINE_SFX(NA_SE_PL_SLIP_IRON_LEVEL, 0x30, 0, 0, 0, 0)
/* 0x8DA */ DEFINE_SFX(NA_SE_PL_SLIP_LADDER_LEVEL, 0x30, 0, 0, 0, 0)
/* 0x8DB */ DEFINE_SFX(NA_SE_PL_SLIP_GLASS_LEVEL, 0x30, 0, 0, 0, 0)
/* 0x8DC */ DEFINE_SFX(NA_SE_PL_DUMMY_220, 0x30, 0, 0, 0, 0)
/* 0x8DD */ DEFINE_SFX(NA_SE_PL_SLIP_HEAVYBOOTS_LEVEL, 0x30, 0, 0, 0, 0)
/* 0x8DE */ DEFINE_SFX(NA_SE_PL_DUMMY_222, 0x30, 0, 0, 0, 0)
/* 0x8DF */ DEFINE_SFX(NA_SE_PL_SLIP_ICE_LEVEL, 0x30, 0, 0, 0, 0)
/* 0x8E0 */ DEFINE_SFX(NA_SE_PL_DEKUNUTS_FIRE, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x8E1 */ DEFINE_SFX(NA_SE_PL_GORON_BALLJUMP, 0x60, 0, 1, 0, 0)
/* 0x8E2 */ DEFINE_SFX(NA_SE_PL_DEKUNUTS_IN_GRD, 0x40, 0, 0, 0, 0)
/* 0x8E3 */ DEFINE_SFX(NA_SE_PL_DEKUNUTS_OUT_GRD, 0x30, 0, 0, 0, 0)
/* 0x8E4 */ DEFINE_SFX(NA_SE_PL_TRANSFORM, 0x30, 0, 0, 0, 0)
/* 0x8E5 */ DEFINE_SFX(NA_SE_PL_TRANSFORM_DEMO, 0x30, 0, 0, 0, 0)
/* 0x8E6 */ DEFINE_SFX(NA_SE_PL_GORON_TO_BALL, 0x30, 0, 0, 0, 0)
/* 0x8E7 */ DEFINE_SFX(NA_SE_PL_BALL_TO_GORON, 0x30, 0, 0, 0, 0)
/* 0x8E8 */ DEFINE_SFX(NA_SE_PL_GORON_PUNCH, 0x50, 3, 1, 0, 0)
/* 0x8E9 */ DEFINE_SFX(NA_SE_PL_SINK_ON_SAND, 0x30, 0, 0, 0, 0)
/* 0x8EA */ DEFINE_SFX(NA_SE_PL_SINK_ON_SNOW, 0x30, 0, 0, 0, 0)
/* 0x8EB */ DEFINE_SFX(NA_SE_PL_GORON_BALL_CHARGE, 0x30, 0, 0, 0, 0)
/* 0x8EC */ DEFINE_SFX(NA_SE_PL_ZORA_SWIM_DASH, 0x30, 0, 0, 0, 0)
/* 0x8ED */ DEFINE_SFX(NA_SE_PL_ZORA_SWIM_LV, 0x30, 0, 0, 0, 0)
/* 0x8EE */ DEFINE_SFX(NA_SE_PL_ZORA_SWIM_ROLL, 0x30, 0, 0, 0, 0)
/* 0x8EF */ DEFINE_SFX(NA_SE_PL_GORON_SQUAT, 0x30, 0, 0, 0, 0)
/* 0x8F0 */ DEFINE_SFX(NA_SE_PL_DUMMY_240, 0x20, 0, 2, 0, SFX_FLAG_10)
/* 0x8F1 */ DEFINE_SFX(NA_SE_PL_DUMMY_241, 0x20, 0, 2, 0, SFX_FLAG_10)
/* 0x8F2 */ DEFINE_SFX(NA_SE_PL_DUMMY_242, 0x20, 0, 2, 0, SFX_FLAG_10)
/* 0x8F3 */ DEFINE_SFX(NA_SE_PL_DUMMY_243, 0x20, 0, 2, 0, SFX_FLAG_10)
/* 0x8F4 */ DEFINE_SFX(NA_SE_PL_DUMMY_244, 0x20, 0, 1, 0, SFX_FLAG_10)
/* 0x8F5 */ DEFINE_SFX(NA_SE_PL_DUMMY_245, 0x20, 0, 1, 0, SFX_FLAG_10)
/* 0x8F6 */ DEFINE_SFX(NA_SE_PL_DUMMY_246, 0x20, 0, 1, 0, SFX_FLAG_10)
/* 0x8F7 */ DEFINE_SFX(NA_SE_PL_DUMMY_247, 0x20, 0, 1, 0, SFX_FLAG_10)
/* 0x8F8 */ DEFINE_SFX(NA_SE_PL_DUMMY_248, 0x20, 0, 2, 0, SFX_FLAG_10)
/* 0x8F9 */ DEFINE_SFX(NA_SE_PL_DUMMY_249, 0x20, 0, 1, 0, SFX_FLAG_10)
/* 0x8FA */ DEFINE_SFX(NA_SE_PL_DUMMY_250, 0x20, 0, 2, 0, SFX_FLAG_10)
/* 0x8FB */ DEFINE_SFX(NA_SE_PL_DUMMY_251, 0x20, 0, 0, 0, SFX_FLAG_10)
/* 0x8FC */ DEFINE_SFX(NA_SE_PL_DUMMY_252, 0x20, 0, 0, 0, SFX_FLAG_10)
/* 0x8FD */ DEFINE_SFX(NA_SE_PL_DUMMY_253, 0x20, 0, 0, 0, SFX_FLAG_10)
/* 0x8FE */ DEFINE_SFX(NA_SE_PL_DUMMY_254, 0x20, 0, 0, 0, SFX_FLAG_10)
/* 0x8FF */ DEFINE_SFX(NA_SE_PL_DUMMY_255, 0x20, 0, 0, 0, SFX_FLAG_10)
/* 0x900 */ DEFINE_SFX(NA_SE_PL_DUMMY_256, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x901 */ DEFINE_SFX(NA_SE_PL_DUMMY_257, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x902 */ DEFINE_SFX(NA_SE_PL_DUMMY_258, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x903 */ DEFINE_SFX(NA_SE_PL_DUMMY_259, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x904 */ DEFINE_SFX(NA_SE_PL_DUMMY_260, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x905 */ DEFINE_SFX(NA_SE_PL_DUMMY_261, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x906 */ DEFINE_SFX(NA_SE_PL_DUMMY_262, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x907 */ DEFINE_SFX(NA_SE_PL_DUMMY_263, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x908 */ DEFINE_SFX(NA_SE_PL_DUMMY_264, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x909 */ DEFINE_SFX(NA_SE_PL_DUMMY_265, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x90A */ DEFINE_SFX(NA_SE_PL_DUMMY_266, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x90B */ DEFINE_SFX(NA_SE_PL_DUMMY_267, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x90C */ DEFINE_SFX(NA_SE_PL_DUMMY_268, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x90D */ DEFINE_SFX(NA_SE_PL_DUMMY_269, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x90E */ DEFINE_SFX(NA_SE_PL_DUMMY_270, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x90F */ DEFINE_SFX(NA_SE_PL_DUMMY_271, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x910 */ DEFINE_SFX(NA_SE_PL_DUMMY_272, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x911 */ DEFINE_SFX(NA_SE_PL_DUMMY_273, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x912 */ DEFINE_SFX(NA_SE_PL_DUMMY_274, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x913 */ DEFINE_SFX(NA_SE_PL_DUMMY_275, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x914 */ DEFINE_SFX(NA_SE_PL_DUMMY_276, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x915 */ DEFINE_SFX(NA_SE_PL_DUMMY_277, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x916 */ DEFINE_SFX(NA_SE_PL_DUMMY_278, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x917 */ DEFINE_SFX(NA_SE_PL_DUMMY_279, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x918 */ DEFINE_SFX(NA_SE_PL_DUMMY_280, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x919 */ DEFINE_SFX(NA_SE_PL_DUMMY_281, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x91A */ DEFINE_SFX(NA_SE_PL_DUMMY_282, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x91B */ DEFINE_SFX(NA_SE_PL_DUMMY_283, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x91C */ DEFINE_SFX(NA_SE_PL_DUMMY_284, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x91D */ DEFINE_SFX(NA_SE_PL_DUMMY_285, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x91E */ DEFINE_SFX(NA_SE_PL_DUMMY_286, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x91F */ DEFINE_SFX(NA_SE_PL_DUMMY_287, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x920 */ DEFINE_SFX(NA_SE_PL_DUMMY_288, 0x20, 0, 2, 0, SFX_FLAG_10)
/* 0x921 */ DEFINE_SFX(NA_SE_PL_DUMMY_289, 0x20, 0, 2, 0, SFX_FLAG_10)
/* 0x922 */ DEFINE_SFX(NA_SE_PL_DUMMY_290, 0x20, 0, 2, 0, SFX_FLAG_10)
/* 0x923 */ DEFINE_SFX(NA_SE_PL_DUMMY_291, 0x20, 0, 2, 0, SFX_FLAG_10)
/* 0x924 */ DEFINE_SFX(NA_SE_PL_DUMMY_292, 0x20, 0, 1, 0, SFX_FLAG_10)
/* 0x925 */ DEFINE_SFX(NA_SE_PL_DUMMY_293, 0x20, 0, 1, 0, SFX_FLAG_10)
/* 0x926 */ DEFINE_SFX(NA_SE_PL_DUMMY_294, 0x20, 0, 1, 0, SFX_FLAG_10)
/* 0x927 */ DEFINE_SFX(NA_SE_PL_DUMMY_295, 0x20, 0, 1, 0, SFX_FLAG_10)
/* 0x928 */ DEFINE_SFX(NA_SE_PL_DUMMY_296, 0x20, 0, 2, 0, SFX_FLAG_10)
/* 0x929 */ DEFINE_SFX(NA_SE_PL_DUMMY_297, 0x20, 0, 1, 0, SFX_FLAG_10)
/* 0x92A */ DEFINE_SFX(NA_SE_PL_DUMMY_298, 0x20, 0, 2, 0, SFX_FLAG_10)
/* 0x92B */ DEFINE_SFX(NA_SE_PL_DUMMY_299, 0x20, 0, 0, 0, SFX_FLAG_10)
/* 0x92C */ DEFINE_SFX(NA_SE_PL_DUMMY_300, 0x20, 0, 0, 0, SFX_FLAG_10)
/* 0x92D */ DEFINE_SFX(NA_SE_PL_DUMMY_301, 0x20, 0, 0, 0, SFX_FLAG_10)
/* 0x92E */ DEFINE_SFX(NA_SE_PL_DUMMY_302, 0x20, 0, 0, 0, SFX_FLAG_10)
/* 0x92F */ DEFINE_SFX(NA_SE_PL_DUMMY_303, 0x20, 0, 0, 0, SFX_FLAG_10)
/* 0x930 */ DEFINE_SFX(NA_SE_PL_DUMMY_304, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x931 */ DEFINE_SFX(NA_SE_PL_DUMMY_305, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x932 */ DEFINE_SFX(NA_SE_PL_DUMMY_306, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x933 */ DEFINE_SFX(NA_SE_PL_DUMMY_307, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x934 */ DEFINE_SFX(NA_SE_PL_DUMMY_308, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x935 */ DEFINE_SFX(NA_SE_PL_DUMMY_309, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x936 */ DEFINE_SFX(NA_SE_PL_DUMMY_310, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x937 */ DEFINE_SFX(NA_SE_PL_DUMMY_311, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x938 */ DEFINE_SFX(NA_SE_PL_DUMMY_312, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x939 */ DEFINE_SFX(NA_SE_PL_DUMMY_313, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x93A */ DEFINE_SFX(NA_SE_PL_DUMMY_314, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x93B */ DEFINE_SFX(NA_SE_PL_DUMMY_315, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x93C */ DEFINE_SFX(NA_SE_PL_DUMMY_316, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x93D */ DEFINE_SFX(NA_SE_PL_DUMMY_317, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x93E */ DEFINE_SFX(NA_SE_PL_DUMMY_318, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x93F */ DEFINE_SFX(NA_SE_PL_DUMMY_319, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x940 */ DEFINE_SFX(NA_SE_PL_DUMMY_320, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x941 */ DEFINE_SFX(NA_SE_PL_DUMMY_321, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x942 */ DEFINE_SFX(NA_SE_PL_DUMMY_322, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x943 */ DEFINE_SFX(NA_SE_PL_DUMMY_323, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x944 */ DEFINE_SFX(NA_SE_PL_DUMMY_324, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x945 */ DEFINE_SFX(NA_SE_PL_DUMMY_325, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x946 */ DEFINE_SFX(NA_SE_PL_DUMMY_326, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x947 */ DEFINE_SFX(NA_SE_PL_DUMMY_327, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x948 */ DEFINE_SFX(NA_SE_PL_DUMMY_328, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x949 */ DEFINE_SFX(NA_SE_PL_DUMMY_329, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x94A */ DEFINE_SFX(NA_SE_PL_DUMMY_330, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x94B */ DEFINE_SFX(NA_SE_PL_DUMMY_331, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x94C */ DEFINE_SFX(NA_SE_PL_DUMMY_332, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x94D */ DEFINE_SFX(NA_SE_PL_DUMMY_333, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x94E */ DEFINE_SFX(NA_SE_PL_DUMMY_334, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x94F */ DEFINE_SFX(NA_SE_PL_DUMMY_335, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x950 */ DEFINE_SFX(NA_SE_PL_DUMMY_336, 0x20, 0, 2, 0, SFX_FLAG_10)
/* 0x951 */ DEFINE_SFX(NA_SE_PL_DUMMY_337, 0x20, 0, 2, 0, SFX_FLAG_10)
/* 0x952 */ DEFINE_SFX(NA_SE_PL_DUMMY_338, 0x20, 0, 2, 0, SFX_FLAG_10)
/* 0x953 */ DEFINE_SFX(NA_SE_PL_DUMMY_339, 0x20, 0, 2, 0, SFX_FLAG_10)
/* 0x954 */ DEFINE_SFX(NA_SE_PL_DUMMY_340, 0x20, 0, 1, 0, SFX_FLAG_10)
/* 0x955 */ DEFINE_SFX(NA_SE_PL_DUMMY_341, 0x20, 0, 1, 0, SFX_FLAG_10)
/* 0x956 */ DEFINE_SFX(NA_SE_PL_DUMMY_342, 0x20, 0, 1, 0, SFX_FLAG_10)
/* 0x957 */ DEFINE_SFX(NA_SE_PL_DUMMY_343, 0x20, 0, 1, 0, SFX_FLAG_10)
/* 0x958 */ DEFINE_SFX(NA_SE_PL_DUMMY_344, 0x20, 0, 2, 0, SFX_FLAG_10)
/* 0x959 */ DEFINE_SFX(NA_SE_PL_DUMMY_345, 0x20, 0, 1, 0, SFX_FLAG_10)
/* 0x95A */ DEFINE_SFX(NA_SE_PL_DUMMY_346, 0x20, 0, 2, 0, SFX_FLAG_10)
/* 0x95B */ DEFINE_SFX(NA_SE_PL_DUMMY_347, 0x20, 0, 0, 0, SFX_FLAG_10)
/* 0x95C */ DEFINE_SFX(NA_SE_PL_DUMMY_348, 0x20, 0, 0, 0, SFX_FLAG_10)
/* 0x95D */ DEFINE_SFX(NA_SE_PL_DUMMY_349, 0x20, 0, 0, 0, SFX_FLAG_10)
/* 0x95E */ DEFINE_SFX(NA_SE_PL_DUMMY_350, 0x20, 0, 0, 0, SFX_FLAG_10)
/* 0x95F */ DEFINE_SFX(NA_SE_PL_DUMMY_351, 0x20, 0, 0, 0, SFX_FLAG_10)
/* 0x960 */ DEFINE_SFX(NA_SE_EV_MARATHONMAN_RISE, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x961 */ DEFINE_SFX(NA_SE_PL_DUMMY_353, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x962 */ DEFINE_SFX(NA_SE_PL_DUMMY_354, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x963 */ DEFINE_SFX(NA_SE_PL_DUMMY_355, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x964 */ DEFINE_SFX(NA_SE_PL_DUMMY_356, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x965 */ DEFINE_SFX(NA_SE_PL_DUMMY_357, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x966 */ DEFINE_SFX(NA_SE_PL_DUMMY_358, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x967 */ DEFINE_SFX(NA_SE_PL_DUMMY_359, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x968 */ DEFINE_SFX(NA_SE_PL_DUMMY_360, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x969 */ DEFINE_SFX(NA_SE_PL_DUMMY_361, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x96A */ DEFINE_SFX(NA_SE_PL_DUMMY_362, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x96B */ DEFINE_SFX(NA_SE_PL_DUMMY_363, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x96C */ DEFINE_SFX(NA_SE_PL_DUMMY_364, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x96D */ DEFINE_SFX(NA_SE_PL_DUMMY_365, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x96E */ DEFINE_SFX(NA_SE_PL_DUMMY_366, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x96F */ DEFINE_SFX(NA_SE_PL_DUMMY_367, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x970 */ DEFINE_SFX(NA_SE_EV_MARATHONMAN_LAND, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x971 */ DEFINE_SFX(NA_SE_PL_DUMMY_369, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x972 */ DEFINE_SFX(NA_SE_PL_DUMMY_370, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x973 */ DEFINE_SFX(NA_SE_PL_DUMMY_371, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x974 */ DEFINE_SFX(NA_SE_PL_DUMMY_372, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x975 */ DEFINE_SFX(NA_SE_PL_DUMMY_373, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x976 */ DEFINE_SFX(NA_SE_PL_DUMMY_374, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x977 */ DEFINE_SFX(NA_SE_PL_DUMMY_375, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x978 */ DEFINE_SFX(NA_SE_PL_DUMMY_376, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x979 */ DEFINE_SFX(NA_SE_PL_DUMMY_377, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x97A */ DEFINE_SFX(NA_SE_PL_DUMMY378, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x97B */ DEFINE_SFX(NA_SE_PL_DUMMY_379, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x97C */ DEFINE_SFX(NA_SE_PL_DUMMY_380, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x97D */ DEFINE_SFX(NA_SE_PL_DUMMY_381, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x97E */ DEFINE_SFX(NA_SE_PL_DUMMY_382, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x97F */ DEFINE_SFX(NA_SE_PL_DUMMY_383, 0x40, 0, 1, 0, SFX_FLAG_10)
/* 0x980 */ DEFINE_SFX(NA_SE_PL_GORON_CHG_ROLL, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x981 */ DEFINE_SFX(NA_SE_PL_DUMMY_385, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x982 */ DEFINE_SFX(NA_SE_PL_DUMMY_386, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x983 */ DEFINE_SFX(NA_SE_PL_DUMMY_387, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x984 */ DEFINE_SFX(NA_SE_PL_DUMMY_388, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x985 */ DEFINE_SFX(NA_SE_PL_DUMMY_389, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x986 */ DEFINE_SFX(NA_SE_PL_DUMMY_390, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x987 */ DEFINE_SFX(NA_SE_PL_DUMMY_391, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x988 */ DEFINE_SFX(NA_SE_PL_DUMMY_392, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x989 */ DEFINE_SFX(NA_SE_PL_DUMMY_393, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x98A */ DEFINE_SFX(NA_SE_PL_DUMMY_394, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x98B */ DEFINE_SFX(NA_SE_PL_DUMMY_395, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x98C */ DEFINE_SFX(NA_SE_PL_DUMMY_396, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x98D */ DEFINE_SFX(NA_SE_PL_DUMMY_397, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x98E */ DEFINE_SFX(NA_SE_PL_DUMMY_398, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x98F */ DEFINE_SFX(NA_SE_PL_GORON_CHG_ROLL_ICE, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x990 */ DEFINE_SFX(NA_SE_PL_GORON_ROLL, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x991 */ DEFINE_SFX(NA_SE_PL_DUMMY_401, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x992 */ DEFINE_SFX(NA_SE_PL_DUMMY_402, 0x50, 0, 0, 0, SFX_FLAG_10)
/* 0x993 */ DEFINE_SFX(NA_SE_PL_DUMMY_403, 0x50, 0, 0, 0, SFX_FLAG_10)
/* 0x994 */ DEFINE_SFX(NA_SE_PL_DUMMY_404, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x995 */ DEFINE_SFX(NA_SE_PL_DUMMY_405, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x996 */ DEFINE_SFX(NA_SE_PL_DUMMY_406, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x997 */ DEFINE_SFX(NA_SE_PL_DUMMY_407, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x998 */ DEFINE_SFX(NA_SE_PL_DUMMY_408, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x999 */ DEFINE_SFX(NA_SE_PL_DUMMY_409, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x99A */ DEFINE_SFX(NA_SE_PL_DUMMY_410, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x99B */ DEFINE_SFX(NA_SE_PL_DUMMY_411, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x99C */ DEFINE_SFX(NA_SE_PL_DUMMY_412, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x99D */ DEFINE_SFX(NA_SE_PL_DUMMY_413, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x99E */ DEFINE_SFX(NA_SE_PL_DUMMY_414, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x99F */ DEFINE_SFX(NA_SE_PL_GORON_ROLL_ICE, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x9A0 */ DEFINE_SFX(NA_SE_PL_DEKUNUTS_BUD, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x9A1 */ DEFINE_SFX(NA_SE_PL_DEKUNUTS_BUBLE_BREATH, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x9A2 */ DEFINE_SFX(NA_SE_PL_GORON_BALL_CHARGE_FAILED, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x9A3 */ DEFINE_SFX(NA_SE_PL_GORON_BALL_CHARGE_DASH, 0x60, 0, 0, 0, SFX_FLAG_10)
/* 0x9A4 */ DEFINE_SFX(NA_SE_PL_FACE_CHANGE, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x9A5 */ DEFINE_SFX(NA_SE_PL_FACE_UP_S, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x9A6 */ DEFINE_SFX(NA_SE_PL_DEKUNUTS_STRUGGLE, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x9A7 */ DEFINE_SFX(NA_SE_PL_WARP_PLATE, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x9A8 */ DEFINE_SFX(NA_SE_PL_WARP_PLATE_OUT, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x9A9 */ DEFINE_SFX(NA_SE_PL_DEKUNUTS_ATTACK, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x9AA */ DEFINE_SFX(NA_SE_PL_TRANSFORM_VOICE, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x9AB */ DEFINE_SFX(NA_SE_PL_FACE_RETURN, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x9AC */ DEFINE_SFX(NA_SE_PL_DEKUNUTS_DROP_BOMB, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x9AD */ DEFINE_SFX(NA_SE_PL_GORON_SLIP, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x9AE */ DEFINE_SFX(NA_SE_PL_ROLL_SNOW_DUST, 0x30, 0, 2, 0, SFX_FLAG_14)
/* 0x9AF */ DEFINE_SFX(NA_SE_PL_ZORA_SPARK_BARRIER, 0x40, 3, 0, 0, SFX_FLAG_10)
/* 0x9B0 */ DEFINE_SFX(NA_SE_PL_DEKUNUTS_JUMP, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x9B1 */ DEFINE_SFX(NA_SE_PL_DEKUNUTS_JUMP2, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x9B2 */ DEFINE_SFX(NA_SE_PL_DEKUNUTS_JUMP3, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x9B3 */ DEFINE_SFX(NA_SE_PL_DEKUNUTS_JUMP4, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x9B4 */ DEFINE_SFX(NA_SE_PL_DEKUNUTS_JUMP5, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x9B5 */ DEFINE_SFX(NA_SE_PL_DEKUNUTS_JUMP6, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x9B6 */ DEFINE_SFX(NA_SE_PL_DEKUNUTS_JUMP7, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x9B7 */ DEFINE_SFX(NA_SE_PL_DEKUNUTS_JUMP8, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x9B8 */ DEFINE_SFX(NA_SE_PL_GORON_STOMACH_EXPLOSION, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x9B9 */ DEFINE_SFX(NA_SE_PL_GORON_DRINK_BOMB, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x9BA */ DEFINE_SFX(NA_SE_PL_GET_UP, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x9BB */ DEFINE_SFX(NA_SE_PL_WARP_WING_OPEN, 0x30, 0, 0, 0, SFX_FLAG_13 | SFX_FLAG_10)
/* 0x9BC */ DEFINE_SFX(NA_SE_PL_WARP_WING_CLOSE, 0x30, 0, 0, 0, SFX_FLAG_13 | SFX_FLAG_10)
/* 0x9BD */ DEFINE_SFX(NA_SE_PL_WARP_WING_ROLL, 0x30, 0, 0, 0, SFX_FLAG_13 | SFX_FLAG_10)
/* 0x9BE */ DEFINE_SFX(NA_SE_PL_WARP_WING_VANISH, 0x30, 0, 0, 0, SFX_FLAG_13 | SFX_FLAG_10)
/* 0x9BF */ DEFINE_SFX(NA_SE_PL_DEKUNUTS_MISS_FIRE, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x9C0 */ DEFINE_SFX(NA_SE_PL_FLYING_AIR, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x9C1 */ DEFINE_SFX(NA_SE_PL_FIREWORKS, 0x30, 3, 1, 0, 0)
/* 0x9C2 */ DEFINE_SFX(NA_SE_PL_FIREWORKS_DUMMY, 0x30, 3, 1, 0, 0)
/* 0x9C3 */ DEFINE_SFX(NA_SE_PL_PULL_UP_SNOWBALL, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x9C4 */ DEFINE_SFX(NA_SE_PL_WARP_WING_ROLL_2, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x9C5 */ DEFINE_SFX(NA_SE_PL_TRANSFORM_GIANT, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x9C6 */ DEFINE_SFX(NA_SE_PL_TRANSFORM_NORAML, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x9C7 */ DEFINE_SFX(NA_SE_PL_LI_OKARINATORI, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x9C8 */ DEFINE_SFX(NA_SE_PL_LI_FUTTOBI, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x9C9 */ DEFINE_SFX(NA_SE_PL_LI_OP_OKIAGARI, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x9CA */ DEFINE_SFX(NA_SE_PL_LI_OP_TATIAGARI, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x9CB */ DEFINE_SFX(NA_SE_PL_JUMP_METAL, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x9CC */ DEFINE_SFX(NA_SE_PL_LAND_METAL, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x9CD */ DEFINE_SFX(NA_SE_PL_BOUND_METAL, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x9CE */ DEFINE_SFX(NA_SE_PL_WALK_WALL, 0x30, 0, 0, 0, SFX_FLAG_10)
/* 0x9CF */ DEFINE_SFX(NA_SE_PL_WALK_WALL_DEKU, 0x30, 0, 0, 0, SFX_FLAG_10)
+109
View File
@@ -0,0 +1,109 @@
/**
* Sfx System Bank
*
* DEFINE_SFX should be used for all sfx define in the system bank from sequence 0
* - Argument 0: Enum value for this sfx
* - Argument 1: Importance for deciding which sfx to prioritize. Higher values have greater importance
* - Argument 2: Slows the decay of volume with distance (a 3-bit number ranging from 0-7)
* - Argument 3: Applies increasingly random offsets to frequency (a 2-bit number ranging from 0-3)
* - Argument 4: Various flags to add properties to the sfx
* - Argument 5: Various flags to add properties to the sfx
*
* WARNING: entries must align with the table defined for the system bank in sequence 0
*/
/* 0x4800 */ DEFINE_SFX(NA_SE_SY_WIN_OPEN, 0xC0, 0, 0, 0, 0)
/* 0x4801 */ DEFINE_SFX(NA_SE_SY_WIN_CLOSE, 0xC0, 0, 0, 0, 0)
/* 0x4802 */ DEFINE_SFX(NA_SE_SY_CORRECT_CHIME, 0xB0, 0, 0, 0, SFX_FLAG_5)
/* 0x4803 */ DEFINE_SFX(NA_SE_SY_GET_RUPY, 0x30, 0, 0, 0, 0)
/* 0x4804 */ DEFINE_SFX(NA_SE_SY_MESSAGE_WOMAN, 0x30, 0, 0, 0, 0)
/* 0x4805 */ DEFINE_SFX(NA_SE_SY_MESSAGE_MAN, 0x30, 0, 0, 0, 0)
/* 0x4806 */ DEFINE_SFX(NA_SE_SY_ERROR, 0x50, 0, 0, 0, 0)
/* 0x4807 */ DEFINE_SFX(NA_SE_SY_TRE_BOX_APPEAR, 0x30, 0, 0, 0, SFX_FLAG_5)
/* 0x4808 */ DEFINE_SFX(NA_SE_SY_DECIDE, 0x30, 0, 0, 0, 0)
/* 0x4809 */ DEFINE_SFX(NA_SE_SY_CURSOR, 0x30, 0, 0, 0, 0)
/* 0x480A */ DEFINE_SFX(NA_SE_SY_CANCEL, 0x30, 0, 0, 0, 0)
/* 0x480B */ DEFINE_SFX(NA_SE_SY_HP_RECOVER, 0x30, 0, 0, 0, 0)
/* 0x480C */ DEFINE_SFX(NA_SE_SY_ATTENTION_ON, 0x20, 0, 0, 0, 0)
/* 0x480D */ DEFINE_SFX(NA_SE_SY_DUMMY_13, 0x30, 0, 0, 0, 0)
/* 0x480E */ DEFINE_SFX(NA_SE_SY_DUMMY_14, 0x30, 0, 0, 0, 0)
/* 0x480F */ DEFINE_SFX(NA_SE_SY_LOCK_OFF, 0x30, 0, 0, 0, 0)
/* 0x4810 */ DEFINE_SFX(NA_SE_SY_LOCK_ON_HUMAN, 0x28, 0, 0, 0, 0)
/* 0x4811 */ DEFINE_SFX(NA_SE_SY_DUMMY_17, 0x30, 0, 0, 0, 0)
/* 0x4812 */ DEFINE_SFX(NA_SE_SY_DUMMY_18, 0x30, 0, 0, 0, 0)
/* 0x4813 */ DEFINE_SFX(NA_SE_SY_CAMERA_ZOOM_UP, 0x30, 0, 0, 0, 0)
/* 0x4814 */ DEFINE_SFX(NA_SE_SY_CAMERA_ZOOM_DOWN, 0x30, 0, 0, 0, 0)
/* 0x4815 */ DEFINE_SFX(NA_SE_SY_DUMMY_21, 0x30, 0, 0, 0, 0)
/* 0x4816 */ DEFINE_SFX(NA_SE_SY_DUMMY_22, 0x30, 0, 0, 0, 0)
/* 0x4817 */ DEFINE_SFX(NA_SE_SY_ATTENTION_ON_OLD, 0x30, 0, 0, 0, 0)
/* 0x4818 */ DEFINE_SFX(NA_SE_SY_MESSAGE_PASS, 0x18, 0, 0, 0, 0)
/* 0x4819 */ DEFINE_SFX(NA_SE_SY_WARNING_COUNT_N, 0x2C, 0, 0, 0, 0)
/* 0x481A */ DEFINE_SFX(NA_SE_SY_WARNING_COUNT_E, 0x2C, 0, 0, 0, 0)
/* 0x481B */ DEFINE_SFX(NA_SE_SY_HITPOINT_ALARM, 0x20, 0, 0, 0, 0)
/* 0x481C */ DEFINE_SFX(NA_SE_SY_DUMMY_28, 0x30, 0, 0, 0, 0)
/* 0x481D */ DEFINE_SFX(NA_SE_SY_DEMO_CUT, 0x30, 0, 0, 0, 0)
/* 0x481E */ DEFINE_SFX(NA_SE_SY_NAVY_CALL, 0x30, 0, 0, 0, 0)
/* 0x481F */ DEFINE_SFX(NA_SE_SY_GAUGE_UP, 0x30, 0, 0, 0, 0)
/* 0x4820 */ DEFINE_SFX(NA_SE_SY_DUMMY_32, 0x30, 0, 0, 0, 0)
/* 0x4821 */ DEFINE_SFX(NA_SE_SY_DUMMY_33, 0x30, 0, 0, 0, 0)
/* 0x4822 */ DEFINE_SFX(NA_SE_SY_DUMMY_34, 0x30, 0, 0, 0, 0)
/* 0x4823 */ DEFINE_SFX(NA_SE_SY_PIECE_OF_HEART, 0x30, 0, 0, 0, 0)
/* 0x4824 */ DEFINE_SFX(NA_SE_SY_GET_ITEM, 0x30, 0, 0, 0, 0)
/* 0x4825 */ DEFINE_SFX(NA_SE_SY_WIN_SCROLL_LEFT, 0x30, 0, 0, 0, 0)
/* 0x4826 */ DEFINE_SFX(NA_SE_SY_WIN_SCROLL_RIGHT, 0x30, 0, 0, 0, 0)
/* 0x4827 */ DEFINE_SFX(NA_SE_SY_OCARINA_ERROR, 0x20, 0, 0, 0, 0)
/* 0x4828 */ DEFINE_SFX(NA_SE_SY_CAMERA_ZOOM_UP_2, 0x30, 0, 0, 0, 0)
/* 0x4829 */ DEFINE_SFX(NA_SE_SY_CAMERA_ZOOM_DOWN_2, 0x30, 0, 0, 0, 0)
/* 0x482A */ DEFINE_SFX(NA_SE_SY_GLASSMODE_ON, 0x30, 0, 0, 0, 0)
/* 0x482B */ DEFINE_SFX(NA_SE_SY_GLASSMODE_OFF, 0x30, 0, 0, 0, 0)
/* 0x482C */ DEFINE_SFX(NA_SE_SY_FOUND, 0x60, 0, 0, 0, 0)
/* 0x482D */ DEFINE_SFX(NA_SE_SY_HIT_SOUND, 0x30, 0, 0, 0, 0)
/* 0x482E */ DEFINE_SFX(NA_SE_SY_MESSAGE_END, 0x30, 0, 0, 0, 0)
/* 0x482F */ DEFINE_SFX(NA_SE_SY_RUPY_COUNT, 0x30, 0, 0, 0, 0)
/* 0x4830 */ DEFINE_SFX(NA_SE_SY_LOCK_ON, 0x30, 0, 0, 0, 0)
/* 0x4831 */ DEFINE_SFX(NA_SE_SY_GET_BOXITEM, 0x30, 0, 0, 0, 0)
/* 0x4832 */ DEFINE_SFX(NA_SE_SY_WHITE_OUT_INTO_MOON, 0x30, 0, 0, 0, 0)
/* 0x4833 */ DEFINE_SFX(NA_SE_SY_WHITE_OUT_S, 0x30, 0, 0, 0, 0)
/* 0x4834 */ DEFINE_SFX(NA_SE_SY_WHITE_OUT_T, 0x30, 0, 0, 0, 0)
/* 0x4835 */ DEFINE_SFX(NA_SE_SY_START_SHOT, 0x30, 0, 0, 0, 0)
/* 0x4836 */ DEFINE_SFX(NA_SE_SY_METRONOME, 0x30, 0, 0, 0, 0)
/* 0x4837 */ DEFINE_SFX(NA_SE_SY_ATTENTION_URGENCY, 0x30, 0, 0, 0, 0)
/* 0x4838 */ DEFINE_SFX(NA_SE_SY_METRONOME_LV, 0x30, 0, 0, 0, 0)
/* 0x4839 */ DEFINE_SFX(NA_SE_SY_FSEL_CURSOR, 0x30, 0, 0, 0, 0)
/* 0x483A */ DEFINE_SFX(NA_SE_SY_FSEL_DECIDE_S, 0x30, 0, 0, 0, 0)
/* 0x483B */ DEFINE_SFX(NA_SE_SY_FSEL_DECIDE_L, 0x30, 0, 0, 0, 0)
/* 0x483C */ DEFINE_SFX(NA_SE_SY_FSEL_CLOSE, 0x30, 0, 0, 0, 0)
/* 0x483D */ DEFINE_SFX(NA_SE_SY_FSEL_ERROR, 0x30, 0, 0, 0, 0)
/* 0x483E */ DEFINE_SFX(NA_SE_SY_SET_FIRE_ARROW, 0x30, 0, 0, 0, 0)
/* 0x483F */ DEFINE_SFX(NA_SE_SY_SET_ICE_ARROW, 0x30, 0, 0, 0, 0)
/* 0x4840 */ DEFINE_SFX(NA_SE_SY_SET_LIGHT_ARROW, 0x30, 0, 0, 0, 0)
/* 0x4841 */ DEFINE_SFX(NA_SE_SY_SYNTH_MAGIC_ARROW, 0x30, 0, 0, 0, 0)
/* 0x4842 */ DEFINE_SFX(NA_SE_SY_METRONOME_2, 0x30, 0, 0, 0, 0)
/* 0x4843 */ DEFINE_SFX(NA_SE_SY_KINSTA_MARK_APPEAR, 0x30, 0, 0, 0, 0)
/* 0x4844 */ DEFINE_SFX(NA_SE_SY_FIVE_COUNT_LUPY, 0x30, 0, 0, 0, 0)
/* 0x4845 */ DEFINE_SFX(NA_SE_SY_CARROT_RECOVER, 0x30, 0, 0, 0, 0)
/* 0x4846 */ DEFINE_SFX(NA_SE_EV_FAIVE_LUPY_COUNT, 0x30, 0, 0, 0, 0)
/* 0x4847 */ DEFINE_SFX(NA_SE_SY_METRONOME_TEMPO, 0x30, 0, 0, 0, 0)
/* 0x4848 */ DEFINE_SFX(NA_SE_SY_COMICAL_SOUND0_0, 0x30, 0, 0, 0, 0)
/* 0x4849 */ DEFINE_SFX(NA_SE_SY_COMICAL_SOUND0_1, 0x30, 0, 0, 0, 0)
/* 0x484A */ DEFINE_SFX(NA_SE_SY_COMICAL_SOUND0_LAST, 0x30, 0, 0, 0, 0)
/* 0x484B */ DEFINE_SFX(NA_SE_SY_SOUT_DEMO, 0x30, 0, 0, 0, 0)
/* 0x484C */ DEFINE_SFX(NA_SE_SY_TIMESIGNAL_BELL, 0x30, 0, 0, 0, 0)
/* 0x484D */ DEFINE_SFX(NA_SE_SY_DEKUNUTS_JUMP_FAILED, 0x30, 0, 0, 0, 0)
/* 0x484E */ DEFINE_SFX(NA_SE_SY_ATTENTION_SOUND, 0x30, 0, 0, 0, 0)
/* 0x484F */ DEFINE_SFX(NA_SE_SY_TRANSFORM_MASK_FLASH, 0x30, 0, 0, 0, 0)
/* 0x4850 */ DEFINE_SFX(NA_SE_SY_CAMERA_SHUTTER, 0x30, 0, 0, 0, 0)
/* 0x4851 */ DEFINE_SFX(NA_SE_SY_STALKIDS_PSYCHO, 0x60, 0, 0, 0, 0)
/* 0x4852 */ DEFINE_SFX(NA_SE_SY_CHICK_JOIN_CHIME, 0x30, 0, 0, 0, 0)
/* 0x4853 */ DEFINE_SFX(NA_SE_SY_HIT_SOUND_L, 0x30, 0, 0, 0, 0)
/* 0x4854 */ DEFINE_SFX(NA_SE_SY_FAIRY_MASK_SUCCESS, 0x30, 0, 0, 0, SFX_FLAG_5)
/* 0x4855 */ DEFINE_SFX(NA_SE_SY_SCHEDULE_WRITE, 0x60, 0, 0, 0, 0)
/* 0x4856 */ DEFINE_SFX(NA_SE_SY_STOPWATCH_TIMER_3, 0x30, 0, 0, 0, 0)
/* 0x4857 */ DEFINE_SFX(NA_SE_SY_STOPWATCH_TIMER_INF, 0x30, 0, 0, 0, 0)
/* 0x4858 */ DEFINE_SFX(NA_SE_SY_EARTHQUAKE_OUTDOOR, 0x30, 0, 0, 0, 0)
/* 0x4859 */ DEFINE_SFX(NA_SE_SY_SPIRAL_DASH, 0x30, 0, 0, 0, 0)
/* 0x485A */ DEFINE_SFX(NA_SE_SY_QUIZ_CORRECT, 0x30, 0, 0, 0, 0)
/* 0x485B */ DEFINE_SFX(NA_SE_SY_QUIZ_INCORRECT, 0x30, 0, 0, 0, 0)
/* 0x485C */ DEFINE_SFX(NA_SE_SY_DIZZY_EFFECT, 0x30, 0, 0, 0, 0)
/* 0x485D */ DEFINE_SFX(NA_SE_SY_TIME_CONTROL_SLOW, 0xA0, 0, 0, 0, SFX_FLAG_3)
/* 0x485E */ DEFINE_SFX(NA_SE_SY_TIME_CONTROL_NORMAL, 0xA0, 0, 0, 0, SFX_FLAG_3)
/* 0x485F */ DEFINE_SFX(NA_SE_SY_SECOM_WARNING, 0x30, 0, 0, 0, 0)
+413
View File
@@ -0,0 +1,413 @@
/**
* Sfx Voice Bank
*
* DEFINE_SFX should be used for all sfx define in the voice bank from sequence 0
* - Argument 0: Enum value for this sfx
* - Argument 1: Importance for deciding which sfx to prioritize. Higher values have greater importance
* - Argument 2: Slows the decay of volume with distance (a 3-bit number ranging from 0-7)
* - Argument 3: Applies increasingly random offsets to frequency (a 2-bit number ranging from 0-3)
* - Argument 4: Various flags to add properties to the sfx
* - Argument 5: Various flags to add properties to the sfx
*
* WARNING: entries must align with the table defined for the voice bank in sequence 0
*/
/* 0x6800 */ DEFINE_SFX(NA_SE_VO_LI_SWORD_N, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6801 */ DEFINE_SFX(NA_SE_VO_LI_SWORD_L, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6802 */ DEFINE_SFX(NA_SE_VO_LI_LASH, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6803 */ DEFINE_SFX(NA_SE_VO_LI_HANG, 0x20, 2, 0, 0, SFX_FLAG_10)
/* 0x6804 */ DEFINE_SFX(NA_SE_VO_LI_CLIMB_END, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6805 */ DEFINE_SFX(NA_SE_VO_LI_DAMAGE_S, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6806 */ DEFINE_SFX(NA_SE_VO_LI_FREEZE, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6807 */ DEFINE_SFX(NA_SE_VO_LI_FALL_S, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6808 */ DEFINE_SFX(NA_SE_VO_LI_FALL_L, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6809 */ DEFINE_SFX(NA_SE_VO_LI_BREATH_REST, 0x30, 2, 1, 0, SFX_FLAG_10)
/* 0x680A */ DEFINE_SFX(NA_SE_VO_LI_BREATH_DRINK, 0x30, 2, 1, 0, SFX_FLAG_10)
/* 0x680B */ DEFINE_SFX(NA_SE_VO_LI_DOWN, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x680C */ DEFINE_SFX(NA_SE_VO_LI_TAKEN_AWAY, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x680D */ DEFINE_SFX(NA_SE_VO_LI_HELD, 0x50, 2, 0, 0, SFX_FLAG_10)
/* 0x680E */ DEFINE_SFX(NA_SE_VO_LI_SNEEZE, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x680F */ DEFINE_SFX(NA_SE_VO_LI_SWEAT, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6810 */ DEFINE_SFX(NA_SE_VO_LI_DRINK, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6811 */ DEFINE_SFX(NA_SE_VO_LI_RELAX, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6812 */ DEFINE_SFX(NA_SE_VO_LI_SWORD_PUTAWAY, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6813 */ DEFINE_SFX(NA_SE_VO_LI_GROAN, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6814 */ DEFINE_SFX(NA_SE_VO_LI_AUTO_JUMP, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6815 */ DEFINE_SFX(NA_SE_VO_LI_MAGIC_NALE, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6816 */ DEFINE_SFX(NA_SE_VO_LI_SURPRISE, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6817 */ DEFINE_SFX(NA_SE_VO_LI_MAGIC_FROL, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6818 */ DEFINE_SFX(NA_SE_VO_LI_PUSH, 0x30, 2, 2, 0, SFX_FLAG_10)
/* 0x6819 */ DEFINE_SFX(NA_SE_VO_LI_HOOKSHOT_HANG, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x681A */ DEFINE_SFX(NA_SE_VO_LI_LAND_DAMAGE_S, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x681B */ DEFINE_SFX(NA_SE_VO_LI_MAGIC_START, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x681C */ DEFINE_SFX(NA_SE_VO_LI_MAGIC_ATTACK, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x681D */ DEFINE_SFX(NA_SE_VO_BL_DOWN, 0x80, 2, 0, 0, SFX_FLAG_10)
/* 0x681E */ DEFINE_SFX(NA_SE_VO_LI_DEMO_DAMAGE, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x681F */ DEFINE_SFX(NA_SE_VO_LI_SWORD_N_copy30, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6820 */ DEFINE_SFX(NA_SE_VO_DUMMY_32, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6821 */ DEFINE_SFX(NA_SE_VO_DUMMY_33, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6822 */ DEFINE_SFX(NA_SE_VO_DUMMY_34, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6823 */ DEFINE_SFX(NA_SE_VO_DUMMY_35, 0x20, 2, 0, 0, SFX_FLAG_10)
/* 0x6824 */ DEFINE_SFX(NA_SE_VO_DUMMY_36, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6825 */ DEFINE_SFX(NA_SE_VO_DUMMY_37, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6826 */ DEFINE_SFX(NA_SE_VO_DUMMY_38, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6827 */ DEFINE_SFX(NA_SE_VO_DUMMY_39, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6828 */ DEFINE_SFX(NA_SE_VO_NAVY_ENEMY, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6829 */ DEFINE_SFX(NA_SE_VO_NAVY_HELLO, 0x30, 2, 1, 0, SFX_FLAG_10)
/* 0x682A */ DEFINE_SFX(NA_SE_VO_NAVY_HEAR, 0x30, 2, 1, 0, SFX_FLAG_10)
/* 0x682B */ DEFINE_SFX(NA_SE_VO_DUMMY_43, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x682C */ DEFINE_SFX(NA_SE_VO_DUMMY_44, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x682D */ DEFINE_SFX(NA_SE_VO_DUMMY_45, 0x50, 2, 0, 0, SFX_FLAG_10)
/* 0x682E */ DEFINE_SFX(NA_SE_VO_DUMMY_46, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x682F */ DEFINE_SFX(NA_SE_VO_DUMMY_47, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6830 */ DEFINE_SFX(NA_SE_VO_DUMMY_48, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6831 */ DEFINE_SFX(NA_SE_VO_DUMMY_49, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6832 */ DEFINE_SFX(NA_SE_VO_DUMMY_50, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6833 */ DEFINE_SFX(NA_SE_VO_DUMMY_51, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6834 */ DEFINE_SFX(NA_SE_VO_DUMMY_52, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6835 */ DEFINE_SFX(NA_SE_VO_DUMMY_53, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6836 */ DEFINE_SFX(NA_SE_VO_DUMMY_54, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6837 */ DEFINE_SFX(NA_SE_VO_DUMMY_55, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6838 */ DEFINE_SFX(NA_SE_VO_DUMMY_56, 0x30, 1, 2, 0, SFX_FLAG_10)
/* 0x6839 */ DEFINE_SFX(NA_SE_VO_DUMMY_57, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x683A */ DEFINE_SFX(NA_SE_VO_DUMMY_58, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x683B */ DEFINE_SFX(NA_SE_VO_DUMMY_59, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x683C */ DEFINE_SFX(NA_SE_VO_DUMMY_60, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x683D */ DEFINE_SFX(NA_SE_VO_DUMMY_61, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x683E */ DEFINE_SFX(NA_SE_VO_DUMMY_62, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x683F */ DEFINE_SFX(NA_SE_VO_DUMMY_63, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6840 */ DEFINE_SFX(NA_SE_VO_LK_WAKE_UP, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6841 */ DEFINE_SFX(NA_SE_VO_LK_CATCH_DEMO, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6842 */ DEFINE_SFX(NA_SE_VO_LK_DRAGGED_DAMAGE, 0x30, 0, 0, 0, 0)
/* 0x6843 */ DEFINE_SFX(NA_SE_VO_NAVY_CALL, 0x60, 0, 0, 0, SFX_FLAG_5)
/* 0x6844 */ DEFINE_SFX(NA_SE_VO_NA_HELLO_3, 0x30, 0, 0, 0, 0)
/* 0x6845 */ DEFINE_SFX(NA_SE_VO_CHAT_MESSAGE_CALL, 0x30, 0, 0, 0, 0)
/* 0x6846 */ DEFINE_SFX(NA_SE_VO_BELL_MESSAGE, 0x30, 0, 0, 0, 0)
/* 0x6847 */ DEFINE_SFX(NA_SE_VO_MONDO_MESSAGE, 0x30, 0, 0, 0, 0)
/* 0x6848 */ DEFINE_SFX(NA_SE_VO_LK_USING_UP_ENERGY, 0x30, 0, 0, 0, 0)
/* 0x6849 */ DEFINE_SFX(NA_SE_VO_DUMMY_73, 0x30, 0, 0, 0, 0)
/* 0x684A */ DEFINE_SFX(NA_SE_VO_GO_SLEEP, 0x30, 0, 0, 0, 0)
/* 0x684B */ DEFINE_SFX(NA_SE_VO_NP_SLEEP_OUT, 0x30, 0, 0, 0, 0)
/* 0x684C */ DEFINE_SFX(NA_SE_VO_DUMMY_76, 0x30, 0, 0, 0, 0)
/* 0x684D */ DEFINE_SFX(NA_SE_VO_DUMMY_77, 0x30, 0, 0, 0, 0)
/* 0x684E */ DEFINE_SFX(NA_SE_VO_NP_DRINK, 0x30, 0, 0, 0, 0)
/* 0x684F */ DEFINE_SFX(NA_SE_VO_DUMMY_79, 0x30, 0, 0, 0, 0)
/* 0x6850 */ DEFINE_SFX(NA_SE_VO_NARRATION_0, 0x30, 0, 0, 0, 0)
/* 0x6851 */ DEFINE_SFX(NA_SE_VO_TA_SURPRISE, 0x30, 0, 0, 0, 0)
/* 0x6852 */ DEFINE_SFX(NA_SE_VO_TA_CRY_0, 0x30, 1, 1, 0, SFX_FLAG_15)
/* 0x6853 */ DEFINE_SFX(NA_SE_VO_TA_CRY_1, 0x30, 1, 1, 0, SFX_FLAG_15)
/* 0x6854 */ DEFINE_SFX(NA_SE_VO_IN_CRY_0, 0x30, 1, 1, 0, SFX_FLAG_15)
/* 0x6855 */ DEFINE_SFX(NA_SE_VO_IN_LOST, 0x30, 1, 1, 0, SFX_FLAG_15)
/* 0x6856 */ DEFINE_SFX(NA_SE_VO_IN_LASH_0, 0x30, 1, 1, 0, SFX_FLAG_15)
/* 0x6857 */ DEFINE_SFX(NA_SE_VO_IN_LASH_1, 0x30, 1, 1, 0, SFX_FLAG_15)
/* 0x6858 */ DEFINE_SFX(NA_SE_VO_FR_LAUGH_0, 0x30, 1, 1, 0, SFX_FLAG_15)
/* 0x6859 */ DEFINE_SFX(NA_SE_VO_FR_SMILE_0, 0x30, 1, 1, 0, SFX_FLAG_15)
/* 0x685A */ DEFINE_SFX(NA_SE_VO_NB_AGONY, 0x30, 1, 1, 0, SFX_FLAG_15)
/* 0x685B */ DEFINE_SFX(NA_SE_VO_NB_CRY_0, 0x30, 1, 1, 0, SFX_FLAG_15)
/* 0x685C */ DEFINE_SFX(NA_SE_VO_NB_NOTICE, 0x30, 1, 1, 0, SFX_FLAG_15)
/* 0x685D */ DEFINE_SFX(NA_SE_VO_NA_HELLO_0, 0x30, 0, 0, 0, SFX_FLAG_15)
/* 0x685E */ DEFINE_SFX(NA_SE_VO_NA_HELLO_1, 0x30, 0, 0, 0, SFX_FLAG_15)
/* 0x685F */ DEFINE_SFX(NA_SE_VO_NA_HELLO_2, 0x30, 0, 0, 0, SFX_FLAG_15)
/* 0x6860 */ DEFINE_SFX(NA_SE_VO_RT_CRASH, 0x30, 1, 1, 0, SFX_FLAG_15)
/* 0x6861 */ DEFINE_SFX(NA_SE_VO_RT_DISCOVER, 0x30, 1, 1, 0, SFX_FLAG_15)
/* 0x6862 */ DEFINE_SFX(NA_SE_VO_RT_FALL, 0x30, 1, 1, 0, SFX_FLAG_15)
/* 0x6863 */ DEFINE_SFX(NA_SE_VO_RT_LAUGH_0, 0x30, 1, 1, 0, SFX_FLAG_15)
/* 0x6864 */ DEFINE_SFX(NA_SE_VO_RT_LIFT, 0x30, 1, 1, 0, SFX_FLAG_15)
/* 0x6865 */ DEFINE_SFX(NA_SE_VO_RT_THROW, 0x30, 1, 1, 0, SFX_FLAG_15)
/* 0x6866 */ DEFINE_SFX(NA_SE_VO_RT_UNBALLANCE, 0x30, 1, 1, 0, SFX_FLAG_15)
/* 0x6867 */ DEFINE_SFX(NA_SE_VO_ST_DAMAGE, 0x30, 1, 1, 0, SFX_FLAG_15)
/* 0x6868 */ DEFINE_SFX(NA_SE_VO_ST_ATTACK, 0x30, 1, 1, 0, SFX_FLAG_15)
/* 0x6869 */ DEFINE_SFX(NA_SE_VO_Z0_HURRY, 0x30, 1, 1, 0, SFX_FLAG_15)
/* 0x686A */ DEFINE_SFX(NA_SE_VO_Z0_MEET, 0x30, 1, 1, 0, SFX_FLAG_15)
/* 0x686B */ DEFINE_SFX(NA_SE_VO_Z0_QUESTION, 0x30, 1, 1, 0, SFX_FLAG_15)
/* 0x686C */ DEFINE_SFX(NA_SE_VO_Z0_SIGH_0, 0x30, 1, 1, 0, SFX_FLAG_15)
/* 0x686D */ DEFINE_SFX(NA_SE_VO_Z0_SMILE_0, 0x30, 1, 1, 0, SFX_FLAG_15)
/* 0x686E */ DEFINE_SFX(NA_SE_VO_Z0_SURPRISE, 0x30, 1, 1, 0, SFX_FLAG_15)
/* 0x686F */ DEFINE_SFX(NA_SE_VO_Z0_THROW, 0x30, 1, 1, 0, SFX_FLAG_15)
/* 0x6870 */ DEFINE_SFX(NA_SE_VO_SK_CRY_0, 0x30, 1, 1, 0, SFX_FLAG_15)
/* 0x6871 */ DEFINE_SFX(NA_SE_VO_SK_CRY_1, 0x30, 1, 1, 0, SFX_FLAG_15)
/* 0x6872 */ DEFINE_SFX(NA_SE_VO_SK_CRASH, 0x30, 1, 1, 0, SFX_FLAG_15)
/* 0x6873 */ DEFINE_SFX(NA_SE_VO_NA_LISTEN, 0x30, 1, 1, 0, SFX_FLAG_15)
/* 0x6874 */ DEFINE_SFX(NA_SE_VO_SK_SHOUT, 0x30, 1, 0, 0, SFX_FLAG_15)
/* 0x6875 */ DEFINE_SFX(NA_SE_VO_Z1_CRY_0, 0x30, 3, 1, 0, SFX_FLAG_15)
/* 0x6876 */ DEFINE_SFX(NA_SE_VO_Z1_CRY_1, 0x30, 3, 1, 0, SFX_FLAG_15)
/* 0x6877 */ DEFINE_SFX(NA_SE_VO_Z1_OPENDOOR, 0x30, 3, 1, 0, SFX_FLAG_15)
/* 0x6878 */ DEFINE_SFX(NA_SE_VO_FR_SMILE_1, 0x30, 1, 1, 0, SFX_FLAG_15)
/* 0x6879 */ DEFINE_SFX(NA_SE_VO_FR_SMILE_2, 0x30, 1, 1, 0, SFX_FLAG_15)
/* 0x687A */ DEFINE_SFX(NA_SE_VO_KZ_MOVE, 0x30, 1, 1, 0, SFX_FLAG_15)
/* 0x687B */ DEFINE_SFX(NA_SE_VO_NB_LAUGH, 0x30, 1, 1, 0, SFX_FLAG_15)
/* 0x687C */ DEFINE_SFX(NA_SE_VO_IN_JOY0, 0x30, 1, 1, 0, SFX_FLAG_15)
/* 0x687D */ DEFINE_SFX(NA_SE_VO_IN_JOY1, 0x30, 1, 1, 0, SFX_FLAG_15)
/* 0x687E */ DEFINE_SFX(NA_SE_VO_IN_JOY2, 0x30, 1, 1, 0, SFX_FLAG_15)
/* 0x687F */ DEFINE_SFX(NA_SE_VO_DUMMY_127, 0x30, 1, 1, 0, SFX_FLAG_15)
/* 0x6880 */ DEFINE_SFX(NA_SE_VO_DUMMY_128, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6881 */ DEFINE_SFX(NA_SE_VO_DUMMY_129, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6882 */ DEFINE_SFX(NA_SE_VO_DUMMY_130, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6883 */ DEFINE_SFX(NA_SE_VO_DUMMY_131, 0x20, 2, 0, 0, SFX_FLAG_10)
/* 0x6884 */ DEFINE_SFX(NA_SE_VO_DUMMY_132, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6885 */ DEFINE_SFX(NA_SE_VO_DUMMY_133, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6886 */ DEFINE_SFX(NA_SE_VO_DUMMY_134, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6887 */ DEFINE_SFX(NA_SE_VO_DUMMY_135, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6888 */ DEFINE_SFX(NA_SE_VO_DUMMY_136, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6889 */ DEFINE_SFX(NA_SE_VO_DUMMY_137, 0x30, 2, 1, 0, SFX_FLAG_10)
/* 0x688A */ DEFINE_SFX(NA_SE_VO_DUMMY_138, 0x30, 2, 1, 0, SFX_FLAG_10)
/* 0x688B */ DEFINE_SFX(NA_SE_VO_DUMMY_139, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x688C */ DEFINE_SFX(NA_SE_VO_DUMMY_140, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x688D */ DEFINE_SFX(NA_SE_VO_DUMMY_141, 0x50, 2, 0, 0, SFX_FLAG_10)
/* 0x688E */ DEFINE_SFX(NA_SE_VO_DUMMY_142, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x688F */ DEFINE_SFX(NA_SE_VO_DUMMY_143, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6890 */ DEFINE_SFX(NA_SE_VO_DUMMY_144, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6891 */ DEFINE_SFX(NA_SE_VO_DUMMY_145, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6892 */ DEFINE_SFX(NA_SE_VO_DUMMY_146, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6893 */ DEFINE_SFX(NA_SE_VO_DUMMY_147, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6894 */ DEFINE_SFX(NA_SE_VO_DUMMY_148, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6895 */ DEFINE_SFX(NA_SE_VO_DUMMY_149, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6896 */ DEFINE_SFX(NA_SE_VO_DUMMY_150, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6897 */ DEFINE_SFX(NA_SE_VO_DUMMY_151, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6898 */ DEFINE_SFX(NA_SE_VO_DUMMY_152, 0x30, 1, 2, 0, SFX_FLAG_10)
/* 0x6899 */ DEFINE_SFX(NA_SE_VO_DUMMY_153, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x689A */ DEFINE_SFX(NA_SE_VO_DUMMY_154, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x689B */ DEFINE_SFX(NA_SE_VO_DUMMY_155, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x689C */ DEFINE_SFX(NA_SE_VO_DUMMY_156, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x689D */ DEFINE_SFX(NA_SE_VO_DUMMY_157, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x689E */ DEFINE_SFX(NA_SE_VO_DUMMY_158, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x689F */ DEFINE_SFX(NA_SE_VO_DUMMY_159, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68A0 */ DEFINE_SFX(NA_SE_VO_DUMMY_160, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68A1 */ DEFINE_SFX(NA_SE_VO_DUMMY_161, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68A2 */ DEFINE_SFX(NA_SE_VO_DUMMY_162, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68A3 */ DEFINE_SFX(NA_SE_VO_DUMMY_163, 0x20, 2, 0, 0, SFX_FLAG_10)
/* 0x68A4 */ DEFINE_SFX(NA_SE_VO_DUMMY_164, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68A5 */ DEFINE_SFX(NA_SE_VO_DUMMY_165, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68A6 */ DEFINE_SFX(NA_SE_VO_DUMMY_166, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68A7 */ DEFINE_SFX(NA_SE_VO_DUMMY_167, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68A8 */ DEFINE_SFX(NA_SE_VO_DUMMY_168, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68A9 */ DEFINE_SFX(NA_SE_VO_DUMMY_169, 0x30, 2, 1, 0, SFX_FLAG_10)
/* 0x68AA */ DEFINE_SFX(NA_SE_VO_DUMMY_170, 0x30, 2, 1, 0, SFX_FLAG_10)
/* 0x68AB */ DEFINE_SFX(NA_SE_VO_DUMMY_171, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68AC */ DEFINE_SFX(NA_SE_VO_DUMMY_172, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68AD */ DEFINE_SFX(NA_SE_VO_DUMMY_173, 0x50, 2, 0, 0, SFX_FLAG_10)
/* 0x68AE */ DEFINE_SFX(NA_SE_VO_DUMMY_174, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68AF */ DEFINE_SFX(NA_SE_VO_DUMMY_175, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68B0 */ DEFINE_SFX(NA_SE_VO_DUMMY_176, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68B1 */ DEFINE_SFX(NA_SE_VO_DUMMY_177, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68B2 */ DEFINE_SFX(NA_SE_VO_DUMMY_178, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68B3 */ DEFINE_SFX(NA_SE_VO_DUMMY_179, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68B4 */ DEFINE_SFX(NA_SE_VO_DUMMY_180, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68B5 */ DEFINE_SFX(NA_SE_VO_DUMMY_181, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68B6 */ DEFINE_SFX(NA_SE_VO_DUMMY_182, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68B7 */ DEFINE_SFX(NA_SE_VO_DUMMY_183, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68B8 */ DEFINE_SFX(NA_SE_VO_DUMMY_184, 0x30, 2, 2, 0, SFX_FLAG_10)
/* 0x68B9 */ DEFINE_SFX(NA_SE_VO_DUMMY_185, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68BA */ DEFINE_SFX(NA_SE_VO_DUMMY_186, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68BB */ DEFINE_SFX(NA_SE_VO_DUMMY_187, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68BC */ DEFINE_SFX(NA_SE_VO_DUMMY_188, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68BD */ DEFINE_SFX(NA_SE_VO_DUMMY_189, 0x80, 2, 0, 0, SFX_FLAG_10)
/* 0x68BE */ DEFINE_SFX(NA_SE_VO_DUMMY_190, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68BF */ DEFINE_SFX(NA_SE_VO_DUMMY_191, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68C0 */ DEFINE_SFX(NA_SE_VO_DUMMY_192, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68C1 */ DEFINE_SFX(NA_SE_VO_DUMMY_193, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68C2 */ DEFINE_SFX(NA_SE_VO_DUMMY_194, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68C3 */ DEFINE_SFX(NA_SE_VO_DUMMY_195, 0x20, 2, 0, 0, SFX_FLAG_10)
/* 0x68C4 */ DEFINE_SFX(NA_SE_VO_DUMMY_196, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68C5 */ DEFINE_SFX(NA_SE_VO_DUMMY_197, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68C6 */ DEFINE_SFX(NA_SE_VO_DUMMY_198, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68C7 */ DEFINE_SFX(NA_SE_VO_DUMMY_199, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68C8 */ DEFINE_SFX(NA_SE_VO_DUMMY_200, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68C9 */ DEFINE_SFX(NA_SE_VO_DUMMY_201, 0x30, 2, 1, 0, SFX_FLAG_10)
/* 0x68CA */ DEFINE_SFX(NA_SE_VO_DUMMY_202, 0x30, 2, 1, 0, SFX_FLAG_10)
/* 0x68CB */ DEFINE_SFX(NA_SE_VO_DUMMY_203, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68CC */ DEFINE_SFX(NA_SE_VO_DUMMY_204, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68CD */ DEFINE_SFX(NA_SE_VO_DUMMY_205, 0x50, 2, 0, 0, SFX_FLAG_10)
/* 0x68CE */ DEFINE_SFX(NA_SE_VO_DUMMY_206, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68CF */ DEFINE_SFX(NA_SE_VO_DUMMY_207, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68D0 */ DEFINE_SFX(NA_SE_VO_DUMMY_208, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68D1 */ DEFINE_SFX(NA_SE_VO_DUMMY_209, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68D2 */ DEFINE_SFX(NA_SE_VO_DUMMY_210, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68D3 */ DEFINE_SFX(NA_SE_VO_DUMMY_211, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68D4 */ DEFINE_SFX(NA_SE_VO_DUMMY_212, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68D5 */ DEFINE_SFX(NA_SE_VO_DUMMY_213, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68D6 */ DEFINE_SFX(NA_SE_VO_DUMMY_214, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68D7 */ DEFINE_SFX(NA_SE_VO_DUMMY_215, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68D8 */ DEFINE_SFX(NA_SE_VO_DUMMY_216, 0x30, 2, 2, 0, SFX_FLAG_10)
/* 0x68D9 */ DEFINE_SFX(NA_SE_VO_DUMMY_217, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68DA */ DEFINE_SFX(NA_SE_VO_DUMMY_218, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68DB */ DEFINE_SFX(NA_SE_VO_DUMMY_219, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68DC */ DEFINE_SFX(NA_SE_VO_DUMMY_220, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68DD */ DEFINE_SFX(NA_SE_VO_DUMMY_221, 0x80, 2, 0, 0, SFX_FLAG_10)
/* 0x68DE */ DEFINE_SFX(NA_SE_VO_DUMMY_222, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68DF */ DEFINE_SFX(NA_SE_VO_DUMMY_223, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x68E0 */ DEFINE_SFX(NA_SE_VO_LI_POO_WAIT, 0x30, 2, 1, 0, SFX_FLAG_10)
/* 0x68E1 */ DEFINE_SFX(NA_SE_VO_DUMMY_225, 0x30, 2, 1, 0, SFX_FLAG_10)
/* 0x68E2 */ DEFINE_SFX(NA_SE_VO_DUMMY_226, 0x30, 2, 1, 0, SFX_FLAG_10)
/* 0x68E3 */ DEFINE_SFX(NA_SE_VO_DUMMY_227, 0x20, 2, 1, 0, SFX_FLAG_10)
/* 0x68E4 */ DEFINE_SFX(NA_SE_VO_DUMMY_228, 0x30, 2, 1, 0, SFX_FLAG_10)
/* 0x68E5 */ DEFINE_SFX(NA_SE_VO_DUMMY_229, 0x30, 2, 1, 0, SFX_FLAG_10)
/* 0x68E6 */ DEFINE_SFX(NA_SE_VO_DUMMY_230, 0x30, 2, 1, 0, SFX_FLAG_10)
/* 0x68E7 */ DEFINE_SFX(NA_SE_VO_DUMMY_231, 0x30, 2, 1, 0, SFX_FLAG_10)
/* 0x68E8 */ DEFINE_SFX(NA_SE_VO_DUMMY_232, 0x30, 2, 1, 0, SFX_FLAG_10)
/* 0x68E9 */ DEFINE_SFX(NA_SE_VO_DUMMY_233, 0x30, 2, 1, 0, SFX_FLAG_10)
/* 0x68EA */ DEFINE_SFX(NA_SE_VO_DUMMY_234, 0x30, 2, 1, 0, SFX_FLAG_10)
/* 0x68EB */ DEFINE_SFX(NA_SE_VO_DUMMY_235, 0x30, 2, 1, 0, SFX_FLAG_10)
/* 0x68EC */ DEFINE_SFX(NA_SE_VO_DUMMY_236, 0x30, 2, 1, 0, SFX_FLAG_10)
/* 0x68ED */ DEFINE_SFX(NA_SE_VO_DUMMY_237, 0x50, 2, 1, 0, SFX_FLAG_10)
/* 0x68EE */ DEFINE_SFX(NA_SE_VO_DUMMY_238, 0x30, 2, 1, 0, SFX_FLAG_10)
/* 0x68EF */ DEFINE_SFX(NA_SE_VO_DUMMY_239, 0x30, 2, 1, 0, SFX_FLAG_10)
/* 0x68F0 */ DEFINE_SFX(NA_SE_VO_DUMMY_240, 0x30, 2, 1, 0, SFX_FLAG_10)
/* 0x68F1 */ DEFINE_SFX(NA_SE_VO_DUMMY_241, 0x30, 2, 1, 0, SFX_FLAG_10)
/* 0x68F2 */ DEFINE_SFX(NA_SE_VO_DUMMY_242, 0x30, 2, 1, 0, SFX_FLAG_10)
/* 0x68F3 */ DEFINE_SFX(NA_SE_VO_DUMMY_243, 0x30, 2, 1, 0, SFX_FLAG_10)
/* 0x68F4 */ DEFINE_SFX(NA_SE_VO_DUMMY_244, 0x30, 2, 1, 0, SFX_FLAG_10)
/* 0x68F5 */ DEFINE_SFX(NA_SE_VO_DUMMY_245, 0x30, 2, 1, 0, SFX_FLAG_10)
/* 0x68F6 */ DEFINE_SFX(NA_SE_VO_DUMMY_246, 0x30, 2, 1, 0, SFX_FLAG_10)
/* 0x68F7 */ DEFINE_SFX(NA_SE_VO_DUMMY_247, 0x30, 2, 1, 0, SFX_FLAG_10)
/* 0x68F8 */ DEFINE_SFX(NA_SE_VO_DUMMY_248, 0x30, 2, 2, 0, SFX_FLAG_10)
/* 0x68F9 */ DEFINE_SFX(NA_SE_VO_DUMMY_249, 0x30, 2, 1, 0, SFX_FLAG_10)
/* 0x68FA */ DEFINE_SFX(NA_SE_VO_DUMMY_250, 0x30, 2, 1, 0, SFX_FLAG_10)
/* 0x68FB */ DEFINE_SFX(NA_SE_VO_DUMMY_251, 0x30, 2, 1, 0, SFX_FLAG_10)
/* 0x68FC */ DEFINE_SFX(NA_SE_VO_DUMMY_252, 0x30, 2, 1, 0, SFX_FLAG_10)
/* 0x68FD */ DEFINE_SFX(NA_SE_VO_DUMMY_253, 0x80, 2, 1, 0, SFX_FLAG_10)
/* 0x68FE */ DEFINE_SFX(NA_SE_VO_DUMMY_254, 0x30, 2, 1, 0, SFX_FLAG_10)
/* 0x68FF */ DEFINE_SFX(NA_SE_VO_DUMMY_255, 0x30, 2, 1, SFX_FLAG2_7, SFX_FLAG_10)
/* 0x6900 */ DEFINE_SFX(NA_SE_VO_JMVO02, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6901 */ DEFINE_SFX(NA_SE_VO_JMVO04, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6902 */ DEFINE_SFX(NA_SE_VO_CDVO00, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6903 */ DEFINE_SFX(NA_SE_VO_CDVO01, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6904 */ DEFINE_SFX(NA_SE_VO_CDVO02, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6905 */ DEFINE_SFX(NA_SE_VO_CDVO03, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6906 */ DEFINE_SFX(NA_SE_VO_BBVO00, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6907 */ DEFINE_SFX(NA_SE_VO_BBVO01, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6908 */ DEFINE_SFX(NA_SE_VO_BBVO02, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6909 */ DEFINE_SFX(NA_SE_VO_BBVO03, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x690A */ DEFINE_SFX(NA_SE_VO_BBVO04, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x690B */ DEFINE_SFX(NA_SE_VO_BBVO05, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x690C */ DEFINE_SFX(NA_SE_VO_OBVO01, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x690D */ DEFINE_SFX(NA_SE_VO_ARVO00, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x690E */ DEFINE_SFX(NA_SE_VO_ARVO01, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x690F */ DEFINE_SFX(NA_SE_VO_MMVO00, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6910 */ DEFINE_SFX(NA_SE_VO_MMVO01, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6911 */ DEFINE_SFX(NA_SE_VO_MMVO02, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6912 */ DEFINE_SFX(NA_SE_VO_MMVO03, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6913 */ DEFINE_SFX(NA_SE_VO_MMVO04, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6914 */ DEFINE_SFX(NA_SE_VO_MMVO05, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6915 */ DEFINE_SFX(NA_SE_VO_ABVO00, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6916 */ DEFINE_SFX(NA_SE_VO_ABVO01, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6917 */ DEFINE_SFX(NA_SE_VO_NPVO00, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6918 */ DEFINE_SFX(NA_SE_VO_FPVO00, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6919 */ DEFINE_SFX(NA_SE_VO_FPVO01, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x691A */ DEFINE_SFX(NA_SE_VO_FPVO02, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x691B */ DEFINE_SFX(NA_SE_VO_FPVO03, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x691C */ DEFINE_SFX(NA_SE_VO_ROVO01, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x691D */ DEFINE_SFX(NA_SE_VO_ROVO02, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x691E */ DEFINE_SFX(NA_SE_VO_RYVO01, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x691F */ DEFINE_SFX(NA_SE_VO_RYVO02, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6920 */ DEFINE_SFX(NA_SE_VO_RYVO03, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6921 */ DEFINE_SFX(NA_SE_VO_RYVO04, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6922 */ DEFINE_SFX(NA_SE_VO_ANVO00, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6923 */ DEFINE_SFX(NA_SE_VO_ANVO01, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6924 */ DEFINE_SFX(NA_SE_VO_ANVO02, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6925 */ DEFINE_SFX(NA_SE_VO_ANVO03, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6926 */ DEFINE_SFX(NA_SE_VO_CRVO00, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6927 */ DEFINE_SFX(NA_SE_VO_CRVO01, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6928 */ DEFINE_SFX(NA_SE_VO_CRVO02, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6929 */ DEFINE_SFX(NA_SE_VO_CRVO03, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x692A */ DEFINE_SFX(NA_SE_VO_HNVO00, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x692B */ DEFINE_SFX(NA_SE_VO_HNVO01, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x692C */ DEFINE_SFX(NA_SE_VO_HNVO02, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x692D */ DEFINE_SFX(NA_SE_VO_RMVO00, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x692E */ DEFINE_SFX(NA_SE_VO_RMVO01, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x692F */ DEFINE_SFX(NA_SE_VO_RMVO02, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6930 */ DEFINE_SFX(NA_SE_VO_PMVO01, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6931 */ DEFINE_SFX(NA_SE_VO_PMVO02, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6932 */ DEFINE_SFX(NA_SE_VO_PMVO03, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6933 */ DEFINE_SFX(NA_SE_VO_DHVO00, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6934 */ DEFINE_SFX(NA_SE_VO_DHVO01, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6935 */ DEFINE_SFX(NA_SE_VO_DHVO02, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6936 */ DEFINE_SFX(NA_SE_VO_DHVO03, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6937 */ DEFINE_SFX(NA_SE_VO_DHVO04, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6938 */ DEFINE_SFX(NA_SE_VO_TFVO00, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6939 */ DEFINE_SFX(NA_SE_VO_ANVO04, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x693A */ DEFINE_SFX(NA_SE_VO_ANVO05, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x693B */ DEFINE_SFX(NA_SE_VO_PMVO00, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x693C */ DEFINE_SFX(NA_SE_VO_CHVO03, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x693D */ DEFINE_SFX(NA_SE_VO_CHVO04, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x693E */ DEFINE_SFX(NA_SE_VO_CHVO05, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x693F */ DEFINE_SFX(NA_SE_VO_CHVO06, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6940 */ DEFINE_SFX(NA_SE_VO_CHVO07, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6941 */ DEFINE_SFX(NA_SE_VO_CHVO08, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6942 */ DEFINE_SFX(NA_SE_VO_CHVO09, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6943 */ DEFINE_SFX(NA_SE_VO_DPVO00, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6944 */ DEFINE_SFX(NA_SE_VO_DPVO01, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6945 */ DEFINE_SFX(NA_SE_VO_DPVO02, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6946 */ DEFINE_SFX(NA_SE_VO_SKVO00, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6947 */ DEFINE_SFX(NA_SE_VO_SKVO01, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6948 */ DEFINE_SFX(NA_SE_VO_KHVO00, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6949 */ DEFINE_SFX(NA_SE_VO_KHVO01, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x694A */ DEFINE_SFX(NA_SE_VO_KHVO02, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x694B */ DEFINE_SFX(NA_SE_VO_SHVO00, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x694C */ DEFINE_SFX(NA_SE_VO_SHVO01, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x694D */ DEFINE_SFX(NA_SE_VO_KAVO02, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x694E */ DEFINE_SFX(NA_SE_VO_KAVO03, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x694F */ DEFINE_SFX(NA_SE_VO_MTVO00, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6950 */ DEFINE_SFX(NA_SE_VO_TTVO00, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6951 */ DEFINE_SFX(NA_SE_VO_ITVO00, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6952 */ DEFINE_SFX(NA_SE_VO_ITVO01, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6953 */ DEFINE_SFX(NA_SE_VO_ITVO02, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6954 */ DEFINE_SFX(NA_SE_VO_KMVO00, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6955 */ DEFINE_SFX(NA_SE_VO_KMVO01, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6956 */ DEFINE_SFX(NA_SE_VO_JOVO00, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6957 */ DEFINE_SFX(NA_SE_VO_JYVO00, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6958 */ DEFINE_SFX(NA_SE_VO_DTVO00, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6959 */ DEFINE_SFX(NA_SE_VO_GUVO00, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x695A */ DEFINE_SFX(NA_SE_VO_KTVO00, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x695B */ DEFINE_SFX(NA_SE_VO_KTVO01, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x695C */ DEFINE_SFX(NA_SE_VO_KTVO03, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x695D */ DEFINE_SFX(NA_SE_VO_ZBVO00, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x695E */ DEFINE_SFX(NA_SE_VO_ZBVO01, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x695F */ DEFINE_SFX(NA_SE_VO_DAVO01, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6960 */ DEFINE_SFX(NA_SE_VO_SHVO04, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6961 */ DEFINE_SFX(NA_SE_VO_GBVO02, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6962 */ DEFINE_SFX(NA_SE_VO_GBVO03, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6963 */ DEFINE_SFX(NA_SE_VO_PFVO00, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6964 */ DEFINE_SFX(NA_SE_VO_PFVO01, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6965 */ DEFINE_SFX(NA_SE_VO_GAVO00, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6966 */ DEFINE_SFX(NA_SE_VO_GAVO01, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6967 */ DEFINE_SFX(NA_SE_VO_DJVO00, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6968 */ DEFINE_SFX(NA_SE_VO_DJVO01, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6969 */ DEFINE_SFX(NA_SE_VO_MSVO00, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x696A */ DEFINE_SFX(NA_SE_VO_MSVO01, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x696B */ DEFINE_SFX(NA_SE_VO_JPVO00, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x696C */ DEFINE_SFX(NA_SE_VO_HYVO00, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x696D */ DEFINE_SFX(NA_SE_VO_HYVO01, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x696E */ DEFINE_SFX(NA_SE_VO_BAVO00, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x696F */ DEFINE_SFX(NA_SE_VO_POVO00, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6970 */ DEFINE_SFX(NA_SE_VO_DAVO00, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6971 */ DEFINE_SFX(NA_SE_VO_DAVO02, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6972 */ DEFINE_SFX(NA_SE_VO_MKVO00, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6973 */ DEFINE_SFX(NA_SE_VO_MKVO01, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6974 */ DEFINE_SFX(NA_SE_VO_MKVO02, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6975 */ DEFINE_SFX(NA_SE_VO_MKVO03, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6976 */ DEFINE_SFX(NA_SE_VO_MKVO04, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6977 */ DEFINE_SFX(NA_SE_VO_TIVO00, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6978 */ DEFINE_SFX(NA_SE_VO_TIVO01, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6979 */ DEFINE_SFX(NA_SE_VO_TIVO02, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x697A */ DEFINE_SFX(NA_SE_VO_TIVO03, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x697B */ DEFINE_SFX(NA_SE_VO_TIVO04, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x697C */ DEFINE_SFX(NA_SE_VO_TIVO05, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x697D */ DEFINE_SFX(NA_SE_VO_OMVO00, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x697E */ DEFINE_SFX(NA_SE_VO_OMVO01, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x697F */ DEFINE_SFX(NA_SE_VO_OMVO02, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6980 */ DEFINE_SFX(NA_SE_VO_OMVO03, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6981 */ DEFINE_SFX(NA_SE_VO_OMVO04, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6982 */ DEFINE_SFX(NA_SE_VO_OMVO05, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6983 */ DEFINE_SFX(NA_SE_VO_OMVO06, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6984 */ DEFINE_SFX(NA_SE_VO_DEMO_FALL2, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6985 */ DEFINE_SFX(NA_SE_VO_DEMO_384, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6986 */ DEFINE_SFX(NA_SE_VO_DEMO_385, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6987 */ DEFINE_SFX(NA_SE_VO_DEMO_386, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6988 */ DEFINE_SFX(NA_SE_VO_DEMO_387, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x6989 */ DEFINE_SFX(NA_SE_VO_DEMO_388, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x698A */ DEFINE_SFX(NA_SE_VO_DEMO_389, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x698B */ DEFINE_SFX(NA_SE_VO_DEMO_390, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x698C */ DEFINE_SFX(NA_SE_VO_DEMO_391, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x698D */ DEFINE_SFX(NA_SE_VO_DEMO_392, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x698E */ DEFINE_SFX(NA_SE_VO_DEMO_393, 0x30, 2, 0, 0, SFX_FLAG_10)
/* 0x698E */ DEFINE_SFX(NA_SE_VO_DEMO_394, 0x30, 2, 0, 0, SFX_FLAG_10)
+6 -6
View File
@@ -1552,7 +1552,7 @@ extern s16 gHighPassFilterData[];
extern s16 gBandStopFilterData[];
extern s16 gBandPassFilterData[];
extern s16* gWaveSamples[9];
extern f32 gBendPitchOneOctaveFrequencies[256];
extern f32 gBendPitchOneOctaveFrequencies[];
extern f32 gBendPitchTwoSemitonesFrequencies[];
extern f32 gPitchFrequencies[];
extern u8 gDefaultShortNoteVelocityTable[];
@@ -1648,8 +1648,8 @@ extern f32 gSfxVolume;
// extern UNK_TYPE1 D_801D6FD8;
// extern UNK_TYPE1 D_801D6FDC;
// extern UNK_TYPE1 D_801D6FE0;
// extern UNK_TYPE1 D_801D6FE4;
// extern UNK_TYPE1 D_801D6FE8;
// extern UNK_TYPE1 sPlaybackStaffStopPos;
// extern UNK_TYPE1 sPlaybackStaffStartPos;
// extern UNK_TYPE4 D_801D6FEC;
// extern UNK_TYPE4 D_801D6FF0;
// extern UNK_TYPE2 D_801D6FF4;
@@ -1730,14 +1730,14 @@ extern UNK_PTR D_801DB478[7];
// extern UNK_TYPE1 D_801DB494;
// extern UNK_TYPE1 D_801DB49C;
// extern UNK_TYPE2 D_801DB4A0;
extern Vec3f D_801DB4A4;
extern Vec3f gSfxDefaultPos;
extern f32 D_801DB4B0;
extern s8 D_801DB4B8;
extern s8 gSfxDefaultReverb;
// extern UNK_TYPE1 D_801DB4C0;
// extern UNK_TYPE1 D_801DB4C4;
// extern UNK_TYPE1 D_801DB4C8;
// extern UNK_TYPE1 D_801DB4CC;
// extern UNK_TYPE1 D_801DB4D4;
extern u8 gAudioSpecId;
// extern UNK_TYPE1 D_801DB4D8;
// extern UNK_TYPE4 D_801DB4DC;
// extern UNK_TYPE1 D_801DB4E0;
+2
View File
@@ -9,6 +9,7 @@
// This value is hardcoded to be the size of ovl_Arrow_Fire which currently is the biggest actor that uses the AM_FIELD.
#define AM_FIELD_SIZE SEGMENT_SIZE(ovl_Arrow_Fire)
#define MASS_IMMOVABLE 0xFF // Cannot be pushed by OC collisions
#define MASS_HEAVY 0xFE // Can only be pushed by OC collisions with IMMOVABLE and HEAVY objects.
@@ -222,6 +223,7 @@ typedef struct {
/* 0x15A */ s16 pad15A;
} DynaPolyActor; // size = 0x15C
typedef enum {
/* 0x00 */ ITEM00_RUPEE_GREEN,
/* 0x01 */ ITEM00_RUPEE_BLUE,
+31
View File
@@ -1132,6 +1132,37 @@ typedef struct {
/* 0x4 */ u8 entryIndex;
} ActiveSfx; // size = 0x08
// SfxParams bit-packing
#define SFX_PARAM_01_SHIFT 0
#define SFX_PARAM_01_MASK_UPPER (4 << SFX_PARAM_01_SHIFT)
#define SFX_PARAM_01_MASK (7 << SFX_PARAM_01_SHIFT) // Same as OoT, 8 instead of 4
#define SFX_FLAG_3 (1 << 3) // Same as OoT
#define SFX_FLAG_4 (1 << 4) // Same as OoT
#define SFX_FLAG_5 (1 << 5) // Same as OoT
#define SFX_PARAM_67_SHIFT 6
#define SFX_PARAM_67_MASK (3 << SFX_PARAM_67_SHIFT)
#define SFX_FLAG_8 (1 << 8) // New to MM
#define SFX_FLAG_9 (1 << 9) // Same as OoT
#define SFX_FLAG_10_SHIFT 10 // Unused
#define SFX_FLAG_10 (1 << SFX_FLAG_10_SHIFT)
#define SFX_FLAG_11 (1 << 11) // Same as OoT
#define SFX_FLAG_12 (1 << 12) // Same as OoT
#define SFX_FLAG_13 (1 << 13) // Same as OoT
#define SFX_FLAG_14 (1 << 14) // Same as OoT
#define SFX_FLAG_15 (1 << 15) // Same as OoT
#define SFX_FLAG2_0 (1 << 0) // OoT SFX_FLAG_2
#define SFX_FLAG2_2 (1 << 2) // Unused
#define SFX_FLAG2_4 (1 << 4) // Unused
#define SFX_FLAG2_5 (1 << 5) // New to MM
#define SFX_FLAG2_6 (1 << 6) // Unused
#define SFX_FLAG2_7 (1 << 7) // New to MM
typedef struct {
/* 0x0 */ u8 importance;
/* 0x1 */ u8 flags;
+1 -1
View File
@@ -558,7 +558,7 @@ typedef enum {
typedef enum {
/* -1 */ EXCH_ITEM_MINUS1 = -1, // Unknown usage or function
/* 0x00 */ EXCH_ITEM_NONE,
/* 0x13 */ EXCH_ITEM_13 = 0x13,
/* 0x13 */ EXCH_ITEM_PICTO_BOX = 0x13,
/* 0x1E */ EXCH_ITEM_1E = 0x1E, // BOTTLE_MUSHROOM
/* 0x2A */ EXCH_ITEM_MOON_TEAR = 0x2A,
/* 0x2B */ EXCH_ITEM_DEED_LAND,
+10 -5
View File
@@ -26,10 +26,10 @@ typedef enum {
/* 19 */ OCARINA_SONG_EVAN_PART1,
/* 20 */ OCARINA_SONG_EVAN_PART2,
/* 21 */ OCARINA_SONG_ZELDAS_LULLABY,
/* 22 */ OCARINA_SONG_SCARECROW,
/* 22 */ OCARINA_SONG_SCARECROW_SPAWN,
/* 23 */ OCARINA_SONG_TERMINA_WALL,
/* 24 */ OCARINA_SONG_MAX,
/* 24 */ OCARINA_SONG_SCARECROW_LONG = OCARINA_SONG_MAX
/* 24 */ OCARINA_SONG_SCARECROW_LONG = OCARINA_SONG_MAX // anything larger than 24 is considered the long scarecrow's song
} OcarinaSongId;
typedef enum {
@@ -38,6 +38,7 @@ typedef enum {
/* 2 */ OCARINA_BTN_C_RIGHT,
/* 3 */ OCARINA_BTN_C_LEFT,
/* 4 */ OCARINA_BTN_C_UP,
/* 5 */ OCARINA_BTN_C_RIGHT_OR_C_LEFT,
/* -1 */ OCARINA_BTN_INVALID = 0xFF
} OcarinaButtonIndex;
@@ -92,15 +93,19 @@ typedef enum {
} OcarinaRecordingState;
/**
* BFlat4Flag Note:
* bFlat4Flag Note:
* Flag for resolving whether (pitch = OCARINA_PITCH_BFLAT4)
* gets mapped to either C_RIGHT and C_LEFT
*
* This is required as C_RIGHT and C_LEFT are the only notes
* that map to two semitones apart (NOTE_A4 and NOTE_B4)
* that map to two semitones apart (OCARINA_PITCH_A4 and OCARINA_PITCH_B4)
* 0x40 - BTN_Z is pressed to lower note by a semitone
* 0x80 - BTN_R is pressed to raise note by a semitone
*/
#define OCARINA_BUTTON_MASK_PITCH 0x3F
#define OCARINA_BUTTON_MASK_FLAG 0xC0
#define OCARINA_BUTTON_FLAG_BFLAT_LOWER 0x40
#define OCARINA_BUTTON_FLAG_BFLAT_RAISE 0x80
typedef struct {
/* 0x0 */ u8 pitch; // number of semitones above middle C
@@ -108,7 +113,7 @@ typedef struct {
/* 0x4 */ u8 volume;
/* 0x5 */ u8 vibrato;
/* 0x6 */ s8 bend; // frequency multiplicative offset from the pitch defined by pitch
/* 0x7 */ u8 BFlat4Flag; // See note above
/* 0x7 */ u8 bFlat4Flag; // See note above
} OcarinaNote; // size = 0x8
typedef struct {
+3 -3
View File
@@ -143,8 +143,8 @@ typedef struct Save {
/* 0x00F8 */ PermanentSceneFlags permanentSceneFlags[120];
/* 0x0E18 */ u8 unk_E18[0x54];
/* 0x0E6C */ u32 dekuPlaygroundHighScores[3];
/* 0x0E78 */ u32 pictoFlags0;
/* 0x0E7C */ u32 pictoFlags1;
/* 0x0E78 */ u32 pictoFlags0; // Flags set by `PictoActor`s if pictograph is valid
/* 0x0E7C */ u32 pictoFlags1; // Flags set by Snap_ValidatePictograph() to record errors; volatile since that function is run many times in succession
/* 0x0E80 */ u32 unk_E80;
/* 0x0E84 */ u32 unk_E84;
/* 0x0E88 */ u32 unk_E88[7]; // Invadepoh flags
@@ -167,7 +167,7 @@ typedef struct Save {
/* 0x0F60 */ u32 mapsVisible; // "cloud_clear"
/* 0x0F64 */ u8 unk_F64; // "oca_rec_flag" has scarecrows song
/* 0x0F65 */ u8 unk_F65; // "oca_rec_flag8" scarecrows song set?
/* 0x0F66 */ u8 scarecrowsSong[128];
/* 0x0F66 */ u8 scarecrowSpawnSong[128];
/* 0x0FE6 */ s8 bombersCaughtNum; // "aikotoba_index"
/* 0x0FE7 */ s8 bombersCaughtOrder[5]; // "aikotoba_table"
/* 0x0FEC */ s8 lotteryCodes[3][3]; // "numbers_table", Preset lottery codes
+52
View File
@@ -0,0 +1,52 @@
#ifndef Z64_SNAP_H
#define Z64_SNAP_H
#include "PR/ultratypes.h"
#include "z64actor.h"
typedef s32 (*PictoValidationFunc)(struct PlayState*, Actor*);
typedef struct {
/* 0x000 */ Actor actor;
/* 0x144 */ PictoValidationFunc validationFunc;
} PictoActor;
// Picto box flags
typedef enum {
// Used externally, set and read by actors
/* 0x00 */ PICTOGRAPH_0,
/* 0x01 */ PICTOGRAPH_IN_SWAMP,
/* 0x02 */ PICTOGRAPH_MONKEY,
/* 0x03 */ PICTOGRAPH_BIG_OCTO,
/* 0x04 */ PICTOGRAPH_LULU_HEAD,
/* 0x05 */ PICTOGRAPH_LULU_RIGHT_ARM,
/* 0x06 */ PICTOGRAPH_LULU_LEFT_ARM, // Need all three of these to qualify as a good picture
/* 0x07 */ PICTOGRAPH_SCARECROW,
/* 0x08 */ PICTOGRAPH_TINGLE,
/* 0x09 */ PICTOGRAPH_PIRATE_GOOD,
/* 0x0A */ PICTOGRAPH_DEKU_KING,
/* 0x0B */ PICTOGRAPH_PIRATE_TOO_FAR, // overlaps with PICTOGRAPH_PIRATE_GOOD, but that is checked first
// Used internally, test for failures of position, angle etc.
/* 0x3B */ PICTOGRAPH_BEHIND_COLLISION = 0x3B,
/* 0x3C */ PICTOGRAPH_BEHIND_BG,
/* 0x3D */ PICTOGRAPH_NOT_IN_VIEW,
/* 0x3E */ PICTOGRAPH_BAD_ANGLE,
/* 0x3F */ PICTOGRAPH_BAD_DISTANCE
} PictographFlag;
// The following macros are subject to renaming once the capture system is better understood
#define PICTO_RESOLUTION_HORIZONTAL 150
#define PICTO_RESOLUTION_VERTICAL 105
#define PICTO_CAPTURE_REGION_TOPLEFT_X ((SCREEN_WIDTH - PICTO_RESOLUTION_HORIZONTAL) / 2)
#define PICTO_CAPTURE_REGION_TOPLEFT_Y ((SCREEN_HEIGHT - PICTO_RESOLUTION_VERTICAL) / 2)
s32 Snap_RecordPictographedActors(PlayState* play);
void Snap_SetFlag(s32 flag);
void Snap_UnsetFlag(s32 flag);
u32 Snap_CheckFlag(s32 flag);
s16 Snap_AbsS(s16 val);
s32 Snap_ValidatePictograph(PlayState* play, Actor* actor, s32 flag, Vec3f* pos, Vec3s* rot, f32 distanceMin, f32 distanceMax, s16 angleRange);
#endif
+5 -11
View File
@@ -640,7 +640,7 @@ beginseg
include "build/src/code/audio/audio_init_params.o"
include "build/src/code/jpegutils.o"
include "build/src/code/jpegdecoder.o"
include_readonly "build/src/code/z_game_over.o"
include_data_with_rodata "build/src/code/z_game_over.o"
include "build/src/code/z_construct.o"
include "build/data/code/audio_tables.rodata.o"
include "build/data/code/aspMain.rodata.o"
@@ -883,9 +883,7 @@ beginseg
name "ovl_En_Viewer"
compress
include "build/src/overlays/actors/ovl_En_Viewer/z_en_viewer.o"
include "build/data/ovl_En_Viewer/ovl_En_Viewer.data.o"
include "build/data/ovl_En_Viewer/ovl_En_Viewer.bss.o"
include "build/data/ovl_En_Viewer/ovl_En_Viewer.reloc.o"
include "build/src/overlays/actors/ovl_En_Viewer/ovl_En_Viewer_reloc.o"
endseg
beginseg
@@ -1501,8 +1499,7 @@ beginseg
name "ovl_En_Ge1"
compress
include "build/src/overlays/actors/ovl_En_Ge1/z_en_ge1.o"
include "build/data/ovl_En_Ge1/ovl_En_Ge1.data.o"
include "build/data/ovl_En_Ge1/ovl_En_Ge1.reloc.o"
include "build/src/overlays/actors/ovl_En_Ge1/ovl_En_Ge1_reloc.o"
endseg
beginseg
@@ -2812,8 +2809,7 @@ beginseg
name "ovl_En_Mkk"
compress
include "build/src/overlays/actors/ovl_En_Mkk/z_en_mkk.o"
include "build/data/ovl_En_Mkk/ovl_En_Mkk.data.o"
include "build/data/ovl_En_Mkk/ovl_En_Mkk.reloc.o"
include "build/src/overlays/actors/ovl_En_Mkk/ovl_En_Mkk_reloc.o"
endseg
beginseg
@@ -2970,9 +2966,7 @@ beginseg
name "ovl_Bg_Crace_Movebg"
compress
include "build/src/overlays/actors/ovl_Bg_Crace_Movebg/z_bg_crace_movebg.o"
include "build/data/ovl_Bg_Crace_Movebg/ovl_Bg_Crace_Movebg.data.o"
include "build/data/ovl_Bg_Crace_Movebg/ovl_Bg_Crace_Movebg.bss.o"
include "build/data/ovl_Bg_Crace_Movebg/ovl_Bg_Crace_Movebg.reloc.o"
include "build/src/overlays/actors/ovl_Bg_Crace_Movebg/ovl_Bg_Crace_Movebg_reloc.o"
endseg
beginseg
+13 -469
View File
@@ -1,496 +1,40 @@
#include "global.h"
/**
* TODO:
* the number of #efined sfx's we have for each bank does not seem to line up with the
* number of SfxParam entries for each bank. So at some point either through hacking or
* decompilation/documentation of sequence 0, the sfxs should be verified, especially
* the ones that come at the end of the list (all the earlier sfxs in each bank seem fine).
*
* After that, defines should be paired with sfxparams to make it easier to look up
* specific sfxsparams for a a certain sfx i.e.:
* { 0x18, 0, 0x1 }, // NA_SE_EN_DODO_J_WALK
* { 0x30, 0, 0x1 }, // NA_SE_EN_DODO_J_CRY
* { 0x30, 0, 0x1 }, // NA_SE_EN_DODO_J_FIRE
*/
#define DEFINE_SFX(_0, importance, distParam, randParam, flags2, flags1) \
{ importance, flags2, \
((((distParam) << SFX_PARAM_01_SHIFT) & SFX_PARAM_01_MASK) | \
(((randParam) << SFX_PARAM_67_SHIFT) & SFX_PARAM_67_MASK) | (flags1)) },
SfxParams sEnemyBankParams[] = {
{ 0x18, 0, 0x1 }, { 0x30, 0, 0x1 }, { 0x30, 0, 0x1 }, { 0x38, 0, 0x1 }, { 0x40, 0, 0x1 },
{ 0x30, 0, 0x3 }, { 0x36, 0, 0 }, { 0x38, 0, 0 }, { 0x40, 0, 0x3 }, { 0x58, 0, 0x3 },
{ 0x40, 0, 0x3 }, { 0x68, 0, 0x1003 }, { 0x40, 0, 0x3 }, { 0x30, 0, 0x3 }, { 0x40, 0, 0x3 },
{ 0x40, 0, 0x3 }, { 0x54, 0, 0xB }, { 0x54, 0, 0x3 }, { 0x30, 0, 0x3 }, { 0x40, 0, 0x3 },
{ 0x40, 0, 0x3 }, { 0x54, 0, 0x3 }, { 0x54, 0, 0x3 }, { 0x54, 0, 0x3 }, { 0x30, 0, 0x2003 },
{ 0x50, 0, 0x3 }, { 0x58, 0, 0x3 }, { 0x38, 0, 0x3 }, { 0x50, 0, 0x3 }, { 0x30, 0, 0x3 },
{ 0x38, 0, 0 }, { 0x48, 0, 0 }, { 0x30, 0, 0 }, { 0x40, 0, 0x1 }, { 0x18, 0, 0 },
{ 0x14, 0, 0 }, { 0x14, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x28, 0, 0x4000 },
{ 0x28, 0, 0 }, { 0x30, 0, 0x2 }, { 0x32, 0, 0x2 }, { 0x38, 0, 0x1 }, { 0x20, 0, 0 },
{ 0x40, 0, 0x1 }, { 0x18, 0, 0 }, { 0x28, 0, 0 }, { 0x18, 0, 0x40 }, { 0x30, 0, 0 },
{ 0x38, 0, 0x1 }, { 0x40, 0, 0x1 }, { 0x14, 0, 0 }, { 0x18, 0, 0x80 }, { 0x38, 0, 0x2 },
{ 0x34, 0, 0 }, { 0x28, 0, 0x1 }, { 0x30, 0, 0 }, { 0x38, 0, 0x1 }, { 0x40, 0, 0x1 },
{ 0x30, 0, 0 }, { 0x18, 0, 0 }, { 0x20, 0, 0 }, { 0x30, 0, 0 }, { 0x32, 0, 0 },
{ 0x20, 0, 0x1 }, { 0x37, 0, 0x1 }, { 0x38, 0, 0x1 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x40, 0, 0x2 }, { 0x38, 0, 0x2 }, { 0x20, 0, 0 }, { 0x18, 0, 0 }, { 0x40, 0, 0x4007 },
{ 0x40, 0, 0x1 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0x3 },
{ 0x30, 0, 0 }, { 0x40, 0, 0 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0x3 }, { 0x34, 0, 0 },
{ 0x34, 0, 0 }, { 0x36, 0, 0 }, { 0x30, 0, 0x3 }, { 0x28, 0, 0 }, { 0x30, 0, 0 },
{ 0x18, 0, 0 }, { 0x30, 0, 0 }, { 0x28, 0, 0xC0 }, { 0x30, 0, 0x40 }, { 0x38, 0, 0x41 },
{ 0x40, 0, 0x41 }, { 0x30, 0, 0 }, { 0x36, 0, 0 }, { 0x40, 0, 0x1 }, { 0x14, 0, 0 },
{ 0x30, 0, 0 }, { 0x20, 0, 0 }, { 0x40, 0, 0x1 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0x4 },
{ 0x30, 0, 0x4 }, { 0x20, 0, 0x4 }, { 0x38, 0, 0x4 }, { 0x20, 0, 0x3 }, { 0x38, 0, 0x1 },
{ 0x40, 0, 0x1 }, { 0x14, 0, 0 }, { 0x30, 0, 0x3 }, { 0x20, 0, 0x1 }, { 0x20, 0, 0x1 },
{ 0x30, 0, 0x2 }, { 0x35, 0, 0x2 }, { 0x38, 0, 0x2 }, { 0x48, 0, 0x2 }, { 0x40, 0, 0x2 },
{ 0x45, 0, 0x81 }, { 0x34, 0, 0 }, { 0x40, 0, 0 }, { 0x20, 0, 0x2 }, { 0x28, 0, 0 },
{ 0x28, 0, 0 }, { 0x30, 0, 0 }, { 0x20, 0, 0x84 }, { 0x38, 0, 0x1 }, { 0x40, 0, 0x1 },
{ 0x20, 0, 0 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0x4 }, { 0x40, 0, 0x4 }, { 0x40, 0, 0x3 },
{ 0x40, 0, 0x1 }, { 0x28, 0, 0x1 }, { 0x30, 0, 0x3 }, { 0x20, 0, 0 }, { 0x38, 0, 0x1 },
{ 0x30, 0, 0x4 }, { 0x30, 0, 0 }, { 0x20, 0, 0 }, { 0x20, 0, 0 }, { 0x38, 0, 0x2000 },
{ 0x30, 0, 0x3 }, { 0x30, 0, 0x2000 }, { 0x30, 0, 0 }, { 0x14, 0, 0 }, { 0x38, 0, 0x1 },
{ 0x40, 0, 0x1 }, { 0x14, 0, 0 }, { 0x20, 0, 0 }, { 0x20, 0, 0 }, { 0x30, 0, 0 },
{ 0x40, 0, 0x1 }, { 0x30, 0, 0x80 }, { 0x30, 0, 0 }, { 0x37, 0, 0x1 }, { 0x40, 0, 0x1 },
{ 0x28, 0, 0x5 }, { 0x36, 0, 0x5 }, { 0x38, 0, 0x5 }, { 0x48, 0, 0x5 }, { 0x30, 0, 0x3 },
{ 0x28, 0, 0x2 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0x3 }, { 0x34, 0, 0x3 }, { 0x38, 0, 0x3 },
{ 0x40, 0, 0x3 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0x2000 }, { 0x30, 0, 0x3 }, { 0x38, 0, 0x3 },
{ 0x40, 0, 0x3 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0x403 }, { 0x38, 0, 0x1 },
{ 0x30, 0, 0x43 }, { 0x30, 0, 0x3 }, { 0x20, 0, 0 }, { 0x34, 0, 0 }, { 0x18, 0, 0x80 },
{ 0x30, 0, 0 }, { 0x38, 0, 0 }, { 0x30, 0, 0 }, { 0x14, 0, 0 }, { 0x34, 0, 0 },
{ 0x40, 0, 0 }, { 0x30, 0, 0x3 }, { 0x20, 0, 0 }, { 0x30, 0, 0x80 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x28, 0, 0 }, { 0x30, 0, 0x80 }, { 0x40, 0, 0x1 }, { 0x40, 0, 0x1 },
{ 0x20, 0, 0 }, { 0x20, 0, 0 }, { 0x14, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x40, 0, 0x1 }, { 0x30, 0, 0 }, { 0x30, 0, 0x3 }, { 0x38, 0, 0x3 },
{ 0x40, 0, 0x3 }, { 0x48, 0, 0x3 }, { 0x30, 0, 0x3 }, { 0x34, 0, 0x3 }, { 0x48, 0, 0x3 },
{ 0x30, 0, 0x3 }, { 0x34, 0, 0x3 }, { 0x30, 0, 0x4083 }, { 0x30, 0, 0x4083 }, { 0x40, 0, 0x3 },
{ 0x38, 0, 0x1 }, { 0x30, 0, 0x1 }, { 0x28, 0, 0x3 }, { 0x28, 0, 0x3 }, { 0x30, 0, 0x3 },
{ 0x30, 0, 0x3 }, { 0x30, 0, 0x2003 }, { 0x38, 0, 0x1 }, { 0x20, 0, 0 }, { 0x34, 0, 0 },
{ 0x38, 0, 0x1 }, { 0x40, 0, 0x1 }, { 0x34, 0, 0x2000 }, { 0x20, 0, 0 }, { 0x38, 0, 0x42 },
{ 0x40, 0, 0x1 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0x2 }, { 0x30, 0, 0x2 }, { 0x38, 0, 0x3 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x34, 0, 0 }, { 0x34, 0, 0x3 }, { 0x30, 0, 0x3 },
{ 0x24, 0, 0x40 }, { 0x30, 0, 0x3 }, { 0x28, 0, 0x82 }, { 0x40, 0, 0x3 }, { 0x40, 0, 0x3 },
{ 0x30, 0, 0x3 }, { 0x34, 0, 0x3 }, { 0x20, 0, 0x83 }, { 0x20, 0, 0 }, { 0x30, 0, 0x3 },
{ 0x20, 0, 0x80 }, { 0x30, 0, 0x83 }, { 0x18, 0, 0x83 }, { 0x34, 0, 0x83 }, { 0x30, 0, 0x83 },
{ 0x38, 0, 0x3 }, { 0x18, 0, 0x3 }, { 0x30, 0, 0x2000 }, { 0x38, 0, 0x3 }, { 0x30, 0, 0x3 },
{ 0x40, 0, 0x3 }, { 0x40, 0, 0x2004 }, { 0x38, 0, 0x5 }, { 0x30, 0, 0x2000 }, { 0x30, 0, 0x3 },
{ 0x30, 0, 0x80 }, { 0x30, 0, 0x5 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0x82 }, { 0x30, 0, 0x3 },
{ 0x30, 0, 0x5 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0x84 }, { 0x38, 0, 0x80 }, { 0x38, 0, 0x6083 },
{ 0x38, 0, 0x6083 }, { 0x38, 0, 0x6083 }, { 0x38, 0, 0x6083 }, { 0x40, 0, 0x4082 }, { 0x18, 0, 0x83 },
{ 0x30, 0, 0x3 }, { 0x30, 0, 0x3 }, { 0x20, 0, 0x3 }, { 0x24, 0, 0x5 }, { 0x28, 0, 0x3 },
{ 0x30, 0, 0x3 }, { 0x30, 0, 0x5 }, { 0x30, 0, 0x5 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0x3 }, { 0x18, 0, 0x1 }, { 0x34, 0, 0x3 }, { 0x30, 0, 0x5 }, { 0x34, 0, 0x3 },
{ 0x34, 0, 0x3 }, { 0x34, 0, 0x3 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0x1 },
{ 0x14, 0, 0 }, { 0x40, 0, 0x1 }, { 0x30, 0, 0x1 }, { 0x30, 0, 0x1 }, { 0x20, 0, 0x1 },
{ 0x38, 0, 0x3 }, { 0x30, 0, 0 }, { 0x40, 0, 0x4003 }, { 0x30, 0, 0x4003 }, { 0x38, 0, 0x3 },
{ 0x38, 0, 0x3 }, { 0x40, 0, 0x3 }, { 0x40, 0, 0x83 }, { 0x40, 0, 0x83 }, { 0x40, 0, 0x3 },
{ 0x21, 0, 0x4003 }, { 0x54, 0, 0x3 }, { 0x54, 0, 0x3 }, { 0x54, 0, 0x3 }, { 0x34, 0, 0x2 },
{ 0x58, 0, 0x3 }, { 0x68, 0, 0x3 }, { 0x50, 0, 0x40C3 }, { 0x14, 0, 0 }, { 0x20, 0, 0x1 },
{ 0x48, 0, 0x4080 }, { 0x30, 0, 0x4080 }, { 0x50, 0, 0x1 }, { 0x50, 0, 0x1 }, { 0x50, 0, 0 },
{ 0x50, 0, 0 }, { 0x68, 0, 0x3 }, { 0x58, 0, 0x3 }, { 0x90, 0, 0x3 }, { 0x48, 0, 0x3 },
{ 0x28, 0, 0x2 }, { 0x30, 0, 0 }, { 0x38, 0, 0x1 }, { 0x28, 0, 0x2 }, { 0x50, 0, 0x3 },
{ 0x50, 0, 0x3 }, { 0x50, 0, 0x3 }, { 0x40, 0, 0x4083 }, { 0x40, 0, 0x3 }, { 0x40, 0, 0x3 },
{ 0x40, 0, 0x3 }, { 0x40, 0, 0x3 }, { 0x54, 0, 0x3 }, { 0x40, 0, 0x3 }, { 0x40, 0, 0x3 },
{ 0x48, 0, 0x3 }, { 0x48, 0, 0x3 }, { 0x48, 0, 0x3 }, { 0x40, 0, 0x3 }, { 0x34, 0, 0x2 },
{ 0x34, 0, 0x2002 }, { 0x28, 0, 0x2 }, { 0x28, 0, 0x2 }, { 0x30, 0, 0x2 }, { 0x30, 0, 0x2 },
{ 0x38, 0, 0x2 }, { 0x38, 0, 0x2 }, { 0x48, 0, 0x2 }, { 0x10, 0, 0 }, { 0x34, 0, 0 },
{ 0x18, 0, 0 }, { 0x30, 0, 0 }, { 0x14, 0, 0 }, { 0x34, 0, 0 }, { 0x28, 0, 0x1 },
{ 0x38, 0, 0x1 }, { 0x40, 0, 0x1 }, { 0x30, 0, 0x1 }, { 0x38, 0, 0x1 }, { 0x36, 0, 0x1 },
{ 0x34, 0, 0x1 }, { 0x38, 0, 0x1 }, { 0x48, 0, 0x1 }, { 0x30, 0, 0x1 }, { 0x38, 0, 0x83 },
{ 0x30, 0, 0x3 }, { 0x20, 0, 0x2000 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0 }, { 0x40, 0, 0x1 },
{ 0x30, 0, 0 }, { 0x20, 0, 0 }, { 0x38, 0, 0x1 }, { 0x40, 0, 0x1 }, { 0x30, 0, 0 },
{ 0x30, 0, 0x2000 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0x2 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0x3 },
{ 0x18, 0, 0 }, { 0x28, 0, 0 }, { 0x34, 0, 0x2 }, { 0x34, 0, 0x2 }, { 0x34, 0, 0 },
{ 0x38, 0, 0x1 }, { 0x40, 0, 0x1 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0x2 }, { 0x38, 0, 0 },
{ 0x48, 0, 0 }, { 0x28, 0, 0x4004 }, { 0x48, 0, 0x4 }, { 0x20, 0, 0x4 }, { 0x25, 0, 0x3 },
{ 0x40, 0, 0x2 }, { 0x18, 0, 0x80 }, { 0x44, 0, 0x3 }, { 0x44, 0, 0 }, { 0x18, 0, 0 },
{ 0x30, 0, 0 }, { 0x38, 0, 0x1 }, { 0x40, 0, 0x1 }, { 0x18, 0, 0x3 }, { 0x30, 0, 0x3 },
{ 0x38, 0, 0x43 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0x3 }, { 0x36, 0, 0x3 },
{ 0x34, 0, 0x3 }, { 0x34, 0, 0x82 }, { 0x58, 0, 0x3 }, { 0x68, 0, 0x3 }, { 0x30, 0, 0x3 },
{ 0x30, 0, 0x3 }, { 0x34, 0, 0x2 }, { 0x34, 0, 0x3 }, { 0x40, 0, 0 }, { 0x30, 0, 0x3 },
{ 0x40, 0, 0x2000 }, { 0x30, 0, 0x2000 }, { 0x30, 0, 0xC0 }, { 0x30, 0, 0xC0 }, { 0x40, 0, 0 },
{ 0x30, 0, 0x3 }, { 0x28, 0, 0x3 }, { 0x40, 0, 0x3 }, { 0x40, 0, 0x3 }, { 0x30, 0, 0x3 },
{ 0x30, 0, 0x3 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0x3 }, { 0x38, 0, 0x3 }, { 0x48, 0, 0x3 },
{ 0x20, 0, 0x3 }, { 0x48, 0, 0x3 }, { 0x36, 0, 0x3 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0x3 },
{ 0x38, 0, 0x3 }, { 0x38, 0, 0x3 }, { 0x20, 0, 0x3 }, { 0x30, 0, 0x3 }, { 0x44, 0, 0x3 },
{ 0x30, 0, 0x83 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0x3 }, { 0x34, 0, 0x3 }, { 0x30, 0, 0x3 },
{ 0x30, 0, 0x3 }, { 0x20, 0, 0x2 }, { 0x34, 0, 0x3 }, { 0x20, 0, 0x83 }, { 0x30, 0, 0x4 },
{ 0x30, 0, 0x4042 }, { 0x40, 0, 0x4042 }, { 0x40, 0, 0x83 }, { 0x30, 0, 0x4042 }, { 0x30, 0, 0x4042 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0x1 }, { 0x32, 0, 0x4082 }, { 0x32, 0, 0x3 },
{ 0x54, 0, 0x1 }, { 0x52, 0, 0 }, { 0x54, 0, 0x3 }, { 0x30, 0, 0 }, { 0x08, 0, 0x1 },
{ 0x30, 0, 0x1 }, { 0x30, 0, 0x3 }, { 0x54, 0, 0x3 }, { 0x54, 0, 0x2000 }, { 0x34, 0, 0x3 },
{ 0x54, 0, 0x2000 }, { 0x08, 0, 0 }, { 0x54, 0, 0 }, { 0x34, 0, 0 }, { 0x15, 0, 0 },
{ 0x35, 0, 0 }, { 0x48, 0, 0 }, { 0x38, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0xC2 },
{ 0x38, 0, 0x2 }, { 0x38, 0, 0x2 }, { 0x30, 0, 0x80 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0x1, 0x80 }, { 0x30, 0xB4, 0x6 }, { 0x30, 0, 0 },
{ 0x30, 0, 0x6 }, { 0x30, 0, 0x83 }, { 0x30, 0, 0 }, { 0x30, 0, 0x2 }, { 0x30, 0, 0x2 },
{ 0x30, 0, 0x2 }, { 0x48, 0, 0x2 }, { 0x28, 0, 0x1 }, { 0x36, 0, 0 }, { 0x38, 0, 0 },
{ 0x48, 0, 0 }, { 0x68, 0, 0x3 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0x3 }, { 0x38, 0, 0x3 },
{ 0x48, 0, 0x3 }, { 0x58, 0, 0x3 }, { 0x68, 0, 0x3 }, { 0x29, 0, 0x3 }, { 0x54, 0, 0x3 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0x40 }, { 0x30, 0, 0x40 }, { 0x30, 0, 0x40 },
{ 0x30, 0, 0 }, { 0x68, 0, 0x3 }, { 0x30, 0, 0 }, { 0x45, 0, 0x2 }, { 0x40, 0, 0x4043 },
{ 0x40, 0, 0x4043 }, { 0x30, 0, 0x4043 }, { 0x30, 0, 0x4043 }, { 0x30, 0, 0x4043 }, { 0x30, 0, 0x4043 },
{ 0x30, 0, 0x4083 }, { 0x30, 0, 0x4083 }, { 0x30, 0, 0x4083 }, { 0x50, 0, 0x3 }, { 0x30, 0, 0x3 },
{ 0x30, 0, 0x3 }, { 0x10, 0, 0 }, { 0x54, 0, 0x3 }, { 0x50, 0, 0x3 }, { 0x50, 0, 0x3 },
{ 0x54, 0, 0x43 }, { 0x50, 0, 0x43 }, { 0x50, 0, 0x43 }, { 0x50, 0, 0x43 }, { 0x36, 0, 0x43 },
{ 0x34, 0, 0x43 }, { 0x34, 0, 0x83 }, { 0x36, 0, 0x43 }, { 0x35, 0, 0x43 }, { 0x34, 0, 0x83 },
{ 0x58, 0, 0x43 }, { 0x68, 0, 0x43 }, { 0x38, 0, 0x43 }, { 0x48, 0, 0x43 }, { 0x38, 0, 0x43 },
{ 0x48, 0, 0x43 }, { 0x34, 0, 0x83 }, { 0x34, 0, 0x4043 }, { 0x34, 0, 0x4043 }, { 0x34, 0, 0x83 },
{ 0x34, 0, 0x4043 }, { 0x50, 0, 0x43 }, { 0x34, 0, 0x43 }, { 0x50, 0, 0x43 }, { 0x36, 0, 0x43 },
{ 0x36, 0, 0x43 }, { 0x34, 0, 0x43 }, { 0x37, 0, 0x3 }, { 0x54, 0, 0x43 }, { 0x40, 0, 0x3 },
{ 0x40, 0, 0x3 }, { 0x57, 0, 0x3 }, { 0x34, 0, 0x2 }, { 0x40, 0, 0 }, { 0x32, 0, 0 },
{ 0x50, 0, 0x83 }, { 0x50, 0, 0x83 }, { 0x50, 0, 0x83 }, { 0x50, 0, 0x83 }, { 0x50, 0, 0x83 },
{ 0x58, 0, 0x83 }, { 0x58, 0, 0x83 }, { 0x68, 0, 0x3 }, { 0x68, 0, 0x3 }, { 0x48, 0, 0x3 },
{ 0x48, 0, 0x3 }, { 0x50, 0, 0x3 }, { 0x50, 0, 0x3 }, { 0x28, 0, 0x4 }, { 0x34, 0, 0x2 },
{ 0x30, 0, 0x4080 }, { 0x30, 0, 0x4080 }, { 0x30, 0, 0x4080 }, { 0x30, 0, 0x4080 }, { 0x30, 0, 0x1 },
{ 0x30, 0, 0x84 }, { 0x50, 0, 0x3 }, { 0x50, 0, 0x3 }, { 0x50, 0, 0x3 }, { 0x50, 0, 0x3 },
{ 0x58, 0, 0x3 }, { 0x58, 0, 0x3 }, { 0x68, 0, 0x3 }, { 0x50, 0, 0x3 }, { 0x50, 0, 0x3 },
{ 0x30, 0, 0x1 }, { 0x30, 0, 0x1 }, { 0x30, 0, 0x1 }, { 0x30, 0, 0x1 }, { 0x34, 0, 0x80 },
{ 0x34, 0, 0 }, { 0x34, 0, 0 }, { 0x34, 0, 0 }, { 0x34, 0, 0 }, { 0x34, 0, 0 },
{ 0x34, 0, 0 }, { 0x34, 0, 0 }, { 0x34, 0, 0 }, { 0x34, 0, 0 }, { 0x54, 0, 0 },
{ 0x34, 0, 0 }, { 0x34, 0, 0x2000 }, { 0x34, 0, 0x2000 }, { 0x34, 0, 0 }, { 0x30, 0, 0x5 },
{ 0x30, 0, 0x1 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x34, 0, 0x4083 }, { 0x34, 0, 0x4083 },
{ 0x30, 0, 0x4083 }, { 0x30, 0, 0x4083 }, { 0x34, 0, 0 }, { 0x30, 0, 0 }, { 0x34, 0, 0x1083 },
{ 0x30, 0, 0x1005 }, { 0x30, 0, 0x4080 }, { 0x34, 0, 0 }, { 0x34, 0, 0 }, { 0x30, 0, 0x6 },
{ 0x30, 0, 0x6 }, { 0x30, 0, 0x5 }, { 0x30, 0, 0x6 }, { 0x34, 0, 0 }, { 0x38, 0, 0 },
{ 0x48, 0, 0 }, { 0x30, 0, 0x80 }, { 0x30, 0, 0x85 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0x80 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x40, 0, 0x2 }, { 0x32, 0, 0x80 },
{ 0x50, 0, 0x2 }, { 0x50, 0, 0x2 }, { 0x58, 0, 0x2 }, { 0x68, 0, 0x2 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x50, 0, 0x2 }, { 0x50, 0, 0x2 }, { 0x30, 0, 0x3 }, { 0x54, 0, 0x5 },
{ 0x28, 0, 0x5 }, { 0x78, 0, 0x2000 }, { 0x78, 0, 0x2000 }, { 0x50, 0, 0x3 }, { 0x58, 0, 0x3 },
{ 0x68, 0, 0x3 }, { 0x54, 0, 0x3 }, { 0x40, 0, 0x3 }, { 0x78, 0, 0x3 }, { 0x48, 0, 0 },
{ 0x30, 0, 0x83 }, { 0x30, 0, 0x83 }, { 0x30, 0, 0x83 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0xC3 }, { 0x30, 0, 0x80 }, { 0x30, 0, 0x2000 }, { 0x30, 0, 0x2000 },
{ 0x30, 0, 0x2000 }, { 0x30, 0, 0x2000 }, { 0x30, 0, 0x2000 }, { 0x30, 0, 0x45 }, { 0x60, 0, 0x2 },
{ 0x70, 0, 0x2000 }, { 0x30, 0, 0x80 }, { 0x30, 0, 0x80 }, { 0x30, 0, 0x80 }, { 0x30, 0, 0x80 },
{ 0x30, 0, 0x80 }, { 0x30, 0, 0x80 }, { 0x30, 0, 0x80 }, { 0x30, 0, 0x80 }, { 0x30, 0, 0x80 },
{ 0x30, 0, 0x80 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0x7 }, { 0x30, 0, 0x44 },
{ 0x30, 0, 0x44 }, { 0x30, 0, 0x83 }, { 0x48, 0, 0x3 }, { 0x58, 0, 0x3 }, { 0x30, 0, 0 },
{ 0x30, 0, 0x3 }, { 0x36, 0, 0 }, { 0x40, 0, 0x2 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 },
#include "tables/sfx/enemybank_table.h"
};
SfxParams sPlayerBankParams[] = {
{ 0x20, 0, 0x480 }, { 0x20, 0, 0x480 }, { 0x20, 0, 0x480 }, { 0x20, 0, 0x480 }, { 0x20, 0, 0x440 },
{ 0x20, 0, 0x440 }, { 0x20, 0, 0x440 }, { 0x20, 0, 0x440 }, { 0x20, 0, 0x480 }, { 0x20, 0, 0x440 },
{ 0x20, 0, 0x480 }, { 0x20, 0, 0x400 }, { 0x20, 0, 0x400 }, { 0x20, 0, 0x400 }, { 0x20, 0, 0x400 },
{ 0x20, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 },
{ 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 },
{ 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 },
{ 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x40, 0, 0x440 }, { 0x40, 0, 0x440 }, { 0x40, 0, 0x440 },
{ 0x40, 0, 0x440 }, { 0x40, 0, 0x440 }, { 0x40, 0, 0x440 }, { 0x40, 0, 0x440 }, { 0x40, 0, 0x440 },
{ 0x40, 0, 0x440 }, { 0x40, 0, 0x440 }, { 0x40, 0, 0x440 }, { 0x40, 0, 0x440 }, { 0x40, 0, 0x440 },
{ 0x40, 0, 0x440 }, { 0x40, 0, 0x440 }, { 0x40, 0, 0x440 }, { 0x30, 0, 0x80 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 },
{ 0x30, 0, 0x40 }, { 0x30, 0, 0x40 }, { 0x30, 0, 0x80 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 },
{ 0x40, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x40 },
{ 0x30, 0, 0x40 }, { 0x30, 0, 0x40 }, { 0x30, 0, 0x40 }, { 0x30, 0, 0x40 }, { 0x30, 0, 0x40 },
{ 0x30, 0, 0x40 }, { 0x30, 0, 0x40 }, { 0x30, 0, 0x40 }, { 0x30, 0, 0x40 }, { 0x30, 0, 0x40 },
{ 0x30, 0, 0x40 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x80, 0, 0 }, { 0x80, 0, 0 }, { 0x80, 0, 0 }, { 0x80, 0, 0 }, { 0x80, 0, 0 },
{ 0x80, 0, 0 }, { 0x80, 0, 0 }, { 0x80, 0, 0 }, { 0x80, 0, 0 }, { 0x80, 0, 0 },
{ 0x80, 0, 0 }, { 0x80, 0, 0 }, { 0x80, 0, 0 }, { 0x80, 0, 0 }, { 0x80, 0, 0 },
{ 0x80, 0, 0 }, { 0x30, 0, 0x440 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0x80 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0x1 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0x2000 }, { 0x30, 0, 0xC00 },
{ 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x20, 0, 0x80 }, { 0x20, 0, 0x80 },
{ 0x20, 0, 0x80 }, { 0x20, 0, 0x80 }, { 0x20, 0, 0x40 }, { 0x20, 0, 0x40 }, { 0x20, 0, 0x40 },
{ 0x20, 0, 0x40 }, { 0x20, 0, 0x80 }, { 0x20, 0, 0x80 }, { 0x20, 0, 0x80 }, { 0x20, 0, 0 },
{ 0x20, 0, 0 }, { 0x20, 0, 0 }, { 0x20, 0, 0 }, { 0x20, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x40, 0, 0 }, { 0x40, 0, 0 }, { 0x40, 0, 0 }, { 0x40, 0, 0 }, { 0x40, 0, 0 },
{ 0x40, 0, 0 }, { 0x40, 0, 0 }, { 0x40, 0, 0 }, { 0x40, 0, 0 }, { 0x40, 0, 0 },
{ 0x40, 0, 0 }, { 0x40, 0, 0 }, { 0x40, 0, 0 }, { 0x40, 0, 0 }, { 0x40, 0, 0 },
{ 0x40, 0, 0 }, { 0x30, 0, 0x440 }, { 0x30, 0, 0x440 }, { 0x30, 0, 0x440 }, { 0x30, 0, 0x440 },
{ 0x30, 0, 0x440 }, { 0x30, 0, 0x440 }, { 0x30, 0, 0x440 }, { 0x30, 0, 0x440 }, { 0x30, 0, 0x440 },
{ 0x30, 0, 0x440 }, { 0x30, 0, 0x440 }, { 0x30, 0, 0x440 }, { 0x30, 0, 0x440 }, { 0x30, 0, 0x440 },
{ 0x30, 0, 0x440 }, { 0x30, 0, 0x440 }, { 0x30, 0, 0xC00 }, { 0x30, 0, 0x4080 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x60, 0, 0x2 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0x800 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0x403 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0x400 },
{ 0x60, 0, 0x40 }, { 0x40, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x50, 0, 0x43 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x20, 0, 0x480 }, { 0x20, 0, 0x480 }, { 0x20, 0, 0x480 }, { 0x20, 0, 0x480 }, { 0x20, 0, 0x440 },
{ 0x20, 0, 0x440 }, { 0x20, 0, 0x440 }, { 0x20, 0, 0x440 }, { 0x20, 0, 0x480 }, { 0x20, 0, 0x440 },
{ 0x20, 0, 0x480 }, { 0x20, 0, 0x400 }, { 0x20, 0, 0x400 }, { 0x20, 0, 0x400 }, { 0x20, 0, 0x400 },
{ 0x20, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 },
{ 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 },
{ 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 },
{ 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x40, 0, 0x440 }, { 0x40, 0, 0x440 }, { 0x40, 0, 0x440 },
{ 0x40, 0, 0x440 }, { 0x40, 0, 0x440 }, { 0x40, 0, 0x440 }, { 0x40, 0, 0x440 }, { 0x40, 0, 0x440 },
{ 0x40, 0, 0x440 }, { 0x40, 0, 0x440 }, { 0x40, 0, 0x440 }, { 0x40, 0, 0x440 }, { 0x40, 0, 0x440 },
{ 0x40, 0, 0x440 }, { 0x40, 0, 0x440 }, { 0x40, 0, 0x440 }, { 0x20, 0, 0x480 }, { 0x20, 0, 0x480 },
{ 0x20, 0, 0x480 }, { 0x20, 0, 0x480 }, { 0x20, 0, 0x440 }, { 0x20, 0, 0x440 }, { 0x20, 0, 0x440 },
{ 0x20, 0, 0x440 }, { 0x20, 0, 0x480 }, { 0x20, 0, 0x440 }, { 0x20, 0, 0x480 }, { 0x20, 0, 0x400 },
{ 0x20, 0, 0x400 }, { 0x20, 0, 0x400 }, { 0x20, 0, 0x400 }, { 0x20, 0, 0x400 }, { 0x30, 0, 0x400 },
{ 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 },
{ 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 },
{ 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 },
{ 0x40, 0, 0x440 }, { 0x40, 0, 0x440 }, { 0x40, 0, 0x440 }, { 0x40, 0, 0x440 }, { 0x40, 0, 0x440 },
{ 0x40, 0, 0x440 }, { 0x40, 0, 0x440 }, { 0x40, 0, 0x440 }, { 0x40, 0, 0x440 }, { 0x40, 0, 0x440 },
{ 0x40, 0, 0x440 }, { 0x40, 0, 0x440 }, { 0x40, 0, 0x440 }, { 0x40, 0, 0x440 }, { 0x40, 0, 0x440 },
{ 0x40, 0, 0x440 }, { 0x20, 0, 0x480 }, { 0x20, 0, 0x480 }, { 0x20, 0, 0x480 }, { 0x20, 0, 0x480 },
{ 0x20, 0, 0x440 }, { 0x20, 0, 0x440 }, { 0x20, 0, 0x440 }, { 0x20, 0, 0x440 }, { 0x20, 0, 0x480 },
{ 0x20, 0, 0x440 }, { 0x20, 0, 0x480 }, { 0x20, 0, 0x400 }, { 0x20, 0, 0x400 }, { 0x20, 0, 0x400 },
{ 0x20, 0, 0x400 }, { 0x20, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 },
{ 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 },
{ 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 },
{ 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x40, 0, 0x440 }, { 0x40, 0, 0x440 },
{ 0x40, 0, 0x440 }, { 0x40, 0, 0x440 }, { 0x40, 0, 0x440 }, { 0x40, 0, 0x440 }, { 0x40, 0, 0x440 },
{ 0x40, 0, 0x440 }, { 0x40, 0, 0x440 }, { 0x40, 0, 0x440 }, { 0x40, 0, 0x440 }, { 0x40, 0, 0x440 },
{ 0x40, 0, 0x440 }, { 0x40, 0, 0x440 }, { 0x40, 0, 0x440 }, { 0x40, 0, 0x440 }, { 0x30, 0, 0x400 },
{ 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 },
{ 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 },
{ 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 },
{ 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x50, 0, 0x400 }, { 0x50, 0, 0x400 }, { 0x30, 0, 0x400 },
{ 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 },
{ 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 },
{ 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x60, 0, 0x400 },
{ 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 },
{ 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 },
{ 0x30, 0, 0x4080 }, { 0x40, 0, 0x403 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 },
{ 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 },
{ 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x2400 }, { 0x30, 0, 0x2400 },
{ 0x30, 0, 0x2400 }, { 0x30, 0, 0x2400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x43 },
{ 0x30, 0, 0x43 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 },
{ 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 },
{ 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x400 },
#include "tables/sfx/playerbank_table.h"
};
SfxParams sItemBankParams[] = {
{ 0x30, 0, 0x8040 }, { 0x30, 0, 0x40 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x40, 0, 0x440 },
{ 0x30, 0, 0x440 }, { 0x60, 0, 0x83 }, { 0x30, 0, 0x440 }, { 0x80, 0, 0x43 }, { 0x30, 0, 0 },
{ 0x30, 0, 0x40 }, { 0x38, 0, 0x400 }, { 0x30, 0, 0x401 }, { 0x50, 0, 0x100 }, { 0x90, 0, 0x2 },
{ 0x50, 0, 0x2 }, { 0x30, 0, 0x400 }, { 0x40, 0, 0x2 }, { 0x30, 0, 0x40 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x34, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x60, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0x80 }, { 0x30, 0, 0x40 }, { 0x30, 0, 0x400 }, { 0x20, 0, 0x400 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0x400 },
{ 0x30, 0, 0x400 }, { 0x60, 0, 0x43 }, { 0x30, 0, 0x1 }, { 0x30, 0, 0x401 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0xA0, 0, 0x2 }, { 0xA0, 0, 0x2 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0x100 },
{ 0x60, 0, 0 }, { 0x60, 0, 0 }, { 0x60, 0, 0 }, { 0x30, 0, 0x400 }, { 0x30, 0, 0 },
{ 0x60, 0, 0x81 }, { 0x30, 0, 0 }, { 0x30, 0, 0x400 }, { 0x60, 0, 0x8003 }, { 0x60, 0, 0x8003 },
{ 0x60, 0, 0x8003 }, { 0x30, 0, 0x4000 }, { 0x30, 0, 0x4000 }, { 0x30, 0, 0x40 }, { 0x80, 0, 0x3 },
{ 0x80, 0, 0x3 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0 }, { 0x30, 0, 0x40 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x80, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x80, 0, 0 }, { 0x80, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x40, 0, 0 },
{ 0x30, 0, 0 }, { 0x60, 0, 0x100 }, { 0x70, 0, 0 }, { 0x60, 0, 0 }, { 0x30, 0, 0x483 },
{ 0x30, 0, 0x40 }, { 0x30, 0, 0x40 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x60, 0, 0x2000 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 },
#include "tables/sfx/itembank_table.h"
};
SfxParams sEnvBankParams[] = {
{ 0x70, 0, 0x640 }, { 0x80, 0, 0x40 }, { 0x30, 0, 0 }, { 0x60, 0, 0x40 }, { 0x60, 0, 0x40 },
{ 0x70, 0, 0x40 }, { 0x30, 0, 0x480 }, { 0x70, 0, 0x2 }, { 0x30, 0, 0x40 }, { 0x30, 0, 0x40 },
{ 0x80, 0, 0x2 }, { 0xA0, 0, 0x3 }, { 0x30, 0, 0x103 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0x3 },
{ 0x30, 0, 0x3 }, { 0x30, 0, 0x2 }, { 0x30, 0, 0x40 }, { 0x30, 0, 0x40 }, { 0x50, 0, 0 },
{ 0x60, 0, 0x2 }, { 0x30, 0, 0x3 }, { 0x60, 0, 0 }, { 0x30, 0, 0x82 }, { 0x30, 0, 0 },
{ 0x40, 0, 0 }, { 0x68, 0, 0 }, { 0x58, 0, 0x40 }, { 0x60, 0, 0 }, { 0x70, 0, 0x3 },
{ 0x30, 0, 0x43 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0xA0, 0, 0x2008 }, { 0x20, 0, 0x2 },
{ 0x30, 0, 0 }, { 0x30, 0, 0x800 }, { 0x30, 0, 0x8800 }, { 0x30, 0, 0x8000 }, { 0x30, 0, 0x2 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x60, 0, 0 }, { 0x60, 0, 0x400 },
{ 0x30, 0, 0 }, { 0x80, 0, 0 }, { 0x30, 0, 0x80 }, { 0x30, 0, 0x40 }, { 0x10, 0, 0 },
{ 0xA0, 0, 0x3 }, { 0x30, 0, 0x100 }, { 0x30, 0, 0x10 }, { 0x30, 0, 0x3 }, { 0x60, 0x40, 0x3 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0x2 }, { 0x30, 0, 0 }, { 0xA0, 0, 0x3 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0x3 }, { 0x70, 0, 0 }, { 0x60, 0, 0x8000 },
{ 0x30, 0, 0x8000 }, { 0x60, 0, 0 }, { 0x60, 0, 0 }, { 0x60, 0, 0 }, { 0x60, 0, 0 },
{ 0x30, 0, 0x2003 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0x2010 }, { 0x30, 0, 0x40 },
{ 0x60, 0, 0 }, { 0x60, 0, 0x3 }, { 0x30, 0, 0 }, { 0x58, 0, 0x1 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x40, 0, 0 }, { 0x30, 0, 0xC3 }, { 0x70, 0, 0x2 }, { 0x60, 0, 0x2 },
{ 0x30, 0, 0 }, { 0x60, 0, 0x41 }, { 0x30, 0, 0x2 }, { 0x30, 0, 0 }, { 0x90, 0, 0x3 },
{ 0x90, 0, 0x3 }, { 0x30, 0, 0 }, { 0x30, 0, 0x2 }, { 0x30, 0, 0x3800 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0x3 },
{ 0x30, 0, 0x40 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0x803 },
{ 0x30, 0, 0 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0x80 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0x2 }, { 0x60, 0, 0 },
{ 0x30, 0, 0x640 }, { 0x30, 0, 0x2 }, { 0x30, 0, 0x2 }, { 0x80, 0, 0x2 }, { 0x40, 0, 0 },
{ 0x1C, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x60, 0, 0x4 }, { 0x30, 0, 0x800 },
{ 0x30, 0, 0x40 }, { 0x30, 0, 0 }, { 0x60, 0, 0 }, { 0x60, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x60, 0, 0x3 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0x3 },
{ 0x80, 0, 0 }, { 0x30, 0, 0x2000 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0x80 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0x800 }, { 0x30, 0, 0x800 }, { 0x30, 0, 0x2 }, { 0x30, 0, 0x3 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x20, 0, 0x3 },
{ 0x30, 0, 0 }, { 0x30, 0, 0x8000 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x70, 0, 0x2 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x50, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0x2003 }, { 0x20, 0, 0 },
{ 0x30, 0, 0xC0 }, { 0x30, 0, 0x2000 }, { 0x30, 0, 0 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0x2 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0x2 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0x6 }, { 0xA0, 0, 0x3 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0xC0 }, { 0x30, 0, 0x2 }, { 0x30, 0, 0x2 },
{ 0x30, 0, 0 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0 }, { 0x30, 0, 0x4083 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x60, 0, 0x83 },
{ 0x80, 0, 0x2000 }, { 0x50, 0, 0 }, { 0x60, 0, 0 }, { 0x90, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x60, 0, 0x2000 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0x3 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0xA0, 0, 0x800 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0x2 }, { 0x30, 0, 0 }, { 0x30, 0, 0x3 }, { 0x20, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0x40 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x2 }, { 0x30, 0, 0 },
{ 0x30, 0, 0x2 }, { 0x30, 0, 0x5 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x40, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0x5 }, { 0x30, 0, 0xC2 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0x80 }, { 0x30, 0, 0x80 }, { 0x30, 0, 0 }, { 0x30, 0, 0x2 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x68, 0, 0x2 },
{ 0x30, 0, 0x2 }, { 0x30, 0, 0x4040 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0x2 },
{ 0x30, 0, 0x2 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0xC0 }, { 0x80, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0x2 }, { 0xA0, 0, 0xA003 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0x80 }, { 0x30, 0, 0 },
{ 0x30, 0, 0x85 }, { 0x30, 0, 0x40 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x60, 0, 0x2000 }, { 0x30, 0, 0 }, { 0x30, 0, 0x40 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0x2000 }, { 0x30, 0, 0x2 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0 }, { 0x30, 0, 0x40 },
{ 0x30, 0, 0x40 }, { 0x30, 0, 0x80 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0xC0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x80, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0x43 },
{ 0x30, 0, 0x2000 }, { 0x30, 0, 0 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0x3 },
{ 0x30, 0, 0x3 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0x3 }, { 0xA0, 0, 0x4000 }, { 0x30, 0, 0x43 }, { 0x30, 0, 0x40 }, { 0x60, 0, 0x2 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0x2080 }, { 0x30, 0, 0x2080 }, { 0x30, 0, 0x2000 },
{ 0x30, 0, 0 }, { 0x30, 0, 0x2000 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x60, 0, 0 },
{ 0x30, 0, 0x2 }, { 0x30, 0, 0 }, { 0x30, 0, 0x2 }, { 0x30, 0, 0x80 }, { 0x60, 0, 0x42 },
{ 0x30, 0, 0x2000 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0x2000 }, { 0x30, 0, 0x2000 }, { 0x30, 0, 0x2000 },
{ 0x30, 0, 0 }, { 0x30, 0, 0x2000 }, { 0x30, 0, 0 }, { 0x30, 0, 0x2000 }, { 0x80, 0, 0 },
{ 0x80, 0, 0x3 }, { 0x80, 0, 0x3 }, { 0x30, 0, 0x3 }, { 0x80, 0, 0x2 }, { 0x80, 0, 0x2 },
{ 0x30, 0, 0 }, { 0x60, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0x42 }, { 0x30, 0, 0x42 },
{ 0x30, 0, 0x43 }, { 0x60, 0x80, 0x2000 }, { 0x60, 0x80, 0x2000 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0x3 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0x3 },
{ 0x30, 0, 0x2000 }, { 0x80, 0, 0x2000 }, { 0x80, 0, 0x3 }, { 0x30, 0, 0 }, { 0x30, 0, 0x2000 },
{ 0x30, 0, 0x2000 }, { 0x30, 0, 0x2000 }, { 0x30, 0, 0x2000 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x80, 0, 0x3 }, { 0x30, 0, 0x2000 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0x43 },
{ 0x30, 0, 0x3 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0 }, { 0x30, 0, 0x2000 }, { 0x10, 0, 0x7 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0x2000 }, { 0x30, 0, 0x2000 }, { 0x30, 0, 0x2000 },
{ 0x58, 0, 0x60 }, { 0x60, 0, 0x3 }, { 0x60, 0, 0x3 }, { 0x60, 0, 0x3 }, { 0x70, 0, 0x3 },
{ 0x70, 0, 0x3 }, { 0x30, 0, 0 }, { 0x70, 0, 0x3 }, { 0x30, 0, 0x4 }, { 0x30, 0, 0x3 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x60, 0, 0 }, { 0x60, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0x80, 0 }, { 0x30, 0x80, 0x40 }, { 0x30, 0x80, 0x40 }, { 0x60, 0, 0x2000 }, { 0x70, 0, 0x2000 },
{ 0x30, 0, 0x80 }, { 0x30, 0, 0x2000 }, { 0x30, 0, 0x3 }, { 0x30, 0, 0 }, { 0x60, 0, 0x3 },
{ 0x70, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x40, 0, 0 }, { 0x58, 0, 0x40 }, { 0x58, 0, 0x40 },
{ 0x30, 0, 0x40 }, { 0x30, 0, 0x41 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
#include "tables/sfx/environmentbank_table.h"
};
SfxParams sSystemBankParams[] = {
{ 0xC0, 0, 0 }, { 0xC0, 0, 0 }, { 0xB0, 0, 0x20 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x50, 0, 0 }, { 0x30, 0, 0x20 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x20, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x28, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x18, 0, 0 }, { 0x2C, 0, 0 }, { 0x2C, 0, 0 }, { 0x20, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x20, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x60, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x60, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0x20 }, { 0x60, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0xA0, 0, 0x8 }, { 0xA0, 0, 0x8 }, { 0x30, 0, 0 },
#include "tables/sfx/systembank_table.h"
};
SfxParams sOcarinaBankParams[] = {
{ 0x30, 0, 0 }, { 0x30, 0, 0x20 }, { 0x30, 0, 0x642 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0x2000 }, { 0x30, 0, 0x2000 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
#include "tables/sfx/ocarinabank_table.h"
};
SfxParams sVoiceBankParams[] = {
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x20, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x442 },
{ 0x30, 0, 0x442 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x50, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x482 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x80, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x20, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x442 }, { 0x30, 0, 0x442 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x50, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x481 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0 }, { 0x60, 0, 0x20 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0 },
{ 0x30, 0, 0 }, { 0x30, 0, 0 }, { 0x30, 0, 0x8041 }, { 0x30, 0, 0x8041 }, { 0x30, 0, 0x8041 },
{ 0x30, 0, 0x8041 }, { 0x30, 0, 0x8041 }, { 0x30, 0, 0x8041 }, { 0x30, 0, 0x8041 }, { 0x30, 0, 0x8041 },
{ 0x30, 0, 0x8041 }, { 0x30, 0, 0x8041 }, { 0x30, 0, 0x8041 }, { 0x30, 0, 0x8000 }, { 0x30, 0, 0x8000 },
{ 0x30, 0, 0x8000 }, { 0x30, 0, 0x8041 }, { 0x30, 0, 0x8041 }, { 0x30, 0, 0x8041 }, { 0x30, 0, 0x8041 },
{ 0x30, 0, 0x8041 }, { 0x30, 0, 0x8041 }, { 0x30, 0, 0x8041 }, { 0x30, 0, 0x8041 }, { 0x30, 0, 0x8041 },
{ 0x30, 0, 0x8041 }, { 0x30, 0, 0x8041 }, { 0x30, 0, 0x8041 }, { 0x30, 0, 0x8041 }, { 0x30, 0, 0x8041 },
{ 0x30, 0, 0x8041 }, { 0x30, 0, 0x8041 }, { 0x30, 0, 0x8041 }, { 0x30, 0, 0x8041 }, { 0x30, 0, 0x8041 },
{ 0x30, 0, 0x8041 }, { 0x30, 0, 0x8001 }, { 0x30, 0, 0x8043 }, { 0x30, 0, 0x8043 }, { 0x30, 0, 0x8043 },
{ 0x30, 0, 0x8041 }, { 0x30, 0, 0x8041 }, { 0x30, 0, 0x8041 }, { 0x30, 0, 0x8041 }, { 0x30, 0, 0x8041 },
{ 0x30, 0, 0x8041 }, { 0x30, 0, 0x8041 }, { 0x30, 0, 0x8041 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x20, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x442 }, { 0x30, 0, 0x442 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x50, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x481 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x20, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x442 },
{ 0x30, 0, 0x442 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x50, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x482 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x80, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x20, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x442 }, { 0x30, 0, 0x442 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x50, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x482 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x80, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x442 },
{ 0x30, 0, 0x442 }, { 0x30, 0, 0x442 }, { 0x20, 0, 0x442 }, { 0x30, 0, 0x442 }, { 0x30, 0, 0x442 },
{ 0x30, 0, 0x442 }, { 0x30, 0, 0x442 }, { 0x30, 0, 0x442 }, { 0x30, 0, 0x442 }, { 0x30, 0, 0x442 },
{ 0x30, 0, 0x442 }, { 0x30, 0, 0x442 }, { 0x50, 0, 0x442 }, { 0x30, 0, 0x442 }, { 0x30, 0, 0x442 },
{ 0x30, 0, 0x442 }, { 0x30, 0, 0x442 }, { 0x30, 0, 0x442 }, { 0x30, 0, 0x442 }, { 0x30, 0, 0x442 },
{ 0x30, 0, 0x442 }, { 0x30, 0, 0x442 }, { 0x30, 0, 0x442 }, { 0x30, 0, 0x482 }, { 0x30, 0, 0x442 },
{ 0x30, 0, 0x442 }, { 0x30, 0, 0x442 }, { 0x30, 0, 0x442 }, { 0x80, 0, 0x442 }, { 0x30, 0, 0x442 },
{ 0x30, 0x80, 0x442 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
{ 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 }, { 0x30, 0, 0x402 },
#include "tables/sfx/voicebank_table.h"
};
#undef DEFINE_SFX
SfxParams* gSfxParams[7] = {
sPlayerBankParams, sItemBankParams, sEnvBankParams, sEnemyBankParams,
sSystemBankParams, sOcarinaBankParams, sVoiceBankParams,
File diff suppressed because it is too large Load Diff
+4 -4
View File
@@ -1,10 +1,10 @@
#include "global.h"
#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A5BD0/func_801A5BD0.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A5BD0/Audio_SetSfxBanksMute.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A5BD0/func_801A5C28.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A5BD0/Audio_SetFlagForBgmVolumeLow.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A5BD0/func_801A5C8C.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A5BD0/Audio_ClearFlagForBgmVolumeLow.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A5BD0/Audio_PlaySfxGeneral.s")
@@ -30,7 +30,7 @@
#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A5BD0/func_801A7484.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A5BD0/func_801A75E8.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A5BD0/Audio_StopSfxById.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A5BD0/func_801A7720.s")
+1
View File
@@ -1,3 +1,4 @@
#include "prevent_bss_reordering.h"
#include "global.h"
#include "system_malloc.h"
#include "overlays/gamestates/ovl_daytelop/z_daytelop.h"
+70 -2
View File
@@ -2,6 +2,74 @@
#include "system_malloc.h"
#include "z64load.h"
#pragma GLOBAL_ASM("asm/non_matchings/code/z_DLF/Overlay_LoadGameState.s")
void Overlay_LoadGameState(GameStateOverlay* overlayEntry) {
void* vramStart;
#pragma GLOBAL_ASM("asm/non_matchings/code/z_DLF/Overlay_FreeGameState.s")
if (overlayEntry->loadedRamAddr != NULL) {
return;
}
vramStart = overlayEntry->vramStart;
if (vramStart == NULL) {
overlayEntry->unk_28 = 0;
return;
}
overlayEntry->loadedRamAddr = Load2_AllocateAndLoad(overlayEntry->vromStart, overlayEntry->vromEnd,
(uintptr_t)vramStart, (uintptr_t)overlayEntry->vramEnd);
if (overlayEntry->loadedRamAddr != NULL) {
overlayEntry->unk_14 = (uintptr_t)(
(overlayEntry->unk_14 != NULL)
? (void*)((uintptr_t)overlayEntry->unk_14 - (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry))
: NULL);
overlayEntry->init =
(uintptr_t)((overlayEntry->init != NULL)
? (void*)((uintptr_t)overlayEntry->init - (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry))
: NULL);
overlayEntry->destroy = (uintptr_t)(
(overlayEntry->destroy != NULL)
? (void*)((uintptr_t)overlayEntry->destroy - (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry))
: NULL);
overlayEntry->unk_20 = (uintptr_t)(
(overlayEntry->unk_20 != NULL)
? (void*)((uintptr_t)overlayEntry->unk_20 - (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry))
: NULL);
overlayEntry->unk_24 = (uintptr_t)(
(overlayEntry->unk_24 != NULL)
? (void*)((uintptr_t)overlayEntry->unk_24 - (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry))
: NULL);
overlayEntry->unk_28 = 0;
}
}
void Overlay_FreeGameState(GameStateOverlay* overlayEntry) {
s32 var_v0;
if (overlayEntry->loadedRamAddr != NULL) {
var_v0 = overlayEntry->unk_28 != 0 ? -1 : 0;
if (var_v0 == 0) {
overlayEntry->unk_14 = (uintptr_t)(
(overlayEntry->unk_14 != NULL)
? (void*)((uintptr_t)overlayEntry->unk_14 + (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry))
: NULL);
overlayEntry->init = (uintptr_t)(
(overlayEntry->init != NULL)
? (void*)((uintptr_t)overlayEntry->init + (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry))
: NULL);
overlayEntry->destroy = (uintptr_t)(
(overlayEntry->destroy != NULL)
? (void*)((uintptr_t)overlayEntry->destroy + (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry))
: NULL);
overlayEntry->unk_20 = (uintptr_t)(
(overlayEntry->unk_20 != NULL)
? (void*)((uintptr_t)overlayEntry->unk_20 + (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry))
: NULL);
overlayEntry->unk_24 = (uintptr_t)(
(overlayEntry->unk_24 != NULL)
? (void*)((uintptr_t)overlayEntry->unk_24 + (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry))
: NULL);
SystemArena_Free(overlayEntry->loadedRamAddr);
overlayEntry->loadedRamAddr = NULL;
}
}
}
+29 -28
View File
@@ -391,12 +391,12 @@ void func_800B4B50(Actor* actor, Lights* mapper, PlayState* play) {
}
}
void Actor_GetProjectedPos(PlayState* play, Vec3f* arg1, Vec3f* arg2, f32* arg3) {
SkinMatrix_Vec3fMtxFMultXYZW(&play->viewProjectionMtxF, arg1, arg2, arg3);
if (*arg3 < 1.0f) {
*arg3 = 1.0f;
void Actor_GetProjectedPos(PlayState* play, Vec3f* worldPos, Vec3f* projectedPos, f32* invW) {
SkinMatrix_Vec3fMtxFMultXYZW(&play->viewProjectionMtxF, worldPos, projectedPos, invW);
if (*invW < 1.0f) {
*invW = 1.0f;
} else {
*arg3 = 1.0f / *arg3;
*invW = 1.0f / *invW;
}
}
@@ -419,7 +419,7 @@ TatlColor sTatlColorList[] = {
{ { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } },
{ { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, { { 255, 255, 0, 255 }, { 200, 155, 0, 0 } },
{ { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } },
{ { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }
{ { 0, 255, 0, 255 }, { 0, 255, 0, 0 } },
};
void func_800B4F78(TargetContext* targetCtx, s32 type, PlayState* play) {
@@ -480,9 +480,9 @@ void Actor_DrawZTarget(TargetContext* targetCtx, PlayState* play) {
TargetContextEntry* entry;
s16 alpha = 255;
f32 var1 = 1.0f;
Vec3f spBC;
Vec3f projectedPos;
s32 spB8;
f32 spB4;
f32 invW;
s32 spB0;
s32 spAC;
f32 var2;
@@ -505,22 +505,22 @@ void Actor_DrawZTarget(TargetContext* targetCtx, PlayState* play) {
alpha = targetCtx->unk48;
}
Actor_GetProjectedPos(play, &targetCtx->targetCenterPos, &spBC, &spB4);
Actor_GetProjectedPos(play, &targetCtx->targetCenterPos, &projectedPos, &invW);
spBC.x = (160 * (spBC.x * spB4)) * var1;
spBC.x = CLAMP(spBC.x, -320.0f, 320.0f);
projectedPos.x = (160 * (projectedPos.x * invW)) * var1;
projectedPos.x = CLAMP(projectedPos.x, -320.0f, 320.0f);
spBC.y = (120 * (spBC.y * spB4)) * var1;
spBC.y = CLAMP(spBC.y, -240.0f, 240.0f);
projectedPos.y = (120 * (projectedPos.y * invW)) * var1;
projectedPos.y = CLAMP(projectedPos.y, -240.0f, 240.0f);
spBC.z = spBC.z * var1;
projectedPos.z = projectedPos.z * var1;
targetCtx->unk4C--;
if (targetCtx->unk4C < 0) {
targetCtx->unk4C = 2;
}
Target_SetPos(targetCtx, targetCtx->unk4C, spBC.x, spBC.y, spBC.z);
Target_SetPos(targetCtx, targetCtx->unk4C, projectedPos.x, projectedPos.y, projectedPos.z);
if ((!(player->stateFlags1 & 0x40)) || (actor != player->unk_730)) {
OVERLAY_DISP = Gfx_CallSetupDL(OVERLAY_DISP, 0x39);
@@ -1966,18 +1966,19 @@ void Actor_GetScreenPos(PlayState* play, Actor* actor, s16* x, s16* y) {
f32 w;
Actor_GetProjectedPos(play, &actor->focus.pos, &projectedPos, &w);
*x = (projectedPos.x * w * (SCREEN_WIDTH / 2)) + (SCREEN_WIDTH / 2);
*y = (projectedPos.y * w * -(SCREEN_HEIGHT / 2)) + (SCREEN_HEIGHT / 2);
*x = PROJECTED_TO_SCREEN_X(projectedPos, w);
*y = PROJECTED_TO_SCREEN_Y(projectedPos, w);
}
s32 func_800B8934(PlayState* play, Actor* actor) {
Vec3f sp2C;
f32 sp28;
Vec3f projectedPos;
f32 invW;
s32 pad[2];
Actor_GetProjectedPos(play, &actor->focus.pos, &sp2C, &sp28);
Actor_GetProjectedPos(play, &actor->focus.pos, &projectedPos, &invW);
return (sp2C.x * sp28 >= -1.0f) && (sp2C.x * sp28 <= 1.0f) && (sp2C.y * sp28 >= -1.0f) && (sp2C.y * sp28 <= 1.0f);
return (projectedPos.x * invW >= -1.0f) && (projectedPos.x * invW <= 1.0f) && (projectedPos.y * invW >= -1.0f) &&
(projectedPos.y * invW <= 1.0f);
}
s32 Actor_HasParent(Actor* actor, PlayState* play) {
@@ -2128,7 +2129,7 @@ void func_800B8E58(Player* player, u16 sfxId) {
if (player->currentMask == PLAYER_MASK_GIANT) {
func_8019F170(&player->actor.projectedPos, sfxId);
} else {
Audio_PlaySfxGeneral(sfxId, &player->actor.projectedPos, 4, &D_801DB4B0, &D_801DB4B0, &D_801DB4B8);
Audio_PlaySfxGeneral(sfxId, &player->actor.projectedPos, 4, &D_801DB4B0, &D_801DB4B0, &gSfxDefaultReverb);
}
}
@@ -2568,13 +2569,13 @@ void func_800B9D1C(Actor* actor) {
if (sfxId != 0) {
if (actor->audioFlags & 2) {
Audio_PlaySfxGeneral(sfxId, &actor->projectedPos, 4, &D_801DB4B0, &D_801DB4B0, &D_801DB4B8);
Audio_PlaySfxGeneral(sfxId, &actor->projectedPos, 4, &D_801DB4B0, &D_801DB4B0, &gSfxDefaultReverb);
} else if (actor->audioFlags & 4) {
play_sound(sfxId);
} else if (actor->audioFlags & 8) {
func_8019F128(sfxId);
} else if (actor->audioFlags & 0x10) {
func_801A0810(&D_801DB4A4, NA_SE_SY_TIMER - SFX_FLAG, (sfxId - 1));
func_801A0810(&gSfxDefaultPos, NA_SE_SY_TIMER - SFX_FLAG, (sfxId - 1));
} else if (actor->audioFlags & 1) {
Audio_PlaySfxAtPos(&actor->projectedPos, sfxId);
}
@@ -3153,10 +3154,10 @@ ActorInit* Actor_LoadOverlay(ActorContext* actorCtx, s16 index) {
overlayEntry->numLoaded = 0;
}
actorInit =
(uintptr_t)((overlayEntry->initInfo != NULL)
? (void*)(-OVERLAY_RELOCATION_OFFSET(overlayEntry) + (uintptr_t)overlayEntry->initInfo)
: NULL);
actorInit = (uintptr_t)(
(overlayEntry->initInfo != NULL)
? (void*)((uintptr_t)overlayEntry->initInfo - (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry))
: NULL);
}
return actorInit;
+1 -2
View File
@@ -256,8 +256,7 @@ void Cutscene_Command_Misc(PlayState* play2, CutsceneContext* csCtx, CsCmdBase*
}
break;
case 0x13:
// AudioOcarina_PlayLongScarecrowAfterCredits
func_8019D758();
AudioOcarina_PlayLongScarecrowAfterCredits();
csCtx->frames = cmd->startFrame - 1;
break;
case 0x14:
+3 -2
View File
@@ -188,8 +188,9 @@ void EffectSs_Spawn(PlayState* play, s32 type, s32 priority, void* initData) {
Load2_LoadOverlay(entry->vromStart, entry->vromEnd, entry->vramStart, entry->vramEnd, entry->loadedRamAddr);
}
initInfo = (uintptr_t)(
(entry->initInfo != NULL) ? (void*)(-OVERLAY_RELOCATION_OFFSET(entry) + (uintptr_t)entry->initInfo) : NULL);
initInfo = (uintptr_t)((entry->initInfo != NULL)
? (void*)((uintptr_t)entry->initInfo - (intptr_t)OVERLAY_RELOCATION_OFFSET(entry))
: NULL);
}
if (initInfo->init != NULL) {
+7 -7
View File
@@ -380,20 +380,20 @@ void Lights_GlowCheck(PlayState* play) {
if (light->info->type == LIGHT_POINT_GLOW) {
Vec3f pos;
Vec3f multDest;
f32 wDest;
Vec3f projectedPos;
f32 invW;
pos.x = params->x;
pos.y = params->y;
pos.z = params->z;
Actor_GetProjectedPos(play, &pos, &multDest, &wDest);
Actor_GetProjectedPos(play, &pos, &projectedPos, &invW);
params->drawGlow = 0;
if ((multDest.z > 1) && (fabsf(multDest.x * wDest) < 1) && (fabsf(multDest.y * wDest) < 1)) {
s32 wX = multDest.x * wDest * 160 + 160;
s32 wY = multDest.y * wDest * -120 + 120;
s32 wZ = (s32)((multDest.z * wDest) * 16352) + 16352;
if ((projectedPos.z > 1) && (fabsf(projectedPos.x * invW) < 1) && (fabsf(projectedPos.y * invW) < 1)) {
s32 wX = PROJECTED_TO_SCREEN_X(projectedPos, invW);
s32 wY = PROJECTED_TO_SCREEN_Y(projectedPos, invW);
s32 wZ = (s32)((projectedPos.z * invW) * 16352) + 16352;
s32 zBuf = func_80178A94(wX, wY);
if (wZ < zBuf) {
+228 -228
View File
@@ -7,119 +7,119 @@
{ { 0, 0 }, 0, 0, 0, 0 }
SceneTableEntry gSceneTable[] = {
SCENE_ENTRY(Z2_20SICHITAI2, 0x0116, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY_NONE(),
SCENE_ENTRY_NONE(),
SCENE_ENTRY_NONE(),
SCENE_ENTRY_NONE(),
SCENE_ENTRY_NONE(),
SCENE_ENTRY_NONE(),
SCENE_ENTRY(KAKUSIANA, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(SPOT00, 0x0000, SCENE_DRAW_CFG_NOTHING),
SCENE_ENTRY_NONE(),
SCENE_ENTRY(Z2_WITCH_SHOP, 0x011A, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_LAST_BS, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_HAKASHITA, 0x0113, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_AYASHIISHOP, 0x010E, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY_NONE(),
SCENE_ENTRY_NONE(),
SCENE_ENTRY(Z2_OMOYA, 0x0132, SCENE_DRAW_CFG_DEFAULT),
SCENE_ENTRY(Z2_BOWLING, 0x0108, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_SONCHONOIE, 0x010B, SCENE_DRAW_CFG_DEFAULT),
SCENE_ENTRY(Z2_IKANA, 0x0141, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_KAIZOKU, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_MILK_BAR, 0x010C, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_INISIE_N, 0x0144, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_TAKARAYA, 0x0109, SCENE_DRAW_CFG_DEFAULT),
SCENE_ENTRY(Z2_INISIE_R, 0x0144, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_OKUJOU, 0x0000, SCENE_DRAW_CFG_DEFAULT),
SCENE_ENTRY(Z2_OPENINGDAN, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_MITURIN, 0x011F, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_13HUBUKINOMITI, 0x0000, SCENE_DRAW_CFG_DEFAULT),
SCENE_ENTRY(Z2_CASTLE, 0x0142, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_DEKUTES, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_MITURIN_BS, 0x0000, SCENE_DRAW_CFG_DEFAULT),
SCENE_ENTRY(Z2_SYATEKI_MIZU, 0x0107, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_HAKUGIN, 0x012B, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_ROMANYMAE, 0x0149, SCENE_DRAW_CFG_DEFAULT),
SCENE_ENTRY(Z2_PIRATE, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_SYATEKI_MORI, 0x011B, SCENE_DRAW_CFG_DEFAULT),
SCENE_ENTRY(Z2_SINKAI, 0x0135, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_YOUSEI_IZUMI, 0x013E, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_KINSTA1, 0x011E, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_KINDAN2, 0x013F, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_TENMON_DAI, 0x0114, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_LAST_DEKU, 0x0000, SCENE_DRAW_CFG_DEFAULT),
SCENE_ENTRY(Z2_22DEKUCITY, 0x0118, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_KAJIYA, 0x0127, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_00KEIKOKU, 0x0100, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_POSTHOUSE, 0x0111, SCENE_DRAW_CFG_DEFAULT),
SCENE_ENTRY(Z2_LABO, 0x013A, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_DANPEI2TEST, 0x0113, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY_NONE(),
SCENE_ENTRY(Z2_16GORON_HOUSE, 0x0124, SCENE_DRAW_CFG_DEFAULT),
SCENE_ENTRY(Z2_33ZORACITY, 0x0136, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_8ITEMSHOP, 0x010F, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_F01, 0x012E, SCENE_DRAW_CFG_DEFAULT),
SCENE_ENTRY(Z2_INISIE_BS, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_30GYOSON, 0x0134, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_31MISAKI, 0x0134, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_TAKARAKUJI, 0x0112, SCENE_DRAW_CFG_DEFAULT),
SCENE_ENTRY_NONE(),
SCENE_ENTRY(Z2_TORIDE, 0x0138, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_FISHERMAN, 0x013B, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_GORONSHOP, 0x0129, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_DEKU_KING, 0x011C, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_LAST_GORON, 0x0000, SCENE_DRAW_CFG_DEFAULT),
SCENE_ENTRY(Z2_24KEMONOMITI, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_F01_B, 0x0130, SCENE_DRAW_CFG_DEFAULT),
SCENE_ENTRY(Z2_F01C, 0x012F, SCENE_DRAW_CFG_DEFAULT),
SCENE_ENTRY(Z2_BOTI, 0x0106, SCENE_DRAW_CFG_DEFAULT),
SCENE_ENTRY(Z2_HAKUGIN_BS, 0x0000, SCENE_DRAW_CFG_DEFAULT),
SCENE_ENTRY(Z2_20SICHITAI, 0x0116, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_21MITURINMAE, 0x0117, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_LAST_ZORA, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_11GORONNOSATO2, 0x0123, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_SEA, 0x013D, SCENE_DRAW_CFG_GREAT_BAY_TEMPLE),
SCENE_ENTRY(Z2_35TAKI, 0x0137, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_REDEAD, 0x0145, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_BANDROOM, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_11GORONNOSATO, 0x0123, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_GORON_HAKA, 0x012A, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_SECOM, 0x0143, SCENE_DRAW_CFG_MAT_ANIM_MANUAL_STEP),
SCENE_ENTRY(Z2_10YUKIYAMANOMURA, 0x0122, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_TOUGITES, 0x0146, SCENE_DRAW_CFG_DEFAULT),
SCENE_ENTRY(Z2_DANPEI, 0x0120, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_IKANAMAE, 0x0000, SCENE_DRAW_CFG_DEFAULT),
SCENE_ENTRY(Z2_DOUJOU, 0x0110, SCENE_DRAW_CFG_DEFAULT),
SCENE_ENTRY(Z2_MUSICHOUSE, 0x0147, SCENE_DRAW_CFG_MAT_ANIM_MANUAL_STEP),
SCENE_ENTRY(Z2_IKNINSIDE, 0x0142, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_MAP_SHOP, 0x0119, SCENE_DRAW_CFG_DEFAULT),
SCENE_ENTRY(Z2_F40, 0x0140, SCENE_DRAW_CFG_DEFAULT),
SCENE_ENTRY(Z2_F41, 0x0000, SCENE_DRAW_CFG_DEFAULT),
SCENE_ENTRY(Z2_10YUKIYAMANOMURA2, 0x0122, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_14YUKIDAMANOMITI, 0x0000, SCENE_DRAW_CFG_DEFAULT),
SCENE_ENTRY(Z2_12HAKUGINMAE, 0x0125, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_17SETUGEN, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_17SETUGEN2, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_SEA_BS, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_RANDOM, 0x012C, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_YADOYA, 0x010A, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_KONPEKI_ENT, 0x0139, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_INSIDETOWER, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_26SARUNOMORI, 0x011D, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_LOST_WOODS, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_LAST_LINK, 0x0000, SCENE_DRAW_CFG_DEFAULT),
SCENE_ENTRY(Z2_SOUGEN, 0x0000, SCENE_DRAW_CFG_DEFAULT),
SCENE_ENTRY(Z2_BOMYA, 0x010D, SCENE_DRAW_CFG_DEFAULT),
SCENE_ENTRY(Z2_KYOJINNOMA, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_KOEPONARACE, 0x0131, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_GORONRACE, 0x0126, SCENE_DRAW_CFG_DEFAULT),
SCENE_ENTRY(Z2_TOWN, 0x0101, SCENE_DRAW_CFG_DEFAULT),
SCENE_ENTRY(Z2_ICHIBA, 0x0102, SCENE_DRAW_CFG_DEFAULT),
SCENE_ENTRY(Z2_BACKTOWN, 0x0103, SCENE_DRAW_CFG_DEFAULT),
SCENE_ENTRY(Z2_CLOCKTOWER, 0x0104, SCENE_DRAW_CFG_MAT_ANIM),
SCENE_ENTRY(Z2_ALLEY, 0x0105, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x00 */ SCENE_ENTRY(Z2_20SICHITAI2, 0x0116, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x01 */ SCENE_ENTRY_NONE(),
/* 0x02 */ SCENE_ENTRY_NONE(),
/* 0x03 */ SCENE_ENTRY_NONE(),
/* 0x04 */ SCENE_ENTRY_NONE(),
/* 0x05 */ SCENE_ENTRY_NONE(),
/* 0x06 */ SCENE_ENTRY_NONE(),
/* 0x07 */ SCENE_ENTRY(KAKUSIANA, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x08 */ SCENE_ENTRY(SPOT00, 0x0000, SCENE_DRAW_CFG_NOTHING),
/* 0x09 */ SCENE_ENTRY_NONE(),
/* 0x0A */ SCENE_ENTRY(Z2_WITCH_SHOP, 0x011A, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x0B */ SCENE_ENTRY(Z2_LAST_BS, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x0C */ SCENE_ENTRY(Z2_HAKASHITA, 0x0113, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x0D */ SCENE_ENTRY(Z2_AYASHIISHOP, 0x010E, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x0E */ SCENE_ENTRY_NONE(),
/* 0x0F */ SCENE_ENTRY_NONE(),
/* 0x10 */ SCENE_ENTRY(Z2_OMOYA, 0x0132, SCENE_DRAW_CFG_DEFAULT),
/* 0x11 */ SCENE_ENTRY(Z2_BOWLING, 0x0108, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x12 */ SCENE_ENTRY(Z2_SONCHONOIE, 0x010B, SCENE_DRAW_CFG_DEFAULT),
/* 0x13 */ SCENE_ENTRY(Z2_IKANA, 0x0141, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x14 */ SCENE_ENTRY(Z2_KAIZOKU, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x15 */ SCENE_ENTRY(Z2_MILK_BAR, 0x010C, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x16 */ SCENE_ENTRY(Z2_INISIE_N, 0x0144, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x17 */ SCENE_ENTRY(Z2_TAKARAYA, 0x0109, SCENE_DRAW_CFG_DEFAULT),
/* 0x18 */ SCENE_ENTRY(Z2_INISIE_R, 0x0144, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x19 */ SCENE_ENTRY(Z2_OKUJOU, 0x0000, SCENE_DRAW_CFG_DEFAULT),
/* 0x1A */ SCENE_ENTRY(Z2_OPENINGDAN, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x1B */ SCENE_ENTRY(Z2_MITURIN, 0x011F, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x1C */ SCENE_ENTRY(Z2_13HUBUKINOMITI, 0x0000, SCENE_DRAW_CFG_DEFAULT),
/* 0x1D */ SCENE_ENTRY(Z2_CASTLE, 0x0142, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x1E */ SCENE_ENTRY(Z2_DEKUTES, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x1F */ SCENE_ENTRY(Z2_MITURIN_BS, 0x0000, SCENE_DRAW_CFG_DEFAULT),
/* 0x20 */ SCENE_ENTRY(Z2_SYATEKI_MIZU, 0x0107, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x21 */ SCENE_ENTRY(Z2_HAKUGIN, 0x012B, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x22 */ SCENE_ENTRY(Z2_ROMANYMAE, 0x0149, SCENE_DRAW_CFG_DEFAULT),
/* 0x23 */ SCENE_ENTRY(Z2_PIRATE, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x24 */ SCENE_ENTRY(Z2_SYATEKI_MORI, 0x011B, SCENE_DRAW_CFG_DEFAULT),
/* 0x25 */ SCENE_ENTRY(Z2_SINKAI, 0x0135, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x26 */ SCENE_ENTRY(Z2_YOUSEI_IZUMI, 0x013E, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x27 */ SCENE_ENTRY(Z2_KINSTA1, 0x011E, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x28 */ SCENE_ENTRY(Z2_KINDAN2, 0x013F, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x29 */ SCENE_ENTRY(Z2_TENMON_DAI, 0x0114, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x2A */ SCENE_ENTRY(Z2_LAST_DEKU, 0x0000, SCENE_DRAW_CFG_DEFAULT),
/* 0x2B */ SCENE_ENTRY(Z2_22DEKUCITY, 0x0118, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x2C */ SCENE_ENTRY(Z2_KAJIYA, 0x0127, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x2D */ SCENE_ENTRY(Z2_00KEIKOKU, 0x0100, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x2E */ SCENE_ENTRY(Z2_POSTHOUSE, 0x0111, SCENE_DRAW_CFG_DEFAULT),
/* 0x2F */ SCENE_ENTRY(Z2_LABO, 0x013A, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x30 */ SCENE_ENTRY(Z2_DANPEI2TEST, 0x0113, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x31 */ SCENE_ENTRY_NONE(),
/* 0x32 */ SCENE_ENTRY(Z2_16GORON_HOUSE, 0x0124, SCENE_DRAW_CFG_DEFAULT),
/* 0x33 */ SCENE_ENTRY(Z2_33ZORACITY, 0x0136, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x34 */ SCENE_ENTRY(Z2_8ITEMSHOP, 0x010F, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x35 */ SCENE_ENTRY(Z2_F01, 0x012E, SCENE_DRAW_CFG_DEFAULT),
/* 0x36 */ SCENE_ENTRY(Z2_INISIE_BS, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x37 */ SCENE_ENTRY(Z2_30GYOSON, 0x0134, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x38 */ SCENE_ENTRY(Z2_31MISAKI, 0x0134, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x39 */ SCENE_ENTRY(Z2_TAKARAKUJI, 0x0112, SCENE_DRAW_CFG_DEFAULT),
/* 0x3A */ SCENE_ENTRY_NONE(),
/* 0x3B */ SCENE_ENTRY(Z2_TORIDE, 0x0138, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x3C */ SCENE_ENTRY(Z2_FISHERMAN, 0x013B, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x3D */ SCENE_ENTRY(Z2_GORONSHOP, 0x0129, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x3E */ SCENE_ENTRY(Z2_DEKU_KING, 0x011C, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x3F */ SCENE_ENTRY(Z2_LAST_GORON, 0x0000, SCENE_DRAW_CFG_DEFAULT),
/* 0x40 */ SCENE_ENTRY(Z2_24KEMONOMITI, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x41 */ SCENE_ENTRY(Z2_F01_B, 0x0130, SCENE_DRAW_CFG_DEFAULT),
/* 0x42 */ SCENE_ENTRY(Z2_F01C, 0x012F, SCENE_DRAW_CFG_DEFAULT),
/* 0x43 */ SCENE_ENTRY(Z2_BOTI, 0x0106, SCENE_DRAW_CFG_DEFAULT),
/* 0x44 */ SCENE_ENTRY(Z2_HAKUGIN_BS, 0x0000, SCENE_DRAW_CFG_DEFAULT),
/* 0x45 */ SCENE_ENTRY(Z2_20SICHITAI, 0x0116, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x46 */ SCENE_ENTRY(Z2_21MITURINMAE, 0x0117, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x47 */ SCENE_ENTRY(Z2_LAST_ZORA, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x48 */ SCENE_ENTRY(Z2_11GORONNOSATO2, 0x0123, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x49 */ SCENE_ENTRY(Z2_SEA, 0x013D, SCENE_DRAW_CFG_GREAT_BAY_TEMPLE),
/* 0x4A */ SCENE_ENTRY(Z2_35TAKI, 0x0137, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x4B */ SCENE_ENTRY(Z2_REDEAD, 0x0145, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x4C */ SCENE_ENTRY(Z2_BANDROOM, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x4D */ SCENE_ENTRY(Z2_11GORONNOSATO, 0x0123, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x4E */ SCENE_ENTRY(Z2_GORON_HAKA, 0x012A, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x4F */ SCENE_ENTRY(Z2_SECOM, 0x0143, SCENE_DRAW_CFG_MAT_ANIM_MANUAL_STEP),
/* 0x50 */ SCENE_ENTRY(Z2_10YUKIYAMANOMURA, 0x0122, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x51 */ SCENE_ENTRY(Z2_TOUGITES, 0x0146, SCENE_DRAW_CFG_DEFAULT),
/* 0x52 */ SCENE_ENTRY(Z2_DANPEI, 0x0120, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x53 */ SCENE_ENTRY(Z2_IKANAMAE, 0x0000, SCENE_DRAW_CFG_DEFAULT),
/* 0x54 */ SCENE_ENTRY(Z2_DOUJOU, 0x0110, SCENE_DRAW_CFG_DEFAULT),
/* 0x55 */ SCENE_ENTRY(Z2_MUSICHOUSE, 0x0147, SCENE_DRAW_CFG_MAT_ANIM_MANUAL_STEP),
/* 0x56 */ SCENE_ENTRY(Z2_IKNINSIDE, 0x0142, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x57 */ SCENE_ENTRY(Z2_MAP_SHOP, 0x0119, SCENE_DRAW_CFG_DEFAULT),
/* 0x58 */ SCENE_ENTRY(Z2_F40, 0x0140, SCENE_DRAW_CFG_DEFAULT),
/* 0x59 */ SCENE_ENTRY(Z2_F41, 0x0000, SCENE_DRAW_CFG_DEFAULT),
/* 0x5A */ SCENE_ENTRY(Z2_10YUKIYAMANOMURA2, 0x0122, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x5B */ SCENE_ENTRY(Z2_14YUKIDAMANOMITI, 0x0000, SCENE_DRAW_CFG_DEFAULT),
/* 0x5C */ SCENE_ENTRY(Z2_12HAKUGINMAE, 0x0125, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x5D */ SCENE_ENTRY(Z2_17SETUGEN, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x5E */ SCENE_ENTRY(Z2_17SETUGEN2, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x5F */ SCENE_ENTRY(Z2_SEA_BS, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x60 */ SCENE_ENTRY(Z2_RANDOM, 0x012C, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x61 */ SCENE_ENTRY(Z2_YADOYA, 0x010A, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x62 */ SCENE_ENTRY(Z2_KONPEKI_ENT, 0x0139, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x63 */ SCENE_ENTRY(Z2_INSIDETOWER, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x64 */ SCENE_ENTRY(Z2_26SARUNOMORI, 0x011D, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x65 */ SCENE_ENTRY(Z2_LOST_WOODS, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x66 */ SCENE_ENTRY(Z2_LAST_LINK, 0x0000, SCENE_DRAW_CFG_DEFAULT),
/* 0x67 */ SCENE_ENTRY(Z2_SOUGEN, 0x0000, SCENE_DRAW_CFG_DEFAULT),
/* 0x68 */ SCENE_ENTRY(Z2_BOMYA, 0x010D, SCENE_DRAW_CFG_DEFAULT),
/* 0x69 */ SCENE_ENTRY(Z2_KYOJINNOMA, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x6A */ SCENE_ENTRY(Z2_KOEPONARACE, 0x0131, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x6B */ SCENE_ENTRY(Z2_GORONRACE, 0x0126, SCENE_DRAW_CFG_DEFAULT),
/* 0x6C */ SCENE_ENTRY(Z2_TOWN, 0x0101, SCENE_DRAW_CFG_DEFAULT),
/* 0x6D */ SCENE_ENTRY(Z2_ICHIBA, 0x0102, SCENE_DRAW_CFG_DEFAULT),
/* 0x6E */ SCENE_ENTRY(Z2_BACKTOWN, 0x0103, SCENE_DRAW_CFG_DEFAULT),
/* 0x6F */ SCENE_ENTRY(Z2_CLOCKTOWER, 0x0104, SCENE_DRAW_CFG_MAT_ANIM),
/* 0x70 */ SCENE_ENTRY(Z2_ALLEY, 0x0105, SCENE_DRAW_CFG_MAT_ANIM),
};
static EntranceTableEntry sMayorsResidenceEntrance0[] = {
@@ -782,17 +782,17 @@ static EntranceTableEntry* sSwampShootingGalleryEntranceTable[] = {
sSwampShootingGalleryEntrance0,
};
static EntranceTableEntry sPinaccleRockEntrance0[] = {
static EntranceTableEntry sPinnacleRockEntrance0[] = {
{ 0x25, 0x00, 0x4A14 },
};
static EntranceTableEntry sPinaccleRockEntrance1[] = {
static EntranceTableEntry sPinnacleRockEntrance1[] = {
{ 0x25, 0x01, 0x0A14 },
};
static EntranceTableEntry* sPinaccleRockEntranceTable[] = {
sPinaccleRockEntrance0,
sPinaccleRockEntrance1,
static EntranceTableEntry* sPinnacleRockEntranceTable[] = {
sPinnacleRockEntrance0,
sPinnacleRockEntrance1,
};
static EntranceTableEntry sFairyFountainEntrance0[] = {
@@ -2657,116 +2657,116 @@ static EntranceTableEntry* sCutsceneEntranceTable[] = {
{ 0, NULL, NULL }
static SceneEntranceTableEntry sSceneEntranceTable[] = {
SCENE_ENTRANCE(sMayorsResidenceEntranceTable, "Z2_SONCHONOIE"),
SCENE_ENTRANCE(sMajorasLairEntranceTable, "Z2_LAST_BS"),
SCENE_ENTRANCE(sMagicHagsPotionShopEntranceTable, "Z2_WITCH_SHOP"),
SCENE_ENTRANCE(sRanchHouseEntranceTable, "Z2_OMOYA"),
SCENE_ENTRANCE(sHoneyAndDarlingsShopEntranceTable, "Z2_BOWLING"),
SCENE_ENTRANCE(sBeneathTheGraveryardEntranceTable, "Z2_HAKASHITA"),
SCENE_ENTRANCE(sSouthernSwampClearedEntranceTable, "Z2_20SICHITAI2"),
SCENE_ENTRANCE(sCuriosityShopEntranceTable, "Z2_AYASHIISHOP"),
SCENE_ENTRANCE_NONE(),
SCENE_ENTRANCE_NONE(),
SCENE_ENTRANCE(sGrottosEntranceTable, "KAKUSIANA"),
SCENE_ENTRANCE_NONE(),
SCENE_ENTRANCE_NONE(),
SCENE_ENTRANCE_NONE(),
SCENE_ENTRANCE(sCutsceneEntranceTable, "SPOT00"),
SCENE_ENTRANCE_NONE(),
SCENE_ENTRANCE(sIkanaCanyonEntranceTable, "Z2_IKANA"),
SCENE_ENTRANCE(sPiratesFortressEntranceTable, "Z2_KAIZOKU"),
SCENE_ENTRANCE(sMilkBarEntranceTable, "Z2_MILK_BAR"),
SCENE_ENTRANCE(sStoneTowerTempleEntranceTable, "Z2_INISIE_N"),
SCENE_ENTRANCE(sTreasureChestShopEntranceTable, "Z2_TAKARAYA"),
SCENE_ENTRANCE(sStoneTowerTempleReversedEntranceTable, "Z2_INISIE_R"),
SCENE_ENTRANCE(sClockTowerRooftopEntranceTable, "Z2_OKUJOU"),
SCENE_ENTRANCE(sOpeningDungeonEntranceTable, "Z2_OPENINGDAN"),
SCENE_ENTRANCE(sWoodfallTempleEntranceTable, "Z2_MITURIN"),
SCENE_ENTRANCE(sPathToMountainVillageEntranceTable, "Z2_13HUBUKINOMITI"),
SCENE_ENTRANCE(sIkanaCastleEntranceTable, "Z2_CASTLE"),
SCENE_ENTRANCE(sDekuScrubPlaygroundEntranceTable, "Z2_DEKUTES"),
SCENE_ENTRANCE(sOdolwasLairEntranceTable, "Z2_MITURIN_BS"),
SCENE_ENTRANCE(sTownShootingGalleryEntranceTable, "Z2_SYATEKI_MIZU"),
SCENE_ENTRANCE(sSnowheadTempleEntranceTable, "Z2_HAKUGIN"),
SCENE_ENTRANCE(sMilkRoadEntranceTable, "Z2_ROMANYMAE"),
SCENE_ENTRANCE(sPiratesFortressInteriorEntranceTable, "Z2_PIRATE"),
SCENE_ENTRANCE(sSwampShootingGalleryEntranceTable, "Z2_SYATEKI_MORI"),
SCENE_ENTRANCE(sPinaccleRockEntranceTable, "Z2_SINKAI"),
SCENE_ENTRANCE(sFairyFountainEntranceTable, "Z2_YOUSEI_IZUMI"),
SCENE_ENTRANCE(sSwampSpiderHouseEntranceTable, "Z2_KINSTA1"),
SCENE_ENTRANCE(sOceansideSpiderHouseEntranceTable, "Z2_KINDAN2"),
SCENE_ENTRANCE(sAstralObservatoryEntranceTable, "Z2_TENMON_DAI"),
SCENE_ENTRANCE(sMoonDekuTrialEntranceTable, "Z2_LAST_DEKU"),
SCENE_ENTRANCE(sDekuPalaceEntranceTable, "Z2_22DEKUCITY"),
SCENE_ENTRANCE(sMountainSmithyEntranceTable, "Z2_KAJIYA"),
SCENE_ENTRANCE(sTerminaFieldEntranceTable, "Z2_00KEIKOKU"),
SCENE_ENTRANCE(sPostOfficeEntranceTable, "Z2_POSTHOUSE"),
SCENE_ENTRANCE(sMarineResearchLabEntranceTable, "Z2_LABO"),
SCENE_ENTRANCE(sDampesHouseEntranceTable, "Z2_DANPEI2TEST"),
SCENE_ENTRANCE_NONE(),
SCENE_ENTRANCE(sGoronShrineEntranceTable, "Z2_16GORON_HOUSE"),
SCENE_ENTRANCE(sZoraHallEntranceTable, "Z2_33ZORACITY"),
SCENE_ENTRANCE(sTradingPostEntranceTable, "Z2_8ITEMSHOP"),
SCENE_ENTRANCE(sRomaniRanchEntranceTable, "Z2_F01"),
SCENE_ENTRANCE(sTwinmoldsLairEntranceTable, "Z2_INISIE_BS"),
SCENE_ENTRANCE(sGreatBayCoastEntranceTable, "Z2_30GYOSON"),
SCENE_ENTRANCE(sZoraCapeEntranceTable, "Z2_31MISAKI"),
SCENE_ENTRANCE(sLotteryShopEntranceTable, "Z2_TAKARAKUJI"),
SCENE_ENTRANCE_NONE(),
SCENE_ENTRANCE(sPiratesFortressExteriorEntranceTable, "Z2_TORIDE"),
SCENE_ENTRANCE(sFishermansHutEntranceTable, "Z2_FISHERMAN"),
SCENE_ENTRANCE(sGoronShopEntranceTable, "Z2_GORONSHOP"),
SCENE_ENTRANCE(sDekuKingsChamberEntranceTable, "Z2_DEKU_KING"),
SCENE_ENTRANCE(sMoonGoronTrialEntranceTable, "Z2_LAST_GORON"),
SCENE_ENTRANCE(sRoadToSouthernSwampEntranceTable, "Z2_24KEMONOMITI"),
SCENE_ENTRANCE(sDoggyRacetrackEntranceTable, "Z2_F01_B"),
SCENE_ENTRANCE(sCuccoShackEntranceTable, "Z2_F01C"),
SCENE_ENTRANCE(sIkanaGraveyardEntranceTable, "Z2_BOTI"),
SCENE_ENTRANCE(sGohtsLairEntranceTable, "Z2_HAKUGIN_BS"),
SCENE_ENTRANCE(sSouthernSwampPoisonedEntranceTable, "Z2_20SICHITAI"),
SCENE_ENTRANCE(sWoodfallEntranceTable, "Z2_21MITURINMAE"),
SCENE_ENTRANCE(sMoonZoraTrialEntranceTable, "Z2_LAST_ZORA"),
SCENE_ENTRANCE(sGoronVillageSpringEntranceTable, "Z2_11GORONNOSATO2"),
SCENE_ENTRANCE(sGreatBayTempleEntranceTable, "Z2_SEA"),
SCENE_ENTRANCE(sWaterfallRapidsEntranceTable, "Z2_35TAKI"),
SCENE_ENTRANCE(sBeneathTheWellEntranceTable, "Z2_REDEAD"),
SCENE_ENTRANCE(sZoraHallRoomsEntranceTable, "Z2_BANDROOM"),
SCENE_ENTRANCE(sGoronVillageWinterEntranceTable, "Z2_11GORONNOSATO"),
SCENE_ENTRANCE(sGoronGraveryardEntranceTable, "Z2_GORON_HAKA"),
SCENE_ENTRANCE(sSakonsHideoutEntranceTable, "Z2_SECOM"),
SCENE_ENTRANCE(sMountainVillageWinterEntranceTable, "Z2_10YUKIYAMANOMURA"),
SCENE_ENTRANCE(sGhostHutEntranceTable, "Z2_TOUGITES"),
SCENE_ENTRANCE(sDekuShrineEntranceTable, "Z2_DANPEI"),
SCENE_ENTRANCE(sRoadToIkanaEntranceTable, "Z2_IKANAMAE"),
SCENE_ENTRANCE(sSwordmansSchoolEntranceTable, "Z2_DOUJOU"),
SCENE_ENTRANCE(sMusicBoxHouseEntranceTable, "Z2_MUSICHOUSE"),
SCENE_ENTRANCE(sIgosDuIkanasLairEntranceTable, "Z2_IKNINSIDE"),
SCENE_ENTRANCE(sTouristInformationEntranceTable, "Z2_MAP_SHOP"),
SCENE_ENTRANCE(sStoneTowerEntranceTable, "Z2_F40"),
SCENE_ENTRANCE(sStoneTowerInvertedEntranceTable, "Z2_F41"),
SCENE_ENTRANCE(sMountainVillageSpringEntranceTable, "Z2_10YUKIYAMANOMURA2"),
SCENE_ENTRANCE(sPathToSnowheadEntranceTable, "Z2_14YUKIDAMANOMITI"),
SCENE_ENTRANCE(sSnowheadEntranceTable, "Z2_12HAKUGINMAE"),
SCENE_ENTRANCE(sPathToGoronVillageWinterEntranceTable, "Z2_17SETUGEN"),
SCENE_ENTRANCE(sPathToGoronVillageSpringEntranceTable, "Z2_17SETUGEN2"),
SCENE_ENTRANCE(sGyorgsLairEntranceTable, "Z2_SEA_BS"),
SCENE_ENTRANCE(sSecretShrineEntranceTable, "Z2_RANDOM"),
SCENE_ENTRANCE(sStockPotInnEntranceTable, "Z2_YADOYA"),
SCENE_ENTRANCE(sGreatBayCutsceneEntranceTable, "Z2_KONPEKI_ENT"),
SCENE_ENTRANCE(sClockTowerInteriorEntranceTable, "Z2_INSIDETOWER"),
SCENE_ENTRANCE(sWoodsOfMysteryEntranceTable, "Z2_26SARUNOMORI"),
SCENE_ENTRANCE(sLostWoodsEntranceTable, "Z2_LOST_WOODS"),
SCENE_ENTRANCE(sMoonLinkTrialEntranceTable, "Z2_LAST_LINK"),
SCENE_ENTRANCE(sTheMoonEntranceTable, "Z2_SOUGEN"),
SCENE_ENTRANCE(sBombShopEntranceTable, "Z2_BOMYA"),
SCENE_ENTRANCE(sGiantsChamberEntranceTable, "Z2_KYOJINNOMA"),
SCENE_ENTRANCE(sGormanTrackEntranceTable, "Z2_KOEPONARACE"),
SCENE_ENTRANCE(sGoronRacetrackEntranceTable, "Z2_GORONRACE"),
SCENE_ENTRANCE(sEastClockTownEntranceTable, "Z2_TOWN"),
SCENE_ENTRANCE(sWestClockTownEntranceTable, "Z2_ICHIBA"),
SCENE_ENTRANCE(sNorthClockTownEntranceTable, "Z2_BACKTOWN"),
SCENE_ENTRANCE(sSouthClockTownEntranceTable, "Z2_CLOCKTOWER"),
SCENE_ENTRANCE(sLaundryPoolEntranceTable, "Z2_ALLEY"),
/* 0x00 */ SCENE_ENTRANCE(sMayorsResidenceEntranceTable, "Z2_SONCHONOIE"),
/* 0x01 */ SCENE_ENTRANCE(sMajorasLairEntranceTable, "Z2_LAST_BS"),
/* 0x02 */ SCENE_ENTRANCE(sMagicHagsPotionShopEntranceTable, "Z2_WITCH_SHOP"),
/* 0x03 */ SCENE_ENTRANCE(sRanchHouseEntranceTable, "Z2_OMOYA"),
/* 0x04 */ SCENE_ENTRANCE(sHoneyAndDarlingsShopEntranceTable, "Z2_BOWLING"),
/* 0x05 */ SCENE_ENTRANCE(sBeneathTheGraveryardEntranceTable, "Z2_HAKASHITA"),
/* 0x06 */ SCENE_ENTRANCE(sSouthernSwampClearedEntranceTable, "Z2_20SICHITAI2"),
/* 0x07 */ SCENE_ENTRANCE(sCuriosityShopEntranceTable, "Z2_AYASHIISHOP"),
/* 0x08 */ SCENE_ENTRANCE_NONE(),
/* 0x09 */ SCENE_ENTRANCE_NONE(),
/* 0x0A */ SCENE_ENTRANCE(sGrottosEntranceTable, "KAKUSIANA"),
/* 0x0B */ SCENE_ENTRANCE_NONE(),
/* 0x0C */ SCENE_ENTRANCE_NONE(),
/* 0x0D */ SCENE_ENTRANCE_NONE(),
/* 0x0E */ SCENE_ENTRANCE(sCutsceneEntranceTable, "SPOT00"),
/* 0x0F */ SCENE_ENTRANCE_NONE(),
/* 0x10 */ SCENE_ENTRANCE(sIkanaCanyonEntranceTable, "Z2_IKANA"),
/* 0x11 */ SCENE_ENTRANCE(sPiratesFortressEntranceTable, "Z2_KAIZOKU"),
/* 0x12 */ SCENE_ENTRANCE(sMilkBarEntranceTable, "Z2_MILK_BAR"),
/* 0x13 */ SCENE_ENTRANCE(sStoneTowerTempleEntranceTable, "Z2_INISIE_N"),
/* 0x14 */ SCENE_ENTRANCE(sTreasureChestShopEntranceTable, "Z2_TAKARAYA"),
/* 0x15 */ SCENE_ENTRANCE(sStoneTowerTempleReversedEntranceTable, "Z2_INISIE_R"),
/* 0x16 */ SCENE_ENTRANCE(sClockTowerRooftopEntranceTable, "Z2_OKUJOU"),
/* 0x17 */ SCENE_ENTRANCE(sOpeningDungeonEntranceTable, "Z2_OPENINGDAN"),
/* 0x18 */ SCENE_ENTRANCE(sWoodfallTempleEntranceTable, "Z2_MITURIN"),
/* 0x19 */ SCENE_ENTRANCE(sPathToMountainVillageEntranceTable, "Z2_13HUBUKINOMITI"),
/* 0x1A */ SCENE_ENTRANCE(sIkanaCastleEntranceTable, "Z2_CASTLE"),
/* 0x1B */ SCENE_ENTRANCE(sDekuScrubPlaygroundEntranceTable, "Z2_DEKUTES"),
/* 0x1C */ SCENE_ENTRANCE(sOdolwasLairEntranceTable, "Z2_MITURIN_BS"),
/* 0x1D */ SCENE_ENTRANCE(sTownShootingGalleryEntranceTable, "Z2_SYATEKI_MIZU"),
/* 0x1E */ SCENE_ENTRANCE(sSnowheadTempleEntranceTable, "Z2_HAKUGIN"),
/* 0x1F */ SCENE_ENTRANCE(sMilkRoadEntranceTable, "Z2_ROMANYMAE"),
/* 0x20 */ SCENE_ENTRANCE(sPiratesFortressInteriorEntranceTable, "Z2_PIRATE"),
/* 0x21 */ SCENE_ENTRANCE(sSwampShootingGalleryEntranceTable, "Z2_SYATEKI_MORI"),
/* 0x22 */ SCENE_ENTRANCE(sPinnacleRockEntranceTable, "Z2_SINKAI"),
/* 0x23 */ SCENE_ENTRANCE(sFairyFountainEntranceTable, "Z2_YOUSEI_IZUMI"),
/* 0x24 */ SCENE_ENTRANCE(sSwampSpiderHouseEntranceTable, "Z2_KINSTA1"),
/* 0x25 */ SCENE_ENTRANCE(sOceansideSpiderHouseEntranceTable, "Z2_KINDAN2"),
/* 0x26 */ SCENE_ENTRANCE(sAstralObservatoryEntranceTable, "Z2_TENMON_DAI"),
/* 0x27 */ SCENE_ENTRANCE(sMoonDekuTrialEntranceTable, "Z2_LAST_DEKU"),
/* 0x28 */ SCENE_ENTRANCE(sDekuPalaceEntranceTable, "Z2_22DEKUCITY"),
/* 0x29 */ SCENE_ENTRANCE(sMountainSmithyEntranceTable, "Z2_KAJIYA"),
/* 0x2A */ SCENE_ENTRANCE(sTerminaFieldEntranceTable, "Z2_00KEIKOKU"),
/* 0x2B */ SCENE_ENTRANCE(sPostOfficeEntranceTable, "Z2_POSTHOUSE"),
/* 0x2C */ SCENE_ENTRANCE(sMarineResearchLabEntranceTable, "Z2_LABO"),
/* 0x2D */ SCENE_ENTRANCE(sDampesHouseEntranceTable, "Z2_DANPEI2TEST"),
/* 0x2E */ SCENE_ENTRANCE_NONE(),
/* 0x2F */ SCENE_ENTRANCE(sGoronShrineEntranceTable, "Z2_16GORON_HOUSE"),
/* 0x30 */ SCENE_ENTRANCE(sZoraHallEntranceTable, "Z2_33ZORACITY"),
/* 0x31 */ SCENE_ENTRANCE(sTradingPostEntranceTable, "Z2_8ITEMSHOP"),
/* 0x32 */ SCENE_ENTRANCE(sRomaniRanchEntranceTable, "Z2_F01"),
/* 0x33 */ SCENE_ENTRANCE(sTwinmoldsLairEntranceTable, "Z2_INISIE_BS"),
/* 0x34 */ SCENE_ENTRANCE(sGreatBayCoastEntranceTable, "Z2_30GYOSON"),
/* 0x35 */ SCENE_ENTRANCE(sZoraCapeEntranceTable, "Z2_31MISAKI"),
/* 0x36 */ SCENE_ENTRANCE(sLotteryShopEntranceTable, "Z2_TAKARAKUJI"),
/* 0x37 */ SCENE_ENTRANCE_NONE(),
/* 0x38 */ SCENE_ENTRANCE(sPiratesFortressExteriorEntranceTable, "Z2_TORIDE"),
/* 0x39 */ SCENE_ENTRANCE(sFishermansHutEntranceTable, "Z2_FISHERMAN"),
/* 0x3A */ SCENE_ENTRANCE(sGoronShopEntranceTable, "Z2_GORONSHOP"),
/* 0x3B */ SCENE_ENTRANCE(sDekuKingsChamberEntranceTable, "Z2_DEKU_KING"),
/* 0x3C */ SCENE_ENTRANCE(sMoonGoronTrialEntranceTable, "Z2_LAST_GORON"),
/* 0x3D */ SCENE_ENTRANCE(sRoadToSouthernSwampEntranceTable, "Z2_24KEMONOMITI"),
/* 0x3E */ SCENE_ENTRANCE(sDoggyRacetrackEntranceTable, "Z2_F01_B"),
/* 0x3F */ SCENE_ENTRANCE(sCuccoShackEntranceTable, "Z2_F01C"),
/* 0x40 */ SCENE_ENTRANCE(sIkanaGraveyardEntranceTable, "Z2_BOTI"),
/* 0x41 */ SCENE_ENTRANCE(sGohtsLairEntranceTable, "Z2_HAKUGIN_BS"),
/* 0x42 */ SCENE_ENTRANCE(sSouthernSwampPoisonedEntranceTable, "Z2_20SICHITAI"),
/* 0x43 */ SCENE_ENTRANCE(sWoodfallEntranceTable, "Z2_21MITURINMAE"),
/* 0x44 */ SCENE_ENTRANCE(sMoonZoraTrialEntranceTable, "Z2_LAST_ZORA"),
/* 0x45 */ SCENE_ENTRANCE(sGoronVillageSpringEntranceTable, "Z2_11GORONNOSATO2"),
/* 0x46 */ SCENE_ENTRANCE(sGreatBayTempleEntranceTable, "Z2_SEA"),
/* 0x47 */ SCENE_ENTRANCE(sWaterfallRapidsEntranceTable, "Z2_35TAKI"),
/* 0x48 */ SCENE_ENTRANCE(sBeneathTheWellEntranceTable, "Z2_REDEAD"),
/* 0x49 */ SCENE_ENTRANCE(sZoraHallRoomsEntranceTable, "Z2_BANDROOM"),
/* 0x4A */ SCENE_ENTRANCE(sGoronVillageWinterEntranceTable, "Z2_11GORONNOSATO"),
/* 0x4B */ SCENE_ENTRANCE(sGoronGraveryardEntranceTable, "Z2_GORON_HAKA"),
/* 0x4C */ SCENE_ENTRANCE(sSakonsHideoutEntranceTable, "Z2_SECOM"),
/* 0x4D */ SCENE_ENTRANCE(sMountainVillageWinterEntranceTable, "Z2_10YUKIYAMANOMURA"),
/* 0x4E */ SCENE_ENTRANCE(sGhostHutEntranceTable, "Z2_TOUGITES"),
/* 0x4F */ SCENE_ENTRANCE(sDekuShrineEntranceTable, "Z2_DANPEI"),
/* 0x50 */ SCENE_ENTRANCE(sRoadToIkanaEntranceTable, "Z2_IKANAMAE"),
/* 0x51 */ SCENE_ENTRANCE(sSwordmansSchoolEntranceTable, "Z2_DOUJOU"),
/* 0x52 */ SCENE_ENTRANCE(sMusicBoxHouseEntranceTable, "Z2_MUSICHOUSE"),
/* 0x53 */ SCENE_ENTRANCE(sIgosDuIkanasLairEntranceTable, "Z2_IKNINSIDE"),
/* 0x54 */ SCENE_ENTRANCE(sTouristInformationEntranceTable, "Z2_MAP_SHOP"),
/* 0x55 */ SCENE_ENTRANCE(sStoneTowerEntranceTable, "Z2_F40"),
/* 0x56 */ SCENE_ENTRANCE(sStoneTowerInvertedEntranceTable, "Z2_F41"),
/* 0x57 */ SCENE_ENTRANCE(sMountainVillageSpringEntranceTable, "Z2_10YUKIYAMANOMURA2"),
/* 0x58 */ SCENE_ENTRANCE(sPathToSnowheadEntranceTable, "Z2_14YUKIDAMANOMITI"),
/* 0x59 */ SCENE_ENTRANCE(sSnowheadEntranceTable, "Z2_12HAKUGINMAE"),
/* 0x5A */ SCENE_ENTRANCE(sPathToGoronVillageWinterEntranceTable, "Z2_17SETUGEN"),
/* 0x5B */ SCENE_ENTRANCE(sPathToGoronVillageSpringEntranceTable, "Z2_17SETUGEN2"),
/* 0x5C */ SCENE_ENTRANCE(sGyorgsLairEntranceTable, "Z2_SEA_BS"),
/* 0x5D */ SCENE_ENTRANCE(sSecretShrineEntranceTable, "Z2_RANDOM"),
/* 0x5E */ SCENE_ENTRANCE(sStockPotInnEntranceTable, "Z2_YADOYA"),
/* 0x5F */ SCENE_ENTRANCE(sGreatBayCutsceneEntranceTable, "Z2_KONPEKI_ENT"),
/* 0x60 */ SCENE_ENTRANCE(sClockTowerInteriorEntranceTable, "Z2_INSIDETOWER"),
/* 0x61 */ SCENE_ENTRANCE(sWoodsOfMysteryEntranceTable, "Z2_26SARUNOMORI"),
/* 0x62 */ SCENE_ENTRANCE(sLostWoodsEntranceTable, "Z2_LOST_WOODS"),
/* 0x63 */ SCENE_ENTRANCE(sMoonLinkTrialEntranceTable, "Z2_LAST_LINK"),
/* 0x64 */ SCENE_ENTRANCE(sTheMoonEntranceTable, "Z2_SOUGEN"),
/* 0x65 */ SCENE_ENTRANCE(sBombShopEntranceTable, "Z2_BOMYA"),
/* 0x66 */ SCENE_ENTRANCE(sGiantsChamberEntranceTable, "Z2_KYOJINNOMA"),
/* 0x67 */ SCENE_ENTRANCE(sGormanTrackEntranceTable, "Z2_KOEPONARACE"),
/* 0x68 */ SCENE_ENTRANCE(sGoronRacetrackEntranceTable, "Z2_GORONRACE"),
/* 0x69 */ SCENE_ENTRANCE(sEastClockTownEntranceTable, "Z2_TOWN"),
/* 0x6A */ SCENE_ENTRANCE(sWestClockTownEntranceTable, "Z2_ICHIBA"),
/* 0x6B */ SCENE_ENTRANCE(sNorthClockTownEntranceTable, "Z2_BACKTOWN"),
/* 0x6C */ SCENE_ENTRANCE(sSouthClockTownEntranceTable, "Z2_CLOCKTOWER"),
/* 0x6D */ SCENE_ENTRANCE(sLaundryPoolEntranceTable, "Z2_ALLEY"),
};
/**
+91 -49
View File
@@ -1,80 +1,96 @@
#include "global.h"
#include "z64snap.h"
#include "overlays/actors/ovl_En_Kakasi/z_en_kakasi.h"
typedef struct {
Actor actor;
s32 (*pictoFunc)(PlayState* play, Actor* actor);
} PictoActor;
#define PICTO_SEEN_IN_SCENE 1
#define PICTO_SEEN_ANYWHERE 2
s32 func_8013A240(PlayState* play) {
/**
* Test every loaded actor to see if it is a pictographable `PictoActor`, and if so, run its `validationFunc` to set
* appropriate flags.
*
* @return s32 Number of pictograph actors validly captured.
*/
s32 Snap_RecordPictographedActors(PlayState* play) {
PictoActor* pictoActor;
Actor* actor;
s32 type = 0;
s32 category = 0;
s32 seen;
s32 count = 0;
s32 validCount = 0;
gSaveContext.save.pictoFlags0 = 0;
gSaveContext.save.pictoFlags1 = 0;
if (play->sceneNum == SCENE_20SICHITAI) {
func_8013A41C(1);
Snap_SetFlag(PICTOGRAPH_IN_SWAMP);
}
for (; type < 12; type++) {
for (actor = play->actorCtx.actorLists[type].first; actor != NULL; actor = actor->next) {
for (; category < ACTORCAT_MAX; category++) {
for (actor = play->actorCtx.actorLists[category].first; actor != NULL; actor = actor->next) {
seen = 0;
// Actors which must be pictographed in a specific scene
switch (play->sceneNum) {
case SCENE_20SICHITAI:
if ((actor->id == ACTOR_EN_MNK) || (actor->id == ACTOR_EN_BIGOKUTA)) {
seen = 1;
seen = PICTO_SEEN_IN_SCENE;
}
break;
default:
seen = 0;
break;
}
if (actor->id) {
; // Needed to match
}
// Actors which may be pictographed anywhere
switch (actor->id) {
case ACTOR_EN_KAKASI:
if ((actor->params & 1) == 1) {
seen |= 2;
if (GET_KAKASI_ABOVE_GROUND(actor) == 1) {
seen |= PICTO_SEEN_ANYWHERE;
break; //! @bug break is inside conditional, meaning it falls through if it is false
}
// FALLTHROUGH
case ACTOR_EN_ZOV:
seen |= 2;
seen |= PICTO_SEEN_ANYWHERE;
break;
case ACTOR_EN_BAL:
seen |= 2;
seen |= PICTO_SEEN_ANYWHERE;
break;
case ACTOR_EN_DNQ:
seen |= 2;
seen |= PICTO_SEEN_ANYWHERE;
break;
case ACTOR_EN_GE1:
case ACTOR_EN_GE3:
case ACTOR_EN_KAIZOKU:
case ACTOR_EN_GE2:
seen |= 2;
seen |= PICTO_SEEN_ANYWHERE;
break;
}
if (seen != 0) {
// If actor is recordable, run its validity function and record if valid
if (seen) {
pictoActor = (PictoActor*)actor;
if (pictoActor->pictoFunc != NULL) {
if ((pictoActor->pictoFunc)(play, actor) == 0) {
count++;
if (pictoActor->validationFunc != NULL) {
if ((pictoActor->validationFunc)(play, actor) == 0) {
validCount++;
}
}
}
}
}
return count;
return validCount;
}
void func_8013A41C(s32 flag) {
// Only used in this file
void Snap_SetFlag(s32 flag) {
if (flag < 0x20) {
gSaveContext.save.pictoFlags0 |= (1 << flag);
} else {
@@ -83,7 +99,8 @@ void func_8013A41C(s32 flag) {
}
}
void func_8013A46C(s32 flag) {
// Unused
void Snap_UnsetFlag(s32 flag) {
if (flag < 0x20) {
gSaveContext.save.pictoFlags0 &= ~(1 << flag);
} else {
@@ -92,7 +109,7 @@ void func_8013A46C(s32 flag) {
}
}
u32 func_8013A4C4(s32 flag) {
u32 Snap_CheckFlag(s32 flag) {
SaveContext* saveCtx = &gSaveContext;
if (flag < 0x20) {
@@ -103,13 +120,29 @@ u32 func_8013A4C4(s32 flag) {
}
}
s16 func_8013A504(s16 val) {
return (val >= 0) ? val : -val;
s16 Snap_AbsS(s16 val) {
return ABS(val);
}
s32 func_8013A530(PlayState* play, Actor* actor, s32 flag, Vec3f* pos, Vec3s* rot, f32 distanceMin, f32 distanceMax,
s16 angleError) {
Vec3f screenSpace;
/**
* Test if a pictograph is a valid pictograph of an actor
*
* @param play
* @param actor Actor to test
* @param flag Flag to set if checks successful
* @param pos position of point to test (generally a particular point in the actor's model)
* @param rot rotation of point to test (for facing camera)
* @param distanceMin closest point may be
* @param distanceMax farthest away point may be
* @param angleRange Size of range that counts as facing the camera (-1 is used for any allowed)
* @return s32 0 on success, `or`ed combination of the validity flag indices if not
*
* @note It is generally not possible to recover the actual failure mode(s) from the return value: oring `ret` with the
* actual flag rather than its index would rectify this.
*/
s32 Snap_ValidatePictograph(PlayState* play, Actor* actor, s32 flag, Vec3f* pos, Vec3s* rot, f32 distanceMin,
f32 distanceMax, s16 angleRange) {
Vec3f projectedPos;
s16 x;
s16 y;
f32 distance;
@@ -119,42 +152,51 @@ s32 func_8013A530(PlayState* play, Actor* actor, s32 flag, Vec3f* pos, Vec3s* ro
s32 ret = 0;
s32 bgId;
// Check distance
distance = OLib_Vec3fDist(pos, &camera->eye);
if ((distance < distanceMin) || (distanceMax < distance)) {
func_8013A41C(0x3F);
ret = 0x3F;
Snap_SetFlag(PICTOGRAPH_BAD_DISTANCE);
ret = PICTOGRAPH_BAD_DISTANCE;
}
x = func_8013A504(Camera_GetCamDirPitch(camera) + rot->x);
y = func_8013A504(Camera_GetCamDirYaw(camera) - BINANG_SUB(rot->y, 0x7FFF));
if ((0 < angleError) && ((angleError < x) || (angleError < y))) {
func_8013A41C(0x3E);
ret |= 0x3E;
// Check rot is facing camera?
x = Snap_AbsS(Camera_GetCamDirPitch(camera) + rot->x);
y = Snap_AbsS(Camera_GetCamDirYaw(camera) - BINANG_SUB(rot->y, 0x7FFF));
if ((0 < angleRange) && ((angleRange < x) || (angleRange < y))) {
Snap_SetFlag(PICTOGRAPH_BAD_ANGLE);
ret |= PICTOGRAPH_BAD_ANGLE;
}
Actor_GetProjectedPos(play, pos, &screenSpace, &distance);
x = (s16)(screenSpace.x * distance * 160.0f + 160.0f) - 85;
y = (s16)(screenSpace.y * distance * -120.0f + 120.0f) - 67;
if ((x < 0) || (150 < x) || (y < 0) || (105 < y)) {
func_8013A41C(0x3D);
ret |= 0x3D;
// Check in capture region
Actor_GetProjectedPos(play, pos, &projectedPos, &distance);
// Convert to projected position to device coordinates, shift to be relative to the capture region's top-left corner
x = (s16)PROJECTED_TO_SCREEN_X(projectedPos, distance) - PICTO_CAPTURE_REGION_TOPLEFT_X;
y = (s16)PROJECTED_TO_SCREEN_Y(projectedPos, distance) - PICTO_CAPTURE_REGION_TOPLEFT_Y;
// checks if the coordinates are within the capture region
if ((x < 0) || (x > PICTO_RESOLUTION_HORIZONTAL) || (y < 0) || (y > PICTO_RESOLUTION_VERTICAL)) {
Snap_SetFlag(PICTOGRAPH_NOT_IN_VIEW);
ret |= PICTOGRAPH_NOT_IN_VIEW;
}
if (BgCheck_ProjectileLineTest(&play->colCtx, pos, &camera->eye, &screenSpace, &poly, true, true, true, true,
// Check not obscured by bg collision
if (BgCheck_ProjectileLineTest(&play->colCtx, pos, &camera->eye, &projectedPos, &poly, true, true, true, true,
&bgId)) {
func_8013A41C(0x3C);
ret |= 0x3C;
Snap_SetFlag(PICTOGRAPH_BEHIND_BG);
ret |= PICTOGRAPH_BEHIND_BG;
}
// Check not obscured by actor collision
actors[0] = actor;
actors[1] = &GET_PLAYER(play)->actor;
if (CollisionCheck_LineOCCheck(play, &play->colChkCtx, pos, &camera->eye, actors, 2)) {
func_8013A41C(0x3B);
ret |= 0x3B;
Snap_SetFlag(PICTOGRAPH_BEHIND_COLLISION);
ret |= PICTOGRAPH_BEHIND_COLLISION;
}
// If all of the above checks pass, set the flag
if (ret == 0) {
func_8013A41C(flag);
Snap_SetFlag(flag);
}
return ret;
+3 -3
View File
@@ -1000,10 +1000,10 @@ void Sram_OpenSave(FileChooseContext* fileChooseCtx, SramContext* sramCtx) {
}
if (gSaveContext.save.unk_F65) {
Lib_MemCpy(gScarecrowSpawnSongPtr, gSaveContext.save.scarecrowsSong,
sizeof(gSaveContext.save.scarecrowsSong));
Lib_MemCpy(gScarecrowSpawnSongPtr, gSaveContext.save.scarecrowSpawnSong,
sizeof(gSaveContext.save.scarecrowSpawnSong));
for (i = 0; i != ARRAY_COUNT(gSaveContext.save.scarecrowsSong); i++) {}
for (i = 0; i != ARRAY_COUNT(gSaveContext.save.scarecrowSpawnSong); i++) {}
}
fileNum = gSaveContext.fileNum;
@@ -15,7 +15,23 @@ void BgCraceMovebg_Destroy(Actor* thisx, PlayState* play);
void BgCraceMovebg_Update(Actor* thisx, PlayState* play);
void BgCraceMovebg_Draw(Actor* thisx, PlayState* play);
#if 0
s32 func_80A7090C(PlayState* play);
void func_80A70970(BgCraceMovebg* this, PlayState* play);
void func_80A7099C(BgCraceMovebg* this, PlayState* play);
void func_80A709E4(BgCraceMovebg* this, PlayState* play);
void func_80A70A08(BgCraceMovebg* this, PlayState* play);
void func_80A70A84(BgCraceMovebg* this, PlayState* play);
void func_80A70A9C(BgCraceMovebg* this, PlayState* play);
void func_80A70C04(BgCraceMovebg* this, PlayState* play);
void func_80A70D74(BgCraceMovebg* this, PlayState* play);
void func_80A70DA8(BgCraceMovebg* this, PlayState* play);
void func_80A70E2C(BgCraceMovebg* this, PlayState* play);
void func_80A70E70(BgCraceMovebg* this, PlayState* play);
void func_80A70F14(BgCraceMovebg* this, PlayState* play);
void func_80A70F2C(BgCraceMovebg* this, PlayState* play);
void func_80A70FF4(BgCraceMovebg* this, PlayState* play);
void func_80A71040(BgCraceMovebg* this, PlayState* play);
const ActorInit Bg_Crace_Movebg_InitVars = {
ACTOR_BG_CRACE_MOVEBG,
ACTORCAT_BG,
@@ -28,47 +44,256 @@ const ActorInit Bg_Crace_Movebg_InitVars = {
(ActorFunc)BgCraceMovebg_Draw,
};
#endif
static u8 D_80A710A0 = 0;
static u8 D_80A710A4 = 0;
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 1000, ICHAIN_STOP),
};
static Vec3f D_80A710AC[] = { 0.0f, 0.0f, 1.0f };
u8 D_80A711B0[32];
extern UNK_TYPE D_060003A0;
extern UNK_TYPE D_06000E00;
void BgCraceMovebg_Init(Actor* thisx, PlayState* play) {
BgCraceMovebg* this = THIS;
s32 i;
s32 j;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Crace_Movebg/BgCraceMovebg_Init.s")
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
if (D_80A710A0 == 0) {
for (i = 0; i < ARRAY_COUNT(D_80A711B0); i++) {
D_80A711B0[i] = 0;
}
D_80A710A0 = 1;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Crace_Movebg/func_80A7090C.s")
DynaPolyActor_Init(&this->dyna, 1);
DynaPolyActor_LoadMesh(play, &this->dyna, &object_crace_object_Colheader_000E00);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Crace_Movebg/func_80A70970.s")
this->unk184 = this->dyna.actor.world.rot.x;
this->unk16C = this->dyna.actor.world.rot.z;
this->dyna.actor.world.rot.x = 0;
this->dyna.actor.world.rot.z = 0;
this->dyna.actor.home.rot.x = 0;
this->dyna.actor.home.rot.z = 0;
this->dyna.actor.flags |= ACTOR_FLAG_10000000;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Crace_Movebg/func_80A7099C.s")
switch (BGCRACEMOVEBG_GET_F(&this->dyna.actor)) {
case 0:
case 2:
for (j = 0; j < D_80A710A4; j++) {
if (D_80A711B0[j] == this->unk184) {
this->unk170 |= 8;
Actor_MarkForDeath(&this->dyna.actor);
return;
}
}
if (D_80A710A4 < ARRAY_COUNT(D_80A711B0)) {
D_80A711B0[(s32)D_80A710A4++] = this->unk184;
}
this->dyna.actor.room = -1;
switch (func_80A7090C(play)) {
case 0:
func_80A70D74(this, play);
break;
case 1:
func_80A70D74(this, play);
break;
case 2:
Flags_UnsetSwitch(play, BGCRACEMOVEBG_GET_7F0(&this->dyna.actor) + 1);
func_80A70D74(this, play);
break;
}
break;
case 1:
func_80A70970(this, play);
break;
default:
Actor_MarkForDeath(&this->dyna.actor);
break;
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Crace_Movebg/func_80A709E4.s")
s32 func_80A7090C(PlayState* play) {
s32 pad;
s32 returnVal = 0;
Actor* tempActor = SubS_FindActor(play, NULL, ACTORCAT_NPC, ACTOR_EN_DNO);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Crace_Movebg/func_80A70A08.s")
if (tempActor != NULL) {
if (Flags_GetSwitch(play, BGCRACEMOVEBG_GET_3F80(tempActor))) {
returnVal = 2;
} else {
returnVal = 1;
}
}
return returnVal;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Crace_Movebg/func_80A70A84.s")
void func_80A70970(BgCraceMovebg* this, PlayState* play) {
this->unk164 = 0.0f;
this->unk160 = 0.0f;
this->actionFunc = func_80A7099C;
this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Crace_Movebg/func_80A70A9C.s")
void func_80A7099C(BgCraceMovebg* this, PlayState* play) {
if (Flags_GetSwitch(play, BGCRACEMOVEBG_GET_7F0(&this->dyna.actor))) {
func_80A709E4(this, play);
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Crace_Movebg/BgCraceMovebg_Destroy.s")
void func_80A709E4(BgCraceMovebg* this, PlayState* play) {
this->actionFunc = func_80A70A08;
this->unk164 = 180.0f;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Crace_Movebg/BgCraceMovebg_Update.s")
void func_80A70A08(BgCraceMovebg* this, PlayState* play) {
func_800B9010(&this->dyna.actor, NA_SE_EV_STONEDOOR_OPEN_S - SFX_FLAG);
Math_SmoothStepToF(&this->unk160, this->unk164, 2.0f, this->unk16C, 0.01f);
this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y + this->unk160;
if (this->unk160 == this->unk164) {
func_80A70A84(this, play);
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Crace_Movebg/func_80A70C04.s")
void func_80A70A84(BgCraceMovebg* this, PlayState* play) {
this->actionFunc = func_80A70A9C;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Crace_Movebg/func_80A70D74.s")
void func_80A70A9C(BgCraceMovebg* this, PlayState* play) {
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Crace_Movebg/func_80A70DA8.s")
void BgCraceMovebg_Destroy(Actor* thisx, PlayState* play) {
BgCraceMovebg* this = THIS;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Crace_Movebg/func_80A70E2C.s")
DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId);
if (!(this->unk170 & 0x8)) {
switch (BGCRACEMOVEBG_GET_F(&this->dyna.actor)) {
case 0:
case 2:
Flags_UnsetSwitch(play, BGCRACEMOVEBG_GET_7F0(thisx));
Flags_UnsetSwitch(play, BGCRACEMOVEBG_GET_7F0(thisx) + 1);
break;
case 1:
Flags_UnsetSwitch(play, BGCRACEMOVEBG_GET_7F0(thisx));
break;
}
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Crace_Movebg/func_80A70E70.s")
void BgCraceMovebg_Update(Actor* thisx, PlayState* play) {
BgCraceMovebg* this = THIS;
s32 pad;
Player* player = GET_PLAYER(play);
s16 tempRot;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Crace_Movebg/func_80A70F14.s")
switch (BGCRACEMOVEBG_GET_F(&this->dyna.actor)) {
case 0:
case 2:
tempRot = this->dyna.actor.yawTowardsPlayer - this->dyna.actor.home.rot.y;
if ((tempRot >= -0x4000) && (tempRot <= 0x4000)) {
this->dyna.actor.shape.rot.y = this->dyna.actor.home.rot.y;
} else {
this->dyna.actor.shape.rot.y = this->dyna.actor.home.rot.y + 0x8000;
}
default:
this->actionFunc(this, play);
Math_Vec3f_Copy(&this->unk188, &player->bodyPartsPos[0]);
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Crace_Movebg/func_80A70F2C.s")
void func_80A70C04(BgCraceMovebg* this, PlayState* play) {
s32 pad;
Player* player = GET_PLAYER(play);
Vec3f intersect;
Vec3f diff;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Crace_Movebg/func_80A70FF4.s")
if ((BGCRACEMOVEBG_GET_F(&this->dyna.actor) != 2) &&
SubS_LineSegVsPlane(&this->dyna.actor.home.pos, &this->dyna.actor.home.rot, D_80A710AC, &this->unk188,
&player->bodyPartsPos[0], &intersect)) {
Matrix_RotateYS(-this->dyna.actor.home.rot.y, MTXMODE_NEW);
Math_Vec3f_Diff(&player->bodyPartsPos[0], &this->dyna.actor.home.pos, &diff);
Matrix_MultVec3f(&diff, &this->unk178);
if (fabsf(this->unk178.x) < 100.0f && this->unk178.y >= -10.0f && this->unk178.y <= 180.0f) {
if (this->unk178.z < 0.0f) {
Flags_SetSwitch(play, BGCRACEMOVEBG_GET_7F0(&this->dyna.actor) + 1);
this->unk170 |= 2;
} else {
Flags_UnsetSwitch(play, BGCRACEMOVEBG_GET_7F0(&this->dyna.actor) + 1);
this->unk170 &= ~2;
}
}
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Crace_Movebg/func_80A71040.s")
void func_80A70D74(BgCraceMovebg* this, PlayState* play) {
this->unk164 = 180.0f;
this->unk160 = 180.0f;
this->actionFunc = func_80A70DA8;
this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y + 180.0f;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Crace_Movebg/BgCraceMovebg_Draw.s")
void func_80A70DA8(BgCraceMovebg* this, PlayState* play) {
this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y + this->unk160;
func_80A70C04(this, play);
if (this->unk170 & 1) {
func_80A70E2C(this, play);
}
if (Flags_GetSwitch(play, BGCRACEMOVEBG_GET_7F0(&this->dyna.actor))) {
func_80A70F14(this, play);
}
}
void func_80A70E2C(BgCraceMovebg* this, PlayState* play) {
this->unk174 = BGCRACEMOVEBG_GET_F800(&this->dyna.actor) * 10;
this->unk164 = 180.0f;
this->unk160 = 180.0f;
this->actionFunc = func_80A70E70;
}
void func_80A70E70(BgCraceMovebg* this, PlayState* play) {
if (this->unk174 > 0) {
this->unk174--;
}
this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y + this->unk160;
func_80A70C04(this, play);
if (this->unk174 <= 0) {
this->unk160 = 180.0f;
this->unk164 = 0.0f;
this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y + 180.0f;
Flags_SetSwitch(play, BGCRACEMOVEBG_GET_7F0(&this->dyna.actor));
func_80A70F14(this, play);
}
}
void func_80A70F14(BgCraceMovebg* this, PlayState* play) {
this->actionFunc = func_80A70F2C;
}
void func_80A70F2C(BgCraceMovebg* this, PlayState* play) {
this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y + this->unk160;
func_80A70C04(this, play);
if (Math_StepToF(&this->unk160, 0.0f, 1.0f)) {
if (!(this->unk170 & 2) && !Flags_GetSwitch(play, BGCRACEMOVEBG_GET_7F0(&this->dyna.actor) + 1)) {
play->unk_18845 = 1;
func_80169FDC(&play->state);
play_sound(NA_SE_OC_ABYSS);
}
func_80A70FF4(this, play);
} else {
func_800B9010(&this->dyna.actor, NA_SE_EV_STONEDOOR_CLOSE_S - SFX_FLAG);
}
}
void func_80A70FF4(BgCraceMovebg* this, PlayState* play) {
this->unk164 = 0.0f;
this->unk160 = 0.0f;
this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y;
Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_STONEDOOR_STOP);
this->actionFunc = func_80A71040;
}
void func_80A71040(BgCraceMovebg* this, PlayState* play) {
}
void BgCraceMovebg_Draw(Actor* thisx, PlayState* play) {
Gfx_DrawDListOpa(play, object_crace_object_DL_0003A0);
}
@@ -2,18 +2,29 @@
#define Z_BG_CRACE_MOVEBG_H
#include "global.h"
#include "assets/objects/object_crace_object/object_crace_object.h"
struct BgCraceMovebg;
typedef void (*BgCraceMovebgActionFunc)(struct BgCraceMovebg*, PlayState*);
#define BGCRACEMOVEBG_GET_F(thisx) (((thisx)->params) & 0xF)
#define BGCRACEMOVEBG_GET_7F0(thisx) (((thisx)->params >> 4) & 0x7F)
#define BGCRACEMOVEBG_GET_3F80(thisx) (((thisx)->params >> 7) & 0x7F)
#define BGCRACEMOVEBG_GET_F800(thisx) (((thisx)->params >> 0xB) & 0x1F)
typedef struct BgCraceMovebg {
/* 0x000 */ Actor actor;
/* 0x144 */ char unk_144[0x18];
/* 0x000 */ DynaPolyActor dyna;
/* 0x15C */ BgCraceMovebgActionFunc actionFunc;
/* 0x160 */ char unk_160[0x10];
/* 0x170 */ s32 unk_170;
/* 0x174 */ char unk_174[0x20];
/* 0x160 */ f32 unk160;
/* 0x164 */ f32 unk164;
/* 0x168 */ UNK_TYPE1 pad168[0x4];
/* 0x16C */ f32 unk16C;
/* 0x170 */ s32 unk170;
/* 0x174 */ s32 unk174;
/* 0x178 */ Vec3f unk178;
/* 0x184 */ u8 unk184;
/* 0x188 */ Vec3f unk188;
} BgCraceMovebg; // size = 0x194
#endif // Z_BG_CRACE_MOVEBG_H
@@ -338,7 +338,7 @@ void func_809CE4C8(BgSpdweb* this, PlayState* play) {
if (this->unk_164 > 3.0f) {
Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_WEB_VIBRATION);
} else {
func_801A75E8(NA_SE_EV_WEB_VIBRATION);
Audio_StopSfxById(NA_SE_EV_WEB_VIBRATION);
}
}
+1 -1
View File
@@ -808,7 +808,7 @@ void Boss03_CatchPlayer(Boss03* this, PlayState* play) {
if ((&this->actor != player->actor.parent) && (play->grabPlayer(play, player) != 0)) {
player->actor.parent = &this->actor;
Audio_PlaySfxGeneral(NA_SE_VO_LI_DAMAGE_S, &player->actor.projectedPos, 4, &D_801DB4B0, &D_801DB4B0,
&D_801DB4B8);
&gSfxDefaultReverb);
Boss03_SetupChewPlayer(this, play);
}
} else {
@@ -183,19 +183,19 @@ void func_80C168D0(DemoSyoten* this, PlayState* play) {
s32 pad;
Path* path = this->unk_3E8;
Vec3s* points;
Vec3f sp30;
Vec3f sp24;
f32 sp20;
Vec3f worldPos;
Vec3f projectedPos;
f32 invW;
if (path != NULL) {
points = Lib_SegmentedToVirtual(this->unk_3E8->points);
points += this->unk_3EC;
Math_Vec3s_ToVec3f(&sp30, points);
Actor_GetProjectedPos(play, &sp30, &sp24, &sp20);
Math_Vec3f_Copy(&sp30, &this->actor.projectedPos);
sp30.z = sp30.y;
sp24.z = sp24.y;
this->actor.shape.rot.z = -Math_Vec3f_Yaw(&sp24, &sp30);
Math_Vec3s_ToVec3f(&worldPos, points);
Actor_GetProjectedPos(play, &worldPos, &projectedPos, &invW);
Math_Vec3f_Copy(&worldPos, &this->actor.projectedPos);
worldPos.z = worldPos.y;
projectedPos.z = projectedPos.y;
this->actor.shape.rot.z = -Math_Vec3f_Yaw(&projectedPos, &worldPos);
}
}
+1 -1
View File
@@ -730,7 +730,7 @@ void DmStk_PlaySfxForEndingCutsceneSecondPart(DmStk* this, PlayState* play) {
break;
case 2000:
func_801A5BD0(0x7F);
Audio_SetSfxBanksMute(0x7F);
break;
}
@@ -446,7 +446,8 @@ void func_808B977C(DoorWarp1* this, PlayState* play) {
if (func_808B866C(this, play) && !Play_InCsMode(play)) {
Player* player = GET_PLAYER(play);
Audio_PlaySfxGeneral(NA_SE_EV_LINK_WARP, &player->actor.projectedPos, 4, &D_801DB4B0, &D_801DB4B0, &D_801DB4B8);
Audio_PlaySfxGeneral(NA_SE_EV_LINK_WARP, &player->actor.projectedPos, 4, &D_801DB4B0, &D_801DB4B0,
&gSfxDefaultReverb);
func_800B7298(play, &this->dyna.actor, 9);
player->unk_3A0.x = this->dyna.actor.world.pos.x;
player->unk_3A0.z = this->dyna.actor.world.pos.z;
@@ -619,7 +620,8 @@ void func_808B9FD0(DoorWarp1* this, PlayState* play) {
ActorCutscene_SetIntentToPlay(play->playerActorCsIds[9]);
} else {
ActorCutscene_Start(play->playerActorCsIds[9], NULL);
Audio_PlaySfxGeneral(NA_SE_EV_LINK_WARP, &player->actor.projectedPos, 4, &D_801DB4B0, &D_801DB4B0, &D_801DB4B8);
Audio_PlaySfxGeneral(NA_SE_EV_LINK_WARP, &player->actor.projectedPos, 4, &D_801DB4B0, &D_801DB4B0,
&gSfxDefaultReverb);
Animation_ChangeImpl(&this->skelAnime, &object_warp1_Anim_001374, 1.0f,
Animation_GetLastFrame(&object_warp1_Anim_001374.common),
Animation_GetLastFrame(&object_warp1_Anim_001374.common), 2, 40.0f, 1);
+1 -1
View File
@@ -100,7 +100,7 @@ extern UNK_TYPE D_0600D530;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/func_80A61A44.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/func_80A61A6C.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/EnBal_ValidatePictograph.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bal/func_80A61ADC.s")
+3 -2
View File
@@ -2,14 +2,15 @@
#define Z_EN_BAL_H
#include "global.h"
#include "z64snap.h"
struct EnBal;
typedef void (*EnBalActionFunc)(struct EnBal*, PlayState*);
typedef struct EnBal {
/* 0x000 */ Actor actor;
/* 0x144 */ char unk_144[0x48];
/* 0x000 */ PictoActor picto;
/* 0x148 */ char unk_148[0x44];
/* 0x18C */ EnBalActionFunc actionFunc;
/* 0x190 */ char unk_190[0x224];
} EnBal; // size = 0x3B4
@@ -15,7 +15,7 @@ void EnBigokuta_Destroy(Actor* thisx, PlayState* play);
void EnBigokuta_Update(Actor* thisx, PlayState* play);
void EnBigokuta_Draw(Actor* thisx, PlayState* play);
void func_80AC2B4C(PlayState* play, EnBigokuta* this);
s32 EnBigokuta_ValidatePictograph(PlayState* play, Actor* thisx);
void EnBigokuta_SetupIdle(EnBigokuta* this);
void EnBigokuta_Idle(EnBigokuta* this, PlayState* play);
void EnBigokuta_SetupRise(EnBigokuta* this, PlayState* play);
@@ -95,28 +95,28 @@ static InitChainEntry sInitChain[] = {
void EnBigokuta_Init(Actor* thisx, PlayState* play) {
EnBigokuta* this = THIS;
Actor_ProcessInitChain(&this->actor, sInitChain);
Actor_ProcessInitChain(&this->picto.actor, sInitChain);
SkelAnime_InitFlex(play, &this->skelAnime, &gBigOctoSkel, &gBigOctoIdleAnim, this->jointTable, this->morphTable,
BIGOKUTA_LIMB_MAX);
Collider_InitAndSetCylinder(play, &this->shellCollider, &this->actor, &sShellCylinderInit);
Collider_InitAndSetCylinder(play, &this->bodyCollider, &this->actor, &sBodyCylinderInit);
CollisionCheck_SetInfo(&this->actor.colChkInfo, NULL, &sColChkInfoInit);
this->cutscene = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene);
Collider_InitAndSetCylinder(play, &this->shellCollider, &this->picto.actor, &sShellCylinderInit);
Collider_InitAndSetCylinder(play, &this->bodyCollider, &this->picto.actor, &sBodyCylinderInit);
CollisionCheck_SetInfo(&this->picto.actor.colChkInfo, NULL, &sColChkInfoInit);
this->cutscene = ActorCutscene_GetAdditionalCutscene(this->picto.actor.cutscene);
if (gSaveContext.save.weekEventReg[20] & 2 ||
((this->actor.params != 0xFF) && Flags_GetSwitch(play, this->actor.params))) {
Actor_MarkForDeath(&this->actor);
((this->picto.actor.params != 0xFF) && Flags_GetSwitch(play, this->picto.actor.params))) {
Actor_MarkForDeath(&this->picto.actor);
} else {
this->actor.world.pos.y -= 99.0f;
this->picto.actor.world.pos.y -= 99.0f;
EnBigokuta_SetupIdle(this);
}
this->subCamAt.x = (Math_SinS(this->actor.home.rot.y) * 66.0f) + this->actor.world.pos.x;
this->subCamAt.y = (this->actor.home.pos.y - 49.5f) + 42.899998f;
this->subCamAt.z = (Math_CosS(this->actor.home.rot.y) * 66.0f) + this->actor.world.pos.z;
this->subCamAt.x = (Math_SinS(this->picto.actor.home.rot.y) * 66.0f) + this->picto.actor.world.pos.x;
this->subCamAt.y = (this->picto.actor.home.pos.y - 49.5f) + 42.899998f;
this->subCamAt.z = (Math_CosS(this->picto.actor.home.rot.y) * 66.0f) + this->picto.actor.world.pos.z;
this->unkFunc = func_80AC2B4C; // set but never called
this->picto.validationFunc = EnBigokuta_ValidatePictograph;
}
void EnBigokuta_Destroy(Actor* thisx, PlayState* play) {
@@ -129,15 +129,15 @@ void EnBigokuta_Destroy(Actor* thisx, PlayState* play) {
void EnBigokuta_SetupCutsceneCamera(EnBigokuta* this, PlayState* play, Vec3f* subCamAt, Vec3f* subCamEye) {
s16 angle;
ActorCutscene_Start(this->actor.cutscene, &this->actor);
this->subCamId = ActorCutscene_GetCurrentSubCamId(this->actor.cutscene);
ActorCutscene_Start(this->picto.actor.cutscene, &this->picto.actor);
this->subCamId = ActorCutscene_GetCurrentSubCamId(this->picto.actor.cutscene);
Play_CameraSetAtEye(play, this->subCamId, subCamAt, subCamEye);
angle = BINANG_SUB(Actor_YawToPoint(&this->actor, subCamEye), this->actor.home.rot.y);
angle = BINANG_SUB(Actor_YawToPoint(&this->picto.actor, subCamEye), this->picto.actor.home.rot.y);
if (angle > 0) {
angle = BINANG_ADD(this->actor.home.rot.y, 0x1800);
angle = BINANG_ADD(this->picto.actor.home.rot.y, 0x1800);
} else {
angle = BINANG_SUB(this->actor.home.rot.y, 0x1800);
angle = BINANG_SUB(this->picto.actor.home.rot.y, 0x1800);
}
this->subCamEye.x = (Math_SinS(angle) * 250.0f) + this->subCamAt.x;
@@ -160,37 +160,38 @@ void EnBigokuta_ResetCamera(EnBigokuta* this, PlayState* play) {
subCam = Play_GetCamera(play, this->subCamId);
Play_CameraSetAtEye(play, CAM_ID_MAIN, &subCam->at, &subCam->eye);
this->subCamId = SUB_CAM_ID_DONE;
ActorCutscene_Stop(this->actor.cutscene);
ActorCutscene_Stop(this->picto.actor.cutscene);
}
}
void EnBigokuta_ShootPlayer(EnBigokuta* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (&this->actor == player->actor.parent) {
if (&this->picto.actor == player->actor.parent) {
player->actor.parent = NULL;
player->unk_AE8 = 100;
player->actor.velocity.y = 0.0f;
player->actor.world.pos.x += 20.0f * Math_SinS(this->actor.home.rot.y);
player->actor.world.pos.z += 20.0f * Math_CosS(this->actor.home.rot.y);
func_800B8D50(play, &this->actor, 10.0f, this->actor.home.rot.y, 10.0f, 4);
player->actor.world.pos.x += 20.0f * Math_SinS(this->picto.actor.home.rot.y);
player->actor.world.pos.z += 20.0f * Math_CosS(this->picto.actor.home.rot.y);
func_800B8D50(play, &this->picto.actor, 10.0f, this->picto.actor.home.rot.y, 10.0f, 4);
}
EnBigokuta_ResetCamera(this, play);
}
void func_80AC2B4C(PlayState* play, EnBigokuta* this) {
func_8013A530(play, &this->actor, 3, &this->actor.focus.pos, &this->actor.shape.rot, 280.0f, 1800.0f, -1);
s32 EnBigokuta_ValidatePictograph(PlayState* play, Actor* thisx) {
return Snap_ValidatePictograph(play, thisx, PICTOGRAPH_BIG_OCTO, &thisx->focus.pos, &thisx->shape.rot, 280.0f,
1800.0f, -1);
}
s32 EnBigokuta_IsInWater(EnBigokuta* this, PlayState* play) {
WaterBox* box;
s32 bgId;
this->actor.floorHeight =
BgCheck_EntityRaycastFloor5(&play->colCtx, &this->actor.floorPoly, &bgId, &this->actor, &this->actor.world.pos);
if (!WaterBox_GetSurface1_2(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z,
&this->actor.home.pos.y, &box) ||
(this->actor.home.pos.y <= this->actor.floorHeight)) {
this->picto.actor.floorHeight = BgCheck_EntityRaycastFloor5(&play->colCtx, &this->picto.actor.floorPoly, &bgId,
&this->picto.actor, &this->picto.actor.world.pos);
if (!WaterBox_GetSurface1_2(play, &play->colCtx, this->picto.actor.world.pos.x, this->picto.actor.world.pos.z,
&this->picto.actor.home.pos.y, &box) ||
(this->picto.actor.home.pos.y <= this->picto.actor.floorHeight)) {
return false;
} else {
return true;
@@ -200,9 +201,9 @@ s32 EnBigokuta_IsInWater(EnBigokuta* this, PlayState* play) {
void EnBigokuta_SpawnRipple(EnBigokuta* this, PlayState* play) {
Vec3f ripplePos;
ripplePos.x = this->actor.world.pos.x;
ripplePos.y = this->actor.home.pos.y;
ripplePos.z = this->actor.world.pos.z;
ripplePos.x = this->picto.actor.world.pos.x;
ripplePos.y = this->picto.actor.home.pos.y;
ripplePos.z = this->picto.actor.world.pos.z;
EffectSsGRipple_Spawn(play, &ripplePos, 1000, 1400, 0);
}
@@ -215,9 +216,10 @@ void EnBigokuta_Idle(EnBigokuta* this, PlayState* play) {
Player* player = GET_PLAYER(play);
SkelAnime_Update(&this->skelAnime);
Math_StepToF(&this->actor.world.pos.y, this->actor.home.pos.y - 99.0f, 2.5f);
Math_ApproachS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 5, 0x1000);
if ((this->actor.xzDistToPlayer < 300.0f) && ((player->actor.world.pos.y - this->actor.home.pos.y) < 100.0f)) {
Math_StepToF(&this->picto.actor.world.pos.y, this->picto.actor.home.pos.y - 99.0f, 2.5f);
Math_ApproachS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 5, 0x1000);
if ((this->picto.actor.xzDistToPlayer < 300.0f) &&
((player->actor.world.pos.y - this->picto.actor.home.pos.y) < 100.0f)) {
EnBigokuta_SetupRise(this, play);
}
}
@@ -228,19 +230,19 @@ void EnBigokuta_SetupRise(EnBigokuta* this, PlayState* play) {
s16 angle = 0;
Animation_PlayOnce(&this->skelAnime, &gBigOctoRiseOutOfWaterAnim);
splashPos.y = this->actor.home.pos.y;
splashPos.y = this->picto.actor.home.pos.y;
for (i = 0; i < 8; i++) {
splashPos.x = Math_SinS(angle) * 70.0f + this->actor.world.pos.x;
splashPos.z = Math_CosS(angle) * 70.0f + this->actor.world.pos.z;
splashPos.x = Math_SinS(angle) * 70.0f + this->picto.actor.world.pos.x;
splashPos.z = Math_CosS(angle) * 70.0f + this->picto.actor.world.pos.z;
EffectSsGSplash_Spawn(play, &splashPos, NULL, NULL, 0, Rand_S16Offset(1000, 200));
angle = BINANG_ADD(angle, 0x2000);
}
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DAIOCTA_LAND);
Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_DAIOCTA_LAND);
this->actionFunc = EnBigokuta_RiseOutOfWater;
}
void EnBigokuta_RiseOutOfWater(EnBigokuta* this, PlayState* play) {
Math_StepToF(&this->actor.world.pos.y, this->actor.home.pos.y - 16.5f, 15.0f);
Math_StepToF(&this->picto.actor.world.pos.y, this->picto.actor.home.pos.y - 16.5f, 15.0f);
if (SkelAnime_Update(&this->skelAnime)) {
EnBigokuta_SetupIdleAboveWater(this);
}
@@ -253,27 +255,27 @@ void EnBigokuta_SetupIdleAboveWater(EnBigokuta* this) {
void EnBigokuta_IdleAboveWater(EnBigokuta* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
Math_StepToF(&this->actor.world.pos.y, this->actor.home.pos.y - 16.5f, 2.5f);
Math_ApproachS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 5, 0x1000);
Math_StepToF(&this->picto.actor.world.pos.y, this->picto.actor.home.pos.y - 16.5f, 2.5f);
Math_ApproachS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 5, 0x1000);
if ((this->actor.xzDistToPlayer > 400.0f) || (this->actor.playerHeightRel > 200.0f)) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DAIOCTA_SINK);
if ((this->picto.actor.xzDistToPlayer > 400.0f) || (this->picto.actor.playerHeightRel > 200.0f)) {
Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_DAIOCTA_SINK);
EnBigokuta_SetupIdle(this);
} else if ((this->actor.xzDistToPlayer < 200.0f) && play->grabPlayer(play, GET_PLAYER(play))) {
} else if ((this->picto.actor.xzDistToPlayer < 200.0f) && play->grabPlayer(play, GET_PLAYER(play))) {
EnBigokuta_SetupSuckInPlayer(this, play);
}
}
void EnBigokuta_UpdateOrSetupCam(EnBigokuta* this, PlayState* play) {
if (this->actor.cutscene != -1) {
if (this->picto.actor.cutscene != -1) {
if (this->subCamId != SUB_CAM_ID_DONE) {
EnBigokuta_MoveCamera(this, play);
} else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
} else if (ActorCutscene_GetCanPlayNext(this->picto.actor.cutscene)) {
Camera* mainCam = Play_GetCamera(play, CAM_ID_MAIN);
EnBigokuta_SetupCutsceneCamera(this, play, &mainCam->at, &mainCam->eye);
} else {
ActorCutscene_SetIntentToPlay(this->actor.cutscene);
ActorCutscene_SetIntentToPlay(this->picto.actor.cutscene);
}
}
}
@@ -281,19 +283,19 @@ void EnBigokuta_UpdateOrSetupCam(EnBigokuta* this, PlayState* play) {
void EnBigokuta_SetupSuckInPlayer(EnBigokuta* this, PlayState* play) {
Player* player = GET_PLAYER(play);
player->actor.parent = &this->actor;
this->actor.shape.rot.y = this->actor.yawTowardsPlayer;
player->actor.parent = &this->picto.actor;
this->picto.actor.shape.rot.y = this->picto.actor.yawTowardsPlayer;
Math_Vec3f_Copy(&this->playerPos, &player->actor.world.pos);
this->timer = 0;
Animation_Change(&this->skelAnime, &gBigOctoIdleAnim, 1.0f, 12.0f, 12.0f, ANIMMODE_ONCE, -3.0f);
ActorCutscene_SetIntentToPlay(this->actor.cutscene);
ActorCutscene_SetIntentToPlay(this->picto.actor.cutscene);
this->playerHoldPos.x = (Math_SinS(this->actor.shape.rot.y) * 66.0f) + this->actor.world.pos.x;
this->playerHoldPos.y = (this->actor.home.pos.y - 49.5f) + 42.899998f;
this->playerHoldPos.z = (Math_CosS(this->actor.shape.rot.y) * 66.0f) + this->actor.world.pos.z;
this->playerHoldPos.x = (Math_SinS(this->picto.actor.shape.rot.y) * 66.0f) + this->picto.actor.world.pos.x;
this->playerHoldPos.y = (this->picto.actor.home.pos.y - 49.5f) + 42.899998f;
this->playerHoldPos.z = (Math_CosS(this->picto.actor.shape.rot.y) * 66.0f) + this->picto.actor.world.pos.z;
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_SLIME_DEAD);
Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_SLIME_DEAD);
this->actionFunc = EnBigokuta_SuckInPlayer;
}
@@ -302,7 +304,7 @@ void EnBigokuta_SuckInPlayer(EnBigokuta* this, PlayState* play) {
EnBigokuta_UpdateOrSetupCam(this, play);
SkelAnime_Update(&this->skelAnime);
Math_StepToF(&this->actor.world.pos.y, this->actor.home.pos.y - 49.5f, 10.0f);
Math_StepToF(&this->picto.actor.world.pos.y, this->picto.actor.home.pos.y - 49.5f, 10.0f);
if (this->timer < 9) {
this->timer++;
@@ -311,19 +313,19 @@ void EnBigokuta_SuckInPlayer(EnBigokuta* this, PlayState* play) {
player->unk_AE8 = 0;
Math_Vec3f_Copy(&player->actor.world.pos, &this->playerPos);
if (Math_Vec3f_StepTo(&player->actor.world.pos, &this->playerHoldPos, sqrtf(this->timer) * 5.0f) < 0.1f) {
s16 rotY = this->actor.shape.rot.y;
s16 rotY = this->picto.actor.shape.rot.y;
if (Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.home.rot.y, 0x800)) {
if (Math_ScaledStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.home.rot.y, 0x800)) {
EnBigokuta_SetupHoldPlayer(this);
}
this->playerHoldPos.x = (Math_SinS(this->actor.shape.rot.y) * 66.0f) + this->actor.world.pos.x;
this->playerHoldPos.y = (this->actor.home.pos.y - 49.5f) + 42.899998f;
this->playerHoldPos.z = (Math_CosS(this->actor.shape.rot.y) * 66.0f) + this->actor.world.pos.z;
this->playerHoldPos.x = (Math_SinS(this->picto.actor.shape.rot.y) * 66.0f) + this->picto.actor.world.pos.x;
this->playerHoldPos.y = (this->picto.actor.home.pos.y - 49.5f) + 42.899998f;
this->playerHoldPos.z = (Math_CosS(this->picto.actor.shape.rot.y) * 66.0f) + this->picto.actor.world.pos.z;
Math_Vec3f_Copy(&player->actor.world.pos, &this->playerHoldPos);
Math_Vec3f_Copy(&this->playerPos, &player->actor.world.pos);
player->actor.shape.rot.y += BINANG_SUB(this->actor.shape.rot.y, rotY);
player->actor.shape.rot.y += BINANG_SUB(this->picto.actor.shape.rot.y, rotY);
} else {
Math_Vec3f_Copy(&this->playerPos, &player->actor.world.pos);
player->actor.velocity.y = 0.0f;
@@ -345,7 +347,7 @@ void EnBigokuta_HoldPlayer(EnBigokuta* this, PlayState* play) {
if (this->timer == 0) {
EnBigokuta_ShootPlayer(this, play);
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DAIOCTA_REVERSE);
Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_DAIOCTA_REVERSE);
}
} else if (this->timer == -24) {
EnBigokuta_SetupIdleAboveWater(this);
@@ -362,21 +364,21 @@ void EnBigokuta_SetupDeathCutscene(EnBigokuta* this) {
void EnBigokuta_PlayDeathCutscene(EnBigokuta* this, PlayState* play) {
Player* player;
this->actor.colorFilterTimer = Animation_GetLastFrame(&gBigOctoDeathAnim);
this->picto.actor.colorFilterTimer = Animation_GetLastFrame(&gBigOctoDeathAnim);
if (this->timer != 0) {
this->timer--;
if (this->timer == 0) {
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
this->drawDmgEffAlpha = 0.0f;
Actor_SpawnIceEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), 2, 0.5f, 0.35f);
Actor_SpawnIceEffects(play, &this->picto.actor, this->limbPos, ARRAY_COUNT(this->limbPos), 2, 0.5f, 0.35f);
EnBigokuta_SetupDeathEffects(this);
}
} else if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
ActorCutscene_Start(this->cutscene, &this->actor);
ActorCutscene_Start(this->cutscene, &this->picto.actor);
if (!(gSaveContext.eventInf[4] & 2) && !(gSaveContext.eventInf[3] & 0x20)) {
func_800B724C(play, &this->actor, 7);
func_800B724C(play, &this->picto.actor, 7);
} else {
player = GET_PLAYER(play);
player->stateFlags1 |= 0x20;
@@ -394,8 +396,8 @@ void EnBigokuta_PlayDeathCutscene(EnBigokuta* this, PlayState* play) {
void EnBigokuta_SetupDeathEffects(EnBigokuta* this) {
Animation_MorphToPlayOnce(&this->skelAnime, &gBigOctoDeathAnim, -5.0f);
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DAIOCTA_DEAD2);
this->actor.flags &= ~1;
Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_DAIOCTA_DEAD2);
this->picto.actor.flags &= ~1;
this->timer = 10;
this->actionFunc = EnBigokuta_PlayDeathEffects;
}
@@ -407,7 +409,7 @@ void EnBigokuta_PlayDeathEffects(EnBigokuta* this, PlayState* play) {
static Color_RGBA8 D_80AC45B8 = { 150, 150, 150, 0 };
if (SkelAnime_Update(&this->skelAnime)) {
this->actor.world.pos.y -= 0.2f;
this->picto.actor.world.pos.y -= 0.2f;
if (this->timer > 0) {
this->timer--;
@@ -415,44 +417,44 @@ void EnBigokuta_PlayDeathEffects(EnBigokuta* this, PlayState* play) {
if (this->timer == 6) {
Vec3f dustPos;
dustPos.x = this->actor.world.pos.x;
dustPos.y = this->actor.world.pos.y + 150.0f;
dustPos.z = this->actor.world.pos.z;
dustPos.x = this->picto.actor.world.pos.x;
dustPos.y = this->picto.actor.world.pos.y + 150.0f;
dustPos.z = this->picto.actor.world.pos.z;
func_800B0DE0(play, &dustPos, &gZeroVec3f, &gZeroVec3f, &D_80AC45B0, &D_80AC45B4, 1200, 20);
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_OCTAROCK_DEAD2);
Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_OCTAROCK_DEAD2);
}
} else {
this->actor.world.pos.y -= 0.2f;
this->picto.actor.world.pos.y -= 0.2f;
if (Math_StepToF(&this->actor.scale.y, 0.001f, 0.001f)) {
if (Math_StepToF(&this->picto.actor.scale.y, 0.001f, 0.001f)) {
s32 i;
Vec3f bubbleVel;
Vec3f bubblePos;
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 50, NA_SE_EN_COMMON_WATER_MID);
bubblePos.y = this->actor.world.pos.y;
SoundSource_PlaySfxAtFixedWorldPos(play, &this->picto.actor.world.pos, 50, NA_SE_EN_COMMON_WATER_MID);
bubblePos.y = this->picto.actor.world.pos.y;
for (i = 0; i < 20; i++) {
bubbleVel.x = randPlusMinusPoint5Scaled(10.0f);
bubbleVel.y = Rand_ZeroFloat(5.5f) + 5.5f;
bubbleVel.z = randPlusMinusPoint5Scaled(10.0f);
bubblePos.x = this->actor.world.pos.x + (2.0f * bubbleVel.x);
bubblePos.z = this->actor.world.pos.z + (2.0f * bubbleVel.z);
bubblePos.x = this->picto.actor.world.pos.x + (2.0f * bubbleVel.x);
bubblePos.z = this->picto.actor.world.pos.z + (2.0f * bubbleVel.z);
EffectSsDtBubble_SpawnCustomColor(play, &bubblePos, &bubbleVel, &D_80AC45A4, &D_80AC45B0,
&D_80AC45B8, Rand_S16Offset(150, 50), 25, 0);
}
if (this->actor.params != 0xFF) {
Flags_SetSwitch(play, this->actor.params);
if (this->picto.actor.params != 0xFF) {
Flags_SetSwitch(play, this->picto.actor.params);
}
ActorCutscene_Stop(this->cutscene);
Actor_MarkForDeath(&this->actor);
Actor_MarkForDeath(&this->picto.actor);
if (!(gSaveContext.eventInf[4] & 2) && !(gSaveContext.eventInf[3] & 0x20)) {
func_800B724C(play, &this->actor, 6);
func_800B724C(play, &this->picto.actor, 6);
} else {
Player* player = GET_PLAYER(play);
@@ -461,18 +463,19 @@ void EnBigokuta_PlayDeathEffects(EnBigokuta* this, PlayState* play) {
}
if (this->drawDmgEffAlpha > 0.0f) {
this->drawDmgEffAlpha = this->actor.scale.y * 30.30303f;
this->drawDmgEffAlpha = this->picto.actor.scale.y * 30.30303f;
}
}
} else {
Math_StepToF(&this->actor.world.pos.y, this->actor.home.pos.y - 16.5f, 15.0f);
Math_StepToF(&this->picto.actor.world.pos.y, this->picto.actor.home.pos.y - 16.5f, 15.0f);
}
}
s32 EnBigokuta_IsNearSwampBoat(EnBigokuta* this, PlayState* play) {
this->actor.child = SubS_FindActor(play, NULL, ACTORCAT_BG, ACTOR_BG_INGATE);
this->picto.actor.child = SubS_FindActor(play, NULL, ACTORCAT_BG, ACTOR_BG_INGATE);
if ((this->actor.child != NULL) && (Actor_XZDistanceBetweenActors(&this->actor, this->actor.child) < 250.0f)) {
if ((this->picto.actor.child != NULL) &&
(Actor_XZDistanceBetweenActors(&this->picto.actor, this->picto.actor.child) < 250.0f)) {
return true;
} else {
return false;
@@ -484,7 +487,7 @@ void EnBigokuta_CheckOneHitKill(EnBigokuta* this, PlayState* play) {
((this->bodyCollider.base.acFlags & AC_HIT) ||
((play->sceneNum == SCENE_20SICHITAI || play->sceneNum == SCENE_20SICHITAI2) &&
EnBigokuta_IsNearSwampBoat(this, play)))) {
Enemy_StartFinishingBlow(play, &this->actor);
Enemy_StartFinishingBlow(play, &this->picto.actor);
if (this->bodyCollider.base.acFlags & AC_HIT) {
if (this->bodyCollider.info.acHitInfo->toucher.dmgFlags & 0x1000) { // Ice Arrow
@@ -503,7 +506,7 @@ void EnBigokuta_CheckOneHitKill(EnBigokuta* this, PlayState* play) {
}
this->bodyCollider.base.acFlags &= ~AC_HIT;
Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, Animation_GetLastFrame(&gBigOctoDeathAnim));
Actor_SetColorFilter(&this->picto.actor, 0x4000, 255, 0, Animation_GetLastFrame(&gBigOctoDeathAnim));
EnBigokuta_ShootPlayer(this, play);
EnBigokuta_SetupDeathCutscene(this);
}
@@ -514,7 +517,7 @@ void EnBigokuta_Update(Actor* thisx, PlayState* play) {
EnBigokuta* this = THIS;
if (!EnBigokuta_IsInWater(this, play)) {
Actor_MarkForDeath(&this->actor);
Actor_MarkForDeath(&this->picto.actor);
return;
}
@@ -526,9 +529,11 @@ void EnBigokuta_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
if ((this->bodyCollider.base.acFlags & AC_ON)) {
this->shellCollider.dim.pos.x = Math_SinS(this->actor.shape.rot.y) * -20.0f + this->actor.world.pos.x;
this->shellCollider.dim.pos.y = this->actor.world.pos.y;
this->shellCollider.dim.pos.z = Math_CosS(this->actor.shape.rot.y) * -20.0f + this->actor.world.pos.z;
this->shellCollider.dim.pos.x =
Math_SinS(this->picto.actor.shape.rot.y) * -20.0f + this->picto.actor.world.pos.x;
this->shellCollider.dim.pos.y = this->picto.actor.world.pos.y;
this->shellCollider.dim.pos.z =
Math_CosS(this->picto.actor.shape.rot.y) * -20.0f + this->picto.actor.world.pos.z;
this->bodyCollider.dim.pos.x = this->shellCollider.dim.pos.x;
this->bodyCollider.dim.pos.y = this->shellCollider.dim.pos.y;
@@ -537,7 +542,7 @@ void EnBigokuta_Update(Actor* thisx, PlayState* play) {
CollisionCheck_SetAC(play, &play->colChkCtx, &this->bodyCollider.base);
CollisionCheck_SetAC(play, &play->colChkCtx, &this->shellCollider.base);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->shellCollider.base);
Actor_SetFocus(&this->actor, 82.5f);
Actor_SetFocus(&this->picto.actor, 82.5f);
}
if (this->drawDmgEffAlpha > 0.0f) {
@@ -546,7 +551,7 @@ void EnBigokuta_Update(Actor* thisx, PlayState* play) {
this->drawDmgEffScale = (this->drawDmgEffAlpha + 1.0f) * 0.6f;
this->drawDmgEffScale = CLAMP_MAX(this->drawDmgEffScale, 1.2f);
} else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 1.2f, 0.030000001f)) {
func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG);
func_800B9010(&this->picto.actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG);
}
}
}
@@ -658,18 +663,18 @@ void EnBigokuta_Draw(Actor* thisx, PlayState* play) {
gDPSetEnvColor(&gfx[1], 255, 255, 255, 255);
POLY_OPA_DISP =
SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnBigokuta_OverrideLimbDraw, EnBigokuta_PostLimbDraw, &this->actor, &gfx[2]);
EnBigokuta_OverrideLimbDraw, EnBigokuta_PostLimbDraw, &this->picto.actor, &gfx[2]);
} else {
Scene_SetRenderModeXlu(play, 1, 2);
gfx = POLY_XLU_DISP;
gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]);
gDPSetEnvColor(&gfx[1], 0, 0, 0, (this->actor.scale.y * 7727.273f));
gDPSetEnvColor(&gfx[1], 0, 0, 0, (this->picto.actor.scale.y * 7727.273f));
POLY_XLU_DISP =
SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
NULL, EnBigokuta_PostLimbDraw, &this->actor, &gfx[2]);
NULL, EnBigokuta_PostLimbDraw, &this->picto.actor, &gfx[2]);
}
Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawDmgEffScale,
Actor_DrawDamageEffects(play, &this->picto.actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawDmgEffScale,
this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, this->drawDmgEffType);
CLOSE_DISPS(play->state.gfxCtx);
@@ -2,16 +2,15 @@
#define Z_EN_BIGOKUTA_H
#include "global.h"
#include "z64snap.h"
#include "assets/objects/object_bigokuta/object_bigokuta.h"
struct EnBigokuta;
typedef void (*EnBigokutaActionFunc)(struct EnBigokuta*, PlayState*);
typedef void (*EnBigokutaUnkFunc)(PlayState*, struct EnBigokuta*);
typedef struct EnBigokuta {
/* 0x000 */ Actor actor;
/* 0x144 */ EnBigokutaUnkFunc unkFunc; // possibly something to do with photographing
/* 0x000 */ PictoActor picto;
/* 0x148 */ SkelAnime skelAnime;
/* 0x18C */ EnBigokutaActionFunc actionFunc;
/* 0x190 */ u8 drawDmgEffType;
@@ -293,7 +293,7 @@ void EnBji01_DialogueHandler(EnBji01* this, PlayState* play) {
}
void func_809CD634(EnBji01* this, PlayState* play) {
func_801A5BD0(0x6F);
Audio_SetSfxBanksMute(0x6F);
Audio_QueueSeqCmd(0xE0000101);
play->nextEntranceIndex = 0x54A0; /* Termina Field from telescope */
gSaveContext.respawn[RESPAWN_MODE_DOWN].entranceIndex = play->nextEntranceIndex;
@@ -350,7 +350,7 @@ void EnBji01_Init(Actor* thisx, PlayState* play) {
break;
case 0x4C20: /* Observatory from Termina Field telescope */
this->actor.flags |= ACTOR_FLAG_10000;
func_801A5BD0(0);
Audio_SetSfxBanksMute(0);
Audio_QueueSeqCmd(0xE0000100);
this->actor.params = SHIKASHI_TYPE_LOOKED_THROUGH_TELESCOPE;
func_809CCE98(this, play);
@@ -570,7 +570,7 @@ void EnClearTag_UpdateCamera(EnClearTag* this, PlayState* play) {
this->subCamAt.z = mainCam->at.z;
Message_StartTextbox(play, 0xF, NULL);
this->cameraState = 2;
func_8019FDC8(&D_801DB4A4, NA_SE_VO_NA_LISTEN, 0x20);
func_8019FDC8(&gSfxDefaultPos, NA_SE_VO_NA_LISTEN, 0x20);
case 2:
if (player->actor.world.pos.z > 0.0f) {
player->actor.world.pos.z = 290.0f;
+7 -7
View File
@@ -146,20 +146,20 @@ void func_80A715DC(EnDno* this, PlayState* play) {
Vec3f sp70;
do {
crace = (BgCraceMovebg*)SubS_FindActor(play, &crace->actor, ACTORCAT_BG, ACTOR_BG_CRACE_MOVEBG);
crace = (BgCraceMovebg*)SubS_FindActor(play, &crace->dyna.actor, ACTORCAT_BG, ACTOR_BG_CRACE_MOVEBG);
if (crace != NULL) {
if (ENDNO_GET_F(&crace->actor) == ENDNO_GET_F_0 && !(crace->unk_170 & 1)) {
if (SubS_LineSegVsPlane(&crace->actor.home.pos, &crace->actor.home.rot, &D_80A73B2C,
if (ENDNO_GET_F(&crace->dyna.actor) == ENDNO_GET_F_0 && !(crace->unk170 & 1)) {
if (SubS_LineSegVsPlane(&crace->dyna.actor.home.pos, &crace->dyna.actor.home.rot, &D_80A73B2C,
&this->actor.prevPos, &this->actor.world.pos, &sp88)) {
Math_Vec3f_Diff(&this->actor.world.pos, &crace->actor.home.pos, &sp7C);
Matrix_RotateYS(-crace->actor.home.rot.y, MTXMODE_NEW);
Math_Vec3f_Diff(&this->actor.world.pos, &crace->dyna.actor.home.pos, &sp7C);
Matrix_RotateYS(-crace->dyna.actor.home.rot.y, MTXMODE_NEW);
Matrix_MultVec3f(&sp7C, &sp70);
if ((fabsf(sp70.x) < 100.0f) && (sp70.y >= -10.0f) && (sp70.y <= 180.0f) && (sp70.z < 0.0f)) {
crace->unk_170 |= 1;
crace->unk170 |= 1;
}
}
}
crace = (BgCraceMovebg*)crace->actor.next;
crace = (BgCraceMovebg*)crace->dyna.actor.next;
}
} while (crace != NULL);
}
+39 -38
View File
@@ -80,8 +80,9 @@ static AnimationInfoS D_80A5349C[] = {
{ &object_dnq_Anim_003DBC, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
};
void func_80A52530(PlayState* play, EnDnq* this) {
func_8013A530(play, &this->actor, 10, &this->actor.focus.pos, &this->actor.world.rot, 120.0f, 480.0f, 0x38E3);
s32 EnDnq_ValidatePictograph(PlayState* play, Actor* thisx) {
return Snap_ValidatePictograph(play, thisx, PICTOGRAPH_DEKU_KING, &thisx->focus.pos, &thisx->world.rot, 120.0f,
480.0f, 0x38E3);
}
s32 func_80A5257C(EnDnq* this, s32 arg1) {
@@ -111,7 +112,7 @@ s32 func_80A5257C(EnDnq* this, s32 arg1) {
}
void func_80A52604(EnDnq* this, PlayState* play) {
Collider_UpdateCylinder(&this->actor, &this->collider);
Collider_UpdateCylinder(&this->picto.actor, &this->collider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
}
@@ -120,7 +121,7 @@ s32 func_80A52648(EnDnq* this, PlayState* play) {
if (play->csCtx.state != 0) {
if (!(this->unk_37C & 0x20)) {
this->actor.flags &= ~ACTOR_FLAG_1;
this->picto.actor.flags &= ~ACTOR_FLAG_1;
this->unk_1DC = 0xFF;
this->unk_37C |= 0x20;
}
@@ -128,7 +129,7 @@ s32 func_80A52648(EnDnq* this, PlayState* play) {
ret = true;
} else {
if (this->unk_37C & 0x20) {
this->actor.flags |= ACTOR_FLAG_1;
this->picto.actor.flags |= ACTOR_FLAG_1;
this->unk_1DC = 0xFF;
this->unk_37C &= ~0x20;
SubS_UpdateFlags(&this->unk_37C, 3, 7);
@@ -196,10 +197,10 @@ s32 func_80A52944(EnDnq* this) {
if (this->unk_386 == 0) {
func_80A5257C(this, 12);
this->unk_38C = 1;
this->actor.shape.rot.y = this->actor.world.rot.y;
this->picto.actor.shape.rot.y = this->picto.actor.world.rot.y;
this->unk_386 = 1;
phi_v1 = this->unk_38C * 0x2000;
this->actor.shape.rot.y += phi_v1;
this->picto.actor.shape.rot.y += phi_v1;
} else if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
this->unk_386++;
if (this->unk_386 >= 6) {
@@ -214,8 +215,8 @@ s32 func_80A52944(EnDnq* this) {
func_80A5257C(this, 13);
this->skelAnime.curFrame = 0.0f;
}
this->actor.shape.rot.y = this->actor.world.rot.y;
this->actor.shape.rot.y += phi_v1;
this->picto.actor.shape.rot.y = this->picto.actor.world.rot.y;
this->picto.actor.shape.rot.y += phi_v1;
}
this->unk_38A = 0;
@@ -233,7 +234,7 @@ s32 func_80A52A78(EnDnq* this, PlayState* play) {
this->unk_388 = play->state.frames % 5;
}
this->actor.shape.rot.y = this->actor.world.rot.y;
this->picto.actor.shape.rot.y = this->picto.actor.world.rot.y;
if (this->unk_38C != 0) {
this->unk_38C--;
}
@@ -256,7 +257,7 @@ s32 func_80A52B68(EnDnq* this, PlayState* play) {
Player* player = GET_PLAYER(play);
u16 temp = play->msgCtx.currentTextId;
if ((player->stateFlags1 & 0x40) && (player->targetActor == &this->actor)) {
if ((player->stateFlags1 & 0x40) && (player->targetActor == &this->picto.actor)) {
switch (temp) {
case 0x89B:
func_80A5257C(this, 18);
@@ -300,9 +301,9 @@ void func_80A52C6C(EnDnq* this, PlayState* play) {
Vec3f sp1C;
Math_Vec3f_Copy(&sp1C, &player->actor.world.pos);
Lib_Vec3f_TranslateAndRotateY(&this->actor.world.pos, this->actor.world.rot.y, &sp34, &sp28);
Lib_Vec3f_TranslateAndRotateY(&this->picto.actor.world.pos, this->picto.actor.world.rot.y, &sp34, &sp28);
Math_Vec3f_Copy(&this->unk_370, &sp28);
this->actor.xzDistToPlayer = Math_Vec3f_DistXZ(&sp28, &sp1C);
this->picto.actor.xzDistToPlayer = Math_Vec3f_DistXZ(&sp28, &sp1C);
}
s32* func_80A52CF8(EnDnq* this, PlayState* play) {
@@ -320,7 +321,7 @@ s32* func_80A52CF8(EnDnq* this, PlayState* play) {
s32 func_80A52D44(EnDnq* this, PlayState* play) {
s32 ret = false;
if ((this->unk_37C & 7) && Actor_ProcessTalkRequest(&this->actor, &play->state)) {
if ((this->unk_37C & 7) && Actor_ProcessTalkRequest(&this->picto.actor, &play->state)) {
SubS_UpdateFlags(&this->unk_37C, 0, 7);
this->unk_380 = func_80A52CF8(this, play);
this->actionFunc = func_80A52FB8;
@@ -332,7 +333,7 @@ s32 func_80A52D44(EnDnq* this, PlayState* play) {
void func_80A52DC8(EnDnq* this, PlayState* play) {
Player* player = GET_PLAYER(play);
s16 yaw = this->actor.yawTowardsPlayer - this->actor.world.rot.y;
s16 yaw = this->picto.actor.yawTowardsPlayer - this->picto.actor.world.rot.y;
if (yaw <= 0x3800) {
SubS_UpdateFlags(&this->unk_37C, 3, 7);
@@ -350,37 +351,37 @@ void func_80A52DC8(EnDnq* this, PlayState* play) {
}
}
this->unk_394 = this->actor.xzDistToPlayer;
this->unk_394 = this->picto.actor.xzDistToPlayer;
func_80A52C6C(this, play);
if (this->actor.xzDistToPlayer < this->unk_390) {
if (this->picto.actor.xzDistToPlayer < this->unk_390) {
player->unk_B2B = 0x1A;
}
this->actor.xzDistToPlayer = this->unk_394;
this->picto.actor.xzDistToPlayer = this->unk_394;
if (gSaveContext.save.weekEventReg[83] & 8) {
func_80A52A78(this, play);
} else if (this->unk_3A4 == 0) {
Math_ApproachS(&this->actor.shape.rot.y, this->actor.world.rot.y, 3, 0x2AA8);
Math_ApproachS(&this->picto.actor.shape.rot.y, this->picto.actor.world.rot.y, 3, 0x2AA8);
func_80A526F8(this);
} else {
func_80A52944(this);
}
} else {
Math_ApproachS(&this->actor.shape.rot.y, this->actor.world.rot.y, 3, 0x2AA8);
Math_ApproachS(&this->picto.actor.shape.rot.y, this->picto.actor.world.rot.y, 3, 0x2AA8);
this->unk_390 = 70.0f;
}
}
void func_80A52FB8(EnDnq* this, PlayState* play) {
s16 sp2E = this->actor.yawTowardsPlayer;
s16 sp2E = this->picto.actor.yawTowardsPlayer;
if (func_8010BF58(&this->actor, play, this->unk_380, NULL, &this->unk_1E0)) {
if (func_8010BF58(&this->picto.actor, play, this->unk_380, NULL, &this->unk_1E0)) {
SubS_UpdateFlags(&this->unk_37C, 3, 7);
this->unk_386 = 0;
this->actionFunc = func_80A52DC8;
} else {
Math_ApproachS(&this->actor.shape.rot.y, sp2E, 3, 0x2AA8);
Math_ApproachS(&this->picto.actor.shape.rot.y, sp2E, 3, 0x2AA8);
}
}
@@ -400,7 +401,7 @@ void func_80A53038(EnDnq* this, PlayState* play) {
}
if ((this->unk_398 == 4) && Animation_OnFrame(&this->skelAnime, 2.0f)) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KINGNUTS_DAMAGE);
Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_KINGNUTS_DAMAGE);
}
if (((this->unk_398 == 3) || (this->unk_398 == 6)) &&
@@ -408,21 +409,21 @@ void func_80A53038(EnDnq* this, PlayState* play) {
func_80A5257C(this, this->unk_398 + 1);
}
Cutscene_ActorTranslateAndYaw(&this->actor, play, temp_v0);
Cutscene_ActorTranslateAndYaw(&this->picto.actor, play, temp_v0);
}
}
void EnDnq_Init(Actor* thisx, PlayState* play) {
EnDnq* this = THIS;
ActorShape_Init(&this->actor.shape, 0.0f, NULL, 14.0f);
ActorShape_Init(&this->picto.actor.shape, 0.0f, NULL, 14.0f);
SkelAnime_InitFlex(play, &this->skelAnime, &object_dnq_Skel_00EB48, NULL, this->jointTable, this->morphTable, 33);
this->unk_398 = -1;
func_80A5257C(this, 0);
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit);
Actor_SetScale(&this->actor, 0.02f);
this->actor.targetMode = 1;
Collider_InitAndSetCylinder(play, &this->collider, &this->picto.actor, &sCylinderInit);
CollisionCheck_SetInfo2(&this->picto.actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit);
Actor_SetScale(&this->picto.actor, 0.02f);
this->picto.actor.targetMode = 1;
this->unk_386 = 0;
this->unk_37C = 0;
SubS_UpdateFlags(&this->unk_37C, 3, 7);
@@ -431,7 +432,7 @@ void EnDnq_Init(Actor* thisx, PlayState* play) {
} else {
this->unk_3A4 = 0;
}
this->unk_144 = func_80A52530;
this->picto.validationFunc = EnDnq_ValidatePictograph;
this->actionFunc = func_80A52DC8;
}
@@ -451,13 +452,13 @@ void EnDnq_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
func_80A52B68(this, play);
SkelAnime_Update(&this->skelAnime);
Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4);
this->unk_394 = this->actor.xzDistToPlayer;
Actor_UpdateBgCheckInfo(play, &this->picto.actor, 30.0f, 12.0f, 0.0f, 4);
this->unk_394 = this->picto.actor.xzDistToPlayer;
func_80A52C6C(this, play);
func_8013C964(&this->actor, play, this->unk_390, fabsf(this->actor.playerHeightRel) + 1.0f, EXCH_ITEM_NONE,
this->unk_37C & 7);
this->actor.xzDistToPlayer = this->unk_394;
Actor_SetFocus(&this->actor, 46.0f);
func_8013C964(&this->picto.actor, play, this->unk_390, fabsf(this->picto.actor.playerHeightRel) + 1.0f,
EXCH_ITEM_NONE, this->unk_37C & 7);
this->picto.actor.xzDistToPlayer = this->unk_394;
Actor_SetFocus(&this->picto.actor, 46.0f);
func_80A52604(this, play);
}
}
@@ -467,5 +468,5 @@ void EnDnq_Draw(Actor* thisx, PlayState* play) {
func_8012C28C(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL,
NULL, &this->actor);
NULL, &this->picto.actor);
}
+2 -3
View File
@@ -2,15 +2,14 @@
#define Z_EN_DNQ_H
#include "global.h"
#include "z64snap.h"
struct EnDnq;
typedef void (*EnDnqActionFunc)(struct EnDnq*, PlayState*);
typedef void (*EnDnqFunc)(PlayState*, struct EnDnq*);
typedef struct EnDnq {
/* 0x000 */ Actor actor;
/* 0x144 */ EnDnqFunc unk_144;
/* 0x000 */ PictoActor picto;
/* 0x148 */ SkelAnime skelAnime;
/* 0x18C */ EnDnqActionFunc actionFunc;
/* 0x190 */ ColliderCylinder collider;
+1 -1
View File
@@ -1468,7 +1468,7 @@ void func_8089010C(Actor* thisx, PlayState* play) {
}
if (Actor_ProcessTalkRequest(thisx, &play->state)) {
func_8019FDC8(&D_801DB4A4, NA_SE_VO_NA_LISTEN, 0x20);
func_8019FDC8(&gSfxDefaultPos, NA_SE_VO_NA_LISTEN, 0x20);
thisx->focus.pos = thisx->world.pos;
if (thisx->textId == ElfMessage_GetFirstCycleHint(play)) {
@@ -106,12 +106,12 @@ void EnGakufu_ProcessNotes(EnGakufu* this) {
s32 songIndex;
AudioOcarina_TerminaWallGenerateNotes();
AudioOcarina_SetInstrumentId(OCARINA_INSTRUMENT_DEFAULT);
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
AudioOcarina_StartDefault((1 << this->songIndex) | 0x80000000);
playbackStaff = AudioOcarina_GetPlaybackStaff();
playbackStaff->pos = 0;
playbackStaff->state = 0xFF;
AudioOcarina_SetInstrumentId(OCARINA_INSTRUMENT_OFF);
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
songIndex = this->songIndex;
ocarinaSongButtons = &gOcarinaSongButtons[songIndex];
+409 -23
View File
@@ -15,7 +15,6 @@ void EnGe1_Destroy(Actor* thisx, PlayState* play);
void EnGe1_Update(Actor* thisx, PlayState* play);
void EnGe1_Draw(Actor* thisx, PlayState* play);
#if 0
const ActorInit En_Ge1_InitVars = {
ACTOR_EN_GE1,
ACTORCAT_NPC,
@@ -28,45 +27,432 @@ const ActorInit En_Ge1_InitVars = {
(ActorFunc)EnGe1_Draw,
};
// static ColliderCylinderInit sCylinderInit = {
static ColliderCylinderInit D_809464D0 = {
{ COLTYPE_NONE, AT_NONE, AC_ON | AC_TYPE_ENEMY, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_1, COLSHAPE_CYLINDER, },
{ ELEMTYPE_UNK0, { 0x00000000, 0x00, 0x00 }, { 0x01000202, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_ON, },
static ColliderCylinderInit sCylinderInit = {
{
COLTYPE_NONE,
AT_NONE,
AC_ON | AC_TYPE_ENEMY,
OC1_ON | OC1_TYPE_ALL,
OC2_TYPE_1,
COLSHAPE_CYLINDER,
},
{
ELEMTYPE_UNK0,
{ 0x00000000, 0x00, 0x00 },
{ 0x01000202, 0x00, 0x00 },
TOUCH_NONE | TOUCH_SFX_NORMAL,
BUMP_ON,
OCELEM_ON,
},
{ 20, 40, 0, { 0, 0, 0 } },
};
#endif
//! State flags
extern ColliderCylinderInit D_809464D0;
//! Disable normal movement to let pathing function control it completely.
#define GERUDO_WHITE_STATE_DISABLE_MOVEMENT (1 << 3)
extern UNK_TYPE D_06002B98;
typedef enum {
/* 0 */ GERUDO_WHITE_HAIR_BOB,
/* 1 */ GERUDO_WHITE_HAIR_STRAIGHT,
/* 2 */ GERUDO_WHITE_HAIR_SPIKEY
} GerudoWhiteHairstyle;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge1/EnGe1_Init.s")
typedef enum {
/* -1 */ GERUDO_WHITE_ANIM_NONE = -1,
/* 0 */ GERUDO_WHITE_ANIM_ARMS_FOLDED,
/* 1 */ GERUDO_WHITE_ANIM_UNFOLDING_ARMS, // Unused
/* 2 */ GERUDO_WHITE_ANIM_STANDING_HEAD_BOWED,
/* 3 */ GERUDO_WHITE_ANIM_STIFFENING,
/* 4 */ GERUDO_WHITE_ANIM_STIFF_SHIVERING,
/* 5 */ GERUDO_WHITE_ANIM_TRUDGING_OFF,
/* 6 */ GERUDO_WHITE_ANIM_EXCITED_CLAPPING,
/* 7 */ GERUDO_WHITE_ANIM_SALUTE,
/* 8 */ GERUDO_WHITE_ANIM_LEADING_BOAT,
/* 9 */ GERUDO_WHITE_ANIM_BLOWN_AWAY,
} GerudoWhiteAnimations;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge1/EnGe1_Destroy.s")
void EnGe1_SetAnimation(EnGe1* this, s16 index, u8 mode, f32 morphFrames);
void EnGe1_ShadowDraw(Actor* actor, Lights* lights, PlayState* play);
void EnGe1_Wait(EnGe1* this, PlayState* play);
void EnGe1_PerformCutsceneActions(EnGe1* this, PlayState* play);
s32 EnGe1_ValidatePictograph(PlayState* play, Actor* this);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge1/func_809457EC.s")
void EnGe1_Init(Actor* thisx, PlayState* play) {
EnGe1* this = THIS;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge1/func_80945924.s")
ActorShape_Init(&this->picto.actor.shape, 0.0f, EnGe1_ShadowDraw, 30.0f);
SkelAnime_InitFlex(play, &this->skelAnime, &gGerudoWhiteSkel, &gGerudoWhiteArmsFoldedAnim, this->jointTable,
this->morphTable, GERUDO_WHITE_LIMB_MAX);
Collider_InitAndSetCylinder(play, &this->collider, &this->picto.actor, &sCylinderInit);
this->picto.actor.colChkInfo.mass = MASS_IMMOVABLE;
this->picto.actor.targetMode = 6;
Actor_SetScale(&this->picto.actor, 0.01f);
this->curAnim = this->csAction = -1; // GERUDO_WHITE_ANIM_NONE
this->stateFlags = 0;
EnGe1_SetAnimation(this, GERUDO_WHITE_ANIM_ARMS_FOLDED, ANIMMODE_LOOP, 0.0f);
this->actionFunc = EnGe1_Wait;
this->picto.validationFunc = EnGe1_ValidatePictograph;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge1/func_80945A00.s")
switch (GERUDO_WHITE_GET_TYPE(&this->picto.actor)) {
default:
this->hairstyle = GERUDO_WHITE_HAIR_BOB;
break;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge1/func_80945A9C.s")
case GERUDO_WHITE_TYPE_HAIR_STRAIGHT:
this->hairstyle = GERUDO_WHITE_HAIR_STRAIGHT;
break;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge1/func_80945B60.s")
case GERUDO_WHITE_TYPE_HAIR_SPIKEY:
this->hairstyle = GERUDO_WHITE_HAIR_SPIKEY;
break;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge1/func_80945C50.s")
case GERUDO_WHITE_TYPE_CUTSCENE: // Only type used in-game
this->hairstyle = GERUDO_WHITE_HAIR_BOB;
this->actionFunc = EnGe1_PerformCutsceneActions;
this->picto.actor.draw = NULL;
this->picto.actor.flags |= ACTOR_FLAG_20 | ACTOR_FLAG_10;
this->picto.actor.flags &= ~ACTOR_FLAG_1;
break;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge1/func_80945CAC.s")
this->picto.actor.terminalVelocity = -9.0f;
this->picto.actor.velocity.y = -9.0f;
this->picto.actor.gravity = -1.0f;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge1/func_80945CE4.s")
void EnGe1_Destroy(Actor* thisx, PlayState* play) {
EnGe1* this = THIS;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge1/EnGe1_Update.s")
Collider_DestroyCylinder(play, &this->collider);
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge1/func_80946190.s")
void EnGe1_SetAnimation(EnGe1* this, s16 index, u8 mode, f32 morphFrames) {
static AnimationHeader* sAnimations[] = {
&gGerudoWhiteArmsFoldedAnim, // GERUDO_WHITE_ANIM_ARMS_FOLDED,
&gGerudoWhiteUnfoldingArmsAnim, // GERUDO_WHITE_ANIM_UNFOLDING_ARMS
&gGerudoWhiteStandingHeadBowedAnim, // GERUDO_WHITE_ANIM_STANDING_HEAD_BOWED,
&gGerudoWhiteStiffeningAnim, // GERUDO_WHITE_ANIM_STIFFENING,
&gGerudoWhiteStiffShiveringAnim, // GERUDO_WHITE_ANIM_STIFF_SHIVERING,
&gGerudoWhiteTrudgingOffAnim, // GERUDO_WHITE_ANIM_TRUDGING_OFF,
&gGerudoWhiteExcitedClappingAnim, // GERUDO_WHITE_ANIM_EXCITED_CLAPPING,
&gGerudoWhiteSaluteAnim, // GERUDO_WHITE_ANIM_SALUTE,
&gGerudoWhiteGreatBayCutsceneAnim, // GERUDO_WHITE_ANIM_LEADING_BOAT,
&gGerudoWhiteGreatBayCutsceneAnim, // GERUDO_WHITE_ANIM_BLOWN_AWAY,
};
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge1/func_80946238.s")
// The GERUDO_WHITE_ANIM_LEADING_BOAT / GERUDO_WHITE_ANIM_BLOWN_AWAY cases are single frames of an "animation" used
// as static poses.
switch (index) {
case GERUDO_WHITE_ANIM_LEADING_BOAT:
Animation_Change(&this->skelAnime, sAnimations[index], 0.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f);
break;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge1/func_80946368.s")
case GERUDO_WHITE_ANIM_BLOWN_AWAY:
Animation_Change(&this->skelAnime, sAnimations[index], 0.0f, 1.0f, 1.0f, ANIMMODE_ONCE, 0.0f);
break;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge1/EnGe1_Draw.s")
default:
Animation_Change(&this->skelAnime, sAnimations[index], 1.0f, 0.0f,
Animation_GetLastFrame(sAnimations[index]), mode, morphFrames);
break;
}
this->curAnim = index;
}
void EnGe1_LookAtPlayer(EnGe1* this, PlayState* play) {
s16 yawDiff = this->picto.actor.yawTowardsPlayer - this->picto.actor.shape.rot.y;
if ((ABS_ALT(yawDiff) <= 0x4300) && (this->picto.actor.xzDistToPlayer < 100.0f)) {
Actor_TrackPlayer(play, &this->picto.actor, &this->headRot, &this->torsoRot, this->picto.actor.focus.pos);
} else {
Math_SmoothStepToS(&this->headRot.x, 0, 6, 0x1838, 0x64);
Math_SmoothStepToS(&this->headRot.y, 0, 6, 0x1838, 0x64);
}
}
void EnGe1_ShadowDraw(Actor* thisx, Lights* lights, PlayState* play) {
Vec3f pos;
EnGe1* this = THIS;
Math_Vec3f_Copy(&pos, &this->picto.actor.world.pos);
Math_Vec3f_Copy(&this->picto.actor.world.pos, &this->waistPos);
func_800B4AEC(play, &this->picto.actor, 50.0f);
this->picto.actor.world.pos.y = MAX(this->picto.actor.floorHeight, pos.y);
ActorShadow_DrawCircle(&this->picto.actor, lights, play);
Math_Vec3f_Copy(&this->picto.actor.world.pos, &pos);
}
void EnGe1_SetupPath(EnGe1* this, PlayState* play) {
s32 pad;
Vec3s* point;
Vec3f nextPoint;
this->curPoint = 0;
if (GERUDO_WHITE_GET_PATH(&this->picto.actor) != 0x3F) {
this->path = &play->setupPathList[GERUDO_WHITE_GET_PATH(&this->picto.actor)];
if (this->path != NULL) {
point = Lib_SegmentedToVirtual(this->path->points);
Math_Vec3s_ToVec3f(&this->picto.actor.world.pos, point);
this->curPoint++;
point++;
Math_Vec3s_ToVec3f(&nextPoint, point);
this->picto.actor.world.rot.y = Math_Vec3f_Yaw(&this->picto.actor.world.pos, &nextPoint);
this->picto.actor.world.rot.x = Math_Vec3f_Pitch(&this->picto.actor.world.pos, &nextPoint);
this->picto.actor.speedXZ = 15.0f;
}
} else {
this->path = NULL;
}
}
/**
* @return s32 true if close to next point or no path set.
*/
s32 EnGe1_FollowPath(EnGe1* this) {
s32 pad;
Path* path = this->path;
Vec3s* points;
Vec3f point;
s16 yawTarget;
s16 pitchTarget;
if (path == NULL) {
return true;
}
points = Lib_SegmentedToVirtual(this->path->points);
points += this->curPoint;
Math_Vec3s_ToVec3f(&point, points);
yawTarget = Math_Vec3f_Yaw(&this->picto.actor.world.pos, &point);
pitchTarget = Math_Vec3f_Pitch(&this->picto.actor.world.pos, &point);
Math_SmoothStepToS(&this->picto.actor.world.rot.y, yawTarget, 0xA, 0x3E8, 0x64);
Math_SmoothStepToS(&this->picto.actor.world.rot.x, pitchTarget, 6, 0x7D0, 0xC8);
Actor_MoveWithoutGravityReverse(&this->picto.actor);
if (Math_Vec3f_DistXYZ(&this->picto.actor.world.pos, &point) < 40.0f) {
return true;
} else {
return false;
}
}
void EnGe1_Scream(EnGe1* this) {
if ((s32)Rand_ZeroFloat(2.0f) == 0) {
Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_VO_FPVO00);
} else {
Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_VO_FPVO01);
}
}
void EnGe1_Wait(EnGe1* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
EnGe1_LookAtPlayer(this, play);
}
void EnGe1_PerformCutsceneActions(EnGe1* this, PlayState* play) {
s16 csAction;
if (SkelAnime_Update(&this->skelAnime) && (this->csAction == 3)) {
EnGe1_SetAnimation(this, GERUDO_WHITE_ANIM_STIFF_SHIVERING, ANIMMODE_LOOP, 0.0f);
}
if (Cutscene_CheckActorAction(play, 0x79)) {
this->picto.actor.draw = EnGe1_Draw;
csAction = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 0x79)]->action;
switch (csAction) {
case 8:
this->stateFlags &= ~GERUDO_WHITE_STATE_DISABLE_MOVEMENT;
break;
case 9:
this->stateFlags |= GERUDO_WHITE_STATE_DISABLE_MOVEMENT;
break;
default:
this->stateFlags &= ~GERUDO_WHITE_STATE_DISABLE_MOVEMENT;
Cutscene_ActorTranslateAndYaw(&this->picto.actor, play, Cutscene_GetActorActionIndex(play, 0x79));
break;
}
if (this->csAction != csAction) {
this->csAction = csAction;
switch (this->csAction) {
// Aveil cutscene
case 1:
EnGe1_SetAnimation(this, GERUDO_WHITE_ANIM_ARMS_FOLDED, ANIMMODE_LOOP, 0.0f);
break;
case 2:
EnGe1_SetAnimation(this, GERUDO_WHITE_ANIM_STANDING_HEAD_BOWED, ANIMMODE_LOOP, 0.0f);
break;
case 3:
EnGe1_SetAnimation(this, GERUDO_WHITE_ANIM_STIFFENING, ANIMMODE_ONCE, 0.0f);
break;
case 4:
EnGe1_SetAnimation(this, GERUDO_WHITE_ANIM_TRUDGING_OFF, ANIMMODE_ONCE, 0.0f);
break;
case 5:
EnGe1_SetAnimation(this, GERUDO_WHITE_ANIM_EXCITED_CLAPPING, ANIMMODE_LOOP, 0.0f);
break;
case 6:
EnGe1_SetAnimation(this, GERUDO_WHITE_ANIM_SALUTE, ANIMMODE_ONCE, 0.0f);
break;
case 7:
Actor_MarkForDeath(&this->picto.actor);
break;
// Twister cutscene
case 8:
EnGe1_SetAnimation(this, GERUDO_WHITE_ANIM_LEADING_BOAT, ANIMMODE_ONCE, 0.0f);
break;
case 9:
EnGe1_SetAnimation(this, GERUDO_WHITE_ANIM_BLOWN_AWAY, ANIMMODE_ONCE, 0.0f);
EnGe1_SetupPath(this, play);
this->stateFlags |= GERUDO_WHITE_STATE_DISABLE_MOVEMENT;
this->screamTimer = (s32)(Rand_ZeroFloat(10.0f) + 20.0f);
break;
}
SkelAnime_Update(&this->skelAnime);
}
if ((this->curAnim == GERUDO_WHITE_ANIM_TRUDGING_OFF) &&
(Animation_OnFrame(&this->skelAnime, 12.0f) || Animation_OnFrame(&this->skelAnime, 25.0f))) {
Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EV_PIRATE_WALK);
}
if ((this->curAnim == GERUDO_WHITE_ANIM_SALUTE) && Animation_OnFrame(&this->skelAnime, 14.0f)) {
Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EV_PIRATE_WALK);
}
} else {
this->picto.actor.draw = NULL;
}
if (this->csAction == 9) {
if ((this->curPoint < this->path->count) && EnGe1_FollowPath(this)) {
this->curPoint++;
}
// Tumble in the air
this->picto.actor.shape.rot.x += 0x3E8;
this->picto.actor.shape.rot.y += 0x7D0;
this->picto.actor.shape.rot.z += 0x1F4;
if (this->screamTimer > 0) {
this->screamTimer--;
} else {
this->screamTimer = (s32)(Rand_ZeroFloat(10.0f) + 20.0f);
EnGe1_Scream(this);
}
}
}
void EnGe1_Update(Actor* thisx, PlayState* play) {
s32 pad;
EnGe1* this = THIS;
if (this->picto.actor.draw != NULL) {
Collider_UpdateCylinder(&this->picto.actor, &this->collider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
}
if (!(this->stateFlags & GERUDO_WHITE_STATE_DISABLE_MOVEMENT)) {
Actor_MoveWithGravity(&this->picto.actor);
}
Actor_UpdateBgCheckInfo(play, &this->picto.actor, 40.0f, 25.0f, 40.0f, 5);
this->actionFunc(this, play);
this->torsoRot.x = this->torsoRot.y = this->torsoRot.z = 0;
if (DECR(this->blinkTimer) == 0) {
this->blinkTimer = Rand_S16Offset(60, 60);
}
this->eyeIndex = this->blinkTimer;
if (this->eyeIndex >= 3) {
this->eyeIndex = 0;
}
}
s32 EnGe1_ValidatePictograph(PlayState* play, Actor* thisx) {
s32 ret = Snap_ValidatePictograph(play, thisx, PICTOGRAPH_PIRATE_GOOD, &thisx->focus.pos, &thisx->shape.rot, 10.0f,
400.0f, -1);
ret |= Snap_ValidatePictograph(play, thisx, PICTOGRAPH_PIRATE_TOO_FAR, &thisx->focus.pos, &thisx->shape.rot, 10.0f,
1200.0f, -1);
return ret;
}
s32 EnGe1_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
s32 pad;
EnGe1* this = THIS;
if (limbIndex == GERUDO_WHITE_LIMB_HEAD) {
rot->x += this->headRot.y;
rot->z += this->headRot.x;
}
if (this->curAnim == GERUDO_WHITE_ANIM_ARMS_FOLDED) {
// Make small fidgeting movements if in standing animation.
if ((limbIndex == GERUDO_WHITE_LIMB_TORSO) || (limbIndex == GERUDO_WHITE_LIMB_LEFT_FOREARM) ||
(limbIndex == GERUDO_WHITE_LIMB_RIGHT_FOREARM)) {
rot->y += (s16)(Math_SinS(play->state.frames * (limbIndex * 50 + 0x814)) * 200.0f);
rot->z += (s16)(Math_CosS(play->state.frames * (limbIndex * 50 + 0x940)) * 200.0f);
}
}
return false;
}
void EnGe1_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
static Gfx* sHairstyleDLs[] = {
gGerudoWhiteHairstyleBobDL,
gGerudoWhiteHairstyleStraightFringeDL,
gGerudoWhiteHairstyleSpikyDL,
};
static Vec3f sInitialFocusPos = { 600.0f, 700.0f, 0.0f };
static Vec3f sZeroVec = { 0.0f, 0.0f, 0.0f };
EnGe1* this = THIS;
OPEN_DISPS(play->state.gfxCtx);
switch (limbIndex) {
case GERUDO_WHITE_LIMB_WAIST:
Matrix_MultVec3f(&sZeroVec, &this->waistPos);
break;
case GERUDO_WHITE_LIMB_HEAD:
gSPDisplayList(POLY_OPA_DISP++, sHairstyleDLs[this->hairstyle]);
Matrix_MultVec3f(&sInitialFocusPos, &this->picto.actor.focus.pos);
break;
}
CLOSE_DISPS(play->state.gfxCtx);
}
void EnGe1_Draw(Actor* thisx, PlayState* play) {
static TexturePtr sEyeTextures[] = {
gGerudoWhiteEyeOpenTex,
gGerudoWhiteEyeHalfTex,
gGerudoWhiteEyeClosedTex,
};
s32 pad;
EnGe1* this = THIS;
OPEN_DISPS(play->state.gfxCtx);
func_8012C5B0(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeIndex]));
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnGe1_OverrideLimbDraw, EnGe1_PostLimbDraw, &this->picto.actor);
CLOSE_DISPS(play->state.gfxCtx);
}
+29 -2
View File
@@ -2,14 +2,41 @@
#define Z_EN_GE1_H
#include "global.h"
#include "z64snap.h"
#include "objects/object_ge1/object_ge1.h"
#define GERUDO_WHITE_GET_TYPE(thisx) (((thisx)->params) & 0xF)
#define GERUDO_WHITE_GET_PATH(thisx) ((((thisx)->params) & 0xFC00) >> 10)
//! Only the first type is used
typedef enum {
/* 0 */ GERUDO_WHITE_TYPE_CUTSCENE,
/* 1 */ GERUDO_WHITE_TYPE_HAIR_STRAIGHT,
/* 2 */ GERUDO_WHITE_TYPE_HAIR_SPIKEY
} GerudoWhiteType;
struct EnGe1;
typedef void (*EnGe1ActionFunc)(struct EnGe1*, PlayState*);
typedef struct EnGe1 {
/* 0x000 */ Actor actor;
/* 0x144 */ char unk_144[0x184];
/* 0x000 */ PictoActor picto;
/* 0x148 */ ColliderCylinder collider;
/* 0x194 */ SkelAnime skelAnime;
/* 0x1D8 */ Vec3f waistPos;
/* 0x1E4 */ Vec3s jointTable[GERUDO_WHITE_LIMB_MAX];
/* 0x244 */ Vec3s morphTable[GERUDO_WHITE_LIMB_MAX];
/* 0x2A4 */ Vec3s headRot;
/* 0x2AA */ Vec3s torsoRot;
/* 0x2B0 */ Path* path;
/* 0x2B4 */ s32 curPoint;
/* 0x2B8 */ s16 eyeIndex;
/* 0x2BA */ s16 blinkTimer;
/* 0x2BC */ u16 stateFlags;
/* 0x2BE */ s16 curAnim; // Index
/* 0x2C0 */ s16 csAction;
/* 0x2C2 */ s16 screamTimer;
/* 0x2C4 */ u8 hairstyle;
/* 0x2C8 */ EnGe1ActionFunc actionFunc;
} EnGe1; // size = 0x2CC
@@ -1364,15 +1364,15 @@ void func_80B45648(EnInvadepoh* this) {
}
}
s32 func_80B456A8(PlayState* play, Vec3f* vec) {
Vec3f multDest;
f32 wDest;
s32 func_80B456A8(PlayState* play, Vec3f* worldPos) {
Vec3f projectedPos;
f32 invW;
Actor_GetProjectedPos(play, vec, &multDest, &wDest);
if (((multDest.z > 1.0f) && (fabsf(multDest.x * wDest) < 1.0f)) && (fabsf(multDest.y * wDest) < 1.0f)) {
s32 wX = (multDest.x * wDest * 160.0f) + 160.0f;
s32 wY = (multDest.y * wDest * -120.0f) + 120.0f;
s32 wZ = (s32)(multDest.z * wDest * 16352.0f) + 0x3FE0;
Actor_GetProjectedPos(play, worldPos, &projectedPos, &invW);
if (((projectedPos.z > 1.0f) && (fabsf(projectedPos.x * invW) < 1.0f)) && (fabsf(projectedPos.y * invW) < 1.0f)) {
s32 wX = PROJECTED_TO_SCREEN_X(projectedPos, invW);
s32 wY = PROJECTED_TO_SCREEN_Y(projectedPos, invW);
s32 wZ = (s32)(projectedPos.z * invW * 16352.0f) + 0x3FE0;
s32 zBuf = func_80178A94(wX, wY);
if (wZ < zBuf) {
return true;
+185 -188
View File
@@ -21,7 +21,7 @@ void EnKakasi_SetupPostSongLearnDialogue(EnKakasi* this, PlayState* play);
void EnKakasi_InitTimeSkipDialogue(EnKakasi* this);
void EnKakasi_SetupIdleStanding(EnKakasi* this);
void EnKakasi_8096F88C(PlayState* play, EnKakasi* this);
s32 EnKakasi_ValidatePictograph(PlayState* play, Actor* thisx);
void EnKakasi_TimeSkipDialogue(EnKakasi* this, PlayState* play);
void EnKakasi_IdleStanding(EnKakasi* this, PlayState* play);
@@ -146,44 +146,44 @@ void EnKakasi_Init(Actor* thisx, PlayState* play) {
s32 tempCutscene;
s32 i;
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &D_80971D80);
Collider_InitAndSetCylinder(play, &this->collider, &this->picto.actor, &D_80971D80);
SkelAnime_InitFlex(play, &this->skelanime, &object_ka_Skel_0065B0, &object_ka_Anim_000214, 0, 0, 0);
this->songSummonDist = GET_KAKASI_SUMMON_DISTANCE(&this->actor) * 20.0f;
this->songSummonDist = GET_KAKASI_SUMMON_DISTANCE(&this->picto.actor) * 20.0f;
if (this->songSummonDist < 40.0f) {
this->songSummonDist = 40.0f;
}
this->unkHeight = (this->actor.world.rot.z * 20.0f) + 60.0f;
this->actor.world.rot.z = 0;
this->actor.targetMode = 0;
if (this->actor.world.rot.x > 0 && this->actor.world.rot.x < 8) {
this->actor.targetMode = GET_KAKASI_TARGETMODE(thisx);
this->unkHeight = (this->picto.actor.world.rot.z * 20.0f) + 60.0f;
this->picto.actor.world.rot.z = 0;
this->picto.actor.targetMode = 0;
if (this->picto.actor.world.rot.x > 0 && this->picto.actor.world.rot.x < 8) {
this->picto.actor.targetMode = GET_KAKASI_TARGETMODE(thisx);
}
this->actor.shape.rot.y = this->actor.world.rot.y;
this->picto.actor.shape.rot.y = this->picto.actor.world.rot.y;
this->aboveGroundStatus = GET_KAKASI_ABOVE_GROUND(&this->actor);
this->actor.world.rot.x = 0;
this->actor.flags |= ACTOR_FLAG_400;
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
Actor_SetScale(&this->actor, 0.01f);
this->aboveGroundStatus = GET_KAKASI_ABOVE_GROUND(&this->picto.actor);
this->picto.actor.world.rot.x = 0;
this->picto.actor.flags |= ACTOR_FLAG_400;
this->picto.actor.colChkInfo.mass = MASS_IMMOVABLE;
Actor_SetScale(&this->picto.actor, 0.01f);
i = 0;
tempCutscene = this->actor.cutscene;
tempCutscene = this->picto.actor.cutscene;
while (tempCutscene != -1) {
//! FAKE:
tempCutscene = ActorCutscene_GetAdditionalCutscene(this->actorCutscenes[i] = tempCutscene);
i++;
}
if (this->aboveGroundStatus) {
if (this->aboveGroundStatus != 0) {
if (gSaveContext.save.weekEventReg[79] & 8) {
this->aboveGroundStatus = ENKAKASI_ABOVE_GROUND_TYPE;
this->songSummonDist = 80.0f;
EnKakasi_SetupIdleUnderground(this);
} else {
Actor_SetFocus(&this->actor, 60.0f);
this->unkFunc = EnKakasi_8096F88C;
Actor_SetFocus(&this->picto.actor, 60.0f);
this->picto.validationFunc = EnKakasi_ValidatePictograph;
if (gSaveContext.save.weekEventReg[83] & 1) {
EnKakasi_InitTimeSkipDialogue(this);
} else {
@@ -203,34 +203,31 @@ void EnKakasi_SetAnimation(EnKakasi* this, s32 index) {
sAnimModes[this->animIndex], -4.0f);
}
/*
* set by init, called... nowhere? left over from OOT?
*/
void EnKakasi_8096F88C(PlayState* play, EnKakasi* this) {
func_8013A530(play, &this->actor, 0x7, &this->actor.focus.pos, &this->actor.shape.rot, 280.0f, 1800.0f, -1);
s32 EnKakasi_ValidatePictograph(PlayState* play, Actor* thisx) {
return Snap_ValidatePictograph(play, thisx, 0x7, &thisx->focus.pos, &thisx->shape.rot, 280.0f, 1800.0f, -1);
}
void EnKakasi_CheckAnimationSfx(EnKakasi* this) {
if (this->animIndex == ENKAKASI_ANIM_SIDEWAYS_SHAKING || this->animIndex == ENKAKASI_ANIM_ARMS_CROSSED_STILL) {
if (Animation_OnFrame(&this->skelanime, 1.0f) || Animation_OnFrame(&this->skelanime, 8.0f)) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_KAKASHI_SWING);
Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EV_KAKASHI_SWING);
}
}
if (this->animIndex == ENKAKASI_ANIM_HOPPING_REGULAR || this->animIndex == ENKAKASI_ANIM_SLOWROLL) {
if (Animation_OnFrame(&this->skelanime, 4.0f) || Animation_OnFrame(&this->skelanime, 8.0f)) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_KAKASHI_SWING);
Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EV_KAKASHI_SWING);
}
if (Animation_OnFrame(&this->skelanime, 1.0f) || Animation_OnFrame(&this->skelanime, 9.0f) ||
Animation_OnFrame(&this->skelanime, 16.0f)) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_KAKASHI_JUMP);
Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_IT_KAKASHI_JUMP);
}
if (Animation_OnFrame(&this->skelanime, 18.0f)) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_KAKASHI_ROLL);
Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EV_KAKASHI_ROLL);
}
}
if (this->animIndex == ENKAKASI_ANIM_SPIN_REACH_OFFER || this->animIndex == ENKAKASI_ANIM_TWIRL) {
if (Animation_OnFrame(&this->skelanime, 1.0f)) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_KAKASH_LONGI_ROLL);
Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EV_KAKASH_LONGI_ROLL);
}
}
}
@@ -249,7 +246,7 @@ void EnKakasi_CheckPlayerPosition(EnKakasi* this, PlayState* play) {
player->actor.world.pos.z = -190.0f;
}
Math_SmoothStepToS(&player->actor.shape.rot.y, (this->actor.yawTowardsPlayer + 0x8000), 5, 1000, 0);
Math_SmoothStepToS(&player->actor.shape.rot.y, (this->picto.actor.yawTowardsPlayer + 0x8000), 5, 1000, 0);
}
/*
@@ -290,7 +287,7 @@ void func_8096FBB8(EnKakasi* this, PlayState* play) {
}
if (this->unk190 != 0) {
Math_ApproachF(&this->skelanime.playSpeed, 1.0f, 0.1f, 0.2f);
this->actor.shape.rot.y += 0x800;
this->picto.actor.shape.rot.y += 0x800;
}
}
@@ -306,22 +303,22 @@ void EnKakasi_TimeSkipDialogue(EnKakasi* this, PlayState* play) {
if (gSaveContext.save.time != CLOCK_TIME(6, 0) && gSaveContext.save.time != CLOCK_TIME(18, 0) &&
!(gSaveContext.eventInf[1] & 0x80)) {
if (this->actor.textId == 0) {
if (this->picto.actor.textId == 0) {
// dialogue after skipped time 'did you feel that? went by in an instant'
this->actor.textId = 0x1653;
this->picto.actor.textId = 0x1653;
gSaveContext.save.weekEventReg[83] &= (u8)~1;
this->talkState = TEXT_STATE_5;
player->stateFlags1 |= 0x20;
this->actor.flags |= ACTOR_FLAG_10000;
this->picto.actor.flags |= ACTOR_FLAG_10000;
}
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
if (Actor_ProcessTalkRequest(&this->picto.actor, &play->state)) {
player->stateFlags1 &= ~0x20;
this->unkState196 = 2;
this->actor.flags &= ~ACTOR_FLAG_10000;
this->picto.actor.flags &= ~ACTOR_FLAG_10000;
this->actionFunc = EnKakasi_RegularDialogue;
} else {
func_800B8500(&this->actor, play, 9999.9f, 9999.9f, -1);
func_800B8500(&this->picto.actor, play, 9999.9f, 9999.9f, -1);
}
}
}
@@ -338,20 +335,20 @@ void EnKakasi_IdleStanding(EnKakasi* this, PlayState* play) {
s16 y;
// first talk to scarecrow dialogue
this->actor.textId = 0x1644;
if (func_800B8718(&this->actor, &play->state)) {
this->picto.actor.textId = 0x1644;
if (func_800B8718(&this->picto.actor, &play->state)) {
this->skelanime.playSpeed = 1.0f;
EnKakasi_SetupSongTeach(this, play);
return;
}
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
if (Actor_ProcessTalkRequest(&this->picto.actor, &play->state)) {
this->skelanime.playSpeed = 1.0f;
EnKakasi_SetupDialogue(this);
return;
}
if (play->actorCtx.unk5 & 0x4) {
Actor_GetScreenPos(play, &this->actor, &x, &y);
if (this->actor.projectedPos.z > -20.0f && x > 0 && x < SCREEN_WIDTH && y > 0 && y < SCREEN_HEIGHT &&
Actor_GetScreenPos(play, &this->picto.actor, &x, &y);
if (this->picto.actor.projectedPos.z > -20.0f && x > 0 && x < SCREEN_WIDTH && y > 0 && y < SCREEN_HEIGHT &&
this->animIndex != ENKAKASI_ANIM_SIDEWAYS_SHAKING) {
// faster shaking
EnKakasi_SetAnimation(this, ENKAKASI_ANIM_SIDEWAYS_SHAKING);
@@ -370,9 +367,9 @@ void EnKakasi_IdleStanding(EnKakasi* this, PlayState* play) {
} else if (this->animIndex != ENKAKASI_ANIM_IDLE) {
EnKakasi_SetAnimation(this, ENKAKASI_ANIM_IDLE);
}
if (this->actor.xzDistToPlayer < 120.0f) {
func_800B8614(&this->actor, play, 100.0f);
func_800B874C(&this->actor, play, 100.0f, 80.0f);
if (this->picto.actor.xzDistToPlayer < 120.0f) {
func_800B8614(&this->picto.actor, play, 100.0f);
func_800B874C(&this->picto.actor, play, 100.0f, 80.0f);
}
}
@@ -392,9 +389,9 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) {
u32 saveContextDay = gSaveContext.save.day;
f32 currentAnimeFrame = this->skelanime.curFrame;
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 5, 2000, 0);
Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 5, 2000, 0);
// if first dialogue
if (this->actor.textId != 0x1644 && this->animeFrameCount <= currentAnimeFrame &&
if (this->picto.actor.textId != 0x1644 && this->animeFrameCount <= currentAnimeFrame &&
this->animIndex == ENKAKASI_ANIM_SLOWROLL) {
EnKakasi_SetAnimation(this, ENKAKASI_ANIM_SPIN_REACH_OFFER);
@@ -402,7 +399,7 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) {
}
// if dialogue: oh sorry come back again
if (this->actor.textId == 0x1651 || this->actor.textId == 0x1659) {
if (this->picto.actor.textId == 0x1651 || this->picto.actor.textId == 0x1659) {
if (this->animeFrameCount <= currentAnimeFrame && this->animIndex != ENKAKASI_ANIM_SPIN_REACH_OFFER) {
if (++this->unkCounter1A4 >= 2) {
this->unkCounter1A4 = 0;
@@ -412,7 +409,7 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) {
}
if (this->unkState1A8 == 2 && this->unkState196 == 2) {
func_800B7298(play, &this->actor, 0x49);
func_800B7298(play, &this->picto.actor, 0x49);
this->unkState1A8 = 0;
}
@@ -420,12 +417,12 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) {
func_801477B4(play);
if (this->talkState == TEXT_STATE_5) {
// bad song input
if (this->unkState196 == 2 && this->actor.textId == 0x1647) {
func_800B7298(play, &this->actor, 6);
if (this->unkState196 == 2 && this->picto.actor.textId == 0x1647) {
func_800B7298(play, &this->picto.actor, 6);
}
// after timeskip
if (this->actor.textId == 0x1653) {
if (this->picto.actor.textId == 0x1653) {
u32 saveContextDay2 = gSaveContext.save.day;
if (this->animIndex != ENKAKASI_ANIM_SIDEWAYS_SHAKING) {
@@ -434,21 +431,21 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) {
if (saveContextDay2 == 3 && gSaveContext.save.isNight) {
// text: dangerous outside
this->actor.textId = 0x164F;
this->picto.actor.textId = 0x164F;
} else if (gSaveContext.save.isNight) {
// text: would you like to skip time?
this->actor.textId = 0x164E;
this->picto.actor.textId = 0x164E;
} else {
// text: would you like to skip time? 2
this->actor.textId = 0x1645;
this->picto.actor.textId = 0x1645;
}
func_80151938(play, this->actor.textId);
func_80151938(play, this->picto.actor.textId);
return;
} else if (this->actor.textId == 0x165D || this->actor.textId == 0x165F || this->actor.textId == 0x1660 ||
this->actor.textId == 0x1652) {
func_800B7298(play, &this->actor, 4);
} else if (this->picto.actor.textId == 0x165D || this->picto.actor.textId == 0x165F ||
this->picto.actor.textId == 0x1660 || this->picto.actor.textId == 0x1652) {
func_800B7298(play, &this->picto.actor, 4);
if (ActorCutscene_GetCurrentIndex() == 0x7C) {
ActorCutscene_Stop(0x7C);
ActorCutscene_SetIntentToPlay(this->actorCutscenes[0]);
@@ -458,55 +455,55 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) {
ActorCutscene_SetIntentToPlay(this->actorCutscenes[0]);
this->actionFunc = EnKakasi_DancingRemark;
} else {
ActorCutscene_StartAndSetUnkLinkFields(this->actorCutscenes[0], &this->actor);
this->subCamId = ActorCutscene_GetCurrentSubCamId(this->actor.cutscene);
ActorCutscene_StartAndSetUnkLinkFields(this->actorCutscenes[0], &this->picto.actor);
this->subCamId = ActorCutscene_GetCurrentSubCamId(this->picto.actor.cutscene);
this->actionFunc = EnKakasi_DancingRemark;
}
}
return;
} else if (this->actor.textId == 0x1645 || this->actor.textId == 0x164E) {
this->actor.textId = 0x1650; // "Shall we dance? No Yes"
} else if (this->picto.actor.textId == 0x1645 || this->picto.actor.textId == 0x164E) {
this->picto.actor.textId = 0x1650; // "Shall we dance? No Yes"
if (this->animIndex != ENKAKASI_ANIM_SIDEWAYS_SHAKING) {
EnKakasi_SetAnimation(this, ENKAKASI_ANIM_SIDEWAYS_SHAKING);
}
this->talkState = TEXT_STATE_CHOICE;
} else if (this->actor.textId == 0x1644) {
} else if (this->picto.actor.textId == 0x1644) {
if (this->animIndex != ENKAKASI_ANIM_SIDEWAYS_SHAKING) {
EnKakasi_SetAnimation(this, ENKAKASI_ANIM_SIDEWAYS_SHAKING);
}
if (gSaveContext.save.isNight) {
this->actor.textId = 0x164E;
this->picto.actor.textId = 0x164E;
} else {
this->actor.textId = 0x1645;
this->picto.actor.textId = 0x1645;
}
} else if (this->actor.textId == 0x164F) {
} else if (this->picto.actor.textId == 0x164F) {
if (this->animIndex != ENKAKASI_ANIM_SIDEWAYS_SHAKING) {
EnKakasi_SetAnimation(this, ENKAKASI_ANIM_SIDEWAYS_SHAKING);
}
this->actor.textId = 0x165A;
} else if (this->actor.textId == 0x1651) {
this->picto.actor.textId = 0x165A;
} else if (this->picto.actor.textId == 0x1651) {
if (this->animIndex != ENKAKASI_ANIM_SIDEWAYS_SHAKING) {
EnKakasi_SetAnimation(this, ENKAKASI_ANIM_SIDEWAYS_SHAKING);
}
this->actor.textId = 0x1654;
} else if (this->actor.textId == 0x1654) {
this->actor.textId = 0x1655;
} else if (this->actor.textId == 0x1655) {
this->actor.textId = 0x1656;
this->picto.actor.textId = 0x1654;
} else if (this->picto.actor.textId == 0x1654) {
this->picto.actor.textId = 0x1655;
} else if (this->picto.actor.textId == 0x1655) {
this->picto.actor.textId = 0x1656;
this->talkState = TEXT_STATE_CHOICE;
} else if (this->actor.textId == 0x1658) {
this->actor.textId = 0x1659;
} else if (this->actor.textId == 0x165A) {
this->actor.textId = 0x165B;
} else if (this->actor.textId == 0x165B) {
this->actor.textId = 0x165C;
} else if (this->picto.actor.textId == 0x1658) {
this->picto.actor.textId = 0x1659;
} else if (this->picto.actor.textId == 0x165A) {
this->picto.actor.textId = 0x165B;
} else if (this->picto.actor.textId == 0x165B) {
this->picto.actor.textId = 0x165C;
this->talkState = TEXT_STATE_CHOICE;
} else if (this->actor.textId == 0x165E) {
this->actor.textId = 0x165F;
} else if (this->picto.actor.textId == 0x165E) {
this->picto.actor.textId = 0x165F;
} else {
EnKakasi_SetupIdleStanding(this);
return;
@@ -516,24 +513,24 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) {
if (play->msgCtx.choiceIndex == 1) {
func_8019F208();
if (this->actor.textId == 0x1656) {
this->actor.textId = 0x1658;
} else if (this->actor.textId == 0x165C) {
this->actor.textId = 0x165E;
if (this->picto.actor.textId == 0x1656) {
this->picto.actor.textId = 0x1658;
} else if (this->picto.actor.textId == 0x165C) {
this->picto.actor.textId = 0x165E;
} else if (saveContextDay == 3 && gSaveContext.save.isNight) {
this->actor.textId = 0x164F;
this->picto.actor.textId = 0x164F;
} else {
this->actor.textId = 0x1652;
this->picto.actor.textId = 0x1652;
}
EnKakasi_SetAnimation(this, ENKAKASI_ANIM_HOPPING_REGULAR);
} else {
func_8019F230();
if (this->actor.textId == 0x1656) { // would you like to learn a song? yes/no
this->actor.textId = 0x1657;
} else if (this->actor.textId == 0x165C) { // would you like to learn a song? yes/no
this->actor.textId = 0x165D;
if (this->picto.actor.textId == 0x1656) { // would you like to learn a song? yes/no
this->picto.actor.textId = 0x1657;
} else if (this->picto.actor.textId == 0x165C) { // would you like to learn a song? yes/no
this->picto.actor.textId = 0x165D;
} else {
this->actor.textId = 0x1651;
this->picto.actor.textId = 0x1651;
}
this->unkCounter1A4 = 0;
if (this->animIndex != ENKAKASI_ANIM_ARMS_CROSSED_ROCKING) {
@@ -541,13 +538,13 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) {
}
}
}
func_80151938(play, this->actor.textId);
func_80151938(play, this->picto.actor.textId);
}
}
void EnKakasi_SetupSongTeach(EnKakasi* this, PlayState* play) {
this->actor.textId = 0x1646;
Message_StartTextbox(play, this->actor.textId, &this->actor);
this->picto.actor.textId = 0x1646;
Message_StartTextbox(play, this->picto.actor.textId, &this->picto.actor);
this->subCamId = SUB_CAM_ID_DONE;
this->subCamFov = 0.0f;
this->subCamFovNext = 60.0f;
@@ -575,9 +572,9 @@ void EnKakasi_OcarinaRemark(EnKakasi* this, PlayState* play) {
} else {
this->unkState1A8 = 1;
ActorCutscene_StartAndSetUnkLinkFields(this->actorCutscenes[0], &this->actor);
this->subCamId = ActorCutscene_GetCurrentSubCamId(this->actor.cutscene);
Math_Vec3f_Copy(&this->unk22C, &this->actor.home.pos);
ActorCutscene_StartAndSetUnkLinkFields(this->actorCutscenes[0], &this->picto.actor);
this->subCamId = ActorCutscene_GetCurrentSubCamId(this->picto.actor.cutscene);
Math_Vec3f_Copy(&this->unk22C, &this->picto.actor.home.pos);
this->actionFunc = EnKakasi_TeachingSong;
}
}
@@ -587,7 +584,7 @@ void EnKakasi_TeachingSong(EnKakasi* this, PlayState* play) {
Vec3f tempVec;
EnKakasi_CheckPlayerPosition(this, play);
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.home.rot.y, 1, 3000, 0);
Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.home.rot.y, 1, 3000, 0);
if (this->unkState1A8 == 0) {
if (ActorCutscene_GetCurrentIndex() == 0x7C) {
ActorCutscene_Stop(0x7C);
@@ -598,21 +595,21 @@ void EnKakasi_TeachingSong(EnKakasi* this, PlayState* play) {
ActorCutscene_SetIntentToPlay(this->actorCutscenes[0]);
return;
}
ActorCutscene_StartAndSetUnkLinkFields(this->actorCutscenes[0], &this->actor);
this->subCamId = ActorCutscene_GetCurrentSubCamId(this->actor.cutscene);
Math_Vec3f_Copy(&this->unk22C, &this->actor.home.pos);
ActorCutscene_StartAndSetUnkLinkFields(this->actorCutscenes[0], &this->picto.actor);
this->subCamId = ActorCutscene_GetCurrentSubCamId(this->picto.actor.cutscene);
Math_Vec3f_Copy(&this->unk22C, &this->picto.actor.home.pos);
this->unkState1A8 = 1;
this->unkState1A8 = 1;
}
if (this->unkState1A8 == 1) {
this->unk22C.y = this->actor.home.pos.y + 50.0f;
this->unk22C.y = this->picto.actor.home.pos.y + 50.0f;
this->subCamEyeNext.x = D_80971DCC[this->unk190].x;
this->subCamEyeNext.y = D_80971DCC[this->unk190].y;
this->subCamEyeNext.z = D_80971DCC[this->unk190].z;
Math_Vec3f_Copy(&tempVec, &this->subCamEyeNext);
OLib_DbCameraVec3fSum(&this->actor.home, &tempVec, &this->subCamEyeNext, 1);
OLib_DbCameraVec3fSum(&this->picto.actor.home, &tempVec, &this->subCamEyeNext, 1);
Math_Vec3f_Copy(&this->subCamAtNext, &this->unk22C);
Math_Vec3f_Copy(&this->subCamEye, &this->subCamEyeNext);
Math_Vec3f_Copy(&this->subCamAt, &this->subCamAtNext);
@@ -623,11 +620,11 @@ void EnKakasi_TeachingSong(EnKakasi* this, PlayState* play) {
this->unk190 = 0;
this->unkCounter1A4 = 0;
ActorCutscene_Stop(this->actorCutscenes[0]);
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_YASE_DEAD);
Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_YASE_DEAD);
if (this) {}
this->unkState196 = 2;
this->subCamId = SUB_CAM_ID_DONE;
this->actor.textId = 0x1647;
this->picto.actor.textId = 0x1647;
this->unkState1A8 = 2;
this->talkState = TEXT_STATE_5;
EnKakasi_SetAnimation(this, ENKAKASI_ANIM_ARMS_CROSSED_ROCKING);
@@ -673,19 +670,19 @@ void EnKakasi_PostSongLearnDialogue(EnKakasi* this, PlayState* play) {
f32 tempAnimFrame = this->skelanime.curFrame;
Vec3f vec3fCopy;
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.home.rot.y, 1, 3000, 0);
Math_SmoothStepToS(&player->actor.shape.rot.y, this->actor.yawTowardsPlayer + 0x8000, 5, 1000, 0);
Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.home.rot.y, 1, 3000, 0);
Math_SmoothStepToS(&player->actor.shape.rot.y, this->picto.actor.yawTowardsPlayer + 0x8000, 5, 1000, 0);
if (this->unk190 == 0) {
func_801477B4(play);
func_800B7298(play, &this->actor, 0x56);
this->actor.textId = 0x1648;
Message_StartTextbox(play, (this->actor.textId), &this->actor);
func_800B7298(play, &this->picto.actor, 0x56);
this->picto.actor.textId = 0x1648;
Message_StartTextbox(play, (this->picto.actor.textId), &this->picto.actor);
this->unkState1A8 = 0;
this->unk190 = 1;
}
if (this->actor.textId == 0x1648 && this->animIndex == ENKAKASI_ANIM_HOPPING_REGULAR &&
if (this->picto.actor.textId == 0x1648 && this->animIndex == ENKAKASI_ANIM_HOPPING_REGULAR &&
this->animeFrameCount <= tempAnimFrame) {
this->unkCounter1A4++;
if (this->unkCounter1A4 >= 2) {
@@ -693,7 +690,7 @@ void EnKakasi_PostSongLearnDialogue(EnKakasi* this, PlayState* play) {
}
}
if (this->actor.textId == 0x164B && this->animIndex == ENKAKASI_ANIM_ARMS_CROSSED_ROCKING &&
if (this->picto.actor.textId == 0x164B && this->animIndex == ENKAKASI_ANIM_ARMS_CROSSED_ROCKING &&
this->animeFrameCount <= tempAnimFrame) {
this->unkCounter1A4++;
if (this->unkCounter1A4 >= 2) {
@@ -711,21 +708,21 @@ void EnKakasi_PostSongLearnDialogue(EnKakasi* this, PlayState* play) {
ActorCutscene_SetIntentToPlay(this->actorCutscenes[0]);
return;
}
Math_Vec3f_Copy(&this->unk22C, &this->actor.home.pos);
ActorCutscene_StartAndSetUnkLinkFields(this->actorCutscenes[0], &this->actor);
this->subCamId = ActorCutscene_GetCurrentSubCamId(this->actor.cutscene);
func_800B7298(play, &this->actor, 0x56);
Math_Vec3f_Copy(&this->unk22C, &this->picto.actor.home.pos);
ActorCutscene_StartAndSetUnkLinkFields(this->actorCutscenes[0], &this->picto.actor);
this->subCamId = ActorCutscene_GetCurrentSubCamId(this->picto.actor.cutscene);
func_800B7298(play, &this->picto.actor, 0x56);
this->unkState1A8 = 1;
}
if (this->subCamId != SUB_CAM_ID_DONE) {
this->unk22C.y = this->actor.home.pos.y + 50.0f;
this->unk22C.y = this->picto.actor.home.pos.y + 50.0f;
EnKakasi_CheckPlayerPosition(this, play);
this->subCamEyeNext.x = D_80971FA0[this->unk190].x;
this->subCamEyeNext.y = D_80971FA0[this->unk190].y;
this->subCamEyeNext.z = D_80971FA0[this->unk190].z;
Math_Vec3f_Copy(&vec3fCopy, &this->subCamEyeNext);
OLib_DbCameraVec3fSum(&this->actor.home, &vec3fCopy, &this->subCamEyeNext, 1);
OLib_DbCameraVec3fSum(&this->picto.actor.home, &vec3fCopy, &this->subCamEyeNext, 1);
this->subCamAtNext.x = D_80971FE8[this->unk190].x + this->unk22C.x;
this->subCamAtNext.y = D_80971FE8[this->unk190].y + this->unk22C.y;
this->subCamAtNext.z = D_80971FE8[this->unk190].z + this->unk22C.z;
@@ -746,26 +743,26 @@ void EnKakasi_PostSongLearnDialogue(EnKakasi* this, PlayState* play) {
this->unk190 = 5;
}
if (this->actor.textId == 0x1648) {
func_800B7298(play, &this->actor, 7);
this->actor.textId = 0x1649;
if (this->picto.actor.textId == 0x1648) {
func_800B7298(play, &this->picto.actor, 7);
this->picto.actor.textId = 0x1649;
if (this->animIndex != ENKAKASI_ANIM_ARMS_CROSSED_ROCKING) {
EnKakasi_SetAnimation(this, ENKAKASI_ANIM_ARMS_CROSSED_ROCKING);
}
} else if (this->actor.textId == 0x1649) {
this->actor.textId = 0x1660;
} else if (this->picto.actor.textId == 0x1649) {
this->picto.actor.textId = 0x1660;
this->talkState = TEXT_STATE_CHOICE;
} else if (this->actor.textId == 0x164A) {
this->actor.textId = 0x164B;
} else if (this->picto.actor.textId == 0x164A) {
this->picto.actor.textId = 0x164B;
} else if (this->actor.textId == 0x164B) {
this->actor.textId = 0x164C;
} else if (this->picto.actor.textId == 0x164B) {
this->picto.actor.textId = 0x164C;
EnKakasi_SetAnimation(this, ENKAKASI_ANIM_TWIRL);
} else {
if (this->actor.textId == 0x164C || this->actor.textId == 0x1661) {
if (this->picto.actor.textId == 0x164C || this->picto.actor.textId == 0x1661) {
EnKakasi_SetupDigAway(this);
return;
}
@@ -774,14 +771,14 @@ void EnKakasi_PostSongLearnDialogue(EnKakasi* this, PlayState* play) {
} else {
this->talkState = TEXT_STATE_5;
if (play->msgCtx.choiceIndex == 1) {
func_8019F208(); // play 0x4808 sfx (decide) and calls func_801A75E8
this->actor.textId = 0x164A;
func_8019F208(); // play 0x4808 sfx (decide) and calls Audio_StopSfxById
this->picto.actor.textId = 0x164A;
} else {
func_8019F230(); // play 0x480A sfx (cancel) and calls func_801A75E8
this->actor.textId = 0x1661;
func_8019F230(); // play 0x480A sfx (cancel) and calls Audio_StopSfxById
this->picto.actor.textId = 0x1661;
}
}
func_80151938(play, this->actor.textId);
func_80151938(play, this->picto.actor.textId);
}
}
@@ -798,8 +795,8 @@ void EnKakasi_DancingRemark(EnKakasi* this, PlayState* play) {
} else if (ActorCutscene_GetCanPlayNext(this->actorCutscenes[0]) == 0) {
ActorCutscene_SetIntentToPlay(this->actorCutscenes[0]);
} else {
ActorCutscene_StartAndSetUnkLinkFields(this->actorCutscenes[0], &this->actor);
this->subCamId = ActorCutscene_GetCurrentSubCamId(this->actor.cutscene);
ActorCutscene_StartAndSetUnkLinkFields(this->actorCutscenes[0], &this->picto.actor);
this->subCamId = ActorCutscene_GetCurrentSubCamId(this->picto.actor.cutscene);
if (currentDay == 3 && gSaveContext.save.isNight) {
EnKakasi_SetupDigAway(this);
} else {
@@ -815,7 +812,7 @@ void EnKakasi_SetupDanceNightAway(EnKakasi* this) {
this->subCamFov = 0.0f;
this->subCamFovNext = 60.0f;
EnKakasi_SetAnimation(this, ENKAKASI_ANIM_TWIRL);
Math_Vec3f_Copy(&this->unk22C, &this->actor.home.pos);
Math_Vec3f_Copy(&this->unk22C, &this->picto.actor.home.pos);
func_8016566C(0xB4);
this->actionFunc = EnKakasi_DancingNightAway;
}
@@ -827,14 +824,14 @@ void EnKakasi_DancingNightAway(EnKakasi* this, PlayState* play) {
currentFrame = this->skelanime.curFrame;
EnKakasi_CheckPlayerPosition(this, play);
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.home.rot.y, 1, 3000, 0);
this->unk22C.y = this->actor.home.pos.y + 50.0f;
Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.home.rot.y, 1, 3000, 0);
this->unk22C.y = this->picto.actor.home.pos.y + 50.0f;
this->subCamEyeNext.x = D_80971E38[this->unk190].x;
this->subCamEyeNext.y = D_80971E38[this->unk190].y;
this->subCamEyeNext.z = D_80971E38[this->unk190].z;
Math_Vec3f_Copy(&localVec3f, &this->subCamEyeNext);
OLib_DbCameraVec3fSum(&this->actor.home, &localVec3f, &this->subCamEyeNext, 1);
OLib_DbCameraVec3fSum(&this->picto.actor.home, &localVec3f, &this->subCamEyeNext, 1);
if (1) {}
this->subCamAtNext.x = D_80971EEC[this->unk190].x + this->unk22C.x;
@@ -845,7 +842,7 @@ void EnKakasi_DancingNightAway(EnKakasi* this, PlayState* play) {
Math_Vec3f_Copy(&this->subCamAt, &this->subCamAtNext);
}
if (this->unk190 >= 7 && this->unk190 != 0xE) {
this->actor.shape.rot.y += 0x800;
this->picto.actor.shape.rot.y += 0x800;
}
func_8096FAAC(this, play);
@@ -919,7 +916,7 @@ void EnKakasi_DancingNightAway(EnKakasi* this, PlayState* play) {
this->unk190++;
this->unk204 = 0xA;
if (this->unk190 == 0xE) {
func_800B7298(play, &this->actor, 0x49);
func_800B7298(play, &this->picto.actor, 0x49);
func_80165690();
this->unk204 = 0x14;
}
@@ -927,8 +924,8 @@ void EnKakasi_DancingNightAway(EnKakasi* this, PlayState* play) {
return;
case 14:
// goes off once for some camera changes,
// otherwise its the end when camera is back to normal and link is confused
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 5, 1000, 0);
// otherwise it's the end when camera is back to normal and Player is confused
Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 5, 1000, 0);
if (this->unk204 == 0) {
player = GET_PLAYER(play);
@@ -963,7 +960,7 @@ void EnKakasi_SetupDigAway(EnKakasi* this) {
this->unkCounter1A4 = 0;
this->subCamFovNext = 60.0f;
this->subCamFov = 60.0f;
Math_Vec3f_Copy(&this->unk22C, &this->actor.home.pos);
Math_Vec3f_Copy(&this->unk22C, &this->picto.actor.home.pos);
this->unkState196 = 4;
this->actionFunc = EnKakasi_DiggingAway;
}
@@ -973,13 +970,13 @@ void EnKakasi_DiggingAway(EnKakasi* this, PlayState* play) {
Vec3f tempWorldPos;
if (this->subCamId != SUB_CAM_ID_DONE) {
this->unk22C.y = this->actor.home.pos.y + 50.0f;
this->unk22C.y = this->picto.actor.home.pos.y + 50.0f;
this->subCamEyeNext.x = D_80972030.x;
this->subCamEyeNext.y = D_80972030.y;
this->subCamEyeNext.z = D_80972030.z;
Math_Vec3f_Copy(&tempunk238, &this->subCamEyeNext);
OLib_DbCameraVec3fSum(&this->actor.home, &tempunk238, &this->subCamEyeNext, 1);
OLib_DbCameraVec3fSum(&this->picto.actor.home, &tempunk238, &this->subCamEyeNext, 1);
this->subCamAtNext.x = ((f32)D_8097203C.x) + this->unk22C.x; // cast req
this->subCamAtNext.y = ((f32)D_8097203C.y) + this->unk22C.y;
this->subCamAtNext.z = ((f32)D_8097203C.z) + this->unk22C.z;
@@ -993,11 +990,11 @@ void EnKakasi_DiggingAway(EnKakasi* this, PlayState* play) {
return;
}
this->actor.shape.rot.y += 0x3000;
this->picto.actor.shape.rot.y += 0x3000;
Math_SmoothStepToS(&this->unk190, 500, 5, 50, 0);
if ((play->gameplayFrames % 4) == 0) {
Math_Vec3f_Copy(&tempWorldPos, &this->actor.world.pos);
tempWorldPos.y = this->actor.floorHeight;
Math_Vec3f_Copy(&tempWorldPos, &this->picto.actor.world.pos);
tempWorldPos.y = this->picto.actor.floorHeight;
tempWorldPos.x += randPlusMinusPoint5Scaled(2.0f);
tempWorldPos.z += randPlusMinusPoint5Scaled(2.0f);
@@ -1006,16 +1003,16 @@ void EnKakasi_DiggingAway(EnKakasi* this, PlayState* play) {
SoundSource_PlaySfxAtFixedWorldPos(play, &tempWorldPos, 0x32, NA_SE_EV_BOMB_DROP_WATER);
} else {
Actor_SpawnFloorDustRing(play, &this->actor, &this->actor.world.pos, this->actor.shape.shadowScale - 20.0f,
5, 4.0f, 200, 10, 1);
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_AKINDONUTS_HIDE);
Actor_SpawnFloorDustRing(play, &this->picto.actor, &this->picto.actor.world.pos,
this->picto.actor.shape.shadowScale - 20.0f, 5, 4.0f, 200, 10, 1);
Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_AKINDONUTS_HIDE);
}
}
Math_ApproachF(&this->actor.shape.yOffset, -6000.0f, 0.5f, 200.0f);
if (fabsf(this->actor.shape.yOffset + 6000.0f) < 10.0f) {
Math_ApproachF(&this->picto.actor.shape.yOffset, -6000.0f, 0.5f, 200.0f);
if (fabsf(this->picto.actor.shape.yOffset + 6000.0f) < 10.0f) {
gSaveContext.save.weekEventReg[79] |= 8;
func_800B7298(play, &this->actor, 6);
func_800B7298(play, &this->picto.actor, 6);
ActorCutscene_Stop(this->actorCutscenes[0]);
this->aboveGroundStatus = ENKAKASI_ABOVE_GROUND_TYPE;
this->songSummonDist = 80.0f;
@@ -1024,17 +1021,17 @@ void EnKakasi_DiggingAway(EnKakasi* this, PlayState* play) {
}
void EnKakasi_SetupIdleUnderground(EnKakasi* this) {
this->actor.shape.yOffset = -7000.0;
this->actor.draw = NULL;
this->actor.flags |= ACTOR_FLAG_8000000;
this->picto.actor.shape.yOffset = -7000.0;
this->picto.actor.draw = NULL;
this->picto.actor.flags |= ACTOR_FLAG_8000000;
this->unkState196 = 5;
this->actionFunc = EnKakasi_IdleUnderground;
}
void EnKakasi_IdleUnderground(EnKakasi* this, PlayState* play) {
if ((gSaveContext.save.weekEventReg[79] & 8) && this->actor.xzDistToPlayer < this->songSummonDist &&
if ((gSaveContext.save.weekEventReg[79] & 8) && this->picto.actor.xzDistToPlayer < this->songSummonDist &&
(BREG(1) != 0 || play->msgCtx.ocarinaMode == 0xD)) {
this->actor.flags &= ~ACTOR_FLAG_8000000;
this->picto.actor.flags &= ~ACTOR_FLAG_8000000;
play->msgCtx.ocarinaMode = 4;
this->actionFunc = EnKakasi_SetupRiseOutOfGround;
}
@@ -1056,27 +1053,27 @@ void EnKakasi_SetupRiseOutOfGround(EnKakasi* this, PlayState* play) {
ActorCutscene_SetIntentToPlay(this->actorCutscenes[cutsceneIndex]);
} else {
ActorCutscene_StartAndSetUnkLinkFields(this->actorCutscenes[cutsceneIndex], &this->actor);
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_AKINDONUTS_HIDE);
this->actor.draw = EnKakasi_Draw;
ActorCutscene_StartAndSetUnkLinkFields(this->actorCutscenes[cutsceneIndex], &this->picto.actor);
Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_AKINDONUTS_HIDE);
this->picto.actor.draw = EnKakasi_Draw;
this->unkState196 = 6;
this->actionFunc = EnKakasi_RisingOutOfGround;
}
}
void EnKakasi_RisingOutOfGround(EnKakasi* this, PlayState* play) {
this->actor.shape.rot.y += 0x3000;
this->picto.actor.shape.rot.y += 0x3000;
if (this->animIndex != ENKAKASI_ANIM_SIDEWAYS_SHAKING) {
EnKakasi_SetAnimation(this, ENKAKASI_ANIM_SIDEWAYS_SHAKING);
}
if (this->actor.shape.yOffset < -10.0f) {
if (this->picto.actor.shape.yOffset < -10.0f) {
if ((play->gameplayFrames % 8) == 0) {
Actor_SpawnFloorDustRing(play, &this->actor, &this->actor.world.pos, this->actor.shape.shadowScale - 20.0f,
10, 8.0f, 500, 10, 1);
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_AKINDONUTS_HIDE);
Actor_SpawnFloorDustRing(play, &this->picto.actor, &this->picto.actor.world.pos,
this->picto.actor.shape.shadowScale - 20.0f, 10, 8.0f, 500, 10, 1);
Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_AKINDONUTS_HIDE);
}
Math_ApproachF(&this->actor.shape.yOffset, 0.0f, 0.5f, 200.0f);
Math_ApproachF(&this->picto.actor.shape.yOffset, 0.0f, 0.5f, 200.0f);
} else {
EnKakasi_SetupIdleRisen(this);
}
@@ -1084,23 +1081,23 @@ void EnKakasi_RisingOutOfGround(EnKakasi* this, PlayState* play) {
void EnKakasi_SetupIdleRisen(EnKakasi* this) {
// text: great to see you again
this->actor.textId = 0x164D;
this->picto.actor.textId = 0x164D;
this->unkState196 = 7;
this->actionFunc = EnKakasi_IdleRisen;
this->actor.shape.yOffset = 0.0f;
this->picto.actor.shape.yOffset = 0.0f;
}
void EnKakasi_IdleRisen(EnKakasi* this, PlayState* play) {
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 5, 1000, 0);
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 5, 1000, 0);
if (Actor_ProcessTalkRequest(&this->picto.actor, &play->state)) {
this->actionFunc = EnKakasi_RisenDialogue;
} else {
func_800B8614(&this->actor, play, 70.0f);
func_800B8614(&this->picto.actor, play, 70.0f);
}
}
void EnKakasi_RisenDialogue(EnKakasi* this, PlayState* play) {
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 5, 1000, 0);
Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 5, 1000, 0);
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
func_801477B4(play);
@@ -1113,33 +1110,33 @@ void EnKakasi_Update(Actor* thisx, PlayState* play) {
s32 pad;
SkelAnime_Update(&this->skelanime);
if (this->actor.draw != NULL) {
if (this->picto.actor.draw != NULL) {
EnKakasi_CheckAnimationSfx(this);
}
this->actor.world.rot.y = this->actor.shape.rot.y;
this->picto.actor.world.rot.y = this->picto.actor.shape.rot.y;
DECR(this->postTeachTimer);
DECR(this->unk204);
if (this->unkState196 != 5) {
if (this->unk1BC.x != 0.0f || this->unk1BC.z != 0.0f) {
Math_Vec3f_Copy(&this->actor.focus.pos, &this->unk1BC);
this->actor.focus.pos.y += 10.0f;
Math_Vec3f_Copy(&this->picto.actor.focus.pos, &this->unk1BC);
this->picto.actor.focus.pos.y += 10.0f;
if (this->subCamId == CAM_ID_MAIN) {
Math_Vec3s_Copy(&this->actor.focus.rot, &this->actor.world.rot);
Math_Vec3s_Copy(&this->picto.actor.focus.rot, &this->picto.actor.world.rot);
} else {
Math_Vec3s_Copy(&this->actor.focus.rot, &this->actor.home.rot);
Math_Vec3s_Copy(&this->picto.actor.focus.rot, &this->picto.actor.home.rot);
}
}
} else {
Actor_SetFocus(&this->actor, this->unkHeight);
Actor_SetFocus(&this->picto.actor, this->unkHeight);
}
this->actionFunc(this, play);
Actor_MoveWithGravity(&this->actor);
Actor_UpdateBgCheckInfo(play, &this->actor, 50.0f, 50.0f, 100.0f, 0x1C);
if (this->actor.draw != NULL) {
Collider_UpdateCylinder(&this->actor, &this->collider);
Actor_MoveWithGravity(&this->picto.actor);
Actor_UpdateBgCheckInfo(play, &this->picto.actor, 50.0f, 50.0f, 100.0f, 0x1C);
if (this->picto.actor.draw != NULL) {
Collider_UpdateCylinder(&this->picto.actor, &this->collider);
CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
}
@@ -1157,5 +1154,5 @@ void EnKakasi_Draw(Actor* thisx, PlayState* play) {
EnKakasi* this = THIS;
func_8012C28C(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelanime.skeleton, this->skelanime.jointTable, this->skelanime.dListCount, NULL,
EnKakasi_PostLimbDraw, &this->actor);
EnKakasi_PostLimbDraw, &this->picto.actor);
}
@@ -2,15 +2,14 @@
#define Z_EN_KAKASI_H
#include "global.h"
#include "z64snap.h"
struct EnKakasi;
typedef void (*EnKakasiActionFunc)(struct EnKakasi*, PlayState*);
typedef void (*EnKakasiUnkFunc)(PlayState*, struct EnKakasi*);
typedef struct EnKakasi {
/* 0x000 */ Actor actor;
/* 0x144 */ EnKakasiUnkFunc unkFunc; // used for one z_snap calling function?
/* 0x000 */ PictoActor picto;
/* 0x148 */ EnKakasiActionFunc actionFunc;
/* 0x14C */ SkelAnime skelanime;
/* 0x190 */ s16 unk190; // camera index for song teaching angles?
+4 -4
View File
@@ -239,12 +239,12 @@ void func_80B40EE8(EnKgy* this, PlayState* play) {
}
if (this->unk_29C & 2) {
Vec3f sp38;
f32 sp34;
Vec3f projectedPos;
f32 invW;
f32 temp_f0;
Actor_GetProjectedPos(play, &this->unk_2B4, &sp38, &sp34);
temp_f0 = sp38.x * sp34;
Actor_GetProjectedPos(play, &this->unk_2B4, &projectedPos, &invW);
temp_f0 = projectedPos.x * invW;
if (this->unk_2E6 > 0) {
this->unk_2E6--;
}
+505 -39
View File
@@ -5,6 +5,7 @@
*/
#include "z_en_mkk.h"
#include "objects/object_mkk/object_mkk.h"
#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4)
@@ -22,8 +23,18 @@ void func_80A4E60C(EnMkk* this, PlayState* play);
void func_80A4E72C(EnMkk* this, PlayState* play);
void func_80A4EE48(EnMkk* this, PlayState* play);
void func_80A4EF74(EnMkk* this, PlayState* play);
void func_80A4E0CC(EnMkk* this);
void func_80A4E190(EnMkk* this);
void func_80A4E2B8(EnMkk* this);
void func_80A4E58C(EnMkk* this);
void func_80A4EDF0(EnMkk* this);
void func_80A4EEF4(EnMkk* this);
void func_80A4F16C(Actor* thisx, PlayState* play);
void func_80A4F4C8(Actor* thisx, PlayState* play);
void func_80A4E67C(EnMkk* this);
void func_80A4E84C(EnMkk* this);
void func_80A4EBBC(EnMkk* this, PlayState* play);
#if 0
const ActorInit En_Mkk_InitVars = {
ACTOR_EN_MKK,
ACTORCAT_ENEMY,
@@ -36,18 +47,36 @@ const ActorInit En_Mkk_InitVars = {
(ActorFunc)EnMkk_Draw,
};
// static ColliderSphereInit sSphereInit = {
static ColliderSphereInit D_80A4F720 = {
{ COLTYPE_HIT3, AT_NONE | AT_TYPE_ENEMY, AC_NONE | AC_TYPE_PLAYER, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_1, COLSHAPE_SPHERE, },
{ ELEMTYPE_UNK0, { 0xF7CFFFFF, 0x00, 0x04 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_ON | TOUCH_SFX_HARD, BUMP_ON, OCELEM_ON, },
static ColliderSphereInit sSphereInit = {
{
COLTYPE_HIT3,
AT_NONE | AT_TYPE_ENEMY,
AC_NONE | AC_TYPE_PLAYER,
OC1_ON | OC1_TYPE_ALL,
OC2_TYPE_1,
COLSHAPE_SPHERE,
},
{
ELEMTYPE_UNK0,
{ 0xF7CFFFFF, 0x00, 0x04 },
{ 0xF7CFFFFF, 0x00, 0x00 },
TOUCH_ON | TOUCH_SFX_HARD,
BUMP_ON,
OCELEM_ON,
},
{ 1, { { 0, 0, 0 }, 15 }, 100 },
};
// sColChkInfoInit
static CollisionCheckInfoInit D_80A4F74C = { 1, 15, 30, 10 };
typedef struct EnMkkDlists {
/* 0x00 */ Gfx* unk0;
/* 0x04 */ Gfx* unk4;
/* 0x08 */ Gfx* unk8;
/* 0x0C */ Gfx* unkC;
} EnMkkDlists; // size = 0x10
// static DamageTable sDamageTable = {
static DamageTable D_80A4F754 = {
static CollisionCheckInfoInit sColChkInfoInit = { 1, 15, 30, 10 };
static DamageTable sDamageTable = {
/* Deku Nut */ DMG_ENTRY(1, 0x0),
/* Deku Stick */ DMG_ENTRY(1, 0x0),
/* Horse trample */ DMG_ENTRY(1, 0x0),
@@ -82,62 +111,499 @@ static DamageTable D_80A4F754 = {
/* Powder Keg */ DMG_ENTRY(1, 0x0),
};
// static InitChainEntry sInitChain[] = {
static InitChainEntry D_80A4F774[] = {
static InitChainEntry sInitChain[] = {
ICHAIN_F32_DIV1000(gravity, -500, ICHAIN_CONTINUE),
ICHAIN_F32(terminalVelocity, -5, ICHAIN_CONTINUE),
ICHAIN_F32(targetArrowOffset, 3000, ICHAIN_STOP),
};
#endif
static Color_RGBA8 D_80A4F780 = { 250, 250, 250, 255 };
extern ColliderSphereInit D_80A4F720;
extern CollisionCheckInfoInit D_80A4F74C;
extern DamageTable D_80A4F754;
extern InitChainEntry D_80A4F774[];
static Color_RGBA8 D_80A4F784 = { 180, 180, 180, 255 };
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mkk/EnMkk_Init.s")
static Vec3f D_80A4F788 = { 0.0f, 0.45f, 0.0f };
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mkk/EnMkk_Destroy.s")
static Color_RGBA8 sEffPrimColors[] = { { 50, 50, 50, 255 }, { 255, 255, 255, 255 } };
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mkk/func_80A4E0CC.s")
static Color_RGBA8 sEffEnvColors[] = { { 200, 200, 200, 255 }, { 255, 255, 255, 255 } };
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mkk/func_80A4E100.s")
static EnMkkDlists sBoeDLists[] = {
{ object_mkk_DL_000030, object_mkk_DL_0000B0, object_mkk_DL_0000C8, object_mkk_DL_000140 },
{ object_mkk_DL_0001F0, object_mkk_DL_000278, object_mkk_DL_000290, object_mkk_DL_000310 },
};
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mkk/func_80A4E190.s")
static Color_RGBA8 D_80A4F7C4[] = {
{ 255, 255, 255, 255 }, { 128, 128, 128, 255 }, { 0, 0, 0, 255 },
{ 0, 0, 0, 255 }, { 128, 128, 128, 255 }, { 255, 255, 255, 255 },
};
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mkk/func_80A4E1F0.s")
void EnMkk_Init(Actor* thisx, PlayState* play) {
EnMkk* this = THIS;
s32 paramsFF00;
s32 params2;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mkk/func_80A4E22C.s")
Actor_ProcessInitChain(&this->actor, sInitChain);
Collider_InitAndSetSphere(play, &this->collider, &this->actor, &sSphereInit);
this->collider.dim.worldSphere.radius = sSphereInit.dim.modelSphere.radius;
CollisionCheck_SetInfo(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit);
ActorShape_Init(&this->actor.shape, 1000.0f, NULL, 0.0f);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mkk/func_80A4E2B8.s")
this->primColorSelect = 0;
this->unk_149 = 0;
this->unk_152 = (this->actor.shape.rot.x >= 0) ? this->actor.shape.rot.x : this->actor.shape.rot.x * -0x50;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mkk/func_80A4E2E8.s")
this->unk_14C = CLAMP(this->actor.shape.rot.z, 0, 16);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mkk/func_80A4E58C.s")
this->actor.shape.rot.z = 0;
this->actor.world.rot.z = 0;
this->actor.shape.rot.x = 0;
this->actor.world.rot.x = 0;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mkk/func_80A4E60C.s")
Math_Vec3f_Copy(&this->unk_154, &this->actor.world.pos);
Math_Vec3f_Copy(&this->unk_160, &this->actor.world.pos);
this->unk_14B = ENMKK_GET_4(thisx) ? 8 : 0;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mkk/func_80A4E67C.s")
paramsFF00 = ENMKK_GET_FF00(&this->actor);
params2 = ENMKK_GET_2(&this->actor);
this->actor.params &= 1;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mkk/func_80A4E72C.s")
if (this->actor.params == 1) {
this->actor.hintId = 0x3C;
} else {
this->actor.hintId = 0x2C;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mkk/func_80A4E84C.s")
if ((paramsFF00 == 0) || (paramsFF00 == 255)) {
func_80A4E0CC(this);
this->unk_178 = 30000.0f;
if (params2 > 0) {
this->unk_14B |= 4;
}
} else {
this->unk_178 = paramsFF00 * 40.0f * 0.1f;
func_80A4EDF0(this);
this->unk_14E = 0;
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mkk/func_80A4EBBC.s")
void EnMkk_Destroy(Actor* thisx, PlayState* play) {
EnMkk* this = THIS;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mkk/EnMkk_Update.s")
Collider_DestroySphere(play, &this->collider);
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mkk/func_80A4EDF0.s")
void func_80A4E0CC(EnMkk* this) {
this->alpha = 0;
this->unk_14B |= 3;
this->actor.flags &= ~ACTOR_FLAG_1;
this->actionFunc = func_80A4E100;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mkk/func_80A4EE48.s")
void func_80A4E100(EnMkk* this, PlayState* play) {
s32 newAlpha;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mkk/func_80A4EEF4.s")
if (this->unk_14B & 4) {
newAlpha = this->alpha + 15;
} else {
newAlpha = this->alpha + 5;
}
if (newAlpha >= 255) {
this->primColorSelect = 3;
this->collider.base.acFlags |= AC_ON;
this->alpha = 255;
this->actor.flags |= ACTOR_FLAG_1;
this->actor.shape.rot.y = this->actor.yawTowardsPlayer;
this->unk_14B &= ~4;
func_80A4E190(this);
} else {
this->alpha = newAlpha;
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mkk/func_80A4EF74.s")
void func_80A4E190(EnMkk* this) {
this->unk_14E = (s32)(Rand_ZeroOne() * 20.0f) + 10;
if (this->unk_149 != 0) {
this->unk_149--;
}
this->actionFunc = func_80A4E1F0;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mkk/func_80A4F16C.s")
void func_80A4E1F0(EnMkk* this, PlayState* play) {
this->unk_14E--;
if (this->unk_14E == 0) {
func_80A4E2B8(this);
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mkk/EnMkk_Draw.s")
void func_80A4E22C(EnMkk* this, PlayState* play) {
Vec3f pos;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mkk/func_80A4F4C8.s")
pos.x = this->actor.world.pos.x;
pos.y = this->actor.world.pos.y + 15.0f;
pos.z = this->actor.world.pos.z;
func_800B0DE0(play, &pos, &gZeroVec3f, &D_80A4F788, &D_80A4F780, &D_80A4F784, 350, 20);
}
void func_80A4E2B8(EnMkk* this) {
this->unk_14E = 30;
this->unk_150 = this->actor.shape.rot.y;
this->unk_14B &= ~1;
this->actionFunc = func_80A4E2E8;
}
void func_80A4E2E8(EnMkk* this, PlayState* play) {
Player* player = GET_PLAYER(play);
s32 sp20;
this->unk_14E--;
if ((this->actor.params == 1) && (this->actor.bgCheckFlags & 1) && (this->actor.speedXZ > 2.5f) &&
((play->gameplayFrames % 3) == 0)) {
func_80A4E22C(this, play);
}
if (this->unk_14E > 0) {
Math_StepToF(&this->actor.speedXZ, 5.0f, 0.7f);
sp20 = false;
} else {
sp20 = Math_StepToF(&this->actor.speedXZ, 0.0f, 0.7f);
}
if ((player->stateFlags3 & 0x100) || (Player_GetMask(play) == PLAYER_MASK_STONE)) {
Math_ScaledStepToS(&this->unk_150, Actor_YawToPoint(&this->actor, &this->actor.home.pos), 0x400);
} else if ((player->stateFlags2 & 0x80) || (player->actor.freezeTimer > 0)) {
Math_ScaledStepToS(&this->unk_150, this->actor.yawTowardsPlayer + 0x8000, 0x400);
} else {
Math_ScaledStepToS(&this->unk_150, this->actor.yawTowardsPlayer, 0x400);
}
this->actor.shape.rot.y =
(s32)(sin_rad(this->unk_14E * ((2 * M_PI) / 15)) * (614.4f * this->actor.speedXZ)) + this->unk_150;
func_800B9010(&this->actor, NA_SE_EN_KUROSUKE_MOVE - SFX_FLAG);
if (sp20) {
this->unk_14B &= ~2;
func_80A4E190(this);
} else if ((this->unk_149 == 0) && (!(player->stateFlags3 & 0x100)) &&
(Player_GetMask(play) != PLAYER_MASK_STONE) && (this->actor.bgCheckFlags & 1) &&
(Actor_IsFacingPlayer(&this->actor, 0x1800)) && (this->actor.xzDistToPlayer < 120.0f) &&
(fabsf(this->actor.playerHeightRel) < 100.0f)) {
func_80A4E58C(this);
}
}
void func_80A4E58C(EnMkk* this) {
this->unk_14B |= 1;
this->actor.speedXZ = 3.0f;
this->actor.velocity.y = 5.0f;
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KUROSUKE_ATTACK);
this->collider.base.atFlags |= AT_ON;
Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0x800);
this->actionFunc = func_80A4E60C;
}
void func_80A4E60C(EnMkk* this, PlayState* play) {
if (this->collider.base.atFlags & AT_HIT) {
this->collider.base.atFlags &= ~(AT_ON | AT_HIT);
}
if ((this->actor.velocity.y < 0.0f) && (this->actor.bgCheckFlags & 1)) {
this->unk_149 = 2;
this->collider.base.atFlags &= ~AT_ON;
func_80A4E2B8(this);
}
}
void func_80A4E67C(EnMkk* this) {
this->unk_14B |= 1;
this->actor.flags &= ~ACTOR_FLAG_1;
this->collider.base.acFlags &= ~AC_ON;
this->actor.flags |= ACTOR_FLAG_10;
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PO_DEAD);
this->alpha = 254;
func_800BE568(&this->actor, &this->collider);
this->actor.speedXZ = 7.0f;
this->actor.shape.rot.y = this->actor.world.rot.y;
this->actor.velocity.y = 5.0f;
this->actor.gravity = -1.3f;
this->actor.bgCheckFlags &= ~1;
this->actionFunc = func_80A4E72C;
}
void func_80A4E72C(EnMkk* this, PlayState* play) {
Vec3f temp;
if (this->actor.bgCheckFlags & 1) {
if (this->actor.velocity.y > -1.0f) {
temp.x = this->actor.world.pos.x;
temp.y = this->actor.world.pos.y + 15.0f;
temp.z = this->actor.world.pos.z;
EffectSsDeadDb_Spawn(play, &temp, &gZeroVec3f, &gZeroVec3f, &sEffPrimColors[this->actor.params],
&sEffEnvColors[this->actor.params], 0x46, 4, 0xC);
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_EXTINCT);
if (this->unk_14C != 0) {
Item_DropCollectibleRandom(play, &this->actor, &this->actor.world.pos, this->unk_14C * 0x10);
}
func_80A4EEF4(this);
} else {
this->actor.velocity.y *= -0.8f;
this->actor.bgCheckFlags &= ~1;
}
}
}
void func_80A4E84C(EnMkk* this) {
if (this->unk_14B & 3) {
Vec3f sp34;
f32 temp_fv0 = Math_Vec3f_DistXYZ(&this->actor.world.pos, &this->actor.prevPos);
Math_Vec3f_Copy(&sp34, &this->unk_154);
if (temp_fv0 < 0.001f) {
Math_Vec3f_Copy(&this->unk_154, &this->actor.prevPos);
} else {
temp_fv0 = 1.0f / temp_fv0;
this->unk_154.x =
((this->actor.prevPos.x - this->actor.world.pos.x) * temp_fv0 * 10.0f) + this->actor.world.pos.x;
this->unk_154.y =
((this->actor.prevPos.y - this->actor.world.pos.y) * temp_fv0 * 10.0f) + this->actor.world.pos.y;
this->unk_154.z =
((this->actor.prevPos.z - this->actor.world.pos.z) * temp_fv0 * 10.0f) + this->actor.world.pos.z;
}
temp_fv0 = Math_Vec3f_DistXYZ(&this->unk_154, &sp34);
if (temp_fv0 < 0.001f) {
Math_Vec3f_Copy(&this->unk_160, &sp34);
} else {
temp_fv0 = 1.0f / temp_fv0;
this->unk_160.x = ((sp34.x - this->unk_154.x) * temp_fv0 * 12.0f) + this->unk_154.x;
this->unk_160.y = ((sp34.y - this->unk_154.y) * temp_fv0 * 12.0f) + this->unk_154.y;
this->unk_160.z = ((sp34.z - this->unk_154.z) * temp_fv0 * 12.0f) + this->unk_154.z;
}
} else {
this->unk_160.y = this->unk_154.y;
this->unk_154.y = this->actor.world.pos.y;
this->unk_154.x = this->actor.world.pos.x -
10.0f * Math_SinS(this->actor.shape.rot.y +
(s32)(1228.8f * this->actor.speedXZ * sin_rad(this->unk_14E * (M_PI / 5))));
this->unk_154.z = this->actor.world.pos.z -
10.0f * Math_CosS(this->actor.shape.rot.y +
(s32)(1228.8f * this->actor.speedXZ * sin_rad(this->unk_14E * (M_PI / 5))));
this->unk_160.x = this->unk_154.x -
12.0f * Math_SinS(this->actor.shape.rot.y -
(s32)(1228.8f * this->actor.speedXZ * sin_rad(this->unk_14E * (M_PI / 5))));
this->unk_160.z = this->unk_154.z -
12.0f * Math_CosS(this->actor.shape.rot.y -
(s32)(1228.8f * this->actor.speedXZ * sin_rad(this->unk_14E * (M_PI / 5))));
}
}
void func_80A4EBBC(EnMkk* this, PlayState* play) {
if (this->collider.base.acFlags & AC_HIT) {
this->collider.base.acFlags &= ~AC_HIT;
Actor_SetDropFlag(&this->actor, &this->collider.info);
Enemy_StartFinishingBlow(play, &this->actor);
func_80A4E67C(this);
}
}
void EnMkk_Update(Actor* thisx, PlayState* play) {
s32 pad;
Player* player;
EnMkk* this = THIS;
if (this->primColorSelect > 0) {
this->primColorSelect--;
} else if ((Rand_ZeroOne() < 0.075f) && (this->actor.params != 1)) {
this->primColorSelect = 6;
}
func_80A4EBBC(this, play);
this->actionFunc(this, play);
this->actor.world.rot.y = this->actor.shape.rot.y;
Actor_MoveWithGravity(&this->actor);
Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 20.0f, 0x1D);
if (this->actor.params == 0) {
func_80A4E84C(this);
}
if (Actor_IsFacingPlayer(&this->actor, 0x3000)) {
player = GET_PLAYER(play);
this->actor.shape.rot.x = Actor_PitchToPoint(&this->actor, &player->actor.focus.pos);
this->actor.shape.rot.x = CLAMP(this->actor.shape.rot.x, -0x1800, 0x1800);
}
Actor_SetFocus(&this->actor, 10.0f);
this->collider.dim.worldSphere.center.x = this->actor.focus.pos.x;
this->collider.dim.worldSphere.center.y = this->actor.focus.pos.y;
this->collider.dim.worldSphere.center.z = this->actor.focus.pos.z;
if (this->collider.base.atFlags & AT_ON) {
CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base);
}
if (this->collider.base.acFlags & AT_ON) {
CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
}
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
}
void func_80A4EDF0(EnMkk* this) {
this->alpha = 0;
this->unk_14B |= 3;
this->actor.flags &= ~ACTOR_FLAG_1;
this->actor.draw = NULL;
this->actor.update = func_80A4F16C;
this->actor.gravity = -0.5f;
this->unk_14E = this->unk_152;
this->actionFunc = func_80A4EE48;
}
void func_80A4EE48(EnMkk* this, PlayState* play) {
if (this->unk_14E > 0) {
this->unk_14E--;
if (this->unk_14E == 0) {
this->actor.flags &= ~ACTOR_FLAG_10;
}
} else if ((this->actor.xzDistToPlayer < this->unk_178) && (Player_GetMask(play) != PLAYER_MASK_STONE)) {
this->actor.update = EnMkk_Update;
this->actor.draw = EnMkk_Draw;
this->actor.flags &= ~ACTOR_FLAG_10;
func_80A4E0CC(this);
}
}
void func_80A4EEF4(EnMkk* this) {
Math_Vec3f_Copy(&this->unk_16C, &this->actor.world.pos);
Math_Vec3f_Copy(&this->unk_154, &this->actor.world.pos);
Math_Vec3f_Copy(&this->unk_160, &this->actor.world.pos);
Actor_SetScale(&this->actor, 0.005f);
this->actor.update = func_80A4F16C;
this->actor.draw = func_80A4F4C8;
this->actionFunc = func_80A4EF74;
}
void func_80A4EF74(EnMkk* this, PlayState* play) {
s32 newAlpha = this->alpha - 20;
if (newAlpha <= 0) {
if (this->unk_14B & 8) {
Actor_SetScale(&this->actor, 0.01f);
this->primColorSelect = 0;
this->unk_149 = 0;
Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.home.pos);
Math_Vec3f_Copy(&this->unk_154, &this->actor.world.pos);
Math_Vec3f_Copy(&this->unk_160, &this->actor.world.pos);
this->actor.speedXZ = 0.0f;
this->actor.velocity.y = 0.0f;
func_80A4EDF0(this);
} else {
Actor_MarkForDeath(&this->actor);
}
} else {
this->alpha = newAlpha;
this->actor.world.pos.x += 0.3f + (3.0f * Rand_ZeroOne());
this->actor.world.pos.y += 0.5f + (3.5f * Rand_ZeroOne());
this->unk_16C.x -= 0.3f + (3.0f * Rand_ZeroOne());
this->unk_16C.y += 0.5f + (3.5f * Rand_ZeroOne());
this->unk_154.z += 0.3f + (3.0f * Rand_ZeroOne());
this->unk_154.y += 0.5f + (3.5f * Rand_ZeroOne());
this->unk_160.z -= 0.3f + (3.0f * Rand_ZeroOne());
this->unk_160.y += 0.5f + (3.5f * Rand_ZeroOne());
}
}
void func_80A4F16C(Actor* thisx, PlayState* play) {
EnMkk* this = THIS;
this->actionFunc(this, play);
}
void EnMkk_Draw(Actor* thisx, PlayState* play) {
EnMkkDlists* dLists = &sBoeDLists[thisx->params];
Gfx* gfx;
Color_RGBA8* primColors;
EnMkk* this = THIS;
if (this->actor.projectedPos.z > 0.0f) {
MtxF* matrix;
OPEN_DISPS(play->state.gfxCtx);
if (this->alpha == 255) {
primColors = &D_80A4F7C4[this->primColorSelect];
gfx = POLY_OPA_DISP;
gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]);
gDPSetPrimColor(&gfx[1], 0, 0xFF, primColors->r, primColors->g, primColors->b, primColors->a);
gSPSegment(&gfx[2], 0x08, D_801AEFA0);
gSPMatrix(&gfx[3], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(&gfx[4], dLists->unkC);
POLY_OPA_DISP = &gfx[5];
}
gfx = POLY_XLU_DISP;
gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]);
gDPSetEnvColor(&gfx[1], 255, 255, 255, this->alpha);
gSPDisplayList(&gfx[2], dLists->unk0);
Matrix_ReplaceRotation(&play->billboardMtxF);
gSPMatrix(&gfx[3], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(&gfx[4], dLists->unk4);
if (thisx->params == 0) {
matrix = Matrix_GetCurrent();
matrix->mf[3][0] = this->unk_154.x;
matrix->mf[3][1] = this->unk_154.y + 8.5f;
matrix->mf[3][2] = this->unk_154.z;
Matrix_Scale(0.85f, 0.85f, 0.85f, MTXMODE_APPLY);
gSPMatrix(&gfx[5], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(&gfx[6], dLists->unk4);
matrix->mf[3][0] = this->unk_160.x;
matrix->mf[3][1] = this->unk_160.y + 7.2250004f;
matrix->mf[3][2] = this->unk_160.z;
Matrix_Scale(0.85f, 0.85f, 0.85f, MTXMODE_APPLY);
gSPMatrix(&gfx[7], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(&gfx[8], dLists->unk4);
gSPDisplayList(&gfx[9], dLists->unk8);
POLY_XLU_DISP = &gfx[10];
} else {
gSPDisplayList(&gfx[5], dLists->unk8);
POLY_XLU_DISP = &gfx[6];
}
}
CLOSE_DISPS(play->state.gfxCtx);
}
void func_80A4F4C8(Actor* thisx, PlayState* play) {
s32 pad;
Gfx* gfx;
MtxF* matrix;
EnMkkDlists* dLists = &sBoeDLists[thisx->params];
EnMkk* this = THIS;
OPEN_DISPS(play->state.gfxCtx);
gfx = POLY_XLU_DISP;
gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]);
gDPSetEnvColor(&gfx[1], 255, 255, 255, this->alpha);
gSPDisplayList(&gfx[2], dLists->unk0);
Matrix_ReplaceRotation(&play->billboardMtxF);
gSPMatrix(&gfx[3], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(&gfx[4], dLists->unk4);
matrix = Matrix_GetCurrent();
matrix->mf[3][0] = this->unk_154.x;
matrix->mf[3][1] = this->unk_154.y + 5.0f;
matrix->mf[3][2] = this->unk_154.z;
gSPMatrix(&gfx[5], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(&gfx[6], dLists->unk4);
matrix->mf[3][0] = this->unk_160.x;
matrix->mf[3][1] = this->unk_160.y + 5.0f;
matrix->mf[3][2] = this->unk_160.z;
gSPMatrix(&gfx[7], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(&gfx[8], dLists->unk4);
matrix->mf[3][0] = this->unk_16C.x;
matrix->mf[3][1] = this->unk_16C.y + 5.0f;
matrix->mf[3][2] = this->unk_16C.z;
gSPMatrix(&gfx[9], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(&gfx[10], dLists->unk4);
gSPDisplayList(&gfx[11], dLists->unk8);
POLY_XLU_DISP = &gfx[12];
CLOSE_DISPS(play->state.gfxCtx);
}
+17 -1
View File
@@ -3,6 +3,10 @@
#include "global.h"
#define ENMKK_GET_2(thisx) ((thisx)->params & 2)
#define ENMKK_GET_4(thisx) ((thisx)->params & 4)
#define ENMKK_GET_FF00(thisx) (((thisx)->params >> 8) & 0xFF)
struct EnMkk;
typedef void (*EnMkkActionFunc)(struct EnMkk*, PlayState*);
@@ -10,7 +14,19 @@ typedef void (*EnMkkActionFunc)(struct EnMkk*, PlayState*);
typedef struct EnMkk {
/* 0x000 */ Actor actor;
/* 0x144 */ EnMkkActionFunc actionFunc;
/* 0x148 */ char unk_148[0x8C];
/* 0x148 */ u8 primColorSelect;
/* 0x149 */ u8 unk_149;
/* 0x14A */ u8 alpha;
/* 0x14B */ u8 unk_14B;
/* 0x14C */ u8 unk_14C;
/* 0x14E */ s16 unk_14E;
/* 0x150 */ s16 unk_150;
/* 0x152 */ s16 unk_152;
/* 0x154 */ Vec3f unk_154;
/* 0x160 */ Vec3f unk_160;
/* 0x16C */ Vec3f unk_16C;
/* 0x178 */ f32 unk_178;
/* 0x17C */ ColliderSphere collider;
} EnMkk; // size = 0x1D4
#endif // Z_EN_MKK_H
+2 -2
View File
@@ -366,7 +366,7 @@ void func_80A6F9DC(EnMm3* this, PlayState* play) {
}
void func_80A6FBA0(EnMm3* this) {
func_801A5BD0(0x6F);
Audio_SetSfxBanksMute(0x6F);
func_801A0238(0, 5);
gSaveContext.save.weekEventReg[63] |= 1;
gSaveContext.save.weekEventReg[63] &= (u8)~2;
@@ -391,7 +391,7 @@ void func_80A6FBFC(EnMm3* this, PlayState* play) {
}
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
func_801A5BD0(0);
Audio_SetSfxBanksMute(0);
func_801A0238(0x7F, 5);
Message_StartTextbox(play, 0x2791, &this->actor);
this->unk_2B4 = 0x2791;
+1 -1
View File
@@ -73,7 +73,7 @@ extern UNK_TYPE D_060105DC;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB5A64.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB5B38.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/EnMnk_ValidatePictograph.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Mnk/func_80AB5B84.s")
+3 -2
View File
@@ -2,14 +2,15 @@
#define Z_EN_MNK_H
#include "global.h"
#include "z64snap.h"
struct EnMnk;
typedef void (*EnMnkActionFunc)(struct EnMnk*, PlayState*);
typedef struct EnMnk {
/* 0x000 */ Actor actor;
/* 0x144 */ char unk_144[0x2A4];
/* 0x000 */ PictoActor picto;
/* 0x148 */ char unk_148[0x2A0];
/* 0x3E8 */ EnMnkActionFunc actionFunc;
} EnMnk; // size = 0x3EC
+1 -1
View File
@@ -236,7 +236,7 @@ void EnNwc_CheckFound(EnNwc* this, PlayState* play) {
}
EnNwc_ChangeState(this, NWC_STATE_FOLLOWING);
func_801A0868(&D_801DB4A4, NA_SE_SY_CHICK_JOIN_CHIME, currentChickCount);
func_801A0868(&gSfxDefaultPos, NA_SE_SY_CHICK_JOIN_CHIME, currentChickCount);
}
}
+19 -15
View File
@@ -6,6 +6,7 @@
*/
#include "z_en_shn.h"
#include "z64snap.h"
#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8)
@@ -15,7 +16,7 @@ void EnShn_Init(Actor* thisx, PlayState* play);
void EnShn_Destroy(Actor* thisx, PlayState* play);
void EnShn_Update(Actor* thisx, PlayState* play);
void EnShn_Draw(Actor* thisx, PlayState* play);
void func_80AE69E8(EnShn* this, PlayState* play);
void func_80AE6A64(EnShn* this, PlayState* play);
// Could be something related to text/dialogue?
@@ -62,21 +63,18 @@ const ActorInit En_Shn_InitVars = {
(ActorFunc)EnShn_Draw,
};
static AnimationInfoS sAnimations[] = {
{ &gBurlyGuyHandsOnTableAnim, 1.0f, 0, -1, 0, 0 },
{ &gBurlyGuyHandsOnTableAnim, 1.0f, 0, -1, 0, -4 },
{ &gSwampGuideChinScratchAnim, 1.0f, 0, -1, 0, 0 },
{ &gSwampGuideChinScratchAnim, 1.0f, 0, -1, 0, -4 },
};
static s32 D_80AE7258[] = { 0, 2, 3, 8, 10, 1 };
void func_80AE6130(EnShn* this) {
this->skelAnime.playSpeed = this->playSpeed;
SkelAnime_Update(&this->skelAnime);
}
s32 func_80AE615C(EnShn* this, s32 arg1) {
static AnimationInfoS sAnimations[] = {
{ &gBurlyGuyHandsOnTableAnim, 1.0f, 0, -1, 0, 0 },
{ &gBurlyGuyHandsOnTableAnim, 1.0f, 0, -1, 0, -4 },
{ &gSwampGuideChinScratchAnim, 1.0f, 0, -1, 0, 0 },
{ &gSwampGuideChinScratchAnim, 1.0f, 0, -1, 0, -4 },
};
s32 phi_v0 = 0;
s32 phi_v1 = 0;
@@ -103,7 +101,7 @@ s32 EnShn_IsFacingPlayer(EnShn* this) {
}
if (phi_v1 == 0) {
this->unk_2EC ^= 1;
this->unk_2C8 = Rand_S16Offset(0x1E, 0x1E);
this->unk_2C8 = Rand_S16Offset(30, 30);
}
if (this->unk_2EC != 0) {
range = 120.0f;
@@ -228,6 +226,10 @@ s32 func_80AE65F4(EnShn* this, PlayState* play) {
}
s32 func_80AE6704(Actor* thisx, PlayState* play) {
static s32 sPictographFlags[] = {
PICTOGRAPH_0, PICTOGRAPH_MONKEY, PICTOGRAPH_BIG_OCTO,
PICTOGRAPH_TINGLE, PICTOGRAPH_DEKU_KING, PICTOGRAPH_IN_SWAMP,
};
EnShn* this = THIS;
s32 ret = 0;
@@ -240,12 +242,13 @@ s32 func_80AE6704(Actor* thisx, PlayState* play) {
this->unk_2C6++;
}
break;
case 1:
case 2:
case 3:
case 4:
case 5:
if (func_8013A4C4(D_80AE7258[this->unk_2C6])) {
if (Snap_CheckFlag(sPictographFlags[this->unk_2C6])) {
this->unk_2C6 = 6;
ret = 1;
REMOVE_QUEST_ITEM(QUEST_PICTOGRAPH);
@@ -253,6 +256,7 @@ s32 func_80AE6704(Actor* thisx, PlayState* play) {
this->unk_2C6++;
}
break;
case 6:
gSaveContext.save.weekEventReg[90] &= (u8)~0x40;
func_800B7298(play, &this->actor, 7);
@@ -284,12 +288,12 @@ UNK_TYPE* func_80AE6880(EnShn* this, PlayState* play) {
s32 func_80AE68F0(EnShn* this, PlayState* play) {
Player* player = GET_PLAYER(play);
s32 ret = 0;
s32 ret = false;
if (this->unk_1D8 & 7) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
this->unk_1D8 &= ~0x180;
if (player->exchangeItemId == EXCH_ITEM_13) {
if (player->exchangeItemId == EXCH_ITEM_PICTO_BOX) {
this->unk_1D8 |= 0x80;
this->unk_2E4 = player->exchangeItemId;
} else if (player->exchangeItemId != EXCH_ITEM_NONE) {
@@ -303,7 +307,7 @@ s32 func_80AE68F0(EnShn* this, PlayState* play) {
this->unk_1D8 |= 8;
}
this->actionFunc = func_80AE6A64;
ret = 1;
ret = true;
}
}
return ret;
@@ -593,9 +593,9 @@ void func_80A91760(EnTest6* this, PlayState* play) {
(CHECK_BTN_ALL(input->press.button, BTN_A) || CHECK_BTN_ALL(input->press.button, BTN_B))) {
this->unk_286 = 1;
if (ENTEST6_GET(&this->actor) == ENTEST6_25) {
func_801A75E8(NA_SE_SY_TIME_CONTROL_SLOW);
Audio_StopSfxById(NA_SE_SY_TIME_CONTROL_SLOW);
} else if (ENTEST6_GET(&this->actor) == ENTEST6_24) {
func_801A75E8(NA_SE_SY_TIME_CONTROL_NORMAL);
Audio_StopSfxById(NA_SE_SY_TIME_CONTROL_NORMAL);
}
}
+1 -1
View File
@@ -994,7 +994,7 @@ s32 func_80A87DC0(Actor* thisx, PlayState* play) {
break;
case 2:
func_801A75E8(NA_SE_EN_KOUME_MAGIC);
Audio_StopSfxById(NA_SE_EN_KOUME_MAGIC);
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KOUME_AWAY);
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KOUME_LAUGH);
func_80A86924(this, 13);
+3 -2
View File
@@ -5,6 +5,7 @@
*/
#include "z_en_tsn.h"
#include "z64snap.h"
#include "objects/object_tsn/object_tsn.h"
#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_2000000)
@@ -324,12 +325,12 @@ void func_80AE04FC(EnTsn* this, PlayState* play) {
this->actionFunc = func_80AE0704;
if (sp24 == 19) {
if (CHECK_QUEST_ITEM(QUEST_PICTOGRAPH)) {
if (func_8013A4C4(1 | 8)) {
if (Snap_CheckFlag(PICTOGRAPH_PIRATE_GOOD)) {
player->actor.textId = 0x107B;
return;
}
if (func_8013A4C4(1 | 2 | 8)) {
if (Snap_CheckFlag(PICTOGRAPH_PIRATE_TOO_FAR)) {
player->actor.textId = 0x10A9;
return;
}
+115 -14
View File
@@ -12,16 +12,17 @@
void EnViewer_Init(Actor* thisx, PlayState* play);
void EnViewer_Destroy(Actor* thisx, PlayState* play);
void EnViewer_Update(Actor* thisx, PlayState* play);
void EnViewer_Update(Actor* thisx, PlayState* play2);
void EnViewer_Draw(Actor* thisx, PlayState* play);
void func_8089F17C(EnViewer* this, PlayState* play);
void func_8089F218(EnViewer* this, PlayState* play);
void func_8089F2C4(EnViewer* this, PlayState* play);
void EnViewer_SetupAction(EnViewer* this, EnViewerActionFunc actionFunc);
static u8 D_8089F3E0 = 0;
static u8 D_8089F3E4 = 0;
#if 0
const ActorInit En_Viewer_InitVars = {
ACTOR_EN_VIEWER,
ACTORCAT_ITEMACTION,
@@ -34,24 +35,124 @@ const ActorInit En_Viewer_InitVars = {
(ActorFunc)EnViewer_Draw,
};
#endif
u32 D_8089F4D0;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Viewer/EnViewer_SetupAction.s")
void EnViewer_SetupAction(EnViewer* this, EnViewerActionFunc actionFunc) {
this->actionFunc = actionFunc;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Viewer/EnViewer_Init.s")
void EnViewer_Init(Actor* thisx, PlayState* play) {
EnViewer* this = THIS;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Viewer/EnViewer_Destroy.s")
this->unk_154 = D_8089F3E0;
D_8089F3E0++;
switch (ENVIEWER_GET_3(&this->actor)) {
case ENVIEWER_PARAMS_0:
this->unk_148 = ENVIEWER_GET_8000(&this->actor) * 40.0f;
this->unk_150 = (u8)ENVIEWER_GET_1FC(&this->actor) * 40.0f;
EnViewer_SetupAction(this, func_8089F17C);
break;
case ENVIEWER_PARAMS_1:
this->unk_148 = (u16)ENVIEWER_GET_FE00(&this->actor) * 40.0f;
this->unk_150 = (u8)ENVIEWER_GET_1FC(&this->actor) * 40.0f;
this->unk_14C = (u16)(this->actor.world.rot.y) * 40.0f;
EnViewer_SetupAction(this, func_8089F218);
break;
case ENVIEWER_PARAMS_2:
this->unk_148 = (u16)ENVIEWER_GET_FE00(&this->actor) * 40.0f;
this->unk_14C = (u8)ENVIEWER_GET_1FC(&this->actor) * 40.0f;
EnViewer_SetupAction(this, func_8089F2C4);
break;
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Viewer/func_8089F014.s")
void EnViewer_Destroy(Actor* thisx, PlayState* play) {
D_8089F3E0--;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Viewer/func_8089F0A0.s")
void func_8089F014(EnViewer* this, PlayState* play, f32 arg2) {
if (arg2 > 1.0f) {
arg2 = 1.0f;
} else if (arg2 < 0.0f) {
arg2 = 0.0f;
}
play->envCtx.lightSettingOverride = 0;
play->envCtx.unk_E0 = 2;
play->envCtx.unk_C1 = this->actor.world.rot.x;
play->envCtx.unk_C2 = this->actor.world.rot.z;
play->envCtx.lightBlend = arg2;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Viewer/func_8089F17C.s")
void func_8089F0A0(EnViewer* this, PlayState* play) {
Player* player = GET_PLAYER(play);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Viewer/func_8089F218.s")
D_8089F3E4++;
if ((D_8089F3E4 == D_8089F3E0) && (play->envCtx.lightSettingOverride != 255)) {
play->envCtx.lightSettingOverride = 255;
play->envCtx.unk_E0 = 0;
play->envCtx.lightBlend = 1.0f;
func_800FAAB4(
play, SurfaceType_GetLightSettingIndex(&play->colCtx, player->actor.floorPoly, player->actor.floorBgId));
play->envCtx.lightBlend = 1.0f;
play->envCtx.unk_C2 = play->envCtx.unk_C1;
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Viewer/func_8089F2C4.s")
void func_8089F17C(EnViewer* this, PlayState* play) {
Player* player = GET_PLAYER(play);
f32 xzDist = fabsf(this->actor.xzDistToPlayer);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Viewer/EnViewer_Update.s")
if ((((play->roomCtx.currRoom.num == this->actor.room) && (xzDist <= this->unk_148)) &&
(this->actor.playerHeightRel <= this->unk_150)) &&
(this->actor.world.pos.y <= player->actor.world.pos.y)) {
xzDist = this->actor.playerHeightRel / this->unk_150;
func_8089F014(this, play, xzDist);
} else {
func_8089F0A0(this, play);
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Viewer/EnViewer_Draw.s")
void func_8089F218(EnViewer* this, PlayState* play) {
Player* player = GET_PLAYER(play);
f32 xzDist = fabsf(this->actor.xzDistToPlayer);
f32 temp;
if ((play->roomCtx.currRoom.num == this->actor.room) && (xzDist <= this->unk_148) &&
(this->actor.playerHeightRel <= this->unk_150) && (this->actor.world.pos.y <= player->actor.world.pos.y)) {
temp = (xzDist - this->unk_14C) / (this->unk_148 - this->unk_14C);
func_8089F014(this, play, temp);
} else {
func_8089F0A0(this, play);
}
}
void func_8089F2C4(EnViewer* this, PlayState* play) {
Player* player = GET_PLAYER(play);
Vec3f sp20;
f32 temp;
Actor_OffsetOfPointInActorCoords(&this->actor, &sp20, &player->actor.world.pos);
if (this->unk_14C == 0.0f) {
this->unk_14C = 0.1f;
}
if ((play->roomCtx.currRoom.num == this->actor.room) && (sp20.x < fabsf(this->unk_148))) {
temp = sp20.z / this->unk_14C;
func_8089F014(this, play, temp);
} else {
func_8089F0A0(this, play);
}
}
void EnViewer_Update(Actor* thisx, PlayState* play2) {
PlayState* play = play2;
EnViewer* this = THIS;
if (D_8089F4D0 != play->state.frames) {
D_8089F4D0 = play->state.frames;
D_8089F3E4 = 0;
}
this->actionFunc(this, play);
}
void EnViewer_Draw(Actor* thisx, PlayState* play) {
}
@@ -3,6 +3,11 @@
#include "global.h"
#define ENVIEWER_GET_3(thisx) ((thisx)->params & 3)
#define ENVIEWER_GET_FE00(thisx) ((thisx)->params >> 9)
#define ENVIEWER_GET_1FC(thisx) (((thisx)->params >> 2) & 0x7F)
#define ENVIEWER_GET_8000(thisx) (((thisx)->params & 0xFFFF) >> 9)
struct EnViewer;
typedef void (*EnViewerActionFunc)(struct EnViewer*, PlayState*);
@@ -10,7 +15,16 @@ typedef void (*EnViewerActionFunc)(struct EnViewer*, PlayState*);
typedef struct EnViewer {
/* 0x000 */ Actor actor;
/* 0x144 */ EnViewerActionFunc actionFunc;
/* 0x148 */ char unk_148[0x10];
/* 0x148 */ f32 unk_148;
/* 0x14C */ f32 unk_14C;
/* 0x150 */ f32 unk_150;
/* 0x154 */ u8 unk_154;
} EnViewer; // size = 0x158
typedef enum {
/* 0x0 */ ENVIEWER_PARAMS_0,
/* 0x1 */ ENVIEWER_PARAMS_1,
/* 0x2 */ ENVIEWER_PARAMS_2
} EnViewerParams;
#endif // Z_EN_VIEWER_H
@@ -247,7 +247,7 @@ void EnWallmas_WaitToDrop(EnWallmas* this, PlayState* play) {
(player->actor.freezeTimer > 0) || !(player->actor.bgCheckFlags & 1) ||
((WALLMASTER_GET_TYPE(&this->actor) == WALLMASTER_TYPE_PROXIMITY) &&
(Math_Vec3f_DistXZ(&this->actor.home.pos, playerPos) > (120.f + this->detectionRadius)))) {
func_801A75E8(NA_SE_EN_FALL_AIM);
Audio_StopSfxById(NA_SE_EN_FALL_AIM);
this->timer = 130;
}
+6 -4
View File
@@ -5,6 +5,7 @@
*/
#include "z_en_zot.h"
#include "z64snap.h"
#include "objects/object_zo/object_zo.h"
#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10)
@@ -955,8 +956,9 @@ void func_80B985EC(EnZot* this, PlayState* play) {
itemActionParam = func_80123810(play);
if (itemActionParam > PLAYER_AP_NONE) {
func_801477B4(play);
if ((itemActionParam == PLAYER_AP_PICTO_BOX) && CHECK_QUEST_ITEM(QUEST_PICTOGRAPH) && func_8013A4C4(4)) {
if (func_8013A4C4(5) && func_8013A4C4(6)) {
if ((itemActionParam == PLAYER_AP_PICTO_BOX) && CHECK_QUEST_ITEM(QUEST_PICTOGRAPH) &&
Snap_CheckFlag(PICTOGRAPH_LULU_HEAD)) {
if (Snap_CheckFlag(PICTOGRAPH_LULU_RIGHT_ARM) && Snap_CheckFlag(PICTOGRAPH_LULU_LEFT_ARM)) {
player->actor.textId = 0x12AE;
} else {
player->actor.textId = 0x12AC;
@@ -1103,14 +1105,14 @@ void func_80B98AD0(EnZot* this, PlayState* play) {
func_801477B4(play);
this->actionFunc = func_80B98CA8;
gSaveContext.save.weekEventReg[41] &= (u8)~0x20;
AudioOcarina_SetInstrumentId(OCARINA_INSTRUMENT_OFF);
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
break;
case 0x12BA:
func_801477B4(play);
this->actionFunc = func_80B98CA8;
gSaveContext.save.weekEventReg[41] |= 0x20;
AudioOcarina_SetInstrumentId(OCARINA_INSTRUMENT_OFF);
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
break;
default:
+47 -44
View File
@@ -26,7 +26,7 @@ void func_80BD1C84(EnZov* this, PlayState* play);
void func_80BD1D94(EnZov* this, PlayState* play);
void func_80BD1DB8(EnZov* this, PlayState* play);
void func_80BD1F1C(EnZov* this, PlayState* play);
s32 func_80BD1FC8(PlayState* play, EnZov* this);
s32 EnZov_ValidatePictograph(PlayState* play, Actor* thisx);
const ActorInit En_Zov_InitVars = {
ACTOR_EN_ZOV,
@@ -82,10 +82,10 @@ static s8 D_80BD2770[] = {
void EnZov_Init(Actor* thisx, PlayState* play) {
EnZov* this = THIS;
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 20.0f);
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
Actor_SetScale(&this->actor, 0.01f);
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
ActorShape_Init(&this->picto.actor.shape, 0.0f, ActorShadow_DrawCircle, 20.0f);
this->picto.actor.colChkInfo.mass = MASS_IMMOVABLE;
Actor_SetScale(&this->picto.actor, 0.01f);
Collider_InitAndSetCylinder(play, &this->collider, &this->picto.actor, &sCylinderInit);
SkelAnime_InitFlex(play, &this->skelAnime, &object_zov_Skel_016258, &object_zov_Anim_00D3EC, this->jontTable,
this->morphTable, 23);
Animation_PlayLoop(&this->skelAnime, &object_zov_Anim_00D3EC);
@@ -93,35 +93,35 @@ void EnZov_Init(Actor* thisx, PlayState* play) {
this->unk_320 = 0;
this->unk_32C = -1;
this->unk_326 = -1;
this->unk_328[0] = this->actor.cutscene;
this->unk_328[0] = this->picto.actor.cutscene;
this->unk_328[1] = 0x7C;
this->unk_322 = 0;
this->actionFunc = func_80BD1C84;
this->unk_144 = func_80BD1FC8;
this->picto.validationFunc = EnZov_ValidatePictograph;
Math_Vec3f_Copy(&this->unk_2FC, &this->actor.world.pos);
Math_Vec3f_Copy(&this->unk_308, &this->actor.world.pos);
Math_Vec3f_Copy(&this->unk_314, &this->actor.world.pos);
Math_Vec3f_Copy(&this->unk_2FC, &this->picto.actor.world.pos);
Math_Vec3f_Copy(&this->unk_308, &this->picto.actor.world.pos);
Math_Vec3f_Copy(&this->unk_314, &this->picto.actor.world.pos);
switch (ENZOV_GET_F(&this->actor)) {
switch (ENZOV_GET_F(&this->picto.actor)) {
case ENZOV_F_1:
this->actionFunc = func_80BD1F1C;
func_80BD1570(this, 9, ANIMMODE_LOOP);
if (!(gSaveContext.save.weekEventReg[55] & 0x80)) {
Actor_MarkForDeath(&this->actor);
Actor_MarkForDeath(&this->picto.actor);
return;
}
break;
case ENZOV_F_2:
this->actionFunc = func_80BD1C38;
this->actor.shape.shadowDraw = NULL;
this->picto.actor.shape.shadowDraw = NULL;
break;
default:
this->unk_320 |= 2;
if ((gSaveContext.save.weekEventReg[55] & 0x80) || (gSaveContext.save.weekEventReg[53] & 0x20)) {
Actor_MarkForDeath(&this->actor);
Actor_MarkForDeath(&this->picto.actor);
}
break;
}
@@ -175,8 +175,8 @@ void func_80BD1570(EnZov* this, s16 index, u8 mode) {
}
s32 func_80BD15A4(EnZov* this, PlayState* play) {
if ((this->actor.xzDistToPlayer < 100.0f) && Player_IsFacingActor(&this->actor, 0x3000, play) &&
Actor_IsFacingPlayer(&this->actor, 0x3000)) {
if ((this->picto.actor.xzDistToPlayer < 100.0f) && Player_IsFacingActor(&this->picto.actor, 0x3000, play) &&
Actor_IsFacingPlayer(&this->picto.actor, 0x3000)) {
return true;
}
return false;
@@ -213,7 +213,7 @@ void func_80BD160C(EnZov* this, PlayState* play) {
this->unk_320 |= 1;
if (textId != 0) {
Message_StartTextbox(play, textId, &this->actor);
Message_StartTextbox(play, textId, &this->picto.actor);
}
}
@@ -314,9 +314,9 @@ void func_80BD19FC(EnZov* this, PlayState* play) {
this->unk_324--;
} else {
func_80BD13DC(this);
Message_StartTextbox(play, 0x1021, &this->actor);
Message_StartTextbox(play, 0x1021, &this->picto.actor);
((EnElf*)(GET_PLAYER(play)->tatlActor))->unk_264 |= 4;
Actor_ChangeFocus(&this->actor, play, GET_PLAYER(play)->tatlActor);
Actor_ChangeFocus(&this->picto.actor, play, GET_PLAYER(play)->tatlActor);
this->actionFunc = func_80BD187C;
}
} else if (Animation_OnFrame(&this->skelAnime, 10.0f)) {
@@ -367,18 +367,18 @@ void func_80BD1BF0(EnZov* this, PlayState* play) {
void func_80BD1C38(EnZov* this, PlayState* play) {
if (func_80BD1AE0(this, play)) {
Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, 504));
Cutscene_ActorTranslateAndYaw(&this->picto.actor, play, Cutscene_GetActorActionIndex(play, 504));
}
}
void func_80BD1C84(EnZov* this, PlayState* play) {
func_80BD1764(this);
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
if (Actor_ProcessTalkRequest(&this->picto.actor, &play->state)) {
this->actionFunc = func_80BD187C;
func_80BD160C(this, play);
} else if (func_80BD15A4(this, play)) {
func_800B8614(&this->actor, play, 120.0f);
func_800B8614(&this->picto.actor, play, 120.0f);
}
if (Cutscene_CheckActorAction(play, 0x1F8)) {
@@ -399,7 +399,7 @@ void func_80BD1D30(EnZov* this, PlayState* play) {
} else {
textId = 0x1031;
}
Message_StartTextbox(play, textId, &this->actor);
Message_StartTextbox(play, textId, &this->picto.actor);
}
void func_80BD1D94(EnZov* this, PlayState* play) {
@@ -408,8 +408,8 @@ void func_80BD1D94(EnZov* this, PlayState* play) {
void func_80BD1DB8(EnZov* this, PlayState* play) {
func_80BD1764(this);
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 2, 0x1000, 0x200);
this->actor.world.rot.y = this->actor.shape.rot.y;
Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 2, 0x1000, 0x200);
this->picto.actor.world.rot.y = this->picto.actor.shape.rot.y;
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
switch (play->msgCtx.currentTextId) {
@@ -423,7 +423,7 @@ void func_80BD1DB8(EnZov* this, PlayState* play) {
break;
case 0x1039:
play->nextEntranceIndex = play->setupExitList[ENZOV_GET_FE00(&this->actor)];
play->nextEntranceIndex = play->setupExitList[ENZOV_GET_FE00(&this->picto.actor)];
play->transitionType = TRANS_TYPE_05;
play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.save.weekEventReg[78] |= 1;
@@ -443,26 +443,29 @@ void func_80BD1DB8(EnZov* this, PlayState* play) {
void func_80BD1F1C(EnZov* this, PlayState* play) {
func_80BD1764(this);
if (this->actor.home.rot.y != this->actor.shape.rot.y) {
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.home.rot.y, 2, 0x1000, 0x200);
this->actor.world.rot.y = this->actor.shape.rot.y;
if (this->picto.actor.home.rot.y != this->picto.actor.shape.rot.y) {
Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.home.rot.y, 2, 0x1000, 0x200);
this->picto.actor.world.rot.y = this->picto.actor.shape.rot.y;
}
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
if (Actor_ProcessTalkRequest(&this->picto.actor, &play->state)) {
this->actionFunc = func_80BD1DB8;
func_80BD1D30(this, play);
} else if (func_80BD15A4(this, play)) {
func_800B8614(&this->actor, play, 120.0f);
func_800B8614(&this->picto.actor, play, 120.0f);
}
}
s32 func_80BD1FC8(PlayState* play, EnZov* this) {
s32 EnZov_ValidatePictograph(PlayState* play, Actor* thisx) {
s32 ret;
s32 pad;
EnZov* this = THIS;
ret = func_8013A530(play, &this->actor, 4, &this->actor.focus.pos, &this->actor.shape.rot, 10.0f, 300.0f, -1);
ret |= func_8013A530(play, &this->actor, 5, &this->unk_308, &this->actor.shape.rot, 50.0f, 160.0f, 0x3000);
ret |= func_8013A530(play, &this->actor, 6, &this->unk_314, &this->actor.shape.rot, 50.0f, 160.0f, 0x3000);
ret = Snap_ValidatePictograph(play, &this->picto.actor, PICTOGRAPH_LULU_HEAD, &this->picto.actor.focus.pos,
&this->picto.actor.shape.rot, 10.0f, 300.0f, -1);
ret |= Snap_ValidatePictograph(play, &this->picto.actor, PICTOGRAPH_LULU_RIGHT_ARM, &this->unk_308,
&this->picto.actor.shape.rot, 50.0f, 160.0f, 0x3000);
ret |= Snap_ValidatePictograph(play, &this->picto.actor, PICTOGRAPH_LULU_LEFT_ARM, &this->unk_314,
&this->picto.actor.shape.rot, 50.0f, 160.0f, 0x3000);
return ret;
}
@@ -470,10 +473,10 @@ void EnZov_Update(Actor* thisx, PlayState* play) {
s32 pad;
EnZov* this = THIS;
Actor_MoveWithGravity(&this->actor);
Collider_UpdateCylinder(&this->actor, &this->collider);
Actor_MoveWithGravity(&this->picto.actor);
Collider_UpdateCylinder(&this->picto.actor, &this->collider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 10.0f, 4);
Actor_UpdateBgCheckInfo(play, &this->picto.actor, 10.0f, 10.0f, 10.0f, 4);
this->actionFunc(this, play);
@@ -482,7 +485,7 @@ void EnZov_Update(Actor* thisx, PlayState* play) {
}
if ((this->unk_320 & 1) && func_80BD15A4(this, play)) {
Actor_TrackPlayer(play, &this->actor, &this->unk_2F0, &this->unk_2F6, this->actor.focus.pos);
Actor_TrackPlayer(play, &this->picto.actor, &this->unk_2F0, &this->unk_2F6, this->picto.actor.focus.pos);
} else {
if ((this->unk_320 & 0x10) && (this->unk_322 == 0)) {
Math_SmoothStepToS(&this->unk_2F0.x, -0x1B58, 6, 0x1838, 0x64);
@@ -508,7 +511,7 @@ void EnZov_Update(Actor* thisx, PlayState* play) {
ActorCutscene_Stop(0x7C);
ActorCutscene_SetIntentToPlay(this->unk_328[this->unk_32C]);
} else if (ActorCutscene_GetCanPlayNext(this->unk_328[this->unk_32C])) {
ActorCutscene_Start(this->unk_328[this->unk_32C], &this->actor);
ActorCutscene_Start(this->unk_328[this->unk_32C], &this->picto.actor);
} else {
ActorCutscene_SetIntentToPlay(this->unk_328[this->unk_32C]);
}
@@ -535,8 +538,8 @@ void EnZov_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
EnZov* this = THIS;
if (limbIndex == 12) {
Matrix_MultVec3f(&D_80BD2744, &this->actor.focus.pos);
Math_Vec3f_Copy(&this->unk_2FC, &this->actor.focus.pos);
Matrix_MultVec3f(&D_80BD2744, &this->picto.actor.focus.pos);
Math_Vec3f_Copy(&this->unk_2FC, &this->picto.actor.focus.pos);
this->unk_2FC.y += 10.0f;
}
@@ -629,5 +632,5 @@ void EnZov_Draw(Actor* thisx, PlayState* play) {
CLOSE_DISPS(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnZov_OverrideLimbDraw, EnZov_PostLimbDraw, &this->actor);
EnZov_OverrideLimbDraw, EnZov_PostLimbDraw, &this->picto.actor);
}
+2 -3
View File
@@ -2,11 +2,11 @@
#define Z_EN_ZOV_H
#include "global.h"
#include "z64snap.h"
struct EnZov;
typedef void (*EnZovActionFunc)(struct EnZov*, PlayState*);
typedef s32 (*EnZovUnkFunc)(PlayState*, struct EnZov*);
#define ENZOV_GET_F(thisx) ((thisx)->params & 0xF)
#define ENZOV_GET_FE00(thisx) (((thisx)->params & 0xFE00) >> 9)
@@ -15,8 +15,7 @@ typedef s32 (*EnZovUnkFunc)(PlayState*, struct EnZov*);
#define ENZOV_F_2 2
typedef struct EnZov {
/* 0x000 */ Actor actor;
/* 0x144 */ EnZovUnkFunc unk_144;
/* 0x000 */ PictoActor picto;
/* 0x148 */ Vec3s jontTable[23];
/* 0x1D2 */ Vec3s morphTable[23];
/* 0x25C */ SkelAnime skelAnime;
@@ -8,6 +8,7 @@
#include "z_obj_grass.h"
#include "overlays/actors/ovl_Obj_Grass_Carry/z_obj_grass_carry.h"
#include "objects/gameplay_keep/gameplay_keep.h"
#include "prevent_bss_reordering.h"
#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20)
@@ -362,7 +362,7 @@ void func_80BA2C94(ObjNozoki* this, PlayState* play) {
play->roomCtx.unk7A[0] = this->dyna.actor.velocity.x;
func_8019FAD8(&D_801DB4A4, NA_SE_EV_SECOM_CONVEYOR - SFX_FLAG, this->dyna.actor.speedXZ);
func_8019FAD8(&gSfxDefaultPos, NA_SE_EV_SECOM_CONVEYOR - SFX_FLAG, this->dyna.actor.speedXZ);
}
void func_80BA3044(ObjNozoki* this, PlayState* play) {
@@ -255,7 +255,7 @@ void ObjSyokudai_Update(Actor* thisx, PlayState* play2) {
}
}
Audio_PlaySfxGeneral(NA_SE_EV_FLAME_IGNITION, &thisx->projectedPos, 4, &D_801DB4B0, &D_801DB4B0,
&D_801DB4B8);
&gSfxDefaultReverb);
}
}
}
+2
View File
@@ -4,12 +4,14 @@ PROGRAMS := vtxdis
all: $(PROGRAMS)
$(MAKE) -C ZAPD
$(MAKE) -C fado
$(MAKE) -C buildtools
$(MAKE) -C z64compress
clean:
$(RM) $(PROGRAMS)
$(MAKE) -C ZAPD clean
$(MAKE) -C fado clean
$(MAKE) -C buildtools clean
$(MAKE) -C z64compress clean
+1
View File
@@ -3,4 +3,5 @@
elf2rom
makeromfs
mkldscript
reloc_prereq
yaz0
+21 -5
View File
@@ -1,16 +1,32 @@
CC := gcc
CFLAGS := -Wall -Wextra -pedantic -std=c99 -g -O2
PROGRAMS := yaz0 makeromfs elf2rom mkldscript
PROGRAMS := elf2rom makeromfs mkldscript reloc_prereq yaz0
ifeq ($(shell command -v clang >/dev/null 2>&1; echo $$?),0)
CC := clang
else
CC := gcc
endif
LLD ?= 0
ifeq ($(shell command -v ld.lld >/dev/null 2>&1; echo $$?),0)
LLD := 1
endif
ifneq ($(LLD),0)
CFLAGS += -fuse-ld=lld
endif
all: $(PROGRAMS)
clean:
$(RM) $(PROGRAMS)
mkldscript_SOURCES := mkldscript.c util.c
elf2rom_SOURCES := elf2rom.c elf32.c n64chksum.c util.c
yaz0_SOURCES := yaz0tool.c yaz0.c util.c
makeromfs_SOURCES := makeromfs.c n64chksum.c util.c
elf2rom_SOURCES := elf2rom.c elf32.c n64chksum.c util.c
makeromfs_SOURCES := makeromfs.c n64chksum.c util.c
mkldscript_SOURCES := mkldscript.c spec.c util.c
reloc_prereq_SOURCES := reloc_prereq.c spec.c util.c
yaz0_SOURCES := yaz0tool.c yaz0.c util.c
define COMPILE =
$(1): $($1_SOURCES)
+229 -418
View File
@@ -6,360 +6,51 @@
#include <stdlib.h>
#include <string.h>
#include "spec.h"
#include "util.h"
#define ARRAY_COUNT(arr) (sizeof(arr) / sizeof(arr[0]))
// Note: *SECTION ALIGNMENT* Object files built with a compiler such as GCC can, by default, use narrower
// alignment for sections size, compared to IDO padding sections to a 0x10-aligned size.
// To properly generate relocations relative to section starts, sections currently need to be aligned
// explicitly (to 0x10 currently, a narrower alignment might work), otherwise the linker does implicit alignment
// and inserts padding between the address indicated by section start symbols (such as *SegmentRoDataStart) and
// the actual aligned start of the section.
// With IDO, the padding of sections to an aligned size makes the section start at aligned addresses out of the box,
// so the explicit alignment has no further effect.
static FILE *fout;
struct Segment* g_segments;
int g_segmentsCount;
enum
{
STMT_address,
STMT_after,
STMT_align,
STMT_beginseg,
STMT_compress,
STMT_endseg,
STMT_entry,
STMT_flags,
STMT_include,
STMT_include_readonly,
STMT_name,
STMT_number,
STMT_romalign,
STMT_stack,
STMT_increment,
STMT_pad_text,
};
enum
{
FLAG_BOOT = (1 << 0),
FLAG_OBJECT = (1 << 1),
FLAG_RAW = (1 << 2),
FLAG_NOLOAD = (1 << 3),
};
struct Include
{
char *fpath;
int linkerPadding;
uint8_t dataReadOnly;
};
struct Segment
{
uint32_t fields;
char *name;
char *after;
uint32_t flags;
uint32_t address;
uint32_t stack;
uint32_t align;
uint32_t romalign;
uint32_t increment;
uint32_t entry;
uint32_t number;
struct Include *includes;
int includesCount;
bool compress;
};
static struct Segment *g_segments = NULL;
static int g_segmentsCount = 0;
static struct Segment *add_segment(void)
{
struct Segment *seg;
g_segmentsCount++;
g_segments = realloc(g_segments, g_segmentsCount * sizeof(*g_segments));
seg = &g_segments[g_segmentsCount - 1];
memset(seg, 0, sizeof(*seg));
seg->align = 16;
return seg;
}
static char *skip_whitespace(char *str)
{
while (isspace(*str))
str++;
return str;
}
// null terminates the current token and returns a pointer to the next token
static char *token_split(char *str)
{
while (!isspace(*str))
{
if (*str == 0)
return str; // end of string
str++;
}
*str = 0; // terminate token
str++;
return skip_whitespace(str);
}
// null terminates the current line and returns a pointer to the next line
static char *line_split(char *str)
{
while (*str != '\n')
{
if (*str == 0)
return str; // end of string
str++;
}
*str = 0; // terminate line
return str + 1;
}
static bool parse_number(const char *str, unsigned int *num)
{
char *endptr;
long int n = strtol(str, &endptr, 0);
*num = n;
return endptr > str;
}
static bool parse_flags(char *str, unsigned int *flags)
{
unsigned int f = 0;
while (str[0] != 0)
{
char *next = token_split(str);
if (strcmp(str, "BOOT") == 0)
f |= FLAG_BOOT;
else if (strcmp(str, "OBJECT") == 0)
f |= FLAG_OBJECT;
else if (strcmp(str, "RAW") == 0)
f |= FLAG_RAW;
else if (strcmp(str, "NOLOAD") == 0)
f |= FLAG_NOLOAD;
else
return false;
str = next;
}
*flags = f;
return true;
}
static bool parse_quoted_string(char *str, char **out)
{
if (*str != '"')
return false;
str++;
*out = str;
while (*str != '"')
{
if (*str == 0)
return false; // unterminated quote
str++;
}
*str = 0;
str++;
str = skip_whitespace(str);
if (*str != 0)
return false; // garbage after filename
return true;
}
static bool is_pow_of_2(unsigned int n)
{
return (n & (n - 1)) == 0;
}
static const char *const stmtNames[] =
{
[STMT_address] = "address",
[STMT_after] = "after",
[STMT_align] = "align",
[STMT_beginseg] = "beginseg",
[STMT_compress] = "compress",
[STMT_endseg] = "endseg",
[STMT_entry] = "entry",
[STMT_flags] = "flags",
[STMT_include] = "include",
[STMT_include_readonly] = "include_readonly",
[STMT_name] = "name",
[STMT_number] = "number",
[STMT_romalign] = "romalign",
[STMT_stack] = "stack",
[STMT_increment] = "increment",
[STMT_pad_text] = "pad_text",
};
static void parse_rom_spec(char *spec)
{
int lineNum = 1;
char *line = spec;
struct Segment *currSeg = NULL;
// iterate over lines
while (line[0] != 0)
{
char *nextLine = line_split(line);
if (line[0] != 0)
{
char *stmtName = skip_whitespace(line);
if (strlen(stmtName) == 0) // skip empty lines
goto no_stmt;
char *args = token_split(stmtName);
unsigned int stmt;
for (stmt = 0; stmt < ARRAY_COUNT(stmtNames); stmt++)
if (strcmp(stmtName, stmtNames[stmt]) == 0)
goto got_stmt;
util_fatal_error("line %i: unknown statement '%s'", lineNum, stmtName);
got_stmt:
if (currSeg != NULL)
{
// ensure no duplicates (except for 'include' or 'pad_text')
if (stmt != STMT_include && stmt != STMT_include_readonly && stmt != STMT_pad_text &&
(currSeg->fields & (1 << stmt)))
util_fatal_error("line %i: duplicate '%s' statement", lineNum, stmtName);
currSeg->fields |= 1 << stmt;
currSeg->compress = false;
// statements valid within a segment definition
switch (stmt)
{
case STMT_beginseg:
util_fatal_error("line %i: '%s' inside of a segment definition", lineNum, stmtName);
break;
case STMT_endseg:
// verify segment data
if (currSeg->name == NULL)
util_fatal_error("line %i: no name specified for segment", lineNum);
if (currSeg->includesCount == 0)
util_fatal_error("line %i: no includes specified for segment", lineNum);
currSeg = NULL;
break;
case STMT_name:
if (!parse_quoted_string(args, &currSeg->name))
util_fatal_error("line %i: invalid name", lineNum);
break;
case STMT_after:
if (!parse_quoted_string(args, &currSeg->after))
util_fatal_error("line %i: invalid name for 'after'", lineNum);
break;
case STMT_address:
if (!parse_number(args, &currSeg->address))
util_fatal_error("line %i: expected number after 'address'", lineNum);
break;
case STMT_number:
if (!parse_number(args, &currSeg->number))
util_fatal_error("line %i: expected number after 'number'", lineNum);
break;
case STMT_flags:
if (!parse_flags(args, &currSeg->flags))
util_fatal_error("line %i: invalid flags", lineNum);
break;
case STMT_align:
if (!parse_number(args, &currSeg->align))
util_fatal_error("line %i: expected number after 'align'", lineNum);
if (!is_pow_of_2(currSeg->align))
util_fatal_error("line %i: alignment is not a power of two", lineNum);
break;
case STMT_romalign:
if (!parse_number(args, &currSeg->romalign))
util_fatal_error("line %i: expected number after 'romalign'", lineNum);
if (!is_pow_of_2(currSeg->romalign))
util_fatal_error("line %i: alignment is not a power of two", lineNum);
break;
case STMT_include:
case STMT_include_readonly:
currSeg->includesCount++;
currSeg->includes = realloc(currSeg->includes, currSeg->includesCount * sizeof(*currSeg->includes));
if (!parse_quoted_string(args, &currSeg->includes[currSeg->includesCount - 1].fpath))
util_fatal_error("line %i: invalid filename", lineNum);
currSeg->includes[currSeg->includesCount - 1].linkerPadding = 0;
currSeg->includes[currSeg->includesCount - 1].dataReadOnly = (stmt == STMT_include_readonly);
break;
case STMT_increment:
if (!parse_number(args, &currSeg->increment))
util_fatal_error("line %i: expected number after 'increment'", lineNum);
break;
case STMT_compress:
currSeg->compress = true;
break;
case STMT_pad_text:
currSeg->includes[currSeg->includesCount - 1].linkerPadding += 0x10;
break;
default:
fprintf(stderr, "warning: '%s' is not implemented\n", stmtName);
break;
}
}
else
{
// commands valid outside a segment definition
switch (stmt)
{
case STMT_beginseg:
currSeg = add_segment();
break;
case STMT_endseg:
util_fatal_error("line %i: '%s' outside of a segment definition", lineNum, stmtName);
break;
default:
fprintf(stderr, "warning: '%s' is not implemented\n", stmtName);
break;
}
}
}
no_stmt:
line = nextLine;
lineNum++;
}
}
static void write_ld_script(void)
{
static void write_ld_script(FILE* fout) {
int i;
int j;
fputs("SECTIONS {\n"
fputs("OUTPUT_ARCH (mips)\n\n"
"SECTIONS {\n"
" _RomSize = 0;\n"
" _RomStart = _RomSize;\n\n",
fout);
for (i = 0; i < g_segmentsCount; i++)
{
const struct Segment *seg = &g_segments[i];
for (i = 0; i < g_segmentsCount; i++) {
const struct Segment* seg = &g_segments[i];
// align start of ROM segment
if (seg->fields & (1 << STMT_romalign))
fprintf(fout, " _RomSize = (_RomSize + %i) & ~ %i;\n", seg->romalign - 1, seg->romalign - 1);
else if (seg->fields & (1 << STMT_increment)) // align only start of ROM segment
else if (seg->fields & (1 << STMT_increment)) // align only start of ROM segment
fprintf(fout, " _RomSize = (_RomSize + %i) & ~ %i;\n", seg->increment - 1, seg->increment - 1);
// initialized data (.text, .data, .rodata, .sdata)
// Increment the start of the section
//if (seg->fields & (1 << STMT_increment))
//fprintf(fout, " . += 0x%08X;\n", seg->increment);
// if (seg->fields & (1 << STMT_increment))
// fprintf(fout, " . += 0x%08X;\n", seg->increment);
fprintf(fout, " _%sSegmentRomStartTemp = _RomSize;\n"
" _%sSegmentRomStart = _%sSegmentRomStartTemp;\n"
" ..%s ", seg->name, seg->name, seg->name, seg->name);
fprintf(fout,
" _%sSegmentRomStartTemp = _RomSize;\n"
" _%sSegmentRomStart = _%sSegmentRomStartTemp;\n"
" ..%s ",
seg->name, seg->name, seg->name, seg->name);
if (seg->fields & (1 << STMT_after))
fprintf(fout, "_%sSegmentEnd ", seg->after);
@@ -369,7 +60,8 @@ static void write_ld_script(void)
fprintf(fout, "0x%08X ", seg->address);
// (AT(_RomSize) isn't necessary, but adds useful "load address" lines to the map file)
fprintf(fout, ": AT(_RomSize)\n {\n"
fprintf(fout,
": AT(_RomSize)\n {\n"
" _%sSegmentStart = .;\n"
" . = ALIGN(0x10);\n"
" _%sSegmentTextStart = .;\n",
@@ -382,52 +74,85 @@ static void write_ld_script(void)
fprintf(fout, " %s (.text)\n", seg->includes[j].fpath);
if (seg->includes[j].linkerPadding != 0)
fprintf(fout, " . += 0x%X;\n", seg->includes[j].linkerPadding);
fprintf(fout, " . = ALIGN(0x10);\n");
}
fprintf(fout, " _%sSegmentTextEnd = .;\n", seg->name);
fprintf(fout, " _%sSegmentTextSize = ABSOLUTE( _%sSegmentTextEnd - _%sSegmentTextStart );\n", seg->name, seg->name, seg->name);
fprintf(fout, " _%sSegmentTextSize = ABSOLUTE( _%sSegmentTextEnd - _%sSegmentTextStart );\n", seg->name,
seg->name, seg->name);
fprintf(fout, " _%sSegmentDataStart = .;\n", seg->name);
for (j = 0; j < seg->includesCount; j++) {
if (!seg->includes[j].dataReadOnly)
fprintf(fout, " %s (.data)\n", seg->includes[j].fpath);
if (!seg->includes[j].dataWithRodata)
fprintf(fout,
" %s (.data)\n"
" . = ALIGN(0x10);\n",
seg->includes[j].fpath);
}
/*
for (j = 0; j < seg->includesCount; j++)
for (j = 0; j < seg->includesCount; j++)
fprintf(fout, " %s (.rodata)\n", seg->includes[j].fpath);
for (j = 0; j < seg->includesCount; j++)
for (j = 0; j < seg->includesCount; j++)
fprintf(fout, " %s (.sdata)\n", seg->includes[j].fpath);
*/
//fprintf(fout, " . = ALIGN(0x10);\n");
// fprintf(fout, " . = ALIGN(0x10);\n");
fprintf(fout, " _%sSegmentDataEnd = .;\n", seg->name);
fprintf(fout, " _%sSegmentDataSize = ABSOLUTE( _%sSegmentDataEnd - _%sSegmentDataStart );\n", seg->name, seg->name, seg->name);
fprintf(fout, " _%sSegmentDataSize = ABSOLUTE( _%sSegmentDataEnd - _%sSegmentDataStart );\n", seg->name,
seg->name, seg->name);
fprintf(fout, " _%sSegmentRoDataStart = .;\n", seg->name);
for (j = 0; j < seg->includesCount; j++) {
if (seg->includes[j].dataReadOnly)
fprintf(fout, " %s (.data)\n", seg->includes[j].fpath);
fprintf(fout, " %s (.rodata)\n", seg->includes[j].fpath);
}
if (seg->includes[j].dataWithRodata)
fprintf(fout,
" %s (.data)\n"
" . = ALIGN(0x10);\n",
seg->includes[j].fpath);
//fprintf(fout, " . = ALIGN(0x10);\n");
fprintf(fout,
" %s (.rodata)\n"
" . = ALIGN(0x10);\n",
seg->includes[j].fpath);
// Compilers other than IDO, such as GCC, produce different sections such as
// the ones named directly below. These sections do not contain values that
// need relocating, but we need to ensure that the base .rodata section
// always comes first. The reason this is important is due to relocs assuming
// the base of .rodata being the offset for the relocs and thus needs to remain
// the beginning of the entire rodata area in order to remain consistent.
// Inconsistencies will lead to various .rodata reloc crashes as a result of
// either missing relocs or wrong relocs.
fprintf(fout,
" %s (.rodata.str1.4)\n"
" . = ALIGN(0x10);\n",
seg->includes[j].fpath);
fprintf(fout,
" %s (.rodata.cst4)\n"
" . = ALIGN(0x10);\n",
seg->includes[j].fpath);
fprintf(fout,
" %s (.rodata.cst8)\n"
" . = ALIGN(0x10);\n",
seg->includes[j].fpath);
}
fprintf(fout, " _%sSegmentRoDataEnd = .;\n", seg->name);
fprintf(fout, " _%sSegmentRoDataSize = ABSOLUTE( _%sSegmentRoDataEnd - _%sSegmentRoDataStart );\n", seg->name, seg->name, seg->name);
fprintf(fout, " _%sSegmentRoDataSize = ABSOLUTE( _%sSegmentRoDataEnd - _%sSegmentRoDataStart );\n",
seg->name, seg->name, seg->name);
fprintf(fout, " _%sSegmentSDataStart = .;\n", seg->name);
for (j = 0; j < seg->includesCount; j++)
fprintf(fout, " %s (.sdata)\n", seg->includes[j].fpath);
fprintf(fout, " . = ALIGN(0x10);\n");
fprintf(fout,
" %s (.sdata)\n"
" . = ALIGN(0x10);\n",
seg->includes[j].fpath);
fprintf(fout, " _%sSegmentSDataEnd = .;\n", seg->name);
@@ -436,107 +161,193 @@ static void write_ld_script(void)
for (j = 0; j < seg->includesCount; j++)
fprintf(fout, " %s (.ovl)\n", seg->includes[j].fpath);
fprintf(fout, " . = ALIGN(0x10);\n");
fprintf(fout, " _%sSegmentOvlEnd = .;\n", seg->name);
//if (seg->fields & (1 << STMT_increment))
// fprintf(fout, " . += 0x%08X;\n", seg->increment);
if (seg->fields & (1 << STMT_increment))
fprintf(fout, " . += 0x%08X;\n", seg->increment);
fputs(" }\n", fout);
//fprintf(fout, " _RomSize += ( _%sSegmentDataEnd - _%sSegmentTextStart );\n", seg->name, seg->name);
fprintf(fout, " _RomSize += ( _%sSegmentOvlEnd - _%sSegmentTextStart );\n", seg->name, seg->name);
fprintf(fout, " _%sSegmentRomEndTemp = _RomSize;\n"
"_%sSegmentRomEnd = _%sSegmentRomEndTemp;\n\n",
seg->name, seg->name, seg->name);
fprintf(fout,
" _%sSegmentRomEndTemp = _RomSize;\n"
"_%sSegmentRomEnd = _%sSegmentRomEndTemp;\n\n",
seg->name, seg->name, seg->name);
// algn end of ROM segment
// align end of ROM segment
if (seg->fields & (1 << STMT_romalign))
fprintf(fout, " _RomSize = (_RomSize + %i) & ~ %i;\n", seg->romalign - 1, seg->romalign - 1);
// uninitialized data (.sbss, .scommon, .bss, COMMON)
fprintf(fout, " ..%s.bss ADDR(..%s) + SIZEOF(..%s) (NOLOAD) :\n"
/*" ..%s.bss :\n"*/
" {\n"
" . = ALIGN(0x10);\n"
" _%sSegmentBssStart = .;\n",
seg->name, seg->name, seg->name, seg->name);
fprintf(fout,
" ..%s.bss ADDR(..%s) + SIZEOF(..%s) (NOLOAD) :\n"
/*" ..%s.bss :\n"*/
" {\n"
" . = ALIGN(0x10);\n"
" _%sSegmentBssStart = .;\n",
seg->name, seg->name, seg->name, seg->name);
if (seg->fields & (1 << STMT_align))
fprintf(fout, " . = ALIGN(0x%X);\n", seg->align);
for (j = 0; j < seg->includesCount; j++)
fprintf(fout, " %s (.sbss)\n", seg->includes[j].fpath);
fprintf(fout,
" %s (.sbss)\n"
" . = ALIGN(0x10);\n",
seg->includes[j].fpath);
for (j = 0; j < seg->includesCount; j++)
fprintf(fout, " %s (.scommon)\n", seg->includes[j].fpath);
fprintf(fout,
" %s (.scommon)\n"
" . = ALIGN(0x10);\n",
seg->includes[j].fpath);
for (j = 0; j < seg->includesCount; j++)
fprintf(fout, " %s (.bss)\n", seg->includes[j].fpath);
fprintf(fout,
" %s (.bss)\n"
" . = ALIGN(0x10);\n",
seg->includes[j].fpath);
for (j = 0; j < seg->includesCount; j++)
fprintf(fout, " %s (COMMON)\n", seg->includes[j].fpath);
fprintf(fout, " . = ALIGN(0x10);\n"
" _%sSegmentBssEnd = .;\n"
" _%sSegmentEnd = .;\n"
" }\n"
" _%sSegmentBssSize = ABSOLUTE( _%sSegmentBssEnd - _%sSegmentBssStart );\n\n",
seg->name, seg->name, seg->name, seg->name, seg->name);
fprintf(fout,
" %s (COMMON)\n"
" . = ALIGN(0x10);\n",
seg->includes[j].fpath);
fprintf(fout,
" . = ALIGN(0x10);\n"
" _%sSegmentBssEnd = .;\n"
" _%sSegmentEnd = .;\n"
" }\n"
" _%sSegmentBssSize = ABSOLUTE( _%sSegmentBssEnd - _%sSegmentBssStart );\n\n",
seg->name, seg->name, seg->name, seg->name, seg->name);
// Increment the end of the segment
//if (seg->fields & (1 << STMT_increment))
// fprintf(fout, " . += 0x%08X;\n", seg->increment);
// if (seg->fields & (1 << STMT_increment))
// fprintf(fout, " . += 0x%08X;\n", seg->increment);
//fprintf(fout, " ..%s.ovl ADDR(..%s) + SIZEOF(..%s) :\n"
// /*" ..%s.bss :\n"*/
// " {\n",
// seg->name, seg->name, seg->name);
//fprintf(fout, " _%sSegmentOvlStart = .;\n", seg->name);
// fprintf(fout, " ..%s.ovl ADDR(..%s) + SIZEOF(..%s) :\n"
// /*" ..%s.bss :\n"*/
// " {\n",
// seg->name, seg->name, seg->name);
// fprintf(fout, " _%sSegmentOvlStart = .;\n", seg->name);
//for (j = 0; j < seg->includesCount; j++)
// fprintf(fout, " %s (.ovl)\n", seg->includes[j].fpath);
// for (j = 0; j < seg->includesCount; j++)
// fprintf(fout, " %s (.ovl)\n", seg->includes[j].fpath);
////fprintf(fout, " . = ALIGN(0x10);\n");
//fprintf(fout, " _%sSegmentOvlEnd = .;\n", seg->name);
// fprintf(fout, " _%sSegmentOvlEnd = .;\n", seg->name);
//fprintf(fout, "\n }\n");
// fprintf(fout, "\n }\n");
}
fputs(" _RomEnd = _RomSize;\n}\n", fout);
fputs(" _RomEnd = _RomSize;\n\n", fout);
// Debugging sections
fputs(
// mdebug debug sections
" .mdebug : { *(.mdebug) }"
"\n"
" .mdebug.abi32 : { *(.mdebug.abi32) }"
"\n"
// DWARF debug sections
// Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0.
// DWARF 1
" .debug 0 : { *(.debug) }"
"\n"
" .line 0 : { *(.line) }"
"\n"
// GNU DWARF 1 extensions
" .debug_srcinfo 0 : { *(.debug_srcinfo) }"
"\n"
" .debug_sfnames 0 : { *(.debug_sfnames) }"
"\n"
// DWARF 1.1 and DWARF 2
" .debug_aranges 0 : { *(.debug_aranges) }"
"\n"
" .debug_pubnames 0 : { *(.debug_pubnames) }"
"\n"
// DWARF 2
" .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }"
"\n"
" .debug_abbrev 0 : { *(.debug_abbrev) }"
"\n"
" .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end ) }"
"\n"
" .debug_frame 0 : { *(.debug_frame) }"
"\n"
" .debug_str 0 : { *(.debug_str) }"
"\n"
" .debug_loc 0 : { *(.debug_loc) }"
"\n"
" .debug_macinfo 0 : { *(.debug_macinfo) }"
"\n"
// SGI/MIPS DWARF 2 extensions
" .debug_weaknames 0 : { *(.debug_weaknames) }"
"\n"
" .debug_funcnames 0 : { *(.debug_funcnames) }"
"\n"
" .debug_typenames 0 : { *(.debug_typenames) }"
"\n"
" .debug_varnames 0 : { *(.debug_varnames) }"
"\n"
// DWARF 3
" .debug_pubtypes 0 : { *(.debug_pubtypes) }"
"\n"
" .debug_ranges 0 : { *(.debug_ranges) }"
"\n"
// DWARF Extension
" .debug_macro 0 : { *(.debug_macro) }"
"\n"
" .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }"
"\n",
fout);
// Discard all other sections not mentioned above
fputs(" /DISCARD/ :"
"\n"
" {"
"\n"
" *(*);"
"\n"
" }"
"\n",
fout);
fputs("}\n", fout);
}
static void usage(const char *execname)
{
fprintf(stderr, "Nintendo 64 linker script generation tool v0.02\n"
"usage: %s [-c SEGMENTS] SPEC_FILE LD_SCRIPT\n"
"SPEC_FILE file describing the organization of object files into segments\n"
"LD_SCRIPT filename of output linker script\n"
"-c SEGMENTS (optional) output compression script for compressed segments in SEGMENTS folder\n",
execname);
static void usage(const char* execname) {
fprintf(stderr,
"Nintendo 64 linker script generation tool v0.03\n"
"usage: %s SPEC_FILE LD_SCRIPT\n"
"SPEC_FILE file describing the organization of object files into segments\n"
"LD_SCRIPT filename of output linker script\n",
execname);
}
int main(int argc, char **argv)
{
const char *spec_arg = NULL;
const char *ldscript_arg = NULL;
int main(int argc, char** argv) {
FILE* ldout;
void* spec;
size_t size;
void *spec;
size_t size;
if (argc == 3) {
spec_arg = argv[1];
ldscript_arg = argv[2];
} else {
usage(argv[0]);
return 1;
if (argc != 3) {
usage(argv[0]);
return 1;
}
spec = util_read_whole_file(spec_arg, &size);
parse_rom_spec(spec);
fout = fopen(ldscript_arg, "w");
if (fout == NULL)
util_fatal_error("failed to open file '%s' for writing", ldscript_arg);
write_ld_script();
spec = util_read_whole_file(argv[1], &size);
parse_rom_spec(spec, &g_segments, &g_segmentsCount);
ldout = fopen(argv[2], "w");
if (ldout == NULL)
util_fatal_error("failed to open file '%s' for writing", argv[2]);
write_ld_script(ldout);
fclose(ldout);
free_rom_spec(g_segments, g_segmentsCount);
free(spec);
fclose(fout);
return 0;
return 0;
}
+89
View File
@@ -0,0 +1,89 @@
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "spec.h"
#include "util.h"
void print_usage(char* prog_name) {
printf("USAGE: %s SPEC OVERLAY_SEGMENT_NAME\n"
"Search the preprocessed SPEC for an overlay segment name, \n"
"e.g. \"ovl_En_Firefly\", and return a space-separated list of the files it\n"
"includes. The relocation file must be the last include in the segment\n"
"OVERLAY_SEGMENT_NAME, and have the filename \"OVERLAY_SEGMENT_NAME_reloc.o\",\n"
"but can be in a different directory from the other files.\n",
prog_name);
}
int main(int argc, char** argv) {
char* spec_path;
char* overlay_name;
char* spec;
size_t size;
Segment segment;
int exit_status = 0;
bool segmentFound = false;
if (argc != 3) {
print_usage(argv[0]);
return 1;
}
spec_path = argv[1];
overlay_name = argv[2];
// printf("spec path: %s\n", spec_path);
// printf("overlay name: %s\n", overlay_name);
spec = util_read_whole_file(spec_path, &size);
segmentFound = get_single_segment_by_name(&segment, spec, overlay_name);
if (!segmentFound) {
fprintf(stderr, ERRMSG_START "no segment \"%s\" found\n" ERRMSG_END, overlay_name);
goto error_out;
}
{
size_t overlay_name_length;
const char* reloc_suffix = "_reloc.o";
char* expected_filename;
/* Relocation file must be the last `include` (so .ovl section is linked last) */
if (strstr(segment.includes[segment.includesCount - 1].fpath, reloc_suffix) == NULL) {
fprintf(stderr, ERRMSG_START "last include in overlay segment \"%s\" is not a `%s` file\n" ERRMSG_END,
overlay_name, reloc_suffix);
goto error_out;
}
overlay_name_length = strlen(overlay_name);
expected_filename = malloc(overlay_name_length + strlen(reloc_suffix) + 1);
strcpy(expected_filename, overlay_name);
strcat(expected_filename, reloc_suffix);
if (strstr(segment.includes[segment.includesCount - 1].fpath, expected_filename) == NULL) {
fprintf(stderr, ERRMSG_START "Relocation file \"%s\" should have filename \"%s\"\n" ERRMSG_END,
segment.includes[segment.includesCount - 1].fpath, expected_filename);
goto error_out;
}
free(expected_filename);
}
{
int i;
/* Skip `_reloc.o` include */
for (i = 0; i < segment.includesCount - 1; i++) {
printf("%s ", segment.includes[i].fpath);
}
putchar('\n');
}
if (0) {
error_out:
exit_status = 1;
}
free_single_segment_elements(&segment);
free(spec);
return exit_status;
}
+365
View File
@@ -0,0 +1,365 @@
#include <ctype.h>
#include <stdarg.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "util.h"
#include "spec.h"
#define ARRAY_COUNT(arr) (sizeof(arr) / sizeof(arr[0]))
static struct Segment* add_segment(struct Segment** segments, int* segments_count) {
struct Segment* seg;
(*segments_count)++;
*segments = realloc(*segments, *segments_count * sizeof(**segments));
seg = &(*segments)[*segments_count - 1];
memset(seg, 0, sizeof(*seg));
seg->align = 16;
return seg;
}
static char* skip_whitespace(char* str) {
while (isspace(*str))
str++;
return str;
}
// null terminates the current token and returns a pointer to the next token
static char* token_split(char* str) {
while (!isspace(*str)) {
if (*str == 0)
return str; // end of string
str++;
}
*str = 0; // terminate token
str++;
return skip_whitespace(str);
}
// null terminates the current line and returns a pointer to the next line
static char* line_split(char* str) {
while (*str != '\n') {
if (*str == 0)
return str; // end of string
str++;
}
*str = 0; // terminate line
return str + 1;
}
static bool parse_number(const char* str, unsigned int* num) {
char* endptr;
long int n = strtol(str, &endptr, 0);
*num = n;
return endptr > str;
}
static bool parse_flags(char* str, unsigned int* flags) {
unsigned int f = 0;
while (str[0] != 0) {
char* next = token_split(str);
if (strcmp(str, "BOOT") == 0)
f |= FLAG_BOOT;
else if (strcmp(str, "OBJECT") == 0)
f |= FLAG_OBJECT;
else if (strcmp(str, "RAW") == 0)
f |= FLAG_RAW;
else if (strcmp(str, "NOLOAD") == 0)
f |= FLAG_NOLOAD;
else
return false;
str = next;
}
*flags = f;
return true;
}
static bool parse_quoted_string(char* str, char** out) {
if (*str != '"')
return false;
str++;
*out = str;
while (*str != '"') {
if (*str == 0)
return false; // unterminated quote
str++;
}
*str = 0;
str++;
str = skip_whitespace(str);
if (*str != 0)
return false; // garbage after filename
return true;
}
static bool is_pow_of_2(unsigned int n) {
return (n & (n - 1)) == 0;
}
// clang-format off
static const char* const stmtNames[] = {
[STMT_address] = "address",
[STMT_after] = "after",
[STMT_align] = "align",
[STMT_beginseg] = "beginseg",
[STMT_compress] = "compress",
[STMT_endseg] = "endseg",
[STMT_entry] = "entry",
[STMT_flags] = "flags",
[STMT_include] = "include",
[STMT_include_data_with_rodata] = "include_data_with_rodata",
[STMT_name] = "name",
[STMT_number] = "number",
[STMT_romalign] = "romalign",
[STMT_stack] = "stack",
[STMT_increment] = "increment",
[STMT_pad_text] = "pad_text",
};
// clang-format on
STMTId get_stmt_id_by_stmt_name(const char* stmtName, int lineNum) {
STMTId stmt;
for (stmt = 0; stmt < ARRAY_COUNT(stmtNames); stmt++) {
if (strcmp(stmtName, stmtNames[stmt]) == 0)
return stmt;
}
util_fatal_error("line %i: unknown statement '%s'", lineNum, stmtName);
return -1;
}
bool parse_segment_statement(struct Segment* currSeg, STMTId stmt, char* args, int lineNum) {
// ensure no duplicates (except for 'include' or 'pad_text')
if (stmt != STMT_include && stmt != STMT_include_data_with_rodata && stmt != STMT_pad_text &&
(currSeg->fields & (1 << stmt)))
util_fatal_error("line %i: duplicate '%s' statement", lineNum, stmtNames[stmt]);
currSeg->fields |= 1 << stmt;
currSeg->compress = false;
// statements valid within a segment definition
switch (stmt) {
case STMT_beginseg:
util_fatal_error("line %i: '%s' inside of a segment definition", lineNum, stmtNames[stmt]);
break;
case STMT_endseg:
// verify segment data
if (currSeg->name == NULL)
util_fatal_error("line %i: no name specified for segment", lineNum);
if (currSeg->includesCount == 0)
util_fatal_error("line %i: no includes specified for segment", lineNum);
return true;
break;
case STMT_name:
if (!parse_quoted_string(args, &currSeg->name))
util_fatal_error("line %i: invalid name", lineNum);
break;
case STMT_after:
if (!parse_quoted_string(args, &currSeg->after))
util_fatal_error("line %i: invalid name for 'after'", lineNum);
break;
case STMT_address:
if (!parse_number(args, &currSeg->address))
util_fatal_error("line %i: expected number after 'address'", lineNum);
break;
case STMT_number:
if (!parse_number(args, &currSeg->number))
util_fatal_error("line %i: expected number after 'number'", lineNum);
break;
case STMT_flags:
if (!parse_flags(args, &currSeg->flags))
util_fatal_error("line %i: invalid flags", lineNum);
break;
case STMT_align:
if (!parse_number(args, &currSeg->align))
util_fatal_error("line %i: expected number after 'align'", lineNum);
if (!is_pow_of_2(currSeg->align))
util_fatal_error("line %i: alignment is not a power of two", lineNum);
break;
case STMT_romalign:
if (!parse_number(args, &currSeg->romalign))
util_fatal_error("line %i: expected number after 'romalign'", lineNum);
if (!is_pow_of_2(currSeg->romalign))
util_fatal_error("line %i: alignment is not a power of two", lineNum);
break;
case STMT_include:
case STMT_include_data_with_rodata:
currSeg->includesCount++;
currSeg->includes = realloc(currSeg->includes, currSeg->includesCount * sizeof(*currSeg->includes));
if (!parse_quoted_string(args, &currSeg->includes[currSeg->includesCount - 1].fpath))
util_fatal_error("line %i: invalid filename", lineNum);
currSeg->includes[currSeg->includesCount - 1].linkerPadding = 0;
currSeg->includes[currSeg->includesCount - 1].dataWithRodata = (stmt == STMT_include_data_with_rodata);
break;
case STMT_increment:
if (!parse_number(args, &currSeg->increment))
util_fatal_error("line %i: expected number after 'increment'", lineNum);
break;
case STMT_compress:
currSeg->compress = true;
break;
case STMT_pad_text:
currSeg->includes[currSeg->includesCount - 1].linkerPadding += 0x10;
break;
default:
fprintf(stderr, "warning: '%s' is not implemented\n", stmtNames[stmt]);
break;
}
return false;
}
/**
* `segments` should be freed with `free_rom_spec` after use.
* Will write to the contents of `spec` to introduce string terminating '\0's.
* `segments` also contains pointers to inside `spec`, so `spec` should not be freed before `segments`
*/
void parse_rom_spec(char* spec, struct Segment** segments, int* segment_count) {
int lineNum = 1;
char* line = spec;
struct Segment* currSeg = NULL;
// iterate over lines
while (line[0] != 0) {
char* nextLine = line_split(line);
char* stmtName;
if (line[0] != 0) {
stmtName = skip_whitespace(line);
}
if (line[0] != 0 && stmtName[0] != 0) {
char* args = token_split(stmtName);
STMTId stmt = get_stmt_id_by_stmt_name(stmtName, lineNum);
if (currSeg != NULL) {
bool segmentEnded = parse_segment_statement(currSeg, stmt, args, lineNum);
if (segmentEnded) {
currSeg = NULL;
}
} else {
// commands valid outside a segment definition
switch (stmt) {
case STMT_beginseg:
currSeg = add_segment(segments, segment_count);
currSeg->includes = NULL;
break;
case STMT_endseg:
util_fatal_error("line %i: '%s' outside of a segment definition", lineNum, stmtName);
break;
default:
fprintf(stderr, "warning: '%s' is not implemented\n", stmtName);
break;
}
}
}
line = nextLine;
lineNum++;
}
}
/**
* @brief Parses the spec, looking only for the segment with the name `segmentName`.
* Returns true if the segment was found, false otherwise
*
* @param[out] dstSegment The Segment to be filled. Will only contain the data of the searched segment, or garbage if
* the segment was not found. dstSegment must be previously allocated, a stack variable is recommended
* @param[in,out] spec A null-terminated string containing the whole spec file. This string will be modified by this
* function
* @param[in] segmentName The name of the segment being searched
*/
bool get_single_segment_by_name(struct Segment* dstSegment, char* spec, const char* segmentName) {
bool insideSegment = false;
int lineNum = 1;
char* line = spec;
memset(dstSegment, 0, sizeof(struct Segment));
// iterate over lines
while (line[0] != '\0') {
char* nextLine = line_split(line);
char* stmtName = skip_whitespace(line);
if (stmtName[0] != '\0') {
char* args = token_split(stmtName);
STMTId stmt = get_stmt_id_by_stmt_name(stmtName, lineNum);
if (insideSegment) {
bool segmentEnded = parse_segment_statement(dstSegment, stmt, args, lineNum);
if (stmt == STMT_name) {
if (strcmp(segmentName, dstSegment->name) != 0) {
// Not the segment we are looking for
insideSegment = false;
}
} else if (segmentEnded) {
return true;
}
} else {
if (stmt == STMT_beginseg) {
insideSegment = true;
if (dstSegment->includes != NULL) {
free(dstSegment->includes);
}
memset(dstSegment, 0, sizeof(struct Segment));
}
}
}
line = nextLine;
lineNum++;
}
return false;
}
/**
* @brief Frees the elements of the passed Segment. Will not free the pointer itself
*
* @param segment
*/
void free_single_segment_elements(struct Segment* segment) {
if (segment->includes != NULL) {
free(segment->includes);
}
}
void free_rom_spec(struct Segment* segments, int segment_count) {
int i;
for (i = 0; i < segment_count; i++) {
if (segments[i].includes != NULL)
free(segments[i].includes);
}
free(segments);
}
+64
View File
@@ -0,0 +1,64 @@
#ifndef SPEC_H
#define SPEC_H
#include <stdint.h>
#include <stdbool.h>
typedef enum {
STMT_address,
STMT_after,
STMT_align,
STMT_beginseg,
STMT_compress,
STMT_endseg,
STMT_entry,
STMT_flags,
STMT_include,
STMT_include_data_with_rodata,
STMT_name,
STMT_number,
STMT_romalign,
STMT_stack,
STMT_increment,
STMT_pad_text,
} STMTId;
enum {
FLAG_BOOT = (1 << 0),
FLAG_OBJECT = (1 << 1),
FLAG_RAW = (1 << 2),
FLAG_NOLOAD = (1 << 3),
};
struct Include {
char* fpath;
int linkerPadding;
uint8_t dataWithRodata;
};
typedef struct Segment {
uint32_t fields;
char* name;
char* after;
uint32_t flags;
uint32_t address;
uint32_t stack;
uint32_t align;
uint32_t romalign;
uint32_t increment;
uint32_t entry;
uint32_t number;
struct Include* includes;
int includesCount;
bool compress;
} Segment;
void parse_rom_spec(char* spec, struct Segment** segments, int* segment_count);
bool get_single_segment_by_name(struct Segment* dstSegment, char *spec, const char *segmentName);
void free_single_segment_elements(struct Segment *segment);
void free_rom_spec(struct Segment* segments, int segment_count);
#endif
+5 -5
View File
@@ -12,18 +12,18 @@ void util_fatal_error(const char *msgfmt, ...)
{
va_list args;
fputs("error: ", stderr);
fputs(ERRMSG_START, stderr);
va_start(args, msgfmt);
vfprintf(stderr, msgfmt, args);
va_end(args);
fputc('\n', stderr);
fputs(ERRMSG_END "\n", stderr);
exit(1);
}
// reads a whole file into memory, and returns a pointer to the data
// reads a whole file into memory, and returns a malloc'd pointer to the data.
void *util_read_whole_file(const char *filename, size_t *pSize)
{
FILE *file = fopen(filename, "rb");
@@ -59,13 +59,13 @@ void *util_read_whole_file(const char *filename, size_t *pSize)
void util_write_whole_file(const char *filename, const void *data, size_t size)
{
FILE *file = fopen(filename, "wb");
if (file == NULL)
util_fatal_error("failed to open file '%s' for writing: %s", filename, strerror(errno));
if (fwrite(data, size, 1, file) != 1)
util_fatal_error("error writing to file '%s': %s", filename, strerror(errno));
fclose(file);
}
+10 -3
View File
@@ -1,8 +1,15 @@
#ifndef _UTIL_H_
#define _UTIL_H_
#ifndef UTIL_H
#define UTIL_H
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#define ERRMSG_START "\x1b[91merror\x1b[97m: "
#define ERRMSG_END "\x1b[0m"
#ifdef __GNUC__
__attribute__((format(printf, 1, 2)))
__attribute__((format(printf, 1, 2), noreturn))
#endif
void util_fatal_error(const char *msgfmt, ...);
+67 -67
View File
@@ -2649,12 +2649,12 @@
0x80139FA0:("SkinMatrix_SetYRotation",),
0x8013A068:("SkinMatrix_MulYRotation",),
0x8013A174:("SkinMatrix_SetZRotation",),
0x8013A240:("func_8013A240",),
0x8013A41C:("func_8013A41C",),
0x8013A46C:("func_8013A46C",),
0x8013A4C4:("func_8013A4C4",),
0x8013A504:("func_8013A504",),
0x8013A530:("func_8013A530",),
0x8013A240:("Snap_RecordPictographedActors",),
0x8013A41C:("Snap_SetFlag",),
0x8013A46C:("Snap_UnsetFlag",),
0x8013A4C4:("Snap_CheckFlag",),
0x8013A504:("Snap_AbsS",),
0x8013A530:("Snap_ValidatePictograph",),
0x8013A7C0:("SubS_FindDoor",),
0x8013A860:("SubS_DrawTransformFlexLimb",),
0x8013AB00:("SubS_DrawTransformFlex",),
@@ -3805,52 +3805,52 @@
0x8019ADBC:("AudioSeq_InitSequencePlayers",),
0x8019AE40:("func_8019AE40",),
0x8019AEC0:("func_8019AEC0",),
0x8019AF00:("func_8019AF00",),
0x8019AF58:("func_8019AF58",),
0x8019AFE8:("func_8019AFE8",),
0x8019B02C:("func_8019B02C",),
0x8019B074:("AudioOcarina_MapSongFromNotesToButtons",),
0x8019B144:("func_8019B144",),
0x8019B378:("func_8019B378",),
0x8019B38C:("func_8019B38C",),
0x8019B3D0:("func_8019B3D0",),
0x8019B4B8:("func_8019B4B8",),
0x8019AF00:("AudioOcarina_ReadControllerInput",),
0x8019AF58:("AudioOcarina_BendPitchTwoSemitones",),
0x8019AFE8:("AudioOcarina_GetPlayingState",),
0x8019B02C:("AudioOcarina_MapPitchToButton",),
0x8019B074:("AudioOcarina_MapSongFromPitchToButton",),
0x8019B144:("AudioOcarina_Start",),
0x8019B378:("AudioOcarina_SetSongStartingPos",),
0x8019B38C:("AudioOcarina_StartAtSongStartingPos",),
0x8019B3D0:("AudioOcarina_StartForSongCheck",),
0x8019B4B8:("AudioOcarina_StartWithSongNoteLengths",),
0x8019B544:("AudioOcarina_StartDefault",),
0x8019B568:("func_8019B568",),
0x8019B5AC:("func_8019B5AC",),
0x8019B5EC:("func_8019B5EC",),
0x8019B618:("func_8019B618",),
0x8019B654:("func_8019B654",),
0x8019B6B4:("func_8019B6B4",),
0x8019BC44:("func_8019BC44",),
0x8019BE98:("func_8019BE98",),
0x8019C1C0:("func_8019C1C0",),
0x8019C1D0:("func_8019C1D0",),
0x8019C268:("func_8019C268",),
0x8019C2E4:("func_8019C2E4",),
0x8019C300:("AudioOcarina_SetInstrumentId",),
0x8019C398:("func_8019C398",),
0x8019C5A0:("func_8019C5A0",),
0x8019C8D8:("func_8019C8D8",),
0x8019CD08:("func_8019CD08",),
0x8019CE34:("func_8019CE34",),
0x8019CE6C:("func_8019CE6C",),
0x8019CEBC:("func_8019CEBC",),
0x8019CF6C:("func_8019CF6C",),
0x8019CF78:("func_8019CF78",),
0x8019B618:("AudioOcarina_CheckIfStartedSong",),
0x8019B654:("AudioOcarina_UpdateCurOcarinaSong",),
0x8019B6B4:("AudioOcarina_CheckSongsWithMusicStaff",),
0x8019BC44:("AudioOcarina_CheckSongsWithoutMusicStaff",),
0x8019BE98:("AudioOcarina_PlayControllerInput",),
0x8019C1C0:("AudioOcarina_EnableInput",),
0x8019C1D0:("AudioOcarina_ResetAndMute",),
0x8019C268:("AudioOcarina_ResetAndReadInput",),
0x8019C2E4:("AudioOcarina_SetOcarinaDisableTimer",),
0x8019C300:("AudioOcarina_SetInstrument",),
0x8019C398:("AudioOcarina_SetPlaybackSong",),
0x8019C5A0:("AudioOcarina_PlaybackSong",),
0x8019C8D8:("AudioOcarina_SetRecordingSong",),
0x8019CD08:("AudioOcarina_SetRecordingState",),
0x8019CE34:("AudioOcarina_UpdateRecordingStaff",),
0x8019CE6C:("AudioOcarina_UpdatePlayingStaff",),
0x8019CEBC:("AudioOcarina_UpdatePlaybackStaff",),
0x8019CF6C:("AudioOcarina_GetRecordingStaff",),
0x8019CF78:("AudioOcarina_GetPlayingStaff",),
0x8019CF9C:("AudioOcarina_GetPlaybackStaff",),
0x8019CFA8:("func_8019CFA8",),
0x8019CFA8:("AudioOcarina_RecordSong",),
0x8019D134:("AudioOcarina_TerminaWallValidateNotes",),
0x8019D26C:("AudioOcarina_TerminaWallGenerateNotes",),
0x8019D488:("AudioOcarina_MemoryGameSetNumNotes",),
0x8019D4F8:("AudioOcarina_MemoryGameGenerateNotes",),
0x8019D600:("func_8019D600",),
0x8019D758:("func_8019D758",),
0x8019D864:("func_8019D864",),
0x8019D8B4:("func_8019D8B4",),
0x8019D8E4:("func_8019D8E4",),
0x8019DF28:("func_8019DF28",),
0x8019DF64:("func_8019DF64",),
0x8019D488:("AudioOcarina_MemoryGameInit",),
0x8019D4F8:("AudioOcarina_MemoryGameNextNote",),
0x8019D600:("AudioOcarina_Update",),
0x8019D758:("AudioOcarina_PlayLongScarecrowAfterCredits",),
0x8019D864:("AudioOcarina_SetCustomSequence",),
0x8019D8B4:("AudioOcarina_PlayCustomSequence",),
0x8019D8E4:("AudioOcarina_CreateCustomSequence",),
0x8019DF28:("AudioOcarina_ResetInstrument",),
0x8019DF64:("AudioOcarina_ResetStaffs",),
0x8019DFF8:("func_8019DFF8",),
0x8019E000:("func_8019E000",),
0x8019E00C:("func_8019E00C",),
@@ -3990,7 +3990,7 @@
0x801A42C8:("func_801A42C8",),
0x801A4324:("func_801A4324",),
0x801A4348:("func_801A4348",),
0x801A4380:("func_801A4380",),
0x801A4380:("Audio_SetSfxVolumeExceptSystemAndOcarinaBanks",),
0x801A4428:("func_801A4428",),
0x801A44A4:("Audio_PreNMI",),
0x801A44C4:("func_801A44C4",),
@@ -4030,9 +4030,9 @@
0x801A5808:("func_801A5808",),
0x801A5A10:("func_801A5A10",),
0x801A5A1C:("func_801A5A1C",),
0x801A5BD0:("func_801A5BD0",),
0x801A5C28:("func_801A5C28",),
0x801A5C8C:("func_801A5C8C",),
0x801A5BD0:("Audio_SetSfxBanksMute",),
0x801A5C28:("Audio_SetFlagForBgmVolumeLow",),
0x801A5C8C:("Audio_ClearFlagForBgmVolumeLow",),
0x801A5CFC:("Audio_PlaySfxGeneral",),
0x801A5DDC:("func_801A5DDC",),
0x801A5F7C:("func_801A5F7C",),
@@ -4045,7 +4045,7 @@
0x801A72CC:("Audio_StopSfxByPos",),
0x801A7328:("func_801A7328",),
0x801A7484:("func_801A7484",),
0x801A75E8:("func_801A75E8",),
0x801A75E8:("Audio_StopSfxById",),
0x801A7720:("func_801A7720",),
0x801A7794:("func_801A7794",),
0x801A7828:("func_801A7828",),
@@ -7539,18 +7539,18 @@
0x809455A0:("ItemInbox_Draw",),
0x80945650:("EnGe1_Init",),
0x809457C0:("EnGe1_Destroy",),
0x809457EC:("func_809457EC",),
0x80945924:("func_80945924",),
0x80945A00:("func_80945A00",),
0x80945A9C:("func_80945A9C",),
0x80945B60:("func_80945B60",),
0x80945C50:("func_80945C50",),
0x80945CAC:("func_80945CAC",),
0x80945CE4:("func_80945CE4",),
0x809457EC:("EnGe1_SetAnimation",),
0x80945924:("EnGe1_LookAtPlayer",),
0x80945A00:("EnGe1_ShadowDraw",),
0x80945A9C:("EnGe1_SetupPath",),
0x80945B60:("EnGe1_FollowPath",),
0x80945C50:("EnGe1_Scream",),
0x80945CAC:("EnGe1_Wait",),
0x80945CE4:("EnGe1_PerformCutsceneActions",),
0x8094607C:("EnGe1_Update",),
0x80946190:("func_80946190",),
0x80946238:("func_80946238",),
0x80946368:("func_80946368",),
0x80946190:("EnGe1_ValidatePictograph",),
0x80946238:("EnGe1_OverrideLimbDraw",),
0x80946368:("EnGe1_PostLimbDraw",),
0x80946400:("EnGe1_Draw",),
0x809466A0:("ObjBlockstop_Init",),
0x809466F0:("ObjBlockstop_CheckForBlock",),
@@ -8017,7 +8017,7 @@
0x8096F5E0:("EnKakasi_Destroy",),
0x8096F60C:("EnKakasi_Init",),
0x8096F800:("EnKakasi_SetAnimation",),
0x8096F88C:("EnKakasi_8096F88C",),
0x8096F88C:("EnKakasi_ValidatePictograph",),
0x8096F8D8:("func_8096F8D8",),
0x8096FA18:("func_8096FA18",),
0x8096FAAC:("func_8096FAAC",),
@@ -10591,7 +10591,7 @@
0x80A52018:("func_80A52018",),
0x80A52074:("func_80A52074",),
0x80A52134:("func_80A52134",),
0x80A52530:("func_80A52530",),
0x80A52530:("EnDnq_ValidatePictograph",),
0x80A5257C:("func_80A5257C",),
0x80A52604:("func_80A52604",),
0x80A52648:("func_80A52648",),
@@ -10760,7 +10760,7 @@
0x80A619EC:("EnBal_Destroy",),
0x80A61A18:("func_80A61A18",),
0x80A61A44:("func_80A61A44",),
0x80A61A6C:("func_80A61A6C",),
0x80A61A6C:("EnBal_ValidatePictograph",),
0x80A61ADC:("func_80A61ADC",),
0x80A61B5C:("func_80A61B5C",),
0x80A61C9C:("func_80A61C9C",),
@@ -11720,7 +11720,7 @@
0x80AB53DC:("EnMnk_Init",),
0x80AB59E8:("EnMnk_Destroy",),
0x80AB5A64:("func_80AB5A64",),
0x80AB5B38:("func_80AB5B38",),
0x80AB5B38:("EnMnk_ValidatePictograph",),
0x80AB5B84:("func_80AB5B84",),
0x80AB5BCC:("func_80AB5BCC",),
0x80AB5C14:("func_80AB5C14",),
@@ -11916,7 +11916,7 @@
0x80AC299C:("EnBigokuta_MoveCamera",),
0x80AC2A1C:("EnBigokuta_ResetCamera",),
0x80AC2A7C:("EnBigokuta_ShootPlayer",),
0x80AC2B4C:("func_80AC2B4C",),
0x80AC2B4C:("EnBigokuta_ValidatePictograph",),
0x80AC2B98:("EnBigokuta_IsInWater",),
0x80AC2C30:("EnBigokuta_SpawnRipple",),
0x80AC2C84:("EnBigokuta_SetupIdle",),
@@ -15728,7 +15728,7 @@
0x80BD1D94:("func_80BD1D94",),
0x80BD1DB8:("func_80BD1DB8",),
0x80BD1F1C:("func_80BD1F1C",),
0x80BD1FC8:("func_80BD1FC8",),
0x80BD1FC8:("EnZov_ValidatePictograph",),
0x80BD20B4:("EnZov_Update",),
0x80BD2380:("EnZov_OverrideLimbDraw",),
0x80BD2404:("EnZov_PostLimbDraw",),
+26 -26
View File
@@ -2310,28 +2310,28 @@
0x801D6FD8:("sCurOcarinaVolume","UNK_TYPE1","",0x1),
0x801D6FDC:("sCurOcarinaVibrato","UNK_TYPE1","",0x1),
0x801D6FE0:("sPlaybackState","UNK_TYPE1","",0x1),
0x801D6FE4:("D_801D6FE4","UNK_TYPE1","",0x1),
0x801D6FE8:("D_801D6FE8","UNK_TYPE1","",0x1),
0x801D6FE4:("sPlaybackStaffStopPos","UNK_TYPE1","",0x1),
0x801D6FE8:("sPlaybackStaffStartPos","UNK_TYPE1","",0x1),
0x801D6FEC:("sOcarinaFlags","UNK_TYPE4","",0x4),
0x801D6FF0:("sPlaybackNoteTimer","UNK_TYPE4","",0x4),
0x801D6FF4:("sPlaybackNotePos","UNK_TYPE2","",0x2),
0x801D6FF8:("sPlaybackStaffPos","UNK_TYPE2","",0x2),
0x801D6FFC:("sPrevOcarinaSongFlags","UNK_TYPE4","",0x4),
0x801D7000:("sPlaybackNoteValue","UNK_TYPE1","",0x1),
0x801D6FFC:("sPrevOcarinaWithMusicStaffFlags","UNK_TYPE4","",0x4),
0x801D7000:("sPlaybackPitch","UNK_TYPE1","",0x1),
0x801D7004:("sNotePlaybackVolume","UNK_TYPE1","",0x1),
0x801D7008:("sNotePlaybackVibrato","UNK_TYPE1","",0x1),
0x801D700C:("sNotePlaybackBend","UNK_TYPE1","",0x1),
0x801D7010:("sNormalizedNotePlaybackTone","f32","",0x4),
0x801D7014:("sNormalizedNotePlaybackVolume","f32","",0x4),
0x801D7010:("sRelativeNotePlaybackBend","f32","",0x4),
0x801D7014:("sRelativeNotePlaybackVolume","f32","",0x4),
0x801D7018:("sOcarinaPlaybackTaskStart","UNK_TYPE4","",0x4),
0x801D701C:("sOcarinaWallCounter","UNK_TYPE4","",0x4),
0x801D7020:("sCurOcarinaSong","u8","[8]",0x8),
0x801D7028:("sOcarinaSongAppendPos","UNK_TYPE1","",0x1),
0x801D7020:("sCurOcarinaSongWithoutMusicStaff","u8","[8]",0x8),
0x801D7028:("sOcarinaWithoutMusicStaffPos","UNK_TYPE1","",0x1),
0x801D702C:("sOcarinaSongStartingPos","UNK_TYPE1","",0x1),
0x801D7030:("sButtonToPitchMap","UNK_TYPE1","",0x1),
0x801D7038:("sOcarinaMemoryGameAppendPos","UNK_TYPE1","",0x1),
0x801D703C:("sOcaMemoryGameEndPos","UNK_TYPE1","",0x1),
0x801D7040:("sOcaMemoryGameNumNotes","UNK_TYPE1","",0x1),
0x801D703C:("sOcarinaMemoryGameEndPos","UNK_TYPE1","",0x1),
0x801D7040:("sOcarinaMemoryGameNumNotes","UNK_TYPE1","",0x1),
0x801D7044:("sOcarinaSongNotes","OcarinaNote","[24][20]",0xF00),
0x801D7F44:("sOoTOcarinaSongNotes","OcarinaNote","[9][20]",0x5A0),
0x801D84E4:("sOoTOcarinaSongsNumNotes","UNK_TYPE1","",0x1),
@@ -2350,7 +2350,7 @@
0x801D852C:("sMusicStaffNumNotesPerTest","UNK_TYPE1","",0x1),
0x801D8530:("D_801D8530","UNK_TYPE1","",0x1),
0x801D8534:("D_801D8534","UNK_TYPE4","",0x4),
0x801D8538:("sIsOcarinaNoteChanged","UNK_TYPE1","",0x1),
0x801D8538:("sOcarinaDropInputTimer","UNK_TYPE1","",0x1),
0x801D853C:("sScarecrowsLongSongNotes","OcarinaNote","[108]",0x360),
0x801D889C:("gScarecrowLongSongPtr","UNK_PTR","",0x4),
0x801D88A0:("gScarecrowSpawnSongPtr","UNK_PTR","",0x4),
@@ -2387,14 +2387,14 @@
0x801DB494:("D_801DB494","UNK_TYPE1","",0x1),
0x801DB49C:("D_801DB49C","UNK_TYPE1","",0x1),
0x801DB4A0:("D_801DB4A0","UNK_TYPE2","",0x2),
0x801DB4A4:("D_801DB4A4","UNK_TYPE4","",0x4),
0x801DB4A4:("gSfxDefaultPos","UNK_TYPE4","",0x4),
0x801DB4B0:("D_801DB4B0","UNK_TYPE1","",0x1),
0x801DB4B8:("D_801DB4B8","UNK_TYPE1","",0x1),
0x801DB4B8:("gSfxDefaultReverb","UNK_TYPE1","",0x1),
0x801DB4C0:("D_801DB4C0","UNK_TYPE1","",0x1),
0x801DB4C4:("D_801DB4C4","UNK_TYPE1","",0x1),
0x801DB4C8:("D_801DB4C8","UNK_TYPE1","",0x1),
0x801DB4CC:("D_801DB4CC","UNK_TYPE1","",0x1),
0x801DB4D4:("D_801DB4D4","UNK_TYPE1","",0x1),
0x801DB4D4:("gAudioSpecId","UNK_TYPE1","",0x1),
0x801DB4D8:("D_801DB4D8","UNK_TYPE1","",0x1),
0x801DB4DC:("D_801DB4DC","UNK_TYPE4","",0x4),
0x801DB4E0:("D_801DB4E0","UNK_TYPE1","",0x1),
@@ -4292,18 +4292,18 @@
0x801FD43A:("sPlayingStaff","OcarinaStaff","",0x3),
0x801FD43E:("sPlaybackStaff","OcarinaStaff","",0x3),
0x801FD442:("sRecordingStaff","OcarinaStaff","",0x3),
0x801FD448:("sOcarinaUpdateTaskCurrent","UNK_TYPE1","",0x1),
0x801FD448:("sOcarinaUpdateTaskStart","UNK_TYPE1","",0x1),
0x801FD44C:("sOcarinaInputStickRel","OcarinaControlStick","",0x2),
0x801FD450:("sOcarinaInputButtonCur","UNK_TYPE1","",0x1),
0x801FD454:("sOcarinaInputButtonStart","UNK_TYPE1","",0x1),
0x801FD458:("sOcarinaInputButtonPrev","UNK_TYPE1","",0x1),
0x801FD45C:("sOcaInputBtnPress","UNK_TYPE1","",0x1),
0x801FD460:("sOcarinaResetDelay","UNK_TYPE1","",0x1),
0x801FD461:("sOcarinaResetUnused","UNK_TYPE1","",0x1),
0x801FD45C:("sOcarinaInputButtonPress","UNK_TYPE1","",0x1),
0x801FD460:("sOcarinaDisableTimer","UNK_TYPE1","",0x1),
0x801FD461:("sOcarinaUnused","UNK_TYPE1","",0x1),
0x801FD462:("sOcarinaHasStartedSong","UNK_TYPE1","",0x1),
0x801FD463:("sFirstOcarinaSongIndex","UNK_TYPE1","",0x1),
0x801FD464:("sLastOcarinaSongIndex","UNK_TYPE1","",0x1),
0x801FD468:("sOcarinaAvailSongs","UNK_TYPE1","",0x1),
0x801FD468:("sOcarinaAvailableSongFlags","UNK_TYPE1","",0x1),
0x801FD46C:("sOcarinaStaffPlayingPos","UNK_TYPE1","",0x1),
0x801FD470:("sMusicStaffPos","UNK_TYPE1","",0x1),
0x801FD4A0:("sMusicStaffCurHeldLength","UNK_TYPE1","",0x1),
@@ -4311,7 +4311,7 @@
0x801FD500:("sMusicStaffExpectedPitch","UNK_TYPE1","",0x1),
0x801FD518:("D_801FD518","UNK_TYPE1","",0x1),
0x801FD530:("D_801FD530","u32","[24]",0x60),
0x801FD590:("sRecordingSongNote","UNK_TYPE1","",0x1),
0x801FD590:("sScarecrowsLongSongSecondNote","UNK_TYPE1","",0x1),
0x801FD598:("sCustomSequencePc","UNK_TYPE1","",0x1),
0x801FD5A0:("D_801FD5A0","UNK_TYPE1","",0x1),
0x801FD5A4:("D_801FD5A4","UNK_TYPE1","",0x1),
@@ -8437,12 +8437,12 @@
0x809453C4:("D_809453C4","f32","",0x4),
0x80945600:("Item_Inbox_InitVars","UNK_TYPE1","",0x1),
0x809464B0:("En_Ge1_InitVars","UNK_TYPE1","",0x1),
0x809464D0:("D_809464D0","UNK_TYPE1","",0x1),
0x809464FC:("D_809464FC","UNK_TYPE1","",0x1),
0x80946524:("D_80946524","UNK_TYPE1","",0x1),
0x80946530:("D_80946530","UNK_TYPE1","",0x1),
0x8094653C:("D_8094653C","UNK_TYPE1","",0x1),
0x80946548:("D_80946548","UNK_TYPE1","",0x1),
0x809464D0:("sCylinderInit","ColliderCylinderInit","",0x1),
0x809464FC:("sAnimations","AnimationHeader","10",0x28),
0x80946524:("sHairstyleDLs","Gfx*","3",0xC),
0x80946530:("sInitialFocusPos","Vec3f","",0xC),
0x8094653C:("sZeroVec","Vec3f","",0xC),
0x80946548:("sEyeTextures","TexturePtr","3",0xC),
0x80946560:("jtbl_80946560","UNK_PTR","",0x4),
0x80946880:("Obj_Blockstop_InitVars","UNK_TYPE1","",0x1),
0x80947A40:("En_Sda_InitVars","UNK_TYPE1","",0x1),
+23
View File
@@ -0,0 +1,23 @@
IndentWidth: 4
Language: Cpp
UseTab: Never
ColumnLimit: 120
PointerAlignment: Left
BreakBeforeBraces: Attach
SpaceAfterCStyleCast: false
Cpp11BracedListStyle: false
IndentCaseLabels: true
BinPackArguments: true
BinPackParameters: true
AlignAfterOpenBracket: Align
AlignOperands: true
BreakBeforeTernaryOperators: true
BreakBeforeBinaryOperators: None
AllowShortBlocksOnASingleLine: true
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: false
AlignEscapedNewlines: Left
AlignTrailingComments: true
SortIncludes: false
+56
View File
@@ -0,0 +1,56 @@
# Prerequisites
*.d
# Object files
*.o
*.ko
*.obj
*.elf
# Linker output
*.ilk
*.map
*.exp
# Precompiled Headers
*.gch
*.pch
# Libraries
*.lib
*.a
*.la
*.lo
# Shared objects (inc. Windows DLLs)
*.dll
*.so
*.so.*
*.dylib
# Executables
*.exe
*.out
*.app
*.i*86
*.x86_64
*.hex
# Debug files
*.dSYM/
*.su
*.idb
*.pdb
# Kernel Module Compile Results
*.mod*
*.cmd
.tmp_versions/
modules.order
Module.symvers
Mkfile.old
dkms.conf
# Custom
build/
.vscode
+12
View File
@@ -0,0 +1,12 @@
; DO NOT EDIT (unless you know what you are doing)
;
; This subdirectory is a git "subrepo", and this file is maintained by the
; git-subrepo command. See https://github.com/git-commands/git-subrepo#readme
;
[subrepo]
remote = git@github.com:EllipticEllipsis/fado.git
branch = master
commit = f7efb10a9a65f27e9ccad7ce270234f20d386ac9
parent = 90cfafec47fe4b73ad9009e9501e147e86025aa6
method = merge
cmdver = 0.4.3
+661
View File
@@ -0,0 +1,661 @@
GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU Affero General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
our General Public Licenses are intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
Developers that use our General Public Licenses protect your rights
with two steps: (1) assert copyright on the software, and (2) offer
you this License which gives you legal permission to copy, distribute
and/or modify the software.
A secondary benefit of defending all users' freedom is that
improvements made in alternate versions of the program, if they
receive widespread use, become available for other developers to
incorporate. Many developers of free software are heartened and
encouraged by the resulting cooperation. However, in the case of
software used on network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and
letting the public access it on a server without ever releasing its
source code to the public.
The GNU Affero General Public License is designed specifically to
ensure that, in such cases, the modified source code becomes available
to the community. It requires the operator of a network server to
provide the source code of the modified version running there to the
users of that server. Therefore, public use of a modified version, on
a publicly accessible server, gives the public access to the source
code of the modified version.
An older license, called the Affero General Public License and
published by Affero, was designed to accomplish similar goals. This is
a different license, not a version of the Affero GPL, but Affero has
released a new version of the Affero GPL which permits relicensing under
this license.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU Affero General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Remote Network Interaction; Use with the GNU General Public License.
Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your version
supports such interaction) an opportunity to receive the Corresponding
Source of your version by providing access to the Corresponding Source
from a network server at no charge, through some standard or customary
means of facilitating copying of software. This Corresponding Source
shall include the Corresponding Source for any work covered by version 3
of the GNU General Public License that is incorporated pursuant to the
following paragraph.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the work with which it is combined will remain governed by version
3 of the GNU General Public License.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU Affero General Public License from time to time. Such new versions
will be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU Affero General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU Affero General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU Affero General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If your software can interact with users remotely through a computer
network, you should also make sure that it provides a way for users to
get its source. For example, if your program is a web application, its
interface could display a "Source" link that leads users to an archive
of the code. There are many ways you could offer source, and different
solutions will be better for different programs; see section 13 for the
specific requirements.
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU AGPL, see
<https://www.gnu.org/licenses/>.
+74
View File
@@ -0,0 +1,74 @@
DEBUG ?= 0
LLD ?= 0
ASAN ?= 0
EXPERIMENTAL?= 0
ELF := fado.elf
CC := $(shell ./find_program.sh gcc clang clang-[0-9][0-9] clang-[0-9])
LD := $(shell ./find_program.sh ld ld.lld ld.lld-*)
INC := -I include -I lib
WARNINGS := -Wall -Wextra -Wpedantic -Wshadow -Werror=implicit-function-declaration -Wvla -Wno-unused-function
CFLAGS := -std=c11
LDFLAGS :=
ifeq ($(DEBUG),0)
OPTFLAGS := -O2
CFLAGS += -Werror
else
OPTFLAGS := -O0 -g3 -DDEBUG_ON
endif
ifneq ($(ASAN),0)
CFLAGS += -fsanitize=address -fsanitize=pointer-compare -fsanitize=pointer-subtract -fsanitize=undefined
endif
ifneq ($(LLD),0)
LDFLAGS += -fuse-ld=lld
else
ifneq ($(LD),ld)
LDFLAGS += -fuse-ld=lld
endif
endif
ifneq ($(EXPERIMENTAL),0)
CFLAGS += -DEXPERIMENTAL
endif
# GCC is too stupid to be trusted with these warnings
ifeq ($(CC),gcc)
WARNINGS += -Wno-implicit-fallthrough -Wno-maybe-uninitialized
endif
SRC_DIRS := $(shell find src -type d)
C_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.c))
H_FILES := $(foreach dir,$(INC),$(wildcard $(dir)/*.h))
O_FILES := $(foreach f,$(C_FILES:.c=.o),build/$f)
LIB_DIRS := $(shell find lib -type d)
# exclude test file since we don't want it
C_LIB_FILES := $(filter-out lib/vc_vector/vc_vector_test.c, $(foreach dir,$(LIB_DIRS),$(wildcard $(dir)/*.c)))
O_LIB_FILES := $(foreach f,$(C_LIB_FILES:.c=.o),build/$f)
# Main targets
all: $(ELF)
clean:
$(RM) -r build $(ELF)
format:
clang-format-11 -i $(C_FILES) $(H_FILES) lib/fairy/*
.PHONY: all clean format
# create build directories
$(shell mkdir -p $(foreach dir,$(SRC_DIRS),build/$(dir)) $(foreach dir,$(LIB_DIRS),build/$(dir)))
$(ELF): $(O_FILES) $(O_LIB_FILES)
$(CC) $(INC) $(WARNINGS) $(CFLAGS) $(OPTFLAGS) $(LDFLAGS) -o $@ $^
build/%.o: %.c $(H_FILES)
$(CC) -c $(INC) $(WARNINGS) $(CFLAGS) $(OPTFLAGS) -o $@ $<
build/lib/%.o: lib/%.c
$(CC) -c $(INC) $(WARNINGS) $(CFLAGS) $(OPTFLAGS) -o $@ $<
+77
View File
@@ -0,0 +1,77 @@
# fado
*Fairy-Assisted (relocations for) Decomplied Overlays*
<!-- Nice backronym... -->
Contains
- **Fairy** a library for reading relocatable MIPS ELF object files (big-endian, suitable for Nintendo 64 games)
- **Fado** a program for generating the `.ovl`/relocation section for Zelda64 overlay files
- **Mido** an automatic dependency file generator
Compatible with both IDO and GCC (although [see below](N_B)). Both ordinary MIPS REL sections and RELA sections are now supported.
Output format is the standard "Zelda64" .ovl section, with the relocs divided by section, as used by
- *The Legend of Zelda: Ocarina of Time* (all Nintendo 64/Gamecube/iQue releases)
- *The Legend of Zelda: Majora's Mask* (all Nintendo 64/Gamecube releases)
In theory it will also work for other Nintendo 64 games that use this system, such as *Yoshi's Story*, but has yet to be tested with these.
## Explanation
The overlay relocation sections used by Zelda64 is described [here](z64_relocation_section_format.md). Fado will produce a `.ovl` section compatible with this format, although as noted there, some compilers need persuasion to produce compatible objects.
## How to use
Compile by running `make`.
A standalone invocation of Fado would look something like
```sh
./fado.elf z_en_hs2.o -n ovl_En_Hs2 -o ovl_En_Hs2_reloc.s
```
This takes as input the compiled object file from the C file (e.g. [this one](https://github.com/zeldaret/oot/blob/eadc477187888e1ae078d021b4a00b1366f0c9a4/src/overlays/actors/ovl_En_Hs2/z_en_hs2.c)), the name of the overlay (`ovl_En_Hs2`) and will output an assembly file `ovl_En_Hs2_reloc.s` containing the relocation section. An example output is included in the repo [here](ovl_En_Hs_reloc.s). Fado will print information from the object file to assist with debugging, by splitting relocs by section, and for each, printing the type, offset, and associated symbol (or section if static):
```mips
# TEXT RELOCS
.word 0x45000084 # R_MIPS_HI16 0x000084 .data
.word 0x4600008C # R_MIPS_LO16 0x00008C .data
.word 0x450000B4 # R_MIPS_HI16 0x0000B4 .rodata
.word 0x460000BC # R_MIPS_LO16 0x0000BC .rodata
.word 0x450000C0 # R_MIPS_HI16 0x0000C0 func_80A6F1A4
.word 0x460000C4 # R_MIPS_LO16 0x0000C4 func_80A6F1A4
```
If invoking in a makefile, you will probably want to generate these from a predefined filelist, and with the appropriate dependencies. [The Ocarina of Time decomp repository](http://github.com/zeldaret/oot) contains an example of how to do this using a supplementary program to parse the `spec` format.
More information can be obtained by running
```sh
./fado.elf --help
```
which contains information on the various options, such as automatic dependency file generation, etc.
## N.B.
- Fado expects the linker script to output symbols for the section sizes, and for them to be declared separately, in the format
```
_SEGMENTNAMESegmentSECTIONSize
```
e.g.
```
_ovl_En_Hs2SegmentTextSize
```
etc.
- By default Fado expects sections to be 0x10-aligned, as is usual for IDO. Some versions of GCC like to align sections to smaller widths, which Fado will handle appropriately, but the linker script must also address this, and at least the default settings seem unable to size the sections correctly due ot placing `fill`s in the wrong places. For now it is recommended to manually align sections to 0x10 if the compiler does not automatically.
- The experimental flag `--alignment`/`-a` can be passed to Fado, and it will use the alignment declared by each section in the elf file instead of padding them to 0x10 bytes, It should be noted this option has not been fully tested because currently we don't have any linker script tool that can properly address the incorrect placing of `fill`s. Fado must be rebuilt passing `EXPERIMENTAL=1` to be able to use this flag.
- To prevent GCC producing non-compliant HI/LOs, you must pass *both* of the following compiler flags: `-mno-explicit-relocs -mno-split-addresses`. See [here](z64_relocation_section_format.md#hilo) for more details.
- It is recommended, though not strictly required, that `-fno-merge-constants` is used for GCC, to avoid unpredictable section sizes, and comply with the Zelda64 relocation format's expectation of at most one rodata section. See [here](z64_relocation_section_format.md#rodata) for more details.
+16
View File
@@ -0,0 +1,16 @@
#!/usr/bin/env bash
for i in "${@:2}"
do
RESULT=$(IFS=:;find $PATH -maxdepth 1 -name "$i" -print -quit 2> /dev/null | grep -o '[^/]*$')
COUNT=$(echo "$RESULT" | wc -c)
if [ $COUNT -gt 1 ]
then
echo $RESULT
exit 0
fi
done
echo $1
exit 0
+8
View File
@@ -0,0 +1,8 @@
/* Copyright (C) 2021 Elliptic Ellipsis */
/* SPDX-License-Identifier: AGPL-3.0-only */
#pragma once
#include <stdio.h>
void Fado_Relocs(FILE* outputFile, int inputFilesCount, FILE** inputFiles, const char* ovlName);
// void Fado_WriteRelocFile(FILE* outputFile, FILE** inputFiles, int inputFilesCount);
+25
View File
@@ -0,0 +1,25 @@
/* Copyright (C) 2021 Elliptic Ellipsis */
/* SPDX-License-Identifier: AGPL-3.0-only */
#pragma once
#include <getopt.h>
#include <unistd.h>
typedef struct {
struct option longOpt;
char* helpArg;
char* helpMsg;
} OptInfo;
typedef struct {
char* helpArg;
char* helpMsg;
} PosArgInfo;
/* Formatting sizes used by Help_PrintHelp. Change them before calling Help_PrintHelp to use custom values */
extern size_t helpTextWidth;
extern size_t helpDtIndent;
extern size_t helpDdIndent;
void Help_PrintHelp(const char* prologue, size_t posArgCount, const PosArgInfo* posArgInfo, size_t optCount,
const OptInfo* optInfo, const char* epilogue);
+23
View File
@@ -0,0 +1,23 @@
/* Copyright (C) 2021 Elliptic Ellipsis */
/* SPDX-License-Identifier: AGPL-3.0-only */
#pragma once
#include "vc_vector/vc_vector.h"
/* C macros */
#define ARRAY_COUNT(arr) (signed long long)(sizeof(arr) / sizeof(arr[0]))
#define ARRAY_COUNTU(arr) (unsigned long long)(sizeof(arr) / sizeof(arr[0]))
#define ALIGN(val, align) (((val) + (align - 1)) / (align) * (align))
/* Mathematical macros */
#define ABS(x) ((x) < 0 ? -(x) : (x))
#define CLAMP(x, min, max) ((x) < (min) ? (min) : (x) > (max) ? (max) : (x))
#define CLAMP_MAX(x, max) ((x) > (max) ? (max) : (x))
#define CLAMP_MIN(x, min) ((x) < (min) ? (min) : (x))
#define MEDIAN3(a1, a2, a3) \
((a2 >= a1) ? ((a3 >= a2) ? a2 : ((a1 >= a3) ? a1 : a3)) : ((a2 >= a3) ? a2 : ((a3 >= a1) ? a1 : a3)))
/* vc_vector macros - really these should go in vc_vector.h, but not much choice without touching the library files */
#define VC_FOREACH(i, v) for (i = vc_vector_begin(v); i != vc_vector_end(v); i = vc_vector_next(v, i))
+6
View File
@@ -0,0 +1,6 @@
#pragma once
#include <stdio.h>
#include "vc_vector/vc_vector.h"
int Mido_WriteDependencyFile(FILE* dependencyFile, const char* relocFile, vc_vector* inputFilesVector);
+659
View File
@@ -0,0 +1,659 @@
/* This file contains enough of the ELF format definitions for MIPS to enable Fairy and Fado to work. More may need to
* be added later. The content is excerpted directly from elf.h from the GNU C Library, and therefore: */
/* Copyright (C) 1995-2020 Free Software Foundation, Inc. */
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#ifndef MIPS_ELF_H
#define MIPS_ELF_H
#include <stdint.h>
/* Type for a 16-bit quantity. */
typedef uint16_t Elf32_Half;
/* Types for signed and unsigned 32-bit quantities. */
typedef uint32_t Elf32_Word;
typedef int32_t Elf32_Sword;
/* Types for signed and unsigned 64-bit quantities. */
typedef uint64_t Elf32_Xword;
typedef int64_t Elf32_Sxword;
/* Type of addresses. */
typedef uint32_t Elf32_Addr;
/* Type of file offsets. */
typedef uint32_t Elf32_Off;
/* Type for section indices, which are 16-bit quantities. */
typedef uint16_t Elf32_Section;
/* The ELF file header. This appears at the start of every ELF file. */
#define EI_NIDENT (16)
typedef struct {
unsigned char e_ident[EI_NIDENT]; /* Magic number and other info */
Elf32_Half e_type; /* Object file type */
Elf32_Half e_machine; /* Architecture */
Elf32_Word e_version; /* Object file version */
Elf32_Addr e_entry; /* Entry point virtual address */
Elf32_Off e_phoff; /* Program header table file offset */
Elf32_Off e_shoff; /* Section header table file offset */
Elf32_Word e_flags; /* Processor-specific flags */
Elf32_Half e_ehsize; /* ELF header size in bytes */
Elf32_Half e_phentsize; /* Program header table entry size */
Elf32_Half e_phnum; /* Program header table entry count */
Elf32_Half e_shentsize; /* Section header table entry size */
Elf32_Half e_shnum; /* Section header table entry count */
Elf32_Half e_shstrndx; /* Section header string table index */
} Elf32_Ehdr;
/* Fields in the e_ident array. The EI_* macros are indices into the
array. The macros under each EI_* macro are the values the byte
may have. */
#define EI_MAG0 0 /* File identification byte 0 index */
#define ELFMAG0 0x7f /* Magic number byte 0 */
#define EI_MAG1 1 /* File identification byte 1 index */
#define ELFMAG1 'E' /* Magic number byte 1 */
#define EI_MAG2 2 /* File identification byte 2 index */
#define ELFMAG2 'L' /* Magic number byte 2 */
#define EI_MAG3 3 /* File identification byte 3 index */
#define ELFMAG3 'F' /* Magic number byte 3 */
/* Conglomeration of the identification bytes, for easy testing as a word. */
#define ELFMAG "\177ELF"
#define SELFMAG 4
#define EI_CLASS 4 /* File class byte index */
#define ELFCLASSNONE 0 /* Invalid class */
#define ELFCLASS32 1 /* 32-bit objects */
#define ELFCLASS64 2 /* 64-bit objects */
#define ELFCLASSNUM 3
#define EI_DATA 5 /* Data encoding byte index */
#define ELFDATANONE 0 /* Invalid data encoding */
#define ELFDATA2LSB 1 /* 2's complement, little endian */
#define ELFDATA2MSB 2 /* 2's complement, big endian */
#define ELFDATANUM 3
#define EI_VERSION 6 /* File version byte index */
/* Value must be EV_CURRENT */
#define EI_OSABI 7 /* OS ABI identification */
#define ELFOSABI_NONE 0 /* UNIX System V ABI */
#define ELFOSABI_SYSV 0 /* Alias. */
#define ELFOSABI_HPUX 1 /* HP-UX */
#define ELFOSABI_NETBSD 2 /* NetBSD. */
#define ELFOSABI_GNU 3 /* Object uses GNU ELF extensions. */
#define ELFOSABI_LINUX ELFOSABI_GNU /* Compatibility alias. */
#define ELFOSABI_SOLARIS 6 /* Sun Solaris. */
#define ELFOSABI_AIX 7 /* IBM AIX. */
#define ELFOSABI_IRIX 8 /* SGI Irix. */
#define ELFOSABI_FREEBSD 9 /* FreeBSD. */
#define ELFOSABI_TRU64 10 /* Compaq TRU64 UNIX. */
#define ELFOSABI_MODESTO 11 /* Novell Modesto. */
#define ELFOSABI_OPENBSD 12 /* OpenBSD. */
#define ELFOSABI_ARM_AEABI 64 /* ARM EABI */
#define ELFOSABI_ARM 97 /* ARM */
#define ELFOSABI_STANDALONE 255 /* Standalone (embedded) application */
#define EI_ABIVERSION 8 /* ABI version */
#define EI_PAD 9 /* Byte index of padding bytes */
/* Legal values for e_type (object file type). */
#define ET_NONE 0 /* No file type */
#define ET_REL 1 /* Relocatable file */
#define ET_EXEC 2 /* Executable file */
#define ET_DYN 3 /* Shared object file */
#define ET_CORE 4 /* Core file */
#define ET_NUM 5 /* Number of defined types */
#define ET_LOOS 0xfe00 /* OS-specific range start */
#define ET_HIOS 0xfeff /* OS-specific range end */
#define ET_LOPROC 0xff00 /* Processor-specific range start */
#define ET_HIPROC 0xffff /* Processor-specific range end */
/* Legal values for e_machine (architecture). */
#define EM_NONE 0 /* No machine */
#define EM_M32 1 /* AT&T WE 32100 */
#define EM_SPARC 2 /* SUN SPARC */
#define EM_386 3 /* Intel 80386 */
#define EM_68K 4 /* Motorola m68k family */
#define EM_88K 5 /* Motorola m88k family */
#define EM_IAMCU 6 /* Intel MCU */
#define EM_860 7 /* Intel 80860 */
#define EM_MIPS 8 /* MIPS R3000 big-endian */
#define EM_S370 9 /* IBM System/370 */
#define EM_MIPS_RS3_LE 10 /* MIPS R3000 little-endian */
/* reserved 11-14 */
#define EM_PARISC 15 /* HPPA */
/* reserved 16 */
#define EM_VPP500 17 /* Fujitsu VPP500 */
#define EM_SPARC32PLUS 18 /* Sun's "v8plus" */
#define EM_960 19 /* Intel 80960 */
#define EM_PPC 20 /* PowerPC */
#define EM_PPC64 21 /* PowerPC 64-bit */
#define EM_S390 22 /* IBM S390 */
#define EM_SPU 23 /* IBM SPU/SPC */
/* reserved 24-35 */
#define EM_V800 36 /* NEC V800 series */
#define EM_FR20 37 /* Fujitsu FR20 */
#define EM_RH32 38 /* TRW RH-32 */
#define EM_RCE 39 /* Motorola RCE */
#define EM_ARM 40 /* ARM */
#define EM_FAKE_ALPHA 41 /* Digital Alpha */
#define EM_SH 42 /* Hitachi SH */
#define EM_SPARCV9 43 /* SPARC v9 64-bit */
#define EM_TRICORE 44 /* Siemens Tricore */
#define EM_ARC 45 /* Argonaut RISC Core */
#define EM_H8_300 46 /* Hitachi H8/300 */
#define EM_H8_300H 47 /* Hitachi H8/300H */
#define EM_H8S 48 /* Hitachi H8S */
#define EM_H8_500 49 /* Hitachi H8/500 */
#define EM_IA_64 50 /* Intel Merced */
#define EM_MIPS_X 51 /* Stanford MIPS-X */
#define EM_COLDFIRE 52 /* Motorola Coldfire */
#define EM_68HC12 53 /* Motorola M68HC12 */
#define EM_MMA 54 /* Fujitsu MMA Multimedia Accelerator */
#define EM_PCP 55 /* Siemens PCP */
#define EM_NCPU 56 /* Sony nCPU embeeded RISC */
#define EM_NDR1 57 /* Denso NDR1 microprocessor */
#define EM_STARCORE 58 /* Motorola Start*Core processor */
#define EM_ME16 59 /* Toyota ME16 processor */
#define EM_ST100 60 /* STMicroelectronic ST100 processor */
#define EM_TINYJ 61 /* Advanced Logic Corp. Tinyj emb.fam */
#define EM_X86_64 62 /* AMD x86-64 architecture */
#define EM_PDSP 63 /* Sony DSP Processor */
#define EM_PDP10 64 /* Digital PDP-10 */
#define EM_PDP11 65 /* Digital PDP-11 */
#define EM_FX66 66 /* Siemens FX66 microcontroller */
#define EM_ST9PLUS 67 /* STMicroelectronics ST9+ 8/16 mc */
#define EM_ST7 68 /* STmicroelectronics ST7 8 bit mc */
#define EM_68HC16 69 /* Motorola MC68HC16 microcontroller */
#define EM_68HC11 70 /* Motorola MC68HC11 microcontroller */
#define EM_68HC08 71 /* Motorola MC68HC08 microcontroller */
#define EM_68HC05 72 /* Motorola MC68HC05 microcontroller */
#define EM_SVX 73 /* Silicon Graphics SVx */
#define EM_ST19 74 /* STMicroelectronics ST19 8 bit mc */
#define EM_VAX 75 /* Digital VAX */
#define EM_CRIS 76 /* Axis Communications 32-bit emb.proc */
#define EM_JAVELIN 77 /* Infineon Technologies 32-bit emb.proc */
#define EM_FIREPATH 78 /* Element 14 64-bit DSP Processor */
#define EM_ZSP 79 /* LSI Logic 16-bit DSP Processor */
#define EM_MMIX 80 /* Donald Knuth's educational 64-bit proc */
#define EM_HUANY 81 /* Harvard University machine-independent object files */
#define EM_PRISM 82 /* SiTera Prism */
#define EM_AVR 83 /* Atmel AVR 8-bit microcontroller */
#define EM_FR30 84 /* Fujitsu FR30 */
#define EM_D10V 85 /* Mitsubishi D10V */
#define EM_D30V 86 /* Mitsubishi D30V */
#define EM_V850 87 /* NEC v850 */
#define EM_M32R 88 /* Mitsubishi M32R */
#define EM_MN10300 89 /* Matsushita MN10300 */
#define EM_MN10200 90 /* Matsushita MN10200 */
#define EM_PJ 91 /* picoJava */
#define EM_OPENRISC 92 /* OpenRISC 32-bit embedded processor */
#define EM_ARC_COMPACT 93 /* ARC International ARCompact */
#define EM_XTENSA 94 /* Tensilica Xtensa Architecture */
#define EM_VIDEOCORE 95 /* Alphamosaic VideoCore */
#define EM_TMM_GPP 96 /* Thompson Multimedia General Purpose Proc */
#define EM_NS32K 97 /* National Semi. 32000 */
#define EM_TPC 98 /* Tenor Network TPC */
#define EM_SNP1K 99 /* Trebia SNP 1000 */
#define EM_ST200 100 /* STMicroelectronics ST200 */
#define EM_IP2K 101 /* Ubicom IP2xxx */
#define EM_MAX 102 /* MAX processor */
#define EM_CR 103 /* National Semi. CompactRISC */
#define EM_F2MC16 104 /* Fujitsu F2MC16 */
#define EM_MSP430 105 /* Texas Instruments msp430 */
#define EM_BLACKFIN 106 /* Analog Devices Blackfin DSP */
#define EM_SE_C33 107 /* Seiko Epson S1C33 family */
#define EM_SEP 108 /* Sharp embedded microprocessor */
#define EM_ARCA 109 /* Arca RISC */
#define EM_UNICORE 110 /* PKU-Unity & MPRC Peking Uni. mc series */
#define EM_EXCESS 111 /* eXcess configurable cpu */
#define EM_DXP 112 /* Icera Semi. Deep Execution Processor */
#define EM_ALTERA_NIOS2 113 /* Altera Nios II */
#define EM_CRX 114 /* National Semi. CompactRISC CRX */
#define EM_XGATE 115 /* Motorola XGATE */
#define EM_C166 116 /* Infineon C16x/XC16x */
#define EM_M16C 117 /* Renesas M16C */
#define EM_DSPIC30F 118 /* Microchip Technology dsPIC30F */
#define EM_CE 119 /* Freescale Communication Engine RISC */
#define EM_M32C 120 /* Renesas M32C */
/* reserved 121-130 */
#define EM_TSK3000 131 /* Altium TSK3000 */
#define EM_RS08 132 /* Freescale RS08 */
#define EM_SHARC 133 /* Analog Devices SHARC family */
#define EM_ECOG2 134 /* Cyan Technology eCOG2 */
#define EM_SCORE7 135 /* Sunplus S+core7 RISC */
#define EM_DSP24 136 /* New Japan Radio (NJR) 24-bit DSP */
#define EM_VIDEOCORE3 137 /* Broadcom VideoCore III */
#define EM_LATTICEMICO32 138 /* RISC for Lattice FPGA */
#define EM_SE_C17 139 /* Seiko Epson C17 */
#define EM_TI_C6000 140 /* Texas Instruments TMS320C6000 DSP */
#define EM_TI_C2000 141 /* Texas Instruments TMS320C2000 DSP */
#define EM_TI_C5500 142 /* Texas Instruments TMS320C55x DSP */
#define EM_TI_ARP32 143 /* Texas Instruments App. Specific RISC */
#define EM_TI_PRU 144 /* Texas Instruments Prog. Realtime Unit */
/* reserved 145-159 */
#define EM_MMDSP_PLUS 160 /* STMicroelectronics 64bit VLIW DSP */
#define EM_CYPRESS_M8C 161 /* Cypress M8C */
#define EM_R32C 162 /* Renesas R32C */
#define EM_TRIMEDIA 163 /* NXP Semi. TriMedia */
#define EM_QDSP6 164 /* QUALCOMM DSP6 */
#define EM_8051 165 /* Intel 8051 and variants */
#define EM_STXP7X 166 /* STMicroelectronics STxP7x */
#define EM_NDS32 167 /* Andes Tech. compact code emb. RISC */
#define EM_ECOG1X 168 /* Cyan Technology eCOG1X */
#define EM_MAXQ30 169 /* Dallas Semi. MAXQ30 mc */
#define EM_XIMO16 170 /* New Japan Radio (NJR) 16-bit DSP */
#define EM_MANIK 171 /* M2000 Reconfigurable RISC */
#define EM_CRAYNV2 172 /* Cray NV2 vector architecture */
#define EM_RX 173 /* Renesas RX */
#define EM_METAG 174 /* Imagination Tech. META */
#define EM_MCST_ELBRUS 175 /* MCST Elbrus */
#define EM_ECOG16 176 /* Cyan Technology eCOG16 */
#define EM_CR16 177 /* National Semi. CompactRISC CR16 */
#define EM_ETPU 178 /* Freescale Extended Time Processing Unit */
#define EM_SLE9X 179 /* Infineon Tech. SLE9X */
#define EM_L10M 180 /* Intel L10M */
#define EM_K10M 181 /* Intel K10M */
/* reserved 182 */
#define EM_AARCH64 183 /* ARM AARCH64 */
/* reserved 184 */
#define EM_AVR32 185 /* Amtel 32-bit microprocessor */
#define EM_STM8 186 /* STMicroelectronics STM8 */
#define EM_TILE64 187 /* Tileta TILE64 */
#define EM_TILEPRO 188 /* Tilera TILEPro */
#define EM_MICROBLAZE 189 /* Xilinx MicroBlaze */
#define EM_CUDA 190 /* NVIDIA CUDA */
#define EM_TILEGX 191 /* Tilera TILE-Gx */
#define EM_CLOUDSHIELD 192 /* CloudShield */
#define EM_COREA_1ST 193 /* KIPO-KAIST Core-A 1st gen. */
#define EM_COREA_2ND 194 /* KIPO-KAIST Core-A 2nd gen. */
#define EM_ARC_COMPACT2 195 /* Synopsys ARCompact V2 */
#define EM_OPEN8 196 /* Open8 RISC */
#define EM_RL78 197 /* Renesas RL78 */
#define EM_VIDEOCORE5 198 /* Broadcom VideoCore V */
#define EM_78KOR 199 /* Renesas 78KOR */
#define EM_56800EX 200 /* Freescale 56800EX DSC */
#define EM_BA1 201 /* Beyond BA1 */
#define EM_BA2 202 /* Beyond BA2 */
#define EM_XCORE 203 /* XMOS xCORE */
#define EM_MCHP_PIC 204 /* Microchip 8-bit PIC(r) */
/* reserved 205-209 */
#define EM_KM32 210 /* KM211 KM32 */
#define EM_KMX32 211 /* KM211 KMX32 */
#define EM_EMX16 212 /* KM211 KMX16 */
#define EM_EMX8 213 /* KM211 KMX8 */
#define EM_KVARC 214 /* KM211 KVARC */
#define EM_CDP 215 /* Paneve CDP */
#define EM_COGE 216 /* Cognitive Smart Memory Processor */
#define EM_COOL 217 /* Bluechip CoolEngine */
#define EM_NORC 218 /* Nanoradio Optimized RISC */
#define EM_CSR_KALIMBA 219 /* CSR Kalimba */
#define EM_Z80 220 /* Zilog Z80 */
#define EM_VISIUM 221 /* Controls and Data Services VISIUMcore */
#define EM_FT32 222 /* FTDI Chip FT32 */
#define EM_MOXIE 223 /* Moxie processor */
#define EM_AMDGPU 224 /* AMD GPU */
/* reserved 225-242 */
#define EM_RISCV 243 /* RISC-V */
#define EM_BPF 247 /* Linux BPF -- in-kernel virtual machine */
#define EM_CSKY 252 /* C-SKY */
#define EM_NUM 253
/* Old spellings/synonyms. */
#define EM_ARC_A5 EM_ARC_COMPACT
/* If it is necessary to assign new unofficial EM_* values, please
pick large random numbers (0x8523, 0xa7f2, etc.) to minimize the
chances of collision with official or non-GNU unofficial values. */
#define EM_ALPHA 0x9026
/* Legal values for e_version (version). */
#define EV_NONE 0 /* Invalid ELF version */
#define EV_CURRENT 1 /* Current version */
#define EV_NUM 2
/* Section header. */
typedef struct {
Elf32_Word sh_name; /* Section name (string tbl index) */
Elf32_Word sh_type; /* Section type */
Elf32_Word sh_flags; /* Section flags */
Elf32_Addr sh_addr; /* Section virtual addr at execution */
Elf32_Off sh_offset; /* Section file offset */
Elf32_Word sh_size; /* Section size in bytes */
Elf32_Word sh_link; /* Link to another section */
Elf32_Word sh_info; /* Additional section information */
Elf32_Word sh_addralign; /* Section alignment */
Elf32_Word sh_entsize; /* Entry size if section holds table */
} Elf32_Shdr;
/* Special section indices. */
#define SHN_UNDEF 0 /* Undefined section */
#define SHN_LORESERVE 0xff00 /* Start of reserved indices */
#define SHN_LOPROC 0xff00 /* Start of processor-specific */
#define SHN_BEFORE 0xff00 /* Order section before all others (Solaris). */
#define SHN_AFTER 0xff01 /* Order section after all others (Solaris). */
#define SHN_HIPROC 0xff1f /* End of processor-specific */
#define SHN_LOOS 0xff20 /* Start of OS-specific */
#define SHN_HIOS 0xff3f /* End of OS-specific */
#define SHN_ABS 0xfff1 /* Associated symbol is absolute */
#define SHN_COMMON 0xfff2 /* Associated symbol is common */
#define SHN_XINDEX 0xffff /* Index is in extra table. */
#define SHN_HIRESERVE 0xffff /* End of reserved indices */
/* Legal values for sh_type (section type). */
#define SHT_NULL 0 /* Section header table entry unused */
#define SHT_PROGBITS 1 /* Program data */
#define SHT_SYMTAB 2 /* Symbol table */
#define SHT_STRTAB 3 /* String table */
#define SHT_RELA 4 /* Relocation entries with addends */
#define SHT_HASH 5 /* Symbol hash table */
#define SHT_DYNAMIC 6 /* Dynamic linking information */
#define SHT_NOTE 7 /* Notes */
#define SHT_NOBITS 8 /* Program space with no data (bss) */
#define SHT_REL 9 /* Relocation entries, no addends */
#define SHT_SHLIB 10 /* Reserved */
#define SHT_DYNSYM 11 /* Dynamic linker symbol table */
#define SHT_INIT_ARRAY 14 /* Array of constructors */
#define SHT_FINI_ARRAY 15 /* Array of destructors */
#define SHT_PREINIT_ARRAY 16 /* Array of pre-constructors */
#define SHT_GROUP 17 /* Section group */
#define SHT_SYMTAB_SHNDX 18 /* Extended section indeces */
#define SHT_NUM 19 /* Number of defined types. */
#define SHT_LOOS 0x60000000 /* Start OS-specific. */
#define SHT_GNU_ATTRIBUTES 0x6ffffff5 /* Object attributes. */
#define SHT_GNU_HASH 0x6ffffff6 /* GNU-style hash table. */
#define SHT_GNU_LIBLIST 0x6ffffff7 /* Prelink library list */
#define SHT_CHECKSUM 0x6ffffff8 /* Checksum for DSO content. */
#define SHT_LOSUNW 0x6ffffffa /* Sun-specific low bound. */
#define SHT_SUNW_move 0x6ffffffa
#define SHT_SUNW_COMDAT 0x6ffffffb
#define SHT_SUNW_syminfo 0x6ffffffc
#define SHT_GNU_verdef 0x6ffffffd /* Version definition section. */
#define SHT_GNU_verneed 0x6ffffffe /* Version needs section. */
#define SHT_GNU_versym 0x6fffffff /* Version symbol table. */
#define SHT_HISUNW 0x6fffffff /* Sun-specific high bound. */
#define SHT_HIOS 0x6fffffff /* End OS-specific type */
#define SHT_LOPROC 0x70000000 /* Start of processor-specific */
#define SHT_HIPROC 0x7fffffff /* End of processor-specific */
#define SHT_LOUSER 0x80000000 /* Start of application-specific */
#define SHT_HIUSER 0x8fffffff /* End of application-specific */
/* Symbol table entry. */
typedef struct {
Elf32_Word st_name; /* Symbol name (string tbl index) */
Elf32_Addr st_value; /* Symbol value */
Elf32_Word st_size; /* Symbol size */
unsigned char st_info; /* Symbol type and binding */
unsigned char st_other; /* Symbol visibility */
Elf32_Section st_shndx; /* Section index */
} Elf32_Sym;
/* How to extract and insert information held in the st_info field. */
#define ELF32_ST_BIND(val) (((unsigned char)(val)) >> 4)
#define ELF32_ST_TYPE(val) ((val)&0xf)
#define ELF32_ST_INFO(bind, type) (((bind) << 4) + ((type)&0xf))
/* Both Elf32_Sym and Elf64_Sym use the same one-byte st_info field. */
#define ELF64_ST_BIND(val) ELF32_ST_BIND(val)
#define ELF64_ST_TYPE(val) ELF32_ST_TYPE(val)
#define ELF64_ST_INFO(bind, type) ELF32_ST_INFO((bind), (type))
/* Legal values for ST_BIND subfield of st_info (symbol binding). */
#define STB_LOCAL 0 /* Local symbol */
#define STB_GLOBAL 1 /* Global symbol */
#define STB_WEAK 2 /* Weak symbol */
#define STB_NUM 3 /* Number of defined types. */
#define STB_LOOS 10 /* Start of OS-specific */
#define STB_GNU_UNIQUE 10 /* Unique symbol. */
#define STB_HIOS 12 /* End of OS-specific */
#define STB_LOPROC 13 /* Start of processor-specific */
#define STB_HIPROC 15 /* End of processor-specific */
/* Legal values for ST_TYPE subfield of st_info (symbol type). */
#define STT_NOTYPE 0 /* Symbol type is unspecified */
#define STT_OBJECT 1 /* Symbol is a data object */
#define STT_FUNC 2 /* Symbol is a code object */
#define STT_SECTION 3 /* Symbol associated with a section */
#define STT_FILE 4 /* Symbol's name is file name */
#define STT_COMMON 5 /* Symbol is a common data object */
#define STT_TLS 6 /* Symbol is thread-local data object*/
#define STT_NUM 7 /* Number of defined types. */
#define STT_LOOS 10 /* Start of OS-specific */
#define STT_GNU_IFUNC 10 /* Symbol is indirect code object */
#define STT_HIOS 12 /* End of OS-specific */
#define STT_LOPROC 13 /* Start of processor-specific */
#define STT_HIPROC 15 /* End of processor-specific */
/* Symbol table indices are found in the hash buckets and chain table
of a symbol hash table section. This special index value indicates
the end of a chain, meaning no further symbols are found in that bucket. */
#define STN_UNDEF 0 /* End of a chain. */
/* How to extract and insert information held in the st_other field. */
#define ELF32_ST_VISIBILITY(o) ((o)&0x03)
/* For ELF64 the definitions are the same. */
#define ELF64_ST_VISIBILITY(o) ELF32_ST_VISIBILITY(o)
/* Symbol visibility specification encoded in the st_other field. */
#define STV_DEFAULT 0 /* Default symbol visibility rules */
#define STV_INTERNAL 1 /* Processor specific hidden class */
#define STV_HIDDEN 2 /* Sym unavailable in other modules */
#define STV_PROTECTED 3 /* Not preemptible, not exported */
/* Relocation table entry without addend (in section of type SHT_REL). */
typedef struct {
Elf32_Addr r_offset; /* Address */
Elf32_Word r_info; /* Relocation type and symbol index */
} Elf32_Rel;
/* Relocation table entry with addend (in section of type SHT_RELA). */
typedef struct {
Elf32_Addr r_offset; /* Address */
Elf32_Word r_info; /* Relocation type and symbol index */
Elf32_Sword r_addend; /* Addend */
} Elf32_Rela;
/* How to extract and insert information held in the r_info field. */
#define ELF32_R_SYM(val) ((val) >> 8)
#define ELF32_R_TYPE(val) ((val)&0xff)
#define ELF32_R_INFO(sym, type) (((sym) << 8) + ((type)&0xff))
/* MIPS R3000 specific definitions. */
/* Legal values for e_flags field of Elf32_Ehdr. */
#define EF_MIPS_NOREORDER 1 /* A .noreorder directive was used. */
#define EF_MIPS_PIC 2 /* Contains PIC code. */
#define EF_MIPS_CPIC 4 /* Uses PIC calling sequence. */
#define EF_MIPS_XGOT 8
#define EF_MIPS_64BIT_WHIRL 16
#define EF_MIPS_ABI2 32
#define EF_MIPS_ABI_ON32 64
#define EF_MIPS_FP64 512 /* Uses FP64 (12 callee-saved). */
#define EF_MIPS_NAN2008 1024 /* Uses IEEE 754-2008 NaN encoding. */
#define EF_MIPS_ARCH 0xf0000000 /* MIPS architecture level. */
/* Legal values for MIPS architecture level. */
#define EF_MIPS_ARCH_1 0x00000000 /* -mips1 code. */
#define EF_MIPS_ARCH_2 0x10000000 /* -mips2 code. */
#define EF_MIPS_ARCH_3 0x20000000 /* -mips3 code. */
#define EF_MIPS_ARCH_4 0x30000000 /* -mips4 code. */
#define EF_MIPS_ARCH_5 0x40000000 /* -mips5 code. */
#define EF_MIPS_ARCH_32 0x50000000 /* MIPS32 code. */
#define EF_MIPS_ARCH_64 0x60000000 /* MIPS64 code. */
#define EF_MIPS_ARCH_32R2 0x70000000 /* MIPS32r2 code. */
#define EF_MIPS_ARCH_64R2 0x80000000 /* MIPS64r2 code. */
/* The following are unofficial names and should not be used. */
#define E_MIPS_ARCH_1 EF_MIPS_ARCH_1
#define E_MIPS_ARCH_2 EF_MIPS_ARCH_2
#define E_MIPS_ARCH_3 EF_MIPS_ARCH_3
#define E_MIPS_ARCH_4 EF_MIPS_ARCH_4
#define E_MIPS_ARCH_5 EF_MIPS_ARCH_5
#define E_MIPS_ARCH_32 EF_MIPS_ARCH_32
#define E_MIPS_ARCH_64 EF_MIPS_ARCH_64
/* Special section indices. */
#define SHN_MIPS_ACOMMON 0xff00 /* Allocated common symbols. */
#define SHN_MIPS_TEXT 0xff01 /* Allocated test symbols. */
#define SHN_MIPS_DATA 0xff02 /* Allocated data symbols. */
#define SHN_MIPS_SCOMMON 0xff03 /* Small common symbols. */
#define SHN_MIPS_SUNDEFINED 0xff04 /* Small undefined symbols. */
/* Legal values for sh_type field of Elf32_Shdr. */
#define SHT_MIPS_LIBLIST 0x70000000 /* Shared objects used in link. */
#define SHT_MIPS_MSYM 0x70000001
#define SHT_MIPS_CONFLICT 0x70000002 /* Conflicting symbols. */
#define SHT_MIPS_GPTAB 0x70000003 /* Global data area sizes. */
#define SHT_MIPS_UCODE 0x70000004 /* Reserved for SGI/MIPS compilers */
#define SHT_MIPS_DEBUG 0x70000005 /* MIPS ECOFF debugging info. */
#define SHT_MIPS_REGINFO 0x70000006 /* Register usage information. */
#define SHT_MIPS_PACKAGE 0x70000007
#define SHT_MIPS_PACKSYM 0x70000008
#define SHT_MIPS_RELD 0x70000009
#define SHT_MIPS_IFACE 0x7000000b
#define SHT_MIPS_CONTENT 0x7000000c
#define SHT_MIPS_OPTIONS 0x7000000d /* Miscellaneous options. */
#define SHT_MIPS_SHDR 0x70000010
#define SHT_MIPS_FDESC 0x70000011
#define SHT_MIPS_EXTSYM 0x70000012
#define SHT_MIPS_DENSE 0x70000013
#define SHT_MIPS_PDESC 0x70000014
#define SHT_MIPS_LOCSYM 0x70000015
#define SHT_MIPS_AUXSYM 0x70000016
#define SHT_MIPS_OPTSYM 0x70000017
#define SHT_MIPS_LOCSTR 0x70000018
#define SHT_MIPS_LINE 0x70000019
#define SHT_MIPS_RFDESC 0x7000001a
#define SHT_MIPS_DELTASYM 0x7000001b
#define SHT_MIPS_DELTAINST 0x7000001c
#define SHT_MIPS_DELTACLASS 0x7000001d
#define SHT_MIPS_DWARF 0x7000001e /* DWARF debugging information. */
#define SHT_MIPS_DELTADECL 0x7000001f
#define SHT_MIPS_SYMBOL_LIB 0x70000020
#define SHT_MIPS_EVENTS 0x70000021 /* Event section. */
#define SHT_MIPS_TRANSLATE 0x70000022
#define SHT_MIPS_PIXIE 0x70000023
#define SHT_MIPS_XLATE 0x70000024
#define SHT_MIPS_XLATE_DEBUG 0x70000025
#define SHT_MIPS_WHIRL 0x70000026
#define SHT_MIPS_EH_REGION 0x70000027
#define SHT_MIPS_XLATE_OLD 0x70000028
#define SHT_MIPS_PDR_EXCEPTION 0x70000029
#define SHT_MIPS_XHASH 0x7000002b
/* Legal values for sh_flags field of Elf32_Shdr. */
#define SHF_MIPS_GPREL 0x10000000 /* Must be in global data area. */
#define SHF_MIPS_MERGE 0x20000000
#define SHF_MIPS_ADDR 0x40000000
#define SHF_MIPS_STRINGS 0x80000000
#define SHF_MIPS_NOSTRIP 0x08000000
#define SHF_MIPS_LOCAL 0x04000000
#define SHF_MIPS_NAMES 0x02000000
#define SHF_MIPS_NODUPE 0x01000000
/* Symbol tables. */
/* MIPS specific values for `st_other'. */
#define STO_MIPS_DEFAULT 0x0
#define STO_MIPS_INTERNAL 0x1
#define STO_MIPS_HIDDEN 0x2
#define STO_MIPS_PROTECTED 0x3
#define STO_MIPS_PLT 0x8
#define STO_MIPS_SC_ALIGN_UNUSED 0xff
/* MIPS specific values for `st_info'. */
#define STB_MIPS_SPLIT_COMMON 13
/* MIPS relocs. */
#define R_MIPS_NONE 0 /* No reloc */
#define R_MIPS_16 1 /* Direct 16 bit */
#define R_MIPS_32 2 /* Direct 32 bit */
#define R_MIPS_REL32 3 /* PC relative 32 bit */
#define R_MIPS_26 4 /* Direct 26 bit shifted */
#define R_MIPS_HI16 5 /* High 16 bit */
#define R_MIPS_LO16 6 /* Low 16 bit */
#define R_MIPS_GPREL16 7 /* GP relative 16 bit */
#define R_MIPS_LITERAL 8 /* 16 bit literal entry */
#define R_MIPS_GOT16 9 /* 16 bit GOT entry */
#define R_MIPS_PC16 10 /* PC relative 16 bit */
#define R_MIPS_CALL16 11 /* 16 bit GOT entry for function */
#define R_MIPS_GPREL32 12 /* GP relative 32 bit */
#define R_MIPS_SHIFT5 16
#define R_MIPS_SHIFT6 17
#define R_MIPS_64 18
#define R_MIPS_GOT_DISP 19
#define R_MIPS_GOT_PAGE 20
#define R_MIPS_GOT_OFST 21
#define R_MIPS_GOT_HI16 22
#define R_MIPS_GOT_LO16 23
#define R_MIPS_SUB 24
#define R_MIPS_INSERT_A 25
#define R_MIPS_INSERT_B 26
#define R_MIPS_DELETE 27
#define R_MIPS_HIGHER 28
#define R_MIPS_HIGHEST 29
#define R_MIPS_CALL_HI16 30
#define R_MIPS_CALL_LO16 31
#define R_MIPS_SCN_DISP 32
#define R_MIPS_REL16 33
#define R_MIPS_ADD_IMMEDIATE 34
#define R_MIPS_PJUMP 35
#define R_MIPS_RELGOT 36
#define R_MIPS_JALR 37
#define R_MIPS_TLS_DTPMOD32 38 /* Module number 32 bit */
#define R_MIPS_TLS_DTPREL32 39 /* Module-relative offset 32 bit */
#define R_MIPS_TLS_DTPMOD64 40 /* Module number 64 bit */
#define R_MIPS_TLS_DTPREL64 41 /* Module-relative offset 64 bit */
#define R_MIPS_TLS_GD 42 /* 16 bit GOT offset for GD */
#define R_MIPS_TLS_LDM 43 /* 16 bit GOT offset for LDM */
#define R_MIPS_TLS_DTPREL_HI16 44 /* Module-relative offset, high 16 bits */
#define R_MIPS_TLS_DTPREL_LO16 45 /* Module-relative offset, low 16 bits */
#define R_MIPS_TLS_GOTTPREL 46 /* 16 bit GOT offset for IE */
#define R_MIPS_TLS_TPREL32 47 /* TP-relative offset, 32 bit */
#define R_MIPS_TLS_TPREL64 48 /* TP-relative offset, 64 bit */
#define R_MIPS_TLS_TPREL_HI16 49 /* TP-relative offset, high 16 bits */
#define R_MIPS_TLS_TPREL_LO16 50 /* TP-relative offset, low 16 bits */
#define R_MIPS_GLOB_DAT 51
#define R_MIPS_COPY 126
#define R_MIPS_JUMP_SLOT 127
/* Keep this the last entry. */
#define R_MIPS_NUM 128
#endif /* MIPS_ELF_H */
+418
View File
@@ -0,0 +1,418 @@
/**
* Functions for working with N64 ELF files.
*/
/* Copyright (C) 2021 Elliptic Ellipsis */
/* SPDX-License-Identifier: AGPL-3.0-only */
#include "fairy.h"
#include <assert.h>
#include <stdarg.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "vc_vector/vc_vector.h"
#include "macros.h"
VerbosityLevel gVerbosity = VERBOSITY_NONE;
bool gUseElfAlignment = false;
int Fairy_DebugPrintf(const char* file, int line, const char* func, VerbosityLevel level, const char* fmt, ...) {
if (gVerbosity >= level) {
int ret = 0;
va_list args;
va_start(args, fmt);
if (gVerbosity >= VERBOSITY_DEBUG) {
ret += fprintf(stderr, "%s:%d:%s: ", file, line, func);
}
ret += vfprintf(stderr, fmt, args);
va_end(args);
return ret;
}
return 0;
}
/* Endian readers. MIPS is BE, so only need these */
static Elf32_Half Fairy_ReadHalf(const uint8_t* data) {
return data[0] << 8 | data[1] << 0;
}
static Elf32_Word Fairy_ReadWord(const uint8_t* data) {
return data[0] << 24 | data[1] << 16 | data[2] << 8 | data[3] << 0;
}
static bool Fairy_VerifyMagic(const uint8_t* data) {
return (data[0] == 0x7F && data[1] == 'E' && data[2] == 'L' && data[3] == 'F');
}
static uint16_t Fairy_Swap16(uint16_t x) {
return ((x & 0xFF) << 0x8) | ((x & 0xFF00) >> 0x8);
}
static uint32_t Fairy_Swap32(uint32_t x) {
return ((x & 0xFF) << 0x18) | ((x & 0xFF00) << 0x8) | ((x & 0xFF0000) >> 0x8) | ((x & 0xFF000000) >> 0x18);
}
/* Both GCC and Clang define these, so we can avoid an endian header altogether */
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
#define REEND16(x) Fairy_Swap16(x)
#define REEND32(x) Fairy_Swap32(x)
#else
#define REEND16(x) (x)
#define REEND32(x) (x)
#endif
const char* Fairy_StringFromDefine(const FairyDefineString* dict, int define) {
size_t i;
for (i = 0; dict[i].string != NULL; i++) {
if (dict[i].define == define) {
return dict[i].string;
}
}
return NULL;
}
/**
* Returns true if the string 'initial' is contained in the string 'string'
* 'initial' must be null-terminated, 'string' ideally is.
*/
bool Fairy_StartsWith(const char* string, const char* initial) {
char s;
char i;
do {
s = *string++;
i = *initial++;
if (i == '\0') {
return true;
}
} while (s == i);
return false;
}
/* Reading functions */
/**
* Every reading function:
* - Returns the pointer to the struct
* - Takes the ouput struct or array as its first argument. This must be pre-allocated
* - Takes the input file as the second argument (At least until I am persuaded to read the whole file into RAM...)
* - The rest of the arguments are important information about the struct it is reading (offset and size, usually)
*/
FairyFileHeader* Fairy_ReadFileHeader(FairyFileHeader* header, FILE* file) {
fseek(file, 0, SEEK_SET);
assert(fread(header, sizeof(char), 0x34, file) == 0x34);
if (!Fairy_VerifyMagic(header->e_ident)) {
fprintf(stderr, "Not a valid ELF file.\n");
return NULL;
}
if (header->e_ident[EI_CLASS] != ELFCLASS32) {
fprintf(stderr, "Not a 32-bit ELF file.\n");
return NULL;
}
header->e_type = REEND16(header->e_type);
if (header->e_type != ET_REL) {
fprintf(stderr, "Not a relocatable object file.\n");
return NULL;
}
header->e_machine = REEND16(header->e_machine);
if (header->e_machine != EM_MIPS) {
fprintf(stderr, "Not a MIPS object file.\n");
return NULL;
}
header->e_version = REEND32(header->e_version);
header->e_entry = REEND32(header->e_entry);
header->e_phoff = REEND32(header->e_phoff);
header->e_shoff = REEND32(header->e_shoff);
header->e_flags = REEND32(header->e_flags);
header->e_ehsize = REEND16(header->e_ehsize);
header->e_phentsize = REEND16(header->e_phentsize);
header->e_phnum = REEND16(header->e_phnum);
header->e_shentsize = REEND16(header->e_shentsize);
header->e_shnum = REEND16(header->e_shnum);
header->e_shstrndx = REEND16(header->e_shstrndx);
return header;
}
/* tableOffset and number should be obtained from the file header */
FairySecHeader* Fairy_ReadSectionTable(FairySecHeader* sectionTable, FILE* file, size_t tableOffset, size_t number) {
size_t entrySize = sizeof(FairySecHeader);
size_t tableSize = number * entrySize;
fseek(file, tableOffset, SEEK_SET);
assert(fread(sectionTable, sizeof(char), tableSize, file) == tableSize);
/* Since the section table happens to only have entries of width 4, we can byteswap it by pretending it is a raw
* uint32_t array */
{
size_t i;
uint32_t* data = (uint32_t*)sectionTable;
for (i = 0; i < tableSize / sizeof(uint32_t); i++) {
data[i] = REEND32(data[i]);
}
}
return sectionTable;
}
size_t Fairy_ReadSymbolTable(FairySym** symbolTableOut, FILE* file, size_t tableOffset, size_t tableSize) {
size_t number = tableSize / sizeof(FairySym);
FairySym* symbolTable = malloc(tableSize);
*symbolTableOut = NULL;
if (symbolTable == NULL) {
return 0;
}
if (fseek(file, tableOffset, SEEK_SET) != 0 || fread(symbolTable, sizeof(char), tableSize, file) != tableSize) {
free(symbolTable);
return 0;
}
/* Reend the variables that are wider than bytes */
{
size_t i;
for (i = 0; i < number; i++) {
symbolTable[i].st_name = REEND32(symbolTable[i].st_name);
symbolTable[i].st_value = REEND32(symbolTable[i].st_value);
symbolTable[i].st_size = REEND32(symbolTable[i].st_size);
symbolTable[i].st_shndx = REEND16(symbolTable[i].st_shndx);
}
}
*symbolTableOut = symbolTable;
return number;
}
/* Can be used for both the section header string table and the strtab */
char* Fairy_ReadStringTable(char* stringTable, FILE* file, size_t tableOffset, size_t tableSize) {
fseek(file, tableOffset, SEEK_SET);
assert(fread(stringTable, sizeof(char), tableSize, file) == tableSize);
return stringTable;
}
/* offset and number are attained from the section table, the returned pointer must be freed */
size_t Fairy_ReadRelocs(FairyRela** relocsOut, FILE* file, int type, size_t offset, size_t size) {
/* Final size of the relocation table, relocations of type SHT_REL need more space for extra addend of 0 */
size_t finalSize = (type == SHT_REL) ? ((size * sizeof(FairyRela)) / sizeof(FairyRel)) : size;
void* readBuf = malloc(size);
FairyRela* relocTable = malloc(finalSize);
*relocsOut = NULL;
if (readBuf == NULL) {
return 0;
}
if (relocTable == NULL) {
free(readBuf);
return 0;
}
if (fseek(file, offset, SEEK_SET) != 0 || fread(readBuf, sizeof(char), size, file) != size) {
free(readBuf);
free(relocTable);
return 0;
}
/* Reend the variables that are wider than bytes */
{
size_t i;
uint32_t* data = (uint32_t*)readBuf;
for (i = 0; i < size / sizeof(uint32_t); i++) {
data[i] = REEND32(data[i]);
}
}
/* Make the relocation table, for SHT_REL sections add an addend of 0 */
if (type == SHT_REL) {
size_t i;
FairyRel* rel = (FairyRel*)readBuf;
for (i = 0; i < size / sizeof(FairyRel); i++) {
relocTable[i].r_info = rel[i].r_info;
relocTable[i].r_offset = rel[i].r_offset;
relocTable[i].r_addend = 0;
}
} else {
memcpy(relocTable, readBuf, size);
}
free(readBuf);
*relocsOut = relocTable;
return finalSize / sizeof(FairyRela);
}
char* Fairy_GetSectionName(FairySecHeader* sectionTable, char* shstrtab, size_t index) {
return &shstrtab[sectionTable[index].sh_name];
}
/* Look up the index in the symbol table and return a pointer to the beginning of its string */
char* Fairy_GetSymbolName(FairySym* symtab, char* strtab, size_t index) {
return &strtab[symtab[index].st_name];
}
/* FairyFileInfo functions */
void Fairy_InitFile(FairyFileInfo* fileInfo, FILE* file) {
FairyFileHeader fileHeader;
FairySecHeader* sectionTable;
char* shstrtab;
int i;
assert(fileInfo != NULL);
assert(file != NULL);
fileInfo->progBitsSections = vc_vector_create(3, sizeof(Elf32_Section), NULL);
for (i = 0; i < 3; i++) {
fileInfo->progBitsSizes[i] = 0;
}
Fairy_ReadFileHeader(&fileHeader, file);
sectionTable = malloc(fileHeader.e_shnum * fileHeader.e_shentsize);
Fairy_ReadSectionTable(sectionTable, file, fileHeader.e_shoff, fileHeader.e_shnum);
shstrtab = malloc(sectionTable[fileHeader.e_shstrndx].sh_size * sizeof(char));
fseek(file, sectionTable[fileHeader.e_shstrndx].sh_offset, SEEK_SET);
assert(fread(shstrtab, sizeof(char), sectionTable[fileHeader.e_shstrndx].sh_size, file) ==
sectionTable[fileHeader.e_shstrndx].sh_size);
/* Search for the sections we need */
{
size_t currentIndex;
FairySecHeader currentSection;
for (currentIndex = 0; currentIndex < 3; currentIndex++) {
fileInfo->relocTablesInfo[currentIndex].sectionData = NULL;
}
for (currentIndex = 0; currentIndex < fileHeader.e_shnum; currentIndex++) {
size_t off = 0;
currentSection = sectionTable[currentIndex];
switch (currentSection.sh_type) {
case SHT_PROGBITS:
assert(vc_vector_push_back(fileInfo->progBitsSections, &currentIndex));
{
FairySection sectionType = FAIRY_SECTION_OTHER;
const char* sectionName = &shstrtab[currentSection.sh_name + 1];
size_t alignedSize;
/* Ignore the leading "." */
if (strcmp(sectionName, "text") == 0) {
sectionType = FAIRY_SECTION_TEXT;
} else if (strcmp(sectionName, "data") == 0) {
sectionType = FAIRY_SECTION_DATA;
} else if (Fairy_StartsWith(sectionName, "rodata")) { /* May be several */
sectionType = FAIRY_SECTION_RODATA;
}
if (sectionType != FAIRY_SECTION_OTHER) {
if (gUseElfAlignment) {
/* Ensure the next file will start at its correct alignment */
fileInfo->progBitsSizes[sectionType] =
ALIGN(fileInfo->progBitsSizes[sectionType], currentSection.sh_addralign);
alignedSize = ALIGN(currentSection.sh_size, currentSection.sh_addralign);
FAIRY_DEBUG_PRINTF("%s section alignment: 0x%X\n", sectionName,
currentSection.sh_addralign);
FAIRY_DEBUG_PRINTF("%s section size before align: 0x%X\n", sectionName,
currentSection.sh_size);
FAIRY_DEBUG_PRINTF("%s section size after align: 0x%X\n", sectionName, alignedSize);
fileInfo->progBitsSizes[sectionType] += alignedSize;
} else {
fileInfo->progBitsSizes[sectionType] += ALIGN(currentSection.sh_size, 0x10);
}
FAIRY_DEBUG_PRINTF("%s section size: 0x%X\n", sectionName,
fileInfo->progBitsSizes[sectionType]);
}
}
break;
case SHT_SYMTAB:
if (strcmp(&shstrtab[currentSection.sh_name + 1], "symtab") == 0) {
fileInfo->symtabInfo.sectionType = SHT_SYMTAB;
fileInfo->symtabInfo.sectionEntrySize = sizeof(FairySym);
fileInfo->symtabInfo.sectionEntryCount =
Fairy_ReadSymbolTable((FairySym**)&fileInfo->symtabInfo.sectionData, file,
currentSection.sh_offset, currentSection.sh_size);
}
break;
case SHT_STRTAB:
if (strcmp(&shstrtab[currentSection.sh_name + 1], "strtab") == 0) {
FAIRY_DEBUG_PRINTF("%s", "strtab found\n");
fileInfo->strtab = malloc(currentSection.sh_size);
Fairy_ReadStringTable(fileInfo->strtab, file, currentSection.sh_offset, currentSection.sh_size);
}
break;
case SHT_RELA:
off += 1;
case SHT_REL:
off += 5;
/* This assumes only one reloc section of each name */
// TODO: is this a problem?
{
FairySection relocSection = FAIRY_SECTION_OTHER;
/* Ignore the first 5/6 chars, which will always be ".rel."/".rela." */
if (strcmp(&shstrtab[currentSection.sh_name + off], "text") == 0) {
relocSection = FAIRY_SECTION_TEXT;
} else if (strcmp(&shstrtab[currentSection.sh_name + off], "data") == 0) {
relocSection = FAIRY_SECTION_DATA;
} else if (strcmp(&shstrtab[currentSection.sh_name + off], "rodata") == 0) {
relocSection = FAIRY_SECTION_RODATA;
} else {
break;
}
FAIRY_DEBUG_PRINTF("Found %s section\n", &shstrtab[currentSection.sh_name]);
fileInfo->relocTablesInfo[relocSection].sectionType = SHT_RELA;
fileInfo->relocTablesInfo[relocSection].sectionEntrySize = sizeof(FairyRela);
fileInfo->relocTablesInfo[relocSection].sectionEntryCount =
Fairy_ReadRelocs((FairyRela**)&fileInfo->relocTablesInfo[relocSection].sectionData, file,
currentSection.sh_type, currentSection.sh_offset, currentSection.sh_size);
}
break;
default:
break;
}
}
}
free(sectionTable);
free(shstrtab);
}
void Fairy_DestroyFile(FairyFileInfo* fileInfo) {
size_t i;
for (i = 0; i < ARRAY_COUNTU(fileInfo->relocTablesInfo); i++) {
if (fileInfo->relocTablesInfo[i].sectionData != NULL) {
FAIRY_DEBUG_PRINTF("Freeing reloc section %zd data\n", i);
free(fileInfo->relocTablesInfo[i].sectionData);
}
}
vc_vector_release(fileInfo->progBitsSections);
FAIRY_DEBUG_PRINTF("%s", "Freeing symtab data\n");
free(fileInfo->symtabInfo.sectionData);
FAIRY_DEBUG_PRINTF("%s", "Freeing strtab data\n");
free(fileInfo->strtab);
}

Some files were not shown because too many files have changed in this diff Show More