From 6aa076461eed6fafda0bbb06005033a1c475298e Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 22 Oct 2018 02:03:35 +0200 Subject: [PATCH] Format inv.cpp --- Source/inv.cpp | 5606 ++++++++++++++++++++++-------------------------- 1 file changed, 2596 insertions(+), 3010 deletions(-) diff --git a/Source/inv.cpp b/Source/inv.cpp index f98618305..c9bc829ad 100644 --- a/Source/inv.cpp +++ b/Source/inv.cpp @@ -7,81 +7,80 @@ void *pInvCels; int drawsbarflag; // idb int sgdwLastTime; // check name -const InvXY InvRect[73] = -{ - { 452, 31 }, // helmet - { 480, 31 }, // helmet - { 452, 59 }, // helmet - { 480, 59 }, // helmet - { 365, 205 }, // left ring - { 567, 205 }, // right ring - { 524, 59 }, // amulet - { 337, 104 }, // left hand - { 366, 104 }, // left hand - { 337, 132 }, // left hand - { 366, 132 }, // left hand - { 337, 160 }, // left hand - { 366, 160 }, // left hand - { 567, 104 }, // right hand - { 596, 104 }, // right hand - { 567, 132 }, // right hand - { 596, 132 }, // right hand - { 567, 160 }, // right hand - { 596, 160 }, // right hand - { 452, 104 }, // chest - { 480, 104 }, // chest - { 452, 132 }, // chest - { 480, 132 }, // chest - { 452, 160 }, // chest - { 480, 160 }, // chest - { 337, 250 }, // inv row 1 - { 366, 250 }, // inv row 1 - { 394, 250 }, // inv row 1 - { 423, 250 }, // inv row 1 - { 451, 250 }, // inv row 1 - { 480, 250 }, // inv row 1 - { 509, 250 }, // inv row 1 - { 538, 250 }, // inv row 1 - { 567, 250 }, // inv row 1 - { 596, 250 }, // inv row 1 - { 337, 279 }, // inv row 2 - { 366, 279 }, // inv row 2 - { 394, 279 }, // inv row 2 - { 423, 279 }, // inv row 2 - { 451, 279 }, // inv row 2 - { 480, 279 }, // inv row 2 - { 509, 279 }, // inv row 2 - { 538, 279 }, // inv row 2 - { 567, 279 }, // inv row 2 - { 596, 279 }, // inv row 2 - { 337, 308 }, // inv row 3 - { 366, 308 }, // inv row 3 - { 394, 308 }, // inv row 3 - { 423, 308 }, // inv row 3 - { 451, 308 }, // inv row 3 - { 480, 308 }, // inv row 3 - { 509, 308 }, // inv row 3 - { 538, 308 }, // inv row 3 - { 567, 308 }, // inv row 3 - { 596, 308 }, // inv row 3 - { 337, 336 }, // inv row 4 - { 366, 336 }, // inv row 4 - { 394, 336 }, // inv row 4 - { 423, 336 }, // inv row 4 - { 451, 336 }, // inv row 4 - { 480, 336 }, // inv row 4 - { 509, 336 }, // inv row 4 - { 538, 336 }, // inv row 4 - { 567, 336 }, // inv row 4 - { 596, 336 }, // inv row 4 - { 205, 385 }, // belt - { 234, 385 }, // belt - { 263, 385 }, // belt - { 292, 385 }, // belt - { 321, 385 }, // belt - { 350, 385 }, // belt - { 379, 385 }, // belt - { 408, 385 } // belt +const InvXY InvRect[73] = { + { 452, 31 }, // helmet + { 480, 31 }, // helmet + { 452, 59 }, // helmet + { 480, 59 }, // helmet + { 365, 205 }, // left ring + { 567, 205 }, // right ring + { 524, 59 }, // amulet + { 337, 104 }, // left hand + { 366, 104 }, // left hand + { 337, 132 }, // left hand + { 366, 132 }, // left hand + { 337, 160 }, // left hand + { 366, 160 }, // left hand + { 567, 104 }, // right hand + { 596, 104 }, // right hand + { 567, 132 }, // right hand + { 596, 132 }, // right hand + { 567, 160 }, // right hand + { 596, 160 }, // right hand + { 452, 104 }, // chest + { 480, 104 }, // chest + { 452, 132 }, // chest + { 480, 132 }, // chest + { 452, 160 }, // chest + { 480, 160 }, // chest + { 337, 250 }, // inv row 1 + { 366, 250 }, // inv row 1 + { 394, 250 }, // inv row 1 + { 423, 250 }, // inv row 1 + { 451, 250 }, // inv row 1 + { 480, 250 }, // inv row 1 + { 509, 250 }, // inv row 1 + { 538, 250 }, // inv row 1 + { 567, 250 }, // inv row 1 + { 596, 250 }, // inv row 1 + { 337, 279 }, // inv row 2 + { 366, 279 }, // inv row 2 + { 394, 279 }, // inv row 2 + { 423, 279 }, // inv row 2 + { 451, 279 }, // inv row 2 + { 480, 279 }, // inv row 2 + { 509, 279 }, // inv row 2 + { 538, 279 }, // inv row 2 + { 567, 279 }, // inv row 2 + { 596, 279 }, // inv row 2 + { 337, 308 }, // inv row 3 + { 366, 308 }, // inv row 3 + { 394, 308 }, // inv row 3 + { 423, 308 }, // inv row 3 + { 451, 308 }, // inv row 3 + { 480, 308 }, // inv row 3 + { 509, 308 }, // inv row 3 + { 538, 308 }, // inv row 3 + { 567, 308 }, // inv row 3 + { 596, 308 }, // inv row 3 + { 337, 336 }, // inv row 4 + { 366, 336 }, // inv row 4 + { 394, 336 }, // inv row 4 + { 423, 336 }, // inv row 4 + { 451, 336 }, // inv row 4 + { 480, 336 }, // inv row 4 + { 509, 336 }, // inv row 4 + { 538, 336 }, // inv row 4 + { 567, 336 }, // inv row 4 + { 596, 336 }, // inv row 4 + { 205, 385 }, // belt + { 234, 385 }, // belt + { 263, 385 }, // belt + { 292, 385 }, // belt + { 321, 385 }, // belt + { 350, 385 }, // belt + { 379, 385 }, // belt + { 408, 385 } // belt }; /* data */ @@ -90,350 +89,299 @@ int AP2x2Tbl[10] = { 8, 28, 6, 26, 4, 24, 2, 22, 0, 20 }; // weak void __cdecl FreeInvGFX() { - void *invCels = pInvCels; + void *invCels = pInvCels; - pInvCels = NULL; - mem_free_dbg(invCels); + pInvCels = NULL; + mem_free_dbg(invCels); } void __cdecl InitInv() { - if ( plr[myplr]._pClass == PC_WARRIOR ) - { - pInvCels = LoadFileInMem("Data\\Inv\\Inv.CEL", 0); - } - else if ( plr[myplr]._pClass == PC_ROGUE ) - { - pInvCels = LoadFileInMem("Data\\Inv\\Inv_rog.CEL", 0); - } - else if ( plr[myplr]._pClass == PC_SORCERER ) - { - pInvCels = LoadFileInMem("Data\\Inv\\Inv_Sor.CEL", 0); - } - - invflag = 0; - drawsbarflag = 0; + if (plr[myplr]._pClass == PC_WARRIOR) { + pInvCels = LoadFileInMem("Data\\Inv\\Inv.CEL", 0); + } else if (plr[myplr]._pClass == PC_ROGUE) { + pInvCels = LoadFileInMem("Data\\Inv\\Inv_rog.CEL", 0); + } else if (plr[myplr]._pClass == PC_SORCERER) { + pInvCels = LoadFileInMem("Data\\Inv\\Inv_Sor.CEL", 0); + } + + invflag = 0; + drawsbarflag = 0; } void __fastcall InvDrawSlotBack(int X, int Y, int W, int H) { - unsigned char *v4; // edi - int v5; // edx - int v6; // ecx - unsigned char v7; // al - unsigned char v8; // al - - v4 = (unsigned char *)gpBuffer + screen_y_times_768[Y] + X; - v5 = (unsigned short)H; - do - { - v6 = (unsigned short)W; - do - { - v7 = *v4; - if ( *v4 < 0xB0u ) - goto LABEL_9; - if ( v7 > 0xBFu ) - { - if ( v7 < 0xF0u ) - goto LABEL_9; - v8 = v7 - 80; - } - else - { - v8 = v7 - 16; - } - *v4 = v8; -LABEL_9: - ++v4; - --v6; - } - while ( v6 ); - v4 = &v4[-(unsigned short)W - 768]; - --v5; - } - while ( v5 ); + unsigned char *v4; // edi + int v5; // edx + int v6; // ecx + unsigned char v7; // al + unsigned char v8; // al + + v4 = (unsigned char *)gpBuffer + screen_y_times_768[Y] + X; + v5 = (unsigned short)H; + do { + v6 = (unsigned short)W; + do { + v7 = *v4; + if (*v4 < 0xB0u) + goto LABEL_9; + if (v7 > 0xBFu) { + if (v7 < 0xF0u) + goto LABEL_9; + v8 = v7 - 80; + } else { + v8 = v7 - 16; + } + *v4 = v8; + LABEL_9: + ++v4; + --v6; + } while (v6); + v4 = &v4[-(unsigned short)W - 768]; + --v5; + } while (v5); } void __cdecl DrawInv() { - BOOL invtest[40]; - - CelDecodeOnly(384, 511, pInvCels, 1, 320); - - if ( plr[myplr].InvBody[INVLOC_HEAD]._itype != ITYPE_NONE ) - { - InvDrawSlotBack(517, 219, 2 * INV_SLOT_SIZE_PX, 2 * INV_SLOT_SIZE_PX); - - int frame = plr[myplr].InvBody[INVLOC_HEAD]._iCurs + 12; - int frame_width = InvItemWidth[frame]; - - if ( pcursinvitem == INVITEM_HEAD ) - { - int colour = ICOL_WHITE; - if ( plr[myplr].InvBody[INVLOC_HEAD]._iMagical != ITEM_QUALITY_NORMAL ) { - colour = ICOL_BLUE; - } - if ( !plr[myplr].InvBody[INVLOC_HEAD]._iStatFlag ) { - colour = ICOL_RED; - } - CelDecodeClr(colour, 517, 219, (char *)pCursCels, frame, frame_width, 0, 8); - } - - if ( plr[myplr].InvBody[INVLOC_HEAD]._iStatFlag ) - { - CelDrawHdrOnly(517, 219, (char *)pCursCels, frame, frame_width, 0, 8); - } - else - { - CelDrawHdrLightRed(517, 219, (char *)pCursCels, frame, frame_width, 0, 8, 1); - } - } - - if ( plr[myplr].InvBody[INVLOC_RING_LEFT]._itype != ITYPE_NONE ) - { - InvDrawSlotBack(432, 365, INV_SLOT_SIZE_PX, INV_SLOT_SIZE_PX); - - int frame = plr[myplr].InvBody[INVLOC_RING_LEFT]._iCurs + 12; - int frame_width = InvItemWidth[frame]; - - if ( pcursinvitem == INVITEM_RING_LEFT ) - { - int colour = ICOL_WHITE; - if ( plr[myplr].InvBody[INVLOC_RING_LEFT]._iMagical != ITEM_QUALITY_NORMAL ) { - colour = ICOL_BLUE; - } - if ( !plr[myplr].InvBody[INVLOC_RING_LEFT]._iStatFlag ) { - colour = ICOL_RED; - } - CelDecodeClr(colour, 432, 365, (char *)pCursCels, frame, frame_width, 0, 8); - } - - if ( plr[myplr].InvBody[INVLOC_RING_LEFT]._iStatFlag ) - { - CelDrawHdrOnly(432, 365, (char *)pCursCels, frame, frame_width, 0, 8); - } - else - { - CelDrawHdrLightRed(432, 365, (char *)pCursCels, frame, frame_width, 0, 8, 1); - } - } - - if ( plr[myplr].InvBody[INVLOC_RING_RIGHT]._itype != ITYPE_NONE ) - { - InvDrawSlotBack(633, 365, INV_SLOT_SIZE_PX, INV_SLOT_SIZE_PX); - - int frame = plr[myplr].InvBody[INVLOC_RING_RIGHT]._iCurs + 12; - int frame_width = InvItemWidth[frame]; - - if ( pcursinvitem == INVITEM_RING_RIGHT ) - { - int colour = ICOL_WHITE; - if ( plr[myplr].InvBody[INVLOC_RING_RIGHT]._iMagical != ITEM_QUALITY_NORMAL ) { - colour = ICOL_BLUE; - } - if ( !plr[myplr].InvBody[INVLOC_RING_RIGHT]._iStatFlag ) { - colour = ICOL_RED; - } - CelDecodeClr(colour, 633, 365, (char *)pCursCels, frame, frame_width, 0, 8); - } - - if ( plr[myplr].InvBody[INVLOC_RING_RIGHT]._iStatFlag ) - { - CelDrawHdrOnly(633, 365, (char *)pCursCels, frame, frame_width, 0, 8); - } - else - { - CelDrawHdrLightRed(633, 365, (char *)pCursCels, frame, frame_width, 0, 8, 1); - } - } - - if ( plr[myplr].InvBody[INVLOC_AMULET]._itype != ITYPE_NONE ) - { - InvDrawSlotBack(589, 220, INV_SLOT_SIZE_PX, INV_SLOT_SIZE_PX); - - int frame = plr[myplr].InvBody[INVLOC_AMULET]._iCurs + 12; - int frame_width = InvItemWidth[frame]; - - if ( pcursinvitem == INVITEM_AMULET ) - { - int colour = ICOL_WHITE; - if ( plr[myplr].InvBody[INVLOC_AMULET]._iMagical != ITEM_QUALITY_NORMAL ) { - colour = ICOL_BLUE; - } - if ( !plr[myplr].InvBody[INVLOC_AMULET]._iStatFlag ) { - colour = ICOL_RED; - } - CelDecodeClr(colour, 589, 220, (char *)pCursCels, frame, frame_width, 0, 8); - } - - if ( plr[myplr].InvBody[INVLOC_AMULET]._iStatFlag ) - { - CelDrawHdrOnly(589, 220, (char *)pCursCels, frame, frame_width, 0, 8); - } - else - { - CelDrawHdrLightRed(589, 220, (char *)pCursCels, frame, frame_width, 0, 8, 1); - } - } - - if ( plr[myplr].InvBody[INVLOC_HAND_LEFT]._itype != ITYPE_NONE ) - { - InvDrawSlotBack(401, 320, 2 * INV_SLOT_SIZE_PX, 3 * INV_SLOT_SIZE_PX); - - int frame = plr[myplr].InvBody[INVLOC_HAND_LEFT]._iCurs + 12; - int frame_width = InvItemWidth[frame]; - // calc item offsets for weapons smaller than 2x3 slots - int screen_x = frame_width == INV_SLOT_SIZE_PX ? 415 : 401; - int screen_y = InvItemHeight[frame] == (3 * INV_SLOT_SIZE_PX) ? 320 : 306; - - if ( pcursinvitem == INVITEM_HAND_LEFT ) - { - int colour = ICOL_WHITE; - if ( plr[myplr].InvBody[INVLOC_HAND_LEFT]._iMagical != ITEM_QUALITY_NORMAL ) { - colour = ICOL_BLUE; - } - if ( !plr[myplr].InvBody[INVLOC_HAND_LEFT]._iStatFlag ) { - colour = ICOL_RED; - } - CelDecodeClr(colour, screen_x, screen_y, (char *)pCursCels, frame, frame_width, 0, 8); - } - - if ( plr[myplr].InvBody[INVLOC_HAND_LEFT]._iStatFlag ) - { - CelDrawHdrOnly(screen_x, screen_y, (char *)pCursCels, frame, frame_width, 0, 8); - } - else - { - CelDrawHdrLightRed(screen_x, screen_y, (char *)pCursCels, frame, frame_width, 0, 8, 1); - } - - if ( plr[myplr].InvBody[INVLOC_HAND_LEFT]._iLoc == ILOC_TWOHAND ) - { - InvDrawSlotBack(631, 320, 2 * INV_SLOT_SIZE_PX, 3 * INV_SLOT_SIZE_PX); - light_table_index = 0; - cel_transparency_active = 1; - - CelDecodeHdrLightTrans( - frame_width == INV_SLOT_SIZE_PX - ? &gpBuffer->row[160].pixels[581] - : &gpBuffer->row[160].pixels[567], - (char *)pCursCels, frame, frame_width, 0, 8); - - cel_transparency_active = 0; - } - } - if ( plr[myplr].InvBody[INVLOC_HAND_RIGHT]._itype != ITYPE_NONE ) - { - InvDrawSlotBack(631, 320, 2 * INV_SLOT_SIZE_PX, 3 * INV_SLOT_SIZE_PX); - - int frame = plr[myplr].InvBody[INVLOC_HAND_RIGHT]._iCurs + 12; - int frame_width = InvItemWidth[frame]; - // calc item offsets for weapons smaller than 2x3 slots - int screen_x = frame_width == INV_SLOT_SIZE_PX ? 645 : 633; - int screen_y = InvItemHeight[frame] == 3 * INV_SLOT_SIZE_PX ? 320 : 306; - - if ( pcursinvitem == INVITEM_HAND_RIGHT ) - { - int colour = ICOL_WHITE; - if ( plr[myplr].InvBody[INVLOC_HAND_RIGHT]._iMagical != ITEM_QUALITY_NORMAL ) { - colour = ICOL_BLUE; - } - if ( !plr[myplr].InvBody[INVLOC_HAND_RIGHT]._iStatFlag ) { - colour = ICOL_RED; - } - CelDecodeClr(colour, screen_x, screen_y, (char *)pCursCels, frame, frame_width, 0, 8); - } - - if ( plr[myplr].InvBody[INVLOC_HAND_RIGHT]._iStatFlag ) - { - CelDrawHdrOnly(screen_x, screen_y, (char *)pCursCels, frame, frame_width, 0, 8); - } - else - { - CelDrawHdrLightRed(screen_x, screen_y, (char *)pCursCels, frame, frame_width, 0, 8, 1); - } - } - - - if ( plr[myplr].InvBody[INVLOC_CHEST]._itype != ITYPE_NONE ) { - InvDrawSlotBack(517, 320, 2 * INV_SLOT_SIZE_PX, 3 * INV_SLOT_SIZE_PX); - - int frame = plr[myplr].InvBody[INVLOC_CHEST]._iCurs + 12; - int frame_width = InvItemWidth[frame]; - - if ( pcursinvitem == INVITEM_CHEST ) { - int colour = ICOL_WHITE; - if ( plr[myplr].InvBody[INVLOC_CHEST]._iMagical != ITEM_QUALITY_NORMAL ) { - colour = ICOL_BLUE; - } - if ( !plr[myplr].InvBody[INVLOC_CHEST]._iStatFlag ) { - colour = ICOL_RED; - } - CelDecodeClr(colour, 517, 320, (char *)pCursCels, frame, frame_width, 0, 8); - } - - if ( plr[myplr].InvBody[INVLOC_CHEST]._iStatFlag ) { - CelDrawHdrOnly(517, 320, (char *)pCursCels, frame, frame_width, 0, 8); - } else { - CelDrawHdrLightRed(517, 320, (char *)pCursCels, frame, frame_width, 0, 8, 1); - } - } - - for ( int i = 0; i < NUM_INV_GRID_ELEM; i++ ) - { - if ( plr[myplr].InvGrid[i] != 0 ) - { - InvDrawSlotBack( - InvRect[i + SLOTXY_INV_FIRST].X + 64, - InvRect[i + SLOTXY_INV_FIRST].Y + 159, - INV_SLOT_SIZE_PX, - INV_SLOT_SIZE_PX); - } - } - - for ( int j = 0; j < NUM_INV_GRID_ELEM; j++ ) - { - if ( plr[myplr].InvGrid[j] > 0 ) // first slot of an item - { - int ii = plr[myplr].InvGrid[j] - 1; - - invtest[j] = TRUE; - - int frame = plr[myplr].InvList[ii]._iCurs + 12; - int frame_width = InvItemWidth[frame]; - if ( pcursinvitem == ii + INVITEM_INV_FIRST ) - { - int colour = ICOL_WHITE; - if ( plr[myplr].InvList[ii]._iMagical != ITEM_QUALITY_NORMAL ) { - colour = ICOL_BLUE; - } - if ( !plr[myplr].InvList[ii]._iStatFlag ) { - colour = ICOL_RED; - } - CelDecodeClr( - colour, - InvRect[j + SLOTXY_INV_FIRST].X + 64, - InvRect[j + SLOTXY_INV_FIRST].Y + 159, - (char *)pCursCels, frame, frame_width, 0, 8); - } - - if ( plr[myplr].InvList[ii]._iStatFlag ) - { - CelDrawHdrOnly( - InvRect[j + SLOTXY_INV_FIRST].X + 64, - InvRect[j + SLOTXY_INV_FIRST].Y + 159, - (char *)pCursCels, frame, frame_width, 0, 8); - } - else - { - CelDrawHdrLightRed( - InvRect[j + SLOTXY_INV_FIRST].X + 64, - InvRect[j + SLOTXY_INV_FIRST].Y + 159, - (char *)pCursCels, frame, frame_width, 0, 8, 1); - } - } - } + BOOL invtest[40]; + + CelDecodeOnly(384, 511, pInvCels, 1, 320); + + if (plr[myplr].InvBody[INVLOC_HEAD]._itype != ITYPE_NONE) { + InvDrawSlotBack(517, 219, 2 * INV_SLOT_SIZE_PX, 2 * INV_SLOT_SIZE_PX); + + int frame = plr[myplr].InvBody[INVLOC_HEAD]._iCurs + 12; + int frame_width = InvItemWidth[frame]; + + if (pcursinvitem == INVITEM_HEAD) { + int colour = ICOL_WHITE; + if (plr[myplr].InvBody[INVLOC_HEAD]._iMagical != ITEM_QUALITY_NORMAL) { + colour = ICOL_BLUE; + } + if (!plr[myplr].InvBody[INVLOC_HEAD]._iStatFlag) { + colour = ICOL_RED; + } + CelDecodeClr(colour, 517, 219, (char *)pCursCels, frame, frame_width, 0, 8); + } + + if (plr[myplr].InvBody[INVLOC_HEAD]._iStatFlag) { + CelDrawHdrOnly(517, 219, (char *)pCursCels, frame, frame_width, 0, 8); + } else { + CelDrawHdrLightRed(517, 219, (char *)pCursCels, frame, frame_width, 0, 8, 1); + } + } + + if (plr[myplr].InvBody[INVLOC_RING_LEFT]._itype != ITYPE_NONE) { + InvDrawSlotBack(432, 365, INV_SLOT_SIZE_PX, INV_SLOT_SIZE_PX); + + int frame = plr[myplr].InvBody[INVLOC_RING_LEFT]._iCurs + 12; + int frame_width = InvItemWidth[frame]; + + if (pcursinvitem == INVITEM_RING_LEFT) { + int colour = ICOL_WHITE; + if (plr[myplr].InvBody[INVLOC_RING_LEFT]._iMagical != ITEM_QUALITY_NORMAL) { + colour = ICOL_BLUE; + } + if (!plr[myplr].InvBody[INVLOC_RING_LEFT]._iStatFlag) { + colour = ICOL_RED; + } + CelDecodeClr(colour, 432, 365, (char *)pCursCels, frame, frame_width, 0, 8); + } + + if (plr[myplr].InvBody[INVLOC_RING_LEFT]._iStatFlag) { + CelDrawHdrOnly(432, 365, (char *)pCursCels, frame, frame_width, 0, 8); + } else { + CelDrawHdrLightRed(432, 365, (char *)pCursCels, frame, frame_width, 0, 8, 1); + } + } + + if (plr[myplr].InvBody[INVLOC_RING_RIGHT]._itype != ITYPE_NONE) { + InvDrawSlotBack(633, 365, INV_SLOT_SIZE_PX, INV_SLOT_SIZE_PX); + + int frame = plr[myplr].InvBody[INVLOC_RING_RIGHT]._iCurs + 12; + int frame_width = InvItemWidth[frame]; + + if (pcursinvitem == INVITEM_RING_RIGHT) { + int colour = ICOL_WHITE; + if (plr[myplr].InvBody[INVLOC_RING_RIGHT]._iMagical != ITEM_QUALITY_NORMAL) { + colour = ICOL_BLUE; + } + if (!plr[myplr].InvBody[INVLOC_RING_RIGHT]._iStatFlag) { + colour = ICOL_RED; + } + CelDecodeClr(colour, 633, 365, (char *)pCursCels, frame, frame_width, 0, 8); + } + + if (plr[myplr].InvBody[INVLOC_RING_RIGHT]._iStatFlag) { + CelDrawHdrOnly(633, 365, (char *)pCursCels, frame, frame_width, 0, 8); + } else { + CelDrawHdrLightRed(633, 365, (char *)pCursCels, frame, frame_width, 0, 8, 1); + } + } + + if (plr[myplr].InvBody[INVLOC_AMULET]._itype != ITYPE_NONE) { + InvDrawSlotBack(589, 220, INV_SLOT_SIZE_PX, INV_SLOT_SIZE_PX); + + int frame = plr[myplr].InvBody[INVLOC_AMULET]._iCurs + 12; + int frame_width = InvItemWidth[frame]; + + if (pcursinvitem == INVITEM_AMULET) { + int colour = ICOL_WHITE; + if (plr[myplr].InvBody[INVLOC_AMULET]._iMagical != ITEM_QUALITY_NORMAL) { + colour = ICOL_BLUE; + } + if (!plr[myplr].InvBody[INVLOC_AMULET]._iStatFlag) { + colour = ICOL_RED; + } + CelDecodeClr(colour, 589, 220, (char *)pCursCels, frame, frame_width, 0, 8); + } + + if (plr[myplr].InvBody[INVLOC_AMULET]._iStatFlag) { + CelDrawHdrOnly(589, 220, (char *)pCursCels, frame, frame_width, 0, 8); + } else { + CelDrawHdrLightRed(589, 220, (char *)pCursCels, frame, frame_width, 0, 8, 1); + } + } + + if (plr[myplr].InvBody[INVLOC_HAND_LEFT]._itype != ITYPE_NONE) { + InvDrawSlotBack(401, 320, 2 * INV_SLOT_SIZE_PX, 3 * INV_SLOT_SIZE_PX); + + int frame = plr[myplr].InvBody[INVLOC_HAND_LEFT]._iCurs + 12; + int frame_width = InvItemWidth[frame]; + // calc item offsets for weapons smaller than 2x3 slots + int screen_x = frame_width == INV_SLOT_SIZE_PX ? 415 : 401; + int screen_y = InvItemHeight[frame] == (3 * INV_SLOT_SIZE_PX) ? 320 : 306; + + if (pcursinvitem == INVITEM_HAND_LEFT) { + int colour = ICOL_WHITE; + if (plr[myplr].InvBody[INVLOC_HAND_LEFT]._iMagical != ITEM_QUALITY_NORMAL) { + colour = ICOL_BLUE; + } + if (!plr[myplr].InvBody[INVLOC_HAND_LEFT]._iStatFlag) { + colour = ICOL_RED; + } + CelDecodeClr(colour, screen_x, screen_y, (char *)pCursCels, frame, frame_width, 0, 8); + } + + if (plr[myplr].InvBody[INVLOC_HAND_LEFT]._iStatFlag) { + CelDrawHdrOnly(screen_x, screen_y, (char *)pCursCels, frame, frame_width, 0, 8); + } else { + CelDrawHdrLightRed(screen_x, screen_y, (char *)pCursCels, frame, frame_width, 0, 8, 1); + } + + if (plr[myplr].InvBody[INVLOC_HAND_LEFT]._iLoc == ILOC_TWOHAND) { + InvDrawSlotBack(631, 320, 2 * INV_SLOT_SIZE_PX, 3 * INV_SLOT_SIZE_PX); + light_table_index = 0; + cel_transparency_active = 1; + + CelDecodeHdrLightTrans( + frame_width == INV_SLOT_SIZE_PX + ? &gpBuffer->row[160].pixels[581] + : &gpBuffer->row[160].pixels[567], + (char *)pCursCels, frame, frame_width, 0, 8); + + cel_transparency_active = 0; + } + } + if (plr[myplr].InvBody[INVLOC_HAND_RIGHT]._itype != ITYPE_NONE) { + InvDrawSlotBack(631, 320, 2 * INV_SLOT_SIZE_PX, 3 * INV_SLOT_SIZE_PX); + + int frame = plr[myplr].InvBody[INVLOC_HAND_RIGHT]._iCurs + 12; + int frame_width = InvItemWidth[frame]; + // calc item offsets for weapons smaller than 2x3 slots + int screen_x = frame_width == INV_SLOT_SIZE_PX ? 645 : 633; + int screen_y = InvItemHeight[frame] == 3 * INV_SLOT_SIZE_PX ? 320 : 306; + + if (pcursinvitem == INVITEM_HAND_RIGHT) { + int colour = ICOL_WHITE; + if (plr[myplr].InvBody[INVLOC_HAND_RIGHT]._iMagical != ITEM_QUALITY_NORMAL) { + colour = ICOL_BLUE; + } + if (!plr[myplr].InvBody[INVLOC_HAND_RIGHT]._iStatFlag) { + colour = ICOL_RED; + } + CelDecodeClr(colour, screen_x, screen_y, (char *)pCursCels, frame, frame_width, 0, 8); + } + + if (plr[myplr].InvBody[INVLOC_HAND_RIGHT]._iStatFlag) { + CelDrawHdrOnly(screen_x, screen_y, (char *)pCursCels, frame, frame_width, 0, 8); + } else { + CelDrawHdrLightRed(screen_x, screen_y, (char *)pCursCels, frame, frame_width, 0, 8, 1); + } + } + + if (plr[myplr].InvBody[INVLOC_CHEST]._itype != ITYPE_NONE) { + InvDrawSlotBack(517, 320, 2 * INV_SLOT_SIZE_PX, 3 * INV_SLOT_SIZE_PX); + + int frame = plr[myplr].InvBody[INVLOC_CHEST]._iCurs + 12; + int frame_width = InvItemWidth[frame]; + + if (pcursinvitem == INVITEM_CHEST) { + int colour = ICOL_WHITE; + if (plr[myplr].InvBody[INVLOC_CHEST]._iMagical != ITEM_QUALITY_NORMAL) { + colour = ICOL_BLUE; + } + if (!plr[myplr].InvBody[INVLOC_CHEST]._iStatFlag) { + colour = ICOL_RED; + } + CelDecodeClr(colour, 517, 320, (char *)pCursCels, frame, frame_width, 0, 8); + } + + if (plr[myplr].InvBody[INVLOC_CHEST]._iStatFlag) { + CelDrawHdrOnly(517, 320, (char *)pCursCels, frame, frame_width, 0, 8); + } else { + CelDrawHdrLightRed(517, 320, (char *)pCursCels, frame, frame_width, 0, 8, 1); + } + } + + for (int i = 0; i < NUM_INV_GRID_ELEM; i++) { + if (plr[myplr].InvGrid[i] != 0) { + InvDrawSlotBack( + InvRect[i + SLOTXY_INV_FIRST].X + 64, + InvRect[i + SLOTXY_INV_FIRST].Y + 159, + INV_SLOT_SIZE_PX, + INV_SLOT_SIZE_PX); + } + } + + for (int j = 0; j < NUM_INV_GRID_ELEM; j++) { + if (plr[myplr].InvGrid[j] > 0) // first slot of an item + { + int ii = plr[myplr].InvGrid[j] - 1; + + invtest[j] = TRUE; + + int frame = plr[myplr].InvList[ii]._iCurs + 12; + int frame_width = InvItemWidth[frame]; + if (pcursinvitem == ii + INVITEM_INV_FIRST) { + int colour = ICOL_WHITE; + if (plr[myplr].InvList[ii]._iMagical != ITEM_QUALITY_NORMAL) { + colour = ICOL_BLUE; + } + if (!plr[myplr].InvList[ii]._iStatFlag) { + colour = ICOL_RED; + } + CelDecodeClr( + colour, + InvRect[j + SLOTXY_INV_FIRST].X + 64, + InvRect[j + SLOTXY_INV_FIRST].Y + 159, + (char *)pCursCels, frame, frame_width, 0, 8); + } + + if (plr[myplr].InvList[ii]._iStatFlag) { + CelDrawHdrOnly( + InvRect[j + SLOTXY_INV_FIRST].X + 64, + InvRect[j + SLOTXY_INV_FIRST].Y + 159, + (char *)pCursCels, frame, frame_width, 0, 8); + } else { + CelDrawHdrLightRed( + InvRect[j + SLOTXY_INV_FIRST].X + 64, + InvRect[j + SLOTXY_INV_FIRST].Y + 159, + (char *)pCursCels, frame, frame_width, 0, 8, 1); + } + } + } } // 4B8CB8: using guessed type char pcursinvitem; // 69BEF8: using guessed type int light_table_index; @@ -442,1120 +390,981 @@ void __cdecl DrawInv() void __cdecl DrawInvBelt() { - int v0; // ebx - signed int v1; // esi - int v2; // ecx - int v3; // eax - int v4; // edi - char v5; // cl - int v6; // edx - bool v7; // zf - int v8; // ecx - int v9; // eax - unsigned char v10; // edx - signed int v11; // [esp+4h] [ebp-Ch] - int frame_width; // [esp+8h] [ebp-8h] - int v13; // [esp+Ch] [ebp-4h] - - v0 = 0; - if ( !talkflag ) - { - DrawPanelBox(205, 21, 0xE8u, 0x1Cu, 269, 517); - v11 = 0; - v13 = 0; - do - { - if ( *(int *)((char *)&plr[myplr].SpdList[0]._itype + v0) != -1 ) - { - v1 = v11; - InvDrawSlotBack(InvRect[v11 + 65].X + 64, InvRect[v11 + 65].Y + 159, 28, 28); - v2 = myplr; - v3 = v0 + 21720 * myplr; - v4 = *(int *)((char *)&plr[0].SpdList[0]._iCurs + v3) + 12; - frame_width = InvItemWidth[v4]; - if ( pcursinvitem == v11 + 47 ) - { - v5 = -59; - if ( *(&plr[0].SpdList[0]._iMagical + v3) ) - v5 = -75; - if ( !*(int *)((char *)&plr[0].SpdList[0]._iStatFlag + v3) ) - v5 = -27; - CelDecodeClr( - v5, - InvRect[v1 + 65].X + 64, - InvRect[v1 + 65].Y + 159, - (char *)pCursCels, - v4, - frame_width, - 0, - 8); - v2 = myplr; - } - v0 = v13; - v6 = InvRect[v1 + 65].Y + 159; - v7 = *(int *)((char *)&plr[v2].SpdList[0]._iStatFlag + v13) == 0; - v8 = InvRect[v1 + 65].X; - if ( v7 ) - CelDrawHdrLightRed(v8 + 64, v6, (char *)pCursCels, v4, frame_width, 0, 8, 1); - else - CelDrawHdrOnly(v8 + 64, v6, (char *)pCursCels, v4, frame_width, 0, 8); - v9 = v13 + 21720 * myplr; - if ( AllItemsList[*(int *)((char *)&plr[0].SpdList[0].IDidx + v9)].iUsable - && *(int *)((char *)&plr[0].SpdList[0]._iStatFlag + v9) - && *(int *)((char *)&plr[0].SpdList[0]._itype + v9) != 11 ) - { - v10 = fontframe[fontidx[(unsigned char)(v11 + 49)]]; - CPrintString( - screen_y_times_768[InvRect[v1 + 65].Y + 159] - - fontkern[v10] - + InvRect[v1 + 65].X - + 92, - v10, - 0); - } - } - ++v11; - v0 += 368; - v13 = v0; - } - while ( v11 < MAXBELTITEMS ); - } + int v0; // ebx + signed int v1; // esi + int v2; // ecx + int v3; // eax + int v4; // edi + char v5; // cl + int v6; // edx + bool v7; // zf + int v8; // ecx + int v9; // eax + unsigned char v10; // edx + signed int v11; // [esp+4h] [ebp-Ch] + int frame_width; // [esp+8h] [ebp-8h] + int v13; // [esp+Ch] [ebp-4h] + + v0 = 0; + if (!talkflag) { + DrawPanelBox(205, 21, 0xE8u, 0x1Cu, 269, 517); + v11 = 0; + v13 = 0; + do { + if (*(int *)((char *)&plr[myplr].SpdList[0]._itype + v0) != -1) { + v1 = v11; + InvDrawSlotBack(InvRect[v11 + 65].X + 64, InvRect[v11 + 65].Y + 159, 28, 28); + v2 = myplr; + v3 = v0 + 21720 * myplr; + v4 = *(int *)((char *)&plr[0].SpdList[0]._iCurs + v3) + 12; + frame_width = InvItemWidth[v4]; + if (pcursinvitem == v11 + 47) { + v5 = -59; + if (*(&plr[0].SpdList[0]._iMagical + v3)) + v5 = -75; + if (!*(int *)((char *)&plr[0].SpdList[0]._iStatFlag + v3)) + v5 = -27; + CelDecodeClr( + v5, + InvRect[v1 + 65].X + 64, + InvRect[v1 + 65].Y + 159, + (char *)pCursCels, + v4, + frame_width, + 0, + 8); + v2 = myplr; + } + v0 = v13; + v6 = InvRect[v1 + 65].Y + 159; + v7 = *(int *)((char *)&plr[v2].SpdList[0]._iStatFlag + v13) == 0; + v8 = InvRect[v1 + 65].X; + if (v7) + CelDrawHdrLightRed(v8 + 64, v6, (char *)pCursCels, v4, frame_width, 0, 8, 1); + else + CelDrawHdrOnly(v8 + 64, v6, (char *)pCursCels, v4, frame_width, 0, 8); + v9 = v13 + 21720 * myplr; + if (AllItemsList[*(int *)((char *)&plr[0].SpdList[0].IDidx + v9)].iUsable + && *(int *)((char *)&plr[0].SpdList[0]._iStatFlag + v9) + && *(int *)((char *)&plr[0].SpdList[0]._itype + v9) != 11) { + v10 = fontframe[fontidx[(unsigned char)(v11 + 49)]]; + CPrintString( + screen_y_times_768[InvRect[v1 + 65].Y + 159] + - fontkern[v10] + + InvRect[v1 + 65].X + + 92, + v10, + 0); + } + } + ++v11; + v0 += 368; + v13 = v0; + } while (v11 < MAXBELTITEMS); + } } // 4B8960: using guessed type int talkflag; // 4B8CB8: using guessed type char pcursinvitem; int __fastcall AutoPlace(int pnum, int ii, int sx, int sy, int saveflag) { - __int64 v5; // rax - int v6; // ebx - signed int v7; // edx - signed int v8; // eax - signed int v9; // esi - int j; // edi - int v11; // eax - signed int v12; // esi - signed int v13; // ecx - int v14; // edi - char *v15; // ecx - char v16; // dl - signed int v18; // [esp+Ch] [ebp-Ch] - int p; // [esp+10h] [ebp-8h] - int v20; // [esp+14h] [ebp-4h] - int i; // [esp+14h] [ebp-4h] - - p = pnum; - v5 = ii; - v6 = 1; - v18 = v5 % 10; - v7 = 10 * (unsigned __int64)(v5 / 10); - v8 = v7; - if ( v7 < 0 ) - v8 = 0; - v20 = 0; - if ( sy <= 0 ) - { -LABEL_16: - if ( saveflag ) - { - v11 = pnum; - qmemcpy( - &plr[pnum].InvList[plr[pnum]._pNumInv], - &plr[pnum].HoldItem, - sizeof(plr[pnum].InvList[plr[pnum]._pNumInv])); - ++plr[v11]._pNumInv; - v12 = v7; - if ( v7 < 0 ) - v12 = 0; - for ( i = 0; i < sy; ++i ) - { - v13 = v18; - if ( v18 < 0 ) - v13 = 0; - v14 = 0; - if ( sx > 0 ) - { - v15 = &plr[v11].InvGrid[v13 + v12]; - do - { - if ( v14 || i != sy - 1 ) - v16 = -_LOBYTE(plr[v11]._pNumInv); - else - v16 = plr[v11]._pNumInv; - *v15++ = v16; - ++v14; - } - while ( v14 < sx ); - } - v12 += 10; - } - CalcPlrScrolls(p); - } - } - else - { - while ( v6 ) - { - if ( v8 >= 40 ) - v6 = 0; - v9 = v18; - if ( v18 < 0 ) - v9 = 0; - for ( j = 0; j < sx; ++j ) - { - if ( !v6 ) - break; - v6 = 0; - if ( v9 < 10 ) - _LOBYTE(v6) = plr[pnum].InvGrid[v9 + v8] == 0; - ++v9; - } - v8 += 10; - if ( ++v20 >= sy ) - { - if ( !v6 ) - return v6; - goto LABEL_16; - } - } - } - return v6; + __int64 v5; // rax + int v6; // ebx + signed int v7; // edx + signed int v8; // eax + signed int v9; // esi + int j; // edi + int v11; // eax + signed int v12; // esi + signed int v13; // ecx + int v14; // edi + char *v15; // ecx + char v16; // dl + signed int v18; // [esp+Ch] [ebp-Ch] + int p; // [esp+10h] [ebp-8h] + int v20; // [esp+14h] [ebp-4h] + int i; // [esp+14h] [ebp-4h] + + p = pnum; + v5 = ii; + v6 = 1; + v18 = v5 % 10; + v7 = 10 * (unsigned __int64)(v5 / 10); + v8 = v7; + if (v7 < 0) + v8 = 0; + v20 = 0; + if (sy <= 0) { + LABEL_16: + if (saveflag) { + v11 = pnum; + qmemcpy( + &plr[pnum].InvList[plr[pnum]._pNumInv], + &plr[pnum].HoldItem, + sizeof(plr[pnum].InvList[plr[pnum]._pNumInv])); + ++plr[v11]._pNumInv; + v12 = v7; + if (v7 < 0) + v12 = 0; + for (i = 0; i < sy; ++i) { + v13 = v18; + if (v18 < 0) + v13 = 0; + v14 = 0; + if (sx > 0) { + v15 = &plr[v11].InvGrid[v13 + v12]; + do { + if (v14 || i != sy - 1) + v16 = -_LOBYTE(plr[v11]._pNumInv); + else + v16 = plr[v11]._pNumInv; + *v15++ = v16; + ++v14; + } while (v14 < sx); + } + v12 += 10; + } + CalcPlrScrolls(p); + } + } else { + while (v6) { + if (v8 >= 40) + v6 = 0; + v9 = v18; + if (v18 < 0) + v9 = 0; + for (j = 0; j < sx; ++j) { + if (!v6) + break; + v6 = 0; + if (v9 < 10) + _LOBYTE(v6) = plr[pnum].InvGrid[v9 + v8] == 0; + ++v9; + } + v8 += 10; + if (++v20 >= sy) { + if (!v6) + return v6; + goto LABEL_16; + } + } + } + return v6; } int __fastcall SpecialAutoPlace(int pnum, int ii, int sx, int sy, int saveflag) { - __int64 v5; // rax - int v6; // ebx - signed int v7; // edx - signed int v8; // eax - signed int v9; // esi - int j; // edi - signed int v11; // ecx - int *v12; // eax - int v13; // eax - signed int v14; // esi - signed int v15; // ecx - int v16; // edi - char *v17; // ecx - char v18; // dl - signed int v20; // [esp+Ch] [ebp-Ch] - int p; // [esp+10h] [ebp-8h] - int v22; // [esp+14h] [ebp-4h] - int i; // [esp+14h] [ebp-4h] - - p = pnum; - v5 = ii; - v6 = 1; - v20 = v5 % 10; - v7 = 10 * (unsigned __int64)(v5 / 10); - v8 = v7; - if ( v7 < 0 ) - v8 = 0; - v22 = 0; - if ( sy <= 0 ) - { -LABEL_25: - if ( saveflag ) - { - v13 = p; - qmemcpy(&plr[p].InvList[plr[p]._pNumInv], &plr[p].HoldItem, sizeof(plr[p].InvList[plr[p]._pNumInv])); - ++plr[v13]._pNumInv; - v14 = v7; - if ( v7 < 0 ) - v14 = 0; - for ( i = 0; i < sy; ++i ) - { - v15 = v20; - if ( v20 < 0 ) - v15 = 0; - v16 = 0; - if ( sx > 0 ) - { - v17 = &plr[v13].InvGrid[v15 + v14]; - do - { - if ( v16 || i != sy - 1 ) - v18 = -_LOBYTE(plr[v13]._pNumInv); - else - v18 = plr[v13]._pNumInv; - *v17++ = v18; - ++v16; - } - while ( v16 < sx ); - } - v14 += 10; - } - CalcPlrScrolls(p); - } - return v6; - } - while ( v6 ) - { - if ( v8 >= 40 ) - v6 = 0; - v9 = v20; - if ( v20 < 0 ) - v9 = 0; - for ( j = 0; j < sx; ++j ) - { - if ( !v6 ) - break; - v6 = 0; - if ( v9 < 10 ) - _LOBYTE(v6) = plr[pnum].InvGrid[v9 + v8] == 0; - ++v9; - } - v8 += 10; - if ( ++v22 >= sy ) - { - if ( v6 ) - goto LABEL_25; - break; - } - } - if ( sx <= 1 && sy <= 1 ) - { - v11 = 0; - v12 = &plr[p].SpdList[0]._itype; - while ( *v12 != -1 ) - { - ++v11; - v12 += 92; - if ( v11 >= MAXBELTITEMS ) - goto LABEL_24; - } - v6 = 1; - goto LABEL_25; - } - v6 = 0; + __int64 v5; // rax + int v6; // ebx + signed int v7; // edx + signed int v8; // eax + signed int v9; // esi + int j; // edi + signed int v11; // ecx + int *v12; // eax + int v13; // eax + signed int v14; // esi + signed int v15; // ecx + int v16; // edi + char *v17; // ecx + char v18; // dl + signed int v20; // [esp+Ch] [ebp-Ch] + int p; // [esp+10h] [ebp-8h] + int v22; // [esp+14h] [ebp-4h] + int i; // [esp+14h] [ebp-4h] + + p = pnum; + v5 = ii; + v6 = 1; + v20 = v5 % 10; + v7 = 10 * (unsigned __int64)(v5 / 10); + v8 = v7; + if (v7 < 0) + v8 = 0; + v22 = 0; + if (sy <= 0) { + LABEL_25: + if (saveflag) { + v13 = p; + qmemcpy(&plr[p].InvList[plr[p]._pNumInv], &plr[p].HoldItem, sizeof(plr[p].InvList[plr[p]._pNumInv])); + ++plr[v13]._pNumInv; + v14 = v7; + if (v7 < 0) + v14 = 0; + for (i = 0; i < sy; ++i) { + v15 = v20; + if (v20 < 0) + v15 = 0; + v16 = 0; + if (sx > 0) { + v17 = &plr[v13].InvGrid[v15 + v14]; + do { + if (v16 || i != sy - 1) + v18 = -_LOBYTE(plr[v13]._pNumInv); + else + v18 = plr[v13]._pNumInv; + *v17++ = v18; + ++v16; + } while (v16 < sx); + } + v14 += 10; + } + CalcPlrScrolls(p); + } + return v6; + } + while (v6) { + if (v8 >= 40) + v6 = 0; + v9 = v20; + if (v20 < 0) + v9 = 0; + for (j = 0; j < sx; ++j) { + if (!v6) + break; + v6 = 0; + if (v9 < 10) + _LOBYTE(v6) = plr[pnum].InvGrid[v9 + v8] == 0; + ++v9; + } + v8 += 10; + if (++v22 >= sy) { + if (v6) + goto LABEL_25; + break; + } + } + if (sx <= 1 && sy <= 1) { + v11 = 0; + v12 = &plr[p].SpdList[0]._itype; + while (*v12 != -1) { + ++v11; + v12 += 92; + if (v11 >= MAXBELTITEMS) + goto LABEL_24; + } + v6 = 1; + goto LABEL_25; + } + v6 = 0; LABEL_24: - if ( v6 ) - goto LABEL_25; - return v6; + if (v6) + goto LABEL_25; + return v6; } int __fastcall 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; - } - } - } - } - 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; - } - } - } - return v3; + 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; + } + } + } + } 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; + } + } + } + return v3; } int __fastcall WeaponAutoPlace(int pnum) { - int v1; // edi - int v2; // eax - int v3; // ecx - ItemStruct *v4; // esi - ItemStruct *v5; // edi - int result; // eax - - v1 = pnum; - if ( plr[pnum].HoldItem._iLoc == ILOC_TWOHAND ) - { - if ( plr[v1].InvBody[INVLOC_HAND_LEFT]._itype != -1 || plr[v1].InvBody[INVLOC_HAND_RIGHT]._itype != -1 ) - return 0; -LABEL_12: - NetSendCmdChItem(TRUE, 4u); - v4 = &plr[v1].HoldItem; - v5 = &plr[v1].InvBody[INVLOC_HAND_LEFT]; - goto LABEL_13; - } - v2 = plr[v1].InvBody[INVLOC_HAND_LEFT]._itype; - if ( v2 != -1 && plr[v1].InvBody[INVLOC_HAND_LEFT]._iClass == 1 ) - return 0; - v3 = plr[v1].InvBody[INVLOC_HAND_RIGHT]._itype; - if ( v3 != -1 && plr[v1].InvBody[INVLOC_HAND_RIGHT]._iClass == 1 ) - return 0; - if ( v2 == -1 ) - goto LABEL_12; - if ( v3 == -1 && plr[v1].InvBody[INVLOC_HAND_LEFT]._iLoc != ILOC_TWOHAND ) - { - NetSendCmdChItem(TRUE, 5u); - v4 = &plr[v1].HoldItem; - v5 = &plr[v1].InvBody[INVLOC_HAND_RIGHT]; -LABEL_13: - result = 1; - qmemcpy(v5, v4, sizeof(ItemStruct)); - return result; - } - return 0; + int v1; // edi + int v2; // eax + int v3; // ecx + ItemStruct *v4; // esi + ItemStruct *v5; // edi + int result; // eax + + v1 = pnum; + if (plr[pnum].HoldItem._iLoc == ILOC_TWOHAND) { + if (plr[v1].InvBody[INVLOC_HAND_LEFT]._itype != -1 || plr[v1].InvBody[INVLOC_HAND_RIGHT]._itype != -1) + return 0; + LABEL_12: + NetSendCmdChItem(TRUE, 4u); + v4 = &plr[v1].HoldItem; + v5 = &plr[v1].InvBody[INVLOC_HAND_LEFT]; + goto LABEL_13; + } + v2 = plr[v1].InvBody[INVLOC_HAND_LEFT]._itype; + if (v2 != -1 && plr[v1].InvBody[INVLOC_HAND_LEFT]._iClass == 1) + return 0; + v3 = plr[v1].InvBody[INVLOC_HAND_RIGHT]._itype; + if (v3 != -1 && plr[v1].InvBody[INVLOC_HAND_RIGHT]._iClass == 1) + return 0; + if (v2 == -1) + goto LABEL_12; + if (v3 == -1 && plr[v1].InvBody[INVLOC_HAND_LEFT]._iLoc != ILOC_TWOHAND) { + NetSendCmdChItem(TRUE, 5u); + v4 = &plr[v1].HoldItem; + v5 = &plr[v1].InvBody[INVLOC_HAND_RIGHT]; + LABEL_13: + result = 1; + qmemcpy(v5, v4, sizeof(ItemStruct)); + return result; + } + return 0; } int __fastcall SwapItem(ItemStruct *a, ItemStruct *b) { - int v2; // eax - ItemStruct h; // [esp+8h] [ebp-170h] - - qmemcpy(&h, a, sizeof(h)); - v2 = h._iCurs; - qmemcpy(a, b, sizeof(ItemStruct)); - qmemcpy(b, &h, sizeof(ItemStruct)); - return v2 + 12; + int v2; // eax + ItemStruct h; // [esp+8h] [ebp-170h] + + qmemcpy(&h, a, sizeof(h)); + v2 = h._iCurs; + qmemcpy(a, b, sizeof(ItemStruct)); + qmemcpy(b, &h, sizeof(ItemStruct)); + return v2 + 12; } void __fastcall CheckInvPaste(int pnum, int mx, int my) { - int v3; // ebx - int v4; // edi - int v5; // eax - int v6; // esi - signed int v7; // edi - int v8; // edx - int v9; // edx - signed int v10; // edi - char v11; // al - signed int v12; // ecx - int v13; // eax - int v14; // eax - char *v15; // edi - int v16; // esi - int v17; // ecx - int v18; // edx - int v21; // esi - ItemStruct *v22; // edi - ItemStruct *v23; // ecx - int v24; // eax - int v25; // eax - int v26; // edx - ItemStruct *v27; // esi - int v28; // eax - int v29; // ecx - int v30; // esi - int v31; // eax - int v32; // eax - int v33; // ecx - int v34; // eax - int v35; // ecx - char *v36; // eax - int v37; // edx - int v38; // ecx - int v39; // edi - int v40; // esi - int v41; // ebx - int v42; // edx - int v43; // eax - int v44; // eax - signed int v45; // ecx - int v46; // edx - char *v47; // eax - int v48; // edi - int v49; // eax - int v50; // ecx - char *v51; // esi - char v52; // cl - int v53; // ecx - int v54; // eax - int v55; // edi - int v56; // edx - int v57; // esi - int v58; // ebx - int v59; // eax - int v60; // esi - ItemStruct tempitem; // [esp+Ch] [ebp-190h] - int v62; // [esp+17Ch] [ebp-20h] - int p; // [esp+180h] [ebp-1Ch] - int v64; // [esp+184h] [ebp-18h] - int v65; // [esp+188h] [ebp-14h] - int v66; // [esp+18Ch] [ebp-10h] - int v67; // [esp+190h] [ebp-Ch] - int v68; // [esp+194h] [ebp-8h] - int v69; // [esp+198h] [ebp-4h] - int cursor_id; // [esp+1A4h] [ebp+8h] - int cursor_ida; // [esp+1A4h] [ebp+8h] - - p = pnum; - v3 = pnum; - v4 = mx; - SetICursor(plr[pnum].HoldItem._iCurs + 12); - v5 = my + (icursH >> 1); - v6 = v4 + (icursW >> 1); - v64 = icursW28; - v7 = 0; - v67 = icursH28; - v68 = 0; - do - { - if ( v7 ) - goto LABEL_18; - v8 = InvRect[v68].X; - if ( v6 >= v8 && v6 < v8 + 28 ) - { - v9 = InvRect[v68].Y; - if ( v5 >= v9 - 29 && v5 < v9 ) - { - v7 = 1; - --v68; - } - } - if ( v68 != 24 ) - goto LABEL_13; - if ( !(v64 & 1) ) - v6 -= 14; - if ( !(v67 & 1) ) - { - v5 -= 14; -LABEL_13: - if ( v68 == 64 && !(v67 & 1) ) - v5 += 14; - } - ++v68; - } - while ( (unsigned int)v68 < 0x49 ); - if ( !v7 ) - return; + int v3; // ebx + int v4; // edi + int v5; // eax + int v6; // esi + signed int v7; // edi + int v8; // edx + int v9; // edx + signed int v10; // edi + char v11; // al + signed int v12; // ecx + int v13; // eax + int v14; // eax + char *v15; // edi + int v16; // esi + int v17; // ecx + int v18; // edx + int v21; // esi + ItemStruct *v22; // edi + ItemStruct *v23; // ecx + int v24; // eax + int v25; // eax + int v26; // edx + ItemStruct *v27; // esi + int v28; // eax + int v29; // ecx + int v30; // esi + int v31; // eax + int v32; // eax + int v33; // ecx + int v34; // eax + int v35; // ecx + char *v36; // eax + int v37; // edx + int v38; // ecx + int v39; // edi + int v40; // esi + int v41; // ebx + int v42; // edx + int v43; // eax + int v44; // eax + signed int v45; // ecx + int v46; // edx + char *v47; // eax + int v48; // edi + int v49; // eax + int v50; // ecx + char *v51; // esi + char v52; // cl + int v53; // ecx + int v54; // eax + int v55; // edi + int v56; // edx + int v57; // esi + int v58; // ebx + int v59; // eax + int v60; // esi + ItemStruct tempitem; // [esp+Ch] [ebp-190h] + int v62; // [esp+17Ch] [ebp-20h] + int p; // [esp+180h] [ebp-1Ch] + int v64; // [esp+184h] [ebp-18h] + int v65; // [esp+188h] [ebp-14h] + int v66; // [esp+18Ch] [ebp-10h] + int v67; // [esp+190h] [ebp-Ch] + int v68; // [esp+194h] [ebp-8h] + int v69; // [esp+198h] [ebp-4h] + int cursor_id; // [esp+1A4h] [ebp+8h] + int cursor_ida; // [esp+1A4h] [ebp+8h] + + p = pnum; + v3 = pnum; + v4 = mx; + SetICursor(plr[pnum].HoldItem._iCurs + 12); + v5 = my + (icursH >> 1); + v6 = v4 + (icursW >> 1); + v64 = icursW28; + v7 = 0; + v67 = icursH28; + v68 = 0; + do { + if (v7) + goto LABEL_18; + v8 = InvRect[v68].X; + if (v6 >= v8 && v6 < v8 + 28) { + v9 = InvRect[v68].Y; + if (v5 >= v9 - 29 && v5 < v9) { + v7 = 1; + --v68; + } + } + if (v68 != 24) + goto LABEL_13; + if (!(v64 & 1)) + v6 -= 14; + if (!(v67 & 1)) { + v5 -= 14; + LABEL_13: + if (v68 == 64 && !(v67 & 1)) + v5 += 14; + } + ++v68; + } while ((unsigned int)v68 < 0x49); + if (!v7) + return; LABEL_18: - v10 = v68; - v69 = ILOC_UNEQUIPABLE; - if ( v68 >= 0 && v68 <= ILOC_ARMOR ) - v69 = ILOC_HELM; - if ( v68 >= ILOC_HELM && v68 <= ILOC_RING ) - v69 = ILOC_RING; - if ( v68 == ILOC_AMULET ) - v69 = ILOC_AMULET; - if ( v68 >= ILOC_UNEQUIPABLE && v68 <= 18 ) - v69 = ILOC_ONEHAND; - if ( v68 >= 19 && v68 <= 24 ) - v69 = ILOC_ARMOR; - if ( v68 >= 65 && v68 <= 72 ) - v69 = ILOC_BELT; - v11 = plr[v3].HoldItem._iLoc; - v12 = 0; - if ( (char)v11 == v69 ) - v12 = 1; - if ( v69 == 1 && v11 == ILOC_TWOHAND ) - { - v69 = ILOC_TWOHAND; - v12 = 1; - } - if ( v11 != 7 || v69 != ILOC_BELT ) - { -LABEL_50: - if ( v69 != ILOC_UNEQUIPABLE ) - goto LABEL_81; - v66 = 0; - cursor_id = 1; - v13 = (v68 - 25) / 10; - if ( plr[v3].HoldItem._itype == ITYPE_GOLD ) - { - _LOBYTE(v13) = plr[0].InvGrid[10 * v13 + v3 * 21720 + (v68 - 25) % 10]; - if ( !(_BYTE)v13 ) - goto LABEL_93; - v13 = (char)v13; - if ( (char)v13 <= 0 ) - { - v13 = -v13; - } - else if ( *(int *)((char *)&plr[0].InvBody[v13 + 6]._itype + v3 * 21720) == ITYPE_GOLD ) - { - goto LABEL_93; - } - v66 = v13; -LABEL_93: - v21 = p; - if ( p == myplr ) - { - PlaySFX(ItemInvSnds[ItemCAnimTbl[plr[v3].HoldItem._iCurs]]); - v10 = v68; - } - cursor_ida = 1; - switch ( v69 ) - { - case ILOC_ONEHAND: - if ( v10 > 12 ) - { - if ( plr[v3].InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_NONE ) - { - v25 = plr[v3].InvBody[INVLOC_HAND_LEFT]._itype; - if ( v25 == ITYPE_NONE ) - goto LABEL_232; - if ( plr[v3].InvBody[INVLOC_HAND_LEFT]._iLoc == ILOC_TWOHAND ) - { - NetSendCmdDelItem(FALSE, 4u); - NetSendCmdChItem(FALSE, 5u); - SwapItem(&plr[v3].InvBody[INVLOC_HAND_RIGHT], &plr[v3].InvBody[INVLOC_HAND_LEFT]); - v23 = &plr[v3].InvBody[INVLOC_HAND_RIGHT]; -LABEL_99: - v24 = SwapItem(v23, &plr[v3].HoldItem); -LABEL_172: - cursor_ida = v24; - goto LABEL_226; - } - if ( v25 == ITYPE_NONE || plr[v3].InvBody[INVLOC_HAND_LEFT]._iClass != plr[v3].HoldItem._iClass ) - { -LABEL_232: - NetSendCmdChItem(FALSE, 5u); - v22 = &plr[v3].InvBody[INVLOC_HAND_RIGHT]; -LABEL_158: - qmemcpy(v22, &plr[v3].HoldItem, sizeof(ItemStruct)); - goto LABEL_226; - } - } - else if ( plr[v3].InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_NONE - || plr[v3].InvBody[INVLOC_HAND_LEFT]._iClass != plr[v3].HoldItem._iClass ) - { - goto LABEL_114; - } - } - else - { - if ( plr[v3].InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_NONE ) - { - if ( plr[v3].InvBody[INVLOC_HAND_RIGHT]._itype != ITYPE_NONE - && plr[v3].InvBody[INVLOC_HAND_RIGHT]._iClass == plr[v3].HoldItem._iClass ) - { -LABEL_114: - NetSendCmdChItem(FALSE, 5u); - v23 = &plr[v3].InvBody[INVLOC_HAND_RIGHT]; - goto LABEL_99; - } - NetSendCmdChItem(FALSE, 4u); - v22 = &plr[v3].InvBody[INVLOC_HAND_LEFT]; - goto LABEL_158; - } - if ( plr[v3].InvBody[INVLOC_HAND_RIGHT]._itype != ITYPE_NONE - && plr[v3].InvBody[INVLOC_HAND_RIGHT]._iClass == plr[v3].HoldItem._iClass ) - { - goto LABEL_114; - } - } - NetSendCmdChItem(FALSE, 4u); - v23 = &plr[v3].InvBody[INVLOC_HAND_LEFT]; - goto LABEL_99; - case ILOC_TWOHAND: - NetSendCmdDelItem(FALSE, 5u); - if ( plr[v3].InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_NONE ) - goto LABEL_147; - v26 = plr[v3].InvBody[INVLOC_HAND_RIGHT]._itype; - if ( v26 == -1 ) - goto LABEL_146; - qmemcpy(&tempitem, &plr[v3].HoldItem, sizeof(tempitem)); - v27 = &plr[v3].InvBody[INVLOC_HAND_RIGHT]; - if ( v26 != 5 ) - v27 = &plr[v3].InvBody[INVLOC_HAND_LEFT]; - v28 = p; - qmemcpy(&plr[v3].HoldItem, v27, sizeof(plr[v3].HoldItem)); - v29 = plr[v3].HoldItem._iCurs + 12; - if ( v28 == myplr ) - SetCursor(v29); - else - SetICursor(v29); - v67 = 0; - v30 = 0; - do - { - if ( v67 ) - break; - v31 = AutoPlace(p, v30++, icursW28, icursH28, 1); - v67 = v31; - } - while ( v30 < 40 ); - v32 = p; - qmemcpy(&plr[v3].HoldItem, &tempitem, sizeof(plr[v3].HoldItem)); - v33 = plr[v3].HoldItem._iCurs + 12; - if ( v32 == myplr ) - SetCursor(v33); - else - SetICursor(v33); - if ( !v67 ) - return; - if ( plr[v3].InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_SHIELD ) - plr[v3].InvBody[INVLOC_HAND_RIGHT]._itype = ITYPE_NONE; - else - plr[v3].InvBody[INVLOC_HAND_LEFT]._itype = ITYPE_NONE; -LABEL_146: - if ( plr[v3].InvBody[INVLOC_HAND_LEFT]._itype != ITYPE_NONE ) - goto LABEL_149; -LABEL_147: - if ( plr[v3].InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_NONE ) - { - NetSendCmdChItem(FALSE, 4u); - qmemcpy(&plr[v3].InvBody[INVLOC_HAND_LEFT], &plr[v3].HoldItem, sizeof(plr[v3].InvBody[INVLOC_HAND_LEFT])); - } - else - { -LABEL_149: - NetSendCmdChItem(FALSE, 4u); - if ( plr[v3].InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_NONE ) - SwapItem(&plr[v3].InvBody[INVLOC_HAND_LEFT], &plr[v3].InvBody[INVLOC_HAND_RIGHT]); - cursor_ida = SwapItem(&plr[v3].InvBody[INVLOC_HAND_LEFT], &plr[v3].HoldItem); - } - if ( plr[v3].InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_STAFF ) - { - v34 = plr[v3].InvBody[INVLOC_HAND_LEFT]._iSpell; - if ( v34 ) - { - if ( plr[v3].InvBody[INVLOC_HAND_LEFT]._iCharges > 0 ) - { - plr[v3]._pRSpell = v34; - _LOBYTE(plr[v3]._pRSplType) = RSPLTYPE_CHARGES; - drawpanflag = 255; - } - } - } - goto LABEL_226; - case ILOC_ARMOR: - NetSendCmdChItem(FALSE, 6u); - if ( plr[v3].InvBody[INVLOC_CHEST]._itype == ITYPE_NONE ) - { - v22 = &plr[v3].InvBody[INVLOC_CHEST]; - goto LABEL_158; - } - v23 = &plr[v3].InvBody[INVLOC_CHEST]; - goto LABEL_99; - case ILOC_HELM: - NetSendCmdChItem(FALSE, 0); - if ( plr[v3].InvBody[INVLOC_HEAD]._itype == ITYPE_NONE ) - { - v22 = plr[v3].InvBody; - goto LABEL_158; - } - v23 = plr[v3].InvBody; - goto LABEL_99; - case ILOC_RING: - if ( v10 == 4 ) - { - NetSendCmdChItem(FALSE, 1u); - if ( plr[v3].InvBody[INVLOC_RING_LEFT]._itype == ITYPE_NONE ) - { - v22 = &plr[v3].InvBody[INVLOC_RING_LEFT]; - goto LABEL_158; - } - v23 = &plr[v3].InvBody[INVLOC_RING_LEFT]; - } - else - { - NetSendCmdChItem(FALSE, 2u); - if ( plr[v3].InvBody[INVLOC_RING_RIGHT]._itype == ITYPE_NONE ) - { - v22 = &plr[v3].InvBody[INVLOC_RING_RIGHT]; - goto LABEL_158; - } - v23 = &plr[v3].InvBody[INVLOC_RING_RIGHT]; - } - goto LABEL_99; - case ILOC_AMULET: - NetSendCmdChItem(FALSE, 3u); - if ( plr[v3].InvBody[INVLOC_AMULET]._itype == ITYPE_NONE ) - { - v22 = &plr[v3].InvBody[INVLOC_AMULET]; - goto LABEL_158; - } - v23 = &plr[v3].InvBody[INVLOC_AMULET]; - goto LABEL_99; - case ILOC_UNEQUIPABLE: - v35 = plr[v3].HoldItem._itype; - if ( v35 == 11 ) - { - if ( !v66 ) - { - v36 = &plr[0].InvGrid[10 * ((v68 - 25) / 10) + v3 * 21720 + (v68 - 25) % 10]; - if ( *v36 <= 0 ) - { - v42 = 368 * plr[v3]._pNumInv + v3 * 21720; - qmemcpy((char *)plr[0].InvList + v42, &plr[v3].HoldItem, 0x170u); - ++plr[v3]._pNumInv; - *v36 = plr[v3]._pNumInv; - v43 = plr[v3].HoldItem._ivalue; - plr[v3]._pGold += v43; - if ( v43 <= 5000 ) - { - if ( v43 < 2500 ) - { - if ( v43 > 1000 ) - *(int *)((char *)&plr[0].InvList[0]._iCurs + v42) = 5; - else - *(int *)((char *)&plr[0].InvList[0]._iCurs + v42) = 4; - } - else - { - *(int *)((char *)&plr[0].InvList[0]._iCurs + v42) = 6; - } - } - goto LABEL_226; - } - v37 = plr[v3].HoldItem._ivalue; - v38 = 368 * (*v36 - 1) + v3 * 21720; - v39 = *(int *)((char *)&plr[0].InvList[0]._ivalue + v38); - v40 = v37 + v39; - if ( v37 + v39 <= 5000 ) - { - *(int *)((char *)&plr[0].InvList[0]._ivalue + v38) = v40; - plr[v3]._pGold += plr[v3].HoldItem._ivalue; - if ( v40 < 2500 ) - { - if ( v40 > 1000 ) - *(int *)((char *)&plr[0].InvList[0]._iCurs + v38) = 5; - else - *(int *)((char *)&plr[0].InvList[0]._iCurs + v38) = 4; - } - else - { - *(int *)((char *)&plr[0].InvList[0]._iCurs + v38) = 6; - } - goto LABEL_226; - } - plr[v3]._pGold += 5000 - v39; - plr[v3].HoldItem._ivalue = v37 - (5000 - v39); - *(int *)((char *)&plr[0].InvList[0]._ivalue + v38) = 5000; - *(int *)((char *)&plr[0].InvList[0]._iCurs + v38) = 6; - v41 = plr[v3].HoldItem._ivalue; - if ( v41 >= 2500 ) - { - cursor_ida = 18; - goto LABEL_226; - } - v24 = (v41 > 1000) + 16; - goto LABEL_172; - } - } - else if ( !v66 ) - { - qmemcpy((char *)&plr[0].InvList[plr[v3]._pNumInv++] + v3 * 21720, &plr[v3].HoldItem, 0x170u); - v66 = plr[v3]._pNumInv; -LABEL_191: - v48 = v67; - v49 = 10 * ((v68 - 25) / 10 - ((v67 - 1) >> 1)); - if ( v49 < 0 ) - v49 = 0; - v65 = 0; - if ( v67 > 0 ) - { - v69 = (v68 - 25) % 10 - ((v64 - 1) >> 1); - do - { - v50 = v69; - if ( v69 < 0 ) - v50 = 0; - v67 = 0; - if ( v64 > 0 ) - { - v51 = &plr[v3].InvGrid[v50 + v49]; - do - { - if ( v67 || v65 != v48 - 1 ) - v52 = -(char)v66; - else - v52 = v66; - *v51++ = v52; - ++v67; - } - while ( v67 < v64 ); - } - v49 += 10; - ++v65; - } - while ( v65 < v48 ); - } - goto LABEL_226; - } - v44 = v66 - 1; - if ( v35 == 11 ) - plr[v3]._pGold += plr[v3].HoldItem._ivalue; - cursor_ida = SwapItem((ItemStruct *)((char *)&plr[0].InvList[v44] + v3 * 21720), &plr[v3].HoldItem); - if ( plr[v3].HoldItem._itype == ITYPE_GOLD ) - plr[v3]._pGold = CalculateGold(v21); - v45 = 0; - v46 = -v66; - do - { - v47 = &plr[v3].InvGrid[v45]; - if ( *v47 == v66 ) - *v47 = 0; - if ( *v47 == v46 ) - *v47 = 0; - ++v45; - } - while ( v45 < 40 ); - goto LABEL_191; - case ILOC_BELT: - v53 = v3 * 21720 + 368 * (v68 - 65); - if ( plr[v3].HoldItem._itype != ITYPE_GOLD ) - { - if ( *(int *)((char *)&plr[0].SpdList[0]._itype + v53) == ITYPE_NONE ) - { - qmemcpy((char *)plr[0].SpdList + v53, &plr[v3].HoldItem, 0x170u); - } - else - { - cursor_ida = SwapItem((ItemStruct *)((char *)plr[0].SpdList + v53), &plr[v3].HoldItem); - if ( plr[v3].HoldItem._itype == ITYPE_GOLD ) - plr[v3]._pGold = CalculateGold(p); - } - goto LABEL_225; - } - v54 = *(int *)((char *)&plr[0].SpdList[0]._itype + v53); - if ( v54 != -1 ) - { - if ( v54 == 11 ) - { - v55 = *(int *)((char *)&plr[0].SpdList[0]._ivalue + v53); - v56 = plr[v3].HoldItem._ivalue; - v57 = v55 + v56; - if ( v55 + v56 <= 5000 ) - { - *(int *)((char *)&plr[0].SpdList[0]._ivalue + v53) = v57; - plr[v3]._pGold += plr[v3].HoldItem._ivalue; - if ( v57 < 2500 ) - { - if ( v57 > 1000 ) - *(int *)((char *)&plr[0].SpdList[0]._iCurs + v53) = 5; - else - *(int *)((char *)&plr[0].SpdList[0]._iCurs + v53) = 4; - } - else - { - *(int *)((char *)&plr[0].SpdList[0]._iCurs + v53) = 6; - } - goto LABEL_225; - } - plr[v3]._pGold += 5000 - v55; - plr[v3].HoldItem._ivalue = v56 - (5000 - v55); - *(int *)((char *)&plr[0].SpdList[0]._ivalue + v53) = 5000; - *(int *)((char *)&plr[0].SpdList[0]._iCurs + v53) = 6; - v58 = plr[v3].HoldItem._ivalue; - if ( v58 >= 2500 ) - { - cursor_ida = 18; - goto LABEL_225; - } - v59 = (v58 > 1000) + 16; - } - else - { - plr[v3]._pGold += plr[v3].HoldItem._ivalue; - v59 = SwapItem((ItemStruct *)((char *)plr[0].SpdList + v53), &plr[v3].HoldItem); - } - cursor_ida = v59; - goto LABEL_225; - } - qmemcpy((char *)plr[0].SpdList + v53, &plr[v3].HoldItem, 0x170u); - plr[v3]._pGold += plr[v3].HoldItem._ivalue; -LABEL_225: - drawsbarflag = 1; -LABEL_226: - v60 = p; - CalcPlrInv(p, 1u); - if ( v60 == myplr ) - { - if ( cursor_ida == 1 ) - SetCursorPos(MouseX + (cursW >> 1), MouseY + (cursH >> 1)); - SetCursor(cursor_ida); - } - return; - default: - goto LABEL_226; - } - } - v62 = (v68 - 25) % 10; - v14 = 10 * (v13 - ((v67 - 1) >> 1)); - if ( v14 < 0 ) - v14 = 0; - v65 = 0; - if ( v67 <= 0 ) - goto LABEL_93; - v15 = &plr[v3].InvGrid[v14]; - while ( 1 ) - { - if ( cursor_id == CURSOR_NONE ) - return; - if ( v14 >= 40 ) - cursor_id = 0; - v16 = v62 - ((v64 - 1) >> 1); - if ( v16 < 0 ) - v16 = 0; - v17 = 0; - if ( v64 > 0 ) - break; -LABEL_79: - v14 += 10; - v15 += 10; - if ( ++v65 >= v67 ) - { - v12 = cursor_id; - v10 = v68; - goto LABEL_81; - } - } - while ( 1 ) - { - if ( cursor_id == CURSOR_NONE ) - goto LABEL_79; - if ( v16 >= 10 ) - goto LABEL_233; - _LOBYTE(v18) = v15[v16]; - if ( (_BYTE)v18 ) - { - v18 = (char)v18; - if ( (v18 & 0x80u) != 0 ) - v18 = -v18; - if ( !v66 ) - { - v66 = v18; - goto LABEL_78; - } - if ( v66 != v18 ) -LABEL_233: - cursor_id = 0; - } -LABEL_78: - ++v16; - if ( ++v17 >= v64 ) - goto LABEL_79; - } - } - if ( v64 == 1 && v67 == 1 ) - { - v12 = 1; - if ( !AllItemsList[plr[v3].HoldItem.IDidx].iUsable ) - v12 = 0; - if ( !plr[v3].HoldItem._iStatFlag ) - v12 = 0; - if ( plr[v3].HoldItem._itype == ITYPE_GOLD ) - { - v12 = 0; - goto LABEL_50; - } - } + v10 = v68; + v69 = ILOC_UNEQUIPABLE; + if (v68 >= 0 && v68 <= ILOC_ARMOR) + v69 = ILOC_HELM; + if (v68 >= ILOC_HELM && v68 <= ILOC_RING) + v69 = ILOC_RING; + if (v68 == ILOC_AMULET) + v69 = ILOC_AMULET; + if (v68 >= ILOC_UNEQUIPABLE && v68 <= 18) + v69 = ILOC_ONEHAND; + if (v68 >= 19 && v68 <= 24) + v69 = ILOC_ARMOR; + if (v68 >= 65 && v68 <= 72) + v69 = ILOC_BELT; + v11 = plr[v3].HoldItem._iLoc; + v12 = 0; + if ((char)v11 == v69) + v12 = 1; + if (v69 == 1 && v11 == ILOC_TWOHAND) { + v69 = ILOC_TWOHAND; + v12 = 1; + } + if (v11 != 7 || v69 != ILOC_BELT) { + LABEL_50: + if (v69 != ILOC_UNEQUIPABLE) + goto LABEL_81; + v66 = 0; + cursor_id = 1; + v13 = (v68 - 25) / 10; + if (plr[v3].HoldItem._itype == ITYPE_GOLD) { + _LOBYTE(v13) = plr[0].InvGrid[10 * v13 + v3 * 21720 + (v68 - 25) % 10]; + if (!(_BYTE)v13) + goto LABEL_93; + v13 = (char)v13; + if ((char)v13 <= 0) { + v13 = -v13; + } else if (*(int *)((char *)&plr[0].InvBody[v13 + 6]._itype + v3 * 21720) == ITYPE_GOLD) { + goto LABEL_93; + } + v66 = v13; + LABEL_93: + v21 = p; + if (p == myplr) { + PlaySFX(ItemInvSnds[ItemCAnimTbl[plr[v3].HoldItem._iCurs]]); + v10 = v68; + } + cursor_ida = 1; + switch (v69) { + case ILOC_ONEHAND: + if (v10 > 12) { + if (plr[v3].InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_NONE) { + v25 = plr[v3].InvBody[INVLOC_HAND_LEFT]._itype; + if (v25 == ITYPE_NONE) + goto LABEL_232; + if (plr[v3].InvBody[INVLOC_HAND_LEFT]._iLoc == ILOC_TWOHAND) { + NetSendCmdDelItem(FALSE, 4u); + NetSendCmdChItem(FALSE, 5u); + SwapItem(&plr[v3].InvBody[INVLOC_HAND_RIGHT], &plr[v3].InvBody[INVLOC_HAND_LEFT]); + v23 = &plr[v3].InvBody[INVLOC_HAND_RIGHT]; + LABEL_99: + v24 = SwapItem(v23, &plr[v3].HoldItem); + LABEL_172: + cursor_ida = v24; + goto LABEL_226; + } + if (v25 == ITYPE_NONE || plr[v3].InvBody[INVLOC_HAND_LEFT]._iClass != plr[v3].HoldItem._iClass) { + LABEL_232: + NetSendCmdChItem(FALSE, 5u); + v22 = &plr[v3].InvBody[INVLOC_HAND_RIGHT]; + LABEL_158: + qmemcpy(v22, &plr[v3].HoldItem, sizeof(ItemStruct)); + goto LABEL_226; + } + } else if (plr[v3].InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_NONE + || plr[v3].InvBody[INVLOC_HAND_LEFT]._iClass != plr[v3].HoldItem._iClass) { + goto LABEL_114; + } + } else { + if (plr[v3].InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_NONE) { + if (plr[v3].InvBody[INVLOC_HAND_RIGHT]._itype != ITYPE_NONE + && plr[v3].InvBody[INVLOC_HAND_RIGHT]._iClass == plr[v3].HoldItem._iClass) { + LABEL_114: + NetSendCmdChItem(FALSE, 5u); + v23 = &plr[v3].InvBody[INVLOC_HAND_RIGHT]; + goto LABEL_99; + } + NetSendCmdChItem(FALSE, 4u); + v22 = &plr[v3].InvBody[INVLOC_HAND_LEFT]; + goto LABEL_158; + } + if (plr[v3].InvBody[INVLOC_HAND_RIGHT]._itype != ITYPE_NONE + && plr[v3].InvBody[INVLOC_HAND_RIGHT]._iClass == plr[v3].HoldItem._iClass) { + goto LABEL_114; + } + } + NetSendCmdChItem(FALSE, 4u); + v23 = &plr[v3].InvBody[INVLOC_HAND_LEFT]; + goto LABEL_99; + case ILOC_TWOHAND: + NetSendCmdDelItem(FALSE, 5u); + if (plr[v3].InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_NONE) + goto LABEL_147; + v26 = plr[v3].InvBody[INVLOC_HAND_RIGHT]._itype; + if (v26 == -1) + goto LABEL_146; + qmemcpy(&tempitem, &plr[v3].HoldItem, sizeof(tempitem)); + v27 = &plr[v3].InvBody[INVLOC_HAND_RIGHT]; + if (v26 != 5) + v27 = &plr[v3].InvBody[INVLOC_HAND_LEFT]; + v28 = p; + qmemcpy(&plr[v3].HoldItem, v27, sizeof(plr[v3].HoldItem)); + v29 = plr[v3].HoldItem._iCurs + 12; + if (v28 == myplr) + SetCursor(v29); + else + SetICursor(v29); + v67 = 0; + v30 = 0; + do { + if (v67) + break; + v31 = AutoPlace(p, v30++, icursW28, icursH28, 1); + v67 = v31; + } while (v30 < 40); + v32 = p; + qmemcpy(&plr[v3].HoldItem, &tempitem, sizeof(plr[v3].HoldItem)); + v33 = plr[v3].HoldItem._iCurs + 12; + if (v32 == myplr) + SetCursor(v33); + else + SetICursor(v33); + if (!v67) + return; + if (plr[v3].InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_SHIELD) + plr[v3].InvBody[INVLOC_HAND_RIGHT]._itype = ITYPE_NONE; + else + plr[v3].InvBody[INVLOC_HAND_LEFT]._itype = ITYPE_NONE; + LABEL_146: + if (plr[v3].InvBody[INVLOC_HAND_LEFT]._itype != ITYPE_NONE) + goto LABEL_149; + LABEL_147: + if (plr[v3].InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_NONE) { + NetSendCmdChItem(FALSE, 4u); + qmemcpy(&plr[v3].InvBody[INVLOC_HAND_LEFT], &plr[v3].HoldItem, sizeof(plr[v3].InvBody[INVLOC_HAND_LEFT])); + } else { + LABEL_149: + NetSendCmdChItem(FALSE, 4u); + if (plr[v3].InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_NONE) + SwapItem(&plr[v3].InvBody[INVLOC_HAND_LEFT], &plr[v3].InvBody[INVLOC_HAND_RIGHT]); + cursor_ida = SwapItem(&plr[v3].InvBody[INVLOC_HAND_LEFT], &plr[v3].HoldItem); + } + if (plr[v3].InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_STAFF) { + v34 = plr[v3].InvBody[INVLOC_HAND_LEFT]._iSpell; + if (v34) { + if (plr[v3].InvBody[INVLOC_HAND_LEFT]._iCharges > 0) { + plr[v3]._pRSpell = v34; + _LOBYTE(plr[v3]._pRSplType) = RSPLTYPE_CHARGES; + drawpanflag = 255; + } + } + } + goto LABEL_226; + case ILOC_ARMOR: + NetSendCmdChItem(FALSE, 6u); + if (plr[v3].InvBody[INVLOC_CHEST]._itype == ITYPE_NONE) { + v22 = &plr[v3].InvBody[INVLOC_CHEST]; + goto LABEL_158; + } + v23 = &plr[v3].InvBody[INVLOC_CHEST]; + goto LABEL_99; + case ILOC_HELM: + NetSendCmdChItem(FALSE, 0); + if (plr[v3].InvBody[INVLOC_HEAD]._itype == ITYPE_NONE) { + v22 = plr[v3].InvBody; + goto LABEL_158; + } + v23 = plr[v3].InvBody; + goto LABEL_99; + case ILOC_RING: + if (v10 == 4) { + NetSendCmdChItem(FALSE, 1u); + if (plr[v3].InvBody[INVLOC_RING_LEFT]._itype == ITYPE_NONE) { + v22 = &plr[v3].InvBody[INVLOC_RING_LEFT]; + goto LABEL_158; + } + v23 = &plr[v3].InvBody[INVLOC_RING_LEFT]; + } else { + NetSendCmdChItem(FALSE, 2u); + if (plr[v3].InvBody[INVLOC_RING_RIGHT]._itype == ITYPE_NONE) { + v22 = &plr[v3].InvBody[INVLOC_RING_RIGHT]; + goto LABEL_158; + } + v23 = &plr[v3].InvBody[INVLOC_RING_RIGHT]; + } + goto LABEL_99; + case ILOC_AMULET: + NetSendCmdChItem(FALSE, 3u); + if (plr[v3].InvBody[INVLOC_AMULET]._itype == ITYPE_NONE) { + v22 = &plr[v3].InvBody[INVLOC_AMULET]; + goto LABEL_158; + } + v23 = &plr[v3].InvBody[INVLOC_AMULET]; + goto LABEL_99; + case ILOC_UNEQUIPABLE: + v35 = plr[v3].HoldItem._itype; + if (v35 == 11) { + if (!v66) { + v36 = &plr[0].InvGrid[10 * ((v68 - 25) / 10) + v3 * 21720 + (v68 - 25) % 10]; + if (*v36 <= 0) { + v42 = 368 * plr[v3]._pNumInv + v3 * 21720; + qmemcpy((char *)plr[0].InvList + v42, &plr[v3].HoldItem, 0x170u); + ++plr[v3]._pNumInv; + *v36 = plr[v3]._pNumInv; + v43 = plr[v3].HoldItem._ivalue; + plr[v3]._pGold += v43; + if (v43 <= 5000) { + if (v43 < 2500) { + if (v43 > 1000) + *(int *)((char *)&plr[0].InvList[0]._iCurs + v42) = 5; + else + *(int *)((char *)&plr[0].InvList[0]._iCurs + v42) = 4; + } else { + *(int *)((char *)&plr[0].InvList[0]._iCurs + v42) = 6; + } + } + goto LABEL_226; + } + v37 = plr[v3].HoldItem._ivalue; + v38 = 368 * (*v36 - 1) + v3 * 21720; + v39 = *(int *)((char *)&plr[0].InvList[0]._ivalue + v38); + v40 = v37 + v39; + if (v37 + v39 <= 5000) { + *(int *)((char *)&plr[0].InvList[0]._ivalue + v38) = v40; + plr[v3]._pGold += plr[v3].HoldItem._ivalue; + if (v40 < 2500) { + if (v40 > 1000) + *(int *)((char *)&plr[0].InvList[0]._iCurs + v38) = 5; + else + *(int *)((char *)&plr[0].InvList[0]._iCurs + v38) = 4; + } else { + *(int *)((char *)&plr[0].InvList[0]._iCurs + v38) = 6; + } + goto LABEL_226; + } + plr[v3]._pGold += 5000 - v39; + plr[v3].HoldItem._ivalue = v37 - (5000 - v39); + *(int *)((char *)&plr[0].InvList[0]._ivalue + v38) = 5000; + *(int *)((char *)&plr[0].InvList[0]._iCurs + v38) = 6; + v41 = plr[v3].HoldItem._ivalue; + if (v41 >= 2500) { + cursor_ida = 18; + goto LABEL_226; + } + v24 = (v41 > 1000) + 16; + goto LABEL_172; + } + } else if (!v66) { + qmemcpy((char *)&plr[0].InvList[plr[v3]._pNumInv++] + v3 * 21720, &plr[v3].HoldItem, 0x170u); + v66 = plr[v3]._pNumInv; + LABEL_191: + v48 = v67; + v49 = 10 * ((v68 - 25) / 10 - ((v67 - 1) >> 1)); + if (v49 < 0) + v49 = 0; + v65 = 0; + if (v67 > 0) { + v69 = (v68 - 25) % 10 - ((v64 - 1) >> 1); + do { + v50 = v69; + if (v69 < 0) + v50 = 0; + v67 = 0; + if (v64 > 0) { + v51 = &plr[v3].InvGrid[v50 + v49]; + do { + if (v67 || v65 != v48 - 1) + v52 = -(char)v66; + else + v52 = v66; + *v51++ = v52; + ++v67; + } while (v67 < v64); + } + v49 += 10; + ++v65; + } while (v65 < v48); + } + goto LABEL_226; + } + v44 = v66 - 1; + if (v35 == 11) + plr[v3]._pGold += plr[v3].HoldItem._ivalue; + cursor_ida = SwapItem((ItemStruct *)((char *)&plr[0].InvList[v44] + v3 * 21720), &plr[v3].HoldItem); + if (plr[v3].HoldItem._itype == ITYPE_GOLD) + plr[v3]._pGold = CalculateGold(v21); + v45 = 0; + v46 = -v66; + do { + v47 = &plr[v3].InvGrid[v45]; + if (*v47 == v66) + *v47 = 0; + if (*v47 == v46) + *v47 = 0; + ++v45; + } while (v45 < 40); + goto LABEL_191; + case ILOC_BELT: + v53 = v3 * 21720 + 368 * (v68 - 65); + if (plr[v3].HoldItem._itype != ITYPE_GOLD) { + if (*(int *)((char *)&plr[0].SpdList[0]._itype + v53) == ITYPE_NONE) { + qmemcpy((char *)plr[0].SpdList + v53, &plr[v3].HoldItem, 0x170u); + } else { + cursor_ida = SwapItem((ItemStruct *)((char *)plr[0].SpdList + v53), &plr[v3].HoldItem); + if (plr[v3].HoldItem._itype == ITYPE_GOLD) + plr[v3]._pGold = CalculateGold(p); + } + goto LABEL_225; + } + v54 = *(int *)((char *)&plr[0].SpdList[0]._itype + v53); + if (v54 != -1) { + if (v54 == 11) { + v55 = *(int *)((char *)&plr[0].SpdList[0]._ivalue + v53); + v56 = plr[v3].HoldItem._ivalue; + v57 = v55 + v56; + if (v55 + v56 <= 5000) { + *(int *)((char *)&plr[0].SpdList[0]._ivalue + v53) = v57; + plr[v3]._pGold += plr[v3].HoldItem._ivalue; + if (v57 < 2500) { + if (v57 > 1000) + *(int *)((char *)&plr[0].SpdList[0]._iCurs + v53) = 5; + else + *(int *)((char *)&plr[0].SpdList[0]._iCurs + v53) = 4; + } else { + *(int *)((char *)&plr[0].SpdList[0]._iCurs + v53) = 6; + } + goto LABEL_225; + } + plr[v3]._pGold += 5000 - v55; + plr[v3].HoldItem._ivalue = v56 - (5000 - v55); + *(int *)((char *)&plr[0].SpdList[0]._ivalue + v53) = 5000; + *(int *)((char *)&plr[0].SpdList[0]._iCurs + v53) = 6; + v58 = plr[v3].HoldItem._ivalue; + if (v58 >= 2500) { + cursor_ida = 18; + goto LABEL_225; + } + v59 = (v58 > 1000) + 16; + } else { + plr[v3]._pGold += plr[v3].HoldItem._ivalue; + v59 = SwapItem((ItemStruct *)((char *)plr[0].SpdList + v53), &plr[v3].HoldItem); + } + cursor_ida = v59; + goto LABEL_225; + } + qmemcpy((char *)plr[0].SpdList + v53, &plr[v3].HoldItem, 0x170u); + plr[v3]._pGold += plr[v3].HoldItem._ivalue; + LABEL_225: + drawsbarflag = 1; + LABEL_226: + v60 = p; + CalcPlrInv(p, 1u); + if (v60 == myplr) { + if (cursor_ida == 1) + SetCursorPos(MouseX + (cursW >> 1), MouseY + (cursH >> 1)); + SetCursor(cursor_ida); + } + return; + default: + goto LABEL_226; + } + } + v62 = (v68 - 25) % 10; + v14 = 10 * (v13 - ((v67 - 1) >> 1)); + if (v14 < 0) + v14 = 0; + v65 = 0; + if (v67 <= 0) + goto LABEL_93; + v15 = &plr[v3].InvGrid[v14]; + while (1) { + if (cursor_id == CURSOR_NONE) + return; + if (v14 >= 40) + cursor_id = 0; + v16 = v62 - ((v64 - 1) >> 1); + if (v16 < 0) + v16 = 0; + v17 = 0; + if (v64 > 0) + break; + LABEL_79: + v14 += 10; + v15 += 10; + if (++v65 >= v67) { + v12 = cursor_id; + v10 = v68; + goto LABEL_81; + } + } + while (1) { + if (cursor_id == CURSOR_NONE) + goto LABEL_79; + if (v16 >= 10) + goto LABEL_233; + _LOBYTE(v18) = v15[v16]; + if ((_BYTE)v18) { + v18 = (char)v18; + if ((v18 & 0x80u) != 0) + v18 = -v18; + if (!v66) { + v66 = v18; + goto LABEL_78; + } + if (v66 != v18) + LABEL_233: + cursor_id = 0; + } + LABEL_78: + ++v16; + if (++v17 >= v64) + goto LABEL_79; + } + } + if (v64 == 1 && v67 == 1) { + v12 = 1; + if (!AllItemsList[plr[v3].HoldItem.IDidx].iUsable) + v12 = 0; + if (!plr[v3].HoldItem._iStatFlag) + v12 = 0; + if (plr[v3].HoldItem._itype == ITYPE_GOLD) { + v12 = 0; + goto LABEL_50; + } + } LABEL_81: - if ( !v12 ) - return; - if ( v69 == ILOC_UNEQUIPABLE || v69 == ILOC_BELT || plr[v3].HoldItem._iStatFlag ) { - goto LABEL_93; - } - if ( plr[v3]._pClass == PC_WARRIOR ) { - PlaySFX(PS_WARR13); - } else if ( plr[v3]._pClass == PC_ROGUE ) { - PlaySFX(PS_ROGUE13); - } else if ( plr[v3]._pClass == PC_SORCERER ) { - PlaySFX(PS_MAGE13); - } + if (!v12) + return; + if (v69 == ILOC_UNEQUIPABLE || v69 == ILOC_BELT || plr[v3].HoldItem._iStatFlag) { + goto LABEL_93; + } + if (plr[v3]._pClass == PC_WARRIOR) { + PlaySFX(PS_WARR13); + } else if (plr[v3]._pClass == PC_ROGUE) { + PlaySFX(PS_ROGUE13); + } else if (plr[v3]._pClass == PC_SORCERER) { + PlaySFX(PS_MAGE13); + } } // 4B8C9C: using guessed type int cursH; // 4B8CB4: using guessed type int icursH; @@ -1564,1472 +1373,1271 @@ LABEL_81: void __fastcall CheckInvSwap(int pnum, BYTE bLoc, int idx, WORD wCI, int seed, BOOL bId) { - RecreateItem(MAXITEMS, idx, wCI, seed, 0); - - PlayerStruct *p = &plr[pnum]; - p->HoldItem = item[MAXITEMS]; - - if ( bId ) - { - p->HoldItem._iIdentified = TRUE; - } - - if ( bLoc < NUM_INVLOC ) - { - p->InvBody[bLoc] = p->HoldItem; - - if ( bLoc == INVLOC_HAND_LEFT && p->HoldItem._iLoc == ILOC_TWOHAND ) - { - p->InvBody[INVLOC_HAND_RIGHT]._itype = ITYPE_NONE; - } - else if ( bLoc == INVLOC_HAND_RIGHT && p->HoldItem._iLoc == ILOC_TWOHAND ) - { - p->InvBody[INVLOC_HAND_LEFT]._itype = ITYPE_NONE; - } - } - - CalcPlrInv(pnum, TRUE); + RecreateItem(MAXITEMS, idx, wCI, seed, 0); + + PlayerStruct *p = &plr[pnum]; + p->HoldItem = item[MAXITEMS]; + + if (bId) { + p->HoldItem._iIdentified = TRUE; + } + + if (bLoc < NUM_INVLOC) { + p->InvBody[bLoc] = p->HoldItem; + + if (bLoc == INVLOC_HAND_LEFT && p->HoldItem._iLoc == ILOC_TWOHAND) { + p->InvBody[INVLOC_HAND_RIGHT]._itype = ITYPE_NONE; + } else if (bLoc == INVLOC_HAND_RIGHT && p->HoldItem._iLoc == ILOC_TWOHAND) { + p->InvBody[INVLOC_HAND_LEFT]._itype = ITYPE_NONE; + } + } + + CalcPlrInv(pnum, TRUE); } void __fastcall CheckInvCut(int pnum, int mx, int my) { - if ( plr[pnum]._pmode > PM_WALK3 ) - { - return; - } - - if ( dropGoldFlag ) - { - dropGoldFlag = 0; - dropGoldValue = 0; - } - - int r; - BOOL done = FALSE; - - // TODO: this loop is compiled differently (via InvRect pointers) - for ( r = 0; (DWORD)r < NUM_XY_SLOTS && !done; r++ ) - { - // check which inventory rectangle the mouse is in, if any - if ( mx >= InvRect[r].X - && mx < InvRect[r].X + (INV_SLOT_SIZE_PX + 1) - && my >= InvRect[r].Y - (INV_SLOT_SIZE_PX + 1) - && my < InvRect[r].Y ) - { - done = TRUE; - r--; - } - } - - if ( !done ) - { - // not on an inventory slot rectangle - return; - } - - plr[pnum].HoldItem._itype = ITYPE_NONE; - - if ( - r >= SLOTXY_HEAD_FIRST - && r <= SLOTXY_HEAD_LAST - && plr[pnum].InvBody[INVLOC_HEAD]._itype != ITYPE_NONE ) - { - NetSendCmdDelItem(FALSE, INVLOC_HEAD); - plr[pnum].HoldItem = plr[pnum].InvBody[INVLOC_HEAD]; - plr[pnum].InvBody[INVLOC_HEAD]._itype = ITYPE_NONE; - } - - if ( - r == SLOTXY_RING_LEFT - && plr[pnum].InvBody[INVLOC_RING_LEFT]._itype != ITYPE_NONE ) - { - NetSendCmdDelItem(FALSE, INVLOC_RING_LEFT); - plr[pnum].HoldItem = plr[pnum].InvBody[INVLOC_RING_LEFT]; - plr[pnum].InvBody[INVLOC_RING_LEFT]._itype = ITYPE_NONE; - } - - if ( - r == SLOTXY_RING_RIGHT - && plr[pnum].InvBody[INVLOC_RING_RIGHT]._itype != ITYPE_NONE ) - { - NetSendCmdDelItem(FALSE, INVLOC_RING_RIGHT); - plr[pnum].HoldItem = plr[pnum].InvBody[INVLOC_RING_RIGHT]; - plr[pnum].InvBody[INVLOC_RING_RIGHT]._itype = ITYPE_NONE; - } - - if ( - r == SLOTXY_AMULET - && plr[pnum].InvBody[INVLOC_AMULET]._itype != ITYPE_NONE ) - { - NetSendCmdDelItem(FALSE, INVLOC_AMULET); - plr[pnum].HoldItem = plr[pnum].InvBody[INVLOC_AMULET]; - plr[pnum].InvBody[INVLOC_AMULET]._itype = ITYPE_NONE; - } - - if ( - r >= SLOTXY_HAND_LEFT_FIRST - && r <= SLOTXY_HAND_LEFT_LAST - && plr[pnum].InvBody[INVLOC_HAND_LEFT]._itype != ITYPE_NONE ) - { - NetSendCmdDelItem(FALSE, INVLOC_HAND_LEFT); - plr[pnum].HoldItem = plr[pnum].InvBody[INVLOC_HAND_LEFT]; - plr[pnum].InvBody[INVLOC_HAND_LEFT]._itype = ITYPE_NONE; - } - - if ( - r >= SLOTXY_HAND_RIGHT_FIRST - && r <= SLOTXY_HAND_RIGHT_LAST - && plr[pnum].InvBody[INVLOC_HAND_RIGHT]._itype != ITYPE_NONE ) - { - NetSendCmdDelItem(FALSE, INVLOC_HAND_RIGHT); - plr[pnum].HoldItem = plr[pnum].InvBody[INVLOC_HAND_RIGHT]; - plr[pnum].InvBody[INVLOC_HAND_RIGHT]._itype = ITYPE_NONE; - } - - if ( - r >= SLOTXY_CHEST_FIRST - && r <= SLOTXY_CHEST_LAST - && plr[pnum].InvBody[INVLOC_CHEST]._itype != ITYPE_NONE ) - { - NetSendCmdDelItem(FALSE, INVLOC_CHEST); - plr[pnum].HoldItem = plr[pnum].InvBody[INVLOC_CHEST]; - plr[pnum].InvBody[INVLOC_CHEST]._itype = ITYPE_NONE; - } - - if ( r >= SLOTXY_INV_FIRST && r <= SLOTXY_INV_LAST ) - { - char ii = plr[pnum].InvGrid[r - SLOTXY_INV_FIRST]; - if ( ii ) - { - int iv = ii; - if ( ii <= 0 ) - { - iv = -ii; - } - - for ( int i = 0; i < NUM_INV_GRID_ELEM; i++ ) - { - if ( plr[pnum].InvGrid[i] == iv || plr[pnum].InvGrid[i] == -iv ) - { - plr[pnum].InvGrid[i] = 0; - } - } - - iv--; - - plr[pnum].HoldItem = plr[pnum].InvList[iv]; - plr[pnum]._pNumInv--; - - if ( plr[pnum]._pNumInv > 0 && plr[pnum]._pNumInv != iv ) - { - plr[pnum].InvList[iv] = plr[pnum].InvList[plr[pnum]._pNumInv]; - - for ( int j = 0; j < NUM_INV_GRID_ELEM; j++ ) - { - if ( plr[pnum].InvGrid[j] == plr[pnum]._pNumInv + 1 ) - { - plr[pnum].InvGrid[j] = iv + 1; - } - if ( plr[pnum].InvGrid[j] == -(plr[pnum]._pNumInv + 1) ) - { - plr[pnum].InvGrid[j] = -iv - 1; - } - } - } - } - } - - if ( r >= SLOTXY_BELT_FIRST ) - { - int offs = r - SLOTXY_BELT_FIRST; - if ( plr[pnum].SpdList[offs]._itype != ITYPE_NONE ) - { - plr[pnum].HoldItem = plr[pnum].SpdList[offs]; - plr[pnum].SpdList[offs]._itype = ITYPE_NONE; - drawsbarflag = 1; - } - } - - - if ( plr[pnum].HoldItem._itype != ITYPE_NONE ) - { - if ( plr[pnum].HoldItem._itype == ITYPE_GOLD ) - { - plr[pnum]._pGold = CalculateGold(pnum); - } - - CalcPlrInv(pnum, TRUE); - CheckItemStats(pnum); - - if ( pnum == myplr ) - { - PlaySFX(IS_IGRAB); - SetCursor(plr[pnum].HoldItem._iCurs + CURSOR_FIRSTITEM); - SetCursorPos(mx - (cursW >> 1), MouseY - (cursH >> 1)); - } - } + if (plr[pnum]._pmode > PM_WALK3) { + return; + } + + if (dropGoldFlag) { + dropGoldFlag = 0; + dropGoldValue = 0; + } + + int r; + BOOL done = FALSE; + + // TODO: this loop is compiled differently (via InvRect pointers) + for (r = 0; (DWORD)r < NUM_XY_SLOTS && !done; r++) { + // check which inventory rectangle the mouse is in, if any + if (mx >= InvRect[r].X + && mx < InvRect[r].X + (INV_SLOT_SIZE_PX + 1) + && my >= InvRect[r].Y - (INV_SLOT_SIZE_PX + 1) + && my < InvRect[r].Y) { + done = TRUE; + r--; + } + } + + if (!done) { + // not on an inventory slot rectangle + return; + } + + plr[pnum].HoldItem._itype = ITYPE_NONE; + + if ( + r >= SLOTXY_HEAD_FIRST + && r <= SLOTXY_HEAD_LAST + && plr[pnum].InvBody[INVLOC_HEAD]._itype != ITYPE_NONE) { + NetSendCmdDelItem(FALSE, INVLOC_HEAD); + plr[pnum].HoldItem = plr[pnum].InvBody[INVLOC_HEAD]; + plr[pnum].InvBody[INVLOC_HEAD]._itype = ITYPE_NONE; + } + + if ( + r == SLOTXY_RING_LEFT + && plr[pnum].InvBody[INVLOC_RING_LEFT]._itype != ITYPE_NONE) { + NetSendCmdDelItem(FALSE, INVLOC_RING_LEFT); + plr[pnum].HoldItem = plr[pnum].InvBody[INVLOC_RING_LEFT]; + plr[pnum].InvBody[INVLOC_RING_LEFT]._itype = ITYPE_NONE; + } + + if ( + r == SLOTXY_RING_RIGHT + && plr[pnum].InvBody[INVLOC_RING_RIGHT]._itype != ITYPE_NONE) { + NetSendCmdDelItem(FALSE, INVLOC_RING_RIGHT); + plr[pnum].HoldItem = plr[pnum].InvBody[INVLOC_RING_RIGHT]; + plr[pnum].InvBody[INVLOC_RING_RIGHT]._itype = ITYPE_NONE; + } + + if ( + r == SLOTXY_AMULET + && plr[pnum].InvBody[INVLOC_AMULET]._itype != ITYPE_NONE) { + NetSendCmdDelItem(FALSE, INVLOC_AMULET); + plr[pnum].HoldItem = plr[pnum].InvBody[INVLOC_AMULET]; + plr[pnum].InvBody[INVLOC_AMULET]._itype = ITYPE_NONE; + } + + if ( + r >= SLOTXY_HAND_LEFT_FIRST + && r <= SLOTXY_HAND_LEFT_LAST + && plr[pnum].InvBody[INVLOC_HAND_LEFT]._itype != ITYPE_NONE) { + NetSendCmdDelItem(FALSE, INVLOC_HAND_LEFT); + plr[pnum].HoldItem = plr[pnum].InvBody[INVLOC_HAND_LEFT]; + plr[pnum].InvBody[INVLOC_HAND_LEFT]._itype = ITYPE_NONE; + } + + if ( + r >= SLOTXY_HAND_RIGHT_FIRST + && r <= SLOTXY_HAND_RIGHT_LAST + && plr[pnum].InvBody[INVLOC_HAND_RIGHT]._itype != ITYPE_NONE) { + NetSendCmdDelItem(FALSE, INVLOC_HAND_RIGHT); + plr[pnum].HoldItem = plr[pnum].InvBody[INVLOC_HAND_RIGHT]; + plr[pnum].InvBody[INVLOC_HAND_RIGHT]._itype = ITYPE_NONE; + } + + if ( + r >= SLOTXY_CHEST_FIRST + && r <= SLOTXY_CHEST_LAST + && plr[pnum].InvBody[INVLOC_CHEST]._itype != ITYPE_NONE) { + NetSendCmdDelItem(FALSE, INVLOC_CHEST); + plr[pnum].HoldItem = plr[pnum].InvBody[INVLOC_CHEST]; + plr[pnum].InvBody[INVLOC_CHEST]._itype = ITYPE_NONE; + } + + if (r >= SLOTXY_INV_FIRST && r <= SLOTXY_INV_LAST) { + char ii = plr[pnum].InvGrid[r - SLOTXY_INV_FIRST]; + if (ii) { + int iv = ii; + if (ii <= 0) { + iv = -ii; + } + + for (int i = 0; i < NUM_INV_GRID_ELEM; i++) { + if (plr[pnum].InvGrid[i] == iv || plr[pnum].InvGrid[i] == -iv) { + plr[pnum].InvGrid[i] = 0; + } + } + + iv--; + + plr[pnum].HoldItem = plr[pnum].InvList[iv]; + plr[pnum]._pNumInv--; + + if (plr[pnum]._pNumInv > 0 && plr[pnum]._pNumInv != iv) { + plr[pnum].InvList[iv] = plr[pnum].InvList[plr[pnum]._pNumInv]; + + for (int j = 0; j < NUM_INV_GRID_ELEM; j++) { + if (plr[pnum].InvGrid[j] == plr[pnum]._pNumInv + 1) { + plr[pnum].InvGrid[j] = iv + 1; + } + if (plr[pnum].InvGrid[j] == -(plr[pnum]._pNumInv + 1)) { + plr[pnum].InvGrid[j] = -iv - 1; + } + } + } + } + } + + if (r >= SLOTXY_BELT_FIRST) { + int offs = r - SLOTXY_BELT_FIRST; + if (plr[pnum].SpdList[offs]._itype != ITYPE_NONE) { + plr[pnum].HoldItem = plr[pnum].SpdList[offs]; + plr[pnum].SpdList[offs]._itype = ITYPE_NONE; + drawsbarflag = 1; + } + } + + if (plr[pnum].HoldItem._itype != ITYPE_NONE) { + if (plr[pnum].HoldItem._itype == ITYPE_GOLD) { + plr[pnum]._pGold = CalculateGold(pnum); + } + + CalcPlrInv(pnum, TRUE); + CheckItemStats(pnum); + + if (pnum == myplr) { + PlaySFX(IS_IGRAB); + SetCursor(plr[pnum].HoldItem._iCurs + CURSOR_FIRSTITEM); + SetCursorPos(mx - (cursW >> 1), MouseY - (cursH >> 1)); + } + } } void __fastcall inv_update_rem_item(int pnum, BYTE iv) { - if ( iv < NUM_INVLOC ) - { - plr[pnum].InvBody[iv]._itype = ITYPE_NONE; - } + if (iv < NUM_INVLOC) { + plr[pnum].InvBody[iv]._itype = ITYPE_NONE; + } - BOOL Loadgfx = FALSE; + BOOL Loadgfx = FALSE; - if ( plr[pnum]._pmode != PM_DEATH ) - { - Loadgfx = TRUE; - } + if (plr[pnum]._pmode != PM_DEATH) { + Loadgfx = TRUE; + } - CalcPlrInv(pnum, Loadgfx); + CalcPlrInv(pnum, Loadgfx); } void __fastcall RemoveInvItem(int pnum, int iv) { - iv++; - - for ( int i = 0; i < NUM_INV_GRID_ELEM; i++ ) - { - if ( plr[pnum].InvGrid[i] == iv || plr[pnum].InvGrid[i] == -iv ) - { - plr[pnum].InvGrid[i] = 0; - } - } - - iv--; - plr[pnum]._pNumInv--; - - if ( plr[pnum]._pNumInv > 0 && plr[pnum]._pNumInv != iv ) - { - plr[pnum].InvList[iv] = plr[pnum].InvList[plr[pnum]._pNumInv]; - - for ( int j = 0; j < NUM_INV_GRID_ELEM; j++ ) - { - if ( plr[pnum].InvGrid[j] == plr[pnum]._pNumInv + 1 ) - { - plr[pnum].InvGrid[j] = iv + 1; - } - if ( plr[pnum].InvGrid[j] == -(plr[pnum]._pNumInv + 1) ) - { - plr[pnum].InvGrid[j] = -(iv + 1); - } - } - } - - CalcPlrScrolls(pnum); - - if ( plr[pnum]._pRSplType == RSPLTYPE_SCROLL ) - { - if ( plr[pnum]._pRSpell != SPL_INVALID ) - { - // BUGFIX: Cast the literal `1` to `unsigned __int64` to make that bitshift 64bit - // this causes the last 4 skills to not reset correctly after use - if ( !( - plr[pnum]._pScrlSpells - & (1 << (plr[pnum]._pRSpell - 1))) ) - { - plr[pnum]._pRSpell = SPL_INVALID; - } - - drawpanflag = 255; - } - } + iv++; + + for (int i = 0; i < NUM_INV_GRID_ELEM; i++) { + if (plr[pnum].InvGrid[i] == iv || plr[pnum].InvGrid[i] == -iv) { + plr[pnum].InvGrid[i] = 0; + } + } + + iv--; + plr[pnum]._pNumInv--; + + if (plr[pnum]._pNumInv > 0 && plr[pnum]._pNumInv != iv) { + plr[pnum].InvList[iv] = plr[pnum].InvList[plr[pnum]._pNumInv]; + + for (int j = 0; j < NUM_INV_GRID_ELEM; j++) { + if (plr[pnum].InvGrid[j] == plr[pnum]._pNumInv + 1) { + plr[pnum].InvGrid[j] = iv + 1; + } + if (plr[pnum].InvGrid[j] == -(plr[pnum]._pNumInv + 1)) { + plr[pnum].InvGrid[j] = -(iv + 1); + } + } + } + + CalcPlrScrolls(pnum); + + if (plr[pnum]._pRSplType == RSPLTYPE_SCROLL) { + if (plr[pnum]._pRSpell != SPL_INVALID) { + // BUGFIX: Cast the literal `1` to `unsigned __int64` to make that bitshift 64bit + // this causes the last 4 skills to not reset correctly after use + if (!( + plr[pnum]._pScrlSpells + & (1 << (plr[pnum]._pRSpell - 1)))) { + plr[pnum]._pRSpell = SPL_INVALID; + } + + drawpanflag = 255; + } + } } void __fastcall RemoveSpdBarItem(int pnum, int iv) { - plr[pnum].SpdList[iv]._itype = ITYPE_NONE; - - CalcPlrScrolls(pnum); - - if ( plr[pnum]._pRSplType == RSPLTYPE_SCROLL ) - { - if ( plr[pnum]._pRSpell != SPL_INVALID ) - { - // BUGFIX: Cast the literal `1` to `unsigned __int64` to make that bitshift 64bit - // this causes the last 4 skills to not reset correctly after use - if ( !( - plr[pnum]._pScrlSpells - & (1 << (plr[pnum]._pRSpell - 1))) ) - { - plr[pnum]._pRSpell = SPL_INVALID; - } - - } - } - drawpanflag = 255; + plr[pnum].SpdList[iv]._itype = ITYPE_NONE; + + CalcPlrScrolls(pnum); + + if (plr[pnum]._pRSplType == RSPLTYPE_SCROLL) { + if (plr[pnum]._pRSpell != SPL_INVALID) { + // BUGFIX: Cast the literal `1` to `unsigned __int64` to make that bitshift 64bit + // this causes the last 4 skills to not reset correctly after use + if (!( + plr[pnum]._pScrlSpells + & (1 << (plr[pnum]._pRSpell - 1)))) { + plr[pnum]._pRSpell = SPL_INVALID; + } + } + } + drawpanflag = 255; } void __cdecl CheckInvItem() { - if ( pcurs >= CURSOR_FIRSTITEM ) - { - CheckInvPaste(myplr, MouseX, MouseY); - } - else - { - CheckInvCut(myplr, MouseX, MouseY); - } + if (pcurs >= CURSOR_FIRSTITEM) { + CheckInvPaste(myplr, MouseX, MouseY); + } else { + CheckInvCut(myplr, MouseX, MouseY); + } } void __cdecl CheckInvScrn() { - if ( MouseX > 190 && MouseX < 437 - && MouseY > 352 && MouseY < 385 ) - { - CheckInvItem(); - } + if (MouseX > 190 && MouseX < 437 + && MouseY > 352 && MouseY < 385) { + CheckInvItem(); + } } void __fastcall CheckItemStats(int pnum) { - PlayerStruct *p = &plr[pnum]; + PlayerStruct *p = &plr[pnum]; - p->HoldItem._iStatFlag = FALSE; + p->HoldItem._iStatFlag = FALSE; - if ( p->_pStrength >= p->HoldItem._iMinStr - && p->_pMagic >= p->HoldItem._iMinMag - && p->_pDexterity >= p->HoldItem._iMinDex ) - { - p->HoldItem._iStatFlag = TRUE; - } + if (p->_pStrength >= p->HoldItem._iMinStr + && p->_pMagic >= p->HoldItem._iMinMag + && p->_pDexterity >= p->HoldItem._iMinDex) { + p->HoldItem._iStatFlag = TRUE; + } } void __fastcall CheckBookLevel(int pnum) { - int v1; // ecx - int v2; // eax - unsigned char v3; // bl - int v4; // edi - - v1 = pnum; - if ( plr[v1].HoldItem._iMiscId == IMISC_BOOK ) - { - v2 = plr[v1].HoldItem._iSpell; - v3 = spelldata[plr[v1].HoldItem._iSpell].sMinInt; - plr[v1].HoldItem._iMinMag = v3; - v4 = plr[0]._pSplLvl[v2 + v1 * 21720]; - if ( plr[0]._pSplLvl[v2 + v1 * 21720] ) - { - do - { - v3 += 20 * v3 / 100; - --v4; - if ( v3 + 20 * v3 / 100 > 255 ) - { - v3 = -1; - v4 = 0; - } - } - while ( v4 ); - plr[v1].HoldItem._iMinMag = v3; - } - } + int v1; // ecx + int v2; // eax + unsigned char v3; // bl + int v4; // edi + + v1 = pnum; + if (plr[v1].HoldItem._iMiscId == IMISC_BOOK) { + v2 = plr[v1].HoldItem._iSpell; + v3 = spelldata[plr[v1].HoldItem._iSpell].sMinInt; + plr[v1].HoldItem._iMinMag = v3; + v4 = plr[0]._pSplLvl[v2 + v1 * 21720]; + if (plr[0]._pSplLvl[v2 + v1 * 21720]) { + do { + v3 += 20 * v3 / 100; + --v4; + if (v3 + 20 * v3 / 100 > 255) { + v3 = -1; + v4 = 0; + } + } while (v4); + plr[v1].HoldItem._iMinMag = v3; + } + } } void __fastcall CheckQuestItem(int pnum) { - int v1; // ecx - int v2; // esi - - v1 = pnum; - v2 = plr[v1].HoldItem.IDidx; - if ( v2 == IDI_OPTAMULET ) - quests[QTYPE_BLIND]._qactive = 3; - if ( v2 == IDI_MUSHROOM && quests[QTYPE_BLKM]._qactive == 2 && quests[QTYPE_BLKM]._qvar1 == QS_MUSHSPAWNED ) - { - sfxdelay = IDI_OPTAMULET; - if ( plr[v1]._pClass == PC_WARRIOR ) { - sfxdnum = PS_WARR95; - } else if ( plr[v1]._pClass == PC_ROGUE ) { - sfxdnum = PS_ROGUE95; - } else if ( plr[v1]._pClass == PC_SORCERER ) { - sfxdnum = PS_MAGE95; - } - quests[QTYPE_BLKM]._qvar1 = QS_MUSHPICKED; - } - if ( v2 == IDI_ANVIL ) - { - if ( quests[QTYPE_ANVIL]._qactive == 1 ) - { - quests[QTYPE_ANVIL]._qactive = 2; - quests[QTYPE_ANVIL]._qvar1 = 1; - } - if ( quests[QTYPE_ANVIL]._qlog == 1 ) { - sfxdelay = IDI_OPTAMULET; - if ( plr[v1]._pClass == PC_WARRIOR ) { - sfxdnum = PS_WARR89; - } else if ( plr[v1]._pClass == PC_ROGUE ) { - sfxdnum = PS_ROGUE89; - } else if ( plr[v1]._pClass == PC_SORCERER ) { - sfxdnum = PS_MAGE89; - } - } - } - if ( v2 == IDI_GLDNELIX ) - { - sfxdelay = 30; - if ( plr[v1]._pClass == PC_WARRIOR ) { - sfxdnum = PS_WARR88; - } else if ( plr[v1]._pClass == PC_ROGUE ) { - sfxdnum = PS_ROGUE88; - } else if ( plr[v1]._pClass == PC_SORCERER ) { - sfxdnum = PS_MAGE88; - } - } - if ( v2 == IDI_ROCK ) - { - if ( quests[QTYPE_INFRA]._qactive == 1 ) - { - quests[QTYPE_INFRA]._qactive = 2; - quests[QTYPE_INFRA]._qvar1 = 1; - } - if ( quests[QTYPE_INFRA]._qlog == 1 ) { - sfxdelay = IDI_OPTAMULET; - if ( plr[v1]._pClass == PC_WARRIOR ) { - sfxdnum = PS_WARR87; - } else if ( plr[v1]._pClass == PC_ROGUE ) { - sfxdnum = PS_ROGUE87; - } else if ( plr[v1]._pClass == PC_SORCERER ) { - sfxdnum = PS_MAGE87; - } - } - } - if ( v2 == IDI_ARMOFVAL ) - { - quests[QTYPE_BLOOD]._qactive = 3; - sfxdelay = 20; - if ( plr[v1]._pClass == PC_WARRIOR ) { - sfxdnum = PS_WARR91; - } else if ( plr[v1]._pClass == PC_ROGUE ) { - sfxdnum = PS_ROGUE91; - } else if ( plr[v1]._pClass == PC_SORCERER ) { - sfxdnum = PS_MAGE91; - } - } + int v1; // ecx + int v2; // esi + + v1 = pnum; + v2 = plr[v1].HoldItem.IDidx; + if (v2 == IDI_OPTAMULET) + quests[QTYPE_BLIND]._qactive = 3; + if (v2 == IDI_MUSHROOM && quests[QTYPE_BLKM]._qactive == 2 && quests[QTYPE_BLKM]._qvar1 == QS_MUSHSPAWNED) { + sfxdelay = IDI_OPTAMULET; + if (plr[v1]._pClass == PC_WARRIOR) { + sfxdnum = PS_WARR95; + } else if (plr[v1]._pClass == PC_ROGUE) { + sfxdnum = PS_ROGUE95; + } else if (plr[v1]._pClass == PC_SORCERER) { + sfxdnum = PS_MAGE95; + } + quests[QTYPE_BLKM]._qvar1 = QS_MUSHPICKED; + } + if (v2 == IDI_ANVIL) { + if (quests[QTYPE_ANVIL]._qactive == 1) { + quests[QTYPE_ANVIL]._qactive = 2; + quests[QTYPE_ANVIL]._qvar1 = 1; + } + if (quests[QTYPE_ANVIL]._qlog == 1) { + sfxdelay = IDI_OPTAMULET; + if (plr[v1]._pClass == PC_WARRIOR) { + sfxdnum = PS_WARR89; + } else if (plr[v1]._pClass == PC_ROGUE) { + sfxdnum = PS_ROGUE89; + } else if (plr[v1]._pClass == PC_SORCERER) { + sfxdnum = PS_MAGE89; + } + } + } + if (v2 == IDI_GLDNELIX) { + sfxdelay = 30; + if (plr[v1]._pClass == PC_WARRIOR) { + sfxdnum = PS_WARR88; + } else if (plr[v1]._pClass == PC_ROGUE) { + sfxdnum = PS_ROGUE88; + } else if (plr[v1]._pClass == PC_SORCERER) { + sfxdnum = PS_MAGE88; + } + } + if (v2 == IDI_ROCK) { + if (quests[QTYPE_INFRA]._qactive == 1) { + quests[QTYPE_INFRA]._qactive = 2; + quests[QTYPE_INFRA]._qvar1 = 1; + } + if (quests[QTYPE_INFRA]._qlog == 1) { + sfxdelay = IDI_OPTAMULET; + if (plr[v1]._pClass == PC_WARRIOR) { + sfxdnum = PS_WARR87; + } else if (plr[v1]._pClass == PC_ROGUE) { + sfxdnum = PS_ROGUE87; + } else if (plr[v1]._pClass == PC_SORCERER) { + sfxdnum = PS_MAGE87; + } + } + } + if (v2 == IDI_ARMOFVAL) { + quests[QTYPE_BLOOD]._qactive = 3; + sfxdelay = 20; + if (plr[v1]._pClass == PC_WARRIOR) { + sfxdnum = PS_WARR91; + } else if (plr[v1]._pClass == PC_ROGUE) { + sfxdnum = PS_ROGUE91; + } else if (plr[v1]._pClass == PC_SORCERER) { + sfxdnum = PS_MAGE91; + } + } } // 52A554: using guessed type int sfxdelay; void __fastcall InvGetItem(int pnum, int ii) { - int v2; // ebp - int v3; // edx - int v4; // ecx - int v5; // ecx - int pnuma; // [esp+4h] [ebp-8h] - int v7; // [esp+8h] [ebp-4h] - - v7 = ii; - pnuma = pnum; - if ( dropGoldFlag ) - { - dropGoldFlag = 0; - dropGoldValue = 0; - } - v2 = ii; - if ( dItem[item[ii]._ix][item[ii]._iy] ) - { - if ( myplr == pnum && pcurs >= CURSOR_FIRSTITEM ) - NetSendCmdPItem(TRUE, CMD_SYNCPUTITEM, plr[myplr].WorldX, plr[myplr].WorldY); - _HIBYTE(item[v2]._iCreateInfo) &= 0x7Fu; - qmemcpy(&plr[pnuma].HoldItem, &item[v2], sizeof(plr[pnuma].HoldItem)); - CheckQuestItem(pnuma); - CheckBookLevel(pnuma); - CheckItemStats(pnuma); - v3 = 0; - dItem[item[v2]._ix][item[v2]._iy] = 0; - while ( v3 < numitems ) - { - v4 = itemactive[v3]; - if ( v4 == v7 ) - { - DeleteItem(v4, v3); - v3 = 0; - } - else - { - ++v3; - } - } - v5 = plr[pnuma].HoldItem._iCurs; - pcursitem = -1; - SetCursor(v5 + 12); - } + int v2; // ebp + int v3; // edx + int v4; // ecx + int v5; // ecx + int pnuma; // [esp+4h] [ebp-8h] + int v7; // [esp+8h] [ebp-4h] + + v7 = ii; + pnuma = pnum; + if (dropGoldFlag) { + dropGoldFlag = 0; + dropGoldValue = 0; + } + v2 = ii; + if (dItem[item[ii]._ix][item[ii]._iy]) { + if (myplr == pnum && pcurs >= CURSOR_FIRSTITEM) + NetSendCmdPItem(TRUE, CMD_SYNCPUTITEM, plr[myplr].WorldX, plr[myplr].WorldY); + _HIBYTE(item[v2]._iCreateInfo) &= 0x7Fu; + qmemcpy(&plr[pnuma].HoldItem, &item[v2], sizeof(plr[pnuma].HoldItem)); + CheckQuestItem(pnuma); + CheckBookLevel(pnuma); + CheckItemStats(pnuma); + v3 = 0; + dItem[item[v2]._ix][item[v2]._iy] = 0; + while (v3 < numitems) { + v4 = itemactive[v3]; + if (v4 == v7) { + DeleteItem(v4, v3); + v3 = 0; + } else { + ++v3; + } + } + v5 = plr[pnuma].HoldItem._iCurs; + pcursitem = -1; + SetCursor(v5 + 12); + } } // 4B84DC: using guessed type int dropGoldFlag; // 4B8CC0: using guessed type char pcursitem; void __fastcall AutoGetItem(int pnum, int ii) { - int v2; // ebx - int v3; // ebp - int v4; // eax - int v5; // ecx - int v6; // edi - int v7; // edi - int v8; // edi - int v9; // edi - int v10; // edx - int v11; // ecx - int v13; // ecx - int iia; // [esp+10h] [ebp-18h] - signed int iib; // [esp+10h] [ebp-18h] - signed int iic; // [esp+10h] [ebp-18h] - signed int iid; // [esp+10h] [ebp-18h] - signed int iie; // [esp+10h] [ebp-18h] - signed int iif; // [esp+10h] [ebp-18h] - signed int iig; // [esp+10h] [ebp-18h] - signed int iih; // [esp+10h] [ebp-18h] - signed int iii; // [esp+10h] [ebp-18h] - signed int iij; // [esp+10h] [ebp-18h] - ItemStruct *v24; // [esp+14h] [ebp-14h] - int *v25; // [esp+14h] [ebp-14h] - int v26; // [esp+18h] [ebp-10h] - int i; // [esp+1Ch] [ebp-Ch] - int v28; // [esp+20h] [ebp-8h] - int v29; // [esp+24h] [ebp-4h] - - v2 = pnum; - i = ii; - if ( dropGoldFlag ) - { - dropGoldFlag = 0; - dropGoldValue = 0; - } - if ( ii == 127 || dItem[item[ii]._ix][item[ii]._iy] ) - { - v3 = pnum; - _HIBYTE(item[ii]._iCreateInfo) &= 0x7Fu; - v28 = ii; - qmemcpy(&plr[pnum].HoldItem, &item[ii], sizeof(plr[pnum].HoldItem)); - CheckQuestItem(pnum); - CheckBookLevel(v2); - CheckItemStats(v2); - SetICursor(plr[v2].HoldItem._iCurs + 12); - if ( plr[v2].HoldItem._itype == ITYPE_GOLD ) - { - v4 = GoldAutoPlace(v2); - } - else - { - v4 = 0; - if ( ((plr[v3]._pgfxnum & 0xF) == ANIM_ID_UNARMED || (plr[v3]._pgfxnum & 0xF) == ANIM_ID_UNARMED_SHIELD) && plr[v3]._pmode <= PM_WALK3 ) - { - if ( plr[v3].HoldItem._iStatFlag ) - { - if ( plr[v3].HoldItem._iClass == 1 ) - { - v4 = WeaponAutoPlace(v2); - if ( v4 ) - { - CalcPlrInv(v2, TRUE); - goto LABEL_71; - } - } - } - } - v5 = icursW28; - v29 = icursW28; - v26 = icursH28; - if ( icursW28 == 1 ) - { - if ( icursH28 == 1 ) - { - if ( plr[v3].HoldItem._iStatFlag && AllItemsList[plr[v3].HoldItem.IDidx].iUsable ) - { - iia = 0; - v24 = plr[v3].SpdList; - do - { - if ( v4 ) - break; - if ( v24->_itype == -1 ) - { - qmemcpy(v24, &plr[v3].HoldItem, sizeof(ItemStruct)); - CalcPlrScrolls(v2); - v4 = 1; - drawsbarflag = 1; - } - ++iia; - ++v24; - } - while ( iia < 8 ); - } - v6 = 30; - do - { - if ( v4 ) - break; - v4 = AutoPlace(v2, v6++, 1, 1, 1); - } - while ( v6 <= 39 ); - v7 = 20; - do - { - if ( v4 ) - break; - v4 = AutoPlace(v2, v7++, 1, 1, 1); - } - while ( v7 <= 29 ); - v8 = 10; - do - { - if ( v4 ) - break; - v4 = AutoPlace(v2, v8++, 1, 1, 1); - } - while ( v8 <= 19 ); - v9 = 0; - while ( !v4 ) - { - v4 = AutoPlace(v2, v9++, 1, 1, 1); - if ( v9 > 9 ) - goto LABEL_35; - } - goto LABEL_71; - } -LABEL_35: - if ( v26 == 2 ) - { - iib = 29; - do - { - if ( v4 ) - break; - v4 = AutoPlace(v2, iib--, 1, 2, 1); - } - while ( iib >= 20 ); - iic = 9; - do - { - if ( v4 ) - break; - v4 = AutoPlace(v2, iic--, 1, 2, 1); - } - while ( iic >= 0 ); - iid = 19; - while ( !v4 ) - { - v4 = AutoPlace(v2, iid--, 1, 2, 1); - if ( iid < 10 ) - goto LABEL_45; - } - goto LABEL_71; - } -LABEL_45: - if ( v26 == 3 ) - { - iie = 0; - while ( !v4 ) - { - v4 = AutoPlace(v2, iie++, 1, 3, 1); - if ( iie >= 20 ) - goto LABEL_49; - } - goto LABEL_71; - } - } - else - { -LABEL_49: - if ( v29 == 2 ) - { - if ( v26 == 2 ) - { - v25 = AP2x2Tbl; - do - { - if ( v4 ) - break; - v4 = AutoPlace(v2, *v25, 2, 2, 1); - ++v25; - } - while ( (signed int)v25 < (signed int)&AP2x2Tbl[10] ); - iif = 21; - do - { - if ( v4 ) - break; - v4 = AutoPlace(v2, iif, 2, 2, 1); - iif += 2; - } - while ( iif < 29 ); - iig = 1; - do - { - if ( v4 ) - break; - v4 = AutoPlace(v2, iig, 2, 2, 1); - iig += 2; - } - while ( iig < 9 ); - iih = 10; - while ( !v4 ) - { - v4 = AutoPlace(v2, iih++, 2, 2, 1); - if ( iih >= 19 ) - goto LABEL_63; - } - goto LABEL_71; - } -LABEL_63: - if ( v26 == 3 ) - { - iii = 0; - do - { - if ( v4 ) - break; - v4 = AutoPlace(v2, iii++, 2, 3, 1); - } - while ( iii < 9 ); - iij = 10; - while ( !v4 ) - { - v4 = AutoPlace(v2, iij++, 2, 3, 1); - if ( iij >= 19 ) - goto LABEL_70; - } - goto LABEL_71; - } - } - } - } -LABEL_70: - if ( v4 ) - { -LABEL_71: - v10 = 0; - dItem[item[v28]._ix][item[v28]._iy] = 0; - while ( v10 < numitems ) - { - v11 = itemactive[v10]; - if ( v11 == i ) - { - DeleteItem(v11, v10); - v10 = 0; - } - else - { - ++v10; - } - } - return; - } - if ( v2 == myplr ) - { - switch ( plr[v3]._pClass ) - { - case PC_WARRIOR: - v13 = random(0, 3) + PS_WARR14; - PlaySFX(v13); - break; - case PC_ROGUE: - v13 = random(0, 3) + PS_ROGUE14; - PlaySFX(v13); - break; - case PC_SORCERER: - v13 = random(0, 3) + PS_MAGE14; - PlaySFX(v13); - break; - } - } - qmemcpy(&plr[v3].HoldItem, &item[v28], sizeof(plr[v3].HoldItem)); - RespawnItem(i, 1); - NetSendCmdPItem(TRUE, CMD_RESPAWNITEM, item[v28]._ix, item[v28]._iy); - plr[v3].HoldItem._itype = ITYPE_NONE; - } + int v2; // ebx + int v3; // ebp + int v4; // eax + int v5; // ecx + int v6; // edi + int v7; // edi + int v8; // edi + int v9; // edi + int v10; // edx + int v11; // ecx + int v13; // ecx + int iia; // [esp+10h] [ebp-18h] + signed int iib; // [esp+10h] [ebp-18h] + signed int iic; // [esp+10h] [ebp-18h] + signed int iid; // [esp+10h] [ebp-18h] + signed int iie; // [esp+10h] [ebp-18h] + signed int iif; // [esp+10h] [ebp-18h] + signed int iig; // [esp+10h] [ebp-18h] + signed int iih; // [esp+10h] [ebp-18h] + signed int iii; // [esp+10h] [ebp-18h] + signed int iij; // [esp+10h] [ebp-18h] + ItemStruct *v24; // [esp+14h] [ebp-14h] + int *v25; // [esp+14h] [ebp-14h] + int v26; // [esp+18h] [ebp-10h] + int i; // [esp+1Ch] [ebp-Ch] + int v28; // [esp+20h] [ebp-8h] + int v29; // [esp+24h] [ebp-4h] + + v2 = pnum; + i = ii; + if (dropGoldFlag) { + dropGoldFlag = 0; + dropGoldValue = 0; + } + if (ii == 127 || dItem[item[ii]._ix][item[ii]._iy]) { + v3 = pnum; + _HIBYTE(item[ii]._iCreateInfo) &= 0x7Fu; + v28 = ii; + qmemcpy(&plr[pnum].HoldItem, &item[ii], sizeof(plr[pnum].HoldItem)); + CheckQuestItem(pnum); + CheckBookLevel(v2); + CheckItemStats(v2); + SetICursor(plr[v2].HoldItem._iCurs + 12); + if (plr[v2].HoldItem._itype == ITYPE_GOLD) { + v4 = GoldAutoPlace(v2); + } else { + v4 = 0; + if (((plr[v3]._pgfxnum & 0xF) == ANIM_ID_UNARMED || (plr[v3]._pgfxnum & 0xF) == ANIM_ID_UNARMED_SHIELD) && plr[v3]._pmode <= PM_WALK3) { + if (plr[v3].HoldItem._iStatFlag) { + if (plr[v3].HoldItem._iClass == 1) { + v4 = WeaponAutoPlace(v2); + if (v4) { + CalcPlrInv(v2, TRUE); + goto LABEL_71; + } + } + } + } + v5 = icursW28; + v29 = icursW28; + v26 = icursH28; + if (icursW28 == 1) { + if (icursH28 == 1) { + if (plr[v3].HoldItem._iStatFlag && AllItemsList[plr[v3].HoldItem.IDidx].iUsable) { + iia = 0; + v24 = plr[v3].SpdList; + do { + if (v4) + break; + if (v24->_itype == -1) { + qmemcpy(v24, &plr[v3].HoldItem, sizeof(ItemStruct)); + CalcPlrScrolls(v2); + v4 = 1; + drawsbarflag = 1; + } + ++iia; + ++v24; + } while (iia < 8); + } + v6 = 30; + do { + if (v4) + break; + v4 = AutoPlace(v2, v6++, 1, 1, 1); + } while (v6 <= 39); + v7 = 20; + do { + if (v4) + break; + v4 = AutoPlace(v2, v7++, 1, 1, 1); + } while (v7 <= 29); + v8 = 10; + do { + if (v4) + break; + v4 = AutoPlace(v2, v8++, 1, 1, 1); + } while (v8 <= 19); + v9 = 0; + while (!v4) { + v4 = AutoPlace(v2, v9++, 1, 1, 1); + if (v9 > 9) + goto LABEL_35; + } + goto LABEL_71; + } + LABEL_35: + if (v26 == 2) { + iib = 29; + do { + if (v4) + break; + v4 = AutoPlace(v2, iib--, 1, 2, 1); + } while (iib >= 20); + iic = 9; + do { + if (v4) + break; + v4 = AutoPlace(v2, iic--, 1, 2, 1); + } while (iic >= 0); + iid = 19; + while (!v4) { + v4 = AutoPlace(v2, iid--, 1, 2, 1); + if (iid < 10) + goto LABEL_45; + } + goto LABEL_71; + } + LABEL_45: + if (v26 == 3) { + iie = 0; + while (!v4) { + v4 = AutoPlace(v2, iie++, 1, 3, 1); + if (iie >= 20) + goto LABEL_49; + } + goto LABEL_71; + } + } else { + LABEL_49: + if (v29 == 2) { + if (v26 == 2) { + v25 = AP2x2Tbl; + do { + if (v4) + break; + v4 = AutoPlace(v2, *v25, 2, 2, 1); + ++v25; + } while ((signed int)v25 < (signed int)&AP2x2Tbl[10]); + iif = 21; + do { + if (v4) + break; + v4 = AutoPlace(v2, iif, 2, 2, 1); + iif += 2; + } while (iif < 29); + iig = 1; + do { + if (v4) + break; + v4 = AutoPlace(v2, iig, 2, 2, 1); + iig += 2; + } while (iig < 9); + iih = 10; + while (!v4) { + v4 = AutoPlace(v2, iih++, 2, 2, 1); + if (iih >= 19) + goto LABEL_63; + } + goto LABEL_71; + } + LABEL_63: + if (v26 == 3) { + iii = 0; + do { + if (v4) + break; + v4 = AutoPlace(v2, iii++, 2, 3, 1); + } while (iii < 9); + iij = 10; + while (!v4) { + v4 = AutoPlace(v2, iij++, 2, 3, 1); + if (iij >= 19) + goto LABEL_70; + } + goto LABEL_71; + } + } + } + } + LABEL_70: + if (v4) { + LABEL_71: + v10 = 0; + dItem[item[v28]._ix][item[v28]._iy] = 0; + while (v10 < numitems) { + v11 = itemactive[v10]; + if (v11 == i) { + DeleteItem(v11, v10); + v10 = 0; + } else { + ++v10; + } + } + return; + } + if (v2 == myplr) { + switch (plr[v3]._pClass) { + case PC_WARRIOR: + v13 = random(0, 3) + PS_WARR14; + PlaySFX(v13); + break; + case PC_ROGUE: + v13 = random(0, 3) + PS_ROGUE14; + PlaySFX(v13); + break; + case PC_SORCERER: + v13 = random(0, 3) + PS_MAGE14; + PlaySFX(v13); + break; + } + } + qmemcpy(&plr[v3].HoldItem, &item[v28], sizeof(plr[v3].HoldItem)); + RespawnItem(i, 1); + NetSendCmdPItem(TRUE, CMD_RESPAWNITEM, item[v28]._ix, item[v28]._iy); + plr[v3].HoldItem._itype = ITYPE_NONE; + } } // 48E9A8: using guessed type int AP2x2Tbl[10]; // 4B84DC: using guessed type int dropGoldFlag; int __fastcall FindGetItem(int indx, unsigned short ci, int iseed) { - int i; // ebx - int ii; // esi - - i = 0; - if ( numitems <= 0 ) - return -1; - while ( 1 ) - { - ii = itemactive[i]; - if ( item[ii].IDidx == indx && item[ii]._iSeed == iseed && item[ii]._iCreateInfo == ci ) - break; - if ( ++i >= numitems ) - return -1; - } - return ii; + int i; // ebx + int ii; // esi + + i = 0; + if (numitems <= 0) + return -1; + while (1) { + ii = itemactive[i]; + if (item[ii].IDidx == indx && item[ii]._iSeed == iseed && item[ii]._iCreateInfo == ci) + break; + if (++i >= numitems) + return -1; + } + return ii; } void __fastcall SyncGetItem(int x, int y, int idx, unsigned short ci, int iseed) { - char v5; // cl - int v6; // esi - int v7; // eax - int v8; // edx - int v9; // ecx - //int v10; // ecx - - v5 = dItem[x][y]; - if ( v5 - && (v6 = v5 - 1, v7 = v6, item[v7].IDidx == idx) - && item[v7]._iSeed == iseed - && item[v7]._iCreateInfo == ci ) - { - FindGetItem(idx, ci, iseed); - } - else - { - v6 = FindGetItem(idx, ci, iseed); - } - if ( v6 != -1 ) - { - v8 = 0; - dItem[item[v6]._ix][item[v6]._iy] = 0; - while ( v8 < numitems ) - { - v9 = itemactive[v8]; - if ( v9 == v6 ) - { - DeleteItem(v9, v8); - FindGetItem(idx, ci, iseed); - FindGetItem(idx, ci, iseed); /* check idx */ - v8 = 0; - } - else - { - ++v8; - } - } - FindGetItem(idx, ci, iseed); - } + char v5; // cl + int v6; // esi + int v7; // eax + int v8; // edx + int v9; // ecx + //int v10; // ecx + + v5 = dItem[x][y]; + if (v5 + && (v6 = v5 - 1, v7 = v6, item[v7].IDidx == idx) + && item[v7]._iSeed == iseed + && item[v7]._iCreateInfo == ci) { + FindGetItem(idx, ci, iseed); + } else { + v6 = FindGetItem(idx, ci, iseed); + } + if (v6 != -1) { + v8 = 0; + dItem[item[v6]._ix][item[v6]._iy] = 0; + while (v8 < numitems) { + v9 = itemactive[v8]; + if (v9 == v6) { + DeleteItem(v9, v8); + FindGetItem(idx, ci, iseed); + FindGetItem(idx, ci, iseed); /* check idx */ + v8 = 0; + } else { + ++v8; + } + } + FindGetItem(idx, ci, iseed); + } } int __fastcall CanPut(int i, int j) { - int v2; // ecx - int v3; // esi - char v4; // al - int v5; // eax - char v6; // al - bool v7; // sf - char v8; // al - char v9; // cl - - v2 = i; - if ( dItem[v2][j] ) - return 0; - v3 = v2 * 112 + j; - if ( nSolidTable[dPiece[0][v3]] ) - return 0; - v4 = dObject[v2][j]; - if ( v4 ) - { - v5 = v4 <= 0 ? -1 - v4 : v4 - 1; - if ( object[v5]._oSolidFlag ) - return 0; - } - v6 = dObject[v2 + 1][j + 1]; - v7 = v6 < 0; - if ( v6 > 0 ) - { - if ( object[v6 - 1]._oSelFlag ) /* check */ - return 0; - v7 = v6 < 0; - } - if ( v7 && object[-(v6 + 1)]._oSelFlag ) - return 0; - v8 = dObject[v2 + 1][j]; - if ( v8 > 0 ) - { - v9 = dObject[v2][j + 1]; - if ( v9 > 0 && object[v8 - 1]._oSelFlag && object[v9 - 1]._oSelFlag ) - return 0; - } - if ( !currlevel && (dMonster[0][v3] || dMonster[1][v3 + 1]) ) - return 0; - return 1; + int v2; // ecx + int v3; // esi + char v4; // al + int v5; // eax + char v6; // al + bool v7; // sf + char v8; // al + char v9; // cl + + v2 = i; + if (dItem[v2][j]) + return 0; + v3 = v2 * 112 + j; + if (nSolidTable[dPiece[0][v3]]) + return 0; + v4 = dObject[v2][j]; + if (v4) { + v5 = v4 <= 0 ? -1 - v4 : v4 - 1; + if (object[v5]._oSolidFlag) + return 0; + } + v6 = dObject[v2 + 1][j + 1]; + v7 = v6 < 0; + if (v6 > 0) { + if (object[v6 - 1]._oSelFlag) /* check */ + return 0; + v7 = v6 < 0; + } + if (v7 && object[-(v6 + 1)]._oSelFlag) + return 0; + v8 = dObject[v2 + 1][j]; + if (v8 > 0) { + v9 = dObject[v2][j + 1]; + if (v9 > 0 && object[v8 - 1]._oSelFlag && object[v9 - 1]._oSelFlag) + return 0; + } + if (!currlevel && (dMonster[0][v3] || dMonster[1][v3 + 1])) + return 0; + return 1; } int __cdecl TryInvPut() { - int result; // eax - int v1; // eax - char v2; // si - int v3; // edi - int v4; // ebx - int v5; // esi - - if ( numitems >= 127 ) - return 0; - v1 = GetDirection(plr[myplr].WorldX, plr[myplr].WorldY, cursmx, cursmy); - v2 = v1; - v3 = plr[myplr].WorldY; - v4 = plr[myplr].WorldX; - if ( CanPut(v4 + offset_x[v1], v3 + offset_y[v1]) - || (v5 = (v2 - 1) & 7, CanPut(v4 + offset_x[v5], v3 + offset_y[v5])) - || CanPut(v4 + offset_x[((_BYTE)v5 + 2) & 7], v3 + offset_y[((_BYTE)v5 + 2) & 7]) ) - { - result = 1; - } - else - { - result = CanPut(v4, v3); - } - return result; + int result; // eax + int v1; // eax + char v2; // si + int v3; // edi + int v4; // ebx + int v5; // esi + + if (numitems >= 127) + return 0; + v1 = GetDirection(plr[myplr].WorldX, plr[myplr].WorldY, cursmx, cursmy); + v2 = v1; + v3 = plr[myplr].WorldY; + v4 = plr[myplr].WorldX; + if (CanPut(v4 + offset_x[v1], v3 + offset_y[v1]) + || (v5 = (v2 - 1) & 7, CanPut(v4 + offset_x[v5], v3 + offset_y[v5])) + || CanPut(v4 + offset_x[((_BYTE)v5 + 2) & 7], v3 + offset_y[((_BYTE)v5 + 2) & 7])) { + result = 1; + } else { + result = CanPut(v4, v3); + } + return result; } void __fastcall DrawInvMsg(char *msg) { - char *v1; // esi - int v2; // eax - - v1 = msg; - v2 = GetTickCount(); - if ( (unsigned int)(v2 - sgdwLastTime) >= 5000 ) - { - sgdwLastTime = v2; - ErrorPlrMsg(v1); - } + char *v1; // esi + int v2; // eax + + v1 = msg; + v2 = GetTickCount(); + if ((unsigned int)(v2 - sgdwLastTime) >= 5000) { + sgdwLastTime = v2; + ErrorPlrMsg(v1); + } } int __fastcall 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; - 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 ) - { - 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; - } - ++v21; - ++v13; - } - while ( v21 <= yb ); - v11 = ++v22; - } - ++yb; - v11 = v20-- - 1; - if ( v20 <= -50 ) - { - if ( v23 ) - break; - 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; - SetCursor(CURSOR_HAND); - return yc; + 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; + 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) { + 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; + } + ++v21; + ++v13; + } while (v21 <= yb); + v11 = ++v22; + } + ++yb; + v11 = v20-- - 1; + if (v20 <= -50) { + if (v23) + break; + 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; + SetCursor(CURSOR_HAND); + return yc; } int __fastcall 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) { - int v13; // ebx - int v14; // edi - int v15; // esi - int v17; // edi - int v18; // ecx - int v19; // edi - int v20; // eax - int v21; // eax - int v22; // eax - int v23; // edx - int v25; // ecx - int *v26; // edx - int v27; // eax - int v28; // eax - int v29; // [esp+Ch] [ebp-18h] - int v30; // [esp+Ch] [ebp-18h] - signed int v31; // [esp+10h] [ebp-14h] - int v32; // [esp+14h] [ebp-10h] - int v33; // [esp+18h] [ebp-Ch] - int o1; // [esp+1Ch] [ebp-8h] - signed int v35; // [esp+20h] [ebp-4h] - int i; // [esp+2Ch] [ebp+8h] - int ia; // [esp+2Ch] [ebp+8h] - int ib; // [esp+2Ch] [ebp+8h] - int ic; // [esp+2Ch] [ebp+8h] - - v13 = x; - v14 = pnum; - if ( numitems >= 127 ) - return -1; - v15 = y; - if ( FindGetItem(idx, icreateinfo, iseed) != -1 ) - { - DrawInvMsg("A duplicate item has been detected from another player."); - SyncGetItem(v13, y, idx, icreateinfo, iseed); - } - v17 = v14; - i = GetDirection(plr[v17].WorldX, plr[v17].WorldY, v13, y); - v29 = v15 - plr[v17].WorldY; - if ( abs(v13 - plr[v17].WorldX) > 1 || abs(v29) > 1 ) - { - v13 = plr[v17].WorldX + offset_x[i]; - v15 = plr[v17].WorldY + offset_y[i]; - } - if ( !CanPut(v13, v15) ) - { - v18 = plr[v17].WorldX; - v19 = plr[v17].WorldY; - v20 = ((_BYTE)i - 1) & 7; - v30 = v18; - ia = v20; - v20 *= 4; - v13 = v18 + *(int *)((char *)offset_x + v20); - v15 = v19 + *(int *)((char *)offset_y + v20); - if ( !CanPut(v18 + *(int *)((char *)offset_x + v20), v19 + *(int *)((char *)offset_y + v20)) ) - { - v21 = ((_BYTE)ia + 2) & 7; - v13 = v30 + offset_x[v21]; - v15 = v19 + offset_y[v21]; - if ( !CanPut(v30 + offset_x[v21], v19 + offset_y[v21]) ) - { - v35 = 0; - v22 = -1; - ib = 1; - v31 = -1; - while ( !v35 ) - { - v33 = v22; - while ( v22 <= ib && !v35 ) - { - v23 = v19 + v33; - v32 = v31; - o1 = v30 + v31; - do - { - if ( v35 ) - break; - if ( CanPut(o1, v23) ) - { - v13 = o1; - v35 = 1; - v15 = v23; - } - ++v32; - ++o1; - } - while ( v32 <= ib ); - v22 = ++v33; - } - ++ib; - v22 = v31-- - 1; - if ( v31 <= -50 ) - { - if ( v35 ) - break; - return -1; - } - } - } - } - } - CanPut(v13, v15); - v25 = itemavail[0]; - ic = itemavail[0]; - dItem[v13][v15] = _LOBYTE(itemavail[0]) + 1; - v26 = &itemavail[MAXITEMS - numitems - 1]; - itemactive[numitems] = v25; - itemavail[0] = *v26; - if ( idx == IDI_EAR ) - { - RecreateEar(v25, icreateinfo, iseed, Id, dur, mdur, ch, mch, ivalue, ibuff); - } - else - { - RecreateItem(v25, idx, icreateinfo, iseed, ivalue); - if ( Id ) - item[ic]._iIdentified = TRUE; - v27 = ic; - item[v27]._iDurability = dur; - item[v27]._iMaxDur = mdur; - item[v27]._iCharges = ch; - item[v27]._iMaxCharges = mch; - } - v28 = ic; - item[v28]._ix = v13; - item[v28]._iy = v15; - RespawnItem(ic, 1); - ++numitems; - return ic; + int v13; // ebx + int v14; // edi + int v15; // esi + int v17; // edi + int v18; // ecx + int v19; // edi + int v20; // eax + int v21; // eax + int v22; // eax + int v23; // edx + int v25; // ecx + int *v26; // edx + int v27; // eax + int v28; // eax + int v29; // [esp+Ch] [ebp-18h] + int v30; // [esp+Ch] [ebp-18h] + signed int v31; // [esp+10h] [ebp-14h] + int v32; // [esp+14h] [ebp-10h] + int v33; // [esp+18h] [ebp-Ch] + int o1; // [esp+1Ch] [ebp-8h] + signed int v35; // [esp+20h] [ebp-4h] + int i; // [esp+2Ch] [ebp+8h] + int ia; // [esp+2Ch] [ebp+8h] + int ib; // [esp+2Ch] [ebp+8h] + int ic; // [esp+2Ch] [ebp+8h] + + v13 = x; + v14 = pnum; + if (numitems >= 127) + return -1; + v15 = y; + if (FindGetItem(idx, icreateinfo, iseed) != -1) { + DrawInvMsg("A duplicate item has been detected from another player."); + SyncGetItem(v13, y, idx, icreateinfo, iseed); + } + v17 = v14; + i = GetDirection(plr[v17].WorldX, plr[v17].WorldY, v13, y); + v29 = v15 - plr[v17].WorldY; + if (abs(v13 - plr[v17].WorldX) > 1 || abs(v29) > 1) { + v13 = plr[v17].WorldX + offset_x[i]; + v15 = plr[v17].WorldY + offset_y[i]; + } + if (!CanPut(v13, v15)) { + v18 = plr[v17].WorldX; + v19 = plr[v17].WorldY; + v20 = ((_BYTE)i - 1) & 7; + v30 = v18; + ia = v20; + v20 *= 4; + v13 = v18 + *(int *)((char *)offset_x + v20); + v15 = v19 + *(int *)((char *)offset_y + v20); + if (!CanPut(v18 + *(int *)((char *)offset_x + v20), v19 + *(int *)((char *)offset_y + v20))) { + v21 = ((_BYTE)ia + 2) & 7; + v13 = v30 + offset_x[v21]; + v15 = v19 + offset_y[v21]; + if (!CanPut(v30 + offset_x[v21], v19 + offset_y[v21])) { + v35 = 0; + v22 = -1; + ib = 1; + v31 = -1; + while (!v35) { + v33 = v22; + while (v22 <= ib && !v35) { + v23 = v19 + v33; + v32 = v31; + o1 = v30 + v31; + do { + if (v35) + break; + if (CanPut(o1, v23)) { + v13 = o1; + v35 = 1; + v15 = v23; + } + ++v32; + ++o1; + } while (v32 <= ib); + v22 = ++v33; + } + ++ib; + v22 = v31-- - 1; + if (v31 <= -50) { + if (v35) + break; + return -1; + } + } + } + } + } + CanPut(v13, v15); + v25 = itemavail[0]; + ic = itemavail[0]; + dItem[v13][v15] = _LOBYTE(itemavail[0]) + 1; + v26 = &itemavail[MAXITEMS - numitems - 1]; + itemactive[numitems] = v25; + itemavail[0] = *v26; + if (idx == IDI_EAR) { + RecreateEar(v25, icreateinfo, iseed, Id, dur, mdur, ch, mch, ivalue, ibuff); + } else { + RecreateItem(v25, idx, icreateinfo, iseed, ivalue); + if (Id) + item[ic]._iIdentified = TRUE; + v27 = ic; + item[v27]._iDurability = dur; + item[v27]._iMaxDur = mdur; + item[v27]._iCharges = ch; + item[v27]._iMaxCharges = mch; + } + v28 = ic; + item[v28]._ix = v13; + item[v28]._iy = v15; + RespawnItem(ic, 1); + ++numitems; + return ic; } int __cdecl CheckInvHLight() { - signed int v0; // ebx - int result; // eax - ItemStruct *v2; // edi - PlayerStruct *v3; // esi - int v4; // eax - int v5; // ebx - int v6; // edi - char *v7; // eax - char v9; // [esp+Fh] [ebp-1h] - - v0 = 0; - do - { - result = InvRect[v0].X; - if ( MouseX >= result ) - { - result += 29; - if ( MouseX < result ) - { - result = InvRect[v0].Y; - if ( MouseY >= result - 29 && MouseY < result ) - break; - } - } - ++v0; - } - while ( (unsigned int)v0 < 0x49 ); - if ( (unsigned int)v0 >= 0x49 ) - goto LABEL_37; - v9 = -1; - infoclr = COL_WHITE; - v2 = 0; - v3 = &plr[myplr]; - ClearPanel(); - if ( v0 >= 0 && v0 <= 3 ) - { - v9 = 0; - v2 = v3->InvBody; - goto LABEL_36; - } - switch ( v0 ) - { - case 4: - v9 = 1; - v2 = &v3->InvBody[INVLOC_RING_LEFT]; - goto LABEL_36; - case 5: - v9 = 2; - v2 = &v3->InvBody[INVLOC_RING_RIGHT]; - goto LABEL_36; - case 6: - v9 = 3; - v2 = &v3->InvBody[INVLOC_AMULET]; - goto LABEL_36; - } - if ( v0 >= 7 && v0 <= 12 ) - { - v9 = 4; - v2 = &v3->InvBody[INVLOC_HAND_LEFT]; - goto LABEL_36; - } - if ( v0 < 13 || v0 > 18 ) - { - if ( v0 >= 19 && v0 <= 24 ) - { - v9 = 6; - v2 = &v3->InvBody[INVLOC_CHEST]; - goto LABEL_36; - } - if ( v0 < 25 || v0 > 64 ) - { - if ( v0 < 65 ) - goto LABEL_36; - v5 = v0 - 65; - drawsbarflag = 1; - result = 368 * v5; - v2 = &v3->SpdList[v5]; - if ( v3->SpdList[v5]._itype != -1 ) - { - v9 = v5 + 47; - goto LABEL_36; - } - } - else - { - result = abs(v3->InvGrid[v0 - 25]); // abs(*((char *)&v3->InvList[39]._iVAdd2 + v0 + 3)); /* find right address */ - if ( result ) - { - v4 = result - 1; - v9 = v4 + 7; - v2 = &v3->InvList[v4]; - goto LABEL_36; - } - } -LABEL_37: - _LOBYTE(result) = -1; - return result; - } - v2 = &v3->InvBody[INVLOC_HAND_LEFT]; - if ( v3->InvBody[INVLOC_HAND_LEFT]._itype == -1 || v3->InvBody[INVLOC_HAND_LEFT]._iLoc != 2 ) - { - v9 = 5; - v2 = &v3->InvBody[INVLOC_HAND_RIGHT]; - } - else - { - v9 = 4; - } + signed int v0; // ebx + int result; // eax + ItemStruct *v2; // edi + PlayerStruct *v3; // esi + int v4; // eax + int v5; // ebx + int v6; // edi + char *v7; // eax + char v9; // [esp+Fh] [ebp-1h] + + v0 = 0; + do { + result = InvRect[v0].X; + if (MouseX >= result) { + result += 29; + if (MouseX < result) { + result = InvRect[v0].Y; + if (MouseY >= result - 29 && MouseY < result) + break; + } + } + ++v0; + } while ((unsigned int)v0 < 0x49); + if ((unsigned int)v0 >= 0x49) + goto LABEL_37; + v9 = -1; + infoclr = COL_WHITE; + v2 = 0; + v3 = &plr[myplr]; + ClearPanel(); + if (v0 >= 0 && v0 <= 3) { + v9 = 0; + v2 = v3->InvBody; + goto LABEL_36; + } + switch (v0) { + case 4: + v9 = 1; + v2 = &v3->InvBody[INVLOC_RING_LEFT]; + goto LABEL_36; + case 5: + v9 = 2; + v2 = &v3->InvBody[INVLOC_RING_RIGHT]; + goto LABEL_36; + case 6: + v9 = 3; + v2 = &v3->InvBody[INVLOC_AMULET]; + goto LABEL_36; + } + if (v0 >= 7 && v0 <= 12) { + v9 = 4; + v2 = &v3->InvBody[INVLOC_HAND_LEFT]; + goto LABEL_36; + } + if (v0 < 13 || v0 > 18) { + if (v0 >= 19 && v0 <= 24) { + v9 = 6; + v2 = &v3->InvBody[INVLOC_CHEST]; + goto LABEL_36; + } + if (v0 < 25 || v0 > 64) { + if (v0 < 65) + goto LABEL_36; + v5 = v0 - 65; + drawsbarflag = 1; + result = 368 * v5; + v2 = &v3->SpdList[v5]; + if (v3->SpdList[v5]._itype != -1) { + v9 = v5 + 47; + goto LABEL_36; + } + } else { + result = abs(v3->InvGrid[v0 - 25]); // abs(*((char *)&v3->InvList[39]._iVAdd2 + v0 + 3)); /* find right address */ + if (result) { + v4 = result - 1; + v9 = v4 + 7; + v2 = &v3->InvList[v4]; + goto LABEL_36; + } + } + LABEL_37: + _LOBYTE(result) = -1; + return result; + } + v2 = &v3->InvBody[INVLOC_HAND_LEFT]; + if (v3->InvBody[INVLOC_HAND_LEFT]._itype == -1 || v3->InvBody[INVLOC_HAND_LEFT]._iLoc != 2) { + v9 = 5; + v2 = &v3->InvBody[INVLOC_HAND_RIGHT]; + } else { + v9 = 4; + } LABEL_36: - result = v2->_itype; - if ( result == ITYPE_NONE ) - goto LABEL_37; - if ( result == ITYPE_GOLD ) - { - v6 = v2->_ivalue; - v7 = get_pieces_str(v6); - result = sprintf(infostr, "%i gold %s", v6, v7); - } - else - { - if ( v2->_iMagical == ITEM_QUALITY_MAGIC ) - { - infoclr = COL_BLUE; - } else if ( v2->_iMagical == ITEM_QUALITY_UNIQUE ) { - infoclr = COL_GOLD; - } - strcpy(infostr, v2->_iName); - if ( v2->_iIdentified ) - { - strcpy(infostr, v2->_iIName); - PrintItemDetails(v2); - } - else - { - PrintItemDur(v2); - } - } - _LOBYTE(result) = v9; - return result; + result = v2->_itype; + if (result == ITYPE_NONE) + goto LABEL_37; + if (result == ITYPE_GOLD) { + v6 = v2->_ivalue; + v7 = get_pieces_str(v6); + result = sprintf(infostr, "%i gold %s", v6, v7); + } else { + if (v2->_iMagical == ITEM_QUALITY_MAGIC) { + infoclr = COL_BLUE; + } else if (v2->_iMagical == ITEM_QUALITY_UNIQUE) { + infoclr = COL_GOLD; + } + strcpy(infostr, v2->_iName); + if (v2->_iIdentified) { + strcpy(infostr, v2->_iIName); + PrintItemDetails(v2); + } else { + PrintItemDur(v2); + } + } + _LOBYTE(result) = v9; + return result; } // 4B883C: using guessed type int infoclr; void __fastcall RemoveScroll(int pnum) { - int v1; // eax - int v2; // esi - int v3; // edx - int *v4; // ecx - int v5; // edx - int *v6; // ecx - int p; // [esp+Ch] [ebp-4h] - - p = pnum; - v1 = pnum; - v2 = plr[pnum]._pNumInv; - v3 = 0; - if ( v2 <= 0 ) - { -LABEL_8: - v5 = 0; - v6 = &plr[v1].SpdList[0]._iMiscId; - while ( *(v6 - 53) == -1 || *v6 != IMISC_SCROLL && *v6 != IMISC_SCROLLT || v6[1] != plr[v1]._pSpell ) - { - ++v5; - v6 += 92; - if ( v5 >= MAXBELTITEMS ) - return; - } - RemoveSpdBarItem(p, v5); - } - else - { - v4 = &plr[v1].InvList[0]._iMiscId; - while ( *(v4 - 53) == -1 || *v4 != IMISC_SCROLL && *v4 != IMISC_SCROLLT || v4[1] != plr[v1]._pSpell ) - { - ++v3; - v4 += 92; - if ( v3 >= v2 ) - goto LABEL_8; - } - RemoveInvItem(p, v3); - } - CalcPlrScrolls(p); + int v1; // eax + int v2; // esi + int v3; // edx + int *v4; // ecx + int v5; // edx + int *v6; // ecx + int p; // [esp+Ch] [ebp-4h] + + p = pnum; + v1 = pnum; + v2 = plr[pnum]._pNumInv; + v3 = 0; + if (v2 <= 0) { + LABEL_8: + v5 = 0; + v6 = &plr[v1].SpdList[0]._iMiscId; + while (*(v6 - 53) == -1 || *v6 != IMISC_SCROLL && *v6 != IMISC_SCROLLT || v6[1] != plr[v1]._pSpell) { + ++v5; + v6 += 92; + if (v5 >= MAXBELTITEMS) + return; + } + RemoveSpdBarItem(p, v5); + } else { + v4 = &plr[v1].InvList[0]._iMiscId; + while (*(v4 - 53) == -1 || *v4 != IMISC_SCROLL && *v4 != IMISC_SCROLLT || v4[1] != plr[v1]._pSpell) { + ++v3; + v4 += 92; + if (v3 >= v2) + goto LABEL_8; + } + RemoveInvItem(p, v3); + } + CalcPlrScrolls(p); } BOOL __cdecl UseScroll() { - int v0; // eax - int v1; // esi - int v2; // ecx - int *v3; // edx - signed int v4; // esi - int *v5; // ecx - - if ( pcurs != CURSOR_HAND || leveltype == DTYPE_TOWN && !spelldata[plr[myplr]._pRSpell].sTownSpell ) - return FALSE; - v0 = myplr; - v1 = 0; - v2 = plr[myplr]._pNumInv; - if ( v2 <= 0 ) - { -LABEL_11: - v4 = 0; - v5 = &plr[v0].SpdList[0]._iMiscId; - while ( *(v5 - 53) == -1 || *v5 != IMISC_SCROLL && *v5 != IMISC_SCROLLT || v5[1] != plr[v0]._pRSpell ) - { - ++v4; - v5 += 92; - if ( v4 >= MAXBELTITEMS ) - return FALSE; - } - } - else - { - v3 = &plr[v0].InvList[0]._iMiscId; - while ( *(v3 - 53) == -1 || *v3 != IMISC_SCROLL && *v3 != IMISC_SCROLLT || v3[1] != plr[v0]._pRSpell ) - { - ++v1; - v3 += 92; - if ( v1 >= v2 ) - goto LABEL_11; - } - } - return TRUE; + int v0; // eax + int v1; // esi + int v2; // ecx + int *v3; // edx + signed int v4; // esi + int *v5; // ecx + + if (pcurs != CURSOR_HAND || leveltype == DTYPE_TOWN && !spelldata[plr[myplr]._pRSpell].sTownSpell) + return FALSE; + v0 = myplr; + v1 = 0; + v2 = plr[myplr]._pNumInv; + if (v2 <= 0) { + LABEL_11: + v4 = 0; + v5 = &plr[v0].SpdList[0]._iMiscId; + while (*(v5 - 53) == -1 || *v5 != IMISC_SCROLL && *v5 != IMISC_SCROLLT || v5[1] != plr[v0]._pRSpell) { + ++v4; + v5 += 92; + if (v4 >= MAXBELTITEMS) + return FALSE; + } + } else { + v3 = &plr[v0].InvList[0]._iMiscId; + while (*(v3 - 53) == -1 || *v3 != IMISC_SCROLL && *v3 != IMISC_SCROLLT || v3[1] != plr[v0]._pRSpell) { + ++v1; + v3 += 92; + if (v1 >= v2) + goto LABEL_11; + } + } + return TRUE; } void __fastcall UseStaffCharge(int pnum) { - int v1; // eax - int *v2; // eax - - v1 = pnum; - if ( plr[pnum].InvBody[INVLOC_HAND_LEFT]._itype != ITYPE_NONE - && plr[v1].InvBody[INVLOC_HAND_LEFT]._iMiscId == IMISC_STAFF - && plr[v1].InvBody[INVLOC_HAND_LEFT]._iSpell == plr[v1]._pRSpell ) - { - v2 = &plr[v1].InvBody[INVLOC_HAND_LEFT]._iCharges; - if ( *v2 > 0 ) - { - --*v2; - CalcPlrStaff(pnum); - } - } + int v1; // eax + int *v2; // eax + + v1 = pnum; + if (plr[pnum].InvBody[INVLOC_HAND_LEFT]._itype != ITYPE_NONE + && plr[v1].InvBody[INVLOC_HAND_LEFT]._iMiscId == IMISC_STAFF + && plr[v1].InvBody[INVLOC_HAND_LEFT]._iSpell == plr[v1]._pRSpell) { + v2 = &plr[v1].InvBody[INVLOC_HAND_LEFT]._iCharges; + if (*v2 > 0) { + --*v2; + CalcPlrStaff(pnum); + } + } } BOOL __cdecl UseStaff() { - int v0; // eax - BOOL result; // al - - result = FALSE; - if ( pcurs == CURSOR_HAND ) - { - v0 = myplr; - if ( plr[myplr].InvBody[INVLOC_HAND_LEFT]._itype != ITYPE_NONE - && plr[v0].InvBody[INVLOC_HAND_LEFT]._iMiscId == IMISC_STAFF - && plr[v0].InvBody[INVLOC_HAND_LEFT]._iSpell == plr[v0]._pRSpell - && plr[v0].InvBody[INVLOC_HAND_LEFT]._iCharges > 0 ) - { - result = TRUE; - } - } - return result; + int v0; // eax + BOOL result; // al + + result = FALSE; + if (pcurs == CURSOR_HAND) { + v0 = myplr; + if (plr[myplr].InvBody[INVLOC_HAND_LEFT]._itype != ITYPE_NONE + && plr[v0].InvBody[INVLOC_HAND_LEFT]._iMiscId == IMISC_STAFF + && plr[v0].InvBody[INVLOC_HAND_LEFT]._iSpell == plr[v0]._pRSpell + && plr[v0].InvBody[INVLOC_HAND_LEFT]._iCharges > 0) { + result = TRUE; + } + } + return result; } void __cdecl StartGoldDrop() { - int v0; // eax - - initialDropGoldIndex = pcursinvitem; - if ( pcursinvitem > 46 ) - v0 = plr[myplr].InvBody[pcursinvitem]._iMaxDur; - else - v0 = plr[myplr].InvBody[pcursinvitem]._ivalue; - dropGoldValue = 0; - initialDropGoldValue = v0; - dropGoldFlag = 1; - if ( talkflag ) - control_reset_talk(); + int v0; // eax + + initialDropGoldIndex = pcursinvitem; + if (pcursinvitem > 46) + v0 = plr[myplr].InvBody[pcursinvitem]._iMaxDur; + else + v0 = plr[myplr].InvBody[pcursinvitem]._ivalue; + dropGoldValue = 0; + initialDropGoldValue = v0; + dropGoldFlag = 1; + if (talkflag) + control_reset_talk(); } // 4B84DC: using guessed type int dropGoldFlag; // 4B8960: using guessed type int talkflag; @@ -3037,119 +2645,103 @@ void __cdecl StartGoldDrop() int __fastcall UseInvItem(int pnum, int cii) { - int v2; // esi - int result; // eax - int v4; // ebx - int v5; // ebp - _DWORD *v6; // edi - int v9; // eax - int v10; // ecx - int p; // [esp+10h] [ebp-8h] - signed int v14; // [esp+14h] [ebp-4h] - - v2 = pnum; - p = pnum; - if ( plr[pnum]._pInvincible && !plr[v2]._pHitPoints && pnum == myplr ) - return 1; - result = 1; - if ( pcurs == 1 && !stextflag ) - { - if ( cii <= 5 ) - return 0; - if ( cii > 46 ) - { - if ( talkflag ) - return result; - v4 = cii - 47; - v14 = 1; - v5 = 368 * (cii - 47) + v2 * 21720; - v6 = (_DWORD *)((char *)plr[0].SpdList + v5); - } - else - { - v4 = cii - 7; - v14 = 0; - v5 = 368 * (cii - 7) + v2 * 21720; - v6 = (_DWORD *)((char *)plr[0].InvList + v5); - } - if ( v6[90] == 17 ) - { - sfxdelay = 10; - if ( plr[v2]._pClass == PC_WARRIOR ) { - sfxdnum = PS_WARR95; - } else if ( plr[v2]._pClass == PC_ROGUE ) { - sfxdnum = PS_ROGUE95; - } else if ( plr[v2]._pClass == PC_SORCERER ) { - sfxdnum = PS_MAGE95; - } - return 1; - } - if ( v6[90] == 19 ) - { - PlaySFX(IS_IBOOK); - sfxdelay = 10; - if ( plr[v2]._pClass == PC_WARRIOR ) { - sfxdnum = PS_WARR29; - } else if ( plr[v2]._pClass == PC_ROGUE ) { - sfxdnum = PS_ROGUE29; - } else if ( plr[v2]._pClass == PC_SORCERER ) { - sfxdnum = PS_MAGE29; - } - return 1; - } - if ( !AllItemsList[v6[90]].iUsable ) - return 0; - if ( !v6[89] ) - { - if ( plr[v2]._pClass == PC_WARRIOR ) { - PlaySFX(PS_WARR13); - } else if ( plr[v2]._pClass == PC_ROGUE ) { - PlaySFX(PS_ROGUE13); - } else if ( plr[v2]._pClass == PC_SORCERER ) { - PlaySFX(PS_MAGE13); - } - return 1; - } - v9 = v6[55]; - if ( !v9 && v6[2] == 11 ) - { - StartGoldDrop(); - return 1; - } - if ( dropGoldFlag ) - { - dropGoldFlag = 0; - dropGoldValue = 0; - } - if ( v9 == 21 && !currlevel && !spelldata[v6[56]].sTownSpell - || v9 == 22 && !currlevel && !spelldata[v6[56]].sTownSpell ) - { - return 1; - } - if ( v9 == 24 ) - { - v10 = 65; - } - else - { - if ( pnum != myplr ) - goto LABEL_39; - v10 = ItemInvSnds[ItemCAnimTbl[v6[48]]]; - } - PlaySFX(v10); -LABEL_39: - UseItem(p, v6[55], v6[56]); - if ( v14 ) - { - RemoveSpdBarItem(p, v4); - } - else if ( *(int *)((char *)&plr[0].InvList[0]._iMiscId + v5) != IMISC_MAPOFDOOM ) - { - RemoveInvItem(p, v4); - } - return 1; - } - return result; + int v2; // esi + int result; // eax + int v4; // ebx + int v5; // ebp + _DWORD *v6; // edi + int v9; // eax + int v10; // ecx + int p; // [esp+10h] [ebp-8h] + signed int v14; // [esp+14h] [ebp-4h] + + v2 = pnum; + p = pnum; + if (plr[pnum]._pInvincible && !plr[v2]._pHitPoints && pnum == myplr) + return 1; + result = 1; + if (pcurs == 1 && !stextflag) { + if (cii <= 5) + return 0; + if (cii > 46) { + if (talkflag) + return result; + v4 = cii - 47; + v14 = 1; + v5 = 368 * (cii - 47) + v2 * 21720; + v6 = (_DWORD *)((char *)plr[0].SpdList + v5); + } else { + v4 = cii - 7; + v14 = 0; + v5 = 368 * (cii - 7) + v2 * 21720; + v6 = (_DWORD *)((char *)plr[0].InvList + v5); + } + if (v6[90] == 17) { + sfxdelay = 10; + if (plr[v2]._pClass == PC_WARRIOR) { + sfxdnum = PS_WARR95; + } else if (plr[v2]._pClass == PC_ROGUE) { + sfxdnum = PS_ROGUE95; + } else if (plr[v2]._pClass == PC_SORCERER) { + sfxdnum = PS_MAGE95; + } + return 1; + } + if (v6[90] == 19) { + PlaySFX(IS_IBOOK); + sfxdelay = 10; + if (plr[v2]._pClass == PC_WARRIOR) { + sfxdnum = PS_WARR29; + } else if (plr[v2]._pClass == PC_ROGUE) { + sfxdnum = PS_ROGUE29; + } else if (plr[v2]._pClass == PC_SORCERER) { + sfxdnum = PS_MAGE29; + } + return 1; + } + if (!AllItemsList[v6[90]].iUsable) + return 0; + if (!v6[89]) { + if (plr[v2]._pClass == PC_WARRIOR) { + PlaySFX(PS_WARR13); + } else if (plr[v2]._pClass == PC_ROGUE) { + PlaySFX(PS_ROGUE13); + } else if (plr[v2]._pClass == PC_SORCERER) { + PlaySFX(PS_MAGE13); + } + return 1; + } + v9 = v6[55]; + if (!v9 && v6[2] == 11) { + StartGoldDrop(); + return 1; + } + if (dropGoldFlag) { + dropGoldFlag = 0; + dropGoldValue = 0; + } + if (v9 == 21 && !currlevel && !spelldata[v6[56]].sTownSpell + || v9 == 22 && !currlevel && !spelldata[v6[56]].sTownSpell) { + return 1; + } + if (v9 == 24) { + v10 = 65; + } else { + if (pnum != myplr) + goto LABEL_39; + v10 = ItemInvSnds[ItemCAnimTbl[v6[48]]]; + } + PlaySFX(v10); + LABEL_39: + UseItem(p, v6[55], v6[56]); + if (v14) { + RemoveSpdBarItem(p, v4); + } else if (*(int *)((char *)&plr[0].InvList[0]._iMiscId + v5) != IMISC_MAPOFDOOM) { + RemoveInvItem(p, v4); + } + return 1; + } + return result; } // 4B84DC: using guessed type int dropGoldFlag; // 4B8960: using guessed type int talkflag; @@ -3158,63 +2750,57 @@ LABEL_39: void __cdecl DoTelekinesis() { - if ( pcursobj != -1 ) - NetSendCmdParam1(TRUE, CMD_OPOBJT, pcursobj); - if ( pcursitem != -1 ) - NetSendCmdGItem(TRUE, CMD_REQUESTAGITEM, myplr, myplr, pcursitem); - if ( pcursmonst != -1 && !M_Talker(pcursmonst) && !monster[pcursmonst].mtalkmsg ) - NetSendCmdParam1(TRUE, CMD_KNOCKBACK, pcursmonst); - SetCursor(CURSOR_HAND); + if (pcursobj != -1) + NetSendCmdParam1(TRUE, CMD_OPOBJT, pcursobj); + if (pcursitem != -1) + NetSendCmdGItem(TRUE, CMD_REQUESTAGITEM, myplr, myplr, pcursitem); + if (pcursmonst != -1 && !M_Talker(pcursmonst) && !monster[pcursmonst].mtalkmsg) + NetSendCmdParam1(TRUE, CMD_KNOCKBACK, pcursmonst); + SetCursor(CURSOR_HAND); } // 4B8CC0: using guessed type char pcursitem; // 4B8CC1: using guessed type char pcursobj; int __fastcall CalculateGold(int pnum) { - int result; // eax - int v2; // ecx - int *v3; // edx - signed int v4; // esi - int v5; // edx - int *v6; // ecx - - result = 0; - v2 = pnum; - v3 = &plr[v2].SpdList[0]._ivalue; - v4 = MAXBELTITEMS; - do - { - if ( *(v3 - 47) == 11 ) - { - result += *v3; - drawpanflag = 255; - } - v3 += 92; - --v4; - } - while ( v4 ); - v5 = plr[v2]._pNumInv; - if ( v5 > 0 ) - { - v6 = &plr[v2].InvList[0]._ivalue; - do - { - if ( *(v6 - 47) == 11 ) - result += *v6; - v6 += 92; - --v5; - } - while ( v5 ); - } - return result; + int result; // eax + int v2; // ecx + int *v3; // edx + signed int v4; // esi + int v5; // edx + int *v6; // ecx + + result = 0; + v2 = pnum; + v3 = &plr[v2].SpdList[0]._ivalue; + v4 = MAXBELTITEMS; + do { + if (*(v3 - 47) == 11) { + result += *v3; + drawpanflag = 255; + } + v3 += 92; + --v4; + } while (v4); + v5 = plr[v2]._pNumInv; + if (v5 > 0) { + v6 = &plr[v2].InvList[0]._ivalue; + do { + if (*(v6 - 47) == 11) + result += *v6; + v6 += 92; + --v5; + } while (v5); + } + return result; } // 52571C: using guessed type int drawpanflag; int __cdecl DropItemBeforeTrig() { - if ( !TryInvPut() ) - return 0; - NetSendCmdPItem(TRUE, CMD_PUTITEM, cursmx, cursmy); - SetCursor(CURSOR_HAND); - return 1; + if (!TryInvPut()) + return 0; + NetSendCmdPItem(TRUE, CMD_PUTITEM, cursmx, cursmy); + SetCursor(CURSOR_HAND); + return 1; }