Example #1
0
 def __init__(self, level_num, game):
     self.level_num = level_num
     self.game = game
     self.tilemap = tmx.load('resources/maps/map_%03d.tmx' % self.level_num,
                             self.game.screen.get_size())
     self.enemycollide = pygame.sprite.collide_rect_ratio(0.8)
     self.sprites = None
     self.enemies = None
     self.blockers = None
Example #2
0
 def __init__(self, level_num, game):
     self.level_num = level_num
     self.game = game
     self.tilemap = tmx.load(
         'resources/maps/map_%03d.tmx' % self.level_num,
         self.game.screen.get_size())
     self.enemycollide = pygame.sprite.collide_rect_ratio(0.8)
     self.sprites = None
     self.enemies = None
     self.blockers = None
Example #3
0
    def __init__(self, screen):
        # Load the background and get its properties
        self.background = pygame.image.load('resources/backgrounds/mountains.png')
        self.background_size = self.background.get_size()

        self.screen = screen
        self.tile_map = tmx.load("resources/maps/map.tmx", self.screen.get_size())
        self.sprites = tmx.SpriteLayer()
        self.enemies = tmx.SpriteLayer()

        # Load the player
        start_cell = self.tile_map.layers['triggers'].find('player')[0]
        self.player = Player((start_cell.px, start_cell.py), self.sprites)

        # Load the enemies
        for enemy in self.tile_map.layers['triggers'].find('enemy'):
            Enemy((enemy.px, enemy.py), self.enemies)
        self.tile_map.layers.append(self.enemies)
Example #4
0
    def main(self, screen):
        ''' The main loop '''
        clock = pygame.time.Clock()
        self.tilemap = tmx.load('resources/maps/test1.tmx', screen.get_size())
        self.sprites = tmx.layers.SpriteLayer()
        self.items = tmx.layers.SpriteLayer()
        self.projectiles = tmx.layers.SpriteLayer()
        self.player = Player(self.items, self.sprites)
        self.tilemap.layers.append(self.sprites)
        self.tilemap.layers.append(self.projectiles)

        while self.running:
            time_delta = clock.tick(45)
            self.handle_keys()
            self.tilemap.set_focus(self.player.vehicle.rect.x, self.player.vehicle.rect.y)
            self.tilemap.update([arrow[1] for arrow in self.arrows], time_delta / 100, self.tilemap)
            screen.fill((239, 237, 236))
            self.tilemap.draw(screen)
            self.items.draw(screen)
            if self.wireframe_mode:
                self.draw_wireframe(screen, self.player.vehicle.near_obstacles,
                                            self.player.vehicle.collision_points)
            pygame.display.flip()
Example #5
0
    def main(self, screen):
        import random
        random.seed()
        clock = pygame.time.Clock()

        self.tilemap = tmx.load('maps/map1.tmx', screen.get_size())

        self.players = tmx.SpriteLayer('players')
        self.player = SmallTank((800, 400),'First Player', True, self.players)
        self.secondPlayer = SmallTank((400, 400),'Second Player', False, self.players)
       
        self.shells = tmx.SpriteLayer('shell')
        self.bonusItems = tmx.SpriteLayer('bonusItems')

        self.tilemap.layers.append(self.players)
        self.tilemap.layers.append(self.shells)
        self.tilemap.layers.append(self.bonusItems)

        firstPlayerHUD = HUD((1175,0), self.player)
        secondPlayerHUD = HUD((0,0), self.secondPlayer)

        textForMainMenu = ("Start Game","Quit")
        mainMenu = Menu(textForMainMenu, screen)
        mainMenu.drawMenu(screen)

        textForLastMenu = ("Game Over" ," ")
        lastMenu = GameOverMenu(textForLastMenu, screen)

        gameIsRunning = True
        interval = 0

        while gameIsRunning:
            dt = clock.tick(30)
            interval += dt

            if interval > 10000 and not mainMenu.isActive(): # interval in milliseconds
                interval = 0
                item_type = random.choice(['healthBox','rocketShellBox', 'genericShellBox'])
                item_x_coord = random.randint(0, self.tilemap.px_width-20)
                item_y_coord = random.randint(0, 200)
                item =  GenericBonusItem((item_x_coord,item_y_coord), item_type, self.bonusItems)

            for e in pygame.event.get():
                if e.type == pygame.MOUSEBUTTONDOWN:
                    text = mainMenu.handleEvent(e)
                    if text == "Quit":
                        gameIsRunning = False
                    else:
                        mainMenu.deactivate()
                if self.player.alive() and e.type == pygame.KEYDOWN and e.key == pygame.K_SPACE:
                    self.player.shoot(self.shells)
                if self.secondPlayer.alive() and e.type == pygame.KEYDOWN and e.key == pygame.K_TAB:
                    self.secondPlayer.shoot(self.shells)
                if e.type == pygame.QUIT:
                    gameIsRunning = False
                if e.type == pygame.KEYDOWN and e.key == pygame.K_ESCAPE:
                    mainMenu.activate()

            if not self.player.alive() or not self.secondPlayer.alive():
                lastMenu.drawMenu(screen)
            elif mainMenu.isActive():
                mainMenu.drawMenu(screen)
            else:
                self.tilemap.update(dt / 1000., self)
                screen.fill(GRAY_COLOR)
                firstPlayerHUD.draw(screen)
                secondPlayerHUD.draw(screen)
                self.tilemap.draw(screen)
            
            pygame.display.flip()
Example #6
0
    def RealLoadLevel(self, path, mode, screen):
        """
        Loads a level structure, given path, mode and screen

        Keyword Arguments:
        - path: Full path to the level
        - mode: Mode to open the level in
        - screen: The screen instance
        """
        self.mod_logger.info("LoadLevel Routine is loading %(path)s"
                             % locals())
        # Erases level and if we're doing a campaign, checks for intermissions
        # v--------------------------------------------------v
        self.eraseCurrentLevel()
        self.showLoadingScreen()
        if mode not in ["singlemap"]:
            self.checkIntermission()
        # ^--------------------------------------------------^
        self.showLoadingScreen()
        # Loads the level configuration and its chaos parameters
        # v--------------------------------------------------v
        with open(path+".json") as f:
            levelconfig = json.loads(f.read())
        self.mod_logger.debug("Level configuration loaded")
        self.loadChaosParameters(levelconfig)
        # ^--------------------------------------------------^
        # If we're in the single timer Critical Failure, load the level time
        # And reset the time to 0.
        # v--------------------------------------------------v
        if mode == "cfsingle":
            self.gameStatus["cftime"] = levelconfig["Level Info"]["CFTime"]
            self.gameStatus["time"] = 0.
        # ^--------------------------------------------------^
        # Loads the level glitches
        # v--------------------------------------------------v
        self.glitches = levelconfig["Glitches"]["Standard"]
        self.mod_logger.debug("Glitches Active: {0}".format(self.glitches))
        # ^--------------------------------------------------------------^
        # Loads the level map
        # v--------------------------------------------------------------v
        self.mod_logger.debug("Loading Tilemap")
        self.tilemap = tmx.load(path+".tmx",
                                self.screensize)
        self.mod_logger.debug("Tilemap Loaded, building map")
        # ^--------------------------------------------------------------^
        # Loads backgrounds and overlays, optimised in case
        # the same ones are used
        # v--------------------------------------------------------------v
        self.mod_logger.debug("Loading Backgrounds")
        self.oldComponentPaths = self.componentPaths.copy()
        for key in self.componentPaths.keys():
            self.componentPaths[key] = pjoin("resources", "backgrounds",
                                             levelconfig["Level Components"]
                                             [key])
            if self.componentPaths[key] != self.oldComponentPaths[key]:
                self.components[key] = pygame.image.load(
                        self.componentPaths[key]).convert_alpha()
        self.hasOverlay = levelconfig["Level Components"]["overlay"]\
            is not None
        if self.hasOverlay:
            self.overpath = pjoin("resources", "overlays",
                                  levelconfig["Level Components"]
                                  ["overlay"])
            if self.overpath != self.oldoverpath:
                self.overlay = pygame.image.load(self.overpath).convert_alpha()
        # ^--------------------------------------------------------------^
        # Creates all the mobile obstacles
        # v--------------------------------------------------------------v
        self.obstacles = tmx.SpriteLayer()
        for obstacle in self.tilemap.layers['Triggers'].find('Obstacle'):
            Obstacle((obstacle.px, obstacle.py), ("v" in obstacle['Obstacle']),
                     obstacle['ObsSpeed'], None, self.obstacles,
                     preloaded_ani=self.preloaded_sprites["glitches"])
        self.tilemap.layers.append(self.obstacles)
        # ^--------------------------------------------------------------^
        # Creates all the triggerable platforms
        # v--------------------------------------------------------------v
        for platform in self.tilemap.layers['Triggers'].find('Platform'):
            bouncy = "bouncyplat" in platform
            bouncepwr = int(platform['bouncyplat']) if bouncy else 0
            TriggerablePlatform(
                    platform.px, platform.py,
                    ("v" in platform['Platform']), bouncepwr,
                    int(platform['PlatSpeed']), int(platform['PlatSize']),
                    False, platform['id'], self.plats, game=self,
                    bouncy=bouncy, image=self.preloaded_sprites["platforms"])
        self.tilemap.layers.append(self.plats)
        # Creates all the lasers
        # v--------------------------------------------------------------v
        self.lasers = tmx.SpriteLayer()
        for laser in self.tilemap.layers['Triggers'].find('Laser'):
            time = laser['Laser']
            number = 0
            if 'id' in laser:
                number = laser['id']
            size = (laser.width, laser.height)
            vertical = size[1] > size[0]
            definingsize = size[1] if vertical else size[0]
            Laser(definingsize, vertical, time, number, (laser.px, laser.py),
                  self.lasers)
        self.tilemap.layers.append(self.lasers)
        # ^--------------------------------------------------------------^
        # Creates all the buttons
        # v--------------------------------------------------------------v
        self.btns = tmx.SpriteLayer()
        for btn in self.tilemap.layers['Triggers'].find('button'):
            ident = btn['button']
            password = None
            msg=""
            if "password" in btn:
                password = btn["password"]
            if "message" in btn:
                msg = btn["message"]
            button((btn.px, btn.py), ident, password, self.btns, message=msg)
        self.tilemap.layers.append(self.btns)
        # ^--------------------------------------------------------------^
        # Creates all the checkpoints
        # v--------------------------------------------------------------v
        self.checkpoints = tmx.SpriteLayer()
        for chk in self.tilemap.layers["Triggers"].find('CheckPoint'):
            checkPoint((chk.px, chk.py), self.checkpoints)
        self.tilemap.layers.append(self.checkpoints)
        # ^--------------------------------------------------------------^
        # Creates all the glitch toggles
        # v--------------------------------------------------------------v
        for trig in self.tilemap.layers['Triggers'].find('ToggleGlitch'):
            if "message" in trig:
                msg = trig["message"]
            else:
                msg = ""
            self.GlitchTriggers.add(CollectibleTrigger(
                trig.px, trig.py, self, trig['ToggleGlitch'],
                preloaded_animation=self.preloaded_sprites[
                    "collectibleitem"
                    ], message=msg))
        self.tilemap.layers.append(self.GlitchTriggers)
        # ^--------------------------------------------------------------^
        # In case of critical failure modes, further garbles
        # level title texts, then renders the title
        # v--------------------------------------------------------------v
        if self.gameStatus["mode"] in ["criticalfailure", "cfsingle"]:
            self.titletxt = makeMoreGlitched(
                                str(levelconfig['Level Info']['Name']),
                                50)
        else:
            self.titletxt = str(levelconfig['Level Info']['Name'])
        self.title = makeGlitched(self.titletxt, self.font)
        # ^--------------------------------------------------------------^
        # Finds the center position of the title
        # v--------------------------------------------------------------v
        center = (self.screensize[0] - int(self.title.get_rect().width))/2
        self.titleposition = (center, self.gsize[1] + 2)
        # ^--------------------------------------------------------------^
        self.mod_logger.info("Map Loaded and built Successfully")
        # ^--------------------------------------------------------------^
        if self.config["General"]["autosaving"] and self.SaveFile:
            self.mod_logger.debug("Saved with data: {0}"
                                  % self.gameStatus)
            with open(self.SaveFile, "w") as savefile:
                savefile.write(json.dumps(self.gameStatus))
                """self.mod_logger.info("Game autosaved on the file: {0}"
                                     % (self.SaveFile))"""
        message = levelconfig["Message"]
        if message != "":
            self.showMessage = True
            self.messageSurf = animatedText(message)