The Spell/Monster Ability List, by ID
Before I can decode spell data for you, it’s important to note the order of spells as referenced in FF1-DoS. In the table below, a hex value will be succeeded by four spells/abilities. The first spell has that ID, the second spell has that ID + 0×01, the third spell has that ID + 0×02, and the third has the ID + 0×03. White magic has an ID # between 0×01 and 0×20. Black magic has an ID # between 0×21 and 0×40. Monster specialty attacks are listed after the spells (0×41+). Without further ado, here’s the spell list!
Monster Specialty attacks
|0×41||Icestorm (Winter wolf)||Flame (Fire Lizard)||Stone Gaze||Paralysis Gaze|
|0×45||Flash||Flame (Hellhound)||Earthquake||Death Gaze|
|0×49||Gaze of Pain||Death Gaze||Icestorm (White Dragon)||Flame (Red Dragon)|
|0×4d||Inferno||Flame (Hydra/Chimera)||Stone Gas||Mind Blast|
|0×51||Poison Gas (Green Dragon)||Thunder (Blue Dragon)||Deadly Gas (Iron Golem)||Snort (Nightmare)|
|0×55||Nuke (Death Machine)||Ink (Kraken)||Poison Darts (Manticore)||Dazzle (Vampire)|
|0×5d||Stone “Ray”||Excalipoor||Wind Slash||Wave Cannon|
|0×61||Tidal Wave||Wormhole (Atomos)||Comet||Sneeze (Typhon)|
First of all, let me say that it has been a year or more since I’ve looked at some of this data, and so my descriptions may be as clear as mud. Hopefully these notes will be of use and point modders in the right direction. Obviously, intimate prior knowledge of Final Fantasy- Dawn of Souls is expected to understand these notes. And, there’s definitely room for hackers to add to the knowledge base.
Well, let’s take a look at the heart of Final Fantasy 1 spells and abilities. The defining table is found at 0×1a1990 — 0×1a1d8f. Monster attacks are defined right after the spells at 0×1a1d90 — 0×1a1fdf. Every spell or ability is given a 16 byte entry.
For illustration’s sake, let’s take a look at the definitions of a few spells:
|Where used||Target||Power||Attack bits||Type||Graphics||%||Sp. Lvl.||MP Cost||Price|
What do each of these headings/byte pairings mean?
Where used— Whether this spell used in battle, while traveling, or anytime
01- While traveling 02- In battle 01 OR 02- Anytime
Target— How the spell is targeted in game. It will be one of these five values:
01- All enemies 02- One enemy 04- Caster 08- All allies 10- One ally
Type— The spell’s general classification. This determines how any other data in this table is applied.
01- Damage 02- Damage by family (undead) 03- Inflict negative status 04- Speed down 05- Morale down (Fear spell)
06- Unused 07- HP up (Cure, Heal) 08- Cure negative status 09- Defense up 0a- Bolster resistance vs. elements/special attacks
0b- Attack and Hit% pp (Saber) 0c- Hit % doubled (Fast) 0d- Attack power up 0e- Evade % down 0f- HP maximum
10- Evade % up 11- Remove all resistances 12- Inflict negative status (300 HP or less- 100% effective)
Power— Generally affects the damage for damage spells, and healing power for healing spells. This value is applied once for every “stairstep” (in stock FF1-DOS, this is every 10 Int points). So, a Black Mage with 33 Intellect would have this value applied to the power of the spell three times.
For damage spells, the power of the spell is augmented by this value every “stairstep”. For healing spells, the power of the spell is augmented by the base power of the spell every “stairstep”. For infliction spell, the chance to inflict the condition is augmented by the % value every “stairstep”.
However, for condition inflicting/curing spells, this becomes a bit mask for which conditions are being referenced. For instance, take the Rally spell from my mod 0×38:
Graphics— Spell graphics are by default 0×01 to 0×40, in spell order. Then, monster attacks are coded 0×41 to 0×65. Lastly, item graphics are coded 0×66 to 0×6d.
%— This is a multiplier that affects the healing power of healing spells, and the chance to inflict status effects on enemies. This does not seem to have any bearing on the damage dealt by pure damage spells.
The Dia spell type
This affects every spell of type 0×02. By default, the Dia spell family affects only the Undead family. This is driven by these four bytes:
0×07b7e2— 20 08: mov r0, #0×08(Monster family bit to check, while casting Dia in battle)
0×07b7e4— 40 08: and r0, r1 (Compare family bits of monster currently being hit)
In the Bestiary, this check is made again, in determining whether a monster is vulnerable to Dia:
0×041336— 20 08: mov r0, #0×08(Monster family bit to check, reporting in Bestiary)
0×041338— 40 18: and r0, r3 (Compare monster with check to see if we report weakness)
Changing spell order
If you are changing the order of spells, you will be subjecting yourself to quite a bit of pointer hacking. For a more in-depth look at these pointers, jump to Spell Re-ordering.