Merge branch 'master' into special-sector-tweak

This commit is contained in:
Sally Cochenour 2020-03-01 14:50:45 -05:00
commit 885d6fea1f
16 changed files with 125 additions and 55 deletions

View file

@ -70,10 +70,10 @@ CV_PossibleValue_t CV_Natural[] = {{1, "MIN"}, {999999999, "MAX"}, {0, NULL}};
// SRB2kart // SRB2kart
CV_PossibleValue_t kartspeed_cons_t[] = { CV_PossibleValue_t kartspeed_cons_t[] = {
{-1, "Auto"}, {KARTSPEED_AUTO, "Auto"},
{0, "Easy"}, {KARTSPEED_EASY, "Easy"},
{1, "Normal"}, {KARTSPEED_NORMAL, "Normal"},
{2, "Hard"}, {KARTSPEED_HARD, "Hard"},
{0, NULL} {0, NULL}
}; };

View file

@ -131,6 +131,10 @@ extern CV_PossibleValue_t CV_Unsigned[];
extern CV_PossibleValue_t CV_Natural[]; extern CV_PossibleValue_t CV_Natural[];
// SRB2kart // SRB2kart
#define KARTSPEED_AUTO -1
#define KARTSPEED_EASY 0
#define KARTSPEED_NORMAL 1
#define KARTSPEED_HARD 2
extern CV_PossibleValue_t kartspeed_cons_t[]; extern CV_PossibleValue_t kartspeed_cons_t[];
extern consvar_t cv_execversion; extern consvar_t cv_execversion;

View file

@ -1241,6 +1241,7 @@ static inline void CL_DrawConnectionStatus(void)
case CL_ASKDOWNLOADFILES: case CL_ASKDOWNLOADFILES:
case CL_WAITDOWNLOADFILESRESPONSE: case CL_WAITDOWNLOADFILESRESPONSE:
cltext = M_GetText("Waiting to download files..."); cltext = M_GetText("Waiting to download files...");
break;
default: default:
cltext = M_GetText("Connecting to server..."); cltext = M_GetText("Connecting to server...");
break; break;

View file

@ -1536,10 +1536,11 @@ void D_SRB2Main(void)
newskill = (INT16)kartspeed_cons_t[j].value; newskill = (INT16)kartspeed_cons_t[j].value;
break; break;
} }
if (!kartspeed_cons_t[j].strvalue) // reached end of the list with no match if (!kartspeed_cons_t[j].strvalue) // reached end of the list with no match
{ {
j = atoi(sskill); // assume they gave us a skill number, which is okay too j = atoi(sskill); // assume they gave us a skill number, which is okay too
if (j >= 0 && j <= 2) if (j >= KARTSPEED_EASY && j <= KARTSPEED_HARD)
newskill = (INT16)j; newskill = (INT16)j;
} }

View file

@ -424,13 +424,13 @@ consvar_t cv_timetic = {"timerres", "Normal", CV_SAVE|CV_NOSHOWHELP, timetic_con
static CV_PossibleValue_t pointlimit_cons_t[] = {{0, "MIN"}, {999999990, "MAX"}, {0, NULL}}; static CV_PossibleValue_t pointlimit_cons_t[] = {{0, "MIN"}, {999999990, "MAX"}, {0, NULL}};
consvar_t cv_pointlimit = {"pointlimit", "0", CV_NETVAR|CV_CALL|CV_NOINIT, pointlimit_cons_t, consvar_t cv_pointlimit = {"pointlimit", "0", CV_NETVAR|CV_CALL|CV_NOINIT, pointlimit_cons_t,
PointLimit_OnChange, 0, NULL, NULL, 0, 0, NULL}; PointLimit_OnChange, 0, NULL, NULL, 0, 0, NULL};
static CV_PossibleValue_t timelimit_cons_t[] = {{0, "MIN"}, {30, "MAX"}, {0, NULL}}; static CV_PossibleValue_t timelimit_cons_t[] = {{0, "MIN"}, {1800, "MAX"}, {0, NULL}};
consvar_t cv_timelimit = {"timelimit", "0", CV_NETVAR|CV_CALL|CV_NOINIT, timelimit_cons_t, consvar_t cv_timelimit = {"timelimit", "0", CV_NETVAR|CV_CALL|CV_NOINIT, timelimit_cons_t,
TimeLimit_OnChange, 0, NULL, NULL, 0, 0, NULL}; TimeLimit_OnChange, 0, NULL, NULL, 0, 0, NULL};
static CV_PossibleValue_t numlaps_cons_t[] = {{1, "MIN"}, {50, "MAX"}, {0, NULL}}; static CV_PossibleValue_t numlaps_cons_t[] = {{1, "MIN"}, {99, "MAX"}, {0, NULL}};
consvar_t cv_numlaps = {"numlaps", "3", CV_NETVAR|CV_CALL|CV_NOINIT, numlaps_cons_t, consvar_t cv_numlaps = {"numlaps", "3", CV_NETVAR|CV_CALL|CV_NOINIT, numlaps_cons_t,
NumLaps_OnChange, 0, NULL, NULL, 0, 0, NULL}; NumLaps_OnChange, 0, NULL, NULL, 0, 0, NULL};
static CV_PossibleValue_t basenumlaps_cons_t[] = {{1, "MIN"}, {50, "MAX"}, {0, "Map default"}, {0, NULL}}; static CV_PossibleValue_t basenumlaps_cons_t[] = {{1, "MIN"}, {99, "MAX"}, {0, "Map default"}, {0, NULL}};
consvar_t cv_basenumlaps = {"basenumlaps", "Map default", CV_NETVAR|CV_CALL|CV_CHEAT, basenumlaps_cons_t, BaseNumLaps_OnChange, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_basenumlaps = {"basenumlaps", "Map default", CV_NETVAR|CV_CALL|CV_CHEAT, basenumlaps_cons_t, BaseNumLaps_OnChange, 0, NULL, NULL, 0, 0, NULL};
consvar_t cv_forceskin = {"forceskin", "Off", CV_NETVAR|CV_CALL|CV_CHEAT, Forceskin_cons_t, ForceSkin_OnChange, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_forceskin = {"forceskin", "Off", CV_NETVAR|CV_CALL|CV_CHEAT, Forceskin_cons_t, ForceSkin_OnChange, 0, NULL, NULL, 0, 0, NULL};
@ -5779,7 +5779,7 @@ static void KartFrantic_OnChange(void)
static void KartSpeed_OnChange(void) static void KartSpeed_OnChange(void)
{ {
if (!M_SecretUnlocked(SECRET_HARDSPEED) && cv_kartspeed.value == 2) if (!M_SecretUnlocked(SECRET_HARDSPEED) && cv_kartspeed.value == KARTSPEED_HARD)
{ {
CONS_Printf(M_GetText("You haven't earned this yet.\n")); CONS_Printf(M_GetText("You haven't earned this yet.\n"));
CV_StealthSet(&cv_kartspeed, cv_kartspeed.defaultvalue); CV_StealthSet(&cv_kartspeed, cv_kartspeed.defaultvalue);
@ -5788,13 +5788,15 @@ static void KartSpeed_OnChange(void)
if (G_RaceGametype()) if (G_RaceGametype())
{ {
if ((UINT8)cv_kartspeed.value != gamespeed && gamestate == GS_LEVEL && leveltime > starttime) if ((gamestate == GS_LEVEL && leveltime < starttime) && (cv_kartspeed.value != KARTSPEED_AUTO))
CONS_Printf(M_GetText("Game speed will be changed to \"%s\" next round.\n"), cv_kartspeed.string);
else
{ {
CONS_Printf(M_GetText("Game speed has been changed to \"%s\".\n"), cv_kartspeed.string); CONS_Printf(M_GetText("Game speed has been changed to \"%s\".\n"), cv_kartspeed.string);
gamespeed = (UINT8)cv_kartspeed.value; gamespeed = (UINT8)cv_kartspeed.value;
} }
else if (cv_kartspeed.value != (signed)gamespeed)
{
CONS_Printf(M_GetText("Game speed will be changed to \"%s\" next round.\n"), cv_kartspeed.string);
}
} }
} }

View file

@ -3687,6 +3687,7 @@ static void G_DoCompleted(void)
{ {
INT32 i, j = 0; INT32 i, j = 0;
boolean gottoken = false; boolean gottoken = false;
SINT8 powertype = PWRLV_DISABLED;
tokenlist = 0; // Reset the list tokenlist = 0; // Reset the list
@ -3825,13 +3826,23 @@ static void G_DoCompleted(void)
nextmap = G_RandMap(G_TOLFlag(gametype), prevmap, false, 0, false, NULL); nextmap = G_RandMap(G_TOLFlag(gametype), prevmap, false, 0, false, NULL);
} }
// We are committed to this map now. // We are committed to this map now.
// We may as well allocate its header if it doesn't exist // We may as well allocate its header if it doesn't exist
// (That is, if it's a real map) // (That is, if it's a real map)
if (nextmap < NUMMAPS && !mapheaderinfo[nextmap]) if (nextmap < NUMMAPS && !mapheaderinfo[nextmap])
P_AllocMapHeader(nextmap); P_AllocMapHeader(nextmap);
// Set up power level gametype scrambles
if (netgame && cv_kartusepwrlv.value)
{
if (G_RaceGametype())
powertype = PWRLV_RACE;
else if (G_BattleGametype())
powertype = PWRLV_BATTLE;
}
K_SetPowerLevelScrambles(powertype);
demointermission: demointermission:
if (skipstats && !modeattacking) // Don't skip stats if we're in record attack if (skipstats && !modeattacking) // Don't skip stats if we're in record attack
@ -4079,6 +4090,11 @@ void G_LoadGameData(void)
// Allow saving of gamedata beyond this point // Allow saving of gamedata beyond this point
gamedataloaded = true; gamedataloaded = true;
if (M_CheckParm("-gamedata") && M_IsNextParm())
{
strlcpy(gamedatafilename, M_GetNextParm(), sizeof gamedatafilename);
}
if (M_CheckParm("-resetdata")) if (M_CheckParm("-resetdata"))
return; // Don't load (essentially, reset). return; // Don't load (essentially, reset).
@ -4104,7 +4120,11 @@ void G_LoadGameData(void)
matchesplayed = READUINT32(save_p); matchesplayed = READUINT32(save_p);
for (i = 0; i < PWRLV_NUMTYPES; i++) for (i = 0; i < PWRLV_NUMTYPES; i++)
{
vspowerlevel[i] = READUINT16(save_p); vspowerlevel[i] = READUINT16(save_p);
if (vspowerlevel[i] < PWRLVRECORD_MIN || vspowerlevel[i] > PWRLVRECORD_MAX)
goto datacorrupt;
}
modded = READUINT8(save_p); modded = READUINT8(save_p);
@ -6896,7 +6916,7 @@ void G_LoadDemoInfo(menudemo_t *pdemo)
extrainfo_p = infobuffer + READUINT32(info_p); extrainfo_p = infobuffer + READUINT32(info_p);
// Pared down version of CV_LoadNetVars to find the kart speed // Pared down version of CV_LoadNetVars to find the kart speed
pdemo->kartspeed = 1; // Default to normal speed pdemo->kartspeed = KARTSPEED_NORMAL; // Default to normal speed
count = READUINT16(info_p); count = READUINT16(info_p);
while (count--) while (count--)
{ {

View file

@ -80,7 +80,7 @@ typedef struct menudemo_s {
UINT16 map; UINT16 map;
UINT8 addonstatus; // What do we need to do addon-wise to play this demo? UINT8 addonstatus; // What do we need to do addon-wise to play this demo?
UINT8 gametype; UINT8 gametype;
UINT8 kartspeed; // Add OR DF_ENCORE for encore mode, idk SINT8 kartspeed; // Add OR DF_ENCORE for encore mode, idk
UINT8 numlaps; UINT8 numlaps;
struct { struct {

View file

@ -3017,7 +3017,7 @@ static void HU_DrawRankings(void)
} }
V_DrawCenteredString(256, 8, 0, "GAME SPEED"); V_DrawCenteredString(256, 8, 0, "GAME SPEED");
V_DrawCenteredString(256, 16, hilicol, kartspeed_cons_t[gamespeed].strvalue); V_DrawCenteredString(256, 16, hilicol, kartspeed_cons_t[1+gamespeed].strvalue);
} }
// When you play, you quickly see your score because your name is displayed in white. // When you play, you quickly see your score because your name is displayed in white.

View file

@ -83,7 +83,10 @@ INT16 K_CalculatePowerLevelAvg(void)
UINT8 i; UINT8 i;
if (!netgame || !cv_kartusepwrlv.value) if (!netgame || !cv_kartusepwrlv.value)
{
CONS_Debug(DBG_GAMELOGIC, "Not in a netgame, or not using power levels -- no average.\n");
return 0; // No average. return 0; // No average.
}
if (G_RaceGametype()) if (G_RaceGametype())
t = PWRLV_RACE; t = PWRLV_RACE;
@ -91,7 +94,10 @@ INT16 K_CalculatePowerLevelAvg(void)
t = PWRLV_BATTLE; t = PWRLV_BATTLE;
if (t == PWRLV_DISABLED) if (t == PWRLV_DISABLED)
{
CONS_Debug(DBG_GAMELOGIC, "Could not set a power level type -- no average.\n");
return 0; // Hmm?! return 0; // Hmm?!
}
for (i = 0; i < MAXPLAYERS; i++) for (i = 0; i < MAXPLAYERS; i++)
{ {
@ -99,12 +105,15 @@ INT16 K_CalculatePowerLevelAvg(void)
|| clientpowerlevels[i][t] == 0) // splitscreen player || clientpowerlevels[i][t] == 0) // splitscreen player
continue; continue;
avg += clientpowerlevels[i][t]; avg += (clientpowerlevels[i][t] << FRACBITS);
div++; div++;
} }
if (!div) if (!div)
{
CONS_Debug(DBG_GAMELOGIC, "Found no players -- no average.\n");
return 0; // No average. return 0; // No average.
}
avg /= div; avg /= div;
@ -120,19 +129,32 @@ void K_SetPowerLevelScrambles(SINT8 powertype)
case PWRLV_RACE: case PWRLV_RACE:
if (cv_kartspeed.value == -1 || cv_kartencore.value == -1) if (cv_kartspeed.value == -1 || cv_kartencore.value == -1)
{ {
UINT8 speed = atoi(cv_kartspeed.defaultvalue); UINT8 speed = KARTSPEED_NORMAL;
boolean encore = false; boolean encore = false;
INT16 avg = 0, min = 0; INT16 avg = 0, min = 0;
UINT8 i, t = 0; UINT8 i, t = 1;
avg = K_CalculatePowerLevelAvg(); avg = K_CalculatePowerLevelAvg();
for (i = 0; i < MAXPLAYERS; i++) for (i = 0; i < MAXPLAYERS; i++)
{ {
if (!playeringame[i] || players[i].spectator
|| clientpowerlevels[i][t] == 0) // splitscreen player
continue;
if (min == 0 || clientpowerlevels[i][0] < min) if (min == 0 || clientpowerlevels[i][0] < min)
min = clientpowerlevels[i][0]; min = clientpowerlevels[i][0];
} }
CONS_Debug(DBG_GAMELOGIC, "Min: %d, Avg: %d\n", min, avg);
if (avg == 0 || min == 0)
{
CONS_Debug(DBG_GAMELOGIC, "No average/minimum, no scramblin'.\n");
speedscramble = encorescramble = -1;
return;
}
if (min >= 7800) if (min >= 7800)
{ {
if (avg >= 8200) if (avg >= 8200)
@ -161,6 +183,10 @@ void K_SetPowerLevelScrambles(SINT8 powertype)
else else
t = 1; t = 1;
} }
#if 1
else
t = 1;
#else
else if (min >= 1800) else if (min >= 1800)
{ {
if (avg >= 2200) if (avg >= 2200)
@ -170,35 +196,41 @@ void K_SetPowerLevelScrambles(SINT8 powertype)
} }
else else
t = 0; t = 0;
#endif
CONS_Debug(DBG_GAMELOGIC, "Table position: %d\n", t);
switch (t) switch (t)
{ {
case 5: case 5:
speed = 2; speed = KARTSPEED_HARD;
encore = true; encore = true;
break; break;
case 4: case 4:
speed = M_RandomChance((7<<FRACBITS)/10) ? 2 : 1; speed = P_RandomChance((7<<FRACBITS)/10) ? KARTSPEED_HARD : KARTSPEED_NORMAL;
encore = M_RandomChance(FRACUNIT>>1); encore = P_RandomChance(FRACUNIT>>1);
break; break;
case 3: case 3:
speed = M_RandomChance((3<<FRACBITS)/10) ? 2 : 1; speed = P_RandomChance((3<<FRACBITS)/10) ? KARTSPEED_HARD : KARTSPEED_NORMAL;
encore = M_RandomChance(FRACUNIT>>2); encore = P_RandomChance(FRACUNIT>>2);
break; break;
case 2: case 2:
speed = 1; speed = 1;
encore = M_RandomChance(FRACUNIT>>3); encore = P_RandomChance(FRACUNIT>>3);
break; break;
case 1: default: case 1: default:
speed = 1; speed = KARTSPEED_NORMAL;
encore = false; encore = false;
break; break;
case 0: case 0:
speed = M_RandomChance((3<<FRACBITS)/10) ? 0 : 1; speed = P_RandomChance((3<<FRACBITS)/10) ? KARTSPEED_EASY : KARTSPEED_NORMAL;
encore = false; encore = false;
break; break;
} }
CONS_Debug(DBG_GAMELOGIC, "Rolled speed: %d\n", speed);
CONS_Debug(DBG_GAMELOGIC, "Rolled encore: %s\n", (encore ? "true" : "false"));
if (cv_kartspeed.value == -1) if (cv_kartspeed.value == -1)
speedscramble = speed; speedscramble = speed;
else else

View file

@ -5412,7 +5412,7 @@ static void DrawReplayHutReplayInfo(void)
V_DrawThinString(x, y+9, V_SNAPTOTOP|V_ALLOWLOWERCASE, va("(%d laps)", demolist[dir_on[menudepthleft]].numlaps)); V_DrawThinString(x, y+9, V_SNAPTOTOP|V_ALLOWLOWERCASE, va("(%d laps)", demolist[dir_on[menudepthleft]].numlaps));
V_DrawString(x, y+20, V_SNAPTOTOP|V_ALLOWLOWERCASE, demolist[dir_on[menudepthleft]].gametype == GT_RACE ? V_DrawString(x, y+20, V_SNAPTOTOP|V_ALLOWLOWERCASE, demolist[dir_on[menudepthleft]].gametype == GT_RACE ?
va("Race (%s speed)", kartspeed_cons_t[demolist[dir_on[menudepthleft]].kartspeed & ~DF_ENCORE].strvalue) : va("Race (%s speed)", kartspeed_cons_t[(demolist[dir_on[menudepthleft]].kartspeed & ~DF_ENCORE) + 1].strvalue) :
"Battle Mode"); "Battle Mode");
if (!demolist[dir_on[menudepthleft]].standings[0].ranking) if (!demolist[dir_on[menudepthleft]].standings[0].ranking)
@ -8350,7 +8350,7 @@ static void M_DrawConnectMenu(void)
if (serverlist[slindex].info.gametype == GT_RACE) if (serverlist[slindex].info.gametype == GT_RACE)
{ {
spd = kartspeed_cons_t[serverlist[slindex].info.kartvars & SV_SPEEDMASK].strvalue; spd = kartspeed_cons_t[(serverlist[slindex].info.kartvars & SV_SPEEDMASK)+1].strvalue;
V_DrawSmallString(currentMenu->x+128, S_LINEY(i)+8, globalflags, va("(%s)", spd)); V_DrawSmallString(currentMenu->x+128, S_LINEY(i)+8, globalflags, va("(%s)", spd));
} }

View file

@ -2787,7 +2787,11 @@ boolean P_TryMove(mobj_t *thing, fixed_t x, fixed_t y, boolean allowdropoff)
if (!(thing->flags & MF_NOCLIP)) if (!(thing->flags & MF_NOCLIP))
{ {
//All things are affected by their scale. //All things are affected by their scale.
fixed_t maxstep = FixedMul(MAXSTEPMOVE, mapobjectscale); const fixed_t maxstepmove = FixedMul(MAXSTEPMOVE, mapobjectscale);
fixed_t maxstep = maxstepmove;
if (thing->player->kartstuff[k_waterskip])
maxstep += maxstepmove; // Add some extra stepmove when waterskipping
// If using type Section1:13, double the maxstep. // If using type Section1:13, double the maxstep.
if (P_MobjTouchingSectorSpecial(thing, 1, 13, false)) if (P_MobjTouchingSectorSpecial(thing, 1, 13, false))

View file

@ -1268,6 +1268,8 @@ fixed_t P_GetMobjGravity(mobj_t *mo)
P_PlayerFlip(mo); P_PlayerFlip(mo);
if (mo->player->kartstuff[k_pogospring]) if (mo->player->kartstuff[k_pogospring])
gravityadd = (5*gravityadd)/2; gravityadd = (5*gravityadd)/2;
if (mo->player->kartstuff[k_waterskip])
gravityadd = (4*gravityadd)/3;
} }
else else
{ {
@ -3301,26 +3303,19 @@ void P_MobjCheckWater(mobj_t *mobj)
// skipping stone! // skipping stone!
if (p && p->kartstuff[k_waterskip] < 2 if (p && p->kartstuff[k_waterskip] < 2
&& ((p->speed/3 > abs(mobj->momz)) // Going more forward than horizontal, so you can skip across the water. && ((p->speed/3 > abs(mobj->momz)) // Going more forward than horizontal, so you can skip across the water.
|| (p->speed > K_GetKartSpeed(p,false)/3 && p->kartstuff[k_waterskip])) // Already skipped once, so you can skip once more! || (p->speed > 20*mapobjectscale && p->kartstuff[k_waterskip])) // Already skipped once, so you can skip once more!
&& ((!(mobj->eflags & MFE_VERTICALFLIP) && thingtop - mobj->momz > mobj->watertop) && ((!(mobj->eflags & MFE_VERTICALFLIP) && thingtop - mobj->momz > mobj->watertop)
|| ((mobj->eflags & MFE_VERTICALFLIP) && mobj->z - mobj->momz < mobj->waterbottom))) || ((mobj->eflags & MFE_VERTICALFLIP) && mobj->z - mobj->momz < mobj->waterbottom)))
{ {
const fixed_t min = 6<<FRACBITS; const fixed_t hop = 5<<FRACBITS;
//const fixed_t max = 8<<FRACBITS;
mobj->momx = mobj->momx/2; mobj->momx = (4*mobj->momx)/5;
mobj->momy = mobj->momy/2; mobj->momy = (4*mobj->momy)/5;
mobj->momz = -mobj->momz/2;
if (!(mobj->eflags & MFE_VERTICALFLIP) && mobj->momz < FixedMul(min, mobj->scale)) if (mobj->eflags & MFE_VERTICALFLIP)
mobj->momz = FixedMul(min, mobj->scale); mobj->momz = FixedMul(-hop, mobj->scale);
else if (mobj->eflags & MFE_VERTICALFLIP && mobj->momz > FixedMul(-min, mobj->scale)) else
mobj->momz = FixedMul(-min, mobj->scale); mobj->momz = FixedMul(hop, mobj->scale);
/*if (!(mobj->eflags & MFE_VERTICALFLIP) && mobj->momz > FixedMul(max, mobj->scale))
mobj->momz = FixedMul(max, mobj->scale);
else if (mobj->eflags & MFE_VERTICALFLIP && mobj->momz < FixedMul(-max, mobj->scale))
mobj->momz = FixedMul(-max, mobj->scale);*/
p->kartstuff[k_waterskip]++; p->kartstuff[k_waterskip]++;
} }

View file

@ -3290,6 +3290,9 @@ static void P_NetArchiveMisc(void)
WRITEUINT8(save_p, franticitems); WRITEUINT8(save_p, franticitems);
WRITEUINT8(save_p, comeback); WRITEUINT8(save_p, comeback);
WRITESINT8(save_p, speedscramble);
WRITESINT8(save_p, encorescramble);
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
WRITESINT8(save_p, battlewanted[i]); WRITESINT8(save_p, battlewanted[i]);
@ -3410,6 +3413,9 @@ static inline boolean P_NetUnArchiveMisc(void)
franticitems = (boolean)READUINT8(save_p); franticitems = (boolean)READUINT8(save_p);
comeback = (boolean)READUINT8(save_p); comeback = (boolean)READUINT8(save_p);
speedscramble = READSINT8(save_p);
encorescramble = READSINT8(save_p);
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
battlewanted[i] = READSINT8(save_p); battlewanted[i] = READSINT8(save_p);

View file

@ -2388,18 +2388,18 @@ static void P_LevelInitStuff(void)
// SRB2Kart: map load variables // SRB2Kart: map load variables
if (modeattacking) // Just play it safe and set everything if (modeattacking) // Just play it safe and set everything
{ {
gamespeed = 2; gamespeed = KARTSPEED_HARD;
franticitems = false; franticitems = false;
comeback = true; comeback = true;
} }
else else
{ {
if (G_BattleGametype()) if (G_BattleGametype())
gamespeed = 0; gamespeed = KARTSPEED_EASY;
else else
{ {
if (cv_kartspeed.value == -1) if (cv_kartspeed.value == KARTSPEED_AUTO)
gamespeed = ((speedscramble == -1) ? atoi(cv_kartspeed.defaultvalue) : (UINT8)speedscramble); gamespeed = ((speedscramble == -1) ? KARTSPEED_NORMAL : (UINT8)speedscramble);
else else
gamespeed = (UINT8)cv_kartspeed.value; gamespeed = (UINT8)cv_kartspeed.value;
} }

View file

@ -605,7 +605,7 @@ dotimer:
V_DrawCenteredString(BASEVIDWIDTH/2, BASEVIDHEIGHT/2, hilicol, M_GetText("Teams will be scrambled next round!"));*/ V_DrawCenteredString(BASEVIDWIDTH/2, BASEVIDHEIGHT/2, hilicol, M_GetText("Teams will be scrambled next round!"));*/
if (speedscramble != -1 && speedscramble != gamespeed) if (speedscramble != -1 && speedscramble != gamespeed)
V_DrawCenteredString(BASEVIDWIDTH/2, BASEVIDHEIGHT-24, hilicol|V_ALLOWLOWERCASE|V_SNAPTOBOTTOM, V_DrawCenteredString(BASEVIDWIDTH/2, BASEVIDHEIGHT-24, hilicol|V_ALLOWLOWERCASE|V_SNAPTOBOTTOM,
va(M_GetText("Next race will be %s Speed!"), kartspeed_cons_t[speedscramble].strvalue)); va(M_GetText("Next race will be %s Speed!"), kartspeed_cons_t[1+speedscramble].strvalue));
//} //}
} }
@ -1000,8 +1000,6 @@ void Y_StartIntermission(void)
powertype = PWRLV_BATTLE; powertype = PWRLV_BATTLE;
} }
K_SetPowerLevelScrambles(powertype);
if (!multiplayer) if (!multiplayer)
{ {
timer = 0; timer = 0;
@ -1078,7 +1076,7 @@ void Y_StartIntermission(void)
break; break;
} }
if (powertype != -1) if (powertype != PWRLV_DISABLED)
K_UpdatePowerLevels(); K_UpdatePowerLevels();
//if (intertype == int_race || intertype == int_match) //if (intertype == int_race || intertype == int_match)

View file

@ -210,7 +210,11 @@ void Z_Free(void *ptr)
static void *xm(size_t size) static void *xm(size_t size)
{ {
const size_t padedsize = size+sizeof (size_t); const size_t padedsize = size+sizeof (size_t);
void *p = malloc(padedsize); void *p;
if (padedsize < size)/* overflow check */
I_Error("You are allocating memory too large!");
p = malloc(padedsize);
if (p == NULL) if (p == NULL)
{ {
@ -254,6 +258,9 @@ void *Z_MallocAlign(size_t size, INT32 tag, void *user, INT32 alignbits)
CONS_Debug(DBG_MEMORY, "Z_Malloc %s:%d\n", file, line); CONS_Debug(DBG_MEMORY, "Z_Malloc %s:%d\n", file, line);
#endif #endif
if (blocksize < size)/* overflow check */
I_Error("You are allocating memory too large!");
block = xm(sizeof *block); block = xm(sizeof *block);
#ifdef HAVE_VALGRIND #ifdef HAVE_VALGRIND
padsize += (1<<sizeof(size_t))*2; padsize += (1<<sizeof(size_t))*2;