mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2026-07-22 23:57:01 +00:00
Update 6.8
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
MOVE_TYPE_FIXED = 0
|
||||
MOVE_TYPE_RANDOM = 1
|
||||
MOVE_TYPE_TOWARDS_PLAYER = 2
|
||||
MOVE_TYPE_AWAY_PLAYER = 4
|
||||
|
||||
MOVE_TYPE_CURIOUS = 5
|
||||
MOVE_TYPE_SHY = 6
|
||||
|
||||
class Game_Character
|
||||
# @stop_count : nb frames since last movement
|
||||
|
||||
#wait until next frequency frame
|
||||
def wait
|
||||
@stop_count = 0
|
||||
end
|
||||
|
||||
def move_type_curious(next_movement_ready = false)
|
||||
if next_movement_ready
|
||||
if distance_from_player > 1
|
||||
move_toward_player
|
||||
else
|
||||
roll = rand(6)
|
||||
if roll == 0
|
||||
turn_random
|
||||
elsif roll == 1
|
||||
jump(0,0)
|
||||
else
|
||||
turn_toward_player
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# def move_type_shy(next_movement_ready = false)
|
||||
# if next_movement_ready
|
||||
# move_type_away_from_player
|
||||
# turn_toward_player
|
||||
# end
|
||||
# end
|
||||
|
||||
|
||||
# def move_type_bounce_random(frames_since_last_movement, next_movement_ready = false)
|
||||
# echoln @stop_count
|
||||
# if next_movement_ready
|
||||
# case rand(6)
|
||||
# when 0..3 then
|
||||
# turn_random
|
||||
# jump_forward(1)
|
||||
# when 4 then
|
||||
# jump_forward(1)
|
||||
# when 5 then
|
||||
# wait
|
||||
# end
|
||||
# else
|
||||
# if @stop_count % 15 == 0
|
||||
# jump(0, 0, false)
|
||||
# end
|
||||
# end
|
||||
# end
|
||||
end
|
||||
@@ -0,0 +1,166 @@
|
||||
MULTIPLE_WILD_OW_FUSE_CHANCE = 35
|
||||
|
||||
class Game_Event
|
||||
def player_near_event?(radius = 1)
|
||||
dx = $game_player.x - @x
|
||||
dy = $game_player.y - @y
|
||||
distance = Math.sqrt(dx * dx + dy * dy)
|
||||
return distance <= radius
|
||||
end
|
||||
|
||||
def playerPositionRelativeToEvent
|
||||
dx = $game_player.x - @x
|
||||
dy = $game_player.y - @y
|
||||
|
||||
# Quick map for front/back detection
|
||||
front = case @direction
|
||||
when DIRECTION_UP then dy < 0
|
||||
when DIRECTION_DOWN then dy > 0
|
||||
when DIRECTION_LEFT then dx < 0
|
||||
when DIRECTION_RIGHT then dx > 0
|
||||
end
|
||||
|
||||
back = case @direction
|
||||
when DIRECTION_UP then dy > 0
|
||||
when DIRECTION_DOWN then dy < 0
|
||||
when DIRECTION_LEFT then dx > 0
|
||||
when DIRECTION_RIGHT then dx < 0
|
||||
end
|
||||
|
||||
# Side: adjacent but not in front or back
|
||||
side = !front && !back && (dx.abs + dy.abs == 1)
|
||||
|
||||
return { front: front, back: back, side: side, dx: dx, dy: dy }
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
def fuse_wild_pokemon_animation(battler1, battler2)
|
||||
if battler1.ow_coordinates && battler2.ow_coordinates
|
||||
playAnimation(Settings::FUSE_ANIMATION_ID, battler1.ow_coordinates[0], battler1.ow_coordinates[1])
|
||||
playAnimation(Settings::FUSE_ANIMATION_ID, battler2.ow_coordinates[0], battler2.ow_coordinates[1])
|
||||
pbWait(16)
|
||||
end
|
||||
end
|
||||
|
||||
def trigger_overworld_wild_battle
|
||||
return if $PokemonTemp.overworld_wild_battle_triggered
|
||||
$PokemonTemp.overworld_wild_battle_triggered = true
|
||||
case $PokemonTemp.overworld_wild_battle_participants.length
|
||||
when 0
|
||||
$PokemonTemp.overworld_wild_battle_triggered = false
|
||||
return
|
||||
when 2
|
||||
battler1 = $PokemonTemp.overworld_wild_battle_participants[0].pokemon
|
||||
battler2 = $PokemonTemp.overworld_wild_battle_participants[1].pokemon
|
||||
should_fuse = rand(100) <= MULTIPLE_WILD_OW_FUSE_CHANCE
|
||||
should_fuse = false if battler1.isFusion? || battler2.isFusion? #&& rand(100) <= MULTIPLE_WILD_OW_FUSE_CHANCE
|
||||
should_fuse = false if battler1.shiny? || battler2.shiny?
|
||||
if should_fuse
|
||||
fusion_species = fusionOf(battler1.species, battler2.species)
|
||||
fusion_level = (battler1.level + battler2.level) / 2.ceil
|
||||
fuse_wild_pokemon_animation(battler1, battler2)
|
||||
checkWildFusePokemonChallenge(battler1, battler2)
|
||||
pbWildBattleSpecific(Pokemon.new(fusion_species, fusion_level))
|
||||
else
|
||||
pb1v2WildBattleSpecific(battler1, battler2)
|
||||
end
|
||||
when 3
|
||||
battler1 = $PokemonTemp.overworld_wild_battle_participants[0].pokemon
|
||||
battler2 = $PokemonTemp.overworld_wild_battle_participants[1].pokemon
|
||||
battler3 = $PokemonTemp.overworld_wild_battle_participants[2].pokemon
|
||||
pb1v3WildBattleSpecific(battler1, battler2, battler3)
|
||||
when 1
|
||||
battler = $PokemonTemp.overworld_wild_battle_participants[0].pokemon
|
||||
if isWeatherWind?()
|
||||
event_x = $PokemonTemp.overworld_wild_battle_participants[0].x
|
||||
if event_x && event_x > $game_player.x
|
||||
$PokemonTemp.recordBattleRule("windside", 1) #event to the right of player. Tailwind for event
|
||||
elsif event_x && event_x < $game_player.x
|
||||
$PokemonTemp.recordBattleRule("windside", 0) #player to the right of event. Tailwind for player
|
||||
end
|
||||
end
|
||||
pbWildBattleSpecific(battler)
|
||||
else
|
||||
# shouldn"t happen
|
||||
battler = $PokemonTemp.overworld_wild_battle_participants[0].pokemon
|
||||
pbWildBattleSpecific(battler)
|
||||
$PokemonTemp.overworld_wild_battle_participants.shift
|
||||
end
|
||||
|
||||
$PokemonTemp.overworld_wild_battle_participants.each do |ow_pokemon|
|
||||
ow_pokemon.despawn
|
||||
end
|
||||
$PokemonTemp.overworld_wild_battle_participants = []
|
||||
|
||||
$PokemonTemp.overworld_wild_battle_triggered = false
|
||||
|
||||
end
|
||||
|
||||
def overworldPokemonCatchOffGuard()
|
||||
event = $MapFactory.getMap(@map_id).events[@event_id]
|
||||
return unless event && event.is_a?(OverworldPokemonEvent)
|
||||
unless event.current_state == :NOTICED_PLAYER || event.noticed_player_once
|
||||
if event.last_facing_direction == $game_player.direction
|
||||
setBattleRule("surprise")
|
||||
event.set_noticed_sprite
|
||||
playAnimation(Settings::EXCLAMATION_ANIMATION_ID, event.x, event.y)
|
||||
pbSEPlay("jump")
|
||||
event.turn_away_from_player
|
||||
event.jump(0,0)
|
||||
pbWait(8)
|
||||
event.set_roaming_sprite
|
||||
$Trainer.stats&.incr_nb_pokemon_surprised
|
||||
check_offguard_challenge(event)
|
||||
end
|
||||
end
|
||||
event.overworldPokemonBattle
|
||||
end
|
||||
|
||||
def check_offguard_challenge(pokemon_event)
|
||||
return unless pokemon_event.is_a?(OverworldPokemonEvent)
|
||||
$Trainer.complete_challenge(:encounter_offguard_any)
|
||||
case pokemon_event.behavior_noticed
|
||||
when :aggressive
|
||||
$Trainer.complete_challenge(:encounter_offguard_aggressive)
|
||||
when :curious
|
||||
$Trainer.complete_challenge(:encounter_offguard_curious)
|
||||
when :skittish, :flee
|
||||
$Trainer.complete_challenge(:encounter_offguard_skittish)
|
||||
end
|
||||
end
|
||||
|
||||
# Used to be called from spawned overworld Pokemon events, now handled directly in OverworldPokemonEvent
|
||||
# Kept here, empty in case I forgot to change some for the manual overworld Pokemon
|
||||
def overworldPokemonBehavior()
|
||||
# event = $MapFactory.getMap(@map_id).events[@event_id]
|
||||
# return unless event && event.is_a?(OverworldPokemonEvent)
|
||||
#
|
||||
# # Todo: There's a glitch where static overowrld pokemon also appear on connecting maps.
|
||||
# # They don't have any graphics. This just deactivetes their behavior too which makes them
|
||||
# # harmless - player won't know they're there... But they are, technically.
|
||||
# # This doesn't actually fix the glitch - just makes it invisible.
|
||||
# # -
|
||||
# # It would be good to make it so that the events only appear in their own map in the first place.
|
||||
# return unless @map_id == $game_map.map_id
|
||||
# #
|
||||
# #
|
||||
#
|
||||
# begin
|
||||
# if $game_temp.message_window_showing
|
||||
# event.pause_movement
|
||||
# else
|
||||
# event.update_behavior
|
||||
# end
|
||||
# rescue
|
||||
# return
|
||||
# end
|
||||
end
|
||||
|
||||
def overworldPokemonDetect(radius = 1)
|
||||
event = $MapFactory.getMap(@map_id).events[@event_id]
|
||||
return pbPlayerInEventCone?(event, $game_player, radius)
|
||||
end
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,625 @@
|
||||
class OverworldPokemonEvent < Game_Event
|
||||
|
||||
attr_accessor :species
|
||||
attr_accessor :level
|
||||
|
||||
attr_accessor :behavior_roaming
|
||||
attr_accessor :behavior_noticed
|
||||
|
||||
attr_accessor :detection_radius
|
||||
attr_accessor :pokemon
|
||||
attr_accessor :manual_ow_pokemon
|
||||
attr_accessor :current_state
|
||||
attr_reader :part_of_pokeradar_chain
|
||||
attr_reader :noticed_player_once
|
||||
attr_reader :last_facing_direction
|
||||
|
||||
DISTANCE_FOR_DESPAWN = 16
|
||||
FLEEING_BEHAVIORS = [:flee, :flee_flying, :teleport_away]
|
||||
|
||||
DISGUISED_POKEMON = [:DITTO, :MEW, :ZORUA, :ZOROARK]
|
||||
CASTFORM_FORMS = [:CASTFORM, :CASTFORM_SUNNY, :CASTFORM_RAINY, :CASTFORM_SNOWY]
|
||||
UPDATE_TIME = 4 # Nb. of frames for the update_behavior loop
|
||||
|
||||
def setup_pokemon(species, level, terrain, behavior_roaming = nil, behavior_noticed = nil)
|
||||
# return unless @map_id == $game_map.map_id
|
||||
@species = species
|
||||
@level = level
|
||||
roll_for_special_encounters
|
||||
@behavior_roaming = behavior_roaming if behavior_roaming
|
||||
@behavior_noticed = behavior_noticed if behavior_noticed
|
||||
|
||||
@terrain = terrain
|
||||
@disguised = false
|
||||
species_data = GameData::Species.get(@species)
|
||||
|
||||
@pokemon = Pokemon.new(@species, @level)
|
||||
@behavior_species = getBehaviorSpecies(species_data)
|
||||
|
||||
unless behavior_roaming
|
||||
@behavior_roaming = get_behavior_for_species(@behavior_species, :behavior_roaming)
|
||||
@behavior_roaming = :random unless @behavior_roaming
|
||||
end
|
||||
unless behavior_noticed
|
||||
@behavior_noticed = get_behavior_for_species(@behavior_species, :behavior_noticed)
|
||||
@behavior_noticed = nil unless @behavior_noticed
|
||||
end
|
||||
|
||||
default_move_speed = calculate_value_from_stat(species_data, :SPEED, 1, 4)
|
||||
@roaming_move_speed = POKEMON_BEHAVIOR_DATA[@behavior_species][:roaming_move_speed] || default_move_speed
|
||||
@noticed_move_speed = POKEMON_BEHAVIOR_DATA[@behavior_species][:noticed_move_speed] || default_move_speed
|
||||
|
||||
default_frequency = calculate_value_from_stat(species_data, :ATTACK, 1, 5)
|
||||
@roaming_frequency = POKEMON_BEHAVIOR_DATA[@behavior_species][:roaming_frequency] || default_frequency
|
||||
@noticed_frequency = POKEMON_BEHAVIOR_DATA[@behavior_species][:noticed_frequency] || default_frequency
|
||||
|
||||
@detection_radius = calculate_ow_pokemon_sight_radius(species_data)
|
||||
|
||||
# When the player is next to a Pokemon but not facing it, there is a delay before it battles.
|
||||
# The battle will start when the timer reaches @nearby_notice_limit
|
||||
# @nearby_notice_limit depends on the size of the pokemon. (usually around 3-5 ticks)
|
||||
@nearby_notice_timer = 0
|
||||
@nearby_notice_limit = 4 # calculate_value_from_ref_value(species_data.weight.to_f/10,2,12, 8)# weight is multiplied by 10 in the pokemon data for some reason
|
||||
@nearby_notice_limit += 1 * @weather_level_at_spawn if @weather_type_at_spawn == :Storm
|
||||
@current_state = :ROAMING # Possible values: :ROAMING, :NOTICED_PLAYER, :FLEEING
|
||||
@noticed_player_once = false
|
||||
@manual_ow_pokemon = false
|
||||
#@event.name = "OW/#{species.to_s}/#{level.to_s}"
|
||||
weather = $game_weather.get_current_map_weather if $game_weather
|
||||
if weather
|
||||
@weather_type_at_spawn = weather[0]
|
||||
@weather_level_at_spawn = weather[1]
|
||||
end
|
||||
|
||||
if DISGUISED_POKEMON.include?(@species) && !@manual_ow_pokemon
|
||||
species_data = getRandomPokemonFromRoute(@species, @terrain)
|
||||
@disguised = true
|
||||
end
|
||||
if CASTFORM_FORMS.include?(@species)
|
||||
species_data = setCastformToCurrentWeather
|
||||
end
|
||||
|
||||
initialize_sprite(@terrain, species_data)
|
||||
@disguised_sprite = @roaming_sprite if @disguised
|
||||
@is_flying = @character_name == @flying_sprite
|
||||
@is_swimming = false
|
||||
@step_anime = @is_flying
|
||||
@forced_z = 300 if @is_flying && $PokemonGlobal.boat #@always_on_top = @is_flying
|
||||
@part_of_pokeradar_chain = is_pokeradar_chain
|
||||
if @terrain == :Water
|
||||
set_swimming
|
||||
end
|
||||
apply_shiny_rerolls(@pokemon)
|
||||
|
||||
if @pokemon.shiny?
|
||||
pbSEPlay("shiny", 60)
|
||||
playAnimation(Settings::SPARKLE_SHORT_ANIMATION_ID, @x, @y)
|
||||
end
|
||||
set_roaming_movement
|
||||
@last_facing_direction = @direction
|
||||
@setup_complete = true
|
||||
end
|
||||
|
||||
def roll_for_special_encounters
|
||||
# Mew encounter
|
||||
if rand(10000) < Settings::MEW_OW_ENCOUNTER_CHANCE
|
||||
@species = :MEW
|
||||
@level = 7
|
||||
end
|
||||
end
|
||||
|
||||
def make_shiny
|
||||
@pokemon.shiny = true
|
||||
@pokemon.radar_shiny = true
|
||||
species_data = GameData::Species.get(@species)
|
||||
initialize_sprite(@terrain, species_data)
|
||||
end
|
||||
|
||||
def is_pokeradar_chain
|
||||
if $PokemonTemp.pokeradar
|
||||
pokeradar_species = $PokemonTemp.pokeradar[0]
|
||||
return @species == pokeradar_species
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
def setCastformToCurrentWeather
|
||||
case @weather_type_at_spawn
|
||||
when :Rain, :Storm, :HeavyRain
|
||||
@species = :CASTFORM_RAINY
|
||||
when :Sunny, :HarshSun, :Sandstorm
|
||||
@species = :CASTFORM_SUNNY
|
||||
when :Wind, :StrongWinds, :Snow, :Blizzard
|
||||
@species = :CASTFORM_SNOWY
|
||||
else
|
||||
@species = :CASTFORM
|
||||
end
|
||||
@pokemon = Pokemon.new(@species, @level)
|
||||
return GameData::Species.get(@species)
|
||||
end
|
||||
|
||||
def get_behavior_for_species(species, behavior_type)
|
||||
behavior = POKEMON_BEHAVIOR_DATA[species][behavior_type]
|
||||
if @terrain == :Water
|
||||
behavior = :random_dive if behavior == :random_burrow
|
||||
else
|
||||
behavior = :random if behavior == :random_dive
|
||||
behavior = :random if behavior == :water_skip
|
||||
end
|
||||
|
||||
if species == :WHISMUR && isWearingHat(HAT_TRUMPET)
|
||||
behavior = :uproar
|
||||
end
|
||||
return behavior
|
||||
end
|
||||
|
||||
# Crops land sprite to make it look underwater
|
||||
def set_swimming
|
||||
# return if @species == :SURSKIT || @species == :SUICUNE
|
||||
unless @is_flying
|
||||
self.set_animation_speed(2)
|
||||
@step_anime = true
|
||||
unless @swimming_sprite
|
||||
self.forced_bush_depth = 20
|
||||
self.calculate_bush_depth
|
||||
else
|
||||
self.forced_bush_depth = 8
|
||||
self.calculate_bush_depth
|
||||
end
|
||||
@is_swimming = true
|
||||
end
|
||||
end
|
||||
|
||||
def set_shiny
|
||||
@pokemon.shiny = true
|
||||
@pokemon.natural_shiny = true
|
||||
species_data = GameData::Species.get(@species)
|
||||
initialize_sprite(@terrain, species_data)
|
||||
end
|
||||
|
||||
# Used for special static pokemon - if need other actions after the pokemon was battled
|
||||
|
||||
def set_post_battle_switch(switch_nb)
|
||||
@post_battle_switch = switch_nb if switch_nb.is_a?(Integer)
|
||||
end
|
||||
|
||||
def getBehaviorSpecies(species_data)
|
||||
if isSpeciesFusion(@species)
|
||||
return species_data.get_head_species_symbol
|
||||
end
|
||||
return @species
|
||||
end
|
||||
|
||||
def initialize_sprite(terrain, species_data)
|
||||
@land_sprite = getOverworldLandPath(species_data, @pokemon.shiny?)
|
||||
@flying_sprite = getOverworldFlyingPath(species_data, @pokemon.shiny?)
|
||||
@swimming_sprite = getOverworldSwimmingPath(species_data, @pokemon.shiny?)
|
||||
|
||||
@noticed_sprite = getOverworldNoticedPath(species_data, @pokemon.shiny?)
|
||||
@noticed_sprite = @flying_sprite if !@noticed_sprite && @flying_sprite
|
||||
@roaming_sprite = @land_sprite
|
||||
@roaming_sprite = @disguised_sprite if @disguised_sprite && @disguised
|
||||
|
||||
if terrain == :Water
|
||||
initialize_water_sprite
|
||||
else
|
||||
initialize_land_sprite
|
||||
end
|
||||
end
|
||||
|
||||
def initialize_water_sprite
|
||||
if @flying_sprite
|
||||
@character_name = @flying_sprite
|
||||
elsif @swimming_sprite
|
||||
@character_name = @swimming_sprite
|
||||
else
|
||||
@character_name = @land_sprite
|
||||
end
|
||||
end
|
||||
|
||||
def initialize_land_sprite
|
||||
if @land_sprite
|
||||
@character_name = @land_sprite
|
||||
elsif @flying_sprite
|
||||
@character_name = @flying_sprite
|
||||
end
|
||||
end
|
||||
|
||||
def get_current_state
|
||||
return @current_state
|
||||
end
|
||||
|
||||
####
|
||||
# ACTIONS
|
||||
# ###
|
||||
def overworldPokemonBattle()
|
||||
return if lock?
|
||||
return if $PokemonTemp.prevent_ow_battles
|
||||
return if instance_variable_get(:@_triggered)
|
||||
return if $PokemonTemp.overworld_wild_battle_triggered
|
||||
instance_variable_set(:@_triggered, true)
|
||||
playAnimation(Settings::EXCLAMATION_ANIMATION_ID, @x, @y) # unless @current_state == :NOTICED_PLAYER #notice animation already plays instead if the state is roaming
|
||||
turn_toward_player
|
||||
playCry(@species)
|
||||
@pokemon.ow_coordinates = [@x, @y]
|
||||
$PokemonTemp.overworld_wild_battle_participants = [] if !$PokemonTemp.overworld_wild_battle_participants
|
||||
$PokemonTemp.overworld_wild_battle_participants << self
|
||||
pbWait(8)
|
||||
trigger_overworld_wild_battle
|
||||
if @post_battle_switch && @post_battle_switch.is_a?(Integer) && @post_battle_switch >= 1
|
||||
$game_switches[@post_battle_switch] = true
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
def flee(behavior)
|
||||
return if @pokemon.shiny?
|
||||
playCry(@species)
|
||||
pbSEPlay(SE_FLEE)
|
||||
if FLEEING_BEHAVIORS.include?(@behavior_noticed)
|
||||
flee_behavior = OW_BEHAVIOR_MOVE_ROUTES[:noticed][@behavior_noticed]
|
||||
else
|
||||
flee_behavior = OW_BEHAVIOR_MOVE_ROUTES[:noticed][:flee]
|
||||
end
|
||||
set_custom_move_route(flee_behavior, false)
|
||||
check_pokeradar_chain_break
|
||||
@through = true
|
||||
@detection_radius = 10
|
||||
force_move_route(@move_route)
|
||||
@always_on_top = true if behavior == :flee_flying
|
||||
@current_state = :FLEEING
|
||||
end
|
||||
|
||||
def check_pokeradar_chain_break
|
||||
return unless $PokemonTemp.pokeradar && @part_of_pokeradar_chain
|
||||
remaining_pokeradar_species = false
|
||||
$game_map.events.each do |event|
|
||||
if event.is_a?(OverworldPokemonEvent)
|
||||
remaining_pokeradar_species = true if event.part_of_pokeradar_chain
|
||||
break if remaining_pokeradar_species
|
||||
end
|
||||
end
|
||||
unless remaining_pokeradar_species
|
||||
pbPokeRadarCancel
|
||||
end
|
||||
end
|
||||
|
||||
#####
|
||||
# Behaviors
|
||||
#####
|
||||
def noticed_state_different_from_roaming
|
||||
return false unless @behavior_noticed
|
||||
return false if @behavior_noticed == :still && @behavior_roaming == :still
|
||||
return true
|
||||
end
|
||||
|
||||
def breakDisguise
|
||||
species_data = GameData::Species.get(@species)
|
||||
playAnimation(TELEPORT_ANIMATION_ID, @x, @y)
|
||||
initialize_sprite(@terrain, species_data)
|
||||
end
|
||||
|
||||
def playDetectPlayerAnimation
|
||||
return unless @current_state == :ROAMING
|
||||
return unless noticed_state_different_from_roaming()
|
||||
|
||||
if @behavior_noticed == :curious
|
||||
playAnimation(Settings::QUESTION_MARK_ANIMATION_ID, @x, @y)
|
||||
elsif @behavior_noticed == :aggressive
|
||||
playAnimation(Settings::ANGRY_ANIMATION_ID, @x, @y)
|
||||
elsif @behavior_noticed == :semi_aggressive
|
||||
playAnimation(Settings::ANGRY_SHORT_ANIMATION_ID, @x, @y)
|
||||
else
|
||||
playAnimation(Settings::EXCLAMATION_ANIMATION_ID, @x, @y)
|
||||
end
|
||||
end
|
||||
|
||||
def update_behavior()
|
||||
return unless @setup_complete
|
||||
return if @opacity == 0
|
||||
return if @current_state == :FLEEING
|
||||
return if $game_temp.message_window_showing
|
||||
@last_facing_direction = @direction
|
||||
distance = distance_from_player()
|
||||
is_near_player = distance <= @detection_radius
|
||||
if distance >= DISTANCE_FOR_DESPAWN
|
||||
despawn unless @manual_ow_pokemon
|
||||
end
|
||||
if is_near_player
|
||||
if should_start_battle? # Battle
|
||||
if isRepelActive && pokemon_can_be_repelled
|
||||
playAnimation(Settings::EXCLAMATION_ANIMATION_ID, @x, @y)
|
||||
flee(@behavior_noticed)
|
||||
else
|
||||
overworldPokemonBattle
|
||||
end
|
||||
else
|
||||
# check for noticed
|
||||
if @current_state == :ROAMING
|
||||
if check_detect_trainer
|
||||
playDetectPlayerAnimation
|
||||
breakDisguise if @disguised
|
||||
@noticed_player_once = true
|
||||
update_state(:NOTICED_PLAYER)
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
if @current_state != :ROAMING
|
||||
update_state(:ROAMING)
|
||||
back_to_roaming_action
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# Automatically starts a battle if the player is 1 tile away from the Pokemon.
|
||||
# If the player is behind or to the side of the pokemon, there is a slight delay
|
||||
def should_start_battle?
|
||||
return false unless $PokemonTemp.overworld_wild_battle_participants
|
||||
should_start = false
|
||||
if player_near_event?(1)
|
||||
return true if $PokemonTemp.overworld_wild_battle_participants.length >= 1 # Notice immediately if a pokemon is already attacking so that double battles are more likely
|
||||
position = playerPositionRelativeToEvent
|
||||
if position[:front]
|
||||
should_start = true
|
||||
elsif position[:back]
|
||||
@nearby_notice_timer += 1
|
||||
@nearby_notice_timer += 1 if @current_state == :NOTICED_PLAYER
|
||||
elsif position[:side]
|
||||
@nearby_notice_timer += 2
|
||||
should_start = true if @current_state == :NOTICED_PLAYER
|
||||
end
|
||||
if @nearby_notice_timer > @nearby_notice_limit
|
||||
should_start = true
|
||||
end
|
||||
else
|
||||
@nearby_notice_timer = 0
|
||||
end
|
||||
@nearby_notice_timer = 0 if should_start
|
||||
return should_start
|
||||
end
|
||||
|
||||
def pokemon_can_be_repelled
|
||||
return false if @part_of_pokeradar_chain
|
||||
return $Trainer.party[0].level > @pokemon.level && !@pokemon.shiny?
|
||||
end
|
||||
|
||||
def turn_generic(*args)
|
||||
super(*args)
|
||||
end
|
||||
|
||||
# called when a pokemon that has noticed the player goes back to roaming
|
||||
def back_to_roaming_action
|
||||
case @behavior_noticed
|
||||
when :skittish, :shy
|
||||
turn_toward_player
|
||||
end
|
||||
end
|
||||
|
||||
def update_state(new_state)
|
||||
@current_state = new_state
|
||||
update_movement_type
|
||||
set_sprite_to_current_state
|
||||
end
|
||||
|
||||
def update_movement_type
|
||||
case @current_state
|
||||
when :ROAMING
|
||||
set_roaming_movement
|
||||
when :NOTICED_PLAYER
|
||||
set_noticed_movement
|
||||
end
|
||||
set_sprite_to_current_state
|
||||
end
|
||||
|
||||
def check_detect_trainer
|
||||
return unless noticed_state_different_from_roaming()
|
||||
return if $game_system.map_interpreter.running? || @starting
|
||||
# return pbEventCanReachPlayer?(self, $game_player, @detection_radius)
|
||||
return pbPlayerInEventCone?(self, $game_player, @detection_radius)
|
||||
end
|
||||
|
||||
def pbCheckEventTriggerAfterTurning
|
||||
return if $game_system.map_interpreter.running? || @starting
|
||||
if @event.name[/trainer\((\d+)\)/i]
|
||||
distance = $~[1].to_i
|
||||
if @trigger == 2 && pbEventCanReachPlayer?(self, $game_player, distance)
|
||||
start if !jumping? && !over_trigger?
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# The rarer the Pokemon, the more skittish it is (larger sight radius)
|
||||
def calculate_ow_pokemon_sight_radius(species_data)
|
||||
#--- Fog level ---
|
||||
fog_level = 0
|
||||
fog_level = @weather_level_at_spawn if @weather_level_at_spawn == :Fog
|
||||
|
||||
#--- Base radius limits (no fog) ---
|
||||
min_base_radius = 2
|
||||
max_base_radius = 6
|
||||
|
||||
#--- Base radius from Speed (1–255) ---
|
||||
speed = species_data.base_stats[:SPEED]
|
||||
base_radius = min_base_radius + ((speed - 1) / 254.0) * (max_base_radius - min_base_radius)
|
||||
|
||||
#--- Fog effect (quadratic: light fog mild, heavy fog strong) ---
|
||||
fog_factor = (fog_level / 10.0) ** 2
|
||||
radius = base_radius * (1.0 - fog_factor)
|
||||
|
||||
#--- Absolute minimum visibility ---
|
||||
return [radius.round, 1].max
|
||||
end
|
||||
|
||||
def calculate_value_from_stat(species_data, stat, min_value, max_value)
|
||||
stat_value = species_data.base_stats[stat]
|
||||
average_stat = 70.0
|
||||
half_range = (max_value - min_value) / 2.0
|
||||
|
||||
# Center on average stat and scale up/down
|
||||
normalized = (stat_value - average_stat) / average_stat
|
||||
scaled = (min_value + half_range) + normalized * half_range
|
||||
|
||||
return scaled.clamp(min_value, max_value).round
|
||||
end
|
||||
|
||||
# Generic version of calculate_value_from_stat. You provide the value.
|
||||
# There's an optional curve_factor if it shouldn't be linear
|
||||
# > 1 : steeper towards the end
|
||||
# < 1 steeper towards the beginning
|
||||
def calculate_value_from_ref_value(ref_value, min_value, max_value, curve_factor = 1)
|
||||
ref_value = [ref_value, 1].max
|
||||
|
||||
# Logarithmic scaling 0 → 1
|
||||
scaled_value = Math.log(ref_value) / curve_factor
|
||||
normalized = scaled_value / (1 + scaled_value)
|
||||
|
||||
# Scale to range
|
||||
value = min_value + normalized * (max_value - min_value)
|
||||
value.round
|
||||
end
|
||||
|
||||
def set_sprite_to_current_state
|
||||
case @current_state
|
||||
when :NOTICED_PLAYER, :FLEEING
|
||||
set_sprite(@noticed_sprite) if @noticed_sprite
|
||||
when :ROAMING
|
||||
playAnimation(TELEPORT_ANIMATION_ID, @x, @y) if @disguised
|
||||
set_sprite(@roaming_sprite) if @roaming_sprite
|
||||
end
|
||||
end
|
||||
|
||||
def set_roaming_sprite
|
||||
set_sprite(@roaming_sprite) if @roaming_sprite
|
||||
end
|
||||
|
||||
def set_noticed_sprite
|
||||
set_sprite(@noticed_sprite) if @noticed_sprite
|
||||
end
|
||||
|
||||
def set_sprite(sprite_path)
|
||||
@character_name = sprite_path
|
||||
@need_refresh = true
|
||||
end
|
||||
|
||||
# Static
|
||||
def set_noticed_movement
|
||||
if isRepelActive
|
||||
@move_type = MOVE_TYPE_AWAY_PLAYER
|
||||
self.move_frequency = 6
|
||||
return
|
||||
end
|
||||
|
||||
effective_behavior = @behavior_noticed || @behavior_roaming # fallback on @behavior_roaming if no @behavior_noticed
|
||||
|
||||
case effective_behavior
|
||||
when :random
|
||||
@move_type = MOVE_TYPE_RANDOM
|
||||
when :still
|
||||
@move_type = MOVE_TYPE_FIXED
|
||||
when :curious
|
||||
@move_type = MOVE_TYPE_CURIOUS
|
||||
when :semi_aggressive
|
||||
@move_type = MOVE_TYPE_TOWARDS_PLAYER
|
||||
when :aggressive
|
||||
@move_type = MOVE_TYPE_TOWARDS_PLAYER
|
||||
self.move_frequency = 6
|
||||
when :skittish
|
||||
@move_type = MOVE_TYPE_AWAY_PLAYER
|
||||
self.move_frequency = 6
|
||||
when :flee, :flee_flying, :teleport_away
|
||||
flee(effective_behavior)
|
||||
else
|
||||
category = @behavior_noticed ? :noticed : :roaming
|
||||
set_custom_move_route(OW_BEHAVIOR_MOVE_ROUTES[category][effective_behavior])
|
||||
end
|
||||
|
||||
@step_anime = true unless effective_behavior == :still
|
||||
@move_speed = @noticed_move_speed
|
||||
end
|
||||
|
||||
def set_roaming_movement
|
||||
if isRepelActive
|
||||
@move_type = MOVE_TYPE_AWAY_PLAYER
|
||||
self.move_frequency = 3
|
||||
return
|
||||
end
|
||||
|
||||
case @behavior_roaming
|
||||
when :random
|
||||
@move_type = MOVE_TYPE_RANDOM
|
||||
when :still
|
||||
@move_type = MOVE_TYPE_FIXED
|
||||
else
|
||||
set_custom_move_route(OW_BEHAVIOR_MOVE_ROUTES[:roaming][@behavior_roaming])
|
||||
end
|
||||
self.move_frequency = 3
|
||||
check_weather_roaming_behavior
|
||||
@move_speed = @roaming_move_speed
|
||||
@step_anime = false unless @is_flying || @is_swimming
|
||||
end
|
||||
|
||||
def check_weather_roaming_behavior
|
||||
if @weather_type_at_spawn == :Wind || @weather_type_at_spawn == :Storm
|
||||
wind_behavior = POKEMON_BEHAVIOR_DATA[@species][:behavior_wind_roaming]
|
||||
if wind_behavior
|
||||
set_custom_move_route(OW_BEHAVIOR_MOVE_ROUTES[:roaming][wind_behavior])
|
||||
end
|
||||
elsif @weather_type_at_spawn == :Rain || @weather_type_at_spawn == :Storm
|
||||
rain_behavior = POKEMON_BEHAVIOR_DATA[@species][:behavior_rain_roaming]
|
||||
if rain_behavior
|
||||
set_custom_move_route(OW_BEHAVIOR_MOVE_ROUTES[:roaming][rain_behavior])
|
||||
end
|
||||
elsif @weather_type_at_spawn == :Sunny
|
||||
sun_behavior = POKEMON_BEHAVIOR_DATA[@species][:behavior_sunny_roaming]
|
||||
if sun_behavior
|
||||
set_custom_move_route(OW_BEHAVIOR_MOVE_ROUTES[:roaming][sun_behavior])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def set_custom_move_route(move_list, repeating = true)
|
||||
@move_type = MOVE_TYPE_CUSTOM
|
||||
@move_route = RPG::MoveRoute.new
|
||||
@move_route.repeat = repeating
|
||||
@move_route.skippable = true
|
||||
@move_route.list = move_list
|
||||
end
|
||||
|
||||
def despawn
|
||||
erase
|
||||
$game_map.events.delete(@id)
|
||||
$PokemonTemp.overworld_pokemon_on_map&.delete(@id)
|
||||
$PokemonTemp.tempEvents&.each { |_, events| events.delete(self) }
|
||||
$PokemonTemp.tempEvents&.delete_if { |_, v| v.empty? }
|
||||
end
|
||||
|
||||
# Additional move types for OW pokemon
|
||||
def update_command_new
|
||||
super
|
||||
ready_for_next_movement = @stop_count >= self.move_frequency_real
|
||||
case @move_type
|
||||
when MOVE_TYPE_CURIOUS
|
||||
move_type_curious(ready_for_next_movement)
|
||||
end
|
||||
end
|
||||
|
||||
def pause_movement
|
||||
@move_type = MOVE_TYPE_FIXED
|
||||
@current_state = :PAUSED
|
||||
end
|
||||
|
||||
def update
|
||||
super
|
||||
if $game_temp.message_window_showing
|
||||
pause_movement unless @current_state == :PAUSED
|
||||
else
|
||||
@behavior_update_counter = (@behavior_update_counter || 0) + 1
|
||||
if @behavior_update_counter >= UPDATE_TIME
|
||||
@behavior_update_counter = 0
|
||||
update_behavior
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
#Just wrappers over OverworldPokemonEvent so that statics can be handled separately when cleaning the map (and other places if needed)
|
||||
class StaticOverworldPokemonEvent < OverworldPokemonEvent
|
||||
end
|
||||
|
||||
class DynamicOverworldPokemonEvent < OverworldPokemonEvent
|
||||
end
|
||||
@@ -0,0 +1,270 @@
|
||||
# Todo: Templates that depend on the type of Pokemon
|
||||
|
||||
# Skittish (can run away, large detection radius)
|
||||
# Normal (just hangs out)
|
||||
# Aggressive (goes towards player when in detection radius)
|
||||
# still (cocoons, etc.) - doesn't move at all
|
||||
#
|
||||
# Flying: Wingull, Taillow, Hoppip, etc. when over water
|
||||
#
|
||||
|
||||
# A special type of event that is a Pokemon visible in the overworld. It flees if the player gets too close.
|
||||
# Can either spawn naturally or be static
|
||||
|
||||
def should_spawn_overworld_pokemon?
|
||||
return false unless can_spawn_overworld_pokemon?
|
||||
$PokemonTemp.overworld_pokemon_on_map = [] unless $PokemonTemp.overworld_pokemon_on_map
|
||||
return false unless $PokemonGlobal.stepcount % (5 + ($PokemonTemp.overworld_pokemon_on_map.length * 5)) == 0
|
||||
return rand(100) > 25 # true
|
||||
end
|
||||
|
||||
def can_spawn_overworld_pokemon?
|
||||
return false unless $PokemonSystem.overworld_encounters || $PokemonTemp.pokeradar
|
||||
return false if $PokemonTemp.prevent_ow_encounters
|
||||
return true
|
||||
end
|
||||
|
||||
def playOverworldPokemonSpawnAnimation(event, terrain)
|
||||
case terrain
|
||||
when :Land
|
||||
playAnimation(Settings::GRASS_ANIMATION_ID, event.x, event.y)
|
||||
when :Cave
|
||||
playAnimation(Settings::DUST_ANIMATION_ID, event.x, event.y)
|
||||
when :Water
|
||||
playAnimation(PUDDLE_ANIMATION_ID, event.x, event.y)
|
||||
end
|
||||
end
|
||||
|
||||
def create_overworld_pokemon_event(pokemon, position, terrain, behavior_roaming = nil, behavior_noticed = nil)
|
||||
template_event = TEMPLATE_EVENT_OW_POKEMON_NORMAL
|
||||
|
||||
species = pokemon[0]
|
||||
level = pokemon[1]
|
||||
event = $PokemonTemp.createTempEvent(template_event, $game_map.map_id, position, nil, DynamicOverworldPokemonEvent) do |event|
|
||||
event.setup_pokemon(species, level, terrain, behavior_roaming, behavior_noticed)
|
||||
end
|
||||
return unless event
|
||||
event.direction = [DIRECTION_LEFT, DIRECTION_RIGHT, DIRECTION_DOWN, DIRECTION_UP].sample
|
||||
playOverworldPokemonSpawnAnimation(event, terrain)
|
||||
return event
|
||||
end
|
||||
|
||||
def get_overworld_pokemon_group_size(species, max_group_size)
|
||||
catch_rate = GameData::Species.get(species).catch_rate
|
||||
t = (catch_rate - 1) / 254.0
|
||||
t = Math.sqrt(t) # invert to favor smaller groups
|
||||
|
||||
# Base group size, biased toward smaller numbers
|
||||
base = 1 + (t * (max_group_size - 1) * 0.5) # multiply by 0.5 to shrink toward 1–2
|
||||
|
||||
# Random variation: mostly negative or zero, rarely positive
|
||||
variation = if rand < 0.6
|
||||
-1
|
||||
elsif rand < 0.9
|
||||
0
|
||||
else
|
||||
1
|
||||
end
|
||||
|
||||
size = (base.round + variation).clamp(1, max_group_size)
|
||||
return size
|
||||
end
|
||||
|
||||
def printPokemonOnCurrentMap
|
||||
event_names = []
|
||||
$PokemonTemp.overworld_pokemon_on_map.each do |key|
|
||||
event = $game_map.events[key]
|
||||
event_names << "[#{event.id}]#{event.name}"
|
||||
end
|
||||
end
|
||||
|
||||
# shortcut for calling from events
|
||||
# wild_pokemon: [species, level]
|
||||
def spawn_ow_pokemon(species, level, max_quantity = 1, radius = 10, coordinates = nil)
|
||||
wild_pokemon = [species, level]
|
||||
return spawn_random_overworld_pokemon_group(wild_pokemon, radius, max_quantity, coordinates)
|
||||
end
|
||||
|
||||
#Bypasses map limit
|
||||
def spawn_pokemon_group(species, min_level, max_level, quantity=1, radius=10, min_distance=3, max_attempts=10)
|
||||
spawn_count=0
|
||||
(1..quantity).each {
|
||||
attempts = 0
|
||||
position = find_spawn_position(radius, min_distance)
|
||||
unless position
|
||||
while attempts <= max_attempts
|
||||
position = find_spawn_position(radius, min_distance)
|
||||
attempts += 1
|
||||
break if position
|
||||
end
|
||||
next unless position
|
||||
end
|
||||
offset_x = rand(-2..2)
|
||||
offset_y = rand(-2..2)
|
||||
new_position = [position[0] + offset_x, position[1] + offset_y]
|
||||
terrain = get_spawning_terrain
|
||||
begin
|
||||
if can_spawn_pokemon_there(new_position[0], new_position[1], terrain)
|
||||
level = rand(min_level..max_level)
|
||||
wild_pokemon = [species, level]
|
||||
spawn_overworld_pokemon(wild_pokemon, new_position, terrain)
|
||||
spawn_count+=1
|
||||
echoln spawn_count
|
||||
end
|
||||
rescue Exception => e
|
||||
echoln e.message
|
||||
end
|
||||
}
|
||||
end
|
||||
|
||||
def spawn_random_overworld_pokemon_group(wild_pokemon = nil, radius = 10, max_group_size = 4, position = nil, terrain = nil)
|
||||
return unless $PokemonEncounters && $PokemonGlobal
|
||||
unless wild_pokemon && position
|
||||
if ($PokemonGlobal.surfing || $PokemonGlobal.boat) && $PokemonEncounters.has_water_encounters?
|
||||
terrain = :Water
|
||||
position = find_random_surfable_coordinates_near_player(radius, radius, 3, max_nb_tries = 10)
|
||||
elsif $PokemonEncounters.has_cave_encounters?
|
||||
terrain = :Cave
|
||||
position = find_random_walkable_coordinates_near_player(radius, radius, 3, max_nb_tries = 10)
|
||||
elsif $PokemonEncounters.has_land_encounters?
|
||||
position, terrain = find_random_tall_grass_coordinates_near_player(radius, radius, 3, max_nb_tries = 10)
|
||||
end
|
||||
encounter_type = getTimeBasedEncounter(terrain)
|
||||
return unless encounter_type && position
|
||||
wild_pokemon = getRegularEncounter(encounter_type) if !wild_pokemon
|
||||
end
|
||||
$PokemonTemp.overworld_pokemon_on_map = [] unless $PokemonTemp.overworld_pokemon_on_map
|
||||
if $PokemonTemp.overworld_pokemon_on_map.length >= Settings::OVERWORLD_POKEMON_LIMIT
|
||||
despawn_overworld_pokemon($PokemonTemp.overworld_pokemon_on_map[0], terrain)
|
||||
end
|
||||
return unless wild_pokemon
|
||||
species = wild_pokemon[0]
|
||||
number_to_spawn = get_overworld_pokemon_group_size(species, max_group_size)
|
||||
echoln "Spawning a group of #{number_to_spawn} #{species}"
|
||||
spawned_events = []
|
||||
for i in 0...number_to_spawn
|
||||
next if $PokemonTemp.overworld_pokemon_on_map.length >= Settings::OVERWORLD_POKEMON_LIMIT
|
||||
offset_x = rand(-2..2)
|
||||
offset_y = rand(-2..2)
|
||||
new_position = [position[0] + offset_x, position[1] + offset_y]
|
||||
begin
|
||||
if can_spawn_pokemon_there(new_position[0], new_position[1], terrain)
|
||||
event = spawn_overworld_pokemon(wild_pokemon, new_position, terrain)
|
||||
spawned_events << event
|
||||
else
|
||||
echoln "Couldn't spawn pokemon at #{new_position[0]}, #{new_position[1]}"
|
||||
end
|
||||
rescue
|
||||
next
|
||||
end
|
||||
end
|
||||
return spawned_events
|
||||
end
|
||||
|
||||
def get_spawning_terrain
|
||||
if ($PokemonGlobal.surfing || $PokemonGlobal.boat) && $PokemonEncounters.has_water_encounters?
|
||||
terrain = :Water
|
||||
elsif $PokemonEncounters.has_cave_encounters?
|
||||
terrain = :Cave
|
||||
elsif $PokemonEncounters.has_land_encounters?
|
||||
position, terrain = find_random_tall_grass_coordinates_near_player(5, 5, 3, max_nb_tries = 10)
|
||||
end
|
||||
return terrain
|
||||
end
|
||||
|
||||
def find_spawn_position(radius, min_distance=1)
|
||||
if ($PokemonGlobal.surfing || $PokemonGlobal.boat) && $PokemonEncounters.has_water_encounters?
|
||||
terrain = :Water
|
||||
position = find_random_surfable_coordinates_near_player(radius, radius, 3, max_nb_tries = 10)
|
||||
elsif $PokemonEncounters.has_cave_encounters?
|
||||
terrain = :Cave
|
||||
position = find_random_walkable_coordinates_near_player(radius, radius, 3, max_nb_tries = 10)
|
||||
elsif $PokemonEncounters.has_land_encounters?
|
||||
position, terrain = find_random_tall_grass_coordinates_near_player(radius, radius, 3, max_nb_tries = 10)
|
||||
end
|
||||
return unless position
|
||||
|
||||
player_x = $game_player.x
|
||||
player_y = $game_player.y
|
||||
|
||||
dx = position[0] - player_x
|
||||
dy = position[1] - player_y
|
||||
distance = Math.sqrt(dx * dx + dy * dy)
|
||||
|
||||
if distance >= min_distance && can_spawn_pokemon_there(position[0], position[1], terrain)
|
||||
return position
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
def can_spawn_pokemon_there(x, y, terrain)
|
||||
if terrain == :Water
|
||||
return $game_map.OWPokemonPassable?(x, y, DIRECTION_ALL) && $game_map.terrain_tag(x, y).can_surf
|
||||
end
|
||||
return $game_map.OWPokemonPassable?(x, y, DIRECTION_ALL)
|
||||
end
|
||||
|
||||
|
||||
#fisme: broken
|
||||
def spawn_overworld_pokemon(wild_pokemon, position, terrain, behavior_roaming = nil, behavior_noticed = nil)
|
||||
event = create_overworld_pokemon_event(wild_pokemon, position, terrain,
|
||||
behavior_roaming, behavior_noticed)
|
||||
$PokemonTemp.overworld_pokemon_on_map << event.id if event
|
||||
return event
|
||||
end
|
||||
|
||||
def despawn_overworld_pokemon(event_id, terrain)
|
||||
event = $game_map.events[event_id]
|
||||
if !event
|
||||
clearOverworldPokemon
|
||||
return
|
||||
end
|
||||
if event.pokemon.shiny? # re-add it ad the end of the list instead
|
||||
$PokemonTemp.overworld_pokemon_on_map.delete(event.id)
|
||||
$PokemonTemp.overworld_pokemon_on_map << event.id
|
||||
event_id = $PokemonTemp.overworld_pokemon_on_map[0]
|
||||
event = $game_map.events[event_id]
|
||||
end
|
||||
return unless event
|
||||
event.despawn
|
||||
playOverworldPokemonSpawnAnimation(event, terrain)
|
||||
end
|
||||
|
||||
class PokemonTemp
|
||||
attr_accessor :overworld_wild_battle_participants
|
||||
attr_accessor :overworld_wild_battle_triggered
|
||||
|
||||
attr_accessor :overworld_pokemon_on_map
|
||||
|
||||
attr_accessor :prevent_ow_encounters
|
||||
attr_accessor :prevent_ow_battles # For cutscenes where we stil want Pokemon to spawn but shouldn't encounter them (ex: Mr. Briney boat ride)
|
||||
|
||||
end
|
||||
|
||||
Events.onStepTaken += proc { |sender, e|
|
||||
next unless $scene.is_a?(Scene_Map)
|
||||
next unless Settings::GAME_ID == :IF_HOENN
|
||||
next if isRepelActive()
|
||||
if should_spawn_overworld_pokemon?
|
||||
spawn_random_overworld_pokemon_group
|
||||
end
|
||||
}
|
||||
|
||||
Events.onMapChanging += proc { |_sender, e|
|
||||
next unless Settings::HOENN
|
||||
clearOverworldPokemon
|
||||
}
|
||||
|
||||
def clearOverworldPokemon
|
||||
echoln "Clearing Overworld Pokemon"
|
||||
$game_map.events.clone.each do |id, event|
|
||||
if event.is_a?(DynamicOverworldPokemonEvent)
|
||||
event.despawn
|
||||
end
|
||||
end
|
||||
$PokemonTemp.pbClearTempEvents
|
||||
$PokemonTemp.overworld_pokemon_on_map = []
|
||||
$PokemonTemp.overworld_wild_battle_triggered = false
|
||||
$PokemonTemp.overworld_wild_battle_participants = []
|
||||
end
|
||||
|
||||
@@ -0,0 +1,163 @@
|
||||
OVERWORLD_POKEMON_EVENT_NAME = "OverworldPokemon"
|
||||
LEGENDARY_EVENT_NAME = "Legendary"
|
||||
# For adding wild overworld Pokemon as static events.
|
||||
#
|
||||
# The event needs to have the name OverworldPokemon and be have a first comment at the top setup like this
|
||||
# species = :SPECIES -> :SPECIES is the symbol of the Pokemon this event should be
|
||||
# min_level = 11 -> A number for the minimum level
|
||||
# max_level = 20 -> A number for the maximum level
|
||||
# behavior_roaming -> (Optional) The roaming behavior if it needs to be different from the default for that pokemon
|
||||
# behavior_noticed -> (Optional) The noticed behavior if it needs to be different from the default for that pokemon
|
||||
# spawn_chance ->(Optional) Random % chance for the event to actually spawn every time you enter the map
|
||||
#
|
||||
# Exemple:
|
||||
# OverworldPokemon
|
||||
# species= :SHARPEDO
|
||||
# level= 99
|
||||
# behavior_roaming=:still_teleport
|
||||
# behavior_noticed=:skittish
|
||||
#
|
||||
# This will automatically set the events graphic to the Pokemon. The event should be a parrallel process with a script call to overworldPokemonBehavior
|
||||
# See the EVENT_TEMPLATES map for an example (should be event #10 in there)
|
||||
#
|
||||
class Game_Event < Game_Character
|
||||
# Returns an array of lines in the first comment block at the top of the event.
|
||||
# Returns nil if the first command isn't a comment.
|
||||
def first_comment_block
|
||||
return nil if !@page || !@page.list || @page.list.empty?
|
||||
list = @page.list
|
||||
first_cmd = list[0]
|
||||
# Only proceed if the first line is a comment (code 108)
|
||||
return nil if first_cmd.code != 108
|
||||
|
||||
# Collect first line + continuation lines
|
||||
lines = [first_cmd.parameters[0]]
|
||||
i = 1
|
||||
while i < list.length && list[i].code == 408
|
||||
lines << list[i].parameters[0]
|
||||
i += 1
|
||||
end
|
||||
return lines # Array of strings
|
||||
end
|
||||
end
|
||||
|
||||
class Game_Map
|
||||
alias ow_game_map_create_new_event create_new_game_event
|
||||
|
||||
def create_new_game_event(event)
|
||||
# Only process events that actually belong to this map
|
||||
unless @map.events[event.id] == event
|
||||
return ow_game_map_create_new_event(event)
|
||||
end
|
||||
|
||||
if Settings::HOENN && event.name == OVERWORLD_POKEMON_EVENT_NAME
|
||||
begin
|
||||
game_event = StaticOverworldPokemonEvent.new(@map_id, event, self)
|
||||
setup_overworld_pokemon_from_comments(game_event)
|
||||
return game_event if game_event
|
||||
rescue
|
||||
return ow_game_map_create_new_event(event)
|
||||
end
|
||||
elsif event.name.start_with?(LEGENDARY_EVENT_NAME)
|
||||
species = extract_legendary_species_from_event_name(event.name)
|
||||
unless is_legendary_active?(species)
|
||||
event = ow_game_map_create_new_event(event)
|
||||
event.erase
|
||||
return event
|
||||
end
|
||||
end
|
||||
|
||||
return ow_game_map_create_new_event(event)
|
||||
end
|
||||
|
||||
def extract_legendary_species_from_event_name(eventName)
|
||||
match = eventName.match(/#{Regexp.escape(LEGENDARY_EVENT_NAME)}\(([^)]+)\)/) # Capture anything inside parentheses
|
||||
species = match[1] if match && match.length > 0
|
||||
return species.to_sym if species
|
||||
end
|
||||
|
||||
def setup_overworld_pokemon(event, pokemon, terrain = :Land, behavior_roaming = nil, behavior_noticed = nil)
|
||||
event.setup_pokemon(pokemon.species, pokemon.level, terrain, behavior_roaming, behavior_noticed)
|
||||
event.set_shiny if pokemon.isShiny?
|
||||
event.manual_ow_pokemon = true
|
||||
end
|
||||
|
||||
def setup_overworld_pokemon_from_comments(event)
|
||||
params = extract_parameters_from_comments(event)
|
||||
unless params && params.is_a?(Hash)
|
||||
raise "Error: Couldn't setup overworld Pokemon for event #{event.id} in map #{@map_id}"
|
||||
end
|
||||
spawn_chance = params[:spawn_chance]
|
||||
spawn_chance = 100 unless spawn_chance && spawn_chance.is_a?(Integer)
|
||||
should_spawn = spawn_chance >= rand(0..100)
|
||||
if should_spawn
|
||||
species = params[:species]
|
||||
min_level = params[:min_level]
|
||||
max_level = params[:max_level]
|
||||
terrain = params[:terrain] || :Land
|
||||
level = choose_level(min_level, max_level)
|
||||
ability = params[:ability]
|
||||
behavior_roaming = params[:behavior_roaming]
|
||||
behavior_noticed = params[:behavior_noticed]
|
||||
|
||||
always_on_top = event.always_on_top
|
||||
event.setup_pokemon(species, level, terrain, behavior_roaming, behavior_noticed)
|
||||
event.pokemon.ability= ability if ability
|
||||
event.set_swimming if params[:swimming]
|
||||
event.set_shiny if params[:shiny]
|
||||
event.always_on_top = always_on_top
|
||||
event.manual_ow_pokemon = true
|
||||
event.set_post_battle_switch(params[:post_battle_switch]) if params[:post_battle_switch]
|
||||
else
|
||||
event.erase
|
||||
end
|
||||
end
|
||||
|
||||
def extract_parameters_from_comments(event)
|
||||
comments = event.first_comment_block
|
||||
return nil if !comments || comments.empty?
|
||||
result = {}
|
||||
comments.each do |line|
|
||||
# Matches species = :PIKACHU (all caps after :)
|
||||
if line =~ /species\s*=\s*:(\b[A-Z0-9_]+\b)/
|
||||
result[:species] = $1.to_sym
|
||||
# Matches level = 25 (any integer)
|
||||
elsif line =~ /min_level\s*=\s*(\d+)/
|
||||
result[:min_level] = $1.to_i
|
||||
elsif line =~ /max_level\s*=\s*(\d+)/
|
||||
result[:max_level] = $1.to_i
|
||||
# Matches behavior_roaming = :random (any ruby symbol)
|
||||
elsif line =~ /behavior_roaming\s*=\s*:(\w+)/
|
||||
result[:behavior_roaming] = $1.to_sym
|
||||
# Matches behavior_noticed = :random (any ruby symbol)
|
||||
elsif line =~ /behavior_noticed\s*=\s*:(\w+)/
|
||||
result[:behavior_noticed] = $1.to_sym
|
||||
elsif line =~ /terrain\s*=\s*:(\w+)/
|
||||
result[:terrain] = $1.to_sym
|
||||
elsif line =~ /spawn_chance\s*=\s*(\d+)/
|
||||
result[:spawn_chance] = $1.to_i
|
||||
elsif line =~ /swimming/
|
||||
result[:swimming] = true
|
||||
elsif line =~ /flying/
|
||||
result[:flying] = true
|
||||
elsif line =~ /shiny/
|
||||
result[:shiny] = true
|
||||
elsif line =~ /ability\s*=\s*:(\w+)/
|
||||
result[:ability] = $1.to_sym
|
||||
elsif line =~ /switch\s*=\s*(\d+)/ # A switch that will be turned on after the pokemon is battled
|
||||
result[:post_battle_switch] = $1.to_i
|
||||
end
|
||||
end
|
||||
return result
|
||||
end
|
||||
|
||||
def choose_level(min_level, max_level)
|
||||
# raise "No level defined" if min_level.nil? && max_level.nil?
|
||||
return min_level if max_level.nil?
|
||||
return max_level if min_level.nil?
|
||||
return max_level if min_level > max_level
|
||||
rand(min_level..max_level)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@@ -0,0 +1,223 @@
|
||||
# todo:
|
||||
# - Jumping (Spoink)
|
||||
# - Dancing (turns around in a circle) - Oricorio, Spinda
|
||||
# Curious walks up to the trainer and then look at them at a distance of 1 tile instead of running into them
|
||||
|
||||
OW_BEHAVIOR_MOVE_ROUTES = {
|
||||
:roaming => {
|
||||
:look_around => [
|
||||
RPG::MoveCommand.new(PBMoveRoute::TurnRandom),
|
||||
RPG::MoveCommand.new(PBMoveRoute::End)
|
||||
],
|
||||
:look_around_player => [# Used for Pokeradar, looks towards the player more often
|
||||
RPG::MoveCommand.new(PBMoveRoute::TurnTowardPlayer),
|
||||
RPG::MoveCommand.new(PBMoveRoute::TurnRandom),
|
||||
RPG::MoveCommand.new(PBMoveRoute::End)
|
||||
],
|
||||
|
||||
:still_teleport =>
|
||||
[
|
||||
RPG::MoveCommand.new(PBMoveRoute::ChangeFreq, [3]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::TurnRandom),
|
||||
RPG::MoveCommand.new(PBMoveRoute::TurnRandom),
|
||||
RPG::MoveCommand.new(PBMoveRoute::PlayAnimation, [TELEPORT_ANIMATION_ID]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Opacity, [0]),
|
||||
|
||||
RPG::MoveCommand.new(PBMoveRoute::ChangeFreq, [6]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Random),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Random),
|
||||
RPG::MoveCommand.new(PBMoveRoute::PlayAnimation, [TELEPORT_ANIMATION_ID]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Opacity, [255]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::End)
|
||||
],
|
||||
|
||||
:random_burrow => [
|
||||
RPG::MoveCommand.new(PBMoveRoute::ChangeFreq, [3]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Random),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Random),
|
||||
RPG::MoveCommand.new(PBMoveRoute::PlayAnimation, [DUST_ANIMATION_ID]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Opacity, [0]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::TurnRandom),
|
||||
RPG::MoveCommand.new(PBMoveRoute::TurnRandom),
|
||||
RPG::MoveCommand.new(PBMoveRoute::PlayAnimation, [DUST_ANIMATION_ID]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Opacity, [255]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::TurnRandom),
|
||||
RPG::MoveCommand.new(PBMoveRoute::End)
|
||||
|
||||
],
|
||||
|
||||
:random_dive => [
|
||||
RPG::MoveCommand.new(PBMoveRoute::ChangeFreq, [3]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Random),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Random),
|
||||
RPG::MoveCommand.new(PBMoveRoute::PlayAnimation, [PUDDLE_ANIMATION_ID]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Opacity, [0]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::TurnRandom),
|
||||
RPG::MoveCommand.new(PBMoveRoute::TurnRandom),
|
||||
RPG::MoveCommand.new(PBMoveRoute::PlayAnimation, [PUDDLE_ANIMATION_ID]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Opacity, [255]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::TurnRandom),
|
||||
RPG::MoveCommand.new(PBMoveRoute::End)
|
||||
|
||||
],
|
||||
|
||||
:random_vanish => [
|
||||
RPG::MoveCommand.new(PBMoveRoute::ChangeFreq, [3]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Random),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Random),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Opacity, [100]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Wait, [2]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Opacity, [50]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Random),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Opacity, [100]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Wait, [2]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Opacity, [255]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::TurnRandom),
|
||||
RPG::MoveCommand.new(PBMoveRoute::End)
|
||||
],
|
||||
|
||||
:random_spin => [
|
||||
RPG::MoveCommand.new(PBMoveRoute::Random),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Random),
|
||||
RPG::MoveCommand.new(PBMoveRoute::ChangeFreq, [6]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::TurnRight90),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Wait, [2]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::TurnRight90),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Wait, [2]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::TurnRight90),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Wait, [2]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::TurnRight90),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Wait, [2]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::ChangeFreq, [3]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::End)
|
||||
|
||||
],
|
||||
|
||||
:charge => [
|
||||
RPG::MoveCommand.new(PBMoveRoute::ChangeFreq, [3]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::TurnRandom),
|
||||
RPG::MoveCommand.new(PBMoveRoute::TurnRandom),
|
||||
RPG::MoveCommand.new(PBMoveRoute::ChangeFreq, [6]),
|
||||
|
||||
RPG::MoveCommand.new(PBMoveRoute::PlayAnimation, [DUST_ANIMATION_ID]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Forward),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Forward),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Forward),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Forward),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Forward),
|
||||
RPG::MoveCommand.new(PBMoveRoute::End)
|
||||
|
||||
],
|
||||
|
||||
:uproar => [
|
||||
RPG::MoveCommand.new(PBMoveRoute::ChangeFreq, [6]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::TurnRandom),
|
||||
RPG::MoveCommand.new(PBMoveRoute::PlayAnimation, [DUST_ANIMATION_ID]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Forward),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Forward),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Forward),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Wait, [4]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::End)
|
||||
],
|
||||
|
||||
:water_skip => [
|
||||
RPG::MoveCommand.new(PBMoveRoute::ChangeFreq, [3]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::TurnRandom),
|
||||
RPG::MoveCommand.new(PBMoveRoute::TurnRandom),
|
||||
RPG::MoveCommand.new(PBMoveRoute::ChangeFreq, [6]),
|
||||
|
||||
RPG::MoveCommand.new(PBMoveRoute::PlayAnimation, [PUDDLE_ANIMATION_ID]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Forward),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Forward),
|
||||
RPG::MoveCommand.new(PBMoveRoute::PlayAnimation, [PUDDLE_ANIMATION_ID]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::End)
|
||||
],
|
||||
|
||||
|
||||
#WIND
|
||||
:blown_away => [
|
||||
RPG::MoveCommand.new(PBMoveRoute::ThroughOn),
|
||||
RPG::MoveCommand.new(PBMoveRoute::ChangeFreq, [6]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::ChangeSpeed, 3),
|
||||
|
||||
RPG::MoveCommand.new(PBMoveRoute::SetFloatingOn),
|
||||
RPG::MoveCommand.new(PBMoveRoute::DirectionFixOn),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Left),
|
||||
RPG::MoveCommand.new(PBMoveRoute::DirectionFixOff),
|
||||
RPG::MoveCommand.new(PBMoveRoute::TurnRandom),
|
||||
RPG::MoveCommand.new(PBMoveRoute::LowerLeft),
|
||||
RPG::MoveCommand.new(PBMoveRoute::DirectionFixOn),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Left),
|
||||
RPG::MoveCommand.new(PBMoveRoute::DirectionFixOff),
|
||||
RPG::MoveCommand.new(PBMoveRoute::TurnRandom),
|
||||
RPG::MoveCommand.new(PBMoveRoute::UpperLeft),
|
||||
|
||||
RPG::MoveCommand.new(PBMoveRoute::End)
|
||||
],
|
||||
|
||||
},
|
||||
|
||||
:noticed => {
|
||||
:shy => [
|
||||
RPG::MoveCommand.new(PBMoveRoute::ChangeFreq, [6]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::AwayFromPlayer),
|
||||
RPG::MoveCommand.new(PBMoveRoute::TurnTowardPlayer),
|
||||
RPG::MoveCommand.new(PBMoveRoute::ChangeFreq, [4]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::End)
|
||||
],
|
||||
:teleport_away => [
|
||||
RPG::MoveCommand.new(PBMoveRoute::ChangeFreq, [6]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::PlaySE, [RPG::AudioFile.new("SE_Zoom5")]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::PlayAnimation, [TELEPORT_ANIMATION_ID]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::TurnTowardPlayer),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Script, ["self.despawn"]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::End)
|
||||
],
|
||||
:flee => [
|
||||
RPG::MoveCommand.new(PBMoveRoute::ChangeFreq, [6]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Opacity, [200]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::AwayFromPlayer),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Opacity, [150]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::AwayFromPlayer),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Opacity, [100]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::AwayFromPlayer),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Opacity, [0]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Script, ["self.despawn"]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::End)
|
||||
],
|
||||
:flee_flying => [
|
||||
RPG::MoveCommand.new(PBMoveRoute::ChangeFreq, [6]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::TurnAwayFromPlayer),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Opacity, [200]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::UpperLeft),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Opacity, [150]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::UpperLeft),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Opacity, [100]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::UpperLeft),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Opacity, [0]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Script, ["self.despawn"]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::End)
|
||||
],
|
||||
:explode => [
|
||||
RPG::MoveCommand.new(PBMoveRoute::Script, ["self.set_animation_speed(2)"]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::StepAnimeOn),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Wait, [30]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Opacity, [0]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::PlayAnimation, [EXPLODE_ANIMATION]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Script, ["self.despawn"]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::End)
|
||||
],
|
||||
|
||||
:uproar => [
|
||||
RPG::MoveCommand.new(PBMoveRoute::ChangeFreq, [6]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::TurnRandom),
|
||||
RPG::MoveCommand.new(PBMoveRoute::PlayAnimation, [DUST_ANIMATION_ID]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Forward),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Forward),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Forward),
|
||||
RPG::MoveCommand.new(PBMoveRoute::Wait, [4]),
|
||||
RPG::MoveCommand.new(PBMoveRoute::End)
|
||||
],
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,868 @@
|
||||
# behavior_roaming:
|
||||
#
|
||||
# When roaming
|
||||
# :still Doesn't move at all
|
||||
# :look around Doesn't move, looks around randomly
|
||||
# :still_teleport Doesn't move, looks around randomly and randomly teleports a few tiles away once in a while
|
||||
# :random Walks randomly
|
||||
# :random_burrow Moves randomly and sometimes burrows underground and disappear for a few seconds.
|
||||
# :random_dive Moves randomly and sometimes dives underwater and disappear for a few seconds.
|
||||
# :random_vanish Moves randomly and sometimes becomes semi-transparent (opacity 50) for a few seconds
|
||||
# :random_spin Moves randomly and sometimes stops to do a little spin
|
||||
# :charge Turns a random direction and NYOOOM
|
||||
#
|
||||
#
|
||||
# When noticed
|
||||
# nil The Pokemon doesn't change behavior
|
||||
# :skittish The Pokémon walks away from the trainer fast until it's at a distance
|
||||
# :shy The Pokémon walks away from the trainer slowly, while looking at them
|
||||
# :curious The Pokémon walks towards the player slowly but stays at a distance when it's close
|
||||
# :semi_aggressive The Pokémon walks towards the player slowly until it starts a fight with them
|
||||
# :aggressive The Pokémon chases after the player until it starts a fight with them
|
||||
# :still The Pokémon doesn't move
|
||||
# :flee The Pokémon flees when it sees the player and despawns
|
||||
# :flee_flying The Pokémon flees by flying away (at an angle) when it sees the player and despawns
|
||||
# :teleport_away The Pokémon flees when it sees the player with a a teleport animation and despawns
|
||||
# :explode Waits a bit, then explodes (despawn)
|
||||
|
||||
|
||||
POKEMON_BEHAVIOR_DATA =
|
||||
{
|
||||
:BULBASAUR => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:IVYSAUR => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:VENUSAUR => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:CHARMANDER => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:CHARMELEON => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:CHARIZARD => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:SQUIRTLE => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:WARTORTLE => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:BLASTOISE => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:CATERPIE => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:METAPOD => { behavior_noticed: :still, behavior_roaming: :still },
|
||||
:BUTTERFREE => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:WEEDLE => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:KAKUNA => { behavior_noticed: :still, behavior_roaming: :still },
|
||||
:BEEDRILL => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:PIDGEY => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:PIDGEOTTO => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:PIDGEOT => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:RATTATA => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:RATICATE => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:SPEAROW => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:FEAROW => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:EKANS => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:ARBOK => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:PIKACHU => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:RAICHU => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:SANDSHREW => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:SANDSLASH => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:NIDORANfE => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:NIDORINA => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:NIDOQUEEN => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:NIDORANmA => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:NIDORINO => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:NIDOKING => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:CLEFAIRY => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:CLEFABLE => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:VULPIX => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:NINETALES => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:JIGGLYPUFF => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:WIGGLYTUFF => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:ZUBAT => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:GOLBAT => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:ODDISH => { behavior_noticed: :still, behavior_roaming: :random },
|
||||
:GLOOM => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:VILEPLUME => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:PARAS => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:PARASECT => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:VENONAT => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:VENOMOTH => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:DIGLETT => { behavior_noticed: :still, behavior_roaming: :random_burrow },
|
||||
:DUGTRIO => { behavior_noticed: :still, behavior_roaming: :random_burrow },
|
||||
:MEOWTH => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:PERSIAN => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:PSYDUCK => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:GOLDUCK => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:MANKEY => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:PRIMEAPE => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:GROWLITHE => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:ARCANINE => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:POLIWAG => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:POLIWHIRL => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:POLIWRATH => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:ABRA => { behavior_noticed: :teleport_away, behavior_roaming: :still_teleport },
|
||||
:KADABRA => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:ALAKAZAM => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:MACHOP => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:MACHOKE => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:MACHAMP => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:BELLSPROUT => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:WEEPINBELL => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:VICTREEBEL => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:TENTACOOL => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:TENTACRUEL => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:GEODUDE => { behavior_noticed: nil, behavior_roaming: :look_around},
|
||||
:GRAVELER => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:GOLEM => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:PONYTA => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:RAPIDASH => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:SLOWPOKE => { behavior_noticed: :still, behavior_roaming: :look_around },
|
||||
:SLOWBRO => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:MAGNEMITE => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:MAGNETON => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:FARFETCHD => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:DODUO => { behavior_noticed: :shy, behavior_roaming: :charge },
|
||||
:DODRIO => { behavior_noticed: :aggressive, behavior_roaming: :charge },
|
||||
:SEEL => { behavior_noticed: :curious, behavior_roaming: :random_dive },
|
||||
:DEWGONG => { behavior_noticed: nil, behavior_roaming: :random_dive },
|
||||
:GRIMER => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:MUK => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:SHELLDER => { behavior_noticed: :skittish, behavior_roaming: :look_around },
|
||||
:CLOYSTER => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:GASTLY => { behavior_noticed: :curious, behavior_roaming: :random_vanish },
|
||||
:HAUNTER => { behavior_noticed: :curious, behavior_roaming: :random_vanish },
|
||||
:GENGAR => { behavior_noticed: nil, behavior_roaming: :random_vanish },
|
||||
:ONIX => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:DROWZEE => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:HYPNO => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:KRABBY => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:KINGLER => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:VOLTORB => { behavior_noticed: :explode, behavior_roaming: :look_around },
|
||||
:ELECTRODE => { behavior_noticed: :explode, behavior_roaming: :random },
|
||||
:EXEGGCUTE => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:EXEGGUTOR => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:CUBONE => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:MAROWAK => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:HITMONLEE => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:HITMONCHAN => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:LICKITUNG => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:KOFFING => { behavior_noticed: :explode, behavior_roaming: :random },
|
||||
:WEEZING => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:RHYHORN => { behavior_noticed: :aggressive, behavior_roaming: :charge },
|
||||
:RHYDON => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:CHANSEY => { behavior_noticed: :flee, behavior_roaming: :random },
|
||||
:TANGELA => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:KANGASKHAN => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:HORSEA => { behavior_noticed: :shy, behavior_roaming: :random_dive },
|
||||
:SEADRA => { behavior_noticed: :aggressive, behavior_roaming: :random_dive },
|
||||
:GOLDEEN => { behavior_noticed: nil, behavior_roaming: :random_dive },
|
||||
:SEAKING => { behavior_noticed: nil, behavior_roaming: :random_dive },
|
||||
:STARYU => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:STARMIE => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:MRMIME => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:SCYTHER => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:JYNX => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:ELECTABUZZ => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:MAGMAR => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:PINSIR => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:TAUROS => { behavior_noticed: :aggressive, behavior_roaming: :charge },
|
||||
:MAGIKARP => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:GYARADOS => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:LAPRAS => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:DITTO => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:EEVEE => { behavior_noticed: :flee, behavior_roaming: :random },
|
||||
:VAPOREON => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:JOLTEON => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:FLAREON => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:PORYGON => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:OMANYTE => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:OMASTAR => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:KABUTO => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:KABUTOPS => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:AERODACTYL => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:SNORLAX => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:ARTICUNO => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:ZAPDOS => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:MOLTRES => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:DRATINI => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:DRAGONAIR => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:DRAGONITE => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:MEWTWO => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:MEW => { behavior_noticed: :flee, behavior_roaming: :random },
|
||||
:CHIKORITA => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:BAYLEEF => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:MEGANIUM => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:CYDAQUIL => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:QUILAVA => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:TYPHLOSION => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:TOTODILE => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:CROCONAW => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:FERALIGATR => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:SENTRET => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:FURRET => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:HOOTHOOT => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:NOCTOWL => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:LEDYBA => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:LEDIAN => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:SPINARAK => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:ARIADOS => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:CROBAT => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:CHINCHOU => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:LANTURN => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:PICHU => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:CLEFFA => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:IGGLYBUFF => { behavior_noticed: :curious, behavior_roaming: :random, behavior_wind_roaming: :blown_away },
|
||||
:TOGEPI => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:TOGETIC => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:NATU => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:XATU => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:MAREEP => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:FLAAFFY => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:AMPHAROS => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:BELLOSSOM => { behavior_noticed: nil, behavior_roaming: :random_spin },
|
||||
:MARILL => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:AZUMARILL => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:SUDOWOODO => { behavior_noticed: :still, behavior_roaming: :random, behavior_rain_roaming: :uproar },
|
||||
:POLITOED => { behavior_noticed: nil, behavior_roaming: :random, behavior_rain_roaming: :random_spin },
|
||||
:HOPPIP => { behavior_noticed: nil, behavior_roaming: :random, behavior_wind_roaming: :blown_away},
|
||||
:SKIPLOOM => { behavior_noticed: nil, behavior_roaming: :random, behavior_wind_roaming: :blown_away },
|
||||
:JUMPLUFF => { behavior_noticed: nil, behavior_roaming: :random, behavior_wind_roaming: :blown_away },
|
||||
:AIPOM => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:SUNKERN => { behavior_noticed: nil, behavior_roaming: :random, behavior_sunny_roaming: :random_spin},
|
||||
:SUNFLORA => { behavior_noticed: nil, behavior_roaming: :random, behavior_sunny_roaming: :random_spin },
|
||||
:YANMA => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:WOOPER => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:QUAGSIRE => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:ESPEON => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:UMBREON => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:MURKROW => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:SLOWKING => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:MISDREAVUS => { behavior_noticed: :curious, behavior_roaming: :random_vanish },
|
||||
:UNOWN => { behavior_noticed: :flee, behavior_roaming: :random },
|
||||
:WOBBUFFET => { behavior_noticed: :still, behavior_roaming: :random },
|
||||
:GIRAFARIG => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:PINECO => { behavior_noticed: :explode, behavior_roaming: :look_around },
|
||||
:FORRETRESS => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:DUNSPARCE => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:GLIGAR => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:STEELIX => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:SNUBBULL => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:GRANBULL => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:QWILFISH => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:SCIZOR => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:SHUCKLE => { behavior_noticed: :still, behavior_roaming: :random },
|
||||
:HERACROSS => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:SNEASEL => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:TEDDIURSA => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:URSARING => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:SLUGMA => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:MAGCARGO => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:SWINUB => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:PILOSWINE => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:CORSOLA => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:REMORAID => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:OCTILLERY => { behavior_noticed: :semi_aggressive, behavior_roaming: :random },
|
||||
:DELIBIRD => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:MANTINE => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:SKARMORY => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:HOUNDOUR => { behavior_noticed: :semi_aggressive, behavior_roaming: :random },
|
||||
:HOUNDOOM => { behavior_noticed: :semi_aggressive, behavior_roaming: :random },
|
||||
:KINGDRA => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:PHANPY => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:DONPHAN => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:PORYGON2 => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:STANTLER => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:SMEARGLE => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:TYROGUE => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:HITMONTOP => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:SMOOCHUM => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:ELEKID => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:MAGBY => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:MILTANK => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:BLISSEY => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:RAIKOU => { behavior_noticed: :flee, behavior_roaming: :random },
|
||||
:ENTEI => { behavior_noticed: :flee, behavior_roaming: :random },
|
||||
:LARVITAR => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:PUPITAR => { behavior_noticed: :aggressive, behavior_roaming: :look_around },
|
||||
:TYRANITAR => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:SUICUNE => { behavior_noticed: :flee, behavior_roaming: :random },
|
||||
:LUGIA => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:HOOH => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:CELEBI => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:TREECKO => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:GROVYLE => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:SCEPTILE => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:TORCHIC => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:COMBUSKEN => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:BLAZIKEN => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:MUDKIP => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:MARSHTOMP => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:SWAMPERT => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:POOCHYENA => { behavior_noticed: :semi_aggressive, behavior_roaming: :random },
|
||||
:MIGHTYENA => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:ZIGZAGOON => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:LINOONE => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:WURMPLE => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:SILCOON => { behavior_noticed: :still, behavior_roaming: :still },
|
||||
:BEAUTIFLY => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:CASCOON => { behavior_noticed: :still, behavior_roaming: :still },
|
||||
:DUSTOX => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:LOTAD => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:LOMBRE => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:LUDICOLO => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:SEEDOT => { behavior_noticed: :still, behavior_roaming: :random },
|
||||
:NUZLEAF => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:SHIFTRY => { behavior_noticed: :semi_aggressive, behavior_roaming: :random },
|
||||
:TAILLOW => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:SWELLOW => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:WINGULL => { behavior_noticed: :flee_flying, behavior_roaming: :random },
|
||||
:PELIPPER => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:RALTS => { behavior_noticed: :teleport_away, behavior_roaming: :random },
|
||||
:KIRLIA => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:GARDEVOIR => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:GALLADE => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:SURSKIT => { behavior_noticed: nil, behavior_roaming: :water_skip },
|
||||
:MASQUERAIN => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:SHROOMISH => { behavior_noticed: :still, behavior_roaming: :random },
|
||||
:BRELOOM => { behavior_noticed: :semi_aggressive, behavior_roaming: :random },
|
||||
:SLAKOTH => { behavior_noticed: :still, behavior_roaming: :look_around },
|
||||
:VIGOROTH => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:SLAKING => { behavior_noticed: :still, behavior_roaming: :look_around },
|
||||
:NINCADA => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:NINJASK => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:SHEDINJA => { behavior_noticed: :still, behavior_roaming: :still },
|
||||
:WHISMUR => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:LOUDRED => { behavior_noticed: :semi_aggressive, behavior_roaming: :random },
|
||||
:EXPLOUD => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:MAKUHITA => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:HARIYAMA => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:AZURILL => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:NOSEPASS => { behavior_noticed: :still, behavior_roaming: :still },
|
||||
:SKITTY => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:DELCATTY => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:SABLEYE => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:MAWILE => { behavior_noticed: :semi_aggressive, behavior_roaming: :random },
|
||||
:ARON => { behavior_noticed: :aggressive, behavior_roaming: :charge },
|
||||
:LAIRON => { behavior_noticed: :aggressive, behavior_roaming: :charge },
|
||||
:AGGRON => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:MEDITITE => { behavior_noticed: nil, behavior_roaming: :still },
|
||||
:MEDICHAM => { behavior_noticed: nil, behavior_roaming: :still },
|
||||
:ELECTRIKE => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:MANECTRIC => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:PLUSLE => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:MINUN => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:VOLBEAT => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:ILLUMISE => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:ROSELIA => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:GULPIN => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:SWALOT => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:CARVANHA => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:SHARPEDO => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:WAILMER => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:WAILORD => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:NUMEL => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:CAMERUPT => { behavior_noticed: :semi_aggressive, behavior_roaming: :random },
|
||||
:TORKOAL => { behavior_noticed: :still, behavior_roaming: :look_around },
|
||||
:SPOINK => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:GRUMPIG => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:SPINDA => { behavior_noticed: :curious, behavior_roaming: :random_spin },
|
||||
:TRAPINCH => { behavior_noticed: :still, behavior_roaming: :random },
|
||||
:VIBRAVA => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:FLYGON => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:CACNEA => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:CACTURNE => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:SWABLU => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:ALTARIA => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:ZANGOOSE => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:SEVIPER => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:LUNATONE => { behavior_noticed: :still, behavior_roaming: :random },
|
||||
:SOLROCK => { behavior_noticed: :still, behavior_roaming: :random },
|
||||
:BARBOACH => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:WHISCASH => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:CORPHISH => { behavior_noticed: :semi_aggressive, behavior_roaming: :random },
|
||||
:CRAWDAUNT => { behavior_noticed: :semi_aggressive, behavior_roaming: :random },
|
||||
:BALTOY => { behavior_noticed: :still, behavior_roaming: :random },
|
||||
:CLAYDOL => { behavior_noticed: :still, behavior_roaming: :random },
|
||||
:LILEEP => { behavior_noticed: :still, behavior_roaming: :random },
|
||||
:CRADILY => { behavior_noticed: :still, behavior_roaming: :random },
|
||||
:ANORITH => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:ARMALDO => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:FEEBAS => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:MILOTIC => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:CASTFORM => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:CASTFORM_SUNNY => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:CASTFORM_RAINY => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:CASTFORM_SNOWY => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:KECLEON => { behavior_noticed: :still, behavior_roaming: :random },
|
||||
:SHUPPET => { behavior_noticed: :curious, behavior_roaming: :random_vanish },
|
||||
:BANETTE => { behavior_noticed: :semi_aggressive, behavior_roaming: :random_vanish },
|
||||
:DUSKULL => { behavior_noticed: :skittish, behavior_roaming: :random_vanish },
|
||||
:DUSCLOPS => { behavior_noticed: :still, behavior_roaming: :random_vanish },
|
||||
:TROPIUS => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:ABSOL => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:WYNAUT => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:SNORUNT => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:GLALIE => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:FROSLASS => { behavior_noticed: :skittish, behavior_roaming: :random_vanish },
|
||||
:SPHEAL => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:SEALEO => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:WALREIN => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:CLAMPERL => { behavior_noticed: :still, behavior_roaming: :still },
|
||||
:HUNTAIL => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:GOREBYSS => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:RELICANTH => { behavior_noticed: :still, behavior_roaming: :random },
|
||||
:LUVDISC => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:BAGON => { behavior_noticed: :semi_aggressive, behavior_roaming: :random },
|
||||
:SHELGON => { behavior_noticed: :still, behavior_roaming: :random },
|
||||
:SALAMENCE => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:BELDUM => { behavior_noticed: :still, behavior_roaming: :random },
|
||||
:METANG => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:METAGROSS => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:REGIROCK => { behavior_noticed: :still, behavior_roaming: :look_around },
|
||||
:REGICE => { behavior_noticed: :still, behavior_roaming: :look_around },
|
||||
:REGISTEEL => { behavior_noticed: :still, behavior_roaming: :look_around },
|
||||
:LATIAS => { behavior_noticed: :flee, behavior_roaming: :random },
|
||||
:LATIOS => { behavior_noticed: :flee, behavior_roaming: :random },
|
||||
:KYOGRE => { behavior_noticed: :still, behavior_roaming: :still },
|
||||
:GROUDON => { behavior_noticed: :aggressive, behavior_roaming: :still },
|
||||
:RAYQUAZA => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:JIRACHI => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:DEOXYS => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:TURTWIG => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:GROTLE => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:TORTERRA => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:CHIMCHAR => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:MONFERNO => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:INFERNAPE => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:PIPLUP => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:PRINPLUP => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:EMPOLEON => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:STARLY => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:STARAVIA => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:STARAPTOR => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:BIDOOF => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:BIBAREL => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:KRICKETOT => { behavior_noticed: :shy, behavior_roaming: :look_around },
|
||||
:KRICKETUNE => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:SHINX => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:LUXIO => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:LUXRAY => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:BUDEW => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:ROSERADE => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:CRANIDOS => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:RAMPARDOS => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:SHIELDON => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:BASTIODON => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:BURMY_P => { behavior_noticed: :shy, behavior_roaming: :still },
|
||||
:BURMY_S => { behavior_noticed: :shy, behavior_roaming: :still },
|
||||
:BURMY_T => { behavior_noticed: :shy, behavior_roaming: :still },
|
||||
:WORMADAM_P => { behavior_noticed: :still, behavior_roaming: :still },
|
||||
:WORMADAM_S => { behavior_noticed: :still, behavior_roaming: :still },
|
||||
:WORMADAM_T => { behavior_noticed: :still, behavior_roaming: :still },
|
||||
:MOTHIM => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:COMBEE => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:VESPIQUEN => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:PACHIRISU => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:BUIZEL => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:FLOATZEL => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:CHERUBI => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:CHERRIM_O => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:CHERRIM_S => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:SHELLOS_E => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:SHELLOS_W => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:GASTRODON_E => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:GASTRODON_W => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:AMBIPOM => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:DRIFLOON => { behavior_noticed: :curious, behavior_roaming: :random, behavior_wind_roaming: :blown_away },
|
||||
:DRIFBLIM => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:BUNEARY => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:LOPUNNY => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:MISMAGIUS => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:HONCHKROW => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:GLAMEOW => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:PURUGLY => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:CHINGLING => { behavior_noticed: :flee, behavior_roaming: :random },
|
||||
:CHIMECHO => { behavior_noticed: :flee, behavior_roaming: :random },
|
||||
:STUNKY => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:SKUNTANK => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:BRONZOR => { behavior_noticed: :still, behavior_roaming: :random },
|
||||
:BRONZONG => { behavior_noticed: :still, behavior_roaming: :random },
|
||||
:BONSLY => { behavior_noticed: :shy, behavior_roaming: :random, behavior_rain_roaming: :uproar },
|
||||
:MIMEJR => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:HAPPINY => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:CHATOT => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:SPIRITOMB => { behavior_noticed: :still, behavior_roaming: :still },
|
||||
:GIBLE => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:GABITE => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:GARCHOMP => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:MUNCHLAX => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:RIOLU => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:LUCARIO => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:HIPPOPOTAS => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:HIPPOWDON => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:SKORUPI => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:DRAPION => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:CROAGUNK => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:TOXICROAK => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:CARNIVINE => { behavior_noticed: :aggressive, behavior_roaming: :look_around },
|
||||
:FINNEON => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:LUMINEON => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:SNOVER => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:ABOMASNOW => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:WEAVILE => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:MAGNEZONE => { behavior_noticed: :still, behavior_roaming: :random },
|
||||
:LICKILICKY => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:RHYFERIOR => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:TANGROWTH => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:ELECTIVIRE => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:MAGMORTAR => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:TOGEKISS => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:YANMEGA => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:LEAFEON => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:GLACEON => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:GLISCOR => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:MAMOSWINE => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:PORYGON_Z => { behavior_noticed: :still, behavior_roaming: :random },
|
||||
:PROBOPASS => { behavior_noticed: :still, behavior_roaming: :look_around },
|
||||
:DUSKNOIR => { behavior_noticed: :aggressive, behavior_roaming: :random_vanish },
|
||||
:ROTOM => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:UXIE => { behavior_noticed: :flee, behavior_roaming: :look_around },
|
||||
:MESPRIT => { behavior_noticed: :flee, behavior_roaming: :look_around },
|
||||
:AZELF => { behavior_noticed: :flee, behavior_roaming: :look_around },
|
||||
:DIALGA => { behavior_noticed: :aggressive, behavior_roaming: :look_around },
|
||||
:PALKIA => { behavior_noticed: :aggressive, behavior_roaming: :look_around },
|
||||
:HEATRAN => { behavior_noticed: :aggressive, behavior_roaming: :look_around },
|
||||
:REGIGIGAS => { behavior_noticed: :still, behavior_roaming: :look_around },
|
||||
:GIRATINA => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:CRESSELIA => { behavior_noticed: :flee, behavior_roaming: :random },
|
||||
:DARKRAI => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:SHAYMIN => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:SHAYMIN_SKY => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:ARCEUS => { behavior_noticed: :still, behavior_roaming: :look_around },
|
||||
:VICTINI => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:SNIVY => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:SERVINE => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:SERPERIOR => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:TEPIG => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:PIGNITE => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:EMBOAR => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:OSHAWOTT => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:DEWOTT => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:SAMUROTT => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:PATRAT => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:WATCHOG => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:LILLIPUP => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:HERDIER => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:STOUTLAND => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:PURRLOIN => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:LIEPARD => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:PANSAGE => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:SIMISAGE => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:PANSEAR => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:SIMISEAR => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:PANPOUR => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:SIMIPOUR => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:MUNNA => { behavior_noticed: :still, behavior_roaming: :look_around },
|
||||
:MUSHARNA => { behavior_noticed: :still, behavior_roaming: :look_around },
|
||||
:PIDOY => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:TRANQUILL => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:UNFEZANT => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:BLITZLE => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:ZEBSTRIKA => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:ROGGENROLA => { behavior_noticed: :still, behavior_roaming: :look_around },
|
||||
:BOLDORE => { behavior_noticed: :still, behavior_roaming: :look_around },
|
||||
:GIGALITH => { behavior_noticed: :still, behavior_roaming: :look_around },
|
||||
:WOOBAT => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:SWOOBAT => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:DRILBUR => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:EXCADRILL => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:AUDINO => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:TIMBURR => { behavior_noticed: :semi_aggressive, behavior_roaming: :random },
|
||||
:GURDURR => { behavior_noticed: :semi_aggressive, behavior_roaming: :random },
|
||||
:CONKELDURR => { behavior_noticed: :semi_aggressive, behavior_roaming: :random },
|
||||
:TYMPOLE => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:PALPITOAD => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:SEISMITOAD => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:THROH => { behavior_noticed: :semi_aggressive, behavior_roaming: :random },
|
||||
:SAWK => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:SEWADDLE => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:SWADLOON => { behavior_noticed: :still, behavior_roaming: :look_around },
|
||||
:LEAVANNY => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:VENIPEDE => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:WHIRLIPEDE => { behavior_noticed: :still, behavior_roaming: :charge },
|
||||
:SCOLIPEDE => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:COTTONEE => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:WHIMSICOTT => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:PETILIL => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:LILLIGANT => { behavior_noticed: nil, behavior_roaming: :random_spin },
|
||||
:BASCULIN => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:SANDILE => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:KROKOROK => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:KROOKODILE => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:DARUMAKA => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:DARMANITAN => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:DARMANITAN_ZEN => { behavior_noticed: :still, behavior_roaming: :still },
|
||||
:MARACTUS => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:DWEBBLE => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:CRUSTLE => { behavior_noticed: :still, behavior_roaming: :random },
|
||||
:SCRAGGY => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:SCRAFTY => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:SIGILYPH => { behavior_noticed: :still, behavior_roaming: :random },
|
||||
:YAMASK => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:COFAGRIGUS => { behavior_noticed: :still, behavior_roaming: :random },
|
||||
:TIRTOUGA => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:CARRACOSTA => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:ARCHEN => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:ARCHEOPS => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:TRUBBISH => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:GARBODOR => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:ZORUA => { behavior_noticed: :flee, behavior_roaming: :random },
|
||||
:ZOROARK => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:MINCCINO => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:CINCCINO => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:GOTHITA => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:GOTHORITA => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:GOTHITELLE => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:SOLOSIS => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:DUOSION => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:REUNICLUS => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:DUCKLETT => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:SWANNA => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:VANILLITE => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:VANILLISH => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:VANILLUXE => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:DEERLING_SPRING => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:DEERLING_SUMMER => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:DEERLING_AUTUMN => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:DEERLING_WINTER => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:SAWSBUCK_SPRING => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:SAWSBUCK_SUMMER => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:SAWSBUCK_AUTUMN => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:SAWSBUCK_WINTER => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:EMOLGA => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:KARRABLAST => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:ESCAVALIER => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:FOONGUS => { behavior_noticed: :still, behavior_roaming: :random },
|
||||
:AMOONGUSS => { behavior_noticed: :still, behavior_roaming: :random },
|
||||
:FRILLISH => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:JELLICENT => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:JOLTIK => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:GALVANTULA => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:FERROSEED => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:FERROTHORN => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:KLINK => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:KLANG => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:KLINKLANG => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:TYNAMO => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:EELEKTRIK => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:EELEKTROSS => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:ELGYEM => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:BEHEEYEM => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:LITWICK => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:LAMPENT => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:CHANDELURE => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:AXEW => { behavior_noticed: :semi_aggressive, behavior_roaming: :random },
|
||||
:FRAXURE => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:HAXORUS => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:CUBCHOO => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:BEARTIC => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:CRYOGONAL => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:SHELMET => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:ACCELGOR => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:STUNFISK => { behavior_noticed: :shy, behavior_roaming: :still },
|
||||
:MIENFOO => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:MIENSHAO => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:DRUDDIGON => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:GOLETT => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:GOLURK => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:PAWNIARD => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:BISHARP => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:BOUFFALANT => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:RUFFLET => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:BRAVIARY => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:VULLABY => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:MANDIBUZZ => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:HEATMOR => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:DURANT => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:DEINO => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:ZWEILOUS => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:HYDREIGON => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:LARVESTA => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:VOLCARONA => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:COBALION => { behavior_noticed: nil, behavior_roaming: :look_around },
|
||||
:TERRAKION => { behavior_noticed: :aggressive, behavior_roaming: :look_around },
|
||||
:VIRIZION => { behavior_noticed: :skittish, behavior_roaming: :look_around },
|
||||
:TORNADUS => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:TORNADUS_T => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:THUNDURUS => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:THUNDURUS_T => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:RESHIRAM => { behavior_noticed: :aggressive, behavior_roaming: :look_around },
|
||||
:ZEKROM => { behavior_noticed: :aggressive, behavior_roaming: :look_around },
|
||||
:LANDORUS => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:LANDORUS_T => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:KYUREM => { behavior_noticed: :aggressive, behavior_roaming: :look_around },
|
||||
:KELDEO => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:MELOETTA_A => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:MELOETTA_P => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:GENESECT => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:CHESPIN => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:QUILLADIN => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:CHESNAUGHT => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:FENNEKIN => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:BRAIXEN => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:DELPHOX => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:FROAKIE => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:FROGADIER => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:GRENINJA => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:BUNNELBY => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:DIGGERSBY => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:FLETCHLING => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:FLETCHINDER => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:TALONFLAME => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:SCATTERBUG => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:SPEWPA => { behavior_noticed: :still, behavior_roaming: :still },
|
||||
:VIVILLON => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:LITLEO => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:PYROAR => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:FLABEBE => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:FLOETTE => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:FLORGES => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:SKIDDO => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:GOGOAT => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:PANCHAM => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:PANGORO => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:FURFROU => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:ESPURR => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:MEOWSTIC_F => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:MEOWSTIC_M => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:HONEDGE => { behavior_noticed: :still, behavior_roaming: :random },
|
||||
:DOUBLADE => { behavior_noticed: :still, behavior_roaming: :random },
|
||||
:AEGISLASH => { behavior_noticed: :still, behavior_roaming: :random },
|
||||
:SPRITZEE => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:AROMATISSE => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:SWIRLIX => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:SLURPUFF => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:INKAY => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:MALAMAR => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:BINACLE => { behavior_noticed: :still, behavior_roaming: :look_around },
|
||||
:BARBARACLE => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:SKRELP => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:DRAGALGE => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:CLAUNCHER => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:CLAWITZER => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:HELIOPTILE => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:HELIOLISK => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:TYRUNT => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:TYRANTRUM => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:AMAURA => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:AURORUS => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:SYLVEON => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:HAWLUCHA => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:DEDENNE => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:CARBINK => { behavior_noticed: :still, behavior_roaming: :look_around },
|
||||
:GOOMY => { behavior_noticed: :shy, behavior_roaming: :random, behavior_rain_roaming: :random_spin },
|
||||
:SLIGGOO => { behavior_noticed: nil, behavior_roaming: :random, behavior_rain_roaming: :random_spin },
|
||||
:GOODRA => { behavior_noticed: nil, behavior_roaming: :random,behavior_rain_roaming: :random_spin },
|
||||
:KLEFKI => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:PHANTUMP => { behavior_noticed: :shy, behavior_roaming: :random_vanish },
|
||||
:TREVENANT => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:PUMPKABOO => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:GOURGEIST => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:BERGMITE => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:AVALUGG => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:NOIBAT => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:NOIVERN => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:XERNEAS => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:YVELTAL => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:ZYGARDE => { behavior_noticed: :still, behavior_roaming: :look_around },
|
||||
:DIANCIE => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:HOOPA => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:HOOPA_UNBOUND => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:VOLCANION => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:ROWLET => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:DARTRIX => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:DECIDUEYE => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:LITTEN => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:TORRACAT => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:INCINEROAR => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:POPPLIO => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:BRIONNE => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:PRIMARINA => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:PIKIPEK => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:TRUMBEAK => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:TOUCANNON => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:YUNGOOS => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:GUMSHOOS => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:GRUBBIN => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:CHARJABUG => { behavior_noticed: :still, behavior_roaming: :look_around },
|
||||
:VIKAVOLT => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:CRABRAWLER => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:CRABOMINABLE => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:ORICORIO_1 => { behavior_noticed: :curious, behavior_roaming: :random_spin },
|
||||
:ORICORIO_2 => { behavior_noticed: :curious, behavior_roaming: :random_spin },
|
||||
:ORICORIO_3 => { behavior_noticed: :curious, behavior_roaming: :random_spin },
|
||||
:ORICORIO_4 => { behavior_noticed: :curious, behavior_roaming: :random_spin },
|
||||
:CUTIEFLY => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:RIBOMBEE => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:ROCKRUFF => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:LYCANROC_D => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:LYCANROC_DUSK => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:LYCANROC_N => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:WISHIWASHI => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:WISHIWASHI_SCHOOL => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:MAREANIE => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:TOXAPEX => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:MUDSDALE => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:DEWPIDER => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:ARAQUANID => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:FOMANTIS => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:LURANTIS => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:MORELULL => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:SHIINOTIC => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:STUFFUL => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:BEWEAR => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:BOUNSWEET => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:STEENEE => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:TSAREENA => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:COMFEY => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:ORANGURU => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:PASSIMIAN => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:WIMPOD => { behavior_noticed: :flee, behavior_roaming: :random },
|
||||
:GOLISOPOD => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:SANDYGAST => { behavior_noticed: :still, behavior_roaming: :still },
|
||||
:PALOSSAND => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:PYUKUMUKU => { behavior_noticed: :still, behavior_roaming: :look_around },
|
||||
:TYPE_NULL => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:SILVALLY => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:MINIOR_C => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:MINIOR_M => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:KOMALA => { behavior_noticed: nil, behavior_roaming: :look_around },
|
||||
:TURTONATOR => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:TOGEDEMARU => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:MIMIKYU => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:BRUXISH => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:DRAMPA => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:DHELMISE => { behavior_noticed: :still, behavior_roaming: :look_around },
|
||||
:JANGMOO => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:HAKAMOO => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:KOMMOO => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:TAPU_KOKO => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:TAPU_LELE => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:TAPU_BULU => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:TAPU_FINI => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:COSMOG => { behavior_noticed: :flee, behavior_roaming: :random },
|
||||
:COSMOEM => { behavior_noticed: :still, behavior_roaming: :look_around },
|
||||
:SOLGALEO => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:LUNALA => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:NIHILEGO => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:BUZZWOLE => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:PHEROMOSA => { behavior_noticed: :skittish, behavior_roaming: :random },
|
||||
:XYURKITREE => { behavior_noticed: :still, behavior_roaming: :look_around },
|
||||
:CELESTEELA => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:KARTANA => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:GUZZLORD => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:NECROZMA => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:U_NECROZMA => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:MAGEARNA => { behavior_noticed: nil, behavior_roaming: :random },
|
||||
:MARSHADOW => { behavior_noticed: :shy, behavior_roaming: :random },
|
||||
:POIPOLE => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:NAGANADEL => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:STAKATAKA => { behavior_noticed: :still, behavior_roaming: :look_around },
|
||||
:BLACEPHALON => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:ZERAORA => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
:MELTAN => { behavior_noticed: :curious, behavior_roaming: :random },
|
||||
:MELMETAL => { behavior_noticed: :aggressive, behavior_roaming: :random },
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,96 @@
|
||||
#####
|
||||
# Noticing player
|
||||
# ###12
|
||||
|
||||
def get_base_sprite_path(is_fusion, shiny=false)
|
||||
base_path = "Followers/"
|
||||
if is_fusion
|
||||
base_path += "Fusions/"
|
||||
end
|
||||
if shiny
|
||||
base_path += "Shiny/"
|
||||
end
|
||||
return base_path
|
||||
end
|
||||
|
||||
def getRoamingSprite(species_data,shiny=false)
|
||||
landPath = getOverworldLandPath(species_data,shiny)
|
||||
return landPath if landPath
|
||||
|
||||
flyingPath = getOverworldFlyingPath(species_data,shiny)
|
||||
return flyingPath if flyingPath
|
||||
end
|
||||
|
||||
def getOverworldLandPath(species_data,shiny=false)
|
||||
species = species_data.species
|
||||
is_fusion = isSpeciesFusion(species)
|
||||
if is_fusion
|
||||
species_name = species_data.get_body_species_symbol.to_s
|
||||
else
|
||||
species_name = species_data.species.to_s
|
||||
end
|
||||
base_path = get_base_sprite_path(is_fusion, shiny)
|
||||
path = "#{base_path}#{species_name}"
|
||||
if pbResolveBitmap("Graphics/Characters/#{path}")
|
||||
return path
|
||||
end
|
||||
end
|
||||
|
||||
def getOverworldFlyingPath(species_data,shiny=false)
|
||||
species = species_data.species
|
||||
is_fusion = isSpeciesFusion(species)
|
||||
if is_fusion
|
||||
species_name = species_data.get_body_species_symbol.to_s
|
||||
else
|
||||
species_name = species.to_s
|
||||
end
|
||||
base_path = get_base_sprite_path(is_fusion, shiny)
|
||||
path = "#{base_path}#{species_name}_fly"
|
||||
if pbResolveBitmap("Graphics/Characters/#{path}")
|
||||
return path
|
||||
end
|
||||
end
|
||||
|
||||
def getOverworldNoticedPath(species_data,shiny=false)
|
||||
species = species_data.species
|
||||
is_fusion = isSpeciesFusion(species)
|
||||
if is_fusion
|
||||
species_name = species_data.get_body_species_symbol.to_s
|
||||
else
|
||||
species_name = species.to_s
|
||||
end
|
||||
base_path = get_base_sprite_path(is_fusion, shiny)
|
||||
path = "#{base_path}#{species_name}_notice"
|
||||
if pbResolveBitmap("Graphics/Characters/#{path}")
|
||||
return path
|
||||
end
|
||||
end
|
||||
|
||||
def getOverworldSwimmingPath(species_data,shiny=false)
|
||||
species = species_data.species
|
||||
|
||||
is_fusion = isSpeciesFusion(species)
|
||||
if is_fusion
|
||||
species_name = species_data.get_body_species_symbol.to_s
|
||||
else
|
||||
species_name = species.to_s
|
||||
end
|
||||
base_path = get_base_sprite_path(is_fusion, shiny)
|
||||
path = "#{base_path}#{species_name}_swim"
|
||||
if pbResolveBitmap("Graphics/Characters/#{path}")
|
||||
return path
|
||||
end
|
||||
end
|
||||
|
||||
def getRandomPokemonFromRoute(excluded_species,terrain)
|
||||
random_species = excluded_species
|
||||
limit = 5
|
||||
i=0
|
||||
while random_species == excluded_species || i < limit
|
||||
terrain_type = getTimeBasedEncounter(terrain)
|
||||
wild_pokemon = getRegularEncounter(terrain_type)
|
||||
random_species = wild_pokemon[0] if wild_pokemon.is_a?(Array)
|
||||
i+=1
|
||||
end
|
||||
return GameData::Species.get(random_species)
|
||||
end
|
||||
Reference in New Issue
Block a user