Guest User

Zeus Light & Shadow

a guest
Jul 12th, 2015
277
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 23.04 KB | None | 0 0
  1. # Zeus Lights & Shadows v1.3 for XP, VX and VXace by Zeus81
  2. # €30 for commercial use
  3. # Licence : http://creativecommons.org/licenses/by-nc-nd/3.0/
  4. # Contact : zeusex81@gmail.com
  5. # (fr) Manuel d'utilisation : http://pastebin.com/raw.php?i=xfu8yG0q
  6. # (en) User Guide : http://pastebin.com/raw.php?i=9bnzSHCw
  7. # Demo : https://www.dropbox.com/sh/cajvk3wf6ue0ivf/QA9zgrm2Vx
  8.  
  9. module Zeus_Lights_Shadows
  10. extend self
  11.  
  12. Disable_Lights = false
  13. Disable_Shadows = false
  14. Disable_AutoShadows = false
  15.  
  16. def light(key = "event#@event_id")
  17. $game_map.lights[key] ||= Game_Light.new
  18. end
  19. def shadow(key = "event#@event_id")
  20. $game_map.shadows[key] ||= Game_Shadow.new
  21. end
  22. def set_shadowable(value, chara_id=@event_id)
  23. chara = zls_get_character(chara_id)
  24. chara.shadowable = value if chara
  25. end
  26. def zls_get_character(id)
  27. case id
  28. when 0 ; nil
  29. when -1 ; $game_player
  30. when -2, -3, -4; $game_player.followers[-id-2] if RPG_VERSION == :vxace
  31. when -5, -6, -7; $game_map.vehicles[-id-5] if RPG_VERSION != :xp
  32. else $game_map.events[id]
  33. end
  34. end
  35. end
  36.  
  37. $imported ||= {}
  38. $imported[:Zeus_Lights_Shadows] = __FILE__
  39. RPG_VERSION = RUBY_VERSION == '1.8.1' ? defined?(Hangup) ? :xp : :vx : :vxace
  40.  
  41. module Zeus_Animation
  42. def animate(variable, target_value, duration=0, ext=nil)
  43. @za_animations ||= {}
  44. if duration < 1
  45. update_animation_value(variable, target_value, 1, ext)
  46. @za_animations.delete(variable)
  47. else
  48. @za_animations[variable] = [target_value, duration.to_i, ext]
  49. end
  50. end
  51. private
  52. def update_animations
  53. @za_animations ||= {}
  54. @za_animations.delete_if do |variable, data|
  55. update_animation_value(variable, *data)
  56. (data[1] -= 1) == 0
  57. end
  58. end
  59. def calculate_next_value(value, target_value, duration)
  60. (value * (duration - 1) + target_value) / duration
  61. end
  62. def update_animation_value(variable, target_value, duration, ext)
  63. value = instance_variable_get(variable)
  64. method_name = "update_animation_variable_#{variable.to_s[1..-1]}"
  65. method_name = "update_animation_#{value.class}" unless respond_to?(method_name)
  66. send(method_name, variable, value, target_value, duration, ext)
  67. end
  68. def update_animation_Color(variable, value, target_value, duration, ext)
  69. value.red = calculate_next_value(value.red , target_value.red , duration)
  70. value.green = calculate_next_value(value.green, target_value.green, duration)
  71. value.blue = calculate_next_value(value.blue , target_value.blue , duration)
  72. value.alpha = calculate_next_value(value.alpha, target_value.alpha, duration)
  73. end
  74. def update_animation_Float(variable, value, target_value, duration, ext)
  75. value = calculate_next_value(value, target_value, duration)
  76. instance_variable_set(variable, value)
  77. end
  78. alias update_animation_Fixnum update_animation_Float
  79. alias update_animation_Bignum update_animation_Float
  80. end
  81.  
  82. class Game_Light_Shadow_Base
  83. include Zeus_Animation
  84. attr_accessor :chara_id, :active, :visible, :filename, :opacity, :color,
  85. :x, :y, :ox, :oy, :zoom_x, :zoom_y, :parallax_x, :parallax_y,
  86. :direction, :directions, :pattern, :patterns, :anime_rate
  87. def initialize
  88. clear
  89. end
  90. def clear
  91. @chara_id = 0
  92. @active = false
  93. @visible = true
  94. @filename = ""
  95. @opacity = 255
  96. @color ||= Color.new(0, 0, 0)
  97. @color.set(0, 0, 0, 255)
  98. @x = 0
  99. @y = 0
  100. @ox = 0.5
  101. @oy = 0.5
  102. @zoom_x = 1.0
  103. @zoom_y = 1.0
  104. @zoom2 = Math.sqrt(100.0)
  105. @parallax_x = 1.0
  106. @parallax_y = 1.0
  107. @direction = 0
  108. @directions = 1
  109. @pattern = 0
  110. @patterns = 1
  111. @anime_rate = 0.0
  112. end
  113. def setup(filename)
  114. @active = true
  115. @filename = filename
  116. end
  117. def update
  118. update_animations
  119. update_pattern
  120. end
  121. def update_pattern
  122. if @anime_rate > 0 and Graphics.frame_count % @anime_rate < 1
  123. @pattern += 1
  124. @pattern %= @patterns
  125. end
  126. end
  127. def set_pos(x, y, duration=0)
  128. animate(:@x, x, duration)
  129. animate(:@y, y, duration)
  130. end
  131. def set_origin(ox, oy, duration=0)
  132. animate(:@ox, ox / 100.0, duration)
  133. animate(:@oy, oy / 100.0, duration)
  134. end
  135. def set_parallax(x, y, duration=0)
  136. animate(:@parallax_x, x, duration)
  137. animate(:@parallax_y, y, duration)
  138. end
  139. def set_opacity(opacity, duration=0)
  140. opacity = opacity * 255 / 100
  141. animate(:@opacity, opacity, duration)
  142. end
  143. def set_color(red, green, blue, alpha, duration=0)
  144. animate(:@color, Color.new(red, green, blue, alpha), duration)
  145. end
  146. def set_zoom(zoom, duration=0)
  147. zoom = Math.sqrt([1, zoom].max)
  148. animate(:@zoom2, zoom, duration)
  149. end
  150. def update_animation_variable_zoom2(variable, value, target_value, duration, ext)
  151. @zoom2 = calculate_next_value(value, target_value, duration)
  152. @zoom_y = @zoom_x = @zoom2 ** 2 / 100.0
  153. end
  154. end
  155.  
  156. class Game_Shadow < Game_Light_Shadow_Base
  157. attr_accessor :size, :shadowable
  158. def clear
  159. super
  160. @size = nil
  161. @shadowable = true
  162. end
  163. def setup(filename_or_width, height=0)
  164. if filename_or_width.is_a?(String)
  165. @size = nil
  166. super(filename_or_width)
  167. else
  168. super("")
  169. @size ||= Rect.new(0, 0, 0, 0)
  170. @size.set(0, 0, filename_or_width.to_i, height.to_i)
  171. end
  172. end
  173. end
  174.  
  175. class Game_Light < Game_Light_Shadow_Base
  176. attr_accessor :z, :angle, :mirror, :blend_type, :flicker,
  177. :wave_amp, :wave_length, :wave_speed, :wave_phase
  178. def clear
  179. super
  180. @z = 0xC001
  181. @angle = 0.0
  182. @mirror = false
  183. @blend_type = 1
  184. @wave_amp = 0
  185. @wave_length = 180
  186. @wave_speed = 360
  187. @wave_phase = 0.0
  188. @flicker = 1.0
  189. @flicker_variance = 0.0
  190. @flicker_rate = 4.0
  191. end
  192. def update
  193. super
  194. update_flicker
  195. end
  196. def update_flicker
  197. if @flicker_variance == 0
  198. @flicker = 1
  199. elsif @flicker_rate == 0 or Graphics.frame_count % @flicker_rate < 1
  200. case rand(100)
  201. when 33; value = 1 - @flicker_variance*2
  202. when 66; value = 1 + @flicker_variance*2
  203. else value = 1 - @flicker_variance + @flicker_variance*2*rand
  204. end
  205. animate(:@flicker, value, @flicker_rate.to_i)
  206. end
  207. end
  208. def set_angle(angle, duration=0)
  209. animate(:@angle, angle, duration)
  210. end
  211. def set_wave(amp, length, speed, duration=0)
  212. animate(:@wave_amp , amp , duration)
  213. animate(:@wave_length, length, duration)
  214. animate(:@wave_speed , speed , duration)
  215. end
  216. def set_flicker(variance, refresh_rate, duration=0)
  217. animate(:@flicker_variance , variance / 100.0, duration)
  218. animate(:@flicker_rate , refresh_rate , duration)
  219. end
  220. end
  221.  
  222. class Game_Character
  223. attr_accessor :shadowable
  224. def shadowable
  225. @shadowable = true if @shadowable.nil?
  226. @shadowable
  227. end
  228. end
  229.  
  230. class Game_Map
  231. include Zeus_Lights_Shadows
  232. attr_reader :lights, :shadows, :auto_shadows
  233. alias zeus_lights_shadows_setup setup
  234. def setup(map_id)
  235. @lights ||= {}
  236. @lights.each_value {|data| data.clear if data.chara_id >= 0}
  237. @shadows ||= {}
  238. @shadows.each_value {|data| data.clear if data.chara_id >= 0}
  239. zeus_lights_shadows_setup(map_id)
  240. @auto_shadows ||= []
  241. @auto_shadows.clear
  242. init_auto_shadows if RPG_VERSION != :xp and (!Disable_Shadows or Disable_AutoShadows)
  243. end
  244. alias zeus_lights_shadows_update update
  245. def update(*args)
  246. zeus_lights_shadows_update(*args)
  247. @lights.each_value {|data| data.update}
  248. @shadows.each_value {|data| data.update}
  249. end
  250.  
  251. case RPG_VERSION
  252. when :vx
  253.  
  254. def init_auto_shadows
  255. grounds = [1552...1664, 2816...3008, 3200...3392, 3584...3776, 3968...4160]
  256. is_ground = Proc.new {|id| grounds.any? {|range| range.include?(id)}}
  257. is_wall = Proc.new {|id| id >= 4352}
  258. data.xsize.times do |x|
  259. data.ysize.times do |y|
  260. tile_id = data[x, y, 0]
  261. if is_wall.call(tile_id)
  262. data[x, y, 1] = tile_id
  263. data[x, y, 0] = 0
  264. elsif !Disable_Shadows and !Disable_AutoShadows and
  265. x > 0 and y > 0 and is_ground.call(tile_id) and
  266. is_wall.call(data[x-1, y, 1]) and is_wall.call(data[x-1, y-1, 1])
  267. then
  268. @auto_shadows << [x*32, y*32, 16, 32]
  269. end
  270. end
  271. end
  272. end
  273.  
  274. when :vxace
  275.  
  276. def init_auto_shadows
  277. data.xsize.times do |x|
  278. data.ysize.times do |y|
  279. shadow_id = data[x, y, 3] & 0b1111
  280. data[x, y, 3] -= shadow_id
  281. next if Disable_Shadows or Disable_AutoShadows or shadow_id == 0
  282. case shadow_id
  283. when 3; @auto_shadows << [x*32, y*32, 32, 16]
  284. when 5; @auto_shadows << [x*32, y*32, 16, 32]
  285. when 10; @auto_shadows << [x*32+16, y*32, 16, 32]
  286. when 12; @auto_shadows << [x*32, y*32+16, 32, 16]
  287. when 15; @auto_shadows << [x*32, y*32, 32, 32]
  288. else
  289. 4.times do |i|
  290. if shadow_id[i] == 1
  291. @auto_shadows << [x*32 + i%2*16, y*32 + i/2*16, 16, 16]
  292. end
  293. end
  294. end
  295. end
  296. end
  297. end
  298.  
  299. end # case RPG_VERSION
  300.  
  301. end
  302.  
  303. if RPG_VERSION == :xp
  304. Cache = RPG::Cache
  305. Game_Interpreter = Interpreter
  306. end
  307.  
  308. class Game_Interpreter
  309. include Zeus_Lights_Shadows
  310. end
  311.  
  312. class Spriteset_Lights_Shadows
  313. include Zeus_Lights_Shadows
  314. ShadowData = Struct.new(:bitmap, :opacity, :src_rect, :color,
  315. :x, :y, :ox, :oy, :zoom_x, :zoom_y)
  316. def initialize(viewport)
  317. @viewport = viewport
  318. @luminosity = 0
  319. unless Disable_Lights
  320. @night_layer = Sprite.new(@viewport)
  321. @night_layer.z = 0xC000
  322. @night_layer.blend_type = 2
  323. @night_layer.visible = false
  324. @night_color = Color.new(0, 0, 0)
  325. @lights = {}
  326. end
  327. unless Disable_Shadows
  328. @shadows_layer = Sprite.new(@viewport)
  329. @shadows_layer.visible = false
  330. @auto_shadows_color = Color.new(0, 0, 0, 255)
  331. @shadow_data = ShadowData.new
  332. @shadow_data.src_rect = Rect.new(0, 0, 0, 0)
  333. end
  334. refresh_bitmaps
  335. end
  336. def dispose
  337. unless Disable_Lights
  338. @night_layer.bitmap.dispose
  339. @night_layer.dispose
  340. @lights.each_value {|sprite| sprite.dispose}
  341. end
  342. unless Disable_Shadows
  343. @shadows_layer.bitmap.dispose
  344. @shadows_layer.dispose
  345. end
  346. end
  347. def update(character_sprites)
  348. refresh_bitmaps if bitmaps_need_refresh?
  349. update_luminosity
  350. update_lights unless Disable_Lights
  351. update_shadows(character_sprites) unless Disable_Shadows
  352. end
  353. def refresh_bitmaps
  354. unless Disable_Lights
  355. @night_layer.bitmap.dispose if @night_layer.bitmap
  356. @night_layer.bitmap = Bitmap.new(@viewport.rect.width, @viewport.rect.height)
  357. end
  358. unless Disable_Shadows
  359. @shadows_layer.bitmap.dispose if @shadows_layer.bitmap
  360. @shadows_layer.bitmap = Bitmap.new(@viewport.rect.width, @viewport.rect.height)
  361. end
  362. end
  363. def bitmaps_need_refresh?
  364. unless Disable_Lights
  365. return true if @night_layer.bitmap.width != @viewport.rect.width or
  366. @night_layer.bitmap.height != @viewport.rect.height
  367. end
  368. unless Disable_Shadows
  369. return true if @shadows_layer.bitmap.width != @viewport.rect.width or
  370. @shadows_layer.bitmap.height != @viewport.rect.height
  371. end
  372. return false
  373. end
  374. def update_luminosity
  375. r, g, b = @viewport.tone.red, @viewport.tone.green, @viewport.tone.blue
  376. @luminosity = (30*r.to_i + 59*g.to_i + 11*b.to_i) / 100
  377. end
  378. def update_lights
  379. $game_map.lights.delete_if do |key, data|
  380. if data.active
  381. update_light_sprite(key, data)
  382. else
  383. sprite = @lights.delete(key) and sprite.dispose
  384. end
  385. !data.active
  386. end
  387. @night_color.set(0, 0, 0)
  388. unless no_lights?
  389. r, g, b = @viewport.tone.red, @viewport.tone.green, @viewport.tone.blue
  390. @viewport.tone.red += @night_color.red = -r if r < 0
  391. @viewport.tone.green += @night_color.green = -g if g < 0
  392. @viewport.tone.blue += @night_color.blue = -b if b < 0
  393. end
  394. if @night_color.red + @night_color.green + @night_color.blue == 0
  395. @night_layer.visible = false
  396. return
  397. end
  398. @night_layer.visible = true
  399. @night_layer.x = @viewport.ox
  400. @night_layer.y = @viewport.oy
  401. @night_layer.bitmap.fill_rect(@night_layer.bitmap.rect, @night_color)
  402. @lights.each_value do |sprite|
  403. draw_layer_sprite(@night_layer.bitmap, sprite) if sprite.visible
  404. end
  405. end
  406. def no_lights?
  407. @lights.all? {|key,sprite| !sprite.visible}
  408. end
  409. def update_light_sprite(key, data)
  410. sprite = @lights[key] ||= Sprite.new(@viewport)
  411. chara = zls_get_character(data.chara_id)
  412. return unless sprite.visible = calculate_visible(data, chara)
  413. sprite.bitmap = Cache.picture(data.filename)
  414. w = sprite.bitmap.width / data.patterns
  415. h = sprite.bitmap.height / data.directions
  416. synchronize_direction_pattern(data, chara) if chara
  417. sprite.src_rect.set(data.pattern*w, data.direction*h, w, h)
  418. sprite.color = data.color
  419. sprite.x = calculate_x(data.x, data.parallax_x, chara)
  420. sprite.y = calculate_y(data.y, data.parallax_y, chara)
  421. sprite.z = data.z
  422. sprite.ox = data.ox * w
  423. sprite.oy = data.oy * h
  424. sprite.zoom_x = data.zoom_x * data.flicker
  425. sprite.zoom_y = data.zoom_y * data.flicker
  426. sprite.angle = data.angle
  427. sprite.mirror = data.mirror
  428. sprite.opacity = data.opacity
  429. sprite.blend_type = data.blend_type
  430. if RPG_VERSION != :xp
  431. sprite.wave_amp = data.wave_amp
  432. sprite.wave_length = data.wave_length
  433. sprite.wave_speed = data.wave_speed
  434. sprite.wave_phase = data.wave_phase
  435. sprite.update
  436. data.wave_phase = sprite.wave_phase
  437. end
  438. end
  439. def draw_layer_sprite(layer, sprite)
  440. if sprite.zoom_x == 1 and sprite.zoom_y == 1
  441. x = sprite.x - sprite.ox - @viewport.ox
  442. y = sprite.y - sprite.oy - @viewport.oy
  443. layer.blt(x, y, sprite.bitmap, sprite.src_rect, sprite.opacity)
  444. else
  445. dest_rect = Rect.new(
  446. sprite.x - sprite.ox * sprite.zoom_x - @viewport.ox,
  447. sprite.y - sprite.oy * sprite.zoom_y - @viewport.oy,
  448. sprite.src_rect.width * sprite.zoom_x,
  449. sprite.src_rect.height * sprite.zoom_y)
  450. layer.stretch_blt(dest_rect, sprite.bitmap, sprite.src_rect, sprite.opacity)
  451. end
  452. end
  453.  
  454. def update_shadows(character_sprites)
  455. $game_map.shadows.delete_if {|key, data| !data.active}
  456. if @luminosity <= -64 or no_shadows?
  457. if @shadows_layer.visible
  458. @shadows_layer.visible = false
  459. character_sprites.each {|chara| chara.color.alpha = 0}
  460. end
  461. return
  462. end
  463. @shadows_layer.visible = true
  464. @shadows_layer.x = @viewport.ox
  465. @shadows_layer.y = @viewport.oy
  466. @shadows_layer.opacity = 128 + (@luminosity>0 ? @luminosity/2 : @luminosity*2)
  467. @shadows_layer.bitmap.clear
  468. $game_map.shadows.each_value do |data|
  469. update_shadow_data(data) if data.shadowable
  470. end
  471. draw_auto_shadows
  472. draw_airship_shadow if RPG_VERSION != :xp
  473. for sprite in character_sprites
  474. if !shadowable_character?(sprite.character)
  475. sprite.color.alpha = 0
  476. elsif sprite.x >= 0 and sprite.x < @shadows_layer.bitmap.width and
  477. sprite.y >= 4 and sprite.y < @shadows_layer.bitmap.height+4
  478. then
  479. sprite.color = @shadows_layer.bitmap.get_pixel(sprite.x, sprite.y-4)
  480. sprite.color.alpha = sprite.color.alpha * @shadows_layer.opacity / 255
  481. end
  482. end
  483. $game_map.shadows.each_value do |data|
  484. update_shadow_data(data) if !data.shadowable
  485. end
  486. end
  487. def no_shadows?
  488. $game_map.auto_shadows.empty? and
  489. $game_map.shadows.all? do |key,data|
  490. !calculate_visible(data, zls_get_character(data.chara_id))
  491. end
  492. end
  493. def shadowable_character?(chara)
  494. if RPG_VERSION != :xp and chara == $game_map.airship
  495. then chara.altitude < 16
  496. else chara.shadowable
  497. end
  498. end
  499. def draw_auto_shadows
  500. for x, y, w, h in $game_map.auto_shadows
  501. x = calculate_x(x, 1, nil) - @viewport.ox
  502. y = calculate_y(y, 1, nil) - @viewport.oy
  503. @shadows_layer.bitmap.fill_rect(x, y, w, h, @auto_shadows_color)
  504. end
  505. end
  506. def draw_airship_shadow
  507. return if $game_map.airship.transparent or $game_map.airship.altitude == 0
  508. bmp = Cache.system("Shadow")
  509. opacity = [$game_map.airship.altitude * 8, 255].min
  510. x = $game_map.airship.screen_x - bmp.width / 2 - @viewport.ox
  511. y = $game_map.airship.screen_y - bmp.height - @viewport.oy +
  512. $game_map.airship.altitude + 4
  513. @shadows_layer.bitmap.blt(x, y, bmp, bmp.rect, opacity)
  514. end
  515. def update_shadow_data(data)
  516. chara = zls_get_character(data.chara_id)
  517. return unless calculate_visible(data, chara)
  518. if data.size
  519. @shadow_data.src_rect.set(0, 0, w=data.size.width, h=data.size.height)
  520. @shadow_data.color = data.color
  521. @shadow_data.bitmap = nil
  522. else
  523. @shadow_data.bitmap = Cache.picture(data.filename)
  524. @shadow_data.opacity = data.opacity
  525. w = @shadow_data.bitmap.width / data.patterns
  526. h = @shadow_data.bitmap.height / data.directions
  527. synchronize_direction_pattern(data, chara) if chara
  528. @shadow_data.src_rect.set(data.pattern*w, data.direction*h, w, h)
  529. end
  530. @shadow_data.x = calculate_x(data.x, data.parallax_x, chara)
  531. @shadow_data.y = calculate_y(data.y, data.parallax_y, chara)
  532. @shadow_data.ox = data.ox * w
  533. @shadow_data.oy = data.oy * h
  534. @shadow_data.zoom_x = data.zoom_x
  535. @shadow_data.zoom_y = data.zoom_y
  536. draw_layer_shadow(@shadows_layer.bitmap, @shadow_data)
  537. end
  538. def draw_layer_shadow(layer, shadow)
  539. if shadow.bitmap
  540. draw_layer_sprite(layer, shadow)
  541. else
  542. dest_rect = Rect.new(
  543. shadow.x - shadow.ox * shadow.zoom_x - @viewport.ox,
  544. shadow.y - shadow.oy * shadow.zoom_y - @viewport.oy,
  545. shadow.src_rect.width * shadow.zoom_x,
  546. shadow.src_rect.height * shadow.zoom_y)
  547. layer.fill_rect(dest_rect, shadow.color)
  548. end
  549. end
  550.  
  551. def synchronize_direction_pattern(data, chara)
  552. case data.directions
  553. when 2; data.direction = (chara.direction - 1) / 4
  554. when 4; data.direction = (chara.direction - 1) / 2
  555. when 8; data.direction = chara.direction - 1 - chara.direction / 5
  556. end
  557. if data.anime_rate == 0
  558. data.pattern = chara.pattern < 3 || RPG_VERSION == :xp ? chara.pattern : 1
  559. data.pattern %= data.patterns
  560. end
  561. end
  562. def calculate_visible(data, chara)
  563. if chara
  564. return false if chara.transparent
  565. if chara.is_a?(Game_Event)
  566. return false unless chara.list
  567. elsif RPG_VERSION == :vxace and chara.is_a?(Game_Follower)
  568. return false unless chara.visible?
  569. end
  570. end
  571. return false unless data.visible and data.opacity > 0
  572. return true if !data.filename.empty?
  573. return true if data.is_a?(Game_Shadow) and data.size
  574. return false
  575. end
  576. def calculate_x(x, parallax_x, chara)
  577. if chara
  578. x + chara.screen_x
  579. elsif RPG_VERSION == :xp or parallax_x != 1 or !$game_map.loop_horizontal?
  580. case RPG_VERSION
  581. when :xp ; x - $game_map.display_x * parallax_x / 4
  582. when :vx ; x - $game_map.display_x * parallax_x / 8
  583. when :vxace; x - $game_map.display_x * parallax_x * 32
  584. end
  585. else
  586. case RPG_VERSION
  587. when :vx ; $game_map.adjust_x(x * 8) / 8
  588. when :vxace; $game_map.adjust_x(x / 32.0) * 32
  589. end
  590. end
  591. end
  592. def calculate_y(y, parallax_y, chara)
  593. if chara
  594. y + chara.screen_y
  595. elsif RPG_VERSION == :xp or parallax_y != 1 or !$game_map.loop_vertical?
  596. case RPG_VERSION
  597. when :xp ; y - $game_map.display_y * parallax_y / 4
  598. when :vx ; y - $game_map.display_y * parallax_y / 8
  599. when :vxace; y - $game_map.display_y * parallax_y * 32
  600. end
  601. else
  602. case RPG_VERSION
  603. when :vx ; $game_map.adjust_y(y * 8) / 8
  604. when :vxace; $game_map.adjust_y(y / 32.0) * 32
  605. end
  606. end
  607. end
  608.  
  609. end
  610.  
  611. class Spriteset_Map
  612. alias zeus_lights_shadows_dispose dispose
  613. def dispose
  614. zeus_lights_shadows_dispose
  615. @lights_shadows.dispose
  616. end
  617. alias zeus_lights_shadows_update update
  618. def update
  619. zeus_lights_shadows_update
  620. @lights_shadows ||= Spriteset_Lights_Shadows.new(@viewport1)
  621. @lights_shadows.update(@character_sprites)
  622. end
  623. if RPG_VERSION != :xp and !Zeus_Lights_Shadows::Disable_Shadows
  624. def create_shadow() end
  625. def update_shadow() end
  626. def dispose_shadow() end
  627. end
  628. end
  629.  
  630. $imported[:Zeus_Weather_Viewport] ||= __FILE__ if RPG_VERSION != :xp
  631. if $imported[:Zeus_Weather_Viewport] == __FILE__
  632.  
  633. class Spriteset_Map
  634. alias zeus_weather_viewport_create_weather create_weather
  635. def create_weather
  636. zeus_weather_viewport_create_weather
  637. @weather.weather_viewport = @viewport1
  638. end
  639. end
  640.  
  641. class Spriteset_Weather
  642. case RPG_VERSION
  643. when :vx
  644. def weather_viewport=(viewport)
  645. for sprite in @sprites
  646. sprite.viewport = viewport
  647. sprite.z = 0x8000
  648. end
  649. end
  650. when :vxace
  651. attr_accessor :weather_viewport
  652. alias zeus_weather_viewport_add_sprite add_sprite
  653. def add_sprite
  654. zeus_weather_viewport_add_sprite
  655. @sprites[-1].viewport = @weather_viewport
  656. @sprites[-1].z = 0x8000
  657. end
  658. end
  659. end
  660.  
  661. end
  662.  
  663. $imported[:Zeus_Event_Auto_Setup] ||= __FILE__
  664. if $imported[:Zeus_Event_Auto_Setup] == __FILE__
  665.  
  666. class Game_Map
  667. alias zeus_auto_setup setup
  668. def setup(map_id)
  669. zeus_auto_setup(map_id)
  670. @events.each_value {|event| event.auto_setup}
  671. end
  672. end
  673.  
  674. class Game_Event
  675. alias zeus_auto_setup_refresh refresh
  676. def refresh
  677. zeus_auto_setup_refresh
  678. auto_setup if $game_map.events[@id]
  679. end
  680. def auto_setup
  681. @auto_setup ||= {}
  682. return unless @auto_setup[:list] != @list and @auto_setup[:list] = @list
  683. unless @auto_setup.has_key?(@list)
  684. flag_a, flag_b, a, b = '<setup>', '</setup>', nil, nil
  685. @list.each_with_index do |command, id|
  686. if command.code % 300 == 108 # comment
  687. b = id if a and command.parameters[0].include?(flag_b)
  688. a = id if !a and command.parameters[0].include?(flag_a)
  689. break if a and b
  690. end
  691. end
  692. @auto_setup[@list] = a && b && @list.slice!(a, b-a+1).push(@list[-1])
  693. end
  694. if @auto_setup[@list]
  695. interpreter = Game_Interpreter.new
  696. interpreter.setup(@auto_setup[@list], @id)
  697. interpreter.update while interpreter.running?
  698. end
  699. end
  700. end
  701.  
  702. end
Add Comment
Please, Sign In to add comment