mirror of
https://github.com/zeldaret/oot.git
synced 2025-08-06 06:10:21 +00:00
ovl_Bg_Ganon_Otyuka (#488)
* merge upstream
* Merge upstream
* BgGanonOtyuka_Init
* Migrate data
* Use texture symbol in dlist
* Split gfx into another file
* Cool data stuff
* Cleanup more data
* Name some more stuff
* Add newline
* BgGanonOtyuka_Destroy
* Rename shockwave to flash
* Work on BgGanonOtyuka_Draw
* Work more on draw
* More progress
* More BgGanonOtyuka_Draw
* Stuff
* Terrible match BgGanonOtyuka_Draw
* BgGanonOtyuka_Update
* func_808760DC
* Cleanup BgGanonOtyuka_Draw
* Cleanup
* More cleanup
* Work on func_80875A0C
* Rename to color
* func_80875C88
* func_80875A0C
* Stuff
* Stuff
* Name top and bottom dlists
* Name some verts
* Add back in accidentally removed D_808772E0
* Name side dlist
* Name dlists
* Name flash verts
* Only add unk_198 to BossGanon
* Name drop timer
* Name isFalling
* Name stuff
* Name stuff relating to sides
* Use Side enum
* Use cardinal directions for sides
* More naming / cleanup
* Rename to SIDE_ALL
* Replace enum with defines
* Flash state
* Reorder add
* Rename to flashHeight
* Revert "Rename to flashHeight"
This reverts commit fa1ca87630
.
* Correct sides
* Rename to unwalledSides
* Put f32 on 0x8000
* Cleanup
* Update src/overlays/actors/ovl_Bg_Ganon_Otyuka/z_bg_ganon_otyuka.h
Co-authored-by: Roman971 <32455037+Roman971@users.noreply.github.com>
* Update src/overlays/actors/ovl_Bg_Ganon_Otyuka/z_bg_ganon_otyuka.c
Co-authored-by: Roman971 <32455037+Roman971@users.noreply.github.com>
* Update src/overlays/actors/ovl_Bg_Ganon_Otyuka/z_bg_ganon_otyuka.c
Co-authored-by: Roman971 <32455037+Roman971@users.noreply.github.com>
* Cleanup
Co-authored-by: Roman971 <32455037+Roman971@users.noreply.github.com>
This commit is contained in:
parent
734ad1a0bc
commit
5d03824f93
15 changed files with 600 additions and 1396 deletions
|
@ -5,21 +5,28 @@
|
|||
*/
|
||||
|
||||
#include "z_bg_ganon_otyuka.h"
|
||||
#include "overlays/actors/ovl_Boss_Ganon/z_boss_ganon.h"
|
||||
#include "vt.h"
|
||||
|
||||
#define FLAGS 0x00000030
|
||||
|
||||
#define THIS ((BgGanonOtyuka*)thisx)
|
||||
|
||||
typedef enum {
|
||||
/* 0x00 */ FLASH_NONE,
|
||||
/* 0x01 */ FLASH_GROW,
|
||||
/* 0x02 */ FLASH_SHRINK
|
||||
} FlashState;
|
||||
|
||||
void BgGanonOtyuka_Init(Actor* thisx, GlobalContext* globalCtx);
|
||||
void BgGanonOtyuka_Destroy(Actor* thisx, GlobalContext* globalCtx);
|
||||
void BgGanonOtyuka_Update(Actor* thisx, GlobalContext* globalCtx);
|
||||
void BgGanonOtyuka_Draw(Actor* thisx, GlobalContext* globalCtx);
|
||||
|
||||
void func_80875A0C(BgGanonOtyuka* this, GlobalContext* globalCtx);
|
||||
void func_80875C88(BgGanonOtyuka* this, GlobalContext* globalCtx);
|
||||
void func_808760DC(BgGanonOtyuka* this, GlobalContext* globalCtx);
|
||||
void BgGanonOtyuka_WaitToFall(BgGanonOtyuka* this, GlobalContext* globalCtx);
|
||||
void BgGanonOtyuka_Fall(BgGanonOtyuka* this, GlobalContext* globalCtx);
|
||||
void BgGanonOtyuka_DoNothing(Actor* thisx, GlobalContext* globalCtx);
|
||||
|
||||
/*
|
||||
const ActorInit Bg_Ganon_Otyuka_InitVars = {
|
||||
ACTOR_BG_GANON_OTYUKA,
|
||||
ACTORTYPE_PROP,
|
||||
|
@ -31,18 +38,362 @@ const ActorInit Bg_Ganon_Otyuka_InitVars = {
|
|||
(ActorFunc)BgGanonOtyuka_Update,
|
||||
(ActorFunc)BgGanonOtyuka_Draw,
|
||||
};
|
||||
*/
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Ganon_Otyuka/BgGanonOtyuka_Init.s")
|
||||
static InitChainEntry sInitChain[] = {
|
||||
ICHAIN_VEC3F_DIV1000(scale, 1000, ICHAIN_STOP),
|
||||
};
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Ganon_Otyuka/BgGanonOtyuka_Destroy.s")
|
||||
static u8 sSides[] = { OTYUKA_SIDE_EAST, OTYUKA_SIDE_WEST, OTYUKA_SIDE_SOUTH, OTYUKA_SIDE_NORTH };
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Ganon_Otyuka/func_80875A0C.s")
|
||||
static Vec3f D_80876A68[] = {
|
||||
{ 120.0f, 0.0f, 0.0f },
|
||||
{ -120.0f, 0.0f, 0.0f },
|
||||
{ 0.0f, 0.0f, 120.0f },
|
||||
{ 0.0f, 0.0f, -120.0f },
|
||||
};
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Ganon_Otyuka/func_80875C88.s")
|
||||
static Color_RGBA8 sDustPrimColor = { 60, 60, 0, 0 };
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Ganon_Otyuka/func_808760DC.s")
|
||||
static Color_RGBA8 sDustEnvColor = { 50, 20, 0, 0 };
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Ganon_Otyuka/BgGanonOtyuka_Update.s")
|
||||
static Vec3f sSideCenters[] = {
|
||||
{ 60.0f, 0.0f, 0.0f },
|
||||
{ -60.0f, 0.0f, 0.0f },
|
||||
{ 0.0f, 0.0f, 60.0f },
|
||||
{ 0.0f, 0.0f, -60.0f },
|
||||
};
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Ganon_Otyuka/BgGanonOtyuka_Draw.s")
|
||||
static f32 sSideAngles[] = { M_PI / 2, -M_PI / 2, 0.0f, M_PI };
|
||||
|
||||
#include "z_bg_ganon_otyuka_gfx.c"
|
||||
|
||||
static CamData sCameraDataList[] = { { 0, 0, 0 } };
|
||||
|
||||
static UNK_TYPE sSurfaceTypeList[] = {
|
||||
0x00000000,
|
||||
0x000007C0,
|
||||
0x00000000,
|
||||
0x000007C2,
|
||||
};
|
||||
|
||||
static CollisionPoly sPolyList[] = {
|
||||
{ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02 }, { 32767, 0, 0 }, -60 },
|
||||
{ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x03 }, { 32767, 0, 0 }, -60 },
|
||||
{ { 0x00, 0x00, 0x00, 0x03, 0x00, 0x02, 0x00, 0x04 }, { 0, 0, -32767 }, -60 },
|
||||
{ { 0x00, 0x00, 0x00, 0x03, 0x00, 0x04, 0x00, 0x05 }, { 0, 0, -32767 }, -60 },
|
||||
{ { 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x06 }, { -32767, 0, 0 }, -60 },
|
||||
{ { 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x07 }, { -32767, 0, 0 }, -60 },
|
||||
{ { 0x00, 0x00, 0x00, 0x07, 0x00, 0x06, 0x00, 0x01 }, { 0, 0, 32767 }, -60 },
|
||||
{ { 0x00, 0x00, 0x00, 0x07, 0x00, 0x01, 0x00, 0x00 }, { 0, 0, 32767 }, -60 },
|
||||
{ { 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x05 }, { 0, 32767, 0 }, 0 },
|
||||
{ { 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07 }, { 0, 32767, 0 }, 0 },
|
||||
};
|
||||
|
||||
static Vec3s sVtxList[] = {
|
||||
{ 60, 0, 60 }, { 60, -60, 60 }, { 60, -60, -60 }, { 60, 0, -60 },
|
||||
{ -60, -60, -60 }, { -60, 0, -60 }, { -60, -60, 60 }, { -60, 0, 60 },
|
||||
};
|
||||
|
||||
static CollisionHeader sColHeader = {
|
||||
{ -60, -60, -60 }, { 60, 0, 60 }, ARRAY_COUNT(sVtxList), sVtxList, ARRAY_COUNT(sPolyList),
|
||||
sPolyList, sSurfaceTypeList, sCameraDataList, 0, NULL,
|
||||
};
|
||||
|
||||
void BgGanonOtyuka_Init(Actor* thisx, GlobalContext* globalCtx) {
|
||||
BgGanonOtyuka* this = THIS;
|
||||
s32 pad;
|
||||
CollisionHeader* colHeader = NULL;
|
||||
|
||||
Actor_ProcessInitChain(thisx, sInitChain);
|
||||
DynaPolyInfo_SetActorMove(&this->dyna, 0);
|
||||
DynaPolyInfo_Alloc(&sColHeader, &colHeader);
|
||||
this->dyna.dynaPolyId = DynaPolyInfo_RegisterActor(globalCtx, &globalCtx->colCtx.dyna, thisx, colHeader);
|
||||
|
||||
if (thisx->params != 0x23) {
|
||||
thisx->draw = NULL;
|
||||
this->actionFunc = BgGanonOtyuka_WaitToFall;
|
||||
} else {
|
||||
thisx->update = BgGanonOtyuka_DoNothing;
|
||||
}
|
||||
}
|
||||
|
||||
void BgGanonOtyuka_Destroy(Actor* thisx, GlobalContext* globalCtx) {
|
||||
BgGanonOtyuka* this = THIS;
|
||||
|
||||
DynaPolyInfo_Free(globalCtx, &globalCtx->colCtx.dyna, this->dyna.dynaPolyId);
|
||||
|
||||
osSyncPrintf(VT_FGCOL(GREEN));
|
||||
osSyncPrintf("WHY !!!!!!!!!!!!!!!!\n");
|
||||
osSyncPrintf(VT_RST);
|
||||
}
|
||||
|
||||
void BgGanonOtyuka_WaitToFall(BgGanonOtyuka* this, GlobalContext* globalCtx) {
|
||||
Actor* thisx = &this->dyna.actor;
|
||||
Actor* prop;
|
||||
BgGanonOtyuka* platform;
|
||||
f32 dx;
|
||||
f32 dy;
|
||||
f32 dz;
|
||||
Vec3f center;
|
||||
s16 i;
|
||||
|
||||
if (this->isFalling || ((globalCtx->actorCtx.unk_02 != 0) && (this->dyna.actor.xyzDistFromLinkSq < 4900.0f))) {
|
||||
osSyncPrintf("OTC O 1\n");
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(D_80876A68); i++) {
|
||||
prop = globalCtx->actorCtx.actorList[ACTORTYPE_PROP].first;
|
||||
while (prop != NULL) {
|
||||
if ((prop == thisx) || (prop->id != ACTOR_BG_GANON_OTYUKA)) {
|
||||
prop = prop->next;
|
||||
continue;
|
||||
}
|
||||
|
||||
platform = (BgGanonOtyuka*)prop;
|
||||
|
||||
dx = platform->dyna.actor.posRot.pos.x - this->dyna.actor.posRot.pos.x + D_80876A68[i].x;
|
||||
dy = platform->dyna.actor.posRot.pos.y - this->dyna.actor.posRot.pos.y;
|
||||
dz = platform->dyna.actor.posRot.pos.z - this->dyna.actor.posRot.pos.z + D_80876A68[i].z;
|
||||
|
||||
if ((fabsf(dx) < 10.0f) && (fabsf(dy) < 10.0f) && (fabsf(dz) < 10.0f)) {
|
||||
platform->visibleSides |= sSides[i];
|
||||
break;
|
||||
} else {
|
||||
prop = prop->next;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
osSyncPrintf("OTC O 2\n");
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(D_80876A68); i++) {
|
||||
center.x = this->dyna.actor.posRot.pos.x + D_80876A68[i].x;
|
||||
center.y = this->dyna.actor.posRot.pos.y;
|
||||
center.z = this->dyna.actor.posRot.pos.z + D_80876A68[i].z;
|
||||
if (func_8003E30C(&globalCtx->colCtx, ¢er, 50.0f)) {
|
||||
this->unwalledSides |= sSides[i];
|
||||
}
|
||||
}
|
||||
|
||||
osSyncPrintf("OTC O 3\n");
|
||||
|
||||
this->actionFunc = BgGanonOtyuka_Fall;
|
||||
this->isFalling = true;
|
||||
this->dropTimer = 20;
|
||||
this->flashState = FLASH_GROW;
|
||||
this->flashTimer = 0;
|
||||
this->flashPrimColorR = 255.0f;
|
||||
this->flashPrimColorG = 255.0f;
|
||||
this->flashPrimColorB = 255.0f;
|
||||
this->flashEnvColorR = 255.0f;
|
||||
this->flashEnvColorG = 255.0f;
|
||||
this->flashEnvColorB = 0.0f;
|
||||
}
|
||||
}
|
||||
|
||||
void BgGanonOtyuka_Fall(BgGanonOtyuka* this, GlobalContext* globalCtx) {
|
||||
Player* player = PLAYER;
|
||||
s16 i;
|
||||
Vec3f pos;
|
||||
Vec3f velocity;
|
||||
Vec3f accel;
|
||||
|
||||
osSyncPrintf("MODE DOWN\n");
|
||||
if (this->flashState == FLASH_GROW) {
|
||||
Math_SmoothScaleMaxF(&this->flashPrimColorB, 170.0f, 1.0f, 8.5f);
|
||||
Math_SmoothScaleMaxF(&this->flashEnvColorR, 120.0f, 1.0f, 13.5f);
|
||||
Math_SmoothScaleMaxF(&this->flashYScale, 2.5f, 1.0f, 0.25f);
|
||||
if (this->flashYScale == 2.5f) {
|
||||
this->flashState = FLASH_SHRINK;
|
||||
}
|
||||
} else if (this->flashState == FLASH_SHRINK) {
|
||||
Math_SmoothScaleMaxF(&this->flashPrimColorG, 0.0f, 1.0f, 25.5f);
|
||||
Math_SmoothScaleMaxF(&this->flashEnvColorR, 0.0f, 1.0f, 12.0f);
|
||||
Math_SmoothScaleMaxF(&this->flashEnvColorG, 0.0f, 1.0f, 25.5f);
|
||||
Math_SmoothDownscaleMaxF(&this->flashYScale, 1.0f, 0.25f);
|
||||
if (this->flashYScale == 0.0f) {
|
||||
this->flashState = FLASH_NONE;
|
||||
}
|
||||
}
|
||||
if (this->dropTimer == 0) {
|
||||
this->flashYScale = 0.0f;
|
||||
Math_SmoothScaleMaxF(&this->dyna.actor.posRot.pos.y, -1000.0f, 1.0f, this->dyna.actor.speedXZ);
|
||||
Math_SmoothScaleMaxF(&this->dyna.actor.speedXZ, 100.0f, 1.0f, 2.0f);
|
||||
if (!(this->unwalledSides & OTYUKA_SIDE_EAST)) {
|
||||
this->dyna.actor.shape.rot.z -= (s16)(this->dyna.actor.speedXZ * 30.0f);
|
||||
}
|
||||
if (!(this->unwalledSides & OTYUKA_SIDE_WEST)) {
|
||||
this->dyna.actor.shape.rot.z += (s16)(this->dyna.actor.speedXZ * 30.0f);
|
||||
}
|
||||
if (!(this->unwalledSides & OTYUKA_SIDE_SOUTH)) {
|
||||
this->dyna.actor.shape.rot.x += (s16)(this->dyna.actor.speedXZ * 30.0f);
|
||||
}
|
||||
if (!(this->unwalledSides & OTYUKA_SIDE_NORTH)) {
|
||||
this->dyna.actor.shape.rot.x -= (s16)(this->dyna.actor.speedXZ * 30.0f);
|
||||
}
|
||||
if (this->dyna.actor.posRot.pos.y < -750.0f) {
|
||||
if (player->actor.posRot.pos.y < -400.0f) {
|
||||
accel.x = accel.z = 0.0f;
|
||||
accel.y = 0.1f;
|
||||
velocity.x = velocity.y = velocity.z = 0.0f;
|
||||
|
||||
for (i = 0; i < 30; i++) {
|
||||
pos.x = Math_Rand_CenteredFloat(150.0f) + this->dyna.actor.posRot.pos.x;
|
||||
pos.y = Math_Rand_ZeroFloat(60.0f) + -750.0f;
|
||||
pos.z = Math_Rand_CenteredFloat(150.0f) + this->dyna.actor.posRot.pos.z;
|
||||
func_8002836C(globalCtx, &pos, &velocity, &accel, &sDustPrimColor, &sDustEnvColor,
|
||||
(s16)Math_Rand_ZeroFloat(100.0f) + 250, 5, (s16)Math_Rand_ZeroFloat(5.0f) + 15);
|
||||
}
|
||||
|
||||
func_80033DB8(globalCtx, 10, 15);
|
||||
Audio_PlaySoundAtPosition(globalCtx, &this->dyna.actor.posRot.pos, 0x28, 0x2839);
|
||||
}
|
||||
Actor_Kill(&this->dyna.actor);
|
||||
}
|
||||
} else {
|
||||
if (this->dropTimer == 1) {
|
||||
Audio_PlaySoundGeneral(NA_SE_EV_STONEDOOR_STOP, &this->dyna.actor.projectedPos, 4, &D_801333E0, &D_801333E0,
|
||||
&D_801333E8);
|
||||
} else {
|
||||
Audio_PlaySoundGeneral(NA_SE_EV_BLOCKSINK - SFX_FLAG, &this->dyna.actor.projectedPos, 4, &D_801333E0,
|
||||
&D_801333E0, &D_801333E8);
|
||||
}
|
||||
Math_SmoothScaleMaxF(&this->dyna.actor.posRot.pos.y, -1000.0f, 1.0f, this->dyna.actor.speedXZ);
|
||||
Math_SmoothScaleMaxF(&this->dyna.actor.speedXZ, 100.0f, 1.0f, 0.1f);
|
||||
}
|
||||
osSyncPrintf("MODE DOWN END\n");
|
||||
}
|
||||
|
||||
void BgGanonOtyuka_DoNothing(Actor* thisx, GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
void BgGanonOtyuka_Update(Actor* thisx, GlobalContext* globalCtx) {
|
||||
BgGanonOtyuka* this = THIS;
|
||||
|
||||
this->actionFunc(this, globalCtx);
|
||||
this->flashTimer++;
|
||||
if (this->dropTimer != 0) {
|
||||
this->dropTimer--;
|
||||
}
|
||||
}
|
||||
|
||||
void BgGanonOtyuka_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
BgGanonOtyuka* this = THIS;
|
||||
s16 i;
|
||||
Gfx* phi_s2;
|
||||
Gfx* phi_s1;
|
||||
Camera* camera = Gameplay_GetCamera(globalCtx, 0);
|
||||
Actor* actor;
|
||||
BgGanonOtyuka* platform;
|
||||
BossGanon* ganondorf;
|
||||
f32 spBC = -30.0f;
|
||||
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx, "../z_bg_ganon_otyuka.c", 702);
|
||||
|
||||
actor = globalCtx->actorCtx.actorList[ACTORTYPE_BOSS].first;
|
||||
while (actor != NULL) {
|
||||
if (actor->id == ACTOR_BOSS_GANON) {
|
||||
ganondorf = (BossGanon*)actor;
|
||||
|
||||
if (ganondorf->actor.params == 0) {
|
||||
if (ganondorf->unk_198 != 0) {
|
||||
spBC = -2000.0f;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
actor = actor->next;
|
||||
}
|
||||
|
||||
func_80093D18(globalCtx->state.gfxCtx);
|
||||
gSPDisplayList(POLY_OPA_DISP++, sPlatformSetupDList);
|
||||
|
||||
actor = globalCtx->actorCtx.actorList[ACTORTYPE_PROP].first;
|
||||
while (actor != NULL) {
|
||||
if (actor->id == ACTOR_BG_GANON_OTYUKA) {
|
||||
platform = (BgGanonOtyuka*)actor;
|
||||
|
||||
if (platform->dyna.actor.projectedPos.z > spBC) {
|
||||
if (camera->eye.y > platform->dyna.actor.posRot.pos.y) {
|
||||
phi_s2 = sPlatformTopDList;
|
||||
} else {
|
||||
phi_s2 = sPlatformBottomDList;
|
||||
}
|
||||
Matrix_Translate(platform->dyna.actor.posRot.pos.x, platform->dyna.actor.posRot.pos.y,
|
||||
platform->dyna.actor.posRot.pos.z, MTXMODE_NEW);
|
||||
phi_s1 = NULL;
|
||||
if (platform->isFalling) {
|
||||
Matrix_RotateX((platform->dyna.actor.shape.rot.x / (f32)0x8000) * M_PI, MTXMODE_APPLY);
|
||||
Matrix_RotateZ((platform->dyna.actor.shape.rot.z / (f32)0x8000) * M_PI, MTXMODE_APPLY);
|
||||
if (camera->eye.y > platform->dyna.actor.posRot.pos.y) {
|
||||
phi_s1 = sPlatformBottomDList;
|
||||
} else {
|
||||
phi_s1 = sPlatformTopDList;
|
||||
}
|
||||
}
|
||||
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx, "../z_bg_ganon_otyuka.c", 766),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_OPA_DISP++, phi_s2);
|
||||
|
||||
if (phi_s1 != NULL) {
|
||||
gSPDisplayList(POLY_OPA_DISP++, phi_s1);
|
||||
}
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(sSides); i++) {
|
||||
if (platform->visibleSides & sSides[i]) {
|
||||
Matrix_Push();
|
||||
Matrix_Translate(sSideCenters[i].x, 0.0f, sSideCenters[i].z, MTXMODE_APPLY);
|
||||
Matrix_RotateY(sSideAngles[i], MTXMODE_APPLY);
|
||||
gSPMatrix(POLY_OPA_DISP++,
|
||||
Matrix_NewMtx(globalCtx->state.gfxCtx, "../z_bg_ganon_otyuka.c", 785),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_OPA_DISP++, sPlatformSideDList);
|
||||
Matrix_Pull();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
actor = actor->next;
|
||||
}
|
||||
|
||||
func_80093D84(globalCtx->state.gfxCtx);
|
||||
actor = globalCtx->actorCtx.actorList[ACTORTYPE_PROP].first;
|
||||
while (actor != NULL) {
|
||||
if (actor->id == ACTOR_BG_GANON_OTYUKA) {
|
||||
platform = (BgGanonOtyuka*)actor;
|
||||
|
||||
if ((platform->dyna.actor.projectedPos.z > -30.0f) && (platform->flashState != FLASH_NONE)) {
|
||||
gSPSegment(POLY_XLU_DISP++, 0x08,
|
||||
Gfx_TwoTexScroll(globalCtx->state.gfxCtx, 0, platform->flashTimer * 4, 0, 32, 64, 1,
|
||||
platform->flashTimer * 4, 0, 32, 64));
|
||||
gDPPipeSync(POLY_XLU_DISP++);
|
||||
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, platform->flashPrimColorR, platform->flashPrimColorG,
|
||||
platform->flashPrimColorB, 0);
|
||||
gDPSetEnvColor(POLY_XLU_DISP++, platform->flashEnvColorR, platform->flashEnvColorG,
|
||||
platform->flashEnvColorB, 128);
|
||||
Matrix_Translate(platform->dyna.actor.posRot.pos.x, 0.0f, platform->dyna.actor.posRot.pos.z,
|
||||
MTXMODE_NEW);
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(sSides); i++) {
|
||||
if (platform->unwalledSides & sSides[i]) {
|
||||
Matrix_Push();
|
||||
Matrix_Translate(sSideCenters[i].x, 0.0f, sSideCenters[i].z, MTXMODE_APPLY);
|
||||
Matrix_RotateY(sSideAngles[i], MTXMODE_APPLY);
|
||||
Matrix_Scale(0.3f, platform->flashYScale * 0.3f, 0.3f, MTXMODE_APPLY);
|
||||
gSPMatrix(POLY_XLU_DISP++,
|
||||
Matrix_NewMtx(globalCtx->state.gfxCtx, "../z_bg_ganon_otyuka.c", 847),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, sFlashDList);
|
||||
Matrix_Pull();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
actor = actor->next;
|
||||
}
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx, "../z_bg_ganon_otyuka.c", 857);
|
||||
}
|
||||
|
|
|
@ -4,6 +4,12 @@
|
|||
#include "ultra64.h"
|
||||
#include "global.h"
|
||||
|
||||
#define OTYUKA_SIDE_EAST (1 << 0)
|
||||
#define OTYUKA_SIDE_WEST (1 << 1)
|
||||
#define OTYUKA_SIDE_SOUTH (1 << 2)
|
||||
#define OTYUKA_SIDE_NORTH (1 << 3)
|
||||
#define OTYUKA_SIDE_ALL (OTYUKA_SIDE_EAST | OTYUKA_SIDE_WEST | OTYUKA_SIDE_SOUTH | OTYUKA_SIDE_NORTH)
|
||||
|
||||
struct BgGanonOtyuka;
|
||||
|
||||
typedef void (*BgGanonOtyukaActionFunc)(struct BgGanonOtyuka*, GlobalContext*);
|
||||
|
@ -11,7 +17,19 @@ typedef void (*BgGanonOtyukaActionFunc)(struct BgGanonOtyuka*, GlobalContext*);
|
|||
typedef struct BgGanonOtyuka {
|
||||
/* 0x0000 */ DynaPolyActor dyna;
|
||||
/* 0x0164 */ BgGanonOtyukaActionFunc actionFunc;
|
||||
/* 0x0168 */ char unk_168[0x24];
|
||||
/* 0x0168 */ s16 dropTimer;
|
||||
/* 0x016A */ u8 isFalling;
|
||||
/* 0x016B */ u8 unwalledSides;
|
||||
/* 0x016C */ u8 visibleSides;
|
||||
/* 0x016D */ u8 flashTimer;
|
||||
/* 0x016E */ u8 flashState;
|
||||
/* 0x0170 */ f32 flashYScale;
|
||||
/* 0x0174 */ f32 flashPrimColorR;
|
||||
/* 0x0178 */ f32 flashPrimColorG;
|
||||
/* 0x017C */ f32 flashPrimColorB;
|
||||
/* 0x0180 */ f32 flashEnvColorR;
|
||||
/* 0x0184 */ f32 flashEnvColorG;
|
||||
/* 0x0188 */ f32 flashEnvColorB;
|
||||
} BgGanonOtyuka; // size = 0x018C
|
||||
|
||||
extern const ActorInit Bg_Ganon_Otyuka_InitVars;
|
||||
|
|
209
src/overlays/actors/ovl_Bg_Ganon_Otyuka/z_bg_ganon_otyuka_gfx.c
Normal file
209
src/overlays/actors/ovl_Bg_Ganon_Otyuka/z_bg_ganon_otyuka_gfx.c
Normal file
|
@ -0,0 +1,209 @@
|
|||
#include "z_bg_ganon_otyuka.h"
|
||||
|
||||
extern Gfx D_08000000[];
|
||||
|
||||
static UNK_TYPE sPlatformTexture[] = {
|
||||
0x19033187, 0x39C74207, 0x4A495247, 0x5A494A09, 0x498749C5, 0x5A476247, 0x62076287, 0x734F8393, 0x6A8B6A09,
|
||||
0x5A495207, 0x49C54A89, 0x4A895289, 0x5AC95A89, 0x5A4B5A8B, 0x5A896249, 0x52095207, 0x19033185, 0x420949C7,
|
||||
0x52095207, 0x5A075A45, 0x41C749C5, 0x62075207, 0x62896A49, 0x6B4F7B51, 0x62C75A49, 0x52095247, 0x4A475249,
|
||||
0x5A075A89, 0x52895A89, 0x62876247, 0x62495A4B, 0x52095A07, 0x214339C7, 0x52095209, 0x524749C7, 0x49C74A07,
|
||||
0x41C74985, 0x52095A47, 0x6A096A47, 0x72CD7BD3, 0x6249628B, 0x62495207, 0x49C55A49, 0x5A495249, 0x5A096A89,
|
||||
0x6A4B5A47, 0x5A496207, 0x5A475207, 0x210741C5, 0x61C96AC7, 0x52094A09, 0x5A0951C7, 0x398541C5, 0x51C759C9,
|
||||
0x5A495287, 0x6ACD7B11, 0x6249528B, 0x62075205, 0x4A0751C7, 0x52494A47, 0x52095209, 0x62075209, 0x5A0951C7,
|
||||
0x52054A07, 0x21434205, 0x620959C7, 0x4A0B2985, 0x52474987, 0x31C34185, 0x49C749C3, 0x4A074A07, 0x6A4B728F,
|
||||
0x52474A47, 0x51C949C9, 0x51C549C7, 0x42094A07, 0x52474A05, 0x520759C7, 0x52095207, 0x5A0751C7, 0x21454205,
|
||||
0x5A4772CD, 0x8C9D4A0B, 0x5A075A09, 0x41853985, 0x51C35187, 0x41C749C9, 0x524D630F, 0x5A4951C7, 0x51C75207,
|
||||
0x49C74A07, 0x49C74A09, 0x4A075207, 0x62475A89, 0x5A896207, 0x62475209, 0x10C541C7, 0x62077249, 0x7B0D5A09,
|
||||
0x624B6207, 0x41C74145, 0x49C949C7, 0x4A076209, 0x6ACD7351, 0x62896207, 0x62875A47, 0x5A075209, 0x4A074A09,
|
||||
0x4A076249, 0x5A496249, 0x624B6287, 0x5A475A87, 0x21454207, 0x624B6A47, 0x624962C9, 0x6A896209, 0x49C949C5,
|
||||
0x49C55207, 0x52475A89, 0x728B7B93, 0x6A8D6209, 0x6A896207, 0x5A074A49, 0x4A094A09, 0x52496289, 0x5A896A49,
|
||||
0x624962C7, 0x62896AC9, 0x210539C7, 0x624962CB, 0x62C96A87, 0x62475A8B, 0x39854985, 0x49C749C5, 0x624562C7,
|
||||
0x730D8351, 0x6A8B6289, 0x62896249, 0x624949C7, 0x42055247, 0x5A876287, 0x6A4B6A49, 0x628B6A87, 0x6A87628B,
|
||||
0x21034209, 0x5A076249, 0x62495A49, 0x6A87624B, 0x49894185, 0x4A0549C7, 0x5A07628B, 0x7B0D8395, 0x72896A89,
|
||||
0x6A8B5A49, 0x52095209, 0x49C95249, 0x62475A49, 0x6247628B, 0x62896A47, 0x6A476249, 0x210331C9, 0x52076249,
|
||||
0x5289628B, 0x62495A47, 0x49874185, 0x418749C7, 0x62876A89, 0x72CD83D1, 0x728B6249, 0x6A496A49, 0x52494A07,
|
||||
0x4A075247, 0x5A895A49, 0x62496AC9, 0x62C76A47, 0x6AC96249, 0x194541C7, 0x4A075247, 0x520B5AC9, 0x5A4B51C7,
|
||||
0x41C54185, 0x498749C5, 0x52476289, 0x6B0D8353, 0x6A4B6AC9, 0x62495A09, 0x52874A47, 0x3A493A49, 0x524B5249,
|
||||
0x6A476AC5, 0x6249728B, 0x62495A87, 0x190339C7, 0x5A494A49, 0x5287528B, 0x4A4B4A47, 0x318939C5, 0x4A0559C5,
|
||||
0x62496287, 0x7B0F83D5, 0x62CB6289, 0x62876247, 0x524B5209, 0x3A074A47, 0x4A095249, 0x5A475249, 0x62496A89,
|
||||
0x620B6247, 0x110539C7, 0x520752C7, 0x524B5207, 0x52894A4B, 0x298731C5, 0x42075209, 0x5A896287, 0x73518393,
|
||||
0x628B6289, 0x52895AC9, 0x52494A0B, 0x4A074A49, 0x52494A49, 0x4A476287, 0x62876A89, 0x6A496A47, 0x19434A07,
|
||||
0x5A475ACB, 0x52475249, 0x52894A49, 0x31C531C7, 0x31C549C7, 0x528952C9, 0x634D7353, 0x52894A89, 0x52895A47,
|
||||
0x524B5A49, 0x52074A07, 0x4A094A4B, 0x5207524B, 0x5A496287, 0x6A496A89, 0x19454A07, 0x62496207, 0x49C93905,
|
||||
0x62495207, 0x39C73145, 0x41C94A07, 0x4A875249, 0x5B0D6351, 0x528B6249, 0x624B6A8B, 0x62C96249, 0x5A495207,
|
||||
0x628B5A49, 0x52895249, 0x4A89628B, 0x628762C7, 0x194549C9, 0x5A4772CB, 0x945D4A0D, 0x62075209, 0x39874187,
|
||||
0x3A074A47, 0x52494A49, 0x52CB6B91, 0x73117BD1, 0x73917B93, 0x7B537B53, 0x730F630F, 0x7B517B91, 0x6B516B0F,
|
||||
0x73916B8F, 0x73137351, 0x21034187, 0x6A496249, 0x7B4D6247, 0x62875207, 0x41853987, 0x42075207, 0x4A494A47,
|
||||
0x5A475B0B, 0x62CB72CF, 0x72CD6B4D, 0x6B0D6ACD, 0x624B5ACB, 0x62CB62CD, 0x6ACB62CD, 0x62CD4A8B, 0x628B62CF,
|
||||
0x20C54207, 0x524B6A89, 0x62496287, 0x5A4749C7, 0x31853945, 0x41C55185, 0x49C53A45, 0x4A495209, 0x62475A05,
|
||||
0x52076207, 0x52055A47, 0x4A0949C5, 0x52095247, 0x52075249, 0x5A494A87, 0x42473A09, 0x190539C9, 0x5A095A0B,
|
||||
0x5A075A07, 0x4A0549C7, 0x41453985, 0x41C94187, 0x420941C5, 0x4A054A09, 0x49C55205, 0x4A054A07, 0x5A0749C3,
|
||||
0x49C55205, 0x520551C7, 0x59C75207, 0x4A474A07, 0x3A073A07, 0x190339C5, 0x52455A49, 0x5A075249, 0x52074A07,
|
||||
0x41C34985, 0x4A055A47, 0x49C74A09, 0x420951C7, 0x49C75207, 0x49C551C5, 0x51875207, 0x52455A45, 0x52075209,
|
||||
0x59C74A05, 0x498549C5, 0x3A074207, 0x20C53985, 0x52475209, 0x52055247, 0x62096247, 0x39874207, 0x4A075245,
|
||||
0x52474249, 0x42474A09, 0x4A055207, 0x41C541C5, 0x41C55A45, 0x52075209, 0x62895A07, 0x52875203, 0x49C539C7,
|
||||
0x3A053A07, 0x19033A07, 0x51876209, 0x5A476207, 0x5A875A09, 0x41874147, 0x49C749C5, 0x49C53A07, 0x49C94205,
|
||||
0x498541C5, 0x41474185, 0x41C54A07, 0x4A0551C7, 0x498549C5, 0x4A074207, 0x39473985, 0x318739C7, 0x190341C5,
|
||||
0x5A476205, 0x624962C9, 0x62475A47, 0x49C74985, 0x41C74985, 0x42054207, 0x41C741C9, 0x39C74149, 0x41474147,
|
||||
0x39874987, 0x41874987, 0x41C749C5, 0x41854987, 0x49893985, 0x29C739C5, 0x21074185, 0x62456249, 0x624B6A89,
|
||||
0x62496A89, 0x52475249, 0x52474A87, 0x4A474A07, 0x524B5247, 0x4A474A09, 0x4A074987, 0x4A095A09, 0x5A896249,
|
||||
0x62076205, 0x6247624B, 0x528951C9, 0x41C54205, 0x11054207, 0x52496209, 0x52496287, 0x62476A87, 0x5A895A87,
|
||||
0x6247520B, 0x4A094AC9, 0x5A895A07, 0x5A0B5A47, 0x52074A47, 0x5A896289, 0x62876A89, 0x6A476AC9, 0x62475209,
|
||||
0x5A474A09, 0x4A094A07, 0x194341C9, 0x62475A47, 0x49CB3945, 0x5A076287, 0x6A496289, 0x62895A87, 0x5A895249,
|
||||
0x520951C9, 0x310749C7, 0x51C75A49, 0x62476289, 0x620962C7, 0x62875A47, 0x4A0B2985, 0x4A4B5247, 0x41C54A09,
|
||||
0x19454209, 0x5A8972CD, 0x9C5B4A0B, 0x62476AC9, 0x62875AC9, 0x62095A0B, 0x524B524B, 0x6B0F9419, 0x418B41C7,
|
||||
0x4A075A07, 0x62496287, 0x62876AC7, 0x628972CF, 0x8C5D4A4B, 0x52874A47, 0x424B4A07, 0x18C54985, 0x5A896287,
|
||||
0x7B4D6247, 0x6247728B, 0x62C76289, 0x6A075ACB, 0x4A474A47, 0x5A876AD1, 0x52455205, 0x52095A07, 0x62876A89,
|
||||
0x62496247, 0x6A496249, 0x7B0B5209, 0x52874A49, 0x42495209, 0x19434207, 0x52876207, 0x52495A49, 0x62095A09,
|
||||
0x5A095289, 0x62475207, 0x4A874A89, 0x52495287, 0x52495205, 0x42075A05, 0x62476247, 0x5A095249, 0x52496249,
|
||||
0x62495249, 0x5A874A07, 0x49C74207, 0x19453945, 0x41C739C7, 0x420741C9, 0x41C74209, 0x42054187, 0x3A0541C5,
|
||||
0x3A0931C7, 0x39C541C7, 0x49C73147, 0x3A0541C5, 0x49C549C7, 0x398941C7, 0x420749C7, 0x49C739C7, 0x420731C7,
|
||||
0x320741C7, 0x08C51903, 0x19431143, 0x21451903, 0x21432105, 0x19432105, 0x19051905, 0x11031905, 0x21451907,
|
||||
0x11072105, 0x19031943, 0x190518C5, 0x214518C5, 0x21432145, 0x11032103, 0x19051905, 0x19031903,
|
||||
};
|
||||
|
||||
// probably unused?
|
||||
static UNK_TYPE D_808772E0[] = { 0x00000000, 0x00000000 };
|
||||
|
||||
static Vtx sPlatformTopVerts[] = {
|
||||
VTX(60, 0, 60, 2048, -1024, 0xFF, 0xFF, 0xFF, 0xFF),
|
||||
VTX(60, 0, -60, 0, -1024, 0xFF, 0xFF, 0xFF, 0xFF),
|
||||
VTX(-60, 0, -60, 0, 1024, 0xFF, 0xFF, 0xFF, 0xFF),
|
||||
VTX(-60, 0, 60, 2048, 1024, 0xFF, 0xFF, 0xFF, 0xFF),
|
||||
};
|
||||
|
||||
static Gfx sPlatformSetupDList[] = {
|
||||
gsDPPipeSync(),
|
||||
gsDPSetTextureLUT(G_TT_NONE),
|
||||
gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
|
||||
gsDPLoadTextureBlock(sPlatformTexture, G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, 32, 0, G_TX_MIRROR | G_TX_WRAP,
|
||||
G_TX_MIRROR | G_TX_WRAP, 5, 5, G_TX_NOLOD, G_TX_NOLOD),
|
||||
gsDPSetCombineLERP(TEXEL0, 0, SHADE, 0, 0, 0, 0, 1, COMBINED, 0, PRIMITIVE, 0, 0, 0, 0, COMBINED),
|
||||
gsDPSetRenderMode(G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2),
|
||||
gsSPClearGeometryMode(G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR),
|
||||
gsSPSetGeometryMode(G_CULL_BACK | G_FOG),
|
||||
gsDPSetPrimColor(0, 0, 255, 255, 255, 255),
|
||||
gsDPPipeSync(),
|
||||
gsSPEndDisplayList(),
|
||||
};
|
||||
|
||||
static Gfx sPlatformTopDList[] = {
|
||||
gsSPVertex(sPlatformTopVerts, ARRAY_COUNT(sPlatformTopVerts), 0),
|
||||
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
|
||||
gsSPEndDisplayList(),
|
||||
};
|
||||
|
||||
static Vtx sPlatformBottomVerts[] = {
|
||||
VTX(60, -60, 60, 2048, -1024, 0x32, 0x32, 0x32, 0xFF),
|
||||
VTX(60, -60, -60, 0, -1024, 0x32, 0x32, 0x32, 0xFF),
|
||||
VTX(-60, -60, -60, 0, 1024, 0x32, 0x32, 0x32, 0xFF),
|
||||
VTX(-60, -60, 60, 2048, 1024, 0x32, 0x32, 0x32, 0xFF),
|
||||
};
|
||||
|
||||
static Gfx sPlatformBottomDList[] = {
|
||||
gsSPVertex(sPlatformBottomVerts, ARRAY_COUNT(sPlatformBottomVerts), 0),
|
||||
gsSP2Triangles(0, 2, 1, 0, 0, 3, 2, 0),
|
||||
gsSPEndDisplayList(),
|
||||
};
|
||||
|
||||
static Vtx sPlatformSideVerts[] = {
|
||||
VTX(-60, 0, 0, 2048, -1024, 0xFF, 0xFF, 0xFF, 0xFF),
|
||||
VTX(-60, -60, 0, 2048, 1024, 0x32, 0x32, 0x32, 0xFF),
|
||||
VTX(60, -60, 0, 0, 1024, 0x32, 0x32, 0x32, 0xFF),
|
||||
VTX(60, 0, 0, 0, -1024, 0xFF, 0xFF, 0xFF, 0xFF),
|
||||
};
|
||||
|
||||
static Gfx sPlatformSideDList[] = {
|
||||
gsSPVertex(sPlatformSideVerts, ARRAY_COUNT(sPlatformSideVerts), 0),
|
||||
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
|
||||
gsSPEndDisplayList(),
|
||||
};
|
||||
|
||||
static UNK_TYPE sFlashTexture[] = {
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||
0x00000000, 0x00000001, 0x00000000, 0x00000102, 0x01000001, 0x00000000, 0x00000000, 0x00010000, 0x00000000,
|
||||
0x00000001, 0x00000000, 0x00000204, 0x02000101, 0x00000000, 0x00000000, 0x00010101, 0x00000001, 0x00000001,
|
||||
0x00000000, 0x00000307, 0x03010102, 0x00000000, 0x00000000, 0x01010102, 0x00000002, 0x01010001, 0x00000000,
|
||||
0x00010509, 0x04010103, 0x01000000, 0x00000000, 0x01020202, 0x00000104, 0x03020101, 0x00000000, 0x0001060C,
|
||||
0x06010103, 0x01000000, 0x00000000, 0x02020202, 0x00000206, 0x05040101, 0x00000000, 0x0001080F, 0x07010103,
|
||||
0x01000001, 0x00000000, 0x03030202, 0x00010408, 0x07060201, 0x00000000, 0x00010911, 0x08010103, 0x01000001,
|
||||
0x00000001, 0x04040303, 0x0101050B, 0x0A080301, 0x00000000, 0x00020B14, 0x0A010103, 0x01000001, 0x00010102,
|
||||
0x06060403, 0x0203070D, 0x0C0A0401, 0x00000000, 0x00030D17, 0x0B020103, 0x01010001, 0x00010205, 0x09080503,
|
||||
0x0205090E, 0x0E0D0501, 0x00000000, 0x01050F18, 0x0C020102, 0x01010001, 0x00010408, 0x0D0B0502, 0x03070B0F,
|
||||
0x0F0F0601, 0x00000000, 0x02081219, 0x0D030102, 0x00010001, 0x0001050B, 0x130F0702, 0x04080B0F, 0x10110801,
|
||||
0x00000000, 0x030C1419, 0x0E040101, 0x00010001, 0x0001070F, 0x19140A03, 0x05090B0E, 0x10130A02, 0x00000001,
|
||||
0x05121719, 0x0E040100, 0x00010102, 0x01020A13, 0x1F1A0F06, 0x06090A0C, 0x10150B03, 0x01000001, 0x08181B19,
|
||||
0x0F050201, 0x01020102, 0x02040D18, 0x2721140A, 0x080A0A0C, 0x11160D04, 0x02020001, 0x0B1E1E19, 0x10070403,
|
||||
0x02030202, 0x0408111D, 0x2F2A1B0F, 0x0A0B0B0D, 0x12180F06, 0x04040101, 0x0E242119, 0x11090606, 0x04040304,
|
||||
0x070C1623, 0x38322214, 0x0E0D0E10, 0x141A1108, 0x06060102, 0x112A241A, 0x120B0909, 0x06050507, 0x0B111C29,
|
||||
0x413B291B, 0x13101216, 0x181B1209, 0x08080304, 0x152F271B, 0x140E0C0C, 0x0907080B, 0x10172230, 0x4A433223,
|
||||
0x1813161D, 0x1D1E140B, 0x0A0A0608, 0x1A342B1E, 0x17110F0F, 0x0C0B0D11, 0x171F2A38, 0x534C3B2B, 0x1E161C25,
|
||||
0x2221160D, 0x0B0C0A0E, 0x21393023, 0x1B151211, 0x0F0F1217, 0x1E273240, 0x5C564534, 0x251B242F, 0x2924190F,
|
||||
0x0E0E0F17, 0x293E372B, 0x21181513, 0x1113181E, 0x26303B48, 0x655F4E3E, 0x2D222D3A, 0x30271C13, 0x11111520,
|
||||
0x32453F35, 0x281D1714, 0x14181E25, 0x2F3A4551, 0x6F695746, 0x362B3744, 0x372A1F17, 0x15151D2A, 0x3D4D483F,
|
||||
0x31231A14, 0x171E252E, 0x38444F5B, 0x7974614F, 0x4036404C, 0x3C2D231D, 0x1A1A2637, 0x4957524A, 0x3A2A1D15,
|
||||
0x1A252E37, 0x43505B66, 0x837F6C59, 0x4A414750, 0x3F2E2723, 0x21213245, 0x57625D54, 0x43312216, 0x1F2D3741,
|
||||
0x4D5B6671, 0x8E8B7662, 0x544B4D51, 0x3F302C2C, 0x2B2D4054, 0x656D675E, 0x4C3A281A, 0x2536414B, 0x5867717B,
|
||||
0x9896816C, 0x5E545150, 0x3F323337, 0x383C5063, 0x71777168, 0x56432F21, 0x2C3F4B56, 0x63727C86, 0xA2A08B76,
|
||||
0x685D5651, 0x3F343A43, 0x484D5F70, 0x7D827B71, 0x5F4C3829, 0x34465462, 0x6F7C8690, 0xACA99581, 0x72655B53,
|
||||
0x42394450, 0x585E6D7C, 0x878C8479, 0x68574334, 0x3D4E5E6E, 0x7B88919A, 0xB4B09E8C, 0x7C6E6155, 0x46414F5F,
|
||||
0x676E7B87, 0x92958C80, 0x71625041, 0x4857697A, 0x86929BA3, 0xBBB7A796, 0x86776658, 0x4D4B5C6E, 0x777D8791,
|
||||
0x9C9F9487, 0x7A6D5C4F, 0x54617486, 0x919CA4AB, 0xC2BBAFA1, 0x907F6C5D, 0x55576A7E, 0x8589929A, 0xA5A99D90,
|
||||
0x8478695E, 0x5F697F93, 0x9DA6ACB2, 0xC8BFB6AC, 0x9A877465, 0x6064788D, 0x92949BA1, 0xADB2A89C, 0x8F83766C,
|
||||
0x6A718AA1, 0xA9AFB2B8, 0xCEC3BDB6, 0xA4907E70, 0x6C72879B, 0x9C9CA2A8, 0xB5BBB3A9, 0x9B8E8279, 0x737693AE,
|
||||
0xB4B6B9BE, 0xD5C9C5BF, 0xAF9C8B7E, 0x7A8094A5, 0xA4A0A7B0, 0xBDC5C0B7, 0xA8998E85, 0x7B7B9AB7, 0xBDBEC0C5,
|
||||
0xDBCFCCC8, 0xBAA9998E, 0x898E9FAD, 0xA8A1ACB8, 0xC6CECCC5, 0xB6A4988F, 0x8381A0BE, 0xC4C6C8CD, 0xE0D4D3D1,
|
||||
0xC5B7A89D, 0x989CA8B3, 0xABA2B0C0, 0xCED8D8D2, 0xC2AEA298, 0x8C89A6C3, 0xCACED1D5, 0xE5DBDAD8, 0xD0C4B6AB,
|
||||
0xA6A8B1B8, 0xAEA4B5C7, 0xD6E0E3DE, 0xCDB7ABA2, 0x9590ACC9, 0xD0D5D9DC, 0xEBE1E0DE, 0xDAD1C4B9, 0xB2B2B8BC,
|
||||
0xB1A7B9CE, 0xDEE8ECE8, 0xD6BDB3AC, 0x9E98B3CE, 0xD6DBE0E3, 0xF0E9E6E3, 0xE3DDD2C6, 0xBCBABEC0, 0xB4AABED5,
|
||||
0xE5EFF3F0, 0xDDC2BBB6, 0xA79FB9D4, 0xDCE2E7E9, 0xF5F0ECE7, 0xEAE8DED2, 0xC6C1C2C3, 0xB7ADC4DD, 0xEBF3F8F5,
|
||||
0xE1C6C2C1, 0xB1A7BFD8, 0xE1E7EDF0, 0xF9F5F1EB, 0xF0F0E9DD, 0xCFC7C7C6, 0xBBB1CBE5, 0xF0F5FBF7, 0xE3CACACC,
|
||||
0xBBB0C5DC, 0xE5ECF4F6, 0xFCF9F5EE, 0xF5F7F0E7, 0xD7CDCCCB, 0xBFB7D2EB, 0xF4F7FBF6, 0xE4CDD2D6, 0xC6B9CBE0,
|
||||
0xE9F1F9FB, 0xFDFCF8F2, 0xF9FAF6EE, 0xDFD5D3D0, 0xC5BDD9F0, 0xF7F9FBF4, 0xE5D0D9E0, 0xD1C2D2E4, 0xEDF5FCFE,
|
||||
0xFEFDFAF4, 0xFBFCF9F3, 0xE6DDDAD7, 0xCBC3DEF4, 0xFAFBFCF3, 0xE5D3DEE8, 0xDBCDDAE9, 0xF2F8FEFF, 0xFEFDFCF6,
|
||||
0xFCFDFCF7, 0xECE4E2DF, 0xD2C9E3F7, 0xFCFDFBF3, 0xE5D6E4EF, 0xE3D6E1EE, 0xF6FAFEFF, 0xFEFDFDF8, 0xFCFDFDFA,
|
||||
0xF1EAE9E7, 0xD9CFE7F9, 0xFEFEFBF3, 0xE7DBE9F4, 0xEBDFE8F3, 0xF9FCFFFF, 0xFEFDFDFA, 0xFDFDFEFC, 0xF5EFEFEE,
|
||||
0xE0D5ECFB, 0xFFFEFBF3, 0xE9E1EEF8, 0xF0E6EEF6, 0xFCFDFFFF, 0xFEFDFEFC, 0xFEFDFEFE, 0xF8F4F4F3, 0xE7DDF1FD,
|
||||
0xFFFEFBF3, 0xECE7F3FC, 0xF5ECF2F9, 0xFDFEFFFF, 0xFEFDFFFE, 0xFFFDFEFE, 0xFAF7F8F7, 0xEDE5F5FE, 0xFFFEFBF5,
|
||||
0xF0EDF7FD, 0xF9F1F5FA, 0xFEFFFFFF, 0xFEFDFFFF, 0xFFFEFEFF, 0xFCFAFAFA, 0xF2ECF8FE, 0xFFFEFCF7, 0xF4F3FAFE,
|
||||
0xFBF6F8FB, 0xFEFFFFFF, 0xFEFDFFFF, 0xFFFEFEFF, 0xFDFCFCFC, 0xF7F2FBFF, 0xFFFEFCFA, 0xF8F7FCFF, 0xFEFAFBFC,
|
||||
0xFFFFFFFF, 0xFEFEFFFF, 0xFFFFFFFF, 0xFEFDFEFD, 0xFAF7FCFF, 0xFFFEFDFC, 0xFCFBFDFF, 0xFFFDFDFD, 0xFFFFFFFF,
|
||||
0xFFFEFFFF, 0xFFFFFFFF, 0xFFFEFEFE, 0xFCFAFDFF, 0xFFFEFEFE, 0xFEFDFEFF, 0xFFFFFEFD, 0xFFFFFFFF, 0xFFFFFFFF,
|
||||
0xFFFFFFFF, 0xFFFFFFFF, 0xFDFCFEFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
|
||||
0xFFFFFFFF, 0xFEFEFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
|
||||
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
|
||||
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
|
||||
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
|
||||
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
|
||||
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
|
||||
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
|
||||
};
|
||||
|
||||
static Vtx sFlashVerts[] = {
|
||||
VTX(-180, 300, 0, 256, 0, 0xFF, 0xFF, 0xFF, 0xFF), VTX(-360, 0, 0, 0, 2048, 0xFF, 0xFF, 0xFF, 0x00),
|
||||
VTX(-180, 0, 0, 256, 2048, 0xFF, 0xFF, 0xFF, 0xFF), VTX(-360, 300, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0x00),
|
||||
VTX(180, 300, 0, 768, 0, 0xFF, 0xFF, 0xFF, 0xFF), VTX(180, 0, 0, 768, 2048, 0xFF, 0xFF, 0xFF, 0xFF),
|
||||
VTX(360, 0, 0, 1024, 2048, 0xFF, 0xFF, 0xFF, 0x00), VTX(360, 300, 0, 1024, 0, 0xFF, 0xFF, 0xFF, 0x00),
|
||||
};
|
||||
|
||||
static Gfx sFlashDList[] = {
|
||||
gsDPPipeSync(),
|
||||
gsDPSetTextureLUT(G_TT_NONE),
|
||||
gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
|
||||
gsDPLoadTextureBlock(sFlashTexture, G_IM_FMT_I, G_IM_SIZ_8b, 32, 64, 0, G_TX_NOMIRROR | G_TX_WRAP,
|
||||
G_TX_NOMIRROR | G_TX_CLAMP, 5, 6, 15, 1),
|
||||
gsDPTileSync(),
|
||||
gsDPSetTile(G_IM_FMT_I, G_IM_SIZ_8b, 4, 0x0000, 1, 0, G_TX_NOMIRROR | G_TX_CLAMP, 6, 14, G_TX_NOMIRROR | G_TX_WRAP,
|
||||
5, 13),
|
||||
gsDPSetTileSize(1, 0, 0, 0x007C, 0x00FC),
|
||||
gsDPSetCombineLERP(TEXEL1, PRIMITIVE, ENV_ALPHA, TEXEL0, TEXEL1, 1, ENVIRONMENT, TEXEL0, PRIMITIVE, ENVIRONMENT,
|
||||
COMBINED, ENVIRONMENT, COMBINED, 0, SHADE, 0),
|
||||
gsDPSetRenderMode(G_RM_PASS, G_RM_AA_ZB_XLU_SURF2),
|
||||
gsSPClearGeometryMode(G_CULL_BACK | G_FOG | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR),
|
||||
gsSPDisplayList(D_08000000),
|
||||
gsSPVertex(sFlashVerts, 8, 0),
|
||||
gsSP2Triangles(0, 1, 2, 0, 0, 3, 1, 0),
|
||||
gsSP2Triangles(4, 2, 5, 0, 4, 0, 2, 0),
|
||||
gsSP2Triangles(6, 4, 5, 0, 6, 7, 4, 0),
|
||||
gsSPEndDisplayList(),
|
||||
};
|
|
@ -6,9 +6,13 @@
|
|||
|
||||
struct BossGanon;
|
||||
|
||||
typedef void (*BossGanonActionFunc)(struct BossGanon*, GlobalContext*);
|
||||
|
||||
typedef struct BossGanon {
|
||||
/* 0x0000 */ Actor actor;
|
||||
/* 0x014C */ char unk_14C[0x5CC];
|
||||
/* 0x014C */ char unk_14C[0x4C];
|
||||
/* 0x0198 */ u8 unk_198;
|
||||
/* 0x0199 */ char unk_199[0x57F];
|
||||
/* 0x0718 */ s16 organFadeTimer;
|
||||
/* 0x071A */ char unk_71A[0x2];
|
||||
} BossGanon; // size = 0x071C
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue