From e980d79bc18cc1311cceb8f9b757a768075c3671 Mon Sep 17 00:00:00 2001 From: Fazana <52551480+FazanaJ@users.noreply.github.com> Date: Sun, 20 Apr 2025 19:41:04 +0100 Subject: [PATCH] document textures_sprites.c (#523) --- README.md | 10 +- include/f3ddkr.h | 2 +- include/macros.h | 5 + include/structs.h | 2 +- src/audio_spatial.c | 2 +- src/camera.c | 6 +- src/camera.h | 2 +- src/fade_transition.c | 24 +-- src/font.c | 6 +- src/game.c | 2 +- src/game_ui.c | 36 ++--- src/game_ui.h | 11 +- src/menu.c | 72 ++++----- src/object_models.c | 16 +- src/object_models.h | 3 - src/objects.c | 38 ++--- src/particles.c | 22 +-- src/textures_sprites.c | 227 ++++++++++++++++----------- src/textures_sprites.h | 51 +++--- src/tracks.c | 26 +-- src/waves.c | 10 +- src/weather.c | 28 ++-- ver/symbols/symbol_addrs.jpn.v79.txt | 50 +++--- ver/symbols/symbol_addrs.pal.v77.txt | 50 +++--- ver/symbols/symbol_addrs.pal.v80.txt | 50 +++--- ver/symbols/symbol_addrs.us.v77.txt | 50 +++--- ver/symbols/symbol_addrs.us.v80.txt | 50 +++--- 27 files changed, 456 insertions(+), 395 deletions(-) diff --git a/README.md b/README.md index b8c6a111..cf024afe 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ As of April 19, 2025, this is our current score:     Decomp progress: 79.89% -    Documentation progress: 52.64% +    Documentation progress: 53.78% --- @@ -133,14 +133,14 @@ As of April 19, 2025, this is our current score: We are collecting silver coins in Haunted Woods. (6/8 silver coins) =================================================================== ADVENTURE TWO (Cleanup & Documentation) - ------------------------- 52.64% Complete ------------------------- - # Documented functions: 1126 - # Undocumented remaining: 527 + ------------------------- 53.78% Complete ------------------------- + # Documented functions: 1136 + # Undocumented remaining: 517 --------------------------- Game Status --------------------------- Balloons: 26/47, Keys: 3/4, Trophies: 2/5 T.T. Amulets: 2/4, Wizpig Amulets: 2/4 ------------------------------------------------------------------- - We are racing the octopus boss Bubbler. (Lap 3/3) + We are battling in Darkwater Beach. (2 opponents remain) =================================================================== ``` diff --git a/include/f3ddkr.h b/include/f3ddkr.h index bde6cae4..1c41758f 100644 --- a/include/f3ddkr.h +++ b/include/f3ddkr.h @@ -127,7 +127,7 @@ } #if defined(F3DDKR_GBI) - // ?????? - Needed to modify this to work with matching build_tex_display_list + // ?????? - Needed to modify this to work with matching material_init #undef TXL2WORDS_4b #define TXL2WORDS_4b(txls) ((txls)/16) #endif diff --git a/include/macros.h b/include/macros.h index f38a7a52..d8c102ff 100644 --- a/include/macros.h +++ b/include/macros.h @@ -75,4 +75,9 @@ // Used to make a u32 colour value look clearer. Transforms 0xFF0000FF to 255, 0, 0, 255 #define COLOUR_RGBA32(r, g, b, a) (((r << 24) | (g << 16) | (b << 8) | a)) +// A few systems in the game use an array as a cache table. This gives you the asset ID +#define ASSETCACHE_ID(x) ((x << 1) + 0) +// A few systems in the game use an array as a cache table. This gives you the pointer to the asset +#define ASSETCACHE_PTR(x) ((x << 1) + 1) + #endif diff --git a/include/structs.h b/include/structs.h index 147a642a..858385fa 100644 --- a/include/structs.h +++ b/include/structs.h @@ -163,7 +163,7 @@ typedef struct Sprite { /* 0x00 */ s16 baseTextureId; /* 0x02 */ s16 numberOfFrames; // 1 means static texture /* 0x04 */ s16 numberOfInstances; - /* 0x06 */ s16 unk6; + /* 0x06 */ s16 drawFlags; /* 0x08 */ TextureHeader **frames; union { /* 0x0C */ u8 val[1]; // Actual size varies. diff --git a/src/audio_spatial.c b/src/audio_spatial.c index 915d8544..1ca2f84b 100644 --- a/src/audio_spatial.c +++ b/src/audio_spatial.c @@ -576,7 +576,7 @@ void debug_render_line(Gfx **dList, Vertex **verts, Triangle **tris, f32 coords[ temp_verts = *verts; temp_tris = *tris; - load_and_set_texture_no_offset(&temp_dlist, NULL, RENDER_NONE); + material_set_no_tex_offset(&temp_dlist, NULL, RENDER_NONE); gSPVertexDKR(temp_dlist++, OS_PHYSICAL_TO_K0(temp_verts), 4, 0); gSPPolygon(temp_dlist++, OS_PHYSICAL_TO_K0(temp_tris), 2, 0); temp_verts[0].x = x1; diff --git a/src/camera.c b/src/camera.c index e0a74c1d..b2c8f938 100644 --- a/src/camera.c +++ b/src/camera.c @@ -1143,8 +1143,8 @@ s32 render_sprite_billboard(Gfx **dList, MatrixS **mtx, Vertex **vertexList, Obj if (flags & RENDER_SEMI_TRANSPARENT) { flags |= RENDER_ANTI_ALIASING; } - func_8007BF34(dList, arg4->unk6 | (flags & (RENDER_FOG_ACTIVE | RENDER_SEMI_TRANSPARENT | RENDER_Z_COMPARE | - RENDER_ANTI_ALIASING))); + material_load_simple(dList, arg4->drawFlags | (flags & (RENDER_FOG_ACTIVE | RENDER_SEMI_TRANSPARENT | RENDER_Z_COMPARE | + RENDER_ANTI_ALIASING))); if (!(flags & RENDER_Z_UPDATE)) { gDPSetPrimColor((*dList)++, 0, 0, 255, 255, 255, 255); } @@ -1211,7 +1211,7 @@ void render_ortho_triangle_image(Gfx **dList, MatrixS **mtx, Vertex **vtx, Objec if (gSpriteAnimOff == FALSE) { index = (((u8) index) * sprite->baseTextureId) >> 8; } - func_8007BF34(dList, sprite->unk6 | flags); + material_load_simple(dList, sprite->drawFlags | flags); if (index >= sprite->baseTextureId) { index = sprite->baseTextureId - 1; } diff --git a/src/camera.h b/src/camera.h index a6fb77c9..3270bac7 100644 --- a/src/camera.h +++ b/src/camera.h @@ -75,7 +75,7 @@ typedef struct unk80068514_arg4 { s16 textureCount; s16 unk2; s16 unk4; - s16 unk6; + s16 drawFlags; Gfx *unk8[1]; } unk80068514_arg4; diff --git a/src/fade_transition.c b/src/fade_transition.c index 5bedbef0..5f7578bd 100644 --- a/src/fade_transition.c +++ b/src/fade_transition.c @@ -430,7 +430,7 @@ void transition_render_fullscreen(Gfx **dList, UNUSED MatrixS **mtx, UNUSED Vert gDPSetPrimColor((*dList)++, 0, 0, gCurFadeRed, gCurFadeGreen, gCurFadeBlue, gCurFadeAlpha); gDPSetCombineMode((*dList)++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); gDPFillRectangle((*dList)++, 0, 0, screenSize & 0x3FF, (screenSize >> 16) & 0x3FF); - reset_render_settings(dList); + rendermode_reset(dList); } /** @@ -553,11 +553,11 @@ void transition_update_shape(s32 updateRate) { * Renders a transition effect on screen that will close in from both sides horizonally. */ void transition_render_barndoor_hor(Gfx **dList, UNUSED MatrixS **mtx, UNUSED Vertex **vtx) { - reset_render_settings(dList); + rendermode_reset(dList); gSPDisplayList((*dList)++, dTransitionShapeSettings); gSPVertexDKR((*dList)++, OS_PHYSICAL_TO_K0(sTransitionVtx[sTransitionTaskNum]), 12, 0); gSPPolygon((*dList)++, OS_PHYSICAL_TO_K0(sTransitionTris[sTransitionTaskNum]), 8, TRIN_DISABLE_TEXTURE); - reset_render_settings(dList); + rendermode_reset(dList); } /** @@ -565,11 +565,11 @@ void transition_render_barndoor_hor(Gfx **dList, UNUSED MatrixS **mtx, UNUSED Ve * Codewise, exactly the same as above, but uses a different vertex layout to make the difference. */ void transition_render_barndoor_vert(Gfx **dList, UNUSED MatrixS **mtx, UNUSED Vertex **vtx) { - reset_render_settings(dList); + rendermode_reset(dList); gSPDisplayList((*dList)++, dTransitionShapeSettings); gSPVertexDKR((*dList)++, OS_PHYSICAL_TO_K0(sTransitionVtx[sTransitionTaskNum]), 12, 0); gSPPolygon((*dList)++, OS_PHYSICAL_TO_K0(sTransitionTris[sTransitionTaskNum]), 8, TRIN_DISABLE_TEXTURE); - reset_render_settings(dList); + rendermode_reset(dList); } void transition_init_circle(FadeTransition *transition) { @@ -738,7 +738,7 @@ void transition_render_circle(Gfx **dList, UNUSED MatrixS **mtx, UNUSED Vertex * Gfx *gfx; s32 i; - reset_render_settings(dList); + rendermode_reset(dList); gfx = *dList; vertsToRender = (Vertex *) sTransitionVtx[sTransitionTaskNum]; @@ -753,7 +753,7 @@ void transition_render_circle(Gfx **dList, UNUSED MatrixS **mtx, UNUSED Vertex * } *dList = gfx; - reset_render_settings(dList); + rendermode_reset(dList); } /** @@ -764,7 +764,7 @@ void transition_render_waves(Gfx **dList, UNUSED MatrixS **mtx, UNUSED Vertex ** s32 i; Vertex *v; Triangle *t; - reset_render_settings(dList); + rendermode_reset(dList); gfx = *dList; v = (Vertex *) sTransitionVtx[sTransitionTaskNum]; t = (Triangle *) sTransitionTris[sTransitionTaskNum]; @@ -791,18 +791,18 @@ void transition_render_waves(Gfx **dList, UNUSED MatrixS **mtx, UNUSED Vertex ** } } *dList = gfx; - reset_render_settings(dList); + rendermode_reset(dList); } /** * Renders a transition effect on screen that will close in from the opposite corners of the screen. */ void transition_render_barndoor_diag(Gfx **dList, UNUSED MatrixS **mtx, UNUSED Vertex **vtx) { - reset_render_settings(dList); + rendermode_reset(dList); gSPDisplayList((*dList)++, dTransitionShapeSettings); gSPVertexDKR((*dList)++, OS_PHYSICAL_TO_K0(sTransitionVtx[sTransitionTaskNum]), 10, 0); gSPPolygon((*dList)++, OS_PHYSICAL_TO_K0(sTransitionTris[sTransitionTaskNum]), 6, TRIN_DISABLE_TEXTURE); - reset_render_settings(dList); + rendermode_reset(dList); } /** @@ -861,5 +861,5 @@ void transition_render_blank(Gfx **dList, UNUSED MatrixS **mtx, UNUSED Vertex ** gDPSetPrimColor((*dList)++, 0, 0, (gLastFadeRed >> 16), (gLastFadeGreen >> 16), (gLastFadeBlue >> 16), 255); gDPSetCombineMode((*dList)++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); gDPFillRectangle((*dList)++, 0, 0, GET_VIDEO_WIDTH(screenSize), GET_VIDEO_HEIGHT(screenSize) & 0x3FF); - reset_render_settings(dList); + rendermode_reset(dList); } diff --git a/src/font.c b/src/font.c index 58285262..c8cc6796 100644 --- a/src/font.c +++ b/src/font.c @@ -240,7 +240,7 @@ void unload_font(s32 fontID) { if (fontData->loadedFonts[0] == 0) { s32 i = 0; while (i < 32 && fontData->textureID[i] != -1) { - free_texture(fontData->texturePointers[i]); + tex_free(fontData->texturePointers[i]); fontData->texturePointers[i] = NULL; i++; } @@ -508,7 +508,7 @@ void render_text_string(Gfx **dList, DialogueBoxBackground *box, char *text, Ali if (box != gDialogueBoxBackground) { viewport_scissor(dList); } - reset_render_settings(dList); + rendermode_reset(dList); gDPPipeSync((*dList)++); } } @@ -702,7 +702,7 @@ void render_text_string(Gfx **dList, DialogueBoxBackground *box, char *text, Ali if (box != gDialogueBoxBackground) { viewport_scissor(dList); } - reset_render_settings(dList); + rendermode_reset(dList); gDPPipeSync((*dList)++); } #endif diff --git a/src/game.c b/src/game.c index 5d5edda5..e2cb9dbe 100644 --- a/src/game.c +++ b/src/game.c @@ -710,7 +710,7 @@ void clear_audio_and_track(void) { } //! @bug this will never be true because skyDome is signed. if (gCurrentLevelHeader->skyDome == 0xFF) { - free_texture(gCurrentLevelHeader->unkA4); + tex_free(gCurrentLevelHeader->unkA4); } } diff --git a/src/game_ui.c b/src/game_ui.c index dab1bfc9..e75dee20 100644 --- a/src/game_ui.c +++ b/src/game_ui.c @@ -343,11 +343,11 @@ void hud_free(void) { s32 i; for (i = 0; i < gAssetHudElementIdsCount; i++) { if (gAssetHudElements->entry[i] != NULL) { - if ((gAssetHudElementIds[i] & HUD_ELEMENT_TEXTURE) == HUD_ELEMENT_TEXTURE) { - free_texture(gAssetHudElements->entry[i]); - } else if (gAssetHudElementIds[i] & HUD_ELEMENT_SPRITE) { - free_sprite((Sprite *) gAssetHudElements->entry[i]); - } else if (gAssetHudElementIds[i] & HUD_ELEMENT_OBJECT) { + if ((gAssetHudElementIds[i] & ASSET_MASK_TEXTURE) == ASSET_MASK_TEXTURE) { + tex_free(gAssetHudElements->entry[i]); + } else if (gAssetHudElementIds[i] & ASSET_MASK_SPRITE) { + sprite_free((Sprite *) gAssetHudElements->entry[i]); + } else if (gAssetHudElementIds[i] & ASSET_MASK_OBJECT) { free_object((Object *) gAssetHudElements->entry[i]); } else { free_3d_model((ObjectModel **) gAssetHudElements->entry[i]); @@ -805,7 +805,7 @@ void hud_main_treasure(s32 countdown, Object *obj, s32 updateRate) { break; } racer = &obj->unk64->racer; - reset_render_settings(&gHudDL); + rendermode_reset(&gHudDL); hud_bananas(racer, updateRate); hud_weapon(obj, updateRate); sprite_anim_off(FALSE); @@ -1076,7 +1076,7 @@ void hud_lives_render(Object_Racer *racer, UNUSED s32 updateRate) { hud_element_render(&gHudDL, &gHudMtx, &gHudVtx, &gCurrentHud->entry[HUD_CHALLENGE_PORTRAIT]); D_80126CD5 = FALSE; rdp_init(&gHudDL); - reset_render_settings(&gHudDL); + rendermode_reset(&gHudDL); } if (racer->bananas < 10) { gCurrentHud->entry[HUD_BATTLE_BANANA_COUNT_1].spriteOffset = racer->bananas; @@ -1529,7 +1529,7 @@ void hud_speedometre(Object *obj, UNUSED s32 updateRate) { opacity = 255; } hud_element_render(&gHudDL, &gHudMtx, &gHudVtx, &gCurrentHud->entry[HUD_SPEEDOMETRE_BG]); - reset_render_settings(&gHudDL); + rendermode_reset(&gHudDL); sprite_opaque(TRUE); gDPSetPrimColor(gHudDL++, 0, 0, 255, 255, 255, opacity); hud_element_render(&gHudDL, &gHudMtx, &gHudVtx, &gCurrentHud->entry[HUD_SPEEDOMETRE_ARROW]); @@ -3043,11 +3043,11 @@ void hud_render_general(Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 updateRate for (i = 0; i < gAssetHudElementIdsCount; i++) { if (gAssetHudElements->entry[i] && i != 40) { if (++gAssetHudElementStaleCounter[i] > 60) { - if ((gAssetHudElementIds[i] & HUD_ELEMENT_TEXTURE) == HUD_ELEMENT_TEXTURE) { - free_texture((TextureHeader *) gAssetHudElements->entry[i]); - } else if (gAssetHudElementIds[i] & HUD_ELEMENT_SPRITE) { - free_sprite((Sprite *) gAssetHudElements->entry[i]); - } else if (gAssetHudElementIds[i] & HUD_ELEMENT_OBJECT) { + if ((gAssetHudElementIds[i] & ASSET_MASK_TEXTURE) == ASSET_MASK_TEXTURE) { + tex_free((TextureHeader *) gAssetHudElements->entry[i]); + } else if (gAssetHudElementIds[i] & ASSET_MASK_SPRITE) { + sprite_free((Sprite *) gAssetHudElements->entry[i]); + } else if (gAssetHudElementIds[i] & ASSET_MASK_OBJECT) { free_object((Object *) gAssetHudElements->entry[i]); } else { free_3d_model((ObjectModel **) gAssetHudElements->entry[i]); @@ -3065,7 +3065,7 @@ void hud_render_general(Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 updateRate if (gHudLevelHeader->race_type == RACETYPE_CHALLENGE_EGGS) { if (gNumActivePlayers == 2 && gHudToggleSettings[gHUDNumPlayers] == 0) { hud_draw_eggs(NULL, updateRate); - reset_render_settings(&gHudDL); + rendermode_reset(&gHudDL); } else { // Render player 4's egg challenge portrait if they are AI controlled. if (gNumActivePlayers == 3) { @@ -3107,7 +3107,7 @@ void hud_render_general(Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 updateRate set_ortho_matrix_view(&gHudDL, &gHudMtx); func_800A1E48(0, updateRate); sprite_anim_off(FALSE); - reset_render_settings(&gHudDL); + rendermode_reset(&gHudDL); sprite_opaque(TRUE); } else { // In 3/4 player, just show the life counter. @@ -3180,7 +3180,7 @@ void hud_render_general(Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 updateRate gCurrentHud->entry[HUD_CHALLENGE_PORTRAIT].pos.x = spE4; gCurrentHud->entry[HUD_CHALLENGE_PORTRAIT].pos.y = spE0; sprite_opaque(TRUE); - reset_render_settings(&gHudDL); + rendermode_reset(&gHudDL); sprite_anim_off(FALSE); } } @@ -3262,7 +3262,7 @@ void hud_render_general(Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 updateRate test: return; } else { - reset_render_settings(&gHudDL); + rendermode_reset(&gHudDL); set_ortho_matrix_view(&gHudDL, &gHudMtx); lvlMdl = get_current_level_model(); if (lvlMdl == NULL) { @@ -3510,7 +3510,7 @@ void hud_draw_model(ObjectModel *objModel) { } else { texPtr = objModel->textures[texIndex].texture; } - load_and_set_texture_no_offset(&gHudDL, texPtr, flags & ~RENDER_Z_COMPARE); + material_set_no_tex_offset(&gHudDL, texPtr, flags & ~RENDER_Z_COMPARE); gSPVertexDKR(gHudDL++, OS_PHYSICAL_TO_K0(verts), numVerts, 0); if (texPtr == NULL) { textureEnabled = TRIN_DISABLE_TEXTURE; diff --git a/src/game_ui.h b/src/game_ui.h index b9df6cd3..3cc60120 100644 --- a/src/game_ui.h +++ b/src/game_ui.h @@ -5,10 +5,13 @@ #include "structs.h" #include -#define HUD_ELEMENT_MODEL 0x0000 -#define HUD_ELEMENT_OBJECT 0x4000 -#define HUD_ELEMENT_SPRITE 0x8000 -#define HUD_ELEMENT_TEXTURE 0xC000 +#define ASSET_MASK_MODEL 0x0000 +#define ASSET_MASK_OBJECT 0x4000 +#define ASSET_MASK_SPRITE 0x8000 +#define ASSET_MASK_TEXTURE 0xC000 + +#define ASSET_MASK_TEX2D 0x0000 +#define ASSET_MASK_TEX3D 0x8000 #define HUD_EGG_TOTAL 3 diff --git a/src/menu.c b/src/menu.c index b27db463..fd517278 100644 --- a/src/menu.c +++ b/src/menu.c @@ -2301,7 +2301,7 @@ void func_80080580(Gfx **dList, s32 startX, s32 startY, s32 width, s32 height, s gDPPipeSync((*dList)++); gSPVertexDKR((*dList)++, OS_PHYSICAL_TO_K0(gMenuGeometry[gWoodPanelCount].vertices[gMenuTrisFlip]), 20, 0); gSPPolygon((*dList)++, OS_PHYSICAL_TO_K0(gMenuGeometry[gWoodPanelCount].triangles[gMenuTrisFlip]), 10, i); - reset_render_settings(dList); + rendermode_reset(dList); } else { gMenuGeometry[gWoodPanelCount].unk18[gMenuTrisFlip] = 0; } @@ -2342,7 +2342,7 @@ void func_80080BC8(Gfx **dList) { } gWoodPanelCount = 0; gMenuTrisFlip = 1 - gMenuTrisFlip; - reset_render_settings(dList); + rendermode_reset(dList); } /** @@ -2444,7 +2444,7 @@ void func_80080E90(Gfx **dList, s32 startX, s32 startY, s32 width, s32 height, s gDPPipeSync((*dList)++); gDPSetPrimColor((*dList)++, 0, 0, 255, 255, 255, 255); - reset_render_settings(dList); + rendermode_reset(dList); } void init_save_data(void) { @@ -2947,7 +2947,7 @@ void draw_menu_elements(s32 state, MenuElement *elems, f32 scale) { case 1: if (shouldResetRenderSettings) { shouldResetRenderSettings = FALSE; - reset_render_settings(&sMenuCurrDisplayList); + rendermode_reset(&sMenuCurrDisplayList); } sMenuGuiOpacity = elems->opacity; menu_timestamp_render(*elems->t.numberU16, xPos - SCREEN_WIDTH_HALF, @@ -2957,7 +2957,7 @@ void draw_menu_elements(s32 state, MenuElement *elems, f32 scale) { case 2: // Number if (shouldResetRenderSettings) { shouldResetRenderSettings = FALSE; - reset_render_settings(&sMenuCurrDisplayList); + rendermode_reset(&sMenuCurrDisplayList); } menu_number_render(*elems->t.number, xPos - SCREEN_WIDTH_HALF, (-yPos - gPostraceTimestampOffset) + SCREEN_HEIGHT_HALF, elems->filterRed, @@ -2980,7 +2980,7 @@ void draw_menu_elements(s32 state, MenuElement *elems, f32 scale) { case 5: if (shouldResetRenderSettings) { shouldResetRenderSettings = FALSE; - reset_render_settings(&sMenuCurrDisplayList); + rendermode_reset(&sMenuCurrDisplayList); } sprite_anim_off(TRUE); sprite_opaque(FALSE); @@ -3019,7 +3019,7 @@ void draw_menu_elements(s32 state, MenuElement *elems, f32 scale) { elems++; // Go onto the next element. } if (shouldResetRenderSettings) { - reset_render_settings(&sMenuCurrDisplayList); + rendermode_reset(&sMenuCurrDisplayList); } sMenuGuiColourR = 255; sMenuGuiColourG = 255; @@ -3872,7 +3872,7 @@ void func_80084854(UNUSED s32 updateRate) { 255); texrect_draw(&sMenuCurrDisplayList, gMenuSelectionArrowLeft, (gMusicVolumeSliderValue >> 1) + 96, 160, 255, 255, 255, 255); - reset_render_settings(&sMenuCurrDisplayList); + rendermode_reset(&sMenuCurrDisplayList); set_text_background_colour(0, 0, 0, 0); // j must be here. @@ -5495,7 +5495,7 @@ s32 menu_boot_loop(s32 updateRate) { if (y < 300) { texrect_draw(&sMenuCurrDisplayList, sGameTitleTileOffsets, SCREEN_WIDTH_HALF, y, 255, 255, 255, 255); - reset_render_settings(&sMenuCurrDisplayList); + rendermode_reset(&sMenuCurrDisplayList); } return out; @@ -5674,7 +5674,7 @@ void pakmenu_render(UNUSED s32 updateRate) { if ((gOptionBlinkTimer & 8) != 0) { texrect_draw(&sMenuCurrDisplayList, gMenuSelectionArrowDown, SCREEN_WIDTH_HALF, yPos + 8, 255, 255, 255, 255); - reset_render_settings(&sMenuCurrDisplayList); + rendermode_reset(&sMenuCurrDisplayList); } } else { set_text_font(ASSET_FONTS_FUNFONT); @@ -6831,7 +6831,7 @@ void charselect_render_text(UNUSED s32 updateRate) { draw_text(&sMenuCurrDisplayList, SCREEN_WIDTH_HALF, yPos, "OK?", ALIGN_MIDDLE_CENTER); #endif } - reset_render_settings(&sMenuCurrDisplayList); + rendermode_reset(&sMenuCurrDisplayList); update_camera_fov(40.0f); } } @@ -8586,7 +8586,7 @@ s32 func_8008F618(Gfx **dList, MatrixS **mtx) { camDisableUserView(0, TRUE); camera_init_tracks_menu(dList, mtx); set_ortho_matrix_view(dList, mtx); - reset_render_settings(dList); + rendermode_reset(dList); gDPPipeSync((*dList)++); sp7C = gTrackSelectX; temp2 = -gTrackSelectY; @@ -8651,7 +8651,7 @@ s32 func_8008F618(Gfx **dList, MatrixS **mtx) { flags = RENDER_VTX_ALPHA | RENDER_Z_UPDATE; } - load_and_set_texture(dList, bgTexture, flags, 0); + material_set(dList, bgTexture, flags, 0); gSPVertexDKR((*dList)++, OS_PHYSICAL_TO_K0(vertices), 4, 0); gSPPolygon((*dList)++, OS_PHYSICAL_TO_K0(triangles), 2, hasTexture); curIndex = data[0]; @@ -8748,7 +8748,7 @@ void trackmenu_render_2D(s32 x, s32 y, char *hubName, char *trackName, s32 rectO texrect_draw_scaled(&sMenuCurrDisplayList, arg7, xTemp, yTemp, sp58, sp54, (rectOpacity & 0xFF) | ~0xFF, 0); } - reset_render_settings(&sMenuCurrDisplayList); + rendermode_reset(&sMenuCurrDisplayList); } } gMenuImages[imageId].x = x; @@ -8769,7 +8769,7 @@ void trackmenu_render_2D(s32 x, s32 y, char *hubName, char *trackName, s32 rectO offsets[(i << 1) + 1] + yTemp - 1, 255, 255, 255, 255); } } - reset_render_settings(&sMenuCurrDisplayList); + rendermode_reset(&sMenuCurrDisplayList); } #ifdef NON_MATCHING @@ -8879,7 +8879,7 @@ void func_8008FF1C(UNUSED s32 updateRate) { camDisableUserView(0, TRUE); menu_camera_centre(); set_ortho_matrix_view(&sMenuCurrDisplayList, &sMenuCurrHudMat); - reset_render_settings(&sMenuCurrDisplayList); + rendermode_reset(&sMenuCurrDisplayList); gDPPipeSync(sMenuCurrDisplayList++); D_80126928 = 64; D_8012692C = 32; @@ -9317,7 +9317,7 @@ void trackmenu_setup_render(UNUSED s32 updateRate) { texrect_draw(&sMenuCurrDisplayList, gRaceSelectionImages[gPlayerSelectVehicle[PLAYER_TWO] * 3], 176, y, 255, 255, 255, sMenuGuiOpacity); } - reset_render_settings(&sMenuCurrDisplayList); + rendermode_reset(&sMenuCurrDisplayList); if (gNumberOfActivePlayers <= 2 && !sp74) { // Draw border around vehicle images gMenuImages[7].y = -52.0f; @@ -9411,7 +9411,7 @@ void trackmenu_setup_render(UNUSED s32 updateRate) { trackmenu_staff_beaten(gTrackIdForPreview) >= 0) { texrect_draw(&sMenuCurrDisplayList, gRaceSelectionTTTexture, 204, regionOffset + 122, 255, 255, 255, sMenuGuiOpacity); - reset_render_settings(&sMenuCurrDisplayList); + rendermode_reset(&sMenuCurrDisplayList); } if (gTrackSelectCursorX != 5) { if ((gMenuStage == TRACKMENU_OPT_2 && !sp74) || (gMenuStage == TRACKMENU_OPT_3 && sp74) || @@ -9933,7 +9933,7 @@ void adventuretrack_render(UNUSED s32 updateRate, s32 arg1, s32 arg2) { } texrect_draw(&sMenuCurrDisplayList, gRaceSelectionImages[gPlayerSelectVehicle[0] * 3], 149, y, 255, 255, 255, 255); - reset_render_settings(&sMenuCurrDisplayList); + rendermode_reset(&sMenuCurrDisplayList); gMenuImages[7].x = 21.0f; gMenuImages[7].y = -52.0f; menu_element_render(7); @@ -11286,7 +11286,7 @@ void results_render(UNUSED s32 updateRate, f32 opacity) { set_text_colour(255, 255, 192, 96, 255); draw_text(&sMenuCurrDisplayList, time - 34, y2 + offsetY + 2, gRacePlacementsArray[spA0], ALIGN_MIDDLE_CENTER); #endif - reset_render_settings(&sMenuCurrDisplayList); + rendermode_reset(&sMenuCurrDisplayList); sprite_anim_off(TRUE); sprite_opaque(FALSE); sMenuGuiColourR = 255; @@ -12642,7 +12642,7 @@ void ghostmenu_render(UNUSED s32 updateRate) { } texrect_draw_scaled(&sMenuCurrDisplayList, vehicleSelectTex, (gGhostDataElementPositions[4] + 40), (gGhostDataElementPositions[5] + y), 0.625f, 0.625f, COLOUR_RGBA32(255, 255, 255, 255), 0); - reset_render_settings(&sMenuCurrDisplayList); + rendermode_reset(&sMenuCurrDisplayList); gMenuImages[7].x = (gGhostDataElementPositions[6] - SCREEN_HEIGHT_HALF); gMenuImages[7].y = ((-gGhostDataElementPositions[7] - y) + heightAdjust + SCREEN_HEIGHT_HALF); gMenuImages[7].scale = 0.075f; @@ -12696,7 +12696,7 @@ void ghostmenu_render(UNUSED s32 updateRate) { texrect_draw(&sMenuCurrDisplayList, gMenuSelectionArrowUp, SCREEN_WIDTH_HALF + 1, 54, 0, 0, 0, 128); texrect_draw(&sMenuCurrDisplayList, gMenuSelectionArrowUp, SCREEN_WIDTH_HALF - 1, 52, 255, 255, 255, 255); } - reset_render_settings(&sMenuCurrDisplayList); + rendermode_reset(&sMenuCurrDisplayList); } } @@ -13024,7 +13024,7 @@ void credits_fade(s32 x1, s32 y1, s32 x2, s32 y2, s32 a) { gDPPipeSync(sMenuCurrDisplayList++); gDPSetPrimColor(sMenuCurrDisplayList++, 0, 0, 255, 255, 255, 255); - reset_render_settings(&sMenuCurrDisplayList); + rendermode_reset(&sMenuCurrDisplayList); } #if REGION != REGION_JP @@ -13087,7 +13087,7 @@ s32 menu_credits_loop(s32 updateRate) { (((coss_s16(var_s5) * var_s4) >> 16) + textPos) - 20, 255, 255, 255, 255); var_s5 += 0x1999; } - reset_render_settings(&sMenuCurrDisplayList); + rendermode_reset(&sMenuCurrDisplayList); } if (D_80126BE0 != FALSE) { @@ -13675,16 +13675,16 @@ void menu_assetgroup_free(s16 *assetGroup) { void menu_asset_free(s32 assetID) { if (gMenuAssetActive[assetID]) { if (gMenuAssets[assetID] != NULL) { - if (((*gAssetsMenuElementIds)[assetID] & HUD_ELEMENT_TEXTURE) == HUD_ELEMENT_TEXTURE && + if (((*gAssetsMenuElementIds)[assetID] & ASSET_MASK_TEXTURE) == ASSET_MASK_TEXTURE && gMenuAssets[assetID] != NULL) { mempool_free_timer(0); - free_texture(gMenuAssets[assetID]); + tex_free(gMenuAssets[assetID]); mempool_free_timer(2); } else { - if ((*gAssetsMenuElementIds)[assetID] & HUD_ELEMENT_SPRITE) { - free_sprite((Sprite *) (u32) gMenuAssets[assetID]); + if ((*gAssetsMenuElementIds)[assetID] & ASSET_MASK_SPRITE) { + sprite_free((Sprite *) (u32) gMenuAssets[assetID]); } else { - if ((*gAssetsMenuElementIds)[assetID] & HUD_ELEMENT_OBJECT) { + if ((*gAssetsMenuElementIds)[assetID] & ASSET_MASK_OBJECT) { free_object((Object *) (u32) gMenuAssets[assetID]); } else { free_3d_model((ObjectModel **) (u32) gMenuAssets[assetID]); @@ -13743,11 +13743,11 @@ void menu_asset_load(s32 assetID) { if (!gMenuAssetActive[assetID]) { i = (*gAssetsMenuElementIds)[assetID]; - if ((i & HUD_ELEMENT_TEXTURE) == HUD_ELEMENT_TEXTURE) { + if ((i & ASSET_MASK_TEXTURE) == ASSET_MASK_TEXTURE) { gMenuAssets[assetID] = (TextureHeader *) load_texture(i & 0x3FFF); - } else if (i & HUD_ELEMENT_SPRITE) { + } else if (i & ASSET_MASK_SPRITE) { gMenuAssets[assetID] = (TextureHeader *) func_8007C12C(i & 0x3FFF, 0); - } else if (i & HUD_ELEMENT_OBJECT) { + } else if (i & ASSET_MASK_OBJECT) { if (gMenuElementIdCount) {} // Fakematch entry.objectID = i & 0xFFFF; entry.size = sizeof(LevelObjectEntryCommon); @@ -13814,8 +13814,8 @@ void menu_element_render(s32 elementID) { ObjectModel **model; if (gMenuAssets[gMenuImages[elementID].spriteID] != NULL) { - if (((*gAssetsMenuElementIds)[gMenuImages[elementID].spriteID] & HUD_ELEMENT_TEXTURE) != HUD_ELEMENT_TEXTURE) { - if ((*gAssetsMenuElementIds)[gMenuImages[elementID].spriteID] & HUD_ELEMENT_OBJECT) { + if (((*gAssetsMenuElementIds)[gMenuImages[elementID].spriteID] & ASSET_MASK_TEXTURE) != ASSET_MASK_TEXTURE) { + if ((*gAssetsMenuElementIds)[gMenuImages[elementID].spriteID] & ASSET_MASK_OBJECT) { if (0) {} // Fakematch object = (Object *) gMenuAssets[gMenuImages[elementID].spriteID]; asset = (MenuAsset *) &gMenuImages[elementID]; @@ -13833,7 +13833,7 @@ void menu_element_render(s32 elementID) { object->segment.object.opacity = sMenuGuiOpacity; render_object(&sMenuCurrDisplayList, &sMenuCurrHudMat, &sMenuCurrHudVerts, object); } else { - if ((*gAssetsMenuElementIds)[gMenuImages[elementID].spriteID] & HUD_ELEMENT_SPRITE) { + if ((*gAssetsMenuElementIds)[gMenuImages[elementID].spriteID] & ASSET_MASK_SPRITE) { sprite = (Sprite *) gMenuAssets[gMenuImages[elementID].spriteID]; gDPSetPrimColor(sMenuCurrDisplayList++, 0, 0, sMenuGuiColourR, sMenuGuiColourG, sMenuGuiColourB, sMenuGuiOpacity); @@ -13904,7 +13904,7 @@ void render_track_selection_viewport_border(ObjectModel *objMdl) { texEnabled = TRUE; texOffset = objMdl->batches[i].unk7 << 14; } - load_and_set_texture(&sMenuCurrDisplayList, tex, flags, texOffset); + material_set(&sMenuCurrDisplayList, tex, flags, texOffset); gSPVertexDKR(sMenuCurrDisplayList++, OS_PHYSICAL_TO_K0(verts), numVerts, 0); gSPPolygon(sMenuCurrDisplayList++, OS_PHYSICAL_TO_K0(tris), numTris, texEnabled); diff --git a/src/object_models.c b/src/object_models.c index 0e977b1a..361ed06c 100644 --- a/src/object_models.c +++ b/src/object_models.c @@ -106,8 +106,8 @@ Object_68 *object_model_init(s32 modelID, s32 flags) { // Check if the model already exists in the cache. for (i = 0; i < gModelCacheCount; i++) { - if (modelID == gModelCache[MODELCACHE_ID(i)]) { - objMdl = (ObjectModel *) gModelCache[MODELCACHE_DATA(i)]; + if (modelID == gModelCache[ASSETCACHE_ID(i)]) { + objMdl = (ObjectModel *) gModelCache[ASSETCACHE_PTR(i)]; ret = model_init_type(objMdl, flags); if (ret != NULL) { objMdl->references++; @@ -185,8 +185,8 @@ Object_68 *object_model_init(s32 modelID, s32 flags) { if ((func_80060EA8(objMdl) == 0) && (func_80061A00(objMdl, modelID) == 0)) { ret = model_init_type(objMdl, flags); if (ret != NULL) { - gModelCache[MODELCACHE_ID(cacheIndex)] = modelID; - gModelCache[MODELCACHE_DATA(cacheIndex)] = (s32) objMdl; + gModelCache[ASSETCACHE_ID(cacheIndex)] = modelID; + gModelCache[ASSETCACHE_PTR(cacheIndex)] = (s32) objMdl; if (gModelCacheCount < MODEL_LOADED_MAX) { ret->animUpdateTimer = 0; return ret; @@ -314,7 +314,7 @@ void free_3d_model(ObjectModel **modelPtr) { modelIndex = -1; for (i = 0; i < gModelCacheCount; i++) { - if (model == (ObjectModel *) gModelCache[MODELCACHE_DATA(i)]) { + if (model == (ObjectModel *) gModelCache[ASSETCACHE_PTR(i)]) { modelIndex = i; } } @@ -323,8 +323,8 @@ void free_3d_model(ObjectModel **modelPtr) { free_model_data(model); D_8011D628[D_8011D634] = modelIndex; D_8011D634++; - gModelCache[MODELCACHE_ID(modelIndex)] = -1; - gModelCache[MODELCACHE_DATA(modelIndex)] = -1; + gModelCache[ASSETCACHE_ID(modelIndex)] = -1; + gModelCache[ASSETCACHE_PTR(modelIndex)] = -1; mempool_free(modelPtr); } } @@ -341,7 +341,7 @@ void free_model_data(ObjectModel *mdl) { do { TextureHeader *header = mdl->textures[textureIndex].texture; if (header != NULL) { - free_texture(header); + tex_free(header); numTextures = mdl->numberOfTextures; } texturesFreed++; diff --git a/src/object_models.h b/src/object_models.h index 2492e59d..74fc5fa7 100644 --- a/src/object_models.h +++ b/src/object_models.h @@ -5,9 +5,6 @@ #include "PR/gbi.h" #include "structs.h" -#define MODELCACHE_ID(x) ((x << 1) + 0) -#define MODELCACHE_DATA(x) ((x << 1) + 1) - typedef enum AnimType { MODELTYPE_BASIC, // No shading nor animation MODELTYPE_SHADE, // Model is intended to be shaded. diff --git a/src/objects.c b/src/objects.c index a8c208ff..4a49d132 100644 --- a/src/objects.c +++ b/src/objects.c @@ -413,12 +413,12 @@ void func_8000B290(void) { for (i = 0; i < 10; i++) { sprite = asset20[i].unk78; if (sprite != NULL) { - free_sprite(sprite); + sprite_free(sprite); asset20[i].unk78 = NULL; } texture = asset20[i].unk7C; if (texture != NULL) { - free_texture(texture); + tex_free(texture); asset20[i].unk7C = NULL; } } @@ -1827,7 +1827,7 @@ Object *spawn_object(LevelObjectEntryCommon *entry, s32 arg1) { address = (u32 *) ((uintptr_t) address + sizeOfobj); if (sizeOfobj == 0) { if (D_8011AE50 != NULL) { - free_texture((TextureHeader *) D_8011AE50); + tex_free((TextureHeader *) D_8011AE50); } objFreeAssets(curObj, assetCount, objType); try_free_object_header(var_a0); @@ -1855,10 +1855,10 @@ Object *spawn_object(LevelObjectEntryCommon *entry, s32 arg1) { newObj = mempool_alloc_pool((MemoryPoolSlot *) gObjectMemoryPool, sizeOfobj); if (newObj == NULL) { if (D_8011AE50 != NULL) { - free_texture((TextureHeader *) D_8011AE50); + tex_free((TextureHeader *) D_8011AE50); } if (D_8011AE54 != NULL) { - free_texture((TextureHeader *) D_8011AE54); + tex_free((TextureHeader *) D_8011AE54); } objFreeAssets(curObj, assetCount, objType); try_free_object_header(var_a0); @@ -1925,10 +1925,10 @@ Object *spawn_object(LevelObjectEntryCommon *entry, s32 arg1) { } if (newObj->segment.header->unk56 > 0 && newObj->segment.header->unk56 < 10 && func_8000F99C(newObj)) { if (D_8011AE50 != NULL) { - free_texture(D_8011AE50); + tex_free(D_8011AE50); } if (D_8011AE54 != NULL) { - free_texture(D_8011AE54); + tex_free(D_8011AE54); } objFreeAssets(newObj, assetCount, objType); try_free_object_header(var_a0); @@ -1964,13 +1964,13 @@ void objFreeAssets(Object *obj, s32 count, s32 objType) { } else if (objType == OBJECT_MODEL_TYPE_MISC) { for (i = 0; i < count; i++) { if (obj->unk68[i] != NULL) { - free_texture((TextureHeader *) (s32) obj->unk68[i]); + tex_free((TextureHeader *) (s32) obj->unk68[i]); } } } else { // Sprite for (i = 0; i < count; i++) { if (obj->unk68[i] != NULL) { - free_sprite((Sprite *) (s32) obj->unk68[i]); + sprite_free((Sprite *) (s32) obj->unk68[i]); } } } @@ -2705,7 +2705,7 @@ void render_misc_model(Object *obj, Vertex *verts, u32 numVertices, Triangle *tr if (tex != NULL) { hasTexture = TRUE; } - load_and_set_texture(&gObjectCurrDisplayList, (TextureHeader *) tex, flags, texOffset); + material_set(&gObjectCurrDisplayList, (TextureHeader *) tex, flags, texOffset); gSPVertexDKR(gObjectCurrDisplayList++, OS_K0_TO_PHYSICAL(verts), numVertices, 0); gSPPolygon(gObjectCurrDisplayList++, OS_K0_TO_PHYSICAL(triangles), numTriangles, hasTexture); apply_matrix_from_stack(&gObjectCurrDisplayList); @@ -2972,7 +2972,7 @@ void render_3d_model(Object *obj) { if (obj->segment.header->unk71) { gDPSetPrimColor(gObjectCurrDisplayList++, 0, 0, obj->shading->unk18, obj->shading->unk19, obj->shading->unk1A, alpha); - enable_primitive_colour(); + tex_primcolour_on(); } else if (hasOpacity) { gDPSetPrimColor(gObjectCurrDisplayList++, 0, 0, intensity, intensity, intensity, alpha); } else { @@ -2989,7 +2989,7 @@ void render_3d_model(Object *obj) { } else { gDPSetPrimColor(gObjectCurrDisplayList++, 0, 0, 255, 255, 255, 255); } - disable_primitive_colour(); + tex_primcolour_off(); } if (obj->unk60 != NULL) { obj60_unk0 = obj->unk60->unk0; @@ -3075,11 +3075,11 @@ void render_3d_model(Object *obj) { if (obj->segment.header->unk71) { gDPSetPrimColor(gObjectCurrDisplayList++, 0, 0, obj->shading->unk18, obj->shading->unk19, obj->shading->unk1A, alpha); - enable_primitive_colour(); + tex_primcolour_on(); } render_mesh(objModel, obj, meshBatch, RENDER_SEMI_TRANSPARENT, spB0); if (obj->segment.header->unk71) { - disable_primitive_colour(); + tex_primcolour_off(); } } if (hasOpacity || obj->segment.header->unk71) { @@ -3526,15 +3526,15 @@ void render_racer_magnet(Gfx **dList, MatrixS **mtx, Vertex **vtxList, Object *o mdl = gfxData->objModel; gMagnetEffectObject->curVertData = (Vertex *) gfxData->vertices[gfxData->animationTaskNum]; opacity = ((D_8011B078[var_t0].g * 8) & 0x7F) + 0x80; - func_8007F594(&gObjectCurrDisplayList, 2, COLOUR_RGBA32(255, 255, 255, opacity), - gMagnetColours[racer->magnetModelID]); + gfx_init_basic_xlu(&gObjectCurrDisplayList, DRAW_BASIC_2CYCLE, COLOUR_RGBA32(255, 255, 255, opacity), + gMagnetColours[racer->magnetModelID]); apply_object_shear_matrix(&gObjectCurrDisplayList, &gObjectCurrMatrix, gMagnetEffectObject, obj, shear); gObjectTexAnim = TRUE; render_mesh(mdl, gMagnetEffectObject, 0, RENDER_SEMI_TRANSPARENT, 0); gObjectTexAnim = FALSE; gDkrInsertMatrix(gObjectCurrDisplayList++, 0, G_MTX_DKR_INDEX_0); gDPSetPrimColor(gObjectCurrDisplayList++, 0, 0, 255, 255, 255, 255); - reset_render_settings(&gObjectCurrDisplayList); + rendermode_reset(&gObjectCurrDisplayList); *dList = gObjectCurrDisplayList; *mtx = gObjectCurrMatrix; *vtxList = gObjectCurrVertexList; @@ -3623,7 +3623,7 @@ s32 render_mesh(ObjectModel *objModel, Object *obj, s32 startIndex, s32 flags, s texToSetFlags |= RENDER_SEMI_TRANSPARENT; } if (gObjectTexAnim == FALSE) { - load_and_set_texture(&dList, texToSet, texToSetFlags, texOffset); + material_set(&dList, texToSet, texToSetFlags, texOffset); } else { texToSet = set_animated_texture_header(texToSet, texOffset); gDkrDmaDisplayList(gObjectCurrDisplayList++, OS_K0_TO_PHYSICAL(texToSet->cmd), @@ -5062,7 +5062,7 @@ Object *get_racer_object_by_port(s32 index) { UNUSED void debug_render_checkpoints(Gfx **dList, MatrixS **mtx, Vertex **vtx) { s32 i; - load_and_set_texture_no_offset(dList, NULL, RENDER_Z_COMPARE); + material_set_no_tex_offset(dList, NULL, RENDER_Z_COMPARE); if (gNumberOfCheckpoints > 3) { for (i = 0; i < gNumberOfCheckpoints; i++) { // Ground path diff --git a/src/particles.c b/src/particles.c index 8dc80863..77d41230 100644 --- a/src/particles.c +++ b/src/particles.c @@ -178,7 +178,7 @@ void free_unknown_particle_sprites(void) { if (D_800E2E60 != NULL) { for (i = 0; i < D_800E2E64; i++) { - free_sprite(D_800E2E60[i]); + sprite_free(D_800E2E60[i]); } mempool_free(D_800E2E60); D_800E2E60 = 0; @@ -1070,7 +1070,7 @@ void setup_particle_velocity(Particle *particle, Object *obj, ParticleEmitter *e } switch (behaviour->flags & (PARTICLE_VELOCITY_RELATIVE_TO_PARENT | PARTICLE_VELOCITY_ABSOLUTE | - PARTICLE_VELOCITY_SCALED_FROM_PARENT)) { + PARTICLE_VELOCITY_SCALED_FROM_PARENT)) { case PARTICLE_VELOCITY_RELATIVE_TO_PARENT: particle->velocity.x += obj->segment.x_velocity; particle->velocity.y += obj->segment.y_velocity; @@ -1820,7 +1820,7 @@ void particle_deallocate(Particle *particle) { case PARTICLE_KIND_SPRITE: if (gNumSpriteParticles > 0) { if (particle->model) { - free_sprite((Sprite *) particle->sprite); + sprite_free((Sprite *) particle->sprite); } gNumSpriteParticles--; particle->kind = PARTICLE_KIND_NONE; @@ -1830,7 +1830,7 @@ void particle_deallocate(Particle *particle) { if (gNumTriangleParticles > 0) { tex = particle->model->texture; if (tex != NULL) { - free_texture(tex); + tex_free(tex); } gNumTriangleParticles--; particle->kind = PARTICLE_KIND_NONE; @@ -1840,7 +1840,7 @@ void particle_deallocate(Particle *particle) { if (gNumRectangleParticles > 0) { tex = particle->model->texture; if (tex != NULL) { - free_texture(tex); + tex_free(tex); } gNumRectangleParticles--; particle->kind = PARTICLE_KIND_NONE; @@ -1850,7 +1850,7 @@ void particle_deallocate(Particle *particle) { if (gNumLineParticles > 0) { tex = particle->model->texture; if (tex != NULL) { - free_texture(tex); + tex_free(tex); } gNumLineParticles--; particle->kind = PARTICLE_KIND_NONE; @@ -1861,7 +1861,7 @@ void particle_deallocate(Particle *particle) { delete_point_particle_from_sequence((PointParticle *) particle); tex = particle->model->texture; if (tex != NULL) { - free_texture(tex); + tex_free(tex); } gNumPointParticles--; particle->kind = PARTICLE_KIND_NONE; @@ -2418,7 +2418,7 @@ void render_particle(Particle *particle, Gfx **dList, MatrixS **mtx, Vertex **vt model = particle->model; if (model->texture) { camera_push_model_mtx(dList, mtx, &particle->trans, 1.0f, 0.0f); - load_and_set_texture(dList, model->texture, renderFlags, particle->textureFrame << 8); + material_set(dList, model->texture, renderFlags, particle->textureFrame << 8); gSPVertexDKR((*dList)++, OS_K0_TO_PHYSICAL(model->vertices), model->vertexCount, 0); gSPPolygon((*dList)++, OS_K0_TO_PHYSICAL(model->triangles), model->triangleCount, TRIN_ENABLE_TEXTURE); apply_matrix_from_stack(dList); @@ -2446,7 +2446,7 @@ void render_particle(Particle *particle, Gfx **dList, MatrixS **mtx, Vertex **vt temp = ((PointParticle *) particle)->modelFrame; temp <<= 3; tempvtx = &model->vertices[temp]; - load_and_set_texture(dList, model->texture, renderFlags, particle->textureFrame << 8); + material_set(dList, model->texture, renderFlags, particle->textureFrame << 8); gSPVertexDKR((*dList)++, OS_K0_TO_PHYSICAL(tempvtx), model->vertexCount, 0); gSPPolygon((*dList)++, OS_K0_TO_PHYSICAL(model->triangles), model->triangleCount, TRIN_ENABLE_TEXTURE); if (particle->brightness != 255) { @@ -2457,12 +2457,12 @@ void render_particle(Particle *particle, Gfx **dList, MatrixS **mtx, Vertex **vt gDPSetPrimColor((*dList)++, 0, 0, particle->brightness, particle->brightness, particle->brightness, alpha); if (particle->lineCreationPhase >= 2) { model = particle->model; - load_and_set_texture(dList, model->texture, renderFlags, particle->textureFrame << 8); + material_set(dList, model->texture, renderFlags, particle->textureFrame << 8); gSPVertexDKR((*dList)++, OS_K0_TO_PHYSICAL(model->vertices), model->vertexCount, 0); gSPPolygon((*dList)++, OS_K0_TO_PHYSICAL(model->triangles), model->triangleCount, TRIN_ENABLE_TEXTURE); } else if (particle->lineCreationPhase > 0) { model = particle->model; - load_and_set_texture(dList, model->texture, renderFlags, particle->textureFrame << 8); + material_set(dList, model->texture, renderFlags, particle->textureFrame << 8); gSPVertexDKR((*dList)++, OS_K0_TO_PHYSICAL(model->vertices), 4, 0); gSPPolygon((*dList)++, OS_K0_TO_PHYSICAL(&model->triangles[model->triangleCount]), 1, TRIN_ENABLE_TEXTURE); diff --git a/src/textures_sprites.c b/src/textures_sprites.c index 0ec5578b..6d51b417 100644 --- a/src/textures_sprites.c +++ b/src/textures_sprites.c @@ -4,10 +4,12 @@ #include "memory.h" #include "math_util.h" #include "tracks.h" +#include "game_ui.h" #define TEX_HEADER_COUNT 175 #define TEX_SPRITE_COUNT 50 #define TEX_PALLETE_COUNT 20 +#define TEX_PALLETE_COLOURS 640 /************ .data ************/ @@ -266,7 +268,7 @@ Gfx dRenderSettingsBlinkingLights[][2] = { G_RM_AA_XLU_SURF2, G_RM_FOG_SHADE_A, G_RM_AA_ZB_TEX_EDGE2, G_RM_FOG_SHADE_A, DKR_RM_UNKNOWN4_2), }; -Gfx D_800DF3A8[] = { +Gfx dBasicRenderSettingsZBOff[] = { gsDPPipeSync(), gsDPSetTextureLOD(G_TL_TILE), gsDPSetTextureLUT(G_TT_NONE), @@ -275,7 +277,7 @@ Gfx D_800DF3A8[] = { gsSPEndDisplayList(), }; -Gfx D_800DF3D8[] = { +Gfx dBasicRenderSettingsZBOn[] = { gsDPPipeSync(), gsDPSetTextureLOD(G_TL_TILE), gsDPSetTextureLUT(G_TT_NONE), @@ -285,7 +287,7 @@ Gfx D_800DF3D8[] = { gsSPEndDisplayList(), }; -Gfx D_800DF410[][2] = { +Gfx dBasicRenderModes[][2] = { DRAW_TABLE_ENTRY(DKR_CC_UNK9, DKR_CC_UNK9, DKR_OMH_1CYC_BILERP_NOPERSP, G_RM_ZB_CLD_SURF, G_RM_ZB_CLD_SURF2), DRAW_TABLE_ENTRY(G_CC_BLENDPE, G_CC_BLENDPE, DKR_OMH_1CYC_BILERP, G_RM_ZB_CLD_SURF, G_RM_ZB_CLD_SURF2), DRAW_TABLE_ENTRY(DKR_CC_UNK9, G_CC_PASS2, DKR_OMH_2CYC_BILERP, G_RM_ZB_CLD_SURF, G_RM_ZB_CLD_SURF2) @@ -324,8 +326,8 @@ s32 *gSpriteOffsetTable; s32 *gSpriteCache; Sprite *gCurrentSprite; -s32 gSpriteTableNum; -s32 D_80126358; +s32 gSpriteTableSize; +s32 gSpriteCacheCount; s32 D_8012635C; Vertex *D_80126360; Gfx *D_80126364; @@ -349,7 +351,7 @@ void tex_init_textures(void) { s32 i; gTextureCache = mempool_alloc_safe(sizeof(TextureHeader) * TEX_HEADER_COUNT, COLOUR_TAG_MAGENTA); - gCiPalettes = mempool_alloc_safe(0x280, COLOUR_TAG_MAGENTA); + gCiPalettes = mempool_alloc_safe(TEX_PALLETE_COLOURS, COLOUR_TAG_MAGENTA); gNumberOfLoadedTextures = 0; gCiPalettesSize = 0; gTextureAssetTable[TEX_TABLE_2D] = (s32 *) load_asset_section_from_rom(ASSET_TEXTURES_2D_TABLE); @@ -363,15 +365,15 @@ void tex_init_textures(void) { gSpriteCache = mempool_alloc_safe(sizeof(Sprite) * TEX_SPRITE_COUNT, COLOUR_TAG_MAGENTA); gCurrentSprite = mempool_alloc_safe(sizeof(Sprite) * 32, COLOUR_TAG_MAGENTA); - D_80126358 = 0; + gSpriteCacheCount = 0; gSpriteOffsetTable = (s32 *) load_asset_section_from_rom(ASSET_SPRITES_TABLE); - gSpriteTableNum = 0; - while (gSpriteOffsetTable[gSpriteTableNum] != -1) { - gSpriteTableNum++; + gSpriteTableSize = 0; + while (gSpriteOffsetTable[gSpriteTableSize] != -1) { + gSpriteTableSize++; } - gSpriteTableNum--; + gSpriteTableSize--; - gTempTextureHeader = mempool_alloc_safe(0x28, COLOUR_TAG_MAGENTA); + gTempTextureHeader = mempool_alloc_safe(sizeof(TempTexHeader), COLOUR_TAG_MAGENTA); D_80126344 = 0; } @@ -395,7 +397,7 @@ void tex_enable_modes(s32 flags) { * Return the texture asset ID table for 2D textures. * Goes unused. */ -UNUSED s32 get_loaded_2D_textures(void) { +UNUSED s32 tex_get_table_2D(void) { return gTextureAssetID[TEX_TABLE_2D]; } @@ -403,12 +405,15 @@ UNUSED s32 get_loaded_2D_textures(void) { * Return the texture asset ID table for 3D textures. * Goes unused. */ -UNUSED s32 get_loaded_3D_textures(void) { +UNUSED s32 tex_get_table_3D(void) { return gTextureAssetID[TEX_TABLE_3D]; } -UNUSED s32 func_8007AE64(void) { - return gSpriteTableNum; +/** + * Return the size of the sprite asset table. + */ +UNUSED s32 sprite_table_size(void) { + return gSpriteTableSize; } #ifdef NON_EQUIVALENT @@ -508,7 +513,7 @@ TextureHeader *load_texture(s32 arg0) { texTemp = tex; alignedAddress = align16((u8 *) ((s32) texTemp + assetSize)); for (i = 0; i < numberOfTextures; i++) { - build_tex_display_list(texTemp, (Gfx *) alignedAddress); + material_init(texTemp, (Gfx *) alignedAddress); if (paletteOffset >= 0) { texTemp->ciPaletteOffset = paletteOffset; alignedAddress += 0x30; // I'm guessing it takes 6 f3d commands to load the palette @@ -529,20 +534,21 @@ TextureHeader *load_texture(s32 arg0) { #endif /** - * This function frees textures + * This function attempts to free the texture from memory. + * It checks if the refcount is zero, then finds the cache entry, before clearing it. * Official Name: texFreeTexture */ -void free_texture(TextureHeader *tex) { +void tex_free(TextureHeader *tex) { s32 i; if (tex != 0) { if ((--tex->numberOfInstances) <= 0) { for (i = 0; i < gNumberOfLoadedTextures; i++) { - if ((s32) tex == gTextureCache[(i << 1) + 1]) { + if ((s32) tex == gTextureCache[ASSETCACHE_PTR(i)]) { mempool_free(tex); - gTextureCache[(i << 1)] = -1; - gTextureCache[(i << 1) + 1] = -1; + gTextureCache[ASSETCACHE_ID(i)] = -1; + gTextureCache[ASSETCACHE_PTR(i)] = -1; return; } } @@ -559,14 +565,18 @@ void set_texture_colour_tag(s32 tagID) { gTexColourTag = tagID; } -UNUSED s32 func_8007B380(s32 arg0) { - if ((arg0 < 0) || (arg0 >= gNumberOfLoadedTextures)) { - return 0; +/** + * Gets the texture cache index from the argument. + * Returns NULL if the entry is invalid. + */ +UNUSED s32 tex_cache_index(s32 texID) { + if (texID < 0 || texID >= gNumberOfLoadedTextures) { + return NULL; } - if (gTextureCache[(arg0 << 1) + 1] == -1) { - return 0; + if (gTextureCache[ASSETCACHE_PTR(texID)] == -1) { + return NULL; } - return gTextureCache[(arg0 << 1) + 1]; + return gTextureCache[ASSETCACHE_PTR(texID)]; } /** @@ -574,7 +584,7 @@ UNUSED s32 func_8007B380(s32 arg0) { * The next draw call will be forced to apply all settings instead of skipping unecessary steps. * Official Name: texDPInit */ -void reset_render_settings(Gfx **dList) { +void rendermode_reset(Gfx **dList) { gCurrentTextureHeader = NULL; gCurrentRenderFlags = RENDER_NONE; gUsingTexture = FALSE; @@ -588,7 +598,7 @@ void reset_render_settings(Gfx **dList) { /** * Enables usage of combiners utilising the indidual primitive colours. */ -void enable_primitive_colour(void) { +void tex_primcolour_on(void) { gUsePrimColour = TRUE; gForceFlags = TRUE; } @@ -596,7 +606,7 @@ void enable_primitive_colour(void) { /** * Disables usage of combiners utilising the indidual primitive colours. */ -void disable_primitive_colour(void) { +void tex_primcolour_off(void) { gUsePrimColour = FALSE; gForceFlags = TRUE; } @@ -619,8 +629,8 @@ TextureHeader *set_animated_texture_header(TextureHeader *texHead, s32 offset) { /** * A version of the function below that chooses not to pass along an offset. */ -void load_and_set_texture_no_offset(Gfx **dList, TextureHeader *texhead, u32 flags) { - load_and_set_texture(dList, texhead, flags, 0); +void material_set_no_tex_offset(Gfx **dList, TextureHeader *texhead, u32 flags) { + material_set(dList, texhead, flags, 0); } /** @@ -630,7 +640,7 @@ void load_and_set_texture_no_offset(Gfx **dList, TextureHeader *texhead, u32 fla * A number can be attached that adds a texture address offset. An example of this being used is * the numbered doors in the hub, to change what number is written on it. */ -void load_and_set_texture(Gfx **dList, TextureHeader *texhead, s32 flags, s32 texOffset) { +void material_set(Gfx **dList, TextureHeader *texhead, s32 flags, s32 texOffset) { s32 forceFlags; s32 doPipeSync; s32 dlIndex; @@ -671,7 +681,7 @@ void load_and_set_texture(Gfx **dList, TextureHeader *texhead, s32 flags, s32 te gDPPipeSync((*dList)++); } - if (((flags & RENDER_VTX_ALPHA) != (gCurrentRenderFlags & RENDER_VTX_ALPHA)) || gForceFlags) { + if ((flags & RENDER_VTX_ALPHA) != (gCurrentRenderFlags & RENDER_VTX_ALPHA) || gForceFlags) { if (flags & RENDER_VTX_ALPHA || gUsePrimColour) { gSPClearGeometryMode((*dList)++, G_FOG); } else { @@ -679,7 +689,7 @@ void load_and_set_texture(Gfx **dList, TextureHeader *texhead, s32 flags, s32 te } } - if (((flags & RENDER_Z_COMPARE) != (gCurrentRenderFlags & RENDER_Z_COMPARE)) || gForceFlags) { + if ((flags & RENDER_Z_COMPARE) != (gCurrentRenderFlags & RENDER_Z_COMPARE) || gForceFlags) { if (flags & RENDER_Z_COMPARE) { gSPSetGeometryMode((*dList)++, G_ZBUFFER); } else { @@ -782,10 +792,10 @@ void load_and_set_texture(Gfx **dList, TextureHeader *texhead, s32 flags, s32 te /** * Loads the texture and render settings for the blinking lights seen in Spaceport Alpha. */ -void load_blinking_lights_texture(Gfx **dList, TextureHeader *texture_list, u32 flags, s32 texture_index) { +void material_set_blinking_lights(Gfx **dList, TextureHeader *texture_list, u32 flags, s32 texture_index) { u16 *mblock; u16 *tblock; - if ((texture_index != 0) && (texture_index < (texture_list->numOfTextures * 256))) { + if (texture_index != 0 && texture_index < (texture_list->numOfTextures * 256)) { texture_list = (TextureHeader *) ((s32) texture_list + ((texture_index >> 16) * texture_list->textureSize)); } mblock = (u16 *) (texture_list + 1); @@ -826,15 +836,19 @@ void sprite_opaque(s32 setting) { gForceFlags = TRUE; } -void func_8007BF34(Gfx **dList, s32 flags) { - if ((flags != gCurrentRenderFlags) || gForceFlags) { +/** + * Load a texture from memory into texture memory. + * Much simpler than the regular material function, only having modes for opaque and transparent. + */ +void material_load_simple(Gfx **dList, s32 flags) { + if (flags != gCurrentRenderFlags || gForceFlags) { gDPPipeSync((*dList)++); if ((gCurrentRenderFlags & RENDER_VTX_ALPHA) || gForceFlags) { gSPSetGeometryMode((*dList)++, G_FOG); } flags &= ~RENDER_VTX_ALPHA; flags &= ~gBlockedRenderFlags; - if (((flags & RENDER_Z_COMPARE) != (gCurrentRenderFlags & RENDER_Z_COMPARE)) || gForceFlags) { + if ((flags & RENDER_Z_COMPARE) != (gCurrentRenderFlags & RENDER_Z_COMPARE) || gForceFlags) { if (flags & RENDER_Z_COMPARE) { gSPSetGeometryMode((*dList)++, G_ZBUFFER); } else { @@ -845,7 +859,7 @@ void func_8007BF34(Gfx **dList, s32 flags) { gCurrentRenderFlags = flags; flags &= ~RENDER_DECAL; if (gSpriteOpaque == FALSE) { - if ((gCurrentRenderFlags & RENDER_PRESERVE_COVERAGE)) { + if (gCurrentRenderFlags & RENDER_PRESERVE_COVERAGE) { gDkrDmaDisplayList((*dList)++, OS_PHYSICAL_TO_K0(dRenderSettingsSpriteCld[(flags >> 1) & 1]), numberOfGfxCommands(dRenderSettingsSpriteCld[0])); } else { @@ -867,18 +881,22 @@ void func_8007BF34(Gfx **dList, s32 flags) { */ #pragma GLOBAL_ASM("asm/nonmatchings/textures_sprites/func_8007C12C.s") -Sprite *func_8007C52C(s32 arg0) { - if ((arg0 < 0) || (arg0 >= D_80126358)) { +/** + * Gets the sprite cache index from the argument. + * Returns NULL if the entry is invalid. + */ +s32 sprite_cache_index(s32 cacheID) { + if (cacheID < 0 || cacheID >= gSpriteCacheCount) { return NULL; } - if (gSpriteCache[(arg0 << 1) + 1] == -1) { + if (gSpriteCache[ASSETCACHE_PTR(cacheID)] == -1) { return NULL; } - return (Sprite *) gSpriteCache[(arg0 << 1) + 1]; + return gSpriteCache[ASSETCACHE_PTR(cacheID)]; } -s32 get_texture_size_from_id(s32 id) { +s32 tex_asset_size(s32 id) { s32 textureRomOffset; TempTexHeader *new_var2; UNUSED s32 pad; @@ -890,13 +908,13 @@ s32 get_texture_size_from_id(s32 id) { TempTexHeader *new_var4; textureTable = ASSET_TEXTURES_2D; - textureTableType = 0; - if (id & 0x8000) { + textureTableType = TEX_TABLE_2D; + if (id & ASSET_MASK_TEX3D) { textureTable = ASSET_TEXTURES_3D; - textureTableType = 1; - id &= 0x7FFF; + textureTableType = TEX_TABLE_3D; + id &= (ASSET_MASK_TEX3D - 1); } - if ((id >= gTextureAssetID[textureTableType]) || (id < 0)) { + if (id >= gTextureAssetID[textureTableType] || id < 0) { return 0; } textureRomOffset = gTextureAssetTable[textureTableType][id]; @@ -904,7 +922,7 @@ s32 get_texture_size_from_id(s32 id) { size = gTextureAssetTable[textureTableType][id + 1] - new_var3; new_var2 = gTempTextureHeader; if (new_var2->header.isCompressed) { - load_asset_to_address(textureTable, (u32) new_var2, textureRomOffset, 0x28); + load_asset_to_address(textureTable, (u32) new_var2, textureRomOffset, sizeof(TempTexHeader)); new_var4 = gTempTextureHeader; size = byteswap32((u8 *) (&new_var4->uncompressedSize)); } @@ -913,13 +931,13 @@ s32 get_texture_size_from_id(s32 id) { return (((numOfTextures >> 8) & 0xFFFF) * 0x60) + size; } -UNUSED u8 func_8007C660(s32 arg0) { +UNUSED u8 func_8007C660(s32 texID) { Sprite *temp_s1; s32 j; s32 i; s32 temp_v1; - if (arg0 & 0x8000) { + if (texID & ASSET_MASK_TEX3D) { return 0; } if (D_80126370 == 0) { @@ -927,7 +945,7 @@ UNUSED u8 func_8007C660(s32 arg0) { for (i = 0; i < gTextureAssetID[TEX_TABLE_2D]; i++) { D_80126370[i] = 0; } - for (i = 0; i < gSpriteTableNum; i++) { + for (i = 0; i < gSpriteTableSize; i++) { temp_s1 = gCurrentSprite; load_asset_to_address(ASSET_SPRITES, (u32) temp_s1, gSpriteOffsetTable[i], gSpriteOffsetTable[i + 1] - gSpriteOffsetTable[i]); @@ -937,21 +955,29 @@ UNUSED u8 func_8007C660(s32 arg0) { } } } - return D_80126370[arg0]; + return D_80126370[texID]; } -UNUSED s32 func_8007C860(s32 spriteIndex) { - if ((spriteIndex < 0) || (spriteIndex >= gNumberOfLoadedTextures)) { +/** + * Returns the texture cache asset ID from the cache table entry given by the argument. + * Returns -1 if the argument is out of bounds + */ +UNUSED s32 tex_cache_asset_id(s32 cacheID) { + if (cacheID < 0 || cacheID >= gNumberOfLoadedTextures) { return -1; } - return gTextureCache[spriteIndex << 1]; + return gTextureCache[ASSETCACHE_ID(cacheID)]; } -UNUSED s32 func_8007C8A0(s32 spriteIndex) { - if ((spriteIndex < 0) || (spriteIndex >= D_80126358)) { +/** + * Returns the sprite cache asset ID from the cache table entry given by the argument. + * Returns -1 if the argument is out of bounds + */ +UNUSED s32 sprite_cache_asset_id(s32 cacheID) { + if (cacheID < 0 || cacheID >= gSpriteCacheCount) { return -1; } - return gSpriteCache[spriteIndex << 1]; + return gSpriteCache[ASSETCACHE_ID(cacheID)]; } s32 load_sprite_info(s32 spriteIndex, s32 *numOfInstancesOut, s32 *unkOut, s32 *numFramesOut, s32 *formatOut, @@ -964,7 +990,7 @@ s32 load_sprite_info(s32 spriteIndex, s32 *numOfInstancesOut, s32 *unkOut, s32 * s32 size; s32 new_var; - if ((spriteIndex < 0) || (spriteIndex >= gSpriteTableNum)) { + if ((spriteIndex < 0) || (spriteIndex >= gSpriteTableSize)) { textureCouldNotBeLoaded: *numOfInstancesOut = 0; *unkOut = 0; @@ -978,17 +1004,17 @@ s32 load_sprite_info(s32 spriteIndex, s32 *numOfInstancesOut, s32 *unkOut, s32 * load_asset_to_address(ASSET_SPRITES, (u32) new_var2, start, new_var); tex = load_texture(new_var2->unkC.val[0] + new_var2->baseTextureId); if (tex != NULL) { - *formatOut = tex->format & 0xF; - free_texture(tex); + *formatOut = TEX_FORMAT(tex->format); + tex_free(tex); *sizeOut = 0; for (i = 0; i < new_var2->numberOfFrames; i++) { for (j = new_var2->unkC.val[i]; j < (s32) new_var2->unkC.val[i + 1]; j++) { - *sizeOut += get_texture_size_from_id(new_var2->baseTextureId + j); + *sizeOut += tex_asset_size(new_var2->baseTextureId + j); } } *numFramesOut = new_var2->numberOfFrames; *numOfInstancesOut = new_var2->numberOfInstances; - *unkOut = new_var2->unk6; + *unkOut = new_var2->drawFlags; return 1; } goto textureCouldNotBeLoaded; @@ -996,22 +1022,26 @@ s32 load_sprite_info(s32 spriteIndex, s32 *numOfInstancesOut, s32 *unkOut, s32 * #pragma GLOBAL_ASM("asm/nonmatchings/textures_sprites/func_8007CA68.s") -/* Official name: texFreeSprite */ -void free_sprite(Sprite *sprite) { +/** + * This function attempts to free the sprite from memory. + * It checks if the refcount is zero, then finds the cache entry, before clearing it. + * Official Name: texFreeSprite + */ +void sprite_free(Sprite *sprite) { s32 i; s32 frame; if (sprite != NULL) { sprite->numberOfInstances--; if (sprite->numberOfInstances <= 0) { - for (i = 0; i < D_80126358; i++) { - if ((s32) sprite == gSpriteCache[(i << 1) + 1]) { + for (i = 0; i < gSpriteCacheCount; i++) { + if (sprite == (Sprite *) gSpriteCache[ASSETCACHE_PTR(i)]) { for (frame = 0; frame < sprite->numberOfFrames; frame++) { - free_texture(sprite->frames[frame]); + tex_free(sprite->frames[frame]); } mempool_free(sprite); - gSpriteCache[(i << 1) + 0] = -1; - gSpriteCache[(i << 1) + 1] = -1; // ? + gSpriteCache[ASSETCACHE_ID(i)] = -1; + gSpriteCache[ASSETCACHE_PTR(i)] = -1; break; } } @@ -1046,7 +1076,7 @@ void func_8007CDC0(Sprite *sprite1, Sprite *sprite2, s32 arg2) { temp_a3 = &sprite1->unkC.val[arg2]; sprUnk4 = sprite1->numberOfInstances; - sprUnk6 = sprite1->unk6; + sprUnk6 = sprite1->drawFlags; i = temp_a3[0]; j = temp_a3[1]; dlptr = D_80126364; @@ -1054,7 +1084,7 @@ void func_8007CDC0(Sprite *sprite1, Sprite *sprite2, s32 arg2) { triangles = D_80126368; if (i < j) { tex = sprite2->frames[i]; - sprite2->unk6 = ((tex->flags & 0xFFFF) & 0x3B); + sprite2->drawFlags = ((tex->flags & 0xFFFF) & 0x3B); } curVertIndex = 0; var_t5 = 0; @@ -1146,7 +1176,12 @@ void func_8007CDC0(Sprite *sprite1, Sprite *sprite2, s32 arg2) { #pragma GLOBAL_ASM("asm/nonmatchings/textures_sprites/func_8007CDC0.s") #endif -void build_tex_display_list(TextureHeader *tex, Gfx *_dList) { +/** + * Build the display list for the texture. + * Takes the texture properties from the header and then constructs the F3D gfx commands. + * Certain texture types will also have draw mode flag overrides. + */ +void material_init(TextureHeader *tex, Gfx *_dList) { s32 texFormat; s32 texRenderMode; s32 width; @@ -1163,8 +1198,8 @@ void build_tex_display_list(TextureHeader *tex, Gfx *_dList) { Gfx *dList; tex->cmd = dList = _dList; - texFormat = tex->format & 0xF; - texRenderMode = (tex->format >> 4) & 0xF; + texFormat = TEX_FORMAT(tex->format); + texRenderMode = TEX_RENDERMODE(tex->format); height = tex->height; width = tex->width; size = 1; @@ -1187,14 +1222,14 @@ void build_tex_display_list(TextureHeader *tex, Gfx *_dList) { size *= 2; } - if (uClamp || (tex->flags & RENDER_CLAMP_X)) { + if (uClamp || tex->flags & RENDER_CLAMP_X) { cms = G_TX_CLAMP; masks = G_TX_NOMASK; } else { cms = G_TX_WRAP; } - if (vClamp || (tex->flags & RENDER_CLAMP_Y)) { + if (vClamp || tex->flags & RENDER_CLAMP_Y) { cmt = G_TX_CLAMP; maskt = G_TX_NOMASK; } else { @@ -1218,7 +1253,7 @@ void build_tex_display_list(TextureHeader *tex, Gfx *_dList) { } } if (texFormat == TEX_FORMAT_CI4) { - texLut = func_8007EF64(tex->ciPaletteOffset); + texLut = tex_palette_id(tex->ciPaletteOffset); gDPLoadTextureBlock_4b(dList++, OS_PHYSICAL_TO_K0(tex + 1), G_IM_FMT_CI, width, height, 0, cms, cmt, masks, maskt, G_TX_NOLOD, G_TX_NOLOD); gDPLoadTLUT_pal16(dList++, 0, texLut); @@ -1269,7 +1304,7 @@ void build_tex_display_list(TextureHeader *tex, Gfx *_dList) { } } if (texFormat == TEX_FORMAT_CI4) { - texLut = func_8007EF64(tex->ciPaletteOffset); + texLut = tex_palette_id(tex->ciPaletteOffset); gDPLoadTextureBlock_4bS(dList++, OS_PHYSICAL_TO_K0(tex + 1), G_IM_FMT_CI, width, height, 0, cms, cmt, masks, maskt, G_TX_NOLOD, G_TX_NOLOD); gDPLoadTLUT_pal16(dList++, 0, texLut); @@ -1306,8 +1341,11 @@ void build_tex_display_list(TextureHeader *tex, Gfx *_dList) { } } -s32 func_8007EF64(s16 arg0) { - return (s32) (arg0 + gCiPalettes); +/** + * Returns the palette offset from the heap. + */ +s32 tex_palette_id(s16 paletteID) { + return (s32) (paletteID + gCiPalettes); } /** @@ -1495,22 +1533,27 @@ void update_pulsating_light_data(PulsatingLightData *data, s32 timeDelta) { } } -void func_8007F594(Gfx **dList, u32 index, u32 primitiveColor, u32 environmentColor) { +/** + * Initialises some draw modes for rendering semitransparent geometry. + * Sets everything needed to render, but relies on the texture being set manually. + */ +void gfx_init_basic_xlu(Gfx **dList, u32 index, u32 primitiveColor, u32 environmentColor) { Gfx *gfxTemp; Gfx *tempDlist; u32 tempIndex; - tempDlist = D_800DF3A8; + tempDlist = dBasicRenderSettingsZBOff; tempIndex = index; - if (tempIndex >= 2) { - tempIndex = 2; - tempDlist = D_800DF3D8; + if (tempIndex >= DRAW_BASIC_2CYCLE) { + tempIndex = DRAW_BASIC_2CYCLE; + tempDlist = dBasicRenderSettingsZBOn; } gfxTemp = *dList; gSPDisplayList(gfxTemp++, tempDlist); - gDkrDmaDisplayList(gfxTemp++, OS_PHYSICAL_TO_K0(D_800DF410[tempIndex]), numberOfGfxCommands(D_800DF410[0])); + gDkrDmaDisplayList(gfxTemp++, OS_PHYSICAL_TO_K0(dBasicRenderModes[tempIndex]), + numberOfGfxCommands(dBasicRenderModes[0])); gDPSetPrimColorRGBA(gfxTemp++, primitiveColor); gDPSetEnvColorRGBA(gfxTemp++, environmentColor); *dList = gfxTemp; diff --git a/src/textures_sprites.h b/src/textures_sprites.h index 28277c35..09d76c87 100644 --- a/src/textures_sprites.h +++ b/src/textures_sprites.h @@ -9,6 +9,14 @@ #include "memory.h" #include +#define TEX_TABLE_2D 0 +#define TEX_TABLE_3D 1 + +// Gets the texture type. E.g: rgba16 +#define TEX_FORMAT(x) (x & 0xF) +// Gets the texture render mode type. E.g: transparent +#define TEX_RENDERMODE(x) ((x >> 4) & 0xF) + /** * First two entries are combine mode. * Third entry is othermode high word. (Most importantly, the cycle mode and texture filter settings) @@ -104,8 +112,13 @@ typedef enum HeaderFlags { HEADER_FLAGS_WATER_EFFECT = (1 << 4), } HeaderFlags; -#define TEX_TABLE_2D 0 -#define TEX_TABLE_3D 1 +typedef enum BasicRenderIDs { + DRAW_BASIC_ZB_OFF, + DRAW_BASIC_1CYCLE, + DRAW_BASIC_2CYCLE, + + DRAW_BASIC_IDS +} BasicRenderIDs; typedef struct TextureCacheEntry { s32 id; @@ -127,20 +140,20 @@ typedef struct TempTexHeader { void tex_disable_modes(s32 flags); void tex_enable_modes(s32 flags); -s32 get_loaded_2D_textures(void); -s32 get_loaded_3D_textures(void); -s32 func_8007AE64(void); +s32 tex_get_table_2D(void); +s32 tex_get_table_3D(void); +s32 sprite_table_size(void); void set_texture_colour_tag(s32 tagID); -void reset_render_settings(Gfx **dList); -void enable_primitive_colour(void); -void disable_primitive_colour(void); -void load_and_set_texture_no_offset(Gfx **dList, TextureHeader *texhead, u32 flags); +void rendermode_reset(Gfx **dList); +void tex_primcolour_on(void); +void tex_primcolour_off(void); +void material_set_no_tex_offset(Gfx **dList, TextureHeader *texhead, u32 flags); void sprite_opaque(s32 setting); -s32 func_8007EF64(s16 arg0); -void load_and_set_texture(Gfx **dList, TextureHeader *texhead, s32 flags, s32 texOffset); -void free_sprite(Sprite *sprite); -void free_texture(TextureHeader *tex); -void func_8007BF34(Gfx **dList, s32 flags); +s32 tex_palette_id(s16 paletteID); +void material_set(Gfx **dList, TextureHeader *texhead, s32 flags, s32 texOffset); +void sprite_free(Sprite *sprite); +void tex_free(TextureHeader *tex); +void material_load_simple(Gfx **dList, s32 flags); // There might be a file boundary here. void tex_animate_texture(TextureHeader *texture, u32 *triangleBatchInfoFlags, s32 *arg2, s32 updateRate); @@ -149,17 +162,17 @@ void init_pulsating_light_data(PulsatingLightData *data); void update_pulsating_light_data(PulsatingLightData *data, s32 timeDelta); TextureHeader *set_animated_texture_header(TextureHeader *texHead, s32 offset); TextureHeader *load_texture(s32 arg0); // Non Matching -s32 get_texture_size_from_id(s32 id); // Non Matching -s32 func_8007C860(s32 spriteIndex); // Non Matching +s32 tex_asset_size(s32 id); // Non Matching +s32 tex_cache_asset_id(s32 cacheID); // Non Matching s32 load_sprite_info(s32 spriteIndex, s32 *numOfInstancesOut, s32 *unkOut, s32 *numFramesOut, s32 *formatOut, s32 *sizeOut); // Non Matching -void func_8007F594(Gfx **dList, u32 index, u32 primitiveColor, u32 environmentColor); // Non Matching +void gfx_init_basic_xlu(Gfx **dList, u32 index, u32 primitiveColor, u32 environmentColor); // Non Matching void func_8007CA68(s32 spriteID, s32 arg1, s32 *arg2, s32 *arg3, s32 *arg4); // Non Matching MemoryPoolSlot *func_8007C12C(s32 spriteID, s32 arg1); // Non Matching void tex_init_textures(void); // Non Matching -void load_blinking_lights_texture(Gfx **dList, TextureHeader *texture_list, u32 flags, +void material_set_blinking_lights(Gfx **dList, TextureHeader *texture_list, u32 flags, s32 texture_index); // Non Matching -void build_tex_display_list(TextureHeader *tex, Gfx *_dList); // Non Matching +void material_init(TextureHeader *tex, Gfx *_dList); // Non Matching void func_8007CDC0(Sprite *sprite1, Sprite *sprite2, s32 arg2); // Non Matching #endif diff --git a/src/tracks.c b/src/tracks.c index ada4a607..ca46fbb7 100644 --- a/src/tracks.c +++ b/src/tracks.c @@ -350,7 +350,7 @@ void render_scene(Gfx **dList, MatrixS **mtx, Vertex **vtx, Triangle **tris, s32 flip = TRUE; } #endif - reset_render_settings(&gSceneCurrDisplayList); + rendermode_reset(&gSceneCurrDisplayList); gDkrDisableBillboard(gSceneCurrDisplayList++); gSPClearGeometryMode(gSceneCurrDisplayList++, G_CULL_FRONT); gDPSetBlendColor(gSceneCurrDisplayList++, 0, 0, 0, 0x64); @@ -513,7 +513,7 @@ void func_8002581C(u8 *segmentIds, s32 numberOfSegments, s32 viewportIndex) { D_8011D490[1] = D_8011D474[viewportIndex].unk4; D_8011D480[0] = D_8011D474[viewportIndex].unk8; D_8011D480[1] = D_8011D474[viewportIndex].unkC; - load_and_set_texture_no_offset(&gSceneCurrDisplayList, NULL, RENDER_ANTI_ALIASING | RENDER_Z_COMPARE); + material_set_no_tex_offset(&gSceneCurrDisplayList, NULL, RENDER_ANTI_ALIASING | RENDER_Z_COMPARE); D_8011D49C = 0; D_8011D49E = 0; yCameraSins = sins_f(gSceneActiveCamera->trans.rotation.y_rotation * -1); @@ -1355,8 +1355,8 @@ void draw_gradient_background(void) { headerRed1 = gCurrentLevelHeader2->BGColourBottomR; headerGreen1 = gCurrentLevelHeader2->BGColourBottomG; headerBlue1 = gCurrentLevelHeader2->BGColourBottomB; - reset_render_settings(&gSceneCurrDisplayList); - load_and_set_texture_no_offset(&gSceneCurrDisplayList, 0, RENDER_FOG_ACTIVE); + rendermode_reset(&gSceneCurrDisplayList); + material_set_no_tex_offset(&gSceneCurrDisplayList, 0, RENDER_FOG_ACTIVE); gSPVertexDKR(gSceneCurrDisplayList++, OS_PHYSICAL_TO_K0(verts), 4, 0); gSPPolygon(gSceneCurrDisplayList++, OS_PHYSICAL_TO_K0(tris), 2, 0); set_twenty = 20; @@ -1552,7 +1552,7 @@ void render_level_geometry_and_objects(void) { objectsVisible[1] = TRUE; } - reset_render_settings(&gSceneCurrDisplayList); + rendermode_reset(&gSceneCurrDisplayList); sort_objects_by_dist(sp160, objCount - 1); visibleFlags = OBJ_FLAGS_INVIS_PLAYER1 << (get_current_viewport() & 1); @@ -1616,8 +1616,8 @@ void render_level_geometry_and_objects(void) { func_800BA8E4(&gSceneCurrDisplayList, &gSceneCurrMatrix, get_current_viewport()); } - reset_render_settings(&gSceneCurrDisplayList); - load_and_set_texture_no_offset(&gSceneCurrDisplayList, 0, RENDER_FOG_ACTIVE | RENDER_Z_COMPARE); + rendermode_reset(&gSceneCurrDisplayList); + material_set_no_tex_offset(&gSceneCurrDisplayList, 0, RENDER_FOG_ACTIVE | RENDER_Z_COMPARE); func_80012C3C(&gSceneCurrDisplayList); // Particles and FX @@ -1752,12 +1752,12 @@ void render_level_segment(s32 segmentId, s32 nonOpaque) { if (batchFlags & BATCH_FLAGS_PULSATING_LIGHTS) { color = gCurrentLevelHeader2->pulseLightData->outColorValue; gDPSetPrimColor(gSceneCurrDisplayList++, 0, 0, color, color, color, color); - load_blinking_lights_texture(&gSceneCurrDisplayList, texture, batchFlags, texOffset); + material_set_blinking_lights(&gSceneCurrDisplayList, texture, batchFlags, texOffset); gSPVertexDKR(gSceneCurrDisplayList++, OS_PHYSICAL_TO_K0(vertices), numberVertices, 0); gSPPolygon(gSceneCurrDisplayList++, OS_PHYSICAL_TO_K0(triangles), numberTriangles, TRIN_ENABLE_TEXTURE); gDPSetPrimColor(gSceneCurrDisplayList++, 0, 0, 255, 255, 255, 255); } else { - load_and_set_texture(&gSceneCurrDisplayList, texture, batchFlags, texOffset); + material_set(&gSceneCurrDisplayList, texture, batchFlags, texOffset); batchFlags = TRUE; if (texture == NULL) { batchFlags = FALSE; @@ -2572,12 +2572,12 @@ void free_track(void) { free_waves(); } for (i = 0; i < gCurrentLevelModel->numberOfTextures; i++) { - free_texture(gCurrentLevelModel->textures[i].texture); + tex_free(gCurrentLevelModel->textures[i].texture); } mempool_free(gTrackModelHeap); mempool_free(D_8011D370); mempool_free(D_8011D374); - free_sprite((Sprite *) gCurrentLevelModel->minimapSpriteIndex); + sprite_free((Sprite *) gCurrentLevelModel->minimapSpriteIndex); for (i = 0; i < ARRAY_COUNT(gShadowHeapData); i++) { mempool_free(gShadowHeapData[i]); mempool_free(gShadowHeapTris[i]); @@ -2736,7 +2736,7 @@ void shadow_render(Object *obj, ShadowData *shadow) { gDPSetPrimColor(gSceneCurrDisplayList++, 0, 0, 255, 255, 255, alpha); } while (i < shadow->meshEnd) { - load_and_set_texture_no_offset(&gSceneCurrDisplayList, gCurrShadowHeapData[i].texture, flags); + material_set_no_tex_offset(&gSceneCurrDisplayList, gCurrShadowHeapData[i].texture, flags); // I hope we can clean this part up. tri2 = triCount = gCurrShadowHeapData[i].triCount; // Fakematch vtx2 = vtxCount = gCurrShadowHeapData[i].vtxCount; @@ -2786,7 +2786,7 @@ void watereffect_render(Object *obj, WaterEffect *effect) { gCurrShadowTris = gShadowHeapTris[gWaterEffectIndex]; gCurrShadowVerts = gShadowHeapVerts[gWaterEffectIndex]; while (i < effect->meshEnd) { - load_and_set_texture_no_offset(&gSceneCurrDisplayList, gCurrShadowHeapData[i].texture, flags); + material_set_no_tex_offset(&gSceneCurrDisplayList, gCurrShadowHeapData[i].texture, flags); triCount = gCurrShadowHeapData[i].triCount; // Fakematch vtxCount = gCurrShadowHeapData[i].vtxCount; // Fakematch numTris = gCurrShadowHeapData[i + 1].triCount - gCurrShadowHeapData[i].triCount; diff --git a/src/waves.c b/src/waves.c index d2b789e3..d8911c03 100644 --- a/src/waves.c +++ b/src/waves.c @@ -128,11 +128,11 @@ s32 gWavePowerDivisor; mempool_free(tempMem); \ mem = NULL; \ } -#define FREE_TEX(tex) \ - tempTex = tex; \ - if (tempTex != NULL) { \ - free_texture(tempTex); \ - tex = NULL; \ +#define FREE_TEX(tex) \ + tempTex = tex; \ + if (tempTex != NULL) { \ + tex_free(tempTex); \ + tex = NULL; \ } void free_waves(void) { diff --git a/src/weather.c b/src/weather.c index 81945441..5548348b 100644 --- a/src/weather.c +++ b/src/weather.c @@ -196,11 +196,11 @@ void weather_clip_planes(s16 near, s16 far) { mempool_free(tempMem); \ mem = NULL; \ } -#define FREE_TEX(tex) \ - tempTex = tex; \ - if (tempTex != NULL) { \ - free_texture(tempTex); \ - tex = NULL; \ +#define FREE_TEX(tex) \ + tempTex = tex; \ + if (tempTex != NULL) { \ + tex_free(tempTex); \ + tex = NULL; \ } /** @@ -527,7 +527,7 @@ void snow_render(void) { mtx = (u32) get_projection_matrix_s16(); gSPMatrix(gCurrWeatherDisplayList++, OS_PHYSICAL_TO_K0(mtx ^ 0), G_MTX_DKR_INDEX_0); gDkrInsertMatrix(gCurrWeatherDisplayList++, G_MTX_DKR_INDEX_0, 0); - load_and_set_texture_no_offset(&gCurrWeatherDisplayList, gSnowGfx.texture, RENDER_Z_COMPARE); + material_set_no_tex_offset(&gCurrWeatherDisplayList, gSnowGfx.texture, RENDER_Z_COMPARE); while (i + gSnowVertOffset < gSnowVertCount) { vtx = (u32) &gSnowVerts[i]; gSPVertexDKR(gCurrWeatherDisplayList++, OS_PHYSICAL_TO_K0(vtx), gSnowVertOffset, 0); @@ -719,7 +719,7 @@ void lensflare_render(Gfx **dList, MatrixS **mats, Vertex **verts, ObjectSegment gDPFillRectangle(gfxTemp++, 0, 0, width, height); gDPPipeSync(gfxTemp++); *dList = gfxTemp; - reset_render_settings(dList); + rendermode_reset(dList); } } } @@ -816,17 +816,17 @@ void rain_init(s32 intensity, s32 opacity) { */ void free_rain_memory(void) { if (gRainGfx[0].tex != NULL) { - free_texture(gRainGfx[0].tex); + tex_free(gRainGfx[0].tex); gRainOverlayUnusedValue = NULL; } if (gRainGfx[1].tex != NULL) { - free_texture(gRainGfx[1].tex); + tex_free(gRainGfx[1].tex); gRainOverlayUnusedValue = NULL; } if (gRainSplashGfx != NULL) { - free_sprite(gRainSplashGfx); + sprite_free(gRainSplashGfx); gRainSplashGfx = NULL; } @@ -898,7 +898,7 @@ void rain_update(s32 updateRate) { } gDPSetPrimColor(gCurrWeatherDisplayList++, 0, 0, 255, 255, 255, 255); gDPSetEnvColor(gCurrWeatherDisplayList++, 255, 255, 255, 0); - reset_render_settings(&gCurrWeatherDisplayList); + rendermode_reset(&gCurrWeatherDisplayList); viewport_reset(&gCurrWeatherDisplayList); } } @@ -1144,9 +1144,9 @@ void render_rain_overlay(RainGfxData *rainGfx, s32 time) { tri->uv2.v = v0; tri++; - func_8007F594(&curDL, 0, - COLOUR_RGBA32(rainGfx->primitiveRed, rainGfx->primitiveGreen, rainGfx->primitiveBlue, opacity), - COLOUR_RGBA32(rainGfx->environmentRed, rainGfx->environmentGreen, rainGfx->environmentBlue, 0)); + gfx_init_basic_xlu(&curDL, 0, + COLOUR_RGBA32(rainGfx->primitiveRed, rainGfx->primitiveGreen, rainGfx->primitiveBlue, opacity), + COLOUR_RGBA32(rainGfx->environmentRed, rainGfx->environmentGreen, rainGfx->environmentBlue, 0)); gDkrDmaDisplayList(curDL++, OS_PHYSICAL_TO_K0(tex->cmd), tex->numberOfCommands); gSPVertexDKR(curDL++, OS_PHYSICAL_TO_K0(gRainVertices + gRainVertexFlip), 4, 0); gSPPolygon(curDL++, OS_PHYSICAL_TO_K0(gCurrWeatherTriList), 2, 1); diff --git a/ver/symbols/symbol_addrs.jpn.v79.txt b/ver/symbols/symbol_addrs.jpn.v79.txt index a7e65be2..8d795a51 100644 --- a/ver/symbols/symbol_addrs.jpn.v79.txt +++ b/ver/symbols/symbol_addrs.jpn.v79.txt @@ -1267,40 +1267,40 @@ fb_memcpy = 0x8007AF0C; tex_init_textures = 0x8007AF80; tex_disable_modes = 0x8007B11C; tex_enable_modes = 0x8007B138; -get_loaded_2D_textures = 0x8007B154; -get_loaded_3D_textures = 0x8007B164; -func_8007AE64 = 0x8007B174; +tex_get_table_2D = 0x8007B154; +tex_get_table_3D = 0x8007B164; +sprite_table_size = 0x8007B174; load_texture = 0x8007B184; -free_texture = 0x8007B5CC; +tex_free = 0x8007B5CC; set_texture_colour_tag = 0x8007B684; -func_8007B380 = 0x8007B690; -reset_render_settings = 0x8007B6E0; -enable_primitive_colour = 0x8007B74C; -disable_primitive_colour = 0x8007B764; +tex_cache_index = 0x8007B690; +rendermode_reset = 0x8007B6E0; +tex_primcolour_on = 0x8007B74C; +tex_primcolour_off = 0x8007B764; set_animated_texture_header = 0x8007B77C; -load_and_set_texture_no_offset = 0x8007B7D8; -load_and_set_texture = 0x8007B7F8; -load_blinking_lights_texture = 0x8007BD6C; +material_set_no_tex_offset = 0x8007B7D8; +material_set = 0x8007B7F8; +material_set_blinking_lights = 0x8007BD6C; sprite_opaque = 0x8007C22C; -func_8007BF34 = 0x8007C244; +material_load_simple = 0x8007C244; func_8007C12C = 0x8007C43C; -func_8007C52C = 0x8007C83C; -get_texture_size_from_id = 0x8007C88C; +sprite_cache_index = 0x8007C83C; +tex_asset_size = 0x8007C88C; func_8007C660 = 0x8007C970; -func_8007C860 = 0x8007CB70; -func_8007C8A0 = 0x8007CBB0; +tex_cache_asset_id = 0x8007CB70; +sprite_cache_asset_id = 0x8007CBB0; load_sprite_info = 0x8007CBF0; func_8007CA68 = 0x8007CD78; -free_sprite = 0x8007CFC0; +sprite_free = 0x8007CFC0; func_8007CDC0 = 0x8007D0D0; -build_tex_display_list = 0x8007D404; -func_8007EF64 = 0x8007F274; +material_init = 0x8007D404; +tex_palette_id = 0x8007F274; tex_animate_texture = 0x8007F290; func_8007F1E8 = 0x8007F4F8; update_colour_cycle = 0x8007F55C; init_pulsating_light_data = 0x8007F724; update_pulsating_light_data = 0x8007F770; -func_8007F594 = 0x8007F8A4; +gfx_init_basic_xlu = 0x8007F8A4; // screen_asset.c .text screenimage_load = 0x8007F950; @@ -2452,9 +2452,9 @@ dRenderSettingsSolidColour = 0x800E08D8; dRenderSettingsPrimOverlay = 0x800E09D8; dRenderSettingsPrimCol = 0x800E0A58; dRenderSettingsBlinkingLights = 0x800E0B58; -D_800DF3A8 = 0x800E0D58; -D_800DF3D8 = 0x800E0D88; -D_800DF410 = 0x800E0DC0; +dBasicRenderSettingsZBOff = 0x800E0D58; +dBasicRenderSettingsZBOn = 0x800E0D88; +dBasicRenderModes = 0x800E0DC0; // screen_asset.c .data gRdpSetModeScreenAsset = 0x800E0DF0; @@ -4134,8 +4134,8 @@ D_80126344 = 0x80127DD4; gSpriteOffsetTable = 0x80127DD8; gSpriteCache = 0x80127DDC; gCurrentSprite = 0x80127DE0; -gSpriteTableNum = 0x80127DE4; -D_80126358 = 0x80127DE8; +gSpriteTableSize = 0x80127DE4; +gSpriteCacheCount = 0x80127DE8; D_8012635C = 0x80127DEC; D_80126360 = 0x80127DF0; D_80126364 = 0x80127DF4; diff --git a/ver/symbols/symbol_addrs.pal.v77.txt b/ver/symbols/symbol_addrs.pal.v77.txt index bbf34114..0b5ec937 100644 --- a/ver/symbols/symbol_addrs.pal.v77.txt +++ b/ver/symbols/symbol_addrs.pal.v77.txt @@ -1263,40 +1263,40 @@ fb_memcpy = 0x8007ABFC; tex_init_textures = 0x8007AC70; tex_disable_modes = 0x8007AE0C; tex_enable_modes = 0x8007AE28; -get_loaded_2D_textures = 0x8007AE44; -get_loaded_3D_textures = 0x8007AE54; -func_8007AE64 = 0x8007AE64; +tex_get_table_2D = 0x8007AE44; +tex_get_table_3D = 0x8007AE54; +sprite_table_size = 0x8007AE64; load_texture = 0x8007AE74; -free_texture = 0x8007B2BC; +tex_free = 0x8007B2BC; set_texture_colour_tag = 0x8007B374; -func_8007B380 = 0x8007B380; -reset_render_settings = 0x8007B3D0; -enable_primitive_colour = 0x8007B43C; -disable_primitive_colour = 0x8007B454; +tex_cache_index = 0x8007B380; +rendermode_reset = 0x8007B3D0; +tex_primcolour_on = 0x8007B43C; +tex_primcolour_off = 0x8007B454; set_animated_texture_header = 0x8007B46C; -load_and_set_texture_no_offset = 0x8007B4C8; -load_and_set_texture = 0x8007B4E8; -load_blinking_lights_texture = 0x8007BA5C; +material_set_no_tex_offset = 0x8007B4C8; +material_set = 0x8007B4E8; +material_set_blinking_lights = 0x8007BA5C; sprite_opaque = 0x8007BF1C; -func_8007BF34 = 0x8007BF34; +material_load_simple = 0x8007BF34; func_8007C12C = 0x8007C12C; -func_8007C52C = 0x8007C52C; -get_texture_size_from_id = 0x8007C57C; +sprite_cache_index = 0x8007C52C; +tex_asset_size = 0x8007C57C; func_8007C660 = 0x8007C660; -func_8007C860 = 0x8007C860; -func_8007C8A0 = 0x8007C8A0; +tex_cache_asset_id = 0x8007C860; +sprite_cache_asset_id = 0x8007C8A0; load_sprite_info = 0x8007C8E0; func_8007CA68 = 0x8007CA68; -free_sprite = 0x8007CCB0; +sprite_free = 0x8007CCB0; func_8007CDC0 = 0x8007CDC0; -build_tex_display_list = 0x8007D0F4; -func_8007EF64 = 0x8007EF64; +material_init = 0x8007D0F4; +tex_palette_id = 0x8007EF64; tex_animate_texture = 0x8007EF80; func_8007F1E8 = 0x8007F1E8; update_colour_cycle = 0x8007F24C; init_pulsating_light_data = 0x8007F414; update_pulsating_light_data = 0x8007F460; -func_8007F594 = 0x8007F594; +gfx_init_basic_xlu = 0x8007F594; // screen_asset.c .text screenimage_load = 0x8007F640; @@ -2305,9 +2305,9 @@ dRenderSettingsSolidColour = 0x800DEFB8; dRenderSettingsPrimOverlay = 0x800DF0B8; dRenderSettingsPrimCol = 0x800DF138; dRenderSettingsBlinkingLights = 0x800DF238; -D_800DF3A8 = 0x800DF438; -D_800DF3D8 = 0x800DF468; -D_800DF410 = 0x800DF4A0; +dBasicRenderSettingsZBOff = 0x800DF438; +dBasicRenderSettingsZBOn = 0x800DF468; +dBasicRenderModes = 0x800DF4A0; gRdpSetModeScreenAsset = 0x800DF4D0; gInAdvModeTrophyRace = 0x800DF4E0; gTrackSelectWoodFrameHeightScale = 0x800DF4E4; @@ -3829,8 +3829,8 @@ D_80126344 = 0x801263D4; gSpriteOffsetTable = 0x801263D8; gSpriteCache = 0x801263DC; gCurrentSprite = 0x801263E0; -gSpriteTableNum = 0x801263E4; -D_80126358 = 0x801263E8; +gSpriteTableSize = 0x801263E4; +gSpriteCacheCount = 0x801263E8; D_8012635C = 0x801263EC; D_80126360 = 0x801263F0; D_80126364 = 0x801263F4; diff --git a/ver/symbols/symbol_addrs.pal.v80.txt b/ver/symbols/symbol_addrs.pal.v80.txt index 3f5d6bd2..e2f0bbe6 100644 --- a/ver/symbols/symbol_addrs.pal.v80.txt +++ b/ver/symbols/symbol_addrs.pal.v80.txt @@ -1186,40 +1186,40 @@ fb_memcpy = 0x8007B04C; tex_init_textures = 0x8007B0C0; tex_disable_modes = 0x8007B25C; tex_enable_modes = 0x8007B278; -get_loaded_2D_textures = 0x8007B294; -get_loaded_3D_textures = 0x8007B2A4; -func_8007AE64 = 0x8007B2B4; +tex_get_table_2D = 0x8007B294; +tex_get_table_3D = 0x8007B2A4; +sprite_table_size = 0x8007B2B4; load_texture = 0x8007B2C4; -free_texture = 0x8007B70C; +tex_free = 0x8007B70C; set_texture_colour_tag = 0x8007B7C4; -func_8007B380 = 0x8007B7D0; -reset_render_settings = 0x8007B820; -enable_primitive_colour = 0x8007B88C; -disable_primitive_colour = 0x8007B8A4; +tex_cache_index = 0x8007B7D0; +rendermode_reset = 0x8007B820; +tex_primcolour_on = 0x8007B88C; +tex_primcolour_off = 0x8007B8A4; set_animated_texture_header = 0x8007B8BC; -load_and_set_texture_no_offset = 0x8007B918; -load_and_set_texture = 0x8007B938; -load_blinking_lights_texture = 0x8007BEAC; +material_set_no_tex_offset = 0x8007B918; +material_set = 0x8007B938; +material_set_blinking_lights = 0x8007BEAC; sprite_opaque = 0x8007C36C; -func_8007BF34 = 0x8007C384; +material_load_simple = 0x8007C384; func_8007C12C = 0x8007C57C; -func_8007C52C = 0x8007C97C; -get_texture_size_from_id = 0x8007C9CC; +sprite_cache_index = 0x8007C97C; +tex_asset_size = 0x8007C9CC; func_8007C660 = 0x8007CAB0; -func_8007C860 = 0x8007CCB0; -func_8007C8A0 = 0x8007CCF0; +tex_cache_asset_id = 0x8007CCB0; +sprite_cache_asset_id = 0x8007CCF0; load_sprite_info = 0x8007CD30; func_8007CA68 = 0x8007CEB8; -free_sprite = 0x8007D100; +sprite_free = 0x8007D100; func_8007CDC0 = 0x8007D210; -build_tex_display_list = 0x8007D544; -func_8007EF64 = 0x8007F3B4; +material_init = 0x8007D544; +tex_palette_id = 0x8007F3B4; tex_animate_texture = 0x8007F3D0; func_8007F1E8 = 0x8007F638; update_colour_cycle = 0x8007F69C; init_pulsating_light_data = 0x8007F864; update_pulsating_light_data = 0x8007F8B0; -func_8007F594 = 0x8007F9E4; +gfx_init_basic_xlu = 0x8007F9E4; screenimage_load = 0x8007FA90; screenimage_draw = 0x8007FB64; load_menu_text = 0x8007FD50; @@ -2233,9 +2233,9 @@ dRenderSettingsSolidColour = 0x800DF538; dRenderSettingsPrimOverlay = 0x800DF638; dRenderSettingsPrimCol = 0x800DF6B8; dRenderSettingsBlinkingLights = 0x800DF7B8; -D_800DF3A8 = 0x800DF9B8; -D_800DF3D8 = 0x800DF9E8; -D_800DF410 = 0x800DFA20; +dBasicRenderSettingsZBOff = 0x800DF9B8; +dBasicRenderSettingsZBOn = 0x800DF9E8; +dBasicRenderModes = 0x800DFA20; gRdpSetModeScreenAsset = 0x800DFA50; gInAdvModeTrophyRace = 0x800DFA60; gTrackSelectWoodFrameHeightScale = 0x800DFA64; @@ -3761,8 +3761,8 @@ D_80126344 = 0x80126974; gSpriteOffsetTable = 0x80126978; gSpriteCache = 0x8012697C; gCurrentSprite = 0x80126980; -gSpriteTableNum = 0x80126984; -D_80126358 = 0x80126988; +gSpriteTableSize = 0x80126984; +gSpriteCacheCount = 0x80126988; D_8012635C = 0x8012698C; D_80126360 = 0x80126990; D_80126364 = 0x80126994; diff --git a/ver/symbols/symbol_addrs.us.v77.txt b/ver/symbols/symbol_addrs.us.v77.txt index 2d549b5f..a79a118a 100644 --- a/ver/symbols/symbol_addrs.us.v77.txt +++ b/ver/symbols/symbol_addrs.us.v77.txt @@ -1263,40 +1263,40 @@ fb_memcpy = 0x8007ABFC; tex_init_textures = 0x8007AC70; tex_disable_modes = 0x8007AE0C; tex_enable_modes = 0x8007AE28; -get_loaded_2D_textures = 0x8007AE44; -get_loaded_3D_textures = 0x8007AE54; -func_8007AE64 = 0x8007AE64; +tex_get_table_2D = 0x8007AE44; +tex_get_table_3D = 0x8007AE54; +sprite_table_size = 0x8007AE64; load_texture = 0x8007AE74; -free_texture = 0x8007B2BC; +tex_free = 0x8007B2BC; set_texture_colour_tag = 0x8007B374; -func_8007B380 = 0x8007B380; -reset_render_settings = 0x8007B3D0; -enable_primitive_colour = 0x8007B43C; -disable_primitive_colour = 0x8007B454; +tex_cache_index = 0x8007B380; +rendermode_reset = 0x8007B3D0; +tex_primcolour_on = 0x8007B43C; +tex_primcolour_off = 0x8007B454; set_animated_texture_header = 0x8007B46C; -load_and_set_texture_no_offset = 0x8007B4C8; -load_and_set_texture = 0x8007B4E8; -load_blinking_lights_texture = 0x8007BA5C; +material_set_no_tex_offset = 0x8007B4C8; +material_set = 0x8007B4E8; +material_set_blinking_lights = 0x8007BA5C; sprite_opaque = 0x8007BF1C; -func_8007BF34 = 0x8007BF34; +material_load_simple = 0x8007BF34; func_8007C12C = 0x8007C12C; -func_8007C52C = 0x8007C52C; -get_texture_size_from_id = 0x8007C57C; +sprite_cache_index = 0x8007C52C; +tex_asset_size = 0x8007C57C; func_8007C660 = 0x8007C660; -func_8007C860 = 0x8007C860; -func_8007C8A0 = 0x8007C8A0; +tex_cache_asset_id = 0x8007C860; +sprite_cache_asset_id = 0x8007C8A0; load_sprite_info = 0x8007C8E0; func_8007CA68 = 0x8007CA68; -free_sprite = 0x8007CCB0; +sprite_free = 0x8007CCB0; func_8007CDC0 = 0x8007CDC0; -build_tex_display_list = 0x8007D0F4; -func_8007EF64 = 0x8007EF64; +material_init = 0x8007D0F4; +tex_palette_id = 0x8007EF64; tex_animate_texture = 0x8007EF80; func_8007F1E8 = 0x8007F1E8; update_colour_cycle = 0x8007F24C; init_pulsating_light_data = 0x8007F414; update_pulsating_light_data = 0x8007F460; -func_8007F594 = 0x8007F594; +gfx_init_basic_xlu = 0x8007F594; // screen_asset.c .text screenimage_load = 0x8007F640; @@ -2446,9 +2446,9 @@ dRenderSettingsSolidColour = 0x800DEF28; dRenderSettingsPrimOverlay = 0x800DF028; dRenderSettingsPrimCol = 0x800DF0A8; dRenderSettingsBlinkingLights = 0x800DF1A8; -D_800DF3A8 = 0x800DF3A8; -D_800DF3D8 = 0x800DF3D8; -D_800DF410 = 0x800DF410; +dBasicRenderSettingsZBOff = 0x800DF3A8; +dBasicRenderSettingsZBOn = 0x800DF3D8; +dBasicRenderModes = 0x800DF410; // screen_asset.c .data gRdpSetModeScreenAsset = 0x800DF440; @@ -4256,8 +4256,8 @@ D_80126344 = 0x80126344; gSpriteOffsetTable = 0x80126348; gSpriteCache = 0x8012634C; gCurrentSprite = 0x80126350; -gSpriteTableNum = 0x80126354; -D_80126358 = 0x80126358; +gSpriteTableSize = 0x80126354; +gSpriteCacheCount = 0x80126358; D_8012635C = 0x8012635C; D_80126360 = 0x80126360; D_80126364 = 0x80126364; diff --git a/ver/symbols/symbol_addrs.us.v80.txt b/ver/symbols/symbol_addrs.us.v80.txt index 82299450..34ba7c82 100644 --- a/ver/symbols/symbol_addrs.us.v80.txt +++ b/ver/symbols/symbol_addrs.us.v80.txt @@ -1186,40 +1186,40 @@ fb_memcpy = 0x8007B04C; tex_init_textures = 0x8007B0C0; tex_disable_modes = 0x8007B25C; tex_enable_modes = 0x8007B278; -get_loaded_2D_textures = 0x8007B294; -get_loaded_3D_textures = 0x8007B2A4; -func_8007AE64 = 0x8007B2B4; +tex_get_table_2D = 0x8007B294; +tex_get_table_3D = 0x8007B2A4; +sprite_table_size = 0x8007B2B4; load_texture = 0x8007B2C4; -free_texture = 0x8007B70C; +tex_free = 0x8007B70C; set_texture_colour_tag = 0x8007B7C4; -func_8007B380 = 0x8007B7D0; -reset_render_settings = 0x8007B820; -enable_primitive_colour = 0x8007B88C; -disable_primitive_colour = 0x8007B8A4; +tex_cache_index = 0x8007B7D0; +rendermode_reset = 0x8007B820; +tex_primcolour_on = 0x8007B88C; +tex_primcolour_off = 0x8007B8A4; set_animated_texture_header = 0x8007B8BC; -load_and_set_texture_no_offset = 0x8007B918; -load_and_set_texture = 0x8007B938; -load_blinking_lights_texture = 0x8007BEAC; +material_set_no_tex_offset = 0x8007B918; +material_set = 0x8007B938; +material_set_blinking_lights = 0x8007BEAC; sprite_opaque = 0x8007C36C; -func_8007BF34 = 0x8007C384; +material_load_simple = 0x8007C384; func_8007C12C = 0x8007C57C; -func_8007C52C = 0x8007C97C; -get_texture_size_from_id = 0x8007C9CC; +sprite_cache_index = 0x8007C97C; +tex_asset_size = 0x8007C9CC; func_8007C660 = 0x8007CAB0; -func_8007C860 = 0x8007CCB0; -func_8007C8A0 = 0x8007CCF0; +tex_cache_asset_id = 0x8007CCB0; +sprite_cache_asset_id = 0x8007CCF0; load_sprite_info = 0x8007CD30; func_8007CA68 = 0x8007CEB8; -free_sprite = 0x8007D100; +sprite_free = 0x8007D100; func_8007CDC0 = 0x8007D210; -build_tex_display_list = 0x8007D544; -func_8007EF64 = 0x8007F3B4; +material_init = 0x8007D544; +tex_palette_id = 0x8007F3B4; tex_animate_texture = 0x8007F3D0; func_8007F1E8 = 0x8007F638; update_colour_cycle = 0x8007F69C; init_pulsating_light_data = 0x8007F864; update_pulsating_light_data = 0x8007F8B0; -func_8007F594 = 0x8007F9E4; +gfx_init_basic_xlu = 0x8007F9E4; screenimage_load = 0x8007FA90; screenimage_draw = 0x8007FB64; load_menu_text = 0x8007FD50; @@ -2230,9 +2230,9 @@ dRenderSettingsSolidColour = 0x800DF4A8; dRenderSettingsPrimOverlay = 0x800DF5A8; dRenderSettingsPrimCol = 0x800DF628; dRenderSettingsBlinkingLights = 0x800DF728; -D_800DF3A8 = 0x800DF928; -D_800DF3D8 = 0x800DF958; -D_800DF410 = 0x800DF990; +dBasicRenderSettingsZBOff = 0x800DF928; +dBasicRenderSettingsZBOn = 0x800DF958; +dBasicRenderModes = 0x800DF990; gRdpSetModeScreenAsset = 0x800DF9C0; gInAdvModeTrophyRace = 0x800DF9D0; gTrackSelectWoodFrameHeightScale = 0x800DF9D4; @@ -3757,8 +3757,8 @@ D_80126344 = 0x801268E4; gSpriteOffsetTable = 0x801268E8; gSpriteCache = 0x801268EC; gCurrentSprite = 0x801268F0; -gSpriteTableNum = 0x801268F4; -D_80126358 = 0x801268F8; +gSpriteTableSize = 0x801268F4; +gSpriteCacheCount = 0x801268F8; D_8012635C = 0x801268FC; D_80126360 = 0x80126900; D_80126364 = 0x80126904;