Advertisement
cilerba

Untitled

Jan 10th, 2016
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.47 KB | None | 0 0
  1. class ShadowSprite
  2. SHADOWLESS_SPRITES=[
  3. "BerryPlant",
  4. "Door",
  5. "Sign",
  6. "OutdoorLight",
  7. "Light",
  8. "HeadbuttTree",
  9. "Item",
  10. "Healing balls left",
  11. "Healing balls right",
  12. "Home door",
  13. "EVENT_BIRD",
  14. "train door",
  15. "OBJ_TOWER",
  16. "BASEPC"
  17. ]
  18. def initialize(sprite,event,viewport=nil,map=nil)
  19. @rsprite=sprite
  20. @map=map
  21. @sprite=Sprite.new(viewport)
  22. @sprite.bitmap=BitmapCache.load_bitmap("Graphics/Pictures/CharacterShadow.png")
  23. @event=event
  24. @disposed=false
  25. @viewport=viewport
  26. update
  27. end
  28. def dispose
  29. if !@disposed
  30. @sprite.dispose if @sprite
  31. @sprite=nil
  32. @disposed=true
  33. end
  34. end
  35. def disposed?
  36. @disposed
  37. end
  38. def update
  39. return if disposed?
  40. if !(@event==$game_player)
  41. @sprite.visible=!(@event.character_name=="" or @event.bush_depth>0 or SHADOWLESS_SPRITES.include?(@event.name))
  42. else
  43. @sprite.visible=!(@event.bush_depth>0 or !(@map.id==$game_map.id))
  44. end
  45. x=@rsprite.x-@rsprite.ox
  46. y=@rsprite.y-@rsprite.oy
  47. width=@rsprite.src_rect.width
  48. height=@rsprite.src_rect.height
  49. @sprite.x=x+width/2
  50. @sprite.y=y+height-4-26
  51. @sprite.y+=64 if !(@event==$game_player) && @event.name.include?("Bird")
  52. if @event==$game_player && $game_player.jumping?
  53. @sprite.x=x+width/2
  54. @sprite.y=((Graphics.height)/2)+(@sprite.bitmap.height/2)-46
  55. end
  56. @sprite.ox=@sprite.bitmap.width/2
  57. @sprite.oy=@sprite.bitmap.height/2
  58. @sprite.z=@rsprite.z-1
  59. end
  60. end
  61.  
  62. class QuestSprite
  63. QUEST_SPRITE=[
  64. "Quest"
  65. ]
  66. def initialize(sprite,event,viewport=nil,map=nil)
  67. @rsprite=sprite
  68. @map=map
  69. @sprite=Sprite.new(viewport)
  70. @sprite.bitmap=BitmapCache.load_bitmap("Graphics/Pictures/characterExclamation.png")
  71. @event=event
  72. @disposed=false
  73. @viewport=viewport
  74. update
  75. end
  76. def dispose
  77. if !@disposed
  78. @sprite.dispose if @sprite
  79. @sprite=nil
  80. @disposed=true
  81. end
  82. end
  83. def disposed?
  84. @disposed
  85. end
  86. def update
  87. return if disposed?
  88. if !(@event==$game_player) && !$game_self_switches[[$game_map.map_id,@event.id,"D"]]
  89. @sprite.visible=(QUEST_SPRITE.include?(@event.name))
  90. else
  91. @sprite.visible=false
  92. end
  93. if !(@event==$game_player) && $game_self_switches[[$game_map.map_id,@event.id,"A"]]
  94. @sprite.bitmap=BitmapCache.load_bitmap("Graphics/Pictures/characterExclamation_active.png")
  95. end
  96. x=@rsprite.x-@rsprite.ox
  97. y=@rsprite.y-@rsprite.oy
  98. width=@rsprite.src_rect.width
  99. height=@rsprite.src_rect.height
  100. @sprite.x=x+width/2
  101. @sprite.y=y+height-4-30
  102. @sprite.y+=64 if !(@event==$game_player) && @event.name.include?("Bird")
  103. if @event==$game_player && $game_player.jumping?
  104. @sprite.x=x+width/2
  105. @sprite.y=((Graphics.height)/2)+(@sprite.bitmap.height/2)-46
  106. end
  107. @sprite.ox=@sprite.bitmap.width/2
  108. @sprite.oy=@sprite.bitmap.height/2
  109. @sprite.z=@rsprite.z+1
  110. end
  111. end
  112.  
  113. class ReflectedSprite
  114. attr_accessor :visible
  115. attr_accessor :event
  116.  
  117. def initialize(sprite,event,viewport=nil)
  118. @rsprite=sprite
  119. @sprite=nil
  120. @event=event
  121. @disposed=false
  122. @viewport=viewport
  123. update
  124. end
  125.  
  126. def dispose
  127. if !@disposed
  128. @sprite.dispose if @sprite
  129. @sprite=nil
  130. @disposed=true
  131. end
  132. end
  133.  
  134. def disposed?
  135. @disposed
  136. end
  137.  
  138. def update
  139. return if disposed?
  140. currentY=@event.real_y.to_i/(4*Game_Map::TILEHEIGHT)
  141. limit=@rsprite.src_rect.height
  142. shouldShow=false
  143. # Clipping at Y
  144. i=0
  145. while i<@rsprite.src_rect.height+Game_Map::TILEHEIGHT
  146. nextY=currentY+1+(i>>5)
  147. if @event.map.terrain_tag(@event.x,nextY)!=PBTerrain::StillWater
  148. limit= ((nextY * (4*Game_Map::TILEHEIGHT))-@event.map.display_y+3).to_i/4
  149. limit-=@rsprite.y
  150. break
  151. else
  152. shouldShow=true
  153. end
  154. i+=Game_Map::TILEHEIGHT
  155. end
  156. shouldShow=false if !visible
  157. if limit>0 && shouldShow
  158. # Just-in-time creation of sprite
  159. if !@sprite
  160. @sprite=Sprite.new(@viewport)
  161. end
  162. else
  163. # Just-in-time disposal of sprite
  164. if @sprite
  165. @sprite.dispose
  166. @sprite=nil
  167. end
  168. return
  169. end
  170. if @sprite
  171. x=@rsprite.x-@rsprite.ox
  172. y=@rsprite.y-@rsprite.oy
  173. if @event.map.terrain_tag(@event.x,@event.y)==PBTerrain::StillWater
  174. y-=8; limit+=8 # Arbitrary shift reflection up if on still water
  175. end
  176. if @rsprite.character.character_name[/offset/]
  177. y-=32; limit+=8 # Counter sprites with offset
  178. end
  179. width=@rsprite.src_rect.width
  180. height=@rsprite.src_rect.height
  181. frame=(Graphics.frame_count%40)/10
  182. @sprite.x=x+width/2
  183. @sprite.y=y+height+height/2
  184. @sprite.ox=width/2
  185. @sprite.oy=height/2
  186. @sprite.angle=180.0
  187. @sprite.z=@rsprite.z-1 # below the player
  188. @sprite.zoom_x=@rsprite.zoom_x
  189. @sprite.zoom_y=@rsprite.zoom_y
  190. if frame==1
  191. @sprite.zoom_x*=1.05
  192. elsif frame==2
  193. @sprite.zoom_x*=1.1
  194. elsif frame==3
  195. @sprite.zoom_x*=1.05
  196. end
  197. @sprite.mirror=true
  198. @sprite.bitmap=@rsprite.bitmap
  199. @sprite.tone=@rsprite.tone
  200. @sprite.color=Color.new(248,248,248,96)
  201. @sprite.opacity=@rsprite.opacity*3/4
  202. @sprite.src_rect=@rsprite.src_rect
  203. if limit<@sprite.src_rect.height
  204. diff=@sprite.src_rect.height-limit
  205. @sprite.src_rect.y+=diff
  206. @sprite.src_rect.height=limit
  207. @sprite.y-=diff
  208. end
  209. end
  210. end
  211. end
  212.  
  213.  
  214.  
  215. class ClippableSprite < Sprite_Character
  216. def initialize(viewport,event,tilemap)
  217. @tilemap=tilemap
  218. @_src_rect=Rect.new(0,0,0,0)
  219. super(viewport,event)
  220. end
  221.  
  222. def update
  223. super
  224. @_src_rect=self.src_rect
  225. tmright=@tilemap.map_data.xsize*Game_Map::TILEWIDTH-@tilemap.ox
  226. echoln("x=#{self.x},ox=#{self.ox},tmright=#{tmright},tmox=#{@tilemap.ox}")
  227. if @tilemap.ox-self.ox<-self.x
  228. # clipped on left
  229. diff=(-self.x)-(@tilemap.ox-self.ox)
  230. self.src_rect=Rect.new(@_src_rect.x+diff,@_src_rect.y,
  231. @_src_rect.width-diff,@_src_rect.height)
  232. echoln("clipped out left: #{diff} #{@tilemap.ox-self.ox} #{self.x}")
  233. elsif tmright-self.ox<self.x
  234. # clipped on right
  235. diff=(self.x)-(tmright-self.ox)
  236. self.src_rect=Rect.new(@_src_rect.x,@_src_rect.y,
  237. @_src_rect.width-diff,@_src_rect.height)
  238. echoln("clipped out right: #{diff} #{tmright+self.ox} #{self.x}")
  239. else
  240. echoln("-not- clipped out left: #{diff} #{@tilemap.ox-self.ox} #{self.x}")
  241. end
  242. end
  243. end
  244.  
  245.  
  246.  
  247. class Spriteset_Map
  248. attr_reader :map
  249.  
  250. def initialize(map=nil)
  251. @map=map ? map : $game_map
  252. @viewport1 = Viewport.new(0, 0, Graphics.width,Graphics.height)
  253. @viewport1a = Viewport.new(0, 0, Graphics.width,Graphics.height)
  254. @viewport2 = Viewport.new(0, 0, Graphics.width,Graphics.height)
  255. @viewport3 = Viewport.new(0, 0, Graphics.width,Graphics.height)
  256. @viewport1a.z = 100
  257. @viewport2.z = 200
  258. @viewport3.z = 500
  259. @tilemap = TilemapLoader.new(@viewport1)
  260. @tilemap.tileset = pbGetTileset(@map.tileset_name)
  261. for i in 0..6
  262. autotile_name = @map.autotile_names[i]
  263. @tilemap.autotiles[i] = pbGetAutotile(autotile_name)
  264. end
  265. @tilemap.map_data = @map.data
  266. @tilemap.priorities = @map.priorities
  267. @panorama = AnimatedPlane.new(@viewport1)
  268. @panorama.z = -1000
  269. @fog = AnimatedPlane.new(@viewport1)
  270. @fog.z = 3000
  271. @reflectedSprites=[]
  272. @shadowSprites=[]
  273. @questSprites=[]
  274. @character_sprites = []
  275. for i in @map.events.keys.sort
  276. sprite = Sprite_Character.new(@viewport1, @map.events[i])
  277. @character_sprites.push(sprite)
  278. @shadowSprites.push(ShadowSprite.new(sprite,@map.events[i],@viewport1))
  279. @questSprites.push(QuestSprite.new(sprite,@map.events[i],@viewport1))
  280. @reflectedSprites.push(ReflectedSprite.new(sprite,@map.events[i],@viewport1))
  281. end
  282. playersprite=Sprite_Character.new(@viewport1, $game_player)
  283. @playersprite=playersprite
  284. @reflectedSprites.push(ReflectedSprite.new(playersprite,$game_player,@viewport1))
  285. @shadowSprites.push(ShadowSprite.new(playersprite,$game_player,@viewport1,@map))
  286. @questSprites.push(QuestSprite.new(playersprite,$game_player,@viewport1,@map))
  287. @character_sprites.push(playersprite)
  288. @weather = RPG::Weather.new(@viewport1a)
  289. @picture_sprites = []
  290. for i in 1..50
  291. @picture_sprites.push(Sprite_Picture.new(@viewport2,$game_screen.pictures[i]))
  292. end
  293. @timer_sprite = Sprite_Timer.new
  294. Kernel.pbOnSpritesetCreate(self,@viewport1)
  295. update
  296. end
  297.  
  298. def dispose
  299. @tilemap.tileset.dispose
  300. for i in 0..6
  301. @tilemap.autotiles[i].dispose
  302. end
  303. @tilemap.dispose
  304. @panorama.dispose
  305. @fog.dispose
  306. for sprite in @character_sprites
  307. sprite.dispose
  308. end
  309. for sprite in @reflectedSprites
  310. sprite.dispose
  311. end
  312. for sprite in @shadowSprites
  313. sprite.dispose
  314. end
  315. for sprite in @questSprites
  316. sprite.dispose
  317. end
  318. @weather.dispose
  319. for sprite in @picture_sprites
  320. sprite.dispose
  321. end
  322. @timer_sprite.dispose
  323. @viewport1.dispose
  324. @viewport2.dispose
  325. @viewport3.dispose
  326. @tilemap=nil
  327. @panorama=nil
  328. @fog=nil
  329. @character_sprites.clear
  330. @reflectedSprites.clear
  331. @shadowSprites.clear
  332. @questSprites.clear
  333. @weather=nil
  334. @picture_sprites.clear
  335. @viewport1=nil
  336. @viewport2=nil
  337. @viewport3=nil
  338. @timer_sprite=nil
  339. end
  340.  
  341. def in_range?(object)
  342. return true if $PokemonSystem.tilemap==2
  343. screne_x = @map.display_x
  344. screne_x -= 512
  345. screne_y = @map.display_y
  346. screne_y -= 512
  347. screne_width = @map.display_x
  348. screne_width += Graphics.width*4+512 # 3072
  349. screne_height = @map.display_y
  350. screne_height += Graphics.height*4+512 # 2432
  351. return false if object.real_x <= screne_x
  352. return false if object.real_x >= screne_width
  353. return false if object.real_y <= screne_y
  354. return false if object.real_y >= screne_height
  355. return true
  356. end
  357.  
  358. def update
  359. if @panorama_name != @map.panorama_name or
  360. @panorama_hue != @map.panorama_hue
  361. @panorama_name = @map.panorama_name
  362. @panorama_hue = @map.panorama_hue
  363. if @panorama.bitmap != nil
  364. @panorama.setPanorama(nil)
  365. end
  366. if @panorama_name != ""
  367. @panorama.setPanorama(@panorama_name, @panorama_hue)
  368. end
  369. Graphics.frame_reset
  370. end
  371. if @fog_name != @map.fog_name or @fog_hue != @map.fog_hue
  372. @fog_name = @map.fog_name
  373. @fog_hue = @map.fog_hue
  374. if @fog.bitmap != nil
  375. @fog.setFog(nil)
  376. end
  377. if @fog_name != ""
  378. @fog.setFog(@fog_name, @fog_hue)
  379. end
  380. Graphics.frame_reset
  381. end
  382. tmox = @map.display_x.to_i / 4
  383. tmoy = @map.display_y.to_i / 4
  384. @tilemap.ox=tmox
  385. @tilemap.oy=tmoy
  386. if $PokemonSystem.tilemap==0
  387. # Original Map View only, to prevent wrapping
  388. @viewport1.rect.x=[-tmox,0].max
  389. @viewport1.rect.y=[-tmoy,0].max
  390. @viewport1.rect.width=
  391. [@tilemap.map_data.xsize*Game_Map::TILEWIDTH-tmox,Graphics.width].min
  392. @viewport1.rect.height=
  393. [@tilemap.map_data.ysize*Game_Map::TILEHEIGHT-tmoy,Graphics.height].min
  394. @viewport1.ox=[-tmox,0].max
  395. @viewport1.oy=[-tmoy,0].max
  396. else
  397. @viewport1.rect.set(0,0,Graphics.width,Graphics.height)
  398. @viewport1.ox=0
  399. @viewport1.oy=0
  400. end
  401. @viewport1.ox += $game_screen.shake
  402. @tilemap.update
  403. @panorama.ox = @map.display_x / 8
  404. @panorama.oy = @map.display_y / 8
  405. @fog.zoom_x = @map.fog_zoom / 100.0
  406. @fog.zoom_y = @map.fog_zoom / 100.0
  407. @fog.opacity = @map.fog_opacity
  408. @fog.blend_type = @map.fog_blend_type
  409. @fog.ox = @map.display_x / 4 + @map.fog_ox
  410. @fog.oy = @map.display_y / 4 + @map.fog_oy
  411. @fog.tone = @map.fog_tone
  412. @panorama.update
  413. @fog.update
  414. for sprite in @character_sprites
  415. if sprite.character.is_a?(Game_Event)
  416. if sprite.character.trigger == 3 || sprite.character.trigger == 4 ||
  417. in_range?(sprite.character)
  418. sprite.update
  419. end
  420. else
  421. sprite.update
  422. end
  423. end
  424. for sprite in @reflectedSprites
  425. sprite.visible=true
  426. sprite.visible=(@map==$game_map) if sprite.event==$game_player
  427. sprite.update
  428. end
  429. for sprite in @shadowSprites
  430. sprite.update
  431. end
  432. for sprite in @questSprites
  433. sprite.update
  434. end
  435. # Avoids overlap effect of player sprites if player is near edge of
  436. # a connected map
  437. @playersprite.visible=@playersprite.visible && (
  438. self.map==$game_map || $game_player.x<=0 || $game_player.y<=0 ||
  439. ($game_map && ($game_player.x>=$game_map.width ||
  440. $game_player.y>=$game_map.height)))
  441. if self.map!=$game_map
  442. @weather.max-=2 if @weather.max>0
  443. @weather.max=0 if @weather.max<0
  444. @weather.type = 0 if @weather.max==0
  445. @weather.ox = 0 if @weather.max==0
  446. @weather.oy = 0 if @weather.max==0
  447. else
  448. @weather.type = $game_screen.weather_type
  449. @weather.max = $game_screen.weather_max
  450. @weather.ox = @map.display_x / 4
  451. @weather.oy = @map.display_y / 4
  452. end
  453. @weather.update
  454. for sprite in @picture_sprites
  455. sprite.update
  456. end
  457. @timer_sprite.update
  458. @viewport1.tone = $game_screen.tone
  459. @viewport1a.ox += $game_screen.shake
  460. @viewport3.color = $game_screen.flash_color
  461. @viewport1.update
  462. @viewport1a.update
  463. @viewport3.update
  464. end
  465. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement