2024-02-02 06:02:52 +03:00
|
|
|
#include "global.h"
|
2024-01-17 18:36:58 +03:00
|
|
|
|
2024-02-02 06:02:52 +03:00
|
|
|
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);
|
2024-01-17 18:36:58 +03:00
|
|
|
|
2024-02-02 06:02:52 +03:00
|
|
|
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];
|
2024-01-17 18:36:58 +03:00
|
|
|
|
2024-02-02 06:02:52 +03:00
|
|
|
// 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;
|
2024-01-17 18:36:58 +03:00
|
|
|
|
2024-02-02 06:02:52 +03:00
|
|
|
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);
|
|
|
|
}
|
2024-01-17 18:36:58 +03:00
|
|
|
|
|
|
|
#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i5/sf_i5_4/func_i5_801B5244.s")
|
|
|
|
|
2024-02-02 06:02:52 +03:00
|
|
|
#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
|
2024-01-17 18:36:58 +03:00
|
|
|
#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i5/sf_i5_4/func_i5_801B58AC.s")
|
2024-02-02 06:02:52 +03:00
|
|
|
#endif
|
2024-01-17 18:36:58 +03:00
|
|
|
|
|
|
|
#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i5/sf_i5_4/func_i5_801B5FE0.s")
|
|
|
|
|
2024-02-02 06:02:52 +03:00
|
|
|
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;
|
2024-01-17 18:36:58 +03:00
|
|
|
|
2024-02-02 06:02:52 +03:00
|
|
|
func_i5_801B6E20(arg0, arg2, &sp2C, &sp28, &sp24);
|
|
|
|
if (arg1 < sp28) {
|
|
|
|
return true;
|
|
|
|
} else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
2024-01-17 18:36:58 +03:00
|
|
|
|
|
|
|
#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")
|
|
|
|
|
2024-02-02 06:02:52 +03:00
|
|
|
void func_i5_801B7240(f32 arg0, f32 arg1, f32* arg2, f32* arg3, f32* arg4) {
|
|
|
|
s32 pad;
|
|
|
|
f32 sp28;
|
|
|
|
f32 sp24;
|
2024-01-17 18:36:58 +03:00
|
|
|
|
2024-02-02 06:02:52 +03:00
|
|
|
func_i5_801B6E20(arg0, arg1, &sp28, arg3, &sp24);
|
|
|
|
*arg2 = sp28 * M_RTOD;
|
|
|
|
*arg4 = sp24 * M_RTOD;
|
|
|
|
}
|