aboutsummaryrefslogtreecommitdiff
path: root/engines/xeen/combat.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2018-03-31 12:37:36 -0400
committerPaul Gilbert2018-03-31 12:37:36 -0400
commit31bcb0961981e3e647b2de912927145e8e9429aa (patch)
tree0bc9f8c159820509b3bf8628a80b4345050488c0 /engines/xeen/combat.cpp
parent572dbd86239426c54776f02a538f1bea45f4abd3 (diff)
downloadscummvm-rg350-31bcb0961981e3e647b2de912927145e8e9429aa.tar.gz
scummvm-rg350-31bcb0961981e3e647b2de912927145e8e9429aa.tar.bz2
scummvm-rg350-31bcb0961981e3e647b2de912927145e8e9429aa.zip
XEEN: Cleanup of item bonus flags to a bitfield state structure
Diffstat (limited to 'engines/xeen/combat.cpp')
-rw-r--r--engines/xeen/combat.cpp36
1 files changed, 16 insertions, 20 deletions
diff --git a/engines/xeen/combat.cpp b/engines/xeen/combat.cpp
index 3a248e5942..2c87018613 100644
--- a/engines/xeen/combat.cpp
+++ b/engines/xeen/combat.cpp
@@ -348,13 +348,7 @@ void Combat::doCharDamage(Character &c, int charNum, int monsterDataIndex) {
sound.playFX(36);
break;
case SA_CURSEITEM:
- for (int idx = 0; idx < INV_ITEMS_TOTAL; ++idx) {
- if (c._weapons[idx]._id != 34)
- c._weapons[idx]._bonusFlags |= ITEMFLAG_CURSED;
- c._armor[idx]._bonusFlags |= ITEMFLAG_CURSED;
- c._accessories[idx]._bonusFlags |= ITEMFLAG_CURSED;
- c._misc[idx]._bonusFlags |= ITEMFLAG_CURSED;
- }
+ c._items.curseUncurse(true);
sound.playFX(37);
break;
case SA_DRAINSP:
@@ -384,8 +378,8 @@ void Combat::doCharDamage(Character &c, int charNum, int monsterDataIndex) {
case SA_BREAKWEAPON:
for (int idx = 0; idx < INV_ITEMS_TOTAL; ++idx) {
XeenItem &weapon = c._weapons[idx];
- if (weapon._id != 34 && weapon._id != 0 && weapon._frame != 0) {
- weapon._bonusFlags |= ITEMFLAG_BROKEN;
+ if (weapon._id < XEEN_SLAYER_SWORD && weapon._id != 0 && weapon._frame != 0) {
+ weapon._state._broken = true;
weapon._frame = 0;
}
}
@@ -1354,32 +1348,34 @@ void Combat::attack(Character &c, RangeType rangeType) {
for (int itemIndex = 0; itemIndex < INV_ITEMS_TOTAL; ++itemIndex) {
XeenItem &weapon = c._weapons[itemIndex];
- if (weapon._frame != 0) {
- switch (weapon._bonusFlags & ITEMFLAG_BONUS_MASK) {
- case 1:
+ if (weapon.isEquipped()) {
+ switch (weapon._state._counter) {
+ case EFFECTIVE_DRAGON:
if (monsterData._monsterType == MONSTER_DRAGON)
damage *= 3;
break;
- case 2:
+ case EFFECTIVE_UNDEAD :
if (monsterData._monsterType == MONSTER_UNDEAD)
damage *= 3;
break;
- case 3:
+ case EFFECTIVE_GOLEM:
if (monsterData._monsterType == MONSTER_GOLEM)
damage *= 3;
break;
- case 4:
+ case EFFECTIVE_INSECT:
if (monsterData._monsterType == MONSTER_INSECT)
damage *= 3;
break;
- case 5:
- if (monsterData._monsterType == MONSTER_0)
+ case EFFEctIVE_MONSTERS:
+ if (monsterData._monsterType == MONSTER_MONSTERS)
damage *= 3;
break;
- case 6:
+ case EFFECTIVE_ANIMAL:
if (monsterData._monsterType == MONSTER_ANIMAL)
damage *= 3;
break;
+ default:
+ break;
}
}
}
@@ -1516,8 +1512,8 @@ void Combat::attack2(int damage, RangeType rangeType) {
if (!ccNum && monster._spriteId == 89) {
// Xeen's Scepter of Temporal Distortion
party._treasure._weapons[0]._id = 90;
- party._treasure._weapons[0]._bonusFlags = 0;
party._treasure._weapons[0]._material = 0;
+ party._treasure._weapons[0]._state.clear();
party._treasure._hasItems = true;
party._questItems[8]++;
}
@@ -1692,7 +1688,7 @@ void Combat::getWeaponDamage(Character &c, RangeType rangeType) {
}
if (flag) {
- if (!(weapon._bonusFlags & (ITEMFLAG_BROKEN | ITEMFLAG_CURSED))) {
+ if (!weapon.isBad()) {
_attackWeapon = &weapon;
if (weapon._material < 37) {