From 017871eaad1dfd16a44254fe6d56784a98c2afea Mon Sep 17 00:00:00 2001 From: toaster Date: Sat, 3 Dec 2022 12:18:59 +0000 Subject: [PATCH] Custom Icon support for `unlockable_t` --- src/deh_soc.c | 8 ++++++++ src/k_menudraw.c | 17 +++++++++++++++++ src/m_cond.h | 1 + 3 files changed, 26 insertions(+) diff --git a/src/deh_soc.c b/src/deh_soc.c index e5a5ca41b..c85c3da4a 100644 --- a/src/deh_soc.c +++ b/src/deh_soc.c @@ -156,6 +156,9 @@ void clear_unlockables(void) { Z_Free(unlockables[i].stringVar); unlockables[i].stringVar = NULL; + + Z_Free(unlockables[i].icon); + unlockables[i].icon = NULL; } memset(&unlockables, 0, sizeof(unlockables)); @@ -2379,6 +2382,11 @@ void readunlockable(MYFILE *f, INT32 num) unlockables[num].stringVar = Z_StrDup(word2); unlockables[num].variable = (INT16)i; } + else if (fastcmp(word, "ICON")) + { + Z_Free(unlockables[num].icon); + unlockables[num].icon = Z_StrDup(word2); + } else deh_warning("Unlockable %d: unknown word '%s'", num+1, word); } diff --git a/src/k_menudraw.c b/src/k_menudraw.c index 7816b34f7..d33794e37 100644 --- a/src/k_menudraw.c +++ b/src/k_menudraw.c @@ -4517,6 +4517,23 @@ void M_DrawChallenges(void) goto drawborder; } + if (ref->icon != NULL) + { + patch_t *pat = W_CachePatchName(ref->icon, PU_CACHE); + fixed_t siz = (SHORT(pat->width) << FRACBITS); + + siz = FixedDiv(((ref->majorunlock) ? 32 : 16) << FRACBITS, siz); + + V_DrawFixedPatch( + x*FRACUNIT, y*FRACUNIT, + siz, + 0, pat, + NULL + ); + + goto drawborder; + } + switch (ref->type) { case SECRET_SKIN: diff --git a/src/m_cond.h b/src/m_cond.h index fec228f10..1332cd45f 100644 --- a/src/m_cond.h +++ b/src/m_cond.h @@ -93,6 +93,7 @@ typedef struct { char name[64]; char objective[64]; + char *icon; UINT8 conditionset; INT16 type; INT16 variable;