Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
# CIRCLE ONE
ICE_BOLT = Spell( "Icy Bolt",
"This attack does 1d8 cold damage to a single target.",
effects.OpposedRoll( att_modifier=15, on_success = (
effects.HealthDamage( (1,8,0), stat_bonus=stats.INTELLIGENCE, element=stats.RESIST_COLD, anim=animobs.BlueExplosion )
,), on_failure = (
effects.HealthDamage( (1,3,0), stat_bonus=None, element=stats.RESIST_COLD, anim=animobs.BlueExplosion )
,) ), rank=1, gems={LUNAR:1,WATER:1}, com_tar=targetarea.SingleTarget(), shot_anim=animobs.BlueBolt, mpfudge=-1,
ai_tar=invocations.TargetEnemy() )
RAISE_SKELETON = Spell( "Raise Skeleton",
"You conjure dark forces to animate a skeleton which will fight on your behaf.",
effects.CallMonster( {context.MTY_UNDEAD: True, context.DES_LUNAR: context.MAYBE, context.GEN_UNDEAD: context.MAYBE}, 2, anim=animobs.PurpleSparkle ),
rank=1, gems={EARTH:1,LUNAR:1}, com_tar=targetarea.SingleTarget(reach=2), ai_tar=invocations.TargetEmptySpot() )
# CIRCLE 2
RAISE_CORPSE = Spell( "Raise Corpse",
"You conjure dark forces to animate a lesser undead creature which will fight on your behaf.",
effects.CallMonster( {context.MTY_UNDEAD: True, context.DES_LUNAR: context.MAYBE, context.GEN_UNDEAD: context.MAYBE}, 4, anim=animobs.PurpleSparkle ),
rank=2, gems={EARTH:1,LUNAR:1}, com_tar=targetarea.SingleTarget(reach=2), ai_tar=invocations.TargetEmptySpot(), mpfudge=4 )
TOUCH_OF_DEATH = Spell( "Touch of Death",
"You touch one opponent, delivering the chill of the grave. The target suffers 2d5 cold damage and may be paralyzed.",
effects.OpposedRoll( att_modifier=10, on_success = (
effects.HealthDamage( (2,5,0), stat_bonus=stats.INTELLIGENCE, element=stats.RESIST_COLD, anim=animobs.BlueExplosion ),
effects.Paralyze( max_duration = 3 )
,), on_failure = (
effects.HealthDamage( (2,5,0), stat_bonus=stats.INTELLIGENCE, element=stats.RESIST_COLD, anim=animobs.BlueExplosion )
,) ), rank=2, gems={LUNAR:1,WATER:1}, com_tar=targetarea.SingleTarget(reach=1),ai_tar=invocations.TargetEnemy(), mpfudge=-2 )
# CIRCLE SIX
TSUNAMI = Spell( "Tsunami",
"Conjures a tidal wave which strikes foes for 5d10 water damage.",
effects.OpposedRoll( on_success = (
effects.HealthDamage( (5,10,0), stat_bonus=stats.INTELLIGENCE, element=stats.RESIST_WATER, anim=animobs.Bubbles )
,), on_failure = (
effects.HealthDamage( (2,12,1), stat_bonus=None, element=stats.RESIST_WATER, anim=animobs.Bubbles )
,) ), rank=6, gems={WATER:3}, com_tar=targetarea.Cone(reach=10),
ai_tar=invocations.TargetEnemy() )
CALL_WATER_ELEMENTAL = Spell( "Call Water Elemental",
"This spell will call forth a living embodiment of the seas to do your bidding.",
effects.CallMonster( {context.DES_WATER: True, context.SUMMON_ELEMENTAL: True }, 12, anim=animobs.GreenSparkle ),
rank=6, gems={WATER:3}, com_tar=targetarea.SingleTarget(reach=5), ai_tar=invocations.TargetEmptySpot(), mpfudge = 12 )
# CIRCLE SEVEN
HAIL_STORM = Spell( "Hail Storm",
"Conjures a storm of freezing hail. All targets caught within a 5 tile radius take 10d6 cold damage.",
effects.OpposedRoll( on_success = (
effects.HealthDamage( (10,6,0), stat_bonus=stats.INTELLIGENCE, element=stats.RESIST_COLD, anim=animobs.IceStorm )
,), on_failure = (
effects.HealthDamage( (3,10,0), stat_bonus=None, element=stats.RESIST_COLD, anim=animobs.IceStorm )
,) ), rank=7, gems={WATER:4}, com_tar=targetarea.Blast(radius=5), shot_anim=animobs.BlueComet,
ai_tar=invocations.TargetEnemy(min_distance=6) )
# CIRCLE EIGHT
effects.OpposedRoll( on_success = (
effects.HealthDamage( (2,4,0), stat_bonus=stats.INTELLIGENCE, element=stats.RESIST_FIRE, anim=animobs.RedCloud )
,), on_failure = (
effects.HealthDamage( (1,4,1), stat_bonus=None, element=stats.RESIST_FIRE, anim=animobs.RedCloud )
,)),
effects.Enchant( enchantments.FireSignEn, anim=None )
) ), rank=3, gems={AIR:1,FIRE:1}, com_tar=targetarea.SelfCentered(), ai_tar=invocations.TargetEnemy() )
# Slow (AL)
# CIRCLE FOUR
ANIMATION = Spell( "Animation",
"This spell will temporarily imbue inanimate objects with life.",
effects.CallMonster( {context.MTY_CONSTRUCT: True, context.DES_AIR: context.MAYBE, context.DES_FIRE: context.MAYBE}, 8, anim=animobs.RedSparkle ),
rank=4, gems={AIR:1,FIRE:1}, com_tar=targetarea.SingleTarget(reach=2), ai_tar=invocations.TargetEmptySpot(), mpfudge = 10 )
INCINERATE = Spell( "Incinerate",
"Eldritch flames envelop a single foe, doing 6d6 fire damage and possibly setting the target alight.",
effects.OpposedRoll( on_success = (
effects.HealthDamage( (6,6,0), stat_bonus=stats.INTELLIGENCE, element=stats.RESIST_FIRE, anim=animobs.RedCloud ),
effects.Enchant( enchantments.BurnLowEn )
), on_failure = (
effects.HealthDamage( (6,6,0), stat_bonus=stats.INTELLIGENCE, element=stats.RESIST_FIRE, anim=animobs.RedCloud ),
) ), rank=4, gems={FIRE:1,LUNAR:1}, com_tar=targetarea.SingleTarget(), shot_anim=animobs.FireBolt, ai_tar=invocations.TargetEnemy() )
# Polymorph (AL)
# CIRCLE FIVE
# Word of Pain (AL)
# Unstable Bolt (AF)
rank=3, gems={EARTH:2,SOLAR:1}, com_tar=targetarea.SingleTarget(reach=2), ai_tar=invocations.TargetEmptySpot(), mpfudge = 6 )
SLIMY_WEAPON = Spell( "Slimy Weapon",
"One ally's weapon will be coated in caustic slime which causes an extra 1d10 acid damage and may corrode an opponent's armor.",
effects.Enchant( enchantments.AcidWepEn, anim=animobs.OrangeSparkle ),
rank=3, gems={EARTH:1}, com_tar=targetarea.SingleTarget(),
ai_tar=invocations.TargetAllyWithoutEnchantment(enchantments.AcidWepEn) )
# Firebird (FS)
# CIRCLE FOUR
CALL_BEAST = Spell( "Call Beast",
"This spell will summon a powerful creature to fight on your behaf.",
effects.CallMonster( {context.MTY_CREATURE: True, context.DES_EARTH: context.MAYBE, context.GEN_NATURE: context.MAYBE, context.DES_SOLAR: context.MAYBE}, 8, anim=animobs.OrangeSparkle ),
rank=4, gems={EARTH:2,SOLAR:1}, com_tar=targetarea.SingleTarget(reach=2), ai_tar=invocations.TargetEmptySpot(), mpfudge = 9 )
# Tame Plants (FS)
# Web (EF)
# CIRCLE FIVE
CALL_MONSTER = Spell( "Call Monster",
"This spell will summon a powerful monster to fight on your behaf.",
effects.CallMonster( {context.MTY_CREATURE: True, context.DES_EARTH: context.MAYBE, context.GEN_NATURE: context.MAYBE, context.DES_SOLAR: context.MAYBE}, 10, anim=animobs.OrangeSparkle ),
rank=5, gems={EARTH:2,SOLAR:2}, com_tar=targetarea.SingleTarget(reach=2), ai_tar=invocations.TargetEmptySpot(), mpfudge = 10 )
ELEMENTAL_STORM = Spell( "Elemental Storm",
"The wrath of nature is brought to bear on your foes. All targets within a 3 tile radius take 2d4 damage from each of fire, cold, lightning, and acid.",
effects.OpposedRoll( on_success = (
effects.HealthDamage( (2,4,0), stat_bonus=stats.INTELLIGENCE, element=stats.RESIST_FIRE, anim=animobs.OrangeExplosion ),
effects.HealthDamage( (2,4,0), stat_bonus=stats.INTELLIGENCE, element=stats.RESIST_COLD, anim=animobs.BlueBoom ),
import stats
import context
import invocations
# CIRCLE 1
EARTHBIND = Spell( "Earthbind",
"Conjures plants which grab at travelers, making passage through the area very difficult.",
effects.PlaceField( enchantments.Entanglement, anim=animobs.OrangeSparkle ),
rank=1, gems={EARTH:1}, com_tar=targetarea.Blast(radius=4), mpfudge=1,
ai_tar=invocations.TargetEnemyWithoutField(enchantments.Entanglement,5) )
CALL_CRITTER = Spell( "Call Critter",
"This spell will summon a small woodland creature to fight on your behaf.",
effects.CallMonster( {context.MTY_CREATURE: True, context.DES_EARTH: context.MAYBE, context.GEN_NATURE: context.MAYBE}, 2, anim=animobs.OrangeSparkle ),
rank=1, gems={EARTH:1}, com_tar=targetarea.SingleTarget(reach=2), ai_tar=invocations.TargetEmptySpot(), mpfudge = 3 )
# CIRCLE 2
ACID_BOLT = Spell( "Acid Bolt",
"This attack does 2d5 acid damage to a single target, and may corrode the target's armor.",
effects.OpposedRoll( on_success = (
effects.HealthDamage( (2,5,0), stat_bonus=stats.INTELLIGENCE, element=stats.RESIST_ACID, anim=animobs.GreenExplosion ),
effects.OpposedRoll( def_stat=stats.TOUGHNESS, on_success = (
effects.Enchant( enchantments.ArmorDamage, anim=animobs.OrangeSparkle )
,))
), on_failure = (
effects.HealthDamage( (1,5,0), stat_bonus=None, element=stats.RESIST_ACID, anim=animobs.GreenExplosion )
,) ), rank=2, gems={EARTH:1}, com_tar=targetarea.SingleTarget(), shot_anim=animobs.GreenSpray,
ai_tar=invocations.TargetEnemy() )
BEASTLY_MIGHT = Spell( "Beastly Might",
HEAT_WAVE = Spell( "Heat Wave",
"A rapidly expanding wall of heat is projected from your hands. Anyone standing in its way takes 6d6 points of fire damage.",
effects.OpposedRoll( on_success = (
effects.HealthDamage( (6,6,0), stat_bonus=stats.INTELLIGENCE, element=stats.RESIST_FIRE, anim=animobs.DragonFire )
,), on_failure = (
effects.HealthDamage( (3,6,0), stat_bonus=None, element=stats.RESIST_FIRE, anim=animobs.DragonFire )
,) ), rank=5, gems={FIRE:3}, com_tar=targetarea.Cone(), ai_tar=invocations.TargetEnemy() )
# CIRCLE 6
CALL_FIRE_ELEMENTAL = Spell( "Call Fire Elemental",
"This spell will call forth a living vortex of fire to serve you for the duration of combat.",
effects.CallMonster( {context.DES_FIRE: True, context.SUMMON_ELEMENTAL: True }, 12, anim=animobs.RedSparkle ),
rank=6, gems={FIRE:3}, com_tar=targetarea.SingleTarget(reach=5), ai_tar=invocations.TargetEmptySpot(), mpfudge = 12 )
# Quickness
# CIRCLE SEVEN
DISINTEGRATION = Spell( "Disintegration",
"The primal flames of the universe are called forth to reduce a single target to dust. This spell does 10d10 atomic damage on a successful hit.",
effects.OpposedRoll( att_modifier=10, def_stat=stats.REFLEXES, on_success = (
effects.HealthDamage( (10,10,0), stat_bonus=stats.INTELLIGENCE, element=stats.RESIST_ATOMIC, anim=animobs.Nuclear )
,), on_failure = (
effects.NoEffect( anim=animobs.SmallBoom )
,) ), rank=7, gems={FIRE:3}, com_tar=targetarea.SingleTarget(), shot_anim=animobs.Fireball, ai_tar=invocations.TargetEnemy() )
# CIRCLE EIGHT
ACID_SPRAY = Spell( "Acid Spray",
"A stream of acid sprays forth, burning enemies for 1d6 damage. This spell has a short range but can affect several targets.",
effects.OpposedRoll( on_success = (
effects.HealthDamage( (1,6,0), stat_bonus=stats.INTELLIGENCE, element=stats.RESIST_ACID, anim=animobs.GreenExplosion )
,), on_failure = (
effects.HealthDamage( (1,2,0), stat_bonus=None, element=stats.RESIST_ACID, anim=animobs.GreenExplosion )
,) ), rank=1, gems={FIRE:1,EARTH:1}, com_tar=targetarea.Cone(reach=3), ai_tar=invocations.TargetEnemy() )
# CIRCLE TWO
CALL_ANIMAL = Spell( "Call Animal",
"This spell will summon a natural creature to fight on your behaf.",
effects.CallMonster( {context.MTY_CREATURE: True, context.DES_EARTH: context.MAYBE, context.GEN_NATURE: context.MAYBE, context.DES_SOLAR: context.MAYBE}, 4, anim=animobs.OrangeSparkle ),
rank=2, gems={EARTH:1,SOLAR:1}, com_tar=targetarea.SingleTarget(reach=2), ai_tar=invocations.TargetEmptySpot(), mpfudge = 4 )
# Tame Animal (FS)
# Wolf Form (EF)
# CIRCLE THREE
CALL_CREATURE = Spell( "Call Creature",
"This spell will summon a large natural creature to fight on your behaf.",
effects.CallMonster( {context.MTY_CREATURE: True, context.DES_EARTH: context.MAYBE, context.GEN_NATURE: context.MAYBE, context.DES_SOLAR: context.MAYBE}, 6, anim=animobs.OrangeSparkle ),
rank=3, gems={EARTH:2,SOLAR:1}, com_tar=targetarea.SingleTarget(reach=2), ai_tar=invocations.TargetEmptySpot(), mpfudge = 6 )
SLIMY_WEAPON = Spell( "Slimy Weapon",
"One ally's weapon will be coated in caustic slime which causes an extra 1d10 acid damage and may corrode an opponent's armor.",
effects.Enchant( enchantments.AcidWepEn, anim=animobs.OrangeSparkle ),
rank=3, gems={EARTH:1}, com_tar=targetarea.SingleTarget(),
ai_tar=invocations.TargetAllyWithoutEnchantment(enchantments.AcidWepEn) )
DISMISSAL = Spell( "Dismissal",
"Forces one demon, elemental, or spirit to leave the mortal realm and return to its home plane.",
effects.TargetIs( effects.OTHERWORLDLY, anim=animobs.BlueSparkle, on_true=(
effects.OpposedRoll( on_success = (
effects.InstaKill( anim=animobs.CriticalHit )
,), on_failure = (
effects.HealthDamage( (3,12,0), stat_bonus=stats.INTELLIGENCE, element=stats.RESIST_SOLAR, anim=animobs.YellowExplosion ), )
),
), on_false = (effects.NoEffect( anim=animobs.Caption ),)
), rank=6, gems={AIR:2}, com_tar=targetarea.SingleTarget(), shot_anim=animobs.MysticBolt )
CALL_AIR_ELEMENTAL = Spell( "Call Air Elemental",
"This spell will summon a living embodiment of the skies to fight on your behalf.",
effects.CallMonster( {context.DES_AIR: True, context.SUMMON_ELEMENTAL: True }, 12, anim=animobs.BlueSparkle ),
rank=6, gems={AIR:3}, com_tar=targetarea.SingleTarget(reach=5), ai_tar=invocations.TargetEmptySpot(), mpfudge = 12 )
# CIRCLE SEVEN
# Identify All
# CIRCLE EIGHT
THUNDER_STORM = Spell( "Thunder Storm",
"Calls down the wrath of the heavens. All targets within a 5 tile radius will be struck for 10d8 lightning damage.",
effects.OpposedRoll( on_success = (
effects.HealthDamage( (10,8,0), stat_bonus=stats.INTELLIGENCE, element=stats.RESIST_LIGHTNING, anim=animobs.ThunderStorm )
,), on_failure = (
effects.HealthDamage( (4,10,0), stat_bonus=None, element=stats.RESIST_LIGHTNING, anim=animobs.ThunderStorm )