Update 6.8

This commit is contained in:
chardub
2026-07-10 15:42:06 -04:00
parent 5b85e72cb2
commit 6a6f126a18
7871 changed files with 493194 additions and 224826 deletions
@@ -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 (1255) ---
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 12
# 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