mirror of
https://github.com/zeldaret/oot
synced 2026-07-07 14:03:40 -04:00
Merge branch 'main' into enRu1-actions-sitting
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)] = {
|
||||
|
||||
@@ -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)];
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
@@ -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,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>
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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[];
|
||||
|
||||
@@ -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[];
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
@@ -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
@@ -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
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
@@ -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]:
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user