diff --git a/Source/inv.cpp b/Source/inv.cpp index 1b84ed3c8..a7317a2fb 100644 --- a/Source/inv.cpp +++ b/Source/inv.cpp @@ -463,7 +463,7 @@ void DrawInvBelt() // 4B8960: using guessed type int talkflag; // 4B8CB8: using guessed type char pcursinvitem; -BOOL AutoPlace(int pnum, int ii, int sx, int sy, int saveflag) +BOOL AutoPlace(int pnum, int ii, int sx, int sy, BOOL saveflag) { int i, j, xx, yy; BOOL done; diff --git a/Source/inv.h b/Source/inv.h index f5261e4a5..fb8267e2a 100644 --- a/Source/inv.h +++ b/Source/inv.h @@ -10,7 +10,7 @@ void InitInv(); void InvDrawSlotBack(int X, int Y, int W, int H); void DrawInv(); void DrawInvBelt(); -BOOL AutoPlace(int pnum, int ii, int sx, int sy, int saveflag); +BOOL AutoPlace(int pnum, int ii, int sx, int sy, BOOL saveflag); BOOL SpecialAutoPlace(int pnum, int ii, int sx, int sy, int saveflag); BOOL GoldAutoPlace(int pnum); int WeaponAutoPlace(int pnum); diff --git a/Source/stores.cpp b/Source/stores.cpp index a9581298f..e78ec1ab6 100644 --- a/Source/stores.cpp +++ b/Source/stores.cpp @@ -401,156 +401,72 @@ void AddSText(int x, int y, int j, char *str, char clr, int sel) void StoreAutoPlace() { - int v0; // edi - int v1; // eax - int v2; // edx - ItemStruct *v3; // ebp - int v4; // esi - int v5; // esi - int v6; // esi - int v7; // esi - int v8; // esi - int v9; // esi - int v10; // esi - int v11; // esi - int *v12; // esi - int v13; // esi - int v14; // esi - int v15; // esi - int v16; // esi - int v17; // esi - signed int v19; // [esp+10h] [ebp-Ch] - int v20; // [esp+14h] [ebp-8h] - int v21; // [esp+18h] [ebp-4h] + BOOL done; + int i, w, h, idx; SetICursor(plr[myplr].HoldItem._iCurs + CURSOR_FIRSTITEM); - v0 = icursH28; - v1 = 0; - v21 = icursW28; - v20 = icursH28; - if (icursW28 == 1) { - if (icursH28 == 1) { - v2 = myplr; - if (plr[myplr].HoldItem._iStatFlag && AllItemsList[plr[v2].HoldItem.IDidx].iUsable) { - v19 = 0; - v3 = plr[v2].SpdList; - do { - if (v1) - break; - if (v3->_itype == -1) { - qmemcpy(v3, &plr[v2].HoldItem, sizeof(ItemStruct)); - v0 = v20; - v1 = 1; - } - ++v19; - ++v3; - } while (v19 < 8); - } - v4 = 30; - do { - if (v1) - break; - v1 = AutoPlace(myplr, v4++, 1, 1, 1); - } while (v4 <= 39); - v5 = 20; - do { - if (v1) - break; - v1 = AutoPlace(myplr, v5++, 1, 1, 1); - } while (v5 <= 29); - v6 = 10; - do { - if (v1) - break; - v1 = AutoPlace(myplr, v6++, 1, 1, 1); - } while (v6 <= 19); - v7 = 0; - while (!v1) { - v1 = AutoPlace(myplr, v7++, 1, 1, 1); - if (v7 > 9) - goto LABEL_22; - } - } else { - LABEL_22: - if (v0 == 2) { - v8 = 29; - do { - if (v1) - break; - v1 = AutoPlace(myplr, v8--, 1, 2, 1); - } while (v8 >= 20); - v9 = 9; - do { - if (v1) - break; - v1 = AutoPlace(myplr, v9--, 1, 2, 1); - } while (v9 >= 0); - v10 = 19; - while (!v1) { - v1 = AutoPlace(myplr, v10--, 1, 2, 1); - if (v10 < 10) - goto LABEL_32; - } - } else { - LABEL_32: - if (v0 == 3) { - v11 = 0; - while (!v1) { - v1 = AutoPlace(myplr, v11++, 1, 3, 1); - if (v11 >= 20) - goto LABEL_36; - } + done = FALSE; + w = icursW28; + h = icursH28; + if (w == 1 && h == 1) { + idx = plr[myplr].HoldItem.IDidx; + if (plr[myplr].HoldItem._iStatFlag && AllItemsList[idx].iUsable) { + for (i = 0; i < 8 && !done; i++) { + if (plr[myplr].SpdList[i]._itype == ITYPE_NONE) { + plr[myplr].SpdList[i] = plr[myplr].HoldItem; + done = TRUE; } } } - } else { - LABEL_36: - if (v21 == 2) { - if (v0 == 2) { - v12 = AP2x2Tbl; - do { - if (v1) - break; - v1 = AutoPlace(myplr, *v12, 2, 2, 1); - ++v12; - } while ((signed int)v12 < (signed int)&AP2x2Tbl[10]); - v13 = 21; - do { - if (v1) - break; - v1 = AutoPlace(myplr, v13, 2, 2, 1); - v13 += 2; - } while (v13 < 29); - v14 = 1; - do { - if (v1) - break; - v1 = AutoPlace(myplr, v14, 2, 2, 1); - v14 += 2; - } while (v14 < 9); - v15 = 10; - while (!v1) { - v1 = AutoPlace(myplr, v15++, 2, 2, 1); - if (v15 >= 19) - goto LABEL_50; - } - } else { - LABEL_50: - if (v0 == 3) { - v16 = 0; - do { - if (v1) - break; - v1 = AutoPlace(myplr, v16++, 2, 3, 1); - } while (v16 < 9); - v17 = 10; - do { - if (v1) - break; - v1 = AutoPlace(myplr, v17++, 2, 3, 1); - } while (v17 < 19); - } - } + for (i = 30; i <= 39 && !done; i++) { + done = AutoPlace(myplr, i, w, h, TRUE); + } + for (i = 20; i <= 29 && !done; i++) { + done = AutoPlace(myplr, i, w, h, TRUE); + } + for (i = 10; i <= 19 && !done; i++) { + done = AutoPlace(myplr, i, w, h, TRUE); + } + for (i = 0; i <= 9 && !done; i++) { + done = AutoPlace(myplr, i, w, h, TRUE); + } + } + if (w == 1 && h == 2) { + for (i = 29; i >= 20 && !done; i--) { + done = AutoPlace(myplr, i, w, h, TRUE); + } + for (i = 9; i >= 0 && !done; i--) { + done = AutoPlace(myplr, i, w, h, TRUE); + } + for (i = 19; i >= 10 && !done; i--) { + done = AutoPlace(myplr, i, w, h, TRUE); + } + } + if (w == 1 && h == 3) { + for (i = 0; i < 20 && !done; i++) { + done = AutoPlace(myplr, i, w, h, TRUE); + } + } + if (w == 2 && h == 2) { + for (i = 0; i < 10 && !done; i++) { + done = AutoPlace(myplr, AP2x2Tbl[i], w, h, TRUE); + } + for (i = 21; i < 29 && !done; i += 2) { + done = AutoPlace(myplr, i, w, h, TRUE); + } + for (i = 1; i < 9 && !done; i += 2) { + done = AutoPlace(myplr, i, w, h, TRUE); + } + for (i = 10; i < 19 && !done; i++) { + done = AutoPlace(myplr, i, w, h, TRUE); + } + } + if (w == 2 && h == 3) { + for (i = 0; i < 9 && !done; i++) { + done = AutoPlace(myplr, i, w, h, TRUE); + } + for (i = 10; i < 19 && !done; i++) { + done = AutoPlace(myplr, i, w, h, TRUE); } } }