Add new flags for toggling death effects
This commit is contained in:
parent
247e60442b
commit
1b25b42835
4 changed files with 73 additions and 54 deletions
|
|
@ -41,6 +41,8 @@ typedef enum
|
|||
{
|
||||
SF_HIRES = 1, // Draw the sprite at different size?
|
||||
SF_MACHINE = 1<<1, // Beep boop. Are you a robot?
|
||||
SF_NOGIBS = 1<<2, // Does this kart smash into pieces?
|
||||
SF_OLDDEATH = 1<<3, // Kart V1 styled death animation
|
||||
// free up to and including 1<<31
|
||||
} skinflags_t;
|
||||
|
||||
|
|
|
|||
116
src/p_inter.c
116
src/p_inter.c
|
|
@ -1394,76 +1394,84 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget
|
|||
target->fuse = 2*TICRATE; // timer before mobj disappears from view (even if not an actual player)
|
||||
target->momx = target->momy = target->momz = 0;
|
||||
|
||||
angle_t playerFlingAngle;
|
||||
angle_t kartFlingAngle;
|
||||
|
||||
if (source && !P_MobjWasRemoved(source))
|
||||
if (target->player && !(skins[target->player->skin].flags & SF_NOGIBS))
|
||||
{
|
||||
playerFlingAngle = kartFlingAngle = R_PointToAngle2(
|
||||
source->x - source->momx, source->y - source->momy,
|
||||
target->x, target->y
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
kartFlingAngle = target->angle;
|
||||
angle_t playerFlingAngle;
|
||||
angle_t kartFlingAngle;
|
||||
|
||||
if (P_RandomByte() & 1)
|
||||
if (source && !P_MobjWasRemoved(source))
|
||||
{
|
||||
kartFlingAngle -= ANGLE_45;
|
||||
playerFlingAngle = kartFlingAngle = R_PointToAngle2(
|
||||
source->x - source->momx, source->y - source->momy,
|
||||
target->x, target->y
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
kartFlingAngle += ANGLE_45;
|
||||
kartFlingAngle = target->angle;
|
||||
|
||||
if (P_RandomByte() & 1)
|
||||
{
|
||||
kartFlingAngle -= ANGLE_45;
|
||||
}
|
||||
else
|
||||
{
|
||||
kartFlingAngle += ANGLE_45;
|
||||
}
|
||||
|
||||
playerFlingAngle = kartFlingAngle + ANGLE_180;
|
||||
}
|
||||
|
||||
playerFlingAngle = kartFlingAngle + ANGLE_180;
|
||||
}
|
||||
// Spawn kart frame
|
||||
mobj_t *kart = P_SpawnMobjFromMobj(target, 0, 0, 0, MT_KART_LEFTOVER);
|
||||
|
||||
// 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 (kart && !P_MobjWasRemoved(kart))
|
||||
{
|
||||
if (i == 2) tireAngle += ANGLE_90;
|
||||
kart->angle = target->angle;
|
||||
kart->color = target->color;
|
||||
kart->extravalue1 = target->player->kartweight;
|
||||
kart->fuse = 2*TICRATE;
|
||||
|
||||
tire = P_SpawnMobjFromMobj(kart, 0, 0, 0, MT_KART_TIRE);
|
||||
tire->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;
|
||||
|
||||
tire->angle = tireAngle;
|
||||
P_InstaThrust(tire, tireAngle, 3 * tire->scale);
|
||||
P_SetObjectMomZ(tire, 10*FRACUNIT, false);
|
||||
P_InstaThrust(kart, kartFlingAngle, 1 * kart->scale);
|
||||
P_SetObjectMomZ(kart, 10*FRACUNIT, false);
|
||||
|
||||
tireAngle += (aOffset * 2);
|
||||
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);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6427,6 +6427,11 @@ static boolean P_MobjDeadThink(mobj_t *mobj)
|
|||
else // Apply gravity to fall downwards.
|
||||
{
|
||||
P_SetObjectMomZ(mobj, -2*FRACUNIT/3, true);
|
||||
|
||||
if (mobj->player && (skins[mobj->player->skin].flags && SF_OLDDEATH))
|
||||
{
|
||||
mobj->player->drawangle -= ANGLE_22h;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case MT_METALSONIC_RACE:
|
||||
|
|
|
|||
|
|
@ -429,6 +429,7 @@ static UINT8 KART_TO_SPR2[][2] = {
|
|||
S('O', DRRN)
|
||||
S('P', DRRN)
|
||||
S('Q', SPIN)
|
||||
S('Q', DEAD)
|
||||
S('R', KART)
|
||||
S('S', SIGN)
|
||||
};
|
||||
|
|
@ -534,6 +535,9 @@ static void R_LoadSkinSprites(UINT16 wadnum, UINT16 *lump, UINT16 *lastlump, ski
|
|||
}
|
||||
|
||||
R_AddKartFaces(skin);
|
||||
|
||||
skin->flags |= SF_OLDDEATH|SF_NOGIBS;
|
||||
|
||||
}
|
||||
|
||||
if (skin->sprites[0].numframes == 0)
|
||||
|
|
|
|||
Loading…
Reference in a new issue