From 376087be692801e8e2c7fd145fbfdfd720cdea16 Mon Sep 17 00:00:00 2001 From: MegaMech Date: Thu, 5 Mar 2026 16:52:14 -0700 Subject: Fix Thwomp Collision and Better Interp Tagging for Actors (#665) * Update actors.c * Update actors.c * actor * Fix bounding box * More interp fix * Update KoopaTroopaBeach.cpp * Update Thwomp.cpp * Update actors.c * Update render.inc.c * Update render.inc.c --- src/engine/objects/Thwomp.cpp | 8 +++++--- src/engine/tracks/KoopaTroopaBeach.cpp | 6 ++++++ src/engine/tracks/KoopaTroopaBeach.h | 1 + 3 files changed, 12 insertions(+), 3 deletions(-) (limited to 'src/engine') diff --git a/src/engine/objects/Thwomp.cpp b/src/engine/objects/Thwomp.cpp index 2a19ec7fd..054d8d534 100644 --- a/src/engine/objects/Thwomp.cpp +++ b/src/engine/objects/Thwomp.cpp @@ -146,8 +146,10 @@ void OThwomp::Tick60fps() { // func_80081210 player = gPlayerOne; for (var_s4 = 0; var_s4 < NUM_PLAYERS; var_s4++, player++) { - player->tyres[FRONT_LEFT].unk_14 &= ~3; - player->unk_046 &= ~0x0006; + if (_idx == 0) { // Clear only once per frame + player->tyres[FRONT_LEFT].unk_14 &= ~3; + player->unk_046 &= ~0x0006; + } if (!(player->effects & BOO_EFFECT)) { OThwomp::func_80080B28(_objectIndex, var_s4); @@ -666,7 +668,7 @@ void OThwomp::func_80080B28(s32 objectIndex, s32 playerId) { } } else if ((temp_f0 <= 17.5) && (func_80072320(objectIndex, 1) != 0) && (is_within_horizontal_distance_of_player(objectIndex, player, - (player->speed * 0.5) + BoundingBoxSize) != 0)) { + (player->speed * 0.5) + gObjectList[objectIndex].boundingBoxSize) != 0)) { if ((player->type & PLAYER_EXISTS) && !(player->type & PLAYER_INVISIBLE_OR_BOMB)) { if (is_obj_flag_status_active(objectIndex, 0x04000000) != 0) { func_80072180(); diff --git a/src/engine/tracks/KoopaTroopaBeach.cpp b/src/engine/tracks/KoopaTroopaBeach.cpp index afa2f64c4..bd93462c7 100644 --- a/src/engine/tracks/KoopaTroopaBeach.cpp +++ b/src/engine/tracks/KoopaTroopaBeach.cpp @@ -112,6 +112,11 @@ KoopaTroopaBeach::KoopaTroopaBeach() { Props.Skybox.FloorTopLeft = {48, 152, 120}; Props.Sequence = MusicSeq::MUSIC_SEQ_KOOPA_TROOPA_BEACH; + mVtx[0].v.ob[0] = 129; mVtx[0].v.ob[1] = 1; mVtx[0].v.ob[2] = 2257; + mVtx[1].v.ob[0] = 112; mVtx[1].v.ob[1] = 1; mVtx[1].v.ob[2] = 2298; + mVtx[2].v.ob[0] = 129; mVtx[2].v.ob[1] = 40; mVtx[2].v.ob[2] = 2257; + mVtx[3].v.ob[0] = 112; mVtx[3].v.ob[1] = 40; mVtx[3].v.ob[2] = 2298; + Props.WaterLevel = 0.0f; gWaterVelocity = -0.1f; WaterVolumes.push_back({0.8f, 67.0f, 239.0f, 2233.0f, 2405.0f}); @@ -131,6 +136,7 @@ void KoopaTroopaBeach::Load() { InvertTriangleWindingByName(d_course_koopa_troopa_beach_packed_dl_2C0); InvertTriangleWindingByName(d_course_koopa_troopa_beach_packed_dl_9E70); } + add_vtx_from_quadrangle(mVtx, 4); parse_track_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_koopa_troopa_beach_addr)); func_80295C6C(); find_vtx_and_set_colours((Gfx*) d_course_koopa_troopa_beach_packed_dl_ADE0, 150, 255, 255, 255); diff --git a/src/engine/tracks/KoopaTroopaBeach.h b/src/engine/tracks/KoopaTroopaBeach.h index 5366be5a6..d6743553f 100644 --- a/src/engine/tracks/KoopaTroopaBeach.h +++ b/src/engine/tracks/KoopaTroopaBeach.h @@ -40,4 +40,5 @@ public: virtual void Tick() override; virtual void DrawTransparency(ScreenContext* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) override; virtual void Destroy() override; + Vtx mVtx[4]; }; -- cgit v1.2.3