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:
parent
4491c025a5
commit
a0b202cca4
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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++) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue