Ejemplo n.º 1
0
class SalamanderLeader(base.Monster):
    name = "Salamander Leader"
    statline = { stats.STRENGTH: 24, stats.TOUGHNESS: 16, stats.REFLEXES: 14, \
        stats.INTELLIGENCE: 16, stats.PIETY: 17, stats.CHARISMA: 15 }
    SPRITENAME = "monster_e_fire.png"
    FRAME = 9
    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_LEADER, context.MTY_BOSS)
    ENC_LEVEL = 11
    TREASURE = treasuretype.High()
    LONER = True
    COMPANIONS = (Salamander, )
    ATTACK = items.Attack((2, 8, 0),
                          element=stats.RESIST_SLASHING,
                          extra_effect=effects.HealthDamage(
                              (1, 8, 0),
                              stat_bonus=stats.INTELLIGENCE,
                              element=stats.RESIST_FIRE,
                              anim=animobs.OrangeExplosion))
    TECHNIQUES = (spells.firespells.PYROTECHNICS,
                  spells.airspells.DISPEL_MAGIC)

    def init_monster(self):
        self.levels.append(base.Leader(11, self))
Ejemplo n.º 2
0
class CultLeader(base.Monster):
    name = "Cult Leader"
    statline = { stats.STRENGTH: 12, stats.TOUGHNESS: 12, stats.REFLEXES: 12, \
        stats.INTELLIGENCE: 10, stats.PIETY: 10, stats.CHARISMA: 16, \
        stats.PHYSICAL_ATTACK: 5 }
    SPRITENAME = "monster_chaos.png"
    FRAME = 2
    TEMPLATES = ()
    MOVE_POINTS = 10
    HABITAT = (context.HAB_EVERY, context.HAB_BUILDING, context.SET_EVERY,
               context.MAP_DUNGEON, context.MTY_HUMANOID, context.MTY_PRIEST,
               context.GEN_CHAOS)
    ENC_LEVEL = 3
    LONER = True
    TREASURE = treasuretype.High()
    COMPANIONS = (Cultist, Cultist, Heretic, people.NoviceWarrior)
    TECHNIQUES = (spells.solarspells.MODERATE_CURE,
                  spells.lunarspells.WIZARD_MISSILE)
    ATTACK = items.Attack((1, 6, 0),
                          element=stats.RESIST_CRUSHING,
                          extra_effect=effects.OpposedRoll(
                              on_success=(effects.Paralyze(max_duration=6), )))

    def init_monster(self):
        self.levels.append(base.Leader(3, self))
Ejemplo n.º 3
0
class OgreLeader(base.Monster):
    name = "Ogre Leader"
    statline = { stats.STRENGTH: 18, stats.TOUGHNESS: 18, stats.REFLEXES: 10, \
        stats.INTELLIGENCE: 10, stats.PIETY: 10, stats.CHARISMA: 5 }
    SPRITENAME = "monster_giants.png"
    FRAME = 4
    TEMPLATES = ()
    MOVE_POINTS = 10
    HABITAT = (context.HAB_EVERY, context.HAB_FOREST, context.SET_EVERY,
               context.SET_RENFAN, context.MTY_HUMANOID, context.MTY_BOSS,
               context.MTY_LEADER, context.GEN_GIANT)
    ENC_LEVEL = 8
    TREASURE = treasuretype.High()
    LONER = True
    TECHNIQUES = (invocations.Invocation(
        "Rock",
        effects.PhysicalAttackRoll(
            att_stat=stats.REFLEXES,
            on_success=(effects.HealthDamage((1, 10, 2),
                                             stat_bonus=None,
                                             element=stats.RESIST_CRUSHING,
                                             anim=animobs.RedBoom), ),
            on_failure=(effects.NoEffect(anim=animobs.SmallBoom), )),
        com_tar=targetarea.SingleTarget(reach=6),
        shot_anim=animobs.SlingStone,
        ai_tar=invocations.TargetEnemy()), )
    COMPANIONS = (Ogre, OgreChamp, OgreShaman)
    ATTACK = items.Attack((4, 4, 0), element=stats.RESIST_CRUSHING)

    def init_monster(self):
        self.levels.append(base.Leader(9, self))
Ejemplo n.º 4
0
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 ) )
Ejemplo n.º 5
0
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 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 ) )
Ejemplo n.º 7
0
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))
Ejemplo n.º 8
0
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.Undead(5, self))
Ejemplo n.º 9
0
class BarbarianChief(base.Monster):
    name = "Barbarian Chief"
    statline = { stats.STRENGTH: 14, stats.TOUGHNESS: 14, stats.REFLEXES: 12, \
        stats.INTELLIGENCE: 10, stats.PIETY: 14, stats.CHARISMA: 10,
        stats.NATURAL_DEFENSE: 10, stats.MAGIC_DEFENSE: 10 }
    SPRITENAME = "monster_giants.png"
    FRAME = 6
    TEMPLATES = ()
    MOVE_POINTS = 8
    HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.MAP_WILDERNESS,
               context.MTY_HUMANOID, context.MTY_LEADER, context.MTY_BOSS,
               context.GEN_GIANT)
    ENC_LEVEL = 7
    TREASURE = treasuretype.High((items.SWORD, items.LIGHT_ARMOR, items.CLOAK))
    TECHNIQUES = (abilities.COMPOSITEBOW, )
    COMPANIONS = (Barbarian, BarbarianScout, Berserker)
    LONER = True
    ATTACK = items.Attack((2, 6, 0), element=stats.RESIST_SLASHING)

    def init_monster(self):
        self.levels.append(base.Leader(7, self))
Ejemplo n.º 10
0
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 ) )
Ejemplo n.º 11
0
class Sphinx( base.Monster ):
    name = "Sphinx"    
    statline = { stats.STRENGTH: 19, stats.TOUGHNESS: 13, stats.REFLEXES: 12, \
        stats.INTELLIGENCE: 18, stats.PIETY: 19, stats.CHARISMA: 19, \
        stats.NATURAL_DEFENSE: 15 }
    SPRITENAME = "monster_default.png"
    FRAME = 37
    TEMPLATES = ()
    MOVE_POINTS = 12
    VOICE = dialogue.voice.GREEK
    HABITAT = ( context.HAB_DESERT, context.SET_EVERY,
     context.MAP_WILDERNESS,
     context.DES_SOLAR,
     context.MTY_HUMANOID, context.MTY_LEADER, context.MTY_BOSS )
    ENC_LEVEL = 10
    TREASURE = treasuretype.High()
    ATTACK = items.Attack( (2,6,4), element = stats.RESIST_SLASHING )
    TECHNIQUES = ( spells.lunarspells.DEATH_RAY, spells.airspells.DISPEL_MAGIC,
        spells.priestspells.SANCTUARY, spells.solarspells.REMOVE_CURSE,
        spells.solarspells.MASS_CURE )
    def init_monster( self ):
        self.levels.append( base.Terror( 8, self ) )
Ejemplo n.º 12
0
class Ghast(base.Monster):
    name = "Ghast"
    statline = { stats.STRENGTH: 17, stats.TOUGHNESS: 12, stats.REFLEXES: 17, \
        stats.INTELLIGENCE: 13, stats.PIETY: 14, stats.CHARISMA: 16 }
    SPRITENAME = "monster_undead.png"
    FRAME = 40
    TEMPLATES = (stats.UNDEAD, stats.FLESHY)
    MOVE_POINTS = 8
    VOICE = None
    HABITAT = (context.HAB_EVERY, context.HAB_TUNNELS, context.SET_EVERY,
               context.MTY_UNDEAD, context.DES_LUNAR, context.GEN_UNDEAD)
    ENC_LEVEL = 6
    TREASURE = treasuretype.High()
    COMPANIONS = (PlagueZombie, Ghoul)
    COMBAT_AI = aibrain.GhoulAI()
    ATTACK = items.Attack((1, 12, 0),
                          element=stats.RESIST_CRUSHING,
                          extra_effect=effects.OpposedRoll(
                              att_modifier=0,
                              on_success=(effects.Paralyze(max_duration=6), )))

    def init_monster(self):
        self.levels.append(base.Undead(6, self))