diff --git a/Source/items.cpp b/Source/items.cpp index f12df97ac..619b424fe 100644 --- a/Source/items.cpp +++ b/Source/items.cpp @@ -1519,83 +1519,87 @@ void __fastcall SetPlrHandGoldCurs(ItemStruct *h) void __fastcall CreatePlrItems(int p) { - int v1; // ebx - int *v2; // eax - signed int v3; // ecx - int *v4; // eax - signed int v5; // ecx - int *v6; // eax - signed int v7; // ecx - int player_numa; // [esp+Ch] [ebp-4h] - - player_numa = p; - v1 = p; - v2 = &plr[p].InvBody[0]._itype; - v3 = 7; - do + int i; + for ( i = 0; i < NUM_INVLOC; i++ ) { - *v2 = -1; - v2 += 92; - --v3; + plr[p].InvBody[i]._itype = ITYPE_NONE; } - while ( v3 ); - memset(plr[v1].InvGrid, 0, 0x28u); - v4 = &plr[v1].InvList[0]._itype; - v5 = 40; - do + + // for now this generates a `rep stosd` loop (10xDWORD) instead of a memset call + // probably because of alignment differences or something similar + // it's also interesting that IDA still shows it as memset instead of memset32. + for ( i = 0; i < sizeof(plr[p].InvGrid); i++) { + plr[p].InvGrid[i] = 0; + } + + // TODO: define/const for that 40, something like NUM_MAX_INV_ITEMS + for ( i = 0; i < 40; i++ ) { - *v4 = -1; - v4 += 92; - --v5; + plr[p].InvList[i]._itype = ITYPE_NONE; } - while ( v5 ); - plr[v1]._pNumInv = 0; - v6 = &plr[v1].SpdList[0]._itype; - v7 = 8; - do + + plr[p]._pNumInv = 0; + + // TODO: define/const for that 8 + for ( i = 0; i < 8; i++ ) { - *v6 = -1; - v6 += 92; - --v7; + plr[p].SpdList[i]._itype = ITYPE_NONE; } - while ( v7 ); - switch ( _LOBYTE(plr[v1]._pClass) ) + + switch ( plr[p]._pClass ) { case UI_WARRIOR: - SetPlrHandItem(&plr[v1].InvBody[4], IDI_WARRIOR); - GetPlrHandSeed(&plr[v1].InvBody[4]); - SetPlrHandItem(&plr[v1].InvBody[5], IDI_WARRSHLD); - GetPlrHandSeed(&plr[v1].InvBody[5]); - SetPlrHandItem(&plr[v1].HoldItem, IDI_WARRCLUB); - GetPlrHandSeed(&plr[v1].HoldItem); - AutoPlace(player_numa, 0, 1, 3, 1); - goto LABEL_13; + SetPlrHandItem(&plr[p].InvBody[4], IDI_WARRIOR); + GetPlrHandSeed(&plr[p].InvBody[4]); + + SetPlrHandItem(&plr[p].InvBody[5], IDI_WARRSHLD); + GetPlrHandSeed(&plr[p].InvBody[5]); + + SetPlrHandItem(&plr[p].HoldItem, IDI_WARRCLUB); + GetPlrHandSeed(&plr[p].HoldItem); + AutoPlace(p, 0, 1, 3, 1); + + SetPlrHandItem(&plr[p].SpdList[0], IDI_HEAL); + GetPlrHandSeed(&plr[p].SpdList[0]); + + SetPlrHandItem(&plr[p].SpdList[1], IDI_HEAL); + GetPlrHandSeed(&plr[p].SpdList[1]); + break; case UI_ROGUE: - SetPlrHandItem(&plr[v1].InvBody[4], IDI_ROGUE); - GetPlrHandSeed(&plr[v1].InvBody[4]); -LABEL_13: - SetPlrHandItem(plr[v1].SpdList, IDI_HEAL); - GetPlrHandSeed(plr[v1].SpdList); - SetPlrHandItem(&plr[v1].SpdList[1], IDI_HEAL); - goto LABEL_14; + SetPlrHandItem(&plr[p].InvBody[4], IDI_ROGUE); + GetPlrHandSeed(&plr[p].InvBody[4]); + + SetPlrHandItem(&plr[p].SpdList[0], IDI_HEAL); + GetPlrHandSeed(&plr[p].SpdList[0]); + + SetPlrHandItem(&plr[p].SpdList[1], IDI_HEAL); + GetPlrHandSeed(&plr[p].SpdList[1]); + break; case UI_SORCERER: - SetPlrHandItem(&plr[v1].InvBody[4], IDI_SORCEROR); - GetPlrHandSeed(&plr[v1].InvBody[4]); - SetPlrHandItem(plr[v1].SpdList, IDI_MANA); - GetPlrHandSeed(plr[v1].SpdList); - SetPlrHandItem(&plr[v1].SpdList[1], IDI_MANA); -LABEL_14: - GetPlrHandSeed(&plr[v1].SpdList[1]); + SetPlrHandItem(&plr[p].InvBody[4], IDI_SORCEROR); + GetPlrHandSeed(&plr[p].InvBody[4]); + + SetPlrHandItem(&plr[p].SpdList[0], IDI_MANA); + GetPlrHandSeed(&plr[p].SpdList[0]); + + SetPlrHandItem(&plr[p].SpdList[1], IDI_MANA); + GetPlrHandSeed(&plr[p].SpdList[1]); break; } - SetPlrHandItem(&plr[v1].HoldItem, IDI_GOLD); - GetPlrHandSeed(&plr[v1].HoldItem); - plr[v1].HoldItem._iCurs = 4; - plr[v1].HoldItem._ivalue = 100; - plr[v1]._pGold = 100; - qmemcpy((char *)&plr[0].InvList[plr[v1]._pNumInv++] + v1 * 21720, &plr[v1].HoldItem, 0x170u); - plr[v1].InvGrid[30] = plr[v1]._pNumInv; - CalcPlrItemVals(player_numa, 0); + + SetPlrHandItem(&plr[p].HoldItem, IDI_GOLD); + GetPlrHandSeed(&plr[p].HoldItem); + + plr[p].HoldItem._iCurs = 4; + plr[p].HoldItem._ivalue = 100; + plr[p]._pGold = 100; + + plr[p].InvList[plr[p]._pNumInv] = plr[p].HoldItem; + plr[p]._pNumInv++; + + plr[p].InvGrid[30] = plr[p]._pNumInv; + + CalcPlrItemVals(p, FALSE); } bool __fastcall ItemSpaceOk(int i, int j)