The purple drift...

...and more changes nobody asked for
This commit is contained in:
GenericHeroGuy 2025-01-31 03:22:30 +01:00
parent a90dce0c71
commit a6e7c6b70d
4 changed files with 84 additions and 29 deletions

View file

@ -429,6 +429,8 @@ consvar_t cv_kartwalltransfer = CVAR_INIT ("BG_forcewalltransfer", "Off", CV_NET
consvar_t cv_kartusepwrlv = CVAR_INIT ("kartusepwrlv", "Yes", CV_NETVAR|CV_CHEAT, CV_YesNo, NULL);
consvar_t cv_kartpurpledrift = CVAR_INIT ("kartpurpledrift", "No", CV_NETVAR|CV_CHEAT, CV_YesNo, NULL);
static CV_PossibleValue_t kartdebugitem_cons_t[] =
{
#define FOREACH( name, n ) { n, #name }

View file

@ -91,6 +91,7 @@ extern consvar_t cv_karteliminatelast;
extern consvar_t cv_kartusepwrlv;
extern consvar_t cv_kartrings;
extern consvar_t cv_kartwalltransfer;
extern consvar_t cv_kartpurpledrift;
extern consvar_t cv_votetime;

View file

@ -249,6 +249,8 @@ void K_RegisterKartStuff(void)
CV_RegisterVar(&cv_newspeedometer);
CV_RegisterVar(&cv_kartwalltransfer);
CV_RegisterVar(&cv_kartpurpledrift);
}
//}
@ -4192,7 +4194,7 @@ UINT16 K_DriftSparkColor(player_t *player, INT32 charge)
}
else if (charge >= ds*4)
{
// Stage 3: Rainbow
// Stage 4: Rainbow
if (charge <= (ds*4)+(32*3))
{
// transition
@ -4203,6 +4205,19 @@ UINT16 K_DriftSparkColor(player_t *player, INT32 charge)
color = K_RainbowColor(leveltime);
}
}
else if (cv_kartpurpledrift.value && charge >= ds*3)
{
// Stage 3: Purple
if (charge <= (ds*3)+(32*3))
{
// transition
color = SKINCOLOR_VIOLET;
}
else
{
color = SKINCOLOR_PURPLE;
}
}
else if (charge >= ds*2)
{
// Stage 2: Red
@ -4222,7 +4237,7 @@ UINT16 K_DriftSparkColor(player_t *player, INT32 charge)
if (charge <= (ds)+(32*3))
{
// transition
color = SKINCOLOR_PURPLE;
color = SKINCOLOR_MAGENTA;
}
else
{
@ -4271,8 +4286,7 @@ static void K_SpawnDriftSparks(player_t *player)
if (player->driftcharge >= K_GetKartDriftSparkValue(player)*4)
{
spark->color = (UINT8)(1 + (leveltime % (MAXSKINCOLORS-1)));
spark->color = 1 + (leveltime % (numskincolors-1));
if (player->driftcharge <= K_GetKartDriftSparkValue(player)*4+(32*3))
{
@ -4280,6 +4294,20 @@ static void K_SpawnDriftSparks(player_t *player)
P_SetScale(spark, (spark->destscale = spark->scale*3/2));
}
}
else if (cv_kartpurpledrift.value && player->driftcharge >= K_GetKartDriftSparkValue(player)*3)
{
if (player->driftcharge <= (K_GetKartDriftSparkValue(player)*3)+(24*3))
spark->color = SKINCOLOR_VIOLET; // transition
else
spark->color = SKINCOLOR_PURPLE;
if (player->driftcharge <= K_GetKartDriftSparkValue(player)*3+(32*3))
{
// transition
P_SetScale(spark, (spark->destscale = spark->scale*3/2));
}
}
else if (player->driftcharge >= K_GetKartDriftSparkValue(player)*2)
{
@ -8435,23 +8463,14 @@ static void K_SpawnDriftEFX(player_t *player,SINT8 level)
P_SetTarget(&overlay->target, player->mo);
P_SetScale(overlay, (overlay->destscale = player->mo->scale));
K_FlipFromObject(overlay, player->mo);
overlay->extravalue1 = 1;
overlay->extravalue1 = level;
if (level == 1)
{
overlay->color = SKINCOLOR_SAPPHIRE;
overlay->tics = overlay->tics/2; // Less time for blue drift
}
else if (level == 2)
{
overlay->color = SKINCOLOR_KETCHUP;
}
else if (level == 3)
{
overlay->extravalue2 = 1;
overlay->tics = 5*overlay->tics/2; // More time for rainbow drift
}
overlay->color = SKINCOLOR_PURPLE;
}
static void K_KartDrift(player_t *player, boolean onground)
@ -8460,7 +8479,8 @@ static void K_KartDrift(player_t *player, boolean onground)
fixed_t driftadditive = 24;
INT32 dsone = K_GetKartDriftSparkValue(player);
INT32 dstwo = dsone*2;
INT32 dsthree = dstwo*2;
INT32 dsthree = cv_kartpurpledrift.value ? dsone*3 : dsone*4;
INT32 dsfour = dsone*4;
// Grown players taking yellow spring panels will go below minspeed for one tic,
// and will then wrongdrift or have their sparks removed because of this.
@ -8489,7 +8509,7 @@ static void K_KartDrift(player_t *player, boolean onground)
player->driftcharge = 0;
}
else if ((player->drift != -5 && player->drift != 5)
&& player->driftcharge < dsthree
&& (player->driftcharge >= dstwo && player->driftcharge < dsthree)
&& onground)
{
if (player->driftboost < 50)
@ -8500,14 +8520,26 @@ static void K_KartDrift(player_t *player, boolean onground)
player->driftcharge = 0;
}
else if ((player->drift != -5 && player->drift != 5)
&& player->driftcharge >= dsthree
&& player->driftcharge < dsfour
&& onground)
{
if (player->driftboost < 80)
player->driftboost = 80;
S_StartSound(player->mo, sfx_kc5b);
S_StartSound(player->mo, sfx_kc3c);
S_StartSound(player->mo, sfx_s3k47);
K_SpawnDriftEFX(player, 3);
player->driftcharge = 0;
}
else if ((player->drift != -5 && player->drift != 5)
&& player->driftcharge >= dsfour
&& onground)
{
if (player->driftboost < 125)
player->driftboost = 125;
S_StartSound(player->mo, sfx_kc5b);
S_StartSound(player->mo, sfx_kc3c);
K_SpawnDriftEFX(player, 3);
S_StartSound(player->mo, sfx_kc4d);
K_SpawnDriftEFX(player, 4);
player->driftcharge = 0;
}
@ -8579,7 +8611,8 @@ static void K_KartDrift(player_t *player, boolean onground)
// Sound whenever you get a different tier of sparks
if ((player->driftcharge < dsone && player->driftcharge+driftadditive >= dsone)
|| (player->driftcharge < dstwo && player->driftcharge+driftadditive >= dstwo)
|| (player->driftcharge < dsthree && player->driftcharge+driftadditive >= dsthree))
|| (player->driftcharge < dsthree && player->driftcharge+driftadditive >= dsthree)
|| (player->driftcharge < dsfour && player->driftcharge+driftadditive >= dsfour))
{
if (P_IsDisplayPlayer(player)) // UGHGHGH...
S_StartSoundAtVolume(player->mo, sfx_s3ka2, 192); // Ugh...

View file

@ -7148,13 +7148,6 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
return false;
}
mobj->angle = mobj->target->angle;
P_MoveOrigin(mobj, mobj->target->x + P_ReturnThrustX(mobj, mobj->angle+ANGLE_180, mobj->target->radius),
mobj->target->y + P_ReturnThrustY(mobj, mobj->angle+ANGLE_180, mobj->target->radius), mobj->target->z);
P_SetScale(mobj, mobj->target->scale);
mobj->roll = mobj->target->roll;
mobj->pitch = mobj->target->pitch;
{
player_t *p = NULL;
@ -7163,14 +7156,40 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
else if (mobj->target->player)
p = mobj->target->player;
mobj->angle = mobj->extravalue1 && p ? p->drawangle : mobj->target->angle;
P_MoveOrigin(mobj, mobj->target->x + P_ReturnThrustX(mobj, mobj->angle+ANGLE_180, mobj->target->radius),
mobj->target->y + P_ReturnThrustY(mobj, mobj->angle+ANGLE_180, mobj->target->radius), mobj->target->z);
P_SetScale(mobj, mobj->target->scale);
mobj->roll = mobj->target->roll;
mobj->pitch = mobj->target->pitch;
if (p)
{
if (mobj->extravalue1)
{
if (p->driftboost > mobj->movecount)
{
P_SetMobjState(mobj, S_DRIFTBOOSTFLAME);
if (mobj->extravalue1 == 1)
mobj->tics /= 2; // Less time for blue drift
else if (mobj->extravalue1 == 3)
mobj->tics = 3*mobj->tics/2; // A little longer for purple drift
else if (mobj->extravalue1 == 4)
mobj->tics *= 2; // More time for rainbow drift
}
mobj->movecount = p->driftboost;
if (mobj->extravalue1 == 4)
P_SetScale(mobj, max(10, mobj->tics - 3*TICRATE/2)*mobj->scale/10);
// larger karts need larger flames
if (mobj->target->skin && !wadfiles[((skin_t *)mobj->target->skin)->wadnum]->compatmode)
{
P_SetScale(mobj, 9*mobj->scale/8);
mobj->spriteyoffset = -6*FRACUNIT;
}
if (p->driftboost == 0)
{
P_RemoveMobj(mobj);
@ -7198,7 +7217,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
mobj->frame &= ~FF_TRANS60;
}
if (mobj->extravalue2)
if (mobj->extravalue1 == 4)
{
mobj->color = K_RainbowColor(leveltime);
}