summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--include/6B3DC0.h4
-rw-r--r--include/code_variables.h17
-rw-r--r--include/gfxalloc.h2
-rw-r--r--include/m_rcp.h76
-rw-r--r--linker_scripts/jp/symbol_addrs_code.txt55
-rw-r--r--src/code/game.c2
-rw-r--r--src/code/m_lights.c2
-rw-r--r--src/code/m_rcp.c603
-rw-r--r--src/overlays/actors/ovl_Toudai/ac_toudai.c2
-rw-r--r--src/overlays/gamestates/ovl_play/m_play.c2
-rw-r--r--src/overlays/submenu/submenu_ovl/m_submenu_ovl.c2
-rw-r--r--yamls/jp/code.yaml6
13 files changed, 679 insertions, 95 deletions
diff --git a/.gitignore b/.gitignore
index d33722f..31d4794 100644
--- a/.gitignore
+++ b/.gitignore
@@ -25,6 +25,7 @@ ctx.c.m2c
*.v64
*.plf
*.sym
+.venv
.vscode/*
!.vscode/c_cpp_properties.json
diff --git a/include/6B3DC0.h b/include/6B3DC0.h
index 2d8e90a..04d1df6 100644
--- a/include/6B3DC0.h
+++ b/include/6B3DC0.h
@@ -3,6 +3,8 @@
#include "ultra64.h"
+struct GraphicsContext;
+
// void func_80090120_jp();
// void func_80090130_jp();
// void func_80090140_jp();
@@ -29,7 +31,7 @@
// void func_80090E98_jp();
// void mFont_SetMatrix();
// void mFont_UnSetMatrix();
-// void func_80091074_jp();
+void func_80091074_jp(struct GraphicsContext* gfxCtx);
// void func_80091094_jp();
// void func_80091104_jp();
// void func_8009113C_jp();
diff --git a/include/code_variables.h b/include/code_variables.h
index e30a813..c9fde32 100644
--- a/include/code_variables.h
+++ b/include/code_variables.h
@@ -691,21 +691,6 @@ extern s32 CanLookGokiCount;
// extern UNK_TYPE D_8010C970_jp;
// extern UNK_TYPE D_8010C9D0_jp;
// extern UNK_TYPE D_8010CB20_jp;
-// extern UNK_TYPE D_8010CB30_jp;
-// extern UNK_TYPE D_8010CB90_jp;
-// extern UNK_TYPE D_8010CBC0_jp;
-// extern UNK_TYPE D_8010CBF0_jp;
-// extern UNK_TYPE D_8010CC20_jp;
-// extern UNK_TYPE D_8010CC50_jp;
-// extern UNK_TYPE D_8010CC80_jp;
-// extern UNK_TYPE D_8010CCB0_jp;
-// extern UNK_TYPE D_8010CD10_jp;
-// extern UNK_TYPE D_8010CD70_jp;
-// extern UNK_TYPE D_8010CDA0_jp;
-// extern UNK_TYPE D_8010CDD0_jp;
-// extern UNK_TYPE D_8010CE00_jp;
-// extern UNK_TYPE D_8010CE60_jp;
-// extern UNK_TYPE D_8010CE90_jp;
// extern UNK_TYPE D_8010CEC0_jp;
// extern UNK_TYPE D_8010D274_jp;
// extern UNK_TYPE D_8010D28C_jp;
@@ -1912,7 +1897,7 @@ extern u8 D_80113854_jp;
// extern UNK_TYPE B_80144624_jp;
// extern UNK_TYPE B_80144628_jp;
// extern UNK_TYPE B_8014462C_jp;
-// extern UNK_TYPE B_80144650_jp;
+
// extern UNK_TYPE B_80144660_jp;
// extern UNK_TYPE B_80144690_jp;
diff --git a/include/gfxalloc.h b/include/gfxalloc.h
index 81177a9..3fb27df 100644
--- a/include/gfxalloc.h
+++ b/include/gfxalloc.h
@@ -5,6 +5,6 @@
Gfx* gfxopen(Gfx* gfxHead);
Gfx* gfxclose(Gfx* gfxHead, Gfx* gfx);
-// void gfxalloc();
+void* gfxalloc(Gfx** gfxP, size_t size);
#endif
diff --git a/include/m_rcp.h b/include/m_rcp.h
index 93dd903..d34e6e4 100644
--- a/include/m_rcp.h
+++ b/include/m_rcp.h
@@ -6,46 +6,46 @@
struct GraphicsContext;
struct Game_Play;
-// void func_800BD2B0_jp();
-Gfx* gfx_set_fog_nosync(Gfx* gfx, u8 arg1, u8 arg2, u8 arg3, s32 arg4, s16 arg5, s16 arg6);
-// void func_800BD3EC_jp();
-// void func_800BD428_jp();
-// void func_800BD448_jp();
-// void func_800BD470_jp();
-// void func_800BD498_jp();
-// void func_800BD4C0_jp();
+extern Gfx RSP_RDP_clear_data[];
+
+Gfx* gfx_set_fog_nosync(Gfx* gfx, s32 r, s32 g, s32 b, s32 a, s32 near, s32 far);
+Gfx* func_800BD428_jp(Gfx* gfx, s32 i);
+Gfx* func_800BD448_jp(Gfx* gfx);
+void func_800BD470_jp(struct GraphicsContext* gfxCtx);
+void func_800BD498_jp(struct GraphicsContext* gfxCtx);
+void texture_z_light_prim_xlu_disp(struct GraphicsContext* gfxCtx);
void _texture_z_light_fog_prim(struct GraphicsContext *gfxCtx);
-void _texture_z_light_fog_prim_shadow(struct GraphicsContext*);
-// void func_800BD538_jp();
-void _texture_z_light_fog_prim_xlu(struct GraphicsContext *gfxCtx);
-void func_800BD5C0_jp(struct GraphicsContext* gfxCtx);
+void _texture_z_light_fog_prim_shadow(struct GraphicsContext* gfxCtx);
+void _texture_z_light_fog_prim_npc_shadow(struct GraphicsContext* gfxCtx);
+void _texture_z_light_fog_prim_xlu(struct GraphicsContext* gfxCtx);
+void _texture_z_light_fog_prim_light(struct GraphicsContext* gfxCtx);
void _texture_z_light_fog_prim_npc(struct GraphicsContext *gfxCtx);
-// void func_800BD648_jp();
-// void func_800BD68C_jp();
-// void func_800BD6D0_jp();
-// void func_800BD6F8_jp();
-Gfx* func_800BD720_jp(Gfx* gfx);
-void rect_moji(struct GraphicsContext*);
-// void func_800BD770_jp();
-// void func_800BD798_jp();
-Gfx* func_800BD7C0_jp(Gfx* gfx);
-// void func_800BD804_jp();
-// void func_800BD8A8_jp();
-// void func_800BD9D8_jp();
-// void func_800BD9FC_jp();
+Gfx* texture_z_light_fog_prim_bb_pal_opa(Gfx* gfx);
+Gfx* texture_z_light_fog_prim_bb_pal_xlu(Gfx* gfx);
+Gfx* texture_z_fog_lod_alpha_shadow(Gfx* gfx);
+void func_800BD6F8_jp(struct GraphicsContext* gfxCtx);
+Gfx* gfx_rect_moji(Gfx* gfx);
+void rect_moji(struct GraphicsContext* gfxCtx);
+void polygon_z_light_prim(struct GraphicsContext* gfxCtx);
+void softsprite_prim(struct GraphicsContext* gfxCtx);
+Gfx* gfx_softsprite_prim_xlu(Gfx* gfx);
+Gfx* gfx_tex_scroll2(Gfx** gfxP, u32 x, u32 y, s32 width, s32 height);
+Gfx* gfx_two_tex_scroll(Gfx** gfxP, s32 tile1, u32 x1, u32 y1, s32 width1, s32 height1, s32 tile2, u32 x2, u32 y2, s32 width2, s32 height2);
+Gfx* func_800BD9D8_jp(Gfx** gfxP, u32 x, u32 y);
+Gfx* func_800BD9FC_jp(struct GraphicsContext* gfxCtx, u32 x, u32 y);
Gfx* tex_scroll2(struct GraphicsContext* gfxCtx, u32 x, u32 y, s32 width, s32 height);
-extern Gfx* two_tex_scroll(struct GraphicsContext* gfxCtx, s32 tile1, s32 x1, s32 y1, s32 width1, s32 height1, s32 tile2, s32 x2, s32 y2, s32 width2, s32 height2);
-void DisplayList_initialize(struct GraphicsContext* gfxCtx, u8 arg1, u8 arg2, u8 arg3, struct Game_Play* game_play);
-void fade_rgba8888_draw(Gfx** gfx, s32 arg1);
-// void func_800BE030_jp();
-// void fade_black_draw();
-// void func_800BE094_jp();
-// void func_800BE0E4_jp();
-Gfx *func_800BE12C_jp(Gfx *gfx, s32 arg1, s32 arg2, s32 arg3, s32 arg4);
-// void func_800BE184_jp();
-// void func_800BE1D4_jp();
-// void func_800BE27C_jp();
-Gfx* func_800BE320_jp(Gfx*, s32, s32, s32, s32, s32, s32, s32, s32, s32);
-// void func_800BE4F8_jp();
+Gfx* two_tex_scroll(struct GraphicsContext* gfxCtx, s32 tile1, u32 x1, u32 y1, s32 width1, s32 height1, s32 tile2, u32 x2, u32 y2, s32 width2, s32 height2);
+void DisplayList_initialize(struct GraphicsContext* gfxCtx, u8 clearR, u8 clearG, u8 clearB, struct Game_Play* game_play);
+void fade_rgba8888_draw(Gfx** gfxP, u32 color);
+void func_800BE030_jp(Gfx** gfxP, u32 r, u32 g, u32 b, u32 a);
+void fade_black_draw(Gfx** gfxP, u32 color);
+Gfx* gfx_gDPFillRectangle1(Gfx* gfx, s32 ulx, s32 uly, s32 lrx, s32 lry);
+void func_800BE0E4_jp(Gfx** gfxP, s32 ulx, s32 uly, s32 lrx, s32 lry);
+Gfx* gfx_gDPFillRectangleF(Gfx* gfx, s32 ulx, s32 uly, s32 lrx, s32 lry);
+void func_800BE184_jp(Gfx** gfxP, s32 ulx, s32 uly, s32 lrx, s32 lry);
+Gfx* gfx_gSPTextureRectangle1(Gfx* gfx, s32 xl, s32 yl, s32 xh, s32 yh, s32 tile, s32 s, s32 t, s32 dsdx, s32 dtdy);
+Gfx* func_800BE27C_jp(Gfx* gfx, s32 xl, s32 yl, s32 xh, s32 yh, s32 tile, s32 s, s32 t);
+Gfx* gfx_gSPScisTextureRectangle1(Gfx* gfx, s32 xl, s32 yl, s32 xh, s32 yh, s32 tile, s32 s, s32 t, s32 dsdx, s32 dtdy);
+Gfx* func_800BE4F8_jp(Gfx* gfx, s32 xl, s32 yl, s32 xh, s32 yh, s32 tile, s32 s, s32 t);
#endif
diff --git a/linker_scripts/jp/symbol_addrs_code.txt b/linker_scripts/jp/symbol_addrs_code.txt
index 0975771..dba1ffc 100644
--- a/linker_scripts/jp/symbol_addrs_code.txt
+++ b/linker_scripts/jp/symbol_addrs_code.txt
@@ -2872,31 +2872,31 @@ func_800BCFA4_jp = 0x800BCFA4; // type:func
mRF_BlockTypeDirect2GateData = 0x800BCFC8; // type:func
func_800BD02C_jp = 0x800BD02C; // type:func
func_800BD1E4_jp = 0x800BD1E4; // type:func
-func_800BD2B0_jp = 0x800BD2B0; // type:func
+gfx_set_fog_position = 0x800BD2B0; // type:func
gfx_set_fog_nosync = 0x800BD37C; // type:func
func_800BD3EC_jp = 0x800BD3EC; // type:func
func_800BD428_jp = 0x800BD428; // type:func
func_800BD448_jp = 0x800BD448; // type:func
func_800BD470_jp = 0x800BD470; // type:func
func_800BD498_jp = 0x800BD498; // type:func
-func_800BD4C0_jp = 0x800BD4C0; // type:func
+texture_z_light_prim_xlu_disp = 0x800BD4C0; // type:func
_texture_z_light_fog_prim = 0x800BD4E8; // type:func
_texture_z_light_fog_prim_shadow = 0x800BD510; // type:func
-func_800BD538_jp = 0x800BD538; // type:func
+_texture_z_light_fog_prim_npc_shadow = 0x800BD538; // type:func
_texture_z_light_fog_prim_xlu = 0x800BD598; // type:func
-func_800BD5C0_jp = 0x800BD5C0; // type:func
+_texture_z_light_fog_prim_light = 0x800BD5C0; // type:func
_texture_z_light_fog_prim_npc = 0x800BD5E8; // type:func
-func_800BD648_jp = 0x800BD648; // type:func
-func_800BD68C_jp = 0x800BD68C; // type:func
-func_800BD6D0_jp = 0x800BD6D0; // type:func
+texture_z_light_fog_prim_bb_pal_opa = 0x800BD648; // type:func
+texture_z_light_fog_prim_bb_pal_xlu = 0x800BD68C; // type:func
+texture_z_fog_lod_alpha_shadow = 0x800BD6D0; // type:func
func_800BD6F8_jp = 0x800BD6F8; // type:func
-func_800BD720_jp = 0x800BD720; // type:func
+gfx_rect_moji = 0x800BD720; // type:func
rect_moji = 0x800BD748; // type:func
-func_800BD770_jp = 0x800BD770; // type:func
-func_800BD798_jp = 0x800BD798; // type:func
-func_800BD7C0_jp = 0x800BD7C0; // type:func
-func_800BD804_jp = 0x800BD804; // type:func
-func_800BD8A8_jp = 0x800BD8A8; // type:func
+polygon_z_light_prim = 0x800BD770; // type:func
+softsprite_prim = 0x800BD798; // type:func
+gfx_softsprite_prim_xlu = 0x800BD7C0; // type:func
+gfx_tex_scroll2 = 0x800BD804; // type:func
+gfx_two_tex_scroll = 0x800BD8A8; // type:func
func_800BD9D8_jp = 0x800BD9D8; // type:func
func_800BD9FC_jp = 0x800BD9FC; // type:func
tex_scroll2 = 0x800BDA20; // type:func
@@ -2905,13 +2905,13 @@ DisplayList_initialize = 0x800BDBB4; // type:func
fade_rgba8888_draw = 0x800BDF90; // type:func
func_800BE030_jp = 0x800BE030; // type:func
fade_black_draw = 0x800BE070; // type:func
-func_800BE094_jp = 0x800BE094; // type:func
+gfx_gDPFillRectangle1 = 0x800BE094; // type:func
func_800BE0E4_jp = 0x800BE0E4; // type:func
-func_800BE12C_jp = 0x800BE12C; // type:func
+gfx_gDPFillRectangleF = 0x800BE12C; // type:func
func_800BE184_jp = 0x800BE184; // type:func
-func_800BE1D4_jp = 0x800BE1D4; // type:func
+gfx_gSPTextureRectangle1 = 0x800BE1D4; // type:func
func_800BE27C_jp = 0x800BE27C; // type:func
-func_800BE320_jp = 0x800BE320; // type:func
+gfx_gSPScisTextureRectangle1 = 0x800BE320; // type:func
func_800BE4F8_jp = 0x800BE4F8; // type:func
func_800BE660_jp = 0x800BE660; // type:func
func_800BE69C_jp = 0x800BE69C; // type:func
@@ -4878,21 +4878,10 @@ D_8010C958_jp = 0x8010C958; //
D_8010C970_jp = 0x8010C970; //
D_8010C9D0_jp = 0x8010C9D0; // type:u8
D_8010CB20_jp = 0x8010CB20; //
-D_8010CB30_jp = 0x8010CB30; //
-D_8010CB90_jp = 0x8010CB90; //
-D_8010CBC0_jp = 0x8010CBC0; //
-D_8010CBF0_jp = 0x8010CBF0; //
-D_8010CC20_jp = 0x8010CC20; //
-D_8010CC50_jp = 0x8010CC50; //
-D_8010CC80_jp = 0x8010CC80; //
-D_8010CCB0_jp = 0x8010CCB0; //
-D_8010CD10_jp = 0x8010CD10; //
-D_8010CD70_jp = 0x8010CD70; //
-D_8010CDA0_jp = 0x8010CDA0; //
-D_8010CDD0_jp = 0x8010CDD0; //
-D_8010CE00_jp = 0x8010CE00; //
-D_8010CE60_jp = 0x8010CE60; //
-D_8010CE90_jp = 0x8010CE90; //
+z_gsCPModeSet_Data = 0x8010CB30; // type:Gfx size:0x2D0
+RSP_RDP_clear_data = 0x8010CE00; // type:Gfx size:0x60
+fade_gfx = 0x8010CE60; // type:Gfx size:0x30
+fill_gfx = 0x8010CE90; // type:Gfx size:0x28
D_8010CEC0_jp = 0x8010CEC0; // type:u8
D_8010D274_jp = 0x8010D274; //
D_8010D28C_jp = 0x8010D28C; //
@@ -6130,7 +6119,7 @@ B_80144620_jp = 0x80144620; // type:s16
B_80144624_jp = 0x80144624; //
B_80144628_jp = 0x80144628; //
B_8014462C_jp = 0x8014462C; //
-B_80144650_jp = 0x80144650; //
+fbdemo_mode = 0x80144650; //
B_80144660_jp = 0x80144660; //
B_80144670_jp = 0x80144670; //
B_80144680_jp = 0x80144680; //
diff --git a/src/code/game.c b/src/code/game.c
index 07fc3ca..beaf04f 100644
--- a/src/code/game.c
+++ b/src/code/game.c
@@ -74,7 +74,7 @@ void func_800D2E58_jp(u16 button, Gfx** gfxP) {
if (button & (1 << i)) {
j = i + 1;
gDPSetFillColor(gfx++, (RO_80117CE0_jp[i] << 0x10) | RO_80117CE0_jp[i]);
- gfx = func_800BE12C_jp(gfx, (i * 4) + 226, 220, (j * 4) + 226, 224);
+ gfx = gfx_gDPFillRectangleF(gfx, (i * 4) + 226, 220, (j * 4) + 226, 224);
gDPPipeSync(gfx++);
}
diff --git a/src/code/m_lights.c b/src/code/m_lights.c
index 8de578a..28753bd 100644
--- a/src/code/m_lights.c
+++ b/src/code/m_lights.c
@@ -339,7 +339,7 @@ void Light_list_point_draw(Game_Play* game_play) {
Gfx* gfx;
OPEN_DISPS(game_play->state.gfxCtx);
- gfx = func_800BD7C0_jp(POLY_XLU_DISP);
+ gfx = gfx_softsprite_prim_xlu(POLY_XLU_DISP);
gDPSetAlphaDither(gfx++, G_AD_NOISE);
gDPSetColorDither(gfx++, G_CD_MAGICSQ);
diff --git a/src/code/m_rcp.c b/src/code/m_rcp.c
new file mode 100644
index 0000000..23b3dcd
--- /dev/null
+++ b/src/code/m_rcp.c
@@ -0,0 +1,603 @@
+#include "m_rcp.h"
+
+#include "6B3DC0.h"
+#include "gfx.h"
+#include "gfxalloc.h"
+#include "macros.h"
+
+#include "overlays/gamestates/ovl_play/m_play.h"
+
+s32 fbdemo_mode;
+
+static Gfx z_gsCPModeSet_Data[][6] = {
+ {
+ /* 0 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
+ gsDPSetCombineLERP(PRIMITIVE, 0, SHADE, 0, 0, 0, 0, PRIMITIVE, PRIMITIVE, 0, SHADE, 0, 0, 0, 0, PRIMITIVE),
+ gsDPSetOtherMode(G_AD_NOTPATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_SURF | G_RM_AA_ZB_XLU_SURF2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* 1 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM),
+ gsDPSetOtherMode(G_AD_NOTPATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_ZB_CLD_SURF | G_RM_ZB_CLD_SURF2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* 2 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2),
+ gsDPSetOtherMode(G_AD_NOTPATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_OPA_SURF2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* 3 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEI_PRIM, G_CC_MODULATEI_PRIM),
+ gsDPSetOtherMode(G_AD_NOTPATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_OPA_SURF | G_RM_AA_ZB_OPA_SURF2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* 4 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEIDECALA_PRIM, G_CC_MODULATEIDECALA_PRIM),
+ gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_RGBA16 | G_TL_TILE |
+ G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_AA_TEX_EDGE | G_RM_AA_TEX_EDGE2),
+ gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* 5 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
+ gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE),
+ gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_NONE | G_CYC_FILL | G_PM_NPRIMITIVE,
+ G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_NOOP | G_RM_NOOP2),
+ gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* 6 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEI_PRIM, G_CC_MODULATEI_PRIM),
+ gsDPSetOtherMode(G_AD_NOTPATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_ZB_XLU_SURF | G_RM_ZB_XLU_SURF2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* 7 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
+ gsDPSetCombineMode(G_CC_PRIMITIVE, G_CC_PRIMITIVE),
+ gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_CLD_SURF | G_RM_CLD_SURF2),
+ gsSPLoadGeometryMode(G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* 8 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM),
+ gsDPSetOtherMode(G_AD_NOTPATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
+ G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_CLD_SURF | G_RM_CLD_SURF2),
+ gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* 9 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_PASS2),
+ gsDPSetOtherMode(G_AD_NOTPATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_PASS | G_RM_ZB_CLD_SURF2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* 10 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineLERP(TEXEL0, 0, SHADE, 0, 0, 0, 0, TEXEL0, PRIMITIVE, 0, COMBINED, 0, 0, 0, 0, COMBINED),
+ gsDPSetOtherMode(G_AD_NOTPATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_RGBA16 |
+ G_TL_TILE | G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_TEX_EDGE2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* 11 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineLERP(TEXEL0, 0, SHADE, 0, 0, 0, 0, TEXEL0, PRIMITIVE, 0, COMBINED, 0, 0, 0, 0, COMBINED),
+ gsDPSetOtherMode(G_AD_NOTPATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_RGBA16 |
+ G_TL_TILE | G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_FULL | ZMODE_OPA |
+ CVG_X_ALPHA | ALPHA_CVG_SEL | G_RM_FOG_SHADE_A |
+ GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* 12 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineLERP(TEXEL0, 0, SHADE, 0, 0, 0, 0, TEXEL0, PRIMITIVE, 0, COMBINED, 0, 0, 0, 0, COMBINED),
+ gsDPSetOtherMode(G_AD_NOTPATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_RGBA16 |
+ G_TL_TILE | G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_TEX_EDGE2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_FOG | G_LIGHTING | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* 13 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineLERP(TEXEL0, 0, SHADE, 0, 0, 0, 0, TEXEL0, PRIMITIVE, 0, COMBINED, 0, 0, 0, 0, COMBINED),
+ gsDPSetOtherMode(G_AD_NOTPATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_RGBA16 |
+ G_TL_TILE | G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_CLD_SURF2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_FOG | G_LIGHTING | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+ {
+ /* 14 */
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
+ gsDPSetCombineLERP(0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIM_LOD_FRAC, 0, 0, 0, 0, COMBINED, 0, 0, 0, COMBINED),
+ gsDPSetOtherMode(G_AD_NOTPATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_ZB_OVL_SURF2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_FOG | G_SHADING_SMOOTH),
+ gsSPEndDisplayList(),
+ },
+};
+
+Gfx RSP_RDP_clear_data[] = {
+ gsDPPipeSync(),
+ gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
+ gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE),
+ gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_PERSP | G_CYC_FILL | G_PM_NPRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_NOOP | G_RM_NOOP2),
+ gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH),
+ gsDPSetScissor(G_SC_NON_INTERLACE, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT),
+ gsDPSetBlendColor(0, 0, 0, 8),
+ gsSPClipRatio(FRUSTRATIO_2),
+ gsSPEndDisplayList(),
+};
+
+void gfx_set_fog_position(Gfx** gfxP, s32 near, s32 far) {
+ if (near == far) {
+ gSPFogFactor((*gfxP)++, 0, 0);
+ } else {
+ gSPFogPosition((*gfxP)++, near, far);
+ }
+}
+
+Gfx* gfx_set_fog_nosync(Gfx* gfx, s32 r, s32 g, s32 b, s32 a, s32 near, s32 far) {
+ gDPSetFogColor(gfx++, r, g, b, a);
+ gfx_set_fog_position(&gfx, near, far);
+ return gfx;
+}
+
+Gfx* func_800BD3EC_jp(Gfx* gfx, s32 i) {
+ s32 dListIndex = 6 * i;
+
+ gSPDisplayList(gfx++, &((Gfx*)z_gsCPModeSet_Data)[dListIndex]);
+ // Equivalent to gSPDisplayList(gfx++, z_gsCPModeSet_Data[i])
+ return gfx;
+}
+
+Gfx* func_800BD428_jp(Gfx* gfx, s32 i) {
+ return func_800BD3EC_jp(gfx, i);
+}
+
+Gfx* func_800BD448_jp(Gfx* gfx) {
+ gSPDisplayList(gfx++, z_gsCPModeSet_Data[7]);
+ return gfx;
+}
+
+void func_800BD470_jp(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_OPA_DISP++, z_gsCPModeSet_Data[7]);
+
+ CLOSE_DISPS(gfxCtx);
+}
+
+void func_800BD498_jp(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_OPA_DISP++, z_gsCPModeSet_Data[3]);
+
+ CLOSE_DISPS(gfxCtx);
+}
+
+void texture_z_light_prim_xlu_disp(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_XLU_DISP++, z_gsCPModeSet_Data[2]);
+
+ CLOSE_DISPS(gfxCtx);
+}
+
+void _texture_z_light_fog_prim(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_OPA_DISP++, z_gsCPModeSet_Data[2]);
+
+ CLOSE_DISPS(gfxCtx);
+}
+
+void _texture_z_light_fog_prim_shadow(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(SHADOW_DISP++, z_gsCPModeSet_Data[2]);
+
+ CLOSE_DISPS(gfxCtx);
+}
+
+void _texture_z_light_fog_prim_npc_shadow(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(SHADOW_DISP++, z_gsCPModeSet_Data[10]);
+ gDPPipeSync(SHADOW_DISP++);
+ gDPSetPrimColor(SHADOW_DISP++, 0, 0x80, 255, 255, 255, 255);
+
+ CLOSE_DISPS(gfxCtx);
+}
+
+void _texture_z_light_fog_prim_xlu(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_XLU_DISP++, z_gsCPModeSet_Data[2]);
+
+ CLOSE_DISPS(gfxCtx);
+}
+
+void _texture_z_light_fog_prim_light(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(LIGHT_DISP++, z_gsCPModeSet_Data[2]);
+
+ CLOSE_DISPS(gfxCtx);
+}
+
+void _texture_z_light_fog_prim_npc(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_OPA_DISP++, z_gsCPModeSet_Data[10]);
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0x80, 255, 255, 255, 255);
+
+ CLOSE_DISPS(gfxCtx);
+}
+
+Gfx* texture_z_light_fog_prim_bb_pal_opa(Gfx* gfx) {
+ gSPDisplayList(gfx++, z_gsCPModeSet_Data[12]);
+ gDPSetPrimColor(gfx++, 0, 0x80, 255, 255, 255, 255);
+
+ return gfx;
+}
+
+Gfx* texture_z_light_fog_prim_bb_pal_xlu(Gfx* gfx) {
+ gSPDisplayList(gfx++, z_gsCPModeSet_Data[13]);
+ gDPSetPrimColor(gfx++, 0, 0x80, 255, 255, 255, 255);
+
+ return gfx;
+}
+
+Gfx* texture_z_fog_lod_alpha_shadow(Gfx* gfx) {
+ gSPDisplayList(gfx++, z_gsCPModeSet_Data[14]);
+
+ return gfx;
+}
+
+void func_800BD6F8_jp(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_OPA_DISP++, z_gsCPModeSet_Data[5]);
+
+ CLOSE_DISPS(gfxCtx);
+}
+
+Gfx* gfx_rect_moji(Gfx* gfx) {
+ gSPDisplayList(gfx++, z_gsCPModeSet_Data[4]);
+
+ return gfx;
+}
+
+void rect_moji(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_OPA_DISP++, z_gsCPModeSet_Data[4]);
+
+ CLOSE_DISPS(gfxCtx);
+}
+
+void polygon_z_light_prim(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_XLU_DISP++, z_gsCPModeSet_Data[0]);
+
+ CLOSE_DISPS(gfxCtx);
+}
+
+void softsprite_prim(GraphicsContext* gfxCtx) {
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_XLU_DISP++, z_gsCPModeSet_Data[6]);
+
+ CLOSE_DISPS(gfxCtx);
+}
+
+#define HREG_21 0
+#define HREG_22 0
+
+Gfx* gfx_softsprite_prim_xlu(Gfx* gfx) {
+ gSPDisplayList(gfx++, z_gsCPModeSet_Data[8]);
+ gDPSetColorDither(gfx++, G_CD_DISABLE);
+
+ // clang-format off
+ switch (HREG_21) {
+ case 1: gDPSetAlphaDither(gfx++, G_AD_DISABLE); break;
+ case 2: gDPSetAlphaDither(gfx++, G_AD_PATTERN); break;
+ case 3: gDPSetAlphaDither(gfx++, G_AD_NOTPATTERN); break;
+ case 4: gDPSetAlphaDither(gfx++, G_AD_NOISE); break;
+ default: break;
+ }
+
+ switch (HREG_22) {
+ case 1: gDPSetColorDither(gfx++, G_CD_DISABLE); break;
+ case 2: gDPSetColorDither(gfx++, G_CD_MAGICSQ); break;
+ case 3: gDPSetColorDither(gfx++, G_CD_BAYER); break;
+ case 4: gDPSetColorDither(gfx++, G_CD_NOISE); break;
+ default: break;
+ }
+ // clang-format on
+
+ return gfx;
+}
+
+Gfx* gfx_tex_scroll2(Gfx** gfxP, u32 x, u32 y, s32 width, s32 height) {
+ Gfx* dList = gfxalloc(gfxP, 3 * sizeof(Gfx));
+
+ gDPTileSync(dList);
+ gDPSetTileSize(dList + 1, G_TX_RENDERTILE, x, y, x + ((width - 1) << 2), y + ((height - 1) << 2));
+ gSPEndDisplayList(dList + 2);
+
+ return dList;
+}
+
+Gfx* gfx_two_tex_scroll(Gfx** gfxP, s32 tile1, u32 x1, u32 y1, s32 width1, s32 height1, s32 tile2, u32 x2, u32 y2,
+ s32 width2, s32 height2) {
+ Gfx* dList = gfxalloc(gfxP, 5 * sizeof(Gfx));
+
+ x1 %= 512 << 2;
+ y1 %= 512 << 2;
+ x2 %= 512 << 2;
+ y2 %= 512 << 2;
+
+ gDPTileSync(dList);
+ gDPSetTileSize(dList + 1, tile1, x1, y1, x1 + ((width1 - 1) << 2), y1 + ((height1 - 1) << 2));
+ gDPTileSync(dList + 2);
+ gDPSetTileSize(dList + 3, tile2, x2, y2, x2 + ((width2 - 1) << 2), y2 + ((height2 - 1) << 2));
+ gSPEndDisplayList(dList + 4);
+
+ return dList;
+}
+
+Gfx* func_800BD9D8_jp(Gfx** gfxP, u32 x, u32 y) {
+ return gfx_tex_scroll2(gfxP, x, y, 0, 0);
+}
+
+Gfx* func_800BD9FC_jp(GraphicsContext* gfxCtx, u32 x, u32 y) {
+ return tex_scroll2(gfxCtx, x, y, 0, 0);
+}
+
+Gfx* tex_scroll2(GraphicsContext* gfxCtx, u32 x, u32 y, s32 width, s32 height) {
+ Gfx* dList = GRAPH_ALLOC_NO_ALIGN(gfxCtx, 3 * sizeof(Gfx));
+
+ if (dList != NULL) {
+ x %= 512 << 2;
+ y %= 512 << 2;
+
+ gDPTileSync(dList);
+ gDPSetTileSize(dList + 1, G_TX_RENDERTILE, x, y, x + ((width - 1) << 2), y + ((height - 1) << 2));
+ gSPEndDisplayList(dList + 2);
+ }
+
+ return dList;
+}
+
+Gfx* two_tex_scroll(GraphicsContext* gfxCtx, s32 tile1, u32 x1, u32 y1, s32 width1, s32 height1, s32 tile2, u32 x2,
+ u32 y2, s32 width2, s32 height2) {
+ Gfx* dList = GRAPH_ALLOC_NO_ALIGN(gfxCtx, 5 * sizeof(Gfx));
+
+ if (dList != NULL) {
+ x1 %= 512 << 2;
+ y1 %= 512 << 2;
+ x2 %= 512 << 2;
+ y2 %= 512 << 2;
+
+ gDPTileSync(dList);
+ gDPSetTileSize(dList + 1, tile1, x1, y1, x1 + ((width1 - 1) << 2), y1 + ((height1 - 1) << 2));
+ gDPTileSync(dList + 2);
+ gDPSetTileSize(dList + 3, tile2, x2, y2, x2 + ((width2 - 1) << 2), y2 + ((height2 - 1) << 2));
+ gSPEndDisplayList(dList + 4);
+ }
+
+ return dList;
+}
+
+void DisplayList_initialize(GraphicsContext* gfxCtx, u8 clearR, u8 clearG, u8 clearB, Game_Play* game_play) {
+ void* unk_008;
+
+ OPEN_DISPS(gfxCtx);
+
+ gSPDisplayList(POLY_OPA_DISP++, RSP_RDP_clear_data);
+ gSPDisplayList(POLY_XLU_DISP++, RSP_RDP_clear_data);
+ gSPDisplayList(OVERLAY_DISP++, RSP_RDP_clear_data);
+ gSPDisplayList(UNK_2B0_DISP++, RSP_RDP_clear_data);
+ gSPDisplayList(SHADOW_DISP++, z_gsCPModeSet_Data[2]);
+ gSPDisplayList(LIGHT_DISP++, z_gsCPModeSet_Data[2]);
+
+ gDPSetScissor(POLY_OPA_DISP++, G_SC_NON_INTERLACE, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
+ gDPSetScissor(POLY_XLU_DISP++, G_SC_NON_INTERLACE, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
+ gDPSetScissor(OVERLAY_DISP++, G_SC_NON_INTERLACE, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
+ gDPSetScissor(UNK_2B0_DISP++, G_SC_NON_INTERLACE, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
+ gDPSetScissor(SHADOW_DISP++, G_SC_NON_INTERLACE, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
+ gDPSetScissor(LIGHT_DISP++, G_SC_NON_INTERLACE, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
+
+ gDPSetColorImage(POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, SCREEN_WIDTH, gfxCtx->unk_2E4);
+ gDPSetColorImage(POLY_XLU_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, SCREEN_WIDTH, gfxCtx->unk_2E4);
+ gDPSetColorImage(OVERLAY_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, SCREEN_WIDTH, gfxCtx->unk_2E4);
+ gDPSetColorImage(UNK_2B0_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, SCREEN_WIDTH, gfxCtx->unk_2E4);
+ gDPSetColorImage(SHADOW_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, SCREEN_WIDTH, gfxCtx->unk_2E4);
+ gDPSetColorImage(LIGHT_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, SCREEN_WIDTH, gfxCtx->unk_2E4);
+
+ unk_008 = gfxCtx->unk_008;
+
+ gDPSetDepthImage(POLY_OPA_DISP++, unk_008);
+ gDPSetDepthImage(POLY_XLU_DISP++, unk_008);
+ gDPSetDepthImage(OVERLAY_DISP++, unk_008);
+ gDPSetDepthImage(UNK_2B0_DISP++, unk_008);
+ gDPSetDepthImage(SHADOW_DISP++, unk_008);
+ gDPSetDepthImage(LIGHT_DISP++, unk_008);
+
+ if ((game_play == NULL) || ((game_play->submenu.unk_00 < 2) && (fbdemo_mode < 2))) {
+ gDPSetColorImage(POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, SCREEN_WIDTH, gfxCtx->unk_008);
+ gDPSetCycleType(POLY_OPA_DISP++, G_CYC_FILL);
+ gDPSetRenderMode(POLY_OPA_DISP++, G_RM_NOOP, G_RM_NOOP2);
+ gDPSetFillColor(POLY_OPA_DISP++, (GPACK_RGBA5551(255, 255, 240, 0) << 16) | GPACK_RGBA5551(255, 255, 240, 0));
+ gDPFillRectangle(POLY_OPA_DISP++, 0, 0, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1);
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetColorImage(POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, SCREEN_WIDTH, gfxCtx->unk_2E4);
+ gDPSetCycleType(POLY_OPA_DISP++, G_CYC_FILL);
+ gDPSetRenderMode(POLY_OPA_DISP++, G_RM_NOOP, G_RM_NOOP2);
+ gDPSetFillColor(POLY_OPA_DISP++,
+ (GPACK_RGBA5551(clearR, clearG, clearB, 1) << 16) | GPACK_RGBA5551(clearR, clearG, clearB, 1));
+ gDPFillRectangle(POLY_OPA_DISP++, 0, 0, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1);
+ gDPPipeSync(POLY_OPA_DISP++);
+ }
+
+ //! FAKE:
+ if (gfxCtx && gfxCtx && gfxCtx) {}
+
+ CLOSE_DISPS(gfxCtx);
+
+ func_80091074_jp(gfxCtx);
+}
+
+void fade_rgba8888_draw(Gfx** gfxP, u32 color) {
+ static Gfx fade_gfx[] = {
+ gsDPPipeSync(),
+ gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_1PRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_CLD_SURF | G_RM_CLD_SURF2),
+ gsDPSetCombineMode(G_CC_PRIMITIVE, G_CC_PRIMITIVE),
+ gsDPFillRectangle(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT),
+ gsDPPipeSync(),
+ gsSPEndDisplayList(),
+ };
+ static Gfx fill_gfx[] = {
+ gsDPPipeSync(),
+ gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
+ G_TD_CLAMP | G_TP_NONE | G_CYC_FILL | G_PM_1PRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_NOOP | G_RM_NOOP2),
+ gsDPFillRectangle(0, 0, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1),
+ gsDPPipeSync(),
+ gsSPEndDisplayList(),
+ };
+ Gfx* gfx;
+
+ if ((color & 0xFF) == 255) {
+ u32 c;
+
+ gfx = *gfxP;
+ c = ((color >> 27) << 11) | ((color >> 19) << 6) | (color >> 10) | 1;
+ gDPSetFillColor(gfx, (c << 0x10) | c);
+ gSPDisplayList(gfx + 1, fill_gfx);
+ *gfxP = gfx + 2;
+ } else if ((color & 0xFF) != 0) {
+ gfx = *gfxP;
+ gDPSetColor(gfx, G_SETPRIMCOLOR, color);
+ gSPDisplayList(gfx + 1, fade_gfx);
+ *gfxP = gfx + 2;
+ }
+}
+
+void func_800BE030_jp(Gfx** gfxP, u32 r, u32 g, u32 b, u32 a) {
+ fade_rgba8888_draw(gfxP, (r << 24) | (g << 16) | (b << 8) | a);
+}
+
+void fade_black_draw(Gfx** gfxP, u32 color) {
+ //! FAKE:
+ fade_rgba8888_draw(gfxP, color ^ 0);
+}
+
+Gfx* gfx_gDPFillRectangle1(Gfx* gfx, s32 ulx, s32 uly, s32 lrx, s32 lry) {
+ gDPFillRectangle(gfx++, ulx, uly, lrx, lry);
+ return gfx;
+}
+
+void func_800BE0E4_jp(Gfx** gfxP, s32 ulx, s32 uly, s32 lrx, s32 lry) {
+ gDPFillRectangle(*gfxP, ulx, uly, lrx, lry);
+}
+
+Gfx* gfx_gDPFillRectangleF(Gfx* gfx, s32 ulx, s32 uly, s32 lrx, s32 lry) {
+ gDPFillRectangle(gfx++, ulx, uly, lrx - 1, lry - 1);
+ return gfx;
+}
+
+void func_800BE184_jp(Gfx** gfxP, s32 ulx, s32 uly, s32 lrx, s32 lry) {
+ gDPFillRectangle(*gfxP, ulx, uly, lrx - 1, lry - 1);
+}
+
+Gfx* gfx_gSPTextureRectangle1(Gfx* gfx, s32 xl, s32 yl, s32 xh, s32 yh, s32 tile, s32 s, s32 t, s32 dsdx, s32 dtdy) {
+ gSPTextureRectangle(gfx++, xl, yl, xh, yh, tile, s, t, dsdx, dtdy);
+ return gfx;
+}
+
+Gfx* func_800BE27C_jp(Gfx* gfx, s32 xl, s32 yl, s32 xh, s32 yh, s32 tile, s32 s, s32 t) {
+ gSPTextureRectangle(gfx++, xl, yl, xh - 1, yh - 1, tile, s, t, 1 << 10, 1 << 10);
+ return gfx;
+}
+
+Gfx* gfx_gSPScisTextureRectangle1(Gfx* gfx, s32 xl, s32 yl, s32 xh, s32 yh, s32 tile, s32 s, s32 t, s32 dsdx,
+ s32 dtdy) {
+ gSPScisTextureRectangle(gfx++, (s16)xl, (s16)yl, xh, yh, tile, s, t, dsdx, dtdy);
+ return gfx;
+}
+
+Gfx* func_800BE4F8_jp(Gfx* gfx, s32 xl, s32 yl, s32 xh, s32 yh, s32 tile, s32 s, s32 t) {
+ gSPScisTextureRectangle(gfx++, (s16)xl, (s16)yl, xh - 1, yh - 1, tile, s, t, 1 << 10, 1 << 10);
+ return gfx;
+}
diff --git a/src/overlays/actors/ovl_Toudai/ac_toudai.c b/src/overlays/actors/ovl_Toudai/ac_toudai.c
index 280dfa6..694e058 100644
--- a/src/overlays/actors/ovl_Toudai/ac_toudai.c
+++ b/src/overlays/actors/ovl_Toudai/ac_toudai.c
@@ -233,7 +233,7 @@ s32 aTOU_actor_draw_after(Game_Play* game_play, SkeletonInfoR* skeletonInfo, s32
type = (common_data.time.season == 3);
object = common_data.unk_10098->unk_AC(45);
palette = common_data.unk_10098->unk_450(90);
- func_800BD5C0_jp(game_play->state.gfxCtx);
+ _texture_z_light_fog_prim_light(game_play->state.gfxCtx);
gfx = LIGHT_DISP;
gSPSegment(gfx++, 0x08, palette);
gSPSegment(gfx++, 0x06, object);
diff --git a/src/overlays/gamestates/ovl_play/m_play.c b/src/overlays/gamestates/ovl_play/m_play.c
index 17d5c53..08cf02c 100644
--- a/src/overlays/gamestates/ovl_play/m_play.c
+++ b/src/overlays/gamestates/ovl_play/m_play.c
@@ -710,7 +710,7 @@ void draw_version(GraphicsContext* gfxCtx) {
OPEN_DISPS(gfxCtx);
- temp_s0 = func_800BD720_jp(OVERLAY_DISP);
+ temp_s0 = gfx_rect_moji(OVERLAY_DISP);
printer = alloca(sizeof(gfxprint));
gfxprint_init(printer);
diff --git a/src/overlays/submenu/submenu_ovl/m_submenu_ovl.c b/src/overlays/submenu/submenu_ovl/m_submenu_ovl.c
index 0bc469a..deb95ba 100644
--- a/src/overlays/submenu/submenu_ovl/m_submenu_ovl.c
+++ b/src/overlays/submenu/submenu_ovl/m_submenu_ovl.c
@@ -1106,7 +1106,7 @@ void mSM_draw_item(GraphicsContext* gfxCtx, f32 arg1, f32 arg2, f32 arg3, u16 ar
ar8 = (s32)((1.0f / arg3) * 1365.3334f);
ar9 = (s32)((1.0f / arg3) * 1365.3334f);
- gfx = func_800BE320_jp(gfx, ar1, ar2, ar3, ar4, ar5, ar6, ar7, ar8, ar9);
+ gfx = gfx_gSPScisTextureRectangle1(gfx, ar1, ar2, ar3, ar4, ar5, ar6, ar7, ar8, ar9);
}
gDPPipeSync(gfx++);
diff --git a/yamls/jp/code.yaml b/yamls/jp/code.yaml
index c50a1e2..c9bebfc 100644
--- a/yamls/jp/code.yaml
+++ b/yamls/jp/code.yaml
@@ -69,7 +69,7 @@
- [0x6DB420, c, code/m_private]
- [0x6DE300, asm, code/6DE300]
- [0x6E08E0, asm, code/m_random_field]
- - [0x6E0F50, asm, code/m_rcp]
+ - [0x6E0F50, c, code/m_rcp]
- [0x6E2300, asm, code/6E2300]
- [0x6E30B0, asm, code/6E30B0]
- [0x6E6C90, c, code/m_start_data_init]
@@ -159,6 +159,8 @@
- [0x72F9B0, data, code/72F9B0]
- [0x7302C0, .data, code/m_private]
- [0x730320, data, code/730320]
+ - [0x7307D0, .data, code/m_rcp]
+ - [0x730B60, data, code/730B60]
- [0x731940, .data, code/m_start_data_init]
- [0x731980, .data, code/m_submenu]
- [0x731A20, data, code/731A20]
@@ -282,6 +284,8 @@
- { start: 0x73F4D0, type: bss, vram: 0x80143910, name: code/80143910 }
- { start: 0x73F4D0, type: .bss, vram: 0x801439A0, name: code/m_private }
- { start: 0x73F4D0, type: bss, vram: 0x80144620, name: code/80144620 }
+ - { start: 0x73F4D0, type: .bss, vram: 0x80144650, name: code/m_rcp }
+ - { start: 0x73F4D0, type: bss, vram: 0x80144660, name: code/80144660 }
- { start: 0x73F4D0, type: .bss, vram: 0x80144670, name: code/m_submenu }
- { start: 0x73F4D0, type: bss, vram: 0x80144690, name: code/80144690 }
- { start: 0x73F4D0, type: .bss, vram: 0x80144D20, name: code/audioMgr }