Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Game_Character
- def locate_near_player
- x = 0
- y = 0
- loop do
- x = $game_player.x + (rand(3) * (rand <= 0.5 ? -1 : 1))
- y = $game_player.y + (rand(3) * (rand <= 0.5 ? -1 : 1))
- break if [2,4,6,8].any? do |dir|
- passable?(x, y, dir)
- end && (x - $game_player.x).abs + (y - $game_player.y).abs >= 2
- end
- moveto(x,y)
- end
- end
- class Game_Interpreter
- def command_301
- return if $game_party.in_battle
- if @params[0] == 0 # Direct designation
- troop_id = @params[1]
- elsif @params[0] == 1 # Designation with variables
- troop_id = $game_variables[@params[1]]
- else # Map-designated troop
- troop_id = $game_player.make_encounter_troop_id
- end
- if $data_troops[troop_id]
- BattleManager.setup(troop_id, @params[2], @params[3])
- BattleManager.event_proc = Proc.new {|n| @branch[@indent] = n }
- SceneManager.call(Scene_Battle)
- end
- Fiber.yield
- end
- end
- class Game_System
- attr_accessor :warning
- alias ed_warning_init initialize
- def initialize
- ed_warning_init
- @warning = false
- end
- end
- class Warning_Sprite < Sprite
- IconSafe = 189
- IconUnsafe = 190
- IconEngage = 187
- WarningRefresh = 5
- def initialize
- super
- @last_count = $game_player.encounter_count
- make_bitmaps
- update
- update_pos
- update_bitmap
- self.opacity = 0
- end
- def make_bitmaps
- icon = Cache.system("iconset")
- @bitmaps = []
- [IconSafe,IconUnsafe,IconEngage].each do |index|
- rect = Rect.new(index % 16 * 24, index / 16 * 24, 24, 24)
- bmp = Bitmap.new(32,32)
- bmp.blt(0,0,icon,rect)
- @bitmaps.push(bmp)
- end
- end
- def update
- super
- if @last_count != $game_player.encounter_count
- @last_count = $game_player.encounter_count
- update_bitmap
- end
- if $game_system.warning
- self.opacity = [128,opacity+5].min
- else
- self.opacity = [0,opacity-5].max
- end
- end
- def update_bitmap
- level = $game_player.warning_level
- self.bitmap = @bitmaps[level]
- end
- def update_pos
- self.x = Graphics.width - 32
- self.y = 8
- end
- end
- class Game_Event
- def move_type_toward_player
- return if @stopping && @stopping > 0
- if near_the_player?
- case rand(6)
- when 0..3; move_toward_player
- when 4; move_random
- when 5; move_forward
- end
- else
- move_random
- end
- end
- def life_span
- @stopping -= 1
- @life_count -= 1
- if @life_count <= 0
- @stopping = nil
- @life_count = nil
- self.animation_id = 194
- self_switch('A', false)
- end
- end
- def random_encounter?
- self.name.include?("<random>")
- end
- def switch_is_on?(letter)
- key = [@map_id, @id, letter]
- $game_self_switches[key]
- end
- def collide_with_events?(x, y)
- $game_map.events_xy_nt(x, y).any? do |event|
- event.priority_type == self.priority_type
- end
- end
- end
- class Game_Player
- attr_reader :encounter_count
- def moveto(x, y)
- super
- center(x, y)
- vehicle.refresh if vehicle
- @followers.synchronize(x, y, direction)
- end
- def make_encounter_count
- n = $game_map.encounter_step
- @encounter_count = n + rand(10) - rand(10)
- end
- def encounter
- make_encounter_count unless @encounter_count
- return false if $game_map.interpreter.running?
- return false if $game_system.encounter_disabled
- return false if @encounter_count > 0
- make_encounter_count
- $game_map.encounter_events.each do |ev|
- ev.self_switch('A', true)
- ev.locate_near_player
- end
- end
- def update_encounter
- return if $TEST && Input.press?(:CTRL)
- return if $game_party.encounter_none?
- return if $game_map.encounter_events.empty?
- return if @move_route_forcing
- return if $game_map.encounter_events.any? {|ev| ev.switch_is_on?('A')}
- @encounter_count -= 1
- if @encounter_count == 2
- RPG::SE.new('Jump1',60,135).play
- self.balloon_id = 1
- end
- end
- def warning_level
- make_encounter_count unless @encounter_count
- return 2 if $game_map.encounter_events.any? {|ev| ev.switch_is_on?('A')}
- return 2 if @encounter_count <= 10
- return 1 if @encounter_count <= 30
- return 0
- end
- end
- class Game_Map
- alias random_encounter_setup setup
- def setup(map_id)
- @enc_events = nil
- random_encounter_setup(map_id)
- end
- def encounter_events
- @enc_events ||= @events.values.select {|ev| ev.random_encounter?}
- end
- def nearby_visible_encounters
- @events.values.select do |ev|
- sx = ev.distance_x_from($game_player.x).abs
- sy = ev.distance_y_from($game_player.y).abs
- sx + sy <= 6 && ev.name.include?("Enc")
- end
- end
- end
- class Scene_Map
- alias ed_warning_start start
- def start
- ed_warning_start
- @warn = Warning_Sprite.new
- @warn.z = 100
- end
- alias ed_warning_update update
- def update
- ed_warning_update
- @warn.update
- end
- alias ed_warning_terminate terminate
- def terminate
- ed_warning_terminate
- @warn.dispose
- end
- def update_encounter
- $game_player.encounter
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment