It seems that you're using an outdated browser. Some things may not work as they should (or don't work at all).
We suggest you upgrade newer and better browser like: Chrome, Firefox, Internet Explorer or Opera

×
MM5 darkside of xeen; Am I the only one who have my attack spells, even basic ones like fireball and lightning bolt, miss a lot of the times vs particular monsters?

So I spent most of today tinkering with Cedric Busch' excellent Xeen unpacking utilities and found all the offsets for monsters resistances.

Monsters have 7 values: fire, elec, cold, poison, energy, magic, and physical resistances.

Magic resistance, in my opinion, is broken. It makes ALL spells , evey physical ones, have a chance to miss.

By editing the value to 0 for a few monsters with high magic resist like griffins and minotaur, it confirmed it.

I think the devs meant it as a way for monsters to resist MAGIC elemental spells like Mass Distortion (it's the way it works in MM6) but it works for ALL spells!

No wonder people always complain how offensive magic is so weak in MM5!

So I'm gonna do my first balance patch.

In your opinion, should I just set magic resist to 0 for every monster in Darkside, or halve it, giving them a chance to evade spells? (for bosses, it makes sense)
Post edited April 20, 2024 by UndeadHalfOrc
avatar
UndeadHalfOrc: MM5 darkside of xeen; Am I the only one who have my attack spells, even basic ones like fireball and lightning bolt, miss a lot of the times vs particular monsters?

So I spent most of today tinkering with Cedric Busch' excellent Xeen unpacking utilities and found all the offsets for monsters resistances.

Monsters have 7 values: fire, elec, cold, poison, energy, magic, and physical resistances.

Magic resistance, in my opinion, is broken. It makes ALL spells , evey physical ones, have a chance to miss.

By editing the value to 0 for a few monsters with high magic resist like griffins and minotaur, it confirmed it.

I think the devs meant it as a way for monsters to resist MAGIC elemental spells like Mass Distortion (it's the way it works in MM6) but it works for ALL spells!

No wonder people always complain how offensive magic is so weak in MM5!

So I'm gonna do my first balance patch.

In your opinion, should I just set magic resist to 0 for every monster in Darkside, or halve it, giving them a chance to evade spells? (for bosses, it makes sense)
I don't remember having spells outright miss non-immune enemies.

What I do remember, on the other hand, is that sometimes spells would do reduced damage. Typically, this would be half damage, but I seem to remember Mass Distortion doing 5 damage when resisted (even if the spell would have done less damage if not resisted). Also, status spells are resisted based on the enemy's index number, not elemental resistance.

The biggest balance issue I've found in MM5/WoX isn't spells being too weak, but rather physical attacks being too strong. You get extra attacks at higher levels, you get extra damage per hit from your weapon, and you get extra damage per hit from the Holy Bonus spell (and there's basically no reason not to have it active all the time later on). Those bonuses, together, make phsyical attacks so powerful later on that, in order for enemies to not die too easily to physical attacks, spells aren't worth using on them. Meanwhile, spells only grow with level (and only those that scale).

The one time I've found offensive magic to be useful in MM5 is when I'm in the Castle Alamar dungeon at a low level, clearing enemies in order to reach the key to the Dragon Tower. Doing that dungeon at a low level means you're no longer at a low level, given that it gives you 20 million XP (in addition to what the dragons give) and access to the +50 levels fountain.

Also, if you don't do early Dragon Tower, the Minotaurs are a pain, as your attacks miss way too often, and spells don't work that well against them.
avatar
dtgreene: I don't remember having spells outright miss non-immune enemies.
Are you using the CD version? I'm using floppy.
If you have a saves game handy, try a basic fireball or lightning bolt on Griffins in the darkside desert
They have 0 reststance across the board except Magic, which is quite high.
My experience is that it outright misses much of the time. So please test Griffins in your game!
avatar
dtgreene: physical attacks being too strong. You get extra attacks at higher levels, you get extra damage per hit from your weapon, and you get extra damage per hit from the Holy Bonus spell (and there's basically no reason not to have it active all the time later on). Those bonuses, together, make phsyical attacks so powerful
I agree, but until I find the offset to change Obsidian weapons, or the class attack multiplier, or find a way to change how Holy Bonus works, not much I can do ... I do not use Obsidian weapns (change them into Diamond by save editing)

I coud also increase the physical resist of all non-boss monsters. That would then make some of them physical immune, like ghost& phase mummies, power liches and earth blasters
avatar
dtgreene: Also, if you don't do early Dragon Tower, the Minotaurs are a pain, as your attacks miss way too often, and spells don't work that well against them.
Like griffins, Minotaurs have huge Magic resist, but 0 fire resist.
Post edited April 21, 2024 by UndeadHalfOrc
MM4-5 World of Xeen
Folks, this is big,
While working on my patch and doing tons of tests, I realized that monsters' elemental resistance for Fire, Elec, Cold, Poison AND Energy DO NOT WORK. At all.
Only their physical resistance and magic resistance works. As I said earlier, magic resistance gives them a chance to outright evade your spells, at 100 they are 100% immune(EDIT: maybe not vs Mass Distortion), as we found out).
Values go from 0 to 100 (in hexm this is 0x64)
No matter what, all 5 values always act like they are close to 30 (maybe...hard to say), They all have a chance to halve your spells even if it says 0,
but spells will always land and do some damage (as long as they don't evade it due to their Magic resistance score, which does work).

The best way to test it is in the dragon cave, Fire dragons are supposed to be immune to fire and 0 to everything else, ditto for Cold dragons (cold).
I just killed fire dragons using incinerate, and killed cold dragons using frostbite, cold ray and fantastic freeze.

I'm playing the floppy version. Can anyone here test it , preferably using the CD version?

I have both versions installed, but no save games for the CD version, and my floppy-version save files are incompatible to the CD version, the game doesn't recognize it.
Post edited April 21, 2024 by UndeadHalfOrc
avatar
UndeadHalfOrc: Only their physical resistance and magic resistance works. As I said earlier, magic resistance gives them a chance to outright evade your spells, at 100 they are 100% immune.
So, why does Mass Distortion work against the Mega Dragon, who has 100 magic resistance? (Note that this Mega Dragon has 90 physical resistance, so physical attacks do at least some damage, and that one special quest weapon you get in MM4 ignores resistances.)
I don't know why. Maybe because 100 (0x64) magic resistance is not perfect. Maybe Mass DIstortion is not "magic" elemental. I'm still in the process of doing lots of tests, and editing any mistakes I made in my previous posts.
I am only posting what I'm discovering as I find them out, and I have not strong enough in my current game to get close to the Megadragon.
If memory serves, I did manage to land a few Mass Distortion on the Dragon King in MM4, so you're probably right regarding that one spell.

It would help me a lot if you told me what version you are using (CD or floppy), thanks in advance.
If someone confirms they are identical when it comes to mechanics then I won't have to start a new party on the CD version.


I will only start working on a real patch when I am 100% certain of the mechanics on every stat I intend to modify.
Post edited April 21, 2024 by UndeadHalfOrc
avatar
UndeadHalfOrc: It would help me a lot if you told me what version you are using (CD or floppy), thanks in advance.
Floppy.

And, in particular, the "floppy" version provided by GOG (as opposed to, say, the retail version that was sold back in the day).

(Sorry about not mentioning this earlier.)
FWIW: ScummVM has a reimplementation of the Xeen games, based on a disassembly of the original executables in C++. Even if you don't have experience with programming, the code may be clean enough for you to analyze how various resistances work if you can find the relevant code:
https://github.com/scummvm/scummvm/tree/master/engines/mm/xeen
avatar
dreammaster: FWIW: ScummVM has a reimplementation of the Xeen games, based on a disassembly of the original executables in C++. Even if you don't have experience with programming, the code may be clean enough for you to analyze how various resistances work if you can find the relevant code:
https://github.com/scummvm/scummvm/tree/master/engines/mm/xeen
The relevant code here is in combat.cpp, in the Combat::attack2 function.

Worth noting, however, that the process of analyzing the disassembled code and re-coding it may have mistakes in it, hence it might still be worth checking the original game to make sure the behavior is the same (and if it isn't, it's likely a bug in ScummVM and should be reported).

Also, one question: Which version is ScummVM's implementation based on? Floppy MM4, floppy MM5/WoX, or the CD version?


Side node: It's interesting looking at how this code is organized. I'm actually making a CRPG of my own, and the combat program is going to be organized *very* differently (in particular, I'm going for functional rather than OOP.)
Post edited April 25, 2024 by dtgreene
Thanks a lot for that!

I immediately found out the part about hidden to hit bonus, here is the code:


bool Combat::hitMonster(Character &c, RangeType rangeType) {
Map &map = *_vm->_map;
getWeaponDamage(c, rangeType);
int chance = c.statBonus(c.getStat(ACCURACY)) + _hitChanceBonus;
int divisor = 0;

switch (c._class) {
case CLASS_PALADIN :
case CLASS_ARCHER:
case CLASS_ROBBER:
case CLASS_NINJA:
case CLASS_RANGER:
divisor = 2;
break;
case CLASS_CLERIC:
case CLASS_DRUID:
divisor = 3;
break;
case CLASS_SORCERER:
divisor = 4;
break;
case CLASS_KNIGHT:
case CLASS_BARBARIAN:
default:
divisor = 1;
break;
}

chance += c.getCurrentLevel() / divisor;
chance -= c._conditions[CURSED];

// Add on a random amount
int v;
do {
v = _vm->getRandomNumber(1, 20);
chance += v;
} while (v == 20);

assert(_monster2Attack != -1);
MazeMonster &monster = map._mobData._monsters[_monster2Attack];
MonsterStruct &monsterData = *monster._monsterData;

if (monster._damageType != DT_PHYSICAL)
chance += 20;

return chance >= (monsterData._armorClass + 10);
}
Is QT the best environment to compile and run this project? For C++, it's the only one I've used in the past 2 decades.
If you're interested in compiling the ScummVM codebase to experiment with the Xeen code, you can find instructions here:
https://wiki.scummvm.org/index.php?title=Compiling_ScummVM
Hello,
Thanks for your help. I'm using Windows 10.
I do not intend to install Visual Studio and the other options sound somewhat complicated. So if I try it, it's gonna be with the one I know (a little), QT.

---ABOUT THE RESISTANCE BUG----

It also exists on the CD full speech version.

Toxic Cloud works perfectly fine on all 3 enemies in vertigo, which are supposed to be immune to poison.