1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-08-23 07:21:19 +00:00

Document Ganon objects (#1345)

* Document Ganon objects

* Better name for one texture
This commit is contained in:
Tom Overton 2022-08-29 16:44:17 -07:00 committed by GitHub
parent 0b531fd1ee
commit f5f6f2ef6c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 671 additions and 553 deletions

View file

@ -1,4 +1,5 @@
#include "z_boss_ganon2.h"
#include "overlays/actors/ovl_Boss_Ganon/z_boss_ganon.h"
#include "overlays/actors/ovl_Demo_Gj/z_demo_gj.h"
#include "overlays/actors/ovl_En_Zl3/z_en_zl3.h"
#include "assets/objects/object_ganon/object_ganon.h"
@ -145,7 +146,7 @@ void BossGanon2_Init(Actor* thisx, PlayState* play) {
Collider_InitJntSph(play, &this->unk_444);
Collider_SetJntSph(play, &this->unk_444, &this->actor, &sJntSphInit2, this->unk_864);
BossGanon2_SetObjectSegment(this, play, OBJECT_GANON, false);
SkelAnime_InitFlex(play, &this->skelAnime, &gDorfSkel, NULL, NULL, NULL, 0);
SkelAnime_InitFlex(play, &this->skelAnime, &gGanondorfSkel, NULL, NULL, NULL, 0);
func_808FD5C4(this, play);
this->actor.naviEnemyId = NAVI_ENEMY_GANON;
this->actor.gravity = 0.0f;
@ -218,7 +219,7 @@ void func_808FD5F4(BossGanon2* this, PlayState* play) {
player->actor.world.pos.y = 1086.0f;
player->actor.world.pos.z = -186.0f;
player->actor.shape.rot.y = -0x5000;
Animation_MorphToLoop(&this->skelAnime, &object_ganon_anime3_Anim_002168, 0.0f);
Animation_MorphToLoop(&this->skelAnime, &gGanondorfBurstOutAnim, 0.0f);
play->envCtx.lightBlend = 0.0f;
// fake, tricks the compiler into allocating more stack
if (zero) {
@ -406,8 +407,8 @@ void func_808FD5F4(BossGanon2* this, PlayState* play) {
if (this->unk_398 == 50) {
this->unk_398 = 0;
this->unk_39C = 12;
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon_anime3_Anim_002168, 0.0f);
this->unk_194 = Animation_GetLastFrame(&object_ganon_anime3_Anim_002168);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanondorfBurstOutAnim, 0.0f);
this->unk_194 = Animation_GetLastFrame(&gGanondorfBurstOutAnim);
this->actor.world.pos.x = this->actor.world.pos.z = -200.0f;
this->actor.world.pos.y = 1009.0f;
this->actor.shape.yOffset = 7000.0f;
@ -440,7 +441,7 @@ void func_808FD5F4(BossGanon2* this, PlayState* play) {
this->subCamAt.y = this->actor.world.pos.y + 70.0f;
}
if (Animation_OnFrame(&this->skelAnime, this->unk_194)) {
Animation_MorphToLoop(&this->skelAnime, &object_ganon_anime3_Anim_002E6C, 0.0f);
Animation_MorphToLoop(&this->skelAnime, &gGanondorfFloatingHeavyBreathingAnim, 0.0f);
this->unk_39C = 14;
this->unk_398 = 0;
this->actor.world.pos.x = -200.0f;
@ -493,12 +494,12 @@ void func_808FD5F4(BossGanon2* this, PlayState* play) {
Math_ApproachF(&this->subCamAt.y, this->actor.world.pos.y + 77.0f, 0.05f, 5.0f);
if (this->unk_398 >= 50) {
if (this->unk_398 == 50) {
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon_anime3_Anim_000BFC, 0.0f);
this->unk_194 = Animation_GetLastFrame(&object_ganon_anime3_Anim_000BFC);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanondorfShowTriforceStartAnim, 0.0f);
this->unk_194 = Animation_GetLastFrame(&gGanondorfShowTriforceStartAnim);
this->unk_314 = 3;
}
if (Animation_OnFrame(&this->skelAnime, this->unk_194)) {
Animation_MorphToLoop(&this->skelAnime, &object_ganon_anime3_Anim_003F38, 0.0f);
Animation_MorphToLoop(&this->skelAnime, &gGanondorfShowTriforceLoopAnim, 0.0f);
this->unk_194 = 1000.0f;
}
}
@ -508,8 +509,8 @@ void func_808FD5F4(BossGanon2* this, PlayState* play) {
if (this->unk_398 == 140) {
this->unk_39C = 16;
this->unk_398 = 0;
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon_anime3_Anim_003754, 0.0f);
this->unk_194 = Animation_GetLastFrame(&object_ganon_anime3_Anim_003754);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanondorfTransformStartAnim, 0.0f);
this->unk_194 = Animation_GetLastFrame(&gGanondorfTransformStartAnim);
this->unk_339 = 55;
play->envCtx.lightBlend = 1.0f;
Audio_PlayActorSfx2(&this->actor, NA_SE_EN_GANON_CASBREAK);
@ -531,7 +532,7 @@ void func_808FD5F4(BossGanon2* this, PlayState* play) {
this->unk_1B4 = 0.0f;
SkelAnime_Update(&this->skelAnime);
if (Animation_OnFrame(&this->skelAnime, this->unk_194)) {
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon_anime3_Anim_0028A8, 0.0f);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanondorfTransformEndAnim, 0.0f);
this->unk_194 = 1000.0f;
}
Math_ApproachF(&this->subCamEye.x, (this->actor.world.pos.x + 200.0f) - 90.0f, 0.1f, 6.3999996f);
@ -555,7 +556,7 @@ void func_808FD5F4(BossGanon2* this, PlayState* play) {
this->unk_337 = 2;
BossGanon2_SetObjectSegment(this, play, OBJECT_GANON2, false);
SkelAnime_Free(&this->skelAnime, play);
SkelAnime_InitFlex(play, &this->skelAnime, &object_ganon2_Skel_025970, NULL, NULL, NULL, 0);
SkelAnime_InitFlex(play, &this->skelAnime, &gGanonSkel, NULL, NULL, NULL, 0);
BossGanon2_SetObjectSegment(this, play, OBJECT_GANON_ANIME3, false);
func_8002DF54(play, &this->actor, 0x54);
this->unk_314 = 3;
@ -577,7 +578,7 @@ void func_808FD5F4(BossGanon2* this, PlayState* play) {
if (this->unk_398 == 25) {
this->unk_39C = 18;
this->unk_398 = 0;
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon_anime3_Anim_010380, 0.0f);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanonUncurlAndFlailAnim, 0.0f);
this->skelAnime.playSpeed = 0.0f;
this->subCamEye.x = ((this->actor.world.pos.x + 500.0f) - 350.0f) - 50.0f;
this->subCamEye.y = this->actor.world.pos.y;
@ -640,7 +641,7 @@ void func_808FD5F4(BossGanon2* this, PlayState* play) {
this->unk_398 = 0;
this->unk_420 = 10.0f;
this->actor.velocity.y = 0.0f;
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon_anime3_Anim_010380, 0.0f);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanonUncurlAndFlailAnim, 0.0f);
func_808FD4D4(this, play, 0, 3);
func_800A9F6C(0.0f, 0xC8, 0x14, 0x14);
}
@ -673,8 +674,8 @@ void func_808FD5F4(BossGanon2* this, PlayState* play) {
}
if (this->unk_398 == 80) {
BossGanon2_SetObjectSegment(this, play, OBJECT_GANON2, false);
TitleCard_InitBossName(play, &play->actorCtx.titleCtx, SEGMENTED_TO_VIRTUAL(object_ganon2_Tex_021A90),
160, 180, 128, 40);
TitleCard_InitBossName(play, &play->actorCtx.titleCtx, SEGMENTED_TO_VIRTUAL(gGanonTitleCardTex), 160,
180, 128, 40);
}
this->subCamEye.x = ((this->actor.world.pos.x + 500.0f) - 350.0f) + 100.0f;
this->subCamEye.y = this->actor.world.pos.y;
@ -843,8 +844,8 @@ void func_808FD5F4(BossGanon2* this, PlayState* play) {
if ((this->unk_398 > 40) && (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE)) {
this->unk_39C = 29;
this->unk_398 = 0;
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon_anime3_Anim_0147E0, 0.0f);
this->unk_194 = Animation_GetLastFrame(&object_ganon_anime3_Anim_0147E0);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanonRoarAnim, 0.0f);
this->unk_194 = Animation_GetLastFrame(&gGanonRoarAnim);
this->actor.shape.yOffset = 0.0f;
this->actor.world.pos.y = 1086.0f;
this->actor.gravity = -1.0f;
@ -1043,7 +1044,7 @@ void func_808FFDB0(BossGanon2* this, PlayState* play) {
if (Object_IsLoaded(&play->objectCtx, objectIdx)) {
gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIdx].segment);
Animation_MorphToLoop(&this->skelAnime, &object_ganon2_Anim_00FFE4, -10.0f);
Animation_MorphToLoop(&this->skelAnime, &gGanonGuardIdleAnim, -10.0f);
this->actionFunc = func_808FFEBC;
if (this->unk_334 != 0) {
@ -1081,7 +1082,7 @@ void func_808FFEBC(BossGanon2* this, PlayState* play) {
}
void func_808FFF90(BossGanon2* this, PlayState* play) {
Animation_MorphToLoop(&this->skelAnime, &object_ganon2_Anim_00FFE4, -10.0f);
Animation_MorphToLoop(&this->skelAnime, &gGanonGuardIdleAnim, -10.0f);
this->actionFunc = func_808FFFE0;
this->unk_1A2[0] = 40;
}
@ -1106,8 +1107,8 @@ void func_808FFFE0(BossGanon2* this, PlayState* play) {
}
void func_809000A0(BossGanon2* this, PlayState* play) {
Animation_MorphToLoop(&this->skelAnime, &object_ganon2_Anim_026510, -2.0f);
this->unk_194 = Animation_GetLastFrame(&object_ganon2_Anim_026510);
Animation_MorphToLoop(&this->skelAnime, &gGanonStunStartAnim, -2.0f);
this->unk_194 = Animation_GetLastFrame(&gGanonStunStartAnim);
this->unk_1AC = 0;
this->actionFunc = func_80900104;
}
@ -1120,15 +1121,15 @@ void func_80900104(BossGanon2* this, PlayState* play) {
case 0:
if (Animation_OnFrame(&this->skelAnime, this->unk_194)) {
this->unk_1AC = 1;
Animation_MorphToLoop(&this->skelAnime, &object_ganon2_Anim_026AF4, 0.0f);
Animation_MorphToLoop(&this->skelAnime, &gGanonStunLoopAnim, 0.0f);
this->unk_1A2[0] = 80;
}
break;
case 1:
if (this->unk_1A2[0] == 0) {
this->unk_1AC = 2;
Animation_MorphToLoop(&this->skelAnime, &object_ganon2_Anim_027824, -5.0f);
this->unk_194 = Animation_GetLastFrame(&object_ganon2_Anim_027824);
Animation_MorphToLoop(&this->skelAnime, &gGanonStunEndAnim, -5.0f);
this->unk_194 = Animation_GetLastFrame(&gGanonStunEndAnim);
}
break;
case 2:
@ -1140,8 +1141,8 @@ void func_80900104(BossGanon2* this, PlayState* play) {
}
void func_80900210(BossGanon2* this, PlayState* play) {
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon2_Anim_00DFF0, -3.0f);
this->unk_194 = Animation_GetLastFrame(&object_ganon2_Anim_00DFF0);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanonDamageAnim, -3.0f);
this->unk_194 = Animation_GetLastFrame(&gGanonDamageAnim);
this->actionFunc = func_8090026C;
}
@ -1155,7 +1156,7 @@ void func_8090026C(BossGanon2* this, PlayState* play) {
}
void func_809002CC(BossGanon2* this, PlayState* play) {
Animation_MorphToLoop(&this->skelAnime, &object_ganon2_Anim_00E8EC, -10.0f);
Animation_MorphToLoop(&this->skelAnime, &gGanonGuardWalkAnim, -10.0f);
this->actionFunc = func_80900344;
this->unk_338 = 0;
this->unk_1A2[0] = 100;
@ -1180,7 +1181,7 @@ void func_80900344(BossGanon2* this, PlayState* play) {
}
if (this->actor.xzDistToPlayer < 200.0f) {
this->unk_338 = 0;
Animation_MorphToLoop(&this->skelAnime, &object_ganon2_Anim_00E8EC, -10.0f);
Animation_MorphToLoop(&this->skelAnime, &gGanonGuardWalkAnim, -10.0f);
} else {
this->skelAnime.playSpeed = ((this->actor.xzDistToPlayer - 300.0f) * 0.005f) + 1.0f;
if (this->skelAnime.playSpeed > 2.0f) {
@ -1195,7 +1196,7 @@ void func_80900344(BossGanon2* this, PlayState* play) {
phi_f0 = 2.0f;
if (this->actor.xzDistToPlayer >= 200.0f) {
this->unk_338 = 1;
Animation_MorphToLoop(&this->skelAnime, &object_ganon2_Anim_0353C0, -10.0f);
Animation_MorphToLoop(&this->skelAnime, &gGanonWalkAnim, -10.0f);
}
}
@ -1214,12 +1215,12 @@ void func_80900344(BossGanon2* this, PlayState* play) {
void func_80900580(BossGanon2* this, PlayState* play) {
if (this->unk_311 == 0) {
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon2_Anim_00ADD0, -5.0f);
this->unk_194 = Animation_GetLastFrame(&object_ganon2_Anim_00ADD0);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanonLeftSwordSwingAnim, -5.0f);
this->unk_194 = Animation_GetLastFrame(&gGanonLeftSwordSwingAnim);
this->unk_198 = (this->unk_194 - 15.0f) - 5.0f;
} else {
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon2_Anim_00CAF8, -5.0f);
this->unk_194 = Animation_GetLastFrame(&object_ganon2_Anim_00CAF8);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanonRightSwordSwingAnim, -5.0f);
this->unk_194 = Animation_GetLastFrame(&gGanonRightSwordSwingAnim);
this->unk_198 = (this->unk_194 - 15.0f) - 5.0f;
}
@ -1266,8 +1267,8 @@ void func_80900650(BossGanon2* this, PlayState* play) {
}
void func_80900818(BossGanon2* this, PlayState* play) {
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon2_Anim_02A848, -5.0f);
this->unk_194 = Animation_GetLastFrame(&object_ganon2_Anim_02A848);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanonDownedStartAnim, -5.0f);
this->unk_194 = Animation_GetLastFrame(&gGanonDownedStartAnim);
this->actionFunc = func_80900890;
this->unk_1AC = 0;
this->unk_39C = 0;
@ -1392,7 +1393,7 @@ void func_80900890(BossGanon2* this, PlayState* play) {
switch (this->unk_1AC) {
case 0:
if (Animation_OnFrame(&this->skelAnime, this->unk_194)) {
Animation_MorphToLoop(&this->skelAnime, &object_ganon2_Anim_034278, 0.0f);
Animation_MorphToLoop(&this->skelAnime, &gGanonDownedLoopAnim, 0.0f);
this->unk_1AC = 1;
}
break;
@ -1406,8 +1407,8 @@ void func_80900890(BossGanon2* this, PlayState* play) {
temp_f12 = -200.0f - player->actor.world.pos.z;
if (sqrtf(SQ(temp_f2) + SQ(temp_f12)) <= 784.0f) {
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon2_Anim_0334F8, 0.0f);
this->unk_194 = Animation_GetLastFrame(&object_ganon2_Anim_0334F8);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanonGetUpAnim, 0.0f);
this->unk_194 = Animation_GetLastFrame(&gGanonGetUpAnim);
this->unk_1AC = 2;
this->unk_1A2[0] = 40;
Audio_PlayActorSfx2(&this->actor, NA_SE_EN_MGANON_ROAR);
@ -1431,8 +1432,8 @@ void func_80900890(BossGanon2* this, PlayState* play) {
}
void func_80901020(BossGanon2* this, PlayState* play) {
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon2_Anim_02A848, -5.0f);
this->unk_194 = Animation_GetLastFrame(&object_ganon2_Anim_02A848);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanonDownedStartAnim, -5.0f);
this->unk_194 = Animation_GetLastFrame(&gGanonDownedStartAnim);
this->actionFunc = func_8090120C;
this->unk_1AC = 0;
this->unk_39C = 0;
@ -1642,8 +1643,8 @@ void func_8090120C(BossGanon2* this, PlayState* play) {
Play_ChangeCameraStatus(play, this->subCamId, CAM_STAT_ACTIVE);
this->unk_39C = 7;
this->unk_398 = 0;
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon2_Anim_003B1C, 0.0f);
this->unk_194 = Animation_GetLastFrame(&object_ganon2_Anim_003B1C);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanonFinalBlowAnim, 0.0f);
this->unk_194 = Animation_GetLastFrame(&gGanonFinalBlowAnim);
play->startPlayerCutscene(play, &this->actor, 0x61);
} else {
break;
@ -1709,8 +1710,8 @@ void func_8090120C(BossGanon2* this, PlayState* play) {
case 75:
this->unk_339 = 23;
if (this->unk_398 == 55) {
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon2_Anim_007288, 0.0f);
this->unk_194 = Animation_GetLastFrame(&object_ganon2_Anim_007288);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanonDeadStartAnim, 0.0f);
this->unk_194 = Animation_GetLastFrame(&gGanonDeadStartAnim);
func_8002DF54(play, &this->actor, 0x62);
this->unk_39C = 8;
this->unk_398 = 1000;
@ -1734,7 +1735,7 @@ void func_8090120C(BossGanon2* this, PlayState* play) {
play->envCtx.lightBlend = 0.0f;
}
if (Animation_OnFrame(&this->skelAnime, this->unk_194)) {
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon2_Anim_008EB8, 0.0f);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanonDeadLoopAnim, 0.0f);
this->unk_398 = 0;
this->unk_194 = 1000.0f;
}
@ -1819,7 +1820,7 @@ void func_8090120C(BossGanon2* this, PlayState* play) {
switch (this->unk_1AC) {
case 0:
if (Animation_OnFrame(&this->skelAnime, this->unk_194)) {
Animation_MorphToLoop(&this->skelAnime, &object_ganon2_Anim_034278, 0.0f);
Animation_MorphToLoop(&this->skelAnime, &gGanonDownedLoopAnim, 0.0f);
this->unk_1AC = 1;
}
break;
@ -2515,12 +2516,12 @@ s32 BossGanon2_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec
OPEN_DISPS(play->state.gfxCtx, "../z_boss_ganon2.c", 5355);
if (limbIndex == 15) {
if (limbIndex == GANON_LIMB_NECK) {
rot->y += this->unk_31A;
rot->z += this->unk_31C;
}
if (limbIndex >= 42) {
if (limbIndex >= GANON_LIMB_TAIL1) {
rot->x += this->unk_2F4[limbIndex] + this->unk_346;
rot->y += this->unk_2FE[limbIndex];
@ -2531,7 +2532,8 @@ s32 BossGanon2_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec
}
}
if ((limbIndex == 7) || (limbIndex == 13) || (limbIndex == 33) || (limbIndex == 34)) {
if ((limbIndex == GANON_LIMB_LEFT_SWORD) || (limbIndex == GANON_LIMB_RIGHT_SWORD) ||
(limbIndex == GANON_LIMB_LEFT_HORN) || (limbIndex == GANON_LIMB_RIGHT_HORN)) {
*dList = NULL;
}
@ -2554,17 +2556,17 @@ void BossGanon2_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s*
Matrix_MultVec3f(&D_80906D60, &this->unk_234[D_809070CC[limbIndex]]);
}
if (limbIndex == 15) {
if (limbIndex == GANON_LIMB_NECK) {
Matrix_MultVec3f(&D_80906D60, &this->unk_1B8);
} else if (limbIndex == 3) {
} else if (limbIndex == GANON_LIMB_LEFT_SHOULDER) {
Matrix_MultVec3f(&D_80907108, &this->unk_1F4);
} else if (limbIndex == 9) {
} else if (limbIndex == GANON_LIMB_RIGHT_SHOULDER) {
Matrix_MultVec3f(&D_80907114, &this->unk_1E8);
} else if (limbIndex == 38) {
} else if (limbIndex == GANON_LIMB_LEFT_FOOT) {
Matrix_MultVec3f(&D_80906D60, &this->unk_1DC);
} else if (limbIndex == 41) {
} else if (limbIndex == GANON_LIMB_RIGHT_FOOT) {
Matrix_MultVec3f(&D_80906D60, &this->unk_1D0);
} else if (limbIndex == 45) {
} else if (limbIndex == GANON_LIMB_TAIL4) {
Matrix_MultVec3f(&D_80907138, &this->unk_1C4);
}
@ -2574,14 +2576,14 @@ void BossGanon2_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s*
func_808FD080(temp_v0, &this->unk_424, &sp4C);
}
if ((limbIndex == 7) || (limbIndex == 13)) {
if ((limbIndex == GANON_LIMB_LEFT_SWORD) || (limbIndex == GANON_LIMB_RIGHT_SWORD)) {
Matrix_Push();
Matrix_Scale(this->unk_224, this->unk_224, this->unk_224, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, "../z_boss_ganon2.c", 5522),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, *dList);
Matrix_Pop();
} else if ((limbIndex == 33) || (limbIndex == 34)) {
} else if ((limbIndex == GANON_LIMB_LEFT_HORN) || (limbIndex == GANON_LIMB_RIGHT_HORN)) {
Matrix_Push();
Matrix_Scale(this->unk_228, this->unk_228, this->unk_228, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, "../z_boss_ganon2.c", 5533),
@ -2591,12 +2593,12 @@ void BossGanon2_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s*
}
if (*dList != NULL) {
if ((limbIndex == 7) && (this->unk_312 == 1)) {
if ((limbIndex == GANON_LIMB_LEFT_SWORD) && (this->unk_312 == 1)) {
Matrix_MultVec3f(&D_809070FC, &this->unk_218);
func_808FD080(0, &this->unk_444, &this->unk_218);
Matrix_MultVec3f(&D_80907120, &this->unk_200);
Matrix_MultVec3f(&D_8090712C, &this->unk_20C);
} else if ((limbIndex == 13) && (this->unk_312 == 2)) {
} else if ((limbIndex == GANON_LIMB_RIGHT_SWORD) && (this->unk_312 == 2)) {
Matrix_MultVec3f(&D_809070FC, &this->unk_218);
func_808FD080(1, &this->unk_444, &this->unk_218);
Matrix_MultVec3f(&D_80907120, &this->unk_200);
@ -2709,15 +2711,15 @@ void BossGanon2_PostLimbDraw2(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s
if (temp_v1 >= 0) {
Matrix_MultVec3f(&D_80906D60, &this->unk_234[temp_v1]);
}
if (limbIndex == 11) {
if (limbIndex == GANONDORF_LIMB_JEWEL) {
OPEN_DISPS(play->state.gfxCtx, "../z_boss_ganon2.c", 5749);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx, "../z_boss_ganon2.c", 5752),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(object_ganon_DL_00BE90));
gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(gGanondorfEyesDL));
CLOSE_DISPS(play->state.gfxCtx, "../z_boss_ganon2.c", 5754);
} else if (limbIndex == 10) {
} else if (limbIndex == GANONDORF_LIMB_RIGHT_HAND) {
Matrix_MultVec3f(&D_80907164, &this->unk_1B8);
}
}
@ -2762,8 +2764,8 @@ void BossGanon2_Draw(Actor* thisx, PlayState* play) {
switch (this->unk_337) {
case 0:
BossGanon2_SetObjectSegment(this, play, OBJECT_GANON, true);
gSPSegment(POLY_XLU_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(object_ganon_Tex_00A8E0));
gSPSegment(POLY_XLU_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(object_ganon_Tex_00A8E0));
gSPSegment(POLY_XLU_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(gGanondorfEmptyEyeTex));
gSPSegment(POLY_XLU_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(gGanondorfEmptyEyeTex));
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
this->skelAnime.dListCount, NULL, BossGanon2_PostLimbDraw2, this);
break;

View file

@ -8,6 +8,57 @@ struct BossGanon2;
typedef void (*BossGanon2ActionFunc)(struct BossGanon2*, PlayState*);
typedef enum {
/* 0 */ GANON_LIMB_NONE,
/* 1 */ GANON_LIMB_ROOT,
/* 2 */ GANON_LIMB_TORSO,
/* 3 */ GANON_LIMB_LEFT_SHOULDER,
/* 4 */ GANON_LIMB_LEFT_UPPER_ARM,
/* 5 */ GANON_LIMB_LEFT_FOREARM,
/* 6 */ GANON_LIMB_LEFT_WRIST,
/* 7 */ GANON_LIMB_LEFT_SWORD,
/* 8 */ GANON_LIMB_LEFT_HAND,
/* 9 */ GANON_LIMB_RIGHT_SHOULDER,
/* 10 */ GANON_LIMB_RIGHT_UPPER_ARM,
/* 11 */ GANON_LIMB_RIGHT_FOREARM,
/* 12 */ GANON_LIMB_RIGHT_WRIST,
/* 13 */ GANON_LIMB_RIGHT_SWORD,
/* 14 */ GANON_LIMB_RIGHT_HAND,
/* 15 */ GANON_LIMB_NECK,
/* 16 */ GANON_LIMB_JEWEL,
/* 17 */ GANON_LIMB_SNOUT,
/* 18 */ GANON_LIMB_OUTER_TEETH,
/* 19 */ GANON_LIMB_MOUTH,
/* 20 */ GANON_LIMB_INNER_TEETH,
/* 21 */ GANON_LIMB_JAW,
/* 22 */ GANON_LIMB_MIDDLE_HAIR_1,
/* 23 */ GANON_LIMB_MIDDLE_HAIR_2,
/* 24 */ GANON_LIMB_MIDDLE_HAIR_3,
/* 25 */ GANON_LIMB_LEFT_HAIR_1,
/* 26 */ GANON_LIMB_LEFT_HAIR_2,
/* 27 */ GANON_LIMB_LEFT_HAIR_3,
/* 28 */ GANON_LIMB_RIGHT_HAIR_1,
/* 29 */ GANON_LIMB_RIGHT_HAIR_2,
/* 30 */ GANON_LIMB_RIGHT_HAIR_3,
/* 31 */ GANON_LIMB_EYES,
/* 32 */ GANON_LIMB_HEAD,
/* 33 */ GANON_LIMB_LEFT_HORN,
/* 34 */ GANON_LIMB_RIGHT_HORN,
/* 35 */ GANON_LIMB_PELVIS,
/* 36 */ GANON_LIMB_LEFT_THIGH,
/* 37 */ GANON_LIMB_LEFT_SHIN,
/* 38 */ GANON_LIMB_LEFT_FOOT,
/* 39 */ GANON_LIMB_RIGHT_THIGH,
/* 40 */ GANON_LIMB_RIGHT_SHIN,
/* 41 */ GANON_LIMB_RIGHT_FOOT,
/* 42 */ GANON_LIMB_TAIL1,
/* 43 */ GANON_LIMB_TAIL2,
/* 44 */ GANON_LIMB_TAIL3,
/* 45 */ GANON_LIMB_TAIL4,
/* 46 */ GANON_LIMB_TAIL5,
/* 47 */ GANON_LIMB_MAX
} GanonLimb;
typedef struct BossGanon2 {
/* 0x0000 */ Actor actor;
/* 0x014C */ SkelAnime skelAnime;

View file

@ -309,9 +309,9 @@ static s8 D_80907144[] = {
static Vec3f D_80907164 = { 800.0f, 420.0f, 100.0f };
static void* sEyeTextures[] = {
object_ganon2_Tex_01E188,
object_ganon2_Tex_01E988,
object_ganon2_Tex_01EA08,
gGanonEyeOpenTex,
gGanonEyeHalfTex,
gGanonEyeClosedTex,
};
static Vec3f D_8090717C = { 0.0f, -2000.0f, 0.0f };