mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Challenges Grid: create dedicated struct for menu extradata
- challengegridextradata_t - Existing UINT8 data per entry has been converted to "flags" property - This is a tool that will help us later.
This commit is contained in:
parent
9cb176de36
commit
4380876959
6 changed files with 51 additions and 33 deletions
|
|
@ -1151,7 +1151,7 @@ extern struct challengesmenu_s {
|
|||
SINT8 row, hilix, focusx;
|
||||
UINT8 col, hiliy;
|
||||
|
||||
UINT8 *extradata;
|
||||
challengegridextradata_t *extradata;
|
||||
|
||||
boolean pending;
|
||||
boolean requestnew;
|
||||
|
|
|
|||
|
|
@ -4544,7 +4544,7 @@ static void M_DrawChallengeTile(INT16 i, INT16 j, INT32 x, INT32 y, boolean hili
|
|||
|
||||
if (!unlockedyet)
|
||||
{
|
||||
UINT16 col = (challengesmenu.extradata[id] == CHE_HINT) ? SKINCOLOR_BLUE : SKINCOLOR_BLACK;
|
||||
UINT16 col = (challengesmenu.extradata[id].flags == CHE_HINT) ? SKINCOLOR_BLUE : SKINCOLOR_BLACK;
|
||||
bgmap = R_GetTranslationColormap(TC_DEFAULT, col, GTC_MENUCACHE);
|
||||
}
|
||||
else
|
||||
|
|
@ -5027,7 +5027,7 @@ void M_DrawChallenges(void)
|
|||
{
|
||||
y += challengesgridstep;
|
||||
|
||||
if (challengesmenu.extradata[(i * CHALLENGEGRIDHEIGHT) + j] & CHE_DONTDRAW)
|
||||
if (challengesmenu.extradata[(i * CHALLENGEGRIDHEIGHT) + j].flags & CHE_DONTDRAW)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
|
@ -5112,7 +5112,7 @@ challengedesc:
|
|||
&& challengesmenu.currentunlock < MAXUNLOCKABLES
|
||||
&& ((gamedata->unlocked[challengesmenu.currentunlock] == true)
|
||||
|| ((challengesmenu.extradata != NULL)
|
||||
&& (challengesmenu.extradata[i] & CHE_HINT))
|
||||
&& (challengesmenu.extradata[i].flags & CHE_HINT))
|
||||
)
|
||||
)
|
||||
{
|
||||
|
|
|
|||
43
src/m_cond.c
43
src/m_cond.c
|
|
@ -260,10 +260,10 @@ quickcheckagain:
|
|||
}
|
||||
}
|
||||
|
||||
UINT8 *M_ChallengeGridExtraData(void)
|
||||
challengegridextradata_t *M_ChallengeGridExtraData(void)
|
||||
{
|
||||
UINT8 i, j, num, id, tempid, work;
|
||||
UINT8 *extradata;
|
||||
challengegridextradata_t *extradata;
|
||||
boolean idchange;
|
||||
|
||||
if (!gamedata->challengegrid)
|
||||
|
|
@ -272,7 +272,7 @@ UINT8 *M_ChallengeGridExtraData(void)
|
|||
}
|
||||
|
||||
extradata = Z_Malloc(
|
||||
(gamedata->challengegridwidth * CHALLENGEGRIDHEIGHT * sizeof(UINT8)),
|
||||
(gamedata->challengegridwidth * CHALLENGEGRIDHEIGHT * sizeof(challengegridextradata_t)),
|
||||
PU_STATIC, NULL);
|
||||
|
||||
if (!extradata)
|
||||
|
|
@ -282,6 +282,17 @@ UINT8 *M_ChallengeGridExtraData(void)
|
|||
|
||||
//CONS_Printf(" --- \n");
|
||||
|
||||
// Pre-wipe flags.
|
||||
for (i = 0; i < gamedata->challengegridwidth; i++)
|
||||
{
|
||||
for (j = 0; j < CHALLENGEGRIDHEIGHT; j++)
|
||||
{
|
||||
id = (i * CHALLENGEGRIDHEIGHT) + j;
|
||||
extradata[id].flags = CHE_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
// Populate extra data.
|
||||
for (i = 0; i < gamedata->challengegridwidth; i++)
|
||||
{
|
||||
for (j = 0; j < CHALLENGEGRIDHEIGHT; j++)
|
||||
|
|
@ -290,8 +301,6 @@ UINT8 *M_ChallengeGridExtraData(void)
|
|||
num = gamedata->challengegrid[id];
|
||||
idchange = false;
|
||||
|
||||
extradata[id] = CHE_NONE;
|
||||
|
||||
// Empty spots in the grid are always unconnected.
|
||||
if (num >= MAXUNLOCKABLES)
|
||||
{
|
||||
|
|
@ -305,13 +314,13 @@ UINT8 *M_ChallengeGridExtraData(void)
|
|||
work = gamedata->challengegrid[tempid];
|
||||
if (work == num)
|
||||
{
|
||||
extradata[id] = CHE_CONNECTEDUP;
|
||||
extradata[id].flags = CHE_CONNECTEDUP;
|
||||
|
||||
// Get the id to write extra hint data to.
|
||||
// This check is safe because extradata's order of population
|
||||
if (extradata[tempid] & CHE_CONNECTEDLEFT)
|
||||
if (extradata[tempid].flags & CHE_CONNECTEDLEFT)
|
||||
{
|
||||
extradata[id] |= CHE_CONNECTEDLEFT;
|
||||
extradata[id].flags |= CHE_CONNECTEDLEFT;
|
||||
//CONS_Printf(" %d - %d above %d is invalid, check to left\n", num, tempid, id);
|
||||
if (i > 0)
|
||||
{
|
||||
|
|
@ -328,14 +337,14 @@ UINT8 *M_ChallengeGridExtraData(void)
|
|||
id = tempid;
|
||||
idchange = true;
|
||||
|
||||
if (extradata[id] == CHE_HINT)
|
||||
if (extradata[id].flags == CHE_HINT)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else if (work < MAXUNLOCKABLES && gamedata->unlocked[work])
|
||||
{
|
||||
extradata[id] = CHE_HINT;
|
||||
extradata[id].flags = CHE_HINT;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -357,11 +366,11 @@ UINT8 *M_ChallengeGridExtraData(void)
|
|||
{
|
||||
//CONS_Printf(" %d - %d to left of %d is valid\n", work, tempid, id);
|
||||
// If we haven't already updated our id, it's the one to our left.
|
||||
if (extradata[id] == CHE_HINT)
|
||||
if (extradata[id].flags == CHE_HINT)
|
||||
{
|
||||
extradata[tempid] = CHE_HINT;
|
||||
extradata[tempid].flags = CHE_HINT;
|
||||
}
|
||||
extradata[id] = CHE_CONNECTEDLEFT;
|
||||
extradata[id].flags = CHE_CONNECTEDLEFT;
|
||||
id = tempid;
|
||||
}
|
||||
/*else
|
||||
|
|
@ -369,13 +378,13 @@ UINT8 *M_ChallengeGridExtraData(void)
|
|||
}
|
||||
else if (work < MAXUNLOCKABLES && gamedata->unlocked[work])
|
||||
{
|
||||
extradata[id] = CHE_HINT;
|
||||
extradata[id].flags = CHE_HINT;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// Since we're not modifying id past this point, the conditions become much simpler.
|
||||
if (extradata[id] == CHE_HINT)
|
||||
if ((extradata[id].flags & (CHE_HINT|CHE_DONTDRAW)) == CHE_HINT)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
|
@ -392,7 +401,7 @@ UINT8 *M_ChallengeGridExtraData(void)
|
|||
}
|
||||
else if (work < MAXUNLOCKABLES && gamedata->unlocked[work])
|
||||
{
|
||||
extradata[id] = CHE_HINT;
|
||||
extradata[id].flags = CHE_HINT;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
|
@ -415,7 +424,7 @@ UINT8 *M_ChallengeGridExtraData(void)
|
|||
}
|
||||
else if (work < MAXUNLOCKABLES && gamedata->unlocked[work])
|
||||
{
|
||||
extradata[id] = CHE_HINT;
|
||||
extradata[id].flags = CHE_HINT;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
10
src/m_cond.h
10
src/m_cond.h
|
|
@ -193,12 +193,20 @@ void M_NewGameDataStruct(void);
|
|||
|
||||
// Challenges menu stuff
|
||||
void M_PopulateChallengeGrid(void);
|
||||
UINT8 *M_ChallengeGridExtraData(void);
|
||||
|
||||
struct challengegridextradata_t
|
||||
{
|
||||
UINT8 flags;
|
||||
};
|
||||
|
||||
challengegridextradata_t *M_ChallengeGridExtraData(void);
|
||||
|
||||
#define CHE_NONE 0
|
||||
#define CHE_HINT 1
|
||||
#define CHE_CONNECTEDLEFT (1<<1)
|
||||
#define CHE_CONNECTEDUP (1<<2)
|
||||
#define CHE_DONTDRAW (CHE_CONNECTEDLEFT|CHE_CONNECTEDUP)
|
||||
|
||||
char *M_BuildConditionSetString(UINT8 unlockid);
|
||||
#define DESCRIPTIONWIDTH 170
|
||||
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ static void M_ChallengesAutoFocus(UINT8 unlockid, boolean fresh)
|
|||
continue;
|
||||
}
|
||||
|
||||
if (challengesmenu.extradata[i] & CHE_CONNECTEDLEFT)
|
||||
if (challengesmenu.extradata[i].flags & CHE_CONNECTEDLEFT)
|
||||
{
|
||||
// no need to check for CHE_CONNECTEDUP in linear iteration
|
||||
continue;
|
||||
|
|
@ -461,8 +461,8 @@ boolean M_ChallengesInputs(INT32 ch)
|
|||
}
|
||||
if (!(challengesmenu.extradata[
|
||||
(challengesmenu.col * CHALLENGEGRIDHEIGHT)
|
||||
+ challengesmenu.row]
|
||||
& CHE_CONNECTEDUP))
|
||||
+ challengesmenu.row
|
||||
].flags & CHE_CONNECTEDUP))
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
|
@ -475,8 +475,8 @@ boolean M_ChallengesInputs(INT32 ch)
|
|||
{
|
||||
i = (challengesmenu.extradata[
|
||||
(challengesmenu.col * CHALLENGEGRIDHEIGHT)
|
||||
+ challengesmenu.row]
|
||||
& CHE_CONNECTEDUP) ? 2 : 1;
|
||||
+ challengesmenu.row
|
||||
].flags & CHE_CONNECTEDUP) ? 2 : 1;
|
||||
while (i > 0)
|
||||
{
|
||||
if (challengesmenu.row > 0)
|
||||
|
|
@ -516,8 +516,8 @@ boolean M_ChallengesInputs(INT32 ch)
|
|||
|
||||
if (!(challengesmenu.extradata[
|
||||
(challengesmenu.col * CHALLENGEGRIDHEIGHT)
|
||||
+ challengesmenu.row]
|
||||
& CHE_CONNECTEDLEFT))
|
||||
+ challengesmenu.row
|
||||
].flags & CHE_CONNECTEDLEFT))
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
|
@ -531,8 +531,8 @@ boolean M_ChallengesInputs(INT32 ch)
|
|||
{
|
||||
i = (challengesmenu.extradata[
|
||||
(challengesmenu.col * CHALLENGEGRIDHEIGHT)
|
||||
+ challengesmenu.row]
|
||||
& CHE_CONNECTEDLEFT) ? 2 : 1;
|
||||
+ challengesmenu.row
|
||||
].flags & CHE_CONNECTEDLEFT) ? 2 : 1;
|
||||
while (i > 0)
|
||||
{
|
||||
// Slide the focus counter to movement, if we can.
|
||||
|
|
@ -570,12 +570,12 @@ boolean M_ChallengesInputs(INT32 ch)
|
|||
{
|
||||
// Adjust highlight coordinates up/to the left for large tiles.
|
||||
|
||||
if (challengesmenu.hiliy > 0 && (challengesmenu.extradata[i] & CHE_CONNECTEDUP))
|
||||
if (challengesmenu.hiliy > 0 && (challengesmenu.extradata[i].flags & CHE_CONNECTEDUP))
|
||||
{
|
||||
challengesmenu.hiliy--;
|
||||
}
|
||||
|
||||
if ((challengesmenu.extradata[i] & CHE_CONNECTEDLEFT))
|
||||
if ((challengesmenu.extradata[i].flags & CHE_CONNECTEDLEFT))
|
||||
{
|
||||
if (challengesmenu.hilix > 0)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -209,6 +209,7 @@ TYPEDEF (conditionset_t);
|
|||
TYPEDEF (emblem_t);
|
||||
TYPEDEF (unlockable_t);
|
||||
TYPEDEF (gamedata_t);
|
||||
TYPEDEF (challengegridextradata_t);
|
||||
|
||||
// m_dllist.h
|
||||
TYPEDEF (mdllistitem_t);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue