class Behir( base.Monster ):
    name = "Behir"    
    statline = { stats.STRENGTH: 26, stats.TOUGHNESS: 21, stats.REFLEXES: 13, \
        stats.INTELLIGENCE: 7, stats.PIETY: 14, stats.CHARISMA: 12, \
        stats.RESIST_LIGHTNING: 150, stats.AWARENESS: 50, stats.CRITICAL_HIT: 10 }
    SPRITENAME = "monster_by_Joe.png"
    FRAME = 5
    TEMPLATES = ()
    MOVE_POINTS = 12
    HABITAT = ( context.HAB_EVERY, context.SET_EVERY,
     context.MAP_DUNGEON,
     context.DES_AIR,
     context.MTY_BOSS )
    ENC_LEVEL = 10
    TREASURE = treasuretype.Swallowed(scale=1,swag_chance=20)
    ATTACK = items.Attack( (2,4,0), element = stats.RESIST_PIERCING )
    TECHNIQUES = ( invocations.MPInvocation( "Lightning Breath",
      effects.OpposedRoll( att_stat=stats.REFLEXES, def_stat=stats.REFLEXES, on_success = (
        effects.HealthDamage( (7,6,0), stat_bonus=None, element=stats.RESIST_LIGHTNING, anim=animobs.Spark )
      ,), on_failure = (
        effects.HealthDamage( (3,7,0), stat_bonus=None, element=stats.RESIST_LIGHTNING, anim=animobs.Spark )
      ,) ), com_tar=targetarea.Line(reach=5), ai_tar=invocations.TargetEnemy(), mp_cost=30
    ), )
    def init_monster( self ):
        self.levels.append( base.Terror( 9, self ) )
Exemple #2
0
class YoungMoonDragon(base.Monster):
    name = "Young Moon Dragon"
    statline = { stats.STRENGTH: 16, stats.TOUGHNESS: 16, stats.REFLEXES: 10, \
        stats.INTELLIGENCE: 16, stats.PIETY: 14, stats.CHARISMA: 14,
        stats.RESIST_COLD: 100, stats.RESIST_ACID: 100, stats.RESIST_LUNAR: 50 }
    SPRITENAME = "monster_dragons.png"
    FRAME = 9
    TEMPLATES = (stats.DRAGON, )
    MOVE_POINTS = 8
    VOICE = dialogue.voice.DRACONIAN
    HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.DES_LUNAR,
               context.MTY_DRAGON, context.GEN_DRAGON, context.MTY_BOSS)
    ENC_LEVEL = 7
    TREASURE = treasuretype.DragonHoard()
    ATTACK = items.Attack((2, 8, 0), element=stats.RESIST_SLASHING)
    TECHNIQUES = (
        invocations.MPInvocation("Cold Breath",
                                 effects.OpposedRoll(
                                     def_stat=stats.TOUGHNESS,
                                     on_success=(effects.HealthDamage(
                                         (2, 10, 0),
                                         stat_bonus=stats.TOUGHNESS,
                                         element=stats.RESIST_COLD,
                                         anim=animobs.SnowCloud), ),
                                     on_failure=(effects.HealthDamage(
                                         (1, 10, 0),
                                         stat_bonus=None,
                                         element=stats.RESIST_COLD,
                                         anim=animobs.SnowCloud), )),
                                 com_tar=targetarea.Cone(reach=5),
                                 ai_tar=invocations.TargetEnemy(),
                                 mp_cost=12),
        invocations.MPInvocation("Acid Breath",
                                 effects.OpposedRoll(
                                     att_stat=stats.REFLEXES,
                                     def_stat=stats.REFLEXES,
                                     on_success=(effects.HealthDamage(
                                         (3, 8, 0),
                                         stat_bonus=stats.TOUGHNESS,
                                         element=stats.RESIST_ACID,
                                         anim=animobs.GreenCloud), ),
                                     on_failure=(effects.HealthDamage(
                                         (2, 6, 0),
                                         stat_bonus=None,
                                         element=stats.RESIST_ACID,
                                         anim=animobs.GreenCloud), )),
                                 com_tar=targetarea.Line(reach=8),
                                 ai_tar=invocations.TargetEnemy(),
                                 mp_cost=10),
    )

    def init_monster(self):
        self.levels.append(base.Terror(9, self))
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))
Exemple #4
0
class Ankheg(base.Monster):
    # OGL monster http://www.d20srd.org/srd/monsters/ankheg.htm
    name = "Ankheg"
    statline = { stats.STRENGTH: 21, stats.TOUGHNESS: 17, stats.REFLEXES: 10, \
        stats.INTELLIGENCE: 1, stats.PIETY: 13, stats.CHARISMA: 6,
        stats.STEALTH: 30 }
    SPRITENAME = "monster_bugs.png"
    FRAME = 40
    TEMPLATES = (stats.BUG, )
    MOVE_POINTS = 10
    VOICE = None
    TREASURE = treasuretype.Swallowed(swag_chance=35)
    HABITAT = (context.HAB_CAVE, context.HAB_TUNNELS, context.SET_EVERY,
               context.DES_EARTH, context.MTY_BOSS, context.MTY_BEAST,
               context.MTY_CREATURE, context.GEN_NATURE)
    ENC_LEVEL = 5
    ATTACK = items.Attack((2, 6, 3),
                          element=stats.RESIST_SLASHING,
                          extra_effect=effects.HealthDamage(
                              (1, 6, 0),
                              stat_bonus=None,
                              element=stats.RESIST_ACID,
                              anim=animobs.GreenExplosion))
    TECHNIQUES = (invocations.MPInvocation(
        "Acid Breath",
        effects.OpposedRoll(att_skill=stats.PHYSICAL_ATTACK,
                            att_stat=stats.REFLEXES,
                            def_stat=stats.REFLEXES,
                            on_success=(effects.HealthDamage(
                                (4, 4, 0),
                                stat_bonus=None,
                                element=stats.RESIST_ACID,
                                anim=animobs.GreenExplosion), ),
                            on_failure=(effects.HealthDamage(
                                (1, 8, 0),
                                stat_bonus=None,
                                element=stats.RESIST_ACID,
                                anim=animobs.GreenExplosion), )),
        com_tar=targetarea.Line(reach=5),
        ai_tar=invocations.TargetEnemy(),
        mp_cost=10), )

    def init_monster(self):
        self.levels.append(base.Defender(2, self))
        self.levels.append(base.Beast(2, self))
Exemple #5
0
class AncientSkyDragon(base.Monster):
    name = "Ancient Sky Dragon"
    statline = { stats.STRENGTH: 27, stats.TOUGHNESS: 21, stats.REFLEXES: 10, \
        stats.INTELLIGENCE: 18, stats.PIETY: 19, stats.CHARISMA: 18,
        stats.RESIST_LIGHTNING: 100 }
    SPRITENAME = "monster_dragons.png"
    FRAME = 38
    TEMPLATES = (stats.DRAGON, )
    MOVE_POINTS = 10
    VOICE = dialogue.voice.DRACONIAN
    HABITAT = (context.HAB_EVERY, context.HAB_DESERT, context.SET_EVERY,
               context.MAP_WILDERNESS, context.MTY_BOSS, context.MTY_DRAGON,
               context.DES_AIR, context.GEN_DRAGON)
    ENC_LEVEL = 17
    COMBAT_AI = aibrain.ArcherAI(approach_allies=0)
    TREASURE = treasuretype.DragonHoard()
    LONER = True
    COMPANIONS = (YoungSkyDragon, )
    ATTACK = items.Attack((4, 8, 0), element=stats.RESIST_SLASHING)
    TECHNIQUES = (invocations.MPInvocation(
        "Lightning Breath",
        effects.OpposedRoll(att_stat=stats.REFLEXES,
                            def_stat=stats.REFLEXES,
                            on_success=(effects.HealthDamage(
                                (14, 4, 0),
                                stat_bonus=stats.TOUGHNESS,
                                element=stats.RESIST_LIGHTNING,
                                anim=animobs.Spark), ),
                            on_failure=(effects.HealthDamage(
                                (7, 4, 0),
                                stat_bonus=None,
                                element=stats.RESIST_LIGHTNING,
                                anim=animobs.Spark), )),
        com_tar=targetarea.Line(reach=9),
        ai_tar=invocations.TargetEnemy(),
        mp_cost=32), )

    def init_monster(self):
        self.levels.append(base.Terror(23, self))
Exemple #6
0
class FireScorpion(base.Monster):
    name = "Fire Scorpion"
    statline = { stats.STRENGTH: 19, stats.TOUGHNESS: 13, stats.REFLEXES: 18, \
        stats.INTELLIGENCE: 4, stats.PIETY: 12, stats.CHARISMA: 1 }
    SPRITENAME = "monster_bugs.png"
    FRAME = 16
    TEMPLATES = (stats.BUG, stats.FIRE)
    MOVE_POINTS = 10
    VOICE = None
    HABITAT = (context.HAB_CAVE, context.HAB_DESERT, context.SET_EVERY,
               context.DES_FIRE, context.MTY_BEAST, context.MTY_BOSS,
               context.MTY_CREATURE, context.GEN_NATURE)
    ENC_LEVEL = 8
    TECHNIQUES = (invocations.MPInvocation(
        "Flamethrower",
        effects.OpposedRoll(att_stat=stats.REFLEXES,
                            on_success=(
                                effects.HealthDamage(
                                    (2, 6, 0),
                                    stat_bonus=stats.INTELLIGENCE,
                                    element=stats.RESIST_FIRE,
                                    anim=animobs.Ignite),
                                effects.Enchant(enchantments.BurnLowEn),
                            ),
                            on_failure=(effects.HealthDamage(
                                (2, 6, 0),
                                stat_bonus=stats.INTELLIGENCE,
                                element=stats.RESIST_FIRE,
                                anim=animobs.Ignite), )),
        com_tar=targetarea.Line(reach=6),
        ai_tar=invocations.TargetEnemy(),
        mp_cost=12), )
    ATTACK = items.Attack((2, 8, 0),
                          element=stats.RESIST_PIERCING,
                          extra_effect=abilities.POISON_ATTACK_1d8)

    def init_monster(self):
        self.levels.append(base.Beast(8, self))
Exemple #7
0
class LightningBug(base.Monster):
    name = "Lightning Bug"
    statline = { stats.STRENGTH: 10, stats.TOUGHNESS: 13, stats.REFLEXES: 12, \
        stats.INTELLIGENCE: 1, stats.PIETY: 12, stats.CHARISMA: 1, \
        stats.RESIST_LIGHTNING: 150 }
    SPRITENAME = "monster_bugs.png"
    FRAME = 13
    TEMPLATES = (stats.BUG, )
    MOVE_POINTS = 14
    VOICE = None
    HABITAT = (context.HAB_FOREST, context.HAB_CAVE, context.SET_EVERY,
               context.DES_AIR, context.MTY_BEAST, context.MTY_CREATURE,
               context.GEN_NATURE)
    ENC_LEVEL = 5

    ATTACK = items.Attack((1, 6, 0), element=stats.RESIST_PIERCING)

    TECHNIQUES = (invocations.MPInvocation(
        "Zap",
        effects.OpposedRoll(att_skill=stats.PHYSICAL_ATTACK,
                            att_stat=stats.REFLEXES,
                            def_stat=stats.REFLEXES,
                            on_success=(effects.HealthDamage(
                                (2, 6, 0),
                                stat_bonus=stats.TOUGHNESS,
                                element=stats.RESIST_LIGHTNING,
                                anim=animobs.Spark), ),
                            on_failure=(effects.HealthDamage(
                                (1, 6, 0),
                                stat_bonus=None,
                                element=stats.RESIST_LIGHTNING,
                                anim=animobs.Spark), )),
        com_tar=targetarea.Line(reach=6),
        ai_tar=invocations.TargetEnemy(),
        mp_cost=5), )

    def init_monster(self):
        self.levels.append(base.Beast(4, self))
Exemple #8
0
class AncientSwampDragon(base.Monster):
    name = "Ancient Swamp Dragon"
    statline = { stats.STRENGTH: 29, stats.TOUGHNESS: 21, stats.REFLEXES: 10, \
        stats.INTELLIGENCE: 12, stats.PIETY: 13, stats.CHARISMA: 12,
        stats.RESIST_ACID: 100 }
    SPRITENAME = "monster_dragons.png"
    FRAME = 30
    TEMPLATES = (stats.DRAGON, )
    MOVE_POINTS = 10
    VOICE = dialogue.voice.DRACONIAN
    HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.MTY_LEADER,
               context.MTY_DRAGON, context.MTY_BOSS, context.DES_EARTH,
               context.DES_WATER, context.GEN_DRAGON)
    ENC_LEVEL = 16
    TREASURE = treasuretype.DragonHoard()
    LONER = True
    COMPANIONS = (OldSwampDragon, )
    ATTACK = items.Attack((3, 12, 0), element=stats.RESIST_SLASHING)
    TECHNIQUES = (invocations.MPInvocation(
        "Acid Breath",
        effects.OpposedRoll(att_stat=stats.REFLEXES,
                            def_stat=stats.REFLEXES,
                            on_success=(effects.HealthDamage(
                                (8, 6, 0),
                                stat_bonus=stats.TOUGHNESS,
                                element=stats.RESIST_ACID,
                                anim=animobs.GreenExplosion), ),
                            on_failure=(effects.HealthDamage(
                                (4, 6, 0),
                                stat_bonus=None,
                                element=stats.RESIST_ACID,
                                anim=animobs.GreenExplosion), )),
        com_tar=targetarea.Line(reach=10),
        ai_tar=invocations.TargetEnemy(),
        mp_cost=20), )

    def init_monster(self):
        self.levels.append(base.Terror(24, 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))
Exemple #10
0
PYROTECHNICS = Spell(
    "Pyrotechnics",
    "Conjures magical fireworks which do 4d6 fire damage to all targets in a straight line.",
    effects.OpposedRoll(on_success=(effects.HealthDamage(
        (4, 6, 0),
        stat_bonus=stats.INTELLIGENCE,
        element=stats.RESIST_FIRE,
        anim=animobs.Ignite), ),
                        on_failure=(effects.HealthDamage(
                            (1, 12, 0),
                            stat_bonus=None,
                            element=stats.RESIST_FIRE,
                            anim=animobs.Ignite), )),
    rank=4,
    gems={FIRE: 3},
    com_tar=targetarea.Line(),
    ai_tar=invocations.TargetEnemy())

# CIRCLE 5

HEAT_WAVE = Spell(
    "Heat Wave",
    "A rapidly expanding wall of heat is projected from your hands. Anyone standing in its way takes 6d6 points of fire damage.",
    effects.OpposedRoll(on_success=(effects.HealthDamage(
        (6, 6, 0),
        stat_bonus=stats.INTELLIGENCE,
        element=stats.RESIST_FIRE,
        anim=animobs.DragonFire), ),
                        on_failure=(effects.HealthDamage(
                            (3, 6, 0),
                            stat_bonus=None,