mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-08 05:34:58 +00:00
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:
@@ -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?
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
#===============================================================================
|
#===============================================================================
|
||||||
|
|||||||
@@ -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
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user