1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-07-12 19:04:38 +00:00

Decompile the remaining Oceff actors + Add ichaindis.py (#125)

* Decompile the remaining Oceff actors + Add ichaindis.py

- z_oceff_spot.c: OK
- z_oceff_storm.c : 1 non-matching left
- Add ichaindis.py

* Rename SetActionFunc to SetupAction + Add Actor descriptions

* Minor fixes in PR #125
This commit is contained in:
Random 2020-05-10 19:09:26 +02:00 committed by GitHub
parent 40836f5d82
commit 3e5ed389b9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
29 changed files with 662 additions and 1125 deletions

View file

@ -1,4 +1,11 @@
/*
* File: z_oceff_spot.c
* Overlay: ovl_Oceff_Spot
* Description: Sun's Song Effect
*/
#include "z_oceff_spot.h"
#include <vt.h>
#define FLAGS 0x02000010
@ -9,7 +16,8 @@ void OceffSpot_Destroy(Actor* thisx, GlobalContext* globalCtx);
void OceffSpot_Update(Actor* thisx, GlobalContext* globalCtx);
void OceffSpot_Draw(Actor* thisx, GlobalContext* globalCtx);
/*
void OceffSpot_GrowCylinder(OceffSpot* this, GlobalContext* globalCtx);
const ActorInit Oceff_Spot_InitVars = {
ACTOR_OCEFF_SPOT,
ACTORTYPE_ITEMACTION,
@ -21,19 +29,141 @@ const ActorInit Oceff_Spot_InitVars = {
(ActorFunc)OceffSpot_Update,
(ActorFunc)OceffSpot_Draw,
};
*/
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Oceff_Spot/func_80BA6070.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Oceff_Spot/OceffSpot_Init.s")
#include "z_oceff_spot_gfx.c"
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Oceff_Spot/OceffSpot_Destroy.s")
static InitChainEntry initChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 0, ICHAIN_CONTINUE),
ICHAIN_F32(unk_F4, 1500, ICHAIN_STOP),
};
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Oceff_Spot/func_80BA6260.s")
void OceffSpot_SetupAction(OceffSpot* this, OceffSpotActionFunc actionFunc) {
this->actionFunc = actionFunc;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Oceff_Spot/func_80BA6370.s")
void OceffSpot_Init(Actor* thisx, GlobalContext* globalCtx) {
u32 pad;
OceffSpot* this = THIS;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Oceff_Spot/func_80BA63AC.s")
Actor_ProcessInitChain(&this->actor, initChain);
OceffSpot_SetupAction(this, OceffSpot_GrowCylinder);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Oceff_Spot/OceffSpot_Update.s")
Lights_InitType0PositionalLight(&this->lightInfo1, this->actor.posRot.pos.x, this->actor.posRot.pos.y,
this->actor.posRot.pos.z, 0x00, 0x00, 0x00, 0);
this->light1 = Lights_Insert(globalCtx, &globalCtx->lightCtx, &this->lightInfo1);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Oceff_Spot/OceffSpot_Draw.s")
Lights_InitType0PositionalLight(&this->lightInfo2, this->actor.posRot.pos.x, this->actor.posRot.pos.y,
this->actor.posRot.pos.z, 0x00, 0x00, 0x00, 0);
this->light2 = Lights_Insert(globalCtx, &globalCtx->lightCtx, &this->lightInfo2);
if (YREG(15)) {
this->actor.scale.y = 2.4f;
} else {
this->actor.scale.y = 0.3f;
}
this->unk_174 = 0;
}
void OceffSpot_Destroy(Actor* thisx, GlobalContext* globalCtx) {
u32 pad;
OceffSpot* this = THIS;
Player* player = PLAYER;
Lights_Remove(globalCtx, &globalCtx->lightCtx, this->light1);
Lights_Remove(globalCtx, &globalCtx->lightCtx, this->light2);
func_800876C8(globalCtx);
if (gSaveContext.nayrusLoveTimer && globalCtx->actorCtx.actorList[ACTORTYPE_PLAYER].length) {
player->unk_692 |= 0x40;
}
}
void OceffSpot_End(OceffSpot* this, GlobalContext* globalCtx) {
if (this->unk_174 > 0) {
this->unk_174 -= 0.05f;
} else {
Actor_Kill(&this->actor);
if (D_8011FB40 != 400 && globalCtx->msgCtx.unk_E40E == 0 && (gSaveContext.eventInf[0] & 0xF) != 1) {
if (globalCtx->msgCtx.unk_E3F0 != 0x31 || globalCtx->msgCtx.unk_E3EE != 8) {
gSaveContext.unk_1422 = 1;
osSyncPrintf(VT_FGCOL(YELLOW));
// Sun's Song Flag
osSyncPrintf("z_oceff_spot 太陽の歌フラグ\n");
osSyncPrintf(VT_RST);
}
} else {
globalCtx->msgCtx.unk_E3EE = 4;
osSyncPrintf(VT_FGCOL(YELLOW));
// Ocarina End
osSyncPrintf("z_oceff_spot オカリナ終了\n");
osSyncPrintf(VT_RST);
}
}
}
void OceffSpot_Wait(OceffSpot* this, GlobalContext* globalCtx) {
if (this->timer > 0) {
this->timer--;
} else {
OceffSpot_SetupAction(this, OceffSpot_End);
}
}
void OceffSpot_GrowCylinder(OceffSpot* this, GlobalContext* globalCtx) {
if (this->unk_174 < 1.0f) {
this->unk_174 += 0.05f;
} else {
OceffSpot_SetupAction(this, OceffSpot_Wait);
this->timer = 60;
}
}
void OceffSpot_Update(Actor* thisx, GlobalContext* globalCtx) {
OceffSpot* this = THIS;
u32 pad;
Player* player = PLAYER;
f32 temp;
temp = (1.0f - cosf(this->unk_174 * M_PI)) * 0.5f;
this->actionFunc(this, globalCtx);
this->actor.scale.z = 0.42f * temp;
this->actor.scale.x = 0.42f * temp;
this->actor.posRot.pos = player->actor.posRot.pos;
this->actor.posRot.pos.y += 5.0f;
temp = (2.0f - this->unk_174) * this->unk_174;
func_800773A8(globalCtx, temp * 0.5F, 880.0f, 0.2f, 0.9f);
Lights_InitType0PositionalLight(&this->lightInfo1, (s16)this->actor.posRot.pos.x,
(s16)this->actor.posRot.pos.y + 55.0f, (s16)this->actor.posRot.pos.z,
(s32)(255.0f * temp), (s32)(255.0f * temp), (s32)(200.0f * temp),
(s16)(100.0f * temp));
Lights_InitType0PositionalLight(
&this->lightInfo2, (s16)this->actor.posRot.pos.x + Math_Sins(player->actor.shape.rot.y) * 20.0f,
(s16)this->actor.posRot.pos.y + 20.0f,
(s16)this->actor.posRot.pos.z + Math_Coss(player->actor.shape.rot.y) * 20.0f, (s32)(255.0f * temp),
(s32)(255.0f * temp), (s32)(200.0f * temp), (s16)(100.0f * temp));
}
void OceffSpot_Draw(Actor* thisx, GlobalContext* globalCtx) {
OceffSpot* this = THIS;
u32 scroll;
GraphicsContext* gfxCtx;
Gfx* dispRefs[4];
scroll = globalCtx->state.frames & 0xFFFF;
gfxCtx = globalCtx->state.gfxCtx;
Graph_OpenDisps(dispRefs, globalCtx->state.gfxCtx, "../z_oceff_spot.c", 466);
func_80093D84(globalCtx->state.gfxCtx);
gSPMatrix(gfxCtx->polyXlu.p++, Matrix_NewMtx(globalCtx->state.gfxCtx, "../z_oceff_spot.c", 469),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(gfxCtx->polyXlu.p++, textureDl);
gSPDisplayList(gfxCtx->polyXlu.p++, Gfx_TwoTexScroll(globalCtx->state.gfxCtx, 0, scroll * 2, scroll * (-2), 32, 32,
1, 0, scroll * (-8), 32, 32));
gSPDisplayList(gfxCtx->polyXlu.p++, cylinderDl);
Graph_CloseDisps(dispRefs, globalCtx->state.gfxCtx, "../z_oceff_spot.c", 485);
}

View file

@ -6,9 +6,17 @@
struct OceffSpot;
typedef void (*OceffSpotActionFunc)(struct OceffSpot*, GlobalContext*);
typedef struct OceffSpot {
/* 0x0000 */ Actor actor;
/* 0x014C */ char unk_14C[0x34];
/* 0x014C */ z_Light* light1;
/* 0x0150 */ LightInfoPositional lightInfo1;
/* 0x0160 */ z_Light* light2;
/* 0x0164 */ LightInfoPositional lightInfo2;
/* 0x0174 */ f32 unk_174;
/* 0x0178 */ u16 timer;
/* 0x017C */ OceffSpotActionFunc actionFunc;
} OceffSpot; // size = 0x0180
extern const ActorInit Oceff_Spot_InitVars;

View file

@ -0,0 +1,92 @@
#include "z_oceff_spot.h"
static u32 texture[] = {
0x354D5AAC, 0xA5561C01, 0x124688B5, 0x74583231, 0x313D71D6, 0x9F5B3507, 0x104089AD, 0x748F440C, 0x408176AC,
0xB4661301, 0x2261C0BE, 0x49392533, 0x2C497FC4, 0x80451D06, 0x2466BBD0, 0x9CB85411, 0x40A09DA3, 0xB37F210B,
0x3D8AEAC7, 0x3F241930, 0x2F5591A7, 0x6441080F, 0x4191E8DB, 0xB7A76B18, 0x4094BAA0, 0x76532D22, 0x60BAFEE8,
0x8253545F, 0x6078A896, 0x73540723, 0x66C2FEBB, 0x87888723, 0x4B87C79E, 0x33123048, 0x88E3FFFC, 0xD39F7E72,
0x8DA2AE80, 0xA77B1940, 0x90EBFFA9, 0x6289973E, 0x6F9ACD83, 0x2D104B7F, 0xAEEBFDF3, 0xD8B26772, 0xA7C7AD77,
0xB1B34A61, 0xB0F8FFD5, 0x9496986B, 0x9EC6D25D, 0x503E85B3, 0xC0C1E1EE, 0xBD9B618E, 0xBFE4A975, 0x86E18B86,
0xABCFF7F2, 0xBC837E69, 0xB5EFE465, 0x5B66BACB, 0xC794AADC, 0xAC8982AE, 0xD3F59754, 0x65E2AAAD, 0x8C85D0E1,
0xAF634D39, 0xC7E2EDA3, 0x527ECACF, 0xBF777FC0, 0xA284A5A5, 0xE3FE8A2F, 0x60CCAFBE, 0x7164B8BA, 0x97553A2B,
0xE8BCBCDA, 0x76A1BBBA, 0x844D83BD, 0x9C6B875B, 0xD9FFAA3F, 0x6AC9B59B, 0x6592BD94, 0x956D3D3B, 0xFFA773D3,
0xB5B9AB90, 0x4033A0BC, 0x873E3E1D, 0xB5FFE48D, 0x8CC9A761, 0x62CBAF79, 0x98883457, 0xF3766FAF, 0xD5B2A26B,
0x44549D8B, 0x56232221, 0x7DFFF2DD, 0xC6B68840, 0x4ECCA267, 0x696D296E, 0xA8328AAD, 0xD3998447, 0x5E7D8C5B,
0x391F1E35, 0x4EF6CDD3, 0xDD9B6C2D, 0x27A09571, 0x37443656, 0x4C1265C9, 0xCA91612E, 0x3B5A7A65, 0x2F4F3421,
0x36EAC380, 0xB6814A1B, 0x0C607075, 0x5860803B, 0x27102CCD, 0xC9A87A47, 0x16204B80, 0x44B3860F, 0x28DAE042,
0x7F773710, 0x0235616D, 0xA089BE60, 0x34161EBC, 0xBBAAA972, 0x172A3B91, 0x96F6C319, 0x21B7F02A, 0x618F662A,
0x02327A8C, 0x97577B5C, 0x48171FB3, 0xA090AF87, 0x1F65609D, 0xD8FFD41E, 0x177CC522, 0x69A8A462, 0x0D3A93B6,
0x4F0C1821, 0x39151CA7, 0x928EAA9A, 0x33919BAF, 0xEBFBDA23, 0x093B6937, 0x80AEA66C, 0x304491C7, 0x3A031710,
0x16162197, 0x9B9FB5BA, 0x4C95CED8, 0xF8F0D425, 0x05144066, 0x84B17F5A, 0x725E8DCD, 0x5D376910, 0x19183886,
0xA3A1C4C6, 0x6584D1F1, 0xFFFABF12, 0x0E123F77, 0x88AF6881, 0xB97F98BB, 0x879BBC23, 0x4A20557C, 0x9BA5D0BB,
0x7583C6E0, 0xFEFFB322, 0x34283976, 0x95B06EB8, 0xE29B999F, 0xBDE9E582, 0x814C5C82, 0xA1C0ECBE, 0x789ED6B2,
0xF4FFD78F, 0x73324087, 0xA0C26FAB, 0xE0B1A5B9, 0xF2FFFADE, 0xAC906A89, 0xB3DDFFCB, 0x86B8CD75, 0xDFFFF1D7,
0x8F31579C, 0xAFDE7B87, 0xC8BAB4EB, 0xF0F2FFE4, 0xB29B798B, 0xC3F4FFD2, 0xA0A17C32, 0xA9FFE8BD, 0x784D7A91,
0xC7F5AB9B, 0xBEBB86D9, 0xB0BCF9D4, 0x835C4C70, 0xD8FFFFD7, 0xA2682907, 0x68FFE29F, 0x61707B7A, 0xE5FFE7C8,
0xCCC33C8E, 0x768CE0C7, 0x51281940, 0xCBFFFFCB, 0x87450C00, 0x4BF3D58E, 0x6D767B92, 0xFAFFFFC8, 0xC7BF175B,
0x708BBA9A, 0x3A161542, 0xB4FFF5A9, 0x6D39090C, 0x50D8BC86, 0x897AA1C8, 0xFFFFF4A1, 0x8C880B50, 0x91A49762,
0x2D0C1E78, 0xD4FFD97F, 0x58351E23, 0x6BB49283, 0x9B95C9EE, 0xFFFFD377, 0x4336075E, 0xBFB27641, 0x1B0224B5,
0xFCF7AC55, 0x41384344, 0x8FA06468, 0x9FB5DBFD, 0xFFF1A553, 0x190B1275, 0xCCA75D3A, 0x0C042ED9, 0xFFD97C33,
0x28405669, 0xB0914C3A, 0x9199C6FF, 0xFECF7835, 0x080C308B, 0xB38F6D47, 0x0A0D3DDB, 0xF3A75519, 0x1341558E,
0xBE7B4321, 0x6B4D94F8, 0xE4AC591A, 0x02175096, 0x8E7A9145, 0x1D224BBF, 0xC1723508, 0x0D3E5FA5, 0xA568351E,
0x422B6EE0, 0xBB85480B, 0x04256799, 0x716D6D21,
};
static Vtx vertices[] = {
VTX(35, 0, -35, 1280, 1024, 0xFF, 0xFF, 0xFF, 0x00), VTX(35, 150, -35, 1280, 512, 0xFF, 0xFF, 0xFF, 0x7E),
VTX(50, 150, 0, 1024, 512, 0xFF, 0xFF, 0xFF, 0x7E), VTX(50, 0, 0, 1024, 1024, 0xFF, 0xFF, 0xFF, 0x00),
VTX(35, 500, -35, 1280, 0, 0xFF, 0xFF, 0xFF, 0xFF), VTX(50, 500, 0, 1024, 0, 0xFF, 0xFF, 0xFF, 0xFF),
VTX(0, 0, -50, 1536, 1024, 0xFF, 0xFF, 0xFF, 0x00), VTX(0, 150, -50, 1536, 512, 0xFF, 0xFF, 0xFF, 0x7E),
VTX(0, 500, -50, 1536, 0, 0xFF, 0xFF, 0xFF, 0xFF), VTX(-35, 0, -35, 1792, 1024, 0xFF, 0xFF, 0xFF, 0x00),
VTX(-35, 150, -35, 1792, 512, 0xFF, 0xFF, 0xFF, 0x7E), VTX(-35, 500, -35, 1792, 0, 0xFF, 0xFF, 0xFF, 0xFF),
VTX(-50, 0, 0, 2048, 1024, 0xFF, 0xFF, 0xFF, 0x00), VTX(-50, 150, 0, 2048, 512, 0xFF, 0xFF, 0xFF, 0x7E),
VTX(-50, 500, 0, 2048, 0, 0xFF, 0xFF, 0xFF, 0xFF), VTX(-35, 0, 35, 256, 1024, 0xFF, 0xFF, 0xFF, 0x00),
VTX(-35, 150, 35, 256, 512, 0xFF, 0xFF, 0xFF, 0x7E), VTX(-50, 150, 0, 0, 512, 0xFF, 0xFF, 0xFF, 0x7E),
VTX(-50, 0, 0, 0, 1024, 0xFF, 0xFF, 0xFF, 0x00), VTX(-35, 500, 35, 256, 0, 0xFF, 0xFF, 0xFF, 0xFF),
VTX(-50, 500, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF), VTX(0, 0, 50, 512, 1024, 0xFF, 0xFF, 0xFF, 0x00),
VTX(0, 150, 50, 512, 512, 0xFF, 0xFF, 0xFF, 0x7E), VTX(0, 500, 50, 512, 0, 0xFF, 0xFF, 0xFF, 0xFF),
VTX(35, 0, 35, 768, 1024, 0xFF, 0xFF, 0xFF, 0x00), VTX(35, 150, 35, 768, 512, 0xFF, 0xFF, 0xFF, 0x7E),
VTX(35, 500, 35, 768, 0, 0xFF, 0xFF, 0xFF, 0xFF),
};
static Gfx textureDl[] = {
gsDPPipeSync(),
gsDPSetTextureLUT(G_TT_NONE),
gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
gsDPLoadTextureBlock(texture, G_IM_FMT_I, G_IM_SIZ_8b, 32, 32, 0, G_TX_NOMIRROR | G_TX_NOMIRROR,
G_TX_NOMIRROR | G_TX_NOMIRROR, 5, 5, 1, 0),
gsDPTileSync(),
gsDPSetTile(G_IM_FMT_I, G_IM_SIZ_8b, 4, 0x0, 1, 0, G_TX_NOMIRROR | G_TX_NOMIRROR, 5, 15,
G_TX_NOMIRROR | G_TX_NOMIRROR, 5, 0),
gsDPSetTileSize(1, 0, 0, (31 << 2), (31 << 2)),
gsDPSetCombineLERP(TEXEL1, PRIMITIVE, ENV_ALPHA, TEXEL0, TEXEL1, TEXEL0, ENVIRONMENT, TEXEL0, PRIMITIVE,
ENVIRONMENT, COMBINED, ENVIRONMENT, COMBINED, 0, SHADE, 0),
gsDPSetRenderMode(AA_EN | Z_CMP | IM_RD | CLR_ON_CVG | CVG_DST_WRAP | ZMODE_XLU | FORCE_BL |
GBL_c1(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1),
G_RM_AA_ZB_XLU_SURF2),
gsSPClearGeometryMode(G_TEXTURE_ENABLE | G_CULL_BACK | G_FOG | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR),
gsDPSetPrimColor(0x00, 0x00, 0xFF, 0xFF, 0xAA, 0xFF),
gsDPSetEnvColor(0xC8, 0xFF, 0x00, 0x80),
gsSPEndDisplayList(),
};
static Gfx cylinderDl[] = {
gsSPVertex(vertices, 27, 0),
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
gsSP2Triangles(1, 4, 5, 0, 1, 5, 2, 0),
gsSP2Triangles(6, 7, 1, 0, 6, 1, 0, 0),
gsSP2Triangles(7, 8, 4, 0, 7, 4, 1, 0),
gsSP2Triangles(9, 10, 7, 0, 9, 7, 6, 0),
gsSP2Triangles(10, 11, 8, 0, 10, 8, 7, 0),
gsSP2Triangles(12, 13, 10, 0, 12, 10, 9, 0),
gsSP2Triangles(13, 14, 11, 0, 13, 11, 10, 0),
gsSP2Triangles(15, 16, 17, 0, 15, 17, 18, 0),
gsSP2Triangles(16, 19, 20, 0, 16, 20, 17, 0),
gsSP2Triangles(21, 22, 16, 0, 21, 16, 15, 0),
gsSP2Triangles(22, 23, 19, 0, 22, 19, 16, 0),
gsSP2Triangles(24, 25, 22, 0, 24, 22, 21, 0),
gsSP2Triangles(25, 26, 23, 0, 25, 23, 22, 0),
gsSP2Triangles(3, 2, 25, 0, 3, 25, 24, 0),
gsSP2Triangles(2, 5, 26, 0, 2, 26, 25, 0),
gsSPEndDisplayList(),
};

View file

@ -1,3 +1,9 @@
/*
* File: z_oceff_storm.c
* Overlay: ovl_Oceff_Storm
* Description: Song of Storms Effect
*/
#include "z_oceff_storm.h"
#define FLAGS 0x02000030
@ -8,8 +14,11 @@ void OceffStorm_Init(Actor* thisx, GlobalContext* globalCtx);
void OceffStorm_Destroy(Actor* thisx, GlobalContext* globalCtx);
void OceffStorm_Update(Actor* thisx, GlobalContext* globalCtx);
void OceffStorm_Draw(Actor* thisx, GlobalContext* globalCtx);
void OceffStorm_Draw2(Actor* thisx, GlobalContext* globalCtx);
void OceffStorm_DefaultAction(OceffStorm* this, GlobalContext* globalCtx);
void OceffStorm_UnkAction(OceffStorm* this, GlobalContext* globalCtx);
/*
const ActorInit Oceff_Storm_InitVars = {
ACTOR_OCEFF_STORM,
ACTORTYPE_ITEMACTION,
@ -21,19 +30,161 @@ const ActorInit Oceff_Storm_InitVars = {
(ActorFunc)OceffStorm_Update,
(ActorFunc)OceffStorm_Draw,
};
*/
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Oceff_Storm/func_80BA70E0.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Oceff_Storm/OceffStorm_Init.s")
#include "z_oceff_storm_gfx.c"
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Oceff_Storm/OceffStorm_Destroy.s")
void OceffStorm_SetupAction(OceffStorm* this, OceffStormActionFunc actionFunc) {
this->actionFunc = actionFunc;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Oceff_Storm/func_80BA7200.s")
void OceffStorm_Init(Actor* thisx, GlobalContext* globalCtx) {
OceffStorm* this = THIS;
OceffStorm_SetupAction(this, OceffStorm_DefaultAction);
this->posYOffAdd = 0;
this->counter = 0;
this->primColorAlpha = 0;
this->vtxAlpha = 0;
this->actor.scale.y = 0.0f;
this->actor.scale.z = 0.0f;
this->actor.scale.x = 0.0f;
this->posYOff = this->posYOffAdd;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Oceff_Storm/func_80BA73C4.s")
if (this->actor.params == 1) {
OceffStorm_SetupAction(this, OceffStorm_UnkAction);
this->actor.draw = OceffStorm_Draw2;
} else {
Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_OKARINA_EFFECT, this->actor.posRot.pos.x,
this->actor.posRot.pos.y - 30.0f, this->actor.posRot.pos.z, 0, 0, 0, 1);
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Oceff_Storm/OceffStorm_Update.s")
void OceffStorm_Destroy(Actor* thisx, GlobalContext* globalCtx) {
OceffStorm* this = THIS;
Player* player = PLAYER;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Oceff_Storm/func_80BA7450.s")
func_800876C8(globalCtx);
if (gSaveContext.nayrusLoveTimer) {
player->unk_692 |= 0x40;
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Oceff_Storm/OceffStorm_Draw.s")
// very close from matching, single regalloc difference
#ifdef NON_MATCHING
void OceffStorm_DefaultAction(OceffStorm* this, GlobalContext* globalCtx) {
if (this->counter < 20) {
this->primColorAlpha = (s8)(this->counter * 5.0f);
} else if (this->counter > 80) {
this->primColorAlpha = (s8)((100 - this->counter) * 5.0f);
} else {
this->primColorAlpha = 100;
}
if (this->counter < 10 || this->counter >= 90) {
this->vtxAlpha = 0;
} else {
if (this->counter <= 65) {
if (this->vtxAlpha <= 200) {
this->vtxAlpha += 10;
}
this->actor.scale.x = this->actor.scale.z = 0.4f;
this->actor.scale.y = 0.3f;
} else if (this->counter > 65) {
this->vtxAlpha = (90 - this->counter) * 10;
} else {
this->vtxAlpha = 255;
this->actor.scale.x = this->actor.scale.z = 0.4f;
}
}
if (this->counter > 60) {
f32 f = this->actor.posRot.pos.y + (this->posYOff * 0.1f);
this->posYOff += this->posYOffAdd;
this->posYOffAdd += 10;
this->actor.posRot.pos.y = f;
}
if (this->counter < 100) {
this->counter++;
} else {
Actor_Kill(&this->actor);
}
}
#else
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Oceff_Storm/OceffStorm_DefaultAction.s")
#endif
void OceffStorm_UnkAction(OceffStorm* this, GlobalContext* globalCtx) {
if (this->primColorAlpha < 100) {
this->primColorAlpha += 5;
}
// ! @bug Actor_Kill is never called so the actor will stay alive forever
}
void OceffStorm_Update(Actor* thisx, GlobalContext* globalCtx) {
OceffStorm* this = THIS;
Player* player = PLAYER;
this->actor.posRot.pos = player->actor.posRot.pos;
this->actor.shape.rot.y = func_8005A9F4(ACTIVE_CAM);
this->actionFunc(this, globalCtx);
}
void OceffStorm_Draw2(Actor* thisx, GlobalContext* globalCtx) {
u32 scroll;
OceffStorm* this = THIS;
GraphicsContext* gfxCtx;
Gfx* dispRefs[4];
scroll = globalCtx->state.frames & 0xFFF;
gfxCtx = globalCtx->state.gfxCtx;
Graph_OpenDisps(dispRefs, globalCtx->state.gfxCtx, "../z_oceff_storm.c", 449);
gDPPipeSync(gfxCtx->polyXlu.p++);
if (1) {}
gfxCtx->polyXlu.p = func_80093F34(gfxCtx->polyXlu.p);
gDPSetAlphaDither(gfxCtx->polyXlu.p++, G_AD_NOISE);
gDPSetColorDither(gfxCtx->polyXlu.p++, G_CD_NOISE);
gDPSetPrimColor(gfxCtx->polyXlu.p++, 0x80, 0x80, 200, 200, 150, this->primColorAlpha);
gSPDisplayList(gfxCtx->polyXlu.p++, textureDl);
gSPDisplayList(gfxCtx->polyXlu.p++, Gfx_TwoTexScroll(globalCtx->state.gfxCtx, 0, scroll * 8, scroll * 4, 64, 64, 1,
scroll * 4, scroll * 4, 64, 64));
gSPTextureRectangle(gfxCtx->polyXlu.p++, 0, 0, (SCREEN_WIDTH << 2), (SCREEN_HEIGHT << 2), G_TX_RENDERTILE, 0, 0,
140, (1 << 15) | (31 << 10) | 884);
Graph_CloseDisps(dispRefs, globalCtx->state.gfxCtx, "../z_oceff_storm.c", 477);
}
void OceffStorm_Draw(Actor* thisx, GlobalContext* globalCtx) {
u32 scroll;
OceffStorm* this;
GraphicsContext* gfxCtx;
Vtx_t* vtxPtr;
Gfx* dispRefs[4];
this = THIS;
vtxPtr = (Vtx_t*)vertices;
scroll = globalCtx->state.frames & 0xFFF;
gfxCtx = globalCtx->state.gfxCtx;
Graph_OpenDisps(dispRefs, globalCtx->state.gfxCtx, "../z_oceff_storm.c", 486);
func_80093D84(globalCtx->state.gfxCtx);
gDPSetPrimColor(gfxCtx->polyXlu.p++, 0x80, 0x80, 0xFF, 0xFF, 0xC8, 0xFF);
gDPSetEnvColor(gfxCtx->polyXlu.p++, 0x96, 0x96, 0x00, 0x80);
gDPSetAlphaDither(gfxCtx->polyXlu.p++, G_AD_NOISE);
gDPSetColorDither(gfxCtx->polyXlu.p++, G_CD_NOISE);
vtxPtr[0].cn[3] = vtxPtr[6].cn[3] = vtxPtr[16].cn[3] = vtxPtr[25].cn[3] = this->vtxAlpha >> 1;
vtxPtr[10].cn[3] = vtxPtr[22].cn[3] = this->vtxAlpha;
gSPMatrix(gfxCtx->polyXlu.p++, Matrix_NewMtx(globalCtx->state.gfxCtx, "../z_oceff_storm.c", 498),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(gfxCtx->polyXlu.p++, cylinderTexDl);
gSPDisplayList(gfxCtx->polyXlu.p++, Gfx_TwoTexScroll(globalCtx->state.gfxCtx, 0, scroll * 4, (0 - scroll) * 8, 32,
32, 1, scroll * 8, (0 - scroll) * 12, 32, 32));
gSPDisplayList(gfxCtx->polyXlu.p++, cylinderDl);
Graph_CloseDisps(dispRefs, globalCtx->state.gfxCtx, "../z_oceff_storm.c", 512);
OceffStorm_Draw2(&this->actor, globalCtx);
}

View file

@ -6,9 +6,16 @@
struct OceffStorm;
typedef void (*OceffStormActionFunc)(struct OceffStorm*, GlobalContext*);
typedef struct OceffStorm {
/* 0x0000 */ Actor actor;
/* 0x014C */ char unk_14C[0xC];
/* 0x014C */ u16 counter;
/* 0x014E */ u8 primColorAlpha;
/* 0x014F */ u8 vtxAlpha;
/* 0x0150 */ s16 posYOff;
/* 0x0152 */ s16 posYOffAdd;
/* 0x0154 */ OceffStormActionFunc actionFunc;
} OceffStorm; // size = 0x0158
extern const ActorInit Oceff_Storm_InitVars;

View file

@ -0,0 +1,192 @@
#include "z_oceff_storm.h"
extern u32 D_04032490[];
extern u32 D_04032890[];
static u32 tex0[] = {
0x2F6E6F59, 0x6197B3CC, 0xC8AD8E6C, 0x5333170A, 0x17366173, 0x86ABC7C6, 0xA9928C7E, 0x55496341, 0x40705B59,
0x79A5DAE8, 0xC9A5927F, 0x6F50270D, 0x17304F6C, 0x8BAAC3B9, 0x9189A0A5, 0x854A2F1F, 0x33808E74, 0x709BB7CC,
0xC6B18E69, 0x4627100D, 0x21406880, 0x9BC2DAC1, 0x92808378, 0x514B7350, 0x386E6768, 0x80AAE1E4, 0xC6A0866D,
0x644B2513, 0x2541617F, 0xA2BBD7C6, 0x9C97B8B9, 0x86322A2C, 0x3381A28F, 0x82A0BECA, 0xCBBF956B, 0x40210A15,
0x2F4D718F, 0xB1D7E8BA, 0x856B706D, 0x49447654, 0x366C6C71, 0x87ADDFD8, 0xB8967B68, 0x543A1B15, 0x32537094,
0xB5D1E5CF, 0xAEA9C9CD, 0x9F3C3235, 0x3883AEA8, 0x98A4C1C5, 0xC9CCA576, 0x45210D1D, 0x3C5D7E9F, 0xC3E7EFAF,
0x785B5C5B, 0x3935684F, 0x36646A79, 0x8FADD5C9, 0xA6877561, 0x40271721, 0x406180A5, 0xC7E2EED5, 0xC1BDCACD,
0xAD46333D, 0x3A82B5BB, 0xADADC5BD, 0xC4D5B282, 0x532C152A, 0x4B6D8FB0, 0xD5F4F4AD, 0x73534F4D, 0x2D28584D,
0x3C5E6981, 0x9AB0CCBB, 0x987B775E, 0x2D151B2F, 0x507192B8, 0xDAF0F2D6, 0xD0CAC1C0, 0xB5573241, 0x4180B2C3,
0xBFB9C8B3, 0xB9CCB085, 0x5E392138, 0x5B7DA1C3, 0xE5FBF8BC, 0x805B534F, 0x383C605E, 0x5363738F, 0xA9B7CAB1,
0x8E79805E, 0x1F10233F, 0x6081A4CA, 0xEAFAF1CF, 0xD4CBB0B2, 0xC06E3246, 0x4D7BA9C3, 0xC8C4CAAB, 0xA5AF9777,
0x62463249, 0x6B90B4D4, 0xF2FEFBD3, 0xA47B6B69, 0x686B7D7E, 0x777D869D, 0xB4C3C6A8, 0x8E888E5F, 0x1B173050,
0x7292B8DC, 0xF6FFE7C0, 0xC2B99CAC, 0xC682334E, 0x57779EBB, 0xCBCFD0A4, 0x8D856E58, 0x5B514459, 0x7BA1C6E5,
0xFAFFFEE9, 0xC9A48D8F, 0x8C868E92, 0x8C999DA8, 0xBCCABE9F, 0x99A4A065, 0x23254060, 0x83A4CBEB, 0xFCFFDDAC,
0xA69D8CAF, 0xC8993A56, 0x617998B5, 0xCBD7D29F, 0x765B4138, 0x505D596E, 0x8CB2D6F1, 0xFEFFFEF8, 0xE7C5B0AD,
0xA295979B, 0x99AFB3B2, 0xC3CAB197, 0xA9C1B36F, 0x32354F72, 0x94B5DCF6, 0xFFFFD99F, 0x8E898BB8, 0xC3A84A5D,
0x6E819AB5, 0xCEDECF98, 0x65402323, 0x4B6B7283, 0x9EC1E4FA, 0xFFFFFCF7, 0xF6DAC7C2, 0xAC96929D, 0xA2BFC5BD,
0xC9C6A192, 0xB6D7C682, 0x49466281, 0xA4C4ECFD, 0xFFFFDFAD, 0x95919DBE, 0xB8B26768, 0x8190A4BC, 0xD5DFC38C,
0x61402328, 0x547D8C99, 0xADCFEBFA, 0xFEFFFAF1, 0xF3DCD0C8, 0x9C808AA2, 0xA9C9D4CA, 0xD0C09D94, 0xB9DCD7A2,
0x685D7290, 0xB2CFF4FF, 0xFFFFEBC6, 0xADA2AABE, 0xB1B98781, 0x99A2B1C6, 0xDEDBAD7E, 0x6957393A, 0x6995A8AF,
0xBED7E7EF, 0xF7FEFAED, 0xE8D1CEC1, 0x907595AA, 0xB3CEDFD7, 0xD5B69F99, 0xADCEE4C4, 0x8B7482A0, 0xBFCFF2FC,
0xFEFFF7DD, 0xC7B5B2B5, 0xB0B69390, 0xADB8C0D4, 0xE9D69970, 0x74745656, 0x82AEC0C0, 0xC9D9DBDC, 0xEAF8FAEB,
0xDEC9C4B8, 0x8F71A5B5, 0xC1D6E7E4, 0xD7AFA39D, 0x9CBAECE1, 0xAD8A93AF, 0xC5C6E1F1, 0xFAFEFCED, 0xDAC6B0A6,
0xACAD9094, 0xB5CDD2E3, 0xF3D38D69, 0x808A6D70, 0xA0C7CECB, 0xD1D8CCC6, 0xD4EFF9E9, 0xD5C3BCAD, 0x937AB7BE,
0xCBDFEFEE, 0xD3A5A097, 0x88A4EDF6, 0xC39CA2BF, 0xC4B5C9DE, 0xEEF7F9ED, 0xDAC4A092, 0xA0967C8B, 0xB1DFE4EE,
0xF9DA926C, 0x83927C84, 0xBCD7D5D5, 0xD8D5C0B2, 0xB9DDF4E1, 0xCFBCB4A4, 0xA190C5C3, 0xCFE3F4F6, 0xCD9B9388,
0x7899E8F9, 0xCCA8B3CD, 0xBDA0ACC3, 0xDBEDF4E4, 0xD7C09481, 0x8B7C5B71, 0xABEDEDF0, 0xFCE6A97A, 0x818B8198,
0xD1DDD5DC, 0xDDD2B9A4, 0x9FCCECD5, 0xCCBAAF9F, 0xACAACAC9, 0xDAEBF8FA, 0xC68F7E72, 0x6F98E2F1, 0xCBB1C2D8,
0xB49191A8, 0xC6E4EAD7, 0xCCBB8B75, 0x7867495E, 0xADF6EFE5, 0xF7F1C692, 0x817F84A9, 0xDEDBD2E3, 0xDECCB299,
0x8ABBE1C7, 0xCAB6A7A4, 0xB5C1C6C4, 0xE1F4FCFC, 0xC3876A5E, 0x6C98DAE8, 0xC4B8CFDA, 0xA9858399, 0xBBDEDCC9,
0xC2B2846D, 0x6D5D4357, 0xBCFBEAD2, 0xE7F7E1AF, 0x85798DB9, 0xDFD2D1E5, 0xD6BCA48C, 0x81B1DABF, 0xCBB399A9,
0xBFC9B1B1, 0xE1FAFEFE, 0xC8895F55, 0x6D9DD8DF, 0xC1C2D3D0, 0x9E80829D, 0xBFDACDB7, 0xB8B0846E, 0x6E5E4061,
0xD3FEE5BC, 0xCFECF1CF, 0x9882A0CA, 0xDAC7CEDD, 0xC19F8B7D, 0x82B5D7C0, 0xCBB288A1, 0xB4B98E8F, 0xD9FEFFFE,
0xD697695C, 0x729FDADB, 0xC5C8C9BC, 0x928392B5, 0xCCD3BFA8, 0xB3B49178, 0x77603C76, 0xE6FFE6AB, 0xB1D4EDE6,
0xB094B9D3, 0xD1C0C6CB, 0xA37E6F6E, 0x92C0D5C3, 0xCAAC758F, 0x9F996568, 0xC8FEFFFF, 0xE6B28271, 0x7BA5DFD9,
0xC8C7B9A0, 0x878CAECF, 0xD2CBB69D, 0xB2B9A485, 0x7D5C368E, 0xF2FFE89F, 0x95B8DAF3, 0xC9A9CCD5, 0xC7BCBDB3,
0x84615364, 0xA6C7D3C9, 0xC3A06472, 0x8372444B, 0xB1FAFFFF, 0xF4D1A890, 0x8BB1E1D6, 0xC9C09F87, 0x7A95C9DF,
0xD2BDAF93, 0xB3C0B290, 0x7C5138A6, 0xFAFFE38F, 0x88A4BFF2, 0xDDBAD7D0, 0xC0BCB09A, 0x70534569, 0xB9C6CAC6,
0xB18D5B51, 0x5F50363F, 0x92F0FFFF, 0xFDE9CDB5, 0xA8C1DECE, 0xC4B18B74, 0x6B98DBE4, 0xC9B0A48A, 0xA9BAB494,
0x784541BD, 0xFCFAC978, 0x8DA8A6E6, 0xE9C6DAC5, 0xBDBFA385, 0x6E61537A, 0xC3BAB7B3, 0x97765141, 0x50433D4A,
0x70D8FFFF, 0xFCF3E6D6, 0xC6D0D7C4, 0xBCA17E69, 0x5B90E1DF, 0xC3AD9C80, 0x93A3A38D, 0x723C4ECA, 0xF3EBA45D,
0x99BC98D7, 0xF0CDD2BA, 0xB9BD9475, 0x7A7D6C91, 0xC2A6A29C, 0x7C634A3A, 0x50414A64, 0x55B9FDFF, 0xF7E6F1ED,
0xE0DACEBA, 0xB394725F, 0x4A7AD6D8, 0xC1AF9C7C, 0x7D888680, 0x6E3557CA, 0xDECF7743, 0xA2CD99CF, 0xEFCFC7AF,
0xB1B38063, 0x809482A2, 0xBC978E82, 0x6A5E4339, 0x4D3F5077, 0x4B90FBFF, 0xF1CEE6F1, 0xF0DFC3B0, 0xA8896454,
0x3A60C2D1, 0xB9A99F85, 0x64656776, 0x743854BA, 0xBBAA4E2D, 0x9CCFA4D6, 0xEDCCBDA5, 0xA19F6D54, 0x7B998AA4,
0xB79A8B71, 0x615E4145, 0x49384B79, 0x4F67F7FF, 0xEDB7CCDF, 0xEBDCB9A5, 0x9A7C5846, 0x2F43A4C3, 0xADA0A097,
0x624B5576, 0x85504A95, 0x8C853A1F, 0x80BCBBDF, 0xE6CAB9A3, 0x92885E46, 0x65827B95, 0xA59B9778, 0x5C57546E,
0x5B333D67, 0x574DF0FF, 0xEFACAFBD, 0xD2DAAD98, 0x896E4D39, 0x282882AD, 0x9D9298A0, 0x7E5F6188, 0xA27A516C,
0x5F6A3817, 0x5C99CEE7, 0xDFCBBDA8, 0x8E7D5E48, 0x4D5E6079, 0x8D929B8C, 0x584E75A1, 0x86412C4B, 0x583AE8FF,
0xF5B99292, 0xB3D3A48A, 0x775E412C, 0x21196191, 0x8F8187A4, 0x9A857D9F, 0xBFA9724E, 0x3C5F3A15, 0x3871DAE8,
0xDAD1C6B3, 0x9B887055, 0x4139405D, 0x73859FA4, 0x584E9ECC, 0xB7632338, 0x513ADAFF, 0xFBCA7E6A, 0x90CDA17F,
0x6B533821, 0x1B10457A, 0x8C807A9F, 0xB7AB96AD, 0xCECC9C4A, 0x2C624013, 0x2151E1DE, 0xD7D2CEBC, 0xAEA28A68,
0x411F324E, 0x536F9FB9, 0x6C6FC7ED, 0xE1872736, 0x4D3FC6FE, 0xFEDA724A, 0x72C2A57F, 0x6E59361D, 0x1710356D,
0x918A7D9B, 0xCFC09FA7, 0xC7D2B854, 0x326E4113, 0x2540DCD5, 0xD5CCD0BB, 0xBEB9A378, 0x481D4055, 0x4D63A2C1,
0x939FE2FC, 0xFAA42F3F, 0x4B45AAFB, 0xFFE46838, 0x63B5B091, 0x87744F2A, 0x1B15356D, 0x97998EA9, 0xCBB58F8A,
0xA4B9B553, 0x417D3F17, 0x2D39D8CF, 0xD1BECBB3, 0xC6C6B583, 0x4527606D, 0x576DAFBF, 0xB8C5F3FD, 0xFFB93541,
0x494D86F2, 0xFEE25932, 0x5DB0BAA4, 0x9F967343, 0x21193C72, 0x9FA9A4BD, 0xB8926C62, 0x748A9549, 0x51873D19,
0x3238D4CE, 0xC8ADC2A6, 0xC4C9C089, 0x3F2D7F8A, 0x6A7DBCB8, 0xD6E4FAFE, 0xFFC7333D, 0x454A63DB, 0xF8D34D36,
0x61ADC0B2, 0xB1B3955E, 0x2C214477, 0xA4B7BACC, 0x9E614438, 0x43516436, 0x5F83391B, 0x3338CCCF, 0xBEA0BC9D,
0xC2C4C990, 0x403A99A8, 0x8090C5B1, 0xE9F1FCFF, 0xFDD63238, 0x394445BB, 0xDCB14540, 0x73B5C3BC, 0xBFC6AC72,
0x3C304D7B, 0xA5BCC9DA, 0x7E362117, 0x1D27352F, 0x5F723821, 0x3238C2D2, 0xB59DB99F, 0xC1C0D09B, 0x4E46A9BC,
0x9DA9CAB5, 0xEDF5FEF9, 0xF6E43236, 0x2D353592, 0xB08D544D, 0x88B9C3BF, 0xC0C4A97A, 0x50455579, 0xA2BCCDDF,
0x74271319, 0x32251738, 0x53553928, 0x3238B5D2, 0xB19DBCAB, 0xC0BFD8A9, 0x624EADC9, 0xB7C3D2C3, 0xEFFAFEEF,
0xEDF03536, 0x23233569, 0x7F797259, 0x99B5C3C3, 0xBBB2977C, 0x6C65637B, 0x9FB9CEE3, 0x862F1932, 0x60401040,
0x40393632, 0x383FA7D2, 0xB5A3BFB9, 0xC0C3E1B8, 0x7759A7CF, 0xCCD9DFDA, 0xF2FEFDE6, 0xE8F23539, 0x1F19324A,
0x50759267, 0xA5ADC5CA, 0xB59C827D, 0x8A867680, 0x9EB8CCE8, 0xA03D2F57, 0x9664153D, 0x2D283538, 0x414A98CF,
0xBAADBEC0, 0xC3CFE7C3, 0x8A639FCC, 0xD8E6E8EB, 0xF6FFFDE5, 0xEBEA3238, 0x1D173035, 0x3D7DA973, 0xA9A4C5CE,
0xAB82778A, 0xA9A5888A, 0xA4BCC6E6, 0xBA4F548A, 0xC6881F33, 0x302D3239, 0x535C8AC9, 0xBAB6BAC1, 0xCBD6E6CB,
0x967195C3, 0xD7E6EEF8, 0xFAFFFDEB, 0xF1D42A35, 0x1F25322F, 0x417DAF7D, 0xA6ACC0CE, 0xA27583A9, 0xC9BF9898,
0xB0BEBEE1, 0xCC6585BB, 0xE7A53832, 0x4E402F38, 0x697084C4, 0xB3BEB4BD, 0xD5D7E1CC, 0x9F7E92BC, 0xD2E4EFFB,
0xFEFFFEF6, 0xF4B5212C, 0x273C3A30, 0x4A70AC89, 0xA3B7BCCD, 0x9F7499C8, 0xE1CFA3A4, 0xBCBDB0D7, 0xD87DB5DF,
0xF9BC604B, 0x7454323D, 0x7C7D7FBF, 0xAAC1B1BE, 0xDFD8D9CB, 0xA48994B5, 0xCEE1E6F1, 0xFEFFFFFE, 0xF59F2D30,
0x3D574D36, 0x5462A394, 0xA2C2B9CF, 0xA277AFE1, 0xF3DAABAF, 0xC4B69FCF, 0xE29FDBF6, 0xFECF947D, 0x9C65414D,
0x898282BB, 0xA3C3B4C6, 0xE6DCD7C7, 0xA2919CB6, 0xCFE1DBE2, 0xFDFFFFFF, 0xF4A56358, 0x64725C3D, 0x5F5F9FA0,
0xA1C9B9D4, 0xA47BB8ED, 0xFADFB5B9, 0xC8AE99CF, 0xECC3F3FE, 0xFEE1C3B2, 0xBB765B69, 0x8D7D90BA, 0xA9C6BCD5,
0xEFE6DFC5, 0x9F97A8C0, 0xD9E7CDCC, 0xF9FFFFFF, 0xF6C09D90, 0x91866343, 0x6564A7AB, 0xA2CCC1DC, 0xA379B3E6,
0xF6E1BEC4, 0xCBB2AADA, 0xF6E0FDFF, 0xFFF1E4D7, 0xCD877D8B, 0x8E7596BD, 0xB6C8C7E5, 0xF6F3E8C3, 0x9D9FB2CC,
0xE5ECB9B3, 0xF4FFFFFE, 0xF9DDC6B9, 0xB78F6549, 0x646EB0B4, 0xA9D0CCE5, 0xA378A6D5, 0xEBE1C6CC, 0xCCBFC6E8,
0xFBF5FEFF, 0xFFFBF4E9, 0xD99FA2A9, 0x947399BD, 0xC1CCD2F1, 0xFBFCF2C3, 0x9FA7BED5, 0xE9E4A299, 0xEBFEFFFD,
0xFAEFE3D5, 0xCE8C6150, 0x657EB9BA, 0xAFD4D7EF, 0xA97D9AC3, 0xDFDCCCCF, 0xCACAE0F6, 0xFCF7F7FE, 0xFFFEF3EA,
0xDAB5B9BA, 0xA2819EBB, 0xC8D0DEFA, 0xFFFFF6C6, 0xA7B3C5D1, 0xDECF887E, 0xD6F9FFFD, 0xF9EFE4D8, 0xD5846160,
0x7396B9BD, 0xB9D7E3F7, 0xB48899B9, 0xD2D7D2CD, 0xC0CAF1FD, 0xF1E4E6F9, 0xFFFDEBE0, 0xD6BEBEBB, 0xA890A3BC,
0xC9D7EAFE, 0xFFFFF6C9, 0xB4BDC2C0, 0xC2AC6963, 0xB6EBFEFD, 0xF8E6D7C9, 0xCC78687A, 0x8DA3ADBB, 0xC6DEEDFB,
0xC79FAABB, 0xCAD3D8C9, 0xACB5E8F8, 0xDEC9CDEB, 0xFDFAE7DA, 0xCEB9B1AA, 0xA18F99B9, 0xCCE2F4FF, 0xFFFFF5CE,
0xC0C0B7A6, 0x997E4948, 0x91D7FDFE, 0xF8E0CCC0, 0xBC6B7192, 0x9FA39CB5, 0xD1E7F6FE, 0xDDBCC5C6, 0xC9D5E3C4,
0x8F92D1E8, 0xC6A9B0DB, 0xF7F6E7D6, 0xBCA3958D, 0x8A818AB1, 0xD3EDFBFF, 0xFFFFF2D2, 0xC5BCA489, 0x6F542F32,
0x6BBEFBFF, 0xFADCC2B8, 0xAE657AA9, 0xA9988AB1, 0xDDF1FCFF, 0xEDD7DDD0, 0xCBDCEFBF, 0x716AB1D2, 0xAC9199CA,
0xEEEDE6D0, 0xA884786E, 0x656373A1, 0xD6F4FFFE, 0xFFFFEFD3, 0xC3B0906F, 0x4E331B23, 0x4FA5F7FF, 0xF8D7B8B1,
0xA56780B5, 0xAC8785B3, 0xE9FBFFFF, 0xFAEDEDD4, 0xCBE4F8BC, 0x57458FB9, 0x9B878FBC, 0xE1DFDFC4, 0x916D5F50,
0x46455189, 0xCCF6FFFE, 0xFFFFE8CF, 0xBA9F8260, 0x3A1F101F, 0x4692F4FE, 0xF4D1B0AC, 0xA97382B3, 0xAB878CC2,
0xF2FEFFFF, 0xFEFAF1CF, 0xC4E8FCB4, 0x453278A5, 0x968A92BB, 0xD6CED1B1, 0x7C604E3A, 0x323C4B74, 0xB9F1FFFE,
0xFFFCE0C7, 0xAE927956, 0x30151027, 0x4888EDFA, 0xEFCBA9A6, 0xB28384AD, 0xB4969ED6, 0xFAFFFFFF, 0xFFFAE8C3,
0xB6DDF4A9, 0x3925659A, 0x99959EBE, 0xCDBCBB9A, 0x6C5B452C, 0x25435772, 0xA8EBFFFE, 0xFFF6D2BB, 0xA2897250,
0x2C131730, 0x5186E4F1, 0xE5C3A5A3, 0xBA9689A6, 0xC3ACB5EA, 0xFEFEFFFF, 0xFFF4D9B3, 0xA2C5DC95, 0x301F5B96,
0xA4A5ACC3, 0xC3ABA183, 0x60574121, 0x1F4D6A82, 0xA6EAFFFF, 0xFDECC4AC, 0x96826D4E, 0x2F1B213F, 0x608BDBE2,
0xD5BAA3A2, 0xBCA991A6, 0xD0C1CCF7, 0xFEFCFFFF, 0xFCE7C9A2, 0x8AA0B87A, 0x271F5998, 0xB5B7B9C8, 0xB99D8A70,
0x59503A19, 0x1F577F9E, 0xBFEFFFFF, 0xF7DEB59B, 0x8A7D654D, 0x3D2F324E, 0x6F98D1CF, 0xC3AFA2A4, 0xBAB79DAE,
0xD9D2E1FE, 0xFEFCFFFE, 0xF6D7B691, 0x7576895C, 0x1D21599F, 0xCAC8C3C9, 0xAC907964, 0x51453013, 0x215E92BD,
0xDAF6FFFC, 0xEDCEA58A, 0x7D7A604E, 0x5549415E, 0x82A4CCBD, 0xADA09EA4, 0xB5C1ADBB, 0xE1DFEFFF, 0xFEFCFFFB,
0xE9C5A581, 0x61505B3F, 0x192A60A8, 0xDAD1C9C6, 0x9E836D5D, 0x4936230D, 0x2361A5D9, 0xF1FDFEF7, 0xDDBC9476,
0x6E745C53, 0x6B5F5371, 0x92B2C9AF, 0x9A8E919F, 0xB1C8BEC9, 0xE4E7F9FF, 0xFEFDFEF3, 0xDAB29471, 0x4F35352D,
0x1D3869B3, 0xE1D2C9C0, 0x91776859, 0x3F251710, 0x2767B9EE, 0xFEFFFCEC, 0xCAA88364, 0x5E6C5859, 0x7D706282,
0xA3C0C6A6, 0x8B7B7C8C, 0xACC9C6CB, 0xDEEBFEFF, 0xFFFFFAE6, 0xC7A08563, 0x3F231F27, 0x2A4874BB, 0xDFCBC3B7,
0x8A736C5B, 0x3219131F, 0x2A69C6FA, 0xFFFFF6DC, 0xB8957253, 0x4E5F5963, 0x84797394, 0xB5C9C09F, 0x826F6570,
0xA5C6BFBC, 0xCFECFFFF, 0xFFFDEFD5, 0xB48F7454, 0x3017172D, 0x3C5D82BD, 0xD5C0B9B0, 0x8C7D7A5B, 0x271B132F,
0x306CD2FE, 0xFFFEEBCC, 0xA5856143, 0x3C505B6D, 0x837B82A5, 0xC3CFB897, 0x7E695751, 0x9CC0A9A0, 0xB8E6FFFF,
0xFFF6E2C8, 0xA47D6346, 0x23101939, 0x4F7091C3, 0xCAB3ABA9, 0x99928955, 0x1F23173A, 0x3975D9FE, 0xFFF8DCBA,
0x94765333, 0x2C415D73, 0x7D7D92B6, 0xD2D0AE92, 0x7A675136, 0x8EB38979, 0x9EDDFEFF, 0xFDECD4C1, 0x9B6F5039,
0x190D2345, 0x6181A0C4, 0xC0A89FA6, 0xABA98F48, 0x1B271940, 0x437CCFF4, 0xF3E4C3A1, 0x82674023, 0x1F365E71,
0x757F9DC1, 0xD8C4A18A, 0x705D4F25, 0x7C9F6756, 0x85C9EDF7, 0xEDD5C3B9, 0x8F5F3D2C, 0x1310274A, 0x688DA4BC,
0xAD998FA0, 0xB2AD8236, 0x23463343, 0x4B85C4E6, 0xE2CDAE8D, 0x72563215, 0x15305F6F, 0x718AA9C6, 0xCEB99C84,
0x64534E25, 0x658A5146, 0x78B3E1F2, 0xE2C1B4A9, 0x8759351F, 0x0D173350, 0x7292ACBA, 0x9E8F8792, 0xA0956725,
0x2A5C534B, 0x5691BCD9, 0xD5BB9E7D, 0x6245250D, 0x13305F6F, 0x7999B8CA, 0xC0A89782, 0x5C4B5732, 0x517A504B,
0x74AADCEF, 0xD7B4A497, 0x7E562D15, 0x1023405E, 0x7E9FB7B9, 0x95898F97, 0x90734619,
};
static Gfx textureDl[] = {
gsDPPipeSync(),
gsDPSetTextureLUT(G_TT_NONE),
gsDPSetRenderMode(IM_RD | CVG_DST_SAVE | ZMODE_OPA | FORCE_BL | GBL_c1(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1),
G_RM_CLD_SURF2),
gsDPSetEnvColor(0x32, 0x32, 0x00, 0x00),
gsSPClearGeometryMode(G_TEXTURE_ENABLE | G_CULL_BACK | G_FOG | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR),
gsDPSetCombineLERP(TEXEL1, TEXEL0, PRIM_LOD_FRAC, TEXEL0, TEXEL1, TEXEL0, PRIM_LOD_FRAC, TEXEL0, PRIMITIVE,
ENVIRONMENT, COMBINED, ENVIRONMENT, COMBINED, 0, PRIMITIVE, 0),
gsDPLoadTextureBlock(tex0, G_IM_FMT_I, G_IM_SIZ_8b, 64, 64, 0, G_TX_NOMIRROR | G_TX_NOMIRROR,
G_TX_NOMIRROR | G_TX_NOMIRROR, 6, 6, 3, 1),
gsDPLoadMultiBlock(tex0, 0x0, 1, G_IM_FMT_I, G_IM_SIZ_8b, 64, 64, 0, G_TX_NOMIRROR | G_TX_NOMIRROR,
G_TX_NOMIRROR | G_TX_NOMIRROR, 6, 6, 2, 0),
gsSPEndDisplayList(),
};
static Vtx vertices[] = {
VTX(-35, 150, -35, 1792, 512, 0xFF, 0xFF, 0xFF, 0x7E), VTX(-35, 500, -35, 1792, 0, 0xFF, 0xFF, 0xFF, 0x00),
VTX(0, 500, -50, 1536, 0, 0xFF, 0xFF, 0xFF, 0x00), VTX(35, 0, -35, 1280, 1024, 0xFF, 0xFF, 0xFF, 0x00),
VTX(50, 150, 0, 1024, 512, 0xFF, 0xFF, 0xFF, 0x00), VTX(50, 0, 0, 1024, 1024, 0xFF, 0xFF, 0xFF, 0x00),
VTX(35, 150, -35, 1280, 512, 0xFF, 0xFF, 0xFF, 0x7E), VTX(35, 500, -35, 1280, 0, 0xFF, 0xFF, 0xFF, 0x00),
VTX(50, 500, 0, 1024, 0, 0xFF, 0xFF, 0xFF, 0x00), VTX(0, 0, -50, 1536, 1024, 0xFF, 0xFF, 0xFF, 0x00),
VTX(0, 150, -50, 1536, 512, 0xFF, 0xFF, 0xFF, 0xFF), VTX(-35, 0, -35, 1792, 1024, 0xFF, 0xFF, 0xFF, 0x00),
VTX(-50, 0, 0, 2048, 1024, 0xFF, 0xFF, 0xFF, 0x00), VTX(-50, 150, 0, 2048, 512, 0xFF, 0xFF, 0xFF, 0x00),
VTX(-50, 500, 0, 2048, 0, 0xFF, 0xFF, 0xFF, 0x00), VTX(-35, 0, 35, 256, 1024, 0xFF, 0xFF, 0xFF, 0x00),
VTX(-35, 150, 35, 256, 512, 0xFF, 0xFF, 0xFF, 0x7E), VTX(-50, 150, 0, 0, 512, 0xFF, 0xFF, 0xFF, 0x00),
VTX(-50, 0, 0, 0, 1024, 0xFF, 0xFF, 0xFF, 0x00), VTX(-35, 500, 35, 256, 0, 0xFF, 0xFF, 0xFF, 0x00),
VTX(-50, 500, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0x00), VTX(0, 0, 50, 512, 1024, 0xFF, 0xFF, 0xFF, 0x00),
VTX(0, 150, 50, 512, 512, 0xFF, 0xFF, 0xFF, 0xFF), VTX(0, 500, 50, 512, 0, 0xFF, 0xFF, 0xFF, 0x00),
VTX(35, 0, 35, 768, 1024, 0xFF, 0xFF, 0xFF, 0x00), VTX(35, 150, 35, 768, 512, 0xFF, 0xFF, 0xFF, 0x7E),
VTX(35, 500, 35, 768, 0, 0xFF, 0xFF, 0xFF, 0x00),
};
static Gfx cylinderTexDl[] = {
gsDPPipeSync(),
gsDPSetTextureLUT(G_TT_NONE),
gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
gsDPLoadTextureBlock(D_04032490, G_IM_FMT_I, G_IM_SIZ_8b, 32, 32, 0, G_TX_NOMIRROR | G_TX_NOMIRROR,
G_TX_NOMIRROR | G_TX_NOMIRROR, 5, 5, 2, 13),
gsDPLoadMultiBlock(D_04032890, 0x100, 1, G_IM_FMT_I, G_IM_SIZ_8b, 32, 32, 0, G_TX_NOMIRROR | G_TX_NOMIRROR,
G_TX_NOMIRROR | G_TX_NOMIRROR, 5, 5, 1, 12),
gsDPSetCombineLERP(TEXEL1, TEXEL0, ENV_ALPHA, TEXEL0, TEXEL1, TEXEL0, ENVIRONMENT, TEXEL0, PRIMITIVE, ENVIRONMENT,
COMBINED, ENVIRONMENT, COMBINED, 0, SHADE, 0),
gsDPSetRenderMode(AA_EN | Z_CMP | IM_RD | CLR_ON_CVG | CVG_DST_WRAP | ZMODE_XLU | FORCE_BL |
GBL_c1(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1),
G_RM_AA_ZB_XLU_SURF2),
gsSPClearGeometryMode(G_TEXTURE_ENABLE | G_CULL_BACK | G_FOG | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR),
gsSPEndDisplayList(),
};
static Gfx cylinderDl[] = {
gsSPVertex(vertices, 27, 0),
gsSP2Triangles(0, 1, 2, 0, 3, 4, 5, 0),
gsSP2Triangles(6, 7, 8, 0, 6, 8, 4, 0),
gsSP2Triangles(9, 10, 6, 0, 9, 6, 3, 0),
gsSP2Triangles(10, 2, 7, 0, 10, 7, 6, 0),
gsSP2Triangles(11, 0, 10, 0, 11, 10, 9, 0),
gsSP2Triangles(3, 6, 4, 0, 0, 2, 10, 0),
gsSP2Triangles(12, 13, 0, 0, 12, 0, 11, 0),
gsSP2Triangles(13, 14, 1, 0, 13, 1, 0, 0),
gsSP2Triangles(15, 16, 17, 0, 15, 17, 18, 0),
gsSP2Triangles(16, 19, 20, 0, 16, 20, 17, 0),
gsSP2Triangles(21, 22, 16, 0, 21, 16, 15, 0),
gsSP2Triangles(22, 23, 19, 0, 22, 19, 16, 0),
gsSP2Triangles(24, 25, 22, 0, 24, 22, 21, 0),
gsSP2Triangles(25, 26, 23, 0, 25, 23, 22, 0),
gsSP2Triangles(5, 4, 25, 0, 5, 25, 24, 0),
gsSP2Triangles(4, 8, 26, 0, 4, 26, 25, 0),
gsSPEndDisplayList(),
};