class GemOfHolograms(Consumable): true_name = "Gem of Holograms" true_desc = "This gem may be used to summon an illusory monster to aid you in combat." itemtype = GEM mass_per_q = 3 cost_per_q = 600 tech = invocations.Invocation( "Create Illusion", effects.CallMonster({(context.HAB_EVERY, context.SET_EVERY): True}, 5, anim=animobs.BlueSparkle), com_tar=targetarea.SingleTarget(reach=5), ai_tar=invocations.TargetEmptySpot(), exp_tar=None)
# 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) # 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), )),
# 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 )
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 ) # 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) )
effects.TargetIsEnemy( on_true = ( 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() ) # 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( (2,8,1), stat_bonus=None, 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() ) # CIRCLE FIVE # CIRCLE SIX
effects.ManaDamage((1,8,0), stat_bonus=stats.INTELLIGENCE, anim=animobs.PurpleExplosion ), ), on_failure = ( effects.HealthDamage((1,4,0), stat_bonus=None, element=stats.RESIST_SOLAR, anim=animobs.YellowExplosion ), effects.ManaDamage((1,4,0), stat_bonus=None, anim=animobs.PurpleExplosion ), )), rank=2, gems={LUNAR:1,SOLAR:1}, com_tar=targetarea.SingleTarget(), shot_anim=animobs.WizardMissile, ai_tar=invocations.TargetEnemy(), mpfudge=-3 ) # CIRCLE THREE CHAOTIC_AID = Spell( "Chaotic Aid", "This spell calls forth a servant of chaos to aid you in battle.", effects.CallMonster( {context.GEN_CHAOS: True, context.MTY_FIGHTER: True}, 5, anim=animobs.OrangeSparkle ), rank=3, gems={EARTH:1,AIR:1}, com_tar=targetarea.SingleTarget(reach=2), ai_tar=invocations.TargetEmptySpot(), mpfudge = 3 ) # CIRCLE FOUR # CIRCLE FIVE # CIRCLE SIX # CIRCLE SEVEN # CIRCLE EIGHT