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
|
// Brake drift sparks
|
||||||
"S_BRAKEDRIFT",
|
"S_BRAKEDRIFT",
|
||||||
|
|
||||||
|
// Brake dust
|
||||||
|
"S_BRAKEDUST1",
|
||||||
|
"S_BRAKEDUST2",
|
||||||
|
|
||||||
// Drift Smoke
|
// Drift Smoke
|
||||||
"S_DRIFTDUST1",
|
"S_DRIFTDUST1",
|
||||||
"S_DRIFTDUST2",
|
"S_DRIFTDUST2",
|
||||||
|
|
@ -5259,6 +5263,7 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t
|
||||||
"MT_WIPEOUTTRAIL",
|
"MT_WIPEOUTTRAIL",
|
||||||
"MT_DRIFTSPARK",
|
"MT_DRIFTSPARK",
|
||||||
"MT_BRAKEDRIFT",
|
"MT_BRAKEDRIFT",
|
||||||
|
"MT_BRAKEDUST",
|
||||||
"MT_DRIFTDUST",
|
"MT_DRIFTDUST",
|
||||||
"MT_DRIFTELECTRICITY",
|
"MT_DRIFTELECTRICITY",
|
||||||
"MT_DRIFTELECTRICSPARK",
|
"MT_DRIFTELECTRICSPARK",
|
||||||
|
|
|
||||||
31
src/info.c
31
src/info.c
|
|
@ -542,6 +542,7 @@ char sprnames[NUMSPRITES + 1][5] =
|
||||||
"WIPD", // Wipeout dust trail
|
"WIPD", // Wipeout dust trail
|
||||||
"DRIF", // Drift Sparks
|
"DRIF", // Drift Sparks
|
||||||
"BDRF", // Brake drift sparks
|
"BDRF", // Brake drift sparks
|
||||||
|
"BRAK", // Brake dust
|
||||||
"DRWS", // Drift dust sparks
|
"DRWS", // Drift dust sparks
|
||||||
"DREL", // Drift electricity
|
"DREL", // Drift electricity
|
||||||
"DRES", // Drift electric sparks
|
"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_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, 0, 3, {NULL}, 0, 0, S_DRIFTDUST2}, // S_DRIFTDUST1
|
||||||
{SPR_DUST, 1, 3, {NULL}, 0, 0, S_DRIFTDUST3}, // S_DRIFTDUST2
|
{SPR_DUST, 1, 3, {NULL}, 0, 0, S_DRIFTDUST3}, // S_DRIFTDUST2
|
||||||
{SPR_DUST, FF_TRANS20|2, 3, {NULL}, 0, 0, S_DRIFTDUST4}, // S_DRIFTDUST3
|
{SPR_DUST, FF_TRANS20|2, 3, {NULL}, 0, 0, S_DRIFTDUST4}, // S_DRIFTDUST3
|
||||||
|
|
@ -22951,6 +22955,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
S_NULL // raisestate
|
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
|
{ // MT_DRIFTDUST
|
||||||
-1, // doomednum
|
-1, // doomednum
|
||||||
S_DRIFTDUST1, // spawnstate
|
S_DRIFTDUST1, // spawnstate
|
||||||
|
|
|
||||||
|
|
@ -1089,6 +1089,7 @@ typedef enum sprite
|
||||||
SPR_WIPD, // Wipeout dust trail
|
SPR_WIPD, // Wipeout dust trail
|
||||||
SPR_DRIF, // Drift Sparks
|
SPR_DRIF, // Drift Sparks
|
||||||
SPR_BDRF, // Brake drift sparks
|
SPR_BDRF, // Brake drift sparks
|
||||||
|
SPR_BRAK, // Brake brak
|
||||||
SPR_DRWS, // Drift dust sparks
|
SPR_DRWS, // Drift dust sparks
|
||||||
SPR_DREL, // Drift electricity
|
SPR_DREL, // Drift electricity
|
||||||
SPR_DRES, // Drift electric sparks
|
SPR_DRES, // Drift electric sparks
|
||||||
|
|
@ -4289,6 +4290,10 @@ typedef enum state
|
||||||
// Brake drift sparks
|
// Brake drift sparks
|
||||||
S_BRAKEDRIFT,
|
S_BRAKEDRIFT,
|
||||||
|
|
||||||
|
// Brake dust
|
||||||
|
S_BRAKEDUST1,
|
||||||
|
S_BRAKEDUST2,
|
||||||
|
|
||||||
// Drift Smoke
|
// Drift Smoke
|
||||||
S_DRIFTDUST1,
|
S_DRIFTDUST1,
|
||||||
S_DRIFTDUST2,
|
S_DRIFTDUST2,
|
||||||
|
|
@ -6278,6 +6283,7 @@ typedef enum mobj_type
|
||||||
MT_WIPEOUTTRAIL,
|
MT_WIPEOUTTRAIL,
|
||||||
MT_DRIFTSPARK,
|
MT_DRIFTSPARK,
|
||||||
MT_BRAKEDRIFT,
|
MT_BRAKEDRIFT,
|
||||||
|
MT_BRAKEDUST,
|
||||||
MT_DRIFTDUST,
|
MT_DRIFTDUST,
|
||||||
MT_DRIFTELECTRICITY,
|
MT_DRIFTELECTRICITY,
|
||||||
MT_DRIFTELECTRICSPARK,
|
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!
|
static void K_SpawnBrakeDriftSparks(player_t *player) // Be sure to update the mobj thinker case too!
|
||||||
{
|
{
|
||||||
mobj_t *sparks;
|
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.
|
// 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);
|
sparks = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_BRAKEDRIFT);
|
||||||
P_SetTarget(&sparks->target, player->mo);
|
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);
|
K_MatchGenericExtraFlags(sparks, player->mo);
|
||||||
sparks->renderflags |= RF_DONTDRAW;
|
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)
|
void K_SpawnDriftBoostClip(player_t *player)
|
||||||
{
|
{
|
||||||
mobj_t *clip;
|
mobj_t *clip;
|
||||||
|
|
@ -7418,6 +7503,13 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
||||||
}
|
}
|
||||||
|
|
||||||
K_KartEbrakeVisuals(player);
|
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)
|
void K_KartPlayerAfterThink(player_t *player)
|
||||||
|
|
|
||||||
|
|
@ -7185,6 +7185,9 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
||||||
mobj->renderflags |= RF_DONTDRAW;
|
mobj->renderflags |= RF_DONTDRAW;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case MT_BRAKEDUST:
|
||||||
|
//mobj->renderflags ^= RF_DONTDRAW;
|
||||||
|
break;
|
||||||
case MT_JANKSPARK:
|
case MT_JANKSPARK:
|
||||||
if (!mobj->target)
|
if (!mobj->target)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue