Skip to content
Jaka Kranjc edited this page May 2, 2023 · 3 revisions

This is a mirror of the list of spells on the iesdp, put here purely so that test comments can be added. Successfully working spells get removed from the list.

A save game with a fully hacked mage character: https://github.com/gemrb/gemrb/files/4068701/000000252-PST.A.Mage.and.a.Dungeon.zip

Mage 1##

  • OK? SPWI108 Pacify cast fx is a bit delayed (7 in the data; normal)?
  • ERRORS SPWI111 Shield effects are delayed, but that's what the data says (timing mode: 4-delayed)
  • ERRORS SPWI113 Missile of Patience recheck
  • OK? SPWI116 Tongues of Flamefirmp.bam/spburn.bam
  • ERRORS SPWI117 Seeking Flames fx worked, not checked for parity with original game
  • OK? SPWI119 Submerge the Will effects are delayed, but that's what the data says (timing mode: 4-delayed)

Mage 2##

  • ERRORS SPWI201 Adder's Kiss no visual fx
  • BROKEN SPWI202 Black-Barbed Curse - Causes extreme brownness. Damage and visuals very delayed
  • BROKEN SPWI203 Black-Barbed Shield ac bonus seems to stack. causes blinding screen whiteout.
  • BROKEN SPWI204 Blood Bridge sound and animation take a minute to take effect. no discernible spell effect
  • BROKEN SPWI207 Ice Knife - Only allows shooting one missile
  • BROKEN SPWI211 Strength anims work. strength bonus stacks and is permanent.
  • ERRORS SPWI212 Swarm Curse spell appears to work, but animations time out very quickly
  • BROKEN SPWI213 Horror does not seem to scare anyone
  • UNTESTED SPWI215 Knock
  • BROKEN SPWI217 Ignus' Terror Puts actor in panic state, but panic state makes no difference
  • BROKEN SPWI218 Infernal Orb as with pacify, stunning effect makes creature unassailable
  • BROKEN SPWI219 Power of Onevisual effect works, no strength bonus

Mage 3##

  • ERRORS SPWI304 Cloak of Warding seems to work?
  • OK? SPWI305 Elysium's Tears screen flashes a bit messy
  • SPWI307 Hold Undead makes screen go orange. hold effect seems to be very inneffectual
  • ERRORS SPWI308 Tasha's Unbearable Derisive Laughter fx seem to work. 50 console errors for spring.bam and no visual/sound effect
  • BROKEN SPWI309 Vampiric Touch no discernible effect
  • BROKEN SPWI310 Ax of Torment Causes horrible repeating sound effect overload that doesnt go away
  • BROKEN SPWI311 Zerthimon's Focus unable to discern success
  • UNTESTED SPWI312 Infernal Shield
  • ERRORS SPWI313 Fiery Rain fire drops work, screen fades to yellow
  • BROKEN SPWI314 Balance in all Things pain reflection doesn't work

Mage 4##

  • BROKEN SPWI401 Blacksphere Does not cause damage, couldn't find bsphere.pro
  • BROKEN SPWI402 Confusion Gfx work, state change applies, actor behaviour does not change
  • ERRORS SPWI405 Force Missiles Would work, but only able to fire one missile
  • BROKEN SPWI406 Improved Strength str mod is permanent
  • BROKEN SPWI408 Shroud of Shadows Blacks out screen, trans works, no spell effect
  • BROKEN SPWI409 Remove Curse nope, still stuck with cursed items
  • ERRORS SPWI410 Elemental Strike another spell where limit is one missile

Mage 5##

  • ERRORS SPWI501 Cloudkill seems to work well, despite the lack of pausing
  • BROKEN SPWI502 Cone of Cold frozen creatures can't be targeted, cone bam can be misoriented (no right-facing frames?)
  • UNTESTED SPWI504 Enoll Eva's Duplication
  • BROKEN SPWI505 Desert Hell freezes game

Mage 6##

  • UNTESTED SPWI601 Antimagic Shell
  • BROKEN SPWI602 Globe of Invulnerability too short duration, reported bug
  • UNTESTED SPWI603 Howl of Pandemonium

Mage 7##

  • ERRORS SPWI701 Acid Storm Gfx work but stuck on endless loop.
  • ERRORS SPWI702 Bladestorm Gfx a bit strange, but there, damage works
  • BROKEN SPWI704 Guardian Mantle Mantle takes a minute to appear, seemingly no bonus
  • BROKEN SPWI705 Stygian Ice Storm Seemingly no spell effect

Mage 8##

  • BROKEN SPWI802 Meteor Storm Bombardment Unable to cast ?? No discernable effect
  • UNTESTED SPWI803 Deathbolt - Some graphics work
  • UNTESTED SPWI804 Ignus' Fury
  • UNTESTED SPWI807 Mechanus' Cannon

Mage 9##

  • UNTESTED SPWI901 Celestial Host
  • UNTESTED SPWI902 Conflagration
  • UNTESTED SPWI905 Elysium's Fires
  • UNTESTED SPWI909 Power Word: Kill
  • BROKEN UnusableUNTESTED SPWI912 Abyssal Fury (missing projectile)
  • UNTESTED SPWI914 Rune of Torment

Divine Spells

  • UNTESTED SPPR101 Blessing
  • UNTESTED SPPR102 Cure Light Wounds
  • UNTESTED SPPR103 Curse
  • UNTESTED SPPR104 Detect Evil
  • UNTESTED SPPR105 Halo of Lesser Revelation
  • UNTESTED SPPR106 Protection from Evil
  • UNTESTED SPPR201 Aid
  • UNTESTED SPPR202 Cure Moderate Wounds
  • UNTESTED SPPR204 Spiritual Hammer
  • UNTESTED SPPR301 Call Lightning
  • UNTESTED SPPR302 Flamewalk
  • UNTESTED SPPR303 Prayer
  • UNTESTED SPPR304 Speak With Dead
  • UNTESTED SPPR307 Remove Curse
  • UNTESTED SPPR401 Cure Serious Wounds
  • UNTESTED SPPR501 Cure Critical Wounds
  • UNTESTED SPPR502 Raise Dead
  • UNTESTED SPPR601 Heal

Traps##

  • UNTESTED SPWI001 Arrow Strike Trap
  • UNTESTED SPWI002 Dart Trap
  • UNTESTED SPWI003 Spinning Blades Trap
  • UNTESTED SPWI004 Avernus Fireball Trap
  • UNTESTED SPWI005 Flame Tongue Trap
  • UNTESTED SPWI006 Acid Rain Trap
  • UNTESTED SPWI007 Unholy Baptism Trap
  • UNTESTED SPWI008 Gas Cloud Trap
  • UNTESTED SPWI009 Spikes Trap
  • UNTESTED SPWI010 Improved Acid Rain Trap

Innate##

  • ERRORS SPIN101 Litany of Curses (see tracker)
  • UNTESTED SPIN102 Skull Mob
  • UNTESTED SPIN103 Stories-Bones-Tell
  • UNTESTED SPIN104 Sensory Touch
  • UNTESTED SPIN106 Fiend Fear Aura
  • UNTESTED SPIN107 Kiss (called Kiss of Death in SPELL.IDS)
  • UNTESTED SPIN108 Raise Dead

Special##

  • UNTESTED SPIN001 Add Litany of Curses
  • UNTESTED SPIN002 Removed Litany of Curses
  • UNTESTED SPIN003 Add Skull Mob
  • UNTESTED SPIN004 Remove Skull Mob
  • UNTESTED SPIN005 Add Stories-Bones-Tell
  • UNTESTED SPIN006 Remove Stories-Bones-Tell
  • UNTESTED SPIN007 Add Sensory Touch
  • UNTESTED SPIN008 Remove Sensory Touch
  • UNTESTED SPIN009 Add Kiss
  • UNTESTED SPIN010 Remove Kiss
  • UNTESTED SPIN011 Tint Screen
  • UNTESTED SPIN012 Jumble Curse
  • UNTESTED SPIN013 Dispel Jumble Curse
  • UNTESTED SPIN014 Add Raise Dead
  • UNTESTED SPIN015 Remove Raise Dead

List of BAM Animations

actor casting glows

a001abjn - casting glow 35: magic shields assemble
a002aalt - casting glow 36?: white whisps from floor
a003intr - casting glow 41: stars implode
a004ench - casting glow 38: 3 sparks dazzle
a005ldiv - casting glow 43: runes swirl
a006illu - casting glow 40: blue smoke explosion
a008cnjr - casting glow 37?: pulsating tentacles from ground
a009necr - casting glow 42: contorted faces swirl
a009skil - casting glow ??: use special ability
a010spin - casting glow 44?: use innate spell
itemspll - use item effect

spells

s******* - core spell anims
s001angr - angry icon
s001cuss - !@$!@#$
s002dmml - magic missile hit?
s002fwks - missile dissipation
s003shdw - throbbing shadow spirit
s004siph - red siphoning
s006cmbo - orb materialise
s006opwr - orb materialise (darker)
s006orba - chromatic orb
s006spls - orb splash
s012aglb - white bubble
s012armr - armor assemble
s013appr - mirror appear
s013flsh - large flash
s013minr - minor embalming
s013smsh - mirror breaks
s013spkl - rising sparkles
s013star - yellow floor flare
s014fist - iron fist icon
s015hcst - concentric expanding green gloop
s015hwav - same, large
s019acid - acid orb explodes
s019bseg - adder body segment
s019head - 9 cycles, adder head
s022curs - barbs from floor clasping
s023bbsh - 6 cycles, concentric barb shield
s024goup - blood rising
s024godn - blood falling
s025cicy - 5 cycles, ice missile firing?
s025cold - 2 cycles, ring of ice
s025grtr - greater embalming
s025melt - 9 cycles, ice projectile dissipates
s025proj - 9 cycles, ice projectile
s025ptrz - 9 cycles, ice projectile static?
s025snow - rising white sparkles
s029glow - yellow rays japan style
s029stmn - muscle man icon
s030swat - swarm
s030swen - 2 cycles, swarm circle
s030swex - swarm explodes
s030swfm - 5 cycles, swarm cast?
s030swgr - 2 cycles, swarm grow
s030swpr - 9 cycles, swarm proj
s031axst - ax of torment
s031delc - ball lightning large forks
s031expl - ???? blue explosion dissipation
s031grrn - yellow rune effect
s031lsrn - blue rune effect
s034ball - 2 cycles, ball lightning
s034clwd - 2 cycles, cloak appears
s034dmg2 - 5 cycles ???? white dissipating hit effect
s034dspr - magic white sphere dissipates
s034gdam - 5 cycles, white hit effect 2
s034glob - invul globe?
s037hold - hold undead
s038tsha - ???? pink cone of fog
s039vprp - purple blobs float up
s039vrdn - red blobs float down
s039vrup - red blobs float up
s041ball - throbbing purple ball
s041cast - purple cast effect
s041glrp - purple ball assemble
s041wave - purple gloop shockwave
s042conf - confusion compass haywire
s045dfrc - 2 cycles fast expanding shockwave
s045fcst - 5 cycles force missile cast
s045fmsl - 9 cycles force missle projectile
s046istm - extreme muscle man
s048crtr - 9 cycles barbed projectile
s048rise - large purple blade rises
s048sphr - purple sphere form
s052cone - 5 cycles cone of cold
s052hows - cone ice block
s052ring - 6 cycles 2 encircling rings
s055burn - 2 cycles burn effect
s055cast - giant horned skull fx
s055head - same but different
s055pskl - 9 cycles horned skull projectile
s055sklc - 6 cycles encircling skulls
s055swhd - 6 cycles encircling skulls glow ?
s056ckll - 3 cycles random clouds
 
s056fexp - fire explosion
s056frbl - 2 cycles fireball forming
s056ftrl - fireball trail
s056icbl - 2 cycles ice ball forming
s056icbm - ice ball explosion
s056itrl - ice ball trail

s057blad - 5 cycles concentric blade ring segment
s057flsh - ??? ice crystal glow flash

s057beam - 2 cycles death from above beam 

s061glwb - yellow glowing orb
s061rock - 3 cycles meteors
s061shll - antimagic shell appear
s061smlb - ???? globe of energy dissipating
s062glob - large globe appearing
s064bglt - 2 cycles purple lightning strike (random)
s064clod - 3 cycles purle cloud (appear:loop:dissipate)
s064hglt - massive lightning strike
s064lort - 3 cycles purple cloud lower right (appear:loop:dissipate)
s064uplt - 3 cycles purple cloud upper left (appear:loop:dissipate)

s070bomb - falling force missile
s070boom - missile hit
s070cstr - 2 cycles force missile caster (ray shoots up:ray appears)

s071flow - acid storm above actor cloud
s071pudl - acid storm floor puddle
s074loop - blue crystal shield
s074shrd - 2 cycles shield appears (front:back)
s075drop - dropping blue flash
s075wdsh - full screen ice sheet shatters
s077barm - hell arm grabs
s077crvs - 3 cycles abyssal crevasse (appears:loop:dissipate)
s077scrt - claw scratching fx
s077spit - ???? broken ?
s077spt2 - hells maw spits a skeleton out

s083bgcl - top of screen, ominous yellow cloud
s083bolt - 2 cycles death bolt (appears:loop)
s083clds - 3 cycles ????
s083dbht - death bolt hits
s083flsh - extremely lame method of white flashing
s083crak - crack in floor, flames rise
s084ighd - ignus enraged head
s085pwbd - eye blinded, shatters
s087blst - portal appears, death ray comes out

s091appr - swirling white vortex, dissipates
s091arrs - full screen celestial arrow
s091asun - pulsating blue star
s091blst - 2 cycles, massive pillar of light (appears:loop)
s091deva - deva with mace appears
s091dvat - deva attacks
s091gate - pearly gates
s091grly - deva with bow appears
s091htch - egg hatches... whatever next...
s091phnx - full screen phoenix appears and breathes fire
s091rail - ??? blue energy ring appears
s091smht - ??? yellow energy hit
s092conf - gloopy skeleton springs from floor and poops over everything, oh no
s092flmd - green flame effect
s095cast - 2 cycles yellow ray shoots from floor (shoots:appears)
s095fhit - yellow projectiles hit 
s095proj - projectile falls from above
s099blad - blade rune appears
s099expl - ??? red blob explosion
s099hand - 5 directions pointing skeletal hand

s0p2cur3 - 2 cycles cure effect (light:heavy)

s111shld - shield fx appear

s113blap - 5 directions crossbow appears
s113blar - 9 directions crossbow bolt
s113bldp - 5 directions crossbow disappears
s113blex - bolt explodes
s113blfr - 5 directions crossbow fires

s113bowf - 5 directions bow fires
s113bwar - 9 directions arrow projectile
s113slng - ???? unused?
s113smok - green smoke loop
s114frnd - sparlkly twinkles loop
s115blnd - blindess icon fx
s213hrhd - horror effect
s214luck - luck effect
s215knoc - knock effect
s311zrth - zerthimon's focus?
s914bgbl - 2 cycles ???? sky falling projectile (appears:loop)
s914hgbl - circle of runes glowing ominously
s914rune - giant circle of runes appears

other effects

ef01tprt - portal
ef02gswl - green contracting swirl
ef02tpr2 - portal start/stop
ef03tpr3 - ??
 
ffgkisat - succubus kiss
 
flash - memorise effect
 
frblblue - small fireball
frblfren
frblyllo
i001zzzz - rising zzzz
 
se10fizz - spell fail fizzle
se11smky - green smoke apears and dissipates
 
sp11bles - bless ray
sp13chnd - skeletal hand
sp13curs - curse ray
sp16devl - demon face
sp16prot - yellow bubble deflects skeletal hand
sp21said - aid?
sp22cmod - white cure rays
sp24sphm - priest hammer
sp31cllt - lightning strike
sp33hand - praying hands
sp33pray - expanding white wave
sp41cser -
sp51ccri - surrounding light dots
sp61heal - light pillar underglow
sp62rded - corpse reanimation
 
spmagmis - magic missile proj.
 
t001glwb - ?
t_acid -  acid damage blobs
t_ccloud - green puffy cloud
t_ceil - brown gloop from ceiling
t_fbld0* (1-4) - blades
t_fdarts - spread of darts proj
t_fire01
t_fire02
t_gspike - spikes spring from floor
t_smoke - grey dissipating smoke

Original's duration hacks, REd by Bubb

int CUtil::UtilRandInt(int nRange, int nWeight)
{
    nRange = nRange >= 1 ? nRange : 1;

    int result = rand() / 100 % nRange + nWeight;

    if (result >= nRange) {
        result = nRange + -1;
    }

    if (result < 0) {
        result = 0;
    }

    return result;
}

//------------------------------------------------------------------------------------------------------------------------------------------
//
// Called by the following actions when processing ability effects:
//    31 - Spell
//    95 - SpellPoint
//   113 - ForceSpell
//   114 - ForceSpellPoint
//   160 - ApplySpell
//   181 - ReallyForceSpell
//   191 - SpellNoDec
//   192 - SpellPointNoDec
//
//the caller filters by timing mode 0 or timing mode 3; got called on global effects as well

void CGameAIBase::ApplyHardcodedSpellDurationRules(CGameEffect* pEffect, short nCasterLevel, int nSpellIDS) {

    if (nSpellIDS == 1104) { // SPPR104.SPL - Detect Evil
        uint nScaledDuration = nCasterLevel * 25 + 50;
        if (nScaledDuration >= 300) {
            nScaledDuration = 300;
        }
        pEffect->m_duration = nScaledDuration;
        pEffect->m_durationTemp = nScaledDuration;
    }
    else if (nSpellIDS == 2104) { // SPWI104.SPL - Fist of Iron
        uint nScaledDuration = nCasterLevel * 5 + 5;
        pEffect->m_duration = nScaledDuration;
        pEffect->m_durationTemp = nScaledDuration;
        pEffect->m_special = 15;
    }
    else if (nSpellIDS == 2114) { // SPWI114.SPL - Friends

        if (pEffect->m_effectId != 8) { // Colour: Change by RGB

            uint randVal = this->m_objectType == 0x31 // SPRITE
                ? CUtil::UtilRandInt(16, this->m_tempStats.m_nLuck); // Weighted [0-15]; luck as it was before this effect pass
                : rand() % 16; // [0-15]

            uint nScaledDuration = nCasterLevel * 5 + 5 + randVal;
            pEffect->m_duration = nScaledDuration;
            pEffect->m_durationTemp = nScaledDuration;
        }

        pEffect->m_special = 15;
    }
    else if (nSpellIDS == 2214) { // SPWI214.SPL - Luck
        uint nScaledDuration = nCasterLevel * 5;
        pEffect->m_duration = nScaledDuration;
        pEffect->m_durationTemp = nScaledDuration;
        pEffect->m_special = 15;
    }
    else if (nSpellIDS == 2216) { // SPWI216.SPL - Blur
        uint nScaledDuration = nCasterLevel * 5 + 15;
        pEffect->m_duration = nScaledDuration;
        pEffect->m_durationTemp = nScaledDuration;
        pEffect->m_special = 15;
    }
    else if (nSpellIDS == 2308) { // SPWI308.SPL - Tasha's Unbearable Derisive Laughter

        if (pEffect->m_effectId != 195 && pEffect->m_effectId != 207) { // !(Tint Playing Screen Fade) and !(Spell Effect: Stop All Action)

            uint nNewDuration;
            uint nNewSpecial;

            if (pEffect->m_effectId == 191) { // Play BAM File Not Blended
                nNewDuration = 5;
                nNewSpecial = (uint)this % 15 + 7;
            }
            else if (pEffect->m_effectId == 174) { //  Play Sound
                nNewDuration = 1;
                nNewSpecial = (uint)this % 15 + 7;
            }
            else {
                nNewDuration = nCasterLevel * 5;
                nNewSpecial = 7;
            }

            pEffect->m_duration = nNewDuration;
            pEffect->m_durationTemp = nNewDuration;
            pEffect->m_special = nNewSpecial;
        }
    }
    else if (nSpellIDS == 2311) { // SPWI311.SPL - Zerthimon's Focus
        uint nScaledDuration = nCasterLevel * 5;
        pEffect->m_duration = nScaledDuration;
        pEffect->m_durationTemp = nScaledDuration;
        pEffect->m_special = 25;
    }
    else if (nSpellIDS == 2401) { // SPWI401.SPL - Blacksphere

        if (pEffect->m_effectId == 39) { // Unconsciousness (Helpless)

            pEffect->m_duration = 10;
            pEffect->m_durationTemp = 10; // Duration (in seconds) when timing mode 6 (limited after duration) stops waiting.
                                          // This is effectively the effect duration after the delay.

            pEffect->m_special = 100; // If non-zero, duration (in ticks) when timing mode 3 (Delay/Limited) starts.
                                      // This is effectively the delay duration used in timing mode 6,
                                      // which timing mode 3 immediately transforms into.
        }
    }
    else if (nSpellIDS == 2402) { // SPWI402.SPL - Confusion
        uint nNewDuration = nCasterLevel + 10;
        pEffect->m_duration = nNewDuration;
        pEffect->m_durationTemp = nNewDuration;
        pEffect->m_special = 25;
    }
    else if (nSpellIDS == 3101) { // SPIN101.SPL - Litany of Curses

        if (pEffect->m_effectId != 45) { // State: Stun

            uint nScaledDuration = nCasterLevel * 5; // Level that the spell was cast at, not creature level
            if (nScaledDuration >= 30) {
                nScaledDuration = 30;
            }

            pEffect->m_duration = nScaledDuration;
            pEffect->m_durationTemp = nScaledDuration; // Duration (in seconds) when timing mode 6 (limited after duration) stops waiting.
                                                       // This is effectively the effect duration after the delay.

            CVariable* pVar = GetVariable("GLOBAL", "Morte_Taunt", nullptr, nullptr);
            pEffect->m_saveMod = pVar->m_intValue; // .EFF V1 [+0x28]
        }
    }
}