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
|
typedef enum
|
||||||
{
|
{
|
||||||
SF_MACHINE = 1, // Beep boop. Are you a robot?
|
SF_MACHINE = 1, // Beep boop. Are you a robot?
|
||||||
SF_NOGIBS = 1<<1, // Does this kart smash into pieces?
|
SF_OLDDEATH = 1<<1, // Kart V1 styled death animation
|
||||||
SF_OLDDEATH = 1<<2, // Kart V1 styled death animation
|
|
||||||
// free up to and including 1<<31
|
// free up to and including 1<<31
|
||||||
} skinflags_t;
|
} skinflags_t;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1000,7 +1000,6 @@ struct int_const_s const INT_CONST[] = {
|
||||||
// Character flags (skinflags_t)
|
// Character flags (skinflags_t)
|
||||||
{"SF_HIRES",0},
|
{"SF_HIRES",0},
|
||||||
{"SF_MACHINE",SF_MACHINE},
|
{"SF_MACHINE",SF_MACHINE},
|
||||||
{"SF_NOGIBS",SF_NOGIBS},
|
|
||||||
{"SF_OLDDEATH",SF_OLDDEATH},
|
{"SF_OLDDEATH",SF_OLDDEATH},
|
||||||
|
|
||||||
// Sound flags
|
// Sound flags
|
||||||
|
|
|
||||||
|
|
@ -222,4 +222,3 @@ _(A_RoamingShadowThinker, ROAMINGSHADOWTHINKER)
|
||||||
_(A_MayonakaArrow, MAYONAKAARROW)
|
_(A_MayonakaArrow, MAYONAKAARROW)
|
||||||
_(A_MementosTPParticles, MEMENTOSTPPARTICLES)
|
_(A_MementosTPParticles, MEMENTOSTPPARTICLES)
|
||||||
_(A_ReaperThinker, REAPERTHINKER)
|
_(A_ReaperThinker, REAPERTHINKER)
|
||||||
_(A_DeathSpin, DEATHSPIN)
|
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,6 @@ _(UNKNOWN)
|
||||||
_(THOK) // Thok! mobj
|
_(THOK) // Thok! mobj
|
||||||
_(SHADOW) // Linkdraw Shadow (for invisible objects)
|
_(SHADOW) // Linkdraw Shadow (for invisible objects)
|
||||||
_(PLAYER)
|
_(PLAYER)
|
||||||
_(KART_LEFTOVER)
|
|
||||||
_(KART_TIRE)
|
|
||||||
|
|
||||||
// Enemies
|
// Enemies
|
||||||
_(BLUECRAWLA) // Crawla (Blue)
|
_(BLUECRAWLA) // Crawla (Blue)
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,6 @@ _(UNKN)
|
||||||
|
|
||||||
_(THOK) // Thok! mobj
|
_(THOK) // Thok! mobj
|
||||||
_(PLAY)
|
_(PLAY)
|
||||||
_(KART)
|
|
||||||
_(TIRE)
|
|
||||||
|
|
||||||
// Enemies
|
// Enemies
|
||||||
_(POSS) // Crawla (Blue)
|
_(POSS) // Crawla (Blue)
|
||||||
|
|
|
||||||
|
|
@ -48,9 +48,6 @@ _(KART_SIGN)
|
||||||
// technically the player goes here but it's an infinite tic state
|
// technically the player goes here but it's an infinite tic state
|
||||||
_(OBJPLACE_DUMMY)
|
_(OBJPLACE_DUMMY)
|
||||||
|
|
||||||
_(KART_LEFTOVER)
|
|
||||||
_(KART_TIRE)
|
|
||||||
|
|
||||||
// Blue Crawla
|
// Blue Crawla
|
||||||
_(POSS_STND)
|
_(POSS_STND)
|
||||||
_(POSS_RUN1)
|
_(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
|
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_BANANA || t2->type == MT_EGGMANITEM || t2->type == MT_BALLHOG
|
||||||
|| t2->type == MT_SSMINE || t2->type == MT_LANDMINE || t2->type == MT_SINK
|
|| t2->type == MT_SSMINE || t2->type == MT_LANDMINE || t2->type == MT_SINK
|
||||||
|| t2->type == MT_KART_LEFTOVER
|
|
||||||
|| (t2->type == MT_PLAYER && t1->target != t2));
|
|| (t2->type == MT_PLAYER && t1->target != t2));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1960,14 +1960,6 @@ fixed_t K_GetMobjWeight(mobj_t *mobj, mobj_t *against)
|
||||||
break;
|
break;
|
||||||
weight = K_PlayerWeight(mobj, against);
|
weight = K_PlayerWeight(mobj, against);
|
||||||
break;
|
break;
|
||||||
case MT_KART_LEFTOVER:
|
|
||||||
weight = 5*FRACUNIT/2;
|
|
||||||
|
|
||||||
if (mobj->extravalue1 > 0)
|
|
||||||
{
|
|
||||||
weight = mobj->extravalue1 * (FRACUNIT >> 1);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MT_BUBBLESHIELD:
|
case MT_BUBBLESHIELD:
|
||||||
weight = K_PlayerWeight(mobj->target, against);
|
weight = K_PlayerWeight(mobj->target, against);
|
||||||
break;
|
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:
|
case MT_PLAYER:
|
||||||
if (damagetype != DMG_SPECTATOR)
|
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;
|
target->momx = target->momy = target->momz = 0;
|
||||||
|
P_SetObjectMomZ(target, 14*FRACUNIT, false);
|
||||||
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_PlayDeathSound(target);
|
P_PlayDeathSound(target);
|
||||||
}
|
}
|
||||||
break;
|
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;
|
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)
|
else if (thing->flags & MF_SOLID)
|
||||||
{
|
{
|
||||||
// see if it went over / under
|
// see if it went over / under
|
||||||
|
|
|
||||||
|
|
@ -7940,7 +7940,7 @@ static boolean P_MobjDeadThink(mobj_t *mobj)
|
||||||
}
|
}
|
||||||
else // Apply gravity to fall downwards.
|
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))
|
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))];
|
mobj->color = BALLOONCOLORS[P_RandomKey(sizeof(BALLOONCOLORS))];
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MT_KART_LEFTOVER:
|
|
||||||
mobj->color = SKINCOLOR_RED;
|
|
||||||
break;
|
|
||||||
case MT_REDRING: // Make MT_REDRING red by default
|
case MT_REDRING: // Make MT_REDRING red by default
|
||||||
mobj->color = skincolor_redring;
|
mobj->color = skincolor_redring;
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -609,7 +609,7 @@ static void R_LoadSkinSprites(UINT16 wadnum, UINT16 *lump, UINT16 *lastlump, ski
|
||||||
|
|
||||||
R_AddKartFaces(skin);
|
R_AddKartFaces(skin);
|
||||||
|
|
||||||
skin->flags |= SF_OLDDEATH|SF_NOGIBS;
|
skin->flags |= SF_OLDDEATH;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (skin->sprites[0].numframes == 0)
|
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_
|
// these are uppercase so they can be concatenated with SF_
|
||||||
// 1, true, yes are all valid values
|
// 1, true, yes are all valid values
|
||||||
GETFLAG(MACHINE)
|
GETFLAG(MACHINE)
|
||||||
GETFLAG(NOGIBS)
|
|
||||||
GETFLAG(OLDDEATH)
|
GETFLAG(OLDDEATH)
|
||||||
#undef GETFLAG
|
#undef GETFLAG
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue