Merge branch 'main' into enRu1-actions-sitting

This commit is contained in:
JordanLongstaff
2026-02-23 17:31:44 -05:00
39 changed files with 303 additions and 153 deletions
+2 -3
View File
@@ -362,7 +362,7 @@ ifeq ($(DEBUG_FEATURES),1)
GBI_DEFINES += -DGBI_DEBUG
endif
CPPFLAGS += -P -xc -fno-dollars-in-identifiers $(CPP_DEFINES)
CPPFLAGS += -P -xc -fno-dollars-in-identifiers $(CPP_DEFINES) $(GBI_DEFINES)
ASFLAGS += -march=vr4300 -32 -no-pad-sections -Iinclude -I$(EXTRACTED_DIR)
ifeq ($(COMPILER),gcc)
@@ -499,7 +499,6 @@ O_FILES := $(filter-out %_reloc.o,$(SPEC_O_FILES))
OVL_RELOC_FILES := $(filter %_reloc.o,$(SPEC_O_FILES))
# Automatic dependency files
# (Only asm_processor dependencies and reloc dependencies are handled for now)
DEP_FILES := $(O_FILES:.o=.d) $(O_FILES:.o=.asmproc.d) $(OVL_RELOC_FILES:.o=.d) $(BUILD_DIR)/spec.d
TEXTURE_FILES_PNG_EXTRACTED := $(foreach dir,$(ASSET_BIN_DIRS_EXTRACTED),$(wildcard $(dir)/*.png))
@@ -732,7 +731,7 @@ $(BUILD_DIR)/src/makerom/%.o: CCASFLAGS := $(EGCS_CCASFLAGS)
$(BUILD_DIR)/src/makerom/%.o: ASOPTFLAGS := $(EGCS_ASOPTFLAGS)
endif
ifeq ($(PERMUTER),) # permuter + preprocess.py misbehaves, permuter doesn't care about rodata diffs or bss ordering so just don't use it in that case
ifeq ($(PERMUTER),) # permuter + preprocess.sh misbehaves, permuter doesn't care about rodata diffs or bss ordering so just don't use it in that case
# Handle encoding (UTF-8 -> EUC-JP) and custom pragmas
$(BUILD_DIR)/src/%.o: PREPROCESS := ./tools/preprocess.sh -v $(VERSION) -i $(ICONV) --
endif
+2 -2
View File
@@ -4,8 +4,8 @@ u64 gHylianShieldDesignTex[TEX_LEN(u64, gHylianShieldDesignTex_WIDTH, gHylianShi
#include "assets/objects/gameplay_keep/gHylianShieldDesignTex.rgba16.inc.c"
};
u64 gOcarinaofTimeDesignTex[TEX_LEN(u64, gOcarinaofTimeDesignTex_WIDTH, gOcarinaofTimeDesignTex_HEIGHT, 16)] = {
#include "assets/objects/gameplay_keep/gOcarinaofTimeDesignTex.rgba16.inc.c"
u64 gOcarinaOfTimeDesignTex[TEX_LEN(u64, gOcarinaOfTimeDesignTex_WIDTH, gOcarinaOfTimeDesignTex_HEIGHT, 16)] = {
#include "assets/objects/gameplay_keep/gOcarinaOfTimeDesignTex.rgba16.inc.c"
};
u64 gBottleGlassTex[TEX_LEN(u64, gBottleGlassTex_WIDTH, gBottleGlassTex_HEIGHT, 16)] = {
+3 -3
View File
@@ -7,9 +7,9 @@
#define gHylianShieldDesignTex_WIDTH 32
#define gHylianShieldDesignTex_HEIGHT 64
extern u64 gHylianShieldDesignTex[TEX_LEN(u64, gHylianShieldDesignTex_WIDTH, gHylianShieldDesignTex_HEIGHT, 16)];
#define gOcarinaofTimeDesignTex_WIDTH 32
#define gOcarinaofTimeDesignTex_HEIGHT 16
extern u64 gOcarinaofTimeDesignTex[TEX_LEN(u64, gOcarinaofTimeDesignTex_WIDTH, gOcarinaofTimeDesignTex_HEIGHT, 16)];
#define gOcarinaOfTimeDesignTex_WIDTH 32
#define gOcarinaOfTimeDesignTex_HEIGHT 16
extern u64 gOcarinaOfTimeDesignTex[TEX_LEN(u64, gOcarinaOfTimeDesignTex_WIDTH, gOcarinaOfTimeDesignTex_HEIGHT, 16)];
#define gBottleGlassTex_WIDTH 16
#define gBottleGlassTex_HEIGHT 16
extern u64 gBottleGlassTex[TEX_LEN(u64, gBottleGlassTex_WIDTH, gBottleGlassTex_HEIGHT, 16)];
@@ -15,8 +15,8 @@ u64 gLinkAdultEyesHalfTex[TEX_LEN(u64, LINK_ADULT_EYES_TEX_WIDTH, LINK_ADULT_EYE
#include "assets/objects/object_link_boy/gLinkAdultEyesHalfTex.ci8.tlut_gLinkAdultHeadTLUT.inc.c"
};
u64 gLinkAdultEyesClosedfTex[TEX_LEN(u64, LINK_ADULT_EYES_TEX_WIDTH, LINK_ADULT_EYES_TEX_HEIGHT, 8)] = {
#include "assets/objects/object_link_boy/gLinkAdultEyesClosedfTex.ci8.tlut_gLinkAdultHeadTLUT.inc.c"
u64 gLinkAdultEyesClosedTex[TEX_LEN(u64, LINK_ADULT_EYES_TEX_WIDTH, LINK_ADULT_EYES_TEX_HEIGHT, 8)] = {
#include "assets/objects/object_link_boy/gLinkAdultEyesClosedTex.ci8.tlut_gLinkAdultHeadTLUT.inc.c"
};
u64 gLinkAdultEyesRightTex[TEX_LEN(u64, LINK_ADULT_EYES_TEX_WIDTH, LINK_ADULT_EYES_TEX_HEIGHT, 8)] = {
@@ -9,7 +9,7 @@
#define LINK_ADULT_EYES_TEX_HEIGHT 32
extern u64 gLinkAdultEyesOpenTex[TEX_LEN(u64, LINK_ADULT_EYES_TEX_WIDTH, LINK_ADULT_EYES_TEX_HEIGHT, 8)];
extern u64 gLinkAdultEyesHalfTex[TEX_LEN(u64, LINK_ADULT_EYES_TEX_WIDTH, LINK_ADULT_EYES_TEX_HEIGHT, 8)];
extern u64 gLinkAdultEyesClosedfTex[TEX_LEN(u64, LINK_ADULT_EYES_TEX_WIDTH, LINK_ADULT_EYES_TEX_HEIGHT, 8)];
extern u64 gLinkAdultEyesClosedTex[TEX_LEN(u64, LINK_ADULT_EYES_TEX_WIDTH, LINK_ADULT_EYES_TEX_HEIGHT, 8)];
extern u64 gLinkAdultEyesRightTex[TEX_LEN(u64, LINK_ADULT_EYES_TEX_WIDTH, LINK_ADULT_EYES_TEX_HEIGHT, 8)];
extern u64 gLinkAdultEyesLeftTex[TEX_LEN(u64, LINK_ADULT_EYES_TEX_WIDTH, LINK_ADULT_EYES_TEX_HEIGHT, 8)];
extern u64 gLinkAdultEyesWideTex[TEX_LEN(u64, LINK_ADULT_EYES_TEX_WIDTH, LINK_ADULT_EYES_TEX_HEIGHT, 8)];
@@ -15,8 +15,8 @@ u64 gLinkChildEyesHalfTex[TEX_LEN(u64, LINK_CHILD_EYES_TEX_WIDTH, LINK_CHILD_EYE
#include "assets/objects/object_link_child/gLinkChildEyesHalfTex.ci8.tlut_gLinkChildSkinTLUT.inc.c"
};
u64 gLinkChildEyesClosedfTex[TEX_LEN(u64, LINK_CHILD_EYES_TEX_WIDTH, LINK_CHILD_EYES_TEX_HEIGHT, 8)] = {
#include "assets/objects/object_link_child/gLinkChildEyesClosedfTex.ci8.tlut_gLinkChildSkinTLUT.inc.c"
u64 gLinkChildEyesClosedTex[TEX_LEN(u64, LINK_CHILD_EYES_TEX_WIDTH, LINK_CHILD_EYES_TEX_HEIGHT, 8)] = {
#include "assets/objects/object_link_child/gLinkChildEyesClosedTex.ci8.tlut_gLinkChildSkinTLUT.inc.c"
};
u64 gLinkChildEyesLeftTex[TEX_LEN(u64, LINK_CHILD_EYES_TEX_WIDTH, LINK_CHILD_EYES_TEX_HEIGHT, 8)] = {
@@ -9,7 +9,7 @@
#define LINK_CHILD_EYES_TEX_HEIGHT 32
extern u64 gLinkChildEyesOpenTex[TEX_LEN(u64, LINK_CHILD_EYES_TEX_WIDTH, LINK_CHILD_EYES_TEX_HEIGHT, 8)];
extern u64 gLinkChildEyesHalfTex[TEX_LEN(u64, LINK_CHILD_EYES_TEX_WIDTH, LINK_CHILD_EYES_TEX_HEIGHT, 8)];
extern u64 gLinkChildEyesClosedfTex[TEX_LEN(u64, LINK_CHILD_EYES_TEX_WIDTH, LINK_CHILD_EYES_TEX_HEIGHT, 8)];
extern u64 gLinkChildEyesClosedTex[TEX_LEN(u64, LINK_CHILD_EYES_TEX_WIDTH, LINK_CHILD_EYES_TEX_HEIGHT, 8)];
extern u64 gLinkChildEyesLeftTex[TEX_LEN(u64, LINK_CHILD_EYES_TEX_WIDTH, LINK_CHILD_EYES_TEX_HEIGHT, 8)];
extern u64 gLinkChildEyesRightTex[TEX_LEN(u64, LINK_CHILD_EYES_TEX_WIDTH, LINK_CHILD_EYES_TEX_HEIGHT, 8)];
extern u64 gLinkChildEyesWideTex[TEX_LEN(u64, LINK_CHILD_EYES_TEX_WIDTH, LINK_CHILD_EYES_TEX_HEIGHT, 8)];
+2 -2
View File
@@ -135,8 +135,8 @@
<Texture Name="gameplay_dangeon_keep_0134A0_Tex" Format="rgba16" Width="32" Height="32" Offset="0x134A0"/>
<Texture Name="gameplay_dangeon_keep_013CA0_Tex" Format="ia8" Width="4" Height="4" Offset="0x13CA0"/>
<Texture Name="gameplay_dangeon_keep_013CB0_Tex" Format="i4" Width="64" Height="64" Offset="0x13CB0"/>
<Texture Name="gCrstalSwitchRedTex" Format="rgba16" Width="32" Height="32" Offset="0x144B0"/>
<Texture Name="gCrstalSwitchBlueTex" Format="rgba16" Width="32" Height="32" Offset="0x14CB0"/>
<Texture Name="gCrystalSwitchRedTex" Format="rgba16" Width="32" Height="32" Offset="0x144B0"/>
<Texture Name="gCrystalSwitchBlueTex" Format="rgba16" Width="32" Height="32" Offset="0x14CB0"/>
<Texture Name="gameplay_dangeon_keep_0154B0_Tex" Format="rgba16" Width="32" Height="32" Offset="0x154B0"/>
<Texture Name="gameplay_dangeon_keep_015CB0_Tex" Format="rgba16" Width="32" Height="32" Offset="0x15CB0"/>
<Texture Name="gameplay_dangeon_keep_0164B0_Tex" Format="rgba16" Width="32" Height="32" Offset="0x164B0"/>
+1 -1
View File
@@ -4,7 +4,7 @@
<Texture Name="gHilite1Tex" Format="rgba16" Width="16" Height="16" Offset="0x0"/>
<Texture Name="gHilite2Tex" Format="rgba16" Width="16" Height="16" Offset="0x200"/>
<Texture Name="gHylianShieldDesignTex" Format="rgba16" Width="32" Height="64" Offset="0x400"/>
<Texture Name="gOcarinaofTimeDesignTex" Format="rgba16" Width="32" Height="16" Offset="0x1400"/>
<Texture Name="gOcarinaOfTimeDesignTex" Format="rgba16" Width="32" Height="16" Offset="0x1400"/>
<Texture Name="gBottleGlassTex" Format="rgba16" Width="16" Height="16" Offset="0x1800"/>
<Texture Name="gDekuStickTex" Format="i8" Width="8" Height="8" Offset="0x1A00"/>
<Texture Name="gLinkHairTex" Format="rgba16" Width="16" Height="16" Offset="0x1A40"/>
+1 -1
View File
@@ -4,7 +4,7 @@
<Texture Name="gHilite1Tex" Format="rgba16" Width="16" Height="16" Offset="0x0"/>
<Texture Name="gHilite2Tex" Format="rgba16" Width="16" Height="16" Offset="0x200"/>
<Texture Name="gHylianShieldDesignTex" Format="rgba16" Width="32" Height="64" Offset="0x400"/>
<Texture Name="gOcarinaofTimeDesignTex" Format="rgba16" Width="32" Height="16" Offset="0x1400"/>
<Texture Name="gOcarinaOfTimeDesignTex" Format="rgba16" Width="32" Height="16" Offset="0x1400"/>
<Texture Name="gBottleGlassTex" Format="rgba16" Width="16" Height="16" Offset="0x1800"/>
<Texture Name="gDekuStickTex" Format="i8" Width="8" Height="8" Offset="0x1A00"/>
<Texture Name="gLinkHairTex" Format="rgba16" Width="16" Height="16" Offset="0x1A40"/>
+12 -12
View File
@@ -1,10 +1,10 @@
<Root>
<File Name="object_haka_objects" Segment="6">
<Array Name="object_haka_objects_Vtx_000000" Count="4" Offset="0x0">
<Array Name="gShadowTempleMetalGateVtx" Count="4" Offset="0x0">
<Vtx/>
</Array>
<DList Name="object_haka_objects_DL_000040" Offset="0x40"/>
<Collision Name="object_haka_objects_Col_000118" Offset="0x118"/>
<DList Name="gShadowTempleMetalGateDL" Offset="0x40"/>
<Collision Name="gShadowTempleMetalGateCol" Offset="0x118"/>
<Array Name="gShadowTempleRoom3HiddenPlatformsVtx" Count="253" Offset="0x150">
<Vtx/>
</Array>
@@ -51,11 +51,11 @@
</Array>
<DList Name="gShadowTempleRoom18FakeWallDL" Offset="0x4B70"/>
<Collision Name="gShadowTempleRoom18FakeWallCol" Offset="0x4CC0"/>
<Array Name="object_haka_objects_Vtx_004CF0" Count="49" Offset="0x4CF0">
<Array Name="gShadowTempleBlackPlatformWithScrewColumnVtx" Count="49" Offset="0x4CF0">
<Vtx/>
</Array>
<DList Name="object_haka_objects_DL_005000" Offset="0x5000"/>
<Collision Name="object_haka_objects_Col_005334" Offset="0x5334"/>
<DList Name="gShadowTempleBlackPlatformWithScrewColumnDL" Offset="0x5000"/>
<Collision Name="gShadowTempleBlackPlatformWithScrewColumnCol" Offset="0x5334"/>
<Array Name="object_haka_objects_Vtx_005360" Count="113" Offset="0x5360">
<Vtx/>
</Array>
@@ -88,21 +88,21 @@
</Array>
<DList Name="gShadowTempleSpikedWallWestDL" Offset="0x8A20"/>
<Collision Name="gShadowTempleSpikedWallWestCol" Offset="0x8D10"/>
<Array Name="object_haka_objects_Vtx_008D40" Count="23" Offset="0x8D40">
<Array Name="gShadowTempleHiddenBlockPlatformVtx" Count="23" Offset="0x8D40">
<Vtx/>
</Array>
<DList Name="object_haka_objects_DL_008EB0" Offset="0x8EB0"/>
<Collision Name="object_haka_objects_Col_009168" Offset="0x9168"/>
<DList Name="gShadowTempleHiddenBlockPlatformDL" Offset="0x8EB0"/>
<Collision Name="gShadowTempleHiddenBlockPlatformCol" Offset="0x9168"/>
<Array Name="gShadowTempleSpikedCrusherVtx" Count="108" Offset="0x91A0">
<Vtx/>
</Array>
<DList Name="gShadowTempleSpikedCrusherDL" Offset="0x9860"/>
<Collision Name="gShadowTempleSpikedCrusherCol" Offset="0x9CD0"/>
<Array Name="object_haka_objects_Vtx_009D00" Count="74" Offset="0x9D00">
<Array Name="gShadowTempleChainedElevatorPlatformVtx" Count="74" Offset="0x9D00">
<Vtx/>
</Array>
<DList Name="object_haka_objects_DL_00A1A0" Offset="0xA1A0"/>
<Collision Name="object_haka_objects_Col_00A7F4" Offset="0xA7F4"/>
<DList Name="gShadowTempleChainedElevatorPlatformDL" Offset="0xA1A0"/>
<Collision Name="gShadowTempleChainedElevatorPlatformCol" Offset="0xA7F4"/>
<Array Name="object_haka_objects_Vtx_00A820" Count="4" Offset="0xA820">
<Vtx/>
</Array>
+1 -1
View File
@@ -526,7 +526,7 @@
<!-- Eyes -->
<Texture Name="gLinkAdultEyesOpenTex" Format="ci8" Width="64" Height="32" Offset="0x0000" TlutOffset="0x5C00"/>
<Texture Name="gLinkAdultEyesHalfTex" Format="ci8" Width="64" Height="32" Offset="0x0800" TlutOffset="0x5C00"/>
<Texture Name="gLinkAdultEyesClosedfTex" Format="ci8" Width="64" Height="32" Offset="0x1000" TlutOffset="0x5C00"/>
<Texture Name="gLinkAdultEyesClosedTex" Format="ci8" Width="64" Height="32" Offset="0x1000" TlutOffset="0x5C00"/>
<Texture Name="gLinkAdultEyesRightTex" Format="ci8" Width="64" Height="32" Offset="0x1800" TlutOffset="0x5C00"/>
<Texture Name="gLinkAdultEyesLeftTex" Format="ci8" Width="64" Height="32" Offset="0x2000" TlutOffset="0x5C00"/>
<Texture Name="gLinkAdultEyesWideTex" Format="ci8" Width="64" Height="32" Offset="0x2800" TlutOffset="0x5C00"/>
+1 -1
View File
@@ -436,7 +436,7 @@
<!--Eyes-->
<Texture Name="gLinkChildEyesOpenTex" Format="ci8" Width="64" Height="32" Offset="0x0000" TlutOffset="0x5500"/>
<Texture Name="gLinkChildEyesHalfTex" Format="ci8" Width="64" Height="32" Offset="0x0800" TlutOffset="0x5500"/>
<Texture Name="gLinkChildEyesClosedfTex" Format="ci8" Width="64" Height="32" Offset="0x1000" TlutOffset="0x5500"/>
<Texture Name="gLinkChildEyesClosedTex" Format="ci8" Width="64" Height="32" Offset="0x1000" TlutOffset="0x5500"/>
<Texture Name="gLinkChildEyesLeftTex" Format="ci8" Width="64" Height="32" Offset="0x1800" TlutOffset="0x5500"/>
<Texture Name="gLinkChildEyesRightTex" Format="ci8" Width="64" Height="32" Offset="0x2000" TlutOffset="0x5500"/>
<Texture Name="gLinkChildEyesWideTex" Format="ci8" Width="64" Height="32" Offset="0x2800" TlutOffset="0x5500"/>
+2 -2
View File
@@ -16,7 +16,7 @@ incbins:
segment: code
vram: 0x800E2FC0
size: 0xFB0
- name: gspF3DZEX2_NoN_PosLight_fifoText
- name: gspF3DZEX2_NoN_fifoText
segment: code
vram: 0x800E3F70
size: 0x1390
@@ -32,7 +32,7 @@ incbins:
segment: code
vram: 0x801142E0
size: 0x2E0
- name: gspF3DZEX2_NoN_PosLight_fifoData
- name: gspF3DZEX2_NoN_fifoData
segment: code
vram: 0x801145C0
size: 0x420
+2 -2
View File
@@ -16,7 +16,7 @@ incbins:
segment: code
vram: 0x800E3180
size: 0xFB0
- name: gspF3DZEX2_NoN_PosLight_fifoText
- name: gspF3DZEX2_NoN_fifoText
segment: code
vram: 0x800E4130
size: 0x1390
@@ -32,7 +32,7 @@ incbins:
segment: code
vram: 0x801144A0
size: 0x2E0
- name: gspF3DZEX2_NoN_PosLight_fifoData
- name: gspF3DZEX2_NoN_fifoData
segment: code
vram: 0x80114780
size: 0x420
+2 -2
View File
@@ -16,7 +16,7 @@ incbins:
segment: code
vram: 0x800E3600
size: 0xFB0
- name: gspF3DZEX2_NoN_PosLight_fifoText
- name: gspF3DZEX2_NoN_fifoText
segment: code
vram: 0x800E45B0
size: 0x1390
@@ -32,7 +32,7 @@ incbins:
segment: code
vram: 0x80114990
size: 0x2E0
- name: gspF3DZEX2_NoN_PosLight_fifoData
- name: gspF3DZEX2_NoN_fifoData
segment: code
vram: 0x80114C70
size: 0x420
+2 -2
View File
@@ -13,7 +13,7 @@ incbins:
segment: code
vram: 0x800E0F10
size: 0xFB0
- name: gspF3DZEX2_NoN_PosLight_fifoText
- name: gspF3DZEX2_NoN_fifoText
segment: code
vram: 0x800E1EC0
size: 0x1390
@@ -37,7 +37,7 @@ incbins:
segment: code
vram: 0x801120E0
size: 0x2E0
- name: gspF3DZEX2_NoN_PosLight_fifoData
- name: gspF3DZEX2_NoN_fifoData
segment: code
vram: 0x801123C0
size: 0x420
+2 -2
View File
@@ -13,7 +13,7 @@ incbins:
segment: code
vram: 0x800E0F50
size: 0xFB0
- name: gspF3DZEX2_NoN_PosLight_fifoText
- name: gspF3DZEX2_NoN_fifoText
segment: code
vram: 0x800E1F00
size: 0x1390
@@ -37,7 +37,7 @@ incbins:
segment: code
vram: 0x80112120
size: 0x2E0
- name: gspF3DZEX2_NoN_PosLight_fifoData
- name: gspF3DZEX2_NoN_fifoData
segment: code
vram: 0x80112400
size: 0x420
+6 -2
View File
@@ -13,15 +13,19 @@ glabel aspMainDataStart
.incbin "incbin/aspMainData"
glabel aspMainDataEnd
#if !PLATFORM_N64
#ifndef F3DEX_GBI_PL
glabel gspF3DZEX2_NoN_fifoDataStart
.incbin "incbin/gspF3DZEX2_NoN_fifoData"
glabel gspF3DZEX2_NoN_fifoDataEnd
#else
glabel gspF3DZEX2_NoN_PosLight_fifoTextStart
.incbin "incbin/gspF3DZEX2_NoN_PosLight_fifoText"
glabel gspF3DZEX2_NoN_PosLight_fifoTextEnd
#endif
glabel gspF3DZEX2_NoN_PosLight_fifoDataStart
.incbin "incbin/gspF3DZEX2_NoN_PosLight_fifoData"
glabel gspF3DZEX2_NoN_PosLight_fifoDataEnd
#endif
glabel gspS2DEX2d_fifoDataStart
.incbin "incbin/gspS2DEX2d_fifoData"
+4 -4
View File
@@ -13,10 +13,10 @@ glabel aspMainTextStart
.incbin "incbin/aspMainText"
glabel aspMainTextEnd
#if PLATFORM_N64
glabel gspF3DZEX2_NoN_PosLight_fifoTextStart
.incbin "incbin/gspF3DZEX2_NoN_PosLight_fifoText"
glabel gspF3DZEX2_NoN_PosLight_fifoTextEnd
#ifndef F3DEX_GBI_PL
glabel gspF3DZEX2_NoN_fifoTextStart
.incbin "incbin/gspF3DZEX2_NoN_fifoText"
glabel gspF3DZEX2_NoN_fifoTextEnd
#endif
glabel gspS2DEX2d_fifoTextStart
-4
View File
@@ -81,10 +81,6 @@ void Fault_DrawText(s32 x, s32 y, const char* fmt, ...);
void func_800AE1F8(void);
// Not implemented. Silently noop-ing is fine, these are not essential for functionality.
#define Fault_SetFontColor(color) (void)0
#define Fault_SetCharPad(padW, padH) (void)0
#else
void Fault_InitDrawer(void);
-4
View File
@@ -184,10 +184,6 @@ void func_800F8F88(void);
u8 Audio_IsSfxPlaying(u32 sfxId);
void Audio_ResetSfx(void);
extern Vec3f gSfxDefaultPos;
extern f32 gSfxDefaultFreqAndVolScale;
extern s8 gSfxDefaultReverb;
extern SfxParams* gSfxParams[7];
extern char D_80133390[];
extern char D_80133398[];
+5
View File
@@ -17,8 +17,13 @@ extern u64 cic6105TextStart[], cic6105TextEnd[];
extern u64 aspMainTextStart[], aspMainTextEnd[];
extern u64 aspMainDataStart[], aspMainDataEnd[];
#ifndef F3DEX_GBI_PL
extern u64 gspF3DZEX2_NoN_fifoTextStart[], gspF3DZEX2_NoN_fifoTextEnd[];
extern u64 gspF3DZEX2_NoN_fifoDataStart[], gspF3DZEX2_NoN_fifoDataEnd[];
#else
extern u64 gspF3DZEX2_NoN_PosLight_fifoTextStart[], gspF3DZEX2_NoN_PosLight_fifoTextEnd[];
extern u64 gspF3DZEX2_NoN_PosLight_fifoDataStart[], gspF3DZEX2_NoN_PosLight_fifoDataEnd[];
#endif
extern u64 gspS2DEX2d_fifoTextStart[], gspS2DEX2d_fifoTextEnd[];
extern u64 gspS2DEX2d_fifoDataStart[], gspS2DEX2d_fifoDataEnd[];
+16
View File
@@ -50,13 +50,21 @@ OSTime sGraphPrevTaskTimeStart;
FaultClient sGraphFaultClient;
UCodeInfo D_8012D230[3] = {
#ifndef F3DEX_GBI_PL
{ UCODE_TYPE_F3DZEX, gspF3DZEX2_NoN_fifoTextStart },
#else
{ UCODE_TYPE_F3DZEX, gspF3DZEX2_NoN_PosLight_fifoTextStart },
#endif
{ UCODE_TYPE_UNK, NULL },
{ UCODE_TYPE_S2DEX, gspS2DEX2d_fifoTextStart },
};
UCodeInfo D_8012D248[3] = {
#ifndef F3DEX_GBI_PL
{ UCODE_TYPE_F3DZEX, gspF3DZEX2_NoN_fifoTextStart },
#else
{ UCODE_TYPE_F3DZEX, gspF3DZEX2_NoN_PosLight_fifoTextStart },
#endif
{ UCODE_TYPE_UNK, NULL },
{ UCODE_TYPE_S2DEX, gspS2DEX2d_fifoTextStart },
};
@@ -81,7 +89,11 @@ void Graph_DisassembleUCode(Gfx* workBuf) {
disassembler.enableLog = R_UCODE_DISAS_LOG_LEVEL;
UCodeDisas_RegisterUCode(&disassembler, ARRAY_COUNT(D_8012D230), D_8012D230);
#ifndef F3DEX_GBI_PL
UCodeDisas_SetCurUCode(&disassembler, gspF3DZEX2_NoN_fifoTextStart);
#else
UCodeDisas_SetCurUCode(&disassembler, gspF3DZEX2_NoN_PosLight_fifoTextStart);
#endif
UCodeDisas_Disassemble(&disassembler, workBuf);
@@ -120,7 +132,11 @@ void Graph_UCodeFaultClient(Gfx* workBuf) {
UCodeDisas_Init(&disassembler);
disassembler.enableLog = true;
UCodeDisas_RegisterUCode(&disassembler, ARRAY_COUNT(D_8012D248), D_8012D248);
#ifndef F3DEX_GBI_PL
UCodeDisas_SetCurUCode(&disassembler, gspF3DZEX2_NoN_fifoTextStart);
#else
UCodeDisas_SetCurUCode(&disassembler, gspF3DZEX2_NoN_PosLight_fifoTextStart);
#endif
UCodeDisas_Disassemble(&disassembler, workBuf);
UCodeDisas_Destroy(&disassembler);
}
+5
View File
@@ -1,8 +1,13 @@
#include "ultra64.h"
#include "sys_ucode.h"
#ifndef F3DEX_GBI_PL
u64* sDefaultGSPUCodeText = gspF3DZEX2_NoN_fifoTextStart;
u64* sDefaultGSPUCodeData = gspF3DZEX2_NoN_fifoDataStart;
#else
u64* sDefaultGSPUCodeText = gspF3DZEX2_NoN_PosLight_fifoTextStart;
u64* sDefaultGSPUCodeData = gspF3DZEX2_NoN_PosLight_fifoDataStart;
#endif
u64* SysUcode_GetUCodeBoot(void) {
return rspbootTextStart;
+3 -5
View File
@@ -4511,9 +4511,7 @@ Gfx* func_80034B54(GraphicsContext* gfxCtx) {
displayList = displayListHead = GRAPH_ALLOC(gfxCtx, 2 * sizeof(Gfx));
gDPSetRenderMode(displayListHead++, G_RM_FOG_SHADE_A,
AA_EN | Z_CMP | Z_UPD | IM_RD | CLR_ON_CVG | CVG_DST_WRAP | ZMODE_XLU | FORCE_BL |
GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA));
gDPSetRenderMode(displayListHead++, G_RM_FOG_SHADE_A, Z_UPD | G_RM_AA_ZB_XLU_SURF2);
gSPEndDisplayList(displayListHead++);
@@ -4565,10 +4563,10 @@ s16 Actor_UpdateAlphaByDistance(Actor* actor, PlayState* play, s16 alpha, f32 ra
if (radius < distance) {
actor->flags &= ~ACTOR_FLAG_ATTENTION_ENABLED;
Math_SmoothStepToS(&alpha, 0, 6, 0x14, 1);
Math_SmoothStepToS(&alpha, 0, 6, 20, 1);
} else {
actor->flags |= ACTOR_FLAG_ATTENTION_ENABLED;
Math_SmoothStepToS(&alpha, 0xFF, 6, 0x14, 1);
Math_SmoothStepToS(&alpha, 255, 6, 20, 1);
}
return alpha;
+3 -3
View File
@@ -6333,8 +6333,8 @@ s32 Camera_Demo5(Camera* camera) {
camera->timer += D_8011D79C[2].timerInit + D_8011D79C[3].timerInit;
}
} else if (eyeTargetDist < 300.0f && eyePlayerGeo.r < 30.0f) {
// distance from the camera's current positon and the target is less than 300 units
// and the distance fromthe camera's current position to the player is less than 30 units
// distance from the camera's current position and the target is less than 300 units
// and the distance from the camera's current position to the player is less than 30 units
static OnePointCsFull D_8011D83C[] = {
{
ONEPOINT_CS_ACTION(ONEPOINT_CS_ACTION_ID_3, false, true),
@@ -7237,7 +7237,7 @@ s32 Camera_Special6(Camera* camera) {
sCameraInterfaceField = roData->interfaceField;
if (eyeNext->x != bgCamPos.x || eyeNext->y != bgCamPos.y || eyeNext->z != bgCamPos.z || camera->animState == 0) {
// A change in the current scene's camera positon has been detected,
// A change in the current scene's camera position has been detected,
// Change "screens"
camera->player->actor.freezeTimer = 12;
// Overwrite hud visibility to CAM_HUD_VISIBILITY_HEARTS_FORCE
+5 -5
View File
@@ -1007,7 +1007,7 @@ PlayerFaceIndices sPlayerFaces[PLAYER_FACE_MAX] = {
void* sEyeTextures[PLAYER_EYES_MAX] = {
gLinkAdultEyesOpenTex, // PLAYER_EYES_OPEN
gLinkAdultEyesHalfTex, // PLAYER_EYES_HALF
gLinkAdultEyesClosedfTex, // PLAYER_EYES_CLOSED
gLinkAdultEyesClosedTex, // PLAYER_EYES_CLOSED
gLinkAdultEyesRightTex, // PLAYER_EYES_RIGHT
gLinkAdultEyesLeftTex, // PLAYER_EYES_LEFT
gLinkAdultEyesWideTex, // PLAYER_EYES_WIDE
@@ -1027,7 +1027,7 @@ void* sEyeTextures[][PLAYER_EYES_MAX] = {
{
gLinkAdultEyesOpenTex, // PLAYER_EYES_OPEN
gLinkAdultEyesHalfTex, // PLAYER_EYES_HALF
gLinkAdultEyesClosedfTex, // PLAYER_EYES_CLOSED
gLinkAdultEyesClosedTex, // PLAYER_EYES_CLOSED
gLinkAdultEyesRightTex, // PLAYER_EYES_RIGHT
gLinkAdultEyesLeftTex, // PLAYER_EYES_LEFT
gLinkAdultEyesWideTex, // PLAYER_EYES_WIDE
@@ -1035,9 +1035,9 @@ void* sEyeTextures[][PLAYER_EYES_MAX] = {
gLinkAdultEyesWincingTex, // PLAYER_EYES_WINCING
},
{
gLinkChildEyesOpenTex, // PLAYER_EYES_OPEN
gLinkChildEyesHalfTex, // PLAYER_EYES_HALF
gLinkChildEyesClosedfTex, // PLAYER_EYES_CLOSED
gLinkChildEyesOpenTex, // PLAYER_EYES_OPEN
gLinkChildEyesHalfTex, // PLAYER_EYES_HALF
gLinkChildEyesClosedTex, // PLAYER_EYES_CLOSED
/*
Note `PLAYER_EYES_RIGHT` corresponds to the "left" eyes texture, and vice-versa with the "right" eyes textures.
This is because on the textures Link appears to look left/right as if facing outwards the screen,
@@ -1,7 +1,23 @@
/*
* File: z_bg_haka_meganebg.c
* Overlay: ovl_Bg_Haka_MeganeBG
* Description:
* Description: Misc. Shadow Temple themed objects
*
* BGHAKAMEGANEBG_TYPE_HIDDEN_MOVING_PLATFORM:
* An invisible square moving platform, viewable with Lens of Truth. Travels -320 x units from home and back.
* Setting rotY when spawning will rotate the shape, but not affect the movement path.
* world.rot.y is used like a flag, tracking the direction of movement for the platform.
* If world.rot.y == initial rotation, the platform is travelling from home towards the secondary position.
* If world.rot.y != initial rotation, the platform is travelling from the secondary position towards home.
*
* BGHAKAMEGANEBG_TYPE_CHAINED_ELEVATOR_PLATFORM:
* A square platform with chains on four corners. Drops 640 units before pulling itself up back to the home position.
*
* BGHAKAMEGANEBG_TYPE_ROTATING_PLATFORM:
* A simple spinning hexacon shaped black platform with a column in the center.
*
* BGHAKAMEGANEBG_TYPE_METAL_GATE:
* A metal gate that rises 100 units on switchFlag on.
*/
#include "z_bg_haka_meganebg.h"
@@ -21,14 +37,14 @@ void BgHakaMeganeBG_Destroy(Actor* thisx, PlayState* play);
void BgHakaMeganeBG_Update(Actor* thisx, PlayState* play);
void BgHakaMeganeBG_Draw(Actor* thisx, PlayState* play);
void func_8087DFF8(BgHakaMeganeBG* this, PlayState* play);
void func_8087E040(BgHakaMeganeBG* this, PlayState* play);
void func_8087E10C(BgHakaMeganeBG* this, PlayState* play);
void func_8087E1E0(BgHakaMeganeBG* this, PlayState* play);
void func_8087E258(BgHakaMeganeBG* this, PlayState* play);
void func_8087E288(BgHakaMeganeBG* this, PlayState* play);
void func_8087E2D8(BgHakaMeganeBG* this, PlayState* play);
void func_8087E34C(BgHakaMeganeBG* this, PlayState* play);
void BgHakaMeganeBG_HiddenMovingPlatform_Idle(BgHakaMeganeBG* this, PlayState* play);
void BgHakaMeganeBG_HiddenMovingPlatform_Move(BgHakaMeganeBG* this, PlayState* play);
void BgHakaMeganeBG_ElevatorPlatform_Drop(BgHakaMeganeBG* this, PlayState* play);
void BgHakaMeganeBG_ElevatorPlatform_Raise(BgHakaMeganeBG* this, PlayState* play);
void BgHakaMeganeBG_RotatingPlatform_Spin(BgHakaMeganeBG* this, PlayState* play);
void BgHakaMeganeBG_Gate_WaitForSwitchFlag(BgHakaMeganeBG* this, PlayState* play);
void BgHakaMeganeBG_Gate_Open(BgHakaMeganeBG* this, PlayState* play);
void BgHakaMeganeBG_DoNothing(BgHakaMeganeBG* this, PlayState* play);
ActorProfile Bg_Haka_MeganeBG_Profile = {
/**/ ACTOR_BG_HAKA_MEGANEBG,
@@ -53,50 +69,45 @@ static u32 D_8087E3FC[] = {
0x00000000, 0x00000000, 0x00000000, 0xC8C800FF, 0xFF0000FF,
};
static Gfx* D_8087E410[] = {
object_haka_objects_DL_008EB0,
object_haka_objects_DL_00A1A0,
object_haka_objects_DL_005000,
object_haka_objects_DL_000040,
};
void BgHakaMeganeBG_Init(Actor* thisx, PlayState* play) {
s32 pad;
BgHakaMeganeBG* this = (BgHakaMeganeBG*)thisx;
CollisionHeader* colHeader = NULL;
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
this->unk_168 = PARAMS_GET_U(thisx->params, 8, 8);
this->switchFlag = PARAMS_GET_U(thisx->params, 8, 8);
thisx->params &= 0xFF;
if (thisx->params == 2) {
if (thisx->params == BGHAKAMEGANEBG_TYPE_ROTATING_PLATFORM) {
DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS | DYNA_TRANSFORM_ROT_Y);
thisx->flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
CollisionHeader_GetVirtual(&object_haka_objects_Col_005334, &colHeader);
this->actionFunc = func_8087E258;
CollisionHeader_GetVirtual(&gShadowTempleBlackPlatformWithScrewColumnCol, &colHeader);
this->actionFunc = BgHakaMeganeBG_RotatingPlatform_Spin;
} else {
DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
if (thisx->params == 0) {
CollisionHeader_GetVirtual(&object_haka_objects_Col_009168, &colHeader);
if (thisx->params == BGHAKAMEGANEBG_TYPE_HIDDEN_MOVING_PLATFORM) {
CollisionHeader_GetVirtual(&gShadowTempleHiddenBlockPlatformCol, &colHeader);
thisx->flags |= ACTOR_FLAG_REACT_TO_LENS;
this->unk_16A = 20;
this->actionFunc = func_8087DFF8;
} else if (thisx->params == 3) {
CollisionHeader_GetVirtual(&object_haka_objects_Col_000118, &colHeader);
this->timer = 20;
this->actionFunc = BgHakaMeganeBG_HiddenMovingPlatform_Idle;
} else if (thisx->params == BGHAKAMEGANEBG_TYPE_METAL_GATE) {
CollisionHeader_GetVirtual(&gShadowTempleMetalGateCol, &colHeader);
thisx->home.pos.y += 100.0f;
if (Flags_GetSwitch(play, this->unk_168)) {
this->actionFunc = func_8087E34C;
if (Flags_GetSwitch(play, this->switchFlag)) {
// Gate open
this->actionFunc = BgHakaMeganeBG_DoNothing;
thisx->world.pos.y = thisx->home.pos.y;
} else {
// Gate closed
thisx->flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
this->actionFunc = func_8087E288;
this->actionFunc = BgHakaMeganeBG_Gate_WaitForSwitchFlag;
}
} else {
CollisionHeader_GetVirtual(&object_haka_objects_Col_00A7F4, &colHeader);
this->unk_16A = 80;
this->actionFunc = func_8087E10C;
} else /* BGHAKAMEGANEBG_TYPE_CHAINED_ELEVATOR_PLATFORM */ {
CollisionHeader_GetVirtual(&gShadowTempleChainedElevatorPlatformCol, &colHeader);
this->timer = 80;
this->actionFunc = BgHakaMeganeBG_ElevatorPlatform_Drop;
thisx->cullingVolumeScale = 3000.0f;
thisx->cullingVolumeDownward = 3000.0f;
}
@@ -111,45 +122,64 @@ void BgHakaMeganeBG_Destroy(Actor* thisx, PlayState* play) {
DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId);
}
void func_8087DFF8(BgHakaMeganeBG* this, PlayState* play) {
if (this->unk_16A != 0) {
this->unk_16A--;
void BgHakaMeganeBG_HiddenMovingPlatform_Idle(BgHakaMeganeBG* this, PlayState* play) {
if (this->timer != 0) {
this->timer--;
}
if (this->unk_16A == 0) {
this->unk_16A = 40;
if (this->timer == 0) {
this->timer = 40;
// world.rot.y is used like a binary flag here, where rotating by exactly 180 degrees will toggle the direction
// of movement. Arbitrary rotation values won't function correctly here.
//! @bug On the first run of the actor, this line will toggle the direction of movement before the actor has
//! moved to the secondary position, causing it to teleport. In practice it is hard to observe in normal
//! gameplay because the platform is invisible without lens of truth, and the teleport happens after a second of
//! spawning into the room.
//!
//! One possible fix would be to move this line into BgHakaMeganeBG_HiddenMovingPlatform_Move so it's always
//! flipping direction after it reached its destination.
this->dyna.actor.world.rot.y += 0x8000;
this->actionFunc = func_8087E040;
this->actionFunc = BgHakaMeganeBG_HiddenMovingPlatform_Move;
}
}
void func_8087E040(BgHakaMeganeBG* this, PlayState* play) {
void BgHakaMeganeBG_HiddenMovingPlatform_Move(BgHakaMeganeBG* this, PlayState* play) {
f32 xSub;
if (this->unk_16A != 0) {
this->unk_16A--;
if (this->timer != 0) {
this->timer--;
}
xSub = (sinf(((this->unk_16A * 0.025f) + 0.5f) * M_PI) + 1.0f) * 160.0f;
// The sine function is used to create an easing effect when the platform reaches its two target destinations. It
// works like this:
//
// The timer state, ranging from 39 to 0, is converted into an angle between 270 to 90 degrees, and in turn the sine
// function returns a value between -1.0 to 1.0. This is incremented by +1 to get 0.0 to 2.0, and finally multiplied
// by half of the travel distance to get the current platform's delta position.
xSub = (sinf(((this->timer * (1.0f / 40.0f)) + 0.5f) * M_PI) + 1.0f) * (320.0f / 2);
// The result is then inverted if the platform should travel the opposite direction.
if (this->dyna.actor.world.rot.y != this->dyna.actor.shape.rot.y) {
xSub = 320.0f - xSub;
}
this->dyna.actor.world.pos.x = this->dyna.actor.home.pos.x - xSub;
if (this->unk_16A == 0) {
this->unk_16A = 20;
this->actionFunc = func_8087DFF8;
if (this->timer == 0) {
this->timer = 20;
this->actionFunc = BgHakaMeganeBG_HiddenMovingPlatform_Idle;
}
}
void func_8087E10C(BgHakaMeganeBG* this, PlayState* play) {
void BgHakaMeganeBG_ElevatorPlatform_Drop(BgHakaMeganeBG* this, PlayState* play) {
// Here velocity.y is storing absolute velocity instead of directional velocity
this->dyna.actor.velocity.y += 1.0f;
this->dyna.actor.velocity.y = CLAMP_MAX(this->dyna.actor.velocity.y, 20.0f);
if (this->unk_16A != 0) {
this->unk_16A--;
if (this->timer != 0) {
this->timer--;
}
if (!Math_StepToF(&this->dyna.actor.world.pos.y, this->dyna.actor.home.pos.y - 640.0f,
@@ -157,51 +187,51 @@ void func_8087E10C(BgHakaMeganeBG* this, PlayState* play) {
Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_CHINETRAP_DOWN - SFX_FLAG);
}
if (this->unk_16A == 0) {
this->unk_16A = 120;
this->actionFunc = func_8087E1E0;
if (this->timer == 0) {
this->timer = 120;
this->actionFunc = BgHakaMeganeBG_ElevatorPlatform_Raise;
this->dyna.actor.velocity.y = 0.0f;
}
}
void func_8087E1E0(BgHakaMeganeBG* this, PlayState* play) {
void BgHakaMeganeBG_ElevatorPlatform_Raise(BgHakaMeganeBG* this, PlayState* play) {
Math_StepToF(&this->dyna.actor.world.pos.y, this->dyna.actor.home.pos.y, 16.0f / 3.0f);
Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_BRIDGE_CLOSE - SFX_FLAG);
if (this->unk_16A != 0) {
this->unk_16A--;
if (this->timer != 0) {
this->timer--;
}
if (this->unk_16A == 0) {
this->unk_16A = 80;
this->actionFunc = func_8087E10C;
if (this->timer == 0) {
this->timer = 80;
this->actionFunc = BgHakaMeganeBG_ElevatorPlatform_Drop;
}
}
void func_8087E258(BgHakaMeganeBG* this, PlayState* play) {
void BgHakaMeganeBG_RotatingPlatform_Spin(BgHakaMeganeBG* this, PlayState* play) {
this->dyna.actor.shape.rot.y += 0x180;
Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_ELEVATOR_MOVE - SFX_FLAG);
}
void func_8087E288(BgHakaMeganeBG* this, PlayState* play) {
if (Flags_GetSwitch(play, this->unk_168)) {
void BgHakaMeganeBG_Gate_WaitForSwitchFlag(BgHakaMeganeBG* this, PlayState* play) {
if (Flags_GetSwitch(play, this->switchFlag)) {
OnePointCutscene_Attention(play, &this->dyna.actor);
this->actionFunc = func_8087E2D8;
this->actionFunc = BgHakaMeganeBG_Gate_Open;
}
}
void func_8087E2D8(BgHakaMeganeBG* this, PlayState* play) {
void BgHakaMeganeBG_Gate_Open(BgHakaMeganeBG* this, PlayState* play) {
Math_StepToF(&this->dyna.actor.speed, 30.0f, 2.0f);
if (Math_StepToF(&this->dyna.actor.world.pos.y, this->dyna.actor.home.pos.y, this->dyna.actor.speed)) {
Actor_SetFocus(&this->dyna.actor, 50.0f);
this->actionFunc = func_8087E34C;
this->actionFunc = BgHakaMeganeBG_DoNothing;
} else {
Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_METALDOOR_OPEN);
}
}
void func_8087E34C(BgHakaMeganeBG* this, PlayState* play) {
void BgHakaMeganeBG_DoNothing(BgHakaMeganeBG* this, PlayState* play) {
}
void BgHakaMeganeBG_Update(Actor* thisx, PlayState* play) {
@@ -211,12 +241,19 @@ void BgHakaMeganeBG_Update(Actor* thisx, PlayState* play) {
}
void BgHakaMeganeBG_Draw(Actor* thisx, PlayState* play) {
static Gfx* sDLists[] = {
gShadowTempleHiddenBlockPlatformDL,
gShadowTempleChainedElevatorPlatformDL,
gShadowTempleBlackPlatformWithScrewColumnDL,
gShadowTempleMetalGateDL,
};
BgHakaMeganeBG* this = (BgHakaMeganeBG*)thisx;
s16 params = this->dyna.actor.params;
if (params == 0) {
Gfx_DrawDListXlu(play, object_haka_objects_DL_008EB0);
if (params == BGHAKAMEGANEBG_TYPE_HIDDEN_MOVING_PLATFORM) {
Gfx_DrawDListXlu(play, gShadowTempleHiddenBlockPlatformDL);
} else {
Gfx_DrawDListOpa(play, D_8087E410[params]);
Gfx_DrawDListOpa(play, sDLists[params]);
}
}
@@ -4,6 +4,13 @@
#include "ultra64.h"
#include "actor.h"
typedef enum BgHakaMeganeBGType {
/* 0 */ BGHAKAMEGANEBG_TYPE_HIDDEN_MOVING_PLATFORM,
/* 1 */ BGHAKAMEGANEBG_TYPE_CHAINED_ELEVATOR_PLATFORM,
/* 2 */ BGHAKAMEGANEBG_TYPE_ROTATING_PLATFORM,
/* 3 */ BGHAKAMEGANEBG_TYPE_METAL_GATE
} BgHakaMeganeBGType;
struct BgHakaMeganeBG;
typedef void (*BgHakaMeganeBGActionFunc)(struct BgHakaMeganeBG*, struct PlayState*);
@@ -11,8 +18,8 @@ typedef void (*BgHakaMeganeBGActionFunc)(struct BgHakaMeganeBG*, struct PlayStat
typedef struct BgHakaMeganeBG {
/* 0x0000 */ DynaPolyActor dyna;
/* 0x0164 */ BgHakaMeganeBGActionFunc actionFunc;
/* 0x0168 */ u8 unk_168;
/* 0x016A */ s16 unk_16A;
/* 0x0168 */ u8 switchFlag;
/* 0x016A */ s16 timer;
} BgHakaMeganeBG; // size = 0x016C
#endif
@@ -96,7 +96,7 @@ void BgYdanMaruta_Init(Actor* thisx, PlayState* play) {
Collider_InitTris(play, &this->collider);
Collider_SetTris(play, &this->collider, &this->dyna.actor, &sTrisInit, this->colliderElements);
this->switchFlag = PARAMS_GET_U(this->dyna.actor.params, 0, 16);
this->switchFlag = PARAMS_GET_U(this->dyna.actor.params, 0, 8);
thisx->params = PARAMS_GET_U(thisx->params, 8, 8); // thisx is required to match here
if (this->dyna.actor.params == 0) {
+2 -2
View File
@@ -26,8 +26,8 @@
#include "assets/objects/gameplay_keep/shadow_circle.h"
#include "assets/objects/object_tw/object_tw.h"
#pragma increment_block_number "gc-eu:0 gc-eu-mq:0 gc-jp:0 gc-jp-ce:0 gc-jp-mq:0 gc-us:0 gc-us-mq:0" \
"ique-cn:0 ntsc-1.0:0 ntsc-1.1:0 ntsc-1.2:0 pal-1.0:0 pal-1.1:0"
#pragma increment_block_number "gc-eu:0 gc-eu-mq:0 gc-jp:0 gc-jp-ce:0 gc-jp-mq:0 gc-us:0 gc-us-mq:0 ique-cn:128" \
"ntsc-1.0:0 ntsc-1.1:0 ntsc-1.2:0 pal-1.0:0 pal-1.1:0"
#define FLAGS \
(ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
@@ -33,6 +33,12 @@
#define ENDOOR_GET_CHECKABLE_TEXT_ID(thisx) PARAMS_GET_U((thisx)->params, 0, 6)
#define ENDOOR_PARAMS(type, isDoubleDoor, data) (((type) << 7) | (((isDoubleDoor) ? 1 : 0) << 6) | (data))
#define ENDOOR_PARAMS_NODATA(type, isDoubleDoor) (ENDOOR_PARAMS(type, isDoubleDoor, 0x3F))
#define ENDOOR_PARAMS_LOCKED(isDoubleDoor, switchFlag) (ENDOOR_PARAMS(DOOR_LOCKED, isDoubleDoor, switchFlag))
#define ENDOOR_PARAMS_CHECKABLE(isDoubleDoor, textIdMinus0x0200) (ENDOOR_PARAMS(DOOR_CHECKABLE, isDoubleDoor, textIdMinus0x0200))
#define ENDOOR_PARAMS_EVENING(isDoubleDoor, textIdMinus0x0200) (ENDOOR_PARAMS(DOOR_EVENING, isDoubleDoor, textIdMinus0x0200))
typedef enum EnDoorType {
/* 0x00 */ DOOR_ROOMLOAD, // loads rooms
/* 0x01 */ DOOR_LOCKED, // small key locked door
@@ -622,7 +622,7 @@ void ObjSwitch_CrystalOffInit(ObjSwitch* this) {
this->crystalColor.r = 0;
this->crystalColor.g = 0;
this->crystalColor.b = 0;
this->crystalSubtype1texture = gCrstalSwitchRedTex;
this->crystalSubtype1texture = gCrystalSwitchRedTex;
this->actionFunc = ObjSwitch_CrystalOff;
}
@@ -677,7 +677,7 @@ void ObjSwitch_CrystalOnInit(ObjSwitch* this) {
this->crystalColor.r = 255;
this->crystalColor.g = 255;
this->crystalColor.b = 255;
this->crystalSubtype1texture = gCrstalSwitchBlueTex;
this->crystalSubtype1texture = gCrystalSwitchBlueTex;
this->actionFunc = ObjSwitch_CrystalOn;
}
@@ -0,0 +1,50 @@
def bits(p: int, s: int, n: int):
return (p >> s) & ((1 << n) - 1)
def cbool(b: bool):
return "true" if b else "false"
def params_en_door(params: int):
unused_mask = 0b1111_1100_0011_1111
type = bits(params, 7, 3)
type_name = [
"DOOR_ROOMLOAD",
"DOOR_LOCKED",
"DOOR_ROOMLOAD2",
"DOOR_SCENEEXIT",
"DOOR_AJAR",
"DOOR_CHECKABLE",
"DOOR_EVENING",
"DOOR_ROOMLOAD7",
][type]
isDoubleDoor = bits(params, 6, 1) != 0
if type_name == "DOOR_LOCKED":
unused_mask &= ~0b0011_1111
switchFlag = bits(params, 0, 6)
params_str = f"ENDOOR_PARAMS_LOCKED({cbool(isDoubleDoor)}, {switchFlag})"
elif type_name == "DOOR_CHECKABLE":
unused_mask &= ~0b0011_1111
textIdMinux0x0200 = bits(params, 0, 6)
params_str = f"ENDOOR_PARAMS_CHECKABLE({cbool(isDoubleDoor)}, {textIdMinux0x0200})"
elif type_name == "DOOR_EVENING":
unused_mask &= ~0b0011_1111
textIdMinux0x0200 = bits(params, 0, 6)
params_str = f"ENDOOR_PARAMS_EVENING({cbool(isDoubleDoor)}, {textIdMinux0x0200})"
else:
unused_mask &= ~0b0011_1111
data = bits(params, 0, 6)
assert data == 0x3F
params_str = f"ENDOOR_PARAMS_NODATA({type_name}, {cbool(isDoubleDoor)})"
assert (params & unused_mask) == 0, (f"{params:#06X}", params_str)
return params_str
PARAMS_FMT = {
"ACTOR_EN_DOOR": params_en_door,
}
INCLUDES = {
"ACTOR_EN_DOOR": ["src/overlays/actors/ovl_En_Door/z_en_door.h"],
}
@@ -24,6 +24,7 @@ from ..extase.cdata_resources import (
)
from .. import oot64_data
from . import actor_params
VERBOSE_SPAWN_LIST_LENGTH_GUESSING = False
@@ -37,7 +38,8 @@ class ActorEntryListResource(CDataArrayNamedLengthResource):
f.write("{\n")
f.write(wctx.line_prefix + INDENT)
f.write(oot64_data.get_actor_id_name(v["id"]))
actor_id_name = oot64_data.get_actor_id_name(v["id"])
f.write(actor_id_name)
f.write(",\n")
f.write(wctx.line_prefix + INDENT)
@@ -52,9 +54,16 @@ class ActorEntryListResource(CDataArrayNamedLengthResource):
f.write(wctx.line_prefix + INDENT)
params = v["params"]
f.write(fmt_hex_s(params, 4))
if params < 0:
params_u16 = params + 0x1_0000
else:
params_u16 = params
fmt_params = actor_params.PARAMS_FMT.get(actor_id_name)
if fmt_params is None:
f.write(fmt_hex_s(params, 4))
else:
f.write(fmt_params(params_u16))
if params < 0 or fmt_params is not None:
f.write(f" /* 0x{params_u16:04X} */")
f.write(", // params\n")
@@ -76,7 +85,14 @@ class ActorEntryListResource(CDataArrayNamedLengthResource):
return f"ActorEntry {self.symbol_name}[{self.length_name}]"
def get_c_includes(self):
return ("actor.h",)
includes = ["actor.h"]
for elem in self.cdata_unpacked:
actor_id = elem["id"]
actor_id_name = oot64_data.get_actor_id_name(actor_id)
actor_params_includes = actor_params.INCLUDES.get(actor_id_name)
if actor_params_includes is not None:
includes.extend(actor_params_includes)
return includes
def get_h_includes(self):
return ("scene.h",)
@@ -344,7 +360,8 @@ class TransitionActorEntryListResource(CDataArrayNamedLengthResource):
f.write("}, // sides\n")
f.write(wctx.line_prefix + INDENT)
f.write(oot64_data.get_actor_id_name(v["id"]))
actor_id_name = oot64_data.get_actor_id_name(v["id"])
f.write(actor_id_name)
f.write(",\n")
f.write(wctx.line_prefix + INDENT)
@@ -358,9 +375,16 @@ class TransitionActorEntryListResource(CDataArrayNamedLengthResource):
f.write(wctx.line_prefix + INDENT)
params = v["params"]
f.write(fmt_hex_s(params, 4))
if params < 0:
params_u16 = params + 0x1_0000
else:
params_u16 = params
fmt_params = actor_params.PARAMS_FMT.get(actor_id_name)
if fmt_params is None:
f.write(fmt_hex_s(params, 4))
else:
f.write(fmt_params(params_u16))
if params < 0 or fmt_params is not None:
f.write(f" /* 0x{params_u16:04X} */")
f.write(", // params\n")
@@ -394,7 +418,14 @@ class TransitionActorEntryListResource(CDataArrayNamedLengthResource):
return f"TransitionActorEntry {self.symbol_name}[{self.length_name}]"
def get_c_includes(self):
return ("actor.h",)
includes = ["actor.h"]
for elem in self.cdata_unpacked:
actor_id = elem["id"]
actor_id_name = oot64_data.get_actor_id_name(actor_id)
actor_params_includes = actor_params.INCLUDES.get(actor_id_name)
if actor_params_includes is not None:
includes.extend(actor_params_includes)
return includes
def get_h_includes(self):
return ("scene.h",)
+1 -1
View File
@@ -349,7 +349,7 @@ class BssSymbol:
INCREMENT_BLOCK_NUMBER_RE = re.compile(r"increment_block_number_(\d+)_(\d+)")
# Find increment_block_number pragmas by parsing the symbol names generated by preprocess.py.
# Find increment_block_number pragmas by parsing the symbol names generated by preprocess.sh.
# This is pretty ugly but it seems more reliable than trying to determine the line numbers of
# BSS variables in the C file.
def find_pragmas(symbol_table: list[SymbolTableEntry]) -> list[Pragma]:
+1 -1
View File
@@ -497,7 +497,7 @@ def run_cfe(
command_line: list[str], keep_files: bool
) -> Tuple[list[SymbolTableEntry], list[UcodeOp]]:
# Assume command line is of the form:
# python3 tools/preprocess.py [COMPILER] [COMPILER_ARGS] [INPUT_FILE]
# python3 tools/preprocess.sh [COMPILER] [COMPILER_ARGS] [INPUT_FILE]
input_file = Path(command_line[-1])
rest = command_line[:-1]
+1 -1
View File
@@ -1,7 +1,7 @@
// z_kankyo, z_demo_kankyo, z_en_viewer, z_object_kankyo, z_eff_ss_dead_dd
D_01000000 = 0x01000000;
// code_800AD920
// z_viszbuf
D_0E000000 = 0x0E000000;
// z_vismono