Add bumpspark as a TA modifier
Also a bunch of other things in relation to that Kart mode has bumpspark off, Blan mode uses "keep drift, lose charge", and Tech has bumpspark enabled
This commit is contained in:
parent
0a74900e19
commit
fb5b72a600
16 changed files with 102 additions and 23 deletions
|
|
@ -162,6 +162,7 @@ static void KartSlopeBoost_OnChange(void);
|
|||
static void KartDrafting_OnChange(void);
|
||||
static void KartItemBreaker_OnChange(void);
|
||||
static void KartInvinType_OnChange(void);
|
||||
static void KartBumpSpark_OnChange(void);
|
||||
|
||||
static void Schedule_OnChange(void);
|
||||
|
||||
|
|
@ -534,7 +535,7 @@ consvar_t cv_kartusepwrlv = CVAR_INIT ("kartusepwrlv", "Yes", CV_NETVAR, CV_YesN
|
|||
consvar_t cv_kartpurpledrift = CVAR_INIT ("kartpurpledrift", "No", CV_NETVAR, CV_YesNo, KartPurpleDrift_OnChange);
|
||||
|
||||
static CV_PossibleValue_t bumpspark_cons_t[] = {{0, "Off"}, {1, "Remove Charge Only"}, {2, "On"}, {0, NULL}};
|
||||
consvar_t cv_kartbumpspark = CVAR_INIT ("kartbumpspark", "Remove Charge Only", CV_NETVAR, bumpspark_cons_t, NULL);
|
||||
consvar_t cv_kartbumpspark = CVAR_INIT ("kartbumpspark", "Remove Charge Only", CV_NETVAR|CV_CALL, bumpspark_cons_t, KartBumpSpark_OnChange);
|
||||
|
||||
consvar_t cv_kartbumpspring = CVAR_INIT ("kartbumpspring", "Yes", CV_NETVAR, CV_YesNo, NULL);
|
||||
|
||||
|
|
@ -7634,6 +7635,24 @@ static void KartInvinType_OnChange(void)
|
|||
}
|
||||
}
|
||||
|
||||
static void KartBumpSpark_OnChange(void)
|
||||
{
|
||||
if (K_CanChangeRules() == false)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (leveltime < starttime)
|
||||
{
|
||||
CONS_Printf(M_GetText("Bump spark type has been changed to \"%s\".\n"), cv_kartbumpspark.string);
|
||||
bumpsparkactive = (UINT8)cv_kartbumpspark.value;
|
||||
}
|
||||
else
|
||||
{
|
||||
CONS_Printf(M_GetText("Bump spark type will be changed to \"%s\" next round.\n"), cv_kartbumpspark.string);
|
||||
}
|
||||
}
|
||||
|
||||
static void Schedule_OnChange(void)
|
||||
{
|
||||
size_t i;
|
||||
|
|
|
|||
|
|
@ -1859,6 +1859,7 @@ static struct { const char *name; consvar_t *var; } HIDDENVARS[] = {
|
|||
{ "DUMMYATTACKINGSLIPDASH", &cv_dummyattackingslipdash },
|
||||
{ "DUMMYATTACKINGPURPLEDRIFT", &cv_dummyattackingpurpledrift },
|
||||
{ "DUMMYATTACKINGSLOPEBOOST", &cv_dummyattackingslopeboost },
|
||||
{ "DUMMYATTACKINGBUMPSPARK", &cv_dummyattackingbumpspark },
|
||||
{ "DUMMYSTAFF", &cv_dummystaff },
|
||||
{ "DUMMYMULTIPLAYER", &cv_dummymultiplayer },
|
||||
{ "DUMMYIP", &cv_dummyip },
|
||||
|
|
|
|||
|
|
@ -2740,6 +2740,10 @@ void G_BeginRecording(void)
|
|||
raflags |= RAF_PURPLEDRIFT;
|
||||
if (cv_dummyattackingslopeboost.value)
|
||||
raflags |= RAF_SLOPEBOOST;
|
||||
if (cv_dummyattackingbumpspark.value == BUMPSPARK_ALL)
|
||||
raflags |= RAF_BUMPSPARK;
|
||||
if (cv_dummyattackingbumpspark.value == BUMPSPARK_NOCHARGE)
|
||||
raflags |= RAF_BUMPDRIFT;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -41,6 +41,8 @@ typedef enum
|
|||
RAF_SLIPDASH = 1<<3,
|
||||
RAF_PURPLEDRIFT = 1<<4,
|
||||
RAF_SLOPEBOOST = 1<<5,
|
||||
RAF_BUMPDRIFT = 1<<6,
|
||||
RAF_BUMPSPARK = 1<<7,
|
||||
// up to 1<<31 is free
|
||||
} raflags_t;
|
||||
|
||||
|
|
|
|||
|
|
@ -483,14 +483,15 @@ SINT8 G_RecordPresetIndex(void)
|
|||
boolean slipdash = cv_dummyattackingslipdash.value;
|
||||
boolean purpledrift = cv_dummyattackingpurpledrift.value;
|
||||
boolean slopeboost = cv_dummyattackingslopeboost.value;
|
||||
boolean bumpspark = cv_dummyattackingbumpspark.value;
|
||||
|
||||
if (!rings && !stacking && !chaining && !slipdash && !purpledrift && !slopeboost)
|
||||
if (!rings && !stacking && !chaining && !slipdash && !purpledrift && !slopeboost && !bumpspark)
|
||||
return RP_KART;
|
||||
|
||||
if (stacking && chaining && slopeboost && !rings && !slipdash && !purpledrift)
|
||||
if (stacking && chaining && slopeboost && !rings && !slipdash && !purpledrift && (bumpspark == BUMPSPARK_ALL))
|
||||
return RP_TECH;
|
||||
|
||||
if (rings && stacking && chaining && slipdash && purpledrift && slopeboost)
|
||||
if (rings && stacking && chaining && slipdash && purpledrift && slopeboost && (bumpspark == BUMPSPARK_NOCHARGE))
|
||||
return RP_BLAN;
|
||||
|
||||
return RP_CUST;
|
||||
|
|
|
|||
|
|
@ -2363,7 +2363,7 @@ void K_SetScoreboardModStatus(const char *name, SINT8 active)
|
|||
CONS_Alert(CONS_WARNING, "Server mod '%s' does not exist so status cannot be changed.\n", name);
|
||||
}
|
||||
|
||||
#define BASEMODS 11
|
||||
#define BASEMODS 12
|
||||
static void K_DrawServerMods(INT32 x, INT32 y)
|
||||
{
|
||||
UINT8 i, j;
|
||||
|
|
@ -2380,7 +2380,8 @@ static void K_DrawServerMods(INT32 x, INT32 y)
|
|||
{"Chain Offroad", 0, &cv_kartchainingoffroad, -1, true},
|
||||
{"Slope Boost", 0, NULL, K_PurpleDriftActive() > 0, true},
|
||||
{"Drafting", 0, NULL, K_DraftingActive() > 0, true},
|
||||
{"Bump Spark", 0, &cv_kartbumpspark, -1, true},
|
||||
{"Bump Drift", 0, NULL, K_GetBumpSpark() > 0, true},
|
||||
{"Bump Spark", 0, NULL, K_GetBumpSpark() == BUMPSPARK_ALL, true},
|
||||
{"Bump Spring", 0, &cv_kartbumpspring, -1, true},
|
||||
{"Alt. Invin.", 0, NULL, K_GetKartInvinType() == KARTINVIN_ALTERN, true}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -6646,7 +6646,7 @@ void K_AwardScaledPlayerRings(player_t *player, SINT8 mode)
|
|||
// Returns the bumpspark value as an enum.
|
||||
INT32 K_GetBumpSpark(void)
|
||||
{
|
||||
return max(BUMPSPARK_NONE, min(BUMPSPARK_ALL, (bumpsparktype_t)cv_kartbumpspark.value));
|
||||
return max(BUMPSPARK_NONE, min(BUMPSPARK_ALL, (bumpsparktype_t)bumpsparkactive));
|
||||
}
|
||||
|
||||
/** \brief Decreases various kart timers and powers per frame. Called in P_PlayerThink in p_user.c
|
||||
|
|
|
|||
|
|
@ -323,6 +323,7 @@ boolean K_SlipdashActive(void);
|
|||
boolean K_SlopeBoostActive(void);
|
||||
boolean K_DraftingActive(void);
|
||||
boolean K_GetKartInvinType(void);
|
||||
INT32 K_GetBumpSpark(void);
|
||||
boolean K_BoostChain(player_t *player, INT32 timer, boolean chainsound);
|
||||
INT32 K_ChainOrDeincrementTime(player_t *player, INT32 timer, INT32 deincrement, boolean chainsound);
|
||||
boolean K_UsingLegacyCheckpoints(void);
|
||||
|
|
@ -353,8 +354,6 @@ typedef enum
|
|||
BUMPSPARK_ALL
|
||||
} bumpsparktype_t;
|
||||
|
||||
INT32 K_GetBumpSpark(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -4177,6 +4177,13 @@ static int lib_kGetKartInvinType(lua_State *L)
|
|||
return 1;
|
||||
}
|
||||
|
||||
// Gets the currently active bumpspark type.
|
||||
static int lib_kGetBumpSpark(lua_State *L)
|
||||
{
|
||||
lua_pushinteger(L, K_GetBumpSpark());
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Checks if current map is using legacy boss3 bassed checkpoints. Useful for map compat.
|
||||
static int lib_kUsingLegacyCheckpoints(lua_State *L)
|
||||
{
|
||||
|
|
@ -5266,6 +5273,7 @@ static luaL_Reg lib[] = {
|
|||
{"K_SlipdashActive",lib_kSlipdashActive},
|
||||
{"K_SlopeBoostActive",lib_kSlopeBoostActive},
|
||||
{"K_DraftingActive",lib_kDraftingActive},
|
||||
{"K_GetBumpSpark",lib_kGetBumpSpark},
|
||||
{"K_GetKartInvinType",lib_kGetKartInvinType},
|
||||
{"K_UsingLegacyCheckpoints",lib_kUsingLegacyCheckpoints},
|
||||
{"K_DoBoost",lib_kDoBoost},
|
||||
|
|
|
|||
|
|
@ -397,6 +397,9 @@ int LUA_PushGlobals(lua_State *L, const char *word)
|
|||
} else if (fastcmp(word,"draftingactive")) {
|
||||
lua_pushinteger(L, draftingactive);
|
||||
return 1;
|
||||
} else if (fastcmp(word,"bumpsparkactive")) {
|
||||
lua_pushinteger(L, bumpsparkactive);
|
||||
return 1;
|
||||
} else if (fastcmp(word,"purpledriftactive")) {
|
||||
lua_pushinteger(L, purpledriftactive);
|
||||
return 1;
|
||||
|
|
|
|||
51
src/m_menu.c
51
src/m_menu.c
|
|
@ -456,6 +456,9 @@ consvar_t cv_dummyattackingslipdash = CVAR_INIT ("dummyattackingslipdash", "Off"
|
|||
consvar_t cv_dummyattackingpurpledrift = CVAR_INIT ("dummyattackingpurpledrift", "Off", CV_HIDEN|CV_CALL|CV_NOINIT, CV_OnOff, Nextmap_OnChange);
|
||||
consvar_t cv_dummyattackingslopeboost = CVAR_INIT ("dummyattackingslopeboost", "Off", CV_HIDEN|CV_CALL|CV_NOINIT, CV_OnOff, Nextmap_OnChange);
|
||||
|
||||
static CV_PossibleValue_t dummybumpspark_cons_t[] = {{BUMPSPARK_NONE, "Off"}, {BUMPSPARK_NOCHARGE, "NoCharge"}, {BUMPSPARK_ALL, "On"}};
|
||||
consvar_t cv_dummyattackingbumpspark = CVAR_INIT ("dummyattackingbumpspark", "Off", CV_HIDEN|CV_CALL|CV_NOINIT, dummybumpspark_cons_t, Nextmap_OnChange);
|
||||
|
||||
static CV_PossibleValue_t dummygpdifficulty_cons_t[] = {{KARTSPEED_EASY, "Easy"}, {KARTSPEED_NORMAL, "Normal"}, {KARTSPEED_HARD, "Hard"}, {KARTSPEED_EXPERT, "Expert"}, {KARTGP_MASTER, "Master"}, {KARTGP_NIGHTMARE, "Nightmare"}, {0, NULL}};
|
||||
static CV_PossibleValue_t dummygpcup_cons_t[50] = {{1, "TEMP"}}; // A REALLY BIG NUMBER, SINCE THIS IS TEMP UNTIL NEW MENUS
|
||||
|
||||
|
|
@ -627,6 +630,14 @@ if (cv.value) \
|
|||
strcat(new_str, str); \
|
||||
}
|
||||
|
||||
#define ADDEQUALS(cv, str, num) \
|
||||
if (cv.value == num) \
|
||||
{ \
|
||||
len += 3; \
|
||||
new_str = Z_Realloc(new_str, len, PU_STATIC, NULL); \
|
||||
strcat(new_str, str); \
|
||||
}
|
||||
|
||||
char *M_AppendGametypeAndModName(void)
|
||||
{
|
||||
UINT8 len = 4;
|
||||
|
|
@ -649,6 +660,8 @@ char *M_AppendGametypeAndModName(void)
|
|||
ADD(cv_dummyattackingslipdash, "SD-")
|
||||
ADD(cv_dummyattackingpurpledrift, "PD-")
|
||||
ADD(cv_dummyattackingslopeboost, "SB-")
|
||||
ADDEQUALS(cv_dummyattackingbumpspark, "BD-", BUMPSPARK_NOCHARGE)
|
||||
ADDEQUALS(cv_dummyattackingbumpspark, "BS-", BUMPSPARK_ALL)
|
||||
|
||||
new_str[len-1] = '\0';
|
||||
|
||||
|
|
@ -2161,6 +2174,7 @@ void M_Init(void)
|
|||
CV_RegisterVar(&cv_dummyattackingslipdash);
|
||||
CV_RegisterVar(&cv_dummyattackingpurpledrift);
|
||||
CV_RegisterVar(&cv_dummyattackingslopeboost);
|
||||
CV_RegisterVar(&cv_dummyattackingbumpspark);
|
||||
|
||||
CV_RegisterVar(&cv_dummygpdifficulty);
|
||||
CV_RegisterVar(&cv_dummygpencore);
|
||||
|
|
@ -5853,11 +5867,11 @@ INT32 MR_ReplayStaff(INT32 choice)
|
|||
}
|
||||
|
||||
#define NUMPRESETS 3
|
||||
static boolean presets[NUMPRESETS][6] = {
|
||||
//rings stacking chaining slipdash purpledrift slopeboost
|
||||
{ false, false, false, false, false, false}, // SRB2Kart
|
||||
{ false, true, true, false, false, true}, // Tech
|
||||
{ true, true, true, true, true, true}, // BlanKart
|
||||
static INT32 presets[NUMPRESETS][7] = {
|
||||
//rings stacking chaining slipdash purpledrift slopeboost bumpspark
|
||||
{ 0, 0, 0, 0, 0, 0, BUMPSPARK_NONE}, // SRB2Kart
|
||||
{ 0, 1, 1, 0, 0, 1, BUMPSPARK_ALL}, // Tech
|
||||
{ 1, 1, 1, 1, 1, 1, BUMPSPARK_NOCHARGE}, // BlanKart
|
||||
};
|
||||
|
||||
INT32 MR_TimeAttackPreset(INT32 arg)
|
||||
|
|
@ -5866,12 +5880,27 @@ INT32 MR_TimeAttackPreset(INT32 arg)
|
|||
return false;
|
||||
|
||||
boolean *preset = presets[arg];
|
||||
CV_Set(&cv_dummyattackingrings, preset[0] ? "On" : "Off");
|
||||
CV_Set(&cv_dummyattackingstacking, preset[1] ? "On" : "Off");
|
||||
CV_Set(&cv_dummyattackingchaining, preset[2] ? "On" : "Off");
|
||||
CV_Set(&cv_dummyattackingslipdash, preset[3] ? "On" : "Off");
|
||||
CV_Set(&cv_dummyattackingpurpledrift, preset[4] ? "On" : "Off");
|
||||
CV_Set(&cv_dummyattackingslopeboost, preset[5] ? "On" : "Off");
|
||||
CV_Set(&cv_dummyattackingrings, (boolean)preset[0] ? "On" : "Off");
|
||||
CV_Set(&cv_dummyattackingstacking, (boolean)preset[1] ? "On" : "Off");
|
||||
CV_Set(&cv_dummyattackingchaining, (boolean)preset[2] ? "On" : "Off");
|
||||
CV_Set(&cv_dummyattackingslipdash, (boolean)preset[3] ? "On" : "Off");
|
||||
CV_Set(&cv_dummyattackingpurpledrift, (boolean)preset[4] ? "On" : "Off");
|
||||
CV_Set(&cv_dummyattackingslopeboost, (boolean)preset[5] ? "On" : "Off");
|
||||
|
||||
switch(preset[6])
|
||||
{
|
||||
case BUMPSPARK_ALL:
|
||||
CV_Set(&cv_dummyattackingbumpspark, "On");
|
||||
break;
|
||||
case BUMPSPARK_NOCHARGE:
|
||||
CV_Set(&cv_dummyattackingbumpspark, "NoCharge");
|
||||
break;
|
||||
case BUMPSPARK_NONE:
|
||||
/* FALLTHRU */
|
||||
default:
|
||||
CV_Set(&cv_dummyattackingbumpspark, "Off");
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
#undef NUMPRESETS
|
||||
|
|
|
|||
|
|
@ -422,6 +422,7 @@ extern consvar_t cv_dummygpdifficulty, cv_dummygpencore, cv_dummygpcup;
|
|||
extern consvar_t cv_dummymenuplayer, cv_dummyteam, cv_dummyspectate, cv_dummyscramble;
|
||||
extern consvar_t cv_dummyattackingrings, cv_dummyattackingstacking, cv_dummyattackingchaining;
|
||||
extern consvar_t cv_dummyattackingslipdash, cv_dummyattackingpurpledrift, cv_dummyattackingslopeboost;
|
||||
extern consvar_t cv_dummyattackingbumpspark;
|
||||
extern consvar_t cv_dummystaff;
|
||||
extern consvar_t cv_dummymultiplayer, cv_dummyip, cv_dummyname, cv_dummyfollower, cv_dummycolor;
|
||||
extern consvar_t cv_dummyserverpage;
|
||||
|
|
|
|||
|
|
@ -3479,9 +3479,7 @@ static void P_BouncePlayerMove(mobj_t *mo, TryMoveResult_t *result)
|
|||
mmomx = mo->player->rmomx;
|
||||
mmomy = mo->player->rmomy;
|
||||
|
||||
UINT32 bumpspark =
|
||||
max((modeattacking != ATTACKING_NONE) ? BUMPSPARK_NOCHARGE : BUMPSPARK_NONE,
|
||||
K_GetBumpSpark());
|
||||
UINT32 bumpspark = K_GetBumpSpark();
|
||||
|
||||
if ((bumpspark < BUMPSPARK_ALL) ||
|
||||
(modeattacking != ATTACKING_NONE && G_CompatLevel(0x0009)))
|
||||
|
|
|
|||
|
|
@ -606,6 +606,7 @@ extern boolean slipdashactive;
|
|||
extern boolean purpledriftactive;
|
||||
extern boolean slopeboostactive;
|
||||
extern boolean draftingactive;
|
||||
extern UINT8 bumpsparkactive;
|
||||
extern UINT16 bossdisabled;
|
||||
extern boolean stoppedclock;
|
||||
|
||||
|
|
|
|||
|
|
@ -5298,6 +5298,7 @@ static void P_NetArchiveMisc(savebuffer_t *save, boolean resending)
|
|||
WRITEUINT8(save->p, purpledriftactive);
|
||||
WRITEUINT8(save->p, slopeboostactive);
|
||||
WRITEUINT8(save->p, draftingactive);
|
||||
WRITEUINT8(save->p, bumpsparkactive);
|
||||
|
||||
for (i = 0; i < 12; i++)
|
||||
{
|
||||
|
|
@ -5685,6 +5686,7 @@ FUNCINLINE static ATTRINLINE boolean P_NetUnArchiveMisc(savebuffer_t *save, bool
|
|||
purpledriftactive = READUINT8(save->p);
|
||||
slopeboostactive = READUINT8(save->p);
|
||||
draftingactive = READUINT8(save->p);
|
||||
bumpsparkactive = READUINT8(save->p);
|
||||
|
||||
for (i = 0; i < 12; i++)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -154,6 +154,7 @@ boolean slipdashactive;
|
|||
boolean purpledriftactive;
|
||||
boolean slopeboostactive;
|
||||
boolean draftingactive;
|
||||
UINT8 bumpsparkactive;
|
||||
UINT16 bossdisabled;
|
||||
boolean stoppedclock;
|
||||
boolean levelloading;
|
||||
|
|
@ -8034,6 +8035,7 @@ static void P_InitLevelSettings(boolean reloadinggamestate)
|
|||
purpledriftactive = false;
|
||||
slopeboostactive = false;
|
||||
draftingactive = false;
|
||||
bumpsparkactive = 0;
|
||||
|
||||
if (cv_kartrings.value)
|
||||
ringsactive = true;
|
||||
|
|
@ -8056,6 +8058,8 @@ static void P_InitLevelSettings(boolean reloadinggamestate)
|
|||
if (cv_kartdrafting.value)
|
||||
draftingactive = true;
|
||||
|
||||
bumpsparkactive = (UINT8)cv_kartbumpspark.value;
|
||||
|
||||
invintype = (UINT8)cv_kartinvintype.value;
|
||||
|
||||
// emerald hunt
|
||||
|
|
@ -8146,6 +8150,10 @@ static void P_InitLevelSettings(boolean reloadinggamestate)
|
|||
purpledriftactive = true;
|
||||
if (raflags & RAF_SLOPEBOOST)
|
||||
slopeboostactive = true;
|
||||
if (raflags & RAF_BUMPSPARK)
|
||||
bumpsparkactive = BUMPSPARK_ALL;
|
||||
if (raflags & RAF_BUMPDRIFT)
|
||||
bumpsparkactive = BUMPSPARK_NOCHARGE;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -8155,6 +8163,8 @@ static void P_InitLevelSettings(boolean reloadinggamestate)
|
|||
chainingactive = cv_dummyattackingchaining.value;
|
||||
slipdashactive = cv_dummyattackingslipdash.value;
|
||||
slopeboostactive = cv_dummyattackingslopeboost.value;
|
||||
|
||||
bumpsparkactive = (UINT8)(cv_dummyattackingbumpspark.value);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
|
|||
Loading…
Reference in a new issue