[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