Advertisement
Guest User

PFIELD_FIELD

a guest
May 15th, 2015
344
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 82.43 KB | None | 0 0
  1. ###############################################################################
  2. # Interpolators
  3. ################################################################################
  4. class RectInterpolator
  5. def initialize(oldrect,newrect,frames)
  6. restart(oldrect,newrect,frames)
  7. end
  8.  
  9. def restart(oldrect,newrect,frames)
  10. @oldrect=oldrect
  11. @newrect=newrect
  12. @frames=[frames,1].max
  13. @curframe=0
  14. @rect=oldrect.clone
  15. end
  16.  
  17. def set(rect)
  18. rect.set(@rect.x,@rect.y,@rect.width,@rect.height)
  19. end
  20.  
  21. def done?
  22. @curframe>@frames
  23. end
  24.  
  25. def update
  26. return if done?
  27. t=(@curframe*1.0/@frames)
  28. x1=@oldrect.x
  29. x2=@newrect.x
  30. x=x1+t*(x2-x1)
  31. y1=@oldrect.y
  32. y2=@newrect.y
  33. y=y1+t*(y2-y1)
  34. rx1=@oldrect.x+@oldrect.width
  35. rx2=@newrect.x+@newrect.width
  36. rx=rx1+t*(rx2-rx1)
  37. ry1=@oldrect.y+@oldrect.height
  38. ry2=@newrect.y+@newrect.height
  39. ry=ry1+t*(ry2-ry1)
  40. minx=x<rx ? x : rx
  41. maxx=x>rx ? x : rx
  42. miny=y<ry ? y : ry
  43. maxy=y>ry ? y : ry
  44. @rect.set(minx,miny,maxx-minx,maxy-miny)
  45. @curframe+=1
  46. end
  47. end
  48.  
  49.  
  50.  
  51. class PointInterpolator
  52. def initialize(oldx,oldy,newx,newy,frames)
  53. restart(oldx,oldy,newx,newy,frames)
  54. end
  55.  
  56. def restart(oldx,oldy,newx,newy,frames)
  57. @oldx=oldx
  58. @oldy=oldy
  59. @newx=newx
  60. @newy=newy
  61. @frames=frames
  62. @curframe=0
  63. @x=oldx
  64. @y=oldy
  65. end
  66.  
  67. def x; @x;end
  68. def y; @y;end
  69.  
  70. def done?
  71. @curframe>@frames
  72. end
  73.  
  74. def update
  75. return if done?
  76. t=(@curframe*1.0/@frames)
  77. rx1=@oldx
  78. rx2=@newx
  79. @x=rx1+t*(rx2-rx1)
  80. ry1=@oldy
  81. ry2=@newy
  82. @y=ry1+t*(ry2-ry1)
  83. @curframe+=1
  84. end
  85. end
  86.  
  87.  
  88.  
  89. ################################################################################
  90. # Visibility circle in dark maps
  91. ################################################################################
  92. class DarknessSprite < SpriteWrapper
  93. attr_reader :radius
  94.  
  95. def initialize(viewport=nil)
  96. super(viewport)
  97. @darkness=BitmapWrapper.new(Graphics.width,Graphics.height)
  98. @radius=64
  99. self.bitmap=@darkness
  100. self.z=99998
  101. refresh
  102. end
  103.  
  104. def dispose
  105. @darkness.dispose
  106. super
  107. end
  108.  
  109. def radius=(value)
  110. @radius=value
  111. refresh
  112. end
  113.  
  114. def refresh
  115. @darkness.fill_rect(0,0,Graphics.width,Graphics.height,Color.new(0,0,0,255))
  116. cx=Graphics.width/2
  117. cy=Graphics.height/2
  118. cradius=@radius
  119. numfades=5
  120. for i in 1..numfades
  121. for j in cx-cradius..cx+cradius
  122. diff2 = (cradius * cradius) - ((j - cx) * (j - cx))
  123. diff = Math.sqrt(diff2)
  124. @darkness.fill_rect(j,cy-diff,1,diff*2,
  125. Color.new(0, 0, 0, 255.0*(numfades-i)/numfades ))
  126. end
  127. cradius=(cradius*0.9).floor
  128. end
  129. end
  130. end
  131.  
  132.  
  133.  
  134. ################################################################################
  135. # Location signpost
  136. ################################################################################
  137. class LocationWindow
  138. def initialize(name)
  139. @window=Window_AdvancedTextPokemon.new(name)
  140. @window.resizeToFit(name,Graphics.width)
  141. @window.x=0
  142. @window.y=-@window.height
  143. @window.z=99999
  144. @currentmap=$game_map.map_id
  145. @frames=0
  146. end
  147.  
  148. def disposed?
  149. @window.disposed?
  150. end
  151.  
  152. def dispose
  153. @window.dispose
  154. end
  155.  
  156. def update
  157. return if @window.disposed?
  158. @window.update
  159. if $game_temp.message_window_showing ||
  160. @currentmap!=$game_map.map_id
  161. @window.dispose
  162. return
  163. end
  164. if @frames>80
  165. @window.y-=4
  166. @window.dispose if @window.y+@window.height<0
  167. else
  168. @window.y+=4 if @window.y<0
  169. @frames+=1
  170. end
  171. end
  172. end
  173.  
  174.  
  175.  
  176. ################################################################################
  177. # Lights
  178. ################################################################################
  179. class LightEffect
  180. def initialize(event,viewport=nil,map=nil,filename=nil)
  181. @light = IconSprite.new(0,0,viewport)
  182. if filename!=nil && filename!="" && pbResolveBitmap("Graphics/Pictures/"+filename)
  183. @light.setBitmap("Graphics/Pictures/"+filename)
  184. else
  185. @light.setBitmap("Graphics/Pictures/LE")
  186. end
  187. @light.z = 1000
  188. @event = event
  189. @map=map ? map : $game_map
  190. @disposed=false
  191. end
  192.  
  193. def disposed?
  194. return @disposed
  195. end
  196.  
  197. def dispose
  198. @light.dispose
  199. @map=nil
  200. @event=nil
  201. @disposed=true
  202. end
  203.  
  204. def update
  205. @light.update
  206. end
  207. end
  208.  
  209.  
  210.  
  211. class LightEffect_Lamp < LightEffect
  212. def initialize(event,viewport=nil,map=nil)
  213. @light = Sprite.new(viewport)
  214. lamp = AnimatedBitmap.new("Graphics/Pictures/LE")
  215. @light.bitmap = Bitmap.new(128,64)
  216. src_rect = Rect.new(0, 0, 64, 64)
  217. @light.bitmap.blt(0, 0, lamp.bitmap, src_rect)
  218. @light.bitmap.blt(20, 0, lamp.bitmap, src_rect)
  219. lamp.dispose
  220. @light.visible = true
  221. @light.z = 1000
  222. @map=map ? map : $game_map
  223. @event = event
  224. end
  225. end
  226.  
  227.  
  228.  
  229. class LightEffect_Basic < LightEffect
  230. def initialize(event,viewport=nil,map=nil,filename=nil)
  231. super
  232. end
  233.  
  234. def update
  235. return if !@light || !@event
  236. super
  237. @light.opacity = 100
  238. @light.ox=32
  239. @light.oy=48
  240. if (Object.const_defined?(:ScreenPosHelper) rescue false)
  241. @light.x = ScreenPosHelper.pbScreenX(@event)
  242. @light.y = ScreenPosHelper.pbScreenY(@event)
  243. @light.zoom_x = ScreenPosHelper.pbScreenZoomX(@event)
  244. else
  245. @light.x = @event.screen_x
  246. @light.y = @event.screen_y
  247. @light.zoom_x = 1.0
  248. end
  249. @light.zoom_y = @light.zoom_x
  250. @light.tone=$game_screen.tone
  251. end
  252. end
  253.  
  254.  
  255.  
  256. class LightEffect_DayNight < LightEffect
  257. def initialize(event,viewport=nil,map=nil,filename=nil)
  258. super
  259. end
  260.  
  261. def update
  262. return if !@light || !@event
  263. super
  264. shade=PBDayNight.getShade
  265. if shade>=144 # If light enough, call it fully day.
  266. shade=255
  267. elsif shade<=64 # If dark enough, call it fully night.
  268. shade=0
  269. else
  270. shade=255-(255*(144-shade)/(144-64))
  271. end
  272. @light.opacity = 255-shade
  273. if @light.opacity>0
  274. @light.ox=32
  275. @light.oy=48
  276. if (Object.const_defined?(:ScreenPosHelper) rescue false)
  277. @light.x = ScreenPosHelper.pbScreenX(@event)
  278. @light.y = ScreenPosHelper.pbScreenY(@event)
  279. @light.zoom_x = ScreenPosHelper.pbScreenZoomX(@event)
  280. @light.zoom_y = ScreenPosHelper.pbScreenZoomY(@event)
  281. else
  282. @light.x = @event.screen_x
  283. @light.y = @event.screen_y
  284. @light.zoom_x = 1.0
  285. @light.zoom_y = 1.0
  286. end
  287. @light.tone.set($game_screen.tone.red,
  288. $game_screen.tone.green,
  289. $game_screen.tone.blue,
  290. $game_screen.tone.gray)
  291. end
  292. end
  293. end
  294.  
  295.  
  296.  
  297. ################################################################################
  298. # This module stores encounter-modifying events that can happen during the game.
  299. # A procedure can subscribe to an event by adding itself to the event. It will
  300. # then be called whenever the event occurs.
  301. ################################################################################
  302. module EncounterModifier
  303. @@procs=[]
  304. @@procsEnd=[]
  305.  
  306. def self.register(p)
  307. @@procs.push(p)
  308. end
  309.  
  310. def self.registerEncounterEnd(p)
  311. @@procsEnd.push(p)
  312. end
  313.  
  314. def self.trigger(encounter)
  315. for prc in @@procs
  316. encounter=prc.call(encounter)
  317. end
  318. return encounter
  319. end
  320.  
  321. def self.triggerEncounterEnd()
  322. for prc in @@procsEnd
  323. prc.call()
  324. end
  325. end
  326. end
  327.  
  328.  
  329.  
  330. ################################################################################
  331. # This module stores events that can happen during the game. A procedure can
  332. # subscribe to an event by adding itself to the event. It will then be called
  333. # whenever the event occurs.
  334. ################################################################################
  335. module Events
  336. @@OnMapChange=Event.new
  337. @@OnMapSceneChange=Event.new
  338. @@OnMapUpdate=Event.new
  339. @@OnMapChanging=Event.new
  340. @@OnLeaveTile=Event.new
  341. @@OnStepTaken=Event.new
  342. @@OnStepTakenTransferPossible=Event.new
  343. @@OnStepTakenFieldMovement=Event.new
  344. @@OnWildBattleOverride=Event.new
  345. @@OnWildBattleEnd=Event.new
  346. @@OnWildPokemonCreate=Event.new
  347. @@OnTrainerPartyLoad=Event.new
  348. @@OnSpritesetCreate=Event.new
  349. @@OnStartBattle=Event.new
  350. @@OnEndBattle=Event.new
  351. @@OnMapCreate=Event.new
  352. @@OnAction=Event.new
  353.  
  354. # Triggers when the player presses the Action button on the map.
  355. def self.onAction=(v)
  356. @@OnAction=v
  357. end
  358.  
  359. def self.onAction
  360. @@OnAction
  361. end
  362.  
  363. def self.onStartBattle=(v)
  364. @@OnStartBattle=v
  365. end
  366.  
  367. def self.onStartBattle
  368. @@OnStartBattle
  369. end
  370.  
  371. def self.onEndBattle=(v)
  372. @@OnEndBattle=v
  373. end
  374.  
  375. def self.onEndBattle
  376. @@OnEndBattle
  377. end
  378.  
  379. # Fires whenever a map is created. Event handler receives two parameters: the
  380. # map (RPG::Map) and the tileset (RPG::Tileset)
  381. def self.onMapCreate=(v)
  382. @@OnMapCreate=v
  383. end
  384.  
  385. def self.onMapCreate
  386. @@OnMapCreate
  387. end
  388.  
  389. # Fires whenever the player moves to a new map. Event handler receives the old
  390. # map ID or 0 if none. Also fires when the first map of the game is loaded
  391. def self.onMapChange=(v)
  392. @@OnMapChange=v
  393. end
  394.  
  395. def self.onMapChange
  396. @@OnMapChange
  397. end
  398.  
  399. # Fires whenever one map is about to change to a different one. Event handler
  400. # receives the new map ID and the Game_Map object representing the new map.
  401. # When the event handler is called, $game_map still refers to the old map.
  402. def self.onMapChanging=(v)
  403. @@OnMapChanging=v
  404. end
  405.  
  406. def self.onMapChanging
  407. @@OnMapChanging
  408. end
  409.  
  410. # Fires whenever the player takes a step.
  411. def self.onStepTaken=(v)
  412. @@OnStepTaken=v
  413. end
  414.  
  415. def self.onStepTaken
  416. @@OnStepTaken
  417. end
  418.  
  419. # Fires whenever the player or another event leaves a tile.
  420. # Parameters:
  421. # e[0] - Event that just left the tile.
  422. # e[1] - Map ID where the tile is located (not necessarily
  423. # the current map). Use "$MapFactory.getMap(e[1])" to
  424. # get the Game_Map object corresponding to that map.
  425. # e[2] - X-coordinate of the tile
  426. # e[3] - Y-coordinate of the tile
  427. def self.onLeaveTile=(v)
  428. @@OnLeaveTile=v
  429. end
  430.  
  431. def self.onLeaveTile
  432. @@OnLeaveTile
  433. end
  434.  
  435. # Fires whenever the player or another event enters a tile.
  436. # Parameters:
  437. # e[0] - Event that just entered a tile.
  438. def self.onStepTakenFieldMovement=(v)
  439. @@OnStepTakenFieldMovement=v
  440. end
  441.  
  442. def self.onStepTakenFieldMovement
  443. @@OnStepTakenFieldMovement
  444. end
  445.  
  446. # Fires whenever the player takes a step. The event handler may possibly move
  447. # the player elsewhere.
  448. # Parameters:
  449. # e[0] = Array that contains a single boolean value.
  450. # If an event handler moves the player to a new map, it should set this value
  451. # to true. Other event handlers should check this parameter's value.
  452. def self.onStepTakenTransferPossible=(v)
  453. @@OnStepTakenTransferPossible=v
  454. end
  455.  
  456. def self.onStepTakenTransferPossible
  457. @@OnStepTakenTransferPossible
  458. end
  459.  
  460. # Fires each frame during a map update.
  461. def self.onMapUpdate=(v)
  462. @@OnMapUpdate=v
  463. end
  464.  
  465. def self.onMapUpdate
  466. @@OnMapUpdate
  467. end
  468.  
  469. # Triggers at the start of a wild battle. Event handlers can provide their own
  470. # wild battle routines to override the default behavior.
  471. def self.onWildBattleOverride=(v)
  472. @@OnWildBattleOverride=v
  473. end
  474.  
  475. def self.onWildBattleOverride
  476. @@OnWildBattleOverride
  477. end
  478.  
  479. # Triggers whenever a wild Pokémon battle ends
  480. # Parameters:
  481. # e[0] - Pokémon species
  482. # e[1] - Pokémon level
  483. # e[2] - Battle result (1-win, 2-loss, 3-escaped, 4-caught, 5-draw)
  484. def self.onWildBattleEnd=(v)
  485. @@OnWildBattleEnd=v
  486. end
  487.  
  488. def self.onWildBattleEnd
  489. @@OnWildBattleEnd
  490. end
  491.  
  492. # Triggers whenever a wild Pokémon is created
  493. # Parameters:
  494. # e[0] - Pokémon being created
  495. def self.onWildPokemonCreate=(v)
  496. @@OnWildPokemonCreate=v
  497. end
  498.  
  499. def self.onWildPokemonCreate
  500. @@OnWildPokemonCreate
  501. end
  502.  
  503. # Triggers whenever an NPC trainer's Pokémon party is loaded
  504. # Parameters:
  505. # e[0] - Trainer
  506. # e[1] - Items possessed by the trainer
  507. # e[2] - Party
  508. def self.onTrainerPartyLoad=(v)
  509. @@OnTrainerPartyLoad=v
  510. end
  511.  
  512. def self.onTrainerPartyLoad
  513. @@OnTrainerPartyLoad
  514. end
  515.  
  516. # Fires whenever the map scene is regenerated and soon after the player moves
  517. # to a new map.
  518. # Parameters:
  519. # e[0] = Scene_Map object.
  520. # e[1] = Whether the player just moved to a new map (either true or false). If
  521. # false, some other code had called $scene.createSpritesets to regenerate the
  522. # map scene without transferring the player elsewhere
  523. def self.onMapSceneChange=(v)
  524. @@OnMapSceneChange=v
  525. end
  526.  
  527. def self.onMapSceneChange
  528. @@OnMapSceneChange
  529. end
  530.  
  531. # Fires whenever a spriteset is created.
  532. # Parameters:
  533. # e[0] = Spriteset being created
  534. # e[1] = Viewport used for tilemap and characters
  535. # e[0].map = Map associated with the spriteset (not necessarily the current map).
  536. def self.onSpritesetCreate=(v)
  537. @@OnSpritesetCreate=v
  538. end
  539.  
  540. def self.onSpritesetCreate
  541. @@OnSpritesetCreate
  542. end
  543. end
  544.  
  545.  
  546.  
  547. ################################################################################
  548. # Battles
  549. ################################################################################
  550. class Game_Temp
  551. attr_accessor :background_bitmap
  552. end
  553.  
  554.  
  555.  
  556. def pbNewBattleScene
  557. return PokeBattle_Scene.new
  558. end
  559.  
  560. def pbSceneStandby
  561. if $scene && $scene.is_a?(Scene_Map)
  562. $scene.disposeSpritesets
  563. end
  564. GC.start
  565. Graphics.frame_reset
  566. yield
  567. if $scene && $scene.is_a?(Scene_Map)
  568. $scene.createSpritesets
  569. end
  570. end
  571.  
  572. def pbBattleAnimation(bgm=nil,trainerid=-1,trainername="")
  573. handled=false
  574. playingBGS=nil
  575. playingBGM=nil
  576. if $game_system && $game_system.is_a?(Game_System)
  577. playingBGS=$game_system.getPlayingBGS
  578. playingBGM=$game_system.getPlayingBGM
  579. $game_system.bgm_pause
  580. $game_system.bgs_pause
  581. end
  582. pbMEFade(0.25)
  583. pbWait(10)
  584. pbMEStop
  585. if bgm
  586. pbBGMPlay(bgm)
  587. else
  588. pbBGMPlay(pbGetWildBattleBGM(0))
  589. end
  590. viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
  591. viewport.z=99999
  592. # Fade to gray a few times.
  593. viewport.color=Color.new(17*8,17*8,17*8)
  594. 3.times do
  595. viewport.color.alpha=0
  596. 6.times do
  597. viewport.color.alpha+=30
  598. Graphics.update
  599. Input.update
  600. pbUpdateSceneMap
  601. end
  602. 6.times do
  603. viewport.color.alpha-=30
  604. Graphics.update
  605. Input.update
  606. pbUpdateSceneMap
  607. end
  608. end
  609. if $game_temp.background_bitmap
  610. $game_temp.background_bitmap.dispose
  611. end
  612. $game_temp.background_bitmap=Graphics.snap_to_bitmap
  613. # Animate the screen ($game_temp.background_bitmap contains
  614. # the current game screen).
  615. #
  616. # The following example runs a common event that does a custom animation if some
  617. # condition is true. The screen should fade to black when the common event is
  618. # finished:
  619. #
  620. # if $game_map && $game_map.map_id==20 # If on map 20
  621. # pbCommonEvent(20)
  622. # handled=true # Note that the battle animation is done
  623. # end
  624. #
  625. ################################################################################
  626. # VS. animation, by Luka S.J.
  627. # Tweaked by Maruno.
  628. ################################################################################
  629. if trainerid>=0
  630. tbargraphic=sprintf("Graphics/Transitions/vsBar%s",getConstantName(PBTrainers,trainerid)) rescue nil
  631. tbargraphic=sprintf("Graphics/Transitions/vsBar%d",trainerid) if !pbResolveBitmap(tbargraphic)
  632. tgraphic=sprintf("Graphics/Transitions/vsTrainer%s",getConstantName(PBTrainers,trainerid)) rescue nil
  633. tgraphic=sprintf("Graphics/Transitions/vsTrainer%d",trainerid) if !pbResolveBitmap(tgraphic)
  634. if pbResolveBitmap(tbargraphic) && pbResolveBitmap(tgraphic)
  635. outfit=$Trainer ? $Trainer.outfit : 0
  636. # Set up
  637. viewplayer=Viewport.new(0,Graphics.height/3,Graphics.width/2,128)
  638. viewplayer.z=viewport.z
  639. viewopp=Viewport.new(Graphics.width/2,Graphics.height/3,Graphics.width/2,128)
  640. viewopp.z=viewport.z
  641. viewvs=Viewport.new(0,0,Graphics.width,Graphics.height)
  642. viewvs.z=viewport.z
  643. xoffset=(Graphics.width/2)/10
  644. xoffset=xoffset.round
  645. xoffset=xoffset*10
  646. fade=Sprite.new(viewport)
  647. fade.bitmap=BitmapCache.load_bitmap("Graphics/Transitions/vsFlash")
  648. fade.tone=Tone.new(-255,-255,-255)
  649. fade.opacity=100
  650. overlay=Sprite.new(viewport)
  651. overlay.bitmap=Bitmap.new(Graphics.width,Graphics.height)
  652. pbSetSystemFont(overlay.bitmap)
  653. bar1=Sprite.new(viewplayer)
  654. pbargraphic=sprintf("Graphics/Transitions/vsBar%s_%d",getConstantName(PBTrainers,$Trainer.trainertype),outfit) rescue nil
  655. pbargraphic=sprintf("Graphics/Transitions/vsBar%d_%d",$Trainer.trainertype,outfit) if !pbResolveBitmap(pbargraphic)
  656. if !pbResolveBitmap(pbargraphic)
  657. pbargraphic=sprintf("Graphics/Transitions/vsBar%s",getConstantName(PBTrainers,$Trainer.trainertype)) rescue nil
  658. end
  659. pbargraphic=sprintf("Graphics/Transitions/vsBar%d",$Trainer.trainertype) if !pbResolveBitmap(pbargraphic)
  660. bar1.bitmap=BitmapCache.load_bitmap(pbargraphic)
  661. bar1.x=-xoffset
  662. bar2=Sprite.new(viewopp)
  663. bar2.bitmap=BitmapCache.load_bitmap(tbargraphic)
  664. bar2.x=xoffset
  665. vs=Sprite.new(viewvs)
  666. vs.bitmap=BitmapCache.load_bitmap("Graphics/Transitions/vs")
  667. vs.ox=vs.bitmap.width/2
  668. vs.oy=vs.bitmap.height/2
  669. vs.x=Graphics.width/2
  670. vs.y=Graphics.height/1.5
  671. vs.visible=false
  672. flash=Sprite.new(viewvs)
  673. flash.bitmap=BitmapCache.load_bitmap("Graphics/Transitions/vsFlash")
  674. flash.opacity=0
  675. # Animation
  676. 10.times do
  677. bar1.x+=xoffset/10
  678. bar2.x-=xoffset/10
  679. pbWait(1)
  680. end
  681. pbSEPlay("Flash2")
  682. pbSEPlay("Sword2")
  683. flash.opacity=255
  684. bar1.dispose
  685. bar2.dispose
  686. bar1=AnimatedPlane.new(viewplayer)
  687. bar1.bitmap=BitmapCache.load_bitmap(pbargraphic)
  688. player=Sprite.new(viewplayer)
  689. pgraphic=sprintf("Graphics/Transitions/vsTrainer%s_%d",getConstantName(PBTrainers,$Trainer.trainertype),outfit) rescue nil
  690. pgraphic=sprintf("Graphics/Transitions/vsTrainer%d_%d",$Trainer.trainertype,outfit) if !pbResolveBitmap(pgraphic)
  691. if !pbResolveBitmap(pgraphic)
  692. pgraphic=sprintf("Graphics/Transitions/vsTrainer%s",getConstantName(PBTrainers,$Trainer.trainertype)) rescue nil
  693. end
  694. pgraphic=sprintf("Graphics/Transitions/vsTrainer%d",$Trainer.trainertype) if !pbResolveBitmap(pgraphic)
  695. player.bitmap=BitmapCache.load_bitmap(pgraphic)
  696. player.x=-xoffset
  697. bar2=AnimatedPlane.new(viewopp)
  698. bar2.bitmap=BitmapCache.load_bitmap(tbargraphic)
  699. trainer=Sprite.new(viewopp)
  700. trainer.bitmap=BitmapCache.load_bitmap(tgraphic)
  701. trainer.x=xoffset
  702. trainer.tone=Tone.new(-255,-255,-255)
  703. 25.times do
  704. flash.opacity-=51 if flash.opacity>0
  705. bar1.ox-=16
  706. bar2.ox+=16
  707. pbWait(1)
  708. end
  709. 11.times do
  710. bar1.ox-=16
  711. bar2.ox+=16
  712. player.x+=xoffset/10
  713. trainer.x-=xoffset/10
  714. pbWait(1)
  715. end
  716. 2.times do
  717. bar1.ox-=16
  718. bar2.ox+=16
  719. player.x-=xoffset/20
  720. trainer.x+=xoffset/20
  721. pbWait(1)
  722. end
  723. 10.times do
  724. bar1.ox-=16
  725. bar2.ox+=16
  726. pbWait(1)
  727. end
  728. val=2
  729. flash.opacity=255
  730. vs.visible=true
  731. trainer.tone=Tone.new(0,0,0)
  732. textpos=[
  733. [_INTL("{1}",$Trainer.name),Graphics.width/4,(Graphics.height/1.5)+10,2,
  734. Color.new(248,248,248),Color.new(12*6,12*6,12*6)],
  735. [_INTL("{1}",trainername),(Graphics.width/4)+(Graphics.width/2),(Graphics.height/1.5)+10,2,
  736. Color.new(248,248,248),Color.new(12*6,12*6,12*6)]
  737. ]
  738. pbDrawTextPositions(overlay.bitmap,textpos)
  739. pbSEPlay("Sword2")
  740. 70.times do
  741. bar1.ox-=16
  742. bar2.ox+=16
  743. flash.opacity-=25.5 if flash.opacity>0
  744. vs.x+=val
  745. vs.y-=val
  746. val=2 if vs.x<=(Graphics.width/2)-2
  747. val=-2 if vs.x>=(Graphics.width/2)+2
  748. pbWait(1)
  749. end
  750. 30.times do
  751. bar1.ox-=16
  752. bar2.ox+=16
  753. vs.zoom_x+=0.2
  754. vs.zoom_y+=0.2
  755. pbWait(1)
  756. end
  757. flash.tone=Tone.new(-255,-255,-255)
  758. 10.times do
  759. bar1.ox-=16
  760. bar2.ox+=16
  761. flash.opacity+=25.5
  762. pbWait(1)
  763. end
  764. # End
  765. player.dispose
  766. trainer.dispose
  767. flash.dispose
  768. vs.dispose
  769. bar1.dispose
  770. bar2.dispose
  771. overlay.dispose
  772. fade.dispose
  773. viewvs.dispose
  774. viewopp.dispose
  775. viewplayer.dispose
  776. viewport.color=Color.new(0,0,0,255)
  777. handled=true
  778. end
  779. end
  780. # End of VS. sequence script
  781. if !handled
  782. if $PokemonGlobal.nextTransition !=nil && $PokemonGlobal.nextTransition !="" #force chosen transition
  783. Graphics.freeze
  784. viewport.color=Color.new(0,0,0,255)
  785. Graphics.transition(50,sprintf("Graphics/Transitions/%s",$PokemonGlobal.nextTransition))
  786. $PokemonGlobal.nextTransition=""
  787. elsif Sprite.method_defined?(:wave_amp) && rand(15)==0
  788. viewport.color=Color.new(0,0,0,255)
  789. sprite = Sprite.new
  790. bitmap=Graphics.snap_to_bitmap
  791. bm=bitmap.clone
  792. sprite.z=99999
  793. sprite.bitmap = bm
  794. sprite.wave_speed=500
  795. for i in 0..25
  796. sprite.opacity-=10
  797. sprite.wave_amp+=60
  798. sprite.update
  799. sprite.wave_speed+=30
  800. 2.times do
  801. Graphics.update
  802. end
  803. end
  804. bitmap.dispose
  805. bm.dispose
  806. sprite.dispose
  807. elsif Bitmap.method_defined?(:radial_blur) && rand(15)==0
  808. viewport.color=Color.new(0,0,0,255)
  809. sprite = Sprite.new
  810. bitmap=Graphics.snap_to_bitmap
  811. bm=bitmap.clone
  812. sprite.z=99999
  813. sprite.bitmap = bm
  814. for i in 0..15
  815. bm.radial_blur(i,2)
  816. sprite.opacity-=15
  817. 2.times do
  818. Graphics.update
  819. end
  820. end
  821. bitmap.dispose
  822. bm.dispose
  823. sprite.dispose
  824. elsif rand(15)==0
  825. scroll=["ScrollDown","ScrollLeft","ScrollRight","ScrollUp"]
  826. Graphics.freeze
  827. viewport.color=Color.new(0,0,0,255)
  828. Graphics.transition(50,sprintf("Graphics/Transitions/%s",scroll[rand(4)]))
  829. elsif rand(15)==0
  830. scroll=["ScrollDownRight","ScrollDownLeft","ScrollUpRight","ScrollUpLeft"]
  831. Graphics.freeze
  832. viewport.color=Color.new(0,0,0,255)
  833. Graphics.transition(50,sprintf("Graphics/Transitions/%s",scroll[rand(4)]))
  834. else
  835. transitions=["021-Normal01","022-Normal02",
  836. "Battle","battle1","battle2","battle3","battle4",
  837. "computertr","computertrclose",
  838. "hexatr","hexatrc","hexatzr",
  839. "Image1","Image2","Image3","Image4",
  840. "Splash","Random_stripe_v","Random_stripe_h",
  841. "RotatingPieces","ShrinkingPieces",
  842. "BreakingGlass","Mosaic","zoomin"
  843. ]
  844. rnd=rand(transitions.length)
  845. Graphics.freeze
  846. viewport.color=Color.new(0,0,0,255)
  847. Graphics.transition(40,sprintf("Graphics/Transitions/%s",transitions[rnd]))
  848. end
  849. 5.times do
  850. Graphics.update
  851. Input.update
  852. pbUpdateSceneMap
  853. end
  854. end
  855. pbPushFade
  856. yield if block_given?
  857. pbPopFade
  858. if $game_system && $game_system.is_a?(Game_System)
  859. $game_system.bgm_resume(playingBGM)
  860. $game_system.bgs_resume(playingBGS)
  861. end
  862. $PokemonGlobal.nextBattleBGM=nil
  863. $PokemonGlobal.nextBattleME=nil
  864. $PokemonGlobal.nextBattleBack=nil
  865. $PokemonEncounters.clearStepCount
  866. for j in 0..17
  867. viewport.color=Color.new(0,0,0,(17-j)*15)
  868. Graphics.update
  869. Input.update
  870. pbUpdateSceneMap
  871. end
  872. viewport.dispose
  873. end
  874.  
  875. def pbPrepareBattle(battle)
  876. case $game_screen.weather_type
  877. when 1, 2, 6
  878. battle.weather=PBWeather::RAINDANCE
  879. battle.weatherduration=-1
  880. when 3, 7
  881. battle.weather=PBWeather::HAIL
  882. battle.weatherduration=-1
  883. when 4
  884. battle.weather=PBWeather::SANDSTORM
  885. battle.weatherduration=-1
  886. when 5
  887. battle.weather=PBWeather::SUNNYDAY
  888. battle.weatherduration=-1
  889. end
  890. battle.shiftStyle=($PokemonSystem.battlestyle==0)
  891. battle.battlescene=($PokemonSystem.battlescene==0)
  892. battle.environment=pbGetEnvironment
  893. end
  894.  
  895. def pbGetEnvironment
  896. return PBEnvironment::None if !$game_map
  897. if $PokemonGlobal && $PokemonGlobal.diving
  898. return PBEnvironment::Underwater
  899. elsif $PokemonEncounters && $PokemonEncounters.isCave?
  900. return PBEnvironment::Cave
  901. elsif !pbGetMetadata($game_map.map_id,MetadataOutdoor)
  902. return PBEnvironment::None
  903. else
  904. terrain=$game_player.terrain_tag
  905. if terrain==PBTerrain::Grass # Normal grass
  906. return PBEnvironment::Grass
  907. elsif terrain==PBTerrain::TallGrass # Tall grass
  908. return PBEnvironment::TallGrass
  909. elsif terrain==PBTerrain::DeepWater || terrain==PBTerrain::Water
  910. return PBEnvironment::MovingWater
  911. elsif terrain==PBTerrain::StillWater
  912. return PBEnvironment::StillWater
  913. elsif terrain==PBTerrain::Rock
  914. return PBEnvironment::Rock
  915. elsif terrain==PBTerrain::Sand
  916. return PBEnvironment::Sand
  917. end
  918. return PBEnvironment::None
  919. end
  920. end
  921.  
  922. def pbGenerateWildPokemon(species,level)
  923. genwildpoke=PokeBattle_Pokemon.new(species,level,$Trainer)
  924. items=genwildpoke.wildHoldItems
  925. chances=[50,5,1]
  926. chances=[60,20,5] if !$Trainer.party[0].isEgg? &&
  927. isConst?($Trainer.party[0].ability,PBAbilities,:COMPOUNDEYES)
  928. itemrnd=rand(100)
  929. if itemrnd<chances[0] || (items[0]==items[1] && items[1]==items[2])
  930. genwildpoke.setItem(items[0])
  931. elsif itemrnd<(chances[0]+chances[1])
  932. genwildpoke.setItem(items[1])
  933. elsif itemrnd<(chances[0]+chances[1]+chances[2])
  934. genwildpoke.setItem(items[2])
  935. end
  936. if hasConst?(PBItems,:SHINYCHARM) && $PokemonBag.pbQuantity(PBItems::SHINYCHARM)>0
  937. for i in 0...2 # 3 times as likely
  938. break if genwildpoke.isShiny?
  939. genwildpoke.personalID=rand(65536)|(rand(65536)<<16)
  940. end
  941. end
  942. if rand(65536)<POKERUSCHANCE
  943. genwildpoke.givePokerus
  944. end
  945. #Cute Charm. Should also include swarming pokemon, if you implement that
  946. if !$Trainer.party[0].egg? && isConst?($Trainer.party[0].ability,PBAbilities,:CUTECHARM)
  947. if genwildpoke.gender !=2 && rand(100)<67 #&& $game_map.map_id !=XX where XX is the id of Hidden Grotto map, if you have one
  948. genwildpoke.setGender(($Trainer.party[0].gender==0)? 1:0)
  949. end
  950. end
  951. #Hustle, Pressure, Vital Spirit. Probably not the best way to implement this
  952. if !$Trainer.party[0].egg? && (isConst?($Trainer.party[0].ability,PBAbilities,:HUSTLE) || isConst?($Trainer.party[0].ability,PBAbilities,:PRESSURE) || isConst?($Trainer.party[0].ability,PBAbilities,:VITALSPIRIT))
  953. if rand(100)<50
  954. increase=(genwildpoke.level/10).floor
  955. genwildpoke.level+=increase
  956. genwildpoke.level=MAXIMUMLEVEL if genwildpoke.level>MAXIMUMLEVEL
  957. end
  958. end
  959. #Synchronize
  960. if !$Trainer.party[0].egg? && isConst?($Trainer.party[0].ability,PBAbilities,:SYNCHRONIZE)
  961. genwildpoke.setNature($Trainer.party[0].nature) if rand(100)<50
  962. end
  963. Events.onWildPokemonCreate.trigger(nil,genwildpoke)
  964. return genwildpoke
  965. end
  966.  
  967. def pbWildBattle(species,level,variable=nil,canescape=true,canlose=false,skybattle=false,inverse=false)
  968. if (Input.press?(Input::CTRL) && $DEBUG) || $Trainer.pokemonCount==0
  969. if $Trainer.pokemonCount>0
  970. Kernel.pbMessage(_INTL("SKIPPING BATTLE..."))
  971. end
  972. pbSet(variable,1)
  973. $PokemonGlobal.nextBattleBGM=nil
  974. $PokemonGlobal.nextBattleME=nil
  975. $PokemonGlobal.nextBattleBack=nil
  976. return true
  977. end
  978. # Sky battle eligibility for player
  979. if skybattle
  980. count=0
  981. for poke in $Trainer.party
  982. count+=1 if pbCanSkyBattle?(poke)
  983. end
  984. if count==0
  985. Kernel.pbMessage(_INTL("You don't have any eligible pokemon for a sky battle"))
  986. return false
  987. end
  988. end
  989. if species.is_a?(String) || species.is_a?(Symbol)
  990. species=getID(PBSpecies,species)
  991. end
  992. handled=[nil]
  993. Events.onWildBattleOverride.trigger(nil,species,level,handled)
  994. if handled[0]!=nil
  995. return handled[0]
  996. end
  997. currentlevels=[]
  998. for i in $Trainer.party
  999. currentlevels.push(i.level)
  1000. end
  1001. genwildpoke=pbGenerateWildPokemon(species,level)
  1002. Events.onStartBattle.trigger(nil,genwildpoke)
  1003. if skybattle && !pbCanSkyBattle?(genwildpoke)
  1004. Kernel.pbMessage(_INTL("This pokemon can't fight in a sky battle!"))
  1005. return false
  1006. end
  1007. scene=pbNewBattleScene
  1008. battle=PokeBattle_Battle.new(scene,$Trainer.party,[genwildpoke],$Trainer,nil,skybattle,inverse)
  1009. battle.internalbattle=true
  1010. battle.cantescape=!canescape
  1011. pbPrepareBattle(battle)
  1012. decision=0
  1013. pbBattleAnimation(pbGetWildBattleBGM(species)) {
  1014. pbSceneStandby {
  1015. decision=battle.pbStartBattle(canlose)
  1016. }
  1017. for i in $Trainer.party; (i.makeUnmega rescue nil); end
  1018. if $PokemonGlobal.partner
  1019. pbHealAll
  1020. for i in $PokemonGlobal.partner[3]
  1021. i.heal
  1022. i.makeUnmega rescue nil
  1023. end
  1024. end
  1025. if decision==2 || decision==5 # if loss or draw
  1026. if canlose
  1027. for i in $Trainer.party; i.heal; end
  1028. for i in 0...10
  1029. Graphics.update
  1030. end
  1031. else
  1032. $game_system.bgm_unpause
  1033. $game_system.bgs_unpause
  1034. Kernel.pbStartOver
  1035. end
  1036. end
  1037. Events.onEndBattle.trigger(nil,decision)
  1038. }
  1039. Input.update
  1040. pbSet(variable,decision)
  1041. Events.onWildBattleEnd.trigger(nil,species,level,decision)
  1042. return (decision!=2)
  1043. end
  1044.  
  1045. def pbDoubleWildBattle(species1,level1,species2,level2,variable=nil,canescape=true,canlose=false,skybattle=false,inverse=false)
  1046. if (Input.press?(Input::CTRL) && $DEBUG) || $Trainer.pokemonCount==0
  1047. if $Trainer.pokemonCount>0
  1048. Kernel.pbMessage(_INTL("SKIPPING BATTLE..."))
  1049. end
  1050. pbSet(variable,1)
  1051. $PokemonGlobal.nextBattleBGM=nil
  1052. $PokemonGlobal.nextBattleME=nil
  1053. $PokemonGlobal.nextBattleBack=nil
  1054. return true
  1055. end
  1056. # Sky battle eligibility for player
  1057. if skybattle
  1058. count=0
  1059. for poke in $Trainer.party
  1060. count+=1 if pbCanSkyBattle?(poke)
  1061. end
  1062. if count==0
  1063. Kernel.pbMessage(_INTL("You don't have any eligible pokemon for a sky battle"))
  1064. return false
  1065. end
  1066. end
  1067. if species1.is_a?(String) || species1.is_a?(Symbol)
  1068. species1=getID(PBSpecies,species1)
  1069. end
  1070. if species2.is_a?(String) || species2.is_a?(Symbol)
  1071. species2=getID(PBSpecies,species2)
  1072. end
  1073. currentlevels=[]
  1074. for i in $Trainer.party
  1075. currentlevels.push(i.level)
  1076. end
  1077. genwildpoke=pbGenerateWildPokemon(species1,level1)
  1078. genwildpoke2=pbGenerateWildPokemon(species2,level2)
  1079. Events.onStartBattle.trigger(nil,genwildpoke)
  1080. if skybattle && (!pbCanSkyBattle?(genwildpoke) || !pbCanSkyBattle?(genwildpoke2))
  1081. Kernel.pbMessage(_INTL("These pokemon can't fight in a sky battle!"))
  1082. return false
  1083. end
  1084. scene=pbNewBattleScene
  1085. if $PokemonGlobal.partner
  1086. othertrainer=PokeBattle_Trainer.new(
  1087. $PokemonGlobal.partner[1],$PokemonGlobal.partner[0])
  1088. othertrainer.id=$PokemonGlobal.partner[2]
  1089. othertrainer.party=$PokemonGlobal.partner[3]
  1090. combinedParty=[]
  1091. for i in 0...$Trainer.party.length
  1092. combinedParty[i]=$Trainer.party[i]
  1093. end
  1094. for i in 0...othertrainer.party.length
  1095. combinedParty[6+i]=othertrainer.party[i]
  1096. end
  1097. battle=PokeBattle_Battle.new(scene,combinedParty,[genwildpoke,genwildpoke2],
  1098. [$Trainer,othertrainer],nil,skybattle,inverse)
  1099. battle.fullparty1=true
  1100. else
  1101. battle=PokeBattle_Battle.new(scene,$Trainer.party,[genwildpoke,genwildpoke2],
  1102. $Trainer,nil,skybattle,inverse)
  1103. end
  1104. battle.internalbattle=true
  1105. battle.doublebattle=battle.pbDoubleBattleAllowed?()
  1106. battle.cantescape=!canescape
  1107. pbPrepareBattle(battle)
  1108. decision=0
  1109. pbBattleAnimation(pbGetWildBattleBGM(species1)) {
  1110. pbSceneStandby {
  1111. decision=battle.pbStartBattle(canlose)
  1112. }
  1113. for i in $Trainer.party; (i.makeUnmega rescue nil); end
  1114. if $PokemonGlobal.partner
  1115. pbHealAll
  1116. for i in $PokemonGlobal.partner[3]
  1117. i.heal
  1118. i.makeUnmega rescue nil
  1119. end
  1120. end
  1121. if decision==2 || decision==5
  1122. if canlose
  1123. for i in $Trainer.party; i.heal; end
  1124. for i in 0...10
  1125. Graphics.update
  1126. end
  1127. else
  1128. $game_system.bgm_unpause
  1129. $game_system.bgs_unpause
  1130. Kernel.pbStartOver
  1131. end
  1132. end
  1133. Events.onEndBattle.trigger(nil,decision)
  1134. }
  1135. Input.update
  1136. pbSet(variable,decision)
  1137. return (decision!=2 && decision!=5)
  1138. end
  1139.  
  1140. def pbCheckAllFainted()
  1141. if pbAllFainted
  1142. Kernel.pbMessage(_INTL("{1} has no usable Pokémon!\1",$Trainer.name))
  1143. Kernel.pbMessage(_INTL("{1} blacked out!",$Trainer.name))
  1144. pbBGMFade(1.0)
  1145. pbBGSFade(1.0)
  1146. pbFadeOutIn(99999){
  1147. Kernel.pbStartOver
  1148. }
  1149. end
  1150. end
  1151.  
  1152. def pbEvolutionCheck(currentlevels)
  1153. # Check conditions for evolution
  1154. for i in 0...currentlevels.length
  1155. pokemon=$Trainer.party[i]
  1156. if pokemon && (!currentlevels[i] || pokemon.level!=currentlevels[i])
  1157. newspecies=Kernel.pbCheckEvolution(pokemon)
  1158. if newspecies>0
  1159. # Start evolution scene
  1160. evo=PokemonEvolutionScene.new
  1161. evo.pbStartScreen(pokemon,newspecies)
  1162. evo.pbEvolution
  1163. evo.pbEndScreen
  1164. end
  1165. end
  1166. end
  1167. end
  1168.  
  1169. def pbDynamicItemList(*args)
  1170. ret=[]
  1171. for i in 0...args.length
  1172. if hasConst?(PBItems,args[i])
  1173. ret.push(getConst(PBItems,args[i].to_sym))
  1174. end
  1175. end
  1176. return ret
  1177. end
  1178.  
  1179. # Runs the Pickup event after a battle if a Pokemon has the ability Pickup.
  1180. def Kernel.pbPickup(pokemon)
  1181. return if !isConst?(pokemon.ability,PBAbilities,:PICKUP) || pokemon.isEgg?
  1182. return if pokemon.item!=0
  1183. return if rand(10)!=0
  1184. pickupList=pbDynamicItemList(
  1185. :POTION,
  1186. :ANTIDOTE,
  1187. :SUPERPOTION,
  1188. :GREATBALL,
  1189. :REPEL,
  1190. :ESCAPEROPE,
  1191. :FULLHEAL,
  1192. :HYPERPOTION,
  1193. :ULTRABALL,
  1194. :REVIVE,
  1195. :RARECANDY,
  1196. :SUNSTONE,
  1197. :MOONSTONE,
  1198. :HEARTSCALE,
  1199. :FULLRESTORE,
  1200. :MAXREVIVE,
  1201. :PPUP,
  1202. :MAXELIXIR
  1203. )
  1204. pickupListRare=pbDynamicItemList(
  1205. :HYPERPOTION,
  1206. :NUGGET,
  1207. :KINGSROCK,
  1208. :FULLRESTORE,
  1209. :ETHER,
  1210. :IRONBALL,
  1211. :PRISMSCALE,
  1212. :ELIXIR,
  1213. :PRISMSCALE,
  1214. :LEFTOVERS,
  1215. :PRISMSCALE
  1216. )
  1217. return if pickupList.length!=18
  1218. return if pickupListRare.length!=11
  1219. randlist=[30,10,10,10,10,10,10,4,4,1,1]
  1220. items=[]
  1221. plevel=[100,pokemon.level].min
  1222. rnd=rand(100)
  1223. itemstart=(plevel-1)/10
  1224. itemstart=0 if itemstart<0
  1225. for i in 0...9
  1226. items.push(pickupList[i+itemstart])
  1227. end
  1228. items.push(pickupListRare[itemstart])
  1229. items.push(pickupListRare[itemstart+1])
  1230. cumnumber=0
  1231. for i in 0...11
  1232. cumnumber+=randlist[i]
  1233. if rnd<cumnumber
  1234. pokemon.setItem(items[i])
  1235. break
  1236. end
  1237. end
  1238. end
  1239.  
  1240.  
  1241.  
  1242. class PokemonTemp
  1243. attr_accessor :encounterType
  1244. attr_accessor :evolutionLevels
  1245. end
  1246.  
  1247.  
  1248.  
  1249. def pbEncounter(enctype)
  1250. if $PokemonGlobal.partner
  1251. encounter1=$PokemonEncounters.pbEncounteredPokemon(enctype)
  1252. return false if !encounter1
  1253. encounter2=$PokemonEncounters.pbEncounteredPokemon(enctype)
  1254. return false if !encounter2
  1255. $PokemonTemp.encounterType=enctype
  1256. pbDoubleWildBattle(encounter1[0],encounter1[1],encounter2[0],encounter2[1])
  1257. $PokemonTemp.encounterType=-1
  1258. return true
  1259. else
  1260. encounter=$PokemonEncounters.pbEncounteredPokemon(enctype)
  1261. return false if !encounter
  1262. $PokemonTemp.encounterType=enctype
  1263. pbWildBattle(encounter[0],encounter[1])
  1264. $PokemonTemp.encounterType=-1
  1265. return true
  1266. end
  1267. end
  1268.  
  1269. Events.onStartBattle+=proc {|sender,e|
  1270. $PokemonTemp.evolutionLevels=[]
  1271. for i in 0...$Trainer.party.length
  1272. $PokemonTemp.evolutionLevels[i]=$Trainer.party[i].level
  1273. end
  1274. }
  1275.  
  1276. Events.onEndBattle+=proc {|sender,e|
  1277. decision=e[0]
  1278. if (decision!=2 && decision!=5) || EVOLVEAFTERLOSS # not a loss or a draw
  1279. if $PokemonTemp.evolutionLevels
  1280. pbEvolutionCheck($PokemonTemp.evolutionLevels)
  1281. $PokemonTemp.evolutionLevels=nil
  1282. end
  1283. end
  1284. if decision==1
  1285. for pkmn in $Trainer.party
  1286. Kernel.pbPickup(pkmn)
  1287. if isConst?(pkmn.ability,PBAbilities,:HONEYGATHER) && !pkmn.isEgg? && !pkmn.hasItem?
  1288. if hasConst?(PBItems,:HONEY)
  1289. chance = 5 + ((pkmn.level-1)/10)*5
  1290. pkmn.setItem(:HONEY) if rand(100)<chance
  1291. end
  1292. end
  1293. end
  1294. end
  1295. }
  1296.  
  1297.  
  1298.  
  1299. ################################################################################
  1300. # Scene_Map and Spriteset_Map
  1301. ################################################################################
  1302. class Scene_Map
  1303. def createSingleSpriteset(map)
  1304. temp=$scene.spriteset.getAnimations
  1305. @spritesets[map]=Spriteset_Map.new($MapFactory.maps[map])
  1306. $scene.spriteset.restoreAnimations(temp)
  1307. $MapFactory.setSceneStarted(self)
  1308. updateSpritesets
  1309. end
  1310. end
  1311.  
  1312.  
  1313.  
  1314. class Spriteset_Map
  1315. def getAnimations
  1316. return @usersprites
  1317. end
  1318.  
  1319. def restoreAnimations(anims)
  1320. @usersprites=anims
  1321. end
  1322. end
  1323.  
  1324.  
  1325.  
  1326. Events.onSpritesetCreate+=proc{|sender,e|
  1327. spriteset=e[0] # Spriteset being created
  1328. viewport=e[1] # Viewport used for tilemap and characters
  1329. map=spriteset.map # Map associated with the spriteset (not necessarily the current map).
  1330. for i in map.events.keys
  1331. if map.events[i].name[/^OutdoorLight\((\w+)\)$/]
  1332. filename=$~[1].to_s
  1333. spriteset.addUserSprite(LightEffect_DayNight.new(map.events[i],viewport,map,filename))
  1334. elsif map.events[i].name=="OutdoorLight"
  1335. spriteset.addUserSprite(LightEffect_DayNight.new(map.events[i],viewport,map))
  1336. elsif map.events[i].name[/^Light\((\w+)\)$/]
  1337. filename=$~[1].to_s
  1338. spriteset.addUserSprite(LightEffect_Basic.new(map.events[i],viewport,map,filename))
  1339. elsif map.events[i].name=="Light"
  1340. spriteset.addUserSprite(LightEffect_Basic.new(map.events[i],viewport,map))
  1341. end
  1342. end
  1343. spriteset.addUserSprite(Particle_Engine.new(viewport,map))
  1344. }
  1345.  
  1346. def Kernel.pbOnSpritesetCreate(spriteset,viewport)
  1347. Events.onSpritesetCreate.trigger(nil,spriteset,viewport)
  1348. end
  1349.  
  1350.  
  1351.  
  1352. ################################################################################
  1353. # Field movement
  1354. ################################################################################
  1355. def pbLedge(xOffset,yOffset)
  1356. if Kernel.pbFacingTerrainTag==PBTerrain::Ledge
  1357. if Kernel.pbJumpToward(2,true)
  1358. $scene.spriteset.addUserAnimation(DUST_ANIMATION_ID,$game_player.x,$game_player.y,true)
  1359. $game_player.increase_steps
  1360. $game_player.check_event_trigger_here([1,2])
  1361. end
  1362. return true
  1363. end
  1364. return false
  1365. end
  1366.  
  1367. def Kernel.pbSlideOnIce(event=nil)
  1368. event=$game_player if !event
  1369. return if !event
  1370. return if pbGetTerrainTag(event)!=PBTerrain::Ice
  1371. $PokemonGlobal.sliding=true
  1372. direction=event.direction
  1373. oldwalkanime=event.walk_anime
  1374. event.straighten
  1375. event.pattern=1
  1376. event.walk_anime=false
  1377. loop do
  1378. break if !event.passable?(event.x,event.y,direction)
  1379. break if pbGetTerrainTag(event)!=PBTerrain::Ice
  1380. event.move_forward
  1381. while event.moving?
  1382. Graphics.update
  1383. Input.update
  1384. pbUpdateSceneMap
  1385. end
  1386. end
  1387. event.center(event.x,event.y)
  1388. event.straighten
  1389. event.walk_anime=oldwalkanime
  1390. $PokemonGlobal.sliding=false
  1391. end
  1392.  
  1393. # Poison event on each step taken
  1394. Events.onStepTakenTransferPossible+=proc {|sender,e|
  1395. handled=e[0]
  1396. next if handled[0]
  1397. if $PokemonGlobal.stepcount % 4 == 0 && POISONINFIELD
  1398. flashed=false
  1399. for i in $Trainer.party
  1400. if i.status==PBStatuses::POISON && i.hp>0 && !i.isEgg? &&
  1401. !isConst?(i.ability,PBAbilities,:POISONHEAL) && !isConst?(i.ability,PBAbilities,:IMMUNITY)
  1402. if !flashed
  1403. $game_screen.start_flash(Color.new(255,0,0,128), 4)
  1404. flashed=true
  1405. end
  1406. if i.hp==1 && !POISONFAINTINFIELD
  1407. i.status=0
  1408. Kernel.pbMessage(_INTL("{1} survived the poisoning.\\nThe poison faded away!\\1",i.name))
  1409. next
  1410. end
  1411. i.hp-=1
  1412. if i.hp==1 && !POISONFAINTINFIELD
  1413. i.status=0
  1414. Kernel.pbMessage(_INTL("{1} survived the poisoning.\\nThe poison faded away!\\1",i.name))
  1415. end
  1416. if i.hp==0
  1417. i.changeHappiness("faint")
  1418. i.status=0
  1419. Kernel.pbMessage(_INTL("{1} fainted...\\1",i.name))
  1420. end
  1421. handled[0]=true if pbAllFainted
  1422. pbCheckAllFainted()
  1423. end
  1424. end
  1425. end
  1426. }
  1427.  
  1428. Events.onStepTaken+=proc{
  1429. $PokemonGlobal.happinessSteps=0 if !$PokemonGlobal.happinessSteps
  1430. $PokemonGlobal.happinessSteps+=1
  1431. if $PokemonGlobal.happinessSteps==128
  1432. for pkmn in $Trainer.party
  1433. if pkmn.hp>0 && !pkmn.isEgg?
  1434. pkmn.changeHappiness("walking") if rand(2)==0
  1435. end
  1436. end
  1437. $PokemonGlobal.happinessSteps=0
  1438. end
  1439. }
  1440.  
  1441. Events.onStepTakenFieldMovement+=proc{|sender,e|
  1442. event=e[0] # Get the event affected by field movement
  1443. thistile=$MapFactory.getRealTilePos(event.map.map_id,event.x,event.y)
  1444. map=$MapFactory.getMap(thistile[0])
  1445. sootlevel=nil
  1446. for i in [2, 1, 0]
  1447. tile_id = map.data[thistile[1],thistile[2],i]
  1448. next if tile_id == nil
  1449. if map.terrain_tags[tile_id] &&
  1450. map.terrain_tags[tile_id]==PBTerrain::SootGrass
  1451. sootlevel=i
  1452. break
  1453. end
  1454. end
  1455. if sootlevel
  1456. $PokemonGlobal.sootsack=0 if !$PokemonGlobal.sootsack
  1457. map.data[thistile[1],thistile[2],sootlevel]=0
  1458. if event==$game_player && $PokemonBag.pbQuantity(getConst(PBItems,:SOOTSACK))>0
  1459. $PokemonGlobal.sootsack+=1
  1460. end
  1461. $scene.createSingleSpriteset(map.map_id)
  1462. end
  1463. }
  1464.  
  1465. Events.onStepTakenFieldMovement+=proc{|sender,e|
  1466. event=e[0] # Get the event affected by field movement
  1467. currentTag=pbGetTerrainTag(event)
  1468. if pbGetTerrainTag(event,true)==PBTerrain::Grass # Won't show if under bridge
  1469. $scene.spriteset.addUserAnimation(GRASS_ANIMATION_ID,event.x,event.y,true)
  1470. elsif event==$game_player && currentTag==PBTerrain::WaterfallCrest
  1471. # Descend waterfall, but only if this event is the player
  1472. Kernel.pbDescendWaterfall(event)
  1473. elsif event==$game_player && currentTag==PBTerrain::Ice && !$PokemonGlobal.sliding
  1474. Kernel.pbSlideOnIce(event)
  1475. end
  1476. }
  1477.  
  1478. def pbBattleOnStepTaken
  1479. if $Trainer.party.length>0
  1480. encounterType=$PokemonEncounters.pbEncounterType
  1481. if encounterType>=0
  1482. if $PokemonEncounters.isEncounterPossibleHere?()
  1483. encounter=$PokemonEncounters.pbGenerateEncounter(encounterType)
  1484. encounter=EncounterModifier.trigger(encounter)
  1485. if $PokemonEncounters.pbCanEncounter?(encounter)
  1486. if $PokemonGlobal.partner
  1487. encounter2=$PokemonEncounters.pbEncounteredPokemon(encounterType)
  1488. pbDoubleWildBattle(encounter[0],encounter[1],encounter2[0],encounter2[1])
  1489. else
  1490. pbWildBattle(encounter[0],encounter[1])
  1491. end
  1492. end
  1493. EncounterModifier.triggerEncounterEnd()
  1494. end
  1495. end
  1496. end
  1497. end
  1498.  
  1499. def Kernel.pbOnStepTaken(eventTriggered)
  1500. if $game_player.move_route_forcing || pbMapInterpreterRunning? || !$Trainer
  1501. # if forced movement or if no trainer was created yet
  1502. Events.onStepTakenFieldMovement.trigger(nil,$game_player)
  1503. return
  1504. end
  1505. $PokemonGlobal.stepcount=0 if !$PokemonGlobal.stepcount
  1506. $PokemonGlobal.stepcount+=1
  1507. $PokemonGlobal.stepcount&=0x7FFFFFFF
  1508. Events.onStepTaken.trigger(nil)
  1509. # Events.onStepTakenFieldMovement.trigger(nil,$game_player)
  1510. handled=[nil]
  1511. Events.onStepTakenTransferPossible.trigger(nil,handled)
  1512. return if handled[0]
  1513. if !eventTriggered
  1514. pbBattleOnStepTaken()
  1515. end
  1516. end
  1517.  
  1518. # This method causes a lot of lag when the game is encrypted
  1519. def pbGetPlayerCharset(meta,charset,trainer=nil)
  1520. trainer=$Trainer if !trainer
  1521. outfit=trainer ? trainer.outfit : 0
  1522. ret=meta[charset]
  1523. ret=meta[1] if !ret || ret==""
  1524. # if FileTest.image_exist?("Graphics/Characters/"+ret+"_"+outfit.to_s)
  1525. if pbResolveBitmap("Graphics/Characters/"+ret+"_"+outfit.to_s)
  1526. ret=ret+"_"+outfit.to_s
  1527. end
  1528. return ret
  1529. end
  1530.  
  1531. def Kernel.pbUpdateVehicle
  1532. meta=pbGetMetadata(0,MetadataPlayerA+$PokemonGlobal.playerID)
  1533. if meta
  1534. if $PokemonGlobal.diving
  1535. $game_player.character_name=pbGetPlayerCharset(meta,5) # Diving graphic
  1536. elsif $PokemonGlobal.surfing
  1537. $game_player.character_name=pbGetPlayerCharset(meta,3) # Surfing graphic
  1538. elsif $PokemonGlobal.bicycle
  1539. $game_player.character_name=pbGetPlayerCharset(meta,2) # Bicycle graphic
  1540. else
  1541. $game_player.character_name=pbGetPlayerCharset(meta,1) # Regular graphic
  1542. end
  1543. end
  1544. end
  1545.  
  1546. def Kernel.pbCancelVehicles(destination=nil)
  1547. $PokemonGlobal.surfing=false
  1548. $PokemonGlobal.diving=false
  1549. if !destination || !pbCanUseBike?(destination)
  1550. $PokemonGlobal.bicycle=false
  1551. end
  1552. Kernel.pbUpdateVehicle
  1553. end
  1554.  
  1555. def pbCanUseBike?(mapid)
  1556. return true if pbGetMetadata(mapid,MetadataBicycleAlways)
  1557. val=pbGetMetadata(mapid,MetadataBicycle)
  1558. val=pbGetMetadata(mapid,MetadataOutdoor) if val==nil
  1559. return val ? true : false
  1560. end
  1561.  
  1562. def Kernel.pbMountBike
  1563. return if $PokemonGlobal.bicycle
  1564. $PokemonGlobal.bicycle=true
  1565. Kernel.pbUpdateVehicle
  1566. bikebgm=pbGetMetadata(0,MetadataBicycleBGM)
  1567. if bikebgm
  1568. pbCueBGM(bikebgm,0.5)
  1569. end
  1570. end
  1571.  
  1572. def Kernel.pbDismountBike
  1573. return if !$PokemonGlobal.bicycle
  1574. $PokemonGlobal.bicycle=false
  1575. Kernel.pbUpdateVehicle
  1576. $game_map.autoplayAsCue
  1577. end
  1578.  
  1579. def Kernel.pbSetPokemonCenter
  1580. $PokemonGlobal.pokecenterMapId=$game_map.map_id
  1581. $PokemonGlobal.pokecenterX=$game_player.x
  1582. $PokemonGlobal.pokecenterY=$game_player.y
  1583. $PokemonGlobal.pokecenterDirection=$game_player.direction
  1584. end
  1585.  
  1586.  
  1587.  
  1588. ################################################################################
  1589. # Fishing
  1590. ################################################################################
  1591. def pbFishingBegin
  1592. $PokemonGlobal.fishing=true
  1593. if !pbCommonEvent(FISHINGBEGINCOMMONEVENT)
  1594. patternb = 2*$game_player.direction - 1
  1595. playertrainer=pbGetPlayerTrainerType
  1596. meta=pbGetMetadata(0,MetadataPlayerA+$PokemonGlobal.playerID)
  1597. num=($PokemonGlobal.surfing) ? 7 : 6
  1598. if meta && meta[num] && meta[num]!=""
  1599. charset=pbGetPlayerCharset(meta,num)
  1600. 4.times do |pattern|
  1601. $game_player.setDefaultCharName(charset,patternb-pattern)
  1602. 2.times do
  1603. Graphics.update
  1604. Input.update
  1605. pbUpdateSceneMap
  1606. end
  1607. end
  1608. end
  1609. end
  1610. end
  1611.  
  1612. def pbFishingEnd
  1613. if !pbCommonEvent(FISHINGENDCOMMONEVENT)
  1614. patternb = 2*($game_player.direction - 2)
  1615. playertrainer=pbGetPlayerTrainerType
  1616. meta=pbGetMetadata(0,MetadataPlayerA+$PokemonGlobal.playerID)
  1617. num=($PokemonGlobal.surfing) ? 7 : 6
  1618. if meta && meta[num] && meta[num]!=""
  1619. charset=pbGetPlayerCharset(meta,num)
  1620. 4.times do |pattern|
  1621. $game_player.setDefaultCharName(charset,patternb+pattern)
  1622. 2.times do
  1623. Graphics.update
  1624. Input.update
  1625. pbUpdateSceneMap
  1626. end
  1627. end
  1628. end
  1629. end
  1630. $PokemonGlobal.fishing=false
  1631. end
  1632.  
  1633. def pbFishing(hasencounter,rodtype=1)
  1634. bitechance=20+(25*rodtype) # 45, 70, 95
  1635. if $Trainer.party.length>0 && !$Trainer.party[0].isEgg?
  1636. bitechance*=2 if isConst?($Trainer.party[0].ability,PBAbilities,:STICKYHOLD)
  1637. bitechance*=2 if isConst?($Trainer.party[0].ability,PBAbilities,:SUCTIONCUPS)
  1638. end
  1639. hookchance=100
  1640. oldpattern=$game_player.fullPattern
  1641. pbFishingBegin
  1642. msgwindow=Kernel.pbCreateMessageWindow
  1643. loop do
  1644. time=2+rand(10)
  1645. message=""
  1646. time.times do
  1647. message+=". "
  1648. end
  1649. if pbWaitMessage(msgwindow,time)
  1650. pbFishingEnd
  1651. $game_player.setDefaultCharName(nil,oldpattern)
  1652. Kernel.pbMessageDisplay(msgwindow,_INTL("Not even a nibble..."))
  1653. Kernel.pbDisposeMessageWindow(msgwindow)
  1654. return false
  1655. end
  1656. if rand(100)<bitechance && hasencounter
  1657. frames=rand(21)+20
  1658. if !pbWaitForInput(msgwindow,message+_INTL("\r\nOh! A bite!"),frames)
  1659. pbFishingEnd
  1660. $game_player.setDefaultCharName(nil,oldpattern)
  1661. Kernel.pbMessageDisplay(msgwindow,_INTL("The Pokémon got away..."))
  1662. Kernel.pbDisposeMessageWindow(msgwindow)
  1663. return false
  1664. end
  1665. if rand(100)<hookchance || FISHINGAUTOHOOK
  1666. Kernel.pbMessageDisplay(msgwindow,_INTL("Landed a Pokémon!"))
  1667. Kernel.pbDisposeMessageWindow(msgwindow)
  1668. pbFishingEnd
  1669. $game_player.setDefaultCharName(nil,oldpattern)
  1670. return true
  1671. end
  1672. # bitechance+=15
  1673. # hookchance+=15
  1674. else
  1675. pbFishingEnd
  1676. $game_player.setDefaultCharName(nil,oldpattern)
  1677. Kernel.pbMessageDisplay(msgwindow,_INTL("Not even a nibble..."))
  1678. Kernel.pbDisposeMessageWindow(msgwindow)
  1679. return false
  1680. end
  1681. end
  1682. Kernel.pbDisposeMessageWindow(msgwindow)
  1683. return false
  1684. end
  1685.  
  1686. def pbWaitForInput(msgwindow,message,frames)
  1687. return true if FISHINGAUTOHOOK
  1688. Kernel.pbMessageDisplay(msgwindow,message,false)
  1689. frames.times do
  1690. Graphics.update
  1691. Input.update
  1692. pbUpdateSceneMap
  1693. if Input.trigger?(Input::C) || Input.trigger?(Input::B)
  1694. return true
  1695. end
  1696. end
  1697. return false
  1698. end
  1699.  
  1700. def pbWaitMessage(msgwindow,time)
  1701. message=""
  1702. (time+1).times do |i|
  1703. message+=". " if i>0
  1704. Kernel.pbMessageDisplay(msgwindow,message,false)
  1705. 20.times do
  1706. Graphics.update
  1707. Input.update
  1708. pbUpdateSceneMap
  1709. if Input.trigger?(Input::C) || Input.trigger?(Input::B)
  1710. return true
  1711. end
  1712. end
  1713. end
  1714. return false
  1715. end
  1716.  
  1717.  
  1718.  
  1719. ################################################################################
  1720. # Moving between maps
  1721. ################################################################################
  1722. Events.onMapChange+=proc {|sender,e|
  1723. oldid=e[0] # previous map ID, 0 if no map ID
  1724. healing=pbGetMetadata($game_map.map_id,MetadataHealingSpot)
  1725. $PokemonGlobal.healingSpot=healing if healing
  1726. $PokemonMap.clear if $PokemonMap
  1727. $PokemonEncounters.setup($game_map.map_id) if $PokemonEncounters
  1728. $PokemonGlobal.visitedMaps[$game_map.map_id]=true
  1729. if oldid!=0 && oldid!=$game_map.map_id
  1730. mapinfos=$RPGVX ? load_data("Data/MapInfos.rvdata") : load_data("Data/MapInfos.rxdata")
  1731. weather=pbGetMetadata($game_map.map_id,MetadataWeather)
  1732. if $game_map.name!=mapinfos[oldid].name
  1733. $game_screen.weather(weather[0],8,20) if weather && rand(100)<weather[1]
  1734. else
  1735. oldweather=pbGetMetadata(oldid,MetadataWeather)
  1736. $game_screen.weather(weather[0],8,20) if weather && !oldweather && rand(100)<weather[1]
  1737. end
  1738. end
  1739. }
  1740.  
  1741. Events.onMapChanging+=proc {|sender,e|
  1742. newmapID=e[0]
  1743. newmap=e[1]
  1744. # Undo the weather ($game_map still refers to the old map)
  1745. mapinfos=$RPGVX ? load_data("Data/MapInfos.rvdata") : load_data("Data/MapInfos.rxdata")
  1746. if newmapID>0
  1747. oldweather=pbGetMetadata($game_map.map_id,MetadataWeather)
  1748. if $game_map.name!=mapinfos[newmapID].name
  1749. $game_screen.weather(0,0,0) if oldweather
  1750. else
  1751. newweather=pbGetMetadata(newmapID,MetadataWeather)
  1752. $game_screen.weather(0,0,0) if oldweather && !newweather
  1753. end
  1754. end
  1755. }
  1756.  
  1757. Events.onMapSceneChange+=proc{|sender,e|
  1758. scene=e[0]
  1759. mapChanged=e[1]
  1760. return if !scene || !scene.spriteset
  1761. if $game_map
  1762. lastmapdetails=$PokemonGlobal.mapTrail[0] ?
  1763. pbGetMetadata($PokemonGlobal.mapTrail[0],MetadataMapPosition) : [-1,0,0]
  1764. lastmapdetails=[-1,0,0] if !lastmapdetails
  1765. newmapdetails=$game_map.map_id ?
  1766. pbGetMetadata($game_map.map_id,MetadataMapPosition) : [-1,0,0]
  1767. newmapdetails=[-1,0,0] if !newmapdetails
  1768. $PokemonGlobal.mapTrail=[] if !$PokemonGlobal.mapTrail
  1769. if $PokemonGlobal.mapTrail[0]!=$game_map.map_id
  1770. $PokemonGlobal.mapTrail[3]=$PokemonGlobal.mapTrail[2] if $PokemonGlobal.mapTrail[2]
  1771. $PokemonGlobal.mapTrail[2]=$PokemonGlobal.mapTrail[1] if $PokemonGlobal.mapTrail[1]
  1772. $PokemonGlobal.mapTrail[1]=$PokemonGlobal.mapTrail[0] if $PokemonGlobal.mapTrail[0]
  1773. end
  1774. $PokemonGlobal.mapTrail[0]=$game_map.map_id # Update map trail
  1775. end
  1776. darkmap=pbGetMetadata($game_map.map_id,MetadataDarkMap)
  1777. if darkmap
  1778. if $PokemonGlobal.flashUsed
  1779. $PokemonTemp.darknessSprite=DarknessSprite.new
  1780. scene.spriteset.addUserSprite($PokemonTemp.darknessSprite)
  1781. darkness=$PokemonTemp.darknessSprite
  1782. darkness.radius=176
  1783. else
  1784. $PokemonTemp.darknessSprite=DarknessSprite.new
  1785. scene.spriteset.addUserSprite($PokemonTemp.darknessSprite)
  1786. end
  1787. elsif !darkmap
  1788. $PokemonGlobal.flashUsed=false
  1789. if $PokemonTemp.darknessSprite
  1790. $PokemonTemp.darknessSprite.dispose
  1791. $PokemonTemp.darknessSprite=nil
  1792. end
  1793. end
  1794. if mapChanged
  1795. if pbGetMetadata($game_map.map_id,MetadataShowArea)
  1796. nosignpost=false
  1797. if $PokemonGlobal.mapTrail[1]
  1798. for i in 0...NOSIGNPOSTS.length/2
  1799. nosignpost=true if NOSIGNPOSTS[2*i]==$PokemonGlobal.mapTrail[1] && NOSIGNPOSTS[2*i+1]==$game_map.map_id
  1800. nosignpost=true if NOSIGNPOSTS[2*i+1]==$PokemonGlobal.mapTrail[1] && NOSIGNPOSTS[2*i]==$game_map.map_id
  1801. break if nosignpost
  1802. end
  1803. mapinfos=$RPGVX ? load_data("Data/MapInfos.rvdata") : load_data("Data/MapInfos.rxdata")
  1804. oldmapname=mapinfos[$PokemonGlobal.mapTrail[1]].name
  1805. nosignpost=true if $game_map.name==oldmapname
  1806. end
  1807. scene.spriteset.addUserSprite(LocationWindow.new($game_map.name)) if !nosignpost
  1808. end
  1809. end
  1810. if pbGetMetadata($game_map.map_id,MetadataBicycleAlways)
  1811. Kernel.pbMountBike
  1812. else
  1813. if !pbCanUseBike?($game_map.map_id)
  1814. Kernel.pbDismountBike
  1815. end
  1816. end
  1817. }
  1818.  
  1819. def Kernel.pbStartOver(gameover=false)
  1820. if pbInBugContest?
  1821. Kernel.pbBugContestStartOver
  1822. return
  1823. end
  1824. pbHealAll()
  1825. if $PokemonGlobal.pokecenterMapId && $PokemonGlobal.pokecenterMapId>=0
  1826. if gameover
  1827. Kernel.pbMessage(_INTL("\\w[]\\wm\\c[8]\\l[3]After the unfortunate defeat, {1} scurried to a Pokémon Center.",$Trainer.name))
  1828. else
  1829. Kernel.pbMessage(_INTL("\\w[]\\wm\\c[8]\\l[3]{1} scurried to a Pokémon Center, protecting the exhausted and fainted Pokémon from further harm.",$Trainer.name))
  1830. end
  1831. Kernel.pbCancelVehicles
  1832. pbRemoveDependencies()
  1833. $game_switches[STARTING_OVER_SWITCH]=true
  1834. $game_temp.player_new_map_id=$PokemonGlobal.pokecenterMapId
  1835. $game_temp.player_new_x=$PokemonGlobal.pokecenterX
  1836. $game_temp.player_new_y=$PokemonGlobal.pokecenterY
  1837. $game_temp.player_new_direction=$PokemonGlobal.pokecenterDirection
  1838. $scene.transfer_player if $scene.is_a?(Scene_Map)
  1839. $game_map.refresh
  1840. else
  1841. homedata=pbGetMetadata(0,MetadataHome)
  1842. if (homedata && !pbRxdataExists?(sprintf("Data/Map%03d",homedata[0])) )
  1843. if $DEBUG
  1844. Kernel.pbMessage(_ISPRINTF("Can't find the map 'Map{1:03d}' in the Data folder. The game will resume at the player's position.",homedata[0]))
  1845. end
  1846. pbHealAll()
  1847. return
  1848. end
  1849. if gameover
  1850. Kernel.pbMessage(_INTL("\\w[]\\wm\\c[8]\\l[3]After the unfortunate defeat, {1} scurried home.",$Trainer.name))
  1851. else
  1852. Kernel.pbMessage(_INTL("\\w[]\\wm\\c[8]\\l[3]{1} scurried home, protecting the exhausted and fainted Pokémon from further harm.",$Trainer.name))
  1853. end
  1854. if homedata
  1855. Kernel.pbCancelVehicles
  1856. pbRemoveDependencies()
  1857. $game_switches[STARTING_OVER_SWITCH]=true
  1858. $game_temp.player_new_map_id=homedata[0]
  1859. $game_temp.player_new_x=homedata[1]
  1860. $game_temp.player_new_y=homedata[2]
  1861. $game_temp.player_new_direction=homedata[3]
  1862. $scene.transfer_player if $scene.is_a?(Scene_Map)
  1863. $game_map.refresh
  1864. else
  1865. pbHealAll()
  1866. end
  1867. end
  1868. pbEraseEscapePoint
  1869. end
  1870.  
  1871. def pbCaveEntranceEx(exiting)
  1872. sprite=BitmapSprite.new(Graphics.width,Graphics.height)
  1873. sprite.z=100000
  1874. totalBands=15
  1875. totalFrames=15
  1876. bandheight=((Graphics.height/2)-10).to_f/totalBands
  1877. bandwidth=((Graphics.width/2)-12).to_f/totalBands
  1878. grays=[]
  1879. tbm1=totalBands-1
  1880. for i in 0...totalBands
  1881. grays.push(exiting ? 0 : 255)
  1882. end
  1883. totalFrames.times do |j|
  1884. x=0
  1885. y=0
  1886. rectwidth=Graphics.width
  1887. rectheight=Graphics.height
  1888. for k in 0...j
  1889. t=(255.0)/totalFrames
  1890. if exiting
  1891. t=1.0-t
  1892. t*=1.0+((k)/totalFrames.to_f)
  1893. else
  1894. t*=1.0+0.3*(((totalFrames-k)/totalFrames.to_f)**0.7)
  1895. end
  1896. grays[k]-=t
  1897. grays[k]=0 if grays[k]<0
  1898. end
  1899. for i in 0...totalBands
  1900. currentGray=grays[i]
  1901. sprite.bitmap.fill_rect(Rect.new(x,y,rectwidth,rectheight),
  1902. Color.new(currentGray,currentGray,currentGray))
  1903. x+=bandwidth
  1904. y+=bandheight
  1905. rectwidth-=bandwidth*2
  1906. rectheight-=bandheight*2
  1907. end
  1908. Graphics.update
  1909. Input.update
  1910. end
  1911. if exiting
  1912. pbToneChangeAll(Tone.new(255,255,255),0)
  1913. else
  1914. pbToneChangeAll(Tone.new(-255,-255,-255),0)
  1915. end
  1916. for j in 0..15
  1917. if exiting
  1918. sprite.color=Color.new(255,255,255,j*255/15)
  1919. else
  1920. sprite.color=Color.new(0,0,0,j*255/15)
  1921. end
  1922. Graphics.update
  1923. Input.update
  1924. end
  1925. pbToneChangeAll(Tone.new(0,0,0),8)
  1926. for j in 0..5
  1927. Graphics.update
  1928. Input.update
  1929. end
  1930. sprite.dispose
  1931. end
  1932.  
  1933. def pbCaveEntrance
  1934. pbSetEscapePoint
  1935. pbCaveEntranceEx(false)
  1936. end
  1937.  
  1938. def pbCaveExit
  1939. pbEraseEscapePoint
  1940. pbCaveEntranceEx(true)
  1941. end
  1942.  
  1943. def pbSetEscapePoint
  1944. $PokemonGlobal.escapePoint=[] if !$PokemonGlobal.escapePoint
  1945. xco=$game_player.x
  1946. yco=$game_player.y
  1947. case $game_player.direction
  1948. when 2 # Down
  1949. yco-=1; dir=8
  1950. when 4 # Left
  1951. xco+=1; dir=6
  1952. when 6 # Right
  1953. xco-=1; dir=4
  1954. when 8 # Up
  1955. yco+=1; dir=2
  1956. end
  1957. $PokemonGlobal.escapePoint=[$game_map.map_id,xco,yco,dir]
  1958. end
  1959.  
  1960. def pbEraseEscapePoint
  1961. $PokemonGlobal.escapePoint=[]
  1962. end
  1963.  
  1964.  
  1965.  
  1966. ################################################################################
  1967. # Partner trainer
  1968. ################################################################################
  1969. def pbRegisterPartner(trainerid,trainername,partyid=0)
  1970. Kernel.pbCancelVehicles
  1971. trainer=pbLoadTrainer(trainerid,trainername,partyid)
  1972. Events.onTrainerPartyLoad.trigger(nil,trainer)
  1973. trainerobject=PokeBattle_Trainer.new(_INTL(trainer[0].name),trainerid)
  1974. trainerobject.setForeignID($Trainer)
  1975. for i in trainer[2]
  1976. i.trainerID=trainerobject.id
  1977. i.ot=trainerobject.name
  1978. i.calcStats
  1979. end
  1980. $PokemonGlobal.partner=[trainerid,trainerobject.name,trainerobject.id,trainer[2]]
  1981. end
  1982.  
  1983. def pbDeregisterPartner
  1984. $PokemonGlobal.partner=nil
  1985. end
  1986.  
  1987.  
  1988.  
  1989. ################################################################################
  1990. # Constant checks
  1991. ################################################################################
  1992. Events.onMapUpdate+=proc {|sender,e| # Pokérus check
  1993. last=$PokemonGlobal.pokerusTime
  1994. now=pbGetTimeNow
  1995. if !last || last.year!=now.year || last.month!=now.month || last.day!=now.day
  1996. if $Trainer && $Trainer.party
  1997. for i in $Trainer.pokemonParty
  1998. i.lowerPokerusCount
  1999. end
  2000. $PokemonGlobal.pokerusTime=now
  2001. end
  2002. end
  2003. }
  2004.  
  2005. # Returns whether the Poké Center should explain Pokérus to the player, if a
  2006. # healed Pokémon has it.
  2007. def Kernel.pbPokerus?
  2008. return false if $game_switches[SEEN_POKERUS_SWITCH]
  2009. for i in $Trainer.party
  2010. return true if i.pokerusStage==1
  2011. end
  2012. return false
  2013. end
  2014.  
  2015.  
  2016.  
  2017. class PokemonTemp
  2018. attr_accessor :batterywarning
  2019. attr_accessor :cueBGM
  2020. attr_accessor :cueFrames
  2021. end
  2022.  
  2023.  
  2024.  
  2025. def pbBatteryLow?
  2026. power="\0"*12
  2027. begin
  2028. sps=Win32API.new('kernel32.dll','GetSystemPowerStatus','p','l')
  2029. rescue
  2030. return false
  2031. end
  2032. if sps.call(power)==1
  2033. status=power.unpack("CCCCVV")
  2034. # Battery Flag
  2035. if status[1]!=255 && (status[1]&6)!=0 # Low or Critical
  2036. return true
  2037. end
  2038. # Battery Life Percent
  2039. if status[2]<3 # Less than 3 percent
  2040. return true
  2041. end
  2042. # Battery Life Time
  2043. if status[4]<300 # Less than 5 minutes
  2044. return true
  2045. end
  2046. end
  2047. return false
  2048. end
  2049.  
  2050. Events.onMapUpdate+=proc {|sender,e|
  2051. time=pbGetTimeNow
  2052. if time.sec==0 && $Trainer && $PokemonGlobal && $game_player && $game_map &&
  2053. !$PokemonTemp.batterywarning && !$game_player.move_route_forcing &&
  2054. !pbMapInterpreterRunning? && !$game_temp.message_window_showing &&
  2055. pbBatteryLow?
  2056. $PokemonTemp.batterywarning=true
  2057. Kernel.pbMessage(_INTL("The game has detected that the battery is low. You should save soon to avoid losing your progress."))
  2058. end
  2059. if $PokemonTemp.cueFrames
  2060. $PokemonTemp.cueFrames-=1
  2061. if $PokemonTemp.cueFrames<=0
  2062. $PokemonTemp.cueFrames=nil
  2063. if $game_system.getPlayingBGM==nil
  2064. pbBGMPlay($PokemonTemp.cueBGM)
  2065. end
  2066. end
  2067. end
  2068. }
  2069.  
  2070.  
  2071.  
  2072. ################################################################################
  2073. # Audio playing
  2074. ################################################################################
  2075. def pbCueBGM(bgm,seconds,volume=nil,pitch=nil)
  2076. return if !bgm
  2077. bgm=pbResolveAudioFile(bgm,volume,pitch)
  2078. playingBGM=$game_system.playing_bgm
  2079. if !playingBGM || playingBGM.name!=bgm.name || playingBGM.pitch!=bgm.pitch
  2080. pbBGMFade(seconds)
  2081. if !$PokemonTemp.cueFrames
  2082. $PokemonTemp.cueFrames=(seconds*Graphics.frame_rate)*3/5
  2083. end
  2084. $PokemonTemp.cueBGM=bgm
  2085. elsif playingBGM
  2086. pbBGMPlay(bgm)
  2087. end
  2088. end
  2089.  
  2090. def pbAutoplayOnTransition
  2091. surfbgm=pbGetMetadata(0,MetadataSurfBGM)
  2092. if $PokemonGlobal.surfing && surfbgm
  2093. pbBGMPlay(surfbgm)
  2094. else
  2095. $game_map.autoplayAsCue
  2096. end
  2097. end
  2098.  
  2099. def pbAutoplayOnSave
  2100. surfbgm=pbGetMetadata(0,MetadataSurfBGM)
  2101. if $PokemonGlobal.surfing && surfbgm
  2102. pbBGMPlay(surfbgm)
  2103. else
  2104. $game_map.autoplay
  2105. end
  2106. end
  2107.  
  2108.  
  2109.  
  2110. ################################################################################
  2111. # Voice recorder
  2112. ################################################################################
  2113. def pbRecord(text,maxtime=30.0)
  2114. text="" if !text
  2115. textwindow=Window_UnformattedTextPokemon.newWithSize(text,
  2116. 0,0,Graphics.width,Graphics.height-96)
  2117. textwindow.z=99999
  2118. if text==""
  2119. textwindow.visible=false
  2120. end
  2121. wave=nil
  2122. msgwindow=Kernel.pbCreateMessageWindow
  2123. oldvolume=Kernel.Audio_bgm_get_volume()
  2124. Kernel.Audio_bgm_set_volume(0)
  2125. delay=2
  2126. delay.times do |i|
  2127. Kernel.pbMessageDisplay(msgwindow,
  2128. _ISPRINTF("Recording in {1:d} second(s)...\nPress ESC to cancel.",delay-i),false)
  2129. Graphics.frame_rate.times do
  2130. Graphics.update
  2131. Input.update
  2132. textwindow.update
  2133. msgwindow.update
  2134. if Input.trigger?(Input::B)
  2135. Kernel.Audio_bgm_set_volume(oldvolume)
  2136. Kernel.pbDisposeMessageWindow(msgwindow)
  2137. textwindow.dispose
  2138. return nil
  2139. end
  2140. end
  2141. end
  2142. Kernel.pbMessageDisplay(msgwindow,
  2143. _INTL("NOW RECORDING\nPress ESC to stop recording."),false)
  2144. if beginRecordUI
  2145. frames=(maxtime*Graphics.frame_rate).to_i
  2146. frames.times do
  2147. Graphics.update
  2148. Input.update
  2149. textwindow.update
  2150. msgwindow.update
  2151. if Input.trigger?(Input::B)
  2152. break
  2153. end
  2154. end
  2155. tmpFile=ENV["TEMP"]+"\\record.wav"
  2156. endRecord(tmpFile)
  2157. wave=getWaveDataUI(tmpFile,true)
  2158. if wave
  2159. Kernel.pbMessageDisplay(msgwindow,_INTL("PLAYING BACK..."),false)
  2160. textwindow.update
  2161. msgwindow.update
  2162. Graphics.update
  2163. Input.update
  2164. wave.play
  2165. (Graphics.frame_rate*wave.time).to_i.times do
  2166. Graphics.update
  2167. Input.update
  2168. textwindow.update
  2169. msgwindow.update
  2170. end
  2171. end
  2172. end
  2173. Kernel.Audio_bgm_set_volume(oldvolume)
  2174. Kernel.pbDisposeMessageWindow(msgwindow)
  2175. textwindow.dispose
  2176. return wave
  2177. end
  2178.  
  2179. def Kernel.pbRxdataExists?(file)
  2180. if $RPGVX
  2181. return pbRgssExists?(file+".rvdata")
  2182. else
  2183. return pbRgssExists?(file+".rxdata")
  2184. end
  2185. end
  2186.  
  2187.  
  2188.  
  2189. ################################################################################
  2190. # Gaining items
  2191. ################################################################################
  2192. def Kernel.pbItemBall(item,quantity=1,plural=nil)
  2193. if item.is_a?(String) || item.is_a?(Symbol)
  2194. item=getID(PBItems,item)
  2195. end
  2196. return false if !item || item<=0 || quantity<1
  2197. itemname=PBItems.getName(item)
  2198. pocket=pbGetPocket(item)
  2199. if $PokemonBag.pbStoreItem(item,quantity) # If item can be picked up
  2200. if $ItemData[item][ITEMUSE]==3 || $ItemData[item][ITEMUSE]==4
  2201. Kernel.pbMessage(_INTL("\\se[itemlevel]{1} found \\c[1]{2}\\c[0]!\\nIt contained \\c[1]{3}\\c[0].\\wtnp[30]",
  2202. $Trainer.name,itemname,PBMoves.getName($ItemData[item][ITEMMACHINE])))
  2203. Kernel.pbMessage(_INTL("{1} put the \\c[1]{2}\\c[0]\r\nin the <icon=bagPocket#{pocket}>\\c[1]{3}\\c[0] Pocket.",
  2204. $Trainer.name,itemname,PokemonBag.pocketNames()[pocket]))
  2205. elsif isConst?(item,PBItems,:LEFTOVERS)
  2206. Kernel.pbMessage(_INTL("\\se[itemlevel]{1} found some \\c[1]{2}\\c[0]!\\wtnp[30]",
  2207. $Trainer.name,itemname))
  2208. Kernel.pbMessage(_INTL("{1} put the \\c[1]{2}\\c[0]\r\nin the <icon=bagPocket#{pocket}>\\c[1]{3}\\c[0] Pocket.",
  2209. $Trainer.name,itemname,PokemonBag.pocketNames()[pocket]))
  2210. else
  2211. if quantity>1
  2212. if plural
  2213. Kernel.pbMessage(_INTL("\\se[itemlevel]{1} found {2} \\c[1]{3}\\c[0]!\\wtnp[30]",
  2214. $Trainer.name,quantity,plural))
  2215. Kernel.pbMessage(_INTL("{1} put the \\c[1]{2}\\c[0]\r\nin the <icon=bagPocket#{pocket}>\\c[1]{3}\\c[0] Pocket.",
  2216. $Trainer.name,plural,PokemonBag.pocketNames()[pocket]))
  2217. else
  2218. Kernel.pbMessage(_INTL("\\se[itemlevel]{1} found {2} \\c[1]{3}s\\c[0]!\\wtnp[30]",
  2219. $Trainer.name,quantity,itemname))
  2220. Kernel.pbMessage(_INTL("{1} put the \\c[1]{2}s\\c[0]\r\nin the <icon=bagPocket#{pocket}>\\c[1]{3}\\c[0] Pocket.",
  2221. $Trainer.name,itemname,PokemonBag.pocketNames()[pocket]))
  2222. end
  2223. else
  2224. Kernel.pbMessage(_INTL("\\se[itemlevel]{1} found one \\c[1]{2}\\c[0]!\\wtnp[30]",
  2225. $Trainer.name,itemname))
  2226. Kernel.pbMessage(_INTL("{1} put the \\c[1]{2}\\c[0]\r\nin the <icon=bagPocket#{pocket}>\\c[1]{3}\\c[0] Pocket.",
  2227. $Trainer.name,itemname,PokemonBag.pocketNames()[pocket]))
  2228. end
  2229. end
  2230. return true
  2231. else # Can't add the item
  2232. if $ItemData[item][ITEMUSE]==3 || $ItemData[item][ITEMUSE]==4
  2233. Kernel.pbMessage(_INTL("{1} found \\c[1]{2}\\c[0]!\\wtnp[20]",
  2234. $Trainer.name,itemname))
  2235. elsif isConst?(item,PBItems,:LEFTOVERS)
  2236. Kernel.pbMessage(_INTL("{1} found some \\c[1]{2}\\c[0]!\\wtnp[20]",
  2237. $Trainer.name,itemname))
  2238. else
  2239. if quantity>1
  2240. if plural
  2241. Kernel.pbMessage(_INTL("{1} found {2} \\c[1]{3}\\c[0]!\\wtnp[20]",
  2242. $Trainer.name,quantity,plural))
  2243. else
  2244. Kernel.pbMessage(_INTL("{1} found {2} \\c[1]{3}s\\c[0]!\\wtnp[20]",
  2245. $Trainer.name,quantity,itemname))
  2246. end
  2247. else
  2248. Kernel.pbMessage(_INTL("{1} found one \\c[1]{2}\\c[0]!\\wtnp[20]",
  2249. $Trainer.name,itemname))
  2250. end
  2251. end
  2252. Kernel.pbMessage(_INTL("Too bad... The Bag is full..."))
  2253. return false
  2254. end
  2255. end
  2256.  
  2257. def Kernel.pbReceiveItem(item,quantity=1,plural=nil)
  2258. if item.is_a?(String) || item.is_a?(Symbol)
  2259. item=getID(PBItems,item)
  2260. end
  2261. return false if !item || item<=0 || quantity<1
  2262. itemname=PBItems.getName(item)
  2263. pocket=pbGetPocket(item)
  2264. if $ItemData[item][ITEMUSE]==3 || $ItemData[item][ITEMUSE]==4
  2265. Kernel.pbMessage(_INTL("\\se[itemlevel]Obtained \\c[1]{1}\\c[0]!\\nIt contained \\c[1]{2}\\c[0].\\wtnp[30]",
  2266. itemname,PBMoves.getName($ItemData[item][ITEMMACHINE])))
  2267. elsif isConst?(item,PBItems,:LEFTOVERS)
  2268. Kernel.pbMessage(_INTL("\\se[itemlevel]Obtained some \\c[1]{1}\\c[0]!\\wtnp[30]",
  2269. itemname))
  2270. elsif quantity>1
  2271. if plural
  2272. Kernel.pbMessage(_INTL("\\se[itemlevel]Obtained \\c[1]{1}\\c[0]!\\wtnp[30]",
  2273. plural))
  2274. else
  2275. Kernel.pbMessage(_INTL("\\se[itemlevel]Obtained \\c[1]{1}s\\c[0]!\\wtnp[30]",
  2276. itemname))
  2277. end
  2278. else
  2279. Kernel.pbMessage(_INTL("\\se[itemlevel]Obtained \\c[1]{1}\\c[0]!\\wtnp[30]",
  2280. itemname))
  2281. end
  2282. if $PokemonBag.pbStoreItem(item,quantity) # If item can be added
  2283. if quantity>1
  2284. if plural
  2285. Kernel.pbMessage(_INTL("{1} put the \\c[1]{2}\\c[0]\r\nin the <icon=bagPocket#{pocket}>\\c[1]{3}\\c[0] Pocket.",
  2286. $Trainer.name,plural,PokemonBag.pocketNames()[pocket]))
  2287. else
  2288. Kernel.pbMessage(_INTL("{1} put the \\c[1]{2}s\\c[0]\r\nin the <icon=bagPocket#{pocket}>\\c[1]{3}\\c[0] Pocket.",
  2289. $Trainer.name,itemname,PokemonBag.pocketNames()[pocket]))
  2290. end
  2291. else
  2292. Kernel.pbMessage(_INTL("{1} put the \\c[1]{2}\\c[0]\r\nin the <icon=bagPocket#{pocket}>\\c[1]{3}\\c[0] Pocket.",
  2293. $Trainer.name,itemname,PokemonBag.pocketNames()[pocket]))
  2294. end
  2295. return true
  2296. else # Can't add the item
  2297. return false
  2298. end
  2299. end
  2300.  
  2301. def pbUseKeyItem
  2302. if $PokemonBag.registeredItem==0
  2303. Kernel.pbMessage(_INTL("A Key Item in the Bag can be registered to this key for instant use."))
  2304. else
  2305. Kernel.pbUseKeyItemInField($PokemonBag.registeredItem)
  2306. end
  2307. end
  2308.  
  2309.  
  2310.  
  2311. ################################################################################
  2312. # Event locations, terrain tags
  2313. ################################################################################
  2314. def pbEventFacesPlayer?(event,player,distance)
  2315. return false if distance<=0
  2316. # Event can't reach player if no coordinates coincide
  2317. return false if event.x!=player.x && event.y!=player.y
  2318. deltaX = (event.direction == 6 ? 1 : event.direction == 4 ? -1 : 0)
  2319. deltaY = (event.direction == 2 ? 1 : event.direction == 8 ? -1 : 0)
  2320. # Check for existence of player
  2321. curx=event.x
  2322. cury=event.y
  2323. found=false
  2324. for i in 0...distance
  2325. curx+=deltaX
  2326. cury+=deltaY
  2327. if player.x==curx && player.y==cury
  2328. found=true
  2329. break
  2330. end
  2331. end
  2332. return found
  2333. end
  2334.  
  2335. def pbEventCanReachPlayer?(event,player,distance)
  2336. return false if distance<=0
  2337. # Event can't reach player if no coordinates coincide
  2338. return false if event.x!=player.x && event.y!=player.y
  2339. deltaX = (event.direction == 6 ? 1 : event.direction == 4 ? -1 : 0)
  2340. deltaY = (event.direction == 2 ? 1 : event.direction == 8 ? -1 : 0)
  2341. # Check for existence of player
  2342. curx=event.x
  2343. cury=event.y
  2344. found=false
  2345. realdist=0
  2346. for i in 0...distance
  2347. curx+=deltaX
  2348. cury+=deltaY
  2349. if player.x==curx && player.y==cury
  2350. found=true
  2351. break
  2352. end
  2353. realdist+=1
  2354. end
  2355. return false if !found
  2356. # Check passibility
  2357. curx=event.x
  2358. cury=event.y
  2359. for i in 0...realdist
  2360. if !event.passable?(curx,cury,event.direction)
  2361. return false
  2362. end
  2363. curx+=deltaX
  2364. cury+=deltaY
  2365. end
  2366. return true
  2367. end
  2368.  
  2369. def pbFacingTileRegular(direction=nil,event=nil)
  2370. event=$game_player if !event
  2371. return [0,0,0] if !event
  2372. x=event.x
  2373. y=event.y
  2374. direction=event.direction if !direction
  2375. case direction
  2376. when 1; y+=1; x-=1
  2377. when 2; y+=1
  2378. when 3; y+=1; x+=1
  2379. when 4; x-=1
  2380. when 6; x+=1
  2381. when 7; y-=1; x-=1
  2382. when 8; y-=1
  2383. when 9; y-=1; x+=1
  2384. end
  2385. return [$game_map ? $game_map.map_id : 0,x,y]
  2386. end
  2387.  
  2388. def pbFacingTile(direction=nil,event=nil)
  2389. if $MapFactory
  2390. return $MapFactory.getFacingTile(direction,event)
  2391. else
  2392. return pbFacingTileRegular(direction,event)
  2393. end
  2394. end
  2395.  
  2396. def pbFacingEachOther(event1,event2)
  2397. return false if !event1 || !event2
  2398. if $MapFactory
  2399. tile1=$MapFactory.getFacingTile(nil,event1)
  2400. tile2=$MapFactory.getFacingTile(nil,event2)
  2401. return false if !tile1 || !tile2
  2402. if tile1[0]==event2.map.map_id &&
  2403. tile1[1]==event2.x && tile1[2]==event2.y &&
  2404. tile2[0]==event1.map.map_id &&
  2405. tile2[1]==event1.x && tile2[2]==event1.y
  2406. return true
  2407. else
  2408. return false
  2409. end
  2410. else
  2411. tile1=Kernel.pbFacingTile(nil,event1)
  2412. tile2=Kernel.pbFacingTile(nil,event2)
  2413. return false if !tile1 || !tile2
  2414. if tile1[1]==event2.x && tile1[2]==event2.y &&
  2415. tile2[1]==event1.x && tile2[2]==event1.y
  2416. return true
  2417. else
  2418. return false
  2419. end
  2420. end
  2421. end
  2422.  
  2423. def pbGetTerrainTag(event=nil,countBridge=false)
  2424. event=$game_player if !event
  2425. return 0 if !event
  2426. if $MapFactory
  2427. return $MapFactory.getTerrainTag(event.map.map_id,event.x,event.y,countBridge)
  2428. else
  2429. $game_map.terrain_tag(event.x,event.y,countBridge)
  2430. end
  2431. end
  2432.  
  2433. def Kernel.pbFacingTerrainTag(event=nil,dir=nil)
  2434. if $MapFactory
  2435. return $MapFactory.getFacingTerrainTag(dir,event)
  2436. else
  2437. event=$game_player if !event
  2438. return 0 if !event
  2439. facing=pbFacingTile(dir,event)
  2440. return $game_map.terrain_tag(facing[1],facing[2])
  2441. end
  2442. end
  2443.  
  2444.  
  2445.  
  2446. ################################################################################
  2447. # Event movement
  2448. ################################################################################
  2449. def pbTurnTowardEvent(event,otherEvent)
  2450. sx=0
  2451. sy=0
  2452. if $MapFactory
  2453. relativePos=$MapFactory.getThisAndOtherEventRelativePos(otherEvent,event)
  2454. sx = relativePos[0]
  2455. sy = relativePos[1]
  2456. else
  2457. sx = event.x - otherEvent.x
  2458. sy = event.y - otherEvent.y
  2459. end
  2460. if sx == 0 and sy == 0
  2461. return
  2462. end
  2463. if sx.abs > sy.abs
  2464. sx > 0 ? event.turn_left : event.turn_right
  2465. else
  2466. sy > 0 ? event.turn_up : event.turn_down
  2467. end
  2468. end
  2469.  
  2470. def Kernel.pbMoveTowardPlayer(event)
  2471. maxsize=[$game_map.width,$game_map.height].max
  2472. return if !pbEventCanReachPlayer?(event,$game_player,maxsize)
  2473. loop do
  2474. x=event.x
  2475. y=event.y
  2476. event.move_toward_player
  2477. break if event.x==x && event.y==y
  2478. while event.moving?
  2479. Graphics.update
  2480. Input.update
  2481. pbUpdateSceneMap
  2482. end
  2483. end
  2484. $PokemonMap.addMovedEvent(event.id) if $PokemonMap
  2485. end
  2486.  
  2487. def Kernel.pbJumpToward(dist=1,playSound=false,cancelSurf=false)
  2488. x=$game_player.x
  2489. y=$game_player.y
  2490. case $game_player.direction
  2491. when 2 # down
  2492. $game_player.jump(0,dist)
  2493. when 4 # left
  2494. $game_player.jump(-dist,0)
  2495. when 6 # right
  2496. $game_player.jump(dist,0)
  2497. when 8 # up
  2498. $game_player.jump(0,-dist)
  2499. end
  2500. if $game_player.x!=x || $game_player.y!=y
  2501. pbSEPlay("jump") if playSound
  2502. Kernel.pbCancelVehicles if cancelSurf
  2503. while $game_player.jumping?
  2504. Graphics.update
  2505. Input.update
  2506. pbUpdateSceneMap
  2507. end
  2508. return true
  2509. end
  2510. return false
  2511. end
  2512.  
  2513. def pbWait(numframes)
  2514. numframes.times do
  2515. Graphics.update
  2516. Input.update
  2517. pbUpdateSceneMap
  2518. end
  2519. end
  2520.  
  2521.  
  2522.  
  2523. module PBMoveRoute
  2524. Down = 1
  2525. Left = 2
  2526. Right = 3
  2527. Up = 4
  2528. LowerLeft = 5
  2529. LowerRight = 6
  2530. UpperLeft = 7
  2531. UpperRight = 8
  2532. Random = 9
  2533. TowardPlayer = 10
  2534. AwayFromPlayer = 11
  2535. Forward = 12
  2536. Backward = 13
  2537. Jump = 14 # xoffset, yoffset
  2538. Wait = 15 # frames
  2539. TurnDown = 16
  2540. TurnLeft = 17
  2541. TurnRight = 18
  2542. TurnUp = 19
  2543. TurnRight90 = 20
  2544. TurnLeft90 = 21
  2545. Turn180 = 22
  2546. TurnRightOrLeft90 = 23
  2547. TurnRandom = 24
  2548. TurnTowardPlayer = 25
  2549. TurnAwayFromPlayer = 26
  2550. SwitchOn = 27 # 1 param
  2551. SwitchOff = 28 # 1 param
  2552. ChangeSpeed = 29 # 1 param
  2553. ChangeFreq = 30 # 1 param
  2554. WalkAnimeOn = 31
  2555. WalkAnimeOff = 32
  2556. StepAnimeOn = 33
  2557. StepAnimeOff = 34
  2558. DirectionFixOn = 35
  2559. DirectionFixOff = 36
  2560. ThroughOn = 37
  2561. ThroughOff = 38
  2562. AlwaysOnTopOn = 39
  2563. AlwaysOnTopOff = 40
  2564. Graphic = 41 # Name, hue, direction, pattern
  2565. Opacity = 42 # 1 param
  2566. Blending = 43 # 1 param
  2567. PlaySE = 44 # 1 param
  2568. Script = 45 # 1 param
  2569. ScriptAsync = 101 # 1 param
  2570. end
  2571.  
  2572.  
  2573.  
  2574. def pbMoveRoute(event,commands,waitComplete=false)
  2575. route=RPG::MoveRoute.new
  2576. route.repeat=false
  2577. route.skippable=true
  2578. route.list.clear
  2579. route.list.push(RPG::MoveCommand.new(PBMoveRoute::ThroughOn))
  2580. i=0; while i<commands.length
  2581. case commands[i]
  2582. when PBMoveRoute::Wait, PBMoveRoute::SwitchOn,
  2583. PBMoveRoute::SwitchOff, PBMoveRoute::ChangeSpeed,
  2584. PBMoveRoute::ChangeFreq, PBMoveRoute::Opacity,
  2585. PBMoveRoute::Blending, PBMoveRoute::PlaySE,
  2586. PBMoveRoute::Script
  2587. route.list.push(RPG::MoveCommand.new(commands[i],[commands[i+1]]))
  2588. i+=1
  2589. when PBMoveRoute::ScriptAsync
  2590. route.list.push(RPG::MoveCommand.new(PBMoveRoute::Script,[commands[i+1]]))
  2591. route.list.push(RPG::MoveCommand.new(PBMoveRoute::Wait,[0]))
  2592. i+=1
  2593. when PBMoveRoute::Jump
  2594. route.list.push(RPG::MoveCommand.new(commands[i],[commands[i+1],commands[i+2]]))
  2595. i+=2
  2596. when PBMoveRoute::Graphic
  2597. route.list.push(RPG::MoveCommand.new(commands[i],
  2598. [commands[i+1],commands[i+2],commands[i+3],commands[i+4]]))
  2599. i+=4
  2600. else
  2601. route.list.push(RPG::MoveCommand.new(commands[i]))
  2602. end
  2603. i+=1
  2604. end
  2605. route.list.push(RPG::MoveCommand.new(PBMoveRoute::ThroughOff))
  2606. route.list.push(RPG::MoveCommand.new(0))
  2607. if event
  2608. event.force_move_route(route)
  2609. end
  2610. return route
  2611. end
  2612.  
  2613.  
  2614.  
  2615. ################################################################################
  2616. # Screen effects
  2617. ################################################################################
  2618. def pbToneChangeAll(tone, duration)
  2619. $game_screen.start_tone_change(tone,duration * 2)
  2620. for picture in $game_screen.pictures
  2621. picture.start_tone_change(tone,duration * 2) if picture
  2622. end
  2623. end
  2624.  
  2625. def pbShake(power,speed,frames)
  2626. $game_screen.start_shake(power,speed,frames * 2)
  2627. end
  2628.  
  2629. def pbFlash(color,frames)
  2630. $game_screen.start_flash(color,frames * 2)
  2631. end
  2632.  
  2633. def pbScrollMap(direction, distance, speed)
  2634. return if !$game_map
  2635. if speed==0
  2636. case direction
  2637. when 2
  2638. $game_map.scroll_down(distance * 128)
  2639. when 4
  2640. $game_map.scroll_left(distance * 128)
  2641. when 6
  2642. $game_map.scroll_right(distance * 128)
  2643. when 8
  2644. $game_map.scroll_up(distance * 128)
  2645. end
  2646. else
  2647. $game_map.start_scroll(direction, distance, speed);
  2648. oldx=$game_map.display_x
  2649. oldy=$game_map.display_y
  2650. loop do
  2651. Graphics.update
  2652. Input.update
  2653. if !$game_map.scrolling?
  2654. break
  2655. end
  2656. pbUpdateSceneMap
  2657. if $game_map.display_x==oldx && $game_map.display_y==oldy
  2658. break
  2659. end
  2660. oldx=$game_map.display_x
  2661. oldy=$game_map.display_y
  2662. end
  2663. end
  2664. end
  2665.  
  2666.  
  2667.  
  2668. ################################################################################
  2669. # Events
  2670. ################################################################################
  2671. class Game_Event
  2672. def cooledDown?(seconds)
  2673. if !(expired?(seconds) && tsOff?("A"))
  2674. self.need_refresh=true
  2675. return false
  2676. else
  2677. return true
  2678. end
  2679. end
  2680.  
  2681. def cooledDownDays?(days)
  2682. if !(expiredDays?(days) && tsOff?("A"))
  2683. self.need_refresh=true
  2684. return false
  2685. else
  2686. return true
  2687. end
  2688. end
  2689. end
  2690.  
  2691.  
  2692.  
  2693. module InterpreterFieldMixin
  2694. # Used in boulder events. Allows an event to be pushed. To be used in
  2695. # a script event command.
  2696. def pbPushThisEvent
  2697. event=get_character(0)
  2698. oldx=event.x
  2699. oldy=event.y
  2700. # Apply strict version of passable, which makes impassable
  2701. # tiles that are passable only from certain directions
  2702. if !event.passableStrict?(event.x,event.y,$game_player.direction)
  2703. return
  2704. end
  2705. case $game_player.direction
  2706. when 2 # down
  2707. event.move_down
  2708. when 4 # left
  2709. event.move_left
  2710. when 6 # right
  2711. event.move_right
  2712. when 8 # up
  2713. event.move_up
  2714. end
  2715. $PokemonMap.addMovedEvent(@event_id) if $PokemonMap
  2716. if oldx!=event.x || oldy!=event.y
  2717. $game_player.lock
  2718. begin
  2719. Graphics.update
  2720. Input.update
  2721. pbUpdateSceneMap
  2722. end until !event.moving?
  2723. $game_player.unlock
  2724. end
  2725. end
  2726.  
  2727. def pbPushThisBoulder
  2728. if $PokemonMap.strengthUsed
  2729. pbPushThisEvent
  2730. end
  2731. return true
  2732. end
  2733.  
  2734. def pbHeadbutt
  2735. Kernel.pbHeadbutt(get_character(0))
  2736. return true
  2737. end
  2738.  
  2739. def pbTrainerIntro(symbol)
  2740. if $DEBUG
  2741. return if !Kernel.pbTrainerTypeCheck(symbol)
  2742. end
  2743. trtype=PBTrainers.const_get(symbol)
  2744. pbGlobalLock
  2745. Kernel.pbPlayTrainerIntroME(trtype)
  2746. return true
  2747. end
  2748.  
  2749. def pbTrainerEnd
  2750. pbGlobalUnlock
  2751. e=get_character(0)
  2752. e.erase_route if e
  2753. end
  2754.  
  2755. def pbParams
  2756. @parameters ? @parameters : @params
  2757. end
  2758.  
  2759. def pbGetPokemon(id)
  2760. return $Trainer.party[pbGet(id)]
  2761. end
  2762.  
  2763. def pbSetEventTime(*arg)
  2764. $PokemonGlobal.eventvars={} if !$PokemonGlobal.eventvars
  2765. time=pbGetTimeNow
  2766. time=time.to_i
  2767. pbSetSelfSwitch(@event_id,"A",true)
  2768. $PokemonGlobal.eventvars[[@map_id,@event_id]]=time
  2769. for otherevt in arg
  2770. pbSetSelfSwitch(otherevt,"A",true)
  2771. $PokemonGlobal.eventvars[[@map_id,otherevt]]=time
  2772. end
  2773. end
  2774.  
  2775. def getVariable(*arg)
  2776. if arg.length==0
  2777. return nil if !$PokemonGlobal.eventvars
  2778. return $PokemonGlobal.eventvars[[@map_id,@event_id]]
  2779. else
  2780. return $game_variables[arg[0]]
  2781. end
  2782. end
  2783.  
  2784. def setVariable(*arg)
  2785. if arg.length==1
  2786. $PokemonGlobal.eventvars={} if !$PokemonGlobal.eventvars
  2787. $PokemonGlobal.eventvars[[@map_id,@event_id]]=arg[0]
  2788. else
  2789. $game_variables[arg[0]]=arg[1]
  2790. $game_map.need_refresh=true
  2791. end
  2792. end
  2793.  
  2794. def tsOff?(c)
  2795. get_character(0).tsOff?(c)
  2796. end
  2797.  
  2798. def tsOn?(c)
  2799. get_character(0).tsOn?(c)
  2800. end
  2801.  
  2802. alias isTempSwitchOn? tsOn?
  2803. alias isTempSwitchOff? tsOff?
  2804.  
  2805. def setTempSwitchOn(c)
  2806. get_character(0).setTempSwitchOn(c)
  2807. end
  2808.  
  2809. def setTempSwitchOff(c)
  2810. get_character(0).setTempSwitchOff(c)
  2811. end
  2812.  
  2813. # Must use this approach to share the methods because the methods already
  2814. # defined in a class override those defined in an included module
  2815. CustomEventCommands=<<_END_
  2816.  
  2817. def command_352
  2818. scene=PokemonSaveScene.new
  2819. screen=PokemonSave.new(scene)
  2820. screen.pbSaveScreen
  2821. return true
  2822. end
  2823.  
  2824. def command_125
  2825. value = operate_value(pbParams[0], pbParams[1], pbParams[2])
  2826. $Trainer.money+=value
  2827. return true
  2828. end
  2829.  
  2830. def command_132
  2831. $PokemonGlobal.nextBattleBGM=(pbParams[0]) ? pbParams[0].clone : nil
  2832. return true
  2833. end
  2834.  
  2835. def command_133
  2836. $PokemonGlobal.nextBattleME=(pbParams[0]) ? pbParams[0].clone : nil
  2837. return true
  2838. end
  2839.  
  2840. def command_353
  2841. pbBGMFade(1.0)
  2842. pbBGSFade(1.0)
  2843. pbFadeOutIn(99999){ Kernel.pbStartOver(true) }
  2844. end
  2845.  
  2846. def command_314
  2847. if pbParams[0] == 0 && $Trainer && $Trainer.party
  2848. pbHealAll()
  2849. end
  2850. return true
  2851. end
  2852.  
  2853. _END_
  2854. end
  2855.  
  2856.  
  2857.  
  2858. class Interpreter
  2859. include InterpreterFieldMixin
  2860. eval(InterpreterFieldMixin::CustomEventCommands)
  2861. end
  2862.  
  2863.  
  2864.  
  2865. class Game_Interpreter
  2866. include InterpreterFieldMixin
  2867. eval(InterpreterFieldMixin::CustomEventCommands)
  2868. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement