class Lamia( base.Monster ): name = "Lamia" statline = { stats.STRENGTH: 18, stats.TOUGHNESS: 12, stats.REFLEXES: 15, \ stats.INTELLIGENCE: 13, stats.PIETY: 15, stats.CHARISMA: 12 } SPRITENAME = "monster_default.png" FRAME = 2 TEMPLATES = () MOVE_POINTS = 10 VOICE = dialogue.voice.GREEK HABITAT = ( context.HAB_EVERY, context.HAB_DESERT, context.SET_EVERY, context.DES_LUNAR, context.MTY_HUMANOID, context.MTY_BOSS ) ENC_LEVEL = 7 TREASURE = treasuretype.HighItems() ATTACK = items.Attack( (1,6,0), element = stats.RESIST_SLASHING, extra_effect= effects.StatDamage( stats.PIETY, amount=4, anim=animobs.GreenBoom ) ) TECHNIQUES = ( invocations.MPInvocation( "Spirit Drain", effects.TargetIsEnemy( on_true = ( effects.OpposedRoll( on_success = ( effects.ManaDamage( (1,8,0), stat_bonus=stats.TOUGHNESS, anim=animobs.PurpleExplosion ), effects.CauseSleep() ,), on_failure = ( effects.ManaDamage( (1,8,0), stat_bonus=None, anim=animobs.PurpleExplosion ) ,)),), on_false= ( effects.NoEffect( anim=animobs.PurpleExplosion ) ,)), com_tar=targetarea.Cone(reach=4), ai_tar=invocations.TargetEnemy(), mp_cost=12 ), ) def init_monster( self ): self.levels.append( base.Humanoid( 8, self ) )
class MageBlasterTrap(MultiTrap): NAME = "Mage Blaster" FX = effects.SavingThrow( on_success=(effects.NoEffect(anim=animobs.SmallBoom), ), on_failure=(effects.ManaDamage((10, 6, 0), stat_bonus=None, anim=animobs.PurpleSparkle), ), roll_modifier=-25) MIN_RANK = 5 DIFFICULTY = 0 ONE_SHOT = True
class MadMonk(base.Monster): name = "Mad Monk" statline = { stats.STRENGTH: 12, stats.TOUGHNESS: 14, stats.REFLEXES: 16, \ stats.INTELLIGENCE: 12, stats.PIETY: 16, stats.CHARISMA: 10, stats.NATURAL_DEFENSE: -10, stats.MAGIC_DEFENSE: 10 } SPRITENAME = "monster_chaos.png" FRAME = 7 TEMPLATES = () MOVE_POINTS = 10 HABITAT = (context.HAB_EVERY, context.HAB_DESERT, context.SET_EVERY, context.MTY_HUMANOID, context.MTY_FIGHTER, context.MTY_PRIEST, context.DES_FIRE, context.GEN_CHAOS) ENC_LEVEL = 5 TREASURE = treasuretype.Standard((items.POTION, items.CLOTHES)) TECHNIQUES = (invocations.MPInvocation( "Fire Soul", effects.TargetIsAlly( on_true=(effects.Enchant(enchantments.RegeneratEn, anim=animobs.RedCloud), effects.TargetIsDamaged(on_true=(effects.HealthRestore( dice=(2, 6, 0)), ))), on_false=(effects.HealthDamage((2, 6, 0), stat_bonus=None, element=stats.RESIST_FIRE, anim=animobs.RedCloud), )), com_tar=targetarea.SelfCentered(radius=2, delay_from=-1), ai_tar=invocations.TargetWoundedAlly(), mp_cost=25), ) ATTACK = items.Attack((1, 8, 0), element=stats.RESIST_CRUSHING, extra_effect=effects.ManaDamage( (1, 8, 0), stat_bonus=None, anim=animobs.PurpleExplosion)) def init_monster(self): self.levels.append(base.Humanoid(5, self))
ai_tar=invocations.TargetEnemy(), mpfudge=-1 ) # CIRCLE TWO SLEEP = Spell( "Sleep", "Causes living creatures in a 2 tile radius to fall asleep.", effects.TargetIs( pat=effects.ANIMAL, anim=animobs.PurpleSparkle, on_true = ( effects.OpposedRoll( att_modifier=0, on_success = ( effects.CauseSleep(), )) ,) ), rank=2, gems={LUNAR:2}, com_tar=targetarea.Blast(radius=2), ai_tar=invocations.TargetMobileEnemy(min_distance=3) ) ENERVATE = Spell( "Enervate", "A ray of negative energy strikes one opponent, draining 4-16 mana instantly.", effects.ManaDamage((4,4,0), stat_bonus=stats.INTELLIGENCE, anim=animobs.PurpleExplosion ), rank=2, gems={LUNAR:1}, com_tar=targetarea.SingleTarget(), shot_anim=animobs.PurpleVortex, ai_tar=invocations.TargetEnemy(), mpfudge=-1 ) # CIRCLE 3 WITHER = Spell( "Wither", "Conjures a sphere of negative energy, draining a single target for 2d10 dark damage and 1d6 points of strength.", effects.OpposedRoll( on_success = ( effects.HealthDamage( (2,10,0), stat_bonus=stats.INTELLIGENCE, element=stats.RESIST_LUNAR, anim=animobs.PurpleExplosion ), effects.StatDamage( stats.STRENGTH, amount=6 ) ,), on_failure = ( effects.HealthDamage( (1,9,1), stat_bonus=stats.INTELLIGENCE, element=stats.RESIST_LUNAR, anim=animobs.PurpleExplosion ), effects.StatDamage( stats.STRENGTH, amount=1 ) ,) ), rank=3, gems={LUNAR:2}, com_tar=targetarea.SingleTarget(),ai_tar=invocations.TargetEnemy(),shot_anim=animobs.MysticBolt )
class ManaLeak( Enchantment ): NAME = "Mana Leak" def __init__( self ): super(ManaLeak, self).__init__(dispel=(MAGIC,CURSE,DAILY)) FX = effects.ManaDamage( (2,6,0), stat_bonus=None, anim=animobs.PurpleExplosion ) MAX_USES = 10