Example #1
0
 def _dimensions(obj):
     if isinstance(obj, Entity):
         return obj.dimensions()
     elif isinstance(obj, SpriteTile):
         return Point2D(obj.dimensions.x, obj.dimensions.y)
     else:
         return Point2D(TILE_SIZE * obj.repeat_x, TILE_SIZE * obj.repeat_y)
Example #2
0
 def __init__(self):
     center = (WIDTH // 2, HEIGHT // 2)
     super().__init__([
         Button(40, center[1] - 30 + 110, Sprite('buttons/start_selected.png', Point2D(200, 60)),
                Sprite('buttons/start_deselected.png', Point2D(200, 60)), partial(self._set_state, 1)),
         Button(40, center[1] - 30 + 200, Sprite('buttons/quit_selected.png', Point2D(200, 60)),
                Sprite('buttons/quit_deselected.png', Point2D(200, 60)), partial(self._set_state, 2))
     ])
     self.state = 0
Example #3
0
 def __init__(self, x, y):
     super().__init__(Point2D(x, y),
                      5,
                      False,
                      AnimatedSprite('moth.png', Point2D(64, 64), 8),
                      60,
                      25,
                      enemy=True)
     self.moving_random = 0
     self.random_direction = (0, 0)
Example #4
0
 def __init__(self):
     super().__init__(
         Point2D(WIDTH / 2, PLAYER_SPAWN + 256), 10, True, 0.3,
         AnimatedSprite('player_idle.png', Point2D(25, 44), 3, speed=0.25),
         100, 4)
     self.animation_state = self.PlayerStates.IDLE
     self.fading = False
     self.can_fade = True
     self.swinging = False
     self.can_shoot = True
Example #5
0
 def __init__(self, x, y):
     super().__init__(Point2D(x, y),
                      3,
                      False,
                      AnimatedSprite('fire_skull.png',
                                     Point2D(32, 50),
                                     11,
                                     speed=0.25),
                      100,
                      0,
                      enemy=True)
     self._can_fire = True
Example #6
0
 def __init__(self, x, y):
     super().__init__(Point2D(x, y),
                      8,
                      False,
                      0.3,
                      AnimatedSprite('spider_idle.png',
                                     Point2D(32, 32),
                                     2,
                                     speed=0.25),
                      50,
                      20,
                      enemy=True)
     self._midair = False
Example #7
0
 def __init__(self, x, y):
     super().__init__(Point2D(x, y),
                      5,
                      False,
                      AnimatedSprite('ice_demon.png',
                                     Point2D(32, 64),
                                     4,
                                     speed=0.25),
                      60,
                      10,
                      enemy=True)
     self._can_teleport = True
     self._invisible = False
     self._can_fire = True
 def update(self):
     self.window.blit(self._title_screen, (0, 0))
     x, y = pygame.mouse.get_pos()
     self._menu.update(Point2D(x, y), pygame.mouse.get_pressed()[0])
     self.window.draw_menu(self._menu)
     self.state = self._menu.state
     return self.state != 2
Example #9
0
 def _end_teleport(self):
     self._sprite = AnimatedSprite('ice_demon.png',
                                   Point2D(32, 64),
                                   4,
                                   speed=0.25)
     self.invulnerable = False
     self._can_teleport = True
Example #10
0
 def __init__(self, x, y):
     super().__init__(
         Point2D(x, y), 0, False,
         AnimatedSprite('final_boss.png', Point2D(144, 108), 32,
                        speed=0.25), 400, 0, True)
     self.y_offset = 0
     self.start_y = y
     self.downward = False
     self._spawned_moths = 0
     self.phase = 0
     self._spawned_fire_balls = 0
     self._spawned_icicles = 0
     self._teleported = 0
     self._can_teleport = True
     self._set_phase_5_timer = False
     self._can_shoot = True
Example #11
0
 def _reappear(self):
     self._sprite = AnimatedSprite('ice_demon_teleport.png',
                                   Point2D(32, 64),
                                   6,
                                   speed=0.25,
                                   reverse=True)
     self._invisible = False
     self.set_timer('end-teleport', 16, self._end_teleport)
Example #12
0
 def _die(self):
     self.health = 1
     self._change_sprite(
         AnimatedSprite('icicle_death.png', Point2D(32, 32), 7, speed=0.25))
     self._dead = True
     self.invulnerable = True
     self.damage = 0
     self.set_timer('despawn', 24, self._despawn)
Example #13
0
    def update(self, player_pos):
        if self.force.y_mag != 0:
            self._midair = True
            self._change_sprite(Sprite('spider_midair.png', Point2D(32, 32)))
            self.transform(x=1 if player_pos.x > self.position.x else -1,
                           y=1 if player_pos.y > self.position.y else -1)
        else:
            self._change_sprite(
                AnimatedSprite('spider_idle.png',
                               Point2D(32, 32),
                               2,
                               speed=0.25))
            self.should_damage = False
            if randint(0, 10) == 0:
                self._jump()

        super().update()
Example #14
0
 def _reset(self):
     self._change_sprite(
         AnimatedSprite('final_boss.png', Point2D(144, 108), 32,
                        speed=0.25))
     if self._teleported > 15:
         self.phase = 6
     else:
         self._can_teleport = True
Example #15
0
 def __init__(self, x, y, dx, dy, parent):
     super().__init__(AnimatedSprite('fire_ball.png', Point2D(25, 23), 3),
                      x,
                      y,
                      dx,
                      dy,
                      5,
                      50,
                      parent,
                      enemy=True)
Example #16
0
 def teleport(self):
     if not self._can_teleport:
         return
     self.invulnerable = True
     self._can_teleport = False
     self._sprite = AnimatedSprite('ice_demon_teleport.png',
                                   Point2D(32, 64),
                                   6,
                                   speed=0.25)
     self.set_timer('disappear', 16, self._disappear)
Example #17
0
 def __init__(self,
              path,
              x,
              y,
              width,
              height,
              collidable=False,
              damage=0,
              frames=1,
              speed=0.25,
              render_first=False):
     self._path = 'sprites/' + path
     self._sprite = rm.load(self._path)
     self.frames = frames
     self.position = Point2D(x, y)
     self.dimensions = Point2D(width, height)
     self.collidable = collidable
     self.damage = damage
     self._animation_counter = 0
     self._animation_speed = speed
     self.render_first = render_first
Example #18
0
 def __init__(self, x, y, dx, dy, parent):
     super().__init__(AnimatedSprite('icicle.png', Point2D(27, 7), 5),
                      x,
                      y,
                      dx,
                      dy,
                      7,
                      60,
                      parent,
                      enemy=True)
     self.set_timer('die', 1000, self._die)
     self._dead = False
Example #19
0
 def _update_paused(self):
     self.window.draw_overlay((125, 125, 125), 50)
     if not self._pause_menu:
         self._pause_menu = PauseMenu()
     x, y = pygame.mouse.get_pos()
     self._pause_menu.update(Point2D(x, y),
                             pygame.mouse.get_pressed()[0] == 1)
     self.window.draw_menu(self._pause_menu)
     if self._pause_menu.state >= 1:
         self._paused = False
     if self._pause_menu.state == 2:
         self.player_alive = False
     self._pause_menu.state = 0
Example #20
0
 def _move(self, player_pos):
     if self._teleported > 15:
         self.position.x = WIDTH // 2 - 72
     elif player_pos.x - 72 < 1:
         self.position.x = 1
     elif player_pos.x - 72 > 572:
         self.position.x = 572
     else:
         self.position.x = player_pos.x - 72
     self._change_sprite(
         AnimatedSprite('final_boss_teleport.png',
                        Point2D(144, 108),
                        7,
                        speed=0.5))
     self.set_timer('reset', 14, self._reset)
Example #21
0
 def __init__(self,
              x,
              y,
              sprite_x,
              sprite_y,
              repeat_x=1,
              repeat_y=1,
              collidable=True,
              damage=0,
              render_first=False):
     self.position = Point2D(x, y)
     self.sprite_x, self.sprite_y = sprite_x, sprite_y
     self.repeat_x, self.repeat_y = repeat_x, repeat_y
     self.collidable = collidable
     self.damage = damage
     self.render_first = render_first
Example #22
0
 def __init__(self,
              sprite,
              x,
              y,
              dx,
              dy,
              speed,
              damage,
              parent,
              enemy=False):
     super().__init__(Point2D(x, y),
                      speed,
                      False,
                      sprite,
                      1,
                      damage,
                      enemy=enemy)
     self._update_rotation(dx, dy)
     # 0 out dx and dy
     self.dx, self.dy = 0, 0,
     self._flatten_direction(dx, dy)
     self.parent = parent
Example #23
0
 def animate(self):
     if self.health == 0:
         am.play_sound('death.ogg', volume=0.2)
         self._change_sprite(Sprite('player_dead.png', Point2D(44, 13)))
     elif self.animation_state == self.PlayerStates.SWINGING:
         self._change_sprite(
             AnimatedSprite('player_swing.png',
                            Point2D(50, 43),
                            5,
                            speed=0.5))
     elif self.animation_state == self.PlayerStates.SWING_RUNNING:
         self._change_sprite(
             AnimatedSprite('player_swing_running.png',
                            Point2D(50, 44),
                            5,
                            speed=0.5))
     elif self.animation_state == self.PlayerStates.SHOOTING:
         self._change_sprite(
             AnimatedSprite('player_shoot.png',
                            Point2D(25, 44),
                            5,
                            speed=0.5))
     elif self.force.y_mag != 0:
         self._change_sprite(Sprite('player_midair.png', Point2D(25, 44)))
         am.stop_sound('running_on_grass.ogg')
     elif self.animation_state == self.PlayerStates.RUNNING:
         self._change_sprite(
             AnimatedSprite('player_running.png', Point2D(25, 44), 7))
         am.play_sound('running_on_grass.ogg')
         self.animation_state = self.PlayerStates.IDLE
     else:
         self._change_sprite(
             AnimatedSprite('player_idle.png',
                            Point2D(25, 44),
                            3,
                            speed=0.25))
         am.stop_sound('running_on_grass.ogg')
Example #24
0
 def __init__(self, x, y, width, height, destination):
     super().__init__(Point2D(x, y), 0, False, None, 1, 0)
     self.width, self.height = width, height
     self.destination = destination
Example #25
0
 def __init__(self, x, y, facing, player):
     dx = -1 if facing else 1
     super().__init__(Sprite('arrow.png', Point2D(19, 5)), x, y, dx, 0, 20,
                      15, player)
Example #26
0
 def __init__(self, x, y, sprite_selected, sprite_deselected, fn):
     self.position = Point2D(x, y)
     self.sprite_selected = sprite_selected
     self.sprite_deselected = sprite_deselected
     self.selected = False
     self._click_event = fn
Example #27
0
 def __init__(self, x, y, width, height):
     self.position = Point2D(x, y)
     self.dimensions = Point2D(width, height)
Example #28
0
 def __init__(self, x):
     super().__init__(
         Point2D(x, 0), 0, False,
         AnimatedSprite('death_field.png', Point2D(144, 480), 7), 1, 100,
         False)
     self.time_alive = 0
Example #29
0
    def update(self, player_pos, entities):
        super().update()

        if len(self.children) != 0:
            return
        if self.phase == 0:
            if self._spawned_moths < 2 and randint(0, 40) == 0:
                self.children.append(Moth(self.position.x, self.position.y))
                self._spawned_moths += 1
            elif self._spawned_moths > 1 and len(
                [x for x in entities if isinstance(x, Moth)]) == 0:
                self.children.extend([
                    Icicle(self.position.x, self.position.y, 0, 0, self),
                    Icicle(self.position.x + 72, self.position.y, 0, 0, self),
                    Icicle(self.position.x + 144, self.position.y, 0, 0, self)
                ])
                self.phase = 1
        elif self.phase == 1:
            if len([x for x in entities if isinstance(x, Icicle)]) == 0:
                self.phase = 2
        elif self.phase == 2:
            self._spawn_fire_ball()
            self.phase = 3
        elif self.phase == 4:
            if len([x for x in entities if isinstance(x, Heart)
                    ]) == 0 and not self._set_phase_5_timer:
                self.set_timer('progress-5', 30, self._set_to_5)
                self._set_phase_5_timer = True
        elif self.phase == 5:
            if self._can_teleport and randint(0, 5) == 0:
                self._teleport(player_pos)
        elif self.phase == 6:
            self._spawn_icicle()
            self.phase = 7
        elif self.phase == 8:
            if len([x for x in entities if isinstance(x, Heart)]) == 0:
                self.phase = 9
        elif self.phase == 9:
            if self.position.y > TILE_SIZE * 2:
                self.position.y -= 1
            else:
                self.phase = 10
            return
        elif self.phase == 10:
            if self.health < 50:
                self.invulnerable = True
                self.phase = 11
            elif self._can_shoot:
                self._shoot_fireball(player_pos)
            return
        elif self.phase == 11:
            self._change_sprite(
                AnimatedSprite('final_boss_death.png',
                               Point2D(144, 108),
                               8,
                               speed=0.25))
            self.set_timer('death-timer', 24, self._die)
            self.phase = 12
            return
        else:
            return

        self.position.y = self.start_y + self.y_offset

        if abs(self.y_offset) > 16:
            self.downward = not self.downward
        if self.downward:
            self.y_offset -= 0.25
        else:
            self.y_offset += 0.25
Example #30
0
 def _disappear(self):
     self._sprite = Sprite(None, Point2D(32, 64))
     self._invisible = True
     self.set_timer('reappear', 50, self._reappear)