diff --git a/Source/inv.cpp b/Source/inv.cpp index 653a6b13d..5318068e1 100644 --- a/Source/inv.cpp +++ b/Source/inv.cpp @@ -650,112 +650,69 @@ LABEL_24: return v6; } -int GoldAutoPlace(int pnum) +BOOL GoldAutoPlace(int pnum) { - int v1; // ebp - int v2; // edi - int v3; // ecx - int *v4; // esi - int v5; // eax - int v6; // edi - int *v7; // esi - int v8; // eax - signed int v9; // ebx - char *v10; // edx - int v11; // eax - int v12; // ecx - int pnuma; // [esp+10h] [ebp-4h] - - pnuma = pnum; - v1 = pnum; - v2 = 0; - v3 = 0; - if (plr[v1]._pNumInv <= 0) { - LABEL_14: - v6 = 0; - if (plr[v1]._pNumInv <= 0) { - LABEL_28: - v9 = 39; - do { - if (v3) - break; - v10 = &plr[0].InvGrid[10 * (v9 / 10) + v1 * 21720 + v9 % 10]; - if (!*v10) { - v11 = v1 * 21720 + 368 * plr[v1]._pNumInv; - qmemcpy((char *)plr[0].InvList + v11, &plr[v1].HoldItem, 0x170u); - ++plr[v1]._pNumInv; - *v10 = plr[v1]._pNumInv; - v12 = plr[v1].HoldItem._ivalue; - if (v12 < 2500) { - if (v12 > 1000) - *(int *)((char *)&plr[0].InvList[0]._iCurs + v11) = 5; - else - *(int *)((char *)&plr[0].InvList[0]._iCurs + v11) = 4; - } else { - *(int *)((char *)&plr[0].InvList[0]._iCurs + v11) = 6; - } - plr[v1]._pGold = CalculateGold(pnuma); - v3 = 1; - } - --v9; - } while (v9 >= 0); - } else { - v7 = &plr[v1].InvList[0]._ivalue; - while (!v3) { - if (*(v7 - 47) == 11 && *v7 < 5000) { - v8 = plr[v1].HoldItem._ivalue + *v7; - if (v8 <= 5000) { - *v7 = v8; - if (v8 < 2500) { - if (v8 > 1000) - *(v7 - 1) = 5; - else - *(v7 - 1) = 4; - } else { - *(v7 - 1) = 6; - } - plr[v1]._pGold = CalculateGold(pnuma); - v3 = 1; - } - } - ++v6; - v7 += 92; - if (v6 >= plr[v1]._pNumInv) { - if (v3) - return v3; - goto LABEL_28; - } + BOOL done; + int i, ii; + int xx, yy; + + done = FALSE; + for (i = 0; i < plr[pnum]._pNumInv && !done; i++) { + if (plr[pnum].InvList[i]._itype == ITYPE_GOLD) { + if (plr[pnum].HoldItem._ivalue + plr[pnum].InvList[i]._ivalue <= 5000) { + plr[pnum].InvList[i]._ivalue = plr[pnum].HoldItem._ivalue + plr[pnum].InvList[i]._ivalue; + if (plr[pnum].InvList[i]._ivalue >= 2500) + plr[pnum].InvList[i]._iCurs = ICURS_GOLD_LARGE; + else if (plr[pnum].InvList[i]._ivalue <= 1000) + plr[pnum].InvList[i]._iCurs = ICURS_GOLD_SMALL; + else + plr[pnum].InvList[i]._iCurs = ICURS_GOLD_MEDIUM; + plr[pnum]._pGold = CalculateGold(pnum); + done = TRUE; } } - } else { - v4 = &plr[v1].InvList[0]._ivalue; - while (!v3) { - if (*(v4 - 47) == 11) { - v5 = *v4 + plr[v1].HoldItem._ivalue; - if (v5 <= 5000) { - *v4 = v5; - if (v5 < 2500) { - if (v5 > 1000) - *(v4 - 1) = 5; - else - *(v4 - 1) = 4; - } else { - *(v4 - 1) = 6; - } - plr[v1]._pGold = CalculateGold(pnuma); - v3 = 1; - } - } - ++v2; - v4 += 92; - if (v2 >= plr[v1]._pNumInv) { - if (v3) - return v3; - goto LABEL_14; + } + if (done) + return done; + + for (i = 0; i < plr[pnum]._pNumInv && !done; i++) { + if (plr[pnum].InvList[i]._itype == ITYPE_GOLD && plr[pnum].InvList[i]._ivalue < 5000) { + if (plr[pnum].HoldItem._ivalue + plr[pnum].InvList[i]._ivalue <= 5000) { + plr[pnum].InvList[i]._ivalue = plr[pnum].HoldItem._ivalue + plr[pnum].InvList[i]._ivalue; + if (plr[pnum].InvList[i]._ivalue >= 2500) + plr[pnum].InvList[i]._iCurs = ICURS_GOLD_LARGE; + else if (plr[pnum].InvList[i]._ivalue <= 1000) + plr[pnum].InvList[i]._iCurs = ICURS_GOLD_SMALL; + else + plr[pnum].InvList[i]._iCurs = ICURS_GOLD_MEDIUM; + plr[pnum]._pGold = CalculateGold(pnum); + done = TRUE; } } } - return v3; + if (done) + return done; + + for (i = 39; i >= 0 && !done; i--) { + yy = 10 * (i / 10); + xx = i % 10; + if (!plr[pnum].InvGrid[xx + yy]) { + ii = plr[pnum]._pNumInv; + 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 >= 2500) + plr[pnum].InvList[ii]._iCurs = ICURS_GOLD_LARGE; + else if (plr[pnum].HoldItem._ivalue <= 1000) + plr[pnum].InvList[ii]._iCurs = ICURS_GOLD_SMALL; + else + plr[pnum].InvList[ii]._iCurs = ICURS_GOLD_MEDIUM; + plr[pnum]._pGold = CalculateGold(pnum); + done = TRUE; + } + } + + return done; } int WeaponAutoPlace(int pnum) diff --git a/Source/inv.h b/Source/inv.h index c8f52f200..10e2ecd31 100644 --- a/Source/inv.h +++ b/Source/inv.h @@ -12,7 +12,7 @@ void DrawInv(); void DrawInvBelt(); int AutoPlace(int pnum, int ii, int sx, int sy, int saveflag); int SpecialAutoPlace(int pnum, int ii, int sx, int sy, int saveflag); -int GoldAutoPlace(int pnum); +BOOL GoldAutoPlace(int pnum); int WeaponAutoPlace(int pnum); int SwapItem(ItemStruct *a, ItemStruct *b); void CheckInvPaste(int pnum, int mx, int my);