Wednesday, August 21, 2019

The spellbooks of Wizardry

The manual gives details on most of the spells you can cast in Wizardry, but also leaves out quite a bit of nuance on some. I’ve copied the original manual section, but with additional notes, and corrections in a few cases.

Combat spells are sometimes subject to spell resistance, which means that each affected monster has a chance to completely avoid the spell's effect based on its Spell Resistance stat. Bubbly Slimes, for instance, have no Spell Resistance and will never resist these spells, while Murphy's Ghosts have moderate Spell Resistance and will resist 40% of the time. If I don't describe a spell as subject to Spell Resistance, then assume it isn't (but these spells might be resisted in other ways, which will be noted when applicable).

All group-targeting damage spells have an elemental alignment; Flame, Cold, or Physical. Monsters with natural resistance to that element will only suffer half damage.

Some monsters can cast spells too, and the spells they may cast are a subset of this list, and have the same effects. Unfortunately, the game doesn't tell you which spells they cast. More on this will come in a later post on monsters.

I only expect these notes to be accurate to the Apple II versions of Wizardry I and II. Wizardry III changed multiple spell mechanics, and later ports of 1 & 2 may have retained these changes.

Level 1 Priest spells

Kalki – Combat
Reduces the party’s AC by 1 for the duration of combat. Stacks with repeat casts.


Dios – Any time
Restores 1d8 HP to one party member.


Badios – Combat
1d8 damage to one monster. Subject to Spell Resistance.


Milwa – Any time
Light effect, increasing draw distance and revealing hidden doors, for 1d15+14 moves. Stacks with repeat casts.

It tends to slow things down a lot - the farther draw distance means more time spent waiting for the screen to replot with each step. The Quickplot option can toggle on or off the light effect, for a faster draw time.


Porfic – Combat
Reduces caster’s AC by 4 for the duration of combat. Stacks with repeat casts.


Level 2 Priest spells

Matu – Combat
Reduces everyone's AC by 2 for the duration of combat. Stacks with repeat casts.


Calfo – Looting
Determines trap type. 95% chance of revealing correct type, 5% chance of revealing a random type.


Manifo – Combat
Paralyzes each monster in a group. Each monster has a (50% + Level * 10%) chance to resist. Effect is the same as sleep, but works on monsters without the SLEEP ability. Each monster has a (Level * 20%) chance to recover per round, up to a maximum chance of 50%.


Montino – Combat
Silences each monster in a group. Each monster has a (Level * 10%) chance to resist.

When cast on your party, each party member makes a saving throw against magic to resist.


Level 3 Priest spells

Lomilwa – Any time
Light effect, increasing draw distance and revealing hidden doors, for 32000 moves. Doesn’t stack.


Dialko – Any time
Cure 1 party member of paralysis and/or sleep.


Latumapic – Combat
Identify a random monster group. No guarantee it won't just identify a monster group that isn't already identified. It appears it was intended to identify all monster groups, but doesn’t due to a bug.


Bamatu – Combat
Reduces everyone's AC by 4 for the duration of combat. Stacks with repeat casts.


Level 4 Priest spells

Dial – Any time
Restores 2d8 HP to one party member.


Badial – Combat
2d8 damage to one monster. Subject to Spell Resistance.


Latumofis – Any time
Cures 1 party member of poison.


Maporfic – Any time
Reduces the party’s AC by 2 for the entire expedition. Stacks with other effects, but does not stack with repeat casts.


Level 5 Priest spells

Dialma – Any time
Restores 3d8 HP to one party member.


Badialma – Combat
3d8 damage to one monster. Subject to Spell Resistance.


Litokan – Combat
3d8 flame damage to every monster in a group. Subject to Spell Resistance.


Kandi – Camp
Reveals location of a dead character.


Di – Camp
Cures one party member of death and restores 1 HP, but reduces vitality by 1. Odds of success are [Deceased's Vitality] * 4%. Failure turns the deceased into ashes.


Badi – Combat
Kills one monster. Monster has a (Level * 10%) chance to resist.


Level 6 Priest spells

Lorto – Combat
6d6 physical damage to every monster in a group. Subject to Spell Resistance.


Madi – Any time
Restores all HP to one party member, removes poison, and cures fear, sleep, paralysis, and stone.


Mabadi – Combat
Sets one monster’s HP to 1d8. Monster has no chance to resist.


Loktofeit – Combat
There’s only a ([CharacterLevel] * 2% + 1%) chance of the spell working.

If the spell works, then all party members are transported to the castle, and lose their equipment and gold.


Level 7 Priest spells

Malikto – Combat
12d6 physical damage to all monsters in all groups. Subject to Spell Resistance.


Kadorto – Camp
Cures one party member of death or ashes and restores all HP, but reduces vitality by 1. Odds of success are [Deceased's Vitality] * 4%. Failure turns the deceased into ashes, or inflicts LOST status if already in ashes.


Level 1 Mage spells

Halito – Combat
1d8 damage to one monster. Subject to Spell Resistance. Despite the manual's description, this is not treated as flame damage.


Mogref – Combat
Reduces caster’s AC by 2 for the duration of combat. Stacks with repeat casts.


Katino – Combat
Sedates each monster in a group. Each monster has a (Level * 20%) chance to resist. Each monster has a (Level * 20%) chance to recover per round, up to a maximum chance of 50%.


Dumapic – Camp
Reveals coordinates and direction


Level 2 Mage spells

Dilto – Combat
Raises the AC of every monster in a group by 2. Stacks with repeat casts. No chance to resist.


Sopic – Combat
Reduces caster’s AC by 4 for the duration of combat. Stacks with repeat casts.


Level 3 Mage spells

Mahalito – Combat
4d6 flame damage to every monster in a group. Subject to Spell Resistance.


Molito – Combat
3d6 physical damage to every monster in a group. Subject to Spell Resistance.


Level 4 Mage spells

Morlis – Combat
Raises the AC of every monster in a group by 3. Stacks with repeat casts. No chance to resist.


Dalto – Combat
6d6 cold damage to every monster in a group. Subject to Spell Resistance.


Lahalito – Combat
6d6 flame damage to every monster in a group. Subject to Spell Resistance.


Level 5 Mage spells

Mamorlis – Combat
Raises the AC of every monster in every group by 3. Stacks with repeat casts. No chance to resist.


Makanito – Combat
Kills all monsters in a group. Does not affect undead, or any monsters with 8 or more hit dice. All others have no chance to resist.


Madalto – Combat
8d8 cold damage to every monster in a group. Subject to Spell Resistance.


Level 6 Mage spells

Lakanito – Combat
Kills all monsters in a group. Each monster has a chance of (Level * 6%) to resist.


Zilwan – Combat
10d200 damage to one monster. Only affects undead. Subject to Spell Resistance.


Masopic – Combat
Reduces everyone's AC by 4 for the duration of combat. Stacks with repeat casts.


Haman – Combat
Only castable if the caster is at least level 13. Caster loses one level when casting.

There are three possible outcomes, each with an equal chance of happening:
  • Restores 9d8 HP to each living party member.
  • Restores all HP, cures silence, and cures all status ailments (except poison) to each living party member.
  • Removes spell resistance from all monsters in groups 1 through 3.

The random effect logic is bugged; more effects were intended, and the odds were meant to be weighted toward the less powerful ones.

After casting Haman and losing a level, there is a 1/[Character Level] chance that the castor mangles their spellbook. If this happens, each known spell has a 50% chance of being forgotten.


Level 7 Mage spells

Malor – Any time
In combat, this teleports the party to a random location in a random level.

In camp, this teleports the party anywhere you like.


Mahaman – Combat
Same as Haman, but with different outcomes.
  • Restores 9d8 HP to each living party member.
  • Silences all monsters in the first three monster groups, for 1d5+4 rounds.
  • Kills all monsters in all groups.

Same restrictions and costs as Haman.


Tiltowait – Combat
10d15 physical damage to all monsters in all groups. Subject to Spell Resistance.

3 comments:

  1. As I explained just now in my comment on "The bestiary of Wizardry", the spell MANIFO doesn't actually inflict PARALYZE status on monsters, but rather ASLEEP status, despite reporting that the monsters are "held". So your statement about each monster's recovery chance from MANIFO is incorrect; the chance is actually the same as for KATINO. MANIFO does have a different chance for the target resisting and a greater variety of eligible targets, though.

    ReplyDelete
  2. The recovery you mention from MONTINO-induced silence is what is *supposed* to happen. What actually happens is that silenced monsters or characters will never recover from silence during the battle, because the code which handles silence recovery (procedures HEALHEAR and DECINAUD) is severely buggy. For one thing, HEALHEAR calls DECINAUD, which is supposed to decrement the individual silence timers, only for the player character party and monster groups 1-3, not for group 4. But more importantly, when DECINAUD runs, while it seems to loop through each of the living characters or monsters in the group, it doesn't access their silence timers correctly, so they aren't properly checked and decremented as they should be. The expression which should be used is BATTLERC[ GROUPI].A.TEMP04[ X].INAUDCNT. Instead it uses BATTLERC[ GROUPI].A.TEMP04[ ALIVECNT].INAUDCNT, using the call parameter ALIVECNT rather than the loop counter X as the inner array index! So this checks and decrements a silence timer for a nonexistent "entry" which is past those of all the living monsters or characters--and it does this to the same "timer" for every iteration of the loop! This means the actual silence timers never get decremented, and the silence never wears off during the battle.

    ReplyDelete
    Replies
    1. I checked the code and believe you are right. I've updated this post accordingly, on both MANIFO and MONTINO.

      Delete