Class: Battle::Effects::Substitute

Inherits:
PokemonTiedEffectBase show all
Defined in:
scripts/01600 Alpha 25 Battle Engine/04000 Effects/00500 Move Effects/01000 Substitute.rb

Overview

Implement the Substitute effect

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from PokemonTiedEffectBase

#on_baton_pass_switch

Methods inherited from EffectBase

#base_power_multiplier, #can_attack_hit_out_of_reach?, #chance_of_hit_multiplier, #counter=, #dead?, #effect_chance_modifier, #force_next_move?, #kill, #mod1_multiplier, #mod2_multiplier, #mod3_multiplier, #on_delete, #on_end_turn_event, #on_fterrain_prevention, #on_held_item_use_prevention, #on_move_ability_immunity, #on_move_disabled_check, #on_move_prevention_target, #on_move_prevention_user, #on_move_priority_change, #on_move_type_change, #on_post_accuracy_check, #on_post_action_event, #on_post_damage, #on_post_damage_death, #on_post_fterrain_change, #on_post_item_change, #on_post_status_change, #on_post_weather_change, #on_pre_item_change, #on_single_type_multiplier_overwrite, #on_stat_change, #on_stat_change_post, #on_switch_event, #on_switch_passthrough, #on_switch_prevention, #on_transform_event, #on_two_turn_shortcut, #on_weather_prevention, #out_of_reach?, #rapid_spin_affected?, #sp_atk_multiplier, #sp_def_multiplier, #spd_modifier, #targetted?, #update_counter

Constructor Details

#initialize(logic, pokemon) ⇒ Substitute

Create a new Pokemon tied effect

Parameters:



14
15
16
17
# File 'scripts/01600 Alpha 25 Battle Engine/04000 Effects/00500 Move Effects/01000 Substitute.rb', line 14

def initialize(logic, pokemon)
  super
  @hp = @max_hp = pokemon.max_hp / 4
end

Instance Attribute Details

#hpInteger

Get the substitute hp

Returns:



7
8
9
# File 'scripts/01600 Alpha 25 Battle Engine/04000 Effects/00500 Move Effects/01000 Substitute.rb', line 7

def hp
  @hp
end

#max_hp (readonly)

Get the substitute max hp



9
10
11
# File 'scripts/01600 Alpha 25 Battle Engine/04000 Effects/00500 Move Effects/01000 Substitute.rb', line 9

def max_hp
  @max_hp
end

Instance Method Details

#nameSymbol

Get the name of the effect

Returns:

  • (Symbol)


90
91
92
# File 'scripts/01600 Alpha 25 Battle Engine/04000 Effects/00500 Move Effects/01000 Substitute.rb', line 90

def name
  return :substitute
end

#on_damage_prevention(handler, hp, target, launcher, skill) ⇒ :prevent, ...

Function called when a damage_prevention is checked

Parameters:

Returns:

  • (:prevent, Integer, nil)

    :prevent if the damage cannot be applied, Integer if the hp variable should be updated



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'scripts/01600 Alpha 25 Battle Engine/04000 Effects/00500 Move Effects/01000 Substitute.rb', line 54

def on_damage_prevention(handler, hp, target, launcher, skill)
  return if target != @pokemon || !skill
  return if skill.authentic?
  return if launcher&.has_ability?(:infiltrator) && !%i[transform sky_drop].include?(skill.db_symbol)

  return handler.prevent_change do
    @hp -= hp
    if @hp <= 0
      kill
      target.effects.delete_specific_dead_effect(:substitute)
      handler.scene.visual.show_switch_form_animation(target)
      handler.scene.display_message_and_wait(parse_text_with_pokemon(19, 794, target))
    else
      handler.scene.display_message_and_wait(parse_text_with_pokemon(19, 791, target))
    end
  end
end

#on_stat_decrease_prevention(handler, stat, target, launcher, skill) ⇒ :prevent?

Function called when a stat_decrease_prevention is checked

Parameters:

Returns:

  • (:prevent, nil)

    :prevent if the stat decrease cannot apply



40
41
42
43
44
45
# File 'scripts/01600 Alpha 25 Battle Engine/04000 Effects/00500 Move Effects/01000 Substitute.rb', line 40

def on_stat_decrease_prevention(handler, stat, target, launcher, skill)
  return if target != @pokemon
  return :prevent if target != launcher && skill && !skill.authentic?

  return nil
end

#on_stat_increase_prevention(handler, stat, target, launcher, skill) ⇒ :prevent?

Function called when a stat_increase_prevention is checked

Parameters:

Returns:

  • (:prevent, nil)

    :prevent if the stat increase cannot apply



26
27
28
29
30
31
# File 'scripts/01600 Alpha 25 Battle Engine/04000 Effects/00500 Move Effects/01000 Substitute.rb', line 26

def on_stat_increase_prevention(handler, stat, target, launcher, skill)
  return if target != @pokemon
  return :prevent if target != launcher && skill && !skill.authentic?

  return nil
end

#on_status_prevention(handler, status, target, launcher, skill) ⇒ :prevent?

Function called when a status_prevention is checked

Parameters:

Returns:

  • (:prevent, nil)

    :prevent if the status cannot be applied



79
80
81
82
83
84
85
86
# File 'scripts/01600 Alpha 25 Battle Engine/04000 Effects/00500 Move Effects/01000 Substitute.rb', line 79

def on_status_prevention(handler, status, target, launcher, skill)
  return if target != @pokemon || !skill || status == :cure || launcher == target
  return if skill.authentic?

  return handler.prevent_change do
    handler.scene.display_message_and_wait(parse_text_with_pokemon(19, 24, target))
  end
end