Beispiel #1
0
 def custom_init(self, nart):
     scene = self.elements.get("LOCALE")
     mygen = nart.get_map_generator(scene)
     room = mygen.DEFAULT_ROOM()
     myteam = teams.Team(default_reaction=-999,
                         rank=self.rank + 1,
                         strength=200,
                         habitat={context.MTY_BEAST: True},
                         hodgepodge=True)
     room.contents.append(myteam)
     myhabitat = scene.get_encounter_request()
     myhabitat[context.MTY_HUMANOID] = True
     myhabitat[(context.MTY_LEADER, context.MTY_FIGHTER)] = True
     scene.fac.alter_monster_request(myhabitat)
     btype = monsters.choose_monster_type(self.rank - 3, self.rank + 1,
                                          myhabitat)
     if btype:
         boss = monsters.generate_boss(btype, self.rank + 1, team=myteam)
         myitem = items.generate_special_item(self.rank)
         if myitem:
             boss.contents.append(myitem)
         myspear = items.generate_special_item(self.rank + 1,
                                               item_type=items.POLEARM)
         if myspear:
             boss.contents.append(myspear)
         myteam.boss = boss
         self.register_element("_ROOM", room, dident="LOCALE")
         self.register_element("BOSS", boss, "_ROOM")
     return btype
 def custom_init( self, nart ):
     scene = self.elements.get("LOCALE")
     room = randmaps.rooms.SharpRoom()
     room.DECORATE = randmaps.decor.LibraryDec(win=None)
     # Create a chest, and stock it with magical goodies.
     mychest = waypoints.LargeChest()
     mychest.stock(self.rank,item_types=(items.SCROLL,items.POTION))
     room.contents.append( mychest )
     room.contents.append( waypoints.Bookshelf() )
     for t in range( random.randint(2,3) ):
         myitem = items.generate_scroll( self.rank + 1 )
         if myitem:
             myitem.identified = True
             mychest.contents.append( myitem )
     # Create a team for our spellcasters.
     myhabitat = scene.get_encounter_request()
     myhabitat[(context.MTY_MAGE,context.MTY_PRIEST)] = True
     myteam = self.register_element( "TEAM", teams.Team(default_reaction=-999, rank=self.rank, 
       strength=120, habitat=myhabitat, hodgepodge = True ) )
     room.contents.append( myteam )
     boss = monsters.generate_npc(team=myteam,upgrade=True,rank=self.rank+1,job=random.choice(self.JOBS),fac=scene.fac)
     myitem = items.generate_special_item( self.rank )
     if myitem:
         boss.contents.append( myitem )
     room.contents.append( boss )
     self.register_element( "_ROOM", room, dident="LOCALE" )
     return True
Beispiel #3
0
    def custom_init( self, nart ):
        # Create the lever and spirit room.
        scene = self.elements.get("LOCALE")
        mygen = nart.get_map_generator( scene )

        # Spirit jar room
        puzzle_room = randmaps.rooms.SharpRoom( tags = (context.ENTRANCE,) )
        team = teams.Team(default_reaction=-999, respawn=False )
        if random.randint(1,3) == 1:
            puzzle_room.contents.append( teams.Team(default_reaction=-999, rank=self.rank, 
              strength=100, habitat=scene.get_encounter_request(), fac=scene.fac ) )
        self.register_element( "_PUZZLE_ROOM", puzzle_room, dident="LOCALE" )
        self.register_element( "_SOURCE", waypoints.SpiritJar(plot_locked=True,anchor=randmaps.anchors.middle), dident="_PUZZLE_ROOM" )
        self.spirit_contained = True

        myhabitat = { (context.MTY_ELEMENTAL,context.MTY_UNDEAD,context.MTY_CELESTIAL,context.MTY_DEMON): True,
            tuple(self.elements["TARGET"].desctags): True}
        btype = monsters.choose_monster_type(self.rank,self.rank+2,myhabitat)
        if btype:
            boss = self.register_element("_MONSTER",monsters.generate_boss( btype, self.rank+2, team=team ))
        if random.randint(1,2) == 1:
            myitem = self.register_element("_ITEM",items.generate_special_item( self.rank + random.randint(1,2)))
        else:
            myitem = self.register_element("_ITEM",items.generate_scroll(self.rank+random.randint(1,2)))

        return btype and myitem
Beispiel #4
0
 def custom_init(self, nart):
     scene = self.elements.get("LOCALE")
     mygen = nart.get_map_generator(scene)
     room = mygen.DEFAULT_ROOM()
     room.DECORATE = randmaps.decor.CarnageDec()
     myteam = self.register_element(
         "TEAM",
         teams.Team(default_reaction=-999,
                    rank=self.rank,
                    strength=0,
                    habitat={
                        context.GEN_UNDEAD: True,
                        context.DES_EARTH: True
                    }))
     room.contents.append(myteam)
     self.register_element("_ROOM", room, dident="LOCALE")
     mychest = self.register_element("CHEST",
                                     waypoints.LargeChest(plot_locked=True),
                                     dident="_ROOM")
     mychest.stock(self.rank)
     for t in range(random.randint(1, 3)):
         myitem = items.generate_special_item(self.rank + 1)
         if myitem:
             mychest.contents.append(myitem)
     self.trap_ready = False
     return True
Beispiel #5
0
 def custom_init( self, nart ):
     scene = self.elements.get("LOCALE")
     mygen = nart.get_map_generator( scene )
     room = randmaps.rooms.CastleRoom( width=21,height=21,tags=(context.GOAL,))
     myhabitat = scene.get_encounter_request()
     myhabitat[ context.MTY_HUMANOID ] = True
     myhabitat[ (context.MTY_FIGHTER,context.MTY_THIEF) ] = context.MAYBE
     myteam = teams.Team(default_reaction=-999, rank=self.rank, 
       strength=150, habitat=myhabitat, fac=scene.fac )
     room.contents.append( myteam )
     room2 = randmaps.rooms.FuzzyRoom(parent=room)
     for t in range( random.randint( 3, 5 ) ):
         mychest = random.choice(( waypoints.SmallChest, waypoints.MediumChest, waypoints.LargeChest, waypoints.Cart ))()
         mychest.stock( self.rank )
         room2.contents.append( mychest )
     room3 = randmaps.rooms.FuzzyRoom(parent=room)
     mychest = waypoints.Cart()
     mychest.stock(self.rank)
     room3.contents.append( mychest )
     room3.contents.append( maps.CAULDRON )
     self.register_element( "_ROOM", room, dident="LOCALE" )
     boss = self.register_element( "NPC1",
      monsters.generate_npc(team=myteam,upgrade=True,fac=scene.fac,rank=self.rank+random.randint(0,1)),
      dident="_ROOM")
     for t in range( 2 ):
         myitem = items.generate_special_item( self.rank )
         if myitem:
             boss.contents.append( myitem )
     return True
def upgrade_equipment( npc, rank ):
    # Upgrade the armor.
    if items.HEAVY_ARMOR in npc.mr_level.legal_equipment:
        itype = items.HEAVY_ARMOR
    elif items.LIGHT_ARMOR in npc.mr_level.legal_equipment:
        itype = items.LIGHT_ARMOR
    else:
        itype = items.CLOTHES
    for t in range(3):
        maybe_replace_item( npc, items.generate_special_item( rank, itype ) )

    # Upgrade the weapon.
    old_item = npc.contents.get_equip( items.HAND1 )
    if rank > 5 and isinstance( npc.mr_level, characters.Monk ) and old_item:
        # At this level, monks will do better bare handed.
        npc.contents.remove( old_item )
    else:
        for t in range(3):
            maybe_replace_item( npc, items.generate_special_item( rank, old_item.itemtype ) )
        if items.WAND in npc.mr_level.legal_equipment:
            maybe_replace_item( npc, items.generate_special_item( rank, items.WAND ) )

    # Maybe give a shield.
    if items.SHIELD in npc.mr_level.legal_equipment:
        old_item = npc.contents.get_equip( items.HAND1 )
        if old_item and not old_item.attackdata.double_handed:
            maybe_replace_item( npc, items.generate_special_item( rank, items.SHIELD ) )

    # Maybe give headwear.
    if items.HELM in npc.mr_level.legal_equipment:
        maybe_replace_item( npc, items.generate_special_item( rank, items.HELM ) )
    elif items.HAT in npc.mr_level.legal_equipment:
        maybe_replace_item( npc, items.generate_special_item( rank, items.HAT ) )

    # Maybe give gloves.
    if items.GAUNTLET in npc.mr_level.legal_equipment:
        maybe_replace_item( npc, items.generate_special_item( rank, items.GAUNTLET ) )
    elif items.GLOVE in npc.mr_level.legal_equipment:
        maybe_replace_item( npc, items.generate_special_item( rank, items.GLOVE ) )

    if items.CLOAK in npc.mr_level.legal_equipment:
        maybe_replace_item( npc, items.generate_special_item( rank, items.CLOAK ) )

    # Maybe upgrade boots.
    for t in range(2):
        maybe_replace_item( npc, items.generate_special_item( rank, random.choice((items.BOOTS, items.SHOES, items.SANDALS))))
Beispiel #7
0
 def generate_items(self, mon):
     item_chance = self.swag_chance + mon.ENC_LEVEL * 2
     while random.randint(1, 100) <= item_chance:
         itype = random.choice(self.swag)
         if inspect.isclass(itype) and issubclass(itype, items.Item):
             item = itype()
         else:
             item = items.generate_special_item(
                 mon.ENC_LEVEL + self.swag_quality, itype)
         if item:
             mon.contents.append(item)
         item_chance -= 25
 def custom_init( self, nart ):
     scene = self.elements.get("LOCALE")
     mygen = nart.get_map_generator( scene )
     room = mygen.DEFAULT_ROOM()
     myteam = teams.Team(default_reaction=-999, rank=self.rank+1, 
       strength=200, habitat={context.MTY_BEAST: True}, hodgepodge=True )
     room.contents.append( myteam )
     myhabitat = scene.get_encounter_request()
     myhabitat[ context.MTY_HUMANOID ] = True
     myhabitat[(context.MTY_LEADER,context.MTY_FIGHTER)] = True
     scene.fac.alter_monster_request( myhabitat )
     btype = monsters.choose_monster_type(self.rank-3,self.rank+1,myhabitat)
     if btype:
         boss = monsters.generate_boss( btype, self.rank+1, team=myteam )
         myitem = items.generate_special_item( self.rank )
         if myitem:
             boss.contents.append( myitem )
         myspear = items.generate_special_item( self.rank + 1,item_type=items.POLEARM )
         if myspear:
             boss.contents.append( myspear )
         myteam.boss = boss
         self.register_element( "_ROOM", room, dident="LOCALE" )
         self.register_element( "BOSS", boss, "_ROOM" )
     return btype
 def custom_init( self, nart ):
     scene = self.elements.get("LOCALE")
     mygen = nart.get_map_generator( scene )
     room = mygen.DEFAULT_ROOM()
     room.DECORATE = randmaps.decor.CarnageDec()
     myteam = self.register_element( "TEAM", teams.Team(default_reaction=-999, rank=self.rank,
       strength=0, habitat={context.GEN_UNDEAD: True, context.DES_EARTH: True} ) )
     room.contents.append( myteam )
     self.register_element( "_ROOM", room, dident="LOCALE" )
     mychest = self.register_element( "CHEST", waypoints.LargeChest(plot_locked = True), dident="_ROOM" )
     mychest.stock(self.rank)
     for t in range( random.randint(1,3) ):
         myitem = items.generate_special_item( self.rank + 1 )
         if myitem:
             mychest.contents.append( myitem )
     self.trap_ready = False
     return True
Beispiel #10
0
    def custom_init(self, nart):
        scene = self.elements.get("LOCALE")
        room = randmaps.rooms.SharpRoom()
        room.DECORATE = randmaps.decor.LibraryDec(win=None)
        room.contents.append(waypoints.Bookshelf())
        # Create a chest, and stock it with magical goodies.
        mychest = waypoints.LargeChest()
        mychest.stock(self.rank, item_types=(items.SCROLL, items.POTION))
        room.contents.append(mychest)
        for t in range(random.randint(5, 8)):
            myitem = items.generate_scroll(self.rank + 1)
            if myitem:
                myitem.identified = True
                mychest.contents.append(myitem)
        # Create a team for our undead spellcaster.
        myhabitat = {context.GEN_UNDEAD: True}
        myteam = self.register_element(
            "TEAM",
            teams.Team(default_reaction=-25,
                       rank=self.rank,
                       strength=0,
                       habitat=myhabitat))
        room.contents.append(myteam)
        mh2 = myhabitat.copy()
        mh2[(context.MTY_MAGE, context.MTY_PRIEST)] = True
        btype = monsters.choose_monster_type(self.rank - 1, self.rank + 4, mh2)
        if btype:
            boss = monsters.generate_boss(btype, self.rank + 4, team=myteam)
            myitem = items.generate_special_item(self.rank + 2, items.WAND)
            if myitem:
                boss.contents.append(myitem)
            self.register_element("_ROOM", room, dident="LOCALE")
            self.register_element("BOSS", boss, "_ROOM")

            # Record the one thing this boss cares about.
            self.boss_goal = random.choice(self.GOALS)
            self.boss_shop = self.register_element(
                "SHOPSERVICE",
                services.Shop(services.MAGIC_STORE,
                              rank=self.rank + 5,
                              allow_misc=False,
                              num_items=25,
                              turnover=5,
                              npc=boss))
            self.shop_open = False
        return btype
    def custom_init(self, nart):
        # Create the lever and spirit room.
        scene = self.elements.get("LOCALE")
        mygen = nart.get_map_generator(scene)

        # Spirit jar room
        puzzle_room = randmaps.rooms.SharpRoom(tags=(context.ENTRANCE, ))
        team = teams.Team(default_reaction=-999, respawn=False)
        if random.randint(1, 3) == 1:
            puzzle_room.contents.append(
                teams.Team(default_reaction=-999,
                           rank=self.rank,
                           strength=100,
                           habitat=scene.get_encounter_request(),
                           fac=scene.fac))
        self.register_element("_PUZZLE_ROOM", puzzle_room, dident="LOCALE")
        self.register_element("_SOURCE",
                              waypoints.SpiritJar(
                                  plot_locked=True,
                                  anchor=randmaps.anchors.middle),
                              dident="_PUZZLE_ROOM")
        self.spirit_contained = True

        myhabitat = {
            (context.MTY_ELEMENTAL, context.MTY_UNDEAD, context.MTY_CELESTIAL, context.MTY_DEMON):
            True,
            tuple(self.elements["TARGET"].desctags):
            True
        }
        btype = monsters.choose_monster_type(self.rank, self.rank + 2,
                                             myhabitat)
        if btype:
            boss = self.register_element(
                "_MONSTER",
                monsters.generate_boss(btype, self.rank + 2, team=team))
        if random.randint(1, 2) == 1:
            myitem = self.register_element(
                "_ITEM",
                items.generate_special_item(self.rank + random.randint(1, 2)))
        else:
            myitem = self.register_element(
                "_ITEM",
                items.generate_scroll(self.rank + random.randint(1, 2)))

        return btype and myitem
Beispiel #12
0
 def custom_init( self, nart ):
     scene = self.elements.get("LOCALE")
     mygen = nart.get_map_generator( scene )
     room = mygen.DEFAULT_ROOM()
     myhabitat = scene.get_encounter_request()
     myhabitat[ context.MTY_HUMANOID ] = True
     myteam = teams.Team(default_reaction=-999, rank=self.rank, 
       strength=150, habitat=myhabitat )
     room.contents.append( myteam )
     mh2 = myhabitat.copy()
     mh2[(context.MTY_LEADER,context.MTY_BOSS)] = True
     boss = monsters.generate_npc(team=myteam,upgrade=True,rank=self.rank+1,fac=scene.fac)
     myteam.boss = boss
     myitem = items.generate_special_item( self.rank + 1 )
     if myitem:
         boss.contents.append( myitem )
     self.register_element( "_ROOM", room, dident="LOCALE" )
     self.register_element( "BOSS", boss, "_ROOM" )
     return True
 def custom_init(self, nart):
     scene = self.elements.get("LOCALE")
     mygen = nart.get_map_generator(scene)
     room = randmaps.rooms.CastleRoom(width=21,
                                      height=21,
                                      tags=(context.GOAL, ))
     myhabitat = scene.get_encounter_request()
     myhabitat[context.MTY_HUMANOID] = True
     myhabitat[(context.MTY_FIGHTER, context.MTY_THIEF)] = context.MAYBE
     myteam = teams.Team(default_reaction=-999,
                         rank=self.rank,
                         strength=150,
                         habitat=myhabitat,
                         fac=scene.fac)
     room.contents.append(myteam)
     room2 = randmaps.rooms.FuzzyRoom(parent=room)
     for t in range(random.randint(3, 5)):
         mychest = random.choice(
             (waypoints.SmallChest, waypoints.MediumChest,
              waypoints.LargeChest, waypoints.Cart))()
         mychest.stock(self.rank)
         room2.contents.append(mychest)
     room3 = randmaps.rooms.FuzzyRoom(parent=room)
     mychest = waypoints.Cart()
     mychest.stock(self.rank)
     room3.contents.append(mychest)
     room3.contents.append(maps.CAULDRON)
     self.register_element("_ROOM", room, dident="LOCALE")
     boss = self.register_element(
         "NPC1",
         monsters.generate_npc(team=myteam,
                               upgrade=True,
                               fac=scene.fac,
                               rank=self.rank + random.randint(0, 1)),
         dident="_ROOM")
     for t in range(2):
         myitem = items.generate_special_item(self.rank)
         if myitem:
             boss.contents.append(myitem)
     return True
Beispiel #14
0
 def custom_init(self, nart):
     scene = self.elements.get("LOCALE")
     mygen = nart.get_map_generator(scene)
     room = mygen.DEFAULT_ROOM()
     myhabitat = scene.get_encounter_request()
     myhabitat[context.MTY_HUMANOID] = True
     myteam = teams.Team(default_reaction=-999,
                         rank=self.rank,
                         strength=150,
                         habitat=myhabitat)
     room.contents.append(myteam)
     mh2 = myhabitat.copy()
     mh2[(context.MTY_LEADER, context.MTY_BOSS)] = True
     btype = monsters.choose_monster_type(self.rank - 2, self.rank + 2, mh2)
     if btype:
         boss = monsters.generate_boss(btype, self.rank + 3, team=myteam)
         myteam.boss = boss
         myitem = items.generate_special_item(self.rank + 1)
         if myitem:
             boss.contents.append(myitem)
         self.register_element("_ROOM", room, dident="LOCALE")
         self.register_element("BOSS", boss, "_ROOM")
     return btype
Beispiel #15
0
 def custom_init(self, nart):
     scene = self.elements.get("LOCALE")
     room = randmaps.rooms.SharpRoom()
     room.DECORATE = randmaps.decor.LibraryDec(win=None)
     # Create a chest, and stock it with magical goodies.
     mychest = waypoints.LargeChest()
     mychest.stock(self.rank, item_types=(items.SCROLL, items.POTION))
     room.contents.append(mychest)
     room.contents.append(waypoints.Bookshelf())
     for t in range(random.randint(2, 3)):
         myitem = items.generate_scroll(self.rank + 1)
         if myitem:
             myitem.identified = True
             mychest.contents.append(myitem)
     # Create a team for our spellcasters.
     myhabitat = scene.get_encounter_request()
     myhabitat[(context.MTY_MAGE, context.MTY_PRIEST)] = True
     myteam = self.register_element(
         "TEAM",
         teams.Team(default_reaction=-999,
                    rank=self.rank,
                    strength=120,
                    habitat=myhabitat,
                    hodgepodge=True))
     room.contents.append(myteam)
     boss = monsters.generate_npc(team=myteam,
                                  upgrade=True,
                                  rank=self.rank + 1,
                                  job=random.choice(self.JOBS),
                                  fac=scene.fac)
     myitem = items.generate_special_item(self.rank)
     if myitem:
         boss.contents.append(myitem)
     room.contents.append(boss)
     self.register_element("_ROOM", room, dident="LOCALE")
     return True
Beispiel #16
0
    def custom_init( self, nart ):
        scene = self.elements.get("LOCALE")
        room = randmaps.rooms.SharpRoom()
        room.DECORATE = randmaps.decor.LibraryDec(win=None)
        room.contents.append( waypoints.Bookshelf() )
        # Create a chest, and stock it with magical goodies.
        mychest = waypoints.LargeChest()
        mychest.stock(self.rank,item_types=(items.SCROLL,items.POTION))
        room.contents.append( mychest )
        for t in range( random.randint(5,8) ):
            myitem = items.generate_scroll( self.rank + 1 )
            if myitem:
                myitem.identified = True
                mychest.contents.append( myitem )
        # Create a team for our undead spellcaster.
        myhabitat = {context.GEN_UNDEAD: True }
        myteam = self.register_element( "TEAM", teams.Team(default_reaction=-25, rank=self.rank, 
          strength=0, habitat=myhabitat ) )
        room.contents.append( myteam )
        mh2 = myhabitat.copy()
        mh2[(context.MTY_MAGE,context.MTY_PRIEST)] = True
        btype = monsters.choose_monster_type(self.rank-1,self.rank+4,mh2)
        if btype:
            boss = monsters.generate_boss( btype, self.rank+4, team=myteam )
            myitem = items.generate_special_item( self.rank+2, items.WAND )
            if myitem:
                boss.contents.append( myitem )
            self.register_element( "_ROOM", room, dident="LOCALE" )
            self.register_element( "BOSS", boss, "_ROOM" )

            # Record the one thing this boss cares about.
            self.boss_goal = random.choice( self.GOALS )
            self.boss_shop = self.register_element( "SHOPSERVICE",
              services.Shop( services.MAGIC_STORE, rank=self.rank+5, allow_misc=False, num_items=25, turnover=5, npc=boss ) )
            self.shop_open = False
        return btype
Beispiel #17
0
    def custom_init(self, nart):
        scene = self.elements.get("LOCALE")
        mygen = nart.get_map_generator(scene)
        room = mygen.DEFAULT_ROOM()
        room.DECORATE = randmaps.decor.CarnageDec()
        # The lair entrance may be guarded.
        if random.randint(1, 2) != 1:
            myhabitat = scene.get_encounter_request()
            myhabitat[context.GEN_DRAGON] = context.MAYBE
            room.contents.append(
                teams.Team(default_reaction=-999,
                           rank=self.rank,
                           strength=100,
                           habitat=myhabitat,
                           fac=scene.fac))

        self.register_element("_EXTERIOR", room, dident="LOCALE")

        interior = maps.Scene(
            50,
            50,
            sprites={
                maps.SPRITE_WALL: "terrain_wall_mine.png",
                maps.SPRITE_GROUND: "terrain_ground_under.png",
                maps.SPRITE_FLOOR: "terrain_floor_gravel.png",
                maps.SPRITE_CHEST: "terrain_chest_metal.png",
                maps.SPRITE_INTERIOR: "terrain_int_temple.png"
            },
            biome=context.HAB_CAVE,
            setting=self.setting,
            desctags=(context.MAP_DUNGEON, context.MAP_GODOWN,
                      context.GEN_DRAGON, context.MTY_BEAST))
        igen = randmaps.CaveScene(interior)

        gate_1 = waypoints.Pit()
        gate_2 = waypoints.StairsUp()
        gate_1.destination = interior
        gate_1.otherside = gate_2
        gate_2.destination = scene
        gate_2.otherside = gate_1

        self.register_scene(nart,
                            interior,
                            igen,
                            ident="BUILDING_INT",
                            dident="LOCALE")

        room.contents.append(gate_1)

        int_mainroom = igen.DEFAULT_ROOM(tags=(context.ENTRANCE, ),
                                         anchor=randmaps.anchors.west,
                                         parent=interior)
        int_mainroom.contents.append(gate_2)
        gate_2.anchor = randmaps.anchors.west

        # Add some encounters, maybe.
        if random.randint(1, 3) != 2:
            for t in range(random.randint(1, 2)):
                self.add_sub_plot(
                    nart, "ENCOUNTER",
                    PlotState(elements={
                        "LOCALE": interior
                    }).based_on(self))

        # Add the goal room, stick the boss monster there.
        int_goalroom = igen.DEFAULT_ROOM(tags=(context.GOAL, ),
                                         parent=interior)
        int_goalroom.DECORATE = randmaps.decor.CarnageDec()

        # Create the dragon.
        myteam = self.register_element(
            "TEAM", teams.Team(default_reaction=-999, strength=0))
        btype = monsters.choose_monster_type(
            self.rank + 2, self.rank + 3, {
                (context.MTY_DRAGON, context.MTY_BEAST): context.PRESENT,
                context.MTY_BOSS: context.PRESENT,
                context.GEN_DRAGON: context.MAYBE,
                context.MTY_DRAGON: context.MAYBE
            })
        if btype:
            boss = monsters.generate_boss(btype, self.rank + 4, team=myteam)
            interior.name = "{0}'s Lair".format(boss)
            int_goalroom.contents.append(boss)

            # Create the chests.
            chests = list()
            for t in range(random.randint(2, 4)):
                mychest = random.choice(
                    (waypoints.SmallChest, waypoints.MediumChest,
                     waypoints.LargeChest))()
                mychest.stock(self.rank)
                int_goalroom.contents.append(mychest)
                chests.append(mychest)
            # And the special treasure.
            for t in range(3):
                myitem = items.generate_special_item(self.rank +
                                                     random.randint(0, 1))
                if myitem:
                    random.choice(chests).contents.append(myitem)
            return True
        else:
            # No dragon, no encounter.
            return False
Beispiel #18
0
    def custom_init( self, nart ):
        scene = self.elements.get("LOCALE")
        mygen = nart.get_map_generator( scene )
        room = mygen.DEFAULT_ROOM()
        room.DECORATE = randmaps.decor.CarnageDec()
        # The lair entrance may be guarded.
        if random.randint(1,2) != 1:
            myhabitat=scene.get_encounter_request()
            myhabitat[ context.GEN_DRAGON ] = context.MAYBE
            room.contents.append( teams.Team(default_reaction=-999, rank=self.rank, 
               strength=100, habitat=myhabitat, fac=scene.fac ) )

        self.register_element( "_EXTERIOR", room, dident="LOCALE" )

        interior = maps.Scene( 50,50, sprites={maps.SPRITE_WALL: "terrain_wall_mine.png", 
            maps.SPRITE_GROUND: "terrain_ground_under.png", maps.SPRITE_FLOOR: "terrain_floor_gravel.png",
            maps.SPRITE_CHEST: "terrain_chest_metal.png", maps.SPRITE_INTERIOR: "terrain_int_temple.png" },
            biome=context.HAB_CAVE, setting=self.setting, desctags=(context.MAP_DUNGEON,context.MAP_GODOWN,context.GEN_DRAGON,context.MTY_BEAST) )
        igen = randmaps.CaveScene( interior )

        gate_1 = waypoints.Pit()
        gate_2 = waypoints.StairsUp()
        gate_1.destination = interior
        gate_1.otherside = gate_2
        gate_2.destination = scene
        gate_2.otherside = gate_1

        self.register_scene( nart, interior, igen, ident="BUILDING_INT", dident="LOCALE" )

        room.contents.append( gate_1 )

        int_mainroom = igen.DEFAULT_ROOM( tags=(context.ENTRANCE,), anchor=randmaps.anchors.west, parent=interior )
        int_mainroom.contents.append( gate_2 )
        gate_2.anchor = randmaps.anchors.west

        # Add some encounters, maybe.
        if random.randint(1,3) != 2:
            for t in range( random.randint(1,2) ):
                self.add_sub_plot( nart, "ENCOUNTER", PlotState( elements={"LOCALE":interior} ).based_on( self ) )

        # Add the goal room, stick the boss monster there.
        int_goalroom = igen.DEFAULT_ROOM( tags=(context.GOAL,), parent=interior )
        int_goalroom.DECORATE = randmaps.decor.CarnageDec()

        # Create the dragon.
        myteam = self.register_element( "TEAM", teams.Team( default_reaction=-999, strength=0 ) )
        btype = monsters.choose_monster_type(self.rank+2,self.rank+3,
            {(context.MTY_DRAGON,context.MTY_BEAST):context.PRESENT,context.MTY_BOSS:context.PRESENT,
            context.GEN_DRAGON:context.MAYBE,context.MTY_DRAGON:context.MAYBE})
        if btype:
            boss = monsters.generate_boss( btype, self.rank+4, team=myteam )
            interior.name = "{0}'s Lair".format( boss )
            int_goalroom.contents.append( boss )

            # Create the chests.
            chests = list()
            for t in range( random.randint( 2, 4 ) ):
                mychest = random.choice(( waypoints.SmallChest, waypoints.MediumChest, waypoints.LargeChest ))()
                mychest.stock( self.rank )
                int_goalroom.contents.append( mychest )
                chests.append( mychest )
            # And the special treasure.
            for t in range( 3 ):
                myitem = items.generate_special_item( self.rank + random.randint(0,1) )
                if myitem:
                    random.choice( chests ).contents.append( myitem )
            return True
        else:
            # No dragon, no encounter.
            return False
    def custom_init(self, nart):
        # Create the boss monster.
        btype = monsters.choose_monster_type(
            self.rank, self.rank + 2, {
                context.MTY_UNDEAD: True,
                context.DES_LUNAR: context.MAYBE,
                context.MTY_BOSS: context.MAYBE
            })
        if btype:
            # We have a boss type, which means we can get a boss monster.
            bteam = teams.Team(default_reaction=-999,
                               rank=self.rank,
                               strength=200,
                               habitat={
                                   context.MTY_UNDEAD: True,
                                   context.DES_LUNAR: context.MAYBE
                               },
                               fac=None)
            boss = monsters.generate_boss(btype, self.rank + 2, team=bteam)
            bteam.boss = boss
            for t in range(3):
                myitem = items.generate_special_item(self.rank + 1)
                if myitem:
                    boss.contents.append(myitem)

            locale = self.elements.get("LOCALE")

            # Create the tomb.
            myfaction = teams.AntagonistFaction(primary=context.GEN_UNDEAD)
            myscene = maps.Scene(
                60,
                60,
                sprites={
                    maps.SPRITE_WALL: "terrain_wall_darkstone.png",
                    maps.SPRITE_GROUND: "terrain_ground_canyon.png",
                    maps.SPRITE_CHEST: "terrain_chest_metal.png",
                    maps.SPRITE_FLOOR: "terrain_floor_gravel.png"
                },
                biome=context.HAB_CAVE,
                setting=self.setting,
                fac=None,
                desctags=(context.MAP_DUNGEON, context.MAP_GODOWN,
                          context.DES_LUNAR, context.GEN_UNDEAD,
                          context.MTY_UNDEAD))
            mymapgen = randmaps.DividedIslandScene(myscene)
            self.register_scene(nart,
                                myscene,
                                mymapgen,
                                ident="_CRYPT",
                                dident="LOCALE")
            myscene.name = "Crypt of {}".format(boss)

            # Connect the scene to LOCALE.
            self.add_sub_plot(
                nart, "CONNECT",
                PlotState(rank=self.rank,
                          elements={
                              "PREV": locale,
                              "NEXT": myscene
                          }).based_on(self))

            # Add the bridge room
            bridge_room = randmaps.rooms.BottleneckRoom()
            self._bridge_door = waypoints.PuzzleDoor()
            bridge_room.special_c["door"] = self._bridge_door
            mymapgen.special_c["bridge"] = bridge_room
            self.register_element("_BRIDGE_ROOM", bridge_room, dident="_CRYPT")

            # Pre-bridge warning
            room = mymapgen.DEFAULT_ROOM()
            mymapgen.special_c["before_bridge"] = room
            room.contents.append(
                teams.Team(default_reaction=-999,
                           rank=self.rank,
                           strength=100,
                           habitat={
                               (context.MTY_UNDEAD, context.MTY_CONSTRUCT):
                               True,
                               context.DES_SOLAR: context.MAYBE
                           }))
            mysign = waypoints.Signpost(
                desc=
                "'This crypt was built to imprison the evil of {} the {} for all time. Whosoever releases these bonds shall be punished by death.'"
                .format(boss, boss.monster_name))
            mysign.anchor = randmaps.anchors.middle
            room.contents.append(mysign)
            self.register_element("_ROOM", room, dident="_CRYPT")

            # Lever room
            lever_room = randmaps.rooms.SharpRoom(tags=(context.ENTRANCE, ))
            lever_room.contents.append(
                teams.Team(default_reaction=-999,
                           rank=self.rank,
                           strength=100,
                           habitat={
                               (context.MTY_UNDEAD, context.MTY_CONSTRUCT):
                               True,
                               context.DES_SOLAR: context.MAYBE
                           }))
            self.register_element("_LEVER_ROOM", lever_room, dident="_CRYPT")
            lever = waypoints.PuzzleSwitch()
            self.register_element("_LEVER", lever, dident="_LEVER_ROOM")

            # Create the treasure room.
            int_otherroom = randmaps.rooms.FuzzyRoom(random.randint(10, 16),
                                                     random.randint(10, 16),
                                                     parent=myscene,
                                                     tags=(context.GOAL, ))
            int_otherroom.contents.append(bteam)
            int_otherroom.contents.append(boss)

            # Create the chests and place them.
            for t in range(random.randint(3, 5)):
                mychest = random.choice(
                    (waypoints.SmallChest, waypoints.MediumChest,
                     waypoints.LargeChest))()
                mychest.stock(self.rank)
                int_otherroom.contents.append(mychest)

            # Add an extra encounter, just because.
            self.add_sub_plot(
                nart, "ENCOUNTER",
                PlotState(elements={
                    "LOCALE": myscene,
                    "ANTAGONIST": myfaction
                }).based_on(self))

        return btype
Beispiel #20
0
    def custom_init( self, nart ):
        # Create the boss monster.
        btype = monsters.choose_monster_type(self.rank,self.rank+2,
            {context.MTY_UNDEAD:True,context.DES_LUNAR:context.MAYBE,context.MTY_BOSS:context.MAYBE})
        if btype:
            # We have a boss type, which means we can get a boss monster.
            bteam = teams.Team(default_reaction=-999, rank=self.rank, 
              strength=200, habitat={context.MTY_UNDEAD: True, context.DES_LUNAR: context.MAYBE}, fac=None )
            boss = monsters.generate_boss( btype, self.rank+2, team=bteam )
            bteam.boss = boss
            for t in range( 3 ):
                myitem = items.generate_special_item( self.rank + 1 )
                if myitem:
                    boss.contents.append( myitem )

            locale = self.elements.get("LOCALE")

            # Create the tomb.
            myfaction = teams.AntagonistFaction( primary=context.GEN_UNDEAD )
            myscene = maps.Scene( 60, 60, 
                sprites={maps.SPRITE_WALL: "terrain_wall_darkstone.png", maps.SPRITE_GROUND: "terrain_ground_canyon.png",
                maps.SPRITE_CHEST: "terrain_chest_metal.png", maps.SPRITE_FLOOR: "terrain_floor_gravel.png"},
                biome=context.HAB_CAVE, setting=self.setting, fac=None,
                desctags=(context.MAP_DUNGEON,context.MAP_GODOWN,context.DES_LUNAR,context.GEN_UNDEAD,context.MTY_UNDEAD) )
            mymapgen = randmaps.DividedIslandScene( myscene )
            self.register_scene( nart, myscene, mymapgen, ident="_CRYPT", dident="LOCALE" )
            myscene.name = "Crypt of {}".format( boss )

            # Connect the scene to LOCALE.
            self.add_sub_plot( nart, "CONNECT", PlotState( rank = self.rank, elements={"PREV":locale,"NEXT":myscene} ).based_on( self ) )

            # Add the bridge room
            bridge_room = randmaps.rooms.BottleneckRoom()
            self._bridge_door = waypoints.PuzzleDoor()
            bridge_room.special_c[ "door" ] = self._bridge_door
            mymapgen.special_c[ "bridge" ] = bridge_room
            self.register_element( "_BRIDGE_ROOM", bridge_room, dident="_CRYPT" )

            # Pre-bridge warning
            room = mymapgen.DEFAULT_ROOM()
            mymapgen.special_c[ "before_bridge" ] = room
            room.contents.append( teams.Team(default_reaction=-999, rank=self.rank, 
              strength=100, habitat={(context.MTY_UNDEAD,context.MTY_CONSTRUCT): True,
              context.DES_SOLAR: context.MAYBE} ) )
            mysign = waypoints.Signpost( desc="'This crypt was built to imprison the evil of {} the {} for all time. Whosoever releases these bonds shall be punished by death.'".format( boss, boss.monster_name ) )
            mysign.anchor = randmaps.anchors.middle
            room.contents.append( mysign )
            self.register_element( "_ROOM", room, dident="_CRYPT" )

            # Lever room
            lever_room = randmaps.rooms.SharpRoom( tags = (context.ENTRANCE,) )
            lever_room.contents.append( teams.Team(default_reaction=-999, rank=self.rank, 
              strength=100, habitat={(context.MTY_UNDEAD,context.MTY_CONSTRUCT): True,
              context.DES_SOLAR: context.MAYBE} ) )
            self.register_element( "_LEVER_ROOM", lever_room, dident="_CRYPT" )
            lever = waypoints.PuzzleSwitch()
            self.register_element( "_LEVER", lever, dident="_LEVER_ROOM" )

            # Create the treasure room.
            int_otherroom = randmaps.rooms.FuzzyRoom( random.randint(10,16), random.randint(10,16), parent=myscene, tags = (context.GOAL,) )
            int_otherroom.contents.append( bteam )
            int_otherroom.contents.append( boss )

            # Create the chests and place them.
            for t in range( random.randint( 3,5 ) ):
                mychest = random.choice(( waypoints.SmallChest, waypoints.MediumChest, waypoints.LargeChest ))()
                mychest.stock( self.rank )
                int_otherroom.contents.append( mychest )

            # Add an extra encounter, just because.
            self.add_sub_plot( nart, "ENCOUNTER", PlotState( elements={"LOCALE":myscene,"ANTAGONIST":myfaction} ).based_on( self ) )

        return btype