extras-challenges.c, M_UpdateChallengeGridExtraData: Be less lazy about reallocation

- Z_Calloc once, on menu load, instead of every time data changes
- Free once, on menu exit, instead of every time data changes
This commit is contained in:
toaster 2023-02-24 19:10:44 +00:00
parent 8dc4971c2a
commit 339617a54e
3 changed files with 21 additions and 20 deletions

View file

@ -260,24 +260,19 @@ quickcheckagain:
}
}
challengegridextradata_t *M_ChallengeGridExtraData(void)
void M_UpdateChallengeGridExtraData(challengegridextradata_t *extradata)
{
UINT8 i, j, num, id, tempid, work;
challengegridextradata_t *extradata;
boolean idchange;
if (!gamedata->challengegrid)
if (gamedata->challengegrid == NULL)
{
return NULL;
return;
}
extradata = Z_Malloc(
(gamedata->challengegridwidth * CHALLENGEGRIDHEIGHT * sizeof(challengegridextradata_t)),
PU_STATIC, NULL);
if (!extradata)
if (extradata == NULL)
{
I_Error("M_ChallengeGridExtraData: was not able to allocate extradata");
return;
}
//CONS_Printf(" --- \n");
@ -430,8 +425,6 @@ challengegridextradata_t *M_ChallengeGridExtraData(void)
}
}
}
return extradata;
}
void M_AddRawCondition(UINT8 set, UINT8 id, conditiontype_t c, INT32 r, INT16 x1, INT16 x2)

View file

@ -199,7 +199,7 @@ struct challengegridextradata_t
UINT8 flags;
};
challengegridextradata_t *M_ChallengeGridExtraData(void);
void M_UpdateChallengeGridExtraData(challengegridextradata_t *extradata);
#define CHE_NONE 0
#define CHE_HINT 1

View file

@ -174,7 +174,12 @@ menu_t *M_InterruptMenuWithChallenges(menu_t *desiredmenu)
M_PopulateChallengeGrid();
if (gamedata->challengegrid)
challengesmenu.extradata = M_ChallengeGridExtraData();
{
challengesmenu.extradata = Z_Calloc(
(gamedata->challengegridwidth * CHALLENGEGRIDHEIGHT * sizeof(challengegridextradata_t)),
PU_STATIC, NULL);
M_UpdateChallengeGridExtraData(challengesmenu.extradata);
}
memset(setup_explosions, 0, sizeof(setup_explosions));
memset(&challengesmenu.unlockcount, 0, sizeof(challengesmenu.unlockcount));
@ -318,11 +323,15 @@ void M_ChallengesTick(void)
challengesmenu.unlockcount[CC_TALLY]++;
challengesmenu.unlockcount[CC_ANIM]++;
Z_Free(challengesmenu.extradata);
if ((challengesmenu.extradata = M_ChallengeGridExtraData()))
if (challengesmenu.extradata)
{
unlockable_t *ref = &unlockables[challengesmenu.currentunlock];
UINT16 bombcolor = SKINCOLOR_NONE;
unlockable_t *ref;
UINT16 bombcolor;
M_UpdateChallengeGridExtraData(challengesmenu.extradata);
ref = &unlockables[challengesmenu.currentunlock];
bombcolor = SKINCOLOR_NONE;
if (ref->color != SKINCOLOR_NONE && ref->color < numskincolors)
{
@ -413,8 +422,7 @@ boolean M_ChallengesInputs(INT32 ch)
gamedata->challengegrid = NULL;
gamedata->challengegridwidth = 0;
M_PopulateChallengeGrid();
Z_Free(challengesmenu.extradata);
challengesmenu.extradata = M_ChallengeGridExtraData();
M_UpdateChallengeGridExtraData(challengesmenu.extradata);
M_ChallengesAutoFocus(challengesmenu.currentunlock, true);