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)
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())
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)
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]
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)
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))
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
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)
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)
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))
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))
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