mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-12-03 22:52:50 +00:00
Add SF_BADNIK flag for characters, spawn an explosion on death
- Plays a pop sound too!
This commit is contained in:
parent
fb2c565e4b
commit
44666f0c2e
6 changed files with 57 additions and 0 deletions
|
|
@ -48,6 +48,7 @@ typedef enum
|
||||||
{
|
{
|
||||||
SF_MACHINE = 1, // Beep boop. Are you a robot?
|
SF_MACHINE = 1, // Beep boop. Are you a robot?
|
||||||
SF_IRONMAN = 1<<1, // Pick a new skin during POSITION. I main Random!
|
SF_IRONMAN = 1<<1, // Pick a new skin during POSITION. I main Random!
|
||||||
|
SF_BADNIK = 1<<2, // Explodes on death
|
||||||
// free up to and including 1<<31
|
// free up to and including 1<<31
|
||||||
} skinflags_t;
|
} skinflags_t;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3038,6 +3038,11 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
|
||||||
// MT_SCRIPT_THING
|
// MT_SCRIPT_THING
|
||||||
"S_TALKPOINT",
|
"S_TALKPOINT",
|
||||||
"S_TALKPOINT_ORB",
|
"S_TALKPOINT_ORB",
|
||||||
|
|
||||||
|
"S_BADNIK_EXPLOSION_SHOCKWAVE1",
|
||||||
|
"S_BADNIK_EXPLOSION_SHOCKWAVE2",
|
||||||
|
"S_BADNIK_EXPLOSION1",
|
||||||
|
"S_BADNIK_EXPLOSION2",
|
||||||
};
|
};
|
||||||
|
|
||||||
// RegEx to generate this from info.h: ^\tMT_([^,]+), --> \t"MT_\1",
|
// RegEx to generate this from info.h: ^\tMT_([^,]+), --> \t"MT_\1",
|
||||||
|
|
@ -4653,6 +4658,7 @@ struct int_const_s const INT_CONST[] = {
|
||||||
// Character flags (skinflags_t)
|
// Character flags (skinflags_t)
|
||||||
{"SF_MACHINE",SF_MACHINE},
|
{"SF_MACHINE",SF_MACHINE},
|
||||||
{"SF_IRONMAN",SF_IRONMAN},
|
{"SF_IRONMAN",SF_IRONMAN},
|
||||||
|
{"SF_BADNIK",SF_BADNIK},
|
||||||
|
|
||||||
// Sound flags
|
// Sound flags
|
||||||
{"SF_TOTALLYSINGLE",SF_TOTALLYSINGLE},
|
{"SF_TOTALLYSINGLE",SF_TOTALLYSINGLE},
|
||||||
|
|
|
||||||
|
|
@ -3561,6 +3561,11 @@ state_t states[NUMSTATES] =
|
||||||
// MT_SCRIPT_THING
|
// MT_SCRIPT_THING
|
||||||
{SPR_TLKP, 0|FF_SEMIBRIGHT|FF_PAPERSPRITE, -1, {NULL}, 0, 0, S_NULL}, // S_TALKPOINT
|
{SPR_TLKP, 0|FF_SEMIBRIGHT|FF_PAPERSPRITE, -1, {NULL}, 0, 0, S_NULL}, // S_TALKPOINT
|
||||||
{SPR_TLKP, 1|FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_TALKPOINT_ORB
|
{SPR_TLKP, 1|FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_TALKPOINT_ORB
|
||||||
|
|
||||||
|
{SPR_NULL, 0, 1, {NULL}, 0, 0, S_BADNIK_EXPLOSION_SHOCKWAVE2}, // S_BADNIK_EXPLOSION_SHOCKWAVE1
|
||||||
|
{SPR_NULL, 0, 1, {A_PlaySound}, sfx_s3k3d, 1, S_BATTLEBUMPER_EXBLAST1}, // S_BADNIK_EXPLOSION_SHOCKWAVE2
|
||||||
|
{SPR_NULL, 0, 1, {NULL}, 0, 0, S_BADNIK_EXPLOSION2}, // S_BADNIK_EXPLOSION1
|
||||||
|
{SPR_WIPD, FF_FULLBRIGHT|FF_RANDOMANIM|FF_ANIMATE, 30, {NULL}, 9, 3, S_NULL}, // S_BADNIK_EXPLOSION2
|
||||||
};
|
};
|
||||||
|
|
||||||
mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
|
|
|
||||||
|
|
@ -4046,6 +4046,11 @@ typedef enum state
|
||||||
S_TALKPOINT,
|
S_TALKPOINT,
|
||||||
S_TALKPOINT_ORB,
|
S_TALKPOINT_ORB,
|
||||||
|
|
||||||
|
S_BADNIK_EXPLOSION_SHOCKWAVE1,
|
||||||
|
S_BADNIK_EXPLOSION_SHOCKWAVE2,
|
||||||
|
S_BADNIK_EXPLOSION1,
|
||||||
|
S_BADNIK_EXPLOSION2,
|
||||||
|
|
||||||
S_FIRSTFREESLOT,
|
S_FIRSTFREESLOT,
|
||||||
S_LASTFREESLOT = S_FIRSTFREESLOT + NUMSTATEFREESLOTS - 1,
|
S_LASTFREESLOT = S_FIRSTFREESLOT + NUMSTATEFREESLOTS - 1,
|
||||||
NUMSTATES
|
NUMSTATES
|
||||||
|
|
|
||||||
|
|
@ -1634,6 +1634,40 @@ boolean P_CheckRacers(void)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void P_SpawnBadnikExplosion(mobj_t *target)
|
||||||
|
{
|
||||||
|
UINT8 count = 24;
|
||||||
|
angle_t ang = 0;
|
||||||
|
angle_t step = ANGLE_MAX / count;
|
||||||
|
fixed_t spd = 8 * mapobjectscale;
|
||||||
|
for (UINT8 i = 0; i < count; ++i)
|
||||||
|
{
|
||||||
|
mobj_t *x = P_SpawnMobjFromMobjUnscaled(
|
||||||
|
target,
|
||||||
|
P_RandomRange(PR_EXPLOSION, -48, 48) * target->scale,
|
||||||
|
P_RandomRange(PR_EXPLOSION, -48, 48) * target->scale,
|
||||||
|
P_RandomRange(PR_EXPLOSION, -48, 48) * target->scale,
|
||||||
|
MT_THOK
|
||||||
|
);
|
||||||
|
P_InstaScale(x, 3 * x->scale / 2);
|
||||||
|
P_InstaThrust(x, ang, spd);
|
||||||
|
x->momz = P_RandomRange(PR_EXPLOSION, -4, 4) * mapobjectscale;
|
||||||
|
P_SetMobjStateNF(x, S_BADNIK_EXPLOSION1);
|
||||||
|
ang += step;
|
||||||
|
}
|
||||||
|
// burst effects (copied from MT_ITEMCAPSULE)
|
||||||
|
ang = FixedAngle(360*P_RandomFixed(PR_ITEM_DEBRIS));
|
||||||
|
for (UINT8 i = 0; i < 2; i++)
|
||||||
|
{
|
||||||
|
mobj_t *blast = P_SpawnMobjFromMobj(target, 0, 0, target->info->height >> 1, MT_BATTLEBUMPER_BLAST);
|
||||||
|
blast->angle = ang + i*ANGLE_90;
|
||||||
|
P_SetScale(blast, 2*blast->scale/3);
|
||||||
|
blast->destscale = 6*blast->scale;
|
||||||
|
blast->scalespeed = (blast->destscale - blast->scale) / 30;
|
||||||
|
P_SetMobjStateNF(blast, S_BADNIK_EXPLOSION_SHOCKWAVE1 + i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** Kills an object.
|
/** Kills an object.
|
||||||
*
|
*
|
||||||
* \param target The victim.
|
* \param target The victim.
|
||||||
|
|
@ -1901,6 +1935,11 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget
|
||||||
P_SetObjectMomZ(target, 20*FRACUNIT, false);
|
P_SetObjectMomZ(target, 20*FRACUNIT, false);
|
||||||
|
|
||||||
P_PlayDeathSound(target);
|
P_PlayDeathSound(target);
|
||||||
|
|
||||||
|
if (skins[target->player->skin].flags & SF_BADNIK)
|
||||||
|
{
|
||||||
|
P_SpawnBadnikExplosion(target);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Prisons Free Play: don't eliminate P1 for
|
// Prisons Free Play: don't eliminate P1 for
|
||||||
|
|
|
||||||
|
|
@ -872,6 +872,7 @@ static boolean R_ProcessPatchableFields(skin_t *skin, char *stoken, char *value)
|
||||||
// 1, true, yes are all valid values
|
// 1, true, yes are all valid values
|
||||||
GETFLAG(MACHINE)
|
GETFLAG(MACHINE)
|
||||||
GETFLAG(IRONMAN)
|
GETFLAG(IRONMAN)
|
||||||
|
GETFLAG(BADNIK)
|
||||||
#undef GETFLAG
|
#undef GETFLAG
|
||||||
|
|
||||||
else // let's check if it's a sound, otherwise error out
|
else // let's check if it's a sound, otherwise error out
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue