Unify death animations and make more accurate to SRB2Kart
This commit is contained in:
parent
9986f9aaef
commit
b0e25dcc9c
13 changed files with 5 additions and 128 deletions
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -222,4 +222,3 @@ _(A_RoamingShadowThinker, ROAMINGSHADOWTHINKER)
|
|||
_(A_MayonakaArrow, MAYONAKAARROW)
|
||||
_(A_MementosTPParticles, MEMENTOSTPPARTICLES)
|
||||
_(A_ReaperThinker, REAPERTHINKER)
|
||||
_(A_DeathSpin, DEATHSPIN)
|
||||
|
|
|
|||
|
|
@ -5,8 +5,6 @@ _(UNKNOWN)
|
|||
_(THOK) // Thok! mobj
|
||||
_(SHADOW) // Linkdraw Shadow (for invisible objects)
|
||||
_(PLAYER)
|
||||
_(KART_LEFTOVER)
|
||||
_(KART_TIRE)
|
||||
|
||||
// Enemies
|
||||
_(BLUECRAWLA) // Crawla (Blue)
|
||||
|
|
|
|||
|
|
@ -7,8 +7,6 @@ _(UNKN)
|
|||
|
||||
_(THOK) // Thok! mobj
|
||||
_(PLAY)
|
||||
_(KART)
|
||||
_(TIRE)
|
||||
|
||||
// Enemies
|
||||
_(POSS) // Crawla (Blue)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -11659,9 +11659,3 @@ void A_ReaperThinker(mobj_t *actor)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
void A_DeathSpin(mobj_t *actor)
|
||||
{
|
||||
INT32 locvar1 = var1;
|
||||
actor->angle += locvar1;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
15
src/p_map.c
15
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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue