z_viszbuf (code_801420C0) OK (#1211)

* first pass

* Match

* variables.txt

* Update include/functions.h

Co-authored-by: Anghelo Carvajal <angheloalf95@gmail.com>

---------

Co-authored-by: angie <angheloalf95@gmail.com>
This commit is contained in:
Derek Hensley
2023-04-18 09:42:08 -07:00
committed by GitHub
parent 255c4599bf
commit 8efba39749
11 changed files with 101 additions and 55 deletions
-7
View File
@@ -1,7 +0,0 @@
#include "global.h"
#pragma GLOBAL_ASM("asm/non_matchings/code/code_801420C0/func_801420C0.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/code_801420C0/func_801420F4.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/code_801420C0/func_80142100.s")
+27 -31
View File
@@ -22,7 +22,7 @@ void Game_SetFramerateDivisor(GameState* gameState, s32 divisor) {
Game_UpdateFramerateVariables(divisor);
}
void GameState_SetFBFilter(Gfx** gfx, u32 arg1) {
void GameState_SetFBFilter(Gfx** gfx, void* zbuffer) {
Gfx* dlist = *gfx;
if ((R_FB_FILTER_TYPE > 0) && (R_FB_FILTER_TYPE < 5)) {
@@ -31,33 +31,29 @@ void GameState_SetFBFilter(Gfx** gfx, u32 arg1) {
D_801F8010.color.g = R_FB_FILTER_PRIM_COLOR(1);
D_801F8010.color.b = R_FB_FILTER_PRIM_COLOR(2);
D_801F8010.color.a = R_FB_FILTER_A;
func_80140D10(&D_801F8010, &dlist, arg1);
} else {
if ((R_FB_FILTER_TYPE == 5) || (R_FB_FILTER_TYPE == 6)) {
D_801F8020.useRgba = (R_FB_FILTER_TYPE == 6);
D_801F8020.primColor.r = R_FB_FILTER_PRIM_COLOR(0);
D_801F8020.primColor.g = R_FB_FILTER_PRIM_COLOR(1);
D_801F8020.primColor.b = R_FB_FILTER_PRIM_COLOR(2);
D_801F8020.primColor.a = R_FB_FILTER_A;
D_801F8020.envColor.r = R_FB_FILTER_ENV_COLOR(0);
D_801F8020.envColor.g = R_FB_FILTER_ENV_COLOR(1);
D_801F8020.envColor.b = R_FB_FILTER_ENV_COLOR(2);
D_801F8020.envColor.a = R_FB_FILTER_A;
func_80142100(&D_801F8020, &dlist, arg1);
} else {
if (R_FB_FILTER_TYPE == 7) {
sMonoColors.unk_00 = 0;
sMonoColors.primColor.r = R_FB_FILTER_PRIM_COLOR(0);
sMonoColors.primColor.g = R_FB_FILTER_PRIM_COLOR(1);
sMonoColors.primColor.b = R_FB_FILTER_PRIM_COLOR(2);
sMonoColors.primColor.a = R_FB_FILTER_A;
sMonoColors.envColor.r = R_FB_FILTER_ENV_COLOR(0);
sMonoColors.envColor.g = R_FB_FILTER_ENV_COLOR(1);
sMonoColors.envColor.b = R_FB_FILTER_ENV_COLOR(2);
sMonoColors.envColor.a = R_FB_FILTER_A;
VisMono_Draw(&sMonoColors, &dlist);
}
}
func_80140D10(&D_801F8010, &dlist, zbuffer);
} else if ((R_FB_FILTER_TYPE == 5) || (R_FB_FILTER_TYPE == 6)) {
sVisZbuf.useRgba = (R_FB_FILTER_TYPE == 6);
sVisZbuf.primColor.r = R_FB_FILTER_PRIM_COLOR(0);
sVisZbuf.primColor.g = R_FB_FILTER_PRIM_COLOR(1);
sVisZbuf.primColor.b = R_FB_FILTER_PRIM_COLOR(2);
sVisZbuf.primColor.a = R_FB_FILTER_A;
sVisZbuf.envColor.r = R_FB_FILTER_ENV_COLOR(0);
sVisZbuf.envColor.g = R_FB_FILTER_ENV_COLOR(1);
sVisZbuf.envColor.b = R_FB_FILTER_ENV_COLOR(2);
sVisZbuf.envColor.a = R_FB_FILTER_A;
VisZbuf_Draw(&sVisZbuf, &dlist, zbuffer);
} else if (R_FB_FILTER_TYPE == 7) {
sMonoColors.unk_00 = 0;
sMonoColors.primColor.r = R_FB_FILTER_PRIM_COLOR(0);
sMonoColors.primColor.g = R_FB_FILTER_PRIM_COLOR(1);
sMonoColors.primColor.b = R_FB_FILTER_PRIM_COLOR(2);
sMonoColors.primColor.a = R_FB_FILTER_A;
sMonoColors.envColor.r = R_FB_FILTER_ENV_COLOR(0);
sMonoColors.envColor.g = R_FB_FILTER_ENV_COLOR(1);
sMonoColors.envColor.b = R_FB_FILTER_ENV_COLOR(2);
sMonoColors.envColor.a = R_FB_FILTER_A;
VisMono_Draw(&sMonoColors, &dlist);
}
*gfx = dlist;
@@ -76,7 +72,7 @@ void GameState_Draw(GameState* gameState, GraphicsContext* gfxCtx) {
gSPDisplayList(OVERLAY_DISP++, nextDisplayList);
if (R_FB_FILTER_TYPE && R_FB_FILTER_ENV_COLOR(3) == 0) {
GameState_SetFBFilter(&nextDisplayList, (u32)gfxCtx->zbuffer);
GameState_SetFBFilter(&nextDisplayList, gfxCtx->zbuffer);
}
if (R_ENABLE_ARENA_DBG < 0) {
@@ -215,7 +211,7 @@ void GameState_Init(GameState* gameState, GameStateFunc init, GraphicsContext* g
init(gameState);
func_80140CE0(&D_801F8010);
func_801420C0(&D_801F8020);
VisZbuf_Init(&sVisZbuf);
VisMono_Init(&sMonoColors);
func_80140898(&D_801F8048);
func_801773A0(&D_801F7FF0);
@@ -237,7 +233,7 @@ void GameState_Destroy(GameState* gameState) {
Rumble_Destroy();
func_801773C4(&D_801F7FF0);
func_80140D04(&D_801F8010);
func_801420F4(&D_801F8020);
VisZbuf_Destroy(&sVisZbuf);
VisMono_Destroy(&sMonoColors);
func_80140900(&D_801F8048);
THA_Destroy(&gameState->heap);
+56
View File
@@ -0,0 +1,56 @@
#include "global.h"
#define VISZBUF_ZBUFFRAG_HEIGHT (TMEM_SIZE / (D_801FBBCC * G_IM_SIZ_16b_BYTES))
void VisZbuf_Init(VisZbuf* this) {
this->useRgba = false;
this->setScissor = false;
this->primColor.r = 255;
this->primColor.g = 255;
this->primColor.b = 255;
this->primColor.a = 255;
this->envColor.r = 0;
this->envColor.g = 0;
this->envColor.b = 0;
this->envColor.a = 255;
}
void VisZbuf_Destroy(VisZbuf* this) {
}
void VisZbuf_Draw(VisZbuf* this, Gfx** gfxP, void* zbuffer) {
Gfx* gfx = *gfxP;
s32 height = VISZBUF_ZBUFFRAG_HEIGHT;
s32 y;
s32 fmt = !this->useRgba ? G_IM_FMT_IA : G_IM_FMT_RGBA;
if (zbuffer == NULL) {
return;
}
gDPPipeSync(gfx++);
if (this->setScissor == true) {
gSPDisplayList(gfx++, D_0E000000.setScissor);
}
gDPSetOtherMode(gfx++,
G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_POINT | G_TT_NONE | G_TL_TILE |
G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
G_AC_NONE | G_ZS_PRIM | G_RM_OPA_SURF | G_RM_OPA_SURF2);
gDPSetCombineLERP(gfx++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT,
PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT);
gDPSetColor(gfx++, G_SETPRIMCOLOR, this->primColor.rgba);
gDPSetColor(gfx++, G_SETENVCOLOR, this->envColor.rgba);
for (y = 0; y < (D_801FBBCE - height) + 1; y += height) {
gDPLoadTextureTile(gfx++, zbuffer, fmt, G_IM_SIZ_16b, D_801FBBCC, 0, 0, y, D_801FBBCC - 1, (y + height) - 1, 0,
G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
G_TX_NOLOD);
gSPTextureRectangle(gfx++, 0, y << 2, D_801FBBCC << 2, (y + height) << 2, G_TX_RENDERTILE, 0, y << 5, 1 << 10,
1 << 10);
}
gDPPipeSync(gfx++);
*gfxP = gfx;
}