From 4d9c8feb81fc3f9b934d4c12b737a8b4b16a8702 Mon Sep 17 00:00:00 2001 From: Maruno17 Date: Sun, 18 Jul 2021 23:13:37 +0100 Subject: [PATCH] =?UTF-8?q?Fixed=20Pok=C3=A9=20Radar=20rustling=20grass=20?= =?UTF-8?q?not=20always=20causing=20a=20wild=20encounter=20when=20stepping?= =?UTF-8?q?=20in=20it,=20other=20tweaks=20to=20Pok=C3=A9=20Radar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../003_Overworld_WildEncounters.rb | 6 ++++- Data/Scripts/013_Items/005_Item_PokeRadar.rb | 25 ++++++++++++------- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/Data/Scripts/012_Overworld/002_Battle triggering/003_Overworld_WildEncounters.rb b/Data/Scripts/012_Overworld/002_Battle triggering/003_Overworld_WildEncounters.rb index 8c9283e55..c391e078f 100644 --- a/Data/Scripts/012_Overworld/002_Battle triggering/003_Overworld_WildEncounters.rb +++ b/Data/Scripts/012_Overworld/002_Battle triggering/003_Overworld_WildEncounters.rb @@ -109,6 +109,9 @@ class PokemonEncounters # Check if enc_type has a defined step chance/encounter table return false if !@step_chances[enc_type] || @step_chances[enc_type] == 0 return false if !has_encounter_type?(enc_type) + # Poké Radar encounters always happen, ignoring the minimum step period and + # trigger probabilities + return true if pbPokeRadarOnShakingGrass # Get base encounter chance and minimum steps grace period encounter_chance = @step_chances[enc_type].to_f min_steps_needed = (8 - encounter_chance / 10).clamp(0, 8).to_f @@ -176,8 +179,9 @@ class PokemonEncounters # taking into account Repels and ability effects. def allow_encounter?(enc_data, repel_active = false) return false if !enc_data + return true if pbPokeRadarOnShakingGrass # Repel - if repel_active && !pbPokeRadarOnShakingGrass + if repel_active first_pkmn = (Settings::REPEL_COUNTS_FAINTED_POKEMON) ? $Trainer.first_pokemon : $Trainer.first_able_pokemon if first_pkmn && enc_data[1] < first_pkmn.level @chance_accumulator = 0 diff --git a/Data/Scripts/013_Items/005_Item_PokeRadar.rb b/Data/Scripts/013_Items/005_Item_PokeRadar.rb index 3b2068b73..236e55eb4 100644 --- a/Data/Scripts/013_Items/005_Item_PokeRadar.rb +++ b/Data/Scripts/013_Items/005_Item_PokeRadar.rb @@ -43,7 +43,8 @@ end def pbUsePokeRadar return false if !pbCanUsePokeRadar? - $PokemonTemp.pokeradar = [0,0,0,[]] if !$PokemonTemp.pokeradar + $PokemonTemp.pokeradar = [0,0,0,[],false] if !$PokemonTemp.pokeradar + $PokemonTemp.pokeradar[4] = false $PokemonGlobal.pokeradarBattery = 50 pbPokeRadarHighlightGrass return true @@ -80,9 +81,8 @@ def pbPokeRadarHighlightGrass(showmessage=true) s = (rand(100) < 25) ? 1 : 0 if $PokemonTemp.pokeradar && $PokemonTemp.pokeradar[2] > 0 v = [(65536 / Settings::SHINY_POKEMON_CHANCE) - $PokemonTemp.pokeradar[2] * 200, 200].max - v = 0xFFFF / v - v = rand(65536) / v - s = 2 if v == 0 + v = (65536 / v.to_f).ceil + s = 2 if rand(65536) < v end grasses.push([x,y,i,s]) end @@ -162,7 +162,8 @@ EncounterModifier.register(proc { |encounter| rarity = 0 # 0 = rustle, 1 = vigorous rustle, 2 = shiny rustle $PokemonTemp.pokeradar[3].each { |g| rarity = g[3] if g[2] == ring } if $PokemonTemp.pokeradar[2] > 0 # Chain count, i.e. is chaining - if rarity == 2 || rand(100) < 86 + ring * 4 + ($PokemonTemp.pokeradar[2] / 4).floor + if rarity == 2 || + rand(100) < 58 + ring * 10 + ($PokemonTemp.pokeradar[2] / 4) + ($PokemonTemp.pokeradar[4] ? 10 : 0) # Continue the chain encounter = [$PokemonTemp.pokeradar[0], $PokemonTemp.pokeradar[1]] $PokemonTemp.forceSingleBattle = true @@ -172,7 +173,12 @@ EncounterModifier.register(proc { |encounter| break if encounter && encounter[0] != $PokemonTemp.pokeradar[0] encounter = $PokemonEncounters.choose_wild_pokemon($PokemonEncounters.encounter_type) end - pbPokeRadarCancel + if encounter[0] == $PokemonTemp.pokeradar[0] && encounter[1] == $PokemonTemp.pokeradar[1] + # Chain couldn't be broken somehow; continue it after all + $PokemonTemp.forceSingleBattle = true + else + pbPokeRadarCancel + end end else # Not chaining; will start one # Force random wild encounter, vigorous shaking means rarer species @@ -204,8 +210,9 @@ Events.onWildBattleEnd += proc { |_sender,e| if $PokemonTemp.pokeradar && (decision==1 || decision==4) # Defeated/caught $PokemonTemp.pokeradar[0] = species $PokemonTemp.pokeradar[1] = level - $PokemonTemp.pokeradar[2] += 1 - $PokemonTemp.pokeradar[2] = 40 if $PokemonTemp.pokeradar[2]>40 + $PokemonTemp.pokeradar[2] = [$PokemonTemp.pokeradar[2] + 1, 40].min + # Catching makes the next Radar encounter more likely to continue the chain + $PokemonTemp.pokeradar[4] = (decision == 4) pbPokeRadarHighlightGrass(false) else pbPokeRadarCancel @@ -231,7 +238,7 @@ Events.onMapChange += proc { |_sender,_e| # Item handlers ################################################################################ ItemHandlers::UseInField.add(:POKERADAR,proc { |item| - next (pbCanUsePokeRadar?) ? pbUsePokeRadar : 0 + next (pbUsePokeRadar) ? 1 : 0 }) ItemHandlers::UseFromBag.add(:POKERADAR,proc { |item|