diff options
| author | Synray <31429825+Synray@users.noreply.github.com> | 2021-10-27 14:12:16 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-10-27 23:12:16 +0200 |
| commit | 188690c602e51ae256c1dff38347be84b50058ff (patch) | |
| tree | 150225866feade4bbfd304735eed51e93c1a304a /src/code | |
| parent | bfc36c57bf37185d1e54d61d4e67f98b9e8c9155 (diff) | |
Match vr_box functions (#1014)
Diffstat (limited to 'src/code')
| -rw-r--r-- | src/code/z_vr_box.c | 302 |
1 files changed, 93 insertions, 209 deletions
diff --git a/src/code/z_vr_box.c b/src/code/z_vr_box.c index 57eb61161..3dbb91db5 100644 --- a/src/code/z_vr_box.c +++ b/src/code/z_vr_box.c @@ -79,154 +79,101 @@ Struct_8012AF0C D_8012AF0C[6] = { { 0x40, 0x40, -0x40, 0x20, -0x20 }, { -0x40, 0x40, 0x40, 0x20, -0x20 }, { -0x40, -0x40, -0x40, 0x20, 0x20 }, }; -#ifdef NON_MATCHING -// Loops have very strange structure. In principle, they're the double loop over a 2D array shown below them. -// However, that gives wildly different codegen and the part after the switch suggests a linear array. s32 func_800ADBB0(SkyboxContext* skyboxCtx, Vtx* roomVtx, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6, s32 arg7, s32 arg8, s32 arg9) { u32 pad42C; - // 42C s32 pad428; - // 428 s32 sp424; - s32 pad420; - // 420 s32 i; - // 41C s32 j; - // 418 + s32 k; u16 index; s16 phi_t1; - // 414 s16 phi_a2_4; s16 phi_a0_4; - // 410 s16 phi_t2_4; s16 phi_ra; - // 40C s32 sp358[9 * 5]; s32 sp2A4[9 * 5]; s32 sp1F0[9 * 5]; s32 sp13C[9 * 5]; s32 sp88[9 * 5]; - s32* temp358; - s32* temp2A4; - s32* temp1F0; - s32* temp13C; - s32* temp88; - s16 temp3; + s32 pad; switch (arg8) { case 0: case 2: - temp358 = sp358; - temp2A4 = sp2A4; - temp1F0 = sp1F0; - temp13C = sp13C; - temp88 = sp88; pad428 = arg4; - for (i = 0; temp88 < sp88 + 45; pad428 += arg7, i++) { + for (i = 0, k = 0; k < 45; i++) { pad42C = arg3; - temp3 = D_8012AD2C[i]; - for (j = 0; j < 5; j++, pad42C += arg6) { - *(temp358++) = pad42C; - *(temp2A4++) = pad428; - *(temp1F0++) = arg5; - *(temp13C++) = D_8012AD20[j]; - *(temp88++) = temp3; + for (j = 0; j < 5; j++, k++) { + sp1F0[k] = arg5; + sp358[k] = pad42C; + sp2A4[k] = pad428; + sp13C[k] = D_8012AD20[j]; + sp88[k] = D_8012AD2C[i]; + pad42C += arg6; } + pad428 += arg7; } - // for (i = 0; i < 9; i++) { - // for (j = 0; j < 5; j++) { - // sp358[i][j] = arg3 + j * arg6; - // sp2A4[i][j] = arg4 + i * arg7; - // sp1F0[i][j] = arg5; - // sp13C[i][j] = D_8012AD20[j]; - // sp88[i][j] = D_8012AD2C[i]; - // } - // } break; + case 1: case 3: - temp358 = sp358; - temp2A4 = sp2A4; - temp1F0 = sp1F0; - temp13C = sp13C; - temp88 = sp88; pad428 = arg4; - for (i = 0; temp88 < sp88 + 9 * 5; pad428 += arg7, i++) { + for (i = 0, k = 0; k < 45; i++) { pad42C = arg5; - temp3 = D_8012AD2C[i]; - for (j = 0; j < 5; j++, pad42C += arg6) { - *(temp358++) = arg3; - *(temp2A4++) = pad428; - *(temp1F0++) = pad42C; - *(temp13C++) = D_8012AD20[j]; - *(temp88++) = temp3; + for (j = 0; j < 5; j++, k++) { + sp358[k] = arg3; + sp2A4[k] = pad428; + sp1F0[k] = pad42C; + sp13C[k] = D_8012AD20[j]; + sp88[k] = D_8012AD2C[i]; + pad42C += arg6; } + pad428 += arg7; } - // for (i = 0; i < 9; i++) { - // for (j = 0; j < 5; j++) { - // sp358[i][j] = arg3; - // sp2A4[i][j] = arg4 + i * arg7; - // sp1F0[i][j] = arg5 + j * arg6; - // sp13C[i][j] = D_8012AD20[j]; - // sp88[i][j] = D_8012AD2C[i]; - // } - // } break; + case 4: case 5: - temp358 = sp358; - temp2A4 = sp2A4; - temp1F0 = sp1F0; - temp13C = sp13C; - temp88 = sp88; pad428 = arg5; - for (i = 0; temp88 < sp88 + 9 * 5; pad428 += arg7, i++) { + for (i = 0, k = 0; k < 45; i++) { pad42C = arg3; - temp3 = D_8012AD2C[i]; - for (j = 0; j < 5; j++, pad42C += arg6) { - *(temp358++) = pad42C; - *(temp2A4++) = arg4; - *(temp1F0++) = pad428; - *(temp13C++) = D_8012AD20[j]; - *(temp88++) = temp3; + for (j = 0; j < 5; j++, k++) { + sp2A4[k] = arg4; + sp358[k] = pad42C; + sp1F0[k] = pad428; + sp13C[k] = D_8012AD20[j]; + sp88[k] = D_8012AD2C[i]; + pad42C += arg6; } + pad428 += arg7; } - // for (i = 0; i < 9; i++) { - // for (j = 0; j < 5; j++) { - // sp358[i][j] = arg3 + j * arg6; - // sp2A4[i][j] = arg4; - // sp1F0[i][j] = arg5 + i * arg7; - // sp13C[i][j] = D_8012AD20[j]; - // sp88[i][j] = D_8012AD2C[i]; - // } - // } break; } for (phi_a2_4 = 0, sp424 = 0; sp424 < 2; sp424++) { skyboxCtx->unk_138 = skyboxCtx->dListBuf[arg9 + sp424]; - for (pad420 = 0; pad420 < 0x20; pad420++) { - index = D_8012ACA0[sp424][pad420]; - - roomVtx[arg2 + pad420].v.ob[0] = sp358[index]; - roomVtx[arg2 + pad420].v.ob[1] = sp2A4[index]; - roomVtx[arg2 + pad420].v.ob[2] = sp1F0[index]; - roomVtx[arg2 + pad420].v.flag = 0; - roomVtx[arg2 + pad420].v.tc[0] = sp13C[index]; - roomVtx[arg2 + pad420].v.tc[1] = sp88[index]; - roomVtx[arg2 + pad420].v.cn[1] = 0; - roomVtx[arg2 + pad420].v.cn[2] = 0; - roomVtx[arg2 + pad420].v.cn[0] = 255; + for (i = 0; i < 0x20; i++) { + index = D_8012ACA0[sp424][i]; + + roomVtx[arg2 + i].v.ob[0] = sp358[index]; + roomVtx[arg2 + i].v.ob[1] = sp2A4[index]; + roomVtx[arg2 + i].v.ob[2] = sp1F0[index]; + roomVtx[arg2 + i].v.flag = 0; + roomVtx[arg2 + i].v.tc[0] = sp13C[index]; + roomVtx[arg2 + i].v.tc[1] = sp88[index]; + roomVtx[arg2 + i].v.cn[1] = 0; + roomVtx[arg2 + i].v.cn[2] = 0; + roomVtx[arg2 + i].v.cn[0] = 255; } gSPVertex(skyboxCtx->unk_138++, &roomVtx[arg2], 32, 0); - arg2 += pad420; + arg2 += i; gSPCullDisplayList(skyboxCtx->unk_138++, 0, 15); for (phi_t2_4 = 0, phi_ra = 0; phi_ra < 4; phi_ra++, phi_a2_4 += 0x1F) { @@ -243,158 +190,99 @@ s32 func_800ADBB0(SkyboxContext* skyboxCtx, Vtx* roomVtx, s32 arg2, s32 arg3, s3 } return arg2; } -#else -s32 func_800ADBB0(SkyboxContext* skyboxCtx, Vtx* roomVtx, s32, UNK_TYPE, UNK_TYPE, UNK_TYPE, UNK_TYPE, UNK_TYPE, s32, - s32); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_vr_box/func_800ADBB0.s") -#endif - -#ifdef NON_MATCHING -// Loops have very strange structure. In principle, they're the double loop over a 2D array shown below them. -// However, that gives wildly different codegen and the part after the switch suggests a linear array. + s32 func_800AE2C0(SkyboxContext* skyboxCtx, Vtx* roomVtx, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6, s32 arg7, s32 arg8) { - s32 pad334; - s32 pad330; s32 i; - // 32C s32 j; - // 328 - s16 phi_a2_4; + s32 k; s16 phi_a0_4; - // 324 s16 phi_t1; + s32 temp1; u16 index; - // 320 - s16 sp320; - s16 sp31E; - // 31C - s16 phi_t2_4; + s16 phi_a2_4; s16 phi_ra; - // 318 + s16 phi_t2_4; + s32 temp2; s32 sp2B4[5 * 5]; s32 sp250[5 * 5]; s32 sp1EC[5 * 5]; s32 sp188[5 * 5]; s32 sp124[5 * 5]; - s32* temp2B4; - s32* temp250; - s32* temp1EC; - s32* temp188; - s32* temp124; - s32 temp1; - s32 temp2; - s16 temp3; + s32 pad; switch (arg8) { case 0: case 1: - temp2B4 = sp2B4; - temp250 = sp250; - temp1EC = sp1EC; - temp188 = sp188; - temp124 = sp124; temp1 = arg4; - for (i = 0; temp124 < sp124 + 5 * 5; temp1 += arg7, i++) { + for (i = 0, k = 0; k < 25; i++) { temp2 = arg3; - temp3 = D_8012AE30[i]; - for (j = 0; j < 5; j++, temp2 += arg6) { - *(temp2B4++) = temp2; - *(temp250++) = temp1; - *(temp1EC++) = arg5; - *(temp188++) = D_8012AE18[j]; - *(temp124++) = temp3; + for (j = 0; j < 5; j++, k++) { + sp1EC[k] = arg5; + sp2B4[k] = temp2; + sp250[k] = temp1; + sp188[k] = D_8012AE18[j]; + sp124[k] = D_8012AE30[i]; + temp2 += arg6; } + temp1 += arg7; } - // for (i = 0; i < 5; i++) { - // for (j = 0; j < 5; j++) { - // sp2B4[i][j] = arg3 + j * arg6; - // sp250[i][j] = arg4 + i * arg7; - // sp1EC[i][j] = arg5; - // sp188[i][j] = D_8012AE18[j]; - // sp124[i][j] = D_8012AE30[i]; - // } - // } break; + case 2: case 3: - temp2B4 = sp2B4; - temp250 = sp250; - temp1EC = sp1EC; - temp188 = sp188; - temp124 = sp124; temp1 = arg4; - for (i = 0; temp124 < sp124 + 5 * 5; temp1 += arg7, i++) { + for (i = 0, k = 0; k < 25; i++) { temp2 = arg5; - temp3 = D_8012AE30[i]; - for (j = 0; j < 5; j++, temp2 += arg6) { - *(temp2B4++) = arg3; - *(temp250++) = temp1; - *(temp1EC++) = temp2; - *(temp188++) = D_8012AE18[j]; - *(temp124++) = temp3; + for (j = 0; j < 5; j++, k++) { + sp2B4[k] = arg3; + sp250[k] = temp1; + sp1EC[k] = temp2; + sp188[k] = D_8012AE18[j]; + sp124[k] = D_8012AE30[i]; + temp2 += arg6; } + temp1 += arg7; } - // for (i = 0; i < 5; i++) { - // for (j = 0; j < 5; j++) { - // sp2B4[i][j] = arg3; - // sp250[i][j] = arg4 + i * arg7; - // sp1EC[i][j] = arg5 + j * arg6; - // sp188[i][j] = D_8012AE18[j]; - // sp124[i][j] = D_8012AE30[i]; - // } - // } break; + case 4: case 5: - temp2B4 = sp2B4; - temp250 = sp250; - temp1EC = sp1EC; - temp188 = sp188; - temp124 = sp124; temp1 = arg5; - for (i = 0; temp124 < sp124 + 5 * 5; temp1 += arg7, i++) { + for (i = 0, k = 0; k < 25; i++) { temp2 = arg3; - temp3 = D_8012AE24[i]; - for (j = 0; j < 5; j++, temp2 += arg6) { - *(temp2B4++) = temp2; - *(temp250++) = arg4; - *(temp1EC++) = temp1; - *(temp188++) = D_8012AE18[j]; - *(temp124++) = temp3; + for (j = 0; j < 5; j++, k++) { + sp250[k] = arg4; + sp2B4[k] = temp2; + sp1EC[k] = temp1; + sp188[k] = D_8012AE18[j]; + sp124[k] = D_8012AE24[i]; + temp2 += arg6; } + temp1 += arg7; } - // for (i = 0; i < 5; i++) { - // for (j = 0; j < 5; j++) { - // sp2B4[i][j] = arg3 + j * arg6; - // sp250[i][j] = arg4; - // sp1EC[i][j] = arg5 + i * arg7; - // sp188[i][j] = D_8012AE18[j]; - // sp124[i][j] = D_8012AE24[i]; - // } - // } break; } skyboxCtx->unk_138 = &skyboxCtx->dListBuf[2 * arg8]; - for (pad330 = 0; pad330 < 0x20; pad330++) { - index = D_8012ADD8[pad330]; - - roomVtx[arg2 + pad330].v.ob[0] = sp2B4[index]; - roomVtx[arg2 + pad330].v.ob[1] = sp250[index]; - roomVtx[arg2 + pad330].v.ob[2] = sp1EC[index]; - roomVtx[arg2 + pad330].v.flag = 0; - roomVtx[arg2 + pad330].v.tc[0] = sp188[index]; - roomVtx[arg2 + pad330].v.tc[1] = sp124[index]; - roomVtx[arg2 + pad330].v.cn[1] = 0; - roomVtx[arg2 + pad330].v.cn[2] = 0; - roomVtx[arg2 + pad330].v.cn[0] = 255; + for (i = 0; i < 0x20; i++) { + index = D_8012ADD8[i]; + + roomVtx[arg2 + i].v.ob[0] = sp2B4[index]; + roomVtx[arg2 + i].v.ob[1] = sp250[index]; + roomVtx[arg2 + i].v.ob[2] = sp1EC[index]; + roomVtx[arg2 + i].v.flag = 0; + roomVtx[arg2 + i].v.tc[0] = sp188[index]; + roomVtx[arg2 + i].v.tc[1] = sp124[index]; + roomVtx[arg2 + i].v.cn[1] = 0; + roomVtx[arg2 + i].v.cn[2] = 0; + roomVtx[arg2 + i].v.cn[0] = 255; } gSPVertex(skyboxCtx->unk_138++, &roomVtx[arg2], 32, 0); - arg2 += pad330; + arg2 += i; gSPCullDisplayList(skyboxCtx->unk_138++, 0, 15); if ((arg8 == 4) || (arg8 == 5)) { @@ -448,10 +336,6 @@ s32 func_800AE2C0(SkyboxContext* skyboxCtx, Vtx* roomVtx, s32 arg2, s32 arg3, s3 gSPEndDisplayList(skyboxCtx->unk_138++); return arg2; } -#else -s32 func_800AE2C0(SkyboxContext* skyboxCtx, Vtx* roomVtx, s32, UNK_TYPE, UNK_TYPE, UNK_TYPE, UNK_TYPE, UNK_TYPE, s32); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_vr_box/func_800AE2C0.s") -#endif void func_800AEFC8(SkyboxContext* skyboxCtx, s16 skyboxId) { s32 i; |
