[Scummvm-git-logs] scummvm master -> a613f4ff2209675e134e90c8ea66cfda47d6119f

dreammaster dreammaster at scummvm.org
Sun Mar 25 04:54:42 CEST 2018


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
a613f4ff22 XEEN: Handle weapon elemental category like original does


Commit: a613f4ff2209675e134e90c8ea66cfda47d6119f
    https://github.com/scummvm/scummvm/commit/a613f4ff2209675e134e90c8ea66cfda47d6119f
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2018-03-24T22:54:37-04:00

Commit Message:
XEEN: Handle weapon elemental category like original does

Changed paths:
    engines/xeen/combat.cpp
    engines/xeen/combat.h
    engines/xeen/item.cpp
    engines/xeen/item.h


diff --git a/engines/xeen/combat.cpp b/engines/xeen/combat.cpp
index d2857a9..30ea94e 100644
--- a/engines/xeen/combat.cpp
+++ b/engines/xeen/combat.cpp
@@ -114,6 +114,7 @@ Combat::Combat(XeenEngine *vm): _vm(vm), _missVoc("miss.voc") {
 	_monsterDamage = 0;
 	_weaponDamage = 0;
 	_weaponDie = _weaponDice = 0;
+	_weaponElemMaterial = 0;
 	_attackWeapon = nullptr;
 	_attackWeaponId = 0;
 	_hitChanceBonus = 0;
@@ -1433,7 +1434,7 @@ void Combat::attack2(int damage, RangeType rangeType) {
 		int monsterResist = getMonsterResistence(rangeType);
 		damage += monsterResist;
 		if (monsterResist > 0) {
-			_pow[_attackDurationCtr]._elemFrame = _attackWeapon->getElementalCategory();
+			_pow[_attackDurationCtr]._elemFrame = XeenItem::getElementalCategory(_weaponElemMaterial);
 			_pow[_attackDurationCtr]._elemScale = getDamageScale(monsterResist);
 		} else if (rangeType != RT_HIT) {
 			_pow[_attackDurationCtr]._elemFrame = 0;
@@ -1679,6 +1680,7 @@ void Combat::getWeaponDamage(Character &c, RangeType rangeType) {
 	_weaponDie = _weaponDice = 0;
 	_weaponDamage = 0;
 	_hitChanceBonus = 0;
+	_weaponElemMaterial = 0;
 
 	for (int idx = 0; idx < INV_ITEMS_TOTAL; ++idx) {
 		XeenItem &weapon = c._weapons[idx];
@@ -1693,7 +1695,9 @@ void Combat::getWeaponDamage(Character &c, RangeType rangeType) {
 			if (!(weapon._bonusFlags & (ITEMFLAG_BROKEN | ITEMFLAG_CURSED))) {
 				_attackWeapon = &weapon;
 
-				if (weapon._material >= 37 && weapon._material < 59) {
+				if (weapon._material < 37) {
+					_weaponElemMaterial = weapon._material;
+				} else if (weapon._material < 59) {
 					_hitChanceBonus = Res.METAL_DAMAGE_PERCENT[weapon._material - 37];
 					_weaponDamage = Res.METAL_DAMAGE[weapon._material - 37];
 				}
@@ -1764,7 +1768,7 @@ int Combat::getMonsterResistence(RangeType rangeType) {
 			break;
 		}
 	} else {
-		int material = !_attackWeapon ? 0 : _attackWeapon->_material;
+		int material = _weaponElemMaterial;
 		damage = Res.ELEMENTAL_DAMAGE[material];
 
 		if (material != 0) {
diff --git a/engines/xeen/combat.h b/engines/xeen/combat.h
index 938845b..6dc20a0 100644
--- a/engines/xeen/combat.h
+++ b/engines/xeen/combat.h
@@ -176,6 +176,7 @@ public:
 	int _monsterDamage;
 	int _weaponDamage;
 	int _weaponDie, _weaponDice;
+	int _weaponElemMaterial;
 	XeenItem *_attackWeapon;
 	int _attackWeaponId;
 	File _missVoc;
diff --git a/engines/xeen/item.cpp b/engines/xeen/item.cpp
index cd3ba80..6660703 100644
--- a/engines/xeen/item.cpp
+++ b/engines/xeen/item.cpp
@@ -44,8 +44,13 @@ void XeenItem::synchronize(Common::Serializer &s) {
 }
 
 ElementalCategory XeenItem::getElementalCategory() const {
+	assert(_material < 36);
+	return getElementalCategory(_material);
+}
+
+ElementalCategory XeenItem::getElementalCategory(int material) {
 	int idx;
-	for (idx = 0; Res.ELEMENTAL_CATEGORIES[idx] < _material; ++idx)
+	for (idx = 0; Res.ELEMENTAL_CATEGORIES[idx] < material; ++idx)
 		;
 
 	return (ElementalCategory)idx;
diff --git a/engines/xeen/item.h b/engines/xeen/item.h
index 044d73e..b9c29af 100644
--- a/engines/xeen/item.h
+++ b/engines/xeen/item.h
@@ -87,6 +87,11 @@ public:
 	ElementalCategory getElementalCategory() const;
 
 	/**
+	 * Gets the elemental category for a given material
+	 */
+	static ElementalCategory getElementalCategory(int material);
+
+	/**
 	 * Gets the attribute category for the item
 	 */
 	AttributeCategory getAttributeCategory() const;





More information about the Scummvm-git-logs mailing list