From 528f8873cf2668fb4903b81bd64bb03363d050be Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Tue, 30 Apr 2019 05:04:41 +0200 Subject: [PATCH] Clean up CheckUnique --- Source/items.cpp | 39 ++++++++++++++++----------------------- Source/items.h | 2 +- 2 files changed, 17 insertions(+), 24 deletions(-) diff --git a/Source/items.cpp b/Source/items.cpp index 0643b2c3d..79d29abc4 100644 --- a/Source/items.cpp +++ b/Source/items.cpp @@ -1922,49 +1922,42 @@ int RndTypeItems(int itype, int imid) return ril[random(27, ri)]; } -int CheckUnique(int i, int lvl, int uper, BOOLEAN recreate) +int CheckUnique(int i, int lvl, int uper, BOOL recreate) { - int numu; // ebx - int j; // esi - int idata; // eax - char uok[128]; // [esp+8h] [ebp-84h] + int j, idata, numu; + BOOLEAN uok[128]; if (random(28, 100) > uper) return -1; + numu = 0; memset(uok, 0, sizeof(uok)); - - if (UniqueItemList[0].UIItemId == -1) - return -1; - j = 0; - do { + for (j = 0; UniqueItemList[j].UIItemId != UITYPE_INVALID; j++) { if (UniqueItemList[j].UIItemId == AllItemsList[item[i].IDidx].iItemId && lvl >= UniqueItemList[j].UIMinLvl && (recreate || !UniqueItemFlag[j] || gbMaxPlayers != 1)) { - uok[j] = 1; - ++numu; + uok[j] = TRUE; + numu++; } - j++; - } while (UniqueItemList[j].UIItemId != -1); + } + if (!numu) return -1; random(29, 10); idata = 0; - if (numu > 0) { - while (1) { - if (uok[idata]) - --numu; - if (numu <= 0) - break; - if (++idata == 128) + while (numu > 0) { + if (uok[idata]) + numu--; + if (numu > 0) { + idata++; + if (idata == 128) idata = 0; } } + return idata; } -// 679660: using guessed type char gbMaxPlayers; -// 421D41: using guessed type char var_84[128]; void GetUniqueItem(int i, int uid) { diff --git a/Source/items.h b/Source/items.h index 568581000..5010cd9a8 100644 --- a/Source/items.h +++ b/Source/items.h @@ -51,7 +51,7 @@ int RndItem(int m); int RndUItem(int m); int RndAllItems(); int RndTypeItems(int itype, int imid); -int CheckUnique(int i, int lvl, int uper, BOOLEAN recreate); +int CheckUnique(int i, int lvl, int uper, BOOL recreate); void GetUniqueItem(int i, int uid); void SpawnUnique(int uid, int x, int y); void ItemRndDur(int ii);