diff options
| author | coco875 <59367621+coco875@users.noreply.github.com> | 2025-07-06 23:14:57 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-06 17:14:57 -0600 |
| commit | a0b202cca4fc4a8aa7f5c24ef4f579018e1f34c6 (patch) | |
| tree | d4cc18fb38e006d001811aed0306fa9612da36e4 | |
| parent | 4491c025a5e22624caa7dac3faf802de395db17a (diff) | |
fix some custom texture (#426)
* fix lakitu custom texture
* finish fix lakitu
* finish fix lakitu but also fix crab and snowman
* Update Mole.cpp
* fix texture around jumbotron
---------
Co-authored-by: MegaMech <MegaMech@users.noreply.github.com>
| -rw-r--r-- | include/align_asset_macro.h | 2 | ||||
| -rw-r--r-- | src/engine/courses/LuigiRaceway.cpp | 47 | ||||
| -rw-r--r-- | src/engine/courses/WarioStadium.cpp | 21 | ||||
| -rw-r--r-- | src/engine/objects/Crab.cpp | 35 | ||||
| -rw-r--r-- | src/engine/objects/Lakitu.cpp | 123 | ||||
| -rw-r--r-- | src/engine/objects/Mole.cpp | 2 | ||||
| -rw-r--r-- | src/engine/objects/Snowman.cpp | 51 |
7 files changed, 156 insertions, 125 deletions
diff --git a/include/align_asset_macro.h b/include/align_asset_macro.h index 43b28dd3a..8292815f8 100644 --- a/include/align_asset_macro.h +++ b/include/align_asset_macro.h @@ -1,6 +1,6 @@ #pragma once -bool GameEngine_OTRSigCheck(char* imgData); +bool GameEngine_OTRSigCheck(const char* imgData); #if defined(_WIN32) #define ALIGN_ASSET(x) __declspec(align(x)) diff --git a/src/engine/courses/LuigiRaceway.cpp b/src/engine/courses/LuigiRaceway.cpp index acf1bf500..1f9bcb559 100644 --- a/src/engine/courses/LuigiRaceway.cpp +++ b/src/engine/courses/LuigiRaceway.cpp @@ -257,42 +257,6 @@ void LuigiRaceway::SetStaffGhost() { } void LuigiRaceway::Jumbotron() { - gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); - gDPTileSync(gDisplayListHead++); - gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, - G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); - gDPSetTileSize(gDisplayListHead++, G_TX_RENDERTILE, 0, 0, 0x007C, 0x007C); - gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, gSegmentTable[5] + 0x5800); - gDPTileSync(gDisplayListHead++); - gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, - G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); - gDPLoadSync(gDisplayListHead++); - gDPLoadBlock(gDisplayListHead++, G_TX_LOADTILE, 0, 0, 1023, 256); - gSPVertex(gDisplayListHead++, (uintptr_t) segment_vtx_to_virtual(0xB710), 3, 0); - gSP1Triangle(gDisplayListHead++, 0, 1, 2, 0); - gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, gSegmentTable[5] + 0xB800); - gDPTileSync(gDisplayListHead++); - gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, - G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); - gDPLoadSync(gDisplayListHead++); - gDPLoadBlock(gDisplayListHead++, G_TX_LOADTILE, 0, 0, 1023, 256); - gSPVertex(gDisplayListHead++, (uintptr_t) segment_vtx_to_virtual(0xB740), 32, 0); - gSP2Triangles(gDisplayListHead++, 0, 1, 2, 0, 0, 2, 3, 0); - gSP2Triangles(gDisplayListHead++, 4, 5, 6, 0, 4, 6, 7, 0); - gSP2Triangles(gDisplayListHead++, 8, 9, 10, 0, 9, 11, 12, 0); - gSP2Triangles(gDisplayListHead++, 9, 12, 10, 0, 13, 14, 15, 0); - gSP2Triangles(gDisplayListHead++, 13, 15, 16, 0, 17, 18, 19, 0); - gSP2Triangles(gDisplayListHead++, 17, 19, 20, 0, 11, 21, 12, 0); - gSP2Triangles(gDisplayListHead++, 10, 22, 23, 0, 10, 23, 24, 0); - gSP2Triangles(gDisplayListHead++, 25, 22, 26, 0, 25, 26, 27, 0); - gSP2Triangles(gDisplayListHead++, 28, 23, 29, 0, 28, 29, 30, 0); - gSP1Triangle(gDisplayListHead++, 27, 26, 31, 0); - gSPVertex(gDisplayListHead++, (uintptr_t) segment_vtx_to_virtual(0xB940), 14, 0); - gSP2Triangles(gDisplayListHead++, 0, 1, 2, 0, 3, 4, 5, 0); - gSP2Triangles(gDisplayListHead++, 3, 5, 6, 0, 1, 7, 8, 0); - gSP2Triangles(gDisplayListHead++, 1, 8, 9, 0, 10, 11, 12, 0); - gSP1Triangle(gDisplayListHead++, 10, 12, 13, 0); - gDPTileSync(gDisplayListHead++); gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 16, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_CLAMP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_CLAMP, 6, G_TX_NOLOD); gDPSetTileSize(gDisplayListHead++, G_TX_RENDERTILE, 0, 0, 0x00FC, 0x007C); @@ -345,17 +309,6 @@ void LuigiRaceway::Jumbotron() { gSPVertex(gDisplayListHead++, (uintptr_t) segment_vtx_to_virtual(0xBB60), 4, 0); gSP2Triangles(gDisplayListHead++, 0, 1, 2, 0, 0, 2, 3, 0); gDPTileSync(gDisplayListHead++); - gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, - G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); - gDPSetTileSize(gDisplayListHead++, G_TX_RENDERTILE, 0, 0, 0x007C, 0x007C); - gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, gSegmentTable[5] + 0xB000); - gDPTileSync(gDisplayListHead++); - gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, - G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); - gDPLoadSync(gDisplayListHead++); - gDPLoadBlock(gDisplayListHead++, G_TX_LOADTILE, 0, 0, 1023, 256); - gSPVertex(gDisplayListHead++, (uintptr_t) segment_vtx_to_virtual(0xBBA0), 4, 0); - gSP2Triangles(gDisplayListHead++, 0, 1, 2, 0, 0, 2, 3, 0); } void LuigiRaceway::Render(struct UnkStruct_800DC5EC* arg0) { diff --git a/src/engine/courses/WarioStadium.cpp b/src/engine/courses/WarioStadium.cpp index f04510e96..9ab3b7915 100644 --- a/src/engine/courses/WarioStadium.cpp +++ b/src/engine/courses/WarioStadium.cpp @@ -230,27 +230,6 @@ void WarioStadium::WhatDoesThisDoAI(Player* player, int8_t playerId) { } void WarioStadium::Jumbotron() { - gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); - gDPTileSync(gDisplayListHead++); - gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, - G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); - gDPSetTileSize(gDisplayListHead++, G_TX_RENDERTILE, 0, 0, 0x007C, 0x007C); - gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, gSegmentTable[5] + 0x7800); - gDPTileSync(gDisplayListHead++); - gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, - G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); - gDPLoadSync(gDisplayListHead++); - gDPLoadBlock(gDisplayListHead++, G_TX_LOADTILE, 0, 0, 1023, 256); - gSPVertex(gDisplayListHead++, (uintptr_t) segment_vtx_to_virtual(0x177B0), 32, 0); - gSP2Triangles(gDisplayListHead++, 0, 1, 2, 0, 0, 2, 3, 0); - gSP2Triangles(gDisplayListHead++, 4, 5, 6, 0, 4, 6, 7, 0); - gSP2Triangles(gDisplayListHead++, 8, 9, 10, 0, 8, 10, 11, 0); - gSP2Triangles(gDisplayListHead++, 12, 13, 14, 0, 12, 14, 15, 0); - gSP2Triangles(gDisplayListHead++, 16, 17, 18, 0, 16, 18, 19, 0); - gSP2Triangles(gDisplayListHead++, 20, 21, 22, 0, 20, 22, 23, 0); - gSP2Triangles(gDisplayListHead++, 24, 25, 26, 0, 24, 26, 27, 0); - gSP2Triangles(gDisplayListHead++, 28, 29, 30, 0, 28, 30, 31, 0); - gDPTileSync(gDisplayListHead++); gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 16, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_CLAMP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_CLAMP, 6, G_TX_NOLOD); gDPSetTileSize(gDisplayListHead++, G_TX_RENDERTILE, 0, 0, 0x00FC, 0x007C); diff --git a/src/engine/objects/Crab.cpp b/src/engine/objects/Crab.cpp index 82d2b9330..98c781b5a 100644 --- a/src/engine/objects/Crab.cpp +++ b/src/engine/objects/Crab.cpp @@ -4,7 +4,6 @@ #include <vector> #include "CoreMath.h" - #include "port/Game.h" extern "C" { @@ -55,19 +54,29 @@ void OCrab::Tick(void) { } } +Vtx common_vtx_crab[] = { + { { { -32, -31, 0 }, 0, { 0, 0 }, { 255, 255, 255, 255 } } }, + { { { 31, -31, 0 }, 0, { 4032, 0 }, { 255, 255, 255, 255 } } }, + { { { 31, 31, 0 }, 0, { 4032, 3968 }, { 255, 255, 255, 255 } } }, + { { { -32, 31, 0 }, 0, { 0, 3968 }, { 255, 255, 255, 255 } } }, +}; + void OCrab::Draw(s32 cameraId) { Camera* camera; s32 objectIndex = _objectIndex; if (gObjectList[objectIndex].state >= 2) { - Vtx* vtx = (Vtx*) LOAD_ASSET_RAW(common_vtx_hedgehog); camera = &camera1[cameraId]; func_8004A6EC(objectIndex, 0.5f); gObjectList[objectIndex].orientation[1] = func_800418AC(gObjectList[objectIndex].pos[0], gObjectList[objectIndex].pos[2], camera->pos); - draw_2d_texture_at(gObjectList[objectIndex].pos, gObjectList[objectIndex].orientation, - gObjectList[objectIndex].sizeScaling, (u8*) gObjectList[objectIndex].activeTLUT, - (uint8_t*)gObjectList[objectIndex].activeTexture, vtx, 64, 64, - 64, 32); + rsp_set_matrix_transformation(gObjectList[objectIndex].pos, gObjectList[objectIndex].orientation, + gObjectList[objectIndex].sizeScaling); + gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D007D78); + gDPLoadTLUT_pal256(gDisplayListHead++, gObjectList[objectIndex].activeTLUT); + rsp_load_texture((u8*) gObjectList[objectIndex].activeTexture, 64, 64); + gSPVertex(gDisplayListHead++, (uintptr_t) common_vtx_crab, 4, 0); + gSPDisplayList(gDisplayListHead++, (Gfx*) common_rectangle_display); + gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF); } } @@ -76,14 +85,22 @@ void OCrab::DrawModel(s32 cameraId) { s32 objectIndex = _objectIndex; func_8008A364(objectIndex, cameraId, 0x2AABU, 800); if (is_obj_flag_status_active(objectIndex, VISIBLE) != 0) { - Camera *camera; + Camera* camera; s32 objectIndex; if (gObjectList[objectIndex].state >= 2) { camera = &camera1[cameraId]; func_8004A6EC(objectIndex, 0.5f); - gObjectList[objectIndex].orientation[1] = func_800418AC(gObjectList[objectIndex].pos[0], gObjectList[objectIndex].pos[2], camera->pos); - draw_2d_texture_at(gObjectList[objectIndex].pos, gObjectList[objectIndex].orientation, gObjectList[objectIndex].sizeScaling, (u8*) gObjectList[objectIndex].activeTLUT, (u8*)gObjectList[objectIndex].activeTexture, (Vtx*)common_vtx_hedgehog, 0x00000040, 0x00000040, 0x00000040, 0x00000020); + gObjectList[objectIndex].orientation[1] = + func_800418AC(gObjectList[objectIndex].pos[0], gObjectList[objectIndex].pos[2], camera->pos); + rsp_set_matrix_transformation(gObjectList[objectIndex].pos, gObjectList[objectIndex].orientation, + gObjectList[objectIndex].sizeScaling); + gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D007D78); + gDPLoadTLUT_pal256(gDisplayListHead++, gObjectList[objectIndex].activeTLUT); + rsp_load_texture((u8*) gObjectList[objectIndex].activeTexture, 64, 64); + gSPVertex(gDisplayListHead++, (uintptr_t) common_vtx_crab, 4, 0); + gSPDisplayList(gDisplayListHead++, (Gfx*) common_rectangle_display); + gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF); } } } diff --git a/src/engine/objects/Lakitu.cpp b/src/engine/objects/Lakitu.cpp index 8088e89c8..392fe9100 100644 --- a/src/engine/objects/Lakitu.cpp +++ b/src/engine/objects/Lakitu.cpp @@ -32,7 +32,7 @@ extern "C" { #include "course_offsets.h" #include "data/some_data.h" #include "race_logic.h" -#include "effects.h" +#include "effects.h" #include "memory.h" extern s8 gPlayerCount; } @@ -41,11 +41,11 @@ OLakitu::OLakitu(s32 playerId, LakituType type) { Name = "Lakitu"; _playerId = playerId; - init_object(gIndexLakituList[playerId], (s32)type); + init_object(gIndexLakituList[playerId], (s32) type); } void OLakitu::Activate(LakituType type) { - init_object(gIndexLakituList[_playerId], (s32)type); + init_object(gIndexLakituList[_playerId], (s32) type); } void OLakitu::Tick() { @@ -96,7 +96,7 @@ void OLakitu::Draw(s32 cameraId) { s32 objectIndex; Object* object; - FrameInterpolation_RecordOpenChild("Lakitu",(uintptr_t) this); + FrameInterpolation_RecordOpenChild("Lakitu", (uintptr_t) this); objectIndex = gIndexLakituList[cameraId]; camera = &camera1[cameraId]; @@ -106,14 +106,37 @@ void OLakitu::Draw(s32 cameraId) { object->orientation[1] = func_800418AC(object->pos[0], object->pos[2], camera->pos); object->orientation[2] = 0x8000; if (func_80072354(objectIndex, 2) != 0) { - draw_2d_texture_at(object->pos, object->orientation, object->sizeScaling, (u8*) object->activeTLUT, - (u8*)object->activeTexture, object->vertex, (s32) object->textureWidth, - (s32) object->textureHeight, (s32) object->textureWidth, - (s32) object->textureHeight / 2); + s32 width = object->textureWidth; + s32 height = object->textureHeight; + rsp_set_matrix_transformation(object->pos, object->orientation, object->sizeScaling); + gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D007D78); + s32 heightIndex; + + gDPLoadTLUT_pal256(gDisplayListHead++, object->activeTLUT); + gDPLoadTextureTile(gDisplayListHead++, object->activeTexture, G_IM_FMT_CI, G_IM_SIZ_8b, width, height, 0, 0, + width - 1, height - 1, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, + G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + gSPVertex(gDisplayListHead++, (uintptr_t) object->vertex, 4, 0); + gSPDisplayList(gDisplayListHead++, (Gfx*) common_rectangle_display); + gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF); } else { - func_800485C4(object->pos, object->orientation, object->sizeScaling, (s32) object->primAlpha, - (u8*) object->activeTLUT, (u8*)object->activeTexture, object->vertex, (s32) object->textureWidth, - (s32) object->textureHeight, (s32) object->textureWidth, (s32) object->textureHeight / 2); + s32 width = object->textureWidth; + s32 height = object->textureHeight; + rsp_set_matrix_transformation(object->pos, object->orientation, object->sizeScaling); + gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D007E98); + gDPSetAlphaCompare(gDisplayListHead++, G_AC_DITHER); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_XLU_SURF, G_RM_AA_ZB_XLU_SURF2); + + set_transparency(object->primAlpha); + s32 heightIndex; + + gDPLoadTLUT_pal256(gDisplayListHead++, object->activeTLUT); + rsp_load_texture((u8*) object->activeTexture, width, height); + gSPVertex(gDisplayListHead++, (uintptr_t) object->vertex, 4, 0); + gSPDisplayList(gDisplayListHead++, (Gfx*) common_rectangle_display); + gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF); + + gDPSetAlphaCompare(gDisplayListHead++, G_AC_NONE); } if (gScreenModeSelection == SCREEN_MODE_1P) { var_f0 = object->pos[0] - camera->pos[0]; @@ -188,6 +211,13 @@ static const char* sLakituTextures[] = { gTextureLakituBlueLight5, gTextureLakituBlueLight6, gTextureLakituBlueLight7, gTextureLakituBlueLight8, }; +Vtx fixed_common_vtx_lakitu[] = { + { { { -28, -35, 0 }, 0, { 0, 0 }, { 255, 255, 255, 255 } } }, + { { { 27, -35, 0 }, 0, { 3520, 0 }, { 255, 255, 255, 255 } } }, + { { { 27, 35, 0 }, 0, { 3520, 4480 }, { 255, 255, 255, 255 } } }, + { { { -28, 35, 0 }, 0, { 0, 4480 }, { 255, 255, 255, 255 } } }, +}; + void OLakitu::init_obj_lakitu_starter_and_checkered_flag(s32 objectIndex, s32 playerId) { if (playerId == 0) { D_801656F0 = 0; @@ -201,8 +231,7 @@ void OLakitu::init_obj_lakitu_starter_and_checkered_flag(s32 objectIndex, s32 pl objectIndex, (u8*) load_lakitu_tlut_x64(common_tlut_lakitu_countdown, ARRAY_COUNT(common_tlut_lakitu_countdown)), sLakituTextures, 56, (u16) 72); - Vtx* vtx = (Vtx*) LOAD_ASSET_RAW(common_vtx_lakitu); - gObjectList[objectIndex].vertex = vtx; + gObjectList[objectIndex].vertex = fixed_common_vtx_lakitu; gObjectList[objectIndex].sizeScaling = 0.15f; clear_object_flag(objectIndex, 0x00000010); object_next_state(objectIndex); @@ -319,18 +348,44 @@ static const char* sLakituCheckeredList[] = { gTextureLakituCheckeredFlag31, gTextureLakituCheckeredFlag32 }; +Vtx fixed_common_vtx_also_lakitu[] = { + { { { -36, -27, 0 }, 0, { 0, 0 }, { 255, 255, 255, 255 } } }, + { { { 35, -27, 0 }, 0, { 4544, 0 }, { 255, 255, 255, 255 } } }, + { { { 35, 27, 0 }, 0, { 4544, 3456 }, { 255, 255, 255, 255 } } }, + { { { -36, 27, 0 }, 0, { 0, 3456 }, { 255, 255, 255, 255 } } }, + { { { -40, -24, 0 }, 0, { 0, 0 }, { 255, 255, 255, 255 } } }, + { { { 40, -24, 0 }, 0, { 5056, 0 }, { 255, 255, 255, 255 } } }, + { { { 40, 0, 0 }, 0, { 5056, 1472 }, { 255, 255, 255, 255 } } }, + { { { -40, 0, 0 }, 0, { 0, 1472 }, { 255, 255, 255, 255 } } }, + { { { -40, 0, 0 }, 0, { 0, 0 }, { 255, 255, 255, 255 } } }, + { { { 40, 0, 0 }, 0, { 5056, 0 }, { 255, 255, 255, 255 } } }, + { { { 40, 24, 0 }, 0, { 5056, 1472 }, { 255, 255, 255, 255 } } }, + { { { -40, 24, 0 }, 0, { 0, 1472 }, { 255, 255, 255, 255 } } }, + { { { -48, -8, 0 }, 0, { 0, 0 }, { 255, 255, 255, 255 } } }, + { { { 47, -8, 0 }, 0, { 6080, 0 }, { 255, 255, 255, 255 } } }, + { { { 47, 7, 0 }, 0, { 6080, 960 }, { 255, 255, 255, 255 } } }, + { { { -48, 7, 0 }, 0, { 0, 960 }, { 255, 255, 255, 255 } } }, + { { { -56, -16, 0 }, 0, { 0, 0 }, { 255, 255, 255, 255 } } }, + { { { 55, -16, 0 }, 0, { 7104, 0 }, { 255, 255, 255, 255 } } }, + { { { 55, 15, 0 }, 0, { 7104, 1984 }, { 255, 255, 255, 255 } } }, + { { { -56, 15, 0 }, 0, { 0, 1984 }, { 255, 255, 255, 255 } } }, + { { { -56, -16, 0 }, 0, { 0, 0 }, { 0, 0, 0, 255 } } }, + { { { 55, -16, 0 }, 0, { 7104, 0 }, { 0, 0, 0, 255 } } }, + { { { 55, 15, 0 }, 0, { 7104, 1984 }, { 0, 0, 0, 255 } } }, + { { { -56, 15, 0 }, 0, { 0, 1984 }, { 0, 0, 0, 255 } } }, +}; + void OLakitu::init_obj_lakitu_checkered_flag(s32 objectIndex, s32 playerIndex) { Object* object; OLakitu::func_800791F0(objectIndex, playerIndex); u8* tex = (u8*) LOAD_ASSET_RAW(common_tlut_lakitu_checkered_flag); - Vtx* vtx = (Vtx*) LOAD_ASSET_RAW(common_vtx_also_lakitu); init_texture_object(objectIndex, (u8*) tex, sLakituCheckeredList, 0x48U, (u16) 0x00000038); object = &gObjectList[objectIndex]; object->activeTexture = *gObjectList[objectIndex].textureList; - object->vertex = vtx; + object->vertex = fixed_common_vtx_also_lakitu; object->pos[2] = 5000.0f; object->pos[1] = 5000.0f; object->pos[0] = 5000.0f; @@ -366,7 +421,7 @@ void OLakitu::func_800797AC(s32 playerId) { objectIndex = gIndexLakituList[playerId]; player = &gPlayerOne[playerId]; - //if ((IsSherbetLand()) && (player->unk_0CA & 1)) { + // if ((IsSherbetLand()) && (player->unk_0CA & 1)) { if ((CM_GetProps()->LakituTowType == LakituTowType::ICE) && (player->unk_0CA & 1)) { init_object(objectIndex, 7); player->unk_0CA |= 0x10; @@ -402,14 +457,20 @@ void OLakitu::func_8007993C(s32 objectIndex, Player* player) { static const char* sLakituFishingTextures[] = { gTextureLakituFishing1, gTextureLakituFishing2, gTextureLakituFishing3, gTextureLakituFishing4 }; +Vtx fixed_D_0D005F30[] = { + { { { -10, -35, 0 }, 0, { 0, 0 }, { 255, 255, 255, 255 } } }, + { { { 45, -35, 0 }, 0, { 3520, 0 }, { 255, 255, 255, 255 } } }, + { { { 45, 35, 0 }, 0, { 3520, 4480 }, { 255, 255, 255, 255 } } }, + { { { -10, 35, 0 }, 0, { 0, 4480 }, { 255, 255, 255, 255 } } }, +}; + void OLakitu::init_obj_lakitu_red_flag_fishing(s32 objectIndex, s32 arg1) { u8* tlut = (u8*) LOAD_ASSET_RAW(common_tlut_lakitu_fishing); - Vtx* vtx = (Vtx*) LOAD_ASSET_RAW(D_0D005F30); OLakitu::func_800791F0(objectIndex, arg1); init_texture_object(objectIndex, tlut, sLakituFishingTextures, 0x38U, (u16) 0x00000048); - gObjectList[objectIndex].vertex = vtx; + gObjectList[objectIndex].vertex = fixed_D_0D005F30; gObjectList[objectIndex].sizeScaling = 0.15f; func_80086E70(objectIndex); clear_object_flag(objectIndex, 0x00000010); @@ -589,12 +650,11 @@ void OLakitu::func_8007A060(s32 objectIndex, s32 playerIndex) { OLakitu::func_800791F0(objectIndex, playerIndex); u8* tlut = (u8*) LOAD_ASSET_RAW(common_tlut_lakitu_second_lap); - Vtx* vtx = (Vtx*) LOAD_ASSET_RAW(common_vtx_also_lakitu); init_texture_object(objectIndex, tlut, sLakituSecondLapTextures, 0x48U, (u16) 0x00000038); object = &gObjectList[objectIndex]; object->activeTexture = *gObjectList[objectIndex].textureList; - object->vertex = vtx; + object->vertex = fixed_common_vtx_also_lakitu; object->pos[2] = 5000.0f; object->pos[1] = 5000.0f; object->pos[0] = 5000.0f; @@ -648,12 +708,11 @@ void OLakitu::func_8007A228(s32 objectIndex, s32 playerIndex) { OLakitu::func_800791F0(objectIndex, playerIndex); u8* tlut = (u8*) LOAD_ASSET_RAW(common_tlut_lakitu_final_lap); - Vtx* vtx = (Vtx*) LOAD_ASSET_RAW(common_vtx_also_lakitu); init_texture_object(objectIndex, tlut, sLakituFinalLapTextures, 0x48U, (u16) 0x00000038); object = &gObjectList[objectIndex]; object->activeTexture = *gObjectList[objectIndex].textureList; - object->vertex = vtx; + object->vertex = fixed_common_vtx_also_lakitu; object->pos[2] = 5000.0f; object->pos[1] = 5000.0f; object->pos[0] = 5000.0f; @@ -706,11 +765,10 @@ void OLakitu::func_8007A3F0(s32 objectIndex, s32 arg1) { OLakitu::func_800791F0(objectIndex, arg1); u8* tlut = (u8*) LOAD_ASSET_RAW(common_tlut_lakitu_reverse); - Vtx* vtx = (Vtx*) LOAD_ASSET_RAW(common_vtx_also_lakitu); init_texture_object(objectIndex, tlut, sLakituReverseTextures, 72, (u16) 56); gObjectList[objectIndex].activeTexture = *gObjectList[objectIndex].textureList; - gObjectList[objectIndex].vertex = vtx; + gObjectList[objectIndex].vertex = fixed_common_vtx_also_lakitu; gObjectList[objectIndex].pos[2] = var; gObjectList[objectIndex].pos[1] = var; gObjectList[objectIndex].pos[0] = var; @@ -769,14 +827,12 @@ void OLakitu::func_8007A66C(s32 objectIndex) { u16 rot = 0x8000 - camera->rot[1]; gObjectList[objectIndex].pos[0] = - (player->pos[0] + - (coss(rot) * (gObjectList[objectIndex].origin_pos[0] + gObjectList[objectIndex].offset[0]))) - + (player->pos[0] + (coss(rot) * (gObjectList[objectIndex].origin_pos[0] + gObjectList[objectIndex].offset[0]))) - (sins(rot) * (gObjectList[objectIndex].origin_pos[2] + gObjectList[objectIndex].offset[2])); gObjectList[objectIndex].pos[1] = player->unk_074 + gObjectList[objectIndex].origin_pos[1] + gObjectList[objectIndex].offset[1]; gObjectList[objectIndex].pos[2] = - (player->pos[2] + - (sins(rot) * (gObjectList[objectIndex].origin_pos[0] + gObjectList[objectIndex].offset[0]))) + + (player->pos[2] + (sins(rot) * (gObjectList[objectIndex].origin_pos[0] + gObjectList[objectIndex].offset[0]))) + (coss(rot) * (gObjectList[objectIndex].origin_pos[2] + gObjectList[objectIndex].offset[2])); } @@ -786,14 +842,12 @@ void OLakitu::func_8007A778(s32 objectIndex) { u16 rot = 0x8000 - camera->rot[1]; gObjectList[objectIndex].pos[0] = - (player->pos[0] + - (coss(rot) * (gObjectList[objectIndex].origin_pos[0] + gObjectList[objectIndex].offset[0]))) - + (player->pos[0] + (coss(rot) * (gObjectList[objectIndex].origin_pos[0] + gObjectList[objectIndex].offset[0]))) - (sins(rot) * (gObjectList[objectIndex].origin_pos[2] + gObjectList[objectIndex].offset[2])); gObjectList[objectIndex].pos[1] = player->pos[1] + gObjectList[objectIndex].origin_pos[1] + gObjectList[objectIndex].offset[1]; gObjectList[objectIndex].pos[2] = - (player->pos[2] + - (sins(rot) * (gObjectList[objectIndex].origin_pos[0] + gObjectList[objectIndex].offset[0]))) + + (player->pos[2] + (sins(rot) * (gObjectList[objectIndex].origin_pos[0] + gObjectList[objectIndex].offset[0]))) + (coss(rot) * (gObjectList[objectIndex].origin_pos[2] + gObjectList[objectIndex].offset[2])); } @@ -805,7 +859,7 @@ void OLakitu::func_8007A88C(s32 playerId) { player = &gPlayerOne[playerId]; if ((gObjectList[objectIndex].state == 0) && (player->effects & 0x400000)) { - //func_800790E4(playerId); + // func_800790E4(playerId); init_object(gIndexLakituList[playerId], 6); } } @@ -823,7 +877,7 @@ void OLakitu::func_8007AA44(s32 playerId) { OLakitu::func_8007A910(playerId); objectIndex = gIndexLakituList[playerId]; - gLakituTexturePtr = (const char**)&gLakituTextureBuffer[playerId]; + gLakituTexturePtr = (const char**) &gLakituTextureBuffer[playerId]; switch (gObjectList[objectIndex].unk_0D8) { case 1: OLakitu::func_80079114(objectIndex, playerId, 2); @@ -858,4 +912,3 @@ void OLakitu::func_8007AA44(s32 playerId) { break; } } - diff --git a/src/engine/objects/Mole.cpp b/src/engine/objects/Mole.cpp index 752670679..9ee4db7e7 100644 --- a/src/engine/objects/Mole.cpp +++ b/src/engine/objects/Mole.cpp @@ -384,7 +384,7 @@ void OMole::func_80054F04(s32 cameraId) { Camera* camera = &camera1[cameraId]; gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D0079C8); - load_texture_block_rgba16_mirror((u8*) LOAD_ASSET_RAW(d_course_moo_moo_farm_mole_dirt), 0x00000010, 0x00000010); + load_texture_block_rgba16_mirror((u8*) d_course_moo_moo_farm_mole_dirt, 0x00000010, 0x00000010); if (_idx == 0) { for (size_t i = 0; i < gObjectParticle2_SIZE; i++) { diff --git a/src/engine/objects/Snowman.cpp b/src/engine/objects/Snowman.cpp index 7cbfc691d..cbb708fbf 100644 --- a/src/engine/objects/Snowman.cpp +++ b/src/engine/objects/Snowman.cpp @@ -129,17 +129,26 @@ void OSnowman::DrawHead(s32 cameraId) { func_800418AC(gObjectList[objectIndex].pos[0], gObjectList[objectIndex].pos[2], camera->pos); D_80183E80[2] = (u16) gObjectList[objectIndex].orientation[2]; if (is_obj_flag_status_active(objectIndex, 0x00000010) != 0) { - draw_2d_texture_at(gObjectList[objectIndex].pos, (u16*) D_80183E80, - gObjectList[objectIndex].sizeScaling, (u8*) gObjectList[objectIndex].activeTLUT, - (u8*) gObjectList[objectIndex].activeTexture, gObjectList[objectIndex].vertex, - 0x00000040, 0x00000040, 0x00000040, 0x00000020); + rsp_set_matrix_transformation(gObjectList[objectIndex].pos, D_80183E80, + gObjectList[objectIndex].sizeScaling); + gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D007D78); + gDPLoadTLUT_pal256(gDisplayListHead++, gObjectList[objectIndex].activeTLUT); + rsp_load_texture((u8*) gObjectList[objectIndex].activeTexture, 64, 64); + gSPVertex(gDisplayListHead++, (uintptr_t) gObjectList[objectIndex].vertex, 4, 0); + gSPDisplayList(gDisplayListHead++, (Gfx*) common_rectangle_display); + gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF); } objectIndex = _headIndex; D_80183E80[0] = (s16) gObjectList[objectIndex].orientation[0]; D_80183E80[2] = (u16) gObjectList[objectIndex].orientation[2]; - draw_2d_texture_at(gObjectList[objectIndex].pos, (u16*) D_80183E80, gObjectList[objectIndex].sizeScaling, - (u8*) gObjectList[objectIndex].activeTLUT, (u8*) gObjectList[objectIndex].activeTexture, - gObjectList[objectIndex].vertex, 0x00000040, 0x00000040, 0x00000040, 0x00000020); + rsp_set_matrix_transformation(gObjectList[objectIndex].pos, D_80183E80, + gObjectList[objectIndex].sizeScaling); + gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D007D78); + gDPLoadTLUT_pal256(gDisplayListHead++, gObjectList[objectIndex].activeTLUT); + rsp_load_texture((u8*) gObjectList[objectIndex].activeTexture, 64, 64); + gSPVertex(gDisplayListHead++, (uintptr_t) gObjectList[objectIndex].vertex, 4, 0); + gSPDisplayList(gDisplayListHead++, (Gfx*) common_rectangle_display); + gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF); // @port Pop the transform id. FrameInterpolation_RecordCloseChild(); @@ -229,13 +238,27 @@ void OSnowman::func_80083BE4(s32 objectIndex) { object_calculate_new_pos_offset(objectIndex); } +Vtx common_vtx_snowman[] = { + {{{ -32, -31, -12}, 0, { 0, 0}, {255, 255, 255, 255}}}, + {{{ 31, -31, -12}, 0, { 4032, 0}, {255, 255, 255, 255}}}, + {{{ 31, 31, -12}, 0, { 4032, 3968}, {255, 255, 255, 255}}}, + {{{ -32, 31, -12}, 0, { 0, 3968}, {255, 255, 255, 255}}}, + {{{ -32, -31, 0}, 0, { 4032, 0}, {255, 255, 255, 255}}}, + {{{ 31, -31, 0}, 0, { 0, 0}, {255, 255, 255, 255}}}, + {{{ 31, 0, 0}, 0, { 0, 1984}, {255, 255, 255, 255}}}, + {{{ -32, 0, 0}, 0, { 4032, 1984}, {255, 255, 255, 255}}}, + {{{ -32, 0, 0}, 0, { 4032, 0}, {255, 255, 255, 255}}}, + {{{ 31, 0, 0}, 0, { 0, 0}, {255, 255, 255, 255}}}, + {{{ 31, 31, 0}, 0, { 0, 1984}, {255, 255, 255, 255}}}, + {{{ -32, 31, 0}, 0, { 4032, 1984}, {255, 255, 255, 255}}}, +}; + void OSnowman::func_80083868(s32 objectIndex) { Object* object; - Vtx* vtx = (Vtx*) LOAD_ASSET_RAW(D_0D0061B0); init_texture_object(objectIndex, (u8*) d_course_frappe_snowland_snowman_tlut, (const char**) sSnowmanHeadList, 0x40U, (u16) 0x00000040); object = &gObjectList[objectIndex]; - object->vertex = vtx; + object->vertex = common_vtx_snowman; object->sizeScaling = 0.1f; object->textureListIndex = 0; object_next_state(objectIndex); @@ -302,11 +325,17 @@ void OSnowman::func_80083A94(s32 objectIndex) { static const char* sSnowmanBodyList[] = { d_course_frappe_snowland_snowman_body }; +Vtx common_vtx_snowman2[] = { + { { { -32, -31, 0 }, 0, { 0, 0 }, { 255, 255, 255, 255 } } }, + { { { 31, -31, 0 }, 0, { 4032, 0 }, { 255, 255, 255, 255 } } }, + { { { 31, 31, 0 }, 0, { 4032, 3968 }, { 255, 255, 255, 255 } } }, + { { { -32, 31, 0 }, 0, { 0, 3968 }, { 255, 255, 255, 255 } } }, +}; + void OSnowman::func_80083B0C(s32 objectIndex) { - Vtx* vtx = (Vtx*) LOAD_ASSET_RAW(common_vtx_hedgehog); init_texture_object(objectIndex, (u8*) d_course_frappe_snowland_snowman_tlut, (const char**) sSnowmanBodyList, 0x40U, (u16) 0x00000040); - gObjectList[objectIndex].vertex = vtx; + gObjectList[objectIndex].vertex = common_vtx_snowman2; gObjectList[objectIndex].sizeScaling = 0.1f; gObjectList[objectIndex].textureListIndex = 0; object_next_state(objectIndex); |
