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>
This commit is contained in:
coco875 2025-07-06 23:14:57 +00:00 committed by GitHub
parent 4491c025a5
commit a0b202cca4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 156 additions and 125 deletions

View File

@ -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))

View File

@ -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) {

View File

@ -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);

View File

@ -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);
}
}
}

View File

@ -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;
}
}

View File

@ -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++) {

View File

@ -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);