コード例 #1
0
class Lamia( base.Monster ):
    name = "Lamia"    
    statline = { stats.STRENGTH: 18, stats.TOUGHNESS: 12, stats.REFLEXES: 15, \
        stats.INTELLIGENCE: 13, stats.PIETY: 15, stats.CHARISMA: 12 }
    SPRITENAME = "monster_default.png"
    FRAME = 2
    TEMPLATES = ()
    MOVE_POINTS = 10
    VOICE = dialogue.voice.GREEK
    HABITAT = ( context.HAB_EVERY, context.HAB_DESERT, context.SET_EVERY,
     context.DES_LUNAR,
     context.MTY_HUMANOID, context.MTY_BOSS )
    ENC_LEVEL = 7
    TREASURE = treasuretype.HighItems()
    ATTACK = items.Attack( (1,6,0), element = stats.RESIST_SLASHING, extra_effect=
        effects.StatDamage( stats.PIETY, amount=4, anim=animobs.GreenBoom )
    )
    TECHNIQUES = ( invocations.MPInvocation( "Spirit Drain",
        effects.TargetIsEnemy( on_true = (
            effects.OpposedRoll( on_success = (
                effects.ManaDamage( (1,8,0), stat_bonus=stats.TOUGHNESS, anim=animobs.PurpleExplosion ),
                effects.CauseSleep()
            ,), on_failure = (
                effects.ManaDamage( (1,8,0), stat_bonus=None, anim=animobs.PurpleExplosion )
        ,)),), on_false= (
            effects.NoEffect( anim=animobs.PurpleExplosion )
        ,)), com_tar=targetarea.Cone(reach=4), ai_tar=invocations.TargetEnemy(), mp_cost=12
      ), )
    def init_monster( self ):
        self.levels.append( base.Humanoid( 8, self ) )
コード例 #2
0
class Fossil( base.Monster ):
    name = "Fossil"
    statline = { stats.STRENGTH: 24, stats.TOUGHNESS: 19, stats.REFLEXES: 12, \
        stats.INTELLIGENCE: 1, stats.PIETY: 14, stats.CHARISMA: 1,
        stats.RESIST_LUNAR: 155 }
    SPRITENAME = "monster_skeletons.png"
    FRAME = 27
    TEMPLATES = (stats.UNDEAD,stats.BONE)
    MOVE_POINTS = 6
    VOICE = None
    HABITAT = ( context.HAB_CAVE, context.SET_EVERY,
     context.DES_LUNAR, context.DES_EARTH,
     context.MTY_UNDEAD, context.MTY_BEAST, context.MTY_BOSS,
     context.GEN_UNDEAD, context.GEN_NATURE )
    ENC_LEVEL = 10

    COMBAT_AI = aibrain.BrainDeadAI()

    ATTACK = items.Attack( (3,8,0), element = stats.RESIST_CRUSHING )

    TECHNIQUES = ( invocations.MPInvocation( "Hellfire",
      effects.OpposedRoll( att_skill=stats.PHYSICAL_ATTACK, att_stat=stats.REFLEXES, att_modifier=10, def_stat=stats.REFLEXES, on_success = (
        effects.HealthDamage( (1,10,0), stat_bonus=stats.TOUGHNESS, element=stats.RESIST_LUNAR, anim=animobs.PurpleExplosion, on_success = (
            effects.SavingThrow( roll_skill=stats.RESIST_LUNAR, roll_stat=stats.TOUGHNESS, on_failure = (
                effects.StatDamage( stats.STRENGTH, anim=animobs.GreenBoom )
            ,))
         ,))
      ,), on_failure = (
        effects.HealthDamage( (1,6,0), stat_bonus=None, element=stats.RESIST_LUNAR, anim=animobs.PurpleExplosion )
      ,) ), com_tar=targetarea.Blast(radius=2), shot_anim=animobs.MysticBolt, ai_tar=invocations.TargetEnemy(), mp_cost=3
    ), )

    def init_monster( self ):
        self.levels.append( base.Beast( 16, self ) )
コード例 #3
0
class PlagueRat(base.Monster):
    name = "Plague Rat"
    statline = { stats.STRENGTH: 10, stats.TOUGHNESS: 10, stats.REFLEXES: 13, \
        stats.INTELLIGENCE: 1, stats.PIETY: 9, stats.CHARISMA: 3 }
    SPRITENAME = "monster_animals.png"
    FRAME = 4
    TEMPLATES = ()
    MOVE_POINTS = 12
    VOICE = None
    HABITAT = (context.HAB_CAVE, context.HAB_BUILDING, context.HAB_TUNNELS,
               context.SET_EVERY, context.SET_RENFAN, context.DES_LUNAR,
               context.DES_CIVILIZED, context.MTY_BEAST, context.GEN_CHAOS,
               context.GEN_UNDEAD)
    ENC_LEVEL = 3
    COMPANIONS = (GiantRat, )

    ATTACK = items.Attack(
        (1, 6, 0),
        element=stats.RESIST_PIERCING,
        extra_effect=effects.SavingThrow(roll_skill=stats.MAGIC_DEFENSE,
                                         roll_stat=stats.TOUGHNESS,
                                         roll_modifier=15,
                                         on_failure=(effects.StatDamage(
                                             stats.TOUGHNESS,
                                             anim=animobs.GreenBoom), )))

    def init_monster(self):
        self.levels.append(base.Beast(2, self))
コード例 #4
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() )
コード例 #5
0
class WitherWand(ManaWeapon):
    true_name = "Wither Wand"
    true_desc = "This wand drains the strength of its target."
    itemtype = WAND
    MP_COST = 2
    avatar_image = "avatar_wand.png"
    avatar_frame = 7
    mass = 5
    attackdata = Attack( (1,8,1), skill_mod=stats.REFLEXES, damage_mod=stats.INTELLIGENCE, \
        element=stats.RESIST_LUNAR, reach=7, hit_anim=animobs.PurpleExplosion,
        shot_anim = animobs.MysticBolt, extra_effect=effects.StatDamage( stats.STRENGTH, amount=3 ) )
コード例 #6
0
class Shade( base.Monster ):
    name = "Shade"
    statline = { stats.STRENGTH: 12, stats.TOUGHNESS: 12, stats.REFLEXES: 12, \
        stats.INTELLIGENCE: 12, stats.PIETY: 12, stats.CHARISMA: 8, \
        stats.RESIST_SOLAR: -50, stats.RESIST_FIRE: -100, stats.STEALTH: 10 }
    SPRITENAME = "monster_undead.png"
    FRAME = 42
    TEMPLATES = (stats.UNDEAD,stats.INCORPOREAL)
    MOVE_POINTS = 6
    VOICE = None
    HABITAT = ( context.HAB_EVERY, context.SET_EVERY,
     context.MAP_DUNGEON,
     context.MTY_UNDEAD, 
     context.DES_AIR, context.GEN_UNDEAD )
    ENC_LEVEL = 5
    ATTACK = items.Attack( (2,4,0), element = stats.RESIST_ATOMIC, extra_effect=
        effects.SavingThrow( roll_skill=stats.RESIST_LUNAR, roll_stat=stats.TOUGHNESS, on_failure = (
            effects.StatDamage( stats.STRENGTH, anim=animobs.GreenBoom )
        ,))
    )
    def init_monster( self ):
        self.levels.append( base.Humanoid( 5, self ) )
コード例 #7
0
class SkeletalBat( base.Monster ):
    name = "Skeletal Bat"
    statline = { stats.STRENGTH: 9, stats.TOUGHNESS: 9, stats.REFLEXES: 12, \
        stats.INTELLIGENCE: 1, stats.PIETY: 1, stats.CHARISMA: 1 }
    SPRITENAME = "monster_skeletons.png"
    FRAME = 24
    TEMPLATES = (stats.UNDEAD,stats.BONE)
    MOVE_POINTS = 12
    VOICE = None
    HABITAT = ( context.HAB_CAVE, context.SET_EVERY,
     context.DES_AIR, context.DES_LUNAR,
     context.MTY_UNDEAD, context.MTY_BEAST,
     context.GEN_UNDEAD )
    ENC_LEVEL = 3
    COMBAT_AI = aibrain.BrainDeadAI()
    ATTACK = items.Attack( (1,6,0), element = stats.RESIST_PIERCING, extra_effect=
        effects.SavingThrow( roll_skill=stats.RESIST_LUNAR, roll_stat=stats.TOUGHNESS, on_failure = (
            effects.StatDamage( stats.PIETY, anim=animobs.BloodSplat )
        ,))
    )
    def init_monster( self ):
        self.levels.append( base.Beast( 2, self ) )
コード例 #8
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 ) )
コード例 #9
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.Humanoid( 6, self ) )
コード例 #10
0
    ,) ), rank=2, gems={LUNAR:2}, com_tar=targetarea.Blast(radius=2), 
    ai_tar=invocations.TargetMobileEnemy(min_distance=3) )

ENERVATE = Spell( "Enervate",
    "A ray of negative energy strikes one opponent, draining 4-16 mana instantly.",
    effects.ManaDamage((4,4,0), stat_bonus=stats.INTELLIGENCE, anim=animobs.PurpleExplosion ),
    rank=2, gems={LUNAR:1}, com_tar=targetarea.SingleTarget(), shot_anim=animobs.PurpleVortex, ai_tar=invocations.TargetEnemy(), mpfudge=-1 )


# CIRCLE 3

WITHER = Spell( "Wither",
    "Conjures a sphere of negative energy, draining a single target for 2d10 dark damage and 1d6 points of strength.",
    effects.OpposedRoll( on_success = (
        effects.HealthDamage( (2,10,0), stat_bonus=stats.INTELLIGENCE, element=stats.RESIST_LUNAR, anim=animobs.PurpleExplosion ),
        effects.StatDamage( stats.STRENGTH, amount=6 )
    ,), on_failure = (
        effects.HealthDamage( (1,9,1), stat_bonus=stats.INTELLIGENCE, element=stats.RESIST_LUNAR, anim=animobs.PurpleExplosion ),
        effects.StatDamage( stats.STRENGTH, amount=1 )
    ,) ), rank=3, gems={LUNAR:2}, com_tar=targetarea.SingleTarget(),ai_tar=invocations.TargetEnemy(),shot_anim=animobs.MysticBolt )


# CIRCLE 4

HELLBLAST = Spell( "Hellblast",
    "Eldritch flames spew forth to damage targets for 3d6 dark damage. Those touched by the flames will have their energy drained.",
    effects.OpposedRoll( on_success = (
        effects.HealthDamage( (3,6,0), stat_bonus=stats.INTELLIGENCE, element=stats.RESIST_LUNAR, anim=animobs.PurpleExplosion ),
        effects.ManaDamage((3,6,0), stat_bonus=stats.INTELLIGENCE ),
    ), on_failure = (
        effects.HealthDamage( (1,6,2), stat_bonus=None, element=stats.RESIST_LUNAR, anim=animobs.PurpleExplosion ),