def field_camp( self ):
     """The party is going camping. Yahoo!"""
     self.alert( "You camp down to take a short rest..." )
     awareness = min( self.camp.party_stat( stats.AWARENESS, stats.INTELLIGENCE ) + 55 - self.camp.scene.rank * 5 + self.safe_camp_bonus, 95 )
     if random.randint(1,100) <= awareness:
         self.camp.rest( 0.5 )
         self.alert( "...and wake up perfectly refreshed." )
         self.safe_camp_bonus = 0
     elif random.randint(1,3)==2 and self.camp.gold > random.randint( 1500,10000 ):
         lose = max( self.camp.gold // 2, 1 )
         self.camp.gold -= lose
         self.camp.rest( 0.5 )
         self.alert( "...but when you wake up, {0}gp is missing!".format( lose ) )
         self.safe_camp_bonus = 0
     else:
         pc = self.camp.first_living_pc()
         aoe = list()
         for x in range( pc.pos[0]-3, pc.pos[0]+4 ):
             for y in range( pc.pos[1]-3, pc.pos[1]+4 ):
                 if self.scene.on_the_map(x,y) and not self.scene.map[x][y].blocks_walking() and not self.scene.get_character_at_spot((x,y)):
                     aoe.append( (x,y) )
         team = teams.Team(default_reaction=-999,rank=(self.scene.rank + self.camp.party_rank() )//2, strength=random.randint(40,65), habitat=self.scene.get_encounter_request())
         mons = team.build_encounter( self.scene )
         for m in mons:
             if aoe:
                 p = random.choice( aoe )
                 aoe.remove( p )
                 m.place( self.scene, p )
             else:
                 break
         self.alert( "...and get woken up by monsters!" )
         self.safe_camp_bonus += 25
         self.camp.activate_monster( mons[0] )
예제 #2
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")
     mygen = nart.get_map_generator(scene)
     room = mygen.DEFAULT_ROOM()
     myhabitat = scene.get_encounter_request()
     myhabitat[context.MTY_HUMANOID] = context.PRESENT
     myhabitat[context.MTY_FIGHTER] = context.MAYBE
     room.contents.append(
         teams.Team(default_reaction=-999,
                    rank=self.rank + 1,
                    strength=100,
                    habitat=myhabitat,
                    fac=self.elements.get("ANTAGONIST")))
     room.contents.append(maps.WALL_WEAPON_RACK)
     room.contents.append(maps.WALL_WEAPON_RACK)
     for t in range(random.randint(2, 4)):
         mychest = waypoints.MediumChest()
         mychest.stock(self.rank)
         weapon = None
         weapon = items.choose_item(random.choice(items.WEAPON_TYPES),
                                    self.rank)
         if weapon:
             items.make_item_magic(weapon, self.rank + 1)
             weapon.identified = False
             mychest.contents.append(weapon)
         room.contents.append(mychest)
     self.register_element("_ROOM", room, dident="LOCALE")
     return True
예제 #4
0
    def custom_init( self, nart ):
        """Create the final dungeon, boss encounter, and resolution."""
        btype = monsters.choose_monster_type(self.rank+1,self.rank+4,{(context.MTY_HUMANOID,context.MTY_LEADER):True,context.MTY_LEADER:context.MAYBE})
        boss = monsters.generate_boss( btype, self.rank+4 )

        interior = maps.Scene( 65,65, sprites={maps.SPRITE_WALL: "terrain_wall_darkbrick.png", 
            maps.SPRITE_FLOOR: "terrain_floor_dungeon.png", },
            biome=context.HAB_BUILDING, setting=self.setting, desctags=(context.MAP_DUNGEON,context.MTY_HUMANOID) )
        igen = randmaps.SubtleMonkeyTunnelScene( interior )
        interior.name = "{0}'s Base".format( boss )

        self.register_scene( nart, interior, igen, ident="_LAIR" )
        self.add_sub_plot( nart, "CONNECT", PlotState( elements={"PREV":self.elements["FINAL_DUNGEON"],"NEXT":interior} ).based_on( self ) )

        team = teams.Team(default_reaction=-999, rank=self.rank, strength=200,
         habitat=interior.get_encounter_request(), respawn=False, boss=boss )
        int_goalroom = randmaps.rooms.SharpRoom( tags=(context.GOAL,), parent=interior )
        int_goalroom.contents.append( team )
        boss.team = team
        self.register_element( "_LAIR_ROOM", int_goalroom )
        self.register_element( "ENEMY", boss, "_LAIR_ROOM" )
        self.add_sub_plot( nart, "DUNGEON_ARMORY", PlotState( elements={"LOCALE":interior} ).based_on( self ) )
        self.add_resolution( nart, "RESOLVE_FIGHT", ident="next" )
        self.enemy_defeated = False

        #self.add_sub_plot( nart, "CONNECT", PlotState( elements={"PREV":self.elements["LOCALE"],"NEXT":interior} ).based_on( self ) )

        return True
    def update_scene( self ):
        """If appropriate, move models back to their home zone and restock monsters."""
        if self.scene.last_updated < self.camp.day:
            for m in self.scene.contents:
                if isinstance( m, characters.Character ) and m not in self.camp.party:
                    # Regenerate any damage suffered since last time.
                    m.hp_damage = 0
                    m.mp_damage = 0
                    if m.team and m.team.home and not m.team.home.collidepoint( m.pos ):
                        # This monster is lost. Send it back home.
                        m.pos = self.scene.find_entry_point_in_rect( m.team.home )

            # Check the monster zones. Restock random monsters.
            party_rank = self.camp.party_rank()
            restock_chance = 50
            if party_rank > self.scene.rank:
                restock_chance = max( 10, ( restock_chance * 2 ) // ( 2 + party_rank - self.scene.rank ) )
            for mz in self.scene.monster_zones:
                if self.scene.monster_zone_is_empty( mz ) and random.randint(1,100) <= restock_chance:
                    NewTeam = teams.Team( default_reaction=characters.SAFELY_ENEMY, home=mz,
                      rank=max( self.scene.rank, ( self.scene.rank + party_rank ) // 2 ),
                      strength=100, habitat=self.scene.get_encounter_request() )
                    mlist = NewTeam.build_encounter(self.scene)
                    poslist = self.scene.find_free_points_in_rect( mz )

                    for m in mlist:
                        if poslist:
                            pos = random.choice( poslist )
                            m.place( self.scene, pos )
                            poslist.remove( pos )
                        else:
                            break

            self.scene.last_updated = self.camp.day
예제 #6
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
예제 #7
0
    def custom_init( self, nart ):
        """Install the dungeon."""
        # Create the intermediary level.
        interior = maps.Scene( 65,65, sprites={maps.SPRITE_WALL: "terrain_wall_darkbrick.png", maps.SPRITE_GROUND: "terrain_ground_under.png", maps.SPRITE_FLOOR: "terrain_floor_tile.png" },
            fac=self.elements["ANTAGONIST"],
            biome=context.HAB_TUNNELS, setting=self.setting, desctags=(context.MAP_DUNGEON,) )
        igen = randmaps.SubtleMonkeyTunnelScene( interior )
        self.register_scene( nart, interior, igen, ident="LOCALE" )

        # Create the goal room.
        team = teams.Team(default_reaction=-999, rank=self.rank, strength=50, habitat=interior.get_encounter_request(),
         fac=self.elements["ANTAGONIST"], respawn=False )
        int_goalroom = randmaps.rooms.SharpRoom( tags=(context.GOAL,), parent=interior )
        int_goalroom.contents.append( team )

        # Create the guardian.
        boss = self.register_element( "_BOSS", monsters.generate_npc(team=team,upgrade=True,rank=self.rank+3) )
        self.enemy_defeated = False
        interior.name = "{}'s Chamber".format( boss )
        int_goalroom.contents.append( boss )

        for t in range( random.randint(2,4) ):
            self.add_sub_plot( nart, "ENCOUNTER" )

        # Connect to previous level.
        self.add_sub_plot( nart, "CONNECT", PlotState( elements={"PREV":self.elements["LAST_DUNGEON"],"NEXT":interior} ).based_on( self ) )

        # Add a BARDIC_FRESHSTART to install the dungeon somewhere else.
        sp = self.add_sub_plot( nart, "BARDIC_FRESHSTART" )
        self.register_element( "DESTINATION", sp.elements.get( "LOCALE" ) )
        return True
예제 #8
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
    def custom_init(self, nart):
        scene = self.elements.get("LOCALE")
        mygen = nart.get_map_generator(scene)

        # Bridge room
        bridge_room = randmaps.rooms.BottleneckRoom()
        bridge_room.special_c["door"] = self.register_element(
            "_DOOR", waypoints.LockableDoor(plot_locked=True))
        mygen.special_c["bridge"] = bridge_room
        self.register_element("_BRIDGE_ROOM", bridge_room, dident="LOCALE")

        # Key room
        key_room = mygen.DEFAULT_ROOM(tags=(context.ENTRANCE, ))
        myteam = self.register_element(
            "TEAM",
            teams.Team(default_reaction=-999,
                       rank=self.rank,
                       strength=150,
                       habitat=scene.get_encounter_request()))
        key_room.contents.append(myteam)
        self.register_element("_KEY_ROOM", key_room, dident="LOCALE")
        self._ready = True
        npc = self.register_element("NPC",
                                    monsters.generate_npc(team=myteam,
                                                          fac=scene.fac,
                                                          rank=self.rank,
                                                          upgrade=True),
                                    dident="_KEY_ROOM")
        myteam.boss = npc

        # Post-bridge encounter
        room = mygen.DEFAULT_ROOM()
        mygen.special_c["after_bridge"] = room
        myhabitat = scene.get_encounter_request()
        myhabitat[context.MTY_HUMANOID] = context.PRESENT
        myhabitat[context.MTY_FIGHTER] = context.MAYBE
        room.contents.append(
            teams.Team(default_reaction=-999,
                       rank=self.rank,
                       strength=150,
                       habitat=myhabitat))
        self.register_element("_ROOM", room, dident="LOCALE")

        return True
예제 #10
0
def simulate(inning_to_start_at_second=None, n=1):
    """ Simulate a game provided an inning to start runners on 2nd base and the number of simulations desired"""
    outcomes = []
    for _ in range(1, n + 1):
        cubs = teams.Team('Cubs')
        marlins = teams.Team('Marlins')
        g = games.Game(home_team=cubs,
                       away_team=marlins,
                       late_inning_base_change=inning_to_start_at_second)
        g.play_game()
        outcomes.append({
            'inning': g.inning,
            'top_flag': not g.bottom_of_inning,
            'home_team_runs': g.home_team.runs,
            'away_team_runs': g.away_team.runs,
            'total_runs': g.home_team.runs + g.away_team.runs
        })

    return outcomes
예제 #11
0
    def custom_init(self, nart):
        """Create map, fill with city + services."""
        biome = self.elements.setdefault("BIOME",
                                         randmaps.architect.make_wilderness())
        archi = self.register_element("ARCHITECTURE",
                                      randmaps.architect.Village(biome.biome))
        culture = self.elements.setdefault("CULTURE", teams.PolisFaction())
        myscene, mymapgen = randmaps.architect.design_scene(
            90,
            90,
            randmaps.EdgeOfCivilization,
            biome,
            secondary=archi,
            setting=self.setting)
        myscene.desctags.append(context.DES_CIVILIZED)
        self.register_scene(nart, myscene, mymapgen, ident="LOCALE")

        castle = self.register_element(
            "CITY",
            randmaps.rooms.CastleRoom(width=35,
                                      height=35,
                                      tags=(context.CIVILIZED,
                                            context.ROOM_PUBLIC),
                                      parent=myscene))
        myroom = randmaps.rooms.FuzzyRoom(tags=(context.ENTRANCE, ),
                                          parent=castle)
        myteam = teams.Team(strength=0,
                            default_reaction=characters.SAFELY_FRIENDLY)
        castle.contents.append(myteam)
        myent = waypoints.Well()
        myroom.contents.append(myent)
        myroom.contents.append(monsters.generate_npc(team=myteam, fac=culture))
        myroom.contents.append(monsters.generate_npc(team=myteam, fac=culture))

        self.register_element("ENTRANCE", myent)

        self.chapter.world.add_entrance(myscene, myscene.name, worlds.W_CITY,
                                        myent, True)

        self.add_sub_plot(nart, "CITY_GENERALSTORE")
        self.add_sub_plot(nart, "CITY_LIBRARY")
        self.add_sub_plot(nart, "CITY_INN")
        self.add_sub_plot(nart, "CITY_TEMPLE")
        self.add_sub_plot(nart, "CITY_EXTRASHOP")
        for t in range(random.randint(1, 4)):
            self.add_sub_plot(nart, "ENCOUNTER")
        self.add_sub_plot(nart, "SPECIAL_FEATURE")
        self.add_sub_plot(nart, "TEST_FEATURE", necessary=False)

        self.add_sub_plot(
            nart, "CITY_STORY",
            PlotState(rank=self.random_rank_in_chapter()).based_on(self))

        return True
예제 #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] = context.MAYBE
     room.contents.append(
         teams.Team(default_reaction=-999,
                    rank=self.rank,
                    strength=100,
                    habitat=scene.get_encounter_request(),
                    fac=scene.fac))
     self.register_element("_ROOM", room, dident="LOCALE")
     return True
예제 #13
0
    def custom_init(self, nart):
        scene = self.elements.get("LOCALE")
        mygen = nart.get_map_generator(scene)

        # Bridge room
        bridge_room = randmaps.rooms.BottleneckRoom()
        self._bridge_door = waypoints.PuzzleDoor()
        bridge_room.special_c["door"] = self._bridge_door
        mygen.special_c["bridge"] = bridge_room
        self.register_element("_BRIDGE_ROOM", bridge_room, dident="LOCALE")

        # Lever room
        lever_room = randmaps.rooms.SharpRoom(tags=(context.ENTRANCE, ))
        lever_room.contents.append(
            teams.Team(default_reaction=-999,
                       rank=self.rank,
                       strength=150,
                       habitat=scene.get_encounter_request()))
        self.register_element("_LEVER_ROOM", lever_room, dident="LOCALE")

        lever = waypoints.PuzzleSwitch()
        self.register_element("_LEVER", lever, dident="_LEVER_ROOM")

        # Post-bridge encounter
        room = mygen.DEFAULT_ROOM()
        mygen.special_c["after_bridge"] = room
        myhabitat = scene.get_encounter_request()
        myhabitat[context.MTY_HUMANOID] = context.PRESENT
        myhabitat[context.MTY_FIGHTER] = context.MAYBE
        room.contents.append(
            teams.Team(default_reaction=-999,
                       rank=self.rank,
                       strength=150,
                       habitat=myhabitat))
        self.register_element("_ROOM", room, dident="LOCALE")

        return True
예제 #14
0
 def custom_init(self, nart):
     scene = self.elements.get("LOCALE")
     mygen = nart.get_map_generator(scene)
     room = mygen.DEFAULT_ROOM()
     room.contents.append(
         teams.Team(default_reaction=-999,
                    rank=self.rank,
                    strength=125,
                    habitat=scene.get_encounter_request(),
                    fac=scene.fac))
     mychest = waypoints.MediumChest()
     mychest.stock(self.rank)
     room.contents.append(mychest)
     self.register_element("_ROOM", room, dident="LOCALE")
     return True
예제 #15
0
 def custom_init(self, nart):
     # Add an encounter, monsters must be MTY_BEAST, favoring GEN_NATURE.
     scene = self.elements.get("LOCALE")
     mygen = nart.get_map_generator(scene)
     room = mygen.DEFAULT_ROOM()
     myhabitat = scene.get_encounter_request()
     myhabitat[context.MTY_BEAST] = context.PRESENT
     myhabitat[context.GEN_NATURE] = context.MAYBE
     room.contents.append(
         teams.Team(default_reaction=-999,
                    rank=self.rank,
                    strength=random.randint(90, 120),
                    habitat=myhabitat))
     self.register_element("_ROOM", room, dident="LOCALE")
     return True
예제 #16
0
 def custom_init(self, nart):
     scene = self.elements.get("LOCALE")
     room = randmaps.rooms.FuzzyRoom()
     myteam = teams.Team(default_reaction=-999,
                         rank=self.rank,
                         strength=0,
                         habitat=None)
     room.contents.append(myteam)
     monster = monsters.ignan.Azer(myteam)
     room.contents.append(monster)
     room.contents.append(waypoints.HealingFountain())
     mychest = waypoints.MediumChest()
     mychest.stock(20)
     room.contents.append(mychest)
     self.register_element("_ROOM", room, dident="LOCALE")
     return True
예제 #17
0
 def custom_init(self, nart):
     # Add a group of humanoids, hostile reaction score.
     scene = self.elements.get("LOCALE")
     mygen = nart.get_map_generator(scene)
     room = mygen.DEFAULT_ROOM()
     myteam = self.register_element(
         "TEAM", teams.Team(default_reaction=-50, strength=0))
     room.contents.append(myteam)
     self.register_element("_ROOM", room, dident="LOCALE")
     p1 = self.register_element("NPC1",
                                monsters.generate_npc(team=myteam,
                                                      job=random.choice(
                                                          self.FIGHTERS),
                                                      upgrade=True,
                                                      rank=self.rank,
                                                      fac=scene.fac),
                                dident="_ROOM")
     p2 = self.register_element("NPC2",
                                monsters.generate_npc(team=myteam,
                                                      job=random.choice(
                                                          self.THIEVES),
                                                      upgrade=True,
                                                      rank=self.rank,
                                                      fac=scene.fac),
                                dident="_ROOM")
     p3 = self.register_element("NPC3",
                                monsters.generate_npc(team=myteam,
                                                      job=random.choice(
                                                          self.PRIESTS),
                                                      upgrade=True,
                                                      rank=self.rank,
                                                      fac=scene.fac),
                                dident="_ROOM")
     p4 = self.register_element("NPC4",
                                monsters.generate_npc(team=myteam,
                                                      job=random.choice(
                                                          self.MAGES),
                                                      upgrade=True,
                                                      rank=self.rank,
                                                      fac=scene.fac),
                                dident="_ROOM")
     self.add_sub_plot(
         nart, "RESOURCE_NPCCONVO",
         PlotState(elements={
             "NPC": random.choice((p1, p2, p3, p4))
         }).based_on(self))
     return True
예제 #18
0
 def custom_init(self, nart):
     scene = self.elements.get("LOCALE")
     room = randmaps.rooms.SharpRoom(random.randint(9, 15),
                                     random.randint(9, 15))
     room.DECORATE = randmaps.decor.BedroomDec()
     room.contents.append(
         teams.Team(default_reaction=0,
                    rank=self.rank,
                    strength=120,
                    habitat=scene.get_encounter_request(),
                    fac=scene.fac))
     for t in range(random.randint(1, 3)):
         mychest = waypoints.SmallChest()
         mychest.stock(self.rank)
         room.contents.append(mychest)
     self.register_element("_ROOM", room, dident="LOCALE")
     return True
예제 #19
0
    def custom_init(self, nart):
        """Create the climax level."""
        interior = maps.Scene(65,
                              65,
                              sprites={
                                  maps.SPRITE_WALL:
                                  "terrain_wall_darkbrick.png",
                                  maps.SPRITE_GROUND:
                                  "terrain_ground_under.png",
                                  maps.SPRITE_FLOOR: "terrain_floor_gravel.png"
                              },
                              biome=context.HAB_TUNNELS,
                              setting=self.setting,
                              desctags=(context.MAP_DUNGEON,
                                        context.MAP_GODOWN))
        igen = randmaps.SubtleMonkeyTunnelScene(interior)
        self.register_scene(nart, interior, igen, ident="LOCALE")

        # Create the guardiarn.
        btype = monsters.choose_monster_type(
            self.rank, self.rank + 2, {
                (context.DES_EARTH, context.MTY_FIGHTER, context.MTY_CONSTRUCT):
                True,
                context.DES_EARTH: context.MAYBE
            })
        boss = monsters.generate_boss(btype, self.rank + 3)
        interior.name = "{0}'s Lair".format(boss)

        # Create the goal room.
        team = teams.Team(default_reaction=-999,
                          rank=self.rank,
                          strength=200,
                          habitat=interior.get_encounter_request(),
                          respawn=False,
                          boss=boss)
        int_goalroom = randmaps.rooms.SharpRoom(tags=(context.GOAL, ),
                                                parent=interior)
        int_goalroom.contents.append(team)
        int_goalroom.contents.append(boss)
        boss.team = team

        # Alter the plot state to reflect this climax.
        self.register_element("SP_GOAL", context.SP_GOAL_SUMMON_DARKGOD)
        self.register_element("SP_MOT", context.SP_MOT_DESTROY_THE_WORLD)

        return True
예제 #20
0
def main():
   pygame.init()

   scr = pygame.display.set_mode( (400, 300) )
   t = teams.Team( 'test.team' )
   p = character.Character( 'simon.chr' )
   t.addUnit( p )
   a = Level( scr, 'test.level', [t] )

   a.mapx = 0
   a.mapy = 0
   # Map should error-check this!
   # ...no, that'll happen as part of the character movement.
   p.xCord = 3
   p.yCord = 3

   a.mainloop()
예제 #21
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
예제 #22
0
 def custom_init(self, nart):
     # Add an encounter, monsters must be faction members.
     scene = self.elements.get("LOCALE")
     mygen = nart.get_map_generator(scene)
     room = mygen.DEFAULT_ROOM()
     room.contents.append(
         teams.Team(default_reaction=-999,
                    rank=self.rank,
                    strength=175,
                    habitat=scene.get_encounter_request(),
                    fac=self.elements.get("ANTAGONIST")))
     mychest = waypoints.Cart()
     mychest.HOARD_AMOUNT = random.randint(400, 600)
     mychest.stock(self.rank)
     room.contents.append(mychest)
     room.contents.append(maps.CAULDRON)
     self.register_element("_ROOM", room, dident="LOCALE")
     return True
예제 #23
0
 def custom_init(self, nart):
     scene = self.elements.get("LOCALE")
     mygen = nart.get_map_generator(scene)
     room = mygen.DEFAULT_ROOM(tags=(context.GOAL, ))
     room.contents.append(
         teams.Team(default_reaction=-999,
                    rank=self.rank + 1,
                    strength=175,
                    habitat=scene.get_encounter_request(),
                    fac=scene.fac))
     for t in range(random.randint(2, 3)):
         mychest = random.choice(
             (waypoints.SmallChest, waypoints.MediumChest,
              waypoints.LargeChest))()
         mychest.stock(self.rank)
         room.contents.append(mychest)
     self.register_element("_ROOM", room, dident="LOCALE")
     return True
예제 #24
0
 def custom_init(self, nart):
     """Create the encounter."""
     scene = self.elements.get("LOCALE")
     mygen = nart.get_map_generator(scene)
     room = mygen.DEFAULT_ROOM()
     myhabitat = scene.get_encounter_request()
     myhabitat[context.GEN_GIANT] = context.PRESENT
     room.contents.append(
         teams.Team(default_reaction=0,
                    rank=self.rank,
                    strength=100,
                    habitat=myhabitat,
                    respawn=False))
     self.register_element("_ROOM", room, dident="LOCALE")
     signpost = waypoints.Signpost()
     self.register_element("_SIGN", signpost, dident="_ROOM")
     signpost.plot_locked = True
     signpost.mini_map_label = "Signpost"
     return True
예제 #25
0
    def custom_init(self, nart):
        scene = self.elements.get("LOCALE")
        mygen = nart.get_map_generator(scene)

        # Bridge room
        bridge_room = randmaps.rooms.FuzzyRoom()
        mygen.special_c["bridge"] = bridge_room
        self.register_element("_BRIDGE_ROOM", bridge_room, dident="LOCALE")

        myhabitat = scene.get_encounter_request()
        myhabitat[context.MTY_HUMANOID] = context.PRESENT
        myhabitat[context.MTY_FIGHTER] = context.MAYBE
        team = self.register_element(
            "TEAM",
            teams.Team(default_reaction=-999,
                       rank=self.rank,
                       strength=200,
                       habitat=myhabitat,
                       respawn=False))

        myhabitat[(context.MTY_HUMANOID, context.MTY_LEADER)] = True
        myhabitat[context.MTY_LEADER] = context.MAYBE
        btype = monsters.choose_monster_type(self.rank, self.rank + 2,
                                             myhabitat)
        if btype:
            boss = monsters.generate_boss(btype, self.rank + 2)
            boss.team = team
            team.boss = boss

        # Give the boss a magic weapon.
        weapon = items.choose_item(random.choice(items.WEAPON_TYPES),
                                   self.rank)
        if weapon:
            items.make_item_magic(weapon, self.rank)
            weapon.identified = True
            boss.contents.append(weapon)

        bridge_room.contents.append(team)
        bridge_room.contents.append(boss)

        self._ready = True

        return btype
예제 #26
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
예제 #27
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
예제 #28
0
    def custom_init(self, nart):
        # Create the lever and water control room.
        scene = self.elements.get("LOCALE")
        mygen = nart.get_map_generator(scene)

        # Lever room
        lever_room = randmaps.rooms.SharpRoom(tags=(context.ENTRANCE, ))
        lever_room.contents.append(
            teams.Team(default_reaction=-999,
                       rank=self.rank,
                       strength=150,
                       habitat=scene.get_encounter_request()))
        self.register_element("_LEVER_ROOM", lever_room, dident="LOCALE")

        lever = waypoints.PuzzleSwitch()
        self.register_element("_LEVER", lever, dident="_LEVER_ROOM")
        lever_room.contents.append(
            waypoints.Signpost(
                desc=
                "**WATER MAIN CONTROL** \n Use only in case of emergency. Unauthorized use punishable by fines or death.",
                anchor=randmaps.anchors.middle))

        return True
예제 #29
0
def getTeams():

    teamsWeb = tree.xpath('//table[@id="active_franchises"]//a/text()')
    statsWeb = tree.xpath(
        '//table[@id="active_franchises"]//tr[@class!="partial_table"]/td/text()'
    )

    row = 1
    for team in teamsWeb:
        name = team
        code = teamCodes[name]
        players = getPlayers(code)
        origin = statsWeb[row]
        games = statsWeb[row + 3]
        win = statsWeb[row + 4]
        loss = statsWeb[row + 5]
        tie = statsWeb[row + 6]
        overtime = statsWeb[row + 7]
        points = statsWeb[row + 8]
        pp = statsWeb[row + 9]
        plyoff = statsWeb[row + 10]
        div = statsWeb[row + 11]
        conf = statsWeb[row + 12]
        league = statsWeb[row + 13]
        stan = statsWeb[row + 14]

        addition = teams.Team(name, code, players, origin, games, win, loss,
                              tie, overtime, points, pp, plyoff, div, conf,
                              league, stan)

        print(
            "***************************************        " + name +
            "        ***************************************************************"
        )
        print(addition)

        row += 16
예제 #30
0
 def trigger(self, explo, pos):
     """Handle trap effect, return True if trap disabled."""
     # This trap is triggered. The party must make a DISARM_TRAPS roll or
     # suffer the consequences.
     if self.already_triggered_once:
         explo.alert("This time you avoid the alarm.")
         return True
     else:
         disarm = max(
             explo.camp.party_stat(stats.DISARM_TRAPS,
                                   stats.DISARM_TRAPS.default_bonus) -
             self.DIFFICULTY, 5)
         if random.randint(1, 100) <= disarm:
             explo.alert(
                 "There was an {0}, but you managed to disarm it.".format(
                     self))
             return True
         else:
             explo.alert("You have set off an alarm!")
             self.already_triggered_once = True
             aoe = self.get_area(explo, pos)
             req = explo.scene.get_encounter_request()
             req[context.MTY_HUMANOID] = context.MAYBE
             req[context.MTY_FIGHTER] = context.MAYBE
             team = teams.Team(default_reaction=-999,
                               rank=self.MIN_RANK - 1,
                               strength=75,
                               habitat=req)
             mons = team.build_encounter(explo.scene)
             for m in mons:
                 if aoe:
                     p = random.choice(aoe)
                     aoe.remove(p)
                 else:
                     break
                 m.place(explo.scene, p)
             return self.ONE_SHOT