pokeradar

This commit is contained in:
infinitefusion
2022-01-02 14:05:29 -05:00
parent 1b0577139c
commit 1b931732a0
17 changed files with 137 additions and 76 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -6,7 +6,12 @@
module Settings
# The version of your game. It has to adhere to the MAJOR.MINOR.PATCH format.
GAME_VERSION = '5.0.0'
GAME_VERSION_NUMBER = "5.0.11 - beta"
GAME_VERSION_NUMBER = "5.0.13 - beta"
POKERADAR_LIGHT_ANIMATION_RED_ID = 17
POKERADAR_LIGHT_ANIMATION_GREEN_ID = 18
POKERADAR_HIDDEN_ABILITY_POKE_CHANCE = 32
POKERADAR_BATTERY_STEPS = 0
#
FUSION_ICON_SPRITE_OFFSET = 10
@@ -310,10 +315,48 @@ module Settings
# * Minimum possible level.
# * Maximum possible level (optional).
POKE_RADAR_ENCOUNTERS = [
[5, 20, :STARLY, 12, 15],
[21, 10, :STANTLER, 14],
[28, 20, :BUTTERFREE, 15, 18],
[28, 20, :BEEDRILL, 15, 18]
[78, 30, :FLETCHLING,2,5], #Rt. 1
[86, 30, :FLETCHLING,2,5], #Rt. 2
[90, 30, :FLETCHLING,2,5], #Rt. 2
[491, 30, :SHROOMISH,2,5], #Viridian Forest
[490, 30, :BUDEW,4,9], #Rt. 3
[106, 30, :NINCADA,8,10], #Rt. 4
[12, 30, :TOGEPI,10,10], #Rt. 5
[16, 30, :SLAKOTH,12,15], #Rt. 6
[413, 30, :DRIFLOON,17,20], #Rt. 7
[409, 30, :SHINX,17,18], #Rt. 8
[495, 30, :ARON,12,15], #Rt. 9
[351, 30, :ARON,12,15], #Rt. 9
[154, 30, :KLINK,14,17], #Rt. 10
[155, 30, :NINCADA,12,15], #Rt. 11
[159, 30, :COTTONEE,22,25], #Rt. 12
[437, 30, :COTTONEE,22,25], #Rt. 13
[437, 30, :JOLTIK,22,25], #Rt. 13
[440, 30, :JOLTIK,22,25], #Rt. 14
[444, 30, :SOLOSIS,22,25], #Rt. 15
[438, 30, :NATU,22,25], #Rt. 16
[146, 30, :KLEFKI,22,25], #Rt. 17
[517, 30, :FERROSEED,22,25], #Rt. 18
[445, 30, :BAGON,20,20], #Safari zone 1
[484, 30, :AXEW,20,20], #Safari zone 2
[485, 30, :DEINO,20,20], #Safari zone 3
[486, 30, :LARVITAR,20,20], #Safari zone 4
[487, 30, :BELDUM,20,20], #Safari zone 5
[59, 30, :DUNSPARSE,25,30], #Rt. 21
[171, 30, :BIDOOF,2,5], #Rt. 22
[143, 30, :RIOLU,25,25], #Rt. 23
[8, 30, :BUNEARY,12,13], #Rt. 24
[145, 5, :ABSOL,30,35], #Rt. 26
[147, 5, :ABSOL,30,35], #Rt. 27
[311, 30, :BIDOOF,5,5], #Rt. 29
[265, 30, :KIRLIA,25,30], #Rt. 34
[300, 30, :ROSELIA,30,30], #National Park
[300, 30, :BRELOOM,30,30], #Ilex Forest
[670, 30, :WEAVILE,50,50], #Ice mountains
[528, 30, :PYUKUMUKU,20,20], #Treasure Beach
[690, 30, :OCTILLERY,32,45], #Deep Ocean
[561, 30, :MAGMAR,32,45], #Mt. Ember
[654, 30, :WHIMSICOTT,32,45], #Brine Road
]
#=============================================================================

View File

@@ -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)
#Always check encounter if pokeradar is active
return true if $PokemonTemp.pokeradar != nil
# 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

View File

@@ -2,20 +2,16 @@ class PokemonGlobalMetadata
attr_accessor :pokeradarBattery
end
class PokemonTemp
attr_accessor :pokeradar # [species, level, chain count, grasses (x,y,ring,rarity)]
end
################################################################################
# Using the Poke Radar
################################################################################
def pbCanUsePokeRadar?
# Can't use Radar if not in tall grass
terrain = $game_map.terrain_tag($game_player.x,$game_player.y)
terrain = $game_map.terrain_tag($game_player.x, $game_player.y)
if !terrain.land_wild_encounters || !terrain.shows_grass_rustle
pbMessage(_INTL("Can't use that here."))
return false
@@ -33,7 +29,7 @@ def pbCanUsePokeRadar?
# Debug
return true if $DEBUG && Input.press?(Input::CTRL)
# Can't use Radar if it isn't fully charged
if $PokemonGlobal.pokeradarBattery && $PokemonGlobal.pokeradarBattery>0
if $PokemonGlobal.pokeradarBattery && $PokemonGlobal.pokeradarBattery > 0
pbMessage(_INTL("The battery has run dry!\nFor it to recharge, you need to walk another {1} steps.",
$PokemonGlobal.pokeradarBattery))
return false
@@ -43,12 +39,39 @@ end
def pbUsePokeRadar
return false if !pbCanUsePokeRadar?
$PokemonTemp.pokeradar = [0,0,0,[]] if !$PokemonTemp.pokeradar
$PokemonGlobal.pokeradarBattery = 50
$PokemonTemp.pokeradar = [0, 0, 0, []] if !$PokemonTemp.pokeradar
$PokemonGlobal.pokeradarBattery = Settings::POKERADAR_BATTERY_STEPS
rareAllowed = canEncounterRarePokemon()
playPokeradarLightAnimation(rareAllowed)
pbWait(20)
pbPokeRadarHighlightGrass
return true
end
#can only encounter rare if have seen every encounterable land pokemon on the route
def canEncounterRarePokemon()
processed = []
for encounter in $PokemonEncounters.listPossibleEncounters($PokemonEncounters.pbEncounterType)
species = encounter[0]
if !processed.include?(species)
if $Trainer.seen[species]
processed << species
else
return false
end
end
end
return true
end
def playPokeradarLightAnimation(rareAllowed = false)
if rareAllowed
$scene.spriteset.addUserAnimation(Settings::POKERADAR_LIGHT_ANIMATION_GREEN_ID, $game_player.x, $game_player.y, true)
else
$scene.spriteset.addUserAnimation(Settings::POKERADAR_LIGHT_ANIMATION_RED_ID, $game_player.x, $game_player.y, true)
end
end
def pbPokeRadarCancel
$PokemonTemp.pokeradar = nil
end
@@ -57,57 +80,49 @@ def listUnseenPokemonInCurrentRoute(encounterType)
processed = []
unseen = []
for encounter in $PokemonEncounters.listPossibleEncounters(encounterType)
species = encounter[0]
species = encounter[1]
if !processed.include?(species)
if $Trainer.seen?(species)
processed<<species
processed << species
else
unseen<<species
processed<<species
unseen << species
processed << species
end
end
end
return unseen
end
#can only encounter rare if have seen every encounterable land pokemon on the route
def canEncounterRarePokemon()
processed = []
for encounter in $PokemonEncounters.listPossibleEncounters($PokemonEncounters.pbEncounterType)
species = encounter[0]
if !processed.include?(species)
if $Trainer.seen[species]
processed<<species
else
return false
end
end
end
return true
#pokedex register seen doesn't work correctly so temporarily removed
unseenPokemon = listUnseenPokemonInCurrentRoute($PokemonEncounters.encounter_type)
return unseenPokemon.length == 0
end
def pbPokeRadarHighlightGrass(showmessage=true)
grasses = [] # x, y, ring (0-3 inner to outer), rarity
def pbPokeRadarHighlightGrass(showmessage = true)
grasses = [] # x, y, ring (0-3 inner to outer), rarity§
# Choose 1 random tile from each ring around the player
for i in 0...4
r = rand((i+1)*8)
r = rand((i + 1) * 8)
# Get coordinates of randomly chosen tile
x = $game_player.x
y = $game_player.y
if r<=(i+1)*2
x = $game_player.x-i-1+r
y = $game_player.y-i-1
elsif r<=(i+1)*6-2
x = [$game_player.x+i+1,$game_player.x-i-1][r%2]
y = $game_player.y-i+((r-1-(i+1)*2)/2).floor
if r <= (i + 1) * 2
x = $game_player.x - i - 1 + r
y = $game_player.y - i - 1
elsif r <= (i + 1) * 6 - 2
x = [$game_player.x + i + 1, $game_player.x - i - 1][r % 2]
y = $game_player.y - i + ((r - 1 - (i + 1) * 2) / 2).floor
else
x = $game_player.x-i+r-(i+1)*6
y = $game_player.y+i+1
x = $game_player.x - i + r - (i + 1) * 6
y = $game_player.y + i + 1
end
# Add tile to grasses array if it's a valid grass tile
if x>=0 && x<$game_map.width &&
y>=0 && y<$game_map.height
if x >= 0 && x < $game_map.width &&
y >= 0 && y < $game_map.height
terrain = $game_map.terrain_tag(x, y)
if terrain.land_wild_encounters && terrain.shows_grass_rustle
# Choose a rarity for the grass (0=normal, 1=rare, 2=shiny)
@@ -118,11 +133,11 @@ def pbPokeRadarHighlightGrass(showmessage=true)
v = rand(65536) / v
s = 2 if v == 0
end
grasses.push([x,y,i,s])
grasses.push([x, y, i, s])
end
end
end
if grasses.length==0
if grasses.length == 0
# No shaking grass found, break the chain
pbMessage(_INTL("The grassy patch remained quiet...")) if showmessage
pbPokeRadarCancel
@@ -131,15 +146,15 @@ def pbPokeRadarHighlightGrass(showmessage=true)
for grass in grasses
case grass[3]
when 0 # Normal rustle
$scene.spriteset.addUserAnimation(Settings::RUSTLE_NORMAL_ANIMATION_ID,grass[0],grass[1],true,1)
$scene.spriteset.addUserAnimation(Settings::RUSTLE_NORMAL_ANIMATION_ID, grass[0], grass[1], true, 1)
when 1 # Vigorous rustle
$scene.spriteset.addUserAnimation(Settings::RUSTLE_VIGOROUS_ANIMATION_ID,grass[0],grass[1],true,1)
$scene.spriteset.addUserAnimation(Settings::RUSTLE_VIGOROUS_ANIMATION_ID, grass[0], grass[1], true, 1)
when 2 # Shiny rustle
$scene.spriteset.addUserAnimation(Settings::RUSTLE_SHINY_ANIMATION_ID,grass[0],grass[1],true,1)
$scene.spriteset.addUserAnimation(Settings::RUSTLE_SHINY_ANIMATION_ID, grass[0], grass[1], true, 1)
end
end
$PokemonTemp.pokeradar[3] = grasses if $PokemonTemp.pokeradar
pbWait(Graphics.frame_rate/2)
pbWait(Graphics.frame_rate / 2)
end
end
@@ -208,67 +223,69 @@ EncounterModifier.register(proc { |encounter|
end
pbPokeRadarCancel
end
else # Not chaining; will start one
else
# Not chaining; will start one
# Force random wild encounter, vigorous shaking means rarer species
encounter = pbPokeRadarGetEncounter(rarity)
$PokemonTemp.forceSingleBattle = true
end
else # Encounter triggered by stepping in non-rustling grass
pbPokeRadarCancel if encounter
else
# Encounter triggered by stepping in non-rustling grass
pbPokeRadarCancel if encounter && $PokemonGlobal.repel <= 0
end
next encounter
})
Events.onWildPokemonCreate += proc { |_sender,e|
Events.onWildPokemonCreate += proc { |_sender, e|
pokemon = e[0]
next if !$PokemonTemp.pokeradar
grasses = $PokemonTemp.pokeradar[3]
next if !grasses
for grass in grasses
next if $game_player.x!=grass[0] || $game_player.y!=grass[1]
pokemon.shiny = true if grass[3]==2
next if $game_player.x != grass[0] || $game_player.y != grass[1]
pokemon.shiny = true if grass[3] == 2
break
end
}
Events.onWildBattleEnd += proc { |_sender,e|
Events.onWildBattleEnd += proc { |_sender, e|
species = e[0]
level = e[1]
decision = e[2]
if $PokemonTemp.pokeradar && (decision==1 || decision==4) # Defeated/caught
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] = 40 if $PokemonTemp.pokeradar[2] > 40
pbPokeRadarHighlightGrass(false)
else
pbPokeRadarCancel
end
}
Events.onStepTaken += proc { |_sender,_e|
Events.onStepTaken += proc { |_sender, _e|
if $PokemonGlobal.pokeradarBattery && $PokemonGlobal.pokeradarBattery > 0 &&
!$PokemonTemp.pokeradar
$PokemonGlobal.pokeradarBattery -= 1
end
terrain = $game_map.terrain_tag($game_player.x,$game_player.y)
terrain = $game_map.terrain_tag($game_player.x, $game_player.y)
if !terrain.land_wild_encounters || !terrain.shows_grass_rustle
pbPokeRadarCancel
end
}
Events.onMapChange += proc { |_sender,_e|
Events.onMapChange += proc { |_sender, _e|
pbPokeRadarCancel
}
################################################################################
# Item handlers
################################################################################
ItemHandlers::UseInField.add(:POKERADAR,proc { |item|
ItemHandlers::UseInField.add(:POKERADAR, proc { |item|
next (pbCanUsePokeRadar?) ? pbUsePokeRadar : 0
})
ItemHandlers::UseFromBag.add(:POKERADAR,proc { |item|
ItemHandlers::UseFromBag.add(:POKERADAR, proc { |item|
next (pbCanUsePokeRadar?) ? 2 : 0
})

View File

@@ -371,5 +371,3 @@ def reverseFusionSpecies(species)
return getPokemon(newspecies)
end

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.