mirror of
https://github.com/zeldaret/oot.git
synced 2025-08-17 20:42:23 +00:00
boss_ganon (Ganondorf) OK (#1037)
* data migrated and OK * some functions ported * everything ported and updated * merge message * plenty of functions matched * remove unwanted file * 5 more, progress on update * update matched * fix proto * fix * func_808E06FC * asm * 2 left * 1 more * last function inital decomp * Dbg MQ OK * docs progress * revert limb stuff * some more docs * docs progress * more docs * done with docs for now i think * revert unwanted change * some symbols * anime2 * format * small changes * some more changes * merge master and fix matrices * reviews 1 and 2 * remove continue * review 3 and 4 * un-name bodyPartsPos for now
This commit is contained in:
parent
8ff1f242fa
commit
4390dd74b6
85 changed files with 5160 additions and 17288 deletions
|
@ -108,12 +108,12 @@ void BgMjin_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
|||
OPEN_DISPS(globalCtx->state.gfxCtx, "../z_bg_mjin.c", 250);
|
||||
|
||||
if (thisx->params != 0) {
|
||||
// thisx is required
|
||||
s32 objBankIndex = Object_GetIndex(&globalCtx->objectCtx, sObjectIDs[thisx->params - 1]);
|
||||
|
||||
if (objBankIndex >= 0) {
|
||||
gSegments[6] = VIRTUAL_TO_PHYSICAL(globalCtx->objectCtx.status[objBankIndex].segment);
|
||||
}
|
||||
|
||||
gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(&D_06000000));
|
||||
dlist = gWarpPadBaseDL;
|
||||
} else {
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -8,13 +8,140 @@ struct BossGanon;
|
|||
|
||||
typedef void (*BossGanonActionFunc)(struct BossGanon*, GlobalContext*);
|
||||
|
||||
typedef enum {
|
||||
/* 0 */ GDF_FWORK_0,
|
||||
/* 1 */ GDF_FWORK_1,
|
||||
/* 2 */ GDF_CENTER_POS,
|
||||
/* 3 */ GDF_TRIFORCE_PRIM_B,
|
||||
/* 4 */ GDF_TRIFORCE_PRIM_A,
|
||||
/* 5 */ GDF_TRIFORCE_ENV_G,
|
||||
/* 6 */ GDF_TRIFORCE_SCALE,
|
||||
/* 7 */ GDF_VORTEX_ALPHA,
|
||||
/* 8 */ GDF_VORTEX_SCALE,
|
||||
/* 9 */ GDF_FWORK_UNUSED_9,
|
||||
/* 10 */ GDF_FWORK_MAX
|
||||
} GanondorfFwork;
|
||||
|
||||
typedef enum {
|
||||
/* 0 */ GDF_WINDOW_SHATTER_OFF,
|
||||
/* 1 */ GDF_WINDOW_SHATTER_PARTIAL,
|
||||
/* 2 */ GDF_WINDOW_SHATTER_FULL
|
||||
} WindowShatterState;
|
||||
|
||||
typedef enum {
|
||||
/* 0 */ GDF_SHOCK_DORF_YELLOW,
|
||||
/* 1 */ GDF_SHOCK_PLAYER_YELLOW,
|
||||
/* 2 */ GDF_SHOCK_PLAYER_PURPLE
|
||||
} GanondorfShockType;
|
||||
|
||||
typedef enum {
|
||||
/* 0 */ GDF_EFF_NONE,
|
||||
/* 1 */ GDF_EFF_SPARKLE,
|
||||
/* 2 */ GDF_EFF_LIGHT_RAY,
|
||||
/* 3 */ GDF_EFF_SHOCK,
|
||||
/* 4 */ GDF_EFF_LIGHTNING,
|
||||
/* 5 */ GDF_EFF_IMPACT_DUST_DARK,
|
||||
/* 6 */ GDF_EFF_IMPACT_DUST_LIGHT,
|
||||
/* 7 */ GDF_EFF_SHOCKWAVE,
|
||||
/* 8 */ GDF_EFF_BLACK_DOT,
|
||||
/* 9 */ GDF_EFF_WINDOW_SHARD
|
||||
} GanondorfEffectType;
|
||||
|
||||
typedef enum {
|
||||
/* 0 */ GDF_TRIFORCE_PLAYER,
|
||||
/* 1 */ GDF_TRIFORCE_ZELDA,
|
||||
/* 2 */ GDF_TRIFORCE_DORF
|
||||
} GanondorfTriforceType;
|
||||
|
||||
typedef struct BossGanon {
|
||||
/* 0x0000 */ Actor actor;
|
||||
/* 0x014C */ char unk_14C[0x4C];
|
||||
/* 0x014C */ s32 animBankIndex;
|
||||
/* 0x0150 */ SkelAnime skelAnime;
|
||||
/* 0x0194 */ BossGanonActionFunc actionFunc;
|
||||
/* 0x0198 */ u8 unk_198;
|
||||
/* 0x0199 */ char unk_199[0x57F];
|
||||
/* 0x0718 */ s16 organFadeTimer;
|
||||
/* 0x071A */ char unk_71A[0x2];
|
||||
} BossGanon; // size = 0x071C
|
||||
/* 0x0199 */ u8 legSwayEnabled;
|
||||
/* 0x019A */ u8 unk_19A;
|
||||
/* 0x019C */ s16 unk_19C; // timer
|
||||
/* 0x019E */ u8 unk_19E;
|
||||
/* 0x019F */ u8 unk_19F;
|
||||
/* 0x01A0 */ s8 envLightMode;
|
||||
/* 0x01A2 */ s16 unk_1A2;
|
||||
/* 0x01A4 */ s16 unk_1A4;
|
||||
/* 0x01A6 */ s16 unk_1A6;
|
||||
/* 0x01A8 */ s16 unk_1A8;
|
||||
/* 0x01AA */ s16 unk_1AA;
|
||||
/* 0x01AC */ s16 unk_1AC;
|
||||
/* 0x01AE */ s16 triforceType;
|
||||
/* 0x01B0 */ char unk_1B0[0x6];
|
||||
/* 0x01B6 */ s16 timers[5];
|
||||
/* 0x01C0 */ u8 startVolley;
|
||||
/* 0x01C2 */ s16 unk_1C2;
|
||||
/* 0x01C4 */ s16 screenFlashTimer;
|
||||
/* 0x01C8 */ f32 fwork[GDF_FWORK_MAX];
|
||||
/* 0x01F0 */ Vec3f unk_1F0;
|
||||
/* 0x01FC */ Vec3f unk_1FC;
|
||||
/* 0x0208 */ Vec3f unk_208;
|
||||
/* 0x0214 */ Vec3f unk_214;
|
||||
/* 0x0220 */ Vec3f unk_220;
|
||||
/* 0x022C */ Vec3f unk_22C;
|
||||
/* 0x0238 */ Vec3f unk_238;
|
||||
/* 0x0244 */ char unk_244[0x10];
|
||||
/* 0x0254 */ f32 handLightBallScale;
|
||||
/* 0x0258 */ f32 unk_258;
|
||||
/* 0x025C */ u8 unk_25C;
|
||||
/* 0x0260 */ Vec3f unk_260; // hand position?
|
||||
/* 0x026C */ s16 unk_26C; // timer?
|
||||
/* 0x0270 */ f32 unk_270;
|
||||
/* 0x0274 */ u8 unk_274;
|
||||
/* 0x0278 */ Vec3f unk_278;
|
||||
/* 0x0284 */ f32 unk_284; // scale for something
|
||||
/* 0x0288 */ f32 unk_288;
|
||||
/* 0x028C */ f32 unk_28C; // scale for something
|
||||
/* 0x0290 */ f32 unk_290;
|
||||
/* 0x0294 */ f32 unk_294[15];
|
||||
/* 0x02D0 */ f32 unk_2D0; // scale for something
|
||||
/* 0x02D4 */ s16 unk_2D4; // timer
|
||||
/* 0x02D8 */ Vec3f triforcePos;
|
||||
/* 0x02E4 */ u8 shockGlow;
|
||||
/* 0x02E6 */ s16 unk_2E6; // timer
|
||||
/* 0x02E8 */ s16 unk_2E8; // timer
|
||||
/* 0x02EC */ Vec3f unk_2EC[18]; // body parts pos for ganondorf, used for other things as well
|
||||
/* 0x03C4 */ Vec3f unk_3C4[18];
|
||||
/* 0x049C */ f32 unk_49C[18];
|
||||
/* 0x04E4 */ s16 unk_4E4[18];
|
||||
/* 0x0508 */ f32 unk_508;
|
||||
/* 0x050C */ Vec3f legRot;
|
||||
/* 0x0518 */ char unk_518[0xF8];
|
||||
/* 0x0610 */ ColliderCylinder collider;
|
||||
/* 0x065C */ char unk_65C[0x10];
|
||||
/* 0x066C */ u8 lensFlareMode;
|
||||
/* 0x066E */ s16 lensFlareTimer;
|
||||
/* 0x0670 */ f32 lensFlareScale;
|
||||
/* 0x0674 */ u32 csTimer;
|
||||
/* 0x0678 */ s16 csState;
|
||||
/* 0x067A */ s16 csCamIndex;
|
||||
/* 0x067C */ char unk_67C[0x4];
|
||||
/* 0x0680 */ Vec3f csCamEye;
|
||||
/* 0x068C */ Vec3f csCamAt;
|
||||
/* 0x0698 */ char unk_698[0xC];
|
||||
/* 0x06A4 */ Vec3f csCamEyeMaxStep;
|
||||
/* 0x06B0 */ Vec3f csCamAtMaxStep;
|
||||
/* 0x06BC */ Vec3f csCamTargetEye;
|
||||
/* 0x06C8 */ char unk_6C8[0xC];
|
||||
/* 0x06D4 */ Vec3f csCamTargetAt;
|
||||
/* 0x06E0 */ char unk_6E0[0xC];
|
||||
/* 0x06EC */ f32 csCamMaxStepScale;
|
||||
/* 0x06F0 */ f32 csCamMovementScale;
|
||||
/* 0x06F4 */ f32 csCamFov;
|
||||
/* 0x06F8 */ char unk_6F8[0xC];
|
||||
/* 0x0704 */ f32 unk_704;
|
||||
/* 0x0708 */ char unk_708[0x4];
|
||||
/* 0x070C */ f32 unk_70C;
|
||||
/* 0x070C */ f32 unk_710;
|
||||
/* 0x0714 */ f32 whiteFillAlpha;
|
||||
/* 0x0718 */ s16 organAlpha;
|
||||
/* 0x071A */ u8 useOpenHand;
|
||||
/* 0x071B */ u8 windowShatterState;
|
||||
} BossGanon; // size = 0x71C
|
||||
|
||||
#endif
|
||||
|
|
|
@ -147,7 +147,7 @@ void BossGanon2_Init(Actor* thisx, GlobalContext* globalCtx) {
|
|||
Collider_InitJntSph(globalCtx, &this->unk_444);
|
||||
Collider_SetJntSph(globalCtx, &this->unk_444, &this->actor, &sJntSphInit2, this->unk_864);
|
||||
BossGanon2_SetObjectSegment(this, globalCtx, OBJECT_GANON, false);
|
||||
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &object_ganon_Skel_0114E8, NULL, NULL, NULL, 0);
|
||||
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &gDorfSkel, NULL, NULL, NULL, 0);
|
||||
func_808FD5C4(this, globalCtx);
|
||||
this->actor.naviEnemyId = 0x3E;
|
||||
this->actor.gravity = 0.0f;
|
||||
|
@ -587,7 +587,7 @@ void func_808FD5F4(BossGanon2* this, GlobalContext* globalCtx) {
|
|||
case 18:
|
||||
this->unk_339 = 6;
|
||||
if (this->unk_398 == 30) {
|
||||
Audio_QueueSeqCmd(SEQ_PLAYER_BGM_MAIN << 24 | NA_BGM_GANON_BATTLE_2);
|
||||
Audio_QueueSeqCmd(SEQ_PLAYER_BGM_MAIN << 24 | NA_BGM_GANON_BOSS);
|
||||
}
|
||||
Math_ApproachF(&this->unk_30C, 7.0f, 1.0f, 0.1f);
|
||||
Math_ApproachF(&this->unk_3A4.x, (this->actor.world.pos.x + 500.0f) - 350.0f, 0.1f, 1.0f);
|
||||
|
|
|
@ -367,13 +367,11 @@ void EnFhgFire_LightningBurst(EnFhgFire* this, GlobalContext* globalCtx) {
|
|||
}
|
||||
}
|
||||
|
||||
// Related to scene draw config 30, only used in BossGanon_Update and
|
||||
// loaded in z_kankyo
|
||||
gCustomLensFlareOn = this->lensFlareOn;
|
||||
gCustomLensFlarePos = this->actor.world.pos;
|
||||
D_8015FD06 = this->lensFlareScale;
|
||||
D_8015FD08 = 10.0f;
|
||||
D_8015FD0C = 0;
|
||||
gLensFlareScale = this->lensFlareScale;
|
||||
gLensFlareColorIntensity = 10.0f;
|
||||
gLensFlareScreenFillAlpha = 0;
|
||||
}
|
||||
|
||||
void EnFhgFire_SpearLight(EnFhgFire* this, GlobalContext* globalCtx) {
|
||||
|
|
|
@ -45,7 +45,7 @@ void EnGanonOrgan_Update(Actor* thisx, GlobalContext* globalCtx) {
|
|||
osSyncPrintf("ORGAN MOVE 1\n");
|
||||
if (thisx->params == 1) {
|
||||
dorf = (BossGanon*)thisx->parent;
|
||||
if (dorf->organFadeTimer == 0) {
|
||||
if (dorf->organAlpha == 0) {
|
||||
Actor_Kill(thisx);
|
||||
}
|
||||
}
|
||||
|
@ -69,7 +69,7 @@ Gfx* func_80A280BC(GraphicsContext* gfxCtx, BossGanon* dorf) {
|
|||
gDPPipeSync(displayListHead++);
|
||||
if (1) {}
|
||||
if (1) {}
|
||||
gDPSetEnvColor(displayListHead++, 25, 20, 0, dorf->organFadeTimer);
|
||||
gDPSetEnvColor(displayListHead++, 25, 20, 0, dorf->organAlpha);
|
||||
gDPSetRenderMode(displayListHead++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_XLU_SURF2);
|
||||
gSPEndDisplayList(displayListHead);
|
||||
return displayList;
|
||||
|
@ -85,7 +85,7 @@ Gfx* func_80A28148(GraphicsContext* gfxCtx, BossGanon* dorf) {
|
|||
gDPPipeSync(displayListHead++);
|
||||
if (1) {}
|
||||
if (1) {}
|
||||
gDPSetEnvColor(displayListHead++, 0, 0, 0, dorf->organFadeTimer);
|
||||
gDPSetEnvColor(displayListHead++, 0, 0, 0, dorf->organAlpha);
|
||||
gDPSetRenderMode(displayListHead++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_XLU_SURF2);
|
||||
gSPEndDisplayList(displayListHead);
|
||||
return displayList;
|
||||
|
@ -98,7 +98,7 @@ void EnGanonOrgan_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
|||
|
||||
osSyncPrintf("ORGAN DRAW 1\n");
|
||||
func_80093D18(globalCtx->state.gfxCtx);
|
||||
if ((thisx->params == 1) && (dorf->organFadeTimer != 255)) {
|
||||
if ((thisx->params == 1) && (dorf->organAlpha != 255)) {
|
||||
gSPSegment(POLY_OPA_DISP++, 0x08, func_80A280BC(globalCtx->state.gfxCtx, dorf));
|
||||
gSPSegment(POLY_OPA_DISP++, 0x09, func_80A28148(globalCtx->state.gfxCtx, dorf));
|
||||
} else {
|
||||
|
|
|
@ -142,8 +142,8 @@ static u16 sBgmList[] = {
|
|||
NA_BGM_VARIOUS_SFX,
|
||||
NA_BGM_ESCAPE,
|
||||
NA_BGM_UNDERGROUND,
|
||||
NA_BGM_GANON_BATTLE_1,
|
||||
NA_BGM_GANON_BATTLE_2,
|
||||
NA_BGM_GANONDORF_BOSS,
|
||||
NA_BGM_GANON_BOSS,
|
||||
NA_BGM_END_DEMO,
|
||||
};
|
||||
|
||||
|
|
|
@ -77,7 +77,7 @@ static EnViewerInitData sInitData[] = {
|
|||
{ OBJECT_GNDD, OBJECT_GNDD, 1, -6, ENVIEWER_SHADOW_NONE, 10, ENVIEWER_DRAW_GANONDORF, &object_gndd_Skel_0119E8,
|
||||
&object_gndd_Anim_0050A8 },
|
||||
/* ENVIEWER_TYPE_9_GANONDORF */
|
||||
{ OBJECT_GANON, OBJECT_GANON, 1, -6, ENVIEWER_SHADOW_NONE, 10, ENVIEWER_DRAW_GANONDORF, &object_ganon_Skel_0114E8,
|
||||
{ OBJECT_GANON, OBJECT_GANON, 1, -6, ENVIEWER_SHADOW_NONE, 10, ENVIEWER_DRAW_GANONDORF, &gDorfSkel,
|
||||
&object_ganon_Anim_011348 },
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue