Make bubble shields pop if you "overinflate" them
This commit is contained in:
parent
7a2fd0be42
commit
d9accbd575
7 changed files with 70 additions and 8 deletions
|
|
@ -495,6 +495,10 @@ consvar_t cv_kartstacking_grow_speedboost = CVAR_INIT ("vanillaboost_grow_speedb
|
|||
consvar_t cv_kartstacking_grow_accelboost = CVAR_INIT ("vanillaboost_grow_accelboost", "0", CV_NETVAR|CV_CHEAT|CV_FLOAT, CV_Unsigned, NULL);
|
||||
consvar_t cv_kartstacking_grow_stackable = CVAR_INIT ("vanillaboost_grow_stackable", "Off", CV_NETVAR, CV_OnOff, NULL);
|
||||
|
||||
consvar_t cv_kartstacking_bubble_speedboost = CVAR_INIT ("vanillaboost_bubble_speedboost", "0.3", CV_NETVAR|CV_CHEAT|CV_FLOAT, CV_Unsigned, NULL);
|
||||
consvar_t cv_kartstacking_bubble_accelboost = CVAR_INIT ("vanillaboost_bubble_accelboost", "4.0", CV_NETVAR|CV_CHEAT|CV_FLOAT, CV_Unsigned, NULL);
|
||||
consvar_t cv_kartstacking_bubble_stackable = CVAR_INIT ("vanillaboost_bubble_stackable", "Off", CV_NETVAR, CV_OnOff, NULL);
|
||||
|
||||
consvar_t cv_kartstacking_flame_speedval = CVAR_INIT ("vanillaboost_flame_speedval", "0.90", CV_NETVAR|CV_CHEAT|CV_FLOAT, CV_Unsigned, NULL);
|
||||
consvar_t cv_kartstacking_flame_accelboost = CVAR_INIT ("vanillaboost_flame_accelboost", "6.0", CV_NETVAR|CV_CHEAT|CV_FLOAT, CV_Unsigned, NULL);
|
||||
consvar_t cv_kartstacking_flame_stackable = CVAR_INIT ("vanillaboost_flame_stackable", "Off", CV_NETVAR, CV_OnOff, NULL);
|
||||
|
|
|
|||
|
|
@ -156,6 +156,10 @@ extern consvar_t cv_kartstacking_grow_speedboost;
|
|||
extern consvar_t cv_kartstacking_grow_accelboost;
|
||||
extern consvar_t cv_kartstacking_grow_stackable;
|
||||
|
||||
extern consvar_t cv_kartstacking_bubble_speedboost;
|
||||
extern consvar_t cv_kartstacking_bubble_accelboost;
|
||||
extern consvar_t cv_kartstacking_bubble_stackable;
|
||||
|
||||
extern consvar_t cv_kartstacking_start_speedboost;
|
||||
extern consvar_t cv_kartstacking_start_accelboost;
|
||||
extern consvar_t cv_kartstacking_start_stackable;
|
||||
|
|
|
|||
|
|
@ -695,9 +695,12 @@ struct player_t
|
|||
boolean ringdrop; // Set when having ringdrop applied.
|
||||
|
||||
UINT8 curshield; // see kartshields_t
|
||||
|
||||
UINT8 bubblecool; // Bubble Shield use cooldown
|
||||
UINT8 bubbleblowup; // Bubble Shield usage blowup
|
||||
UINT8 bubblehealth; // Bubble Shield health
|
||||
UINT16 bubbleboost; // Bubble shield boost timer
|
||||
|
||||
UINT16 flamedash; // Flame Shield dash power
|
||||
INT32 flametimer; // Flame Shield dash meter left
|
||||
UINT8 flamestore; // Flame Shield reserve boost
|
||||
|
|
|
|||
49
src/k_kart.c
49
src/k_kart.c
|
|
@ -330,6 +330,10 @@ void K_RegisterKartStuff(void)
|
|||
CV_RegisterVar(&cv_kartstacking_grow_accelboost);
|
||||
CV_RegisterVar(&cv_kartstacking_grow_stackable);
|
||||
|
||||
CV_RegisterVar(&cv_kartstacking_bubble_speedboost);
|
||||
CV_RegisterVar(&cv_kartstacking_bubble_accelboost);
|
||||
CV_RegisterVar(&cv_kartstacking_bubble_stackable);
|
||||
|
||||
CV_RegisterVar(&cv_kartstacking_flame_speedval);
|
||||
CV_RegisterVar(&cv_kartstacking_flame_accelboost);
|
||||
CV_RegisterVar(&cv_kartstacking_flame_stackable);
|
||||
|
|
@ -2027,6 +2031,7 @@ tripwirepass_t K_TripwirePassConditions(const player_t *player)
|
|||
{
|
||||
if (
|
||||
player->invincibilitytimer ||
|
||||
player->bubbleboost ||
|
||||
(player->sneakertimer && player->realsneakertimer)
|
||||
)
|
||||
return TRIPWIRE_BLASTER;
|
||||
|
|
@ -2585,7 +2590,10 @@ static void K_GetKartBoostPower(player_t *player)
|
|||
{
|
||||
fixed_t invspeedboost = K_GetInvincibilitySpeed(player->invincibilitytimer);
|
||||
fixed_t invaccelboost = K_GetInvincibilityAccel(player->invincibilitytimer);
|
||||
K_DoBoost(player, invspeedboost, invaccelboost, INVINSTACKABLE, INVINSTACKABLE); // + 37.5% top speed, + 300% acceleration
|
||||
|
||||
// Legacy: + 37.5% top speed, + 300% acceleration
|
||||
// Alternative: + ???% top speed, + ???% acceleration
|
||||
K_DoBoost(player, invspeedboost, invaccelboost, INVINSTACKABLE, INVINSTACKABLE);
|
||||
}
|
||||
|
||||
if (player->growshrinktimer > 0) // Grow
|
||||
|
|
@ -2593,6 +2601,11 @@ static void K_GetKartBoostPower(player_t *player)
|
|||
K_DoBoost(player, GROWSPEEDBOOST, GROWACCELBOOST, GROWSTACKABLE, GROWSTACKABLE); // + 20% top speed, + 0% acceleration
|
||||
}
|
||||
|
||||
if (player->bubbleboost) // Bubble Shield popping boost
|
||||
{
|
||||
K_DoBoost(player, BUBBLESPEEDBOOST, BUBBLEACCELBOOST, BUBBLESTACKABLE, BUBBLESTACKABLE); // + 30% top speed, + 400% acceleration
|
||||
}
|
||||
|
||||
if (player->flamestore) // Flame Shield dash
|
||||
{
|
||||
fixed_t dash = K_FlameShieldDashVar(player->flamedash);
|
||||
|
|
@ -6843,7 +6856,8 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
|||
// Speed lines
|
||||
if (player->sneakertimer || player->ringboost
|
||||
|| player->driftboost || player->startboost
|
||||
|| player->walltransferboost)
|
||||
|| player->walltransferboost
|
||||
|| player->bubbleboost)
|
||||
{
|
||||
#if 0
|
||||
if (player->invincibilitytimer)
|
||||
|
|
@ -7094,6 +7108,11 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
|||
}
|
||||
}
|
||||
|
||||
if (player->bubbleboost)
|
||||
{
|
||||
player->bubbleboost--;
|
||||
}
|
||||
|
||||
if (player->growshrinktimer != 0)
|
||||
{
|
||||
if (player->growshrinktimer > 0)
|
||||
|
|
@ -8765,7 +8784,7 @@ INT16 K_GetKartTurnValue(const player_t *player, INT16 turnvalue)
|
|||
if (K_SlipdashActive() && K_Sliptiding(player)) // slight handling boost based on weight
|
||||
turnvalue = FixedMul(turnvalue, FRACUNIT + (10 - player->kartweight)*FRACUNIT/48);
|
||||
|
||||
if (player->invincibilitytimer || player->sneakertimer || player->growshrinktimer > 0)
|
||||
if (player->invincibilitytimer || player->sneakertimer || player->bubbleboost || player->growshrinktimer > 0)
|
||||
turnvalue = FixedMul(turnvalue, FixedDiv(5*FRACUNIT, 4*FRACUNIT));
|
||||
|
||||
if (player->flamedash && player->flamestore) // Reduce turning
|
||||
|
|
@ -9030,7 +9049,7 @@ static void K_KartDrift(player_t *player, boolean onground)
|
|||
player->pflags &= ~(PF_BRAKEDRIFT|PF_GETSPARKS);
|
||||
}
|
||||
|
||||
if ( (!(player->sneakertimer || player->flamestore || K_AltInvinSliptideCondition(player)))
|
||||
if ( (!(player->sneakertimer || player->flamestore || player->bubbleboost || K_AltInvinSliptideCondition(player)))
|
||||
|| (!player->cmd.turning)
|
||||
|| (!player->aizdriftstrat)
|
||||
|| (player->cmd.turning > 0) != (player->aizdriftstrat > 0))
|
||||
|
|
@ -10583,15 +10602,29 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
// (was blowup x4 before)
|
||||
player->bubblecool = player->bubbleblowup*2;
|
||||
|
||||
if (player->bubbleblowup > bubbletime*2)
|
||||
if (player->bubbleblowup > bubbletime*4)
|
||||
{
|
||||
// Jump straight to deflating the bubble.
|
||||
goto bubbledeflate;
|
||||
// If you overcharge the Bubble Shield at
|
||||
// any point, it pops and rockets you ahead.
|
||||
K_BreakBubbleShield(player);
|
||||
K_PopPlayerShield(player);
|
||||
|
||||
S_StartSoundAtVolume(player->mo, sfx_cdfm57, 170);
|
||||
K_PlayBoostTaunt(player->mo);
|
||||
#define BUBBLETHRUST (7 * FRACUNIT / 5)
|
||||
fixed_t spd =
|
||||
max(K_GetKartSpeed(player, true, true),
|
||||
FixedMul(player->speed, player->mo->scale));
|
||||
|
||||
P_InstaThrust(player->mo,
|
||||
player->mo->angle,
|
||||
FixedMul(spd, BUBBLETHRUST));
|
||||
#undef BUBBLETHRUST
|
||||
player->bubbleboost = 2 * sneakertime / 3;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
bubbledeflate:
|
||||
{
|
||||
boolean popped = false;
|
||||
if (player->bubbleblowup > bubbletime)
|
||||
|
|
|
|||
|
|
@ -114,6 +114,10 @@ extern vector3_t clusterpoint, clusterdtf;
|
|||
#define GROWACCELBOOST K_RAGuard(cv_kartstacking_grow_accelboost)
|
||||
#define GROWSTACKABLE K_RAGuard(cv_kartstacking_grow_stackable)
|
||||
|
||||
#define BUBBLESPEEDBOOST K_RAGuard(cv_kartstacking_bubble_speedboost)
|
||||
#define BUBBLEACCELBOOST K_RAGuard(cv_kartstacking_bubble_accelboost)
|
||||
#define BUBBLESTACKABLE K_RAGuard(cv_kartstacking_bubble_stackable)
|
||||
|
||||
#define FLAMESPEEDVAL K_RAGuard(cv_kartstacking_flame_speedval)
|
||||
#define FLAMEACCELBOOST K_RAGuard(cv_kartstacking_flame_accelboost)
|
||||
#define FLAMESTACKABLE K_RAGuard(cv_kartstacking_flame_stackable)
|
||||
|
|
|
|||
|
|
@ -269,6 +269,7 @@ enum player_e
|
|||
player_bubblecool,
|
||||
player_bubbleblowup,
|
||||
player_bubblehealth,
|
||||
player_bubbleboost,
|
||||
player_flamedash,
|
||||
player_flametimer,
|
||||
player_flamestore,
|
||||
|
|
@ -472,6 +473,7 @@ static const char *const player_opt[] = {
|
|||
"bubblecool",
|
||||
"bubbleblowup",
|
||||
"bubblehealth",
|
||||
"bubbleboost",
|
||||
"flamedash",
|
||||
"flametimer",
|
||||
"flamestore",
|
||||
|
|
@ -905,6 +907,9 @@ static int player_get(lua_State *L)
|
|||
case player_bubblehealth:
|
||||
lua_pushinteger(L, plr->bubblehealth);
|
||||
break;
|
||||
case player_bubbleboost:
|
||||
lua_pushinteger(L, plr->bubbleboost);
|
||||
break;
|
||||
case player_flamedash:
|
||||
lua_pushinteger(L, plr->flamedash);
|
||||
break;
|
||||
|
|
@ -1603,6 +1608,9 @@ static int player_set(lua_State *L)
|
|||
case player_bubblehealth:
|
||||
plr->bubblehealth = luaL_checkinteger(L, 3);
|
||||
break;
|
||||
case player_bubbleboost:
|
||||
plr->bubbleboost = luaL_checkinteger(L, 3);
|
||||
break;
|
||||
case player_flamedash:
|
||||
plr->flamedash = luaL_checkinteger(L, 3);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -339,9 +339,12 @@ static void P_NetArchivePlayers(savebuffer_t *save)
|
|||
WRITEUINT8(save->p, players[i].ringdrop);
|
||||
|
||||
WRITEUINT8(save->p, players[i].curshield);
|
||||
|
||||
WRITEUINT8(save->p, players[i].bubblecool);
|
||||
WRITEUINT8(save->p, players[i].bubbleblowup);
|
||||
WRITEUINT8(save->p, players[i].bubblehealth);
|
||||
WRITEUINT16(save->p, players[i].bubbleboost);
|
||||
|
||||
WRITEUINT16(save->p, players[i].flamedash);
|
||||
WRITEINT32(save->p, players[i].flametimer);
|
||||
WRITEUINT8(save->p, players[i].flamestore);
|
||||
|
|
@ -700,9 +703,12 @@ static void P_NetUnArchivePlayers(savebuffer_t *save)
|
|||
players[i].ringdrop = READUINT8(save->p);
|
||||
|
||||
players[i].curshield = READUINT8(save->p);
|
||||
|
||||
players[i].bubblecool = READUINT8(save->p);
|
||||
players[i].bubbleblowup = READUINT8(save->p);
|
||||
players[i].bubblehealth = READUINT8(save->p);
|
||||
players[i].bubbleboost = READUINT16(save->p);
|
||||
|
||||
players[i].flamedash = READUINT16(save->p);
|
||||
players[i].flametimer = READINT32(save->p);
|
||||
players[i].flamestore = READUINT8(save->p);
|
||||
|
|
|
|||
Loading…
Reference in a new issue