Scents now end Hyper Mode, Time Flute now purifies a Shadow Pokémon, Shadow Pokémon now regain 80% of the Exp they missed out on, non-Scent items can't be used on Shadow Pokémon in Hyper Mode

This commit is contained in:
Maruno17
2022-06-13 21:09:48 +01:00
parent 732c167ad5
commit 301ecb0ac7
5 changed files with 37 additions and 12 deletions

View File

@@ -131,6 +131,7 @@ module GameData
def is_gem?; return has_flag?("TypeGem"); end def is_gem?; return has_flag?("TypeGem"); end
def is_mulch?; return has_flag?("Mulch"); end def is_mulch?; return has_flag?("Mulch"); end
def is_mega_stone?; return has_flag?("MegaStone"); end # Does NOT include Red Orb/Blue Orb def is_mega_stone?; return has_flag?("MegaStone"); end # Does NOT include Red Orb/Blue Orb
def is_scent?; return has_flag?("Scent"); end
def is_important? def is_important?
return true if is_key_item? || is_HM? || is_TM? return true if is_key_item? || is_HM? || is_TM?

View File

@@ -8,13 +8,18 @@ class Battle
return false return false
end end
# Embargo # Embargo
if battler && battler.effects[PBEffects::Embargo] > 0 if battler&.effects[PBEffects::Embargo] > 0
if showMessages if showMessages
scene.pbDisplay(_INTL("Embargo's effect prevents the item's use on {1}!", scene.pbDisplay(_INTL("Embargo's effect prevents the item's use on {1}!",
battler.pbThis(true))) battler.pbThis(true)))
end end
return false return false
end end
# Hyper Mode and non-Scents
if pkmn.hyper_mode && !GameData::Item.get(item)&.is_scent?
scene.pbDisplay(_INTL("It won't have any effect.")) if showMessages
return false
end
return true return true
end end

View File

@@ -765,8 +765,8 @@ def pbUseItemMessage(item)
end end
end end
def pbCheckUseOnPokemon(_item, pkmn, _screen) def pbCheckUseOnPokemon(item, pkmn, _screen)
return pkmn && !pkmn.egg? return pkmn && !pkmn.egg? && (!pkmn.hyper_mode || GameData::Item.get(item)&.is_scent?)
end end
#=============================================================================== #===============================================================================

View File

@@ -20,6 +20,7 @@ def pbPurify(pkmn, scene)
return if !pkmn.shadowPokemon? || pkmn.heart_gauge != 0 return if !pkmn.shadowPokemon? || pkmn.heart_gauge != 0
$stats.shadow_pokemon_purified += 1 $stats.shadow_pokemon_purified += 1
pkmn.shadow = false pkmn.shadow = false
pkmn.hyper_mode = false
pkmn.giveRibbon(:NATIONAL) pkmn.giveRibbon(:NATIONAL)
scene.pbDisplay(_INTL("{1} opened the door to its heart!", pkmn.name)) scene.pbDisplay(_INTL("{1} opened the door to its heart!", pkmn.name))
old_moves = [] old_moves = []
@@ -35,7 +36,7 @@ def pbPurify(pkmn, scene)
pkmn.saved_ev = nil pkmn.saved_ev = nil
end end
if pkmn.saved_exp if pkmn.saved_exp
newexp = pkmn.growth_rate.add_exp(pkmn.exp, pkmn.saved_exp || 0) newexp = pkmn.growth_rate.add_exp(pkmn.exp, (pkmn.saved_exp * 4 / 5) || 0)
pkmn.saved_exp = nil pkmn.saved_exp = nil
newlevel = pkmn.growth_rate.level_from_exp(newexp) newlevel = pkmn.growth_rate.level_from_exp(newexp)
curlevel = pkmn.level curlevel = pkmn.level
@@ -232,9 +233,9 @@ end
#=============================================================================== #===============================================================================
# Shadow item effects. # Shadow item effects.
#=============================================================================== #===============================================================================
def pbRaiseHappinessAndReduceHeart(pkmn, scene, multiplier) def pbRaiseHappinessAndReduceHeart(pkmn, scene, multiplier, show_fail_message = true)
if !pkmn.shadowPokemon? || (pkmn.happiness == 255 && pkmn.heart_gauge == 0) if !pkmn.shadowPokemon? || (pkmn.happiness == 255 && pkmn.heart_gauge == 0)
scene.pbDisplay(_INTL("It won't have any effect.")) scene.pbDisplay(_INTL("It won't have any effect.")) if show_fail_message
return false return false
end end
old_gauge = pkmn.heart_gauge old_gauge = pkmn.heart_gauge
@@ -254,24 +255,41 @@ def pbRaiseHappinessAndReduceHeart(pkmn, scene, multiplier)
end end
ItemHandlers::UseOnPokemon.add(:JOYSCENT, proc { |item, qty, pkmn, scene| ItemHandlers::UseOnPokemon.add(:JOYSCENT, proc { |item, qty, pkmn, scene|
pbRaiseHappinessAndReduceHeart(pkmn, scene, 1) ret = false
if pkmn.hyper_mode
scene.pbDisplay(_INTL("{1} came to its senses from the {2}.", pkmn.name, GameData::Item.get(item).name))
pkmn.hyper_mode = false
ret = true
end
next pbRaiseHappinessAndReduceHeart(pkmn, scene, 1, !ret) || ret
}) })
ItemHandlers::UseOnPokemon.add(:EXCITESCENT, proc { |item, qty, pkmn, scene| ItemHandlers::UseOnPokemon.add(:EXCITESCENT, proc { |item, qty, pkmn, scene|
pbRaiseHappinessAndReduceHeart(pkmn, scene, 2) ret = false
if pkmn.hyper_mode
scene.pbDisplay(_INTL("{1} came to its senses from the {2}.", pkmn.name, GameData::Item.get(item).name))
pkmn.hyper_mode = false
ret = true
end
next pbRaiseHappinessAndReduceHeart(pkmn, scene, 2, !ret) || ret
}) })
ItemHandlers::UseOnPokemon.add(:VIVIDSCENT, proc { |item, qty, pkmn, scene| ItemHandlers::UseOnPokemon.add(:VIVIDSCENT, proc { |item, qty, pkmn, scene|
pbRaiseHappinessAndReduceHeart(pkmn, scene, 3) ret = false
if pkmn.hyper_mode
scene.pbDisplay(_INTL("{1} came to its senses from the {2}.", pkmn.name, GameData::Item.get(item).name))
pkmn.hyper_mode = false
ret = true
end
next pbRaiseHappinessAndReduceHeart(pkmn, scene, 3, !ret) || ret
}) })
ItemHandlers::UseOnPokemon.add(:TIMEFLUTE, proc { |item, qty, pkmn, scene| ItemHandlers::UseOnPokemon.add(:TIMEFLUTE, proc { |item, qty, pkmn, scene|
if !pkmn.shadowPokemon? || pkmn.heart_gauge == 0 if !pkmn.shadowPokemon? || pkmn.heart_gauge == 0 || pkmn.isSpecies?(:LUGIA)
scene.pbDisplay(_INTL("It won't have any effect.")) scene.pbDisplay(_INTL("It won't have any effect."))
next false next false
end end
pkmn.heart_gauge = 0 pbPurify(pkmn, scene)
pkmn.check_ready_to_purify
next true next true
}) })

View File

@@ -685,6 +685,7 @@ class PokemonParty_Scene
ret = screen.pbChooseItemScreen(proc { |item| ret = screen.pbChooseItemScreen(proc { |item|
itm = GameData::Item.get(item) itm = GameData::Item.get(item)
next false if !pbCanUseOnPokemon?(itm) next false if !pbCanUseOnPokemon?(itm)
next false if pokemon.hyper_mode && !GameData::Item.get(item)&.is_scent?
if itm.is_machine? if itm.is_machine?
move = itm.move move = itm.move
next false if pokemon.hasMove?(move) || !pokemon.compatible_with_move?(move) next false if pokemon.hasMove?(move) || !pokemon.compatible_with_move?(move)