From b18227e6adade59babf84a5ae4b26374602c39fb Mon Sep 17 00:00:00 2001 From: petrie911 <69443847+petrie911@users.noreply.github.com> Date: Tue, 21 Sep 2021 03:48:43 -0500 Subject: [PATCH] Decomp the remaining functions in vr_box and import its data (#917) * stuff * not quite there * data imported * fixed some things and adjusted sSetupDLs * remove setup dls * remove alloc casts * format * palette swap * Update src/code/z_vr_box_draw.c Co-authored-by: Dragorn421 * improved loop matches * fixed some comments * format and adjustments * palettes Co-authored-by: petrie911 Co-authored-by: Dragorn421 --- assets/xml/objects/object_zl2.xml | 2 +- data/z_vr_box.data.s | 49 --- include/z64.h | 9 +- include/z64environment.h | 2 +- spec | 1 - src/code/z_kankyo.c | 26 +- src/code/z_vr_box.c | 627 +++++++++++++++++++++++++----- src/code/z_vr_box_draw.c | 42 +- 8 files changed, 566 insertions(+), 192 deletions(-) delete mode 100644 data/z_vr_box.data.s diff --git a/assets/xml/objects/object_zl2.xml b/assets/xml/objects/object_zl2.xml index 9c7a6e681b..71be043317 100644 --- a/assets/xml/objects/object_zl2.xml +++ b/assets/xml/objects/object_zl2.xml @@ -27,7 +27,7 @@ - + diff --git a/data/z_vr_box.data.s b/data/z_vr_box.data.s deleted file mode 100644 index 92c30ab5c3..0000000000 --- a/data/z_vr_box.data.s +++ /dev/null @@ -1,49 +0,0 @@ -.include "macro.inc" - -# assembler directives -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches -.set gp=64 # allow use of 64-bit general purpose registers - -.section .data - -.balign 16 - -glabel D_8012AC90 - .incbin "baserom.z64", 0xBA1E30, 0x10 - -glabel D_8012ACA0 - .incbin "baserom.z64", 0xBA1E40, 0x80 - -glabel D_8012AD20 - .incbin "baserom.z64", 0xBA1EC0, 0xC - -glabel D_8012AD2C - .incbin "baserom.z64", 0xBA1ECC, 0x14 - -glabel D_8012AD40 - .incbin "baserom.z64", 0xBA1EE0, 0x80 - -glabel D_8012ADC0 - .incbin "baserom.z64", 0xBA1F60, 0x18 - -glabel D_8012ADD8 - .incbin "baserom.z64", 0xBA1F78, 0x40 - -glabel D_8012AE18 - .incbin "baserom.z64", 0xBA1FB8, 0xC - -glabel D_8012AE24 - .incbin "baserom.z64", 0xBA1FC4, 0xC - -glabel D_8012AE30 - .incbin "baserom.z64", 0xBA1FD0, 0xC - -glabel D_8012AE3C - .incbin "baserom.z64", 0xBA1FDC, 0x80 - -glabel D_8012AEBC - .incbin "baserom.z64", 0xBA205C, 0x50 - -glabel D_8012AF0C - .incbin "baserom.z64", 0xBA20AC, 0x84 diff --git a/include/z64.h b/include/z64.h index 060ca295ee..000e591d14 100644 --- a/include/z64.h +++ b/include/z64.h @@ -322,10 +322,11 @@ typedef enum { typedef struct { /* 0x000 */ char unk_00[0x128]; - /* 0x128 */ void* staticSegments[3]; - /* 0x134 */ Gfx* dListBuf; + /* 0x128 */ void* staticSegments[2]; + /* 0x130 */ u16 (*palettes)[256]; + /* 0x134 */ Gfx (*dListBuf)[150]; /* 0x138 */ Gfx* unk_138; - /* 0x13C */ void* roomVtx; + /* 0x13C */ Vtx* roomVtx; /* 0x140 */ s16 unk_140; /* 0x144 */ Vec3f rot; /* 0x150 */ char unk_150[0x10]; @@ -1776,7 +1777,7 @@ typedef struct { typedef struct { /* 0x00 */ RomFile file; - /* 0x08 */ RomFile pallete; + /* 0x08 */ RomFile palette; } SkyboxFile; // size = 0x10 #define ROM_FILE(name) \ diff --git a/include/z64environment.h b/include/z64environment.h index 6369b95750..b2badccd37 100644 --- a/include/z64environment.h +++ b/include/z64environment.h @@ -43,7 +43,7 @@ typedef struct { typedef struct { /* 0x00 */ u16 startTime; /* 0x02 */ u16 endTime; - /* 0x04 */ u8 blend; // if true, blend between.. skyboxes? palletes? + /* 0x04 */ u8 blend; // if true, blend between.. skyboxes? palettes? /* 0x05 */ u8 skybox1Index; // whats the difference between _pal and non _pal files? /* 0x06 */ u8 skybox2Index; } struct_8011FC1C; // size = 0x8 diff --git a/spec b/spec index b314bee58f..d0a6bb7321 100644 --- a/spec +++ b/spec @@ -358,7 +358,6 @@ beginseg include "build/src/code/z_vismono.o" include "build/src/code/code_800AD920.o" include "build/src/code/z_vr_box.o" - include "build/data/z_vr_box.data.o" include "build/src/code/z_vr_box_draw.o" include "build/src/code/z_player_call.o" include "build/src/code/z_fbdemo.o" diff --git a/src/code/z_kankyo.c b/src/code/z_kankyo.c index 92aeeeeaef..9681064f4d 100644 --- a/src/code/z_kankyo.c +++ b/src/code/z_kankyo.c @@ -696,16 +696,17 @@ void Environment_UpdateSkybox(u8 skyboxId, EnvironmentContext* envCtx, SkyboxCon envCtx->skyboxDmaState = SKYBOX_DMA_PAL1_START; if ((newSkybox1Index & 1) ^ ((newSkybox1Index & 4) >> 2)) { - size = gSkyboxFiles[newSkybox1Index].pallete.vromEnd - gSkyboxFiles[newSkybox1Index].pallete.vromStart; + size = gSkyboxFiles[newSkybox1Index].palette.vromEnd - gSkyboxFiles[newSkybox1Index].palette.vromStart; + osCreateMesgQueue(&envCtx->loadQueue, &envCtx->loadMsg, 1); - DmaMgr_SendRequest2(&envCtx->dmaRequest, (u32)skyboxCtx->staticSegments[2], - gSkyboxFiles[newSkybox1Index].pallete.vromStart, size, 0, &envCtx->loadQueue, NULL, + DmaMgr_SendRequest2(&envCtx->dmaRequest, (u32)skyboxCtx->palettes, + gSkyboxFiles[newSkybox1Index].palette.vromStart, size, 0, &envCtx->loadQueue, NULL, "../z_kankyo.c", 1307); } else { - size = gSkyboxFiles[newSkybox1Index].pallete.vromEnd - gSkyboxFiles[newSkybox1Index].pallete.vromStart; + size = gSkyboxFiles[newSkybox1Index].palette.vromEnd - gSkyboxFiles[newSkybox1Index].palette.vromStart; osCreateMesgQueue(&envCtx->loadQueue, &envCtx->loadMsg, 1); - DmaMgr_SendRequest2(&envCtx->dmaRequest, (u32)skyboxCtx->staticSegments[2] + size, - gSkyboxFiles[newSkybox1Index].pallete.vromStart, size, 0, &envCtx->loadQueue, NULL, + DmaMgr_SendRequest2(&envCtx->dmaRequest, (u32)skyboxCtx->palettes + size, + gSkyboxFiles[newSkybox1Index].palette.vromStart, size, 0, &envCtx->loadQueue, NULL, "../z_kankyo.c", 1320); } } @@ -714,16 +715,17 @@ void Environment_UpdateSkybox(u8 skyboxId, EnvironmentContext* envCtx, SkyboxCon envCtx->skyboxDmaState = SKYBOX_DMA_PAL2_START; if ((newSkybox2Index & 1) ^ ((newSkybox2Index & 4) >> 2)) { - size = gSkyboxFiles[newSkybox2Index].pallete.vromEnd - gSkyboxFiles[newSkybox2Index].pallete.vromStart; + size = gSkyboxFiles[newSkybox2Index].palette.vromEnd - gSkyboxFiles[newSkybox2Index].palette.vromStart; + osCreateMesgQueue(&envCtx->loadQueue, &envCtx->loadMsg, 1); - DmaMgr_SendRequest2(&envCtx->dmaRequest, (u32)skyboxCtx->staticSegments[2], - gSkyboxFiles[newSkybox2Index].pallete.vromStart, size, 0, &envCtx->loadQueue, NULL, + DmaMgr_SendRequest2(&envCtx->dmaRequest, (u32)skyboxCtx->palettes, + gSkyboxFiles[newSkybox2Index].palette.vromStart, size, 0, &envCtx->loadQueue, NULL, "../z_kankyo.c", 1342); } else { - size = gSkyboxFiles[newSkybox2Index].pallete.vromEnd - gSkyboxFiles[newSkybox2Index].pallete.vromStart; + size = gSkyboxFiles[newSkybox2Index].palette.vromEnd - gSkyboxFiles[newSkybox2Index].palette.vromStart; osCreateMesgQueue(&envCtx->loadQueue, &envCtx->loadMsg, 1); - DmaMgr_SendRequest2(&envCtx->dmaRequest, (u32)skyboxCtx->staticSegments[2] + size, - gSkyboxFiles[newSkybox2Index].pallete.vromStart, size, 0, &envCtx->loadQueue, NULL, + DmaMgr_SendRequest2(&envCtx->dmaRequest, (u32)skyboxCtx->palettes + size, + gSkyboxFiles[newSkybox2Index].palette.vromStart, size, 0, &envCtx->loadQueue, NULL, "../z_kankyo.c", 1355); } } diff --git a/src/code/z_vr_box.c b/src/code/z_vr_box.c index 4d603ee368..87c0ebd33b 100644 --- a/src/code/z_vr_box.c +++ b/src/code/z_vr_box.c @@ -2,6 +2,63 @@ #include "vt.h" #include "z64environment.h" +u32 D_8012AC90[4] = { + 0x00000000, + 0x00010000, + 0x00020000, + 0x00030000, +}; + +u16 D_8012ACA0[2][0x20] = { + { 0x00, 0x02, 0x0A, 0x0C, 0x02, 0x04, 0x0C, 0x0E, 0x0A, 0x0C, 0x14, 0x16, 0x0C, 0x0E, 0x16, 0x18, + 0x01, 0x03, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0B, 0x0D, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x15, 0x17 }, + { 0x14, 0x16, 0x1E, 0x20, 0x16, 0x18, 0x20, 0x22, 0x1E, 0x20, 0x28, 0x2A, 0x20, 0x22, 0x2A, 0x2C, + 0x15, 0x17, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1F, 0x21, 0x23, 0x24, 0x25, 0x26, 0x27, 0x29, 0x2B }, +}; + +s16 D_8012AD20[5] = { + 0x0000, 0x0FC0, 0x1F80, 0x2F40, 0x3F00, +}; + +s16 D_8012AD2C[9] = { + 0x0000, 0x07C0, 0x0F80, 0x1740, 0x1F00, 0x26C0, 0x2E80, 0x3640, 0x3E00, +}; + +s16 D_8012AD40[0x40] = { + 0x00, 0x10, 0x13, 0x12, 0x10, 0x01, 0x14, 0x13, 0x01, 0x11, 0x15, 0x14, 0x11, 0x05, 0x16, 0x15, + 0x12, 0x13, 0x17, 0x02, 0x13, 0x14, 0x03, 0x17, 0x14, 0x15, 0x18, 0x03, 0x15, 0x16, 0x07, 0x18, + 0x02, 0x17, 0x1A, 0x19, 0x17, 0x03, 0x1B, 0x1A, 0x03, 0x18, 0x1C, 0x1B, 0x18, 0x07, 0x1D, 0x1C, + 0x19, 0x1A, 0x1E, 0x0A, 0x1A, 0x1B, 0x0B, 0x1E, 0x1B, 0x1C, 0x1F, 0x0B, 0x1C, 0x1D, 0x0F, 0x1F, +}; + +u32 D_8012ADC0[6] = { + 0x00000000, 0x00002000, 0x00004000, 0x00006000, 0x00008000, 0x0000C000, +}; + +u16 D_8012ADD8[0x20] = { + 0x00, 0x02, 0x0A, 0x0C, 0x02, 0x04, 0x0C, 0x0E, 0x0A, 0x0C, 0x14, 0x16, 0x0C, 0x0E, 0x16, 0x18, + 0x01, 0x03, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0B, 0x0D, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x15, 0x17, +}; + +s16 D_8012AE18[5] = { + 0x0000, 0x07C0, 0x0F80, 0x1740, 0x1F00, +}; + +s16 D_8012AE24[5] = { + 0x0000, 0x07C0, 0x0F80, 0x1740, 0x1F00, +}; + +s16 D_8012AE30[5] = { + 0x0000, 0x07C0, 0x0F80, 0x07C0, 0x0000, +}; + +s16 D_8012AE3C[0x40] = { + 0x00, 0x10, 0x13, 0x12, 0x10, 0x01, 0x14, 0x13, 0x01, 0x11, 0x15, 0x14, 0x11, 0x05, 0x16, 0x15, + 0x12, 0x13, 0x17, 0x02, 0x13, 0x14, 0x03, 0x17, 0x14, 0x15, 0x18, 0x03, 0x15, 0x16, 0x07, 0x18, + 0x02, 0x17, 0x1A, 0x19, 0x17, 0x03, 0x1B, 0x1A, 0x03, 0x18, 0x1C, 0x1B, 0x18, 0x07, 0x1D, 0x1C, + 0x19, 0x1A, 0x1E, 0x0A, 0x1A, 0x1B, 0x0B, 0x1E, 0x1B, 0x1C, 0x1F, 0x0B, 0x1C, 0x1D, 0x0F, 0x1F, +}; + typedef struct { /* 0x000 */ s32 unk_0; /* 0x004 */ s32 unk_4; @@ -10,23 +67,391 @@ typedef struct { /* 0x010 */ s32 unk_10; } Struct_8012AF0C; // size = 0x14 -extern Struct_8012AF0C D_8012AF0C[6]; -extern Struct_8012AF0C D_8012AEBC[4]; -extern struct_8011FC1C D_8011FC1C[][9]; +Struct_8012AF0C D_8012AEBC[4] = { + { -0x7E, 0x7C, -0x7E, 0x3F, -0x1F }, + { 0x7E, 0x7C, -0x7E, 0x3F, -0x1F }, + { 0x7E, 0x7C, 0x7E, -0x3F, -0x1F }, + { -0x7E, 0x7C, 0x7E, -0x3F, -0x1F }, +}; -typedef struct { - /* 0x00 */ u32 unk_0; // start - /* 0x04 */ u32 unk_4; // end - /* 0x08 */ u32 unk_8; // pal start - /* 0x0C */ u32 unk_C; // pal end -} Struct_8011FD3C; // size = 0x10 +Struct_8012AF0C D_8012AF0C[6] = { + { -0x40, 0x40, -0x40, 0x20, -0x20 }, { 0x40, 0x40, 0x40, -0x20, -0x20 }, { -0x40, 0x40, 0x40, -0x20, -0x20 }, + { 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 + 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; + + 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++) { + 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 (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++) { + 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 (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++) { + 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 (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; + } + gSPVertex(skyboxCtx->unk_138++, &roomVtx[arg2], 32, 0); + arg2 += pad420; + gSPCullDisplayList(skyboxCtx->unk_138++, 0, 15); + + for (phi_t2_4 = 0, phi_ra = 0; phi_ra < 4; phi_ra++, phi_a2_4 += 0x1F) { + for (phi_a0_4 = 0, phi_t1 = 0; phi_t1 < 4; phi_t1++, phi_a0_4 += 0x3F, phi_t2_4 += 4) { + gDPLoadTextureTile(skyboxCtx->unk_138++, (u32)skyboxCtx->staticSegments[0] + D_8012AC90[arg8], + G_IM_FMT_CI, G_IM_SIZ_8b, 256, 0, phi_a0_4, phi_a2_4, phi_a0_4 + 0x3F, + phi_a2_4 + 0x1F, 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); + gSP1Quadrangle(skyboxCtx->unk_138++, D_8012AD40[phi_t2_4 + 1], D_8012AD40[phi_t2_4 + 2], + D_8012AD40[phi_t2_4 + 3], D_8012AD40[phi_t2_4 + 0], 3); + } + } + gSPEndDisplayList(skyboxCtx->unk_138++); + } + 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; + s16 phi_a0_4; + // 324 + s16 phi_t1; + u16 index; + // 320 + s16 sp320; + s16 sp31E; + // 31C + s16 phi_t2_4; + s16 phi_ra; + // 318 + 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; + + 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++) { + 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 (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++) { + 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 (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++) { + 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 (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; + } + gSPVertex(skyboxCtx->unk_138++, &roomVtx[arg2], 32, 0); + arg2 += pad330; + gSPCullDisplayList(skyboxCtx->unk_138++, 0, 15); + + if ((arg8 == 4) || (arg8 == 5)) { + phi_a2_4 = 0; + for (phi_t2_4 = 0, phi_ra = 0; phi_ra < 4; phi_ra++, phi_a2_4 += 0x1F) { + for (phi_a0_4 = 0, phi_t1 = 0; phi_t1 < 4; phi_t1++, phi_a0_4 += 0x1F, phi_t2_4 += 4) { + gDPLoadMultiTile(skyboxCtx->unk_138++, (u32)skyboxCtx->staticSegments[0] + D_8012ADC0[arg8], 0, + G_TX_RENDERTILE, G_IM_FMT_CI, G_IM_SIZ_8b, 128, 0, phi_a0_4, phi_a2_4, phi_a0_4 + 0x1F, + phi_a2_4 + 0x1F, 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); + gDPLoadMultiTile(skyboxCtx->unk_138++, (u32)skyboxCtx->staticSegments[1] + D_8012ADC0[arg8], 0x80, 1, + G_IM_FMT_CI, G_IM_SIZ_8b, 128, 0, phi_a0_4, phi_a2_4, phi_a0_4 + 0x1F, phi_a2_4 + 0x1F, + 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); + gSP1Quadrangle(skyboxCtx->unk_138++, D_8012AE3C[phi_t2_4 + 1], D_8012AE3C[phi_t2_4 + 2], + D_8012AE3C[phi_t2_4 + 3], D_8012AE3C[phi_t2_4 + 0], 3); + } + } + } else { + phi_a2_4 = 0; + for (phi_t2_4 = 0, phi_ra = 0; phi_ra < 2; phi_ra++, phi_a2_4 += 0x1F) { + for (phi_a0_4 = 0, phi_t1 = 0; phi_t1 < 4; phi_t1++, phi_a0_4 += 0x1F, phi_t2_4 += 4) { + gDPLoadMultiTile(skyboxCtx->unk_138++, (u32)skyboxCtx->staticSegments[0] + D_8012ADC0[arg8], 0, + G_TX_RENDERTILE, G_IM_FMT_CI, G_IM_SIZ_8b, 128, 0, phi_a0_4, phi_a2_4, phi_a0_4 + 0x1F, + phi_a2_4 + 0x1F, 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); + gDPLoadMultiTile(skyboxCtx->unk_138++, (u32)skyboxCtx->staticSegments[1] + D_8012ADC0[arg8], 0x80, 1, + G_IM_FMT_CI, G_IM_SIZ_8b, 128, 0, phi_a0_4, phi_a2_4, phi_a0_4 + 0x1F, phi_a2_4 + 0x1F, + 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); + gSP1Quadrangle(skyboxCtx->unk_138++, D_8012AE3C[phi_t2_4 + 1], D_8012AE3C[phi_t2_4 + 2], + D_8012AE3C[phi_t2_4 + 3], D_8012AE3C[phi_t2_4 + 0], 3); + } + } + phi_a2_4 -= 0x1F; + for (phi_ra = 0; phi_ra < 2; phi_ra++, phi_a2_4 -= 0x1F) { + for (phi_a0_4 = 0, phi_t1 = 0; phi_t1 < 4; phi_t1++, phi_a0_4 += 0x1F, phi_t2_4 += 4) { + gDPLoadMultiTile(skyboxCtx->unk_138++, (u32)skyboxCtx->staticSegments[0] + D_8012ADC0[arg8], 0, + G_TX_RENDERTILE, G_IM_FMT_CI, G_IM_SIZ_8b, 128, 0, phi_a0_4, phi_a2_4, phi_a0_4 + 0x1F, + phi_a2_4 + 0x1F, 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); + gDPLoadMultiTile(skyboxCtx->unk_138++, (u32)skyboxCtx->staticSegments[1] + D_8012ADC0[arg8], 0x80, 1, + G_IM_FMT_CI, G_IM_SIZ_8b, 128, 0, phi_a0_4, phi_a2_4, phi_a0_4 + 0x1F, phi_a2_4 + 0x1F, + 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); + gSP1Quadrangle(skyboxCtx->unk_138++, D_8012AE3C[phi_t2_4 + 1], D_8012AE3C[phi_t2_4 + 2], + D_8012AE3C[phi_t2_4 + 3], D_8012AE3C[phi_t2_4 + 0], 3); + } + } + } + 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; @@ -112,27 +537,27 @@ void Skybox_Setup(GlobalContext* globalCtx, SkyboxContext* skyboxCtx, s16 skybox 1064); if ((sp41 & 1) ^ ((sp41 & 4) >> 2)) { - size = gSkyboxFiles[sp41].pallete.vromEnd - gSkyboxFiles[sp41].pallete.vromStart; - skyboxCtx->staticSegments[2] = GameState_Alloc(&globalCtx->state, size * 2, "../z_vr_box.c", 1072); + size = gSkyboxFiles[sp41].palette.vromEnd - gSkyboxFiles[sp41].palette.vromStart; - ASSERT(skyboxCtx->staticSegments[2] != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", + skyboxCtx->palettes = GameState_Alloc(&globalCtx->state, size * 2, "../z_vr_box.c", 1072); + + ASSERT(skyboxCtx->palettes != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", 1073); - DmaMgr_SendRequest1(skyboxCtx->staticSegments[2], gSkyboxFiles[sp41].pallete.vromStart, size, - "../z_vr_box.c", 1075); - DmaMgr_SendRequest1((u32)skyboxCtx->staticSegments[2] + size, gSkyboxFiles[sp40].pallete.vromStart, - size, "../z_vr_box.c", 1077); + DmaMgr_SendRequest1(skyboxCtx->palettes, gSkyboxFiles[sp41].palette.vromStart, size, "../z_vr_box.c", 1075); + DmaMgr_SendRequest1((u32)skyboxCtx->palettes + size, gSkyboxFiles[sp40].palette.vromStart, size, + "../z_vr_box.c", 1077); } else { - size = gSkyboxFiles[sp41].pallete.vromEnd - gSkyboxFiles[sp41].pallete.vromStart; - skyboxCtx->staticSegments[2] = GameState_Alloc(&globalCtx->state, size * 2, "../z_vr_box.c", 1085); + size = gSkyboxFiles[sp41].palette.vromEnd - gSkyboxFiles[sp41].palette.vromStart; - ASSERT(skyboxCtx->staticSegments[2] != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", + skyboxCtx->palettes = GameState_Alloc(&globalCtx->state, size * 2, "../z_vr_box.c", 1085); + + ASSERT(skyboxCtx->palettes != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", 1086); - DmaMgr_SendRequest1(skyboxCtx->staticSegments[2], gSkyboxFiles[sp40].pallete.vromStart, size, - "../z_vr_box.c", 1088); - DmaMgr_SendRequest1((u32)skyboxCtx->staticSegments[2] + size, gSkyboxFiles[sp41].pallete.vromStart, - size, "../z_vr_box.c", 1090); + DmaMgr_SendRequest1(skyboxCtx->palettes, gSkyboxFiles[sp40].palette.vromStart, size, "../z_vr_box.c", 1088); + DmaMgr_SendRequest1((u32)skyboxCtx->palettes + size, gSkyboxFiles[sp41].palette.vromStart, size, + "../z_vr_box.c", 1090); } break; @@ -149,11 +574,11 @@ void Skybox_Setup(GlobalContext* globalCtx, SkyboxContext* skyboxCtx, s16 skybox start = _vr_SP1a_pal_staticSegmentRomStart; size = _vr_SP1a_pal_staticSegmentRomEnd - start; - skyboxCtx->staticSegments[2] = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1132); - ASSERT(skyboxCtx->staticSegments[2] != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", + skyboxCtx->palettes = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1132); + ASSERT(skyboxCtx->palettes != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", 1133); - DmaMgr_SendRequest1(skyboxCtx->staticSegments[2], start, size, "../z_vr_box.c", 1134); + DmaMgr_SendRequest1(skyboxCtx->palettes, start, size, "../z_vr_box.c", 1134); skyboxCtx->rot.y = 0.8f; break; case SKYBOX_OVERCAST_SUNSET: @@ -173,12 +598,12 @@ void Skybox_Setup(GlobalContext* globalCtx, SkyboxContext* skyboxCtx, s16 skybox start = _vr_cloud2_pal_staticSegmentRomStart; size = _vr_cloud2_pal_staticSegmentRomEnd - start; - skyboxCtx->staticSegments[2] = GameState_Alloc(&globalCtx->state, size * 2, "../z_vr_box.c", 1170); - ASSERT(skyboxCtx->staticSegments[2] != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", + skyboxCtx->palettes = GameState_Alloc(&globalCtx->state, size * 2, "../z_vr_box.c", 1170); + ASSERT(skyboxCtx->palettes != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", 1171); - DmaMgr_SendRequest1(skyboxCtx->staticSegments[2], start, size, "../z_vr_box.c", 1173); - DmaMgr_SendRequest1((u32)skyboxCtx->staticSegments[2] + size, start, size, "../z_vr_box.c", 1175); + DmaMgr_SendRequest1(skyboxCtx->palettes, start, size, "../z_vr_box.c", 1173); + DmaMgr_SendRequest1((u32)skyboxCtx->palettes + size, start, size, "../z_vr_box.c", 1175); break; case SKYBOX_MARKET_ADULT: skyboxCtx->unk_140 = 1; @@ -195,11 +620,11 @@ void Skybox_Setup(GlobalContext* globalCtx, SkyboxContext* skyboxCtx, s16 skybox size = _vr_RUVR_pal_staticSegmentRomEnd - start; osSyncPrintf("SIZE = %d\n", size); - skyboxCtx->staticSegments[2] = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1188); - ASSERT(skyboxCtx->staticSegments[2] != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", + skyboxCtx->palettes = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1188); + ASSERT(skyboxCtx->palettes != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", 1189); - DmaMgr_SendRequest1(skyboxCtx->staticSegments[2], start, size, "../z_vr_box.c", 1190); + DmaMgr_SendRequest1(skyboxCtx->palettes, start, size, "../z_vr_box.c", 1190); break; case SKYBOX_CUTSCENE_MAP: start = _vr_holy0_staticSegmentRomStart; @@ -220,12 +645,12 @@ void Skybox_Setup(GlobalContext* globalCtx, SkyboxContext* skyboxCtx, s16 skybox start = _vr_holy0_pal_staticSegmentRomStart; size = _vr_holy0_pal_staticSegmentRomEnd - start; - skyboxCtx->staticSegments[2] = GameState_Alloc(&globalCtx->state, size * 2, "../z_vr_box.c", 1211); - ASSERT(skyboxCtx->staticSegments[2] != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", + skyboxCtx->palettes = GameState_Alloc(&globalCtx->state, size * 2, "../z_vr_box.c", 1211); + ASSERT(skyboxCtx->palettes != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", 1212); - DmaMgr_SendRequest1(skyboxCtx->staticSegments[2], start, size, "../z_vr_box.c", 1214); - DmaMgr_SendRequest1((u32)skyboxCtx->staticSegments[2] + size, _vr_holy1_pal_staticSegmentRomStart, size, + DmaMgr_SendRequest1(skyboxCtx->palettes, start, size, "../z_vr_box.c", 1214); + DmaMgr_SendRequest1((u32)skyboxCtx->palettes + size, _vr_holy1_pal_staticSegmentRomStart, size, "../z_vr_box.c", 1216); break; case SKYBOX_HOUSE_LINK: @@ -241,11 +666,11 @@ void Skybox_Setup(GlobalContext* globalCtx, SkyboxContext* skyboxCtx, s16 skybox start = _vr_LHVR_pal_staticSegmentRomStart; size = _vr_LHVR_pal_staticSegmentRomEnd - start; - skyboxCtx->staticSegments[2] = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1231); - ASSERT(skyboxCtx->staticSegments[2] != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", + skyboxCtx->palettes = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1231); + ASSERT(skyboxCtx->palettes != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", 1232); - DmaMgr_SendRequest1(skyboxCtx->staticSegments[2], start, size, "../z_vr_box.c", 1233); + DmaMgr_SendRequest1(skyboxCtx->palettes, start, size, "../z_vr_box.c", 1233); break; case SKYBOX_MARKET_CHILD_DAY: skyboxCtx->unk_140 = 1; @@ -260,11 +685,11 @@ void Skybox_Setup(GlobalContext* globalCtx, SkyboxContext* skyboxCtx, s16 skybox start = _vr_MDVR_pal_staticSegmentRomStart; size = _vr_MDVR_pal_staticSegmentRomEnd - start; - skyboxCtx->staticSegments[2] = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1262); - ASSERT(skyboxCtx->staticSegments[2] != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", + skyboxCtx->palettes = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1262); + ASSERT(skyboxCtx->palettes != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", 1263); - DmaMgr_SendRequest1(skyboxCtx->staticSegments[2], start, size, "../z_vr_box.c", 1264); + DmaMgr_SendRequest1(skyboxCtx->palettes, start, size, "../z_vr_box.c", 1264); break; case SKYBOX_MARKET_CHILD_NIGHT: skyboxCtx->unk_140 = 1; @@ -281,11 +706,11 @@ void Skybox_Setup(GlobalContext* globalCtx, SkyboxContext* skyboxCtx, s16 skybox size = _vr_MNVR_pal_staticSegmentRomEnd - start; osSyncPrintf("SIZE = %d\n", size); - skyboxCtx->staticSegments[2] = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1277); - ASSERT(skyboxCtx->staticSegments[2] != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", + skyboxCtx->palettes = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1277); + ASSERT(skyboxCtx->palettes != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", 1278); - DmaMgr_SendRequest1(skyboxCtx->staticSegments[2], start, size, "../z_vr_box.c", 1279); + DmaMgr_SendRequest1(skyboxCtx->palettes, start, size, "../z_vr_box.c", 1279); break; case SKYBOX_HAPPY_MASK_SHOP: skyboxCtx->unk_140 = 1; @@ -300,11 +725,11 @@ void Skybox_Setup(GlobalContext* globalCtx, SkyboxContext* skyboxCtx, s16 skybox start = _vr_FCVR_pal_staticSegmentRomStart; size = _vr_FCVR_pal_staticSegmentRomEnd - start; - skyboxCtx->staticSegments[2] = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1291); - ASSERT(skyboxCtx->staticSegments[2] != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", + skyboxCtx->palettes = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1291); + ASSERT(skyboxCtx->palettes != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", 1292); - DmaMgr_SendRequest1(skyboxCtx->staticSegments[2], start, size, "../z_vr_box.c", 1293); + DmaMgr_SendRequest1(skyboxCtx->palettes, start, size, "../z_vr_box.c", 1293); skyboxCtx->rot.y = 0.8f; break; case SKYBOX_HOUSE_KNOW_IT_ALL_BROTHERS: @@ -320,11 +745,11 @@ void Skybox_Setup(GlobalContext* globalCtx, SkyboxContext* skyboxCtx, s16 skybox start = _vr_KHVR_pal_staticSegmentRomStart; size = _vr_KHVR_pal_staticSegmentRomEnd - start; - skyboxCtx->staticSegments[2] = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1306); - ASSERT(skyboxCtx->staticSegments[2] != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", + skyboxCtx->palettes = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1306); + ASSERT(skyboxCtx->palettes != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", 1307); - DmaMgr_SendRequest1(skyboxCtx->staticSegments[2], start, size, "../z_vr_box.c", 1308); + DmaMgr_SendRequest1(skyboxCtx->palettes, start, size, "../z_vr_box.c", 1308); break; case SKYBOX_HOUSE_OF_TWINS: skyboxCtx->unk_140 = 2; @@ -339,11 +764,11 @@ void Skybox_Setup(GlobalContext* globalCtx, SkyboxContext* skyboxCtx, s16 skybox start = _vr_K3VR_pal_staticSegmentRomStart; size = _vr_K3VR_pal_staticSegmentRomEnd - start; - skyboxCtx->staticSegments[2] = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1336); - ASSERT(skyboxCtx->staticSegments[2] != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", + skyboxCtx->palettes = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1336); + ASSERT(skyboxCtx->palettes != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", 1337); - DmaMgr_SendRequest1(skyboxCtx->staticSegments[2], start, size, "../z_vr_box.c", 1338); + DmaMgr_SendRequest1(skyboxCtx->palettes, start, size, "../z_vr_box.c", 1338); break; case SKYBOX_STABLES: skyboxCtx->unk_140 = 1; @@ -358,11 +783,11 @@ void Skybox_Setup(GlobalContext* globalCtx, SkyboxContext* skyboxCtx, s16 skybox start = _vr_MLVR_pal_staticSegmentRomStart; size = _vr_MLVR_pal_staticSegmentRomEnd - start; - skyboxCtx->staticSegments[2] = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1350); - ASSERT(skyboxCtx->staticSegments[2] != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", + skyboxCtx->palettes = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1350); + ASSERT(skyboxCtx->palettes != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", 1351); - DmaMgr_SendRequest1(skyboxCtx->staticSegments[2], start, size, "../z_vr_box.c", 1352); + DmaMgr_SendRequest1(skyboxCtx->palettes, start, size, "../z_vr_box.c", 1352); break; case SKYBOX_HOUSE_KAKARIKO: skyboxCtx->unk_140 = 1; @@ -377,11 +802,11 @@ void Skybox_Setup(GlobalContext* globalCtx, SkyboxContext* skyboxCtx, s16 skybox start = _vr_KKRVR_pal_staticSegmentRomStart; size = _vr_KKRVR_pal_staticSegmentRomEnd - start; - skyboxCtx->staticSegments[2] = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1364); - ASSERT(skyboxCtx->staticSegments[2] != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", + skyboxCtx->palettes = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1364); + ASSERT(skyboxCtx->palettes != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", 1365); - DmaMgr_SendRequest1(skyboxCtx->staticSegments[2], start, size, "../z_vr_box.c", 1366); + DmaMgr_SendRequest1(skyboxCtx->palettes, start, size, "../z_vr_box.c", 1366); break; case SKYBOX_KOKIRI_SHOP: skyboxCtx->unk_140 = 1; @@ -396,11 +821,11 @@ void Skybox_Setup(GlobalContext* globalCtx, SkyboxContext* skyboxCtx, s16 skybox start = _vr_KSVR_pal_staticSegmentRomStart; size = _vr_KSVR_pal_staticSegmentRomEnd - start; - skyboxCtx->staticSegments[2] = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1378); - ASSERT(skyboxCtx->staticSegments[2] != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", + skyboxCtx->palettes = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1378); + ASSERT(skyboxCtx->palettes != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", 1379); - DmaMgr_SendRequest1(skyboxCtx->staticSegments[2], start, size, "../z_vr_box.c", 1380); + DmaMgr_SendRequest1(skyboxCtx->palettes, start, size, "../z_vr_box.c", 1380); skyboxCtx->rot.y = 0.8f; break; case SKYBOX_GORON_SHOP: @@ -416,11 +841,11 @@ void Skybox_Setup(GlobalContext* globalCtx, SkyboxContext* skyboxCtx, s16 skybox start = _vr_GLVR_pal_staticSegmentRomStart; size = _vr_GLVR_pal_staticSegmentRomEnd - start; - skyboxCtx->staticSegments[2] = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1410); - ASSERT(skyboxCtx->staticSegments[2] != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", + skyboxCtx->palettes = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1410); + ASSERT(skyboxCtx->palettes != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", 1411); - DmaMgr_SendRequest1(skyboxCtx->staticSegments[2], start, size, "../z_vr_box.c", 1412); + DmaMgr_SendRequest1(skyboxCtx->palettes, start, size, "../z_vr_box.c", 1412); skyboxCtx->rot.y = 0.8f; break; case SKYBOX_ZORA_SHOP: @@ -436,11 +861,11 @@ void Skybox_Setup(GlobalContext* globalCtx, SkyboxContext* skyboxCtx, s16 skybox start = _vr_ZRVR_pal_staticSegmentRomStart; size = _vr_ZRVR_pal_staticSegmentRomEnd - start; - skyboxCtx->staticSegments[2] = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1425); - ASSERT(skyboxCtx->staticSegments[2] != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", + skyboxCtx->palettes = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1425); + ASSERT(skyboxCtx->palettes != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", 1426); - DmaMgr_SendRequest1(skyboxCtx->staticSegments[2], start, size, "../z_vr_box.c", 1427); + DmaMgr_SendRequest1(skyboxCtx->palettes, start, size, "../z_vr_box.c", 1427); skyboxCtx->rot.y = 0.8f; break; case SKYBOX_POTION_SHOP_KAKARIKO: @@ -456,11 +881,11 @@ void Skybox_Setup(GlobalContext* globalCtx, SkyboxContext* skyboxCtx, s16 skybox start = _vr_DGVR_pal_staticSegmentRomStart; size = _vr_DGVR_pal_staticSegmentRomEnd - start; - skyboxCtx->staticSegments[2] = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1456); - ASSERT(skyboxCtx->staticSegments[2] != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", + skyboxCtx->palettes = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1456); + ASSERT(skyboxCtx->palettes != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", 1457); - DmaMgr_SendRequest1(skyboxCtx->staticSegments[2], start, size, "../z_vr_box.c", 1458); + DmaMgr_SendRequest1(skyboxCtx->palettes, start, size, "../z_vr_box.c", 1458); skyboxCtx->rot.y = 0.8f; break; case SKYBOX_POTION_SHOP_MARKET: @@ -476,11 +901,11 @@ void Skybox_Setup(GlobalContext* globalCtx, SkyboxContext* skyboxCtx, s16 skybox start = _vr_ALVR_pal_staticSegmentRomStart; size = _vr_ALVR_pal_staticSegmentRomEnd - start; - skyboxCtx->staticSegments[2] = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1471); - ASSERT(skyboxCtx->staticSegments[2] != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", + skyboxCtx->palettes = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1471); + ASSERT(skyboxCtx->palettes != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", 1472); - DmaMgr_SendRequest1(skyboxCtx->staticSegments[2], start, size, "../z_vr_box.c", 1473); + DmaMgr_SendRequest1(skyboxCtx->palettes, start, size, "../z_vr_box.c", 1473); skyboxCtx->rot.y = 0.8f; break; case SKYBOX_BOMBCHU_SHOP: @@ -496,11 +921,11 @@ void Skybox_Setup(GlobalContext* globalCtx, SkyboxContext* skyboxCtx, s16 skybox start = _vr_NSVR_pal_staticSegmentRomStart; size = _vr_NSVR_pal_staticSegmentRomEnd - start; - skyboxCtx->staticSegments[2] = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1486); - ASSERT(skyboxCtx->staticSegments[2] != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", + skyboxCtx->palettes = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1486); + ASSERT(skyboxCtx->palettes != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", 1487); - DmaMgr_SendRequest1(skyboxCtx->staticSegments[2], start, size, "../z_vr_box.c", 1488); + DmaMgr_SendRequest1(skyboxCtx->palettes, start, size, "../z_vr_box.c", 1488); skyboxCtx->rot.y = 0.8f; break; case SKYBOX_HOUSE_RICHARD: @@ -516,11 +941,11 @@ void Skybox_Setup(GlobalContext* globalCtx, SkyboxContext* skyboxCtx, s16 skybox start = _vr_IPVR_pal_staticSegmentRomStart; size = _vr_IPVR_pal_staticSegmentRomEnd - start; - skyboxCtx->staticSegments[2] = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1517); - ASSERT(skyboxCtx->staticSegments[2] != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", + skyboxCtx->palettes = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1517); + ASSERT(skyboxCtx->palettes != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", 1518); - DmaMgr_SendRequest1(skyboxCtx->staticSegments[2], start, size, "../z_vr_box.c", 1519); + DmaMgr_SendRequest1(skyboxCtx->palettes, start, size, "../z_vr_box.c", 1519); break; case SKYBOX_HOUSE_IMPA: skyboxCtx->unk_140 = 1; @@ -535,11 +960,11 @@ void Skybox_Setup(GlobalContext* globalCtx, SkyboxContext* skyboxCtx, s16 skybox start = _vr_LBVR_pal_staticSegmentRomStart; size = _vr_LBVR_pal_staticSegmentRomEnd - start; - skyboxCtx->staticSegments[2] = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1531); - ASSERT(skyboxCtx->staticSegments[2] != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", + skyboxCtx->palettes = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1531); + ASSERT(skyboxCtx->palettes != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", 1532); - DmaMgr_SendRequest1(skyboxCtx->staticSegments[2], start, size, "../z_vr_box.c", 1533); + DmaMgr_SendRequest1(skyboxCtx->palettes, start, size, "../z_vr_box.c", 1533); break; case SKYBOX_TENT: skyboxCtx->unk_140 = 2; @@ -554,11 +979,11 @@ void Skybox_Setup(GlobalContext* globalCtx, SkyboxContext* skyboxCtx, s16 skybox start = _vr_TTVR_pal_staticSegmentRomStart; size = _vr_TTVR_pal_staticSegmentRomEnd - start; - skyboxCtx->staticSegments[2] = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1545); - ASSERT(skyboxCtx->staticSegments[2] != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", + skyboxCtx->palettes = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1545); + ASSERT(skyboxCtx->palettes != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", 1546); - DmaMgr_SendRequest1(skyboxCtx->staticSegments[2], start, size, "../z_vr_box.c", 1547); + DmaMgr_SendRequest1(skyboxCtx->palettes, start, size, "../z_vr_box.c", 1547); break; case SKYBOX_HOUSE_MIDO: skyboxCtx->unk_140 = 2; @@ -573,11 +998,11 @@ void Skybox_Setup(GlobalContext* globalCtx, SkyboxContext* skyboxCtx, s16 skybox start = _vr_K4VR_pal_staticSegmentRomStart; size = _vr_K4VR_pal_staticSegmentRomEnd - start; - skyboxCtx->staticSegments[2] = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1565); - ASSERT(skyboxCtx->staticSegments[2] != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", + skyboxCtx->palettes = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1565); + ASSERT(skyboxCtx->palettes != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", 1566); - DmaMgr_SendRequest1(skyboxCtx->staticSegments[2], start, size, "../z_vr_box.c", 1567); + DmaMgr_SendRequest1(skyboxCtx->palettes, start, size, "../z_vr_box.c", 1567); break; case SKYBOX_HOUSE_SARIA: skyboxCtx->unk_140 = 2; @@ -592,11 +1017,11 @@ void Skybox_Setup(GlobalContext* globalCtx, SkyboxContext* skyboxCtx, s16 skybox start = _vr_K5VR_pal_staticSegmentRomStart; size = _vr_K5VR_pal_staticSegmentRomEnd - start; - skyboxCtx->staticSegments[2] = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1579); - ASSERT(skyboxCtx->staticSegments[2] != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", + skyboxCtx->palettes = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1579); + ASSERT(skyboxCtx->palettes != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", 1580); - DmaMgr_SendRequest1(skyboxCtx->staticSegments[2], start, size, "../z_vr_box.c", 1581); + DmaMgr_SendRequest1(skyboxCtx->palettes, start, size, "../z_vr_box.c", 1581); break; case SKYBOX_HOUSE_ALLEY: skyboxCtx->unk_140 = 2; @@ -611,11 +1036,11 @@ void Skybox_Setup(GlobalContext* globalCtx, SkyboxContext* skyboxCtx, s16 skybox start = _vr_KR3VR_pal_staticSegmentRomStart; size = _vr_KR3VR_pal_staticSegmentRomEnd - start; - skyboxCtx->staticSegments[2] = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1593); - ASSERT(skyboxCtx->staticSegments[2] != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", + skyboxCtx->palettes = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1593); + ASSERT(skyboxCtx->palettes != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", 1594); - DmaMgr_SendRequest1(skyboxCtx->staticSegments[2], start, size, "../z_vr_box.c", 1595); + DmaMgr_SendRequest1(skyboxCtx->palettes, start, size, "../z_vr_box.c", 1595); break; case SKYBOX_UNSET_27: break; @@ -624,9 +1049,7 @@ void Skybox_Setup(GlobalContext* globalCtx, SkyboxContext* skyboxCtx, s16 skybox void Skybox_Init(GlobalContext* globalCtx, SkyboxContext* skyboxCtx, s16 skyboxId) { skyboxCtx->unk_140 = 0; - skyboxCtx->rot.x = 0.0f; - skyboxCtx->rot.y = 0.0f; - skyboxCtx->rot.z = 0.0f; + skyboxCtx->rot.x = skyboxCtx->rot.y = skyboxCtx->rot.z = 0.0f; Skybox_Setup(globalCtx, skyboxCtx, skyboxId); osSyncPrintf("\n\n\n********************\n\n\n" @@ -638,7 +1061,7 @@ void Skybox_Init(GlobalContext* globalCtx, SkyboxContext* skyboxCtx, s16 skyboxI osSyncPrintf(VT_FGCOL(GREEN)); if (skyboxCtx->unk_140 != 0) { - skyboxCtx->dListBuf = GameState_Alloc(&globalCtx->state, 1200 * sizeof(Gfx), "../z_vr_box.c", 1636); + skyboxCtx->dListBuf = GameState_Alloc(&globalCtx->state, 8 * 150 * sizeof(Gfx), "../z_vr_box.c", 1636); ASSERT(skyboxCtx->dListBuf != NULL, "vr_box->dpList != NULL", "../z_vr_box.c", 1637); skyboxCtx->roomVtx = GameState_Alloc(&globalCtx->state, 256 * sizeof(Vtx), "../z_vr_box.c", 1639); @@ -646,7 +1069,7 @@ void Skybox_Init(GlobalContext* globalCtx, SkyboxContext* skyboxCtx, s16 skyboxI func_800AEFC8(skyboxCtx, skyboxId); } else { - skyboxCtx->dListBuf = GameState_Alloc(&globalCtx->state, 1800 * sizeof(Gfx), "../z_vr_box.c", 1643); + skyboxCtx->dListBuf = GameState_Alloc(&globalCtx->state, 12 * 150 * sizeof(Gfx), "../z_vr_box.c", 1643); ASSERT(skyboxCtx->dListBuf != NULL, "vr_box->dpList != NULL", "../z_vr_box.c", 1644); if (skyboxId == SKYBOX_CUTSCENE_MAP) { diff --git a/src/code/z_vr_box_draw.c b/src/code/z_vr_box_draw.c index 14ad03d662..85f7894aeb 100644 --- a/src/code/z_vr_box_draw.c +++ b/src/code/z_vr_box_draw.c @@ -18,7 +18,7 @@ void SkyboxDraw_Draw(SkyboxContext* skyboxCtx, GraphicsContext* gfxCtx, s16 skyb gSPSegment(POLY_OPA_DISP++, 0x7, skyboxCtx->staticSegments[0]); gSPSegment(POLY_OPA_DISP++, 0x8, skyboxCtx->staticSegments[1]); - gSPSegment(POLY_OPA_DISP++, 0x9, skyboxCtx->staticSegments[2]); + gSPSegment(POLY_OPA_DISP++, 0x9, skyboxCtx->palettes); gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 0, 0, 0, blend); gSPTexture(POLY_OPA_DISP++, 0x8000, 0x8000, 0, G_TX_RENDERTILE, G_ON); @@ -36,44 +36,42 @@ void SkyboxDraw_Draw(SkyboxContext* skyboxCtx, GraphicsContext* gfxCtx, s16 skyb gDPSetColorDither(POLY_OPA_DISP++, G_CD_MAGICSQ); gDPSetTextureFilter(POLY_OPA_DISP++, G_TF_BILERP); - gDPLoadTLUT_pal256(POLY_OPA_DISP++, skyboxCtx->staticSegments[2]); + gDPLoadTLUT_pal256(POLY_OPA_DISP++, skyboxCtx->palettes[0]); gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_RGBA16); gDPSetTextureConvert(POLY_OPA_DISP++, G_TC_FILT); if (skyboxCtx->unk_140) { - gSPDisplayList(POLY_OPA_DISP++, skyboxCtx->dListBuf); - gSPDisplayList(POLY_OPA_DISP++, skyboxCtx->dListBuf + 150 * 1); + gSPDisplayList(POLY_OPA_DISP++, skyboxCtx->dListBuf[0]); + gSPDisplayList(POLY_OPA_DISP++, skyboxCtx->dListBuf[1]); gDPPipeSync(POLY_OPA_DISP++); - - gDPLoadTLUT_pal256(POLY_OPA_DISP++, (u16*)skyboxCtx->staticSegments[2] + 256 * 1); - - gSPDisplayList(POLY_OPA_DISP++, skyboxCtx->dListBuf + 150 * 2); - gSPDisplayList(POLY_OPA_DISP++, skyboxCtx->dListBuf + 150 * 3); + gDPLoadTLUT_pal256(POLY_OPA_DISP++, skyboxCtx->palettes[1]); + gSPDisplayList(POLY_OPA_DISP++, skyboxCtx->dListBuf[2]); + gSPDisplayList(POLY_OPA_DISP++, skyboxCtx->dListBuf[3]); if (skyboxId != SKYBOX_BAZAAR) { if (skyboxId <= SKYBOX_HOUSE_KAKARIKO || skyboxId > SKYBOX_BOMBCHU_SHOP) { gDPPipeSync(POLY_OPA_DISP++); - gDPLoadTLUT_pal256(POLY_OPA_DISP++, (u16*)skyboxCtx->staticSegments[2] + 256 * 2); - gSPDisplayList(POLY_OPA_DISP++, skyboxCtx->dListBuf + 150 * 4); - gSPDisplayList(POLY_OPA_DISP++, skyboxCtx->dListBuf + 150 * 5); - gDPPipeSync(POLY_OPA_DISP++); + gDPLoadTLUT_pal256(POLY_OPA_DISP++, skyboxCtx->palettes[2]); + gSPDisplayList(POLY_OPA_DISP++, skyboxCtx->dListBuf[4]); + gSPDisplayList(POLY_OPA_DISP++, skyboxCtx->dListBuf[5]); + gDPPipeSync(POLY_OPA_DISP++); if (skyboxCtx->unk_140 != 2) { - gDPLoadTLUT_pal256(POLY_OPA_DISP++, (u16*)skyboxCtx->staticSegments[2] + 256 * 3); - gSPDisplayList(POLY_OPA_DISP++, skyboxCtx->dListBuf + 150 * 6); - gSPDisplayList(POLY_OPA_DISP++, skyboxCtx->dListBuf + 150 * 7); + gDPLoadTLUT_pal256(POLY_OPA_DISP++, skyboxCtx->palettes[3]); + gSPDisplayList(POLY_OPA_DISP++, skyboxCtx->dListBuf[6]); + gSPDisplayList(POLY_OPA_DISP++, skyboxCtx->dListBuf[7]); } } } } else { - gSPDisplayList(POLY_OPA_DISP++, skyboxCtx->dListBuf); - gSPDisplayList(POLY_OPA_DISP++, skyboxCtx->dListBuf + 150 * 2); - gSPDisplayList(POLY_OPA_DISP++, skyboxCtx->dListBuf + 150 * 4); - gSPDisplayList(POLY_OPA_DISP++, skyboxCtx->dListBuf + 150 * 6); - gSPDisplayList(POLY_OPA_DISP++, skyboxCtx->dListBuf + 150 * 8); + gSPDisplayList(POLY_OPA_DISP++, skyboxCtx->dListBuf[0]); + gSPDisplayList(POLY_OPA_DISP++, skyboxCtx->dListBuf[2]); + gSPDisplayList(POLY_OPA_DISP++, skyboxCtx->dListBuf[4]); + gSPDisplayList(POLY_OPA_DISP++, skyboxCtx->dListBuf[6]); + gSPDisplayList(POLY_OPA_DISP++, skyboxCtx->dListBuf[8]); if (skyboxId == SKYBOX_CUTSCENE_MAP) { - gSPDisplayList(POLY_OPA_DISP++, skyboxCtx->dListBuf + 150 * 10); + gSPDisplayList(POLY_OPA_DISP++, skyboxCtx->dListBuf[10]); } }