예제 #1
0
class FireGiant(base.Monster):
    name = "Fire Giant"
    statline = { stats.STRENGTH: 31, stats.TOUGHNESS: 21, stats.REFLEXES: 9, \
        stats.INTELLIGENCE: 10, stats.PIETY: 14, stats.CHARISMA: 11 }
    SPRITENAME = "monster_giants.png"
    FRAME = 11
    TEMPLATES = (stats.FIRE, )
    MOVE_POINTS = 10
    HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.DES_FIRE,
               context.MTY_HUMANOID, context.MTY_FIGHTER, context.GEN_GIANT)
    ENC_LEVEL = 12
    TREASURE = treasuretype.Standard()
    ATTACK = items.Attack((3, 6, 0), element=stats.RESIST_SLASHING)
    TECHNIQUES = (invocations.Invocation(
        "Rock",
        effects.PhysicalAttackRoll(
            att_stat=stats.REFLEXES,
            on_success=(
                effects.HealthDamage((2, 6, 0),
                                     stat_bonus=stats.STRENGTH,
                                     element=stats.RESIST_CRUSHING,
                                     anim=animobs.RedBoom),
                effects.HealthDamage((2, 6, 0),
                                     stat_bonus=None,
                                     element=stats.RESIST_FIRE,
                                     anim=animobs.RedCloud),
            ),
            on_failure=(effects.NoEffect(anim=animobs.SmallBoom), )),
        com_tar=targetarea.SingleTarget(reach=10),
        shot_anim=animobs.SlingStone,
        ai_tar=invocations.TargetEnemy()), )

    def init_monster(self):
        self.levels.append(base.Humanoid(15, self))
예제 #2
0
class Umbull(base.Monster):
    name = "Umbull"
    statline = { stats.STRENGTH: 23, stats.TOUGHNESS: 19, stats.REFLEXES: 13, \
        stats.INTELLIGENCE: 9, stats.PIETY: 11, stats.CHARISMA: 13 }
    SPRITENAME = "monster_default.png"
    FRAME = 4
    TEMPLATES = ()
    MOVE_POINTS = 8
    HABITAT = (context.HAB_CAVE, context.SET_EVERY, context.MAP_DUNGEON,
               context.DES_EARTH)
    ENC_LEVEL = 9
    COMBAT_AI = aibrain.BruiserAI()
    TREASURE = treasuretype.Standard()
    ATTACK = items.Attack((3, 6, 0), element=stats.RESIST_SLASHING)
    TECHNIQUES = (invocations.Invocation(
        "Freezing Gaze",
        effects.OpposedRoll(
            att_modifier=20,
            on_success=(effects.Paralyze(max_duration=6), ),
            on_failure=(effects.NoEffect(anim=animobs.SmallBoom), )),
        com_tar=targetarea.SingleTarget(),
        shot_anim=animobs.PurpleVortex,
        ai_tar=invocations.TargetMobileEnemy()), )

    def init_monster(self):
        self.levels.append(base.Defender(9, self))
예제 #3
0
class Harpy( base.Monster ):
    name = "Harpy"    
    statline = { stats.STRENGTH: 10, stats.TOUGHNESS: 10, stats.REFLEXES: 15, \
        stats.INTELLIGENCE: 7, stats.PIETY: 12, stats.CHARISMA: 17 }
    SPRITENAME = "monster_default.png"
    FRAME = 38
    TEMPLATES = ()
    MOVE_POINTS = 8
    VOICE = dialogue.voice.GREEK
    HABITAT = ( context.HAB_EVERY, context.HAB_CAVE, context.SET_EVERY,
     context.DES_LUNAR,
     context.MTY_HUMANOID, context.MTY_BOSS, context.GEN_CHAOS )
    ENC_LEVEL = 6
    TREASURE = treasuretype.Standard()
    ATTACK = items.Attack( (2,4,0), element = stats.RESIST_SLASHING )
    TECHNIQUES = (invocations.MPInvocation( "Sleep Song",
        effects.TargetIsEnemy( anim=animobs.SonicHit, on_true = (
            effects.TargetIs( pat=effects.ANIMAL, on_true = (
                effects.OpposedRoll( att_modifier=0, on_success = (
                    effects.CauseSleep(),
                )),)
        ,), )), com_tar=targetarea.SelfCentered(radius=6,delay_from=-1), 
        ai_tar=invocations.TargetMobileEnemy(), mp_cost=8 ),
    )
    def init_monster( self ):
        self.levels.append( base.Humanoid( 7, self ) )
예제 #4
0
class Chimera( base.Monster ):
    name = "Chimera"
    # This is based on the version from the Pathfinder SRD rather than the
    # regular SRD; the only difference is the beefed-up breath weapon.
    statline = { stats.STRENGTH: 19, stats.TOUGHNESS: 17, stats.REFLEXES: 13, \
        stats.INTELLIGENCE: 4, stats.PIETY: 13, stats.CHARISMA: 10,
        stats.AWARENESS: 50 }
    SPRITENAME = "monster_by_Joe.png"
    FRAME = 0
    TEMPLATES = ()
    MOVE_POINTS = 12
    VOICE = dialogue.voice.GREEK
    HABITAT = ( context.HAB_EVERY, context.SET_EVERY, context.DES_FIRE,
     context.MTY_BEAST, context.GEN_CHAOS, context.MTY_BOSS )
    ENC_LEVEL = 9
    TREASURE = treasuretype.Standard()
    ATTACK = items.Attack( (2,8,0), element = stats.RESIST_PIERCING )
    TECHNIQUES = ( invocations.MPInvocation( "Fire Breath",
      effects.OpposedRoll( att_stat=stats.REFLEXES, def_stat=stats.REFLEXES, on_success = (
        effects.HealthDamage( (6,8,0), stat_bonus=stats.TOUGHNESS, element=stats.RESIST_FIRE, anim=animobs.RedCloud )
      ,), on_failure = (
        effects.HealthDamage( (3,8,0), stat_bonus=None, element=stats.RESIST_FIRE, anim=animobs.RedCloud )
      ,) ), com_tar=targetarea.Cone(reach=4), ai_tar=invocations.TargetEnemy(), mp_cost=16
    ), )
    def init_monster( self ):
        self.levels.append( base.Terror( 9, self ) )
예제 #5
0
class NoviceDruid(base.Monster):
    name = "Novice Druid"
    statline = { stats.STRENGTH: 12, stats.TOUGHNESS: 13, stats.REFLEXES: 12, \
        stats.INTELLIGENCE: 14, stats.PIETY: 14, stats.CHARISMA: 12 }
    SPRITENAME = "monster_spellcasters.png"
    FRAME = 8
    TEMPLATES = ()
    MOVE_POINTS = 10
    HABITAT = (context.HAB_EVERY, context.HAB_FOREST, context.SET_EVERY,
               context.MAP_WILDERNESS, context.DES_SOLAR, context.DES_EARTH,
               context.DES_FIRE, context.MTY_HUMANOID, context.MTY_PRIEST,
               context.GEN_NATURE)
    ENC_LEVEL = 4
    TREASURE = treasuretype.Standard(
        (items.scrolls.Rank1Scroll, items.scrolls.Rank2Scroll))
    COMBAT_AI = aibrain.BasicTechnicalAI()
    COMPANIONS = (animals.Wolf, animals.BlackBear)
    ATTACK = items.Attack((1, 8, 0), element=stats.RESIST_CRUSHING)
    TECHNIQUES = (spells.solarspells.MINOR_CURE,
                  spells.earthspells.CALL_CRITTER,
                  spells.earthspells.ACID_BOLT,
                  spells.earthspells.BEASTLY_MIGHT)

    def init_monster(self):
        self.levels.append(base.Humanoid(2, self))
        self.levels.append(base.Spellcaster(2, self))
예제 #6
0
class Salamander(base.Monster):
    name = "Salamander"
    statline = { stats.STRENGTH: 15, stats.TOUGHNESS: 14, stats.REFLEXES: 14, \
        stats.INTELLIGENCE: 13, stats.PIETY: 15, stats.CHARISMA: 13 }
    SPRITENAME = "monster_e_fire.png"
    FRAME = 8
    TEMPLATES = (stats.ELEMENTAL, stats.FIRE)
    MOVE_POINTS = 6
    HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.DES_FIRE,
               context.MTY_ELEMENTAL, context.GEN_IGNAN, context.MTY_HUMANOID,
               context.MTY_FIGHTER, context.MTY_BOSS)
    ENC_LEVEL = 8
    TREASURE = treasuretype.Standard()
    ATTACK = items.Attack((1, 8, 0),
                          element=stats.RESIST_PIERCING,
                          reach=2,
                          extra_effect=effects.HealthDamage(
                              (1, 8, 0),
                              stat_bonus=stats.INTELLIGENCE,
                              element=stats.RESIST_FIRE,
                              anim=animobs.OrangeExplosion))
    TECHNIQUES = (spells.firespells.EXPLOSION, )

    def init_monster(self):
        self.levels.append(base.Humanoid(8, self))
예제 #7
0
class Manticore(base.Monster):
    name = "Manticore"
    statline = { stats.STRENGTH: 20, stats.TOUGHNESS: 19, stats.REFLEXES: 15, \
        stats.INTELLIGENCE: 7, stats.PIETY: 12, stats.CHARISMA: 9 }
    SPRITENAME = "monster_default.png"
    FRAME = 26
    TEMPLATES = ()
    MOVE_POINTS = 12
    HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.MAP_WILDERNESS,
               context.MTY_BEAST, context.MTY_BOSS)
    ENC_LEVEL = 7
    COMBAT_AI = aibrain.ArcherAI()
    TREASURE = treasuretype.Standard()
    ATTACK = items.Attack((2, 4, 0),
                          element=stats.RESIST_PIERCING,
                          extra_effect=abilities.POISON_ATTACK)
    TECHNIQUES = (invocations.MPInvocation(
        "Tail Spikes",
        effects.NoEffect(children=(
            effects.PhysicalAttackRoll(
                att_stat=stats.REFLEXES,
                att_modifier=5,
                on_success=(effects.HealthDamage((1, 8, 0),
                                                 stat_bonus=stats.STRENGTH,
                                                 element=stats.RESIST_PIERCING,
                                                 anim=animobs.RedBoom), ),
                on_failure=(effects.NoEffect(anim=animobs.SmallBoom), )),
            effects.PhysicalAttackRoll(
                att_stat=stats.REFLEXES,
                att_modifier=5,
                on_success=(effects.HealthDamage((1, 8, 0),
                                                 stat_bonus=stats.STRENGTH,
                                                 element=stats.RESIST_PIERCING,
                                                 anim=animobs.RedBoom), ),
                on_failure=(effects.NoEffect(anim=animobs.SmallBoom), )),
            effects.PhysicalAttackRoll(
                att_stat=stats.REFLEXES,
                att_modifier=5,
                on_success=(effects.HealthDamage((1, 8, 0),
                                                 stat_bonus=stats.STRENGTH,
                                                 element=stats.RESIST_PIERCING,
                                                 anim=animobs.RedBoom), ),
                on_failure=(effects.NoEffect(anim=animobs.SmallBoom), )),
            effects.PhysicalAttackRoll(
                att_stat=stats.REFLEXES,
                att_modifier=5,
                on_success=(effects.HealthDamage((1, 8, 0),
                                                 stat_bonus=stats.STRENGTH,
                                                 element=stats.RESIST_PIERCING,
                                                 anim=animobs.RedBoom), ),
                on_failure=(effects.NoEffect(anim=animobs.SmallBoom), )),
        ), ),
        mp_cost=10,
        com_tar=targetarea.SingleTarget(reach=9),
        shot_anim=animobs.GoldStone,
        ai_tar=invocations.TargetEnemy()), )

    def init_monster(self):
        self.levels.append(base.Beast(6, self))
예제 #8
0
class Avoral(base.Monster):
    name = "Avoral"
    statline = { stats.STRENGTH: 15, stats.TOUGHNESS: 20, stats.REFLEXES: 23, \
        stats.INTELLIGENCE: 15, stats.PIETY: 16, stats.CHARISMA: 16, \
        stats.AWARENESS: 65, stats.MAGIC_DEFENSE: 25 }
    SPRITENAME = "monster_celestial.png"
    FRAME = 12
    TEMPLATES = (stats.CELESTIAL, stats.AIR)
    MOVE_POINTS = 16
    HABITAT = (context.SET_EVERY, context.DES_SOLAR, context.DES_AIR,
               context.MTY_HUMANOID, context.MTY_CELESTIAL)
    ENC_LEVEL = 12
    COMBAT_AI = aibrain.ArcherAI()
    TREASURE = treasuretype.Standard()
    TECHNIQUES = (invocations.Invocation("Avoral Missile",
                                         effects.HealthDamage(
                                             (1, 8, 0),
                                             stat_bonus=stats.INTELLIGENCE,
                                             element=stats.RESIST_LUNAR,
                                             anim=animobs.PurpleExplosion),
                                         com_tar=targetarea.SingleTarget(),
                                         shot_anim=animobs.WizardMissile,
                                         ai_tar=invocations.TargetEnemy()),
                  invocations.Invocation(
                      "Hold Person",
                      effects.OpposedRoll(
                          att_modifier=20,
                          on_success=(effects.Paralyze(max_duration=3), ),
                          on_failure=(effects.NoEffect(
                              anim=animobs.SmallBoom), )),
                      com_tar=targetarea.SingleTarget(),
                      shot_anim=animobs.BlueComet,
                      ai_tar=invocations.TargetMobileEnemy()),
                  invocations.MPInvocation(
                      "Thunder Strike",
                      effects.OpposedRoll(on_success=(effects.HealthDamage(
                          (3, 6, 0),
                          stat_bonus=stats.INTELLIGENCE,
                          element=stats.RESIST_LIGHTNING,
                          anim=animobs.Spark), ),
                                          on_failure=(effects.HealthDamage(
                                              (1, 8, 0),
                                              stat_bonus=None,
                                              element=stats.RESIST_LIGHTNING,
                                              anim=animobs.Spark), )),
                      mp_cost=16,
                      com_tar=targetarea.Line(),
                      ai_tar=invocations.TargetEnemy()))
    ATTACK = items.Attack((2, 8, 0), element=stats.RESIST_SLASHING)

    def init_monster(self):
        self.levels.append(base.Terror(7, self))
예제 #9
0
class Ogre( base.Monster ):
    name = "Ogre"    
    statline = { stats.STRENGTH: 16, stats.TOUGHNESS: 16, stats.REFLEXES: 10, \
        stats.INTELLIGENCE: 6, stats.PIETY: 8, stats.CHARISMA: 5 }
    SPRITENAME = "monster_giants.png"
    FRAME = 1
    TEMPLATES = ()
    MOVE_POINTS = 10
    HABITAT = ( context.HAB_EVERY, context.HAB_FOREST,
     context.SET_EVERY, context.SET_RENFAN,
     context.MTY_HUMANOID, context.MTY_FIGHTER, context.GEN_GIANT )
    ENC_LEVEL = 4
    TREASURE = treasuretype.Standard()
    ATTACK = items.Attack( (1,10,0), element = stats.RESIST_CRUSHING )
    def init_monster( self ):
        self.levels.append( base.Humanoid( 4, self ) )
예제 #10
0
class Reptal(base.Monster):
    name = "Reptal"
    statline = { stats.STRENGTH: 16, stats.TOUGHNESS: 15, stats.REFLEXES: 10, \
        stats.INTELLIGENCE: 8, stats.PIETY: 9, stats.CHARISMA: 9 }
    SPRITENAME = "monster_draconic.png"
    FRAME = 3
    TEMPLATES = (stats.REPTILE, )
    MOVE_POINTS = 10
    VOICE = dialogue.voice.DRACONIAN
    HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.DES_WATER,
               context.MTY_HUMANOID, context.MTY_FIGHTER, context.GEN_DRAGON)
    ENC_LEVEL = 3
    TREASURE = treasuretype.Standard()
    ATTACK = items.Attack((1, 8, 0), element=stats.RESIST_CRUSHING)

    def init_monster(self):
        self.levels.append(base.Humanoid(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 ) )
예제 #12
0
class Xorn(base.Monster):
    name = "Xorn"
    statline = { stats.STRENGTH: 16, stats.TOUGHNESS: 15, stats.REFLEXES: 10, \
        stats.INTELLIGENCE: 10, stats.PIETY: 12, stats.CHARISMA: 10, \
        stats.RESIST_PIERCING: 50, stats.RESIST_SLASHING: 50, stats.RESIST_FIRE: 100, \
        stats.RESIST_COLD: 100, stats.STEALTH: 40 }
    SPRITENAME = "monster_e_earth.png"
    FRAME = 5
    TEMPLATES = (stats.ELEMENTAL, stats.EARTH)
    MOVE_POINTS = 4
    HABITAT = (context.HAB_CAVE, context.SET_EVERY, context.MTY_BOSS,
               context.MTY_ELEMENTAL, context.GEN_TERRAN, context.DES_EARTH)
    ENC_LEVEL = 9
    TREASURE = treasuretype.Standard((items.GEM, ))
    ATTACK = items.Attack((3, 4, 0), element=stats.RESIST_SLASHING)

    def init_monster(self):
        self.levels.append(base.Defender(9, self))
예제 #13
0
class Warrior( base.Monster ):
    name = "Warrior"
    statline = { stats.STRENGTH: 14, stats.TOUGHNESS: 14, stats.REFLEXES: 13, \
        stats.INTELLIGENCE: 10, stats.PIETY: 12, stats.CHARISMA: 12,
        stats.NATURAL_DEFENSE: 10, stats.COUNTER_ATTACK: 15 }
    SPRITENAME = "monster_people.png"
    FRAME = 9
    TEMPLATES = ()
    MOVE_POINTS = 8
    HABITAT = ( context.HAB_EVERY, context.SET_EVERY,
     context.DES_CIVILIZED,
     context.MTY_HUMANOID, context.MTY_FIGHTER, context.MTY_LEADER,
     context.GEN_KINGDOM )
    ENC_LEVEL = 5
    TREASURE = treasuretype.Standard((items.SWORD,))
    ATTACK = items.Attack( (1,10,0), element = stats.RESIST_SLASHING )
    def init_monster( self ):
        self.levels.append( base.Humanoid( 5, self ) )
예제 #14
0
class ChaosWarrior(base.Monster):
    name = "Chaos Warrior"
    statline = { stats.STRENGTH: 14, stats.TOUGHNESS: 14, stats.REFLEXES: 12, \
        stats.INTELLIGENCE: 12, stats.PIETY: 12, stats.CHARISMA: 12,
        stats.NATURAL_DEFENSE: 15, stats.RESIST_POISON: 50 }
    SPRITENAME = "monster_chaos.png"
    FRAME = 13
    TEMPLATES = ()
    MOVE_POINTS = 8
    HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.MTY_HUMANOID,
               context.MTY_FIGHTER, context.MTY_LEADER, context.GEN_CHAOS)
    ENC_LEVEL = 5
    COMPANIONS = (Beastman, Centaur, Heretic, animals.MadDog)
    TREASURE = treasuretype.Standard((items.AXE, items.HEAVY_ARMOR))
    ATTACK = items.Attack((1, 8, 0), element=stats.RESIST_SLASHING)

    def init_monster(self):
        self.levels.append(base.Humanoid(5, self))
예제 #15
0
class Executioner( base.Monster ):
    name = "Executioner"
    statline = { stats.STRENGTH: 15, stats.TOUGHNESS: 16, stats.REFLEXES: 12,
        stats.INTELLIGENCE: 10, stats.PIETY: 12, stats.CHARISMA: 10,
        stats.CRITICAL_HIT: 20 }
    SPRITENAME = "monster_people.png"
    FRAME = 6
    TEMPLATES = ()
    MOVE_POINTS = 8
    HABITAT = ( context.HAB_EVERY, context.SET_RENFAN,
     context.MTY_HUMANOID, context.MTY_BOSS,
     context.MTY_FIGHTER, context.GEN_KINGDOM )
    ENC_LEVEL = 7
    TREASURE = treasuretype.Standard((items.AXE,))
    COMPANIONS = (Bushwhacker,)
    ATTACK = items.Attack( (1,10,0), element = stats.RESIST_SLASHING )
    def init_monster( self ):
        self.levels.append( base.Humanoid( 6, self ) )
예제 #16
0
class Wyvern( base.Monster ):
    name = "Wyvern"
    statline = { stats.STRENGTH: 19, stats.TOUGHNESS: 15, stats.REFLEXES: 12, \
        stats.INTELLIGENCE: 6, stats.PIETY: 12, stats.CHARISMA: 9 }
    SPRITENAME = "monster_default.png"
    FRAME = 44
    TEMPLATES = (stats.DRAGON,)
    MOVE_POINTS = 10
    HABITAT = ( context.HAB_EVERY, context.SET_EVERY,
     context.MAP_WILDERNESS,
     context.MTY_BEAST, context.GEN_DRAGON )
    ENC_LEVEL = 8
    TREASURE = treasuretype.Standard()
    ATTACK = items.Attack( (2,6,0), element = stats.RESIST_PIERCING,
        extra_effect=abilities.POISON_ATTACK_1d8 )
    TECHNIQUES = ()
    def init_monster( self ):
        self.levels.append( base.Terror( 8, self ) )
예제 #17
0
class Highwayman( base.Monster ):
    name = "Highwayman"
    statline = { stats.STRENGTH: 12, stats.TOUGHNESS: 10, stats.REFLEXES: 12, \
        stats.INTELLIGENCE: 10, stats.PIETY: 10, stats.CHARISMA: 10 }
    SPRITENAME = "monster_people.png"
    FRAME = 4
    TEMPLATES = ()
    MOVE_POINTS = 10
    HABITAT = ( context.HAB_EVERY, context.SET_EVERY, context.SET_RENFAN,
     context.MAP_WILDERNESS,
     context.DES_CIVILIZED,
     context.MTY_HUMANOID, context.MTY_FIGHTER, context.MTY_THIEF )
    ENC_LEVEL = 3
    TREASURE = treasuretype.Standard()
    COMPANIONS = (NoviceThief,)
    ATTACK = items.Attack( (1,8,0), element = stats.RESIST_SLASHING )
    def init_monster( self ):
        self.levels.append( base.Humanoid( 3, self ) )
예제 #18
0
class NoviceThief( base.Monster ):
    name = "Novice Thief"
    statline = { stats.STRENGTH: 10, stats.TOUGHNESS: 10, stats.REFLEXES: 12, \
        stats.INTELLIGENCE: 12, stats.PIETY: 10, stats.CHARISMA: 10,
        stats.STEALTH: 10 }
    SPRITENAME = "monster_people.png"
    FRAME = 2
    TEMPLATES = ()
    MOVE_POINTS = 10
    HABITAT = ( context.HAB_EVERY, context.SET_EVERY,
     context.DES_CIVILIZED,
     context.MTY_HUMANOID, context.MTY_THIEF )
    ENC_LEVEL = 2
    TREASURE = treasuretype.Standard()
    COMPANIONS = (NoviceWarrior,)
    ATTACK = items.Attack( (1,6,0), element = stats.RESIST_PIERCING )
    def init_monster( self ):
        self.levels.append( base.Humanoid( 1, self ) )
예제 #19
0
class Bushwhacker( base.Monster ):
    name = "Bushwhacker"
    statline = { stats.STRENGTH: 13, stats.TOUGHNESS: 13, stats.REFLEXES: 12, \
        stats.INTELLIGENCE: 12, stats.PIETY: 12, stats.CHARISMA: 12,
        stats.NATURAL_DEFENSE: 10 }
    SPRITENAME = "monster_people.png"
    FRAME = 1
    TEMPLATES = ()
    MOVE_POINTS = 10
    HABITAT = ( context.HAB_EVERY, context.SET_EVERY,
     context.MTY_HUMANOID, context.MTY_FIGHTER, context.MTY_THIEF, context.MTY_LEADER,
     context.GEN_CHAOS )
    ENC_LEVEL = 4
    TREASURE = treasuretype.Standard()
    COMPANIONS = (Highwayman,)
    ATTACK = items.Attack( (1,8,0), element = stats.RESIST_SLASHING )
    def init_monster( self ):
        self.levels.append( base.Humanoid( 4, self ) )
예제 #20
0
class Hooligan(base.Monster):
    name = "Hooligan"
    statline = { stats.STRENGTH: 12, stats.TOUGHNESS: 12, stats.REFLEXES: 12, \
        stats.INTELLIGENCE: 6, stats.PIETY: 10, stats.CHARISMA: 5, \
        stats.NATURAL_DEFENSE: -5 }
    SPRITENAME = "monster_chaos.png"
    FRAME = 14
    TEMPLATES = ()
    MOVE_POINTS = 8
    TREASURE = treasuretype.Standard()
    HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.DES_LUNAR,
               context.MTY_HUMANOID, context.MTY_FIGHTER, context.GEN_CHAOS)
    ENC_LEVEL = 2
    COMPANIONS = (animals.MadDog, )
    ATTACK = items.Attack((1, 10, 0), element=stats.RESIST_CRUSHING)

    def init_monster(self):
        self.levels.append(base.Humanoid(2, self))
예제 #21
0
class Gargoyle( base.Monster ):
    name = "Gargoyle"    
    statline = { stats.STRENGTH: 15, stats.TOUGHNESS: 18, stats.REFLEXES: 14, \
        stats.INTELLIGENCE: 6, stats.PIETY: 11, stats.CHARISMA: 7,
        stats.RESIST_CRUSHING: 50, stats.RESIST_PIERCING: 50,
        stats.RESIST_SLASHING: 50, stats.PHYSICAL_ATTACK: 10, stats.NATURAL_DEFENSE: 5 }
    SPRITENAME = "monster_default.png"
    FRAME = 22
    TEMPLATES = (stats.EARTH,stats.ROCK)
    MOVE_POINTS = 16
    HABITAT = ( context.HAB_EVERY, context.SET_EVERY,
     context.MTY_BOSS,
     context.MAP_DUNGEON, context.DES_EARTH )
    ENC_LEVEL = 5
    TREASURE = treasuretype.Standard()
    ATTACK = items.Attack( (2,4,0), element = stats.RESIST_SLASHING )
    TECHNIQUES = ()
    def init_monster( self ):
        self.levels.append( base.Humanoid( 4, self ) )
예제 #22
0
class ReptalWarrior(base.Monster):
    name = "Reptal Warrior"
    statline = { stats.STRENGTH: 17, stats.TOUGHNESS: 15, stats.REFLEXES: 11, \
        stats.INTELLIGENCE: 8, stats.PIETY: 9, stats.CHARISMA: 9,
        stats.NATURAL_DEFENSE: 10 }
    SPRITENAME = "monster_draconic.png"
    FRAME = 5
    TEMPLATES = (stats.REPTILE, )
    MOVE_POINTS = 10
    VOICE = dialogue.voice.DRACONIAN
    HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.DES_WATER,
               context.MTY_HUMANOID, context.MTY_FIGHTER, context.GEN_DRAGON)
    ENC_LEVEL = 4
    TREASURE = treasuretype.Standard()
    COMPANIONS = (Reptal, animals.GiantLizard, animals.GiantFrog)
    ATTACK = items.Attack((1, 8, 0), element=stats.RESIST_PIERCING)

    def init_monster(self):
        self.levels.append(base.Humanoid(4, self))
예제 #23
0
class SkeletonWithDagger( 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 = 1
    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 = 2
    TREASURE = treasuretype.Standard()
    COMPANIONS = (Skeleton,)
    COMBAT_AI = aibrain.SteadyAI()
    ATTACK = items.Attack( (1,6,0), element = stats.RESIST_SLASHING )
    def init_monster( self ):
        self.levels.append( base.Humanoid( 2, self ) )
예제 #24
0
class NovicePriest( base.Monster ):
    name = "Novice Priest"
    statline = { stats.STRENGTH: 12, stats.TOUGHNESS: 13, stats.REFLEXES: 10, \
        stats.INTELLIGENCE: 13, stats.PIETY: 15, stats.CHARISMA: 12 }
    SPRITENAME = "monster_spellcasters.png"
    FRAME = 0
    TEMPLATES = ()
    MOVE_POINTS = 10
    HABITAT = ( context.HAB_EVERY, context.HAB_BUILDING, context.SET_EVERY,
     context.DES_CIVILIZED, context.DES_SOLAR, context.DES_AIR,
     context.MTY_HUMANOID, context.MTY_PRIEST, context.GEN_KINGDOM )
    ENC_LEVEL = 3
    TREASURE = treasuretype.Standard( ( items.scrolls.Rank1Scroll, items.scrolls.Rank2Scroll ) )
    COMBAT_AI = aibrain.BasicTechnicalAI()
    COMPANIONS = (NoviceWarrior,)
    ATTACK = items.Attack( (1,6,0), element = stats.RESIST_CRUSHING )
    TECHNIQUES = ( spells.waterspells.FREEZE_FOE, spells.airspells.SILENCE,
        spells.solarspells.BLESSING, spells.solarspells.MINOR_CURE )
    def init_monster( self ):
        self.levels.append( base.Humanoid( 3, self ) )
예제 #25
0
class NoviceMage( base.Monster ):
    name = "Novice Mage"
    statline = { stats.STRENGTH: 12, stats.TOUGHNESS: 10, stats.REFLEXES: 13, \
        stats.INTELLIGENCE: 15, stats.PIETY: 13, stats.CHARISMA: 12 }
    SPRITENAME = "monster_spellcasters.png"
    FRAME = 21
    TEMPLATES = ()
    MOVE_POINTS = 10
    HABITAT = ( context.HAB_EVERY, context.HAB_BUILDING, context.SET_EVERY,
     context.DES_CIVILIZED, context.DES_LUNAR, context.DES_FIRE,
     context.MTY_HUMANOID, context.MTY_MAGE, context.GEN_KINGDOM )
    ENC_LEVEL = 3
    TREASURE = treasuretype.Standard( ( items.scrolls.Rank1Scroll, items.scrolls.Rank2Scroll ) )
    COMBAT_AI = aibrain.BasicTechnicalAI()
    COMPANIONS = (NovicePriest,NoviceWarrior)
    ATTACK = items.Attack( (1,6,0), element = stats.RESIST_CRUSHING )
    TECHNIQUES = ( spells.firespells.FIRE_BOLT, spells.lunarspells.CURSE,
        spells.magespells.FIRE_ARC, spells.lunarspells.SLEEP )
    def init_monster( self ):
        self.levels.append( base.Spellcaster( 3, self ) )
예제 #26
0
class ReptalArcher(base.Monster):
    name = "Reptal Archer"
    statline = { stats.STRENGTH: 15, stats.TOUGHNESS: 15, stats.REFLEXES: 13, \
        stats.INTELLIGENCE: 8, stats.PIETY: 9, stats.CHARISMA: 9 }
    SPRITENAME = "monster_draconic.png"
    FRAME = 4
    TEMPLATES = (stats.REPTILE, )
    MOVE_POINTS = 10
    VOICE = dialogue.voice.DRACONIAN
    HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.DES_WATER,
               context.MTY_HUMANOID, context.MTY_FIGHTER, context.GEN_DRAGON)
    ENC_LEVEL = 4
    COMBAT_AI = aibrain.BasicTechnicalAI()
    TREASURE = treasuretype.Standard((items.ARROW, ))
    COMPANIONS = (ReptalWarrior, Reptal)
    ATTACK = items.Attack((1, 6, 0), element=stats.RESIST_CRUSHING)
    TECHNIQUES = (abilities.LONGBOW, )

    def init_monster(self):
        self.levels.append(base.Humanoid(4, self))
예제 #27
0
class Heretic(base.Monster):
    name = "Heretic"
    statline = { stats.STRENGTH: 8, stats.TOUGHNESS: 10, stats.REFLEXES: 8, \
        stats.INTELLIGENCE: 12, stats.PIETY: 9, stats.CHARISMA: 13, \
        stats.PHYSICAL_DEFENSE: -20, stats.NATURAL_DEFENSE: -20, stats.MAGIC_ATTACK: -10 }
    SPRITENAME = "monster_chaos.png"
    FRAME = 17
    TEMPLATES = ()
    MOVE_POINTS = 10
    HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.DES_AIR,
               context.MTY_HUMANOID, context.MTY_MAGE, context.GEN_CHAOS)
    ENC_LEVEL = 3
    COMBAT_AI = aibrain.BasicTechnicalAI()
    TREASURE = treasuretype.Standard(
        (items.scrolls.Rank1Scroll, items.scrolls.Rank2Scroll))
    TECHNIQUES = (spells.firespells.IGNITE, spells.waterspells.FREEZE_FOE)
    ATTACK = items.Attack((1, 4, 0), element=stats.RESIST_CRUSHING)

    def init_monster(self):
        self.levels.append(base.Humanoid(3, self))
예제 #28
0
class Mutant(base.Monster):
    name = "Mutant"
    statline = { stats.STRENGTH: 16, stats.TOUGHNESS: 22, stats.REFLEXES: 10, \
        stats.INTELLIGENCE: 4, stats.PIETY: 12, stats.CHARISMA: 2,
        stats.NATURAL_DEFENSE: -20 }
    SPRITENAME = "monster_chaos.png"
    FRAME = 8
    TEMPLATES = ()
    MOVE_POINTS = 8
    TREASURE = treasuretype.Standard()
    HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.MAP_DUNGEON,
               context.DES_LUNAR, context.MTY_HUMANOID, context.MTY_BOSS,
               context.GEN_CHAOS)
    ENC_LEVEL = 6
    LONER = True
    COMPANIONS = (Beastman, MadMonk)
    ATTACK = items.Attack((2, 6, 0), element=stats.RESIST_CRUSHING)

    def init_monster(self):
        self.levels.append(base.Terror(8, self))
예제 #29
0
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 ) )
예제 #30
0
class Centaur(base.Monster):
    name = "Centaur"
    statline = { stats.STRENGTH: 13, stats.TOUGHNESS: 13, stats.REFLEXES: 12, \
        stats.INTELLIGENCE: 10, stats.PIETY: 10, stats.CHARISMA: 12 }
    SPRITENAME = "monster_chaos.png"
    FRAME = 19
    TEMPLATES = ()
    MOVE_POINTS = 12
    VOICE = dialogue.voice.GREEK
    HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.MAP_WILDERNESS,
               context.DES_SOLAR, context.MTY_HUMANOID, context.MTY_FIGHTER,
               context.GEN_CHAOS)
    ENC_LEVEL = 3
    COMBAT_AI = aibrain.ArcherAI()
    TREASURE = treasuretype.Standard()
    ATTACK = items.Attack((1, 6, 0), element=stats.RESIST_SLASHING)
    TECHNIQUES = (abilities.SHORTBOW, )

    def init_monster(self):
        self.levels.append(base.Humanoid(2, self))