From 339617a54e6fce9dc5f099c4b8db07c0b6651f49 Mon Sep 17 00:00:00 2001 From: toaster Date: Fri, 24 Feb 2023 19:10:44 +0000 Subject: [PATCH] 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 --- src/m_cond.c | 17 +++++------------ src/m_cond.h | 2 +- src/menus/extras-challenges.c | 22 +++++++++++++++------- 3 files changed, 21 insertions(+), 20 deletions(-) diff --git a/src/m_cond.c b/src/m_cond.c index 26d91d6a0..f948f400d 100644 --- a/src/m_cond.c +++ b/src/m_cond.c @@ -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) diff --git a/src/m_cond.h b/src/m_cond.h index 4d8ac1c2b..f8fa531d2 100644 --- a/src/m_cond.h +++ b/src/m_cond.h @@ -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 diff --git a/src/menus/extras-challenges.c b/src/menus/extras-challenges.c index e38415bdf..fb8598eff 100644 --- a/src/menus/extras-challenges.c +++ b/src/menus/extras-challenges.c @@ -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);