diff --git a/Source/items.cpp b/Source/items.cpp index fa12b2f07..0643b2c3d 100644 --- a/Source/items.cpp +++ b/Source/items.cpp @@ -1334,387 +1334,310 @@ int PLVal(int pv, int p1, int p2, int minv, int maxv) void SaveItemPower(int i, int power, int param1, int param2, int minval, int maxval, int multval) { - int v7; // edi - int v8; // esi - int v9; // eax - int v10; // ebx - int *v11; // eax - int *v12; // eax - int v13; // edi - int v14; // eax - int v15; // edi - int v16; // eax - int v17; // eax - int v18; // ecx - int v19; // edx - int v20; // edi - int *v21; // edx - int v22; // eax - int v23; // eax - int v24; // eax - int v25; // eax - int v26; // eax - int v27; // eax - int v28; // ecx - int *v29; // eax - int v30; // ecx - int *v31; // eax - int v32; // ecx - int v33; // eax - int v34; // ST18_4 - int v35; // eax - int v36; // ecx - int v37; // edx - signed int v38; // ecx - int v39; // eax - int v40; // eax - int v41; // ecx - int *v42; // eax - int v43; // esi - - v7 = power; - v8 = i; - v9 = RndPL(param1, param2); - v10 = v9; - switch (v7) { + int r, r2; + + r = RndPL(param1, param2); + switch (power) { case IPL_TOHIT: - v11 = &item[v8]._iPLToHit; - goto LABEL_115; + item[i]._iPLToHit += r; + break; case IPL_TOHIT_CURSE: - v12 = &item[v8]._iPLToHit; - goto LABEL_62; + item[i]._iPLToHit -= r; + break; case IPL_DAMP: - v11 = &item[v8]._iPLDam; - goto LABEL_115; + item[i]._iPLDam += r; + break; case IPL_DAMP_CURSE: - v12 = &item[v8]._iPLDam; - goto LABEL_62; + item[i]._iPLDam -= r; + break; case IPL_TOHIT_DAMP: - v10 = RndPL(param1, param2); - v13 = v8; - item[v13]._iPLDam += v10; + r = RndPL(param1, param2); + item[i]._iPLDam += r; if (param1 == 20) - v14 = RndPL(1, 5); - else - v14 = param1; + r2 = RndPL(1, 5); if (param1 == 36) - v14 = RndPL(6, 10); + r2 = RndPL(6, 10); if (param1 == 51) - v14 = RndPL(11, 15); + r2 = RndPL(11, 15); if (param1 == 66) - v14 = RndPL(16, 20); + r2 = RndPL(16, 20); if (param1 == 81) - v14 = RndPL(21, 30); + r2 = RndPL(21, 30); if (param1 == 96) - v14 = RndPL(31, 40); + r2 = RndPL(31, 40); if (param1 == 111) - v14 = RndPL(41, 50); + r2 = RndPL(41, 50); if (param1 == 126) - v14 = RndPL(51, 75); + r2 = RndPL(51, 75); if (param1 == 151) - v14 = RndPL(76, 100); - item[v13]._iPLToHit += v14; + r2 = RndPL(76, 100); + item[i]._iPLToHit += r2; break; case IPL_TOHIT_DAMP_CURSE: - v15 = v8; - item[v15]._iPLDam -= v9; + item[i]._iPLDam -= r; if (param1 == 25) - v16 = RndPL(1, 5); - else - v16 = param1; + r2 = RndPL(1, 5); if (param1 == 50) - v16 = RndPL(6, 10); - item[v15]._iPLToHit -= v16; + r2 = RndPL(6, 10); + item[i]._iPLToHit -= r2; break; case IPL_ACP: - v11 = &item[v8]._iPLAC; - goto LABEL_115; + item[i]._iPLAC += r; + break; case IPL_ACP_CURSE: - v12 = &item[v8]._iPLAC; - goto LABEL_62; + item[i]._iPLAC -= r; + break; + case IPL_SETAC: + item[i]._iAC = r; + break; + case IPL_AC_CURSE: + item[i]._iAC -= r; + break; case IPL_FIRERES: - v11 = &item[v8]._iPLFR; - goto LABEL_115; + item[i]._iPLFR += r; + break; case IPL_LIGHTRES: - v11 = &item[v8]._iPLLR; - goto LABEL_115; + item[i]._iPLLR += r; + break; case IPL_MAGICRES: - v11 = &item[v8]._iPLMR; - goto LABEL_115; + item[i]._iPLMR += r; + break; case IPL_ALLRES: - v17 = v8; - item[v17]._iPLFR += v10; - v18 = item[v8]._iPLFR; - item[v17]._iPLLR += v10; - item[v17]._iPLMR += v10; - v19 = item[v8]._iPLLR; - v20 = item[v8]._iPLMR; - if (v18 < 0) - item[v17]._iPLFR = 0; - if (v19 < 0) - item[v17]._iPLLR = 0; - if (v20 < 0) - item[v17]._iPLMR = 0; + item[i]._iPLFR += r; + item[i]._iPLLR += r; + item[i]._iPLMR += r; + if (item[i]._iPLFR < 0) + item[i]._iPLFR = 0; + if (item[i]._iPLLR < 0) + item[i]._iPLLR = 0; + if (item[i]._iPLMR < 0) + item[i]._iPLMR = 0; break; case IPL_SPLLVLADD: - item[v8]._iSplLvlAdd = v9; + item[i]._iSplLvlAdd = r; break; case IPL_CHARGES: - v21 = &item[v8]._iCharges; - v22 = param1 * *v21; - *v21 = v22; - item[v8]._iMaxCharges = v22; + item[i]._iCharges *= param1; + item[i]._iMaxCharges = item[i]._iCharges; + break; + case IPL_SPELL: + item[i]._iSpell = param1; + item[i]._iCharges = param1; + item[i]._iMaxCharges = param2; break; case IPL_FIREDAM: - v24 = v8; - item[v24]._iFlags |= 0x10u; - goto LABEL_77; + item[i]._iFlags |= ISPL_FIREDAM; + item[i]._iFMinDam = param1; + item[i]._iFMaxDam = param2; + break; case IPL_LIGHTDAM: - v25 = v8; - item[v25]._iFlags |= 0x20u; - goto LABEL_79; + item[i]._iFlags |= ISPL_LIGHTDAM; + item[i]._iLMinDam = param1; + item[i]._iLMaxDam = param2; + break; case IPL_STR: - v11 = &item[v8]._iPLStr; - goto LABEL_115; + item[i]._iPLStr += r; + break; case IPL_STR_CURSE: - v12 = &item[v8]._iPLStr; - goto LABEL_62; + item[i]._iPLStr -= r; + break; case IPL_MAG: - v11 = &item[v8]._iPLMag; - goto LABEL_115; + item[i]._iPLMag += r; + break; case IPL_MAG_CURSE: - v12 = &item[v8]._iPLMag; - goto LABEL_62; + item[i]._iPLMag -= r; + break; case IPL_DEX: - v11 = &item[v8]._iPLDex; - goto LABEL_115; + item[i]._iPLDex += r; + break; case IPL_DEX_CURSE: - v12 = &item[v8]._iPLDex; - goto LABEL_62; + item[i]._iPLDex -= r; + break; case IPL_VIT: - v11 = &item[v8]._iPLVit; - goto LABEL_115; + item[i]._iPLVit += r; + break; case IPL_VIT_CURSE: - v12 = &item[v8]._iPLVit; - goto LABEL_62; + item[i]._iPLVit -= r; + break; case IPL_ATTRIBS: - v26 = v8; - item[v26]._iPLStr += v10; - item[v26]._iPLMag += v10; - item[v26]._iPLDex += v10; - item[v26]._iPLVit += v10; + item[i]._iPLStr += r; + item[i]._iPLMag += r; + item[i]._iPLDex += r; + item[i]._iPLVit += r; break; case IPL_ATTRIBS_CURSE: - v27 = v8; - item[v27]._iPLStr -= v10; - item[v27]._iPLMag -= v10; - item[v27]._iPLDex -= v10; - item[v27]._iPLVit -= v10; + item[i]._iPLStr -= r; + item[i]._iPLMag -= r; + item[i]._iPLDex -= r; + item[i]._iPLVit -= r; break; - case IPL_GETHIT_CURSE: - v11 = &item[v8]._iPLGetHit; - goto LABEL_115; case IPL_GETHIT: - v12 = &item[v8]._iPLGetHit; - goto LABEL_62; + item[i]._iPLGetHit += r; + break; + case IPL_GETHIT_CURSE: + item[i]._iPLGetHit -= r; + break; case IPL_LIFE: - v28 = v9 << 6; - v29 = &item[v8]._iPLHP; - goto LABEL_73; + item[i]._iPLHP += r << 6; + break; case IPL_LIFE_CURSE: - v30 = v9 << 6; - v31 = &item[v8]._iPLHP; - goto LABEL_75; + item[i]._iPLHP -= r << 6; + break; case IPL_MANA: - item[v8]._iPLMana += v9 << 6; - goto LABEL_92; + item[i]._iPLMana += r << 6; + drawmanaflag = TRUE; + break; case IPL_MANA_CURSE: - item[v8]._iPLMana -= v9 << 6; - goto LABEL_92; + item[i]._iPLMana -= r << 6; + drawmanaflag = TRUE; + break; case IPL_DUR: - v32 = v8; - v33 = item[v8]._iMaxDur; - v34 = v33; - v35 = v10 * v33 / 100; - item[v32]._iDurability += v35; - item[v32]._iMaxDur = v35 + v34; + r2 = r * item[i]._iMaxDur / 100; + item[i]._iMaxDur += r2; + item[i]._iDurability += r2; break; case IPL_DUR_CURSE: - v36 = v8; - v37 = item[v8]._iMaxDur - v9 * item[v8]._iMaxDur / 100; - item[v8]._iMaxDur = v37; - if (v37 < 1) - item[v36]._iMaxDur = 1; - item[v36]._iDurability = item[v36]._iMaxDur; + item[i]._iMaxDur -= r * item[i]._iMaxDur / 100; + if (item[i]._iMaxDur < 1) + item[i]._iMaxDur = 1; + item[i]._iDurability = item[i]._iMaxDur; break; case IPL_INDESTRUCTIBLE: - v38 = DUR_INDESTRUCTIBLE; - goto LABEL_119; + item[i]._iDurability = 255; + item[i]._iMaxDur = 255; + break; case IPL_LIGHT: - v28 = param1; - v29 = &item[v8]._iPLLight; - LABEL_73: - *v29 += v28; + item[i]._iPLLight += param1; break; case IPL_LIGHT_CURSE: - v30 = param1; - v31 = &item[v8]._iPLLight; - LABEL_75: - *v31 -= v30; + item[i]._iPLLight -= param1; break; case IPL_FIRE_ARROWS: - v24 = v8; - item[v24]._iFlags |= 8u; - LABEL_77: - item[v24]._iFMinDam = param1; - item[v24]._iFMaxDam = param2; + item[i]._iFlags |= ISPL_FIRE_ARROWS; + item[i]._iFMinDam = param1; + item[i]._iFMaxDam = param2; break; case IPL_LIGHT_ARROWS: - v25 = v8; - _HIBYTE(item[v8]._iFlags) |= 2u; - LABEL_79: - item[v25]._iLMinDam = param1; - item[v25]._iLMaxDam = param2; - break; - case IPL_INVCURS: - item[v8]._iCurs = param1; + item[i]._iFlags |= ISPL_LIGHT_ARROWS; + item[i]._iLMinDam = param1; + item[i]._iLMaxDam = param2; break; case IPL_THORNS: - _HIBYTE(item[v8]._iFlags) |= 4u; + item[i]._iFlags |= ISPL_THORNS; break; case IPL_NOMANA: - _HIBYTE(item[v8]._iFlags) |= 8u; - goto LABEL_92; + item[i]._iFlags |= ISPL_NOMANA; + drawmanaflag = TRUE; + break; case IPL_NOHEALPLR: - BYTE1(item[v8]._iFlags) |= 1u; + item[i]._iFlags |= ISPL_NOHEALPLR; break; case IPL_ABSHALFTRAP: - _HIBYTE(item[v8]._iFlags) |= 0x10u; + item[i]._iFlags |= ISPL_ABSHALFTRAP; break; case IPL_KNOCKBACK: - BYTE1(item[v8]._iFlags) |= 8u; + item[i]._iFlags |= ISPL_KNOCKBACK; + break; + case IPL_3XDAMVDEM: + item[i]._iFlags |= ISPL_3XDAMVDEM; + break; + case IPL_ALLRESZERO: + item[i]._iFlags |= ISPL_ALLRESZERO; break; case IPL_NOHEALMON: - BYTE1(item[v8]._iFlags) |= 0x10u; + item[i]._iFlags |= ISPL_NOHEALMON; break; case IPL_STEALMANA: if (param1 == 3) - BYTE1(item[v8]._iFlags) |= 0x20u; + item[i]._iFlags |= ISPL_STEALMANA_3; if (param1 == 5) - BYTE1(item[v8]._iFlags) |= 0x40u; - LABEL_92: + item[i]._iFlags |= ISPL_STEALMANA_5; drawmanaflag = TRUE; break; case IPL_STEALLIFE: if (param1 == 3) - BYTE1(item[v8]._iFlags) |= 0x80u; + item[i]._iFlags |= ISPL_STEALLIFE_3; if (param1 == 5) - BYTE2(item[v8]._iFlags) |= 1u; + item[i]._iFlags |= ISPL_STEALLIFE_5; drawhpflag = TRUE; break; case IPL_TARGAC: - v11 = &item[v8]._iPLEnAc; - goto LABEL_115; + item[i]._iPLEnAc += r; + break; case IPL_FASTATTACK: if (param1 == 1) - BYTE2(item[v8]._iFlags) |= 2u; + item[i]._iFlags |= ISPL_QUICKATTACK; if (param1 == 2) - BYTE2(item[v8]._iFlags) |= 4u; + item[i]._iFlags |= ISPL_FASTATTACK; if (param1 == 3) - BYTE2(item[v8]._iFlags) |= 8u; + item[i]._iFlags |= ISPL_FASTERATTACK; if (param1 == 4) - BYTE2(item[v8]._iFlags) |= 0x10u; + item[i]._iFlags |= ISPL_FASTESTATTACK; break; case IPL_FASTRECOVER: if (param1 == 1) - BYTE2(item[v8]._iFlags) |= 0x20u; + item[i]._iFlags |= ISPL_FASTRECOVER; if (param1 == 2) - BYTE2(item[v8]._iFlags) |= 0x40u; + item[i]._iFlags |= ISPL_FASTERRECOVER; if (param1 == 3) - BYTE2(item[v8]._iFlags) |= 0x80u; + item[i]._iFlags |= ISPL_FASTESTRECOVER; break; case IPL_FASTBLOCK: - _HIBYTE(item[v8]._iFlags) |= 1u; + item[i]._iFlags |= ISPL_FASTBLOCK; break; case IPL_DAMMOD: - v11 = &item[v8]._iPLDamMod; - LABEL_115: - *v11 += v10; + item[i]._iPLDamMod += r; break; case IPL_RNDARROWVEL: - item[v8]._iFlags |= 4u; + item[i]._iFlags |= ISPL_RNDARROWVEL; break; case IPL_SETDAM: - v39 = v8; - item[v39]._iMinDam = param1; - item[v39]._iMaxDam = param2; + item[i]._iMinDam = param1; + item[i]._iMaxDam = param2; break; case IPL_SETDUR: - v38 = param1; - LABEL_119: - v40 = v8; - item[v40]._iDurability = v38; - item[v40]._iMaxDur = v38; - break; - case IPL_NOMINSTR: - item[v8]._iMinStr = 0; - break; - case IPL_SPELL: - v23 = v8; - item[v23]._iSpell = param1; - item[v23]._iCharges = param1; - item[v23]._iMaxCharges = param2; + item[i]._iDurability = param1; + item[i]._iMaxDur = param1; break; case IPL_FASTSWING: - BYTE2(item[v8]._iFlags) |= 8u; + item[i]._iFlags |= ISPL_FASTERATTACK; break; case IPL_ONEHAND: - item[v8]._iLoc = ILOC_ONEHAND; - break; - case IPL_3XDAMVDEM: - _HIBYTE(item[v8]._iFlags) |= 0x40u; - break; - case IPL_ALLRESZERO: - _HIBYTE(item[v8]._iFlags) |= 0x80u; + item[i]._iLoc = ILOC_ONEHAND; break; case IPL_DRAINLIFE: - item[v8]._iFlags |= 0x40u; + item[i]._iFlags |= ISPL_DRAINLIFE; break; case IPL_RNDSTEALLIFE: - item[v8]._iFlags |= 2u; + item[i]._iFlags |= ISPL_RNDSTEALLIFE; break; case IPL_INFRAVISION: - item[v8]._iFlags |= 1u; + item[i]._iFlags |= ISPL_INFRAVISION; break; - case IPL_SETAC: - item[v8]._iAC = v9; + case IPL_NOMINSTR: + item[i]._iMinStr = 0; + break; + case IPL_INVCURS: + item[i]._iCurs = param1; break; case IPL_ADDACLIFE: - item[v8]._iPLHP = (plr[myplr]._pIBonusAC + plr[myplr]._pIAC + plr[myplr]._pDexterity / 5) << 6; + item[i]._iPLHP = (plr[myplr]._pIBonusAC + plr[myplr]._pIAC + plr[myplr]._pDexterity / 5) << 6; break; case IPL_ADDMANAAC: - item[v8]._iAC += (plr[myplr]._pMaxManaBase >> 6) / 10; + item[i]._iAC += (plr[myplr]._pMaxManaBase >> 6) / 10; break; case IPL_FIRERESCLVL: - v41 = 30 - plr[myplr]._pLevel; - v42 = &item[v8]._iPLFR; - *v42 = v41; - if (v41 < 0) - *v42 = 0; - break; - case IPL_AC_CURSE: - v12 = &item[v8]._iAC; - LABEL_62: - *v12 -= v10; + item[i]._iPLFR = 30 - plr[myplr]._pLevel; + if (item[i]._iPLFR < 0) + item[i]._iPLFR = 0; break; } - v43 = v8; - if (item[v43]._iVAdd1 || item[v43]._iVMult1) { - item[v43]._iVAdd2 = PLVal(v10, param1, param2, minval, maxval); - item[v43]._iVMult2 = multval; + if (item[i]._iVAdd1 || item[i]._iVMult1) { + item[i]._iVAdd2 = PLVal(r, param1, param2, minval, maxval); + item[i]._iVMult2 = multval; } else { - item[v43]._iVAdd1 = PLVal(v10, param1, param2, minval, maxval); - item[v43]._iVMult1 = multval; + item[i]._iVAdd1 = PLVal(r, param1, param2, minval, maxval); + item[i]._iVMult1 = multval; } }