Advertisement
Phangon

Reflexo na Água

Aug 11th, 2018
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.45 KB | None | 0 0
  1. #===============================================================
  2. # Reflex Script
  3. # Compativel com RMVXAce
  4. # Autor: Raizen
  5. # Comunidade : www.centrorpg.com
  6. # É permitido postar em outros lugares contanto que não seja mudado
  7. # as linhas dos créditos.
  8. #===============================================================
  9. #===============================================================
  10. # Descrição: O script fará com que seja reproduzido um reflexo na agua
  11. # ou outra superficie qualquer, basta colocar acima do main e seguir as
  12. # instruções, o reflexo será reproduzido por eventos, personagens e
  13. # veiculos.
  14. # Arquivos que tenham no nome [NOREFLEX] não terão reflexo.
  15. # coloque aqui o valor da opacidade que terá os reflexo produzidos,
  16. # para modifica-los durante o jogo, basta.
  17. # Chamar Script: $reflexopacity = valor da opacidade.
  18. # opacidade inicial.
  19. $reflexopacity = 150
  20. # coloque aqui o valor do corte em y que terá os reflexo produzidos,
  21. # esse corte serve para identificar bordas de lagos, rios por exemplo.
  22. # para modifica-los durante o jogo, basta.
  23. # Chamar Script: $reflexborday = valor do corte.
  24. # corte inicial.
  25. $reflexborday = 8
  26. # coloque aqui o valor do corte em x que terá os reflexo produzidos,
  27. # esse corte serve para identificar bordas de lagos, rios por exemplo.
  28. # para modifica-los durante o jogo, basta.
  29. # Chamar Script: $reflexbordax = valor do corte.
  30. # corte inicial.
  31. $reflexbordax = 8
  32. module Raizen_reflex
  33. # Para configurar os tiles que vão refletir a imagem, basta ir no database
  34. # Tilesets e terreno, o numero modificavel para cada tile, você indicará
  35. # os tiles que refletem ou não a imagem.
  36. # ID da tile que reflete a imagem.
  37. Tile_ID = 1
  38. end
  39.  
  40. #============================================================================
  41. # Aqui começa o script
  42. #============================================================================
  43.  
  44. #==============================================================================
  45. # ** Sprite_Character
  46. #------------------------------------------------------------------------------
  47. # Este sprite é usado para mostrar personagens. Ele observa uma instância
  48. # da classe Game_Character e automaticamente muda as condições do sprite.
  49. #==============================================================================
  50. class Spriteset_Map
  51. alias raizen_create_shadow create_characters
  52. def create_characters
  53. raizen_create_shadow
  54. $game_map.events.values.each do |event|
  55. @character_sprites.push(Sprite_Character_Shadow.new(@viewport1, event))
  56. end
  57. $game_map.vehicles.each do |vehicle|
  58. @character_sprites.push(Sprite_Character_Shadow.new(@viewport1, vehicle))
  59. end
  60. $game_player.followers.reverse_each do |follower|
  61. @character_sprites.push(Sprite_Character_Shadow.new(@viewport1, follower))
  62. end
  63. @character_sprites.push(Sprite_Character_Shadow.new(@viewport1, $game_player))
  64. @map_id = $game_map.map_id
  65. end
  66. end
  67.  
  68.  
  69.  
  70. class Sprite_Character_Shadow < Sprite_Base
  71. #--------------------------------------------------------------------------
  72. # * Variáveis públicas
  73. #--------------------------------------------------------------------------
  74. attr_accessor :character
  75. #--------------------------------------------------------------------------
  76. # * Inicialização do objeto
  77. # viewport : camada
  78. # character : personagem (Game_Character)
  79. #--------------------------------------------------------------------------
  80. def initialize(viewport, character = nil)
  81. super(viewport)
  82. @character = character
  83. @in_water = false
  84. if $game_map.terrain_tag(@character.x, @character.y + 1) != Raizen_reflex::Tile_ID
  85. @corte = @corte2 = 40
  86. else
  87. @corte = @corte2 = 0
  88. end
  89. @corte3 = 0
  90. update
  91. end
  92. #--------------------------------------------------------------------------
  93. # * Disposição
  94. #--------------------------------------------------------------------------
  95. def dispose
  96. end_animation
  97. super
  98. end
  99. #--------------------------------------------------------------------------
  100. # * Atualização da tela
  101. #--------------------------------------------------------------------------
  102. def update
  103. super
  104. if @character.screen_x < 0 or @character.screen_x > 544 or @character.screen_y < -32 or @character.screen_y > 384 or character.character_name.include? "[NOREFLEX]"
  105. self.opacity = 0
  106. return
  107. end
  108. update_bitmap
  109. update_position
  110. update_other
  111. setup_new_effect
  112. if $game_map.terrain_tag(@character.x, @character.y + 1) == Raizen_reflex::Tile_ID
  113. @getcorte = @character.screen_x
  114. @getcortey = @character.screen_y
  115. self.opacity = $reflexopacity
  116. if $game_map.terrain_tag(@character.x + 1, @character.y + 1) != Raizen_reflex::Tile_ID and @in_water == false and character.direction == 4
  117. if @getcorte2 != nil
  118. @corte2 = -@character.screen_x + @getcorte2 + $reflexbordax
  119. @corte2 = 48 - @corte2
  120. @corte = @corte2
  121. @corte3 = 0
  122. end
  123. update_src_rect_shadow2
  124. elsif $game_map.terrain_tag(@character.x - 1, @character.y + 1) != Raizen_reflex::Tile_ID and @in_water == false and character.direction == 6
  125. if @getcorte2 != nil
  126. @corte2 = @character.screen_x - @getcorte2 + $reflexbordax
  127. @corte2 = 48 - @corte2
  128. @corte3 = 0
  129. end
  130. update_src_rect_shadow2
  131. elsif @in_water == false and @corte3 != 0
  132. if @getcortey2 != nil
  133. @corte3 = @character.screen_y - @getcortey2
  134. @corte3 = 32 - @corte3
  135. end
  136. update_src_rect_correct
  137. else
  138. @in_water = true
  139. @corte = @corte2 = 0
  140. update_src_rect_shadow2
  141. end
  142. elsif $game_map.terrain_tag(@character.x + 1, @character.y + 1) == Raizen_reflex::Tile_ID
  143. self.opacity = $reflexopacity
  144. self.opacity = 0 if character.direction != 4
  145. @corte = -@character.screen_x + @getcorte + $reflexbordax if @getcorte != nil
  146. update_src_rect_shadow
  147. elsif $game_map.terrain_tag(@character.x - 1, @character.y + 1) == Raizen_reflex::Tile_ID
  148. self.opacity = $reflexopacity
  149. self.opacity = 0 if character.direction != 6
  150. @corte = +@character.screen_x - @getcorte + $reflexbordax if @getcorte != nil
  151. update_src_rect_shadow
  152. elsif $game_map.terrain_tag(@character.x, @character.y + 2) == Raizen_reflex::Tile_ID
  153. self.opacity = $reflexopacity
  154. self.opacity = 0 if character.direction != 8
  155. @corte = -@character.screen_y + @getcortey if @getcortey != nil
  156. update_src_rect_shadow
  157. else
  158. self.opacity = 0
  159. @corte = @corte2 = 0
  160. @corte3 = 1
  161. update_src_rect_shadow
  162. end
  163. end
  164. #--------------------------------------------------------------------------
  165. # * Aquisição da imagem do tileset que contém o tile designado
  166. # tile_id : ID do tile
  167. #--------------------------------------------------------------------------
  168. def tileset_bitmap(tile_id)
  169. Cache.tileset($game_map.tileset.tileset_names[5 + tile_id / 256])
  170. end
  171. #--------------------------------------------------------------------------
  172. # * Atualização do bitmap de origem
  173. #--------------------------------------------------------------------------
  174. def update_bitmap
  175. if graphic_changed?
  176. @tile_id = @character.tile_id
  177. @character_name = @character.character_name
  178. @character_index = @character.character_index
  179. if @tile_id > 0
  180. set_tile_bitmap
  181. else
  182. set_character_bitmap_shadow
  183. end
  184. end
  185. end
  186. #--------------------------------------------------------------------------
  187. # * Definição de mudança de gráficos
  188. #--------------------------------------------------------------------------
  189. def graphic_changed?
  190. @tile_id != @character.tile_id ||
  191. @character_name != @character.character_name ||
  192. @character_index != @character.character_index
  193. end
  194. #--------------------------------------------------------------------------
  195. # * Definição de bitmap do tile
  196. #--------------------------------------------------------------------------
  197. def set_tile_bitmap
  198. sx = (@tile_id / 128 % 2 * 8 + @tile_id % 8) * 32;
  199. sy = @tile_id % 256 / 8 % 16 * 32;
  200. self.bitmap = tileset_bitmap(@tile_id)
  201. self.src_rect.set(sx, sy, 32, 32)
  202. self.ox = 16
  203. self.oy = 32
  204. end
  205. #--------------------------------------------------------------------------
  206. # * Definição de bitmap do personagem
  207. #--------------------------------------------------------------------------
  208. def set_character_bitmap_shadow
  209. self.bitmap = Cache.character(@character_name)
  210. sign = @character_name[/^[\!\$]./]
  211. if sign && sign.include?('$')
  212. @cw = bitmap.width / 3
  213. @ch = bitmap.height / 4
  214. else
  215. @cw = bitmap.width / 12
  216. @ch = bitmap.height / 8
  217. end
  218. self.ox = @cw / 2
  219. self.oy = @ch
  220. self.angle = 180
  221. self.mirror = true
  222. end
  223.  
  224. def update_src_rect_shadow
  225. @getcorte2 = @character.screen_x
  226. @getcortey2 = @character.screen_y
  227. @in_water = false
  228. if @tile_id == 0
  229. index = @character.character_index
  230. pattern = @character.pattern < 3 ? @character.pattern : 1
  231. sx = (index % 4 * 3 + pattern) * @cw
  232. sy = (index / 4 * 4 + (@character.direction - 2) / 2) * @ch
  233. @corte = 0 if @corte == nil
  234. if $game_map.terrain_tag(@character.x - 1, @character.y + 1) != Raizen_reflex::Tile_ID
  235. self.src_rect.set(sx + @corte, sy, @cw - @corte, @ch - $reflexborday)
  236. elsif $game_map.terrain_tag(@character.x + 1, @character.y + 1) != Raizen_reflex::Tile_ID
  237. self.src_rect.set(sx, sy, @cw - @corte, @ch - $reflexborday)
  238. else
  239. self.src_rect.set(sx, sy, @cw, @ch - $reflexborday)
  240. end
  241. if $game_map.terrain_tag(@character.x, @character.y + 2) == Raizen_reflex::Tile_ID
  242. self.src_rect.set(sx, sy, @cw, @ch - @corte - $reflexborday)
  243. end
  244. end
  245. end
  246.  
  247. def update_src_rect_shadow2
  248. if @tile_id == 0
  249. index = @character.character_index
  250. pattern = @character.pattern < 3 ? @character.pattern : 1
  251. sx = (index % 4 * 3 + pattern) * @cw
  252. sy = (index / 4 * 4 + (@character.direction - 2) / 2) * @ch
  253. @corte2 = 0 if @corte == nil
  254. if $game_map.terrain_tag(@character.x - 1, @character.y + 1) != Raizen_reflex::Tile_ID
  255. self.src_rect.set(sx + @corte2, sy,@cw - @corte2, @ch - $reflexborday)
  256. elsif $game_map.terrain_tag(@character.x + 1, @character.y + 1) != Raizen_reflex::Tile_ID
  257. self.src_rect.set(sx, sy,@cw - @corte2, @ch - $reflexborday)
  258. else
  259. self.src_rect.set(sx, sy, @cw, @ch - $reflexborday)
  260. end
  261. end
  262. end
  263. def update_src_rect_correct
  264. if @tile_id == 0
  265. index = @character.character_index
  266. pattern = @character.pattern < 3 ? @character.pattern : 1
  267. sx = (index % 4 * 3 + pattern) * @cw
  268. sy = (index / 4 * 4 + (@character.direction - 2) / 2) * @ch
  269. @corte3 = 40 if @corte3 == nil
  270. self.src_rect.set(sx, sy, @cw, @ch - @corte3 - $reflexborday)
  271. end
  272. end
  273. #--------------------------------------------------------------------------
  274. # * Atualização da posição
  275. #--------------------------------------------------------------------------
  276. def update_position
  277. self.x = @character.screen_x
  278. self.x -= @corte if $game_map.terrain_tag(@character.x + 1, @character.y + 1) != Raizen_reflex::Tile_ID and $game_map.terrain_tag(@character.x - 1, @character.y + 1) == Raizen_reflex::Tile_ID and character.direction != 2
  279. self.y = @character.screen_y
  280. self.z = @character.screen_z
  281. end
  282. #--------------------------------------------------------------------------
  283. # * Atualizações variadas
  284. #--------------------------------------------------------------------------
  285. def update_other
  286. self.opacity = @character.opacity
  287. self.blend_type = @character.blend_type
  288. self.bush_depth = @character.bush_depth
  289. self.visible = !@character.transparent
  290. end
  291. #--------------------------------------------------------------------------
  292. # * Definição de um novo efeito
  293. #--------------------------------------------------------------------------
  294. def setup_new_effect
  295. if !animation? && @character.animation_id > 0
  296. animation = $data_animations[@character.animation_id]
  297. start_animation(animation)
  298. end
  299. end
  300. #--------------------------------------------------------------------------
  301. # * Finalização da animação
  302. #--------------------------------------------------------------------------
  303. def end_animation
  304. super
  305. @character.animation_id = 0
  306. end
  307. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement