[PATCH} Allow min and max ringcap to be set via cvars and lua
Thanks minenice for the patch!
This commit is contained in:
parent
8d22a37b4b
commit
7b63ac3724
13 changed files with 76 additions and 22 deletions
|
|
@ -450,6 +450,10 @@ consvar_t cv_karteliminatelast = CVAR_INIT ("karteliminatelast", "Yes", CV_NETVA
|
|||
// Toggles for new features
|
||||
consvar_t cv_kartrings = CVAR_INIT ("kartrings", "No", CV_NETVAR|CV_CALL|CV_NOINIT, CV_YesNo, KartRings_OnChange);
|
||||
|
||||
static CV_PossibleValue_t ringsmin_cons_t[] = {{-32000, "MIN"}, {0, "MAX"}, {0, NULL}};
|
||||
consvar_t cv_kartringsmin = CVAR_INIT ("kartringsmin", "-20", CV_NETVAR, ringsmin_cons_t, NULL);
|
||||
consvar_t cv_kartringsmax = CVAR_INIT ("kartringsmax", "20", CV_NETVAR, CV_Unsigned, NULL);
|
||||
|
||||
// Stacking related
|
||||
consvar_t cv_kartstacking = CVAR_INIT ("kartstacking", "No", CV_NETVAR|CV_CALL|CV_NOINIT, CV_YesNo, KartStacking_OnChange);
|
||||
consvar_t cv_kartstacking_diminishparam = CVAR_INIT ("kartstacking_diminishparam", "0.32", CV_NETVAR|CV_CHEAT|CV_FLOAT, CV_Unsigned, NULL);
|
||||
|
|
|
|||
|
|
@ -122,6 +122,8 @@ extern consvar_t cv_kartbot_basetrackcomplexity;
|
|||
extern consvar_t cv_karteliminatelast;
|
||||
extern consvar_t cv_kartusepwrlv;
|
||||
extern consvar_t cv_kartrings;
|
||||
extern consvar_t cv_kartringsmin;
|
||||
extern consvar_t cv_kartringsmax;
|
||||
|
||||
extern consvar_t cv_kartstacking;
|
||||
extern consvar_t cv_kartstacking_diminishparam;
|
||||
|
|
|
|||
|
|
@ -650,6 +650,8 @@ struct player_t
|
|||
|
||||
// player's ring count
|
||||
SINT8 rings;
|
||||
SINT8 ringmin; // minimum rings
|
||||
SINT8 ringmax; // maximum rings
|
||||
UINT8 pickuprings; // Number of rings being picked up before added to the counter (prevents rings from being deleted forever over 20)
|
||||
UINT8 ringdelay; // (0 to 3) - 3 tic delay between every ring usage
|
||||
UINT16 ringboost; // Ring boost timer
|
||||
|
|
|
|||
10
src/g_game.c
10
src/g_game.c
|
|
@ -2413,6 +2413,8 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps)
|
|||
botStyle_e style;
|
||||
|
||||
INT16 rings;
|
||||
INT16 minrings;
|
||||
INT16 maxrings;
|
||||
angle_t playerangleturn;
|
||||
|
||||
UINT8 botdiffincrease;
|
||||
|
|
@ -2494,6 +2496,8 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps)
|
|||
karmapoints = 0;
|
||||
wanted = 0;
|
||||
rings = 5;
|
||||
minrings = cv_kartringsmin.value;
|
||||
maxrings = cv_kartringsmax.value;
|
||||
kickstartaccel = 0;
|
||||
lastsafelap = 0;
|
||||
lastsafestarpost = 0;
|
||||
|
|
@ -2543,6 +2547,10 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps)
|
|||
karmapoints = players[player].karmapoints;
|
||||
wanted = players[player].wanted;
|
||||
rings = players[player].rings;
|
||||
|
||||
minrings = players[player].ringmin;
|
||||
maxrings = players[player].ringmax;
|
||||
|
||||
kickstartaccel = players[player].kickstartaccel;
|
||||
|
||||
nocontrol = players[player].nocontrol;
|
||||
|
|
@ -2636,6 +2644,8 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps)
|
|||
p->botvars.style = style;
|
||||
p->botvars.difficulty = botdifficulty;
|
||||
p->rings = rings;
|
||||
p->ringmin = minrings;
|
||||
p->ringmax = maxrings;
|
||||
p->botvars.diffincrease = botdiffincrease;
|
||||
p->botvars.rival = botrival;
|
||||
p->xtralife = xtralife;
|
||||
|
|
|
|||
|
|
@ -520,7 +520,7 @@ static BlockItReturn_t K_FindObjectsForNudging(mobj_t *thing)
|
|||
break;
|
||||
}
|
||||
|
||||
if ((RINGTOTAL(g_nudgeSearch.botmo->player) < 20 && !(g_nudgeSearch.botmo->player->pflags & PF_RINGLOCK)
|
||||
if ((RINGTOTAL(g_nudgeSearch.botmo->player) < g_nudgeSearch.botmo->player->ringmax && !(g_nudgeSearch.botmo->player->pflags & PF_RINGLOCK)
|
||||
&& P_CanPickupItem(g_nudgeSearch.botmo->player, 0))
|
||||
&& !thing->extravalue1
|
||||
&& (g_nudgeSearch.botmo->player->itemtype != KITEM_THUNDERSHIELD))
|
||||
|
|
|
|||
18
src/k_hud.c
18
src/k_hud.c
|
|
@ -2533,6 +2533,8 @@ static void K_drawRingMeter(void)
|
|||
UINT8 *ringmap = NULL;
|
||||
boolean colorring = false;
|
||||
SINT8 ringcount = stplyr->rings;
|
||||
SINT8 overring = stplyr->rings % 20;
|
||||
SINT8 ringmax = stplyr->ringmax;
|
||||
INT32 fx = 0, fy = 0, splitflags = 0; // stuff for 3p / 4p splitscreen.
|
||||
|
||||
rn[0] = ((abs(ringcount) / 10) % 10);
|
||||
|
|
@ -2549,7 +2551,9 @@ static void K_drawRingMeter(void)
|
|||
ringmap = R_GetTranslationColormap(TC_RAINBOW, SKINCOLOR_CRIMSON, GTC_CACHE);
|
||||
colorring = true;
|
||||
}
|
||||
else if (ringcount >= 20) // Maxed out
|
||||
else if (ringcount >= 20) // (placeholder) over-ring
|
||||
ringmap = R_GetTranslationColormap(TC_RAINBOW, SKINCOLOR_BLUE, GTC_CACHE);
|
||||
else if (ringcount >= ringmax) // Maxed out
|
||||
ringmap = R_GetTranslationColormap(TC_RAINBOW, SKINCOLOR_YELLOW, GTC_CACHE);
|
||||
|
||||
if (r_splitscreen > 1)
|
||||
|
|
@ -2589,12 +2593,15 @@ static void K_drawRingMeter(void)
|
|||
{
|
||||
V_DrawMappedPatch(fx-5, fy-11 + ringoffsety, V_HUDTRANS|splitflags, kp_ringdebtminus, ringmap);
|
||||
}
|
||||
|
||||
#if 0
|
||||
if (stplyr->rings < 0)
|
||||
{
|
||||
// Invert the ring count
|
||||
ringcount = -ringcount;
|
||||
}
|
||||
#endif
|
||||
// clamp and invert when needed for the bar
|
||||
ringcount = CLAMP(abs(ringcount), -20, 20);
|
||||
|
||||
if (rn[1] == 1 && ringcount == 11)
|
||||
V_DrawMappedPatch(fx+2, fy-11 + ringoffsety, V_HUDTRANS|splitflags, kp_facenum[rn[0]], ringmap);
|
||||
|
|
@ -2620,6 +2627,13 @@ static void K_drawRingMeter(void)
|
|||
barcolors[3] = 40;
|
||||
indebt = true;
|
||||
}
|
||||
else if (stplyr->rings > 20)
|
||||
{
|
||||
barcolors[0] = 132;
|
||||
barcolors[1] = 131;
|
||||
barcolors[2] = 128;
|
||||
barcolors[3] = 154;
|
||||
}
|
||||
|
||||
if (!indebt || (indebt && (leveltime/5 & 1)))
|
||||
{
|
||||
|
|
|
|||
22
src/k_kart.c
22
src/k_kart.c
|
|
@ -294,6 +294,8 @@ void K_RegisterKartStuff(void)
|
|||
CV_RegisterVar(&cv_lessflicker);
|
||||
|
||||
CV_RegisterVar(&cv_kartrings);
|
||||
CV_RegisterVar(&cv_kartringsmin);
|
||||
CV_RegisterVar(&cv_kartringsmax);
|
||||
|
||||
// Stacking
|
||||
CV_RegisterVar(&cv_kartstacking);
|
||||
|
|
@ -1811,8 +1813,8 @@ static void K_KartItemRoulette(player_t *player, ticcmd_t *cmd)
|
|||
// Being in ring debt occasionally forces Super Ring on you if you mashed
|
||||
if ((K_RingsActive() == true) && mashed && player->rings < 0 && cv_superring.value)
|
||||
{
|
||||
INT32 debtamount = min(20, abs(player->rings));
|
||||
if (P_RandomChance((debtamount*FRACUNIT)/20))
|
||||
INT32 debtamount = min(abs(player->ringmin), abs(player->rings));
|
||||
if (P_RandomChance((debtamount*FRACUNIT)/abs(player->ringmin)))
|
||||
{
|
||||
K_KartGetItemResult(player, KITEM_SUPERRING);
|
||||
player->itemblink = TICRATE;
|
||||
|
|
@ -4408,11 +4410,11 @@ void K_AwardPlayerRings(player_t *player, UINT16 rings, boolean overload)
|
|||
RINGTOTAL(player) + (player->superring);
|
||||
|
||||
/* capped at 20 rings */
|
||||
if ((totalrings + rings) > 20)
|
||||
if ((totalrings + rings) > player->ringmax)
|
||||
{
|
||||
if (totalrings >= 20)
|
||||
if (totalrings >= player->ringmax)
|
||||
return; // woah dont let that go negative buster
|
||||
rings = (20 - totalrings);
|
||||
rings = (player->ringmax - totalrings);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -7599,7 +7601,7 @@ static inline BlockItReturn_t PIT_AttractingRings(mobj_t *thing)
|
|||
return BMIT_CONTINUE; // Too far away
|
||||
}
|
||||
|
||||
if (RINGTOTAL(attractmo->player) >= 20 || (attractmo->player->pflags & PF_RINGLOCK))
|
||||
if (RINGTOTAL(attractmo->player) >= attractmo->player->ringmax || (attractmo->player->pflags & PF_RINGLOCK))
|
||||
{
|
||||
// Already reached max -- just joustle rings around.
|
||||
|
||||
|
|
@ -8110,10 +8112,10 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
|||
}
|
||||
else
|
||||
{
|
||||
if (player->rings > 20)
|
||||
player->rings = 20;
|
||||
else if (player->rings < -20)
|
||||
player->rings = -20;
|
||||
if (player->rings > player->ringmax)
|
||||
player->rings = player->ringmax;
|
||||
else if (player->rings < player->ringmin)
|
||||
player->rings = player->ringmin;
|
||||
}
|
||||
|
||||
if (comeback == false || !(gametyperules & GTR_KARMA) || (player->pflags & PF_ELIMINATED))
|
||||
|
|
|
|||
|
|
@ -252,6 +252,8 @@ enum player_e
|
|||
player_throwdir,
|
||||
player_sadtimer,
|
||||
player_rings,
|
||||
player_ringmin,
|
||||
player_ringmax,
|
||||
player_pickuprings,
|
||||
player_ringdelay,
|
||||
player_ringboost,
|
||||
|
|
@ -447,6 +449,8 @@ static const char *const player_opt[] = {
|
|||
"throwdir",
|
||||
"sadtimer",
|
||||
"rings",
|
||||
"ringmin",
|
||||
"ringmax",
|
||||
"pickuprings",
|
||||
"ringdelay",
|
||||
"ringboost",
|
||||
|
|
@ -838,6 +842,12 @@ static int player_get(lua_State *L)
|
|||
case player_rings:
|
||||
lua_pushinteger(L, plr->rings);
|
||||
break;
|
||||
case player_ringmin:
|
||||
lua_pushinteger(L, plr->ringmin);
|
||||
break;
|
||||
case player_ringmax:
|
||||
lua_pushinteger(L, plr->ringmax);
|
||||
break;
|
||||
case player_pickuprings:
|
||||
lua_pushinteger(L, plr->pickuprings);
|
||||
break;
|
||||
|
|
@ -1512,6 +1522,12 @@ static int player_set(lua_State *L)
|
|||
case player_rings:
|
||||
plr->rings = luaL_checkinteger(L, 3);
|
||||
break;
|
||||
case player_ringmin:
|
||||
plr->ringmin = luaL_checkinteger(L, 3);
|
||||
break;
|
||||
case player_ringmax:
|
||||
plr->ringmax = luaL_checkinteger(L, 3);
|
||||
break;
|
||||
case player_pickuprings:
|
||||
plr->pickuprings = luaL_checkinteger(L, 3);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -3274,7 +3274,7 @@ void A_AttractChase(mobj_t *actor)
|
|||
actor->cusval = 1;
|
||||
|
||||
if ((actor->tracer->player->itemtype == KITEM_THUNDERSHIELD
|
||||
&& RINGTOTAL(actor->tracer->player) < 20
|
||||
&& RINGTOTAL(actor->tracer->player) < actor->tracer->player->ringmax
|
||||
&& !(actor->tracer->player->pflags & PF_RINGLOCK))
|
||||
//&& P_CheckSight(actor, actor->tracer)
|
||||
)
|
||||
|
|
|
|||
|
|
@ -679,7 +679,7 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
|
|||
return;
|
||||
|
||||
// Reached the cap, don't waste 'em!
|
||||
if (RINGTOTAL(player) >= 20)
|
||||
if (RINGTOTAL(player) >= player->ringmax)
|
||||
return;
|
||||
|
||||
special->momx = special->momy = special->momz = 0;
|
||||
|
|
|
|||
|
|
@ -319,6 +319,8 @@ static void P_NetArchivePlayers(savebuffer_t *save)
|
|||
WRITEUINT8(save->p, players[i].sadtimer);
|
||||
|
||||
WRITESINT8(save->p, players[i].rings);
|
||||
WRITESINT8(save->p, players[i].ringmin);
|
||||
WRITESINT8(save->p, players[i].ringmax);
|
||||
WRITEUINT8(save->p, players[i].pickuprings);
|
||||
WRITEUINT8(save->p, players[i].ringdelay);
|
||||
WRITEUINT16(save->p, players[i].ringboost);
|
||||
|
|
@ -666,6 +668,8 @@ static void P_NetUnArchivePlayers(savebuffer_t *save)
|
|||
players[i].sadtimer = READUINT8(save->p);
|
||||
|
||||
players[i].rings = READSINT8(save->p);
|
||||
players[i].ringmin = READSINT8(save->p);
|
||||
players[i].ringmax = READSINT8(save->p);
|
||||
players[i].pickuprings = READUINT8(save->p);
|
||||
players[i].ringdelay = READUINT8(save->p);
|
||||
players[i].ringboost = READUINT16(save->p);
|
||||
|
|
|
|||
|
|
@ -4116,13 +4116,13 @@ boolean P_ProcessSpecial(activator_t *activator, INT16 special, INT32 *args, cha
|
|||
if (mo->player->pflags & PF_RINGLOCK)
|
||||
return false;
|
||||
|
||||
// args[2]: don't cap rings to 20
|
||||
// args[2]: don't cap rings to player's max rings
|
||||
K_AwardPlayerRings(mo->player, rings, args[2]);
|
||||
}
|
||||
else
|
||||
{
|
||||
// args[2]: cap rings to -20 instead of 0
|
||||
SINT8 baseline = (args[2] ? -20 : 0);
|
||||
// args[2]: cap rings to player's min rings instead of 0
|
||||
SINT8 baseline = (args[2] ? mo->player->ringmin : 0);
|
||||
|
||||
// Don't push you below baseline
|
||||
if (mo->player->rings <= baseline)
|
||||
|
|
|
|||
|
|
@ -506,10 +506,10 @@ INT32 P_GivePlayerRings(player_t *player, INT32 num_rings)
|
|||
return 0;
|
||||
|
||||
test = player->rings + num_rings;
|
||||
if (test > 20) // Caps at 20 rings, sorry!
|
||||
num_rings -= (test-20);
|
||||
else if (test < -20) // Chaotix ring debt!
|
||||
num_rings -= (test+20);
|
||||
if (test > player->ringmax) // Caps at 20 rings, sorry!
|
||||
num_rings -= (test-player->ringmax);
|
||||
else if (test < player->ringmin) // Chaotix ring debt!
|
||||
num_rings -= (test+player->ringmin);
|
||||
|
||||
player->rings += num_rings;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue