Browse Source

Clean up InvPutItem

pull/88/head
Anders Jenbo 7 years ago
parent
commit
a8cea69923
  1. 148
      Source/inv.cpp

148
Source/inv.cpp

@ -2130,110 +2130,70 @@ void DrawInvMsg(char *msg)
int InvPutItem(int pnum, int x, int y)
{
int v3; // edi
int *v4; // esi
int v5; // ebx
int v6; // esi
int v7; // eax
int v8; // edi
int v9; // esi
int v10; // esi
int v11; // eax
int v12; // edx
int v13; // esi
int v15; // eax
int *v16; // edx
int v17; // edx
ItemStruct *v18; // [esp+Ch] [ebp-1Ch]
int v19; // [esp+10h] [ebp-18h]
signed int v20; // [esp+14h] [ebp-14h]
int v21; // [esp+18h] [ebp-10h]
int v22; // [esp+1Ch] [ebp-Ch]
signed int v23; // [esp+20h] [ebp-8h]
int xa; // [esp+24h] [ebp-4h]
int ya; // [esp+30h] [ebp+8h]
int yb; // [esp+30h] [ebp+8h]
int yc; // [esp+30h] [ebp+8h]
xa = x;
BOOL done;
int d, dy, ii;
int i, j, l;
int xx, yy;
if (numitems >= 127)
return -1;
v3 = pnum;
_LOWORD(x) = plr[pnum].HoldItem._iCreateInfo;
v4 = &plr[pnum].HoldItem._iSeed;
v18 = &plr[pnum].HoldItem;
v5 = y;
if (FindGetItem(plr[pnum].HoldItem.IDidx, x, plr[pnum].HoldItem._iSeed) != -1) {
if (FindGetItem(plr[pnum].HoldItem.IDidx, plr[pnum].HoldItem._iCreateInfo, plr[pnum].HoldItem._iSeed) != -1) {
DrawInvMsg("A duplicate item has been detected. Destroying duplicate...");
SyncGetItem(xa, y, plr[v3].HoldItem.IDidx, plr[v3].HoldItem._iCreateInfo, *v4);
}
ya = GetDirection(plr[v3].WorldX, plr[v3].WorldY, xa, y);
v6 = v5 - plr[v3].WorldY;
if (abs(xa - plr[v3].WorldX) > 1 || abs(v6) > 1) {
v5 = plr[v3].WorldY + offset_y[ya];
xa = plr[v3].WorldX + offset_x[ya];
}
if (!CanPut(xa, v5)) {
v7 = plr[v3].WorldX;
v8 = plr[v3].WorldY;
v9 = ((_BYTE)ya - 1) & 7;
v19 = v7;
v5 = v8 + offset_y[v9];
xa = v7 + offset_x[v9];
if (!CanPut(xa, v8 + offset_y[v9])) {
v10 = ((_BYTE)v9 + 2) & 7;
v5 = v8 + offset_y[v10];
xa = v19 + offset_x[v10];
if (!CanPut(xa, v8 + offset_y[v10])) {
v23 = 0;
v11 = -1;
yb = 1;
v20 = -1;
while (!v23) {
v22 = v11;
while (v11 <= yb && !v23) {
v21 = v20;
v12 = v8 + v22;
v13 = v19 + v20;
do {
if (v23)
break;
if (CanPut(v13, v12)) {
v23 = 1;
xa = v13;
v5 = v12;
SyncGetItem(x, y, plr[pnum].HoldItem.IDidx, plr[pnum].HoldItem._iCreateInfo, plr[pnum].HoldItem._iSeed);
}
d = GetDirection(plr[pnum].WorldX, plr[pnum].WorldY, x, y);
xx = x - plr[pnum].WorldX;
yy = y - plr[pnum].WorldY;
if (abs(xx) > 1 || abs(yy) > 1) {
x = plr[pnum].WorldX + offset_x[d];
y = plr[pnum].WorldY + offset_y[d];
}
if (!CanPut(x, y)) {
d = (d - 1) & 7;
x = plr[pnum].WorldX + offset_x[d];
y = plr[pnum].WorldY + offset_y[d];
if (!CanPut(x, y)) {
d = (d + 2) & 7;
x = plr[pnum].WorldX + offset_x[d];
y = plr[pnum].WorldY + offset_y[d];
if (!CanPut(x, y)) {
done = FALSE;
for (l = 1; l < 50 && !done; l++) {
for (j = -l; j <= l && !done; j++) {
yy = j + plr[pnum].WorldY;
for (i = -l; i <= l && !done; i++) {
xx = i + plr[pnum].WorldX;
if (CanPut(xx, yy)) {
done = TRUE;
x = xx;
y = yy;
}
++v21;
++v13;
} while (v21 <= yb);
v11 = ++v22;
}
++yb;
v11 = v20-- - 1;
if (v20 <= -50) {
if (v23)
break;
return -1;
}
}
}
if (!done)
return -1;
}
}
}
CanPut(xa, v5);
v15 = itemavail[0];
dItem[xa][v5] = _LOBYTE(itemavail[0]) + 1;
yc = v15;
v16 = &itemavail[MAXITEMS - numitems - 1];
itemactive[numitems] = v15;
itemavail[0] = *v16;
v17 = v15;
qmemcpy(&item[v15], v18, sizeof(ItemStruct));
item[v17]._iy = v5;
item[v17]._ix = xa;
RespawnItem(v15, 1);
++numitems;
CanPut(x, y); //if (!CanPut(x, y)) {
// assertion_failed(1524, "C:\\Diablo\\Direct\\inv.cpp", "CanPut(x,y)");
//}
ii = itemavail[0];
dItem[x][y] = ii + 1;
itemavail[0] = itemavail[MAXITEMS - (numitems + 1)];
itemactive[numitems] = ii;
item[ii] = plr[pnum].HoldItem;
item[ii]._ix = x;
item[ii]._iy = y;
RespawnItem(ii, 1);
numitems++;
SetCursor_(CURSOR_HAND);
return yc;
return ii;
}
int SyncPutItem(int pnum, int x, int y, int idx, WORD icreateinfo, int iseed, int Id, int dur, int mdur, int ch, int mch, int ivalue, unsigned int ibuff)

Loading…
Cancel
Save