GrayFace / Misc

Repository of my Delphi tools, MM patches etc.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

A few MM7 bugs

Tomsod opened this issue · comments

Hello! I was playing around with MM7's disassembly lately and discovered a few bugs that you might want to fix in your patch.

Firstly, the "of assassins" and "of barbarians" weapon modifiers don't appear to deal elemental damage that's stated in their description. The function for bonus damage is at 0x439e16, but it doesn't seem to have code for these modifiers. Attacking a monster with Physical immunity using such weapons also always misses.

In the same function, "of acid" modifier seems to deal water (2) damage instead of body (8). The relevant instruction is at 0x439f6a.

Kelebrim, an artifact shield that's supposed to penalize Earth resistance, doesn't actually affect it. The code for that should be at 0x48f0c3, but there's only the endurance bonus there.

Light Bolt doesn't seem to be dealing double damage to undead. I haven't thoroughly investigated the disassembly regarding this, but in practice attacking both undead and non-undead monsters deals the same 2.5 * level damage (assuming no Light resistance).
This was actually fortunate for me, as I intended to remove the double damage in my mod, so this bug saved me some effort.

Another spell, Acid Burst, deals Physical instead of Water damage. It's not actually a bug in code, but rather in spells.txt (it doesn't have an element set). This bug is rather well-known and also affects MM8.

Control Undead doesn't work on GM level. The code sets a very high duration to simulate a permanent effect at 0x42e067, but due to overflow it becomes negative a few instructions later, so the effect is immediately removed. (Replacing the duration constant with 0xffffff seems to fix this.)

Charm has a similar bug (the huge constant is at 0x428ea2), but it also has a bug wherein expert works as master, master works as GM, and GM works as expert, so it's the master level spell that ends up broken. (The skill level checks are at 0x4a8e8c (master) and 0x428e9c (GM) and seem to be off by one.)

Armageddon deals irresistible damage in MM7 (and MM8 as well). Looking at the code, it damages both monsters (0x401b73) and players (0x401bfa) with element 5. In MM6 it was magic damage; in MM7 element 5 is unused, so neither players nor monsters can resist it. Looks like NWC forgot to update the code.

Finally, when a monster casts a spell at another monster, the game seems to erroneously use the defending monster's struct when reading the spell's element. The instructions are at 0x43b2cf and 0x43b2e0.

Oh, and one more I forgot to add: all pre-placed Wizards (in Celeste, Castle Lambent, and the School of Sorcery) have Paralyze instead of Dispel Magic as their first spell. This is likely a typo, as the spells are next to each other and monsters can't even cast Paralyze. Similarly, some Clerics of Baa in the Temple of Baa have Spirit Lash, which they also cannot cast. But that could be a flavor thing.

Thanks!

Kelebrim, an artifact shield that's supposed to penalize Earth resistance, doesn't actually affect it. The code for that should be at 0x48f0c3, but there's only the endurance bonus there.

This one I'm not fixing intentionally so far. I'd rather change its description, but that would make it technically an Artifact rather than a Relic, because relics always have downsides. It becomes useless with such a big handicap in addition to weak Armor value. Or maybe I should change it to "-10 Earth Resistance"...

Yeah, just lowering the penalty seems like a good idea, if you think it's too high. After all, the other relic shield also has -10 to resistances, albeit to two at once.