#include "game/object.h" #include "game/objsub.h" #include "game/hsfman.h" #include "game/hsfdraw.h" #include "game/hsfmotion.h" #include "game/audio.h" #include "game/wipe.h" #include "game/sprite.h" #include "game/frand.h" #include "game/minigame_seq.h" #include "game/gamework_data.h" #include "REL/m434Dll.h" #include "math.h" #include "ext_math.h" typedef struct bss_2468_data { Vec unk0; u16 unkC; } Bss2468Data; typedef struct bss_450_data { void *unk0; u32 unk4; } Bss450Data; typedef struct bss_3F0_data { void *unk0; u16 unk4; u16 unk6; u16 unk8; u16 unkA; u32 unkC; s32 unk10; } Bss3F0Data; typedef struct struct_data100 { u16 unk0; u16 unk2; u16 unk4; u16 unk6; u16 unk8; } StructData100; StructData100 lbl_1_data_100[5] = { { 200, 200, 200, 200, 0 }, { 320, 240, 160, 120, 1 }, { 640, 480, 320, 240, 1 }, { 640, 480, 640, 480, 0 }, { 0, 0, 0, 0, 0 }, }; omObjData *lbl_1_bss_5868; Vec lbl_1_bss_2868[1024]; Bss2468Data lbl_1_bss_2468[64]; s32 lbl_1_bss_2464; HsfVector2f lbl_1_bss_464[1024]; AnimData *lbl_1_bss_460; AnimData *lbl_1_bss_45C; AnimData *lbl_1_bss_458; Bss450Data lbl_1_bss_450; Bss450Data lbl_1_bss_448; Bss450Data lbl_1_bss_440; Bss3F0Data lbl_1_bss_3F0[4]; Vec lbl_1_bss_3D8[2]; void fn_1_1E64(omObjData *object); void fn_1_1DB0(Process *objman) { "\0"; //Force lbl_1_data_132 to 0 lbl_1_bss_5868 = omAddObjEx(objman, 10, 16, 0, -1, fn_1_1E64); CenterM[1].y = -CenterM[2].y + -15.000001f; CRotM[1].x = -CRotM[2].x; } void fn_1_28F0(void); void fn_1_1E44(void) { fn_1_28F0(); } void fn_1_26A4(omObjData *object); void fn_1_2978(ModelData *model, Mtx mtx); void fn_1_3004(void); void fn_1_3128(void); void fn_1_33A4(ModelData *model, Mtx mtx); void fn_1_349C(ModelData *model, Mtx mtx); void fn_1_3594(ModelData *model, Mtx mtx); void fn_1_3CC8(ModelData *model, Mtx mtx); void fn_1_443C(ModelData *model, ParticleData *particle, Mtx matrix); void fn_1_1E64(omObjData *object) { s32 temp_r30; Vec *temp_r29; HsfVector2f *temp_r28; s32 temp_r27; AnimData *temp_r26; object->model[9] = Hu3DHookFuncCreate(fn_1_3CC8); Hu3DModelLayerSet(object->model[9], 1); Hu3DModelCameraSet(object->model[9], 1); object->model[1] = Hu3DModelCreateFile(0x410002); Hu3DModelLayerSet(object->model[1], 2); Hu3DModelCameraSet(object->model[1], 2); object->model[0] = Hu3DModelCreateFile(0x410000); Hu3DModelLayerSet(object->model[0], 2); Hu3DModelCameraSet(object->model[0], 8); object->model[8] = Hu3DModelCreateFile(0x410001); Hu3DModelLayerSet(object->model[8], 2); Hu3DModelCameraSet(object->model[8], 4); object->model[3] = Hu3DModelCreateFile(0x410008); Hu3DModelClusterAttrSet(object->model[3], 0, 0xC0000001); Hu3DModelLayerSet(object->model[3], 2); Hu3DModelCameraSet(object->model[3], 8); object->model[4] = Hu3DModelCreateFile(0x410009); Hu3DModelClusterAttrSet(object->model[4], 0, 0xC0000001); Hu3DModelLayerSet(object->model[4], 2); Hu3DModelCameraSet(object->model[4], 8); object->model[2] = Hu3DHookFuncCreate(fn_1_2978); Hu3DModelLayerSet(object->model[2], 3); Hu3DModelCameraSet(object->model[2], 8); temp_r29 = lbl_1_bss_2868; for(temp_r30=0; temp_r30<32; temp_r30++) { for(temp_r27=0; temp_r27<32; temp_r29++, temp_r27++) { temp_r29->x = -700.0f+((1400.0f*temp_r27)/31.0f); temp_r29->y = -15.000001f; temp_r29->z = -600.0f+((1200.0f*temp_r30)/31.0f); if(temp_r30 & 0x1) { temp_r29->x += 700.0f/31.0f; } } } DCFlushRangeNoSync(lbl_1_bss_2868, sizeof(lbl_1_bss_2868)); temp_r28 = lbl_1_bss_464; for(temp_r30=0; temp_r30<1024; temp_r30++, temp_r28++) { temp_r28->x = 360.0f*((1.0f/256.0f)*frand8()); temp_r28->y = 2.0f*((1.0f/256.0f)*frand8())+0.5f; } memset(lbl_1_bss_2468, 0, sizeof(lbl_1_bss_2468)); lbl_1_bss_2464 = 0; lbl_1_bss_450.unk4 = 16384; lbl_1_bss_450.unk0 = HuMemDirectMallocNum(HEAP_SYSTEM, lbl_1_bss_450.unk4, MEMORY_DEFAULT_NUM); DCInvalidateRange(lbl_1_bss_450.unk0, lbl_1_bss_450.unk4); fn_1_3004(); lbl_1_bss_440.unk4 = 16384; lbl_1_bss_440.unk0 = HuMemDirectMallocNum(HEAP_SYSTEM, lbl_1_bss_440.unk4, MEMORY_DEFAULT_NUM); fn_1_3128(); lbl_1_bss_45C = HuSprAnimReadFile(0x3D0019); lbl_1_bss_458 = HuSprAnimReadFile(0x41000A); HuDataDirClose(0x3D0000); for(temp_r30=0; temp_r30<4; temp_r30++) { lbl_1_bss_3F0[temp_r30].unk4 = lbl_1_data_100[temp_r30].unk0; lbl_1_bss_3F0[temp_r30].unk6 = lbl_1_data_100[temp_r30].unk2; lbl_1_bss_3F0[temp_r30].unk8 = lbl_1_data_100[temp_r30].unk4; lbl_1_bss_3F0[temp_r30].unkA = lbl_1_data_100[temp_r30].unk6; lbl_1_bss_3F0[temp_r30].unk10 = lbl_1_data_100[temp_r30].unk8; lbl_1_bss_3F0[temp_r30].unkC = GXGetTexBufferSize(lbl_1_bss_3F0[temp_r30].unk8, lbl_1_bss_3F0[temp_r30].unkA, GX_TF_RGB565, GX_FALSE, 0); lbl_1_bss_3F0[temp_r30].unk0 = HuMemDirectMallocNum(HEAP_SYSTEM, lbl_1_bss_3F0[temp_r30].unkC, MEMORY_DEFAULT_NUM); memset(lbl_1_bss_3F0[temp_r30].unk0, 0, lbl_1_bss_3F0[temp_r30].unkC); } object->model[5] = Hu3DHookFuncCreate(fn_1_33A4); Hu3DModelLayerSet(object->model[5], 3); Hu3DModelCameraSet(object->model[5], 2); object->model[6] = Hu3DHookFuncCreate(fn_1_349C); Hu3DModelLayerSet(object->model[6], 3); Hu3DModelCameraSet(object->model[6], 4); object->model[7] = Hu3DHookFuncCreate(fn_1_3594); Hu3DModelLayerSet(object->model[7], 5); Hu3DModelCameraSet(object->model[7], 4); temp_r26 = HuSprAnimReadFile(0x41000B); object->model[10] = Hu3DParticleCreate(temp_r26, 100); Hu3DParticleHookSet(object->model[10], fn_1_443C); Hu3DModelAttrSet(object->model[10], 1); Hu3DModelLayerSet(object->model[10], 4); Hu3DModelCameraSet(object->model[10], 8); object->func = fn_1_26A4; } HsfAttribute *fn_1_2608(s16 model, char *name) { HsfData *temp_r31; HsfAttribute *temp_r30; s32 temp_r29; ModelData *temp_r28; HsfBitmap *temp_r27; temp_r28 = &Hu3DData[model]; temp_r31 = temp_r28->hsfData; temp_r30 = temp_r31->attribute; for(temp_r29=0; temp_r29attributeCnt; temp_r29++, temp_r30++) { temp_r27 = temp_r30->bitmap; if(strcmp(name, temp_r27->name) == 0) { break; } } if(temp_r29 >= temp_r31->attributeCnt) { return NULL; } return temp_r30; } void fn_1_26A4(omObjData *object) { s32 temp_r31; Bss2468Data *temp_r30; HsfVector2f *temp_r29; HsfAttribute *temp_r27; Vec *temp_r25; s32 temp_r23; s32 temp_r22; Bss2468Data *sp8[64]; temp_r27 = fn_1_2608(object->model[1], "sora"); if(temp_r27 != NULL) { temp_r27->unk30 += 0.0001f; temp_r27->unk34 -= 0.00005f; } temp_r30 = lbl_1_bss_2468; temp_r22 = 0; for(temp_r31=0; temp_r31<64; temp_r31++, temp_r30++) { if(temp_r30->unkC) { sp8[temp_r22++] = temp_r30; } } temp_r25 = lbl_1_bss_2868; temp_r29 = lbl_1_bss_464; for(temp_r31=0; temp_r31<32; temp_r31++) { for(temp_r23=0; temp_r23<32; temp_r23++, temp_r25++, temp_r29++) { temp_r25->y = -15.000001f+(2.0f*sind(temp_r29->x)); temp_r29->x += temp_r29->y; } } DCFlushRangeNoSync(lbl_1_bss_2868, sizeof(lbl_1_bss_2868)); for(temp_r31=0; temp_r31unkC--; } CenterM[1].y = -15.000001f+(-CenterM[2].y); CRotM[1].x = -CRotM[2].x; } void fn_1_28F0(void) { s32 temp_r31; for(temp_r31=0; temp_r31<4; temp_r31++) { if(lbl_1_bss_3F0[temp_r31].unk0 != NULL) { HuMemDirectFree(lbl_1_bss_3F0[temp_r31].unk0); lbl_1_bss_3F0[temp_r31].unk0 = NULL; } } } GXColor lbl_1_data_139 = { 255, 255, 255, 64 }; float lbl_1_data_140[2][3] = { 0.012f, 0, 0, 0, 0.012f, 0 }; float lbl_1_data_158[2][3] = { 0, 0, 0.5f, 0, 0.5f, 0 }; void fn_1_2978(ModelData *model, Mtx mtx) { float temp_f31; Mtx sp1AC; Mtx sp17C; Mtx sp14C; Mtx sp11C; Mtx spEC; Mtx spBC; Mtx sp8C; Mtx sp5C; Mtx sp2C; GXTexObj spC; GXLoadPosMtxImm(mtx, GX_PNMTX0); GXSetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE); GXSetNumTexGens(4); GXInitTexObj(&spC, lbl_1_bss_3F0[2].unk0, lbl_1_bss_3F0[2].unk8, lbl_1_bss_3F0[2].unkA, GX_TF_RGB565, GX_CLAMP, GX_CLAMP, GX_FALSE); GXLoadTexObj(&spC, GX_TEXMAP0); GXInitTexObj(&spC, lbl_1_bss_3F0[1].unk0, lbl_1_bss_3F0[1].unk8, lbl_1_bss_3F0[1].unkA, GX_TF_RGB565, GX_CLAMP, GX_CLAMP, GX_FALSE); GXLoadTexObj(&spC, GX_TEXMAP1); MTXLightPerspective(sp1AC, 30.0f, 1.2f, 0.5f, -0.5f, 0.5f, 0.5f); MTXInverse(Hu3DCameraMtx, spBC); MTXConcat(spBC, mtx, spBC); MTXConcat(sp1AC, Hu3DCameraMtx, sp8C); MTXConcat(sp8C, spBC, spBC); GXLoadTexMtxImm(spBC, GX_TEXMTX0, GX_MTX3x4); GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX3x4, GX_TG_POS, GX_TEXMTX0); MTXLightPerspective(sp1AC, 30.0f, 1.2f, 0.5f, 0.5f, 0.5f, 0.5f); MTXInverse(Hu3DCameraMtx, sp5C); MTXConcat(sp5C, mtx, sp5C); MTXConcat(sp1AC, Hu3DCameraMtx, sp2C); MTXConcat(sp2C, sp5C, sp5C); GXLoadTexMtxImm(sp5C, GX_TEXMTX1, GX_MTX3x4); GXSetTexCoordGen(GX_TEXCOORD1, GX_TG_MTX3x4, GX_TG_POS, GX_TEXMTX1); GXSetNumTevStages(2); GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_TEXC); GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_KONST); GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD1, GX_TEXMAP1, GX_COLOR0A0); GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_CPREV, GX_CC_TEXC, GX_CC_A0, GX_CC_ZERO); GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_KONST); GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevColor(GX_TEVSTAGE1, lbl_1_data_139); GXSetNumChans(1); GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_REG, 0, GX_DF_CLAMP, GX_AF_NONE); HuSprTexLoad(lbl_1_bss_45C, 0, GX_TEXMAP2, GX_REPEAT, GX_REPEAT, GX_LINEAR); GXInitTexObj(&spC, lbl_1_bss_3F0[0].unk0, lbl_1_bss_3F0[0].unk8, lbl_1_bss_3F0[0].unkA, GX_TF_RGB565, GX_CLAMP, GX_CLAMP, GX_FALSE); GXLoadTexObj(&spC, GX_TEXMAP3); GXSetNumIndStages(2); MTXRotDeg(sp11C, 'X', -90.0f); temp_f31 = 1.0f/600.0f; MTXScale(sp14C, temp_f31, temp_f31, temp_f31); MTXConcat(sp14C, sp11C, sp17C); sp17C[0][1] = -0.03f; GXLoadTexMtxImm(sp17C, GX_TEXMTX2, GX_MTX2x4); GXSetTexCoordGen(GX_TEXCOORD2, GX_TG_MTX2x4, GX_TG_POS, GX_TEXMTX2); GXSetIndTexOrder(GX_INDTEXSTAGE0, GX_TEXCOORD2, GX_TEXMAP2); GXSetIndTexCoordScale(GX_INDTEXSTAGE0, GX_ITS_1, GX_ITS_1); GXSetIndTexMtx(GX_ITM_0, lbl_1_data_140, 0); GXSetTevIndWarp(GX_TEVSTAGE0, GX_INDTEXSTAGE0, GX_TRUE, GX_FALSE, GX_ITM_0); MTXRotDeg(sp11C, 'X', -90.0f); temp_f31 = 1.0f/1200.0f; MTXScale(sp14C, temp_f31, temp_f31, temp_f31); MTXConcat(sp14C, sp11C, sp17C); MTXTrans(spEC, 0.5f, 0.5f, 0.0f); MTXConcat(spEC, sp17C, sp17C); GXLoadTexMtxImm(sp17C, GX_TEXMTX3, GX_MTX2x4); GXSetTexCoordGen(GX_TEXCOORD3, GX_TG_MTX2x4, GX_TG_POS, GX_TEXMTX3); GXSetIndTexOrder(GX_INDTEXSTAGE1, GX_TEXCOORD3, GX_TEXMAP3); GXSetIndTexCoordScale(GX_INDTEXSTAGE1, GX_ITS_1, GX_ITS_1); GXSetIndTexMtx(GX_ITM_1, lbl_1_data_158, 0); GXSetTevIndWarp(GX_TEVSTAGE1, GX_INDTEXSTAGE1, GX_TRUE, GX_FALSE, GX_ITM_1); GXClearVtxDesc(); GXSetVtxDesc(GX_VA_POS, GX_INDEX16); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); GXSetArray(GX_VA_POS, lbl_1_bss_2868, sizeof(Vec)); GXSetCullMode(GX_CULL_BACK); GXCallDisplayList(lbl_1_bss_450.unk0, lbl_1_bss_450.unk4); GXSetNumIndStages(0); GXSetTevDirect(GX_TEVSTAGE0); GXSetTevDirect(GX_TEVSTAGE1); } void fn_1_3004(void) { s32 temp_r31; s32 temp_r30; s32 temp_r29; GXBeginDisplayList(lbl_1_bss_450.unk0, lbl_1_bss_450.unk4); for(temp_r30=0; temp_r30<31; temp_r30++) { temp_r29 = temp_r30*32; GXBegin(GX_TRIANGLESTRIP, GX_VTXFMT0, 64); if(temp_r30 & 0x1) { for(temp_r31=0; temp_r31<32; temp_r31++) { GXPosition1x16(temp_r29+temp_r31+32); GXPosition1x16(temp_r29+temp_r31); } } else { for(temp_r31=31; temp_r31>=0; temp_r31--) { GXPosition1x16(temp_r29+temp_r31); GXPosition1x16(temp_r29+temp_r31+32); } } } lbl_1_bss_450.unk4 = GXEndDisplayList(); DCFlushRangeNoSync(lbl_1_bss_450.unk0, lbl_1_bss_450.unk4); } void fn_1_3128(void) { GXBeginDisplayList(lbl_1_bss_440.unk0, lbl_1_bss_440.unk4); GXBegin(GX_QUADS, GX_VTXFMT0, 4); GXPosition2f32(-0.5f, -0.5f); GXTexCoord2f32(0, 0); GXPosition2f32(0.5f, -0.5f); GXTexCoord2f32(1, 0); GXPosition2f32(0.5f, 0.5f); GXTexCoord2f32(1, 1); GXPosition2f32(-0.5f, 0.5f); GXTexCoord2f32(0, 1); GXEnd(); lbl_1_bss_440.unk4 = GXEndDisplayList(); DCFlushRangeNoSync(lbl_1_bss_440.unk0, lbl_1_bss_440.unk4); } void fn_1_32DC(Bss3F0Data *arg0, GXBool arg1) { GXSetZMode(GX_FALSE, GX_LEQUAL, GX_TRUE); GXSetTexCopySrc(0, 0, arg0->unk4, arg0->unk6); GXSetTexCopyDst(arg0->unk8, arg0->unkA, GX_TF_RGB565, arg0->unk10); GXSetCopyClear(BGColor, 0xFFFFFF); GXCopyTex(arg0->unk0, arg1); GXPixModeSync(); DCFlushRange(arg0->unk0, arg0->unkC); } void fn_1_33A4(ModelData *model, Mtx mtx) { fn_1_32DC(&lbl_1_bss_3F0[1], GX_TRUE); } void fn_1_349C(ModelData *model, Mtx mtx) { fn_1_32DC(&lbl_1_bss_3F0[2], GX_TRUE); } void fn_1_3594(ModelData *model, Mtx mtx) { Mtx sp90; Mtx sp60; Mtx sp30; GXTexObj sp10; fn_1_32DC(&lbl_1_bss_3F0[3], GX_FALSE); GXLoadPosMtxImm(mtx, GX_PNMTX0); MTXLightPerspective(sp90, 30.0f, 1.2f, 0.5f, -0.5f, 0.5f, 0.5f); MTXInverse(Hu3DCameraMtx, sp60); MTXConcat(sp60, mtx, sp60); MTXConcat(sp90, Hu3DCameraMtx, sp30); MTXConcat(sp30, sp60, sp60); GXLoadTexMtxImm(sp60, GX_TEXMTX0, GX_MTX3x4); GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX3x4, GX_TG_POS, GX_TEXMTX0); GXSetNumChans(1); GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_REG, 0, GX_DF_CLAMP, GX_AF_NONE); GXSetNumTexGens(1); GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX3x4, GX_TG_POS, GX_TEXMTX0); GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP); GXSetZMode(GX_TRUE, GX_GREATER, GX_FALSE); GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_AND, GX_ALWAYS, 0); GXSetNumTevStages(1); GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); GXSetTevOp(GX_TEVSTAGE0, GX_REPLACE); GXInitTexObj(&sp10, lbl_1_bss_3F0[2].unk0, lbl_1_bss_3F0[2].unk8, lbl_1_bss_3F0[2].unkA, GX_TF_RGB565, GX_CLAMP, GX_CLAMP, GX_FALSE); GXLoadTexObj(&sp10, GX_TEXMAP0); GXClearVtxDesc(); GXSetVtxDesc(GX_VA_POS, GX_DIRECT); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); GXBegin(GX_QUADS, GX_VTXFMT0, 4); GXPosition3f32(-1000.0f, -5.000001f, -1000.0f); GXPosition3f32(1000.0f, -5.000001f, -1000.0f); GXPosition3f32(1000.0f, -5.000001f, 1000.0f); GXPosition3f32(-1000.0f, -5.000001f, 1000.0f); GXEnd(); GXSetZMode(GX_TRUE, GX_LEQUAL, GX_FALSE); GXBegin(GX_QUADS, GX_VTXFMT0, 4); GXPosition3f32(-1000.0f, -70.0f, -1000.0f); GXPosition3f32(1000.0f, -70.0f, -1000.0f); GXPosition3f32(1000.0f, -70.0f, 1000.0f); GXPosition3f32(-1000.0f, -70.0f, 1000.0f); GXEnd(); fn_1_32DC(&lbl_1_bss_3F0[2], GX_FALSE); GXInitTexObj(&sp10, lbl_1_bss_3F0[3].unk0, lbl_1_bss_3F0[3].unk8, lbl_1_bss_3F0[3].unkA, GX_TF_RGB565, GX_CLAMP, GX_CLAMP, GX_FALSE); GXLoadTexObj(&sp10, GX_TEXMAP0); GXSetZMode(GX_TRUE, GX_GREATER, GX_FALSE); GXBegin(GX_QUADS, GX_VTXFMT0, 4); GXPosition3f32(-1000.0f, -5.000001f, -1000.0f); GXPosition3f32(1000.0f, -5.000001f, -1000.0f); GXPosition3f32(1000.0f, -5.000001f, 1000.0f); GXPosition3f32(-1000.0f, -5.000001f, 1000.0f); GXEnd(); } GXColor lbl_1_data_170 = { 255, 0, 0, 255 }; GXColor lbl_1_data_174 = { 255, 255, 255, 32 }; GXColor lbl_1_data_178 = { 0, 126, 126, 255 }; void fn_1_3CC8(ModelData *model, Mtx mtx) { float temp_f31; Mtx sp44; Mtx sp14; Bss2468Data *temp_r31; s32 temp_r30; s32 temp_r29; MTXOrtho(sp44, 0, 480, 0, 640, 0, 100); GXSetProjection(sp44, GX_ORTHOGRAPHIC); MTXIdentity(sp14); GXLoadPosMtxImm(sp14, GX_PNMTX0); GXSetNumChans(1); GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_REG, 0, GX_DF_CLAMP, GX_AF_NONE); GXSetChanMatColor(GX_COLOR0A0, lbl_1_data_178); GXSetNumTexGens(0); HuSprTexLoad(lbl_1_bss_458, 0, GX_TEXMAP0, GX_REPEAT, GX_REPEAT, GX_LINEAR); GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP); GXSetZMode(GX_FALSE, GX_LEQUAL, GX_FALSE); GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_AND, GX_ALWAYS, 0); GXSetNumTevStages(1); GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); GXSetTevOp(GX_TEVSTAGE0, GX_PASSCLR); GXSetScissor(0, 0, lbl_1_bss_3F0[0].unk8, lbl_1_bss_3F0[0].unkA); GXClearVtxDesc(); GXSetVtxDesc(GX_VA_POS, GX_DIRECT); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XY, GX_U16, 0); GXBegin(GX_QUADS, GX_VTXFMT0, 4); GXPosition2u16(0, 0); GXPosition2u16(lbl_1_bss_3F0[0].unk8, 0); GXPosition2u16(lbl_1_bss_3F0[0].unk8, lbl_1_bss_3F0[0].unkA); GXPosition2u16(0, lbl_1_bss_3F0[0].unkA); GXEnd(); GXSetNumTexGens(1); GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY); GXSetNumTevStages(1); GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); GXSetTevOp(GX_TEVSTAGE0, GX_REPLACE); GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_TEXC); GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_TEXA, GX_CA_RASA, GX_CA_ZERO); GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXClearVtxDesc(); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XY, GX_F32, 0); GXSetVtxDesc(GX_VA_POS, GX_DIRECT); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT); temp_r29 = lbl_1_bss_2464; for(temp_r30=0; temp_r30<64; temp_r29 = (temp_r29+1)%64, temp_r30++) { temp_r31 = &lbl_1_bss_2468[temp_r29]; if(temp_r31->unkC == 0) { continue; } temp_f31 = (0.2f+cosd((90.0f*temp_r31->unkC)/60.0f))*128.0f; lbl_1_data_174.a = 255.0f*sind((90.0f*temp_r31->unkC)/60.0f); GXSetChanMatColor(GX_COLOR0A0, lbl_1_data_174); MTXScale(sp14, 0.5f*temp_f31, 0.5f*temp_f31, 1.0f); mtxTransCat(sp14, (200.0f*(600.0f+temp_r31->unk0.x))/1200.0f, (200.0f*(600.0f+temp_r31->unk0.z))/1200.0f, 0); GXLoadPosMtxImm(sp14, GX_PNMTX0); GXCallDisplayList(lbl_1_bss_440.unk0, lbl_1_bss_440.unk4); } fn_1_32DC(&lbl_1_bss_3F0[0], GX_TRUE); } void fn_1_43AC(Vec *arg0) { Bss2468Data *temp_r31; temp_r31 = &lbl_1_bss_2468[lbl_1_bss_2464]; if(temp_r31->unkC == 0) { temp_r31->unk0.x = arg0->x; temp_r31->unk0.y = arg0->y; temp_r31->unk0.z = arg0->z; temp_r31->unkC = 60; lbl_1_bss_2464 = (lbl_1_bss_2464+1)%64; return; } } void fn_1_443C(ModelData *model, ParticleData *particle, Mtx matrix) { float temp_f31; float temp_f30; HsfanimStruct01 *temp_r31; s32 temp_r29; s32 temp_r28; if(particle->unk_00 == 0) { particle->unk_00 = 1; temp_r31 = particle->unk_48; for(temp_r29=0; temp_r29unk_30; temp_r31++, temp_r29++) { temp_r31->unk2C = 10; temp_f31 = ((1.0f/256.0f)*frand8())*360.0f; temp_r31->unk34.x = (0.2f*sind(temp_f31))*100.0f; temp_r31->unk34.y = 0; temp_r31->unk34.z = (0.2f*cosd(temp_f31))*100.0f; temp_f30 = (100.0f*(0.025f*((1.0f/256.0f)*frand8())))+2.5f; temp_r31->unk08.x = temp_f30*sind(temp_f31); temp_r31->unk08.y = (100.0f*(0.025f*(((1.0f/256.0f)*(s32)(frand() & 0x1FF))-1.0f)))+7.5000005f; temp_r31->unk08.z = temp_f30*cosd(temp_f31); temp_r31->unk40.r = temp_r31->unk40.g = temp_r31->unk40.b = 255; temp_r31->unk40.a = (frand() & 0x1F)+16; } } temp_r28 = 0; temp_r31 = particle->unk_48; for(temp_r29=0; temp_r29unk_30; temp_r29++, temp_r31++) { if(temp_r31->unk40.a == 0) { temp_r28++; continue; } temp_r31->unk34.x += temp_r31->unk08.x; temp_r31->unk34.y += temp_r31->unk08.y; temp_r31->unk34.z += temp_r31->unk08.z; temp_r31->unk08.y += -0.5f; temp_r31->unk40.a--; } if(temp_r28 == particle->unk_30) { model->attr |= 0x1; } DCStoreRangeNoSync(particle->unk_48, particle->unk_30*sizeof(HsfanimStruct01)); } void fn_1_47EC(Vec *arg0) { Hu3DModelPosSet(lbl_1_bss_5868->model[10], arg0->x, arg0->y, arg0->z); Hu3DModelAttrReset(lbl_1_bss_5868->model[10], 1); }