Browse Source

♻️ Leverage 'Damage' for '_iL[Min|Max]Dam' 'Item' fields

julealgon/Enhancements/DamageStruct
Juliano Leal Goncalves 5 years ago
parent
commit
0eeb7af0f2
  1. 37
      Source/items.cpp
  2. 3
      Source/items.h
  3. 10
      Source/loadsave.cpp
  4. 4
      test/pack_test.cpp

37
Source/items.cpp

@ -833,14 +833,12 @@ int SaveItemPower(Item &item, const ItemPower &power)
item._iFlags |= ISPL_FIREDAM;
item._iFlags &= ~ISPL_LIGHTDAM;
item._iFDamage = { power.param1, power.param2 };
item._iLMinDam = 0;
item._iLMaxDam = 0;
item._iLDamage = { 0 };
break;
case IPL_LIGHTDAM:
item._iFlags |= ISPL_LIGHTDAM;
item._iFlags &= ~ISPL_FIREDAM;
item._iLMinDam = power.param1;
item._iLMaxDam = power.param2;
item._iLDamage = { power.param1, power.param2 };
item._iFDamage = { 0 };
break;
case IPL_STR:
@ -929,21 +927,18 @@ int SaveItemPower(Item &item, const ItemPower &power)
item._iFlags |= ISPL_FIRE_ARROWS;
item._iFlags &= ~ISPL_LIGHT_ARROWS;
item._iFDamage = { power.param1, power.param2 };
item._iLMinDam = 0;
item._iLMaxDam = 0;
item._iLDamage = { 0 };
break;
case IPL_LIGHT_ARROWS:
item._iFlags |= ISPL_LIGHT_ARROWS;
item._iFlags &= ~ISPL_FIRE_ARROWS;
item._iLMinDam = power.param1;
item._iLMaxDam = power.param2;
item._iLDamage = { power.param1, power.param2 };
item._iFDamage = { 0 };
break;
case IPL_FIREBALL:
item._iFlags |= (ISPL_LIGHT_ARROWS | ISPL_FIRE_ARROWS);
item._iFDamage = { power.param1, power.param2 };
item._iLMinDam = 0;
item._iLMaxDam = 0;
item._iLDamage = { 0 };
break;
case IPL_THORNS:
item._iFlags |= ISPL_THORNS;
@ -1048,14 +1043,12 @@ int SaveItemPower(Item &item, const ItemPower &power)
case IPL_ADDACLIFE:
item._iFlags |= (ISPL_LIGHT_ARROWS | ISPL_FIRE_ARROWS);
item._iFDamage = { power.param1, power.param2 };
item._iLMinDam = 1;
item._iLMaxDam = 0;
item._iLDamage = { 1, 0 };
break;
case IPL_ADDMANAAC:
item._iFlags |= (ISPL_LIGHTDAM | ISPL_FIREDAM);
item._iFDamage = { power.param1, power.param2 };
item._iLMinDam = 2;
item._iLMaxDam = 0;
item._iLDamage = { 2, 0 };
break;
case IPL_FIRERESCLVL:
item._iPLFR = 30 - Players[MyPlayerId]._pLevel;
@ -2689,8 +2682,8 @@ void CalcPlrItemVals(Player &player, bool loadgfx)
enac += item._iPLEnAc;
fmin += item._iFDamage.minValue;
fmax += item._iFDamage.maxValue;
lmin += item._iLMinDam;
lmax += item._iLMaxDam;
lmin += item._iLDamage.minValue;
lmax += item._iLDamage.maxValue;
}
}
}
@ -3880,10 +3873,10 @@ void PrintItemPower(char plidx, Item *x)
strcpy(tempstr, fmt::format(_("Fire hit damage: {:d}-{:d}"), x->_iFDamage.minValue, x->_iFDamage.maxValue).c_str());
break;
case IPL_LIGHTDAM:
if (x->_iLMinDam == x->_iLMaxDam)
strcpy(tempstr, fmt::format(_("Lightning hit damage: {:d}"), x->_iLMinDam).c_str());
if (x->_iLDamage.IsFixed())
strcpy(tempstr, fmt::format(_("Lightning hit damage: {:d}"), x->_iLDamage.minValue).c_str());
else
strcpy(tempstr, fmt::format(_("Lightning hit damage: {:d}-{:d}"), x->_iLMinDam, x->_iLMaxDam).c_str());
strcpy(tempstr, fmt::format(_("Lightning hit damage: {:d}-{:d}"), x->_iLDamage.minValue, x->_iLDamage.maxValue).c_str());
break;
case IPL_STR:
case IPL_STR_CURSE:
@ -3942,10 +3935,10 @@ void PrintItemPower(char plidx, Item *x)
strcpy(tempstr, fmt::format(_("fire arrows damage: {:d}-{:d}"), x->_iFDamage.minValue, x->_iFDamage.maxValue).c_str());
break;
case IPL_LIGHT_ARROWS:
if (x->_iLMinDam == x->_iLMaxDam)
strcpy(tempstr, fmt::format(_("lightning arrows damage {:d}"), x->_iLMinDam).c_str());
if (x->_iLDamage.IsFixed())
strcpy(tempstr, fmt::format(_("lightning arrows damage {:d}"), x->_iLDamage.minValue).c_str());
else
strcpy(tempstr, fmt::format(_("lightning arrows damage {:d}-{:d}"), x->_iLMinDam, x->_iLMaxDam).c_str());
strcpy(tempstr, fmt::format(_("lightning arrows damage {:d}-{:d}"), x->_iLDamage.minValue, x->_iLDamage.maxValue).c_str());
break;
case IPL_FIREBALL:
if (x->_iFDamage.IsFixed())

3
Source/items.h

@ -224,8 +224,7 @@ struct Item {
/** Unique item ID, used as an index into UniqueItemList */
int _iUid;
Damage _iFDamage;
int16_t _iLMinDam;
int16_t _iLMaxDam;
Damage _iLDamage;
int16_t _iPLEnAc;
enum item_effect_type _iPrePower;
enum item_effect_type _iSufPower;

10
Source/loadsave.cpp

@ -272,8 +272,10 @@ void LoadItemData(LoadHelper &file, Item &item)
auto maxFireDamage = file.NextLE<int32_t>();
item._iFDamage = { minFireDamage, maxFireDamage };
item._iLMinDam = file.NextLE<int32_t>();
item._iLMaxDam = file.NextLE<int32_t>();
auto minLightningDamage = file.NextLE<int32_t>();
auto maxLightningDamage = file.NextLE<int32_t>();
item._iLDamage = { minLightningDamage, maxLightningDamage };
item._iPLEnAc = file.NextLE<int32_t>();
item._iPrePower = static_cast<item_effect_type>(file.NextLE<int8_t>());
item._iSufPower = static_cast<item_effect_type>(file.NextLE<int8_t>());
@ -957,8 +959,8 @@ void SaveItem(SaveHelper &file, const Item &item)
file.WriteLE<int32_t>(item._iUid);
file.WriteLE<int32_t>(item._iFDamage.minValue);
file.WriteLE<int32_t>(item._iFDamage.maxValue);
file.WriteLE<int32_t>(item._iLMinDam);
file.WriteLE<int32_t>(item._iLMaxDam);
file.WriteLE<int32_t>(item._iLDamage.minValue);
file.WriteLE<int32_t>(item._iLDamage.maxValue);
file.WriteLE<int32_t>(item._iPLEnAc);
file.WriteLE<int8_t>(item._iPrePower);
file.WriteLE<int8_t>(item._iSufPower);

4
test/pack_test.cpp

@ -122,8 +122,8 @@ static void CompareItems(const Item *item1, const TestItemStruct *item2)
EXPECT_EQ(item1->_iUid, item2->_iUid);
EXPECT_EQ(item1->_iFDamage.minValue, item2->_iFMinDam);
EXPECT_EQ(item1->_iFDamage.maxValue, item2->_iFMaxDam);
EXPECT_EQ(item1->_iLMinDam, item2->_iLMinDam);
EXPECT_EQ(item1->_iLMaxDam, item2->_iLMaxDam);
EXPECT_EQ(item1->_iLDamage.minValue, item2->_iLMinDam);
EXPECT_EQ(item1->_iLDamage.maxValue, item2->_iLMaxDam);
EXPECT_EQ(item1->_iPrePower, item2->_iPrePower);
EXPECT_EQ(item1->_iSufPower, item2->_iSufPower);
EXPECT_EQ(item1->_iMinStr, item2->_iMinStr);

Loading…
Cancel
Save