From 301ecb0ac76ceb8df7f66ed92934f5eed8c6bc98 Mon Sep 17 00:00:00 2001 From: Maruno17 Date: Mon, 13 Jun 2022 21:09:48 +0100 Subject: [PATCH] =?UTF-8?q?Scents=20now=20end=20Hyper=20Mode,=20Time=20Flu?= =?UTF-8?q?te=20now=20purifies=20a=20Shadow=20Pok=C3=A9mon,=20Shadow=20Pok?= =?UTF-8?q?=C3=A9mon=20now=20regain=2080%=20of=20the=20Exp=20they=20missed?= =?UTF-8?q?=20out=20on,=20non-Scent=20items=20can't=20be=20used=20on=20Sha?= =?UTF-8?q?dow=20Pok=C3=A9mon=20in=20Hyper=20Mode?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Scripts/010_Data/002_PBS data/006_Item.rb | 1 + .../001_Battle/006_Battle_ActionUseItem.rb | 7 +++- Data/Scripts/013_Items/001_Item_Utilities.rb | 4 +-- .../002_ShadowPokemon_Other.rb | 36 ++++++++++++++----- Data/Scripts/016_UI/005_UI_Party.rb | 1 + 5 files changed, 37 insertions(+), 12 deletions(-) diff --git a/Data/Scripts/010_Data/002_PBS data/006_Item.rb b/Data/Scripts/010_Data/002_PBS data/006_Item.rb index 2d89838f5..bac5a775c 100644 --- a/Data/Scripts/010_Data/002_PBS data/006_Item.rb +++ b/Data/Scripts/010_Data/002_PBS data/006_Item.rb @@ -131,6 +131,7 @@ module GameData def is_gem?; return has_flag?("TypeGem"); 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_scent?; return has_flag?("Scent"); end def is_important? return true if is_key_item? || is_HM? || is_TM? diff --git a/Data/Scripts/011_Battle/001_Battle/006_Battle_ActionUseItem.rb b/Data/Scripts/011_Battle/001_Battle/006_Battle_ActionUseItem.rb index 7a29cb8c4..575917e87 100644 --- a/Data/Scripts/011_Battle/001_Battle/006_Battle_ActionUseItem.rb +++ b/Data/Scripts/011_Battle/001_Battle/006_Battle_ActionUseItem.rb @@ -8,13 +8,18 @@ class Battle return false end # Embargo - if battler && battler.effects[PBEffects::Embargo] > 0 + if battler&.effects[PBEffects::Embargo] > 0 if showMessages scene.pbDisplay(_INTL("Embargo's effect prevents the item's use on {1}!", battler.pbThis(true))) end return false 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 end diff --git a/Data/Scripts/013_Items/001_Item_Utilities.rb b/Data/Scripts/013_Items/001_Item_Utilities.rb index 2e99a2db5..ad40f5a62 100644 --- a/Data/Scripts/013_Items/001_Item_Utilities.rb +++ b/Data/Scripts/013_Items/001_Item_Utilities.rb @@ -765,8 +765,8 @@ def pbUseItemMessage(item) end end -def pbCheckUseOnPokemon(_item, pkmn, _screen) - return pkmn && !pkmn.egg? +def pbCheckUseOnPokemon(item, pkmn, _screen) + return pkmn && !pkmn.egg? && (!pkmn.hyper_mode || GameData::Item.get(item)&.is_scent?) end #=============================================================================== diff --git a/Data/Scripts/014_Pokemon/001_Pokemon-related/002_ShadowPokemon_Other.rb b/Data/Scripts/014_Pokemon/001_Pokemon-related/002_ShadowPokemon_Other.rb index 84c077755..79ac93013 100644 --- a/Data/Scripts/014_Pokemon/001_Pokemon-related/002_ShadowPokemon_Other.rb +++ b/Data/Scripts/014_Pokemon/001_Pokemon-related/002_ShadowPokemon_Other.rb @@ -20,6 +20,7 @@ def pbPurify(pkmn, scene) return if !pkmn.shadowPokemon? || pkmn.heart_gauge != 0 $stats.shadow_pokemon_purified += 1 pkmn.shadow = false + pkmn.hyper_mode = false pkmn.giveRibbon(:NATIONAL) scene.pbDisplay(_INTL("{1} opened the door to its heart!", pkmn.name)) old_moves = [] @@ -35,7 +36,7 @@ def pbPurify(pkmn, scene) pkmn.saved_ev = nil end 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 newlevel = pkmn.growth_rate.level_from_exp(newexp) curlevel = pkmn.level @@ -232,9 +233,9 @@ end #=============================================================================== # 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) - scene.pbDisplay(_INTL("It won't have any effect.")) + scene.pbDisplay(_INTL("It won't have any effect.")) if show_fail_message return false end old_gauge = pkmn.heart_gauge @@ -254,24 +255,41 @@ def pbRaiseHappinessAndReduceHeart(pkmn, scene, multiplier) end 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| - 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| - 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| - 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.")) next false end - pkmn.heart_gauge = 0 - pkmn.check_ready_to_purify + pbPurify(pkmn, scene) next true }) diff --git a/Data/Scripts/016_UI/005_UI_Party.rb b/Data/Scripts/016_UI/005_UI_Party.rb index f5e59eeed..5ab2817c2 100644 --- a/Data/Scripts/016_UI/005_UI_Party.rb +++ b/Data/Scripts/016_UI/005_UI_Party.rb @@ -685,6 +685,7 @@ class PokemonParty_Scene ret = screen.pbChooseItemScreen(proc { |item| itm = GameData::Item.get(item) next false if !pbCanUseOnPokemon?(itm) + next false if pokemon.hyper_mode && !GameData::Item.get(item)&.is_scent? if itm.is_machine? move = itm.move next false if pokemon.hasMove?(move) || !pokemon.compatible_with_move?(move)