class Hydra( base.Monster ): name = "Hydra" statline = { stats.STRENGTH: 21, stats.TOUGHNESS: 20, stats.REFLEXES: 12, \ stats.INTELLIGENCE: 3, stats.PIETY: 10, stats.CHARISMA: 9, stats.PHYSICAL_ATTACK: 20 } SPRITENAME = "monster_default.png" FRAME = 3 TEMPLATES = (stats.REPTILE,stats.EARTH,) MOVE_POINTS = 8 HABITAT = ( context.HAB_EVERY, context.SET_EVERY, context.DES_EARTH, context.MTY_BOSS ) ENC_LEVEL = 11 VOICE = dialogue.voice.GREEK COMBAT_AI = aibrain.BruiserAI() TREASURE = treasuretype.Low() ATTACK = items.Attack( (2,10,0), element = stats.RESIST_PIERCING ) TECHNIQUES = ( invocations.MPInvocation( "Poison Breath", effects.OpposedRoll( def_stat=stats.TOUGHNESS, on_success = ( effects.HealthDamage( (3,6,0), stat_bonus=stats.TOUGHNESS, element=stats.RESIST_POISON, anim=animobs.PoisonCloud ), effects.TargetIs( effects.ALIVE, on_true=( effects.OpposedRoll( att_stat=None, def_stat=stats.TOUGHNESS, on_success = ( effects.Enchant( enchantments.PoisonClassic ) ,) ), )) ), on_failure = ( effects.HealthDamage( (2,6,0), stat_bonus=None, element=stats.RESIST_POISON, anim=animobs.PoisonCloud ) ,) ), com_tar=targetarea.Blast(radius=2), ai_tar=invocations.TargetEnemy(min_distance=3), mp_cost=20, shot_anim=animobs.GreenComet ), ) def init_monster( self ): self.levels.append( base.Terror( 10, self ) ) self.condition.append( enchantments.PermaMegaRegeneration() )
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 Barbarian(base.Monster): name = "Barbarian" statline = { stats.STRENGTH: 12, stats.TOUGHNESS: 12, stats.REFLEXES: 10, \ stats.INTELLIGENCE: 10, stats.PIETY: 10, stats.CHARISMA: 10 } SPRITENAME = "monster_giants.png" FRAME = 5 TEMPLATES = () MOVE_POINTS = 8 HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.MAP_WILDERNESS, context.MTY_HUMANOID, context.MTY_FIGHTER, context.GEN_GIANT) ENC_LEVEL = 3 TREASURE = treasuretype.Low((items.SWORD, items.LIGHT_ARMOR)) ATTACK = items.Attack((1, 8, 0), element=stats.RESIST_SLASHING) def init_monster(self): self.levels.append(base.Humanoid(3, self))
class Mercenary( base.Monster ): name = "Mercenary" statline = { stats.STRENGTH: 14, stats.TOUGHNESS: 14, stats.REFLEXES: 13, \ stats.INTELLIGENCE: 10, stats.PIETY: 12, stats.CHARISMA: 12 } SPRITENAME = "monster_people.png" FRAME = 17 TEMPLATES = () MOVE_POINTS = 10 HABITAT = ( context.HAB_EVERY, context.SET_EVERY, context.MAP_DUNGEON, context.MTY_HUMANOID, context.MTY_FIGHTER, context.GEN_KINGDOM ) ENC_LEVEL = 6 TREASURE = treasuretype.Low( (items.POLEARM,items.LIGHT_ARMOR) ) ATTACK = items.Attack( (2,6,0), element = stats.RESIST_SLASHING, reach=2 ) def init_monster( self ): self.levels.append( base.Humanoid( 6, self ) )
class Berserker(base.Monster): name = "Berserker" statline = { stats.STRENGTH: 14, stats.TOUGHNESS: 14, stats.REFLEXES: 12, \ stats.INTELLIGENCE: 10, stats.PIETY: 10, stats.CHARISMA: 10, stats.PHYSICAL_ATTACK: 10 } SPRITENAME = "monster_giants.png" FRAME = 18 TEMPLATES = () MOVE_POINTS = 10 HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.MAP_WILDERNESS, context.MTY_HUMANOID, context.MTY_FIGHTER, context.GEN_GIANT) ENC_LEVEL = 6 TREASURE = treasuretype.Low((items.AXE, )) ATTACK = items.Attack((2, 6, 0), element=stats.RESIST_SLASHING) def init_monster(self): self.levels.append(base.Defender(6, self))
class Cultist(base.Monster): name = "Cultist" statline = { stats.STRENGTH: 10, stats.TOUGHNESS: 10, stats.REFLEXES: 10, \ stats.INTELLIGENCE: 10, stats.PIETY: 10, stats.CHARISMA: 10, \ stats.PHYSICAL_ATTACK: 15 } SPRITENAME = "monster_chaos.png" FRAME = 1 TEMPLATES = () MOVE_POINTS = 10 TREASURE = treasuretype.Low() HABITAT = (context.HAB_EVERY, context.HAB_BUILDING, context.SET_EVERY, context.MAP_DUNGEON, context.MTY_HUMANOID, context.GEN_CHAOS) ENC_LEVEL = 1 ATTACK = items.Attack((1, 4, 0), element=stats.RESIST_PIERCING) def init_monster(self): self.levels.append(base.Humanoid(1, self))
class BarbarianScout(base.Monster): name = "Barbarian Scout" statline = { stats.STRENGTH: 10, stats.TOUGHNESS: 12, stats.REFLEXES: 12, \ stats.INTELLIGENCE: 10, stats.PIETY: 10, stats.CHARISMA: 10 } SPRITENAME = "monster_giants.png" FRAME = 8 TEMPLATES = () MOVE_POINTS = 10 HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.MAP_WILDERNESS, context.MTY_HUMANOID, context.GEN_GIANT) ENC_LEVEL = 3 TREASURE = treasuretype.Low((items.BOW, items.ARROW)) COMBAT_AI = aibrain.BasicTechnicalAI() ATTACK = items.Attack((1, 6, 0), element=stats.RESIST_SLASHING) TECHNIQUES = (abilities.SHORTBOW, ) def init_monster(self): self.levels.append(base.Humanoid(3, self))
class Ettin(base.Monster): name = "Ettin" statline = { stats.STRENGTH: 20, stats.TOUGHNESS: 16, stats.REFLEXES: 12, \ stats.INTELLIGENCE: 4, stats.PIETY: 8, stats.CHARISMA: 6, \ stats.AWARENESS: 15 } SPRITENAME = "monster_giants.png" FRAME = 9 TEMPLATES = () MOVE_POINTS = 10 HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.MAP_WILDERNESS, context.MTY_HUMANOID, context.MTY_FIGHTER, context.MTY_BOSS, context.GEN_GIANT, context.GEN_CHAOS) ENC_LEVEL = 9 TREASURE = treasuretype.Low((items.GEM, items.HAT)) ATTACK = items.Attack((2, 6, 0), element=stats.RESIST_CRUSHING) def init_monster(self): self.levels.append(base.Humanoid(12, self))
class Zombie( base.Monster ): name = "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 = 9 TEMPLATES = (stats.UNDEAD,stats.FLESHY) MOVE_POINTS = 6 VOICE = None HABITAT = ( context.HAB_EVERY, context.HAB_TUNNELS, context.SET_EVERY, context.MTY_UNDEAD, context.DES_LUNAR, context.GEN_UNDEAD ) ENC_LEVEL = 3 TREASURE = treasuretype.Low() COMBAT_AI = aibrain.BrainDeadAI() ATTACK = items.Attack( (1,10,0), element = stats.RESIST_CRUSHING ) def init_monster( self ): self.levels.append( base.Humanoid( 3, self ) )
class NoviceWarrior( base.Monster ): name = "Novice Warrior" statline = { stats.STRENGTH: 13, stats.TOUGHNESS: 13, stats.REFLEXES: 10, \ stats.INTELLIGENCE: 10, stats.PIETY: 10, stats.CHARISMA: 10, \ stats.COUNTER_ATTACK: 5 } SPRITENAME = "monster_people.png" FRAME = 0 TEMPLATES = () MOVE_POINTS = 10 HABITAT = ( context.HAB_EVERY, context.HAB_BUILDING, context.SET_EVERY, context.DES_CIVILIZED, context.MTY_HUMANOID, context.MTY_FIGHTER, context.GEN_CHAOS, context.GEN_KINGDOM, context.GEN_GIANT ) ENC_LEVEL = 2 TREASURE = treasuretype.Low() ATTACK = items.Attack( (1,8,0), element = stats.RESIST_SLASHING ) def init_monster( self ): self.levels.append( base.Humanoid( 2, self ) )
class Hurthling( base.Monster ): name = "Hurthling" statline = { stats.STRENGTH: 10, stats.TOUGHNESS: 8, stats.REFLEXES: 14, \ stats.INTELLIGENCE: 10, stats.PIETY: 10, stats.CHARISMA: 10, stats.NATURAL_DEFENSE: 5 } SPRITENAME = "monster_people.png" FRAME = 5 TEMPLATES = () MOVE_POINTS = 10 VOICE = dialogue.voice.HURTHISH HABITAT = ( context.HAB_EVERY, context.HAB_FOREST, context.SET_EVERY, context.MAP_WILDERNESS, context.MTY_HUMANOID, context.MTY_THIEF, context.GEN_KINGDOM ) ENC_LEVEL = 1 TREASURE = treasuretype.Low() ATTACK = items.Attack( (1,4,0), element = stats.RESIST_PIERCING ) def init_monster( self ): self.levels.append( base.Humanoid( 1, 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 ) )