Put all thwomp code in thomp class

This commit is contained in:
MegaMech
2024-12-06 21:50:01 -07:00
parent f87ad23500
commit bcf4a7f384
10 changed files with 822 additions and 1426 deletions
-131
View File
@@ -56,16 +56,6 @@ Lights1 D_800E45C0[] = {
Lights1 D_800E4620 = gdSPDefLights1(150, 180, 250, 255, 255, 255, 0, 0, 0);
Lights1 D_800E4638 = gdSPDefLights1(85, 85, 85, 255, 255, 255, 0, -120, 0);
Lights1 D_800E4650 = gdSPDefLights1(85, 85, 0, 255, 255, 0, 0, 120, 0);
Lights1 D_800E4668 = gdSPDefLights1(85, 85, 85, 255, 255, 255, -66, 82, -55);
Lights1 D_800E4680 = gdSPDefLights1(85, 85, 85, 255, 255, 255, 0, 0, 120);
Lights1 D_800E4698 = gdSPDefLights1(85, 85, 85, 255, 255, 255, 0, 0, 120);
Lights1 D_800E46B0 = gdSPDefLights1(85, 85, 85, 255, 255, 255, 0, 0, 120);
Lights1 D_800E46C8 = gdSPDefLights1(85, 85, 85, 255, 255, 255, 0, 0, 120);
@@ -3757,127 +3747,6 @@ void render_lakitu(s32 cameraId) {
}
}
void translate_thwomp_lights(UNUSED s32 arg0) {
func_800419F8();
D_800E4638.l[0].l.dir[0] = D_80165840[0];
D_800E4638.l[0].l.dir[1] = D_80165840[1];
D_800E4638.l[0].l.dir[2] = D_80165840[2];
}
void thwomp_lights(s32 objectIndex) {
// Why these don't just use `gSPSetLights1` calls...
switch (gObjectList[objectIndex].type) { // hmm very strange 80165C18
case 0:
gSPLight(gDisplayListHead++, &D_800E4638.l[0], LIGHT_1);
gSPLight(gDisplayListHead++, &D_800E4638.a, LIGHT_2);
break;
case 1:
gSPLight(gDisplayListHead++, &D_800E4650.l[0], LIGHT_1);
gSPLight(gDisplayListHead++, &D_800E4650.a, LIGHT_2);
break;
case 2:
gSPLight(gDisplayListHead++, &D_800E4668.l[0], LIGHT_1);
gSPLight(gDisplayListHead++, &D_800E4668.a, LIGHT_2);
break;
case 3:
gSPLight(gDisplayListHead++, &D_800E4680.l[0], LIGHT_1);
gSPLight(gDisplayListHead++, &D_800E4680.a, LIGHT_2);
break;
case 4:
gSPLight(gDisplayListHead++, &D_800E4698.l[0], LIGHT_1);
gSPLight(gDisplayListHead++, &D_800E4698.a, LIGHT_2);
break;
default:
break;
}
}
void render_object_thwomps_model(s32 objectIndex) {
if ((gObjectList[objectIndex].state >= 2) && (func_80072354(objectIndex, 0x00000040) != 0)) {
func_8004A7AC(objectIndex, 1.75f);
rsp_set_matrix_transformation(gObjectList[objectIndex].pos, gObjectList[objectIndex].orientation,
gObjectList[objectIndex].sizeScaling);
thwomp_lights(objectIndex);
gSPDisplayList(gDisplayListHead++, D_0D007828);
gDPSetTextureLUT(gDisplayListHead++, G_TT_RGBA16);
gDPLoadTLUT_pal256(gDisplayListHead++, d_course_bowsers_castle_thwomp_tlut);
rsp_load_texture_mask(gObjectList[objectIndex].activeTexture, 0x00000010, 0x00000040, 4);
gSPDisplayList(gDisplayListHead++, gObjectList[objectIndex].model);
}
}
void render_object_thwomps(s32 cameraId) {
s32 objectIndex = 0;
s32 i;
UNUSED s32 stackPadding0;
s16 minusone, plusone;
Camera* camera;
Object* object;
// Lights1 *D_800E4668l = (Lights1 *) LOAD_ASSET(D_800E4668);
camera = &camera1[cameraId];
if (cameraId == PLAYER_ONE) {
for (i = 0; i < gNumActiveThwomps; i++) {
objectIndex = indexObjectList1[i];
set_object_flag_status_false(objectIndex, 0x00070000);
func_800722CC(objectIndex, 0x00000110);
}
}
translate_thwomp_lights(objectIndex);
for (i = 0; i < gNumActiveThwomps; i++) {
objectIndex = indexObjectList1[i];
minusone = gObjectList[objectIndex].unk_0DF - 1;
plusone = gObjectList[objectIndex].unk_0DF + 1;
if (gGamestate != CREDITS_SEQUENCE) {
if ((D_8018CF68[cameraId] >= minusone) && (plusone >= D_8018CF68[cameraId]) &&
(is_object_visible_on_camera(objectIndex, camera, 0x8000U) != 0)) {
render_object_thwomps_model(objectIndex);
}
} else { // CREDITS_SEQUENCE
render_object_thwomps_model(objectIndex);
}
}
gSPDisplayList(gDisplayListHead++, D_0D0079C8);
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA);
gSPNumLights(gDisplayListHead++, 1);
gSPLight(gDisplayListHead++, &D_800E4668.l[0], LIGHT_1);
gSPLight(gDisplayListHead++, &D_800E4668.a, LIGHT_2);
gSPClearGeometryMode(gDisplayListHead++, G_CULL_BOTH);
gSPSetGeometryMode(gDisplayListHead++, G_SHADE | G_LIGHTING | G_SHADING_SMOOTH);
load_texture_block_rgba16_mirror(d_course_bowsers_castle_thwomp_side, 0x00000020, 0x00000020);
for (i = 0; i < gObjectParticle3_SIZE; i++) {
objectIndex = gObjectParticle3[i];
if (objectIndex != NULL_OBJECT_ID) {
object = &gObjectList[objectIndex];
if ((object->state > 0) && (object->unk_0D5 == 3) && (gMatrixHudCount <= MTX_HUD_POOL_SIZE_MAX)) {
rsp_set_matrix_transformation(object->pos, object->orientation, object->sizeScaling);
gSPVertex(gDisplayListHead++, D_0D005C00, 3, 0);
gSPDisplayList(gDisplayListHead++, D_0D006930);
}
}
}
gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK);
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
gSPTexture(gDisplayListHead++, 0x0001, 0x0001, 0, G_TX_RENDERTILE, G_OFF);
gSPDisplayList(gDisplayListHead++, D_0D007AE0);
load_texture_block_ia8_nomirror(D_8018D490, 0x00000020, 0x00000020);
func_8004B3C8(0);
D_80183E80[0] = 0;
D_80183E80[2] = 0x8000;
for (i = 0; i < gObjectParticle2_SIZE; i++) {
objectIndex = gObjectParticle2[i];
if (objectIndex != NULL_OBJECT_ID) {
object = &gObjectList[objectIndex];
if ((object->state >= 2) && (object->unk_0D5 == 2) && (gMatrixHudCount <= MTX_HUD_POOL_SIZE_MAX)) {
func_8004B138(0x000000FF, 0x000000FF, 0x000000FF, (s32) object->primAlpha);
D_80183E80[1] = func_800418AC(object->pos[0], object->pos[2], camera->pos);
func_800431B0(object->pos, D_80183E80, object->sizeScaling, D_0D005AE0);
}
}
}
}
void func_80053D74(s32 objectIndex, UNUSED s32 arg1, s32 vertexIndex) {
Object* object;