1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2024-12-27 23:36:22 +00:00

[ntsc-1.0/1.1] Match z_boss_ganon.c and z_boss_ganon2.c changes from PAL 1.0 (#2228)

This commit is contained in:
cadmic 2024-09-25 20:36:58 -07:00 committed by GitHub
parent 19621c6a3f
commit f7a0117e7d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 394 additions and 391 deletions

View file

@ -1,28 +1,28 @@
<Root>
<File Name="ovl_Boss_Ganon2">
<Texture Name="gGanonLightOrbTex" OutName="ganon_light_orb" Format="i8" Width="64" Height="64" Offset="0x0"/>
<DList Name="gGanonLightOrbMaterialDL" Offset="0x1040"/>
<DList Name="gGanonLightOrbModelDL" Offset="0x10B0"/>
<DList Name="gGanonShadowMaterialDL" Offset="0x1108"/>
<DList Name="gGanonShadowModelDL" Offset="0x1128"/>
<Texture Name="gGanonSwordTrailTex" OutName="ganon_sword_trail" Format="i8" Width="32" Height="32" Offset="0x1158"/>
<Texture Name="gGanonSwordTrailMaskTex" OutName="ganon_sword_trail_mask" Format="i4" Width="32" Height="32" Offset="0x1558"/>
<Array Name="gGanonSwordTrailVtx" Count="22" Offset="0x1758">
<Texture Name="gGanonLightOrbTex" OutName="ganon_light_orb" Format="i8" Width="64" Height="64" Offset="0x0" Static="Off"/>
<DList Name="gGanonLightOrbMaterialDL" Offset="0x1040" Static="Off"/>
<DList Name="gGanonLightOrbModelDL" Offset="0x10B0" Static="Off"/>
<DList Name="gGanonShadowMaterialDL" Offset="0x1108" Static="Off"/>
<DList Name="gGanonShadowModelDL" Offset="0x1128" Static="Off"/>
<Texture Name="gGanonSwordTrailTex" OutName="ganon_sword_trail" Format="i8" Width="32" Height="32" Offset="0x1158" Static="Off"/>
<Texture Name="gGanonSwordTrailMaskTex" OutName="ganon_sword_trail_mask" Format="i4" Width="32" Height="32" Offset="0x1558" Static="Off"/>
<Array Name="gGanonSwordTrailVtx" Count="22" Offset="0x1758" Static="Off">
<Vtx/>
</Array>
<DList Name="gGanonSwordTrailDL" Offset="0x18B8"/>
<Texture Name="gGanonTriforceTex" OutName="ganon_triforce" Format="i8" Width="64" Height="64" Offset="0x19D0"/>
<DList Name="gGanonTriforceDL" Offset="0x2A10"/>
<Texture Name="gGanonLightningTex" OutName="ganon_lightning" Format="i4" Width="32" Height="160" Offset="0x2A90"/>
<DList Name="gGanonLightningDL" Offset="0x34D0"/> <!-- Original name might be "efc_fg2_thunder1_modelT" -->
<Texture Name="gGanonFireRingTex" OutName="ganon_fire_ring" Format="i8" Width="32" Height="64" Offset="0x3558"/>
<DList Name="gGanonFireRingDL" Offset="0x3EF8"/> <!-- Original name is "ganon_fire_modelT" -->
<Texture Name="gGanonZeldaMagicTex" OutName="ganon_zelda_magic" Format="i8" Width="32" Height="64" Offset="0x4018"/>
<DList Name="gGanonZeldaMagicDL" Offset="0x4978"/> <!-- Original name is "efc_ganon2_hadou_modelT" ("wave motion; undulation; surge") -->
<Texture Name="gGanonMasterSwordShadowTex" OutName="ganon_master_sword_shadow" Format="i8" Width="32" Height="32" Offset="0x4A80"/>
<DList Name="gGanonMasterSwordShadowDL" Offset="0x4EC0"/> <!-- Original name is "master_sword_shadow_model" -->
<Texture Name="gGanonMasterSwordPommelTex" OutName="ganon_master_sword_pommel" Format="rgba16" Width="16" Height="16" Offset="0x4F40"/>
<Texture Name="gGanonMasterSwordGuardTex" OutName="ganon_master_sword_guard" Format="rgba16" Width="32" Height="32" Offset="0x5140"/>
<DList Name="gGanonMasterSwordDL" Offset="0x60E0"/> <!-- Original name is "master_gn2_swordB_model" -->
<DList Name="gGanonSwordTrailDL" Offset="0x18B8" Static="Off"/>
<Texture Name="gGanonTriforceTex" OutName="ganon_triforce" Format="i8" Width="64" Height="64" Offset="0x19D0" Static="Off"/>
<DList Name="gGanonTriforceDL" Offset="0x2A10" Static="Off"/>
<Texture Name="gGanonLightningTex" OutName="ganon_lightning" Format="i4" Width="32" Height="160" Offset="0x2A90" Static="Off"/>
<DList Name="gGanonLightningDL" Offset="0x34D0" Static="Off"/> <!-- Original name might be "efc_fg2_thunder1_modelT" -->
<Texture Name="gGanonFireRingTex" OutName="ganon_fire_ring" Format="i8" Width="32" Height="64" Offset="0x3558" Static="Off"/>
<DList Name="gGanonFireRingDL" Offset="0x3EF8" Static="Off"/> <!-- Original name is "ganon_fire_modelT" -->
<Texture Name="gGanonZeldaMagicTex" OutName="ganon_zelda_magic" Format="i8" Width="32" Height="64" Offset="0x4018" Static="Off"/>
<DList Name="gGanonZeldaMagicDL" Offset="0x4978" Static="Off"/> <!-- Original name is "efc_ganon2_hadou_modelT" ("wave motion; undulation; surge") -->
<Texture Name="gGanonMasterSwordShadowTex" OutName="ganon_master_sword_shadow" Format="i8" Width="32" Height="32" Offset="0x4A80" Static="Off"/>
<DList Name="gGanonMasterSwordShadowDL" Offset="0x4EC0" Static="Off"/> <!-- Original name is "master_sword_shadow_model" -->
<Texture Name="gGanonMasterSwordPommelTex" OutName="ganon_master_sword_pommel" Format="rgba16" Width="16" Height="16" Offset="0x4F40" Static="Off"/>
<Texture Name="gGanonMasterSwordGuardTex" OutName="ganon_master_sword_guard" Format="rgba16" Width="32" Height="32" Offset="0x5140" Static="Off"/>
<DList Name="gGanonMasterSwordDL" Offset="0x60E0" Static="Off"/> <!-- Original name is "master_gn2_swordB_model" -->
</File>
</Root>

View file

@ -1,4 +1,5 @@
#include "z_boss_ganon.h"
#include "versions.h"
#include "assets/overlays/ovl_Boss_Ganon/ovl_Boss_Ganon.h"
#include "overlays/actors/ovl_En_Ganon_Mant/z_en_ganon_mant.h"
#include "overlays/actors/ovl_En_Zl3/z_en_zl3.h"
@ -1225,15 +1226,10 @@ void BossGanon_ShatterWindows(u8 windowShatterState) {
}
void BossGanon_DeathAndTowerCutscene(BossGanon* this, PlayState* play) {
static Color_RGBA8 bloodPrimColor = { 0, 120, 0, 255 };
static Color_RGBA8 bloodEnvColor = { 0, 120, 0, 255 };
s16 i;
u8 moveCam = false;
Player* player = GET_PLAYER(play);
s16 pad;
Vec3f sp98;
Vec3f sp8C;
Vec3f sp80;
gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->animObjectSlot].segment);
@ -1336,6 +1332,17 @@ void BossGanon_DeathAndTowerCutscene(BossGanon* this, PlayState* play) {
Actor_PlaySfx(&this->actor, NA_SE_EN_GANON_TOKETU);
} else {
if (Animation_OnFrame(&this->skelAnime, this->fwork[GDF_FWORK_1] - 16.0f)) {
Vec3f sp98;
Vec3f sp8C;
#if OOT_VERSION < PAL_1_0
Color_RGBA8 bloodPrimColor = { 120, 0, 0, 255 };
Color_RGBA8 bloodEnvColor = { 120, 0, 0, 255 };
#else
static Color_RGBA8 bloodPrimColor = { 0, 120, 0, 255 };
static Color_RGBA8 bloodEnvColor = { 0, 120, 0, 255 };
#endif
Vec3f sp80;
for (i = 0; i < 40; i++) {
sp98.x = Rand_CenteredFloat(5.0f);
sp98.y = Rand_CenteredFloat(1.5f) + 1.0f;

View file

@ -7,9 +7,25 @@
#include "assets/objects/object_ganon2/object_ganon2.h"
#include "assets/objects/object_ganon_anime3/object_ganon_anime3.h"
#include "assets/objects/object_geff/object_geff.h"
#include "assets/overlays/ovl_Boss_Ganon2/ovl_Boss_Ganon2.h"
#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4 | ACTOR_FLAG_5)
#define BOSS_GANON2_EFFECT_COUNT 100
typedef struct BossGanon2Effect {
/* 0x00 */ u8 type;
/* 0x01 */ u8 unk_01;
/* 0x04 */ Vec3f position;
/* 0x10 */ Vec3f velocity;
/* 0x1C */ Vec3f accel;
/* 0x28 */ char unk_28[0x6];
/* 0x2E */ s16 unk_2E;
/* 0x30 */ char unk_30[0x4];
/* 0x34 */ f32 scale;
/* 0x38 */ Vec3f unk_38;
} BossGanon2Effect; // size = 0x44
void BossGanon2_Init(Actor* thisx, PlayState* play);
void BossGanon2_Destroy(Actor* thisx, PlayState* play);
void BossGanon2_Update(Actor* thisx, PlayState* play);
@ -45,7 +61,265 @@ ActorProfile Boss_Ganon2_Profile = {
/**/ BossGanon2_Draw,
};
#include "z_boss_ganon2_data.inc.c"
static Vec3f D_80906D60 = { 0.0f, 0.0f, 0.0f };
static Vec3f D_80906D6C = { 0.0f, 0.0f, 500.0f };
static u8 D_80906D78 = 0;
static ColliderJntSphElementInit sJntSphItemsInit1[] = {
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x00, 0x10 },
{ 0xFFCFFFFF, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
OCELEM_ON,
},
{ 0, { { 0, 0, 0 }, 30 }, 100 },
},
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x00, 0x10 },
{ 0xFFCFFFFF, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
OCELEM_ON,
},
{ 1, { { 0, 0, 0 }, 30 }, 100 },
},
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x00, 0x10 },
{ 0xFFCFFFFF, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
OCELEM_ON,
},
{ 2, { { 0, 0, 0 }, 30 }, 100 },
},
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x00, 0x10 },
{ 0xFFCFFFFF, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
OCELEM_ON,
},
{ 3, { { 0, 0, 0 }, 20 }, 100 },
},
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x00, 0x10 },
{ 0xFFCFFFFF, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
OCELEM_ON,
},
{ 4, { { 0, 0, 0 }, 20 }, 100 },
},
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x00, 0x10 },
{ 0xFFCFFFFF, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
OCELEM_ON,
},
{ 5, { { 0, 0, 0 }, 20 }, 100 },
},
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x00, 0x10 },
{ 0xFFCFFFFF, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
OCELEM_ON,
},
{ 6, { { 0, 0, 0 }, 20 }, 100 },
},
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x00, 0x10 },
{ 0xFFCFFFFF, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
OCELEM_ON,
},
{ 7, { { 0, 0, 0 }, 20 }, 100 },
},
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x00, 0x10 },
{ 0xFFCFFFFF, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
OCELEM_ON,
},
{ 8, { { 0, 0, 0 }, 20 }, 100 },
},
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x00, 0x10 },
{ 0xFFCFFFFF, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
OCELEM_ON,
},
{ 9, { { 0, 0, 0 }, 20 }, 100 },
},
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x00, 0x10 },
{ 0xFFCFFFFF, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
OCELEM_ON,
},
{ 10, { { 0, 0, 0 }, 20 }, 100 },
},
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x00, 0x10 },
{ 0xFFCFFFFF, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
OCELEM_ON,
},
{ 11, { { 0, 0, 0 }, 20 }, 100 },
},
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x00, 0x10 },
{ 0xFFCFFFFF, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
OCELEM_ON,
},
{ 12, { { 0, 0, 0 }, 20 }, 100 },
},
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x00, 0x10 },
{ 0xFFCFFFFF, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
OCELEM_ON,
},
{ 13, { { 0, 0, 0 }, 20 }, 100 },
},
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x00, 0x10 },
{ 0xFFCFFFFF, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
OCELEM_ON,
},
{ 14, { { 0, 0, 0 }, 20 }, 100 },
},
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x00, 0x00 },
{ 0xFFCFFFFF, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
OCELEM_ON,
},
{ 15, { { 0, 0, 0 }, 30 }, 100 },
},
};
static ColliderJntSphInit sJntSphInit1 = {
{
COL_MATERIAL_METAL,
AT_ON | AT_TYPE_ENEMY,
AC_ON | AC_TYPE_PLAYER,
OC1_ON | OC1_TYPE_PLAYER,
OC2_FIRST_ONLY | OC2_TYPE_1,
COLSHAPE_JNTSPH,
},
ARRAY_COUNT(sJntSphItemsInit1),
sJntSphItemsInit1,
};
static ColliderJntSphElementInit sJntSphItemsInit2[] = {
{
{
ELEM_MATERIAL_UNK2,
{ 0xFFCFFFFF, 0x00, 0x40 },
{ 0xFFDFFFFF, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
OCELEM_ON,
},
{ 15, { { 0, 0, 0 }, 45 }, 100 },
},
{
{
ELEM_MATERIAL_UNK2,
{ 0xFFCFFFFF, 0x00, 0x40 },
{ 0xFFDFFFFF, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
OCELEM_ON,
},
{ 16, { { 0, 0, 0 }, 45 }, 100 },
},
};
static ColliderJntSphInit sJntSphInit2 = {
{
COL_MATERIAL_METAL,
AT_ON | AT_TYPE_ENEMY,
AC_ON | AC_TYPE_PLAYER,
OC1_ON | OC1_TYPE_PLAYER,
OC2_TYPE_1,
COLSHAPE_JNTSPH,
},
ARRAY_COUNT(sJntSphItemsInit2),
sJntSphItemsInit2,
};
static Vec3f D_8090EB20;
static EnZl3* sZelda;
static Actor* D_8090EB30;
// unused
static UNK_TYPE D_8090EB34;
static BossGanon2Effect sEffects[BOSS_GANON2_EFFECT_COUNT];
static s32 sSeed1;
static s32 sSeed2;
static s32 sSeed3;
// unused
static UNK_TYPE D_809105DC;
static Vec3f D_809105D8[4];
static Vec3f D_80910608[4];
static s8 D_80910638;
void BossGanon2_InitRand(s32 seedInit0, s32 seedInit1, s32 seedInit2) {
sSeed1 = seedInit0;
@ -1448,12 +1722,18 @@ void func_80901020(BossGanon2* this, PlayState* play) {
void func_8090109C(BossGanon2* this, PlayState* play) {
u8 i;
Vec3f velocity;
Vec3f accel;
#if OOT_VERSION < PAL_1_0
Color_RGBA8 sPrimColor = { 120, 0, 0, 255 };
Color_RGBA8 sEnvColor = { 120, 0, 0, 255 };
#else
static Color_RGBA8 sPrimColor = { 0, 120, 0, 255 };
static Color_RGBA8 sEnvColor = { 0, 120, 0, 255 };
#endif
Vec3f pos;
for (i = 0; i < 70; i++) {
Vec3f velocity;
Vec3f accel;
Vec3f pos;
velocity.x = Rand_CenteredFloat(50.0f);
velocity.y = Rand_CenteredFloat(10.0f) + 5.0f;
velocity.z = Rand_CenteredFloat(50.0f);
@ -1467,6 +1747,18 @@ void func_8090109C(BossGanon2* this, PlayState* play) {
}
}
static Vec3f D_8090702C[] = {
{ 10.0f, -10.0f, 0.0f },
{ 0.0f, 0.0f, -60.0f },
{ 70.0f, -30.0f, 10.0f },
};
static Vec3f D_80907050[] = {
{ -20.0f, 0.0f, 0.0f },
{ -15.0f, 0.0f, 10.0f },
{ -16.0f, -12.0f, 40.0f },
};
void func_8090120C(BossGanon2* this, PlayState* play) {
Player* player;
f32 temp_f14;
@ -1875,7 +2167,12 @@ void func_80902348(BossGanon2* this, PlayState* play) {
temp_f2 = -200.0f - player->actor.world.pos.x;
temp_f12 = -200.0f - player->actor.world.pos.z;
if (sqrtf(SQ(temp_f2) + SQ(temp_f12)) > 784.0f) {
#if OOT_VERSION < PAL_1_0
if (sqrtf(SQ(temp_f2) + SQ(temp_f12)) > 800.0f)
#else
if (sqrtf(SQ(temp_f2) + SQ(temp_f12)) > 784.0f)
#endif
{
for (j = 0; j < PLAYER_BODYPART_MAX; j++) {
player->bodyFlameTimers[j] = Rand_S16Offset(0, 200);
}
@ -1967,6 +2264,8 @@ void BossGanon2_CollisionCheck(BossGanon2* this, PlayState* play) {
}
}
static s16 D_80907074[] = { 0, 1, 2, 2, 1, 0 };
void BossGanon2_Update(Actor* thisx, PlayState* play) {
BossGanon2* this = (BossGanon2*)thisx;
s32 pad;
@ -2205,6 +2504,11 @@ void BossGanon2_Update(Actor* thisx, PlayState* play) {
BossGanon2_UpdateEffects(this, play);
}
static s16 D_80907080 = 0;
static u8 D_80907084[] = { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 };
static u8 D_80907090[] = { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21 };
void func_809034E4(Vec3f* arg0, Vec3f* arg1) {
Vtx* vtx;
Vec3f sp2D0;
@ -2436,7 +2740,11 @@ void func_80904108(BossGanon2* this, PlayState* play) {
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 200, 0, (s8)this->unk_324);
gDPSetEnvColor(POLY_XLU_DISP++, 255, 0, 0, 128);
Matrix_Translate(-200.0f, 1086.0f, -200.0f, MTXMODE_NEW);
#if OOT_VERSION < PAL_1_0
Matrix_Scale(0.1f, 0.1f, 0.1f, MTXMODE_APPLY);
#else
Matrix_Scale(0.098000005f, 0.1f, 0.098000005f, MTXMODE_APPLY);
#endif
MATRIX_FINALIZE_AND_LOAD(POLY_XLU_DISP++, gameState->gfxCtx, "../z_boss_ganon2.c", 5183);
gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(gGanonFireRingDL));
Matrix_Pop();
@ -2546,6 +2854,25 @@ s32 BossGanon2_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec
return 0;
}
static s8 D_8090709C[] = {
0xFF, 0xFF, 0x01, 0xFF, 0x03, 0x04, 0xFF, 0xFF, 0x05, 0xFF, 0x06, 0x07, 0xFF, 0xFF, 0x08, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x00, 0xFF, 0xFF, 0x02, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0x00,
};
static s8 D_809070CC[] = {
0xFF, 0xFF, 0x01, 0xFF, 0x03, 0x04, 0xFF, 0xFF, 0x05, 0xFF, 0x06, 0x07, 0xFF, 0xFF, 0x08, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x00, 0xFF, 0xFF, 0x02, 0x0C, 0x0D, 0x0E, 0x09, 0x0A, 0x0B, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
};
static Vec3f D_809070FC = { 0.0f, 0.0f, 5000.0f };
static Vec3f D_80907108 = { 0.0f, 2000.0f, 0.0f };
static Vec3f D_80907114 = { 0.0f, 2000.0f, 0.0f };
static Vec3f D_80907120 = { 0.0f, 0.0f, 17000.0f };
static Vec3f D_8090712C = { 0.0f, 0.0f, 3000.0f };
static Vec3f D_80907138 = { 0.0f, 0.0f, 0.0f };
void BossGanon2_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, void* thisx) {
s8 pad;
s8 temp_v0;
@ -2704,6 +3031,13 @@ void func_8090523C(BossGanon2* this, PlayState* play) {
CLOSE_DISPS(gameState->gfxCtx, "../z_boss_ganon2.c", 5725);
}
static s8 D_80907144[] = {
0xFF, 0xFF, 0x01, 0xFF, 0x03, 0x04, 0x05, 0xFF, 0x06, 0x07, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x02, 0x0C, 0x0D, 0x0E, 0x09, 0x0A, 0x0B, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
};
static Vec3f D_80907164 = { 800.0f, 420.0f, 100.0f };
void BossGanon2_PostLimbDraw2(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, void* thisx) {
s8 temp_v1 = D_80907144[limbIndex];
BossGanon2* this = (BossGanon2*)thisx;
@ -2749,6 +3083,14 @@ void func_80905674(BossGanon2* this, PlayState* play) {
}
}
static void* sEyeTextures[] = {
gGanonEyeOpenTex,
gGanonEyeHalfTex,
gGanonEyeClosedTex,
};
static Vec3f D_8090717C = { 0.0f, -2000.0f, 0.0f };
void BossGanon2_Draw(Actor* thisx, PlayState* play) {
void* shadowTexture = GRAPH_ALLOC(play->state.gfxCtx, 4096);
BossGanon2* this = (BossGanon2*)thisx;
@ -2962,6 +3304,13 @@ void BossGanon2_DrawEffects(PlayState* play) {
CLOSE_DISPS(play->state.gfxCtx, "../z_boss_ganon2.c", 6185);
}
static s16 D_80907188[] = { 1, 2, 3, 3, 2, 1 };
static s16 D_80907194[] = { 2, 3, 4, 4, 4, 3, 2 };
static s16 D_809071A4[] = { 2, 3, 4, 4, 4, 4, 3, 2 };
static s16 D_809071B4[] = { 2, 4, 5, 5, 6, 6, 6, 6, 5, 5, 4, 2 };
static s16 D_809071CC[] = { 1, -1, 1, 1, 3, 4, 1, 6, 7, 2, 9, 10, 2, 12, 13 };
static u8 D_809071EC[] = { 3, 2, 2, 1, 3, 3, 1, 3, 3, 1, 0, 3, 1, 0, 3 };
void func_80906538(BossGanon2* this, u8* shadowTexture, f32 arg2) {
s16 temp_t0;
s16 temp_v0;
@ -3081,3 +3430,8 @@ void BossGanon2_DrawShadowTexture(void* shadowTexture, BossGanon2* this, PlaySta
CLOSE_DISPS(gfxCtx, "../z_boss_ganon2.c", 6479);
}
// padding
static u32 D_809071FC[2] = { 0 };
#include "assets/overlays/ovl_Boss_Ganon2/ovl_Boss_Ganon2.c"

View file

@ -1,358 +0,0 @@
#include "z_boss_ganon2.h"
#include "overlays/actors/ovl_En_Zl3/z_en_zl3.h"
#include "assets/objects/object_ganon2/object_ganon2.h"
#define BOSS_GANON2_EFFECT_COUNT 100
typedef struct BossGanon2Effect {
/* 0x00 */ u8 type;
/* 0x01 */ u8 unk_01;
/* 0x04 */ Vec3f position;
/* 0x10 */ Vec3f velocity;
/* 0x1C */ Vec3f accel;
/* 0x28 */ char unk_28[0x6];
/* 0x2E */ s16 unk_2E;
/* 0x30 */ char unk_30[0x4];
/* 0x34 */ f32 scale;
/* 0x38 */ Vec3f unk_38;
} BossGanon2Effect; // size = 0x44
static Vec3f D_80906D60 = { 0.0f, 0.0f, 0.0f };
static Vec3f D_80906D6C = { 0.0f, 0.0f, 500.0f };
static u8 D_80906D78 = 0;
static ColliderJntSphElementInit sJntSphItemsInit1[] = {
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x00, 0x10 },
{ 0xFFCFFFFF, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
OCELEM_ON,
},
{ 0, { { 0, 0, 0 }, 30 }, 100 },
},
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x00, 0x10 },
{ 0xFFCFFFFF, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
OCELEM_ON,
},
{ 1, { { 0, 0, 0 }, 30 }, 100 },
},
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x00, 0x10 },
{ 0xFFCFFFFF, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
OCELEM_ON,
},
{ 2, { { 0, 0, 0 }, 30 }, 100 },
},
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x00, 0x10 },
{ 0xFFCFFFFF, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
OCELEM_ON,
},
{ 3, { { 0, 0, 0 }, 20 }, 100 },
},
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x00, 0x10 },
{ 0xFFCFFFFF, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
OCELEM_ON,
},
{ 4, { { 0, 0, 0 }, 20 }, 100 },
},
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x00, 0x10 },
{ 0xFFCFFFFF, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
OCELEM_ON,
},
{ 5, { { 0, 0, 0 }, 20 }, 100 },
},
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x00, 0x10 },
{ 0xFFCFFFFF, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
OCELEM_ON,
},
{ 6, { { 0, 0, 0 }, 20 }, 100 },
},
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x00, 0x10 },
{ 0xFFCFFFFF, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
OCELEM_ON,
},
{ 7, { { 0, 0, 0 }, 20 }, 100 },
},
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x00, 0x10 },
{ 0xFFCFFFFF, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
OCELEM_ON,
},
{ 8, { { 0, 0, 0 }, 20 }, 100 },
},
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x00, 0x10 },
{ 0xFFCFFFFF, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
OCELEM_ON,
},
{ 9, { { 0, 0, 0 }, 20 }, 100 },
},
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x00, 0x10 },
{ 0xFFCFFFFF, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
OCELEM_ON,
},
{ 10, { { 0, 0, 0 }, 20 }, 100 },
},
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x00, 0x10 },
{ 0xFFCFFFFF, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
OCELEM_ON,
},
{ 11, { { 0, 0, 0 }, 20 }, 100 },
},
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x00, 0x10 },
{ 0xFFCFFFFF, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
OCELEM_ON,
},
{ 12, { { 0, 0, 0 }, 20 }, 100 },
},
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x00, 0x10 },
{ 0xFFCFFFFF, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
OCELEM_ON,
},
{ 13, { { 0, 0, 0 }, 20 }, 100 },
},
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x00, 0x10 },
{ 0xFFCFFFFF, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
OCELEM_ON,
},
{ 14, { { 0, 0, 0 }, 20 }, 100 },
},
{
{
ELEM_MATERIAL_UNK0,
{ 0xFFCFFFFF, 0x00, 0x00 },
{ 0xFFCFFFFF, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
OCELEM_ON,
},
{ 15, { { 0, 0, 0 }, 30 }, 100 },
},
};
static ColliderJntSphInit sJntSphInit1 = {
{
COL_MATERIAL_METAL,
AT_ON | AT_TYPE_ENEMY,
AC_ON | AC_TYPE_PLAYER,
OC1_ON | OC1_TYPE_PLAYER,
OC2_FIRST_ONLY | OC2_TYPE_1,
COLSHAPE_JNTSPH,
},
ARRAY_COUNT(sJntSphItemsInit1),
sJntSphItemsInit1,
};
static ColliderJntSphElementInit sJntSphItemsInit2[] = {
{
{
ELEM_MATERIAL_UNK2,
{ 0xFFCFFFFF, 0x00, 0x40 },
{ 0xFFDFFFFF, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
OCELEM_ON,
},
{ 15, { { 0, 0, 0 }, 45 }, 100 },
},
{
{
ELEM_MATERIAL_UNK2,
{ 0xFFCFFFFF, 0x00, 0x40 },
{ 0xFFDFFFFF, 0x00, 0x00 },
ATELEM_ON | ATELEM_SFX_NORMAL,
ACELEM_ON,
OCELEM_ON,
},
{ 16, { { 0, 0, 0 }, 45 }, 100 },
},
};
static ColliderJntSphInit sJntSphInit2 = {
{
COL_MATERIAL_METAL,
AT_ON | AT_TYPE_ENEMY,
AC_ON | AC_TYPE_PLAYER,
OC1_ON | OC1_TYPE_PLAYER,
OC2_TYPE_1,
COLSHAPE_JNTSPH,
},
ARRAY_COUNT(sJntSphItemsInit2),
sJntSphItemsInit2,
};
static Color_RGBA8 sPrimColor = { 0, 120, 0, 255 };
static Color_RGBA8 sEnvColor = { 0, 120, 0, 255 };
static Vec3f D_8090702C[] = {
{ 10.0f, -10.0f, 0.0f },
{ 0.0f, 0.0f, -60.0f },
{ 70.0f, -30.0f, 10.0f },
};
static Vec3f D_80907050[] = {
{ -20.0f, 0.0f, 0.0f },
{ -15.0f, 0.0f, 10.0f },
{ -16.0f, -12.0f, 40.0f },
};
static s16 D_80907074[] = { 0, 1, 2, 2, 1, 0 };
static s16 D_80907080 = 0;
static u8 D_80907084[] = { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 };
static u8 D_80907090[] = { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21 };
static s8 D_8090709C[] = {
0xFF, 0xFF, 0x01, 0xFF, 0x03, 0x04, 0xFF, 0xFF, 0x05, 0xFF, 0x06, 0x07, 0xFF, 0xFF, 0x08, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x00, 0xFF, 0xFF, 0x02, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0x00,
};
static s8 D_809070CC[] = {
0xFF, 0xFF, 0x01, 0xFF, 0x03, 0x04, 0xFF, 0xFF, 0x05, 0xFF, 0x06, 0x07, 0xFF, 0xFF, 0x08, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x00, 0xFF, 0xFF, 0x02, 0x0C, 0x0D, 0x0E, 0x09, 0x0A, 0x0B, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
};
static Vec3f D_809070FC = { 0.0f, 0.0f, 5000.0f };
static Vec3f D_80907108 = { 0.0f, 2000.0f, 0.0f };
static Vec3f D_80907114 = { 0.0f, 2000.0f, 0.0f };
static Vec3f D_80907120 = { 0.0f, 0.0f, 17000.0f };
static Vec3f D_8090712C = { 0.0f, 0.0f, 3000.0f };
static Vec3f D_80907138 = { 0.0f, 0.0f, 0.0f };
static s8 D_80907144[] = {
0xFF, 0xFF, 0x01, 0xFF, 0x03, 0x04, 0x05, 0xFF, 0x06, 0x07, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x02, 0x0C, 0x0D, 0x0E, 0x09, 0x0A, 0x0B, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
};
static Vec3f D_80907164 = { 800.0f, 420.0f, 100.0f };
static void* sEyeTextures[] = {
gGanonEyeOpenTex,
gGanonEyeHalfTex,
gGanonEyeClosedTex,
};
static Vec3f D_8090717C = { 0.0f, -2000.0f, 0.0f };
static s16 D_80907188[] = { 1, 2, 3, 3, 2, 1 };
static s16 D_80907194[] = { 2, 3, 4, 4, 4, 3, 2 };
static s16 D_809071A4[] = { 2, 3, 4, 4, 4, 4, 3, 2 };
static s16 D_809071B4[] = { 2, 4, 5, 5, 6, 6, 6, 6, 5, 5, 4, 2 };
static s16 D_809071CC[] = { 1, -1, 1, 1, 3, 4, 1, 6, 7, 2, 9, 10, 2, 12, 13 };
static u8 D_809071EC[] = { 3, 2, 2, 1, 3, 3, 1, 3, 3, 1, 0, 3, 1, 0, 3 };
// padding
static u32 D_809071FC[2] = { 0 };
#include "assets/overlays/ovl_Boss_Ganon2/ovl_Boss_Ganon2.c"
static Vec3f D_8090EB20;
static EnZl3* sZelda;
static Actor* D_8090EB30;
// unused
static UNK_TYPE D_8090EB34;
static BossGanon2Effect sEffects[BOSS_GANON2_EFFECT_COUNT];
static s32 sSeed1;
static s32 sSeed2;
static s32 sSeed3;
// unused
static UNK_TYPE D_809105DC;
static Vec3f D_809105D8[4];
static Vec3f D_80910608[4];
static s8 D_80910638;