[Scummvm-git-logs] scummvm master -> 9cd88747bf80e7f577d25648622b18c25bb841ca

dreammaster noreply at scummvm.org
Sun Apr 9 17:49:50 UTC 2023


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:
9cd88747bf MM: MM1: Monster data update


Commit: 9cd88747bf80e7f577d25648622b18c25bb841ca
    https://github.com/scummvm/scummvm/commit/9cd88747bf80e7f577d25648622b18c25bb841ca
Author: filasfilas (filas at mail.ru)
Date: 2023-04-09T10:47:03-07:00

Commit Message:
MM: MM1: Monster data update

Changed paths:
    engines/mm/mm1/data/monsters.cpp
    engines/mm/mm1/data/monsters.h
    engines/mm/mm1/game/combat.cpp


diff --git a/engines/mm/mm1/data/monsters.cpp b/engines/mm/mm1/data/monsters.cpp
index 60aa36e967a..2887a877767 100644
--- a/engines/mm/mm1/data/monsters.cpp
+++ b/engines/mm/mm1/data/monsters.cpp
@@ -50,9 +50,9 @@ bool Monsters::load() {
 		mon._numberOfAttacks = getNextValue(line);
 		mon._speed = getNextValue(line);
 		mon._experience = getNextValue(line);
-		mon._field18 = getNextValue(line);
+		mon._loot = getNextValue(line);
 		mon._resistUndead = getNextValue(line);
-		mon._field1a = getNextValue(line);
+		mon._resistances = getNextValue(line);
 		mon._bonusOnTouch = getNextValue(line);
 		mon._specialAbility = getNextValue(line);
 		mon._specialThreshold = getNextValue(line);
diff --git a/engines/mm/mm1/data/monsters.h b/engines/mm/mm1/data/monsters.h
index 5a6b773a5f9..7d4481ffa34 100644
--- a/engines/mm/mm1/data/monsters.h
+++ b/engines/mm/mm1/data/monsters.h
@@ -44,13 +44,31 @@ enum MonsterStatusFlag {
 	MONFLAG_PARALYZED = 0x80, MONFLAG_DEAD = 0xff
 };
 
+enum MonsterLoot {
+	DROPS_GEMS = 0x1,   // if 1 - a monster can drop gems
+    GOLD_DROP = 0xfe>>1 // _loot>>1  - gold value that a monster drops
+};
+
 enum MonsterResistUndead {
 	MAGIC_RESISTANCE = 0x7f,
 	IS_UNDEAD = 0x80
 };
 
-enum Fiedl1A {
-	FIELD1A_80 = 0x80
+enum MonsterBonusOnTouch {
+	TOUCH_BONUS_VALUE = 0x7f,
+	HAS_BONUS = 0x80
+};
+
+enum MonsterResistances {
+	MONRES_ASLEEP = 1, MONRES_FEAR = 2, MONRES_PARALYSIS = 4,
+	MONRES_ENERGY = 8, MONRES_COLD = 0x10,
+	MONRES_ELECTRICITY = 0x20, MONRES_FIRE = 0x40,
+	MONRES_PHYSICAL_ATTACK = 0x80,
+};
+
+enum MonsterSpecialAbility {
+	HAS_RANGED_ATTACK = 0x80, // 1 if has ranged attack, 0 if has special attack
+	ATTACK_VALUE = 0x7f // damage for ranged attack.  Special attack id for special attack 
 };
 
 enum MonsterCounter {
@@ -69,12 +87,12 @@ struct Monster {
 	byte _numberOfAttacks;
 	byte _speed;
 	uint16 _experience;
-	byte _field18;
+	byte _loot;
 	byte _resistUndead;
-	byte _field1a;
+	byte _resistances;
 	byte _bonusOnTouch;
 	byte _specialAbility;
-	byte _specialThreshold;
+	byte _specialThreshold; // % of luck of special attack
 	byte _counterFlags;
 	byte _imgNum;
 
diff --git a/engines/mm/mm1/game/combat.cpp b/engines/mm/mm1/game/combat.cpp
index db69d4a6667..b68569b1341 100644
--- a/engines/mm/mm1/game/combat.cpp
+++ b/engines/mm/mm1/game/combat.cpp
@@ -351,7 +351,7 @@ void Combat::defeatedMonsters() {
 }
 
 void Combat::setTreasure() {
-	_val7 = _monsterP->_field18;
+	_val7 = _monsterP->_loot;
 	_val6 = MAX(_val6, _val7);
 
 	if (_val7 & 1)
@@ -616,7 +616,7 @@ void Combat::monsterAction() {
 	if (getRandomNumber(100) >= threshold) {
 		// Monster flees from combat
 		_monsterP->_experience = 0;
-		_monsterP->_field18 = 0;
+		_monsterP->_loot = 0;
 		_monsterP->_hp = 0;
 		_monsterP->_status = MONFLAG_DEAD;
 		removeMonster();
@@ -852,7 +852,7 @@ void Combat::attackMonster(int monsterNum) {
 	g_globals->_combatParty[_currentChar]->_checked = true;
 
 	// Can the attack succeed?
-	if (_attackAttr1._current || !(_monsterP->_field1a & FIELD1A_80)) {
+	if (_attackAttr1._current || !(_monsterP->_resistances & MONRES_PHYSICAL_ATTACK)) {
 		if (enc._monsterList[_monsterIndex]._status & (MONFLAG_ASLEEP |
 				MONFLAG_HELD | MONFLAG_WEBBED | MONFLAG_PARALYZED))
 			++_attackerLevel;
@@ -954,7 +954,7 @@ void Combat::iterateMonsters1Inner() {
 		static const byte FLAGS[8] = {
 			0x40, 0x20, 0x60, 0x10, 8, 4, 2, 1
 		};
-		affects = (_monsterP->_field1a & FLAGS[idx]) != FLAGS[idx];
+		affects = (_monsterP->_resistances & FLAGS[idx]) != FLAGS[idx];
 	}
 
 	Common::String effect;
@@ -1033,7 +1033,7 @@ void Combat::iterateMonsters2Inner() {
 			static const byte FLAGS[8] = {
 				0x40, 0x20, 0x60, 0x10, 8, 4, 2, 1
 			};
-			if ((_monsterP->_field1a & FLAGS[idx]) == FLAGS[idx])
+			if ((_monsterP->_resistances & FLAGS[idx]) == FLAGS[idx])
 				_damage >>= 2;
 		}
 




More information about the Scummvm-git-logs mailing list