Release 6.9.0

This commit is contained in:
chardub
2026-11-02 11:34:46 -05:00
parent 060726298d
commit ae6e2ebc64
5697 changed files with 131795 additions and 17423 deletions
@@ -1,3 +1,5 @@
class OverworldPokemonEvent < Game_Event
attr_accessor :species
@@ -14,6 +16,8 @@ class OverworldPokemonEvent < Game_Event
attr_reader :noticed_player_once
attr_reader :last_facing_direction
attr_reader :glow_in_the_dark
DISTANCE_FOR_DESPAWN = 16
FLEEING_BEHAVIORS = [:flee, :flee_flying, :teleport_away]
@@ -33,7 +37,7 @@ class OverworldPokemonEvent < Game_Event
@disguised = false
species_data = GameData::Species.get(@species)
@pokemon = Pokemon.new(@species, @level)
@pokemon = pbGenerateWildPokemon(@species,@level)#Pokemon.new(@species, @level)
@behavior_species = getBehaviorSpecies(species_data)
unless behavior_roaming
@@ -64,6 +68,7 @@ class OverworldPokemonEvent < Game_Event
@current_state = :ROAMING # Possible values: :ROAMING, :NOTICED_PLAYER, :FLEEING
@noticed_player_once = false
@manual_ow_pokemon = false
@manual_appearance = nil #if this is set to something, it overrides the pokemon's normal appearance
#@event.name = "OW/#{species.to_s}/#{level.to_s}"
weather = $game_weather.get_current_map_weather if $game_weather
if weather
@@ -86,6 +91,7 @@ class OverworldPokemonEvent < Game_Event
@step_anime = @is_flying
@forced_z = 300 if @is_flying && $PokemonGlobal.boat #@always_on_top = @is_flying
@part_of_pokeradar_chain = is_pokeradar_chain
@pack_size = 0
if @terrain == :Water
set_swimming
end
@@ -95,11 +101,28 @@ class OverworldPokemonEvent < Game_Event
pbSEPlay("shiny", 60)
playAnimation(Settings::SPARKLE_SHORT_ANIMATION_ID, @x, @y)
end
if POKEMON_BEHAVIOR_DATA[@behavior_species][:hop_cliff]
@can_hop_cliff = true
end
set_roaming_movement
@last_facing_direction = @direction
setup_glow
@setup_complete = true
end
def setup_glow
unless Settings::EXPERIMENTAL_FEATURES
@glow_in_the_dark = false
return
end
@glow_in_the_dark = POKEMON_BEHAVIOR_DATA[@behavior_species][:glow_in_the_dark]
if @glow_in_the_dark
@light_effect = LightEffect_PokemonGlow.new(self)
$scene.spriteset.addUserSprite(@light_effect)
end
end
def roll_for_special_encounters
# Mew encounter
if rand(15100) < Settings::MEW_OW_ENCOUNTER_CHANCE
@@ -115,6 +138,7 @@ class OverworldPokemonEvent < Game_Event
initialize_sprite(@terrain, species_data)
end
def is_pokeradar_chain
if $PokemonTemp.pokeradar
pokeradar_species = $PokemonTemp.pokeradar[0]
@@ -138,6 +162,15 @@ class OverworldPokemonEvent < Game_Event
return GameData::Species.get(@species)
end
def override_appearance(sprite_path)
set_sprite(sprite_path)
@manual_appearance =sprite_path
end
def cancel_appearance_override()
@manual_appearance =nil
end
def get_behavior_for_species(species, behavior_type)
behavior = POKEMON_BEHAVIOR_DATA[species][behavior_type]
if @terrain == :Water
@@ -190,11 +223,21 @@ class OverworldPokemonEvent < Game_Event
return @species
end
def getBodySpecies
is_fusion = isSpeciesFusion(@species)
if is_fusion
return GameData::Species.get(@species).get_body_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?)
@idle_animation_sprite = getOverworldIdleAnimation(species_data,@is_flying, @pokemon.shiny?)
@noticed_sprite = getOverworldNoticedPath(species_data, @pokemon.shiny?)
@noticed_sprite = @flying_sprite if !@noticed_sprite && @flying_sprite
@roaming_sprite = @land_sprite
@@ -207,6 +250,13 @@ class OverworldPokemonEvent < Game_Event
end
end
def pokemon
unless @pokemon
@pokemon = Pokemon.new(@species, @level)
end
return @pokemon
end
def initialize_water_sprite
if @flying_sprite
@character_name = @flying_sprite
@@ -228,7 +278,9 @@ class OverworldPokemonEvent < Game_Event
def get_current_state
return @current_state
end
def is_eating?
return @noticed_pokemon_behavior == :eat_pokeblock
end
####
# ACTIONS
# ###
@@ -252,7 +304,7 @@ class OverworldPokemonEvent < Game_Event
return
end
def flee(behavior)
def flee(behavior=nil)
return if @pokemon.shiny?
playCry(@species)
pbSEPlay(SE_FLEE)
@@ -299,18 +351,31 @@ class OverworldPokemonEvent < Game_Event
initialize_sprite(@terrain, species_data)
end
def playDetectPlayerAnimation
return unless @current_state == :ROAMING
return unless noticed_state_different_from_roaming()
ANIMATION_OW_CURIOUS = 41
ANIMATION_OW_ANGRY = 42
ANIMATION_OW_EXCITED = 43
ANIMATION_OW_SURPRISED = 44
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)
def playDetectAnimation(behavior_noticed = @behavior_noticed, play_sound = true)
return unless @current_state == :ROAMING
return unless @behavior_noticed
#return unless noticed_state_different_from_roaming()
if behavior_noticed == :curious
pbSEPlay("Exclaim") if play_sound
playAnimation(ANIMATION_OW_CURIOUS, @x, @y)
elsif behavior_noticed == :aggressive
pbSEPlay("angry") if play_sound
playAnimation(ANIMATION_OW_ANGRY, @x, @y)
elsif behavior_noticed == :excited
pbSEPlay("Exclaim") if play_sound
playAnimation(ANIMATION_OW_EXCITED, @x, @y)
elsif behavior_noticed == :semi_aggressive
pbSEPlay("angry") if play_sound
playAnimation(ANIMATION_OW_ANGRY, @x, @y)
else
playAnimation(Settings::EXCLAMATION_ANIMATION_ID, @x, @y)
pbSEPlay("Exclaim") if play_sound
playAnimation(ANIMATION_OW_SURPRISED, @x, @y)
end
end
@@ -323,13 +388,15 @@ class OverworldPokemonEvent < Game_Event
distance = distance_from_player()
is_near_player = distance <= @detection_radius
if distance >= DISTANCE_FOR_DESPAWN
despawn unless @manual_ow_pokemon
despawn unless @manual_ow_pokemon || @pokemon.shiny?
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)
elsif $PokemonTemp.overworld_safari
flee() unless is_eating?
else
overworldPokemonBattle
end
@@ -337,7 +404,8 @@ class OverworldPokemonEvent < Game_Event
# check for noticed
if @current_state == :ROAMING
if check_detect_trainer
playDetectPlayerAnimation
playDetectAnimation
@target = :player
breakDisguise if @disguised
@noticed_player_once = true
update_state(:NOTICED_PLAYER)
@@ -345,7 +413,7 @@ class OverworldPokemonEvent < Game_Event
end
end
else
if @current_state != :ROAMING
if @current_state != :ROAMING && @current_state != :NOTICED_POKEMON
update_state(:ROAMING)
back_to_roaming_action
end
@@ -355,7 +423,7 @@ class OverworldPokemonEvent < Game_Event
# 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
$PokemonTemp.overworld_wild_battle_participants = [] 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
@@ -390,6 +458,7 @@ class OverworldPokemonEvent < Game_Event
# called when a pokemon that has noticed the player goes back to roaming
def back_to_roaming_action
@target = nil
case @behavior_noticed
when :skittish, :shy
turn_toward_player
@@ -407,17 +476,17 @@ class OverworldPokemonEvent < Game_Event
when :ROAMING
set_roaming_movement
when :NOTICED_PLAYER
set_noticed_movement
set_noticed_movement if @behavior_noticed
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 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
@@ -498,6 +567,7 @@ class OverworldPokemonEvent < Game_Event
end
def set_sprite(sprite_path)
return if @manual_appearance
@character_name = sprite_path
@need_refresh = true
end
@@ -511,6 +581,10 @@ class OverworldPokemonEvent < Game_Event
end
effective_behavior = @behavior_noticed || @behavior_roaming # fallback on @behavior_roaming if no @behavior_noticed
if @current_state == :NOTICED_PLAYER && @pack_size && @pack_size >= 3
pack_behavior = POKEMON_BEHAVIOR_DATA[@behavior_species][:pack_behavior_noticed]
effective_behavior = pack_behavior if pack_behavior
end
case effective_behavior
when :random
@@ -521,7 +595,7 @@ class OverworldPokemonEvent < Game_Event
@move_type = MOVE_TYPE_CURIOUS
when :semi_aggressive
@move_type = MOVE_TYPE_TOWARDS_PLAYER
when :aggressive
when :aggressive, :excited
@move_type = MOVE_TYPE_TOWARDS_PLAYER
self.move_frequency = 6
when :skittish
@@ -545,13 +619,19 @@ class OverworldPokemonEvent < Game_Event
return
end
case @behavior_roaming
effective_behavior = @behavior_roaming
if @current_state == :ROAMING && @pack_size && @pack_size >= 3
pack_behavior = POKEMON_BEHAVIOR_DATA[@behavior_species][:pack_behavior_roaming]
effective_behavior = pack_behavior if pack_behavior
end
case effective_behavior
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])
set_custom_move_route(OW_BEHAVIOR_MOVE_ROUTES[:roaming][effective_behavior])
end
self.move_frequency = 3
check_weather_roaming_behavior
@@ -561,17 +641,17 @@ class OverworldPokemonEvent < Game_Event
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]
wind_behavior = POKEMON_BEHAVIOR_DATA[@behavior_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]
rain_behavior = POKEMON_BEHAVIOR_DATA[@behavior_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]
sun_behavior = POKEMON_BEHAVIOR_DATA[@behavior_species][:behavior_sunny_roaming]
if sun_behavior
set_custom_move_route(OW_BEHAVIOR_MOVE_ROUTES[:roaming][sun_behavior])
end
@@ -587,6 +667,18 @@ class OverworldPokemonEvent < Game_Event
end
def despawn
@light_effect&.dispose
dispose_notice_icon
spriteset = $scene.respond_to?(:spritesets) ? $scene.spritesets[@map_id] : nil
if spriteset
sprite = spriteset.character_sprites.find { |s| s.character == self }
if sprite
spriteset.character_sprites.delete(sprite)
sprite.dispose
end
end
erase
$game_map.events.delete(@id)
$PokemonTemp.overworld_pokemon_on_map&.delete(@id)
@@ -601,6 +693,13 @@ class OverworldPokemonEvent < Game_Event
case @move_type
when MOVE_TYPE_CURIOUS
move_type_curious(ready_for_next_movement)
when MOVE_TYPE_TOWARDS_TARGET
move_type_toward_target(@target, ready_for_next_movement) if ready_for_next_movement
when MOVE_TYPE_AWAY_FROM_TARGET
move_type_away_from_target(@target) if ready_for_next_movement
when MOVE_TYPE_SHY_FROM_TARGET
move_type_away_from_target(@target) if ready_for_next_movement
turnEventTowardsEvent(self, @target)
end
end
@@ -611,9 +710,13 @@ class OverworldPokemonEvent < Game_Event
def update
super
update_idle_animation
update_notice_icon if $PokemonTemp.overworld_safari
if $game_temp.message_window_showing
pause_movement unless @current_state == :PAUSED
else
update_attack_target
update_retaliation
@behavior_update_counter = (@behavior_update_counter || 0) + 1
if @behavior_update_counter >= UPDATE_TIME
@behavior_update_counter = 0
@@ -621,5 +724,24 @@ class OverworldPokemonEvent < Game_Event
end
end
end
#Override marshall dump to exclude stuff that crashes the game (the ref to lignt_effect)
def marshal_dump
ivars = {}
instance_variables.each do |var|
next if var == :@light_effect || var == :@notice_icon
ivars[var] = instance_variable_get(var)
end
return ivars
end
def marshal_load(ivars)
ivars.each { |var, val| instance_variable_set(var, val) }
@light_effect = nil
@notice_icon = nil
end
end
@@ -0,0 +1,384 @@
class OverworldPokemonEvent < Game_Event
alias setup_pokemon_detection setup_pokemon
RETALIATION_DELAY = 20 # frames of "stunned/reacting" before fighting back
def setup_pokemon(*args)
setup_pokemon_detection(*args)
@currently_seen_events = []
@previously_seen_events = []
@target = nil
@noticed_pokemon_behavior = nil
@attack_timer = 0
@retaliation_timer = 0
@pending_retaliation_target = nil
end
#Version that only detects when the Pokemon is actually looking at the pokemon
#
# alias turn_generic_pokemon_detection turn_generic
# def turn_generic(*args)
# turn_generic_pokemon_detection(*args)
# @currently_seen_events = listEventsInVisionCone
# @currently_seen_events.each do |event|
# event_pokemon = event[0]
# distance = event[1]
# noticed_pokemon_behaviors = POKEMON_BEHAVIOR_DATA[@species][:behavior_pokemon]
# if noticed_pokemon_behaviors && noticed_pokemon_behaviors.include?(event_pokemon.species)
# behavior = noticed_pokemon_behaviors[event_pokemon.species]
# playDetectAnimation(behavior)
# update_state(:NOTICED_POKEMON)
# set_noticed_pokemon_movement(behavior, event_pokemon)
# end
# end
# echoln @currently_seen_events
# end
BEHAVIOR_PRIORITY = {
skittish: 1,
aggressive: 2,
shy: 3,
semi_aggressive: 4,
curious: 5
}.freeze
alias turn_generic_pokemon_detection turn_generic
def turn_generic(*args)
turn_generic_pokemon_detection(*args)
return unless Settings::EXPERIMENTAL_FEATURES
@currently_seen_events = listEventsInRadius(@detection_radius)
if @current_state == :NOTICED_POKEMON
unless target_still_valid?
update_state(:ROAMING)
back_to_roaming_action
return
end
end
behavior_data = POKEMON_BEHAVIOR_DATA[@species]
noticed_pokemon_behaviors = behavior_data ? behavior_data[:behavior_pokemon] : nil
sorted_events = @currently_seen_events.sort_by { |_event, distance| distance }
if sorted_events.empty?
if @current_state == :NOTICED_POKEMON
update_state(:ROAMING)
back_to_roaming_action
@target = nil
end
return
end
@pack_size = 0
nearest_distance = nil
candidates = [] # [event, behavior] pairs, all at nearest_distance
pokeblock_candidate = nil
sorted_events.each do |event_pokemon, distance|
# Once we've passed the nearest distance that had any qualifying target, stop
break if nearest_distance && distance > nearest_distance
if event_pokemon.is_a?(PokeblockEvent)
pokeblock_candidate ||= event_pokemon
nearest_distance ||= distance
next
end
next if event_pokemon.pokemon.shiny?
if noticed_pokemon_behaviors && noticed_pokemon_behaviors.include?(event_pokemon.species)
candidates << [event_pokemon, noticed_pokemon_behaviors[event_pokemon.species]]
nearest_distance ||= distance
elsif event_pokemon.species == @pokemon.species
@pack_size += 1
elsif noticed_pokemon_behaviors && noticed_pokemon_behaviors.include?(:everything)
candidates << [event_pokemon, noticed_pokemon_behaviors[:everything]]
nearest_distance ||= distance
end
end
if pokeblock_candidate
unless @current_state == :NOTICED_POKEMON
playAnimation(HEART_ANIMATION_SHORT_ID, @x, @y)
end
update_state(:NOTICED_POKEMON)
@target = pokeblock_candidate
@noticed_pokemon_behavior = :eat_pokeblock
@move_type = MOVE_TYPE_TOWARDS_TARGET
self.move_frequency = 6
return
end
return if candidates.empty?
best_event, best_behavior = candidates.min_by { |_event, behavior| BEHAVIOR_PRIORITY[behavior] || 99 }
playDetectAnimation(best_behavior, false)
update_state(:NOTICED_POKEMON)
set_noticed_pokemon_movement(best_behavior, best_event)
end
def target_still_valid?
return false unless @target && !@target.erased
@currently_seen_events.any? { |event| event[0] == @target }
end
def set_noticed_pokemon_movement(behavior, target_event)
@noticed_pokemon_behavior = behavior if target_event
@target = target_event
case behavior
when :random
@move_type = MOVE_TYPE_RANDOM
self.move_frequency = @roaming_frequency
when :still
@move_type = MOVE_TYPE_FIXED
when :curious
@move_type = MOVE_TYPE_TOWARDS_TARGET
self.move_frequency = @roaming_frequency
when :semi_aggressive
@move_type = MOVE_TYPE_TOWARDS_TARGET
self.move_frequency = @roaming_frequency
when :aggressive
@move_type = MOVE_TYPE_TOWARDS_TARGET
self.move_frequency = 6
when :shy
@move_type = MOVE_TYPE_SHY_FROM_TARGET
self.move_frequency = @roaming_frequency
when :skittish
@move_type = MOVE_TYPE_AWAY_FROM_TARGET
self.move_frequency = 6
when :flee, :flee_flying, :teleport_away
flee(behavior)
else
category = @behavior_noticed ? :noticed : :roaming
set_custom_move_route(OW_BEHAVIOR_MOVE_ROUTES[category][behavior])
end
@step_anime = true unless behavior == :still
@move_speed = @noticed_move_speed
end
def update_attack_target
unless @current_state == :NOTICED_POKEMON &&
[:aggressive, :semi_aggressive, :eat_pokeblock].include?(@noticed_pokemon_behavior) &&
adjacent_to?(@target)
@attack_timer = 0
return
end
@attack_timer += 1
if @attack_timer >= 80
attack_pokemon_target
@attack_timer = 0
end
end
def attack_pokemon_target
hp_chunk = calculate_damage_on_target
# Attacks of pokemon's type 1, except if it's type 1. Then type 2 (if it has one) - so that normal/flying uses flying moves.
attack_type = @pokemon.type1 == :NORMAL && @pokemon.type2 ? @pokemon.type2 : @pokemon.type1
effectiveness = Effectiveness.calculate(attack_type, @target.pokemon.type1, @target.pokemon.type2) / 8.0
hp_chunk = (hp_chunk * effectiveness).floor
#echoln "#{attack_type} on #{@target.pokemon.type1}, #{@target.pokemon.type2} : x#{effectiveness}"
@target.pokemon.hp -= hp_chunk
flash_white(@target)
unless @target.is_a?(PokeblockEvent)
@target.knock_back(self)
@target.queue_retaliation_against(self) if @target.pokemon.hp > 0
end
if @target.pokemon.hp <= 0
@target.despawn
@target = nil
update_state(:ROAMING)
end
end
def queue_retaliation_against(attacker)
return unless attacker && !attacker.erased
@pending_retaliation_target = attacker
@retaliation_timer = RETALIATION_DELAY
end
def update_retaliation
return unless @pending_retaliation_target
unless @pending_retaliation_target.erased
@retaliation_timer -= 1
if @retaliation_timer <= 0
target = @pending_retaliation_target
@pending_retaliation_target = nil
update_state(:NOTICED_POKEMON)
set_noticed_pokemon_movement(:aggressive, target)
end
else
@pending_retaliation_target = nil
end
end
#Equivalent of a neutral base 20 damage attack
# Simplified version of PokeBattle_Move.pbCalcDamage
def calculate_damage_on_target()
baseDmg = 20
atk = @pokemon.attack
defense = @target.pokemon.defense
damage = (((2.0 * @pokemon.level / 5 + 2).floor * baseDmg * atk / defense).floor / 50).floor + 2
return damage
end
def flash_white(target, duration = 20, alpha = 200)
return unless target && $scene && $scene.respond_to?(:spriteset)
spriteset = $scene.spriteset
return unless spriteset
sprite = spriteset.character_sprites.find { |s| s.character == target }
sprite&.flash(Color.new(255, 255, 255, alpha), duration)
end
def knock_back(event_knocking_back)
turnEventTowardsEvent(self,event_knocking_back)
original_direction_fix = @direction_fix
@direction_fix = true
self.jumpBackward
#self.move_backward
@direction_fix = original_direction_fix
end
# Orthogonal adjacency check (no diagonals), same rule used when
# stopping movement toward a target in moveEventTowardsEvent.
def adjacent_to?(event)
return false unless event && !event.erased
dx = event.x - self.x
dy = event.y - self.y
(dx == 0 && dy.abs == 1) || (dy == 0 && dx.abs == 1)
end
# def update
# super
# if $game_temp.message_window_showing
# pause_movement unless @current_state == :PAUSED
# else
# update_attack_target
# update_retaliation
# @behavior_update_counter = (@behavior_update_counter || 0) + 1
# if @behavior_update_counter >= UPDATE_TIME
# @behavior_update_counter = 0
# update_behavior
# end
# end
# end
#-----------------------------------------------------------------------
# Returns the forward distance (along the facing axis) to (px, py) if it
# falls inside the vision cone, or nil if it doesn't. Returning the
# distance instead of a bool lets callers build a hash without
# recomputing dy/dx a second time.
#-----------------------------------------------------------------------
def pbConeDistanceTo(px, py, distance, spread = 1)
return nil if distance <= 0
ex = self.x
ey = self.y
case self.direction
when 2 # Facing Down
dy = py - ey
return nil if dy <= 0 || dy > distance
side = (px - ex).abs
return (side <= dy * spread) ? dy : nil
when 8 # Facing Up
dy = ey - py
return nil if dy <= 0 || dy > distance
side = (px - ex).abs
return (side <= dy * spread) ? dy : nil
when 6 # Facing Right
dx = px - ex
return nil if dx <= 0 || dx > distance
side = (py - ey).abs
return (side <= dx * spread) ? dx : nil
when 4 # Facing Left
dx = ex - px
return nil if dx <= 0 || dx > distance
side = (py - ey).abs
return (side <= dx * spread) ? dx : nil
else
return nil
end
end
# Boolean wrapper, kept so existing call sites don't need to change.
def pbPointInVisionCone?(px, py, distance, spread = 1)
!pbConeDistanceTo(px, py, distance, spread).nil?
end
def pbPlayerInEventCone?(player, distance, spread = 1)
return false if !player
pbPointInVisionCone?(player.x, player.y, distance, spread)
end
#-----------------------------------------------------------------------
# { event => distance }
#-----------------------------------------------------------------------
def listEventsInVisionCone(distance = @detection_radius, spread = 1)
seen = {}
return seen if !$game_map
#TODO: Maybe. Use this for player also and refactor player detection in base OverworldEvent
# If not too costly to run this every frame like we do for the player detection...
#
# player_distance = pbConeDistanceTo($game_player.x, $game_player.y, distance, spread)
# seen[$game_player] = player_distance if player_distance
$game_map.events.each_value do |event|
next unless event.is_a?(OverworldPokemonEvent)
next if event == self
next if event.erased
d = pbConeDistanceTo(event.x, event.y, distance, spread)
seen[event] = d if d
end
return seen
end
#-----------------------------------------------------------------------
# { event => distance }
#-----------------------------------------------------------------------
def listEventsInRadius(radius = @detection_radius)
seen = {}
return seen if !$game_map
$game_map.events.each_value do |event|
next unless event.is_a?(OverworldPokemonEvent) || event.is_a?(PokeblockEvent)
next if event == self
next if event.erased
d = pbDistanceTo(event.x, event.y, radius)
seen[event] = d if d
end
return seen
end
def pbDistanceTo(px, py, radius)
return nil if radius <= 0
dx = (px - self.x).abs
dy = (py - self.y).abs
dist = dx + dy
return (dist <= radius) ? dist : nil
end
def pbPointInRadius?(px, py, radius)
!pbDistanceTo(px, py, radius).nil?
end
def pbPlayerInEventRadius?(player, radius)
return false if !player
pbPointInRadius?(player.x, player.y, radius)
end
def check_detect_trainer
#return unless noticed_state_different_from_roaming()
return if $game_system.map_interpreter.running? || @starting
return pbPlayerInEventCone?($game_player, @detection_radius)
end
end
@@ -6,7 +6,11 @@ MOVE_TYPE_AWAY_PLAYER = 4
MOVE_TYPE_CURIOUS = 5
MOVE_TYPE_SHY = 6
class Game_Character
MOVE_TYPE_TOWARDS_TARGET = 7
MOVE_TYPE_AWAY_FROM_TARGET = 8
MOVE_TYPE_SHY_FROM_TARGET = 9
class OverworldPokemonEvent
attr_accessor :notice_icon
# @stop_count : nb frames since last movement
#wait until next frequency frame
@@ -31,30 +35,99 @@ class Game_Character
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_toward_target(target_event, next_movement_ready = true)
return unless next_movement_ready
unless target_event
move_type_random
return
end
dx = (target_event.x - self.x).abs
dy = (target_event.y - self.y).abs
distance = dx + dy
# 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
if distance > 1
if rand(10) == 0
move_random
#turnEventTowardsEvent(self,target_event)
else
moveEventTowardsEvent(self, target_event)
end
return
end
if @noticed_pokemon_behavior == :curious
roll = rand(10)
if roll <= 3
turn_random
elsif roll <= 6
turnEventTowardsEvent(self, target_event)
else
wait
end
else
turnEventTowardsEvent(self, target_event)
end
end
def move_type_away_from_target(target_event)
unless target_event
move_type_random
return
end
moveEventAwayFromEvent(self, target_event)
end
def move_type_random
if Settings::EXPERIMENTAL_FEATURES && @idle_animation_sprite && rand(6)==0
play_idle_animation
else
super
end
end
def play_idle_animation
return if @playing_idle_animation
@playing_idle_animation = true
@old_character_name = @character_name
@character_name = @idle_animation_sprite
@stop_count = 0
nb_times = rand(1..3)
echoln nb_times
play_step_animation(nb_times)
end
def update_idle_animation
return unless @playing_idle_animation
total_frames = @step_animation_nb_times * 4
if @playing_idle_animation && @step_anime_once_frame_count >= total_frames
@character_name = @old_character_name
@playing_idle_animation = false
end
end
def update_notice_icon
if @current_state == :NOTICED_PLAYER && @opacity > 0 && !@notice_icon_hidden
if !@notice_icon || @notice_icon.disposed?
@notice_icon = OverworldNoticeIcon.new(self, @behavior_noticed)
end
@notice_icon.update
else
dispose_notice_icon
end
end
def hide_notice_icon
@notice_icon_hidden = true
dispose_notice_icon
end
def show_notice_icon
@notice_icon_hidden = false
end
def dispose_notice_icon
@notice_icon.dispose if @notice_icon && !@notice_icon.disposed?
@notice_icon = nil
end
end
@@ -0,0 +1,47 @@
class OverworldNoticeIcon < Sprite
DEFAULT_PATH = "Graphics/Pictures/Overworld/notice_icon"
Y_OFFSET = -12
BOB_RANGE = 1
def initialize(event, behavior = nil)
viewport = ($scene.spriteset.viewport1 rescue nil)
super(viewport)
@event = event
@frame = 0
@char_height = 32
self.bitmap = load_icon_bitmap(behavior)
self.ox = bitmap.width / 2
self.oy = bitmap.height / 2
refresh_character_height
update
end
def load_icon_bitmap(behavior)
path = pbResolveBitmap("Graphics/Pictures/Overworld/notice_#{behavior}") if behavior
path ||= pbResolveBitmap(DEFAULT_PATH)
return Bitmap.new(path) if path
return nil
end
def refresh_character_height
return unless $scene.respond_to?(:spriteset) && $scene.spriteset
spr = $scene.spriteset.character_sprites.find { |s| s.character == @event }
@char_height = spr.oy if spr && spr.oy > 0
end
def update
return if disposed?
@frame += 1
refresh_character_height if @frame % 10 == 0
bob = BOB_RANGE > 0 ? (Math.sin(@frame / 8.0) * BOB_RANGE).round : 0
self.x = @event.screen_x
self.y = @event.screen_y - @char_height - Y_OFFSET + bob
self.z = @event.screen_z + 100
self.opacity = @event.opacity
end
def dispose
self.bitmap.dispose if self.bitmap && !self.bitmap.disposed?
super
end
end
@@ -212,6 +212,12 @@ def spawn_overworld_pokemon(wild_pokemon, position, terrain, behavior_roaming =
return event
end
#Adds a pokemon to the end of the list so that it doesn't get despawned right away
def renew_overworld_pokemon(event_id)
$PokemonTemp.overworld_pokemon_on_map.delete(event_id)
$PokemonTemp.overworld_pokemon_on_map << event_id
end
def despawn_overworld_pokemon(event_id, terrain)
event = $game_map.events[event_id]
if !event
@@ -219,8 +225,7 @@ def despawn_overworld_pokemon(event_id, terrain)
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
renew_overworld_pokemon(event.id)
event_id = $PokemonTemp.overworld_pokemon_on_map[0]
event = $game_map.events[event_id]
end
@@ -255,6 +260,7 @@ Events.onMapChanging += proc { |_sender, e|
}
def clearOverworldPokemon
return unless $game_map&.events
echoln "Clearing Overworld Pokemon"
$game_map.events.clone.each do |id, event|
if event.is_a?(DynamicOverworldPokemonEvent)
@@ -0,0 +1,28 @@
class PokeblockEvent < Game_Event
attr_accessor :pokemon
attr_accessor :color
DESPAWN_SECONDS = 60
#Level is for calculating the HP
def initialize(map_id, event, map=nil, color=:RED, level=16)
super(map_id, event, map)
@pokemon = Pokemon.new(:DITTO, level) #fake pokemon for calcualting damage when pokemon eat it
@color = color
@drain_per_frame = @pokemon.totalhp.to_f / (DESPAWN_SECONDS * Graphics.frame_rate)
@hp_float = @pokemon.hp.to_f
end
def update_opacity
@opacity = (255 * (@pokemon.hp.to_f / @pokemon.totalhp)).round
end
def update
super
return if @erased
@hp_float -= @drain_per_frame
@pokemon.hp = [@hp_float.round, 0].max
update_opacity
despawn if @pokemon.hp <= 0
end
end
@@ -1,5 +1,6 @@
OVERWORLD_POKEMON_EVENT_NAME = "OverworldPokemon"
LEGENDARY_EVENT_NAME = "Legendary"
POKEBLOCK_EVENT_NAME = "PokeBlock"
# 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
@@ -65,6 +66,9 @@ class Game_Map
event.erase
return event
end
elsif event.name.start_with?(POKEBLOCK_EVENT_NAME)
game_event = PokeblockEvent.new(@map_id, event, self)
return game_event if game_event
end
return ow_game_map_create_new_event(event)
@@ -25,33 +25,34 @@
# :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)
#todo: defend. Attacks if being attacked by another ow pokemon
POKEMON_BEHAVIOR_DATA =
{
:BULBASAUR => { behavior_noticed: nil, behavior_roaming: :random },
:BULBASAUR => { behavior_noticed: nil, behavior_roaming: :random , behavior_pokemon: {:HERACROSS => :shy}},
: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 },
:SQUIRTLE => { behavior_noticed: :curious, behavior_roaming: :random , behavior_pokemon: {:SHARPEDO => :skittish}},
: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 },
:BUTTERFREE => { behavior_noticed: :skittish, behavior_roaming: :random , behavior_pokemon: {:CUTIEFLY => :semi_aggressive, :HERACROSS => :curious}},
: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 },
:BEEDRILL => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:TEDDIURSA => :aggressive}},
:PIDGEY => { behavior_noticed: nil, behavior_roaming: :random , behavior_pokemon: {:EKANS => :shy, :SNEASEL => :skittish, :PERSIAN => :skittish}},
:PIDGEOTTO => { behavior_noticed: :semi_aggressive, behavior_roaming: :random, behavior_pokemon: {:MAGIKARP => :aggressive, :EXEGGCUTE => :aggressive, :CATERPIE => :aggressive}},
:PIDGEOT => { behavior_noticed: :semi_aggressive, behavior_roaming: :random, behavior_pokemon: {:MAGIKARP => :aggressive}},
:RATTATA => { behavior_noticed: :shy, behavior_roaming: :random , behavior_pokemon: {:GUMSHOOS => :shy, :MEOWTH => :skittish, :ALOLAN_MEOWTH => :skittish}},
:RATICATE => { behavior_noticed: nil, behavior_roaming: :random , behavior_pokemon: {:GUMSHOOS => :shy}},
:SPEAROW => { behavior_noticed: :aggressive, behavior_roaming: :random, behavior_pokemon: {:SUNKERN => :aggressive}},
:FEAROW => { behavior_noticed: :aggressive, behavior_roaming: :random },
:EKANS => { behavior_noticed: :shy, behavior_roaming: :random },
:ARBOK => { behavior_noticed: :aggressive, behavior_roaming: :random },
:EKANS => { behavior_noticed: :shy, behavior_roaming: :random , behavior_pokemon: {:PIDGEY => :semi_aggressive, :SPEAROW => :semi_aggressive}},
:ARBOK => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:WOOPER => :aggressive}},
:PIKACHU => { behavior_noticed: :curious, behavior_roaming: :random },
:RAICHU => { behavior_noticed: nil, behavior_roaming: :random },
:SANDSHREW => { behavior_noticed: :shy, behavior_roaming: :random },
@@ -74,18 +75,18 @@ POKEMON_BEHAVIOR_DATA =
: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 },
:PARASECT => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:SHIINOTIC => :aggressive}},
:VENONAT => { behavior_noticed: :shy, behavior_roaming: :random , behavior_pokemon: {:CATERPIE => :semi_aggressive, :WEEDLE => :semi_aggressive}},
: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 },
:DIGLETT => { behavior_noticed: :still, behavior_roaming: :random_burrow , behavior_pokemon: {:DRUDDIGON => :shy}},
:DUGTRIO => { behavior_noticed: :still, behavior_roaming: :random_burrow , behavior_pokemon: {:DRUDDIGON => :shy}},
:MEOWTH => { behavior_noticed: :curious, behavior_roaming: :random , behavior_pokemon: {:RATTATA => :semi_aggressive, :ALOLAN_RATTATA => :semi_aggressive, :MAGIKARP => :semi_aggressive, :MURKROW => :semi_aggressive}},
:PERSIAN => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:STARLY => :semi_aggressive, :PIDGEY => :semi_aggressive, :SPEAROW => :semi_aggressive}},
: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 },
:PRIMEAPE => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:URSARING => :aggressive, :HAWLUCHA => :aggressive}},
:GROWLITHE => { behavior_noticed: :curious, behavior_roaming: :random , behavior_pokemon: {:ROCKRUFF => :semi_aggressive}},
:ARCANINE => { behavior_noticed: nil, behavior_roaming: :random },
:POLIWAG => { behavior_noticed: :shy, behavior_roaming: :random },
:POLIWHIRL => { behavior_noticed: nil, behavior_roaming: :random },
@@ -93,16 +94,16 @@ POKEMON_BEHAVIOR_DATA =
: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 },
:MACHOP => { behavior_noticed: nil, behavior_roaming: :random , behavior_pokemon: {:MAKUHITA => :semi_aggressive}},
: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 },
:TENTACOOL => { behavior_noticed: nil, behavior_roaming: :random, glow_in_the_dark: true },
:TENTACRUEL => { behavior_noticed: :aggressive, behavior_roaming: :random, glow_in_the_dark: true },
:GEODUDE => { behavior_noticed: :still, behavior_roaming: :random, hop_cliff:true},
:GRAVELER => { behavior_noticed: :aggressive, behavior_roaming: :random, hop_cliff:true },
:GOLEM => { behavior_noticed: :aggressive, behavior_roaming: :random },
:PONYTA => { behavior_noticed: :shy, behavior_roaming: :random },
:RAPIDASH => { behavior_noticed: :aggressive, behavior_roaming: :random },
@@ -114,47 +115,47 @@ POKEMON_BEHAVIOR_DATA =
: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 },
:DEWGONG => { behavior_noticed: nil, behavior_roaming: :random_dive , behavior_pokemon: {:WISHIWASHI => :aggressive}},
:GRIMER => { behavior_noticed: :curious, behavior_roaming: :random , behavior_pokemon: {:TRUBBISH => :aggressive, :GARBODOR => :aggressive}},
:MUK => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:TRUBBISH => :aggressive, :GARBODOR => :aggressive}},
:SHELLDER => { behavior_noticed: :skittish, behavior_roaming: :look_around, behavior_pokemon: {:KINGLER => :skittish, :OMASTAR => :skittish, :RUFFLET => :skittish, :BRUXISH => :skittish, :SLOWPOKE => :curious, :SLOWBRO => :curious}},
:CLOYSTER => { behavior_noticed: nil, behavior_roaming: :random , behavior_pokemon: {:KINGLER => :shy, :SLOWPOKE => :semi_aggressive}},
: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 },
:DROWZEE => { behavior_noticed: :curious, behavior_roaming: :random , behavior_pokemon: {:KOMALA => :curious}},
:HYPNO => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:KOMALA => :curious}},
:KRABBY => { behavior_noticed: :skittish, behavior_roaming: :random },
:KINGLER => { behavior_noticed: :aggressive, behavior_roaming: :random },
:KINGLER => { behavior_noticed: :aggressive, behavior_roaming: :random, behavior_pokemon: {:SHELLDER => :aggressive, :CLOYSTER => :aggressive}},
:VOLTORB => { behavior_noticed: :explode, behavior_roaming: :look_around },
:ELECTRODE => { behavior_noticed: :explode, behavior_roaming: :random },
:EXEGGCUTE => { behavior_noticed: nil, behavior_roaming: :random },
:EXEGGCUTE => { behavior_noticed: nil, behavior_roaming: :random , behavior_pokemon: {:PIDGEOTTO => :shy}},
:EXEGGUTOR => { behavior_noticed: nil, behavior_roaming: :random },
:CUBONE => { behavior_noticed: nil, behavior_roaming: :random },
:MAROWAK => { behavior_noticed: :aggressive, behavior_roaming: :random },
:CUBONE => { behavior_noticed: nil, behavior_roaming: :random , behavior_pokemon: {:VULLABY => :shy, :MANDIBUZZ => :skittish}},
:MAROWAK => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:MANDIBUZZ => :aggressive}},
: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 },
:WEEZING => { behavior_noticed: nil, 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 },
:HORSEA => { behavior_noticed: :shy, behavior_roaming: :random_dive , behavior_pokemon: {:CORSOLA => :curious}},
:SEADRA => { behavior_noticed: :aggressive, behavior_roaming: :random_dive , behavior_pokemon: {:CORSOLA => :curious, :MAREANIE => :semi_aggressive, :TOXAPEX => :semi_aggressive}},
:GOLDEEN => { behavior_noticed: :semi_aggressive, 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 },
:STARYU => { behavior_noticed: nil, behavior_roaming: :random, glow_in_the_dark: true , behavior_pokemon: {:LUMINEON => :shy, :LANTURN => :shy}},
:STARMIE => { behavior_noticed: nil, behavior_roaming: :random, glow_in_the_dark: true , behavior_pokemon: {:LUMINEON => :skittish, :LANTURN => :skittish}},
: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 },
:PINSIR => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:HERACROSS => :aggressive, :VIKAVOLT => :aggressive}},
:TAUROS => { behavior_noticed: :aggressive, behavior_roaming: :charge },
:MAGIKARP => { behavior_noticed: nil, behavior_roaming: :random },
:GYARADOS => { behavior_noticed: :aggressive, behavior_roaming: :random },
@@ -165,8 +166,8 @@ POKEMON_BEHAVIOR_DATA =
: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 },
:OMANYTE => { behavior_noticed: :shy, behavior_roaming: :random , behavior_pokemon: {:CARRACOSTA => :shy, :ARCHEOPS => :skittish}},
:OMASTAR => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:SHELLDER => :semi_aggressive, :CARRACOSTA => :shy}},
:KABUTO => { behavior_noticed: :shy, behavior_roaming: :random },
:KABUTOPS => { behavior_noticed: :aggressive, behavior_roaming: :random },
:AERODACTYL => { behavior_noticed: :aggressive, behavior_roaming: :random },
@@ -176,7 +177,7 @@ POKEMON_BEHAVIOR_DATA =
: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 },
:DRAGONITE => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:KINGDRA => :aggressive}},
:MEWTWO => { behavior_noticed: :aggressive, behavior_roaming: :random },
:MEW => { behavior_noticed: :flee, behavior_roaming: :random },
:CHIKORITA => { behavior_noticed: :curious, behavior_roaming: :random },
@@ -189,7 +190,7 @@ POKEMON_BEHAVIOR_DATA =
: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 },
:FURRET => { behavior_noticed: nil, behavior_roaming: :random , behavior_pokemon: {:RATTATA => :aggressive, :MIGHTYENA => :skittish}},
:HOOTHOOT => { behavior_noticed: :shy, behavior_roaming: :random },
:NOCTOWL => { behavior_noticed: nil, behavior_roaming: :random },
:LEDYBA => { behavior_noticed: nil, behavior_roaming: :random },
@@ -197,10 +198,10 @@ POKEMON_BEHAVIOR_DATA =
: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 },
:CHINCHOU => { behavior_noticed: nil, behavior_roaming: :random, glow_in_the_dark: true , behavior_pokemon: {:INKAY => :shy}},
:LANTURN => { behavior_noticed: nil, behavior_roaming: :random, glow_in_the_dark: true , behavior_pokemon: {:SHARPEDO => :skittish, :STARMIE => :aggressive, :FRILLISHfE => :shy, :FRILLISHmA => :shy}},
:PICHU => { behavior_noticed: :curious, behavior_roaming: :random },
:CLEFFA => { behavior_noticed: :curious, behavior_roaming: :random },
:CLEFFA => { behavior_noticed: :shy, 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 },
@@ -217,15 +218,15 @@ POKEMON_BEHAVIOR_DATA =
: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 },
:AIPOM => { behavior_noticed: :curious, behavior_roaming: :random , behavior_pokemon: {:BOUNSWEET => :semi_aggressive}},
: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 },
:WOOPER => { behavior_noticed: nil, behavior_roaming: :random , behavior_pokemon: {:ARBOK => :shy}},
: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 },
:UMBREON => { behavior_noticed: nil, behavior_roaming: :random, glow_in_the_dark: true },
:MURKROW => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:MEOWTH => :semi_aggressive, :ALOLAN_MEOWTH => :semi_aggressive}},
:SLOWKING => { behavior_noticed: nil, behavior_roaming: :random },
:MISDREAVUS => { behavior_noticed: :curious, behavior_roaming: :random_vanish },
:UNOWN => { behavior_noticed: :flee, behavior_roaming: :random },
@@ -238,26 +239,26 @@ POKEMON_BEHAVIOR_DATA =
: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 },
:QWILFISH => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:LUVDISC => :aggressive}},
: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 },
:HERACROSS => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:PINSIR => :aggressive, :VIKAVOLT => :aggressive, :BULBASAUR => :curious, :BUTTERFREE => :curious}},
:SNEASEL => { behavior_noticed: :skittish, behavior_roaming: :random , behavior_pokemon: {:PIDGEY => :aggressive, :ALOLAN_SANDSHREW => :semi_aggressive, :DELIBIRD => :aggressive}},
:TEDDIURSA => { behavior_noticed: :curious, behavior_roaming: :random , behavior_pokemon: {:COMBEE => :curious}},
:URSARING => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:PRIMEAPE => :aggressive}},
:SLUGMA => { behavior_noticed: nil, behavior_roaming: :random, glow_in_the_dark: true},
:MAGCARGO => { behavior_noticed: nil, behavior_roaming: :random, glow_in_the_dark: true },
: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 },
:CORSOLA => { behavior_noticed: nil, behavior_roaming: :random , behavior_pokemon: {:MAREANIE => :skittish, :TOXAPEX => :skittish, :SEADRA => :curious}},
:REMORAID => { behavior_noticed: nil, behavior_roaming: :random , behavior_pokemon: {:BURMY_P => :semi_aggressive, :BURMY_S => :semi_aggressive, :BURMY_T => :semi_aggressive, :MANTINE => :curious}},
:OCTILLERY => { behavior_noticed: :semi_aggressive, behavior_roaming: :random },
:DELIBIRD => { behavior_noticed: :curious, behavior_roaming: :random },
:DELIBIRD => { behavior_noticed: :curious, behavior_roaming: :random , behavior_pokemon: {:SNEASEL => :shy}},
: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 },
:KINGDRA => { behavior_noticed: nil, behavior_roaming: :random , behavior_pokemon: {:DRAGONITE => :aggressive}},
:PHANPY => { behavior_noticed: nil, behavior_roaming: :random },
:DONPHAN => { behavior_noticed: :aggressive, behavior_roaming: :random },
:PORYGON2 => { behavior_noticed: nil, behavior_roaming: :random },
@@ -266,7 +267,7 @@ POKEMON_BEHAVIOR_DATA =
: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 },
:ELEKID => { behavior_noticed: :curious, behavior_roaming: :random , behavior_pokemon: {:TOGEDEMARU => :semi_aggressive}},
:MAGBY => { behavior_noticed: :skittish, behavior_roaming: :random },
:MILTANK => { behavior_noticed: nil, behavior_roaming: :random },
:BLISSEY => { behavior_noticed: :curious, behavior_roaming: :random },
@@ -288,13 +289,13 @@ POKEMON_BEHAVIOR_DATA =
: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 },
:POOCHYENA => { behavior_noticed: :semi_aggressive, behavior_roaming: :random, behavior_pokemon: {:everything => :semi_aggressive} },
:MIGHTYENA => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:FURRET => :aggressive}},
:ZIGZAGOON => { behavior_noticed: :curious, behavior_roaming: :random },
:LINOONE => { behavior_noticed: nil, behavior_roaming: :random },
:WURMPLE => { behavior_noticed: :shy, behavior_roaming: :random },
:WURMPLE => { behavior_noticed: :shy, behavior_roaming: :random , behavior_pokemon: {:SWELLOW => :shy}},
:SILCOON => { behavior_noticed: :still, behavior_roaming: :still },
:BEAUTIFLY => { behavior_noticed: :skittish, behavior_roaming: :random },
:BEAUTIFLY => { behavior_noticed: :skittish, behavior_roaming: :random , behavior_pokemon: {:COMBEE => :semi_aggressive}},
:CASCOON => { behavior_noticed: :still, behavior_roaming: :still },
:DUSTOX => { behavior_noticed: :skittish, behavior_roaming: :random },
:LOTAD => { behavior_noticed: :shy, behavior_roaming: :random },
@@ -303,15 +304,15 @@ POKEMON_BEHAVIOR_DATA =
: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 },
:TAILLOW => { behavior_noticed: :skittish, behavior_roaming: :random , behavior_pokemon: {:WURMPLE => :aggressive}},
:SWELLOW => { behavior_noticed: :skittish, behavior_roaming: :random , behavior_pokemon: {:WURMPLE => :aggressive}},
:WINGULL => { behavior_noticed: :flee_flying, behavior_roaming: :random , behavior_pokemon: {:FINNEON => :aggressive, :WISHIWASHI => :aggressive, :TALONFLAME => :skittish}},
:PELIPPER => { behavior_noticed: nil, behavior_roaming: :random , behavior_pokemon: {:LUVDISC => :aggressive, :WISHIWASHI => :aggressive}},
: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 },
:SURSKIT => { behavior_noticed: nil, behavior_roaming: :water_skip , behavior_pokemon: {:DEWPIDER => :semi_aggressive}},
:MASQUERAIN => { behavior_noticed: :skittish, behavior_roaming: :random },
:SHROOMISH => { behavior_noticed: :still, behavior_roaming: :random },
:BRELOOM => { behavior_noticed: :semi_aggressive, behavior_roaming: :random },
@@ -323,14 +324,14 @@ POKEMON_BEHAVIOR_DATA =
: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 },
:EXPLOUD => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:AXEW => :semi_aggressive}},
:MAKUHITA => { behavior_noticed: :curious, behavior_roaming: :random , behavior_pokemon: {:MACHOP => :semi_aggressive}},
: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 },
:SABLEYE => { behavior_noticed: :curious, behavior_roaming: :random , behavior_pokemon: {:CARBINK => :semi_aggressive, :GABITE => :semi_aggressive}},
:MAWILE => { behavior_noticed: :semi_aggressive, behavior_roaming: :random },
:ARON => { behavior_noticed: :aggressive, behavior_roaming: :charge },
:LAIRON => { behavior_noticed: :aggressive, behavior_roaming: :charge },
@@ -341,30 +342,30 @@ POKEMON_BEHAVIOR_DATA =
: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 },
:VOLBEAT => { behavior_noticed: nil, behavior_roaming: :random, glow_in_the_dark: true },
:ILLUMISE => { behavior_noticed: nil, behavior_roaming: :random, glow_in_the_dark: true },
: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 },
:CARVANHA => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:BASCULIN => :aggressive}},
:SHARPEDO => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:WAILMER => :aggressive, :SQUIRTLE => :aggressive, :LANTURN => :aggressive, :FINNEON => :aggressive, :LUMINEON => :aggressive}},
:WAILMER => { behavior_noticed: :curious, behavior_roaming: :random , behavior_pokemon: {:WISHIWASHI => :semi_aggressive, :SHARPEDO => :skittish, :DHELMISE => :shy}},
:WAILORD => { behavior_noticed: nil, behavior_roaming: :random , behavior_pokemon: {:WISHIWASHI_SCHOOL => :semi_aggressive}},
: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 },
:SPOINK => { behavior_noticed: :curious, behavior_roaming: :random , behavior_pokemon: {:CLAMPERL => :semi_aggressive}},
: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 },
:FLYGON => { behavior_noticed: nil, behavior_roaming: :random , behavior_pokemon: {:KROOKODILE => :curious}},
: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 },
:ZANGOOSE => { behavior_noticed: :aggressive, behavior_roaming: :random, behavior_pokemon: {:SEVIPER => :aggressive}},
:SEVIPER => { behavior_noticed: :aggressive, behavior_roaming: :random, behavior_pokemon: {:ZANGOOSE => :aggressive}},
:LUNATONE => { behavior_noticed: :still, behavior_roaming: :random },
:SOLROCK => { behavior_noticed: :still, behavior_roaming: :random },
:BARBOACH => { behavior_noticed: nil, behavior_roaming: :random },
@@ -392,7 +393,7 @@ POKEMON_BEHAVIOR_DATA =
: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 },
:GLALIE => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:VANILLITE => :aggressive}},
:FROSLASS => { behavior_noticed: :skittish, behavior_roaming: :random_vanish },
:SPHEAL => { behavior_noticed: :curious, behavior_roaming: :random },
:SEALEO => { behavior_noticed: nil, behavior_roaming: :random },
@@ -401,12 +402,12 @@ POKEMON_BEHAVIOR_DATA =
: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 },
:LUVDISC => { behavior_noticed: :curious, behavior_roaming: :random , behavior_pokemon: {:PELIPPER => :skittish, :QWILFISH => :skittish, :CORSOLA => :curious}},
:BAGON => { behavior_noticed: :semi_aggressive, behavior_roaming: :random },
:SHELGON => { behavior_noticed: :still, behavior_roaming: :random },
:SALAMENCE => { behavior_noticed: :aggressive, behavior_roaming: :random },
:SALAMENCE => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:GARCHOMP => :aggressive}},
:BELDUM => { behavior_noticed: :still, behavior_roaming: :random },
:METANG => { behavior_noticed: nil, behavior_roaming: :random },
:METANG => { behavior_noticed: nil, behavior_roaming: :random , behavior_pokemon: {:NOSEPASS => :excited}},
:METAGROSS => { behavior_noticed: :aggressive, behavior_roaming: :random },
:REGIROCK => { behavior_noticed: :still, behavior_roaming: :look_around },
:REGICE => { behavior_noticed: :still, behavior_roaming: :look_around },
@@ -427,7 +428,7 @@ POKEMON_BEHAVIOR_DATA =
: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 },
:STARLY => { behavior_noticed: :skittish, behavior_roaming: :random , behavior_pokemon: {:WURMPLE => :aggressive, :CHERUBI => :semi_aggressive, :WORMADAM_P => :semi_aggressive, :WORMADAM_S => :semi_aggressive, :WORMADAM_T => :semi_aggressive, :SCATTERBUG => :aggressive, :PERSIAN => :skittish, :GROTLE => :curious}},
:STARAVIA => { behavior_noticed: :aggressive, behavior_roaming: :random },
:STARAPTOR => { behavior_noticed: :aggressive, behavior_roaming: :random },
:BIDOOF => { behavior_noticed: nil, behavior_roaming: :random },
@@ -446,10 +447,10 @@ POKEMON_BEHAVIOR_DATA =
: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_P => { behavior_noticed: :still, behavior_roaming: :still , behavior_pokemon: {:STARLY => :skittish}},
:WORMADAM_S => { behavior_noticed: :still, behavior_roaming: :still },
:WORMADAM_T => { behavior_noticed: :still, behavior_roaming: :still },
:MOTHIM => { behavior_noticed: :curious, behavior_roaming: :random },
:WORMADAM_T => { behavior_noticed: :still, behavior_roaming: :still , behavior_pokemon: {:STARLY => :shy}},
:MOTHIM => { behavior_noticed: :curious, behavior_roaming: :random , behavior_pokemon: {:COMBEE => :curious}},
:COMBEE => { behavior_noticed: :skittish, behavior_roaming: :random },
:VESPIQUEN => { behavior_noticed: :aggressive, behavior_roaming: :random },
:PACHIRISU => { behavior_noticed: :curious, behavior_roaming: :random },
@@ -462,9 +463,9 @@ POKEMON_BEHAVIOR_DATA =
: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 },
:AMBIPOM => { behavior_noticed: :curious, behavior_roaming: :random , behavior_pokemon: {:PASSIMIAN => :semi_aggressive}},
:DRIFLOON => { behavior_noticed: :curious, behavior_roaming: :random, behavior_wind_roaming: :blown_away , behavior_pokemon: {:JOLTIK => :semi_aggressive}},
:DRIFBLIM => { behavior_noticed: :curious, behavior_roaming: :random , behavior_pokemon: {:CLAMPERL => :semi_aggressive}},
:BUNEARY => { behavior_noticed: :skittish, behavior_roaming: :random },
:LOPUNNY => { behavior_noticed: nil, behavior_roaming: :random },
:MISMAGIUS => { behavior_noticed: :curious, behavior_roaming: :random },
@@ -483,8 +484,8 @@ POKEMON_BEHAVIOR_DATA =
: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 },
:GABITE => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:SABLEYE => :semi_aggressive}},
:GARCHOMP => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:SALAMENCE => :aggressive}},
:MUNCHLAX => { behavior_noticed: :curious, behavior_roaming: :random },
:RIOLU => { behavior_noticed: :curious, behavior_roaming: :random },
:LUCARIO => { behavior_noticed: :aggressive, behavior_roaming: :random },
@@ -495,11 +496,11 @@ POKEMON_BEHAVIOR_DATA =
: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 },
:FINNEON => { behavior_noticed: :skittish, behavior_roaming: :random, glow_in_the_dark: true , behavior_pokemon: {:WINGULL => :shy, :SHARPEDO => :skittish}},
:LUMINEON => { behavior_noticed: nil, behavior_roaming: :random, glow_in_the_dark: true , behavior_pokemon: {:STARYU => :semi_aggressive, :SHARPEDO => :skittish, :CLAMPERL => :semi_aggressive}},
:SNOVER => { behavior_noticed: nil, behavior_roaming: :random , behavior_pokemon: {:STARMIE => :aggressive}},
:ABOMASNOW => { behavior_noticed: :aggressive, behavior_roaming: :random },
:WEAVILE => { behavior_noticed: :aggressive, behavior_roaming: :random },
:WEAVILE => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:ALOLAN_SANDSHREW => :aggressive, :ALOLAN_VULPIX => :aggressive, :MAMOSWINE => :aggressive}},
:MAGNEZONE => { behavior_noticed: :still, behavior_roaming: :random },
:LICKILICKY => { behavior_noticed: nil, behavior_roaming: :random },
:RHYFERIOR => { behavior_noticed: :aggressive, behavior_roaming: :random },
@@ -559,7 +560,7 @@ POKEMON_BEHAVIOR_DATA =
: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 },
:ROGGENROLA => { behavior_noticed: :still, behavior_roaming: :look_around , behavior_pokemon: {:DWEBBLE => :shy}},
:BOLDORE => { behavior_noticed: :still, behavior_roaming: :look_around },
:GIGALITH => { behavior_noticed: :still, behavior_roaming: :look_around },
:WOOBAT => { behavior_noticed: :curious, behavior_roaming: :random },
@@ -581,19 +582,19 @@ POKEMON_BEHAVIOR_DATA =
: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 },
:COTTONEE => { behavior_noticed: :skittish, behavior_roaming: :random, behavior_wind_roaming: :blown_away },
: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 },
:BASCULIN => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:CARVANHA => :aggressive}},
:SANDILE => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:TRAPINCH => :semi_aggressive}},
:KROKOROK => { behavior_noticed: :aggressive, behavior_roaming: :random },
:KROOKODILE => { behavior_noticed: :aggressive, behavior_roaming: :random },
:KROOKODILE => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:FLYGON => :curious}},
: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 },
:DWEBBLE => { behavior_noticed: :skittish, behavior_roaming: :still , behavior_pokemon: {:ROGGENROLA => :semi_aggressive, :HIPPOWDON => :curious}},
:CRUSTLE => { behavior_noticed: :still, behavior_roaming: :random },
:SCRAGGY => { behavior_noticed: :aggressive, behavior_roaming: :random },
:SCRAFTY => { behavior_noticed: :aggressive, behavior_roaming: :random },
@@ -601,11 +602,11 @@ POKEMON_BEHAVIOR_DATA =
: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 },
:CARRACOSTA => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:OMANYTE => :semi_aggressive, :OMASTAR => :semi_aggressive}},
: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 },
:ARCHEOPS => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:OMANYTE => :aggressive}},
:TRUBBISH => { behavior_noticed: :curious, behavior_roaming: :random , behavior_pokemon: {:ALOLAN_GRIMER => :skittish, :ALOLAN_MUK => :skittish, :GRIMER => :skittish, :MUK => :skittish}},
:GARBODOR => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:ALOLAN_GRIMER => :shy, :ALOLAN_MUK => :shy, :GRIMER => :shy, :MUK => :shy}},
:ZORUA => { behavior_noticed: :flee, behavior_roaming: :random },
:ZOROARK => { behavior_noticed: :aggressive, behavior_roaming: :random },
:MINCCINO => { behavior_noticed: :curious, behavior_roaming: :random },
@@ -618,25 +619,25 @@ POKEMON_BEHAVIOR_DATA =
: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 },
:VANILLITE => { behavior_noticed: nil, behavior_roaming: :random , behavior_pokemon: {:GLALIE => :skittish}},
: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 },
:DEERLING_SPRING => { behavior_noticed: :skittish, behavior_roaming: :random , behavior_pokemon: {:LYCANROC_D => :skittish, :LYCANROC_DUSK => :skittish, :LYCANROC_N => :skittish}},
:DEERLING_SUMMER => { behavior_noticed: :skittish, behavior_roaming: :random , behavior_pokemon: {:LYCANROC_D => :skittish, :LYCANROC_DUSK => :skittish, :LYCANROC_N => :skittish}},
:DEERLING_AUTUMN => { behavior_noticed: :skittish, behavior_roaming: :random , behavior_pokemon: {:LYCANROC_D => :skittish, :LYCANROC_DUSK => :skittish, :LYCANROC_N => :skittish}},
:DEERLING_WINTER => { behavior_noticed: :skittish, behavior_roaming: :random , behavior_pokemon: {:LYCANROC_D => :skittish, :LYCANROC_DUSK => :skittish, :LYCANROC_N => :skittish}},
: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 },
:KARRABLAST => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:SHELMET => :semi_aggressive}},
:ESCAVALIER => { behavior_noticed: nil, behavior_roaming: :random , behavior_pokemon: {:SHELMET => :semi_aggressive}},
: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 },
:JELLICENT => { behavior_noticed: :semi_aggressive, behavior_roaming: :random },
:JOLTIK => { behavior_noticed: nil, behavior_roaming: :random , behavior_pokemon: {:PIKACHU => :semi_aggressive, :STUNFISK => :semi_aggressive, :EMOLGA => :semi_aggressive}},
:GALVANTULA => { behavior_noticed: nil, behavior_roaming: :random },
:FERROSEED => { behavior_noticed: nil, behavior_roaming: :random },
:FERROTHORN => { behavior_noticed: nil, behavior_roaming: :random },
@@ -652,27 +653,27 @@ POKEMON_BEHAVIOR_DATA =
: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 },
:FRAXURE => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:BISHARP => :aggressive}},
:HAXORUS => { behavior_noticed: :aggressive, behavior_roaming: :random },
:CUBCHOO => { behavior_noticed: :curious, behavior_roaming: :random },
:BEARTIC => { behavior_noticed: :aggressive, behavior_roaming: :random },
:BEARTIC => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:MAGIKARP => :semi_aggressive}},
: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 },
:DRUDDIGON => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:ALOLAN_DIGLETT => :semi_aggressive, :ALOLAN_DUGTRIO => :semi_aggressive, :DIGLETT => :semi_aggressive, :DUGTRIO => :semi_aggressive}},
: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 },
:BISHARP => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:FRAXURE => :aggressive}},
:BOUFFALANT => { behavior_noticed: :aggressive, behavior_roaming: :random },
:RUFFLET => { behavior_noticed: :aggressive, behavior_roaming: :random },
:RUFFLET => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:SHELLDER => :aggressive, :SPEWPA => :semi_aggressive}},
: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 },
:MANDIBUZZ => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:CUBONE => :aggressive}},
:HEATMOR => { behavior_noticed: nil, behavior_roaming: :random , behavior_pokemon: {:DURANT => :aggressive}},
:DURANT => { behavior_noticed: :aggressive, behavior_roaming: :random },
:DEINO => { behavior_noticed: :aggressive, behavior_roaming: :random },
:ZWEILOUS => { behavior_noticed: :aggressive, behavior_roaming: :random },
@@ -706,19 +707,19 @@ POKEMON_BEHAVIOR_DATA =
: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 },
:FLETCHLING => { behavior_noticed: :curious, behavior_roaming: :random },
:FLETCHINDER => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:PIKIPEK => :aggressive}},
:TALONFLAME => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:WINGULL => :aggressive, :PIKIPEK => :aggressive}},
: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 },
:FLABEBE => { behavior_noticed: :curious, behavior_roaming: :random },
:FLOETTE => { behavior_noticed: :curious, behavior_roaming: :random },
:FLORGES => { behavior_noticed: :curious, behavior_roaming: :random },
:SKIDDO => { behavior_noticed: :curious, behavior_roaming: :random, hop_cliff:true},
:GOGOAT => { behavior_noticed: nil, behavior_roaming: :random, hop_cliff:true},
:PANCHAM => { behavior_noticed: :curious, behavior_roaming: :random },
:PANGORO => { behavior_noticed: :aggressive, behavior_roaming: :random },
:FURFROU => { behavior_noticed: nil, behavior_roaming: :random },
@@ -732,12 +733,12 @@ POKEMON_BEHAVIOR_DATA =
: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 },
:INKAY => { behavior_noticed: :curious, behavior_roaming: :random , behavior_pokemon: {:CHINCHOU => :semi_aggressive}},
: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 },
:SKRELP => { behavior_noticed: nil, behavior_roaming: :random , behavior_pokemon: {:DHELMISE => :curious}},
:DRAGALGE => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:DHELMISE => :curious}},
:CLAUNCHER => { behavior_noticed: nil, behavior_roaming: :random },
:CLAWITZER => { behavior_noticed: :aggressive, behavior_roaming: :random },
:HELIOPTILE => { behavior_noticed: :curious, behavior_roaming: :random },
@@ -747,9 +748,9 @@ POKEMON_BEHAVIOR_DATA =
: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 },
:HAWLUCHA => { behavior_noticed: nil, behavior_roaming: :random , behavior_pokemon: {:PRIMEAPE => :aggressive}},
:DEDENNE => { behavior_noticed: :skittish, behavior_roaming: :random },
:CARBINK => { behavior_noticed: :still, behavior_roaming: :look_around },
:CARBINK => { behavior_noticed: :still, behavior_roaming: :look_around , behavior_pokemon: {:SABLEYE => :shy}},
: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 },
@@ -778,45 +779,45 @@ POKEMON_BEHAVIOR_DATA =
: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 },
:PIKIPEK => { behavior_noticed: :curious, behavior_roaming: :random , behavior_pokemon: {:TALONFLAME => :skittish, :METAPOD => :aggressive, :FLETCHINDER => :shy, :BOUNSWEET => :aggressive}},
:TRUMBEAK => { behavior_noticed: :curious, behavior_roaming: :random },
:TOUCANNON => { behavior_noticed: :aggressive, behavior_roaming: :random },
:TOUCANNON => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:BOUNSWEET => :aggressive}},
:YUNGOOS => { behavior_noticed: :aggressive, behavior_roaming: :random },
:GUMSHOOS => { behavior_noticed: :aggressive, behavior_roaming: :random },
:GUMSHOOS => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:RATTATA => :semi_aggressive, :RATICATE => :semi_aggressive, :ALOLAN_RATTATA => :semi_aggressive, :ALOLAN_RATICATE => :semi_aggressive}},
: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 },
:VIKAVOLT => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:PINSIR => :aggressive, :HERACROSS => :aggressive}},
:CRABRAWLER => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:EXEGGCUTE => :semi_aggressive}},
: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 },
:CUTIEFLY => { behavior_noticed: :skittish, behavior_roaming: :random , behavior_pokemon: {:SPINARAK => :shy, :PINECO => :shy, :BUTTERFREE => :semi_aggressive, :FOMANTIS => :curious}},
: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 },
:ROCKRUFF => { behavior_noticed: :curious, behavior_roaming: :random , behavior_pokemon: {:GROWLITHE => :semi_aggressive}},
:LYCANROC_D => { behavior_noticed: nil, behavior_roaming: :random , behavior_pokemon: {:DEERLING_SPRING => :semi_aggressive, :DEERLING_SUMMER => :semi_aggressive, :DEERLING_AUTUMN => :semi_aggressive, :DEERLING_WINTER => :semi_aggressive}},
:LYCANROC_DUSK => { behavior_noticed: :curious, behavior_roaming: :random , behavior_pokemon: {:DEERLING_SPRING => :semi_aggressive, :DEERLING_SUMMER => :semi_aggressive, :DEERLING_AUTUMN => :semi_aggressive, :DEERLING_WINTER => :semi_aggressive}},
:LYCANROC_N => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:DEERLING_SPRING => :aggressive, :DEERLING_SUMMER => :aggressive, :DEERLING_AUTUMN => :aggressive, :DEERLING_WINTER => :aggressive}},
:WISHIWASHI => { behavior_noticed: :skittish, behavior_roaming: :random , behavior_pokemon: {:DEWGONG => :skittish, :WAILMER => :skittish, :WAILORD => :skittish, :WINGULL => :skittish, :PELIPPER => :skittish}},
:WISHIWASHI_SCHOOL => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:WAILORD => :skittish}},
:MAREANIE => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:CORSOLA => :aggressive, :CLAMPERL => :semi_aggressive}},
:TOXAPEX => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:CORSOLA => :semi_aggressive, :BRUXISH => :aggressive}},
:MUDSDALE => { behavior_noticed: nil, behavior_roaming: :random },
:DEWPIDER => { behavior_noticed: nil, behavior_roaming: :random },
:DEWPIDER => { behavior_noticed: nil, behavior_roaming: :random , behavior_pokemon: {:SURSKIT => :semi_aggressive}},
: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 },
:FOMANTIS => { behavior_noticed: :shy, behavior_roaming: :random , behavior_pokemon: {:CUTIEFLY => :semi_aggressive}},
:LURANTIS => { behavior_noticed: nil, behavior_roaming: :random , behavior_pokemon: {:KRICKETOT => :semi_aggressive}},
:MORELULL => { behavior_noticed: :shy, behavior_roaming: :random, glow_in_the_dark: true },
:SHIINOTIC => { behavior_noticed: nil, behavior_roaming: :random, glow_in_the_dark: true , behavior_pokemon: {:PARASECT => :aggressive}},
:STUFFUL => { behavior_noticed: :curious, behavior_roaming: :random },
:BEWEAR => { behavior_noticed: :aggressive, behavior_roaming: :random },
:BOUNSWEET => { behavior_noticed: :skittish, behavior_roaming: :random },
:BEWEAR => { behavior_noticed: :excited, behavior_roaming: :random },
:BOUNSWEET => { behavior_noticed: :skittish, behavior_roaming: :random , behavior_pokemon: {:AIPOM => :skittish, :BOUNSWEET => :skittish}},
: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 },
:PASSIMIAN => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:AMBIPOM => :semi_aggressive}},
:WIMPOD => { behavior_noticed: :flee, behavior_roaming: :random },
:GOLISOPOD => { behavior_noticed: :aggressive, behavior_roaming: :random },
:SANDYGAST => { behavior_noticed: :still, behavior_roaming: :still },
@@ -828,11 +829,11 @@ POKEMON_BEHAVIOR_DATA =
: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 },
:TOGEDEMARU => { behavior_noticed: :curious, behavior_roaming: :random , behavior_pokemon: {:ELEKID => :semi_aggressive}},
:MIMIKYU => { behavior_noticed: :shy, behavior_roaming: :random },
:BRUXISH => { behavior_noticed: :aggressive, behavior_roaming: :random },
:BRUXISH => { behavior_noticed: :aggressive, behavior_roaming: :random , behavior_pokemon: {:SHELLDER => :aggressive, :MAREANIE => :aggressive, :TOXAPEX => :aggressive}},
:DRAMPA => { behavior_noticed: nil, behavior_roaming: :random },
:DHELMISE => { behavior_noticed: :still, behavior_roaming: :look_around },
:DHELMISE => { behavior_noticed: :still, behavior_roaming: :look_around , behavior_pokemon: {:WAILMER => :semi_aggressive, :WAILORD => :aggressive, :SKRELP => :curious, :DRAGALGE => :curious}},
:JANGMOO => { behavior_noticed: :curious, behavior_roaming: :random },
:HAKAMOO => { behavior_noticed: nil, behavior_roaming: :random },
:KOMMOO => { behavior_noticed: :aggressive, behavior_roaming: :random },
@@ -862,7 +863,6 @@ POKEMON_BEHAVIOR_DATA =
:ZERAORA => { behavior_noticed: :aggressive, behavior_roaming: :random },
:MELTAN => { behavior_noticed: :curious, behavior_roaming: :random },
:MELMETAL => { behavior_noticed: :aggressive, behavior_roaming: :random },
}
@@ -21,6 +21,21 @@ def getRoamingSprite(species_data,shiny=false)
return flyingPath if flyingPath
end
def get_ow_sprite_path(species_data,sprite_name,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}_#{sprite_name}"
if pbResolveBitmap("Graphics/Characters/#{path}")
return path
end
end
def getOverworldLandPath(species_data,shiny=false)
species = species_data.species
is_fusion = isSpeciesFusion(species)
@@ -37,48 +52,22 @@ def getOverworldLandPath(species_data,shiny=false)
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
return get_ow_sprite_path(species_data,"fly",shiny)
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
return get_ow_sprite_path(species_data,"notice",shiny)
end
def getOverworldSwimmingPath(species_data,shiny=false)
species = species_data.species
return get_ow_sprite_path(species_data,"swim",shiny)
end
is_fusion = isSpeciesFusion(species)
if is_fusion
species_name = species_data.get_body_species_symbol.to_s
def getOverworldIdleAnimation(species_data,is_flying, shiny=false)
if is_flying
return get_ow_sprite_path(species_data,"fly_idle",shiny)
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
return get_ow_sprite_path(species_data,"idle",shiny)
end
end
@@ -93,4 +82,19 @@ def getRandomPokemonFromRoute(excluded_species,terrain)
i+=1
end
return GameData::Species.get(random_species)
end
#Used when using Roar in the OW. Makes all the pokemon near the player back off.
def scareOffWildPokemon(radius=5)
pokemon_in_radius = []
events_in_radius = getEventsInRadius(radius)
events_in_radius.each do |event|
pokemon_in_radius << event if event.is_a?(OverworldPokemonEvent)
end
pokemon_in_radius.each do |pokemon_event|
playAnimation(EXCLAMATION_ANIMATION_ID,pokemon_event.x,pokemon_event.y)
pokemon_event.move_away_from_player
pokemon_event.move_away_from_player
end
end