def add_to(self, area): area.bg_layer.add(self.bg_sprite) area.main_layer.add(self.bottom_sprite) area.main_layer.add(self.top_sprite) area.fg_layer.add(self.cover_sprite) for sprite in self.left_sprites: area.main_layer.add(sprite) for sprite in self.right_sprites: area.main_layer.add(sprite) self.cave_eventbox = EventBox(area) self.cave_eventbox.object_moved.connect(self.on_cave_eventbox_moved) self.cave_eventbox.watch_object_moves(area.engine.player) self.floor_eventbox = EventBox(area) self.floor_eventbox.object_entered.connect( lambda x: self.cover_sprite.hide()) self.floor_eventbox.watch_object_moves(area.engine.player)
def add_to(self, area): area.bg_layer.add(self.bg_sprite) area.main_layer.add(self.bottom_sprite) area.main_layer.add(self.top_sprite) area.fg_layer.add(self.cover_sprite) for sprite in self.left_sprites: area.main_layer.add(sprite) for sprite in self.right_sprites: area.main_layer.add(sprite) self.cave_eventbox = EventBox(area) self.cave_eventbox.object_moved.connect( self.on_cave_eventbox_moved) self.cave_eventbox.watch_object_moves(area.engine.player) self.floor_eventbox = EventBox(area) self.floor_eventbox.object_entered.connect( lambda x: self.cover_sprite.hide()) self.floor_eventbox.watch_object_moves(area.engine.player)
class Mountain(object): LEFT_OFFSETS = [0, 90, 189, 239, 313] RIGHT_OFFSETS = [1427, 1236, 1208, 1121, 940] def __init__(self): self.bg_sprite = Sprite('mountain_bg') self.cover_sprite = Sprite('mountain_cover') self.cover_sprite.collidable = False self.bottom_sprite = Sprite('mountain_bottom') self.bottom_sprite.use_pixel_collisions = True self.bottom_sprite.update_image() self.top_sprite = Sprite('mountain_top') self.top_sprite.use_pixel_collisions = True self.top_sprite.update_image() self.left_sprites = [] self.right_sprites = [] for i in range(1, 6): sprite = Sprite('mountain_left_%s' % i) if i != 3: # Sort of a hack. We need a blocker so you can't # climb the mountain. sprite.use_pixel_collisions = True sprite.update_image() self.left_sprites.append(sprite) sprite = Sprite('mountain_right_%s' % i) sprite.use_pixel_collisions = True sprite.update_image() self.right_sprites.append(sprite) self.rect = pygame.Rect( 0, 0, self.bottom_sprite.rect.width, sum([sprite.rect.height for sprite in self.right_sprites]) + self.top_sprite.rect.height + self.bottom_sprite.rect.height) def add_to(self, area): area.bg_layer.add(self.bg_sprite) area.main_layer.add(self.bottom_sprite) area.main_layer.add(self.top_sprite) area.fg_layer.add(self.cover_sprite) for sprite in self.left_sprites: area.main_layer.add(sprite) for sprite in self.right_sprites: area.main_layer.add(sprite) self.cave_eventbox = EventBox(area) self.cave_eventbox.object_moved.connect( self.on_cave_eventbox_moved) self.cave_eventbox.watch_object_moves(area.engine.player) self.floor_eventbox = EventBox(area) self.floor_eventbox.object_entered.connect( lambda x: self.cover_sprite.hide()) self.floor_eventbox.watch_object_moves(area.engine.player) def move_to(self, x, y): self.rect.left = x self.rect.top = y self.cover_sprite.move_to(x, y) self.bg_sprite.move_to(x, y) self.top_sprite.move_to(x + 485, y) self.bottom_sprite.move_to( x, y + self.rect.height - self.bottom_sprite.rect.height) new_y = self.bottom_sprite.rect.top for i, sprite in enumerate(self.left_sprites): new_y = new_y - sprite.rect.height sprite.move_to(x + self.LEFT_OFFSETS[i], new_y) new_y = self.bottom_sprite.rect.top for i, sprite in enumerate(self.right_sprites): new_y = new_y - sprite.rect.height sprite.move_to(x + self.RIGHT_OFFSETS[i], new_y) self.cave_eventbox.rects.append( pygame.Rect(x + 382, y + 110, 157, 110)) self.floor_eventbox.rects.append( pygame.Rect(x + 30, self.bottom_sprite.rect.top - 30, self.rect.width - 60, 30)) def on_cave_eventbox_moved(self, player): if player.rect.centerx <= self.cave_eventbox.rects[0].centerx: self.cover_sprite.show() else: self.cover_sprite.hide()
def setup(self): self.exploding = False self.exploded = False ground = TiledSprite("ground", self.size[0] / 32, 1) self.main_layer.add(ground) ground.move_to(0, self.size[1] - ground.rect.height) hills = Sprite("65000000bc/hills_1") self.bg_layer.add(hills) hills.move_to(0, ground.rect.top - hills.rect.height) # Volcano self.volcano = Volcano() self.volcano.add_to(self) self.volcano.move_to(1400, ground.rect.top - self.volcano.rect.height + 1) blocker = Box(150, self.size[1] - self.volcano.rect.height - 20, (0, 0, 0, 0)) self.main_layer.add(blocker) blocker.move_to(self.volcano.lava_pool.rect.right - 100, 0) # Left-side lava pool lava_pool = TiledSprite("65000000bc/lava_pool", 5, 1) lava_pool.lethal = True self.main_layer.add(lava_pool) lava_pool.move_to(self.volcano.rect.left - lava_pool.rect.width - 100, ground.rect.top - 18) # Platforms platform = FloatingSprite("65000000bc/platform") self.main_layer.add(platform) platform.move_to(lava_pool.rect.left + 250, lava_pool.rect.top - 10) platform = FloatingSprite("65000000bc/platform") self.main_layer.add(platform) platform.move_to(lava_pool.rect.left + 500, lava_pool.rect.top - 8) platform = FloatingSprite("65000000bc/platform") self.main_layer.add(platform) platform.move_to(lava_pool.rect.left + 750, lava_pool.rect.top - 12) # Right-side lava pool lava_pool = TiledSprite("65000000bc/lava_pool", 3, 1) lava_pool.lethal = True self.main_layer.add(lava_pool) lava_pool.move_to(self.volcano.rect.right + 200, ground.rect.top - 18) # Dynamite explosion trigger explosion_box = EventBox(self) explosion_box.rects.append( pygame.Rect( self.volcano.lava_puddle.rect.x, self.volcano.lava_puddle.rect.bottom - 5, self.volcano.lava_puddle.rect.width, 5, ) ) explosion_box.watch_object_moves(self.level.dynamite) explosion_box.object_entered.connect(self.on_dynamite_placed) # Artifact self.level.add_artifact(self, lava_pool.rect.right + 200, ground.rect.top)
class Mountain(object): LEFT_OFFSETS = [0, 90, 189, 239, 313] RIGHT_OFFSETS = [1427, 1236, 1208, 1121, 940] def __init__(self): self.bg_sprite = Sprite('mountain_bg') self.cover_sprite = Sprite('mountain_cover') self.cover_sprite.collidable = False self.bottom_sprite = Sprite('mountain_bottom') self.bottom_sprite.use_pixel_collisions = True self.bottom_sprite.update_image() self.top_sprite = Sprite('mountain_top') self.top_sprite.use_pixel_collisions = True self.top_sprite.update_image() self.left_sprites = [] self.right_sprites = [] for i in range(1, 6): sprite = Sprite('mountain_left_%s' % i) if i != 3: # Sort of a hack. We need a blocker so you can't # climb the mountain. sprite.use_pixel_collisions = True sprite.update_image() self.left_sprites.append(sprite) sprite = Sprite('mountain_right_%s' % i) sprite.use_pixel_collisions = True sprite.update_image() self.right_sprites.append(sprite) self.rect = pygame.Rect( 0, 0, self.bottom_sprite.rect.width, sum([sprite.rect.height for sprite in self.right_sprites]) + self.top_sprite.rect.height + self.bottom_sprite.rect.height) def add_to(self, area): area.bg_layer.add(self.bg_sprite) area.main_layer.add(self.bottom_sprite) area.main_layer.add(self.top_sprite) area.fg_layer.add(self.cover_sprite) for sprite in self.left_sprites: area.main_layer.add(sprite) for sprite in self.right_sprites: area.main_layer.add(sprite) self.cave_eventbox = EventBox(area) self.cave_eventbox.object_moved.connect(self.on_cave_eventbox_moved) self.cave_eventbox.watch_object_moves(area.engine.player) self.floor_eventbox = EventBox(area) self.floor_eventbox.object_entered.connect( lambda x: self.cover_sprite.hide()) self.floor_eventbox.watch_object_moves(area.engine.player) def move_to(self, x, y): self.rect.left = x self.rect.top = y self.cover_sprite.move_to(x, y) self.bg_sprite.move_to(x, y) self.top_sprite.move_to(x + 485, y) self.bottom_sprite.move_to( x, y + self.rect.height - self.bottom_sprite.rect.height) new_y = self.bottom_sprite.rect.top for i, sprite in enumerate(self.left_sprites): new_y = new_y - sprite.rect.height sprite.move_to(x + self.LEFT_OFFSETS[i], new_y) new_y = self.bottom_sprite.rect.top for i, sprite in enumerate(self.right_sprites): new_y = new_y - sprite.rect.height sprite.move_to(x + self.RIGHT_OFFSETS[i], new_y) self.cave_eventbox.rects.append(pygame.Rect(x + 382, y + 110, 157, 110)) self.floor_eventbox.rects.append( pygame.Rect(x + 30, self.bottom_sprite.rect.top - 30, self.rect.width - 60, 30)) def on_cave_eventbox_moved(self, player): if player.rect.centerx <= self.cave_eventbox.rects[0].centerx: self.cover_sprite.show() else: self.cover_sprite.hide()
def setup(self): area_width, area_height = self.size ground = Box(area_width, 60, (83, 107, 143)) self.main_layer.add(ground) ground.move_to(0, area_height - ground.rect.height) ceiling = Box(area_width, 60, (83, 107, 143)) self.main_layer.add(ceiling) ceiling.move_to(0, 0) wall_height = area_height - ground.rect.height - ceiling.rect.height + 2 wall_y = ceiling.rect.bottom - 1 left_wall = Box(60, wall_height, (83, 107, 143)) self.main_layer.add(left_wall) left_wall.move_to(0, wall_y) right_wall = Box(60, wall_height, (83, 107, 143)) self.main_layer.add(right_wall) right_wall.move_to(area_width - right_wall.rect.width, wall_y) self.main_layer.add(self.door) self.door.move_to(left_wall.rect.right + 100, ground.rect.top - self.door.rect.height) self.door.destination = self.time_period.areas['default'].bluebox # Reverse gravity background reverse_grav_bg = Sprite('300ne/bluebox_reverse_gravity_bg') self.bg_layer.add(reverse_grav_bg) reverse_grav_bg.move_to(left_wall.rect.right, ceiling.rect.bottom) # Reverse gravity area gravity_eventbox = EventBox(self) gravity_eventbox.rects.append(reverse_grav_bg.rect) gravity_eventbox.watch_object_moves(self.level.engine.player) gravity_eventbox.object_entered.connect( lambda obj: obj.set_reverse_gravity(True)) gravity_eventbox.object_exited.connect( lambda obj: obj.set_reverse_gravity(False)) gravity_eventbox.object_moved.connect( lambda obj: obj.set_reverse_gravity(True)) teleporter1 = BlueBoxTeleporter() self.main_layer.add(teleporter1) teleporter1.move_to(right_wall.rect.left - teleporter1.rect.width - 20, ground.rect.top - teleporter1.rect.height) teleporter2 = BlueBoxTeleporter() teleporter2.reverse_gravity = True self.main_layer.add(teleporter2) teleporter2.move_to(left_wall.rect.right + 20, ceiling.rect.bottom) teleporter1.destination = teleporter2 teleporter2.destination = teleporter1 self.main_layer.add(self.level.triangle_key) self.level.triangle_key.move_to( right_wall.rect.left - self.level.triangle_key.rect.width - 40, ceiling.rect.bottom) self.level.triangle_key.set_reverse_gravity(True)
def setup(self): self.in_end_sequence = False level_width, level_height = self.size base_platforms_y = \ self.start_pos[1] + self.engine.player.rect.height + 3 # Left platforms platform = FloatingPlatform1NE() self.main_layer.add(platform) platform.move_to(233, base_platforms_y) platform = FloatingPlatform1NE() self.main_layer.add(platform) platform.move_to(0, 255) # Ceiling ceiling = Sprite('300ne/ceiling') self.main_layer.add(ceiling) ceiling.move_to(platform.rect.right + 80, 0) # Spikes spikes = Sprite('300ne/ceiling_spikes') spikes.lethal = True self.main_layer.add(spikes) spikes.move_to(ceiling.rect.left, ceiling.rect.bottom) # Reverse-gravity platforms for x, y in self.PLATFORM_POS: platform = FloatingSprite('300ne/small_platform') platform.set_reverse_gravity(True) self.main_layer.add(platform) platform.move_to(ceiling.rect.left + x, ceiling.rect.top + y) # Reverse gravity background reverse_grav_bg = Sprite('300ne/reverse_gravity_bg') self.bg_layer.add(reverse_grav_bg) reverse_grav_bg.move_to(ceiling.rect.left, ceiling.rect.bottom) # Reverse gravity area gravity_eventbox = EventBox(self) gravity_eventbox.rects.append(reverse_grav_bg.rect) gravity_eventbox.watch_object_moves(self.level.engine.player) gravity_eventbox.object_entered.connect( lambda obj: obj.set_reverse_gravity(True)) gravity_eventbox.object_exited.connect( lambda obj: obj.set_reverse_gravity(False)) gravity_eventbox.object_moved.connect( lambda obj: obj.set_reverse_gravity(True)) # Right-side floor floor = Sprite('300ne/floor') self.main_layer.add(floor) floor.move_to(level_width - floor.rect.width, level_height - floor.rect.height) step = FloatingSprite('300ne/step') self.main_layer.add(step) step.move_to(floor.rect.left + 20, floor.rect.top - step.rect.height - 40) monolith = Monolith300NE() self.main_layer.add(monolith) monolith.move_to(floor.rect.left + 200, floor.rect.top - monolith.rect.height) # Container self.container_base = Sprite('300ne/container_base') self.main_layer.add(self.container_base) self.container_base.move_to( floor.rect.right - self.container_base.rect.width - 400, floor.rect.top - self.container_base.rect.height) self.container_bg = Sprite('300ne/container_bg') self.bg_layer.add(self.container_bg) self.container_bg.move_to( self.container_base.rect.left + (self.container_base.rect.width - self.container_bg.rect.width) / 2, self.container_base.rect.top - self.container_bg.rect.height) self.level.add_artifact(self, self.container_base.rect.centerx, self.container_base.rect.top) self.container = Sprite('300ne/container') self.main_layer.add(self.container) self.container.move_to(self.container_bg.rect.left, self.container_bg.rect.top) self.keyhole = Sprite('300ne/keyhole') self.main_layer.add(self.keyhole) self.keyhole.move_to( self.container.rect.right - self.keyhole.rect.width - 10, self.container.rect.bottom - self.keyhole.rect.height - 10) keyhole_eventbox = EventBox(self) keyhole_eventbox.rects.append( pygame.Rect(self.container.rect.right, self.keyhole.rect.top, 40, self.keyhole.rect.height)) keyhole_eventbox.watch_object_moves(self.level.triangle_key) keyhole_eventbox.object_entered.connect(self.start_end_sequence)
def setup(self): self.exploding = False self.exploded = False ground = TiledSprite('ground', self.size[0] / 32, 1) self.main_layer.add(ground) ground.move_to(0, self.size[1] - ground.rect.height) hills = Sprite('65000000bc/hills_1') self.bg_layer.add(hills) hills.move_to(0, ground.rect.top - hills.rect.height) # Volcano self.volcano = Volcano() self.volcano.add_to(self) self.volcano.move_to( 1400, ground.rect.top - self.volcano.rect.height + 1) blocker = Box(150, self.size[1] - self.volcano.rect.height - 20, (0, 0, 0, 0)) self.main_layer.add(blocker) blocker.move_to(self.volcano.lava_pool.rect.right - 100, 0) # Left-side lava pool lava_pool = TiledSprite('65000000bc/lava_pool', 5, 1) lava_pool.lethal = True self.main_layer.add(lava_pool) lava_pool.move_to(self.volcano.rect.left - lava_pool.rect.width - 100, ground.rect.top - 18) # Platforms platform = FloatingSprite('65000000bc/platform') self.main_layer.add(platform) platform.move_to(lava_pool.rect.left + 250, lava_pool.rect.top - 10) platform = FloatingSprite('65000000bc/platform') self.main_layer.add(platform) platform.move_to(lava_pool.rect.left + 500, lava_pool.rect.top - 8) platform = FloatingSprite('65000000bc/platform') self.main_layer.add(platform) platform.move_to(lava_pool.rect.left + 750, lava_pool.rect.top - 12) # Right-side lava pool lava_pool = TiledSprite('65000000bc/lava_pool', 3, 1) lava_pool.lethal = True self.main_layer.add(lava_pool) lava_pool.move_to(self.volcano.rect.right + 200, ground.rect.top - 18) # Dynamite explosion trigger explosion_box = EventBox(self) explosion_box.rects.append( pygame.Rect(self.volcano.lava_puddle.rect.x, self.volcano.lava_puddle.rect.bottom - 5, self.volcano.lava_puddle.rect.width, 5)) explosion_box.watch_object_moves(self.level.dynamite) explosion_box.object_entered.connect(self.on_dynamite_placed) # Artifact self.level.add_artifact(self, lava_pool.rect.right + 200, ground.rect.top)