From c08a10e44b9d958db07dfdeb984cc546d78d76a5 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Thu, 18 Feb 2021 20:43:47 +0100 Subject: [PATCH] Unify calculation of gold icon --- Source/control.cpp | 8 +----- Source/inv.cpp | 70 ++++++++++------------------------------------ Source/items.cpp | 29 +++++++++++-------- Source/items.h | 1 + Source/stores.cpp | 14 ++-------- 5 files changed, 35 insertions(+), 87 deletions(-) diff --git a/Source/control.cpp b/Source/control.cpp index 763a89c7e..476fd08b4 100644 --- a/Source/control.cpp +++ b/Source/control.cpp @@ -2077,13 +2077,7 @@ void control_remove_gold(int pnum, int gold_index) void control_set_gold_curs(int pnum) { - if (plr[pnum].HoldItem._ivalue >= GOLD_MEDIUM_LIMIT) - plr[pnum].HoldItem._iCurs = ICURS_GOLD_LARGE; - else if (plr[pnum].HoldItem._ivalue <= GOLD_SMALL_LIMIT) - plr[pnum].HoldItem._iCurs = ICURS_GOLD_SMALL; - else - plr[pnum].HoldItem._iCurs = ICURS_GOLD_MEDIUM; - + SetPlrHandGoldCurs(&plr[pnum].HoldItem); NewCursor(plr[pnum].HoldItem._iCurs + CURSOR_FIRSTITEM); } diff --git a/Source/inv.cpp b/Source/inv.cpp index a159c9098..cfb5a476c 100644 --- a/Source/inv.cpp +++ b/Source/inv.cpp @@ -676,7 +676,7 @@ BOOL SpecialAutoPlace(int pnum, int ii, int sx, int sy) } } } - + return done; } @@ -692,12 +692,7 @@ BOOL GoldAutoPlace(int pnum) int gold = plr[pnum].InvList[i]._ivalue + plr[pnum].HoldItem._ivalue; if (gold <= MaxGold) { plr[pnum].InvList[i]._ivalue = gold; - if (gold >= GOLD_MEDIUM_LIMIT) - plr[pnum].InvList[i]._iCurs = ICURS_GOLD_LARGE; - else if (gold <= GOLD_SMALL_LIMIT) - plr[pnum].InvList[i]._iCurs = ICURS_GOLD_SMALL; - else - plr[pnum].InvList[i]._iCurs = ICURS_GOLD_MEDIUM; + SetPlrHandGoldCurs(&plr[pnum].InvList[i]); plr[pnum]._pGold = CalculateGold(pnum); done = TRUE; #ifdef HELLFIRE @@ -728,12 +723,7 @@ BOOL GoldAutoPlace(int pnum) if (plr[pnum].InvList[i]._itype == ITYPE_GOLD && plr[pnum].InvList[i]._ivalue < GOLD_MAX_LIMIT) { if (plr[pnum].HoldItem._ivalue + plr[pnum].InvList[i]._ivalue <= GOLD_MAX_LIMIT) { plr[pnum].InvList[i]._ivalue = plr[pnum].HoldItem._ivalue + plr[pnum].InvList[i]._ivalue; - if (plr[pnum].InvList[i]._ivalue >= GOLD_MEDIUM_LIMIT) - plr[pnum].InvList[i]._iCurs = ICURS_GOLD_LARGE; - else if (plr[pnum].InvList[i]._ivalue <= GOLD_SMALL_LIMIT) - plr[pnum].InvList[i]._iCurs = ICURS_GOLD_SMALL; - else - plr[pnum].InvList[i]._iCurs = ICURS_GOLD_MEDIUM; + SetPlrHandGoldCurs(&plr[pnum].InvList[i]); plr[pnum]._pGold = CalculateGold(pnum); done = TRUE; } @@ -750,12 +740,7 @@ BOOL GoldAutoPlace(int pnum) plr[pnum].InvList[ii] = plr[pnum].HoldItem; plr[pnum]._pNumInv = plr[pnum]._pNumInv + 1; plr[pnum].InvGrid[xx + yy] = plr[pnum]._pNumInv; - if (plr[pnum].HoldItem._ivalue >= GOLD_MEDIUM_LIMIT) - plr[pnum].InvList[ii]._iCurs = ICURS_GOLD_LARGE; - else if (plr[pnum].HoldItem._ivalue <= GOLD_SMALL_LIMIT) - plr[pnum].InvList[ii]._iCurs = ICURS_GOLD_SMALL; - else - plr[pnum].InvList[ii]._iCurs = ICURS_GOLD_MEDIUM; + GetPlrHandSeed(&plr[pnum].InvList[ii]); #ifdef HELLFIRE int gold = plr[pnum].HoldItem._ivalue; if (gold > MaxGold) { @@ -1119,25 +1104,16 @@ void CheckInvPaste(int pnum, int mx, int my) if (ig <= GOLD_MAX_LIMIT) { plr[pnum].InvList[il]._ivalue = ig; plr[pnum]._pGold += plr[pnum].HoldItem._ivalue; - if (ig >= GOLD_MEDIUM_LIMIT) - plr[pnum].InvList[il]._iCurs = ICURS_GOLD_LARGE; - else if (ig <= GOLD_SMALL_LIMIT) - plr[pnum].InvList[il]._iCurs = ICURS_GOLD_SMALL; - else - plr[pnum].InvList[il]._iCurs = ICURS_GOLD_MEDIUM; + SetPlrHandGoldCurs(&plr[pnum].InvList[il]); } else { ig = GOLD_MAX_LIMIT - gt; plr[pnum]._pGold += ig; plr[pnum].HoldItem._ivalue -= ig; plr[pnum].InvList[il]._ivalue = GOLD_MAX_LIMIT; plr[pnum].InvList[il]._iCurs = ICURS_GOLD_LARGE; - // BUGFIX: incorrect values here are leftover from beta - if (plr[pnum].HoldItem._ivalue >= GOLD_MEDIUM_LIMIT) - cn = ICURS_GOLD_LARGE + CURSOR_FIRSTITEM; - else if (plr[pnum].HoldItem._ivalue <= GOLD_SMALL_LIMIT) - cn = ICURS_GOLD_SMALL + CURSOR_FIRSTITEM; - else - cn = ICURS_GOLD_MEDIUM + CURSOR_FIRSTITEM; + // BUGFIX: incorrect values here are leftover from beta (fixed) + cn = GetGoldCursor(plr[pnum].HoldItem._ivalue); + cn += CURSOR_FIRSTITEM; } } else { il = plr[pnum]._pNumInv; @@ -1145,16 +1121,7 @@ void CheckInvPaste(int pnum, int mx, int my) plr[pnum]._pNumInv++; plr[pnum].InvGrid[yy + xx] = plr[pnum]._pNumInv; plr[pnum]._pGold += plr[pnum].HoldItem._ivalue; - if (plr[pnum].HoldItem._ivalue <= GOLD_MAX_LIMIT) { - if (plr[pnum].HoldItem._ivalue >= GOLD_MEDIUM_LIMIT) - plr[pnum].InvList[il]._iCurs = ICURS_GOLD_LARGE; - else if (plr[pnum].HoldItem._ivalue <= GOLD_SMALL_LIMIT) - plr[pnum].InvList[il]._iCurs = ICURS_GOLD_SMALL; - else - plr[pnum].InvList[il]._iCurs = ICURS_GOLD_MEDIUM; - } else { - plr[pnum].InvList[ii]._iCurs = ICURS_GOLD_LARGE; - } + SetPlrHandGoldCurs(&plr[pnum].InvList[il]); } } else { if (it == 0) { @@ -1201,14 +1168,9 @@ void CheckInvPaste(int pnum, int mx, int my) if (plr[pnum].SpdList[ii]._itype == ITYPE_GOLD) { i = plr[pnum].HoldItem._ivalue + plr[pnum].SpdList[ii]._ivalue; if (i <= GOLD_MAX_LIMIT) { - plr[pnum].SpdList[ii]._ivalue += plr[pnum].HoldItem._ivalue; + plr[pnum].SpdList[ii]._ivalue = i; plr[pnum]._pGold += plr[pnum].HoldItem._ivalue; - if (i >= GOLD_MEDIUM_LIMIT) - plr[pnum].SpdList[ii]._iCurs = ICURS_GOLD_LARGE; - else if (i <= GOLD_SMALL_LIMIT) - plr[pnum].SpdList[ii]._iCurs = ICURS_GOLD_SMALL; - else - plr[pnum].SpdList[ii]._iCurs = ICURS_GOLD_MEDIUM; + SetPlrHandGoldCurs(&plr[pnum].SpdList[ii]); } else { i = GOLD_MAX_LIMIT - plr[pnum].SpdList[ii]._ivalue; plr[pnum]._pGold += i; @@ -1216,13 +1178,9 @@ void CheckInvPaste(int pnum, int mx, int my) plr[pnum].SpdList[ii]._ivalue = GOLD_MAX_LIMIT; plr[pnum].SpdList[ii]._iCurs = ICURS_GOLD_LARGE; - // BUGFIX: incorrect values here are leftover from beta - if (plr[pnum].HoldItem._ivalue >= GOLD_MEDIUM_LIMIT) - cn = ICURS_GOLD_LARGE + CURSOR_FIRSTITEM; - else if (plr[pnum].HoldItem._ivalue <= GOLD_SMALL_LIMIT) - cn = ICURS_GOLD_SMALL + CURSOR_FIRSTITEM; - else - cn = ICURS_GOLD_MEDIUM + CURSOR_FIRSTITEM; + // BUGFIX: incorrect values here are leftover from beta (fixed) + cn = GetGoldCursor(plr[pnum].HoldItem._ivalue); + cn += CURSOR_FIRSTITEM; } } else { plr[pnum]._pGold += plr[pnum].HoldItem._ivalue; diff --git a/Source/items.cpp b/Source/items.cpp index a12ad66ca..9845e9374 100644 --- a/Source/items.cpp +++ b/Source/items.cpp @@ -1317,14 +1317,24 @@ void SetPlrHandSeed(ItemStruct *h, int iseed) h->_iSeed = iseed; } +int GetGoldCursor(int value) +{ + if (value >= GOLD_MEDIUM_LIMIT) + return ICURS_GOLD_LARGE; + + if (value <= GOLD_SMALL_LIMIT) + return ICURS_GOLD_SMALL; + + return ICURS_GOLD_MEDIUM; +} + +/** + * @brief Update the gold cursor on the given gold item + * @param h The item to update + */ void SetPlrHandGoldCurs(ItemStruct *h) { - if (h->_ivalue >= GOLD_MEDIUM_LIMIT) - h->_iCurs = ICURS_GOLD_LARGE; - else if (h->_ivalue <= GOLD_SMALL_LIMIT) - h->_iCurs = ICURS_GOLD_SMALL; - else - h->_iCurs = ICURS_GOLD_MEDIUM; + h->_iCurs = GetGoldCursor(h->_ivalue); } void CreatePlrItems(int p) @@ -2965,12 +2975,7 @@ void RecreateItem(int ii, int idx, WORD icreateinfo, int iseed, int ivalue) item[ii]._iSeed = iseed; item[ii]._iCreateInfo = icreateinfo; item[ii]._ivalue = ivalue; - if (ivalue >= GOLD_MEDIUM_LIMIT) - item[ii]._iCurs = ICURS_GOLD_LARGE; - else if (ivalue <= GOLD_SMALL_LIMIT) - item[ii]._iCurs = ICURS_GOLD_SMALL; - else - item[ii]._iCurs = ICURS_GOLD_MEDIUM; + SetPlrHandGoldCurs(&item[ii]); } else { if (!icreateinfo) { SetPlrHandItem(&item[ii], idx); diff --git a/Source/items.h b/Source/items.h index 0252e57a0..af6f03517 100644 --- a/Source/items.h +++ b/Source/items.h @@ -48,6 +48,7 @@ void CalcPlrInv(int p, BOOL Loadgfx); void SetPlrHandItem(ItemStruct *h, int idata); void GetPlrHandSeed(ItemStruct *h); void GetGoldSeed(int pnum, ItemStruct *h); +int GetGoldCursor(int value); void SetPlrHandGoldCurs(ItemStruct *h); void CreatePlrItems(int p); BOOL ItemSpaceOk(int i, int j); diff --git a/Source/stores.cpp b/Source/stores.cpp index e785b94c9..5d29e0f10 100644 --- a/Source/stores.cpp +++ b/Source/stores.cpp @@ -1837,22 +1837,12 @@ void S_SmithEnter() void SetGoldCurs(int pnum, int i) { - if (plr[pnum].InvList[i]._ivalue >= GOLD_MEDIUM_LIMIT) - plr[pnum].InvList[i]._iCurs = ICURS_GOLD_LARGE; - else if (plr[pnum].InvList[i]._ivalue <= GOLD_SMALL_LIMIT) - plr[pnum].InvList[i]._iCurs = ICURS_GOLD_SMALL; - else - plr[pnum].InvList[i]._iCurs = ICURS_GOLD_MEDIUM; + SetPlrHandGoldCurs(&plr[pnum].InvList[i]); } void SetSpdbarGoldCurs(int pnum, int i) { - if (plr[pnum].SpdList[i]._ivalue >= GOLD_MEDIUM_LIMIT) - plr[pnum].SpdList[i]._iCurs = ICURS_GOLD_LARGE; - else if (plr[pnum].SpdList[i]._ivalue <= GOLD_SMALL_LIMIT) - plr[pnum].SpdList[i]._iCurs = ICURS_GOLD_SMALL; - else - plr[pnum].SpdList[i]._iCurs = ICURS_GOLD_MEDIUM; + SetPlrHandGoldCurs(&plr[pnum].SpdList[i]); } void TakePlrsMoney(int cost)