diff --git a/include/i5.h b/include/i5.h index 1bece2d7..f74b71bc 100644 --- a/include/i5.h +++ b/include/i5.h @@ -50,7 +50,7 @@ void func_i5_801AD080(void); void func_i5_801B5110(f32, f32, f32); void func_i5_801B58AC(Gfx **, f32); bool func_i5_801B6AEC(f32, f32, f32); -void func_i5_801B6E20(f32, f32, f32 *, f32 *, f32 *); +s32 func_i5_801B6E20(f32, f32, f32 *, f32 *, f32 *); void func_i5_801AD144(PlayerShot*); void func_i5_80189120(f32 x, f32 y, f32 z, f32, f32); bool func_i5_801A3C20(f32); diff --git a/linker_scripts/us/symbol_addrs_overlays.txt b/linker_scripts/us/symbol_addrs_overlays.txt index 3566fc48..a2ef9b0a 100644 --- a/linker_scripts/us/symbol_addrs_overlays.txt +++ b/linker_scripts/us/symbol_addrs_overlays.txt @@ -134,6 +134,10 @@ D_i5_801BE284 = 0x801BE284; D_i5_801BE29C = 0x801BE29C; D_i5_801BE2FA = 0x801BE2FA; D_i5_801BE2A4 = 0x801BE2A4; +D_i5_801BE748 = 0x801BE748;//size:0x3600 type:Vtx segment:ovl_i5 +D_i5_801C62D8 = 0x801C62D8;//size:0xC type:Vec3f segment:ovl_i5 +D_i5_801C65B8 = 0x801C65B8;//size:0x870 segment:ovl_i5 +D_i5_801C6E28 = 0x801C6E28;//size:0x34 type:s32 segment:ovl_i5 func_i6_801888F4 = 0x801888F4; func_i6_80197CC4 = 0x80197CC4; diff --git a/src/main/fox_display.c b/src/main/fox_display.c index 87342660..7ed8554b 100644 --- a/src/main/fox_display.c +++ b/src/main/fox_display.c @@ -1453,7 +1453,6 @@ void func_80057814(Player* player) { player->unk_490 = player->unk_0F8; } -// Vec3f D_800CA39C = {0.0f, 0.0f, -300.0f}; void func_800578C4(Player* player) { Vec3f sp4C = { 0.0f, 0.0f, -300.0f }; Vec3f sp40; diff --git a/src/main/fox_play.c b/src/main/fox_play.c index d3d4bb74..2e1f3b8c 100644 --- a/src/main/fox_play.c +++ b/src/main/fox_play.c @@ -1571,7 +1571,7 @@ void func_800A8BA4(Player* player) { func_800444BC(player); break; case FORM_BLUE_MARINE: - if (func_i5_801B6AEC(player->pos.x, player->pos.y - 12.0f, player->unk_138 + player->unk_144) != 0) { + if (func_i5_801B6AEC(player->pos.x, player->pos.y - 12.0f, player->unk_138 + player->unk_144)) { func_i5_801B6E20(player->pos.x, player->unk_138 + player->unk_144, &spE8, &spE0, &spE4); player->pos.y = spE0 + 10.0f; } diff --git a/src/overlays/ovl_i5/fox_ground.c b/src/overlays/ovl_i5/fox_ground.c new file mode 100644 index 00000000..23439211 --- /dev/null +++ b/src/overlays/ovl_i5/fox_ground.c @@ -0,0 +1,745 @@ +#include "global.h" + +void func_i5_801B5244(s32 arg0, s32 arg1); +void func_i5_801B5FE0(s32 arg0, s32 arg1, s32 arg2); +void func_i5_801B68A8(Gfx** dlist, s32 arg1, s32 arg2); + +extern u16 D_6001BA8[]; + +typedef struct { + /* 0x00 */ s32 unk_00; + /* 0x04 */ s32 unk_04; + /* 0x08 */ f32 unk_08; + /* 0x0C */ f32 unk_0C; + /* 0x10 */ f32 unk_10; + /* 0x14 */ f32 unk_14; + /* 0x18 */ f32 unk_18; + /* 0x1C */ s16 unk_1C; + /* 0x20 */ f32 unk_20; +} UnkStruct_801C62E8; // size = 0x24 + +typedef union { + f32 a[3]; + Vec3f v; +} Vec3fa; + +Vtx D_i5_801BA910[4] = { + VTX(-3410, 0, -5720, 0, 0, 0, 127, 0, 255), + VTX(-3410, 0, 0, 0, 26624, 0, 127, 0, 255), + VTX(3410, 0, 0, -32768, 26624, 0, 127, 0, 255), + VTX(3410, 0, -5720, -32768, 0, 0, 127, 0, 255), +}; +Gfx D_i5_801BA950[4] = { + gsSPVertex(D_i5_801BA910, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(0, 2, 3, 0), + gsSPEndDisplayList(), +}; +u8 D_i5_801BA970[12] = { + 0, 0, 0, 0, 4, 5, 6, 7, 0, 0, 0, 0, +}; +s32 D_i5_801BA97C[6] = { + 1, 0, 0, 1, 1, 0, +}; +s32 D_i5_801BA994[6] = { + 0, 0, 1, 1, 0, 0, +}; +f32 D_i5_801BA9AC[6] = { + 220.0f, 0.0f, 0.0f, 220.0f, 220.0f, 0.0f, +}; +f32 D_i5_801BA9C4[6] = { + 0.0f, 0.0f, 220.0f, 220.0f, 0.0f, 0.0f, +}; + +f32 D_i5_801BE740; +f32 D_i5_801BE744; +Vtx D_i5_801BE748[27][16][2]; +s32 D_i5_801C1D48[28][16]; +f32 D_i5_801C2448[28]; +f32 D_i5_801C24B8[28]; +Gfx D_i5_801C2528[27][65]; +Gfx* D_i5_801C5C00; +s32 D_i5_801C5C04; +s32 D_i5_801C5C08; +s32 D_i5_801C5C0C; +f32 D_i5_801C5C10; +s32 D_i5_801C5C14; +Mtx D_i5_801C5C18[27]; +Vec3f D_i5_801C62D8; +UnkStruct_801C62E8 D_i5_801C62E8[20]; +Vec3fa D_i5_801C65B8[3][15][4]; +s32 D_i5_801C6E28[4][3]; + +bool func_i5_801B49D0(Actor* actor) { + UnkStruct_801C62E8* var_v0; + s32 i; + bool found; + + found = false; + var_v0 = D_i5_801C62E8; + for (i = 0; i < ARRAY_COUNT(D_i5_801C62E8); i++, var_v0++) { + if (var_v0->unk_00 == 0) { + found = true; + var_v0->unk_00 = 1; + var_v0->unk_04 = actor->obj.pos.y; + var_v0->unk_08 = actor->obj.pos.x; + var_v0->unk_0C = actor->obj.pos.z; + var_v0->unk_10 = actor->obj.rot.x; + var_v0->unk_14 = actor->obj.rot.y; + var_v0->unk_18 = actor->obj.rot.z; + break; + } + } + actor->obj.status = 0; + return found; +} + +void func_i5_801B4A54(UnkStruct_801C62E8* arg0) { + // Lots of conversions between floats, and ints unnecessarily here because of this chain assignment. + arg0->unk_00 = arg0->unk_04 = arg0->unk_08 = arg0->unk_0C = arg0->unk_10 = arg0->unk_14 = arg0->unk_18 = + arg0->unk_1C = arg0->unk_20 = 0; +} + +void func_i5_801B4AA8(s32* arg0, s32* arg1) { + Actor actor; + UnkStruct_801C62E8* var_s2; + s32* var_s1; + f32 temp_fa0; + f32 temp_fs0; + f32 temp_fs1; + f32 var_fv0; + f32 var_fv1; + s32 unk_04; + f32 unk_08; + f32 unk_10; + f32 unk_14; + f32 unk_18; + s32 i; + s32 j; + + var_s2 = D_i5_801C62E8; + for (i = 0; i < ARRAY_COUNT(D_i5_801C62E8); i++, var_s2++) { + if (var_s2->unk_00 != 0) { + unk_04 = var_s2->unk_04; + unk_08 = var_s2->unk_08; + unk_10 = var_s2->unk_10; + unk_14 = var_s2->unk_14; + unk_18 = var_s2->unk_18; + var_s1 = arg0; + if (arg0 == NULL) { + unk_04 = D_i5_801BA970[unk_04]; + } + if (var_s2->unk_00 == 1) { + switch (unk_04) { + case 0: + break; + case 1: + case 3: + var_s2->unk_20 = var_s2->unk_18; + break; + case 4: + PRINTF("ICHIMAI POLYGON ON\n"); // ONE PLANE POLYGON ON + *arg1 |= 2; + break; + case 5: + PRINTF("CHIKEI POLYGON OFF\n"); // TERRAIN POLYGON OFF + *arg1 &= ~1; + break; + case 6: + PRINTF("CHIKEI POLYGON ON\n"); // TERRAIN POLYGON ON + *arg1 |= 1; + break; + case 7: + PRINTF("ICHIMAI POLYGON OFF\n"); // ONE PLANE POLYGON OFF + *arg1 &= ~2; + break; + case 8: + PRINTF("RANDAMU YAMA\n"); // RANDOM MOUNTAIN + var_s2->unk_20 = 5000.0f; + break; + } + var_s2->unk_00 = 2; + } + switch (unk_04) { + case 0: + break; + case 1: + for (j = 0; j < 16; j++, var_s1++) { + temp_fs0 = (j * 220.0f * D_i5_801BE740) - 1760.0f - unk_08; + if (fabsf(temp_fs0) <= unk_10) { + temp_fs1 = __sinf((var_s2->unk_20 / unk_18) * (M_DTOR * 180.0f)); + var_fv0 = __cosf((temp_fs0 / unk_10) * (M_DTOR * 90.0f)); + *var_s1 += var_fv0 * unk_14 * temp_fs1; + } + } + var_s2->unk_20 -= 220.0f; + if (var_s2->unk_20 <= 0.0f) { + func_i5_801B4A54(var_s2); + } + break; + case 2: + unk_08 += (1760.0f - (unk_10 * 0.5f)); + var_fv1 = unk_14; + if (var_s2->unk_20 <= var_fv1 / (70.0f * M_DTOR)) { + var_fv1 = var_s2->unk_20 * (70.0f * M_DTOR); + } else if (var_fv1 / (70.0f * M_DTOR) >= (unk_18 - var_s2->unk_20)) { + var_fv1 = (unk_18 - var_s2->unk_20) * (70.0f * M_DTOR); + } + for (j = 0, var_fv0 = 0.0f; j < 16; j++, var_fv0 += 220.0f, var_s1++) { + if (unk_08 <= var_fv0 && var_fv0 <= (unk_08 + unk_10) && *var_s1 < var_fv1) { + *var_s1 = var_fv1; + } + } + var_s2->unk_20 += 220.0f; + if (unk_18 <= var_s2->unk_20) { + func_i5_801B4A54(var_s2); + } + break; + case 3: + for (j = 0; j < 16; j++, var_s1++) { + temp_fs0 = + (j * 220.0f * D_i5_801BE740) - 1760.0f - var_s2->unk_08 + + (__sinf(((var_s2->unk_20 * 8.0f) / var_s2->unk_18) * 2 * (M_DTOR * 180.0f)) * 500.0f); + if (fabsf(temp_fs0) <= var_s2->unk_10) { + temp_fa0 = __cosf((temp_fs0 / var_s2->unk_10) * (M_DTOR * 90.0f)); + if (temp_fa0 >= 0.7) { + temp_fa0 = 0.7f; + } + *var_s1 -= + temp_fa0 * var_s2->unk_14 * 4.0f * ((var_s2->unk_18 - var_s2->unk_20) / var_s2->unk_18); + } + *var_s1 += + (var_s2->unk_14 - ((var_s2->unk_20 / var_s2->unk_18) * var_s2->unk_14)) * 4.0f * 0.7f; + } + var_s2->unk_20 -= 220.0f; + if (var_s2->unk_20 <= 0.0f) { + func_i5_801B4A54(var_s2); + } + break; + case 8: + if (var_s2->unk_1C <= 0) { + for (j = 0; j < (s32) var_s2->unk_18; j++) { + var_s2->unk_1C = 1; + actor.obj.pos.x = RAND_FLOAT(3300.0f) - 1650.0f; + actor.obj.pos.z = 0.0f; + actor.obj.pos.y = 1.0f; + actor.obj.rot.x = var_s2->unk_10 + RAND_FLOAT(var_s2->unk_10) * 0.25f; + actor.obj.rot.z = 2.0f * actor.obj.rot.x; // Should this have been obj.rot.y? + actor.obj.rot.z = var_s2->unk_14 + RAND_FLOAT(var_s2->unk_14) * 0.25f; + func_i5_801B49D0(&actor); + } + var_s2->unk_20 -= 220.0f; + if (var_s2->unk_20 <= 0.0f) { + func_i5_801B4A54(var_s2); + } + } else { + var_s2->unk_1C--; + } + break; + default: + func_i5_801B4A54(var_s2); + break; + } + } + } +} + +void func_i5_801B5110(f32 arg0, f32 arg1, f32 arg2) { + UnkStruct_801C62E8* ptr; + s32 i; + s32 k; + + D_i5_801C5C04 = 0; + D_i5_801C5C08 = 0; + D_i5_801C5C0C = 0; + D_i5_801C5C10 = 0.0f; + D_i5_801BE740 = D_i5_801BE744 = 1.0f; + D_i5_801C62D8.x = arg0; + D_i5_801C62D8.y = arg1; + D_i5_801C62D8.z = 200.0f; // Probably used to be arg2 + D_i5_801C5C14 = 1; + for (i = 0, ptr = D_i5_801C62E8; i < ARRAY_COUNT(D_i5_801C62E8); i++, ptr++) { + func_i5_801B4A54(ptr); + } + for (i = 0; i < ARRAY_COUNT(D_i5_801C1D48); i++) { + for (k = 0; k < ARRAY_COUNT(D_i5_801C1D48[0]); k++) { + D_i5_801C1D48[i][k] = 0; + } + D_i5_801C2448[i] = D_i5_801C24B8[i] = 1.0f; + } + func_i5_801B5244(D_i5_801C5C04, D_i5_801C5C08); +} + +void func_i5_801B5244(s32 arg0, s32 arg1) { + s32 var_s5; + s32 var_s6; + s32 sp6C; + s32 ia2; + s32 iv1; + s32 sp60; + s32 sp5C; + Vtx* v0; + Vtx* v1; + + sp60 = arg0; + sp5C = arg1; + for (sp6C = 0; sp6C < 27; sp6C++) { + for (ia2 = 0; ia2 < 16; ia2++) { + v0 = &D_i5_801BE748[sp60][ia2][0]; + v1 = &D_i5_801BE748[sp60][ia2][1]; + if (ia2 != 0) { + v0->n.ob[0] = (D_i5_801C2448[sp5C] * ((ia2 * 220.0f) - 1760.0f)); + } else { + v0->n.ob[0] = -4000; + } + if (ia2 != 15) { + v1->n.ob[0] = (D_i5_801C2448[(sp5C + 1) % 28] * ((ia2 * 220.0f) - 1760.0f)); + } else { + v0[1].n.ob[0] = 4000; + } + v0 = &D_i5_801BE748[sp60][ia2][0]; + v0->n.ob[2] = D_i5_801C24B8[sp5C] * -220.0f; + v1->n.ob[2] = 0; + v0->n.ob[1] = D_i5_801C1D48[sp5C][ia2]; + v1->n.ob[1] = D_i5_801C1D48[(sp5C + 1) % 28][ia2]; + + for (iv1 = 0; iv1 < 2; iv1++) { + D_i5_801BE748[sp60][ia2][iv1].n.tc[0] = (ia2 % 2) * 0x400; + D_i5_801BE748[sp60][ia2][iv1].n.tc[1] = iv1 * 0x400; + } + } + sp60 = (sp60 + 1) % 27; + sp5C = (sp5C + 1) % 28; + } + sp60 = arg0; + sp5C = arg1; + for (sp6C = 0; sp6C < 27; sp6C++) { + D_i5_801C5C00 = D_i5_801C2528[sp60]; + + for (ia2 = 0, var_s6 = 15; var_s6 < 30; ia2++, var_s6 += 15) { + var_s5 = (var_s6 < 15) ? 15 : 14; + gSPVertex(D_i5_801C5C00++, &D_i5_801BE748[sp60][ia2 * 15][0], (var_s5 + 2) * 2, 0); + for (iv1 = 0; iv1 <= var_s5; iv1++) { + gSP1Triangle(D_i5_801C5C00++, (iv1 << 1), (iv1 << 1) + 1, (iv1 << 1) + 3, 0); + gSP1Triangle(D_i5_801C5C00++, (iv1 << 1), (iv1 << 1) + 3, (iv1 << 1) + 2, 0); + } + } + Matrix_Translate(gGfxMatrix, 0.0f, 0.0f, D_i5_801C24B8[sp5C] * -220.0f, 0); + Matrix_ToMtx(&D_i5_801C5C18[sp60]); + gSPMatrix(D_i5_801C5C00++, &D_i5_801C5C18[sp60], G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW); + gSPEndDisplayList(D_i5_801C5C00++); + sp5C = (sp5C + 1) % 28; + sp60 = (sp60 + 1) % 27; + } + func_i5_801B5FE0(arg1, arg0, 27); +} + +void func_i5_801B58AC(Gfx** dList, f32 arg1) { + s32 spC4; + s32 temp_hi; + s32 i; + Vtx* temp_t1; + Vtx* temp_v0; + + RCP_SetupDL(dList, 0x1D); + RCP_SetFog(dList, gFogRed, gFogGreen, gFogBlue, gFogAlpha, gFogNear, gFogFar); + spC4 = D_i5_801C5C14; + if (D_i5_801C5C14 & 2) { + + gDPTileSync((*dList)++); + gDPSetTile((*dList)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, + G_TX_NOLOD, G_TX_MIRROR | G_TX_WRAP, 5, G_TX_NOLOD); + gDPSetTileSize((*dList)++, G_TX_RENDERTILE, 0, 0, 124, 124); + gDPSetTextureImage((*dList)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, D_6001BA8); // Ground Texture? + gDPTileSync((*dList)++); + gDPSetTile((*dList)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); + gDPLoadSync((*dList)++); + gDPLoadBlock((*dList)++, G_TX_LOADTILE, 0, 0, 1023, 256); + gSPMatrix((*dList)++, &gIdentityMtx, G_MTX_PUSH | G_MTX_MUL | G_MTX_MODELVIEW); + Matrix_Translate(gGfxMatrix, D_i5_801C62D8.x, D_i5_801C62D8.y, D_i5_801C62D8.z + D_i5_801C5C10, 0); + Matrix_ToMtx(gGfxMtx); + gSPMatrix((*dList)++, gGfxMtx++, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW); + gSPDisplayList((*dList)++, D_i5_801BA950); + gSPPopMatrix((*dList)++, G_MTX_MODELVIEW); + func_i5_801B4AA8(NULL, &spC4); + } + if (D_i5_801C5C14 & 1) { + if (D_i5_801C5C0C == 1) { + D_i5_801C5C0C = 0; + temp_hi = (D_i5_801C5C08 + 27) % 28; + for (i = 0; i < ARRAY_COUNT(D_i5_801C1D48[0]); i++) { + D_i5_801C1D48[temp_hi][i] = 0; + } + D_i5_801C2448[temp_hi] = D_i5_801BE740; + D_i5_801C24B8[temp_hi] = D_i5_801BE744; + func_i5_801B4AA8(D_i5_801C1D48[temp_hi], &spC4); + for (i = 0; i < 16; i++) { + temp_v0 = &D_i5_801BE748[D_i5_801C5C04][i][0]; + temp_t1 = &D_i5_801BE748[D_i5_801C5C04][i][1]; + if ((i != 0) && (i != 15)) { + temp_v0->v.ob[0] = D_i5_801C2448[D_i5_801C5C08] * ((i * 220.0f) - 1760.0f); + } else if (i == 0) { + temp_v0->v.ob[0] = -4000; + } else { // i == 15 + temp_v0->v.ob[0] = 4000; + } + if ((i != 0) && (i != 15)) { + temp_t1->v.ob[0] = D_i5_801C2448[(D_i5_801C5C08 + 1) % 28] * ((i * 220.0f) - 1760.0f); + } else if (i == 0) { + temp_t1->v.ob[0] = -4000; + } else { // i == 15 + temp_t1->v.ob[0] = 4000; + } + temp_v0->v.ob[1] = D_i5_801C1D48[D_i5_801C5C08][i]; + temp_t1->v.ob[1] = D_i5_801C1D48[(D_i5_801C5C08 + 1) % 28][i]; + + D_i5_801BE748[(D_i5_801C5C04 + 27) % 27][i][0].v.ob[2] = + D_i5_801C24B8[(D_i5_801C5C08 + 29) % 28] * -220.0f; + D_i5_801BE748[(D_i5_801C5C04 + 27) % 27][i][1].v.ob[2] = 0; + + Matrix_Translate(gGfxMatrix, 0.0f, 0.0f, D_i5_801C24B8[D_i5_801C5C08] * -220.0f, 0); + Matrix_ToMtx(&D_i5_801C5C18[D_i5_801C5C04]); + } + func_i5_801B5FE0(D_i5_801C5C08, D_i5_801C5C04, 1); + } + gSPMatrix((*dList)++, &gIdentityMtx, G_MTX_PUSH | G_MTX_MUL | G_MTX_MODELVIEW); + func_i5_801B68A8(dList, D_i5_801C5C04, 1); + gSPPopMatrix((*dList)++, G_MTX_MODELVIEW); + } + D_i5_801C5C10 += arg1; + if ((D_i5_801C5C14 & 1) && (D_i5_801C24B8[(D_i5_801C5C08 + 25) % 28] * 220.0f <= D_i5_801C5C10)) { + D_i5_801C5C0C = 1; + D_i5_801C5C10 = Math_ModF(D_i5_801C5C10, D_i5_801C24B8[(D_i5_801C5C08 + 25) % 28] * 220.0f); + D_i5_801C5C04 = (D_i5_801C5C04 + 26) % 27; + D_i5_801C5C08 = (D_i5_801C5C08 + 27) % 28; + } + if (D_i5_801C5C14 & 2) { + D_i5_801C5C10 = Math_ModF(D_i5_801C5C10, 220.0f * D_i5_801BE744); + } + D_i5_801C5C14 = spC4; +} + +void func_i5_801B5FE0(s32 arg0, s32 arg1, s32 arg2) { + f32 spF4; + f32 spF0; + f32 spEC; + f32 spE8; + f32 spE4; + f32 spE0; + f32 spDC; + f32 spD8; + f32 spD4; + f32 temp_ft4; + f32 temp_ft5; + f32 temp_fs0; + f32 temp_fs1; + f32 temp_fs2; + f32 temp_fs3; + f32 temp_fv1; + f32 temp_fa0; + f32 temp_fa1; + f32 var_fv0; + s32 j1; + s32 j3; + s32 j2; + s32 sp9C; + s32 i1; + s32 i2; + s32 sp90; + s32 i0 = 0; + s32 var_s1 = (arg0 + 27) % 28; + + for (sp9C = 0; sp9C < arg2 + 2; sp9C++, var_s1++) { + for (i1 = 0; i1 < 15; i1++) { + for (i2 = 0; i2 < 4; i2++) { + spF4 = D_i5_801BA9AC[i2 + 0] * D_i5_801C2448[(D_i5_801BA994[i2 + 0] + var_s1) % 28]; + spF0 = D_i5_801BA9AC[i2 + 1] * D_i5_801C2448[(D_i5_801BA994[i2 + 1] + var_s1) % 28]; + spEC = D_i5_801BA9AC[i2 + 2] * D_i5_801C2448[(D_i5_801BA994[i2 + 2] + var_s1) % 28]; + + spE8 = D_i5_801C1D48[(D_i5_801BA994[i2 + 0] + var_s1) % 28][i1 + D_i5_801BA97C[i2 + 0]]; + spE4 = D_i5_801C1D48[(D_i5_801BA994[i2 + 1] + var_s1) % 28][i1 + D_i5_801BA97C[i2 + 1]]; + spE0 = D_i5_801C1D48[(D_i5_801BA994[i2 + 2] + var_s1) % 28][i1 + D_i5_801BA97C[i2 + 2]]; + + spDC = D_i5_801BA9C4[i2 + 0] * D_i5_801C24B8[(D_i5_801BA994[i2 + 0] + var_s1) % 28]; + spD8 = D_i5_801BA9C4[i2 + 1] * D_i5_801C24B8[(D_i5_801BA994[i2 + 1] + var_s1) % 28]; + spD4 = D_i5_801BA9C4[i2 + 2] * D_i5_801C24B8[(D_i5_801BA994[i2 + 2] + var_s1) % 28]; + + temp_ft4 = spF0 - spF4; + temp_ft5 = spEC - spF0; + temp_fs0 = spE4 - spE8; + temp_fs1 = spE0 - spE4; + temp_fs2 = spD8 - spDC; + temp_fs3 = spD4 - spD8; + + temp_fv1 = (temp_fs0 * temp_fs3) - (temp_fs2 * temp_fs1); + temp_fa0 = (temp_fs2 * temp_ft5) - (temp_ft4 * temp_fs3); + temp_fa1 = (temp_ft4 * temp_fs1) - (temp_fs0 * temp_ft5); + var_fv0 = sqrtf(SQ(temp_fv1) + SQ(temp_fa0) + SQ(temp_fa1)); + D_i5_801C65B8[i0][i1][i2].a[0] = (temp_fv1 * 127.0f) / var_fv0; + D_i5_801C65B8[i0][i1][i2].a[1] = (temp_fa0 * 127.0f) / var_fv0; + D_i5_801C65B8[i0][i1][i2].a[2] = (temp_fa1 * 127.0f) / var_fv0; + } + } + if (i0 < 2) { + i0++; + } + if (sp9C >= 2) { + if (sp9C == 2) { + sp90 = (arg1 + 27) % 27; + } + for (i1 = 0; i1 < 15; i1++) { + j1 = ((i1 + 1) * (i1 != 14)) + ((i1 == 14) * 14); + j3 = i1; + j2 = (i1 - 1) * (i1 != 0); + for (i2 = 0; i2 < 3; i2++) { + D_i5_801C6E28[0][i2] = (D_i5_801C65B8[0][j2][2].a[i2] + D_i5_801C65B8[1][j2][3].a[i2] + + D_i5_801C65B8[1][j3][0].a[i2] + D_i5_801C65B8[0][j3][1].a[i2]) / + 4.0f; + D_i5_801C6E28[1][i2] = (D_i5_801C65B8[1][j2][2].a[i2] + D_i5_801C65B8[2][j2][3].a[i2] + + D_i5_801C65B8[2][j3][0].a[i2] + D_i5_801C65B8[1][j3][1].a[i2]) / + 4.0f; + D_i5_801C6E28[2][i2] = (D_i5_801C65B8[1][j3][2].a[i2] + D_i5_801C65B8[2][j3][3].a[i2] + + D_i5_801C65B8[2][j1][0].a[i2] + D_i5_801C65B8[1][j1][1].a[i2]) / + 4.0f; + D_i5_801C6E28[3][i2] = (D_i5_801C65B8[0][j3][2].a[i2] + D_i5_801C65B8[1][j3][3].a[i2] + + D_i5_801C65B8[1][j1][0].a[i2] + D_i5_801C65B8[0][j1][1].a[i2]) / + 4.0f; + } + for (i2 = 0; i2 < 4; i2++) { + var_fv0 = sqrtf(SQ(D_i5_801C6E28[i2][0]) + SQ(D_i5_801C6E28[i2][1]) + SQ(D_i5_801C6E28[i2][2])); + D_i5_801C6E28[i2][0] = (D_i5_801C6E28[i2][0] / var_fv0) * 127.0f; + D_i5_801C6E28[i2][1] = (D_i5_801C6E28[i2][1] / var_fv0) * 127.0f; + D_i5_801C6E28[i2][2] = (D_i5_801C6E28[i2][2] / var_fv0) * 127.0f; + } + for (i2 = 0; i2 < 3; i2++) { + D_i5_801BE748[sp90][i1][0].n.n[i2] = D_i5_801C6E28[0][i2]; + D_i5_801BE748[sp90][i1][1].n.n[i2] = D_i5_801C6E28[1][i2]; + D_i5_801BE748[sp90][i1 + 1][1].n.n[i2] = D_i5_801C6E28[2][i2]; + D_i5_801BE748[sp90][i1 + 1][0].n.n[i2] = D_i5_801C6E28[3][i2]; + } + } + sp90 = (sp90 + 1) % 27; + for (i1 = 0; i1 < 15; i1++) { + for (i2 = 0; i2 < 3; i2++) { + D_i5_801C65B8[1][i1][i2] = D_i5_801C65B8[2][i1][i2]; + D_i5_801C65B8[0][i1][i2] = D_i5_801C65B8[1][i1][i2]; + } + } + } + } +} + +void func_i5_801B68A8(Gfx** dlist, s32 arg1, s32 arg2) { + s32 var_a0; + s32 var_a1; + s32 var; + + gDPTileSync((*dlist)++); + gDPSetTile((*dlist)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, G_TX_MIRROR | G_TX_WRAP, 5, + G_TX_NOLOD, G_TX_MIRROR | G_TX_WRAP, 5, G_TX_NOLOD); + gDPSetTileSize((*dlist)++, G_TX_RENDERTILE, 0, 0, 124, 124); + gDPSetTextureImage((*dlist)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, D_6001BA8); // Ground Texture? + gDPTileSync((*dlist)++); + gDPSetTile((*dlist)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); + gDPLoadSync((*dlist)++); + gDPLoadBlock((*dlist)++, G_TX_LOADTILE, 0, 0, 1023, 256); + Matrix_Translate(gGfxMatrix, D_i5_801C62D8.x, D_i5_801C62D8.y, D_i5_801C62D8.z + D_i5_801C5C10, 0); + Matrix_ToMtx(gGfxMtx); + gSPMatrix((*dlist)++, gGfxMtx++, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW); + + var = 1; + var_a0 = (arg1 + 25) % 27; + for (var_a1 = 26; var_a1 >= var; var_a1--) { + gSPDisplayList((*dlist)++, &D_i5_801C2528[var_a0]); + var_a0 = (var_a0 + 26) % 27; + } +} + +bool func_i5_801B6AEC(f32 arg0, f32 arg1, f32 arg2) { + f32 sp2C; + f32 sp28; + f32 sp24; + + func_i5_801B6E20(arg0, arg2, &sp2C, &sp28, &sp24); + if (arg1 < sp28) { + return true; + } else { + return false; + } +} + +s32 func_i5_801B6B40(f32 arg0, f32 arg1, Vec3f* arg2, Plane* arg3) { + f32 x1; + f32 y1; + f32 z1; + f32 x2; + f32 y2; + f32 z2; + f32 x3; + f32 y3; + f32 z3; + f32 x4; + f32 y4; + f32 z4; + f32 temp; + f32 temp2; + f32 temp3; + s32 var_v1 = 0; + + x1 = arg2->x; + y1 = arg2->y; + z1 = arg2->z; + arg2++; + x2 = arg2->x; + y2 = arg2->y; + z2 = arg2->z; + arg2++; + x3 = arg2->x; + y3 = arg2->y; + z3 = arg2->z; + arg2++; + x4 = arg2->x; + y4 = arg2->y; + z4 = arg2->z; + arg2++; + + temp = ((z2 - z1) * (arg0 - x2)) - ((x2 - x1) * (arg1 - z2)); + if (temp >= 0.0f) { + temp2 = ((z3 - z2) * (arg0 - x3)) - ((x3 - x2) * (arg1 - z3)); + if (temp2 >= 0.0f) { + temp3 = ((z1 - z3) * (arg0 - x1)) - ((x1 - x3) * (arg1 - z1)); + if (temp3 >= 0.0f) { + + arg3->normal.x = ((y2 - y1) * (z3 - z2)) - ((z2 - z1) * (y3 - y2)); + arg3->normal.y = ((z2 - z1) * (x3 - x2)) - ((x2 - x1) * (z3 - z2)); + arg3->normal.z = ((x2 - x1) * (y3 - y2)) - ((y2 - y1) * (x3 - x2)); + + if ((arg3->normal.x != 0.0f) || (arg3->normal.y != 0.0f) || (arg3->normal.z != 0.0f)) { + var_v1 = 1; + } + } + } + } + if (var_v1 == 0) { + temp = ((z3 - z1) * (arg0 - x3)) - ((x3 - x1) * (arg1 - z3)); + if (temp >= 0.0f) { + temp2 = ((z4 - z3) * (arg0 - x4)) - ((x4 - x3) * (arg1 - z4)); + if (temp2 >= 0.0f) { + temp3 = ((z1 - z4) * (arg0 - x1)) - ((x1 - x4) * (arg1 - z1)); + if (temp3 >= 0.0f) { + + arg3->normal.x = ((y3 - y1) * (z4 - z3)) - ((z3 - z1) * (y4 - y3)); + arg3->normal.y = ((z3 - z1) * (x4 - x3)) - ((x3 - x1) * (z4 - z3)); + arg3->normal.z = ((x3 - x1) * (y4 - y3)) - ((y3 - y1) * (x4 - x3)); + + if ((arg3->normal.x != 0.0f) || (arg3->normal.y != 0.0f) || (arg3->normal.z != 0.0f)) { + var_v1 = 2; + } + } + } + } + } + if (var_v1 != 0) { + arg3->dist = (-arg3->normal.x * x3) - (arg3->normal.y * y3) - (arg3->normal.z * z3); + } + return var_v1; +} + +s32 func_i5_801B6E20(f32 arg0, f32 arg1, f32* arg2, f32* arg3, f32* arg4) { + s32 var_s1; + s32 var_s6; + s32 var_s7; + s32 var_v1; + Vtx(*var_s2)[2]; + Vec3f spA4[4]; + f32 var_fs0; + f32 var_fs0_2; + f32 var_fs1; + f32 var_fs2; + Plane sp84; + f32 temp; + f32 temp_fs2; + s32 pad[4]; + + *arg3 = 0.0f; + *arg4 = 0.0f; + *arg2 = 0.0f; + if (D_i5_801C5C14 & 1) { + temp_fs2 = arg1 - D_i5_801C5C10 - D_i5_801C62D8.z; + var_v1 = 0; + var_s6 = (D_i5_801C5C04 + 25) % 27; + var_fs0 = 0; + + for (var_s7 = 0; var_v1 == 0 && var_s7 < 26; var_s7++) { + var_s2 = &D_i5_801BE748[var_s6][0]; + if (((var_s2[0][0].v.ob[2] + var_fs0) <= temp_fs2) && (temp_fs2 <= (var_s2[0][1].v.ob[2] + var_fs0))) { + for (var_s1 = 0; var_v1 == 0 && var_s1 < 15; var_s1++) { + var_s2 = &D_i5_801BE748[var_s6][var_s1]; + + spA4[0].x = var_s2[0][0].v.ob[0]; + spA4[0].y = var_s2[0][0].v.ob[1]; + spA4[0].z = var_s2[0][0].v.ob[2] + var_fs0; + spA4[1].x = var_s2[0][1].v.ob[0]; + spA4[1].y = var_s2[0][1].v.ob[1]; + spA4[1].z = var_s2[0][1].v.ob[2] + var_fs0; + spA4[2].x = var_s2[1][1].v.ob[0]; + spA4[2].y = var_s2[1][1].v.ob[1]; + spA4[2].z = var_s2[1][1].v.ob[2] + var_fs0; + spA4[3].x = var_s2[1][0].v.ob[0]; + spA4[3].y = var_s2[1][0].v.ob[1]; + spA4[3].z = var_s2[1][0].v.ob[2] + var_fs0; + + if (((spA4[0].x <= arg0) || (spA4[1].x <= arg0)) && ((arg0 <= spA4[2].x) || (arg0 <= spA4[3].x))) { + var_v1 = func_i5_801B6B40(arg0, temp_fs2, spA4, &sp84); + } + } + } + var_fs0 += var_s2[0][0].v.ob[2]; + var_s6 = (var_s6 + 26) % 27; + } + if (var_v1 != 0) { + temp = ((-sp84.normal.x * arg0) - (sp84.normal.z * temp_fs2) - sp84.dist) / sp84.normal.y; + if (*arg3 < temp) { + *arg3 = temp; + } + if (sp84.normal.x != 0.0f) { + var_fs2 = -sp84.dist / sp84.normal.x; + } else { + var_fs2 = 0.0f; + } + if (sp84.normal.y != 0.0f) { + var_fs1 = -sp84.dist / sp84.normal.y; + } else { + var_fs1 = 0.0f; + } + if (sp84.normal.z != 0.0f) { + var_fs0_2 = -sp84.dist / sp84.normal.z; + } else { + var_fs0_2 = 0.0f; + } + *arg2 = -Math_Atan2F_XYAlt(var_fs1, var_fs0_2); + if (var_fs0_2 != 0.0f) { + *arg4 = -Math_Atan2F_XYAlt(__sinf(Math_Atan2F_XYAlt(var_fs1, var_fs0_2)) * var_fs0_2, var_fs2); + } else { + *arg4 = Math_Atan2F_XYAlt(var_fs1, var_fs2); + } + } else { + *arg3 = 0.0f; + *arg2 = 0.0f; + *arg4 = 0.0f; + } + } + return 1; +} + +void func_i5_801B7240(f32 arg0, f32 arg1, f32* arg2, f32* arg3, f32* arg4) { + s32 pad; + f32 sp28; + f32 sp24; + + func_i5_801B6E20(arg0, arg1, &sp28, arg3, &sp24); + *arg2 = sp28 * M_RTOD; + *arg4 = sp24 * M_RTOD; +} diff --git a/src/overlays/ovl_i5/sf_i5_4.c b/src/overlays/ovl_i5/sf_i5_4.c deleted file mode 100644 index 310e1a2e..00000000 --- a/src/overlays/ovl_i5/sf_i5_4.c +++ /dev/null @@ -1,424 +0,0 @@ -#include "global.h" - -void func_i5_801B5244(s32 arg0, s32 arg1); -void func_i5_801B5FE0(s32 arg0, s32 arg1, s32 arg2); -void func_i5_801B68A8(Gfx** dlist, s32 arg1, s32 arg2); - -typedef struct { - /* 0x00 */ s32 unk_00; - /* 0x04 */ s32 unk_04; - /* 0x08 */ f32 unk_08; - /* 0x0C */ f32 unk_0C; - /* 0x10 */ f32 unk_10; - /* 0x14 */ f32 unk_14; - /* 0x18 */ f32 unk_18; - /* 0x1C */ s16 unk_1C; - /* 0x20 */ f32 unk_20; -} UnkStruct_801C62E8; // size = 0x24 -extern UnkStruct_801C62E8 D_i5_801C62E8[20]; - -// Quite likely just Vec3f. -typedef struct { - /* 0x00 */ f32 unk_00; - /* 0x04 */ f32 unk_04; - /* 0x08 */ f32 unk_08; -} UnkStruct_801C62D8; // size = 0xC -extern UnkStruct_801C62D8 D_i5_801C62D8; - -extern u8 D_i5_801BA970[12]; -extern f32 D_i5_801BE740; -extern f32 D_i5_801BE744; -extern s32 D_i5_801C5C04; -extern s32 D_i5_801C5C08; -extern s32 D_i5_801C5C0C; -extern f32 D_i5_801C5C10; -extern s32 D_i5_801C5C14; -// extern UnkStruct_801C62E8 D_i5_801C1D48[49]; // Really unsure about this struct -extern s32 D_i5_801C1D48[28][16]; -extern f32 D_i5_801C24B8[28]; // size = 0x40 -extern f32 D_i5_801C2448[28]; // size = 0x40 -extern f32 D_i5_801C62E0; -extern Gfx D_i5_801C2528[27][65]; -extern Gfx* D_i5_801C5C00[]; -extern u16 D_6001BA8[]; -extern s32 D_i5_801BA97C[2][3]; -extern Gfx D_i5_801BA950; -extern Mtx** D_i5_801C5C18; -extern s16 D_i5_801BE748[3208]; // size = 0x1910 - -bool func_i5_801B49D0(Actor* actor) { - UnkStruct_801C62E8* var_v0; - s32 i; - bool found; - - found = false; - var_v0 = D_i5_801C62E8; - for (i = 0; i < ARRAY_COUNT(D_i5_801C62E8); i++, var_v0++) { - if (var_v0->unk_00 == 0) { - found = true; - var_v0->unk_00 = 1; - var_v0->unk_04 = actor->obj.pos.y; - var_v0->unk_08 = actor->obj.pos.x; - var_v0->unk_0C = actor->obj.pos.z; - var_v0->unk_10 = actor->obj.rot.x; - var_v0->unk_14 = actor->obj.rot.y; - var_v0->unk_18 = actor->obj.rot.z; - break; - } - } - actor->obj.status = 0; - return found; -} - -void func_i5_801B4A54(UnkStruct_801C62E8* arg0) { - // Lots of conversions between floats, and ints unnecessarily here because of this chain assignment. - arg0->unk_00 = arg0->unk_04 = arg0->unk_08 = arg0->unk_0C = arg0->unk_10 = arg0->unk_14 = arg0->unk_18 = - arg0->unk_1C = arg0->unk_20 = 0; -} - -void func_i5_801B4AA8(s32* arg0, s32* arg1) { - Actor actor; - UnkStruct_801C62E8* var_s2; - s32* var_s1; - f32 temp_fa0; - f32 temp_fs0; - f32 temp_fs1; - f32 var_fv0; - f32 var_fv1; - s32 unk_04; - f32 unk_08; - f32 unk_10; - f32 unk_14; - f32 unk_18; - s32 i; - s32 j; - - var_s2 = D_i5_801C62E8; - for (i = 0; i < ARRAY_COUNT(D_i5_801C62E8); i++, var_s2++) { - if (var_s2->unk_00 != 0) { - unk_04 = var_s2->unk_04; - unk_08 = var_s2->unk_08; - unk_10 = var_s2->unk_10; - unk_14 = var_s2->unk_14; - unk_18 = var_s2->unk_18; - var_s1 = arg0; - if (var_s1 == NULL) { - unk_04 = D_i5_801BA970[unk_04]; - } - if (var_s2->unk_00 == 1) { - switch (unk_04) { - case 0: - break; - case 1: - case 3: - var_s2->unk_20 = var_s2->unk_18; - break; - case 4: - PRINTF("ICHIMAI POLYGON ON\n"); // ONE PLANE POLYGON ON - *arg1 |= 2; - break; - case 5: - PRINTF("CHIKEI POLYGON OFF\n"); // TERRAIN POLYGON OFF - *arg1 &= ~1; - break; - case 6: - PRINTF("CHIKEI POLYGON ON\n"); // TERRAIN POLYGON ON - *arg1 |= 1; - break; - case 7: - PRINTF("ICHIMAI POLYGON OFF\n"); // ONE PLANE POLYGON OFF - *arg1 &= ~2; - break; - case 8: - PRINTF("RANDAMU YAMA\n"); // RANDOM MOUNTAIN - var_s2->unk_20 = 5000.0f; - break; - } - var_s2->unk_00 = 2; - } - switch (unk_04) { - case 0: - break; - case 1: - for (j = 0; j < 16; j++, var_s1++) { - temp_fs0 = (j * 220.0f * D_i5_801BE740) - 1760.0f - unk_08; - if (fabsf(temp_fs0) <= unk_10) { - temp_fs1 = __sinf((var_s2->unk_20 / unk_18) * (M_DTOR * 180.0f)); - var_fv0 = __cosf((temp_fs0 / unk_10) * (M_DTOR * 90.0f)); - *var_s1 = *var_s1 + (var_fv0 * unk_14 * temp_fs1); - } - } - var_s2->unk_20 -= 220.0f; - if (var_s2->unk_20 <= 0.0f) { - func_i5_801B4A54(var_s2); - } - break; - case 2: - var_fv1 = unk_14; - j = 0; - temp_fa0 = unk_14 / (70.0f * M_DTOR); - unk_08 += (1760.0f - (unk_10 * 0.5f)); - if (var_s2->unk_20 <= temp_fa0) { - var_fv1 = var_s2->unk_20 * (70.0f * M_DTOR); - } else if (temp_fa0 >= (unk_18 - var_s2->unk_20)) { - var_fv1 = (unk_18 - var_s2->unk_20) * (70.0f * M_DTOR); - } - var_fv0 = 0.0f; - do { - if (unk_08 <= var_fv0 && var_fv0 <= (unk_08 + unk_10) && *var_s1 < var_fv1) { - *var_s1 = var_fv1; - } - var_fv0 += 220.0f; - var_s1++; - j++; - } while (j != 16); - if (0) {} // fake - var_s2->unk_20 += 220.0f; - if (unk_18 <= var_s2->unk_20) { - func_i5_801B4A54(var_s2); - } - break; - case 3: - for (j = 0; j < 16; j++) { - temp_fs0 = - (__sinf(((var_s2->unk_20 * 8.0f) / var_s2->unk_18) * 2 * (M_DTOR * 180.0f)) * 500.0f) + - (((j * 220.0f * D_i5_801BE740) - 1760.0f) - var_s2->unk_08); - if (fabsf(temp_fs0) <= var_s2->unk_10) { - temp_fa0 = __cosf((temp_fs0 / var_s2->unk_10) * (M_DTOR * 90.0f)); - if (temp_fa0 >= 0.7) { - temp_fa0 = 0.7f; - } - *var_s1 -= - temp_fa0 * var_s2->unk_14 * 4.0f * ((var_s2->unk_18 - var_s2->unk_20) / var_s2->unk_18); - } - *var_s1 += - (var_s2->unk_14 - ((var_s2->unk_20 / var_s2->unk_18) * var_s2->unk_14)) * 4.0f * 0.7f; - var_s1++; - } - var_s2->unk_20 -= 220.0f; - if (var_s2->unk_20 <= 0.0f) { - func_i5_801B4A54(var_s2); - } - break; - case 8: - if (var_s2->unk_1C <= 0) { - for (j = 0; j < (s32) var_s2->unk_18; j++) { - var_s2->unk_1C = 1; - actor.obj.pos.x = (Rand_ZeroOne() * 3300.0f) - 1650.0f; - actor.obj.pos.z = 0.0f; - actor.obj.pos.y = 1.0f; - actor.obj.rot.x = (Rand_ZeroOne() * var_s2->unk_10 * 0.25f) + var_s2->unk_10; - actor.obj.rot.z = 2.0f * actor.obj.rot.x; // Should this have been obj.rot.y? - actor.obj.rot.z = (Rand_ZeroOne() * var_s2->unk_14 * 0.25f) + var_s2->unk_14; - func_i5_801B49D0(&actor); - } - var_s2->unk_20 -= 220.0f; - if (var_s2->unk_20 <= 0.0f) { - func_i5_801B4A54(var_s2); - } - } else { - var_s2->unk_1C--; - } - break; - default: - func_i5_801B4A54(var_s2); - break; - } - } - } -} - -void func_i5_801B5110(f32 arg0, f32 arg1, f32 arg2) { - UnkStruct_801C62E8* ptr; - s32 i; - s32 j; - s32 h; - s32 k; - - D_i5_801C5C04 = 0; - D_i5_801C5C08 = 0; - D_i5_801C5C0C = 0; - D_i5_801C5C10 = 0.0f; - D_i5_801BE740 = D_i5_801BE744 = 1.0f; - D_i5_801C62D8.unk_00 = arg0; - D_i5_801C62D8.unk_04 = arg1; - D_i5_801C62D8.unk_08 = 200.0f; // Probably used to be arg2 - D_i5_801C5C14 = 1; - for (i = 0, ptr = D_i5_801C62E8; i < ARRAY_COUNT(D_i5_801C62E8); i++, ptr++) { - func_i5_801B4A54(ptr); - } - for (i = 0; i < ARRAY_COUNT(D_i5_801C1D48); i++) { - // clang-format off - for (k = 0; k < ARRAY_COUNT(D_i5_801C1D48[0]); k += 4) { \ - for (h = 0; h < 4; h++) { - D_i5_801C1D48[i][k + h] = 0; - } - } - // clang-format on - D_i5_801C2448[i] = D_i5_801C24B8[i] = 1.0f; - } - func_i5_801B5244(D_i5_801C5C04, D_i5_801C5C08); -} - -#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i5/sf_i5_4/func_i5_801B5244.s") - -#ifdef NON_EQUIVALENT -void func_i5_801B58AC(Gfx** dlists, f32 arg1) { - s32 spC4; - f32 temp_fa1; - s32 temp_hi; - s32 var_s0; - s32 i; - s32 var_s2; - s16* temp_t1; - s16* temp_v0_2; - s16* temp_v1; - s32 k; - s32 h; - - RCP_SetupDL(dlists, 0x1D); - RCP_SetFog(dlists, gFogRed, gFogGreen, gFogBlue, gFogAlpha, gFogNear, gFogFar); - spC4 = D_i5_801C5C14; - if (D_i5_801C5C14 & 2) { - gDPTileSync((*dlists)++); - gDPSetTile((*dlists)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, - 5, G_TX_NOLOD, G_TX_MIRROR | G_TX_WRAP, 5, G_TX_NOLOD); - gDPSetTileSize((*dlists)++, G_TX_RENDERTILE, 0, 0, 124, 124); - gDPSetTextureImage((*dlists)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, D_6001BA8); // Ground Texture? - gDPTileSync((*dlists)++); - gDPSetTile((*dlists)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, - G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); - gDPLoadSync((*dlists)++); - gDPLoadBlock((*dlists)++, G_TX_LOADTILE, 0, 0, 1023, 256); - gSPMatrix((*dlists)++, &gIdentityMtx, G_MTX_PUSH | G_MTX_MUL | G_MTX_MODELVIEW); - Matrix_Translate(gGfxMatrix, D_i5_801C62D8.unk_00, D_i5_801C62D8.unk_04, D_i5_801C62D8.unk_08 + D_i5_801C5C10, - 0); - Matrix_ToMtx(gGfxMtx); - gSPMatrix((*dlists)++, gGfxMtx++, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW); - gSPDisplayList((*dlists)++, &D_i5_801BA950); - gSPPopMatrix((*dlists)++, G_MTX_MODELVIEW); - func_i5_801B4AA8(NULL, &D_i5_801C5C14); - } - if (D_i5_801C5C14 & 1) { - if (D_i5_801C5C0C == 1) { - D_i5_801C5C0C = 0; - temp_hi = (D_i5_801C5C08 + 27) % 28; - for (k = 0; k < ARRAY_COUNT(D_i5_801C1D48[0]); k += 4) { - for (h = 0; h < 4; h++) { - D_i5_801C1D48[temp_hi][k + h] = 0; - } - } - D_i5_801C2448[temp_hi] = D_i5_801BE740; - D_i5_801C24B8[temp_hi] = D_i5_801BE744; - func_i5_801B4AA8(D_i5_801C1D48[temp_hi], &spC4); - i = 0; - var_s2 = 0; - do { - temp_v0_2 = D_i5_801BE748[(D_i5_801C5C04 * 512) + var_s2]; - if ((i != 0) && (i != 15)) { - temp_v0_2[0] = (D_i5_801C2448[D_i5_801C5C08] * ((i * 220.0f) - 1760.0f)); - } else if (i == 0) { - temp_v0_2[0] = -4000; - } else { - temp_v0_2[0] = 4000; - } - - temp_t1 = temp_v0_2 + 16; - if ((i != 0) && (i != 15)) { - temp_t1[0] = (D_i5_801C2448[(D_i5_801C5C08 + 1) % 28] * ((i * 220.0f) - 1760.0f)); - } else if (i == 0) { - temp_t1[0] = -4000; - } else { - temp_t1[0] = 4000; - } - - temp_v0_2[1] = D_i5_801C1D48[D_i5_801C5C08][i]; - temp_t1[1] = D_i5_801C1D48[(D_i5_801C5C08 + 1) % 28][i]; - temp_v1 = D_i5_801BE748[(((D_i5_801C5C04 + 27) % 27) * 512) + var_s2]; - temp_t1[10] = 0; - temp_t1[2] = (D_i5_801C24B8[(D_i5_801C5C08 + 29) % 28] * -220.0f); - Matrix_Translate(gGfxMatrix, 0.0f, 0.0f, D_i5_801C24B8[D_i5_801C5C08] * -220.0f, 0); - Matrix_ToMtx((D_i5_801C5C04 << 6) + &D_i5_801C5C18); - i += 1; - var_s2 += 0x20; - } while (i < 16); - func_i5_801B5FE0(D_i5_801C5C08, D_i5_801C5C04, 1); - } - gSPMatrix((*dlists)++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW); - func_i5_801B68A8(dlists, D_i5_801C5C04, 1); - gSPPopMatrix((*dlists)++, G_MTX_MODELVIEW); - } - D_i5_801C5C10 += arg1; - if (D_i5_801C5C14 & 1) { - temp_fa1 = D_i5_801C24B8[(D_i5_801C5C08 + 25) % 28] * 220.0f; - if (temp_fa1 <= D_i5_801C5C10) { - D_i5_801C5C0C = 1; - D_i5_801C5C10 = Math_ModF(D_i5_801C5C10, temp_fa1); - D_i5_801C5C04 = (D_i5_801C5C04 + 26) % 27; - D_i5_801C5C08 = (D_i5_801C5C08 + 27) % 28; - } - } - if (D_i5_801C5C14 & 2) { - D_i5_801C5C10 = Math_ModF(D_i5_801C5C10, 220.0f * D_i5_801BE744); - } - D_i5_801C5C14 = spC4; -} -#else -#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i5/sf_i5_4/func_i5_801B58AC.s") -#endif - -#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i5/sf_i5_4/func_i5_801B5FE0.s") - -void func_i5_801B68A8(Gfx** dlist, s32 arg1, s32 arg2) { - s32 var_a0; - s32 var_a1; - s32 var; - - gDPTileSync((*dlist)++); - gDPSetTile((*dlist)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, G_TX_MIRROR | G_TX_WRAP, 5, - G_TX_NOLOD, G_TX_MIRROR | G_TX_WRAP, 5, G_TX_NOLOD); - gDPSetTileSize((*dlist)++, G_TX_RENDERTILE, 0, 0, 124, 124); - gDPSetTextureImage((*dlist)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, D_6001BA8); // Ground Texture? - gDPTileSync((*dlist)++); - gDPSetTile((*dlist)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, - G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); - gDPLoadSync((*dlist)++); - gDPLoadBlock((*dlist)++, G_TX_LOADTILE, 0, 0, 1023, 256); - Matrix_Translate(gGfxMatrix, D_i5_801C62D8.unk_00, D_i5_801C62D8.unk_04, D_i5_801C62D8.unk_08 + D_i5_801C5C10, 0); - Matrix_ToMtx(gGfxMtx); - gSPMatrix((*dlist)++, gGfxMtx++, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW); - - var = 1; - var_a0 = (arg1 + 25) % 27; - for (var_a1 = 26; var_a1 >= var; var_a1--) { - gSPDisplayList((*dlist)++, &D_i5_801C2528[var_a0]); - var_a0 = (var_a0 + 26) % 27; - } -} - -bool func_i5_801B6AEC(f32 arg0, f32 arg1, f32 arg2) { - f32 sp2C; - f32 sp28; - f32 sp24; - - func_i5_801B6E20(arg0, arg2, &sp2C, &sp28, &sp24); - if (arg1 < sp28) { - return true; - } else { - return false; - } -} - -#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i5/sf_i5_4/func_i5_801B6B40.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i5/sf_i5_4/func_i5_801B6E20.s") - -void func_i5_801B7240(f32 arg0, f32 arg1, f32* arg2, f32* arg3, f32* arg4) { - s32 pad; - f32 sp28; - f32 sp24; - - func_i5_801B6E20(arg0, arg1, &sp28, arg3, &sp24); - *arg2 = sp28 * M_RTOD; - *arg4 = sp24 * M_RTOD; -} diff --git a/yamls/us/overlays.yaml b/yamls/us/overlays.yaml index 8f4007bd..ddf585f2 100644 --- a/yamls/us/overlays.yaml +++ b/yamls/us/overlays.yaml @@ -115,21 +115,21 @@ - [0xE6A820, c, fox_ti_cs] - [0xE6C220, c, fox_ti] - [0xE7CC10, c, fox_ma] - - [0xE97CC0, c, sf_i5_4] + - [0xE97CC0, c, fox_ground] - [0xE9A580, .data, fox_i5] - [0xE9A590, .data, fox_ti_cs] - [0xE9A650, data, fox_ti] - [0xE9C140, .data, fox_ma] - - [0xE9DC00, data, sf_i5_4] + - [0xE9DC00, .data, fox_ground] - [0xE9DCD0, .rodata, fox_i5] - [0xE9DCE0, .rodata, fox_ti_cs] - [0xE9DD40, .rodata, fox_ti] - [0xE9E5A0, .rodata, fox_ma] - - [0xE9F0E0, .rodata, sf_i5_4] + - [0xE9F0E0, .rodata, fox_ground] - { start: 0xE9F1D0, type: .bss, vram: 0x801BBEE0, name: fox_i5 } - { type: bss, vram: 0x801BBEF0, name: fox_ti } - { type: .bss, vram: 0x801BE240, name: fox_ma } - - { type: bss, vram: 0x801BE740, name: sf_i5_4 } + - { type: .bss, vram: 0x801BE740, name: fox_ground } - name: ovl_i6 type: code