Refactor and tweak afterimages, clean up drift release (closes #98)
I pinky promise I did NOT break drifting
This commit is contained in:
parent
6b6594e430
commit
33348e7c92
3 changed files with 77 additions and 108 deletions
|
|
@ -280,6 +280,10 @@ typedef enum
|
|||
khud_splitcolor, // Skincolor of the leading player
|
||||
khud_splitposition, // Who are we comparing to?
|
||||
|
||||
// Drifting
|
||||
khud_afterimagetime, // tics left for displaying afterimage
|
||||
khud_afterimagevalue, // what value the drift ended at
|
||||
|
||||
NUMKARTHUD
|
||||
} karthudtype_t;
|
||||
|
||||
|
|
|
|||
47
src/k_hud.c
47
src/k_hud.c
|
|
@ -5936,9 +5936,6 @@ static INT32 driftskins[] =
|
|||
SKINCOLOR_VIOLET,
|
||||
};
|
||||
|
||||
static INT32 afterval[MAXPLAYERS];
|
||||
static tic_t aftertime[MAXPLAYERS];
|
||||
|
||||
enum driftgauge_e
|
||||
{
|
||||
DGAUGE_NONE = 0,
|
||||
|
|
@ -6049,22 +6046,10 @@ static UINT8 driftrainbow[] = {
|
|||
|
||||
static UINT8 wifibars[] = { 6, 11, 16, 21 };
|
||||
|
||||
void K_ResetAfterImageValues(void)
|
||||
{
|
||||
for (INT32 i = 0; i < MAXPLAYERS; i++)
|
||||
{
|
||||
afterval[i] = 0;
|
||||
aftertime[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Based off https://github.com/GenericHeroGuy/ringracers-scripts/blob/master/src/sglua/Lua/HUD/driftgauge.lua
|
||||
// Original script by GenericHeroGuy, graphics by Spee
|
||||
void K_DrawDriftGauge(void)
|
||||
{
|
||||
// Reset stuff on level load
|
||||
if (leveltime <= 1)
|
||||
K_ResetAfterImageValues();
|
||||
// Actually have it enabled?
|
||||
if (!cv_driftgauge.value)
|
||||
return;
|
||||
|
|
@ -6105,12 +6090,6 @@ void K_DrawDriftGauge(void)
|
|||
if (cv_driftgauge.value == DGAUGE_LEGACYSMALL)
|
||||
basex += 10*FRACUNIT;
|
||||
|
||||
INT32 afterimage = max(0, (INT32)(aftertime[stplyrnum] - leveltime));
|
||||
if (afterimage)
|
||||
goto doafterimage;
|
||||
else if (!stplyr->drift)
|
||||
return;
|
||||
|
||||
INT32 driftval = K_GetKartDriftSparkValue(stplyr);
|
||||
INT32 driftcharge = min(driftval*4, stplyr->driftcharge);
|
||||
boolean rainbow = driftcharge >= driftval*4;
|
||||
|
|
@ -6118,6 +6097,15 @@ void K_DrawDriftGauge(void)
|
|||
const UINT8 backlevel = rainbow ? 4 : max(0, level - 1);
|
||||
UINT8 *cmap = R_GetTranslationColormap(TC_RAINBOW, rainbow ? 1 + (leveltime % FIRSTSUPERCOLOR) : driftskins[level], GTC_CACHE);
|
||||
|
||||
INT32 afterimage = stplyr->karthud[khud_afterimagetime];
|
||||
if (!stplyr->drift)
|
||||
{
|
||||
if (afterimage)
|
||||
goto doafterimage;
|
||||
else
|
||||
return;
|
||||
}
|
||||
|
||||
if (basepatch)
|
||||
{
|
||||
UINT8 *backcmap, *basecmap = K_UseColorHud() ? R_GetTranslationColormap(TC_DEFAULT, K_GetHudColor(), GTC_CACHE) : NULL;
|
||||
|
|
@ -6206,11 +6194,11 @@ void K_DrawDriftGauge(void)
|
|||
|
||||
doafterimage:;
|
||||
// right, also draw a cool number
|
||||
INT32 charge = afterimage ? afterval[stplyrnum] : driftcharge*100 / driftval;
|
||||
INT32 charge = (afterimage ? stplyr->karthud[khud_afterimagevalue] : driftcharge)*100 / driftval;
|
||||
if (afterimage)
|
||||
{
|
||||
flags |= V_TRANSLUCENT*2 - (V_10TRANS * (aftertime[stplyrnum] - leveltime));
|
||||
cmap = R_GetTranslationColormap(TC_RAINBOW, SKINCOLOR_SILVER, GTC_CACHE);
|
||||
flags |= V_TRANSLUCENT*2 - (V_10TRANS * afterimage);
|
||||
cmap = R_GetTranslationColormap(TC_RAINBOW, SKINCOLOR_GREY, GTC_CACHE);
|
||||
}
|
||||
|
||||
if (gauge->meterfont == OPPRNK_FONT)
|
||||
|
|
@ -6240,15 +6228,4 @@ doafterimage:;
|
|||
meterfont,
|
||||
va("%03d", charge)
|
||||
);*/
|
||||
|
||||
// and trigger the afterimage
|
||||
if (afterimage)
|
||||
;
|
||||
else if (stplyr->pflags & PF_DRIFTEND)
|
||||
{
|
||||
afterval[stplyrnum] = charge;
|
||||
aftertime[stplyrnum] = leveltime + 10;
|
||||
}
|
||||
else
|
||||
aftertime[stplyrnum] = 0;
|
||||
}
|
||||
|
|
|
|||
134
src/k_kart.c
134
src/k_kart.c
|
|
@ -6191,6 +6191,9 @@ void K_KartPlayerHUDUpdate(player_t *player)
|
|||
}
|
||||
else
|
||||
player->karthud[khud_cardanimation] = 0;
|
||||
|
||||
if (player->karthud[khud_afterimagetime])
|
||||
player->karthud[khud_afterimagetime]--;
|
||||
}
|
||||
|
||||
#undef RINGANIM_DELAYMAX
|
||||
|
|
@ -8609,13 +8612,16 @@ UINT8 K_GetKartDriftSparkStageForValue(const player_t *player, INT32 value)
|
|||
{
|
||||
const INT32 dsv = K_GetKartDriftSparkValue(player);
|
||||
|
||||
if (value < 0)
|
||||
return 0;
|
||||
|
||||
switch (value / dsv)
|
||||
{
|
||||
case 0: return 0;
|
||||
default: return 1;
|
||||
case 1: return 1;
|
||||
case 2: return 2;
|
||||
case 3: return K_PurpleDriftActive() ? 3 : 2;
|
||||
case 4: return 4;
|
||||
default: return 4;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -8660,10 +8666,8 @@ static void K_KartDrift(player_t *player, boolean onground)
|
|||
{
|
||||
fixed_t minspeed = (10 * player->mo->scale);
|
||||
fixed_t driftadditive = 24;
|
||||
INT32 dsone = K_GetKartDriftSparkValue(player);
|
||||
INT32 dstwo = dsone*2;
|
||||
INT32 dsthree = K_PurpleDriftActive() ? dsone*3 : dsone*4;
|
||||
INT32 dsfour = dsone*4;
|
||||
const INT32 dsv = K_GetKartDriftSparkValue(player);
|
||||
const UINT8 driftstage = K_GetKartDriftSparkStageForValue(player, player->driftcharge);
|
||||
UINT16 buttons = K_GetKartButtons(player);
|
||||
|
||||
// Grown players taking yellow spring panels will go below minspeed for one tic,
|
||||
|
|
@ -8676,73 +8680,60 @@ static void K_KartDrift(player_t *player, boolean onground)
|
|||
// Holding the Jump button will enable drifting.
|
||||
|
||||
// Drift Release (Moved here so you can't "chain" drifts)
|
||||
if ((player->drift != -5 && player->drift != 5)
|
||||
&& player->driftcharge < dsone
|
||||
&& onground)
|
||||
if (player->drift != -5 && player->drift != 5)
|
||||
{
|
||||
player->driftcharge = 0;
|
||||
}
|
||||
else if ((player->drift != -5 && player->drift != 5)
|
||||
&& (player->driftcharge >= dsone && player->driftcharge < dstwo)
|
||||
&& onground)
|
||||
{
|
||||
if (player->driftboost < 20)
|
||||
player->driftboost = 20;
|
||||
S_StartSound(player->mo, sfx_s23c);
|
||||
K_SpawnDriftEFX(player, 1);
|
||||
player->driftcharge = 0;
|
||||
}
|
||||
else if ((player->drift != -5 && player->drift != 5)
|
||||
&& (player->driftcharge >= dstwo && player->driftcharge < dsthree)
|
||||
&& onground)
|
||||
{
|
||||
if (player->driftboost < 50)
|
||||
player->driftboost = 50;
|
||||
if (driftstage && onground)
|
||||
{
|
||||
UINT8 boost = 0;
|
||||
|
||||
if (cv_kartdriftsounds.value)
|
||||
S_StartSound(player->mo, sfx_kc5b);
|
||||
S_StartSound(player->mo, sfx_s23c);
|
||||
if (!cv_kartdriftsounds.value || driftstage < 3)
|
||||
S_StartSound(player->mo, sfx_s23c);
|
||||
|
||||
K_SpawnDriftEFX(player, 2);
|
||||
player->driftcharge = 0;
|
||||
}
|
||||
else if ((player->drift != -5 && player->drift != 5)
|
||||
&& player->driftcharge < dsfour
|
||||
&& onground)
|
||||
{
|
||||
if (player->driftboost < 80)
|
||||
player->driftboost = 80;
|
||||
if (cv_kartdriftsounds.value)
|
||||
{
|
||||
S_StartSound(player->mo, sfx_kc5b);
|
||||
S_StartSound(player->mo, sfx_kc3c);
|
||||
S_StartSound(player->mo, sfx_s3k47);
|
||||
}
|
||||
else
|
||||
{
|
||||
S_StartSound(player->mo, sfx_s23c);
|
||||
}
|
||||
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;
|
||||
if (cv_kartdriftsounds.value)
|
||||
{
|
||||
S_StartSound(player->mo, sfx_kc5b);
|
||||
S_StartSound(player->mo, sfx_kc4d);
|
||||
}
|
||||
else
|
||||
{
|
||||
S_StartSound(player->mo, sfx_s23c);
|
||||
switch (driftstage)
|
||||
{
|
||||
case 1:
|
||||
boost = 20;
|
||||
break;
|
||||
case 2:
|
||||
boost = 50;
|
||||
if (cv_kartdriftsounds.value)
|
||||
S_StartSound(player->mo, sfx_kc5b);
|
||||
break;
|
||||
case 3:
|
||||
boost = 80;
|
||||
if (cv_kartdriftsounds.value)
|
||||
{
|
||||
S_StartSound(player->mo, sfx_kc5b);
|
||||
S_StartSound(player->mo, sfx_kc3c);
|
||||
S_StartSound(player->mo, sfx_s3k47);
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
boost = 125;
|
||||
if (cv_kartdriftsounds.value)
|
||||
{
|
||||
S_StartSound(player->mo, sfx_kc5b);
|
||||
S_StartSound(player->mo, sfx_kc4d);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (player->driftboost < boost)
|
||||
player->driftboost = boost;
|
||||
|
||||
K_SpawnDriftEFX(player, driftstage);
|
||||
}
|
||||
|
||||
K_SpawnDriftEFX(player, 4);
|
||||
player->driftcharge = 0;
|
||||
// afterimage, when you release the drift
|
||||
if (player->pflags & PF_DRIFTEND || (!onground && player->driftcharge))
|
||||
{
|
||||
if (!player->karthud[khud_afterimagetime])
|
||||
player->karthud[khud_afterimagevalue] = min(player->driftcharge, dsv*4);
|
||||
player->karthud[khud_afterimagetime] = 10;
|
||||
}
|
||||
|
||||
if (onground)
|
||||
player->driftcharge = 0;
|
||||
}
|
||||
|
||||
// Drifting: left or right?
|
||||
|
|
@ -8811,10 +8802,7 @@ static void K_KartDrift(player_t *player, boolean onground)
|
|||
player->pflags |= PF_GETSPARKS;
|
||||
|
||||
// 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 < dsfour && player->driftcharge+driftadditive >= dsfour))
|
||||
if (driftstage < K_GetKartDriftSparkStageForValue(player, player->driftcharge+driftadditive))
|
||||
{
|
||||
if (P_IsDisplayPlayer(player)) // UGHGHGH...
|
||||
S_StartSoundAtVolume(player->mo, sfx_s3ka2, 192); // Ugh...
|
||||
|
|
@ -8829,7 +8817,7 @@ static void K_KartDrift(player_t *player, boolean onground)
|
|||
// Spawn Sparks regardless of size
|
||||
if (!P_PlayerInPain(player) && player->drift != 0)
|
||||
{
|
||||
if (player->driftcharge >= dsone)
|
||||
if (driftstage)
|
||||
K_SpawnDriftSparks(player);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue