Exemplo n.º 1
0
 def apply_start_effect(self, game_state: GameState,
                        buffed_entity: WorldEntity,
                        buffed_npc: NonPlayerCharacter):
     game_state.player_state.stun_status.add_one()
     game_state.player_entity.set_not_moving()
     game_state.visual_effects += create_teleport_effects(
         buffed_entity.get_center_position())
     game_state.player_entity.visible = False
Exemplo n.º 2
0
 def apply_middle_effect(self, game_state: GameState, buffed_entity: WorldEntity, buffed_npc: NonPlayerCharacter,
                         time_passed: Millis):
     if self.timer.update_and_check_if_ready(time_passed):
         deal_player_damage_to_enemy(game_state, buffed_npc, DAMAGE_PER_TICK, DamageType.PHYSICAL)
         if self.should_stun:
             effect_position = buffed_entity.get_center_position()
             game_state.visual_effects.append(
                 VisualRect((250, 250, 50), effect_position, 30, 40, Millis(100), 1, buffed_entity))
Exemplo n.º 3
0
 def apply_middle_effect(self, game_state: GameState,
                         buffed_entity: WorldEntity,
                         buffed_npc: NonPlayerCharacter,
                         time_passed: Millis):
     if self.timer.update_and_check_if_ready(time_passed):
         visual_effect = VisualCircle((250, 150, 250),
                                      buffed_entity.get_center_position(),
                                      18, 25, Millis(220), 1, buffed_entity)
         game_state.visual_effects.append(visual_effect)
Exemplo n.º 4
0
def deal_npc_damage(damage_amount: float, damage_type: DamageType, game_state: GameState, attacker_entity: WorldEntity,
                    attacker_npc: NonPlayerCharacter, target: EnemyTarget):
    attacker_position = attacker_entity.get_center_position()
    game_state.visual_effects.append(
        VisualRect((200, 0, 0), attacker_position, 50, 50, Millis(200), 3, attacker_entity))
    if target.non_enemy_npc:
        deal_npc_damage_to_npc(game_state, target.non_enemy_npc, damage_amount)
    else:
        deal_damage_to_player(game_state, damage_amount, damage_type, attacker_npc)
Exemplo n.º 5
0
 def apply_middle_effect(self, game_state: GameState, buffed_entity: WorldEntity, buffed_npc: NonPlayerCharacter,
                         time_passed: Millis):
     self.time_since_start += time_passed
     if not self.has_teleport_happened and self.time_since_start > PORTAL_DELAY / 2:
         self.has_teleport_happened = True
         game_state.warp_points = []
         game_state.player_entity.set_position(self.destination)
         game_state.visual_effects += create_teleport_effects(buffed_entity.get_center_position())
         play_sound(SoundId.WARP)
Exemplo n.º 6
0
 def apply_middle_effect(self, game_state: GameState,
                         buffed_entity: WorldEntity,
                         buffed_npc: NonPlayerCharacter,
                         time_passed: Millis):
     self.time_since_start += time_passed
     if not self.has_spawn_happened and self.time_since_start > DELAY / 2:
         self.has_spawn_happened = True
         game_state.visual_effects += create_teleport_effects(
             buffed_entity.get_center_position())
         play_sound(SoundId.ABILITY_TELEPORT)
Exemplo n.º 7
0
 def apply_middle_effect(self, game_state: GameState,
                         buffed_entity: WorldEntity,
                         buffed_npc: NonPlayerCharacter,
                         time_passed: Millis):
     if self.timer.update_and_check_if_ready(time_passed):
         deal_player_damage_to_enemy(game_state, buffed_npc, 1,
                                     DamageType.MAGIC)
         game_state.visual_effects.append(
             VisualCircle((0, 150, 0), buffed_entity.get_center_position(),
                          30, 55, Millis(150), 2, buffed_entity))
Exemplo n.º 8
0
def _get_entity_text_positions(
        entity: WorldEntity, text_y_travel_distance: int
) -> Tuple[Tuple[int, int], Tuple[int, int]]:
    sprite_size = ENTITY_SPRITE_SIZES[entity.sprite]
    y_start = entity.y + entity.pygame_collision_rect.h - sprite_size[1]
    random_x_offset = random.randint(-10, 10)
    x = entity.get_center_position()[0] - 5 + random_x_offset
    start_position = (x, y_start)
    end_position = (x, y_start - text_y_travel_distance)
    return start_position, end_position
Exemplo n.º 9
0
 def apply_start_effect(self, game_state: GameState, buffed_entity: WorldEntity, buffed_npc: NonPlayerCharacter):
     game_state.player_state.stun_status.add_one()
     player_entity = game_state.player_entity
     player_entity.set_not_moving()
     player_entity.visible = False
     game_state.visual_effects += create_teleport_effects(buffed_entity.get_center_position())
     player_collision_rect = (player_entity.pygame_collision_rect.w, player_entity.pygame_collision_rect.h)
     home_warp_point = create_warp_point(game_state.player_spawn_position, player_collision_rect)
     remote_warp_point = create_warp_point(player_entity.get_center_position(), player_collision_rect)
     game_state.warp_points = [home_warp_point, remote_warp_point]
Exemplo n.º 10
0
 def apply_middle_effect(self, game_state: GameState,
                         buffed_entity: WorldEntity,
                         buffed_npc: NonPlayerCharacter,
                         time_passed: Millis):
     self._time_since_graphics += time_passed
     if self._time_since_graphics > 800:
         game_state.visual_effects.append(
             VisualRect((0, 100, 200), buffed_entity.get_center_position(),
                        50, 50, Millis(400), 1, buffed_entity))
         self._time_since_graphics = 0
Exemplo n.º 11
0
 def apply_start_effect(self, game_state: GameState,
                        buffed_entity: WorldEntity,
                        buffed_npc: NonPlayerCharacter):
     visual_effect = VisualCircle((220, 220, 50),
                                  buffed_entity.get_center_position(), 9,
                                  16, Millis(250), 2)
     game_state.visual_effects.append(visual_effect)
     game_state.visual_effects.append(
         create_visual_stun_text(buffed_entity))
     buffed_npc.stun_status.add_one()
     buffed_entity.set_not_moving()
Exemplo n.º 12
0
 def apply_middle_effect(self, game_state: GameState,
                         buffed_entity: WorldEntity,
                         buffed_npc: NonPlayerCharacter,
                         time_passed: Millis) -> bool:
     if self.timer.update_and_check_if_ready(time_passed):
         visual_effect = VisualCircle(
             (250, 250, 250), buffed_entity.get_center_position(),
             self.graphics_size, self.graphics_size + 10, Millis(70), 2,
             None)
         self.graphics_size -= 7
         game_state.visual_effects.append(visual_effect)
     return False
Exemplo n.º 13
0
 def apply_middle_effect(self, game_state: GameState,
                         buffed_entity: WorldEntity,
                         buffed_npc: NonPlayerCharacter,
                         time_passed: Millis):
     if self.graphics_timer.update_and_check_if_ready(time_passed):
         position = buffed_entity.get_center_position()
         visual_effect1 = VisualCircle((0, 40, 100), position, 9, 16,
                                       Millis(400), 2, buffed_entity)
         visual_effect2 = VisualCircle((0, 90, 180), position, 9, 16,
                                       Millis(500), 2, buffed_entity)
         game_state.visual_effects.append(visual_effect1)
         game_state.visual_effects.append(visual_effect2)
Exemplo n.º 14
0
    def apply_middle_effect(self, game_state: GameState, buffed_entity: WorldEntity, buffed_npc: NonPlayerCharacter,
                            time_passed: Millis) -> Optional[bool]:

        self.time_since_start += time_passed

        charger_center_pos = buffed_entity.get_center_position()

        if self.graphics_timer.update_and_check_if_ready(time_passed):
            visual_circle = VisualCircle((250, 250, 250), charger_center_pos, 15, 25, Millis(120), 2, None)
            game_state.visual_effects.append(visual_circle)

        rect_w = 32
        # NOTE: We assume that this ability is used by this specific hero
        hero_entity_size = HEROES[HeroId.WARRIOR].entity_size
        impact_pos = translate_in_direction(
            charger_center_pos, buffed_entity.direction, rect_w / 2 + hero_entity_size[0] / 2)

        impact_rect = Rect(int(impact_pos[0] - rect_w / 2), int(impact_pos[1] - rect_w / 2), rect_w, rect_w)
        affected_enemies = game_state.get_enemy_intersecting_rect(impact_rect)
        for enemy in affected_enemies:
            visual_impact_pos = get_middle_point(charger_center_pos, enemy.world_entity.get_center_position())
            damage = MIN_DMG
            # Talent: Apply damage bonus even if using charge in melee range
            has_melee_upgrade = game_state.player_state.has_upgrade(HeroUpgradeId.ABILITY_CHARGE_MELEE)
            damage_increased = self.time_since_start > float(CHARGE_DURATION) * 0.3 or has_melee_upgrade
            if damage_increased:
                # TODO Stun target as a bonus here
                damage = MAX_DMG
            deal_player_damage_to_enemy(game_state, enemy, damage, DamageType.PHYSICAL,
                                        visual_emphasis=damage_increased)
            game_state.visual_effects.append(
                VisualRect((250, 170, 0), visual_impact_pos, 45, 25, IMPACT_STUN_DURATION, 2, None))
            game_state.visual_effects.append(
                VisualRect((150, 0, 0), visual_impact_pos, 35, 20, IMPACT_STUN_DURATION, 2, None))
            game_state.player_state.gain_buff_effect(get_buff_effect(BUFF_TYPE_STUNNED), IMPACT_STUN_DURATION)
            enemy.gain_buff_effect(get_buff_effect(BUFF_TYPE_STUNNED), IMPACT_STUN_DURATION)
            game_state.camera_shake = CameraShake(Millis(50), Millis(150), 12)
            play_sound(SoundId.ABILITY_CHARGE_HIT)
            has_stomp_cooldown_upgrade = game_state.player_state.has_upgrade(
                HeroUpgradeId.ABILITY_CHARGE_RESET_STOMP_COOLDOWN)
            if has_stomp_cooldown_upgrade:
                game_state.player_state.set_ability_cooldown_to_zero(AbilityType.STOMP)
            # The buff should end upon impact
            return True
        return False
Exemplo n.º 15
0
 def apply_middle_effect(self, game_state: GameState,
                         buffed_entity: WorldEntity,
                         buffed_npc: NonPlayerCharacter,
                         time_passed: Millis):
     if self.dmg_timer.update_and_check_if_ready(time_passed):
         deal_player_damage_to_enemy(game_state,
                                     buffed_npc,
                                     1,
                                     DamageType.MAGIC,
                                     damage_source=DAMAGE_SOURCE)
     if self.graphics_timer.update_and_check_if_ready(time_passed):
         position = buffed_entity.get_center_position()
         visual_effect1 = VisualCircle((0, 100, 40), position, 9, 16,
                                       Millis(400), 2, buffed_entity)
         visual_effect2 = VisualCircle((0, 180, 90), position, 9, 16,
                                       Millis(500), 2, buffed_entity)
         game_state.visual_effects.append(visual_effect1)
         game_state.visual_effects.append(visual_effect2)
Exemplo n.º 16
0
 def apply_middle_effect(self, game_state: GameState, buffed_entity: WorldEntity, buffed_npc: NonPlayerCharacter,
                         time_passed: Millis):
     if self.timer.update_and_check_if_ready(time_passed):
         game_state.visual_effects.append(
             VisualCircle((130, 100, 60), buffed_entity.get_center_position(), 20, 40, Millis(100), 1,
                          buffed_entity))