This commit is contained in:
TehRealSalt 2018-01-29 21:39:13 -05:00
parent aa7fab06fc
commit 116ef8065f
5 changed files with 45 additions and 34 deletions

View File

@ -176,6 +176,7 @@ extern UINT32 totalrings; // Total # of rings in a level
// Fun extra stuff // Fun extra stuff
extern INT16 lastmap; // Last level you were at (returning from special stages). extern INT16 lastmap; // Last level you were at (returning from special stages).
extern INT16 votelevels[4]; // srb2kart
extern mobj_t *redflag, *blueflag; // Pointers to physical flags extern mobj_t *redflag, *blueflag; // Pointers to physical flags
extern mapthing_t *rflagpoint, *bflagpoint; // Pointers to the flag spawn locations extern mapthing_t *rflagpoint, *bflagpoint; // Pointers to the flag spawn locations
#define GF_REDFLAG 1 #define GF_REDFLAG 1

View File

@ -120,6 +120,7 @@ tic_t gametic;
tic_t levelstarttic; // gametic at level start tic_t levelstarttic; // gametic at level start
UINT32 totalrings; // for intermission UINT32 totalrings; // for intermission
INT16 lastmap; // last level you were at (returning from special stages) INT16 lastmap; // last level you were at (returning from special stages)
INT16 votelevels[4]; // srb2kart
tic_t timeinmap; // Ticker for time spent in level (used for levelcard display) tic_t timeinmap; // Ticker for time spent in level (used for levelcard display)
INT16 spstage_start; INT16 spstage_start;
@ -3088,7 +3089,7 @@ INT16 G_TOLFlag(INT32 pgametype)
* has those flags. * has those flags.
* \author Graue <graue@oceanbase.org> * \author Graue <graue@oceanbase.org>
*/ */
INT16 RandMap(INT16 tolflags, INT16 pprevmap) static INT16 RandMap(INT16 tolflags, INT16 pprevmap)
{ {
INT16 *okmaps = Z_Malloc(NUMMAPS * sizeof(INT16), PU_STATIC, NULL); INT16 *okmaps = Z_Malloc(NUMMAPS * sizeof(INT16), PU_STATIC, NULL);
INT32 numokmaps = 0; INT32 numokmaps = 0;
@ -3105,7 +3106,7 @@ INT16 RandMap(INT16 tolflags, INT16 pprevmap)
if (numokmaps == 0) if (numokmaps == 0)
ix = 0; // Sorry, none match. You get MAP01. ix = 0; // Sorry, none match. You get MAP01.
else else
ix = okmaps[M_RandomKey(numokmaps)]; ix = okmaps[P_RandomKey(numokmaps)];
Z_Free(okmaps); Z_Free(okmaps);
@ -3238,6 +3239,28 @@ static void G_DoCompleted(void)
nextmap = prevmap; nextmap = prevmap;
else if (cv_advancemap.value == 2) // Go to random map. else if (cv_advancemap.value == 2) // Go to random map.
nextmap = RandMap(G_TOLFlag(gametype), prevmap); nextmap = RandMap(G_TOLFlag(gametype), prevmap);
else if (cv_advancemap.value == 3)
{
INT32 j;
for (j = 0; j < 4; j++)
{
INT32 k;
votelevels[j] = RandMap(G_TOLFlag(gametype), prevmap);
for (k = 0; k < 4; k++) // Compare with others to make sure you don't roll multiple :V
{
INT32 loopcount = 0;
if (j == k)
continue;
while (votelevels[j] == votelevels[k] && loopcount < 4) // If this needs more than 4 loops, I think it's safe to assume it's not finding anything :VVV
{
votelevels[j] = RandMap(G_TOLFlag(gametype), prevmap);
loopcount++;
}
}
if (votelevels[j] < NUMMAPS && !mapheaderinfo[votelevels[j]])
P_AllocMapHeader(votelevels[j]);
}
}
} }
// We are committed to this map now. // We are committed to this map now.
@ -3937,6 +3960,7 @@ void G_InitNew(UINT8 pultmode, const char *mapname, boolean resetplayer, boolean
// Clear a bunch of variables // Clear a bunch of variables
tokenlist = token = sstimer = redscore = bluescore = lastmap = 0; tokenlist = token = sstimer = redscore = bluescore = lastmap = 0;
countdown = countdown2 = 0; countdown = countdown2 = 0;
votelevels[0] = votelevels[1] = votelevels[2] = votelevels[3] = 0;
for (i = 0; i < MAXPLAYERS; i++) for (i = 0; i < MAXPLAYERS; i++)
{ {

View File

@ -219,6 +219,5 @@ FUNCMATH INT32 G_TicsToMilliseconds(tic_t tics);
// Don't split up TOL handling // Don't split up TOL handling
INT16 G_TOLFlag(INT32 pgametype); INT16 G_TOLFlag(INT32 pgametype);
INT16 RandMap(INT16 tolflags, INT16 pprevmap);
#endif #endif

View File

@ -3202,6 +3202,9 @@ static void P_NetArchiveMisc(void)
WRITEUINT32(save_p, totalrings); WRITEUINT32(save_p, totalrings);
WRITEINT16(save_p, lastmap); WRITEINT16(save_p, lastmap);
for (i = 0; i < 4; i++)
WRITEINT16(save_p, votelevels[i]);
WRITEUINT16(save_p, emeralds); WRITEUINT16(save_p, emeralds);
WRITEUINT8(save_p, stagefailed); WRITEUINT8(save_p, stagefailed);
@ -3285,6 +3288,9 @@ static inline boolean P_NetUnArchiveMisc(void)
totalrings = READUINT32(save_p); totalrings = READUINT32(save_p);
lastmap = READINT16(save_p); lastmap = READINT16(save_p);
for (i = 0; i < 4; i++)
votelevels[i] = READINT16(save_p);
emeralds = READUINT16(save_p); emeralds = READUINT16(save_p);
stagefailed = READUINT8(save_p); stagefailed = READUINT8(save_p);

View File

@ -172,7 +172,6 @@ typedef struct
{ {
char str[40]; char str[40];
patch_t *pic; patch_t *pic;
UINT16 num;
} y_votelvlinfo_t; } y_votelvlinfo_t;
typedef struct typedef struct
@ -2293,14 +2292,14 @@ void Y_VoteTicker(void)
if (votedata.playerinfo[i].voted) if (votedata.playerinfo[i].voted)
continue; continue;
if (votedata.timeleft <= 0 && !votedata.playerinfo[i].voted) /*if (votedata.timeleft <= 0 && !votedata.playerinfo[i].voted)
{ {
votedata.votes[votedata.numvotes].level = 3; // too slow? you pick random votedata.votes[votedata.numvotes].level = 3; // too slow? you pick random
votedata.votes[votedata.numvotes].playernum = i; votedata.votes[votedata.numvotes].playernum = i;
votedata.playerinfo[i].voted = true; votedata.playerinfo[i].voted = true;
votedata.numvotes++; votedata.numvotes++;
continue; continue;
} }*/
if (votedata.playerinfo[i].delay > 0) if (votedata.playerinfo[i].delay > 0)
{ {
@ -2348,7 +2347,7 @@ void Y_VoteTicker(void)
if (votedata.timeleft == 0 && voteendtic == -1) if (votedata.timeleft == 0 && voteendtic == -1)
{ {
votedata.pickedvote = P_RandomKey(votedata.numvotes); votedata.pickedvote = P_RandomKey(votedata.numvotes);
nextmap = (votedata.levels[votedata.votes[votedata.pickedvote].level].num); // oh my god nextmap = (votelevels[votedata.votes[votedata.pickedvote].level]); // oh my god
S_StartSound(NULL, sfx_ncitem); S_StartSound(NULL, sfx_ncitem);
voteendtic = votetic+(3*TICRATE); voteendtic = votetic+(3*TICRATE);
} }
@ -2393,59 +2392,41 @@ void Y_StartVote(void)
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
{ {
INT32 j;
lumpnum_t lumpnum; lumpnum_t lumpnum;
votedata.levels[i].num = RandMap(G_TOLFlag(gametype), prevmap);
for (j = 0; j < 4; j++)
{
INT32 loopcount = 0;
if (i == j)
continue;
while (votedata.levels[i].num == votedata.levels[j].num && loopcount < 5)
{
votedata.levels[i].num = RandMap(G_TOLFlag(gametype), prevmap);
loopcount++;
}
}
if (!mapheaderinfo[votedata.levels[i].num])
P_AllocMapHeader(votedata.levels[i].num);
// set up the str // set up the str
if (mapheaderinfo[votedata.levels[i].num]->zonttl) if (mapheaderinfo[votelevels[i]]->zonttl)
{ {
if (mapheaderinfo[votedata.levels[i].num]->actnum) if (mapheaderinfo[votelevels[i]]->actnum)
snprintf(votedata.levels[i].str, snprintf(votedata.levels[i].str,
sizeof votedata.levels[i].str, sizeof votedata.levels[i].str,
"%.32s %.32s %d", "%.32s %.32s %d",
mapheaderinfo[votedata.levels[i].num]->lvlttl, mapheaderinfo[votedata.levels[i].num]->zonttl, mapheaderinfo[votedata.levels[i].num]->actnum); mapheaderinfo[votelevels[i]]->lvlttl, mapheaderinfo[votelevels[i]]->zonttl, mapheaderinfo[votelevels[i]]->actnum);
else else
snprintf(votedata.levels[i].str, snprintf(votedata.levels[i].str,
sizeof votedata.levels[i].str, sizeof votedata.levels[i].str,
"%.32s %.32s", "%.32s %.32s",
mapheaderinfo[votedata.levels[i].num]->lvlttl, mapheaderinfo[votedata.levels[i].num]->zonttl); mapheaderinfo[votelevels[i]]->lvlttl, mapheaderinfo[votelevels[i]]->zonttl);
} }
else else
{ {
if (mapheaderinfo[votedata.levels[i].num]->actnum) if (mapheaderinfo[votelevels[i]]->actnum)
snprintf(votedata.levels[i].str, snprintf(votedata.levels[i].str,
sizeof votedata.levels[i].str, sizeof votedata.levels[i].str,
"%.32s %d", "%.32s %d",
mapheaderinfo[votedata.levels[i].num]->lvlttl, mapheaderinfo[votedata.levels[i].num]->actnum); mapheaderinfo[votelevels[i]]->lvlttl, mapheaderinfo[votelevels[i]]->actnum);
else else
snprintf(votedata.levels[i].str, snprintf(votedata.levels[i].str,
sizeof votedata.levels[i].str, sizeof votedata.levels[i].str,
"%.32s", "%.32s",
mapheaderinfo[votedata.levels[i].num]->lvlttl); mapheaderinfo[votelevels[i]]->lvlttl);
} }
votedata.levels[i].str[sizeof votedata.levels[i].str - 1] = '\0'; votedata.levels[i].str[sizeof votedata.levels[i].str - 1] = '\0';
lumpnum = W_CheckNumForName(va("%sP", G_BuildMapName(votedata.levels[i].num+1))); lumpnum = W_CheckNumForName(va("%sP", G_BuildMapName(votelevels[i]+1)));
if (lumpnum != LUMPERROR) if (lumpnum != LUMPERROR)
votedata.levels[i].pic = W_CachePatchName(va("%sP", G_BuildMapName(votedata.levels[i].num+1)), PU_STATIC); votedata.levels[i].pic = W_CachePatchName(va("%sP", G_BuildMapName(votelevels[i]+1)), PU_STATIC);
else else
votedata.levels[i].pic = W_CachePatchName("BLANKLVL", PU_STATIC); votedata.levels[i].pic = W_CachePatchName("BLANKLVL", PU_STATIC);
} }