pigu_6

SheolShade | Minimap

Apr 16th, 2013
291
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.63 KB | None | 0 0
  1. #==============================================================================#
  2. # **SheolShade Minimap** #
  3. #------------------------------------------------------------------------------#
  4. # ** Autor: SheolShade #
  5. # ** Versão: 1.5b #
  6. # ** Data: 24/12/2012 #
  7. #------------------------------------------------------------------------------#
  8. # - Descrição: #
  9. # Este script adiciona um mini mapa circular no jogo. #
  10. # - Utilização: #
  11. # Cole este script na seção "Scripts Adicionais". #
  12. #==============================================================================#
  13. # - Histórico #
  14. # 24/12/2012 - Início e término da versão 1.0b #
  15. # 04/03/2013 - Versão 1.5b Correção de bugs e adição de novas funções. #
  16. # * Correção de um bug em que não verificava corretamente o #
  17. # de determinados tiles. #
  18. # * Correção de um bug em que tiles de grama (bush) eram #
  19. # apresentados como bloqueio. #
  20. # * Correção de um bug em que tiles de bloqueio posicionados #
  21. # sobre tiles de grama era mrepresentados como passáveis. #
  22. # * Código melhorado. #
  23. # + Adicionado a função de mostrar os veiculos. #
  24. # + Adicionado a função de mostrar os seguidores. #
  25. # + Adicionado a função para utilizar IDs de Região para #
  26. # ocultar áreas passáveis. #
  27. #------------------------------------------------------------------------------#
  28. module SheolShade
  29. module MiniMap
  30. #--------------------------------------------------------------------------#
  31. # CONFIGURAÇÂO #
  32. #--------------------------------------------------------------------------#
  33. #Tamaño que tiene cada tile en el minimapa.
  34. TileSize = 8
  35. #--------------------------------------------------------------------------#
  36. #Ajuste para centrar el mapa.
  37. MapOffset = -4
  38. #--------------------------------------------------------------------------#
  39. #Define el color del personaje en el mapa.
  40. PlayerColor = Color.new(255,0,0)
  41. #--------------------------------------------------------------------------#
  42. #Mostrar a los personajes que siguen al principal
  43. ShowFollowers = false
  44. #--------------------------------------------------------------------------#
  45. #Define el color de los seguidores
  46. FollowerColor = Color.new(0,128,255)
  47. #--------------------------------------------------------------------------#
  48. #Mostrar vehiculos en el mapa o no
  49. ShowVehicles = true
  50. #--------------------------------------------------------------------------#
  51. #Define el color de barco.
  52. BoatColor = Color.new(255,0,255)
  53. #--------------------------------------------------------------------------#
  54. #Define el color de navio.
  55. ShipColor = Color.new(255,0,255)
  56. #--------------------------------------------------------------------------#
  57. #Define el color de aeronave.
  58. AirshipColor = Color.new(255,0,255)
  59. #--------------------------------------------------------------------------#
  60. #Define el color de los objetos mostrados en el mapa
  61. #Objetos como NPCs, puertas, teleports, cofres y cualquier otra cosa que
  62. #queramos marcar en el mapa
  63. #Para agregar un nuevo color de marcador lo definimos asi:
  64. # "tag" => Color.new(R,G,B,A)
  65. #Agregamos un comntario al evento con e TAG correspondiente.
  66. #Sperar cada uno de los objetos con ",".
  67. ObjectColor = {"npc" => Color.new(0,255,0),
  68. "teleport" => Color.new(150,50,50),
  69. "chest" => Color.new(100,100,100)
  70. }
  71. #--------------------------------------------------------------------------#
  72. #Define el color de contorno de los objetos y jugador
  73. BorderColor = Color.new(0,0,0)
  74. #--------------------------------------------------------------------------#
  75. #Opacidad de los objetos en el mapa
  76. ObjectLayerOpacity = 255
  77. #--------------------------------------------------------------------------#
  78. #Posicion del mapa en la pantalla
  79. #1 = Superior izquierdo
  80. #2 = Superior derecho
  81. #3 = Inferr izquierdo
  82. #4 = Superior derecho
  83. MiniMapCorner = 2
  84. #--------------------------------------------------------------------------#
  85. #Define si algunas partes del mapa se van a mostrar pasables o no
  86. # Sirve para crear caminos ocultos sin que aparezcan en el mapa
  87. UseHideRegion = true
  88. #--------------------------------------------------------------------------#
  89. #Id de la region UseHideRegion for true.
  90. HideRegionId = 1
  91. #--------------------------------------------------------------------------#
  92. #Color del area impasable.
  93. MapColor = Color.new(200,150,150)
  94. #--------------------------------------------------------------------------#
  95. #Color del contorno del area impasabe
  96. MapBorderColor = Color.new(50,50,50)
  97. #--------------------------------------------------------------------------#
  98. #Nombre del archivo que hara de borde de mapa, en la carpeta Graphics/System
  99. BorderName = "Border"
  100. #--------------------------------------------------------------------------#
  101. #Define si se utiliza una textura de fondo.
  102. UseBGTexture = true
  103. #--------------------------------------------------------------------------#
  104. #Nombre del archivo usado com textura, va en la carpeta Graphics/System.
  105. #ACLARACION: LA IMAGEN TIENE QUE ESTAR CON LOS COLORES INVERTIDOS.
  106. BackTextureName = "OldPaper"
  107. #--------------------------------------------------------------------------#
  108. #Color de fondo si no se usa una textura.
  109. BGColor = Color.new( 100, 100, 100)
  110. #--------------------------------------------------------------------------#
  111. #Opcion parar rellenar el area externa al mapa.
  112. ClearOutsideArea = false
  113. #--------------------------------------------------------------------------#
  114. #Color utilizado para rellenar el area externa.
  115. ClearOutsideColor = Color.new(0,0,0)
  116. #--------------------------------------------------------------------------#
  117. #Opcion para delimitar el borde del mapa.
  118. OutlineMapArea = true
  119. #--------------------------------------------------------------------------#
  120. #Color del borde el mapa.
  121. OutlineMapColor = Color.new(0,0,0)
  122. #--------------------------------------------------------------------------#
  123. #Id del interruptor q activa y desactiva el mapa.
  124. EnableSwitchId = 1
  125. #--------------------------------------------------------------------------#
  126. # FIM DA CONFIGURAÇÂO. #
  127. #--------------------------------------------------------------------------#
  128. MiniMapCoords = {1 => [0,0,112,112],
  129. 2 => [Graphics.width - 112,0,112,112],
  130. 3 => [0,Graphics.height - 112,112,112],
  131. 4 => [Graphics.width - 112,Graphics.height - 112,112,112]}
  132.  
  133. end
  134. end
  135. #==============================================================================#
  136. # ** Classe Color
  137. #==============================================================================#
  138. class Color
  139. #-----------------------------------------------------------------------------
  140. # * Inverte o valor das cores
  141. #-----------------------------------------------------------------------------
  142. def invert
  143. r = 255 - self.red
  144. g = 255 - self.green
  145. b = 255 - self.blue
  146. a = self.alpha
  147. self.set(r, g, b, a)
  148. end
  149. end
  150.  
  151.  
  152. #==============================================================================#
  153. # ** Classe Mini Map
  154. #==============================================================================#
  155. class MiniMap
  156.  
  157. include SheolShade::MiniMap
  158.  
  159. def initialize(viewport)
  160. @viewport = viewport
  161. @playercolor = PlayerColor.dup.invert
  162. @followercolor = FollowerColor.dup.invert
  163. @boatcolor = BoatColor.dup.invert
  164. @shipcolor = ShipColor.dup.invert
  165. @airshipcolor = AirshipColor.dup.invert
  166. @objectcolor = ObjectColor.dup
  167. @objectcolor.each_pair do |key, value|
  168. @objectcolor[key] = value.dup.invert
  169. end
  170. @bordercolor = BorderColor.dup.invert
  171. @mapcolor = MapColor.dup.invert
  172. @mapbordercolor = MapBorderColor.dup.invert
  173. @clearoutsidecolor = ClearOutsideColor.dup.invert
  174. @outlinemapcolor = OutlineMapColor.dup.invert
  175. refresh
  176. end
  177.  
  178. def refresh
  179. @map_id = $game_map.map_id
  180. @backmask = Sprite.new(@viewport)
  181. @backmask.bitmap = Cache::system("Back")
  182. @backmask.x = @backmask.y = 8
  183. @backtile = Sprite.new(@viewport)
  184. @backtile.blend_type = 2
  185. @backtile.z = 1
  186. @backtile.x = @backtile.y = -100
  187. @map = Sprite.new(@viewport)
  188. @map.z = 2
  189. @map.blend_type = 2
  190. @object_layer = Sprite.new(@viewport)
  191. @object_layer.z = 3
  192. @object_layer.blend_type = 2
  193. @object_layer.bitmap = Bitmap.new($game_map.width*TileSize + 112,
  194. $game_map.height*TileSize + 112)
  195. @object_layer.opacity = ObjectLayerOpacity
  196. @border = Sprite.new(@viewport)
  197. @border.bitmap = Cache::system(BorderName)
  198. @border.z = 4
  199. @border.opacity = 255
  200. @mask = Cache::system("Mask")
  201. draw_back
  202. draw_map
  203. end
  204.  
  205. def visible?
  206. $game_switches[EnableSwitchId]
  207. end
  208.  
  209. def draw_map
  210.  
  211. front = make_map_bitmap(@mapcolor)
  212. border = make_map_bitmap(@mapbordercolor)
  213.  
  214. result = Bitmap.new($game_map.width*TileSize + 112,
  215. $game_map.height*TileSize+ 112)
  216.  
  217. result.blt(-1, 0, border, border.rect)
  218. result.blt(1, 0, border, border.rect)
  219. result.blt(0, -1, border, border.rect)
  220. result.blt(0, 1, border, border.rect)
  221. result.blt(0, 0, front, front.rect)
  222.  
  223. @mapbitmap = result
  224. end
  225.  
  226. def draw_back
  227. bitmap = Bitmap.new($game_map.width*TileSize+112,
  228. $game_map.height*TileSize+112)
  229. if UseBGTexture
  230. bit = Cache::system(BackTextureName)
  231. bitmap.stretch_blt(bitmap.rect, bit, bit.rect)
  232. else
  233. bitmap.fill_rect(bitmap.rect, BGColor)
  234. end
  235. if ClearOutsideArea
  236. bitmap.fill_rect(0,0,bitmap.width, 56, @clearoutsidecolor)
  237. bitmap.fill_rect(0,0,56, bitmap.height, @clearoutsidecolor)
  238. bitmap.fill_rect(0,bitmap.height-56,bitmap.width, 56, @clearoutsidecolor)
  239. bitmap.fill_rect(bitmap.width-56,0,56, bitmap.height, @clearoutsidecolor)
  240. elsif OutlineMapArea
  241. bitmap.fill_rect(56,55,bitmap.width-112,1,@outlinemapcolor)
  242. bitmap.fill_rect(55,56,1,bitmap.height-112,@outlinemapcolor)
  243. bitmap.fill_rect(bitmap.width-56,55,1,bitmap.height-112,@outlinemapcolor)
  244. bitmap.fill_rect(56,bitmap.height-56,bitmap.width-112,1,@outlinemapcolor)
  245. end
  246. @backtilebitmap = bitmap
  247. end
  248.  
  249. def draw_object_layer
  250. for event in $game_map.events.keys
  251. if $game_map.events[event].list.size >= 0
  252. for item in $game_map.events[event].list
  253. if item.code == 108 or item.code == 408
  254. if @objectcolor.has_key?(item.parameters[0])
  255. draw_object($game_map.events[event].real_x*TileSize+56,
  256. $game_map.events[event].real_y*TileSize+56,
  257. @objectcolor[item.parameters[0]])
  258. end
  259. end
  260. end
  261. end
  262. end
  263. if ShowFollowers
  264. unless $game_player.vehicle
  265. $game_player.followers.each do |follower|
  266. draw_object(follower.real_x*TileSize+56,
  267. follower.real_y*TileSize+56,
  268. @followercolor) if follower.visible?
  269. end
  270. end
  271. end
  272. if ShowVehicles
  273. unless $game_map.airship.transparent
  274. draw_object($game_map.airship.real_x*TileSize+56,
  275. $game_map.airship.real_y*TileSize+56,
  276. @airshipcolor)
  277. end
  278. unless $game_map.ship.transparent
  279. draw_object($game_map.ship.real_x*TileSize+56,
  280. $game_map.ship.real_y*TileSize+56,
  281. @shipcolor)
  282. end
  283. unless $game_map.boat.transparent
  284. draw_object($game_map.boat.real_x*TileSize+56,
  285. $game_map.boat.real_y*TileSize+56,
  286. @boatcolor)
  287. end
  288. end
  289. draw_object($game_player.real_x*TileSize+56,
  290. $game_player.real_y*TileSize+56,
  291. @playercolor)
  292. end
  293.  
  294. def draw_object(x, y, color)
  295. @object_layer.bitmap.fill_rect(x, y, TileSize, TileSize, @bordercolor)
  296. @object_layer.bitmap.fill_rect(x+1, y+1, TileSize-2, TileSize-2, color)
  297. @object_layer.bitmap.clear_rect(x,y,1,1)
  298. @object_layer.bitmap.clear_rect(x,y+TileSize-1,1,1)
  299. @object_layer.bitmap.clear_rect(x+TileSize-1,y,1,1)
  300. @object_layer.bitmap.clear_rect(x+TileSize-1,y+TileSize-1,1,1)
  301. end
  302.  
  303. def make_map_bitmap(color)
  304. bitmap = Bitmap.new($game_map.width*TileSize + 112,
  305. $game_map.height*TileSize + 112)
  306. for x in 0..$game_map.width - 1
  307. for y in 0..$game_map.height - 1
  308. if $game_map.airship_land_ok?(x, y) || $game_map.bush?(x, y)
  309. if UseHideRegion
  310. bitmap.fill_rect(x*TileSize+56,
  311. y*TileSize+56,
  312. TileSize, TileSize,
  313. color) if $game_map.region_id(x, y) == HideRegionId
  314. else
  315. next
  316. end
  317. if $game_map.bush?(x, y)
  318. unless $game_map.passable?(x, y, 4)
  319. bitmap.fill_rect(x*TileSize+56, y*TileSize+56, TileSize, TileSize, color)
  320. end
  321. end
  322. next
  323. end
  324. bitmap.fill_rect(x*TileSize+56, y*TileSize+56, TileSize, TileSize, color)
  325. end
  326. end
  327. bitmap
  328. end
  329.  
  330. def update_object_layer
  331. @object_layer.bitmap.clear
  332. draw_object_layer
  333. end
  334.  
  335. def dispose
  336. @backmask.dispose
  337. @backtile.dispose
  338. @map.dispose
  339. @object_layer.dispose
  340. @border.dispose
  341. end
  342.  
  343. def update
  344. if @map_id != $game_map.map_id
  345. dispose
  346. @map_id = $game_map.map_id
  347. refresh
  348. end
  349. @backmask.visible = visible?
  350. @backtile.visible = visible?
  351. @map.visible = visible?
  352. @object_layer.visible = visible?
  353. @border.visible = visible?
  354. if visible?
  355. @map.bitmap = @mapbitmap.dup
  356. @backtile.bitmap = @backtilebitmap.dup
  357. sx = $game_player.real_x * (TileSize * -1) + MapOffset
  358. sy = $game_player.real_y * (TileSize * -1) + MapOffset
  359. update_object_layer
  360. @map.x = @backtile.x = @object_layer.x = sx
  361. @map.y = @backtile.y = @object_layer.y = sy
  362. @backtile.bitmap.blt(sx*-1, sy*-1,@mask,@mask.rect)
  363. @map.bitmap.blt(sx*-1, sy*-1,@mask,@mask.rect)
  364. @object_layer.bitmap.blt(sx*-1, sy*-1,@mask,@mask.rect)
  365. end
  366. end
  367. end
  368. #==============================================================================#
  369. # ** Classe Spriteset_Map
  370. #==============================================================================#
  371. class Spriteset_Map
  372.  
  373. alias sheol_mini_map_init initialize
  374. alias sheol_mini_map_updt update
  375. alias sheol_mini_map_disp dispose
  376.  
  377. include SheolShade::MiniMap
  378.  
  379. def initialize
  380. create_minimap
  381. sheol_mini_map_init
  382. end
  383.  
  384. def create_minimap
  385. viewport = Viewport.new(Graphics.width - 112,0,112,112)
  386. viewport.rect.set(MiniMapCoords[MiniMapCorner][0],
  387. MiniMapCoords[MiniMapCorner][1],
  388. MiniMapCoords[MiniMapCorner][2],
  389. MiniMapCoords[MiniMapCorner][3])
  390. viewport.z = 500
  391. @minimapa = MiniMap.new(viewport)
  392. end
  393.  
  394. def dispose
  395. sheol_mini_map_disp
  396. @minimapa.dispose
  397. end
  398.  
  399. def update
  400. sheol_mini_map_updt
  401. @minimapa.update
  402. end
  403. end
  404. #==============================================================================#
  405. # ** Fim do Script
  406. #==============================================================================#
Advertisement
Add Comment
Please, Sign In to add comment