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 Fossil( base.Monster ): name = "Fossil" statline = { stats.STRENGTH: 24, stats.TOUGHNESS: 19, stats.REFLEXES: 12, \ stats.INTELLIGENCE: 1, stats.PIETY: 14, stats.CHARISMA: 1, stats.RESIST_LUNAR: 155 } SPRITENAME = "monster_skeletons.png" FRAME = 27 TEMPLATES = (stats.UNDEAD,stats.BONE) MOVE_POINTS = 6 VOICE = None HABITAT = ( context.HAB_CAVE, context.SET_EVERY, context.DES_LUNAR, context.DES_EARTH, context.MTY_UNDEAD, context.MTY_BEAST, context.MTY_BOSS, context.GEN_UNDEAD, context.GEN_NATURE ) ENC_LEVEL = 10 COMBAT_AI = aibrain.BrainDeadAI() ATTACK = items.Attack( (3,8,0), element = stats.RESIST_CRUSHING ) TECHNIQUES = ( invocations.MPInvocation( "Hellfire", effects.OpposedRoll( att_skill=stats.PHYSICAL_ATTACK, att_stat=stats.REFLEXES, att_modifier=10, def_stat=stats.REFLEXES, on_success = ( effects.HealthDamage( (1,10,0), stat_bonus=stats.TOUGHNESS, element=stats.RESIST_LUNAR, anim=animobs.PurpleExplosion, on_success = ( effects.SavingThrow( roll_skill=stats.RESIST_LUNAR, roll_stat=stats.TOUGHNESS, on_failure = ( effects.StatDamage( stats.STRENGTH, anim=animobs.GreenBoom ) ,)) ,)) ,), on_failure = ( effects.HealthDamage( (1,6,0), stat_bonus=None, element=stats.RESIST_LUNAR, anim=animobs.PurpleExplosion ) ,) ), com_tar=targetarea.Blast(radius=2), shot_anim=animobs.MysticBolt, ai_tar=invocations.TargetEnemy(), mp_cost=3 ), ) def init_monster( self ): self.levels.append( base.Beast( 16, self ) )
class PlagueRat(base.Monster): name = "Plague Rat" statline = { stats.STRENGTH: 10, stats.TOUGHNESS: 10, stats.REFLEXES: 13, \ stats.INTELLIGENCE: 1, stats.PIETY: 9, stats.CHARISMA: 3 } SPRITENAME = "monster_animals.png" FRAME = 4 TEMPLATES = () MOVE_POINTS = 12 VOICE = None HABITAT = (context.HAB_CAVE, context.HAB_BUILDING, context.HAB_TUNNELS, context.SET_EVERY, context.SET_RENFAN, context.DES_LUNAR, context.DES_CIVILIZED, context.MTY_BEAST, context.GEN_CHAOS, context.GEN_UNDEAD) ENC_LEVEL = 3 COMPANIONS = (GiantRat, ) ATTACK = items.Attack( (1, 6, 0), element=stats.RESIST_PIERCING, extra_effect=effects.SavingThrow(roll_skill=stats.MAGIC_DEFENSE, roll_stat=stats.TOUGHNESS, roll_modifier=15, on_failure=(effects.StatDamage( stats.TOUGHNESS, anim=animobs.GreenBoom), ))) def init_monster(self): self.levels.append(base.Beast(2, self))
class MummyPriest( base.Monster ): name = "Mummy Priest" statline = { stats.STRENGTH: 22, stats.TOUGHNESS: 20, stats.REFLEXES: 10, \ stats.INTELLIGENCE: 10, stats.PIETY: 16, stats.CHARISMA: 15 } SPRITENAME = "monster_undead.png" FRAME = 48 TEMPLATES = (stats.UNDEAD,stats.MUMMY) MOVE_POINTS = 6 VOICE = None HABITAT = ( context.HAB_DESERT, context.HAB_TUNNELS, context.SET_EVERY, context.MTY_UNDEAD, context.MTY_HUMANOID, context.MTY_PRIEST, context.MTY_MAGE, context.MTY_BOSS, context.DES_SOLAR, context.GEN_UNDEAD ) ENC_LEVEL = 7 TREASURE = treasuretype.High(( items.scrolls.Rank3Scroll, items.scrolls.Rank4Scroll )) COMPANIONS = (Mummy,animals.Scarab,animals.TombScorpion) COMBAT_AI = aibrain.SteadySpellAI() TECHNIQUES = ( spells.lunarspells.HELLBLAST, spells.priestspells.HEALING_LIGHT, spells.priestspells.DIVINE_HAMMER, spells.solarspells.MAJOR_CURE, spells.priestspells.SANCTUARY, spells.magespells.INCINERATE ) ATTACK = items.Attack( (1,10,0), element = stats.RESIST_CRUSHING, extra_effect = effects.OpposedRoll( att_modifier=-10, on_success = ( effects.StatDamage( stats.TOUGHNESS, anim=animobs.GreenBoom ), effects.Enchant( enchantments.DiseaseEn, anim=None ) ,) ) ) def init_monster( self ): self.levels.append( base.Leader( 7, self ) ) self.condition.append( enchantments.PermaRegeneration() )
class WitherWand(ManaWeapon): true_name = "Wither Wand" true_desc = "This wand drains the strength of its target." itemtype = WAND MP_COST = 2 avatar_image = "avatar_wand.png" avatar_frame = 7 mass = 5 attackdata = Attack( (1,8,1), skill_mod=stats.REFLEXES, damage_mod=stats.INTELLIGENCE, \ element=stats.RESIST_LUNAR, reach=7, hit_anim=animobs.PurpleExplosion, shot_anim = animobs.MysticBolt, extra_effect=effects.StatDamage( stats.STRENGTH, amount=3 ) )
class Shade( base.Monster ): name = "Shade" statline = { stats.STRENGTH: 12, stats.TOUGHNESS: 12, stats.REFLEXES: 12, \ stats.INTELLIGENCE: 12, stats.PIETY: 12, stats.CHARISMA: 8, \ stats.RESIST_SOLAR: -50, stats.RESIST_FIRE: -100, stats.STEALTH: 10 } SPRITENAME = "monster_undead.png" FRAME = 42 TEMPLATES = (stats.UNDEAD,stats.INCORPOREAL) MOVE_POINTS = 6 VOICE = None HABITAT = ( context.HAB_EVERY, context.SET_EVERY, context.MAP_DUNGEON, context.MTY_UNDEAD, context.DES_AIR, context.GEN_UNDEAD ) ENC_LEVEL = 5 ATTACK = items.Attack( (2,4,0), element = stats.RESIST_ATOMIC, extra_effect= effects.SavingThrow( roll_skill=stats.RESIST_LUNAR, roll_stat=stats.TOUGHNESS, on_failure = ( effects.StatDamage( stats.STRENGTH, anim=animobs.GreenBoom ) ,)) ) def init_monster( self ): self.levels.append( base.Humanoid( 5, self ) )
class SkeletalBat( base.Monster ): name = "Skeletal Bat" statline = { stats.STRENGTH: 9, stats.TOUGHNESS: 9, stats.REFLEXES: 12, \ stats.INTELLIGENCE: 1, stats.PIETY: 1, stats.CHARISMA: 1 } SPRITENAME = "monster_skeletons.png" FRAME = 24 TEMPLATES = (stats.UNDEAD,stats.BONE) MOVE_POINTS = 12 VOICE = None HABITAT = ( context.HAB_CAVE, context.SET_EVERY, context.DES_AIR, context.DES_LUNAR, context.MTY_UNDEAD, context.MTY_BEAST, context.GEN_UNDEAD ) ENC_LEVEL = 3 COMBAT_AI = aibrain.BrainDeadAI() ATTACK = items.Attack( (1,6,0), element = stats.RESIST_PIERCING, extra_effect= effects.SavingThrow( roll_skill=stats.RESIST_LUNAR, roll_stat=stats.TOUGHNESS, on_failure = ( effects.StatDamage( stats.PIETY, anim=animobs.BloodSplat ) ,)) ) def init_monster( self ): self.levels.append( base.Beast( 2, self ) )
class Mummy( base.Monster ): name = "Mummy" statline = { stats.STRENGTH: 20, stats.TOUGHNESS: 20, stats.REFLEXES: 10, \ stats.INTELLIGENCE: 6, stats.PIETY: 14, stats.CHARISMA: 15 } SPRITENAME = "monster_undead.png" FRAME = 47 TEMPLATES = (stats.UNDEAD,stats.MUMMY) MOVE_POINTS = 6 VOICE = None HABITAT = ( context.HAB_DESERT, context.HAB_TUNNELS, context.SET_EVERY, context.MTY_UNDEAD, context.DES_SOLAR, context.GEN_UNDEAD ) ENC_LEVEL = 5 TREASURE = treasuretype.High() COMBAT_AI = aibrain.BrainDeadAI() ATTACK = items.Attack( (1,10,0), element = stats.RESIST_CRUSHING, extra_effect = effects.OpposedRoll( att_modifier=-10, on_success = ( effects.StatDamage( stats.TOUGHNESS, anim=animobs.GreenBoom ), effects.Enchant( enchantments.DiseaseEn, anim=None ) ,) ) ) def init_monster( self ): self.levels.append( base.Humanoid( 5, self ) )
class PlagueZombie( base.Monster ): name = "Plague Zombie" statline = { stats.STRENGTH: 11, stats.TOUGHNESS: 14, stats.REFLEXES: 4, \ stats.INTELLIGENCE: 2, stats.PIETY: 8, stats.CHARISMA: 1 } SPRITENAME = "monster_undead.png" FRAME = 10 TEMPLATES = (stats.UNDEAD,stats.FLESHY) MOVE_POINTS = 6 VOICE = None HABITAT = ( context.HAB_EVERY, context.HAB_TUNNELS, context.SET_EVERY, context.SET_RENFAN, context.MTY_UNDEAD, context.DES_LUNAR, context.GEN_UNDEAD ) ENC_LEVEL = 5 TREASURE = treasuretype.High() COMPANIONS = (Zombie,Ghoul) COMBAT_AI = aibrain.BrainDeadAI() ATTACK = items.Attack( (1,10,0), element = stats.RESIST_CRUSHING, extra_effect= effects.SavingThrow( roll_skill=stats.RESIST_LUNAR, roll_stat=stats.TOUGHNESS, on_failure = ( effects.StatDamage( stats.TOUGHNESS, anim=animobs.GreenBoom ) ,)) ) def init_monster( self ): self.levels.append( base.Humanoid( 6, self ) )
,) ), 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 ) # CIRCLE 4 HELLBLAST = Spell( "Hellblast", "Eldritch flames spew forth to damage targets for 3d6 dark damage. Those touched by the flames will have their energy drained.", effects.OpposedRoll( on_success = ( effects.HealthDamage( (3,6,0), stat_bonus=stats.INTELLIGENCE, element=stats.RESIST_LUNAR, anim=animobs.PurpleExplosion ), effects.ManaDamage((3,6,0), stat_bonus=stats.INTELLIGENCE ), ), on_failure = ( effects.HealthDamage( (1,6,2), stat_bonus=None, element=stats.RESIST_LUNAR, anim=animobs.PurpleExplosion ),