Browse Source

Merge pull request #909 from AJenbo/InitItems

Clean up InitItems
pull/88/head
Anders Jenbo 7 years ago committed by GitHub
parent
commit
4e11fad171
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 225
      Source/items.cpp

225
Source/items.cpp

@ -703,30 +703,28 @@ void AddInitItems()
void InitItems() void InitItems()
{ {
int *v0; // eax int i;
int v1; // edx
GetItemAttrs(0, IDI_GOLD, 1); GetItemAttrs(0, IDI_GOLD, 1);
numitems = 0; golditem = item[0];
qmemcpy(&golditem, item, sizeof(golditem));
golditem._iStatFlag = 1; golditem._iStatFlag = 1;
v0 = &item[0]._ix; numitems = 0;
do {
*(v0 - 1) = 0; for (i = 0; i < MAXITEMS; i++) {
*v0 = 0; item[i]._itype = 0;
v0[1] = 0; item[i]._ix = 0;
v0[2] = 0; item[i]._iy = 0;
*((_BYTE *)v0 + 36) = 0; item[i]._isin = 0;
v0[11] = 0; item[i]._iSelFlag = 0;
v0[10] = 0; item[i]._iIdentified = FALSE;
v0 += 92; item[i]._iPostDraw = 0;
} while ((signed int)v0 < (signed int)&item[MAXITEMS + 1]._ix); }
v1 = 0;
memset(itemactive, 0, sizeof(itemactive)); for (i = 0; i < MAXITEMS; i++) {
do { itemavail[i] = i;
itemavail[v1] = v1; itemactive[i] = 0;
++v1; }
} while (v1 < MAXITEMS);
if (!setlevel) { if (!setlevel) {
GetRndSeed(); GetRndSeed();
if (QuestStatus(QTYPE_INFRA)) if (QuestStatus(QTYPE_INFRA))
@ -736,6 +734,7 @@ void InitItems()
if (currlevel > 0u && currlevel < 0x10u) if (currlevel > 0u && currlevel < 0x10u)
AddInitItems(); AddInitItems();
} }
uitemflag = 0; uitemflag = 0;
} }
// 5CF31D: using guessed type char setlevel; // 5CF31D: using guessed type char setlevel;
@ -3813,14 +3812,6 @@ void PrintItemMisc(ItemStruct *x)
void PrintItemDetails(ItemStruct *x) void PrintItemDetails(ItemStruct *x)
{ {
ItemStruct *v1; // ebp
char v2; // cl
char v3; // cl
char v4; // al
unsigned char v5; // al
char v6; // al
v1 = x;
if (x->_iClass == 1) { if (x->_iClass == 1) {
if (x->_iMaxDur == 255) if (x->_iMaxDur == 255)
sprintf(tempstr, "damage: %i-%i Indestructible", x->_iMinDam, x->_iMaxDam); sprintf(tempstr, "damage: %i-%i Indestructible", x->_iMinDam, x->_iMaxDam);
@ -3828,45 +3819,40 @@ void PrintItemDetails(ItemStruct *x)
sprintf(tempstr, "damage: %i-%i Dur: %i/%i", x->_iMinDam, x->_iMaxDam, x->_iDurability, x->_iMaxDur); sprintf(tempstr, "damage: %i-%i Dur: %i/%i", x->_iMinDam, x->_iMaxDam, x->_iDurability, x->_iMaxDur);
AddPanelString(tempstr, 1); AddPanelString(tempstr, 1);
} }
if (v1->_iClass == 2) { if (x->_iClass == 2) {
if (v1->_iMaxDur == 255) if (x->_iMaxDur == 255)
sprintf(tempstr, "armor: %i Indestructible", v1->_iAC); sprintf(tempstr, "armor: %i Indestructible", x->_iAC);
else else
sprintf(tempstr, "armor: %i Dur: %i/%i", v1->_iAC, v1->_iDurability, v1->_iMaxDur); sprintf(tempstr, "armor: %i Dur: %i/%i", x->_iAC, x->_iDurability, x->_iMaxDur);
AddPanelString(tempstr, 1); AddPanelString(tempstr, 1);
} }
if (v1->_iMiscId == IMISC_STAFF && v1->_iMaxCharges) { if (x->_iMiscId == IMISC_STAFF && x->_iMaxCharges) {
sprintf(tempstr, "dam: %i-%i Dur: %i/%i", v1->_iMinDam, v1->_iMaxDam, v1->_iDurability, v1->_iMaxDur); sprintf(tempstr, "dam: %i-%i Dur: %i/%i", x->_iMinDam, x->_iMaxDam, x->_iDurability, x->_iMaxDur);
sprintf(tempstr, "Charges: %i/%i", v1->_iCharges, v1->_iMaxCharges); sprintf(tempstr, "Charges: %i/%i", x->_iCharges, x->_iMaxCharges);
AddPanelString(tempstr, 1); AddPanelString(tempstr, 1);
} }
v2 = v1->_iPrePower; if (x->_iPrePower != -1) {
if (v2 != -1) { PrintItemPower(x->_iPrePower, x);
PrintItemPower(v2, v1);
AddPanelString(tempstr, 1); AddPanelString(tempstr, 1);
} }
v3 = v1->_iSufPower; if (x->_iSufPower != -1) {
if (v3 != -1) { PrintItemPower(x->_iSufPower, x);
PrintItemPower(v3, v1);
AddPanelString(tempstr, 1); AddPanelString(tempstr, 1);
} }
if (v1->_iMagical == ITEM_QUALITY_UNIQUE) { if (x->_iMagical == ITEM_QUALITY_UNIQUE) {
AddPanelString("unique item", 1); AddPanelString("unique item", 1);
uitemflag = 1; uitemflag = 1;
qmemcpy(&curruitem, v1, sizeof(curruitem)); curruitem = *x;
} }
PrintItemMisc(v1); PrintItemMisc(x);
if ((unsigned char)v1->_iMinMag + v1->_iMinDex + v1->_iMinStr) { if (x->_iMinMag + x->_iMinDex + x->_iMinStr) {
strcpy(tempstr, "Required:"); strcpy(tempstr, "Required:");
v4 = v1->_iMinStr; if (x->_iMinStr)
if (v4) sprintf(tempstr, "%s %i Str", tempstr, x->_iMinStr);
sprintf(tempstr, "%s %i Str", tempstr, v4); if (x->_iMinMag)
v5 = v1->_iMinMag; sprintf(tempstr, "%s %i Mag", tempstr, x->_iMinMag);
if (v5) if (x->_iMinDex)
sprintf(tempstr, "%s %i Mag", tempstr, v5); sprintf(tempstr, "%s %i Dex", tempstr, x->_iMinDex);
v6 = v1->_iMinDex;
if (v6)
sprintf(tempstr, "%s %i Dex", tempstr, v6);
AddPanelString(tempstr, 1); AddPanelString(tempstr, 1);
} }
pinfoflag = TRUE; pinfoflag = TRUE;
@ -4147,11 +4133,11 @@ int RndSmithItem(int lvl)
void BubbleSwapItem(ItemStruct *a, ItemStruct *b) void BubbleSwapItem(ItemStruct *a, ItemStruct *b)
{ {
ItemStruct h; // [esp+8h] [ebp-170h] ItemStruct h;
qmemcpy(&h, a, sizeof(h)); h = *a;
qmemcpy(a, b, sizeof(ItemStruct)); *a = *b;
qmemcpy(b, &h, sizeof(ItemStruct)); *b = h;
} }
void SortSmith() void SortSmith()
@ -4181,26 +4167,24 @@ void SortSmith()
void SpawnSmith(int lvl) void SpawnSmith(int lvl)
{ {
ItemStruct *holdItem; int i, iCnt, idata;
int i, nsi, idata;
nsi = random(50, 10) + 10; iCnt = random(50, 10) + 10;
for (i = 0; i < nsi; i++) { for (i = 0; i < iCnt; i++) {
holdItem = &smithitem[i];
do { do {
item[0]._iSeed = GetRndSeed(); item[0]._iSeed = GetRndSeed();
SetRndSeed(item[0]._iSeed); SetRndSeed(item[0]._iSeed);
idata = RndSmithItem(lvl) - 1; idata = RndSmithItem(lvl) - 1;
GetItemAttrs(0, idata, lvl); GetItemAttrs(0, idata, lvl);
} while (item[0]._iIvalue > 140000); } while (item[0]._iIvalue > 140000);
qmemcpy(holdItem, item, sizeof(ItemStruct)); smithitem[i] = item[0];
holdItem->_iCreateInfo = lvl | 0x400; smithitem[i]._iCreateInfo = lvl | 0x400;
holdItem->_iIdentified = TRUE; smithitem[i]._iIdentified = TRUE;
holdItem->_iStatFlag = StoreStatOk(holdItem); smithitem[i]._iStatFlag = StoreStatOk(&smithitem[i]);
} }
for (i = nsi; i < 20; i++) { for (i = iCnt; i < 20; i++)
smithitem[i]._itype = -1; smithitem[i]._itype = -1;
}
SortSmith(); SortSmith();
} }
@ -4250,10 +4234,10 @@ int RndPremiumItem(int minlvl, int maxlvl)
void SpawnOnePremium(int i, int plvl) void SpawnOnePremium(int i, int plvl)
{ {
int itype; // esi int itype;
ItemStruct holditem; // [esp+Ch] [ebp-178h] ItemStruct holditem;
qmemcpy(&holditem, item, sizeof(ItemStruct)); holditem = item[0];
if (plvl > 30) if (plvl > 30)
plvl = 30; plvl = 30;
if (plvl < 1) if (plvl < 1)
@ -4265,16 +4249,16 @@ void SpawnOnePremium(int i, int plvl)
GetItemAttrs(0, itype, plvl); GetItemAttrs(0, itype, plvl);
GetItemBonus(0, itype, plvl >> 1, plvl, 1); GetItemBonus(0, itype, plvl >> 1, plvl, 1);
} while (item[0]._iIvalue > 140000); } while (item[0]._iIvalue > 140000);
qmemcpy(&premiumitem[i], item, sizeof(ItemStruct)); premiumitem[i] = item[0];
premiumitem[i]._iCreateInfo = plvl | 0x800; premiumitem[i]._iCreateInfo = plvl | 0x800;
premiumitem[i]._iIdentified = TRUE; premiumitem[i]._iIdentified = TRUE;
premiumitem[i]._iStatFlag = StoreStatOk(&premiumitem[i]); premiumitem[i]._iStatFlag = StoreStatOk(&premiumitem[i]);
qmemcpy(item, &holditem, sizeof(ItemStruct)); item[0] = holditem;
} }
void SpawnPremium(int lvl) void SpawnPremium(int lvl)
{ {
int i; // eax int i;
if (numpremium < 6) { if (numpremium < 6) {
for (i = 0; i < 6; i++) { for (i = 0; i < 6; i++) {
@ -4283,14 +4267,14 @@ void SpawnPremium(int lvl)
} }
numpremium = 6; numpremium = 6;
} }
for (i = premiumlevel; premiumlevel < lvl; i = premiumlevel) { while (premiumlevel < lvl) {
qmemcpy(premiumitem, &premiumitem[2], sizeof(ItemStruct)); premiumlevel++;
qmemcpy(&premiumitem[1], &premiumitem[3], sizeof(ItemStruct)); premiumitem[0] = premiumitem[2];
qmemcpy(&premiumitem[2], &premiumitem[4], sizeof(ItemStruct)); premiumitem[1] = premiumitem[3];
premiumlevel = i + 1; premiumitem[2] = premiumitem[4];
SpawnOnePremium(3, premiumlvladd[3] + i + 1); SpawnOnePremium(3, premiumlevel + premiumlvladd[3]);
qmemcpy(&premiumitem[4], &premiumitem[5], sizeof(ItemStruct)); premiumitem[4] = premiumitem[5];
SpawnOnePremium(5, premiumlvladd[5] + premiumlevel); SpawnOnePremium(5, premiumlevel + premiumlvladd[5]);
} }
} }
// 69FB38: using guessed type int talker; // 69FB38: using guessed type int talker;
@ -4386,60 +4370,47 @@ void WitchBookLevel(int ii)
void SpawnWitch(int lvl) void SpawnWitch(int lvl)
{ {
int v2; // ebp int i, iCnt;
int itype; // esi int idata, maxlvl;
int iblvl; // eax
signed int ii; // [esp+10h] [ebp-8h]
ItemStruct *itm; // [esp+14h] [ebp-4h]
GetItemAttrs(0, IDI_MANA, 1); GetItemAttrs(0, IDI_MANA, 1);
qmemcpy(witchitem, item, sizeof(ItemStruct)); witchitem[0] = item[0];
witchitem[0]._iCreateInfo = lvl; witchitem[0]._iCreateInfo = lvl;
witchitem[0]._iStatFlag = 1; witchitem[0]._iStatFlag = 1;
GetItemAttrs(0, IDI_FULLMANA, 1); GetItemAttrs(0, IDI_FULLMANA, 1);
qmemcpy(&witchitem[1], item, sizeof(ItemStruct)); witchitem[1] = item[0];
witchitem[1]._iCreateInfo = lvl; witchitem[1]._iCreateInfo = lvl;
witchitem[1]._iStatFlag = 1; witchitem[1]._iStatFlag = 1;
GetItemAttrs(0, IDI_PORTAL, 1); GetItemAttrs(0, IDI_PORTAL, 1);
qmemcpy(&witchitem[2], item, sizeof(ItemStruct)); witchitem[2] = item[0];
witchitem[2]._iCreateInfo = lvl; witchitem[2]._iCreateInfo = lvl;
witchitem[2]._iStatFlag = 1; witchitem[2]._iStatFlag = 1;
v2 = random(51, 8) + 10; iCnt = random(51, 8) + 10;
ii = 3;
if (v2 > 3) { for (i = 3; i < iCnt; i++) {
itm = &witchitem[3]; do {
while (1) {
item[0]._iSeed = GetRndSeed(); item[0]._iSeed = GetRndSeed();
SetRndSeed(item[0]._iSeed); SetRndSeed(item[0]._iSeed);
itype = RndWitchItem(lvl) - 1; idata = RndWitchItem(lvl) - 1;
GetItemAttrs(0, itype, lvl); GetItemAttrs(0, idata, lvl);
if (random(51, 100) > 5 || (iblvl = 2 * lvl, iblvl == -1)) { maxlvl = -1;
if (item[0]._iMiscId != IMISC_STAFF) if (random(51, 100) <= 5)
continue; maxlvl = 2 * lvl;
iblvl = 2 * lvl; if (maxlvl == -1 && item[0]._iMiscId == IMISC_STAFF)
if (iblvl == -1) maxlvl = 2 * lvl;
continue; if (maxlvl != -1)
} GetItemBonus(0, idata, maxlvl >> 1, maxlvl, 1);
GetItemBonus(0, itype, iblvl >> 1, iblvl, 1); } while (item[0]._iIvalue > 140000);
if (item[0]._iIvalue <= 140000) { witchitem[i] = item[0];
qmemcpy(itm, item, sizeof(ItemStruct)); witchitem[i]._iCreateInfo = lvl | 0x2000;
itm->_iIdentified = TRUE; witchitem[i]._iIdentified = TRUE;
itm->_iCreateInfo = lvl | 0x2000; WitchBookLevel(i);
WitchBookLevel(ii); witchitem[i]._iStatFlag = StoreStatOk(&witchitem[i]);
++ii;
itm->_iStatFlag = StoreStatOk(itm);
++itm;
if (ii >= v2)
break;
}
}
}
if (v2 < 20) {
do {
witchitem[v2]._itype = -1;
v2++;
} while (v2 < 20);
} }
for (i = iCnt; i < 20; i++)
witchitem[i]._itype = -1;
SortWitch(); SortWitch();
} }
@ -4472,7 +4443,7 @@ void SpawnBoy(int lvl)
GetItemAttrs(0, itype, lvl); GetItemAttrs(0, itype, lvl);
GetItemBonus(0, itype, lvl, 2 * lvl, 1); GetItemBonus(0, itype, lvl, 2 * lvl, 1);
} while (item[0]._iIvalue > 90000); } while (item[0]._iIvalue > 90000);
qmemcpy(&boyitem, item, sizeof(boyitem)); boyitem = item[0];
boyitem._iCreateInfo = lvl | 0x1000; boyitem._iCreateInfo = lvl | 0x1000;
boyitem._iIdentified = TRUE; boyitem._iIdentified = TRUE;
boyitem._iStatFlag = StoreStatOk(&boyitem); boyitem._iStatFlag = StoreStatOk(&boyitem);
@ -4630,7 +4601,7 @@ void SpawnHealer(int lvl)
void SpawnStoreGold() void SpawnStoreGold()
{ {
GetItemAttrs(0, IDI_GOLD, 1); GetItemAttrs(0, IDI_GOLD, 1);
qmemcpy(&golditem, item, sizeof(golditem)); golditem = item[0];
golditem._iStatFlag = 1; golditem._iStatFlag = 1;
} }

Loading…
Cancel
Save