class FlamingSword(base.Monster): name = "Flaming Sword" statline = { stats.STRENGTH: 16, stats.TOUGHNESS: 14, stats.REFLEXES: 18, \ stats.INTELLIGENCE: 12, stats.PIETY: 20, stats.CHARISMA: 14, stats.RESIST_SLASHING: 50, stats.MAGIC_DEFENSE: 50, stats.COUNTER_ATTACK: 50 } SPRITENAME = "monster_constructs.png" FRAME = 9 TEMPLATES = (stats.CONSTRUCT, ) MOVE_POINTS = 12 VOICE = None HABITAT = (context.SET_EVERY, context.MTY_CONSTRUCT, context.DES_AIR, context.DES_FIRE, context.SUMMON_FLAMINGSWORD) ENC_LEVEL = 14 COMBAT_AI = aibrain.SteadyAI() ATTACK = items.Attack( (3, 8, 0), element=stats.RESIST_SLASHING, extra_effect=effects.OpposedRoll(on_success=(effects.HealthDamage( (3, 8, 0), stat_bonus=stats.INTELLIGENCE, element=stats.RESIST_FIRE, anim=animobs.RedCloud), effects.Enchant(enchantments.BurnLowEn)), on_failure=(effects.HealthDamage( (3, 8, 0), stat_bonus=None, element=stats.RESIST_FIRE, anim=animobs.RedCloud), ))) def init_monster(self): self.levels.append(base.Defender(14, self))
class SkeletonHunter( base.Monster ): name = "Skeleton Hunter" statline = { stats.STRENGTH: 14, stats.TOUGHNESS: 12, stats.REFLEXES: 16, \ stats.INTELLIGENCE: 12, stats.PIETY: 12, stats.CHARISMA: 10, stats.NATURAL_DEFENSE: 10, stats.PHYSICAL_ATTACK: 5 } SPRITENAME = "monster_skeletons.png" FRAME = 9 TEMPLATES = (stats.UNDEAD,stats.BONE) MOVE_POINTS = 8 VOICE = None HABITAT = ( context.HAB_EVERY, context.SET_EVERY, context.SET_RENFAN, context.MTY_UNDEAD, context.MTY_HUMANOID, context.MTY_FIGHTER, context.MTY_BOSS, context.DES_EARTH, context.GEN_UNDEAD ) ENC_LEVEL = 6 TREASURE = treasuretype.High((items.BOW,items.ARROW,items.ARROW)) LONER = True COMPANIONS = (Shade,Ghast,SkeletonMage,SkeletonFighter,SkeletonThief,SkeletalHound) COMBAT_AI = aibrain.SteadyAI() ATTACK = items.Attack( (2,6,0), element = stats.RESIST_CRUSHING ) TECHNIQUES = ( invocations.Invocation( "Arrow", effects.PhysicalAttackRoll( att_stat=stats.REFLEXES, on_success = ( effects.HealthDamage( (1,8,0), stat_bonus=None, element=stats.RESIST_PIERCING, anim=animobs.RedBoom ), effects.TargetIs( effects.ANIMAL, on_true=( effects.PercentRoll( roll_skill=stats.MAGIC_ATTACK, roll_stat=None, roll_modifier=-5, target_affects=True, on_success=( effects.InstaKill( anim=animobs.CriticalHit ) ,) ) ,) ) ), on_failure = ( effects.NoEffect( anim=animobs.SmallBoom ) ,) ), com_tar=targetarea.SingleTarget(reach=8), shot_anim=animobs.Arrow, ai_tar=invocations.TargetEnemy() ), ) def init_monster( self ): self.levels.append( base.Humanoid( 5, self ) )
class AnimatedFlail(base.Monster): name = "Animated Flail" statline = { stats.STRENGTH: 12, stats.TOUGHNESS: 12, stats.REFLEXES: 12, \ stats.INTELLIGENCE: 1, stats.PIETY: 10, stats.CHARISMA: 1, stats.RESIST_CRUSHING: 50 } SPRITENAME = "monster_constructs.png" FRAME = 17 TEMPLATES = (stats.CONSTRUCT, ) MOVE_POINTS = 10 VOICE = None HABITAT = (context.SET_EVERY, context.MTY_CONSTRUCT, context.DES_EARTH) ENC_LEVEL = 7 COMBAT_AI = aibrain.SteadyAI() ATTACK = items.Attack((3, 6, 0), element=stats.RESIST_CRUSHING) def init_monster(self): self.levels.append(base.Beast(7, self))
class SkeletonWithMorningstar( base.Monster ): name = "Skeleton" statline = { stats.STRENGTH: 10, stats.TOUGHNESS: 10, stats.REFLEXES: 10, \ stats.INTELLIGENCE: 10, stats.PIETY: 10, stats.CHARISMA: 1 } SPRITENAME = "monster_skeletons.png" FRAME = 3 TEMPLATES = (stats.UNDEAD,stats.BONE) MOVE_POINTS = 10 VOICE = None HABITAT = ( context.HAB_EVERY, context.SET_EVERY, context.SET_RENFAN, context.MTY_UNDEAD, context.DES_EARTH, context.GEN_UNDEAD ) ENC_LEVEL = 3 TREASURE = treasuretype.Low() COMPANIONS = (Skeleton,SkeletonWithDagger) COMBAT_AI = aibrain.SteadyAI() ATTACK = items.Attack( (1,8,0), element = stats.RESIST_CRUSHING ) def init_monster( self ): self.levels.append( base.Humanoid( 3, self ) )
class SkeletonThief( base.Monster ): name = "Skeleton Thief" statline = { stats.STRENGTH: 14, stats.TOUGHNESS: 12, stats.REFLEXES: 16, \ stats.INTELLIGENCE: 12, stats.PIETY: 12, stats.CHARISMA: 1, stats.STEALTH: 20 } SPRITENAME = "monster_skeletons.png" FRAME = 13 TEMPLATES = (stats.UNDEAD,stats.BONE) MOVE_POINTS = 12 VOICE = None HABITAT = ( context.HAB_EVERY, context.SET_EVERY, context.SET_RENFAN, context.MTY_UNDEAD, context.MTY_HUMANOID, context.MTY_THIEF, context.DES_EARTH, context.GEN_UNDEAD ) ENC_LEVEL = 4 TREASURE = treasuretype.Standard() COMPANIONS = (SkeletonFighter,SkeletalBat) COMBAT_AI = aibrain.SteadyAI() ATTACK = items.Attack( (1,6,0), element = stats.RESIST_PIERCING ) def init_monster( self ): self.levels.append( base.Humanoid( 4, self ) )
class SkeletonFighter( base.Monster ): name = "Skeleton Fighter" statline = { stats.STRENGTH: 16, stats.TOUGHNESS: 12, stats.REFLEXES: 14, \ stats.INTELLIGENCE: 12, stats.PIETY: 12, stats.CHARISMA: 1, stats.NATURAL_DEFENSE: 10 } SPRITENAME = "monster_skeletons.png" FRAME = 5 TEMPLATES = (stats.UNDEAD,stats.BONE) MOVE_POINTS = 10 VOICE = None HABITAT = ( context.HAB_EVERY, context.SET_EVERY, context.SET_RENFAN, context.MTY_UNDEAD, context.MTY_HUMANOID, context.MTY_FIGHTER, context.DES_EARTH, context.GEN_UNDEAD ) ENC_LEVEL = 4 TREASURE = treasuretype.Standard() COMPANIONS = (SkeletonWithDagger,SkeletonWithMorningstar) COMBAT_AI = aibrain.SteadyAI() ATTACK = items.Attack( (1,8,0), element = stats.RESIST_SLASHING ) def init_monster( self ): self.levels.append( base.Humanoid( 4, self ) )
class SkeletonGuard( base.Monster ): name = "Skeleton Guard" statline = { stats.STRENGTH: 15, stats.TOUGHNESS: 16, stats.REFLEXES: 12, \ stats.INTELLIGENCE: 12, stats.PIETY: 12, stats.CHARISMA: 1, stats.NATURAL_DEFENSE: 10 } SPRITENAME = "monster_skeletons.png" FRAME = 6 TEMPLATES = (stats.UNDEAD,stats.BONE) MOVE_POINTS = 8 VOICE = None HABITAT = ( context.HAB_EVERY, context.HAB_DESERT, context.SET_EVERY, context.SET_RENFAN, context.MTY_UNDEAD, context.DES_EARTH, context.DES_SOLAR, context.GEN_UNDEAD ) ENC_LEVEL = 3 TREASURE = treasuretype.High() COMPANIONS = (SkeletonWithDagger,SkeletonWithMorningstar) COMBAT_AI = aibrain.SteadyAI() ATTACK = items.Attack( (1,8,0), element = stats.RESIST_PIERCING ) def init_monster( self ): self.levels.append( base.Defender( 3, self ) )
class PewterGolem(base.Monster): name = "Pewter Golem" statline = { stats.STRENGTH: 17, stats.TOUGHNESS: 13, stats.REFLEXES: 8, \ stats.INTELLIGENCE: 1, stats.PIETY: 11, stats.CHARISMA: 13 } SPRITENAME = "monster_constructs.png" FRAME = 10 TEMPLATES = (stats.CONSTRUCT, ) MOVE_POINTS = 8 VOICE = None HABITAT = ( context.HAB_BUILDING, context.SET_EVERY, context.MTY_CONSTRUCT, ) ENC_LEVEL = 3 COMBAT_AI = aibrain.SteadyAI() TREASURE = treasuretype.Standard() ATTACK = items.Attack((1, 6, 0), element=stats.RESIST_CRUSHING) def init_monster(self): self.levels.append(base.Defender(3, self))
class AnimatedCandlestick(base.Monster): name = "Candlestick" statline = { stats.STRENGTH: 12, stats.TOUGHNESS: 12, stats.REFLEXES: 12, \ stats.INTELLIGENCE: 12, stats.PIETY: 12, stats.CHARISMA: 12 } SPRITENAME = "monster_constructs.png" FRAME = 19 TEMPLATES = (stats.CONSTRUCT, ) MOVE_POINTS = 10 VOICE = None HABITAT = (context.HAB_BUILDING, context.SET_EVERY, context.MTY_CONSTRUCT, context.DES_FIRE) ENC_LEVEL = 7 COMBAT_AI = aibrain.SteadyAI() ATTACK = items.Attack( (2, 6, 0), element=stats.RESIST_PIERCING, extra_effect=effects.OpposedRoll(att_modifier=-10, on_success=(effects.Enchant( enchantments.BurnLowEn, anim=animobs.RedCloud), ))) TECHNIQUES = (invocations.MPInvocation( "Fireball", effects.OpposedRoll(def_stat=stats.REFLEXES, on_success=(effects.HealthDamage( (1, 10, 0), stat_bonus=None, element=stats.RESIST_FIRE, anim=animobs.RedCloud), ), on_failure=(effects.HealthDamage( (1, 6, 0), stat_bonus=None, element=stats.RESIST_FIRE, anim=animobs.RedCloud), )), com_tar=targetarea.SingleTarget(), ai_tar=invocations.TargetEnemy(), shot_anim=animobs.Fireball, mp_cost=5), ) def init_monster(self): self.levels.append(base.Beast(7, self))
class LivingStatue(base.Monster): name = "Living Statue" statline = { stats.STRENGTH: 14, stats.TOUGHNESS: 13, stats.REFLEXES: 10, \ stats.INTELLIGENCE: 10, stats.PIETY: 10, stats.CHARISMA: 1, \ stats.RESIST_FIRE: 155 } SPRITENAME = "monster_constructs.png" FRAME = 13 TEMPLATES = (stats.CONSTRUCT, ) MOVE_POINTS = 10 VOICE = None HABITAT = (context.HAB_BUILDING, context.HAB_TUNNELS, context.SET_EVERY, context.MTY_CONSTRUCT, context.DES_FIRE, context.DES_SOLAR) ENC_LEVEL = 8 TREASURE = treasuretype.Low() COMBAT_AI = aibrain.SteadyAI() ATTACK = items.Attack((1, 6, 0), element=stats.RESIST_SLASHING) TECHNIQUES = (invocations.MPInvocation( "Magma Blast", effects.OpposedRoll(att_modifier=10, def_stat=stats.REFLEXES, on_success=(effects.HealthDamage( (2, 8, 0), stat_bonus=None, element=stats.RESIST_FIRE, anim=animobs.OrangeExplosion), ), on_failure=(effects.HealthDamage( (1, 6, 0), stat_bonus=None, element=stats.RESIST_FIRE, anim=animobs.OrangeExplosion), )), com_tar=targetarea.Line(), ai_tar=invocations.TargetEnemy(), mp_cost=1), ) def init_monster(self): self.levels.append(base.Defender(7, self))
class CreepingCoins(base.Monster): name = "Creeping Coins" statline = { stats.STRENGTH: 12, stats.TOUGHNESS: 12, stats.REFLEXES: 12, \ stats.INTELLIGENCE: 1, stats.PIETY: 10, stats.CHARISMA: 1, \ stats.RESIST_COLD: 155 } SPRITENAME = "monster_constructs.png" FRAME = 18 TEMPLATES = (stats.CONSTRUCT, ) MOVE_POINTS = 6 VOICE = None HABITAT = (context.HAB_CAVE, context.SET_RENFAN, context.MTY_CONSTRUCT, context.DES_ICE) ENC_LEVEL = 7 TREASURE = treasuretype.High() COMBAT_AI = aibrain.SteadyAI() ATTACK = items.Attack((2, 6, 0), element=stats.RESIST_CRUSHING) TECHNIQUES = (invocations.MPInvocation( "Cold Blast", effects.OpposedRoll(att_modifier=10, def_stat=stats.REFLEXES, on_success=(effects.HealthDamage( (1, 10, 0), stat_bonus=None, element=stats.RESIST_COLD, anim=animobs.SnowCloud), ), on_failure=(effects.HealthDamage( (1, 6, 0), stat_bonus=None, element=stats.RESIST_COLD, anim=animobs.SnowCloud), )), com_tar=targetarea.Cone(reach=5), ai_tar=invocations.TargetEnemy(), mp_cost=1), ) def init_monster(self): self.levels.append(base.Defender(6, self))