From b0e25dcc9c2ecd9c74d732d9abd624e8978653f6 Mon Sep 17 00:00:00 2001 From: Wumbo <58399748+WumboSpasm@users.noreply.github.com> Date: Sun, 7 Sep 2025 19:06:37 -0400 Subject: [PATCH] Unify death animations and make more accurate to SRB2Kart --- src/d_player.h | 3 +- src/deh_tables.c | 1 - src/info/actions.h | 1 - src/info/mobjs.h | 2 -- src/info/sprites.h | 2 -- src/info/states.h | 3 -- src/k_collide.c | 1 - src/k_kart.c | 8 ----- src/p_enemy.c | 6 ---- src/p_inter.c | 83 ++-------------------------------------------- src/p_map.c | 15 --------- src/p_mobj.c | 5 +-- src/r_skins.c | 3 +- 13 files changed, 5 insertions(+), 128 deletions(-) diff --git a/src/d_player.h b/src/d_player.h index 27767b6cb..cc6687518 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -40,8 +40,7 @@ extern "C" { typedef enum { SF_MACHINE = 1, // Beep boop. Are you a robot? - SF_NOGIBS = 1<<1, // Does this kart smash into pieces? - SF_OLDDEATH = 1<<2, // Kart V1 styled death animation + SF_OLDDEATH = 1<<1, // Kart V1 styled death animation // free up to and including 1<<31 } skinflags_t; diff --git a/src/deh_tables.c b/src/deh_tables.c index e6037e5de..11e8343c3 100644 --- a/src/deh_tables.c +++ b/src/deh_tables.c @@ -1000,7 +1000,6 @@ struct int_const_s const INT_CONST[] = { // Character flags (skinflags_t) {"SF_HIRES",0}, {"SF_MACHINE",SF_MACHINE}, - {"SF_NOGIBS",SF_NOGIBS}, {"SF_OLDDEATH",SF_OLDDEATH}, // Sound flags diff --git a/src/info/actions.h b/src/info/actions.h index 365385077..845e8ffee 100644 --- a/src/info/actions.h +++ b/src/info/actions.h @@ -222,4 +222,3 @@ _(A_RoamingShadowThinker, ROAMINGSHADOWTHINKER) _(A_MayonakaArrow, MAYONAKAARROW) _(A_MementosTPParticles, MEMENTOSTPPARTICLES) _(A_ReaperThinker, REAPERTHINKER) -_(A_DeathSpin, DEATHSPIN) diff --git a/src/info/mobjs.h b/src/info/mobjs.h index f35657ba5..368453768 100644 --- a/src/info/mobjs.h +++ b/src/info/mobjs.h @@ -5,8 +5,6 @@ _(UNKNOWN) _(THOK) // Thok! mobj _(SHADOW) // Linkdraw Shadow (for invisible objects) _(PLAYER) -_(KART_LEFTOVER) -_(KART_TIRE) // Enemies _(BLUECRAWLA) // Crawla (Blue) diff --git a/src/info/sprites.h b/src/info/sprites.h index 4723e29cb..b1e373547 100644 --- a/src/info/sprites.h +++ b/src/info/sprites.h @@ -7,8 +7,6 @@ _(UNKN) _(THOK) // Thok! mobj _(PLAY) -_(KART) -_(TIRE) // Enemies _(POSS) // Crawla (Blue) diff --git a/src/info/states.h b/src/info/states.h index d95d856c1..a2a394e28 100644 --- a/src/info/states.h +++ b/src/info/states.h @@ -48,9 +48,6 @@ _(KART_SIGN) // technically the player goes here but it's an infinite tic state _(OBJPLACE_DUMMY) -_(KART_LEFTOVER) -_(KART_TIRE) - // Blue Crawla _(POSS_STND) _(POSS_RUN1) diff --git a/src/k_collide.c b/src/k_collide.c index cf32bd60a..f65383704 100644 --- a/src/k_collide.c +++ b/src/k_collide.c @@ -574,7 +574,6 @@ boolean K_BubbleShieldCanReflect(mobj_t *t1, mobj_t *t2) return (t2->type == MT_ORBINAUT || t2->type == MT_JAWZ || t2->type == MT_JAWZ_DUD || t2->type == MT_BANANA || t2->type == MT_EGGMANITEM || t2->type == MT_BALLHOG || t2->type == MT_SSMINE || t2->type == MT_LANDMINE || t2->type == MT_SINK - || t2->type == MT_KART_LEFTOVER || (t2->type == MT_PLAYER && t1->target != t2)); } diff --git a/src/k_kart.c b/src/k_kart.c index 8787c8cac..8ee39888b 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1960,14 +1960,6 @@ fixed_t K_GetMobjWeight(mobj_t *mobj, mobj_t *against) break; weight = K_PlayerWeight(mobj, against); break; - case MT_KART_LEFTOVER: - weight = 5*FRACUNIT/2; - - if (mobj->extravalue1 > 0) - { - weight = mobj->extravalue1 * (FRACUNIT >> 1); - } - break; case MT_BUBBLESHIELD: weight = K_PlayerWeight(mobj->target, against); break; diff --git a/src/p_enemy.c b/src/p_enemy.c index b1f5416b4..8242a3f2b 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -11659,9 +11659,3 @@ void A_ReaperThinker(mobj_t *actor) } } } - -void A_DeathSpin(mobj_t *actor) -{ - INT32 locvar1 = var1; - actor->angle += locvar1; -} diff --git a/src/p_inter.c b/src/p_inter.c index 41fb3bfd1..334e1d53d 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -1565,88 +1565,9 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget case MT_PLAYER: if (damagetype != DMG_SPECTATOR) { - target->fuse = 2*TICRATE; // timer before mobj disappears from view (even if not an actual player) + target->fuse = TICRATE; target->momx = target->momy = target->momz = 0; - - if (target->player && !(skins[target->player->skin].flags & SF_NOGIBS)) - { - angle_t playerFlingAngle; - angle_t kartFlingAngle; - - if (source && !P_MobjWasRemoved(source)) - { - playerFlingAngle = kartFlingAngle = R_PointToAngle2( - source->x - source->momx, source->y - source->momy, - target->x, target->y - ); - } - else - { - kartFlingAngle = target->angle; - - if (P_RandomByte() & 1) - { - kartFlingAngle -= ANGLE_45; - } - else - { - kartFlingAngle += ANGLE_45; - } - - playerFlingAngle = kartFlingAngle + ANGLE_180; - } - - // Spawn kart frame - mobj_t *kart = P_SpawnMobjFromMobj(target, 0, 0, 0, MT_KART_LEFTOVER); - - if (kart && !P_MobjWasRemoved(kart)) - { - kart->angle = target->angle; - kart->color = target->color; - kart->extravalue1 = target->player->kartweight; - kart->fuse = 2*TICRATE; - - // Copy interp data - kart->old_angle = target->old_angle; - kart->old_x = target->old_x; - kart->old_y = target->old_y; - kart->old_z = target->old_z; - - P_InstaThrust(kart, kartFlingAngle, 1 * kart->scale); - P_SetObjectMomZ(kart, 10*FRACUNIT, false); - - const angle_t aOffset = ANGLE_22h; - - UINT8 i; - angle_t tireAngle; - mobj_t *tire; - - // Spawn tires - tireAngle = kartFlingAngle - ANGLE_90 - ANGLE_22h; - for (i = 0; i < 4; i++) - { - if (i == 2) tireAngle += ANGLE_90; - - tire = P_SpawnMobjFromMobj(kart, 0, 0, 0, MT_KART_TIRE); - tire->fuse = 2*TICRATE; - - tire->angle = tireAngle; - P_InstaThrust(tire, tireAngle, 3 * tire->scale); - P_SetObjectMomZ(tire, 10*FRACUNIT, false); - - tireAngle += (aOffset * 2); - } - } - - P_InstaThrust(target, playerFlingAngle, 4 * target->scale); - P_SetObjectMomZ(target, 14*FRACUNIT, false); - } - - if (target->player && (skins[target->player->skin].flags & SF_OLDDEATH)) - { - P_SetObjectMomZ(target, 14*FRACUNIT, false); - } - + P_SetObjectMomZ(target, 14*FRACUNIT, false); P_PlayDeathSound(target); } break; diff --git a/src/p_map.c b/src/p_map.c index e2d06ed34..648c91f2a 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -1290,21 +1290,6 @@ static BlockItReturn_t PIT_CheckThing(mobj_t *thing) return BMIT_CONTINUE; } - else if (thing->type == MT_KART_LEFTOVER) - { - // see if it went over / under - if (g_tm.thing->z > thing->z + thing->height) - return BMIT_CONTINUE; // overhead - if (g_tm.thing->z + g_tm.thing->height < thing->z) - return BMIT_CONTINUE; // underneath - - if (P_IsObjectOnGround(thing) && g_tm.thing->momz < 0) - K_KartBouncing(g_tm.thing, thing, true, false); - else - K_KartBouncing(g_tm.thing, thing, false, false); - - return BMIT_CONTINUE; - } else if (thing->flags & MF_SOLID) { // see if it went over / under diff --git a/src/p_mobj.c b/src/p_mobj.c index 56f9c8588..07b10a815 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -7940,7 +7940,7 @@ static boolean P_MobjDeadThink(mobj_t *mobj) } else // Apply gravity to fall downwards. { - P_SetObjectMomZ(mobj, -2*FRACUNIT/3, true); + P_SetObjectMomZ(mobj, -3*FRACUNIT/2, true); if (mobj->player && (skins[mobj->player->skin].flags & SF_OLDDEATH)) { @@ -11171,9 +11171,6 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type) mobj->color = BALLOONCOLORS[P_RandomKey(sizeof(BALLOONCOLORS))]; } break; - case MT_KART_LEFTOVER: - mobj->color = SKINCOLOR_RED; - break; case MT_REDRING: // Make MT_REDRING red by default mobj->color = skincolor_redring; break; diff --git a/src/r_skins.c b/src/r_skins.c index bd381d20c..0a719fb7f 100644 --- a/src/r_skins.c +++ b/src/r_skins.c @@ -609,7 +609,7 @@ static void R_LoadSkinSprites(UINT16 wadnum, UINT16 *lump, UINT16 *lastlump, ski R_AddKartFaces(skin); - skin->flags |= SF_OLDDEATH|SF_NOGIBS; + skin->flags |= SF_OLDDEATH; } if (skin->sprites[0].numframes == 0) @@ -693,7 +693,6 @@ static boolean R_ProcessPatchableFields(skin_t *skin, char *stoken, char *value) // these are uppercase so they can be concatenated with SF_ // 1, true, yes are all valid values GETFLAG(MACHINE) - GETFLAG(NOGIBS) GETFLAG(OLDDEATH) #undef GETFLAG