1
0
Fork 0
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:
Sirius902 2020-11-29 02:05:30 -08:00 committed by GitHub
parent 734ad1a0bc
commit 5d03824f93
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
15 changed files with 600 additions and 1396 deletions

View file

@ -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, &center, 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);
}

View file

@ -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;

View 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(),
};

View file

@ -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