TheoAllen

rand enc

Jan 30th, 2019
444
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.31 KB | None | 0 0
  1. class Game_Character
  2. def locate_near_player
  3. x = 0
  4. y = 0
  5. loop do
  6. x = $game_player.x + (rand(3) * (rand <= 0.5 ? -1 : 1))
  7. y = $game_player.y + (rand(3) * (rand <= 0.5 ? -1 : 1))
  8. break if [2,4,6,8].any? do |dir|
  9. passable?(x, y, dir)
  10. end && (x - $game_player.x).abs + (y - $game_player.y).abs >= 2
  11. end
  12. moveto(x,y)
  13. end
  14. end
  15.  
  16. class Game_Interpreter
  17. def command_301
  18. return if $game_party.in_battle
  19. if @params[0] == 0 # Direct designation
  20. troop_id = @params[1]
  21. elsif @params[0] == 1 # Designation with variables
  22. troop_id = $game_variables[@params[1]]
  23. else # Map-designated troop
  24. troop_id = $game_player.make_encounter_troop_id
  25. end
  26. if $data_troops[troop_id]
  27. BattleManager.setup(troop_id, @params[2], @params[3])
  28. BattleManager.event_proc = Proc.new {|n| @branch[@indent] = n }
  29. SceneManager.call(Scene_Battle)
  30. end
  31. Fiber.yield
  32. end
  33. end
  34.  
  35.  
  36. class Game_System
  37. attr_accessor :warning
  38.  
  39. alias ed_warning_init initialize
  40. def initialize
  41. ed_warning_init
  42. @warning = false
  43. end
  44.  
  45. end
  46.  
  47. class Warning_Sprite < Sprite
  48. IconSafe = 189
  49. IconUnsafe = 190
  50. IconEngage = 187
  51. WarningRefresh = 5
  52.  
  53. def initialize
  54. super
  55. @last_count = $game_player.encounter_count
  56. make_bitmaps
  57. update
  58. update_pos
  59. update_bitmap
  60. self.opacity = 0
  61. end
  62.  
  63. def make_bitmaps
  64. icon = Cache.system("iconset")
  65. @bitmaps = []
  66. [IconSafe,IconUnsafe,IconEngage].each do |index|
  67. rect = Rect.new(index % 16 * 24, index / 16 * 24, 24, 24)
  68. bmp = Bitmap.new(32,32)
  69. bmp.blt(0,0,icon,rect)
  70. @bitmaps.push(bmp)
  71. end
  72. end
  73.  
  74. def update
  75. super
  76. if @last_count != $game_player.encounter_count
  77. @last_count = $game_player.encounter_count
  78. update_bitmap
  79. end
  80. if $game_system.warning
  81. self.opacity = [128,opacity+5].min
  82. else
  83. self.opacity = [0,opacity-5].max
  84. end
  85. end
  86.  
  87. def update_bitmap
  88. level = $game_player.warning_level
  89. self.bitmap = @bitmaps[level]
  90. end
  91.  
  92. def update_pos
  93. self.x = Graphics.width - 32
  94. self.y = 8
  95. end
  96.  
  97. end
  98.  
  99. class Game_Event
  100. def move_type_toward_player
  101. return if @stopping && @stopping > 0
  102. if near_the_player?
  103. case rand(6)
  104. when 0..3; move_toward_player
  105. when 4; move_random
  106. when 5; move_forward
  107. end
  108. else
  109. move_random
  110. end
  111. end
  112.  
  113. def life_span
  114. @stopping -= 1
  115. @life_count -= 1
  116. if @life_count <= 0
  117. @stopping = nil
  118. @life_count = nil
  119. self.animation_id = 194
  120. self_switch('A', false)
  121. end
  122. end
  123.  
  124. def random_encounter?
  125. self.name.include?("<random>")
  126. end
  127.  
  128. def switch_is_on?(letter)
  129. key = [@map_id, @id, letter]
  130. $game_self_switches[key]
  131. end
  132.  
  133. def collide_with_events?(x, y)
  134. $game_map.events_xy_nt(x, y).any? do |event|
  135. event.priority_type == self.priority_type
  136. end
  137. end
  138.  
  139. end
  140.  
  141. class Game_Player
  142. attr_reader :encounter_count
  143.  
  144. def moveto(x, y)
  145. super
  146. center(x, y)
  147. vehicle.refresh if vehicle
  148. @followers.synchronize(x, y, direction)
  149. end
  150.  
  151. def make_encounter_count
  152. n = $game_map.encounter_step
  153. @encounter_count = n + rand(10) - rand(10)
  154. end
  155.  
  156. def encounter
  157. make_encounter_count unless @encounter_count
  158. return false if $game_map.interpreter.running?
  159. return false if $game_system.encounter_disabled
  160. return false if @encounter_count > 0
  161. make_encounter_count
  162. $game_map.encounter_events.each do |ev|
  163. ev.self_switch('A', true)
  164. ev.locate_near_player
  165. end
  166. end
  167.  
  168. def update_encounter
  169. return if $TEST && Input.press?(:CTRL)
  170. return if $game_party.encounter_none?
  171. return if $game_map.encounter_events.empty?
  172. return if @move_route_forcing
  173. return if $game_map.encounter_events.any? {|ev| ev.switch_is_on?('A')}
  174. @encounter_count -= 1
  175. if @encounter_count == 2
  176. RPG::SE.new('Jump1',60,135).play
  177. self.balloon_id = 1
  178. end
  179. end
  180.  
  181. def warning_level
  182. make_encounter_count unless @encounter_count
  183. return 2 if $game_map.encounter_events.any? {|ev| ev.switch_is_on?('A')}
  184. return 2 if @encounter_count <= 10
  185. return 1 if @encounter_count <= 30
  186. return 0
  187. end
  188.  
  189. end
  190.  
  191. class Game_Map
  192.  
  193. alias random_encounter_setup setup
  194. def setup(map_id)
  195. @enc_events = nil
  196. random_encounter_setup(map_id)
  197. end
  198.  
  199. def encounter_events
  200. @enc_events ||= @events.values.select {|ev| ev.random_encounter?}
  201. end
  202.  
  203. def nearby_visible_encounters
  204. @events.values.select do |ev|
  205. sx = ev.distance_x_from($game_player.x).abs
  206. sy = ev.distance_y_from($game_player.y).abs
  207. sx + sy <= 6 && ev.name.include?("Enc")
  208. end
  209. end
  210.  
  211. end
  212.  
  213. class Scene_Map
  214. alias ed_warning_start start
  215. def start
  216. ed_warning_start
  217. @warn = Warning_Sprite.new
  218. @warn.z = 100
  219. end
  220.  
  221. alias ed_warning_update update
  222. def update
  223. ed_warning_update
  224. @warn.update
  225. end
  226.  
  227. alias ed_warning_terminate terminate
  228. def terminate
  229. ed_warning_terminate
  230. @warn.dispose
  231. end
  232.  
  233. def update_encounter
  234. $game_player.encounter
  235. end
  236. end
Advertisement
Add Comment
Please, Sign In to add comment