Browse Source

Cleaned up `CreatePlrItems`.

pull/4/head
Dennis Duda 8 years ago
parent
commit
84617bc1cc
  1. 134
      Source/items.cpp

134
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)

Loading…
Cancel
Save