From e73f31f1043eaaf45e7d80ac77cded2733e925d6 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Tue, 23 Feb 2021 23:43:19 +0100 Subject: [PATCH] Correct printing multiple requirements Fixes #906 Fixes #1045 --- CMakeLists.txt | 2 +- Source/items.cpp | 55 ++++++++++++++++++------------------------------ 2 files changed, 22 insertions(+), 35 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1a9e70602..d39be4daa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -622,7 +622,7 @@ if(NOT CMAKE_CXX_COMPILER_ID MATCHES "MSVC") target_compile_options(devilution PUBLIC $<${DEBUG_GENEX}:-fno-omit-frame-pointer>) # Warnings for devilution - target_compile_options(devilution PRIVATE -Wall -Wno-multichar -Wno-int-to-pointer-cast) + target_compile_options(devilution PRIVATE -Wno-multichar -Wno-int-to-pointer-cast) # Warnings for devilutionX target_compile_options(${BIN_TARGET} PRIVATE -Wall -Wextra -Wno-unused-parameter -Wno-format-security) diff --git a/Source/items.cpp b/Source/items.cpp index 62376a8ce..e61c78a73 100644 --- a/Source/items.cpp +++ b/Source/items.cpp @@ -4160,11 +4160,27 @@ void PrintItemMisc(ItemStruct *x) } } -void PrintItemDetails(ItemStruct *x) +static void PrintItemInfo(ItemStruct *x) { - char str, dex; - BYTE mag; + PrintItemMisc(x); + Uint8 str = x->_iMinStr; + Uint8 dex = x->_iMinDex; + Uint8 mag = x->_iMinMag; + if (str || mag || dex) { + strcpy(tempstr, "Required:"); + if (str) + sprintf(tempstr + strlen(tempstr), " %i Str", str); + if (mag) + sprintf(tempstr + strlen(tempstr), " %i Mag", mag); + if (dex) + sprintf(tempstr + strlen(tempstr), " %i Dex", dex); + AddPanelString(tempstr, TRUE); + } + pinfoflag = TRUE; +} +void PrintItemDetails(ItemStruct *x) +{ if (x->_iClass == ICLASS_WEAPON) { if (x->_iMinDam == x->_iMaxDam) { if (x->_iMaxDur == DUR_INDESTRUCTIBLE) @@ -4207,27 +4223,11 @@ void PrintItemDetails(ItemStruct *x) uitemflag = TRUE; curruitem = *x; } - PrintItemMisc(x); - mag = x->_iMinMag; - dex = x->_iMinDex; - str = x->_iMinStr; - if (mag + dex + str) { - if (x->_iMinStr) - sprintf(tempstr, "Required: %i Str", x->_iMinStr); - if (x->_iMinMag) - sprintf(tempstr, "Required: %i Mag", x->_iMinMag); - if (x->_iMinDex) - sprintf(tempstr, "Required: %i Dex", x->_iMinDex); - AddPanelString(tempstr, TRUE); - } - pinfoflag = TRUE; + PrintItemInfo(x); } void PrintItemDur(ItemStruct *x) { - char str, dex; - BYTE mag; - if (x->_iClass == ICLASS_WEAPON) { if (x->_iMinDam == x->_iMaxDam) { if (x->_iMaxDur == DUR_INDESTRUCTIBLE) @@ -4263,20 +4263,7 @@ void PrintItemDur(ItemStruct *x) } if (x->_itype == ITYPE_RING || x->_itype == ITYPE_AMULET) AddPanelString("Not Identified", TRUE); - PrintItemMisc(x); - str = x->_iMinStr; - mag = x->_iMinMag; - dex = x->_iMinDex; - if (str + mag + dex) { - if (x->_iMinStr) - sprintf(tempstr, "Required: %i Str", x->_iMinStr); - if (x->_iMinMag) - sprintf(tempstr, "Required: %i Mag", x->_iMinMag); - if (x->_iMinDex) - sprintf(tempstr, "Required: %i Dex", x->_iMinDex); - AddPanelString(tempstr, TRUE); - } - pinfoflag = TRUE; + PrintItemInfo(x); } void UseItem(int p, int Mid, int spl)