More Interp Fixes (#673)

* Update render_player.c

* Update render.inc.c

* Update render.inc.c

* Fix kart interp

* Remove feature

* Fix error
This commit is contained in:
MegaMech
2026-03-06 01:14:44 -07:00
committed by GitHub
parent 89cd738955
commit 25d49df90f
11 changed files with 139 additions and 283 deletions
+30 -5
View File
@@ -51,14 +51,20 @@ void render_actor_fake_item_box(Camera* camera, struct FakeItemBox* fakeItemBox)
if (fakeItemBox->state != 2) {
if (!render_set_position(someMatrix2, 0)) {
FrameInterpolation_RecordCloseChild();
return;
}
gSPDisplayList(gDisplayListHead++, common_model_fake_itembox);
FrameInterpolation_RecordCloseChild();
FrameInterpolation_RecordOpenChild("fake_item_box_part2", TAG_ITEM_ADDR((((struct Actor*)fakeItemBox) - gActorList) << 5) | (camera - cameras));
mtxf_pos_rotation_xyz(someMatrix2, fakeItemBox->pos, fakeItemBox->rot);
mtxf_scale(someMatrix2, fakeItemBox->sizeScaling);
if (!render_set_position(someMatrix2, 0)) {
FrameInterpolation_RecordCloseChild();
return;
}
@@ -87,6 +93,7 @@ void render_actor_fake_item_box(Camera* camera, struct FakeItemBox* fakeItemBox)
}
#endif
gSPDisplayList(gDisplayListHead++, D_0D003090);
FrameInterpolation_RecordCloseChild();
} else {
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK);
@@ -111,33 +118,43 @@ void render_actor_fake_item_box(Camera* camera, struct FakeItemBox* fakeItemBox)
add_translate_mat4_vec3f(someMatrix2, someMatrix3, someVec);
if (!render_set_position(someMatrix3, 0)) {
FrameInterpolation_RecordCloseChild();
return;
}
gSPDisplayList(gDisplayListHead++, D_0D003158);
FrameInterpolation_RecordCloseChild();
temp_f2_2 = 0.8f * thing;
temp_f12 = 0.5f * thing;
someVec[0] = temp_f2_2;
someVec[1] = 2.3f * thing;
someVec[2] = temp_f12;
FrameInterpolation_RecordOpenChild("fake_item_box_part3", TAG_ITEM_ADDR((((struct Actor*)fakeItemBox) - gActorList) << 5) | (camera - cameras));
add_translate_mat4_vec3f(someMatrix2, someMatrix3, someVec);
if (!render_set_position(someMatrix3, 0)) {
FrameInterpolation_RecordCloseChild();
return;
}
gSPDisplayList(gDisplayListHead++, D_0D0031B8);
FrameInterpolation_RecordCloseChild();
temp_f0_2 = -0.5f * thing;
someVec[0] = temp_f2_2;
someVec[1] = 1.2f * thing;
someVec[2] = temp_f0_2;
FrameInterpolation_RecordOpenChild("fake_item_box_part4", TAG_ITEM_ADDR((((struct Actor*)fakeItemBox) - gActorList) << 5) | (camera - cameras));
add_translate_mat4_vec3f(someMatrix2, someMatrix3, someVec);
if (!render_set_position(someMatrix3, 0)) {
FrameInterpolation_RecordCloseChild();
return;
}
gSPDisplayList(gDisplayListHead++, D_0D003128);
FrameInterpolation_RecordCloseChild();
if (!(fakeItemBox->someTimer & 1)) {
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
} else {
@@ -146,13 +163,18 @@ void render_actor_fake_item_box(Camera* camera, struct FakeItemBox* fakeItemBox)
someVec[0] = 0.0f;
someVec[1] = 1.8f * thing;
someVec[2] = -1.0f * thing;
FrameInterpolation_RecordOpenChild("fake_item_box_part5", TAG_ITEM_ADDR((((struct Actor*)fakeItemBox) - gActorList) << 5) | (camera - cameras));
add_translate_mat4_vec3f(someMatrix2, someMatrix3, someVec);
if (!render_set_position(someMatrix3, 0)) {
FrameInterpolation_RecordCloseChild();
return;
}
gSPDisplayList(gDisplayListHead++, D_0D0031E8);
FrameInterpolation_RecordCloseChild();
FrameInterpolation_RecordOpenChild("fake_item_box_part6", TAG_ITEM_ADDR((((struct Actor*)fakeItemBox) - gActorList) << 5) | (camera - cameras));
temp_f0_3 = -0.8f * thing;
someVec[0] = temp_f0_3;
someVec[1] = 0.6f * thing;
@@ -160,22 +182,25 @@ void render_actor_fake_item_box(Camera* camera, struct FakeItemBox* fakeItemBox)
add_translate_mat4_vec3f(someMatrix2, someMatrix3, someVec);
if (!render_set_position(someMatrix3, 0)) {
FrameInterpolation_RecordCloseChild();
return;
}
gSPDisplayList(gDisplayListHead++, D_0D003188);
FrameInterpolation_RecordCloseChild();
FrameInterpolation_RecordOpenChild("fake_item_box_part7", TAG_ITEM_ADDR((((struct Actor*)fakeItemBox) - gActorList) << 5) | (camera - cameras));
someVec[0] = temp_f0_3;
someVec[1] = temp_f2;
someVec[2] = temp_f12;
add_translate_mat4_vec3f(someMatrix2, someMatrix3, someVec);
if (!render_set_position(someMatrix3, 0)) {
FrameInterpolation_RecordCloseChild();
return;
}
gSPDisplayList(gDisplayListHead++, D_0D0030F8);
FrameInterpolation_RecordCloseChild();
gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK);
}
// @port Pop the transform id.
FrameInterpolation_RecordCloseChild();
}
+32 -6
View File
@@ -27,8 +27,6 @@ void render_actor_item_box(Camera* camera, struct ItemBox* item_box) {
f32 temp_f2_2;
f32 someMultiplier;
FrameInterpolation_RecordOpenChild("itembox", TAG_ITEM_ADDR((((struct Actor*)item_box) - gActorList) << 5) | (camera - cameras));
temp_f0 = is_within_render_distance(camera->pos, item_box->pos, camera->rot[1], 0.0f, camera->fieldOfView,
4000000.0f);
if (CVarGetInteger("gNoCulling", 0) == 1) {
@@ -43,13 +41,18 @@ void render_actor_item_box(Camera* camera, struct ItemBox* item_box) {
someVec2[1] = item_box->resetDistance + 2.0f;
someVec2[2] = item_box->pos[2];
FrameInterpolation_RecordOpenChild("itembox", TAG_ITEM_ADDR((((struct Actor*)item_box) - gActorList) << 5) | (camera - cameras));
mtxf_pos_rotation_xyz(someMatrix1, someVec2, someRot);
if (!render_set_position(someMatrix1, 0)) {
FrameInterpolation_RecordCloseChild();
return;
}
gSPDisplayList(gDisplayListHead++, D_0D002EE8);
FrameInterpolation_RecordCloseChild();
FrameInterpolation_RecordOpenChild("itembox2", TAG_ITEM_ADDR((((struct Actor*)item_box) - gActorList) << 5) | (camera - cameras));
someRot[1] = item_box->rot[1] * 2;
someVec2[1] = item_box->pos[1];
@@ -57,25 +60,31 @@ void render_actor_item_box(Camera* camera, struct ItemBox* item_box) {
mtxf_pos_rotation_xyz(someMatrix1, someVec2, someRot);
if (!render_set_position(someMatrix1, 0)) {
FrameInterpolation_RecordCloseChild();
return;
}
gSPDisplayList(gDisplayListHead++, itemBoxQuestionMarkModel);
FrameInterpolation_RecordCloseChild();
}
if (item_box->state == 5) {
FrameInterpolation_RecordOpenChild("itembox3", TAG_ITEM_ADDR((((struct Actor*)item_box) - gActorList) << 5) | (camera - cameras));
mtxf_pos_rotation_xyz(someMatrix1, item_box->pos, item_box->rot);
if (!render_set_position(someMatrix1, 0)) {
FrameInterpolation_RecordCloseChild();
return;
}
gSPDisplayList(gDisplayListHead++, itemBoxQuestionMarkModel);
FrameInterpolation_RecordCloseChild();
}
if (item_box->state != 3) {
FrameInterpolation_RecordOpenChild("itembox4", TAG_ITEM_ADDR((((struct Actor*)item_box) - gActorList) << 5) | (camera - cameras));
mtxf_pos_rotation_xyz(someMatrix1, item_box->pos, item_box->rot);
if (!render_set_position(someMatrix1, 0)) {
FrameInterpolation_RecordCloseChild();
return;
}
@@ -105,13 +114,14 @@ void render_actor_item_box(Camera* camera, struct ItemBox* item_box) {
#endif
gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH);
gSPDisplayList(gDisplayListHead++, D_0D003090);
FrameInterpolation_RecordCloseChild();
} else {
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK);
gDPSetBlendMask(gDisplayListHead++, 0xFF);
thing = item_box->someTimer;
FrameInterpolation_RecordOpenChild("itembox5", TAG_ITEM_ADDR((((struct Actor*)item_box) - gActorList) << 5) | (camera - cameras));
mtxf_pos_rotation_xyz(someMatrix1, item_box->pos, item_box->rot);
if (thing < 10.0f) {
someMultiplier = 1.0f;
@@ -131,10 +141,13 @@ void render_actor_item_box(Camera* camera, struct ItemBox* item_box) {
add_translate_mat4_vec3f(someMatrix1, someMatrix2, someVec1);
if (!render_set_position(someMatrix2, 0)) {
FrameInterpolation_RecordCloseChild();
return;
}
gSPDisplayList(gDisplayListHead++, D_0D003158);
FrameInterpolation_RecordCloseChild();
FrameInterpolation_RecordOpenChild("itembox6", TAG_ITEM_ADDR((((struct Actor*)item_box) - gActorList) << 5) | (camera - cameras));
temp_f2_2 = 0.8f * thing;
temp_f12 = 0.5f * thing;
@@ -144,10 +157,13 @@ void render_actor_item_box(Camera* camera, struct ItemBox* item_box) {
add_translate_mat4_vec3f(someMatrix1, someMatrix2, someVec1);
if (!render_set_position(someMatrix2, 0)) {
FrameInterpolation_RecordCloseChild();
return;
}
gSPDisplayList(gDisplayListHead++, D_0D0031B8);
FrameInterpolation_RecordCloseChild();
FrameInterpolation_RecordOpenChild("itembox7", TAG_ITEM_ADDR((((struct Actor*)item_box) - gActorList) << 5) | (camera - cameras));
temp_f0_2 = -0.5f * thing;
someVec1[0] = temp_f2_2;
@@ -157,10 +173,14 @@ void render_actor_item_box(Camera* camera, struct ItemBox* item_box) {
add_translate_mat4_vec3f(someMatrix1, someMatrix2, someVec1);
if (!render_set_position(someMatrix2, 0)) {
FrameInterpolation_RecordCloseChild();
return;
}
gSPDisplayList(gDisplayListHead++, D_0D003128);
FrameInterpolation_RecordCloseChild();
FrameInterpolation_RecordOpenChild("itembox8", TAG_ITEM_ADDR((((struct Actor*)item_box) - gActorList) << 5) | (camera - cameras));
if (!(item_box->someTimer & 1)) {
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
@@ -174,10 +194,13 @@ void render_actor_item_box(Camera* camera, struct ItemBox* item_box) {
add_translate_mat4_vec3f(someMatrix1, someMatrix2, someVec1);
if (!render_set_position(someMatrix2, 0)) {
FrameInterpolation_RecordCloseChild();
return;
}
gSPDisplayList(gDisplayListHead++, D_0D0031E8);
FrameInterpolation_RecordCloseChild();
FrameInterpolation_RecordOpenChild("itembox9", TAG_ITEM_ADDR((((struct Actor*)item_box) - gActorList) << 5) | (camera - cameras));
temp_f0_3 = -0.8f * thing;
someVec1[0] = temp_f0_3;
@@ -187,10 +210,13 @@ void render_actor_item_box(Camera* camera, struct ItemBox* item_box) {
add_translate_mat4_vec3f(someMatrix1, someMatrix2, someVec1);
if (!render_set_position(someMatrix2, 0)) {
FrameInterpolation_RecordCloseChild();
return;
}
gSPDisplayList(gDisplayListHead++, D_0D003188);
FrameInterpolation_RecordCloseChild();
FrameInterpolation_RecordOpenChild("itembox10", TAG_ITEM_ADDR((((struct Actor*)item_box) - gActorList) << 5) | (camera - cameras));
someVec1[0] = temp_f0_3;
someVec1[1] = temp_f2;
@@ -199,15 +225,15 @@ void render_actor_item_box(Camera* camera, struct ItemBox* item_box) {
add_translate_mat4_vec3f(someMatrix1, someMatrix2, someVec1);
if (!render_set_position(someMatrix2, 0)) {
FrameInterpolation_RecordCloseChild();
return;
}
gSPDisplayList(gDisplayListHead++, D_0D0030F8);
FrameInterpolation_RecordCloseChild();
gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK);
}
gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON);
}
// @port Pop the transform id.
FrameInterpolation_RecordCloseChild();
}
-12
View File
@@ -7930,18 +7930,6 @@ void func_8001C14C(void) {
}
}
void render_bomb_karts_wrap(s32 cameraId) {
if (IsPodiumCeremony()) {
if (gBombKarts[0].waypointIndex >= 16) {
render_bomb_karts(PLAYER_FOUR);
}
} else {
if (gModeSelection == VERSUS) {
render_bomb_karts(cameraId);
}
}
}
UNUSED void func_8001C42C(void) {
if (D_800DDB20 == 0) {
if ((gControllerThree->buttonPressed & 0x20) != 0) {
-1
View File
@@ -291,7 +291,6 @@ void func_8001BE78(void);
void func_8001C05C(void);
void func_8001C14C(void);
void render_bomb_karts_wrap(s32);
void func_8001C42C(void);
/* This is where I'd put my static data, if I had any */
+2 -2
View File
@@ -29,7 +29,7 @@ void PlayerBombKart::Draw(size_t playerId, s32 cameraId) { // render_player_bomb
surfaceHeight = player->unk_074;
PlayerBombKart::func_800563DC(cameraId, _primAlpha);
PlayerBombKart::func_8005669C(cameraId, _primAlpha);
PlayerBombKart::func_800568A0(cameraId);
PlayerBombKart::LoadMtx(cameraId);
}
}
@@ -123,7 +123,7 @@ void PlayerBombKart::func_8005669C(s32 cameraId, s32 arg2) {
gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF);
}
void PlayerBombKart::func_800568A0(s32 cameraId) {
void PlayerBombKart::LoadMtx(s32 cameraId) { // func_800568A0
Mat4 mtx;
Player* player;
+1 -1
View File
@@ -30,7 +30,7 @@ public:
void func_800563DC(s32 cameraId, s32 arg2);
void func_800562E4(s32 cameraId, s32 arg0, s32 arg1, s32 arg2, s32 id);
void func_8005669C(s32 cameraId, s32 arg2);
void func_800568A0(s32 cameraId);
void LoadMtx(s32 cameraId);
private:
static u32 vec[3][3];
static size_t _count;
+66 -1
View File
@@ -380,7 +380,7 @@ void OBombKart::Draw(s32 cameraId) {
D_80183E80[0] = 0;
D_80183E80[1] = func_800418AC(Pos[0], Pos[2], camera->pos);
D_80183E80[2] = 0x8000;
func_800563DC(_objectIndex, cameraId, 0x000000FF);
OBombKart::func_800563DC(cameraId, 0x000000FF);
OBombKart::SomeRender(cameraId, camera->pos);
if (((u32) temp_s4 < 0x4E21U) && (state != OBombKart::States::EXPLODE)) {
OBombKart::LoadMtx(cameraId);
@@ -393,6 +393,71 @@ void OBombKart::DrawBattle(s32 cameraId) {
}
void OBombKart::func_800563DC(s32 cameraId, s32 arg2) {
s32 temp_s0;
s32 temp_v0;
s32 residue;
Camera* camera;
Object* object;
camera = &camera1[cameraId];
object = &gObjectList[_objectIndex];
residue = D_801655CC % 4U;
D_80183E40[0] = object->pos[0];
D_80183E40[1] = object->pos[1] + 1.0;
D_80183E40[2] = object->pos[2];
D_80183E80[0] = 0;
D_80183E80[1] = func_800418AC(object->pos[0], object->pos[2], camera->pos);
D_80183E80[2] = 0x8000;
FrameInterpolation_RecordOpenChild("bomb_kart2", (_idx << 4) | cameraId);
rsp_set_matrix_transformation(D_80183E40, D_80183E80, 0.2f);
gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D007E98);
func_8004B310(arg2);
int heigh = 32;
int width = 32;
gDPLoadTLUT_pal256(gDisplayListHead++, common_tlut_bomb);
rsp_load_texture((u8*) common_texture_bomb[residue], width, heigh);
gSPVertex(gDisplayListHead++, (uintptr_t) D_0D005AE0, 4, 0);
gSPDisplayList(gDisplayListHead++, (Gfx*) common_rectangle_display);
gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF);
temp_s0 = D_8018D400;
gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D007B00);
FrameInterpolation_RecordCloseChild();
func_8004B414(0, 0, 0, arg2);
D_80183E40[1] = D_80183E40[1] + 4.0;
D_80183E80[2] = 0;
OBombKart::func_800562E4(cameraId, temp_s0 % 3, temp_s0 % 4, arg2, 0);
temp_v0 = temp_s0 + 1;
D_80183E80[2] = 0x6000;
OBombKart::func_800562E4(cameraId, temp_v0 % 3, temp_v0 % 4, arg2, 1);
temp_v0 = temp_s0 + 2;
D_80183E80[2] = 0xA000;
OBombKart::func_800562E4(cameraId, temp_v0 % 3, temp_v0 % 4, arg2, 2);
gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF);
}
u32 OBombKart::vec[3][3] = {
{ 255, 255, 255 },
{ 255, 255, 0 },
{ 255, 0, 0 },
};
void OBombKart::func_800562E4(s32 cameraId, s32 arg0, s32 arg1, s32 arg2, s32 id) {
D_80165860 = vec[arg0][0]; // used to be D_800E46F8A
D_8016586C = vec[arg0][1];
D_80165878 = vec[arg0][2];
func_8004B138(D_80165860, D_8016586C, D_80165878, arg2);
FrameInterpolation_RecordOpenChild("bomb_kart_spark", (id << 12) | (_idx << 5) | cameraId);
rsp_set_matrix_transformation(D_80183E40, D_80183E80, 0.2f);
func_80044BF8((uint8_t*)common_texture_particle_spark[arg1], 32, 32);
gSPVertex(gDisplayListHead++, (uintptr_t)D_0D005AE0, 4, 0);
gSPDisplayList(gDisplayListHead++, (Gfx*)common_rectangle_display);
FrameInterpolation_RecordCloseChild();
}
void OBombKart::SomeRender(s32 cameraId, Vec3f arg1) {
D_80183E80[0] = 0;
D_80183E80[2] = 0x8000;
+3
View File
@@ -85,6 +85,8 @@ class OBombKart : public OObject {
virtual void Translate(FVector pos) override;
virtual void DrawEditorProperties() override;
void DrawBattle(s32 cameraId);
void func_800563DC(s32 cameraId, s32 arg2);
void func_800562E4(s32 cameraId, s32 arg0, s32 arg1, s32 arg2, s32 id);
void SomeRender(s32 cameraId, Vec3f arg1);
void LoadMtx(s32 cameraId);
void Waypoint(s32 screenId);
@@ -92,6 +94,7 @@ class OBombKart : public OObject {
OBombKart::States Behaviour = OBombKart::States::COUNTERCLOCKWISE;
float SpeedB = 2.7f;
private:
static u32 vec[3][3];
static size_t _count;
s32 _idx;
Player* FindTarget();
-245
View File
@@ -3973,110 +3973,10 @@ void render_object_neon(s32 cameraId) {
}
}
Vec3iu D_800E46F8A[] = {
{ 255, 255, 255 },
{ 255, 255, 0 },
{ 255, 0, 0 },
};
u8 D_800E471CA[] = {
0, 1, 2, 3, 2, 1, 0,
};
void func_800562E4(s32 arg0, s32 arg1, s32 arg2) {
// Vec3iu *A_800E46F8 = LOAD_ASSET(D_800E46F8);
D_80165860 = D_800E46F8A[arg0][0];
D_8016586C = D_800E46F8A[arg0][1];
D_80165878 = D_800E46F8A[arg0][2];
func_8004B138(D_80165860, D_8016586C, D_80165878, arg2);
rsp_set_matrix_transformation(D_80183E40, D_80183E80, 0.2f);
func_80044BF8(common_texture_particle_spark[arg1], 32, 32);
gSPVertex(gDisplayListHead++, D_0D005AE0, 4, 0);
gSPDisplayList(gDisplayListHead++, common_rectangle_display);
}
void func_800563DC(s32 objectIndex, s32 cameraId, s32 arg2) {
s32 temp_s0;
s32 temp_v0;
s32 residue;
Camera* camera;
Object* object;
camera = &camera1[cameraId];
object = &gObjectList[objectIndex];
residue = D_801655CC % 4U;
D_80183E40[0] = object->pos[0];
D_80183E40[1] = object->pos[1] + 1.0;
D_80183E40[2] = object->pos[2];
D_80183E80[0] = 0;
D_80183E80[1] = func_800418AC(object->pos[0], object->pos[2], camera->pos);
D_80183E80[2] = 0x8000;
rsp_set_matrix_transformation(D_80183E40, D_80183E80, 0.2f);
gSPDisplayList(gDisplayListHead++, D_0D007E98);
func_8004B310(arg2);
int heigh = 32;
int width = 32;
gDPLoadTLUT_pal256(gDisplayListHead++, common_tlut_bomb);
rsp_load_texture((u8*) common_texture_bomb[residue], width, heigh);
gSPVertex(gDisplayListHead++, (uintptr_t) D_0D005AE0, 4, 0);
gSPDisplayList(gDisplayListHead++, (Gfx*) common_rectangle_display);
gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF);
temp_s0 = D_8018D400;
gSPDisplayList(gDisplayListHead++, D_0D007B00);
func_8004B414(0, 0, 0, arg2);
D_80183E40[1] = D_80183E40[1] + 4.0;
D_80183E80[2] = 0;
func_800562E4(temp_s0 % 3, temp_s0 % 4, arg2);
temp_v0 = temp_s0 + 1;
D_80183E80[2] = 0x6000;
func_800562E4(temp_v0 % 3, temp_v0 % 4, arg2);
temp_v0 = temp_s0 + 2;
D_80183E80[2] = 0xA000;
func_800562E4(temp_v0 % 3, temp_v0 % 4, arg2);
gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF);
}
void func_8005669C(s32 objectIndex, UNUSED s32 arg1, s32 arg2) {
gSPDisplayList(gDisplayListHead++, D_0D0079E8);
func_8004B310(arg2);
load_texture_block_rgba16_mirror((u8*) D_0D02AA58, 0x00000010, 0x00000010);
D_80183E40[1] = gObjectList[objectIndex].pos[1] - 2.0;
D_80183E40[0] = gObjectList[objectIndex].pos[0] + 2.0;
D_80183E40[2] = gObjectList[objectIndex].pos[2] + 2.0;
func_800431B0(D_80183E40, D_80183E80, 0.15f, common_vtx_rectangle);
D_80183E40[0] = gObjectList[objectIndex].pos[0] + 2.0;
D_80183E40[2] = gObjectList[objectIndex].pos[2] - 2.0;
func_800431B0(D_80183E40, D_80183E80, 0.15f, common_vtx_rectangle);
D_80183E40[0] = gObjectList[objectIndex].pos[0] - 2.0;
D_80183E40[2] = gObjectList[objectIndex].pos[2] - 2.0;
func_800431B0(D_80183E40, D_80183E80, 0.15f, common_vtx_rectangle);
D_80183E40[0] = gObjectList[objectIndex].pos[0] - 2.0;
D_80183E40[2] = gObjectList[objectIndex].pos[2] + 2.0;
func_800431B0(D_80183E40, D_80183E80, 0.15f, common_vtx_rectangle);
gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF);
}
Mat4 mtx;
void func_800568A0(s32 objectIndex, s32 playerId) {
Player* player;
player = &gPlayerOne[playerId];
D_80183E50[0] = gObjectList[objectIndex].pos[0];
D_80183E50[1] = gObjectList[objectIndex].surfaceHeight + 0.8;
D_80183E50[2] = gObjectList[objectIndex].pos[2];
set_transform_matrix(mtx, player->collision.orientationVector, D_80183E50, 0U, 0.5f);
// convert_to_fixed_point_matrix(&gGfxPool->mtxHud[gMatrixHudCount], mtx);
// gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxHud[gMatrixHudCount++]),
// G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
AddHudMatrix(mtx, G_MTX_LOAD | G_MTX_NOPUSH | G_MTX_MODELVIEW);
gSPDisplayList(gDisplayListHead++, D_0D007B98);
}
void func_800569F4(s32 playerIndex) {
CM_DisplayBattleBombKart(playerIndex, 0);
}
@@ -4090,151 +3990,6 @@ void func_80056A94(s32 playerIndex) {
CM_DisplayBattleBombKart(playerIndex, 0);
}
void render_battle_bomb_karts(s32 cameraId) {
Player* temp_v0;
s32 temp_s1;
s32 temp_s0;
s32 payerId;
Object* object;
for (payerId = 0; payerId < NUM_BOMB_KARTS_BATTLE; payerId++) {
temp_s0 = gIndexObjectBombKart[payerId];
object = &gObjectList[temp_s0];
if (object->state != 0) {
temp_s1 = object->primAlpha;
temp_v0 = &gPlayerOne[payerId];
object->pos[0] = temp_v0->pos[0];
object->pos[1] = temp_v0->pos[1] - 2.0;
object->pos[2] = temp_v0->pos[2];
object->surfaceHeight = temp_v0->unk_074;
func_800563DC(temp_s0, cameraId, temp_s1);
func_8005669C(temp_s0, cameraId, temp_s1);
func_800568A0(temp_s0, cameraId);
}
}
}
void func_80056BF0(s32 bombIndex) {
UNUSED s32 stackPadding;
u8 thing;
s32 temp_s0;
s32 temp_v0;
u8* bombFrame;
BombKart sp40 = gBombKarts[bombIndex];
temp_v0 = D_801655CC % 6U;
thing = D_800E471CA[temp_v0];
bombFrame = common_texture_bomb[thing];
D_80183E40[0] = sp40.bombPos[0];
D_80183E40[1] = sp40.bombPos[1] + 1.0;
D_80183E40[2] = sp40.bombPos[2];
rsp_set_matrix_transformation(D_80183E40, D_80183E80, 0.25f);
gSPDisplayList(gDisplayListHead++, D_0D007D78);
gDPLoadTLUT_pal256(gDisplayListHead++, (u8*) common_tlut_bomb);
rsp_load_texture(bombFrame, 0x20, 0x20);
gSPVertex(gDisplayListHead++, D_0D005AE0, 4, 0);
gSPDisplayList(gDisplayListHead++, common_rectangle_display);
gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF);
temp_s0 = D_8018D400;
gSPDisplayList(gDisplayListHead++, D_0D007B00);
func_8004B414(0, 0, 0, 0xFF);
D_80183E40[1] = sp40.bombPos[1] + 5.0;
D_80183E80[2] = 0;
func_800562E4((s32) temp_s0 % 3, temp_s0 % 4, 0xFFU);
temp_v0 = temp_s0 + 1;
D_80183E80[2] = 0x6000;
func_800562E4(temp_v0 % 3, temp_v0 % 4, 0xFFU);
temp_v0 = temp_s0 + 2;
D_80183E80[2] = 0xA000;
func_800562E4(temp_v0 % 3, temp_v0 % 4, 0xFFU);
}
void func_80056E24(s32 bombIndex, Vec3f arg1) {
UNUSED s32 stackPadding[2];
BombKart sp2C = gBombKarts[bombIndex];
D_80183E80[0] = 0;
D_80183E80[2] = 0x8000;
gSPDisplayList(gDisplayListHead++, D_0D0079C8);
load_texture_block_rgba16_mirror((u8*) D_0D02AA58, 0x00000010, 0x00000010);
D_80183E80[1] = func_800418AC(sp2C.wheel1Pos[0], sp2C.wheel1Pos[2], arg1);
func_800431B0(sp2C.wheel1Pos, D_80183E80, 0.15f, common_vtx_rectangle);
D_80183E80[1] = func_800418AC(sp2C.wheel2Pos[0], sp2C.wheel2Pos[2], arg1);
func_800431B0(sp2C.wheel2Pos, D_80183E80, 0.15f, common_vtx_rectangle);
D_80183E80[1] = func_800418AC(sp2C.wheel3Pos[0], sp2C.wheel3Pos[2], arg1);
func_800431B0(sp2C.wheel3Pos, D_80183E80, 0.15f, common_vtx_rectangle);
D_80183E80[1] = func_800418AC(sp2C.wheel4Pos[0], sp2C.wheel4Pos[2], arg1);
func_800431B0(sp2C.wheel4Pos, D_80183E80, 0.15f, common_vtx_rectangle);
gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF);
}
void func_80056FCC(s32 bombIndex) {
Mat4 mat;
BombKart* temp_v0;
temp_v0 = &gBombKarts[bombIndex];
D_80183E50[0] = temp_v0->bombPos[0];
D_80183E50[1] = temp_v0->yPos + 1.0;
D_80183E50[2] = temp_v0->bombPos[2];
set_transform_matrix(mat, gBombKartCollision[bombIndex].orientationVector, D_80183E50, 0U, 0.5f);
// convert_to_fixed_point_matrix(&gGfxPool->mtxHud[gMatrixHudCount], mat);
// gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxHud[gMatrixHudCount++]),
// G_MTX_LOAD | G_MTX_NOPUSH | G_MTX_MODELVIEW);
AddHudMatrix(mat, G_MTX_LOAD | G_MTX_NOPUSH | G_MTX_MODELVIEW);
gSPDisplayList(gDisplayListHead++, D_0D007B98);
}
void render_bomb_karts(s32 cameraId) {
Camera* camera;
s32 objectIndex;
s32 temp_s4;
s32 i;
s32 state;
BombKart* var_s1_2;
if (gGamestate == 5) {
cameraId = 0;
}
camera = &camera1[cameraId];
if (cameraId == PLAYER_ONE) {
for (i = 0; i < NUM_BOMB_KARTS_VERSUS; i++) {
objectIndex = gIndexObjectBombKart[i];
if (is_obj_flag_status_active(objectIndex, 0x00200000) != 0) {
gBombKarts[i].unk_4A = 0;
} else if (gGamestate != 5) {
gBombKarts[i].unk_4A = 1;
}
clear_object_flag(objectIndex, 0x00200000);
}
}
for (i = 0; i < NUM_BOMB_KARTS_VERSUS; i++) {
var_s1_2 = &gBombKarts[i];
// huh???
state = var_s1_2->state;
if (var_s1_2->state != BOMB_STATE_INACTIVE) {
objectIndex = gIndexObjectBombKart[i];
gObjectList[objectIndex].pos[0] = var_s1_2->bombPos[0];
gObjectList[objectIndex].pos[1] = var_s1_2->bombPos[1];
gObjectList[objectIndex].pos[2] = var_s1_2->bombPos[2];
temp_s4 = func_8008A364(objectIndex, cameraId, 0x31C4U, 0x000001F4);
if (is_obj_flag_status_active(objectIndex, VISIBLE) != 0) {
set_object_flag(objectIndex, 0x00200000);
D_80183E80[0] = 0;
D_80183E80[1] = func_800418AC(var_s1_2->bombPos[0], var_s1_2->bombPos[2], camera->pos);
D_80183E80[2] = 0x8000;
func_800563DC(objectIndex, cameraId, 0x000000FF);
func_80056E24(i, camera->pos);
if (((u32) temp_s4 < 0x4E21U) && (state != BOMB_STATE_EXPLODED)) {
func_80056FCC(i);
}
}
}
}
}
UNUSED void func_80057330(void) {
}
-10
View File
@@ -10,7 +10,6 @@ extern "C" {
#endif
void func_80045738(u8*, u8*, s32, s32);
void render_bomb_karts(s32);
void func_800431B0(Vec3f, Vec3su, f32, Vtx*);
void func_80043220(Vec3f, Vec3su, f32, Gfx*);
void func_80043328(Vec3f, Vec3su, f32, Gfx*);
@@ -368,18 +367,9 @@ void func_80055F48(s32);
void func_80056160(s32);
void render_object_neon(s32);
void func_800562E4(s32, s32, s32);
void func_800563DC(s32, s32, s32);
void func_800568A0(s32, s32);
void func_8005669C(s32, s32, s32);
void func_800569F4(s32);
void func_80056A40(s32, s32);
void func_80056A94(s32);
void render_battle_bomb_karts(s32);
void func_80056E24(s32, Vec3f);
void func_80056FCC(s32);
void render_bomb_karts(s32);
void func_8005762C(s32*, s32*, s32, u32);
void func_80057330(void);
void func_80057338(void);
+5
View File
@@ -1446,6 +1446,9 @@ void render_ghost(Player* player, s8 playerId, s8 screenId, s8 flipOffset) {
} else {
spC2 = 0x0070;
}
FrameInterpolation_RecordOpenChild("player_ghost", (playerId << 4) | screenId);
thing = (u16) (player->unk_048[screenId] - player->rotation[1]);
spD4[0] = (-(s16) (sins(thing) * (0.0f * 0.0f)) * 0.8);
spD4[1] = player->unk_048[screenId];
@@ -1491,6 +1494,8 @@ void render_ghost(Player* player, s8 playerId, s8 screenId, s8 flipOffset) {
gSP2Triangles(gDisplayListHead++, 4, 5, 6, 4, 4, 6, 7, 4);
gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF);
gDPSetAlphaCompare(gDisplayListHead++, G_AC_NONE);
FrameInterpolation_RecordCloseChild();
}
void func_80025DE8(Player* player, s8 playerId, s8 screenId, s8 flipOffset) {