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
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
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
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))))
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
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
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
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
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
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): 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 ): 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
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