Beispiel #1
0
class YoungCaveDragon(base.Monster):
    name = "Young Cave Dragon"
    statline = { stats.STRENGTH: 11, stats.TOUGHNESS: 13, stats.REFLEXES: 10, \
        stats.INTELLIGENCE: 10, stats.PIETY: 11, stats.CHARISMA: 10,
        stats.RESIST_POISON: 100 }
    SPRITENAME = "monster_dragons.png"
    FRAME = 2
    TEMPLATES = (stats.DRAGON, )
    MOVE_POINTS = 8
    VOICE = dialogue.voice.DRACONIAN
    HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.HAB_CAVE,
               context.MAP_DUNGEON, context.MTY_DRAGON, context.MTY_BOSS,
               context.DES_EARTH, context.GEN_DRAGON)
    ENC_LEVEL = 4
    COMBAT_AI = aibrain.BruiserAI()
    TREASURE = treasuretype.DragonHoard()
    ATTACK = items.Attack((3, 4, 0), element=stats.RESIST_SLASHING)
    TECHNIQUES = (invocations.MPInvocation(
        "Toxic Breath",
        effects.OpposedRoll(def_stat=stats.TOUGHNESS,
                            anim=animobs.PoisonCloud,
                            on_success=(effects.Paralyze(max_duration=3), )),
        com_tar=targetarea.Cone(reach=4),
        ai_tar=invocations.TargetEnemy(),
        mp_cost=4), )

    def init_monster(self):
        self.levels.append(base.Terror(4, self))
Beispiel #2
0
class AncientIceDragon(base.Monster):
    name = "Ancient Ice Dragon"
    statline = { stats.STRENGTH: 29, stats.TOUGHNESS: 21, stats.REFLEXES: 10, \
        stats.INTELLIGENCE: 14, stats.PIETY: 15, stats.CHARISMA: 14,
        stats.RESIST_COLD: 100 }
    SPRITENAME = "monster_dragons.png"
    FRAME = 37
    TEMPLATES = (stats.DRAGON, )
    MOVE_POINTS = 10
    VOICE = dialogue.voice.DRACONIAN
    HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.MTY_DRAGON,
               context.DES_ICE, context.GEN_DRAGON, context.MTY_BOSS)
    ENC_LEVEL = 17
    TREASURE = treasuretype.DragonHoard()
    ATTACK = items.Attack((4, 10, 0), element=stats.RESIST_SLASHING)
    TECHNIQUES = (invocations.MPInvocation(
        "Frost Breath",
        effects.OpposedRoll(att_stat=stats.REFLEXES,
                            def_stat=stats.REFLEXES,
                            on_success=(effects.HealthDamage(
                                (8, 8, 0),
                                stat_bonus=stats.TOUGHNESS,
                                element=stats.RESIST_COLD,
                                anim=animobs.SnowCloud), ),
                            on_failure=(effects.HealthDamage(
                                (4, 8, 0),
                                stat_bonus=None,
                                element=stats.RESIST_COLD,
                                anim=animobs.SnowCloud), )),
        com_tar=targetarea.Cone(reach=7),
        ai_tar=invocations.TargetEnemy(),
        mp_cost=32), )

    def init_monster(self):
        self.levels.append(base.Terror(25, self))
Beispiel #3
0
class YoungFireDragon(base.Monster):
    name = "Young Fire Dragon"
    statline = { stats.STRENGTH: 17, stats.TOUGHNESS: 15, stats.REFLEXES: 10, \
        stats.INTELLIGENCE: 13, stats.PIETY: 15, stats.CHARISMA: 15,
        stats.RESIST_FIRE: 100, stats.RESIST_LIGHTNING: 100, stats.RESIST_SOLAR: 50 }
    SPRITENAME = "monster_dragons.png"
    FRAME = 3
    TEMPLATES = (stats.DRAGON, )
    MOVE_POINTS = 8
    VOICE = dialogue.voice.DRACONIAN
    HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.DES_SOLAR,
               context.MTY_DRAGON, context.GEN_DRAGON, context.MTY_BOSS)
    ENC_LEVEL = 8
    TREASURE = treasuretype.DragonHoard()
    ATTACK = items.Attack((2, 8, 0), element=stats.RESIST_SLASHING)
    TECHNIQUES = (invocations.MPInvocation(
        "Fire Breath",
        effects.OpposedRoll(def_stat=stats.TOUGHNESS,
                            on_success=(effects.HealthDamage(
                                (4, 6, 0),
                                stat_bonus=stats.TOUGHNESS,
                                element=stats.RESIST_FIRE,
                                anim=animobs.DragonFire), ),
                            on_failure=(effects.HealthDamage(
                                (2, 6, 0),
                                stat_bonus=None,
                                element=stats.RESIST_FIRE,
                                anim=animobs.DragonFire), )),
        com_tar=targetarea.Cone(reach=5),
        ai_tar=invocations.TargetEnemy(),
        mp_cost=14), )

    def init_monster(self):
        self.levels.append(base.Terror(10, self))
Beispiel #4
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))
Beispiel #5
0
class GreatCaveWyrm(base.Monster):
    name = "Great Cave Wyrm"
    statline = { stats.STRENGTH: 27, stats.TOUGHNESS: 21, stats.REFLEXES: 10, \
        stats.INTELLIGENCE: 16, stats.PIETY: 17, stats.CHARISMA: 16,
        stats.PHYSICAL_ATTACK: 20, stats.RESIST_POISON: 100 }
    SPRITENAME = "monster_dragons.png"
    FRAME = 42
    TEMPLATES = (stats.DRAGON, )
    MOVE_POINTS = 10
    VOICE = dialogue.voice.DRACONIAN
    HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.HAB_CAVE,
               context.MAP_DUNGEON, context.MTY_LEADER, context.MTY_DRAGON,
               context.MTY_BOSS, context.DES_EARTH, context.GEN_DRAGON)
    ENC_LEVEL = 20
    COMBAT_AI = aibrain.BruiserAI()
    TREASURE = treasuretype.DragonHoard()
    LONER = True
    COMPANIONS = (
        OldCaveDragon,
        AncientCaveDragon,
    )
    ATTACK = items.Attack((7, 8, 0),
                          element=stats.RESIST_SLASHING,
                          extra_effect=abilities.POISON_ATTACK_2d6)
    TECHNIQUES = (invocations.MPInvocation(
        "Toxic Breath",
        effects.OpposedRoll(def_stat=stats.TOUGHNESS,
                            anim=None,
                            on_success=(
                                effects.HealthDamage(
                                    (9, 6, 0),
                                    stat_bonus=None,
                                    element=stats.RESIST_POISON,
                                    anim=animobs.PoisonCloud),
                                effects.Paralyze(max_duration=3),
                                effects.Enchant(enchantments.PoisonClassic,
                                                anim=animobs.DeathSparkle),
                            ),
                            on_failure=(effects.HealthDamage(
                                (3, 9, 0),
                                stat_bonus=None,
                                element=stats.RESIST_POISON,
                                anim=animobs.PoisonCloud), )),
        com_tar=targetarea.Cone(reach=8),
        ai_tar=invocations.TargetEnemy(),
        mp_cost=38), )

    def init_monster(self):
        self.levels.append(base.Terror(28, self))
Beispiel #6
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))
Beispiel #7
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))
Beispiel #8
0
class YoungForestDragon(base.Monster):
    name = "Young Forest Dragon"
    statline = { stats.STRENGTH: 15, stats.TOUGHNESS: 16, stats.REFLEXES: 15, \
        stats.INTELLIGENCE: 12, stats.PIETY: 12, stats.CHARISMA: 12,
        stats.RESIST_POISON: 100 }
    SPRITENAME = "monster_dragons.png"
    FRAME = 4
    TEMPLATES = (stats.DRAGON, )
    MOVE_POINTS = 8
    VOICE = dialogue.voice.DRACONIAN
    HABITAT = (context.HAB_EVERY, context.SET_EVERY, context.HAB_FOREST,
               context.MAP_WILDERNESS, context.MTY_DRAGON, context.GEN_NATURE,
               context.GEN_DRAGON, context.MTY_BOSS)
    ENC_LEVEL = 6
    TREASURE = treasuretype.DragonHoard()
    ATTACK = items.Attack((1, 12, 0), element=stats.RESIST_SLASHING)
    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), ),
                            on_failure=(effects.HealthDamage(
                                (1, 10, 0),
                                stat_bonus=None,
                                element=stats.RESIST_POISON,
                                anim=animobs.PoisonCloud), )),
        com_tar=targetarea.Blast(radius=1),
        ai_tar=invocations.TargetEnemy(),
        mp_cost=9,
        shot_anim=animobs.GreenComet), )

    def init_monster(self):
        self.levels.append(base.Terror(7, self))