mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Brake dust
- Spawns outward from both front wheels, from outer wheel only if brake-drifting. - Scales with speed, up to 200%. Also applies to drift sparks.
This commit is contained in:
parent
364651ac39
commit
730e00ab19
5 changed files with 138 additions and 1 deletions
|
|
@ -3307,6 +3307,10 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
|
|||
// Brake drift sparks
|
||||
"S_BRAKEDRIFT",
|
||||
|
||||
// Brake dust
|
||||
"S_BRAKEDUST1",
|
||||
"S_BRAKEDUST2",
|
||||
|
||||
// Drift Smoke
|
||||
"S_DRIFTDUST1",
|
||||
"S_DRIFTDUST2",
|
||||
|
|
@ -5259,6 +5263,7 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t
|
|||
"MT_WIPEOUTTRAIL",
|
||||
"MT_DRIFTSPARK",
|
||||
"MT_BRAKEDRIFT",
|
||||
"MT_BRAKEDUST",
|
||||
"MT_DRIFTDUST",
|
||||
"MT_DRIFTELECTRICITY",
|
||||
"MT_DRIFTELECTRICSPARK",
|
||||
|
|
|
|||
31
src/info.c
31
src/info.c
|
|
@ -542,6 +542,7 @@ char sprnames[NUMSPRITES + 1][5] =
|
|||
"WIPD", // Wipeout dust trail
|
||||
"DRIF", // Drift Sparks
|
||||
"BDRF", // Brake drift sparks
|
||||
"BRAK", // Brake dust
|
||||
"DRWS", // Drift dust sparks
|
||||
"DREL", // Drift electricity
|
||||
"DRES", // Drift electric sparks
|
||||
|
|
@ -3883,6 +3884,9 @@ state_t states[NUMSTATES] =
|
|||
|
||||
{SPR_BDRF, FF_FULLBRIGHT|FF_PAPERSPRITE|FF_ANIMATE, -1, {NULL}, 5, 2, S_BRAKEDRIFT}, // S_BRAKEDRIFT
|
||||
|
||||
{SPR_BRAK, FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_BRAKEDUST2}, // S_BRAKEDUST1
|
||||
{SPR_BRAK, FF_FULLBRIGHT|FF_ANIMATE, 7, {NULL}, 6, 1, S_NULL}, // S_BRAKEDUST2
|
||||
|
||||
{SPR_DUST, 0, 3, {NULL}, 0, 0, S_DRIFTDUST2}, // S_DRIFTDUST1
|
||||
{SPR_DUST, 1, 3, {NULL}, 0, 0, S_DRIFTDUST3}, // S_DRIFTDUST2
|
||||
{SPR_DUST, FF_TRANS20|2, 3, {NULL}, 0, 0, S_DRIFTDUST4}, // S_DRIFTDUST3
|
||||
|
|
@ -22951,6 +22955,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_BRAKEDUST
|
||||
-1, // doomednum
|
||||
S_BRAKEDUST1, // spawnstate
|
||||
1000, // spawnhealth
|
||||
S_NULL, // seestate
|
||||
sfx_None, // seesound
|
||||
8, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
0, // painchance
|
||||
sfx_None, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
8, // speed
|
||||
8*FRACUNIT, // radius
|
||||
8*FRACUNIT, // height
|
||||
1, // display offset
|
||||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOBLOCKMAP|MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_DONTENCOREMAP|MF_NOSQUISH, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_DRIFTDUST
|
||||
-1, // doomednum
|
||||
S_DRIFTDUST1, // spawnstate
|
||||
|
|
|
|||
|
|
@ -1089,6 +1089,7 @@ typedef enum sprite
|
|||
SPR_WIPD, // Wipeout dust trail
|
||||
SPR_DRIF, // Drift Sparks
|
||||
SPR_BDRF, // Brake drift sparks
|
||||
SPR_BRAK, // Brake brak
|
||||
SPR_DRWS, // Drift dust sparks
|
||||
SPR_DREL, // Drift electricity
|
||||
SPR_DRES, // Drift electric sparks
|
||||
|
|
@ -4289,6 +4290,10 @@ typedef enum state
|
|||
// Brake drift sparks
|
||||
S_BRAKEDRIFT,
|
||||
|
||||
// Brake dust
|
||||
S_BRAKEDUST1,
|
||||
S_BRAKEDUST2,
|
||||
|
||||
// Drift Smoke
|
||||
S_DRIFTDUST1,
|
||||
S_DRIFTDUST2,
|
||||
|
|
@ -6278,6 +6283,7 @@ typedef enum mobj_type
|
|||
MT_WIPEOUTTRAIL,
|
||||
MT_DRIFTSPARK,
|
||||
MT_BRAKEDRIFT,
|
||||
MT_BRAKEDUST,
|
||||
MT_DRIFTDUST,
|
||||
MT_DRIFTELECTRICITY,
|
||||
MT_DRIFTELECTRICSPARK,
|
||||
|
|
|
|||
94
src/k_kart.c
94
src/k_kart.c
|
|
@ -2029,6 +2029,17 @@ void K_SpawnDashDustRelease(player_t *player)
|
|||
}
|
||||
}
|
||||
|
||||
static fixed_t K_GetBrakeFXScale(player_t *player)
|
||||
{
|
||||
fixed_t s = FixedDiv(player->speed,
|
||||
K_GetKartSpeed(player, false));
|
||||
|
||||
s = max(s, FRACUNIT);
|
||||
s = min(s, 2*FRACUNIT);
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
static void K_SpawnBrakeDriftSparks(player_t *player) // Be sure to update the mobj thinker case too!
|
||||
{
|
||||
mobj_t *sparks;
|
||||
|
|
@ -2041,11 +2052,85 @@ static void K_SpawnBrakeDriftSparks(player_t *player) // Be sure to update the m
|
|||
// This avoids needing to dupe code if we don't need it.
|
||||
sparks = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_BRAKEDRIFT);
|
||||
P_SetTarget(&sparks->target, player->mo);
|
||||
P_SetScale(sparks, (sparks->destscale = player->mo->scale));
|
||||
P_SetScale(sparks, (sparks->destscale = FixedMul(K_GetBrakeFXScale(player), player->mo->scale)));
|
||||
K_MatchGenericExtraFlags(sparks, player->mo);
|
||||
sparks->renderflags |= RF_DONTDRAW;
|
||||
}
|
||||
|
||||
static void
|
||||
spawn_brake_dust
|
||||
( mobj_t * master,
|
||||
angle_t aoff,
|
||||
int radf,
|
||||
fixed_t scale)
|
||||
{
|
||||
const fixed_t rad = radf * master->radius;
|
||||
|
||||
const angle_t a = master->angle + aoff;
|
||||
|
||||
mobj_t *spark = P_SpawnMobjFromMobj(master,
|
||||
P_ReturnThrustX(NULL, a, rad),
|
||||
P_ReturnThrustY(NULL, a, rad), 0,
|
||||
MT_BRAKEDUST);
|
||||
|
||||
spark->momx = master->momx;
|
||||
spark->momy = master->momy;
|
||||
spark->momz = P_GetMobjZMovement(master);
|
||||
spark->angle = a - ANGLE_180;
|
||||
spark->pitch = master->pitch;
|
||||
spark->roll = master->roll;
|
||||
|
||||
P_Thrust(spark, a, 16 * spark->scale);
|
||||
|
||||
P_SetScale(spark, (spark->destscale =
|
||||
FixedMul(scale, spark->scale)));
|
||||
}
|
||||
|
||||
static void K_SpawnBrakeVisuals(player_t *player)
|
||||
{
|
||||
const fixed_t scale = K_GetBrakeFXScale(player);
|
||||
|
||||
if (leveltime & 1)
|
||||
{
|
||||
angle_t aoff;
|
||||
UINT8 radm;
|
||||
|
||||
UINT8 wheel = 3;
|
||||
|
||||
if (player->drift)
|
||||
{
|
||||
/* brake-drifting: dust flies from outer wheel */
|
||||
wheel ^= 1 << (player->drift < 0);
|
||||
|
||||
aoff = 7 * ANG10;
|
||||
radm = 8;
|
||||
}
|
||||
else
|
||||
{
|
||||
aoff = ANG30;
|
||||
radm = 6;
|
||||
}
|
||||
|
||||
if (wheel & 1)
|
||||
{
|
||||
spawn_brake_dust(player->mo,
|
||||
aoff, radm, scale);
|
||||
}
|
||||
|
||||
if (wheel & 2)
|
||||
{
|
||||
spawn_brake_dust(player->mo,
|
||||
InvAngle(aoff), radm, scale);
|
||||
}
|
||||
}
|
||||
|
||||
if (leveltime % 4 == 0)
|
||||
S_StartSound(player->mo, sfx_s3k67);
|
||||
|
||||
/* vertical shaking, scales with speed */
|
||||
player->mo->spriteyoffset = P_RandomFlip(2 * scale);
|
||||
}
|
||||
|
||||
void K_SpawnDriftBoostClip(player_t *player)
|
||||
{
|
||||
mobj_t *clip;
|
||||
|
|
@ -7418,6 +7503,13 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
|||
}
|
||||
|
||||
K_KartEbrakeVisuals(player);
|
||||
|
||||
if (K_GetKartButtons(player) & BT_BRAKE &&
|
||||
P_IsObjectOnGround(player->mo) &&
|
||||
K_GetKartSpeed(player, false) / 2 <= player->speed)
|
||||
{
|
||||
K_SpawnBrakeVisuals(player);
|
||||
}
|
||||
}
|
||||
|
||||
void K_KartPlayerAfterThink(player_t *player)
|
||||
|
|
|
|||
|
|
@ -7185,6 +7185,9 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
mobj->renderflags |= RF_DONTDRAW;
|
||||
}
|
||||
break;
|
||||
case MT_BRAKEDUST:
|
||||
//mobj->renderflags ^= RF_DONTDRAW;
|
||||
break;
|
||||
case MT_JANKSPARK:
|
||||
if (!mobj->target)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue