diff options
| author | Random <28494085+Random06457@users.noreply.github.com> | 2020-05-15 11:14:07 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-05-15 05:14:07 -0400 |
| commit | 1a51ad5944dcb9ce917037436707a5e626c68f0d (patch) | |
| tree | 9a0985aad7cb4e322f104d7071f384704fec8002 /src/code | |
| parent | d556999b2b127e7cfe4ceb4b03c7b9023fd78543 (diff) | |
Decompile z_vr_box_draw.c (#138)
* Decompile z_vr_box_draw.c
* Rename vrbox to skybox
* run format.sh
Diffstat (limited to 'src/code')
| -rw-r--r-- | src/code/z_play.c | 21 | ||||
| -rw-r--r-- | src/code/z_vr_box_draw.c | 86 |
2 files changed, 93 insertions, 14 deletions
diff --git a/src/code/z_play.c b/src/code/z_play.c index 104da1a4c..291c993ad 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -944,7 +944,7 @@ void Gameplay_Update(GlobalContext* globalCtx) { LOG_NUM("1", 1, "../z_play.c", 3708); } - func_800B1744(&globalCtx->skyboxCtx); + SkyboxDraw_Update(&globalCtx->skyboxCtx); if (1 && HREG(63)) { LOG_NUM("1", 1, "../z_play.c", 3716); @@ -1188,12 +1188,12 @@ void Gameplay_Draw(GlobalContext* globalCtx) { if ((globalCtx->skyboxId != 0x1D) && !globalCtx->envCtx.skyDisabled) { if ((globalCtx->skyboxId == 1) || (skyboxId == 5)) { func_8006FC88(globalCtx->skyboxId, &globalCtx->envCtx, &globalCtx->skyboxCtx); - func_800B10C4(&globalCtx->skyboxCtx, gfxCtx, globalCtx->skyboxId, - globalCtx->envCtx.unk_13, globalCtx->view.eye.x, globalCtx->view.eye.y, - globalCtx->view.eye.z); + SkyboxDraw_Draw(&globalCtx->skyboxCtx, gfxCtx, globalCtx->skyboxId, + globalCtx->envCtx.unk_13, globalCtx->view.eye.x, globalCtx->view.eye.y, + globalCtx->view.eye.z); } else if (globalCtx->skyboxCtx.unk_140 == 0) { - func_800B10C4(&globalCtx->skyboxCtx, gfxCtx, skyboxId, 0, globalCtx->view.eye.x, - globalCtx->view.eye.y, globalCtx->view.eye.z); + SkyboxDraw_Draw(&globalCtx->skyboxCtx, gfxCtx, skyboxId, 0, globalCtx->view.eye.x, + globalCtx->view.eye.y, globalCtx->view.eye.z); } } } @@ -1238,9 +1238,9 @@ void Gameplay_Draw(GlobalContext* globalCtx) { if (ACTIVE_CAM->unk_142 != 0x19) { Vec3f sp74; func_8005AFB4(&sp74, ACTIVE_CAM); - func_800B10C4(&globalCtx->skyboxCtx, gfxCtx, globalCtx->skyboxId, 0, - globalCtx->view.eye.x + sp74.x, globalCtx->view.eye.y + sp74.y, - globalCtx->view.eye.z + sp74.z); + SkyboxDraw_Draw(&globalCtx->skyboxCtx, gfxCtx, globalCtx->skyboxId, 0, + globalCtx->view.eye.x + sp74.x, globalCtx->view.eye.y + sp74.y, + globalCtx->view.eye.z + sp74.z); } } } @@ -1323,7 +1323,8 @@ void Gameplay_Draw(GlobalContext* globalCtx) { func_800AB944(&globalCtx->view); globalCtx->view.unk_124 = 0; if ((globalCtx->skyboxId != 0) && (globalCtx->skyboxId != 0x1D) && !globalCtx->envCtx.skyDisabled) { - func_800B1030(&globalCtx->skyboxCtx, globalCtx->view.eye.x, globalCtx->view.eye.y, globalCtx->view.eye.z); + SkyboxDraw_UpdateMatrix(&globalCtx->skyboxCtx, globalCtx->view.eye.x, globalCtx->view.eye.y, + globalCtx->view.eye.z); } } diff --git a/src/code/z_vr_box_draw.c b/src/code/z_vr_box_draw.c index 4161c4615..d4077d923 100644 --- a/src/code/z_vr_box_draw.c +++ b/src/code/z_vr_box_draw.c @@ -1,8 +1,86 @@ -#include <ultra64.h> #include <global.h> -#pragma GLOBAL_ASM("asm/non_matchings/code/z_vr_box_draw/func_800B1030.s") +Mtx* sSkyboxDrawMatrix; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_vr_box_draw/func_800B10C4.s") +Mtx* SkyboxDraw_UpdateMatrix(SkyboxContext* skyboxCtx, f32 x, f32 y, f32 z) { + Matrix_Translate(x, y, z, MTXMODE_NEW); + Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); + Matrix_RotateX(skyboxCtx->rot.x, MTXMODE_APPLY); + Matrix_RotateY(skyboxCtx->rot.y, MTXMODE_APPLY); + Matrix_RotateZ(skyboxCtx->rot.z, MTXMODE_APPLY); + return Matrix_ToMtx(sSkyboxDrawMatrix, "../z_vr_box_draw.c", 42); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_vr_box_draw/func_800B1744.s") +void SkyboxDraw_Draw(SkyboxContext* skyboxCtx, GraphicsContext* gfxCtx, s16 skyboxId, s16 alpha, f32 x, f32 y, f32 z) { + Gfx* dispRefs[5]; + + Graph_OpenDisps(dispRefs, gfxCtx, "../z_vr_box_draw.c", 52); + func_800945A0(gfxCtx); + + gSPSegment(gfxCtx->polyOpa.p++, 7, skyboxCtx->staticSegments[0]); + gSPSegment(gfxCtx->polyOpa.p++, 8, skyboxCtx->staticSegments[1]); + gSPSegment(gfxCtx->polyOpa.p++, 9, skyboxCtx->staticSegments[2]); + + gDPSetPrimColor(gfxCtx->polyOpa.p++, 0x00, 0x00, 0x00, 0x00, 0x00, alpha); + gSPTexture(gfxCtx->polyOpa.p++, 0x8000, 0x8000, 0, G_TX_RENDERTILE, G_ON) + + sSkyboxDrawMatrix = Graph_Alloc(gfxCtx, sizeof(Mtx)); + + Matrix_Translate(x, y, z, MTXMODE_NEW); + Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); + Matrix_RotateX(skyboxCtx->rot.x, MTXMODE_APPLY); + Matrix_RotateY(skyboxCtx->rot.y, MTXMODE_APPLY); + Matrix_RotateZ(skyboxCtx->rot.z, MTXMODE_APPLY); + Matrix_ToMtx(sSkyboxDrawMatrix, "../z_vr_box_draw.c", 76); + gSPMatrix(gfxCtx->polyOpa.p++, sSkyboxDrawMatrix, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + gDPSetColorDither(gfxCtx->polyOpa.p++, G_CD_MAGICSQ); + gDPSetTextureFilter(gfxCtx->polyOpa.p++, G_TF_BILERP); + + gDPLoadTLUT_pal256(gfxCtx->polyOpa.p++, skyboxCtx->staticSegments[2]); + gDPSetTextureLUT(gfxCtx->polyOpa.p++, G_TT_RGBA16); + gDPSetTextureConvert(gfxCtx->polyOpa.p++, G_TC_FILT); + + if (skyboxCtx->unk_140) { + gSPDisplayList(gfxCtx->polyOpa.p++, skyboxCtx->dpList); + gSPDisplayList(gfxCtx->polyOpa.p++, skyboxCtx->dpList + 150 * 1); + + gDPPipeSync(gfxCtx->polyOpa.p++); + + gDPLoadTLUT_pal256(gfxCtx->polyOpa.p++, (u16*)skyboxCtx->staticSegments[2] + 256 * 1); + + gSPDisplayList(gfxCtx->polyOpa.p++, skyboxCtx->dpList + 150 * 2); + gSPDisplayList(gfxCtx->polyOpa.p++, skyboxCtx->dpList + 150 * 3); + + if (skyboxId != 2) { + if (skyboxId <= 0x10 || skyboxId >= 0x19) { + gDPPipeSync(gfxCtx->polyOpa.p++); + gDPLoadTLUT_pal256(gfxCtx->polyOpa.p++, (u16*)skyboxCtx->staticSegments[2] + 256 * 2); + gSPDisplayList(gfxCtx->polyOpa.p++, skyboxCtx->dpList + 150 * 4); + gSPDisplayList(gfxCtx->polyOpa.p++, skyboxCtx->dpList + 150 * 5); + gDPPipeSync(gfxCtx->polyOpa.p++); + + if (skyboxCtx->unk_140 != 2) { + gDPLoadTLUT_pal256(gfxCtx->polyOpa.p++, (u16*)skyboxCtx->staticSegments[2] + 256 * 3); + gSPDisplayList(gfxCtx->polyOpa.p++, skyboxCtx->dpList + 150 * 6); + gSPDisplayList(gfxCtx->polyOpa.p++, skyboxCtx->dpList + 150 * 7); + } + } + } + } else { + gSPDisplayList(gfxCtx->polyOpa.p++, skyboxCtx->dpList); + gSPDisplayList(gfxCtx->polyOpa.p++, skyboxCtx->dpList + 150 * 2); + gSPDisplayList(gfxCtx->polyOpa.p++, skyboxCtx->dpList + 150 * 4); + gSPDisplayList(gfxCtx->polyOpa.p++, skyboxCtx->dpList + 150 * 6); + gSPDisplayList(gfxCtx->polyOpa.p++, skyboxCtx->dpList + 150 * 8); + if (skyboxId == 5) { + gSPDisplayList(gfxCtx->polyOpa.p++, skyboxCtx->dpList + 150 * 10); + } + } + + gDPPipeSync(gfxCtx->polyOpa.p++); + Graph_CloseDisps(dispRefs, gfxCtx, "../z_vr_box_draw.c", 125); +} + +void SkyboxDraw_Update(SkyboxContext* skyboxCtx) { +} |
