Example #1
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.game_world.visual_effects += create_teleport_effects(buffed_entity.get_center_position())
         play_sound(SoundId.ABILITY_TELEPORT)
 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.game_world.visual_effects.append(
             VisualRect((0, 100, 200), buffed_entity.get_center_position(), 50, 50, Millis(400), 1, buffed_entity))
         self._time_since_graphics = 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.game_world.visual_effects.append(visual_effect1)
         game_state.game_world.visual_effects.append(visual_effect2)
Example #4
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.game_world.player_entity.set_not_moving()
     game_state.game_world.player_entity.visible = False
     game_state.game_world.visual_effects += create_teleport_effects(
         buffed_entity.get_center_position())
Example #5
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, TICK_DMG, 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.game_world.visual_effects.append(visual_effect1)
         game_state.game_world.visual_effects.append(visual_effect2)
Example #6
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,
                                     DamageType.MAGIC)
         pos = buffed_entity.get_center_position()
         effect = VisualCircle((100, 150, 100), pos, 40, 50, Millis(500), 1)
         game_state.game_world.visual_effects += [effect]
Example #7
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.game_world.visual_effects.append(visual_effect)
     game_state.game_world.visual_effects.append(
         create_visual_stun_text(buffed_entity))
     buffed_npc.stun_status.add_one()
     buffed_entity.set_not_moving()
 def apply_start_effect(self, game_state: GameState,
                        buffed_entity: WorldEntity,
                        buffed_npc: NonPlayerCharacter):
     buffed_npc.stun_status.add_one()
     buffed_entity.set_not_moving()
     effect_position = buffed_entity.get_center_position()
     game_state.game_world.visual_effects.append(
         VisualRect((250, 250, 50), effect_position, 30, 40, Millis(100), 1,
                    buffed_entity))
     game_state.game_world.visual_effects.append(
         create_visual_stun_text(buffed_entity))
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.game_world.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)
Example #10
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.game_world.visual_effects.append(
                 VisualRect((250, 250, 50), effect_position, 30, 40,
                            Millis(100), 1, buffed_entity))
Example #11
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.game_world.visual_effects.append(visual_effect)
     return False
Example #12
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.game_world.warp_points = []
         game_state.game_world.player_entity.set_position(self.destination)
         game_state.game_world.visual_effects += create_teleport_effects(
             buffed_entity.get_center_position())
         play_sound(SoundId.WARP)
Example #13
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,
             0,
             0,
         ), buffed_entity.get_center_position(), 25, 30, Millis(350), 1,
                                      buffed_entity)
         game_state.game_world.visual_effects.append(visual_effect)
Example #14
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.game_world.player_entity
     player_entity.set_not_moving()
     player_entity.visible = False
     game_state.game_world.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.game_world.warp_points = [
         home_warp_point, remote_warp_point
     ]
 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.game_world.visual_effects.append(
             VisualCircle((0, 150, 0), buffed_entity.get_center_position(), 30, 55, Millis(150), 2, buffed_entity))
Example #16
0
 def create_sprint_visual_effect(buffed_entity: WorldEntity,
                                 game_state: GameState):
     game_state.game_world.visual_effects.append(
         VisualCircle((150, 50, 0), buffed_entity.get_center_position(), 20,
                      22, Millis(250), 2, buffed_entity))
Example #17
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.game_world.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.game_world.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.game_world.visual_effects.append(
                VisualRect((250, 170, 0), visual_impact_pos, 45, 25,
                           IMPACT_STUN_DURATION, 2, None))
            game_state.game_world.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