Add Panel Stack toggle for hardcode stacking
This commit is contained in:
parent
6fc5eb11f8
commit
616e0ecb88
8 changed files with 35 additions and 4 deletions
|
|
@ -459,6 +459,9 @@ consvar_t cv_kartstacking_sneaker_expertspeedboost = CVAR_INIT ("vanillaboost_sn
|
|||
consvar_t cv_kartstacking_sneaker_accelboost = CVAR_INIT ("vanillaboost_sneaker_accelboost", "8.0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
|
||||
consvar_t cv_kartstacking_sneaker_maxgrade = CVAR_INIT ("vanillaboost_sneaker_maxgrade", "3", CV_NETVAR|CV_CHEAT|CV_GUARD, CV_Natural, NULL);
|
||||
consvar_t cv_kartstacking_sneaker_stackable = CVAR_INIT ("vanillaboost_sneaker_stackable", "On", CV_NETVAR|CV_GUARD, CV_OnOff, NULL);
|
||||
consvar_t cv_kartstacking_panel_separate = CVAR_INIT ("vanillaboost_panel_separate", "Off", CV_NETVAR|CV_GUARD, CV_OnOff, NULL);
|
||||
consvar_t cv_kartstacking_panel_maxgrade = CVAR_INIT ("vanillaboost_panel_maxgrade", "2", CV_NETVAR|CV_CHEAT|CV_GUARD, CV_Natural, NULL);
|
||||
|
||||
|
||||
consvar_t cv_kartstacking_invincibility_legacyspeedboost = CVAR_INIT ("vanillaboost_invincibility_legacyspeedboost", "0.375", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
|
||||
consvar_t cv_kartstacking_invincibility_legacyaccelboost = CVAR_INIT ("vanillaboost_invincibility_legacyaccelboost", "3.0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
|
||||
|
|
|
|||
|
|
@ -109,6 +109,9 @@ extern consvar_t cv_kartstacking_sneaker_expertspeedboost;
|
|||
extern consvar_t cv_kartstacking_sneaker_accelboost;
|
||||
extern consvar_t cv_kartstacking_sneaker_maxgrade;
|
||||
extern consvar_t cv_kartstacking_sneaker_stackable;
|
||||
extern consvar_t cv_kartstacking_panel_separate;
|
||||
extern consvar_t cv_kartstacking_panel_maxgrade;
|
||||
|
||||
|
||||
extern consvar_t cv_kartstacking_invincibility_legacyspeedboost;
|
||||
extern consvar_t cv_kartstacking_invincibility_legacyaccelboost;
|
||||
|
|
|
|||
|
|
@ -589,6 +589,7 @@ struct player_t
|
|||
angle_t boostangle; // angle set when not spun out OR boosted to determine what direction you should keep going at if you're spun out and boosted.
|
||||
boostinfo_t boostinfo; // Stores values used for setting speed and accel boosts.
|
||||
UINT8 numsneakers; // Number of stacked sneakers
|
||||
UINT8 numpanels; // Number of stacked panels, used for panel stack toggle
|
||||
UINT8 numboosts; // Number of Boosts stacking this frame
|
||||
|
||||
fixed_t draftpower; // (0 to FRACUNIT) - Drafting power, doubles your top speed & acceleration at max
|
||||
|
|
|
|||
19
src/k_kart.c
19
src/k_kart.c
|
|
@ -303,6 +303,8 @@ void K_RegisterKartStuff(void)
|
|||
CV_RegisterVar(&cv_kartstacking_sneaker_accelboost);
|
||||
CV_RegisterVar(&cv_kartstacking_sneaker_maxgrade);
|
||||
CV_RegisterVar(&cv_kartstacking_sneaker_stackable);
|
||||
CV_RegisterVar(&cv_kartstacking_panel_separate);
|
||||
CV_RegisterVar(&cv_kartstacking_panel_maxgrade);
|
||||
|
||||
CV_RegisterVar(&cv_kartstacking_invincibility_legacyspeedboost);
|
||||
CV_RegisterVar(&cv_kartstacking_invincibility_legacyaccelboost);
|
||||
|
|
@ -2655,7 +2657,7 @@ static void K_GetKartBoostPower(player_t *player)
|
|||
{
|
||||
UINT8 i;
|
||||
fixed_t sneakerspeedboost = K_GetSneakerBoostSpeed();
|
||||
UINT8 numsneakers = player->numsneakers ? player->numsneakers : 1;
|
||||
UINT8 numsneakers = max(player->numsneakers + player->numpanels, 1);
|
||||
|
||||
for (i = 0; i < numsneakers; i++)
|
||||
{
|
||||
|
|
@ -4741,9 +4743,19 @@ void K_DoSneaker(player_t *player, INT32 type)
|
|||
player->sneakertimer = sneakerduration;
|
||||
player->realsneakertimer = sneakerduration;
|
||||
|
||||
if (player->sneakertimer && (player->floorboost == 0 || player->floorboost == 3))
|
||||
if (SEPARATEPANELS && (type == SNEAKERTYPE_PANEL || type == SNEAKERTYPE_WATERPANEL))
|
||||
{
|
||||
player->numsneakers = CLAMP(player->numsneakers+1, 0, stackingactive ? MAXSNEAKERSTACK : 1);
|
||||
if (player->sneakertimer && (player->floorboost == 0 || player->floorboost == 3))
|
||||
{
|
||||
player->numpanels = CLAMP(player->numpanels+1, 0, stackingactive ? MAXPANELSTACK : 1);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (player->sneakertimer && (player->floorboost == 0 || player->floorboost == 3))
|
||||
{
|
||||
player->numsneakers = CLAMP(player->numsneakers+1, 0, stackingactive ? MAXSNEAKERSTACK : 1);
|
||||
}
|
||||
}
|
||||
|
||||
if (type == SNEAKERTYPE_WATERPANEL)
|
||||
|
|
@ -7029,6 +7041,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
|||
{
|
||||
player->mo->flags2 &= ~MF2_WATERRUN;
|
||||
player->numsneakers = 0;
|
||||
player->numpanels = 0;
|
||||
}
|
||||
|
||||
if (player->realsneakertimer)
|
||||
|
|
|
|||
|
|
@ -108,6 +108,8 @@ extern vector3_t clusterpoint, clusterdtf;
|
|||
#define SNEAKERACCELBOOST CV_Get(&cv_kartstacking_sneaker_accelboost)
|
||||
#define MAXSNEAKERSTACK CV_Get(&cv_kartstacking_sneaker_maxgrade)
|
||||
#define SNEAKERSTACKABLE CV_Get(&cv_kartstacking_sneaker_stackable)
|
||||
#define SEPARATEPANELS CV_Get(&cv_kartstacking_panel_separate)
|
||||
#define MAXPANELSTACK CV_Get(&cv_kartstacking_panel_maxgrade)
|
||||
|
||||
#define INVINSPEEDBOOSTLGC CV_Get(&cv_kartstacking_invincibility_legacyspeedboost)
|
||||
#define INVINACCELBOOSTLGC CV_Get(&cv_kartstacking_invincibility_legacyaccelboost)
|
||||
|
|
|
|||
|
|
@ -304,6 +304,7 @@ enum player_e
|
|||
player_boostangle,
|
||||
player_boostinfo,
|
||||
player_numsneakers,
|
||||
player_numpanels,
|
||||
player_numboosts,
|
||||
player_draftpower,
|
||||
player_draftleeway,
|
||||
|
|
@ -519,6 +520,7 @@ static const char *const player_opt[] = {
|
|||
"boostangle",
|
||||
"boostinfo",
|
||||
"numsneakers",
|
||||
"numpanels",
|
||||
"numboosts",
|
||||
"draftpower",
|
||||
"draftleeway",
|
||||
|
|
@ -906,6 +908,9 @@ static int player_get(lua_State *L)
|
|||
case player_numsneakers:
|
||||
lua_pushinteger(L, plr->numsneakers);
|
||||
break;
|
||||
case player_numpanels:
|
||||
lua_pushinteger(L, plr->numpanels);
|
||||
break;
|
||||
case player_numboosts:
|
||||
lua_pushinteger(L, plr->numboosts);
|
||||
break;
|
||||
|
|
@ -1653,6 +1658,9 @@ static int player_set(lua_State *L)
|
|||
case player_numsneakers:
|
||||
plr->numsneakers = luaL_checkinteger(L, 3);
|
||||
break;
|
||||
case player_numpanels:
|
||||
plr->numpanels = luaL_checkinteger(L, 3);
|
||||
break;
|
||||
case player_numboosts:
|
||||
plr->numboosts = luaL_checkinteger(L, 3);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -2314,7 +2314,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
|||
|| inflictor->type == MT_JAWZ || inflictor->type == MT_JAWZ_SHIELD || inflictor->type == MT_JAWZ_DUD
|
||||
|| inflictor->type == MT_SMK_THWOMP || inflictor->player)))
|
||||
{
|
||||
player->sneakertimer = player->numsneakers = 0;
|
||||
player->sneakertimer = player->numsneakers = player->numpanels = 0;
|
||||
player->flamestore = player->flamedash = 0;
|
||||
player->bubbleboost = 0;
|
||||
player->mo->flags2 &= ~MF2_WATERRUN;
|
||||
|
|
|
|||
|
|
@ -611,6 +611,7 @@ static void P_NetSyncPlayers(savebuffer_t *save)
|
|||
SYNC(players[i].accelboost);
|
||||
SYNC(players[i].boostangle);
|
||||
SYNC(players[i].numsneakers);
|
||||
SYNC(players[i].numpanels);
|
||||
SYNC(players[i].numboosts);
|
||||
|
||||
SYNC(players[i].draftpower);
|
||||
|
|
|
|||
Loading…
Reference in a new issue