Guest User

elite_scene

a guest
Jul 24th, 2017
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 101.58 KB | None | 0 0
  1. #===============================================================================
  2. # Elite Battle system
  3. # by Luka S.J.
  4. # ----------------
  5. # Scene Script
  6. # ----------------
  7. # system is based off the original Essentials battle system, made by
  8. # Poccil & Maruno
  9. # No additional features added to AI, mechanics
  10. # or functionality of the battle system.
  11. # This update is purely cosmetic, and includes a B/W like dynamic scene with a
  12. # custom interface.
  13. #
  14. # Enjoy the script, and make sure to give credit!
  15. # (DO NOT ALTER THE NAMES OF THE INDIVIDUAL SCRIPT SECTIONS OR YOU WILL BREAK
  16. # YOUR SYSTEM!)
  17. #===============================================================================
  18. class PokeBattle_Scene
  19. attr_accessor :idleTimer
  20. attr_accessor :safaribattle
  21. attr_accessor :vector
  22. attr_accessor :sendingOut
  23. attr_accessor :afterAnim
  24. attr_accessor :lowHPBGM
  25. attr_accessor :briefmessage
  26. attr_accessor :sprites
  27. attr_reader :battle
  28. attr_reader :commandWindow
  29. alias initialize_ebs initialize unless self.method_defined?(:initialize_ebs)
  30. def initialize
  31. @safaribattle = false
  32. initialize_ebs
  33. end
  34. # Retained to prevent any potential conflicts
  35. # Returns whether the party line-ups are currently appearing on-screen
  36. alias inPartyAnimation_ebs inPartyAnimation? unless self.method_defined?(:inPartyAnimation_ebs)
  37. def inPartyAnimation?; return false; end
  38. # Shows the party line-ups appearing on-screen
  39. alias partyAnimationUpdate_ebs partyAnimationUpdate unless self.method_defined?(:partyAnimationUpdate_ebs)
  40. def partyAnimationUpdate; end
  41. #=============================================================================
  42. # A slightly different way to loading backdrops
  43. # Backdrops now get tinted according to the daytime
  44. #=============================================================================
  45. alias pbBackdrop_ebs pbBackdrop unless self.method_defined?(:pbBackdrop_ebs)
  46. def pbBackdrop
  47. environ = @battle.environment
  48. terrain = $game_player.terrain_tag
  49. # Choose backdrop
  50. backdrop = "Field"
  51. if environ == PBEnvironment::Cave && pbGetMetadata($game_map.map_id,MetadataDarkMap)
  52. backdrop = "CaveDark"
  53. elsif environ == PBEnvironment::Cave
  54. backdrop = "Cave"
  55. elsif ($game_map.name.downcase).include?("city") || ($game_map.name.downcase).include?("town")
  56. backdrop = "City"
  57. elsif environ == PBEnvironment::MovingWater || environ == PBEnvironment::StillWater
  58. backdrop = "Water"
  59. elsif environ == PBEnvironment::Underwater
  60. backdrop = "Underwater"
  61. elsif environ == PBEnvironment::Rock
  62. backdrop = "Mountain"
  63. elsif environ == PBEnvironment::Snow
  64. backdrop = "Snow"
  65. elsif environ == PBEnvironment::Forest
  66. backdrop = "Forest"
  67. else
  68. if !$game_map || !pbGetMetadata($game_map.map_id,MetadataOutdoor)
  69. backdrop = "IndoorA"
  70. end
  71. end
  72. if $game_map
  73. back = pbGetMetadata($game_map.map_id,MetadataBattleBack)
  74. if back && back!=""
  75. backdrop=back
  76. end
  77. end
  78. if $PokemonGlobal && $PokemonGlobal.nextBattleBack
  79. backdrop = $PokemonGlobal.nextBattleBack
  80. end
  81. # Choose bases
  82. base = ""
  83. trialname = ""
  84. if environ == PBEnvironment::Grass || environ == PBEnvironment::TallGrass
  85. trialname = "Grass"
  86. elsif environ == PBEnvironment::Sand
  87. trialname = "Sand"
  88. elsif terrain == PBTerrain::Puddle
  89. trialname = "Puddle"
  90. elsif $PokemonGlobal.surfing
  91. trialname = "Water"
  92. elsif @battle.opponent && backdrop == "City"
  93. trialname = "Concrete"
  94. elsif terrain == PBTerrain::Rock
  95. trialname = "Dirt"
  96. end
  97. if pbResolveBitmap(sprintf("Graphics/Battlebacks/playerbase/"+backdrop+trialname))
  98. base = trialname
  99. end
  100. # Apply graphics
  101. enemybase = USEBATTLEBASES ? "Graphics/Battlebacks/enemybase/"+backdrop+base : nil
  102. playerbase = USEBATTLEBASES ? "Graphics/Battlebacks/playerbase/"+backdrop+base : nil
  103. @sprites["battlebg"] = AnimatedBattleBackground.new(@viewport)
  104. @sprites["battlebg"].setBitmap(backdrop,self)
  105. pbAddSprite("playerbase",0,0,playerbase,@viewport)
  106. @sprites["playerbase"].bitmap = Bitmap.new(1,1) if !USEBATTLEBASES
  107. pbAddSprite("enemybase",0,0,enemybase,@viewport)
  108. @sprites["enemybase"].bitmap = Bitmap.new(1,1) if !USEBATTLEBASES
  109. @sprites["playerbase"].visible = !@safaribattle
  110. @sprites["shades"] = Sprite.new(@viewport)
  111. @sprites["shades"].bitmap = Bitmap.new(Graphics.width,VIEWPORT_HEIGHT)
  112. @sprites["shades"].bitmap.fill_rect(0,0,Graphics.width,VIEWPORT_HEIGHT,Color.new(255,255,255))
  113. @sprites["shades"].z = 2
  114. @sprites["shades"].opacity = 0
  115.  
  116. pbDayNightTint(@sprites["battlebg"])
  117. pbDayNightTint(@sprites["playerbase"])
  118. pbDayNightTint(@sprites["enemybase"])
  119.  
  120. @sprites["enemybase"].ox = @sprites["enemybase"].bitmap.width/2
  121. @sprites["enemybase"].oy = @sprites["enemybase"].bitmap.height/2
  122. @sprites["playerbase"].ox = @sprites["playerbase"].bitmap.width/2
  123. @sprites["playerbase"].oy = @sprites["playerbase"].bitmap.height/2
  124. end
  125. #=============================================================================
  126. # Initialization of the battle scene
  127. #=============================================================================
  128. def pbLoadUIElements(battle)
  129. if [1,2].include?(EBUISTYLE)
  130. args = battle.battlers[0],battle.doublebattle,@viewport,battle.pbPlayer,self
  131. @sprites["battlebox0"] = EBUISTYLE==2 ? NextGenDataBox.new(*args) : PokemonNewDataBox.new(*args)
  132. args = battle.battlers[1],battle.doublebattle,@viewport,battle.pbPlayer,self
  133. @sprites["battlebox1"] = EBUISTYLE==2 ? NextGenDataBox.new(*args) : PokemonNewDataBox.new(*args)
  134. if @battle.doublebattle
  135. args = battle.battlers[2],battle.doublebattle,@viewport,battle.pbPlayer,self
  136. @sprites["battlebox2"] = EBUISTYLE==2 ? NextGenDataBox.new(*args) : PokemonNewDataBox.new(*args)
  137. args = battle.battlers[3],battle.doublebattle,@viewport,battle.pbPlayer,self
  138. @sprites["battlebox3"] = EBUISTYLE==2 ? NextGenDataBox.new(*args) : PokemonNewDataBox.new(*args)
  139. end
  140. pbAddSprite("messagebox",0,VIEWPORT_HEIGHT-96,EBUISTYLE==2 ? "#{checkEBFolderPath}/nextGen/newBattleMessageBox" : "#{checkEBFolderPath}/newBattleMessageBox",@msgview)
  141. @sprites["messagebox"].z=99999
  142. @sprites["messagebox"].visible=false
  143.  
  144. @sprites["helpwindow"]=Window_UnformattedTextPokemon.newWithSize("",0,0,32,32,@msgview)
  145. @sprites["helpwindow"].visible=false
  146. @sprites["helpwindow"].z=@sprites["messagebox"].z+1
  147.  
  148. @sprites["messagewindow"]=Window_AdvancedTextPokemon.new("")
  149. @sprites["messagewindow"].letterbyletter=true
  150. @sprites["messagewindow"].viewport=@msgview
  151. @sprites["messagewindow"].z=@sprites["messagebox"].z+1
  152.  
  153. @sprites["commandwindow"]=CommandMenuDisplay.new(@msgview) # Retained for compatibility
  154. @sprites["commandwindow"].visible=false # Retained for compatibility
  155. @sprites["fightwindow"]=FightMenuDisplay.new(nil,@msgview) # Retained for compatibility
  156. @sprites["fightwindow"].visible=false # Retained for compatibility
  157. @commandWindow = (EBUISTYLE==2) ? NextGenCommandWindow.new(@viewport,@battle,@safaribattle,@viewport) : NewCommandWindow.new(@viewport,@battle,@safaribattle,@viewport)
  158. @fightWindow = (EBUISTYLE==2) ? NextGenFightWindow.new(@viewport,@battle) : NewFightWindow.new(@viewport)
  159. @bagWindow=NewBattleBag.new(self,@viewport)
  160. 10.times do
  161. @commandWindow.hide
  162. @fightWindow.hide
  163. end
  164. else
  165. @sprites["battlebox0"]=PokemonDataBox.new(battle.battlers[0],battle.doublebattle,@viewport)
  166. @sprites["battlebox1"]=PokemonDataBox.new(battle.battlers[1],battle.doublebattle,@viewport)
  167. if battle.doublebattle
  168. @sprites["battlebox2"]=PokemonDataBox.new(battle.battlers[2],battle.doublebattle,@viewport)
  169. @sprites["battlebox3"]=PokemonDataBox.new(battle.battlers[3],battle.doublebattle,@viewport)
  170. end
  171. pbAddSprite("messagebox",0,VIEWPORT_HEIGHT-96,"Graphics/Pictures/battleMessage",@viewport)
  172. @sprites["messagebox"].z=90
  173. @sprites["helpwindow"]=Window_UnformattedTextPokemon.newWithSize("",0,0,32,32,@viewport)
  174. @sprites["helpwindow"].visible=false
  175. @sprites["helpwindow"].z=90
  176. @sprites["messagewindow"]=Window_AdvancedTextPokemon.new("")
  177. @sprites["messagewindow"].letterbyletter=true
  178. @sprites["messagewindow"].viewport=@viewport
  179. @sprites["messagewindow"].z=100
  180. @sprites["commandwindow"]=CommandMenuDisplay.new(@viewport)
  181. @sprites["commandwindow"].z=100
  182. @sprites["fightwindow"]=FightMenuDisplay.new(nil,@viewport)
  183. @sprites["fightwindow"].z=100
  184. pbShowWindow(MESSAGEBOX)
  185. end
  186. # Party arrows
  187. if @battle.opponent
  188. @sprites["oppArrow"] = NewPartyArrow.new(@msgview,@battle.party2,false,@battle.doublebattle,@battle.pbSecondPartyBegin(1))
  189. @sprites["plArrow"] = NewPartyArrow.new(@msgview,@battle.party1,true,@battle.doublebattle)
  190. end
  191. # Compatibility for gen 6 Effect messages
  192. if INCLUDEGEN6 || EFFECTMESSAGES
  193. if INCLUDEGEN6 && EBUISTYLE==0
  194. #Draw message effect sprites
  195. #not shown here
  196. pbAddSprite("EffectFoe",0,90,"Graphics/Pictures/battleEffectFoe",@viewport)
  197. pbAddSprite("EffectPlayer",Graphics.width-192,158,"Graphics/Pictures/battleEffectPlayer",@viewport)
  198. @sprites["EffectFoe"].visible=false
  199. @sprites["EffectFoe"].z=95
  200. @sprites["EffectPlayer"].visible=false
  201. @sprites["EffectPlayer"].z=95
  202. else
  203. @sprites["abilityMessage"]=Sprite.new(@viewport)
  204. @sprites["abilityMessage"].bitmap=Bitmap.new(280,68)
  205. pbSetSystemFont(@sprites["abilityMessage"].bitmap)
  206. @sprites["abilityMessage"].oy=@sprites["abilityMessage"].bitmap.height/2+6
  207. @sprites["abilityMessage"].zoom_y=0
  208. @sprites["abilityMessage"].z=99999
  209. end
  210. end
  211. end
  212.  
  213. alias pbStartBattle_ebs pbStartBattle unless self.method_defined?(:pbStartBattle_ebs)
  214. def pbStartBattle(battle)
  215. @battle=battle
  216. $specialSpecies=false if @battle.doublebattle
  217. angle=($PokemonSystem.screensize < 1) ? 10 : 25
  218. @vector = Vector.new(-Graphics.width*1.0,VIEWPORT_HEIGHT*1.5,angle,Graphics.width*1.5,2,1)
  219. @firstsendout=true
  220. @lastcmd=[0,0,0,0]
  221. @lastmove=[0,0,0,0]
  222. @orgPos=nil
  223. @shadowAngle=60
  224. @idleTimer=0
  225. @idleSpeed=[40,0]
  226. @animationCount=1
  227. @showingplayer=true
  228. @showingenemy=true
  229. @briefmessage=false
  230. @lowHPBGM=false
  231. @sprites.clear
  232. @viewport=Viewport.new(0,0,Graphics.width,VIEWPORT_HEIGHT)
  233. @viewport.z=99999
  234. @sprites["weather"] = RPG::BattleWeather.new(@viewport) if !@safaribattle && EBUISTYLE > 0
  235. @msgview=Viewport.new(0,0,Graphics.width,VIEWPORT_HEIGHT)
  236. @msgview.z=99999
  237. @msgview2=Viewport.new(0,VIEWPORT_HEIGHT+VIEWPORT_OFFSET,Graphics.width,VIEWPORT_HEIGHT)
  238. @msgview2.z=99999
  239. @traineryoffset=(VIEWPORT_HEIGHT-320) # Adjust player's side for screen size
  240. @foeyoffset=(@traineryoffset*3/4).floor # Adjust foe's side for screen size
  241. pbBackdrop
  242. if @battle.player.is_a?(Array)
  243. trainerfile=pbPlayerSpriteBackFile(@battle.player[0].trainertype)
  244. pbAddSprite("player",0,0,trainerfile,@viewport)
  245. trainerfile=pbTrainerSpriteBackFile(@battle.player[1].trainertype)
  246. pbAddSprite("playerB",0,0,trainerfile,@viewport)
  247. else
  248. trainerfile=pbPlayerSpriteBackFile(@battle.player.trainertype)
  249. pbAddSprite("player",0,0,trainerfile,@viewport)
  250. end
  251. @sprites["player"].x=40
  252. @sprites["player"].y=VIEWPORT_HEIGHT-@sprites["player"].bitmap.height
  253. @sprites["player"].z=30
  254. @sprites["player"].opacity=0
  255. @sprites["player"].src_rect.set(0,0,@sprites["player"].bitmap.width/4,@sprites["player"].bitmap.height)
  256. if @sprites["playerB"]
  257. @sprites["playerB"].x=140
  258. @sprites["playerB"].y=VIEWPORT_HEIGHT-@sprites["playerB"].bitmap.height
  259. @sprites["playerB"].z=30
  260. @sprites["playerB"].opacity=0
  261. @sprites["playerB"].src_rect.set(0,0,@sprites["playerB"].bitmap.width/4,@sprites["playerB"].bitmap.height)
  262. end
  263. if @battle.opponent
  264. if @battle.opponent.is_a?(Array)
  265. trainerfile=pbTrainerSpriteFile(@battle.opponent[1].trainertype)
  266. @sprites["trainer2"]=DynamicTrainerSprite.new(@battle.doublebattle,-2,@viewport,true)
  267. @sprites["trainer2"].setTrainerBitmap(trainerfile)
  268. @sprites["trainer2"].z=16
  269. @sprites["trainer2"].tone=Tone.new(-255,-255,-255,-255)
  270. trainerfile=pbTrainerSpriteFile(@battle.opponent[0].trainertype)
  271. @sprites["trainer"]=DynamicTrainerSprite.new(@battle.doublebattle,-1,@viewport,true)
  272. @sprites["trainer"].setTrainerBitmap(trainerfile)
  273. @sprites["trainer"].z=11
  274. @sprites["trainer"].tone=Tone.new(-255,-255,-255,-255)
  275. else
  276. trainerfile=pbTrainerSpriteFile(@battle.opponent.trainertype)
  277. @sprites["trainer"]=DynamicTrainerSprite.new(@battle.doublebattle,-1,@viewport)
  278. @sprites["trainer"].setTrainerBitmap(trainerfile)
  279. @sprites["trainer"].z=11
  280. @sprites["trainer"].tone=Tone.new(-255,-255,-255,-255)
  281. end
  282. end
  283. @sprites["pokemon0"]=DynamicPokemonSprite.new(battle.doublebattle,0,@viewport)
  284. @sprites["pokemon0"].z=21
  285. @sprites["pokemon1"]=DynamicPokemonSprite.new(battle.doublebattle,1,@viewport)
  286. @sprites["pokemon1"].z=11
  287. if battle.doublebattle
  288. @sprites["pokemon2"]=DynamicPokemonSprite.new(battle.doublebattle,2,@viewport)
  289. @sprites["pokemon2"].z=26
  290. @sprites["pokemon3"]=DynamicPokemonSprite.new(battle.doublebattle,3,@viewport)
  291. @sprites["pokemon3"].z=16
  292. end
  293.  
  294. pbLoadUIElements(battle)
  295.  
  296. pbSetMessageMode(false)
  297. trainersprite1=@sprites["trainer"]
  298. trainersprite2=@sprites["trainer2"]
  299. if !@battle.opponent
  300. if @battle.party2.length >=1
  301. if @battle.party2.length==1
  302. # wild (single) battle initialization
  303. @sprites["pokemon1"].setPokemonBitmap(@battle.party2[0],false)
  304. @sprites["pokemon1"].tone=Tone.new(-255,-255,-255,-255)
  305. @sprites["pokemon1"].visible=true
  306. trainersprite1=@sprites["pokemon1"]
  307. elsif @battle.party2.length==2
  308. # wild (double battle initialization)
  309. @sprites["pokemon1"].setPokemonBitmap(@battle.party2[0],false)
  310. @sprites["pokemon1"].tone=Tone.new(-255,-255,-255,-255)
  311. @sprites["pokemon1"].visible=true
  312. trainersprite1=@sprites["pokemon1"]
  313. @sprites["pokemon3"].setPokemonBitmap(@battle.party2[1],false)
  314. @sprites["pokemon3"].tone=Tone.new(-255,-255,-255,-255)
  315. @sprites["pokemon3"].visible=true
  316. trainersprite2=@sprites["pokemon3"]
  317. end
  318. end
  319. end
  320. #################
  321. # Position for initial transition
  322. #--------------------------------------------
  323. black=Sprite.new(@viewport)
  324. black.z = 99999
  325. black.bitmap=Bitmap.new(Graphics.width,VIEWPORT_HEIGHT)
  326. black.bitmap.fill_rect(0,0,Graphics.width,VIEWPORT_HEIGHT,Color.new(0,0,0))
  327. #--------------------------------------------
  328. if @safaribattle
  329. @sprites["player"].x-=240
  330. @sprites["player"].y+=120
  331. end
  332. #################
  333. # Play battle entrance
  334. vector = @battle.doublebattle ? VECTOR2 : VECTOR1
  335. @vector.force
  336. @vector.set(vector)
  337. @vector.inc=0.1
  338. for i in 0...22
  339. if @safaribattle
  340. @sprites["player"].opacity+=25.5
  341. @sprites["player"].zoom_x=@vector.zoom1
  342. @sprites["player"].zoom_y=@vector.zoom1
  343. @sprites["player"].x+=10
  344. @sprites["player"].y-=5
  345. end
  346. if !@battle.opponent && i > 11
  347. @sprites["pokemon1"].tone.red+=255*0.05 if @sprites["pokemon1"].tone.red < 0
  348. @sprites["pokemon1"].tone.blue+=255*0.05 if @sprites["pokemon1"].tone.blue < 0
  349. @sprites["pokemon1"].tone.green+=255*0.05 if @sprites["pokemon1"].tone.green < 0
  350. @sprites["pokemon1"].tone.gray+=255*0.05 if @sprites["pokemon1"].tone.gray < 0
  351. if @battle.party2.length==2
  352. @sprites["pokemon3"].tone.red+=255*0.05 if @sprites["pokemon3"].tone.red < 0
  353. @sprites["pokemon3"].tone.blue+=255*0.05 if @sprites["pokemon3"].tone.blue < 0
  354. @sprites["pokemon3"].tone.green+=255*0.05 if @sprites["pokemon3"].tone.green < 0
  355. @sprites["pokemon3"].tone.gray+=255*0.05 if @sprites["pokemon3"].tone.gray < 0
  356. end
  357. end
  358. if @battle.opponent && i > 11
  359. @sprites["trainer"].tone.red+=255*0.05 if @sprites["trainer"].tone.red < 0
  360. @sprites["trainer"].tone.blue+=255*0.05 if @sprites["trainer"].tone.blue < 0
  361. @sprites["trainer"].tone.green+=255*0.05 if @sprites["trainer"].tone.green < 0
  362. @sprites["trainer"].tone.gray+=255*0.05 if @sprites["trainer"].tone.gray < 0
  363. if @battle.opponent.is_a?(Array)
  364. @sprites["trainer2"].tone.red+=255*0.05 if @sprites["trainer2"].tone.red < 0
  365. @sprites["trainer2"].tone.blue+=255*0.05 if @sprites["trainer2"].tone.blue < 0
  366. @sprites["trainer2"].tone.green+=255*0.05 if @sprites["trainer2"].tone.green < 0
  367. @sprites["trainer2"].tone.gray+=255*0.05 if @sprites["trainer2"].tone.gray < 0
  368. end
  369. end
  370. black.opacity-=12 if black.opacity>0
  371. wait(1,true)
  372. end
  373. @vector.inc=0.2
  374. #################
  375. # Play cry for wild Pokémon
  376. if !@battle.opponent
  377. pbPlayCry(@battle.party2[0]) if !$specialSpecies
  378. pbPlayCry(@battle.party2[1]) if @battle.doublebattle
  379. for i in 0...10
  380. @sprites["pokemon1"].tone.red+=255*0.05 if @sprites["pokemon1"].tone.red < 0
  381. @sprites["pokemon1"].tone.blue+=255*0.05 if @sprites["pokemon1"].tone.blue < 0
  382. @sprites["pokemon1"].tone.green+=255*0.05 if @sprites["pokemon1"].tone.green < 0
  383. @sprites["pokemon1"].tone.gray+=255*0.05 if @sprites["pokemon1"].tone.gray < 0
  384. if @battle.party2.length==2
  385. @sprites["pokemon3"].tone.red+=255*0.05 if @sprites["pokemon3"].tone.red < 0
  386. @sprites["pokemon3"].tone.blue+=255*0.05 if @sprites["pokemon3"].tone.blue < 0
  387. @sprites["pokemon3"].tone.green+=255*0.05 if @sprites["pokemon3"].tone.green < 0
  388. @sprites["pokemon3"].tone.gray+=255*0.05 if @sprites["pokemon3"].tone.gray < 0
  389. end
  390. wait(1,true)
  391. end
  392. end
  393. if @battle.opponent
  394. frames1=0
  395. frames2=0
  396. frames1=@sprites["trainer"].totalFrames if @sprites["trainer"]
  397. frames2=@sprites["trainer2"].totalFrames if @sprites["trainer2"]
  398. if frames1 > frames2
  399. maxframes=frames1
  400. else
  401. maxframes=frames2
  402. end
  403. maxframes = 17 if maxframes < 17
  404. for i in 1...maxframes
  405. @sprites["trainer"].update if @sprites["trainer"] && i < frames1
  406. @sprites["trainer2"].update if @sprites["trainer2"] && i < frames2
  407. if SHOWPARTYARROWS && EBUISTYLE < 2
  408. @sprites["oppArrow"].show if i < 17
  409. @sprites["plArrow"].show if i < 17
  410. end
  411. @sprites["trainer"].tone.red+=255*0.05 if @sprites["trainer"].tone.red < 0
  412. @sprites["trainer"].tone.blue+=255*0.05 if @sprites["trainer"].tone.blue < 0
  413. @sprites["trainer"].tone.green+=255*0.05 if @sprites["trainer"].tone.green < 0
  414. @sprites["trainer"].tone.gray+=255*0.05 if @sprites["trainer"].tone.gray < 0
  415. if @battle.opponent.is_a?(Array)
  416. @sprites["trainer2"].tone.red+=255*0.05 if @sprites["trainer2"].tone.red < 0
  417. @sprites["trainer2"].tone.blue+=255*0.05 if @sprites["trainer2"].tone.blue < 0
  418. @sprites["trainer2"].tone.green+=255*0.05 if @sprites["trainer2"].tone.green < 0
  419. @sprites["trainer2"].tone.gray+=255*0.05 if @sprites["trainer2"].tone.gray < 0
  420. end
  421. wait(1,true)
  422. end
  423. else
  424. @sprites["battlebox1"].x=-264-10
  425. @sprites["battlebox1"].y=24
  426. @sprites["battlebox1"].appear if !$specialSpecies
  427. if @battle.party2.length==2
  428. @sprites["battlebox1"].y=60
  429. @sprites["battlebox3"].x=-264-8
  430. @sprites["battlebox3"].y=8
  431. @sprites["battlebox3"].appear
  432. end
  433. 10.times do
  434. if EBUISTYLE==2
  435. @sprites["battlebox1"].show
  436. elsif EBUISTYLE==0
  437. @sprites["battlebox1"].update
  438. else
  439. @sprites["battlebox1"].x+=26
  440. end
  441. if @battle.party2.length==2
  442. if EBUISTYLE==2
  443. @sprites["battlebox3"].show
  444. elsif EBUISTYLE==0
  445. @sprites["battlebox3"].update
  446. else
  447. @sprites["battlebox3"].x+=26
  448. end
  449. end
  450. wait(1,true)
  451. end
  452. # Show shiny animation for wild Pokémon
  453. if shinyBattler?(@battle.battlers[1]) && @battle.battlescene
  454. pbCommonAnimation("Shiny",@battle.battlers[1],nil)
  455. end
  456. if @battle.party2.length==2
  457. if shinyBattler?(@battle.battlers[3]) && @battle.battlescene
  458. pbCommonAnimation("Shiny",@battle.battlers[3],nil)
  459. end
  460. end
  461. end
  462. startSMSequence(@viewport,@battle.opponent.trainertype) if $smAnim
  463. ebSpecialSpecies_start(@msgview) if $specialSpecies
  464. end
  465. #=============================================================================
  466. # Additional changes to opponent's sprites
  467. #=============================================================================
  468. alias pbShowOpponent_ebs pbShowOpponent unless self.method_defined?(:pbShowOpponent_ebs)
  469. def pbShowOpponent(index=0,speech=false)
  470. if @battle.opponent
  471. if @battle.opponent.is_a?(Array)
  472. trainerfile=pbTrainerSpriteFile(@battle.opponent[index].trainertype)
  473. else
  474. trainerfile=pbTrainerSpriteFile(@battle.opponent.trainertype)
  475. end
  476. else
  477. trainerfile = nil
  478. end
  479. @sprites["battlebox0"].visible=false if @sprites["battlebox0"]
  480. @sprites["battlebox1"].visible=false if @sprites["battlebox1"]
  481. @sprites["battlebox2"].visible=false if @sprites["battlebox2"]
  482. @sprites["battlebox3"].visible=false if @sprites["battlebox3"]
  483.  
  484. @sprites["opponent"]=DynamicTrainerSprite.new(false,-1,@viewport)
  485. @sprites["opponent"].setTrainerBitmap(trainerfile) if !trainerfile.nil?
  486. @sprites["opponent"].toLastFrame
  487. @sprites["opponent"].lock
  488. @sprites["opponent"].z=16
  489. @sprites["opponent"].x=@sprites["enemybase"].x+120
  490. @sprites["opponent"].y=@sprites["enemybase"].y+((!USEBATTLEBASES && !speech && @battle.endspeechwin == "") ? 0 : 50)
  491. @sprites["opponent"].opacity=0
  492. 20.times do
  493. moveEntireScene(-3,-2,true,true)
  494. @sprites["opponent"].opacity+=12.8
  495. @sprites["opponent"].x-=4
  496. @sprites["opponent"].y-=2
  497. animateBattleSprites(true)
  498. pbGraphicsUpdate
  499. pbInputUpdate
  500. end
  501. end
  502.  
  503. alias pbHideOpponent_ebs pbHideOpponent unless self.method_defined?(:pbHideOpponent_ebs)
  504. def pbHideOpponent(showboxes=false)
  505. 20.times do
  506. moveEntireScene(+3,+2,true,true)
  507. @sprites["opponent"].opacity-=12.8
  508. @sprites["opponent"].x+=4
  509. @sprites["opponent"].y+=2
  510. animateBattleSprites(true)
  511. pbGraphicsUpdate
  512. pbInputUpdate
  513. end
  514. if showboxes
  515. @sprites["battlebox0"].visible=true if @sprites["battlebox0"]
  516. @sprites["battlebox1"].visible=true if @sprites["battlebox1"]
  517. @sprites["battlebox2"].visible=true if @sprites["battlebox2"]
  518. @sprites["battlebox3"].visible=true if @sprites["battlebox3"]
  519. end
  520. @sprites["opponent"].dispose
  521. end
  522.  
  523. def pbTrainerBattleSpeech
  524. @briefmessage=false
  525. if !@battle.doublebattle && @battle.opponent && @battle.midspeech!="" && !@battle.midspeech_done
  526. speech=@battle.midspeech
  527. pokemon=@battle.battlers[1]
  528. if @battle.party2.length > 1
  529. val=@battle.pbPokemonCount(@battle.party2)
  530. canspeak=(val==1) ? true : false
  531. else
  532. canspeak=(pokemon.hp < pokemon.totalhp*0.5) ? true : false
  533. end
  534. if canspeak
  535. pbBGMPlay(@battle.cuedbgm) if !@battle.cuedbgm.nil?
  536. pbShowOpponent(0,true)
  537. @battle.pbDisplayPaused(speech)
  538. clearMessageWindow
  539. pbHideOpponent(true)
  540. @battle.midspeech_done=true
  541. end
  542. end
  543. end
  544. #=============================================================================
  545. # New methods of displaying the pbRecall animation
  546. #=============================================================================
  547. alias pbRecall_ebs pbRecall unless self.method_defined?(:pbRecall_ebs)
  548. def pbRecall(battlerindex)
  549. balltype = @battle.battlers[battlerindex].pokemon.ballused
  550. poke = @sprites["pokemon#{battlerindex}"]
  551. poke.resetParticles
  552. pbSEPlay("recall") if !@sprites["pokemon#{battlerindex}"].hidden
  553. zoom = poke.zoom_x/20.0
  554. @sprites["battlebox#{battlerindex}"].visible = false if EBUISTYLE==2
  555. ballburst = EBBallBurst.new(poke.viewport,poke.x,poke.y,29,poke.zoom_x,balltype)
  556. ballburst.recall if !@sprites["pokemon#{battlerindex}"].hidden
  557. for i in 0...32
  558. next if @sprites["pokemon#{battlerindex}"].hidden
  559. if i < 20
  560. poke.tone.red+=25.5
  561. poke.tone.green+=25.5
  562. poke.tone.blue+=25.5
  563. if battlerindex%2==0
  564. @sprites["battlebox#{battlerindex}"].x+=26
  565. else
  566. @sprites["battlebox#{battlerindex}"].x-=26
  567. end
  568. @sprites["battlebox#{battlerindex}"].opacity-=25.5
  569. poke.zoom_x-=zoom
  570. poke.zoom_y-=zoom
  571. end
  572. ballburst.update
  573. wait(1)
  574. end
  575. ballburst.dispose
  576. ballburst = nil
  577. poke.visible=false
  578. if @lowHPBGM
  579. $game_system.bgm_restore
  580. @lowHPBGM = false
  581. end
  582. end
  583. #=============================================================================
  584. # New Pokemon damage animations
  585. #=============================================================================
  586. alias pbDamageAnimation_ebs pbDamageAnimation unless self.method_defined?(:pbDamageAnimation_ebs)
  587. def pbDamageAnimation(pkmn,effectiveness)
  588. @briefmessage = false
  589. self.afterAnim = false
  590. pkmnsprite = @sprites["pokemon#{pkmn.index}"]
  591. databox = @sprites["battlebox#{pkmn.index}"]
  592. wait(4,true)
  593. case effectiveness
  594. when 0
  595. mult = 2
  596. pbSEPlay("normaldamage")
  597. when 1
  598. mult = 1
  599. pbSEPlay("notverydamage")
  600. when 2
  601. mult = 3
  602. pbSEPlay("superdamage")
  603. end
  604. once = false
  605. (effectiveness==2 ? 3 : 2).times do
  606. for i in 0...8
  607. if i < 2
  608. c = -255*(mult/3.0)
  609. pkmnsprite.tone = Tone.new(c,c,c)
  610. elsif i < 4
  611. c = 255*(mult/3.0)
  612. pkmnsprite.tone = Tone.new(c,c,c)
  613. elsif i < 6
  614. pkmnsprite.visible = false
  615. pkmnsprite.tone = Tone.new(0,0,0)
  616. else
  617. pkmnsprite.visible = true
  618. end
  619. if !once
  620. databox.x += mult*(i.between?(0,1) || i.between?(4,5) ? 1 : -1)*(pkmn.index%2==0 ? -1 : 1)
  621. databox.y -= mult*(i.between?(0,1) || i.between?(4,5) ? 1 : -1)*(pkmn.index%2==0 ? -1 : 1)
  622. once = true if i == 7
  623. end
  624. pkmnsprite.still
  625. wait(1,true)
  626. end
  627. end
  628. # animations for triggering Substitute
  629. if pkmn.effects[PBEffects::Substitute]==0 && pkmnsprite.isSub
  630. self.setSubstitute(pkmn.index,false)
  631. elsif pkmn.effects[PBEffects::Substitute]>0 && !pkmnsprite.isSub
  632. self.setSubstitute(pkmn.index,true)
  633. end
  634. end
  635. #=============================================================================
  636. # New methods of displaying the pbFainted animation
  637. #=============================================================================
  638. alias pbFainted_ebs pbFainted unless self.method_defined?(:pbFainted_ebs)
  639. def pbFainted(pkmn)
  640. clearMessageWindow
  641. battlerindex=pkmn.index
  642. frames=pbCryFrameLength(pkmn.pokemon)
  643. pbPlayCry(pkmn.pokemon)
  644. poke = @sprites["pokemon#{battlerindex}"]
  645. poke.resetParticles
  646. frames.times do
  647. animateBattleSprites
  648. pbGraphicsUpdate
  649. pbInputUpdate
  650. end
  651. pbSEPlay("faint")
  652. zoom=poke.zoom_x/(20.0*2)
  653. poke.showshadow=false
  654. poke.sprite.src_rect.height=poke.oy
  655. 20.times do
  656. poke.still
  657. poke.sprite.src_rect.y-=6
  658. poke.opacity-=12.8
  659. @sprites["battlebox#{battlerindex}"].opacity-=25.5
  660. wait(1,true)
  661. end
  662. poke.src_rect.set(0,0,poke.bitmap.width,poke.bitmap.height)
  663. poke.fainted=true
  664. end
  665. #=============================================================================
  666. # Allow for sprite animation during Battlebox HP changes
  667. #=============================================================================
  668. alias pbHPChanged_ebs pbHPChanged unless self.method_defined?(:pbHPChanged_ebs)
  669. def pbHPChanged(pkmn,oldhp,anim=false)
  670. @briefmessage=false
  671. hpchange=pkmn.hp-oldhp
  672. if hpchange < 0
  673. hpchange=-hpchange
  674. PBDebug.log("[#{pkmn.pbThis} lost #{hpchange} HP, now has #{pkmn.hp} HP]") if $INTERNAL
  675. else
  676. PBDebug.log("[#{pkmn.pbThis} gained #{hpchange} HP, now has #{pkmn.hp} HP]") if $INTERNAL
  677. end
  678. if anim && @battle.battlescene
  679. if pkmn.hp > oldhp
  680. pbCommonAnimation("HealthUp",pkmn,nil)
  681. elsif pkmn.hp < oldhp
  682. pbCommonAnimation("HealthDown",pkmn,nil)
  683. end
  684. end
  685. sprite=@sprites["battlebox#{pkmn.index}"]
  686. sprite.animateHP(oldhp,pkmn.hp)
  687. while sprite.animatingHP
  688. animateBattleSprites(true)
  689. pbGraphicsUpdate
  690. pbInputUpdate
  691. sprite.update
  692. end
  693. if USELOWHPBGM && !@battle.doublebattle && pkmn.index%2==0
  694. if pkmn.hp <= pkmn.totalhp*0.25 && pkmn.hp > 0
  695. $game_system.bgm_memorize
  696. pbBGMPlay("lowhpbattle")
  697. @lowHPBGM = true
  698. elsif @lowHPBGM
  699. $game_system.bgm_restore
  700. @lowHPBGM = false
  701. end
  702. end
  703. end
  704. #=============================================================================
  705. # Allow for sprite animation during Battlebox EXP changes
  706. #=============================================================================
  707. alias pbEXPBar_ebs pbEXPBar unless self.method_defined?(:pbEXPBar_ebs)
  708. def pbEXPBar(pokemon,battler,startexp,endexp,tempexp1,tempexp2)
  709. clearMessageWindow
  710. if battler
  711. @sprites["battlebox#{battler.index}"].refreshExpLevel
  712. exprange=(endexp-startexp)
  713. startexplevel=0
  714. endexplevel=0
  715. if exprange!=0
  716. width = EBUISTYLE==2 ? pbBitmap("#{checkEBFolderPath}/nextGen/expBar").width : PokeBattle_SceneConstants::EXPGAUGESIZE
  717. startexplevel=(tempexp1-startexp)*width/exprange
  718. endexplevel=(tempexp2-startexp)*width/exprange
  719. end
  720. pbSEPlay("BW_exp") if !@battle.doublebattle
  721. @sprites["battlebox#{battler.index}"].animateEXP(startexplevel,endexplevel)
  722. while @sprites["battlebox#{battler.index}"].animatingEXP
  723. animateBattleSprites(true)
  724. pbGraphicsUpdate
  725. pbInputUpdate
  726. @sprites["battlebox#{battler.index}"].update
  727. end
  728. Audio.se_stop
  729. 20.times do
  730. pbGraphicsUpdate
  731. animateBattleSprites
  732. end
  733. end
  734. end
  735.  
  736. alias pbLevelUp_ebs pbLevelUp unless self.method_defined?(:pbLevelUp_ebs)
  737. def pbLevelUp(*args)
  738. pbMEPlay("BW_lvup",70)
  739. pbLevelUp_ebs(*args)
  740. end
  741.  
  742. def pbTopRightWindow(text)
  743. viewport=Viewport.new(0,0,Graphics.width,VIEWPORT_HEIGHT)
  744. viewport.z=@viewport.z+6
  745. window=Window_AdvancedTextPokemon.new(text)
  746. window.viewport=viewport
  747. window.width=198
  748. window.y=0
  749. window.x=Graphics.width-window.width
  750. pbPlayDecisionSE()
  751. loop do
  752. Graphics.update
  753. Input.update
  754. window.update
  755. animateBattleSprites
  756. if Input.trigger?(Input::C)
  757. break
  758. end
  759. end
  760. window.dispose
  761. viewport.dispose
  762. end
  763.  
  764. def setSubstitute(index,set=true)
  765. 10.times do
  766. @sprites["pokemon#{index}"].x += (index%2==0) ? -4 : 2
  767. @sprites["pokemon#{index}"].y -= (index%2==0) ? -2 : 1
  768. @sprites["pokemon#{index}"].opacity -= 25.5
  769. wait(1)
  770. end
  771. if set
  772. @sprites["pokemon#{index}"].setSubstitute
  773. else
  774. @sprites["pokemon#{index}"].removeSubstitute
  775. end
  776. 10.times do
  777. @sprites["pokemon#{index}"].x -= (index%2==0) ? -4 : 2
  778. @sprites["pokemon#{index}"].y += (index%2==0) ? -2 : 1
  779. @sprites["pokemon#{index}"].opacity += 25.5
  780. wait(1)
  781. end
  782. end
  783.  
  784. def pbGraphicsUpdate
  785. Graphics.update
  786. end
  787. #=============================================================================
  788. # Shows the player's Poké Ball being thrown to capture a Pokémon.
  789. #=============================================================================
  790. alias pbThrowAndDeflect_ebs pbThrowAndDeflect unless self.method_defined?(:pbThrowAndDeflect_ebs)
  791. def pbThrowAndDeflect(ball,targetBattler)
  792. end
  793. alias pbHideCaptureBall_ebs pbHideCaptureBall unless self.method_defined?(:pbHideCaptureBall_ebs)
  794. def pbHideCaptureBall
  795. end
  796.  
  797. alias pokeballThrow_ebs pokeballThrow unless self.method_defined?(:pokeballThrow_ebs)
  798. def pokeballThrow(*args)
  799. if PokeBattle_Scene.instance_method(:pokeballThrow_ebs).arity <= -7
  800. ball, shakes, critical, targetBattler, scene, battler, burst, showplayer = args
  801. else
  802. ball, shakes, targetBattler, scene, battler, burst, showplayer = args
  803. end
  804. burst = -1 if burst.nil?; showplayer = false if showplayer.nil?
  805. @orgPos=nil
  806. if @safaribattle
  807. @playerfix=false
  808. end
  809. balltype=pbGetBallType(ball)
  810. ballframe=0
  811. # sprites
  812. spritePoke = @sprites["pokemon#{targetBattler}"]
  813. @sprites["ballshadow"] = Sprite.new(@viewport)
  814. @sprites["ballshadow"].bitmap = Bitmap.new(34,34)
  815. @sprites["ballshadow"].bitmap.drawCircle(Color.new(0,0,0))
  816. @sprites["ballshadow"].ox = @sprites["ballshadow"].bitmap.width/2
  817. @sprites["ballshadow"].oy = @sprites["ballshadow"].bitmap.height/2
  818. @sprites["ballshadow"].z = 32
  819. @sprites["ballshadow"].opacity = 255*0.25
  820. @sprites["ballshadow"].visible = false
  821. @sprites["captureball"] = Sprite.new(@viewport)
  822. @sprites["captureball"].bitmap=BitmapCache.load_bitmap("#{checkEBFolderPath}/pokeballs")
  823. balltype = 0 if balltype*41 >= @sprites["captureball"].bitmap.width
  824. @sprites["captureball"].src_rect.set(balltype*41,ballframe*40,41,40)
  825. @sprites["captureball"].ox = 20
  826. @sprites["captureball"].oy = 20
  827. @sprites["captureball"].z = 32
  828. @sprites["captureball"].zoom_x = 4
  829. @sprites["captureball"].zoom_y = 4
  830. @sprites["captureball"].visible = false
  831. pokeball = @sprites["captureball"]
  832. shadow = @sprites["ballshadow"]
  833. # position "camera"
  834. @sprites["battlebox0"].visible = false if @sprites["battlebox0"]
  835. @sprites["battlebox2"].visible = false if @sprites["battlebox2"]
  836. vector = @battle.doublebattle ? VECTOR2 : VECTOR1
  837. sx, sy = @vector.spoof(ENEMYVECTOR)
  838. curve = calculateCurve(sx-260,sy-160,sx-60,sy-200,sx,sy-140,24)
  839. # position pokeball
  840. pokeball.x = sx - 260
  841. pokeball.y = sy - 100
  842. pokeball.visible = true
  843. shadow.x = pokeball.x
  844. shadow.y = pokeball.y
  845. shadow.zoom_x = 0
  846. shadow.zoom_y = 0
  847. shadow.visible = true
  848. # throwing animation
  849. critical ? pbSEPlay("throw_critical") : pbSEPlay("throw")
  850. for i in 0...28
  851. @vector.set(ENEMYVECTOR) if i == 4
  852. if @safaribattle && i < 16
  853. @sprites["player"].x -= 75
  854. @sprites["player"].y += 38
  855. @sprites["player"].zoom_x += 0.125
  856. @sprites["player"].zoom_y += 0.125
  857. end
  858. ballframe += 1
  859. ballframe = 0 if ballframe > 7
  860. if i < 24
  861. pokeball.x = curve[i][0]
  862. pokeball.y = curve[i][1]
  863. pokeball.zoom_x -= (pokeball.zoom_x - spritePoke.zoom_x)*0.2
  864. pokeball.zoom_y -= (pokeball.zoom_y - spritePoke.zoom_y)*0.2
  865. shadow.x = pokeball.x
  866. shadow.y = pokeball.y + 140 + 16 + (24-i)
  867. shadow.zoom_x += 0.8/24
  868. shadow.zoom_y += 0.3/24
  869. end
  870. pokeball.src_rect.set(balltype*41,ballframe*40,41,40)
  871. wait(1,true)
  872. end
  873. for i in 0...4
  874. pokeball.src_rect.set(balltype*41,(7+i)*40,41,40)
  875. wait(1)
  876. end
  877. pbSEPlay("recall")
  878. # Burst animation here
  879. if burst >=0 && scene.battle.battlescene && CUSTOMANIMATIONS
  880. scene.pbCommonAnimation("BallBurst#{burst}",battler,nil)
  881. end
  882. pokeball.z=spritePoke.z-1
  883. shadow.z=pokeball.z-1
  884. spritePoke.showshadow=false
  885. if !CUSTOMANIMATIONS
  886. ballburst = EBBallBurst.new(pokeball.viewport,pokeball.x,pokeball.y,50,@vector.zoom1,balltype)
  887. ballburst.catching
  888. end
  889. for i in 0...(CUSTOMANIMATIONS ? 20 : 32)
  890. if i < 20
  891. spritePoke.zoom_x -= 0.075
  892. spritePoke.zoom_y -= 0.075
  893. spritePoke.tone.red += 25.5
  894. spritePoke.tone.green += 25.5
  895. spritePoke.tone.blue += 25.5
  896. spritePoke.y -= 8
  897. end
  898. ballburst.update if !CUSTOMANIMATIONS
  899. wait(1)
  900. end
  901. if !CUSTOMANIMATIONS
  902. ballburst.dispose
  903. ballburst = nil
  904. end
  905. spritePoke.y += 160
  906. pokeball.src_rect.y -= 40
  907. wait(1)
  908. pokeball.src_rect.y = 0
  909. wait(1)
  910. t = 0
  911. i = 51
  912. 10.times do
  913. t += i
  914. i =- 51 if t >= 255
  915. pokeball.tone=Tone.new(t,t,t)
  916. wait(1)
  917. end
  918. #################
  919. pbSEPlay("jumptoball")
  920. for i in 0...20
  921. pokeball.src_rect.y = 40*(((i-6)/2)+1) if i%2==0 && i >= 6
  922. pokeball.y += 7
  923. shadow.zoom_x += 0.01
  924. shadow.zoom_y += 0.01
  925. wait(1)
  926. end
  927. pokeball.src_rect.y = 0
  928. pbSEPlay("balldrop")
  929. for i in 0...14
  930. pokeball.src_rect.y = 40*((i/2)+1) if i%2==0
  931. pokeball.y -= 6 if i < 7
  932. pokeball.y += 6 if i >= 7
  933. if i <= 7
  934. shadow.zoom_x -= 0.005
  935. shadow.zoom_y -= 0.005
  936. else
  937. shadow.zoom_x += 0.005
  938. shadow.zoom_y += 0.005
  939. end
  940. wait(1)
  941. end
  942. pokeball.src_rect.y = 0
  943. pbSEPlay("balldrop",80)
  944. [shakes,3].min.times do
  945. wait(40)
  946. pbSEPlay("ballshake")
  947. pokeball.src_rect.y = 11*40
  948. wait(1)
  949. for i in 0...2
  950. 2.times do
  951. pokeball.src_rect.y += 40*(i < 1 ? 1 : -1)
  952. wait(1)
  953. end
  954. end
  955. pokeball.src_rect.y = 14*40
  956. wait(1)
  957. for i in 0...2
  958. 2.times do
  959. pokeball.src_rect.y += 40*(i < 1 ? 1 : -1)
  960. wait(1)
  961. end
  962. end
  963. pokeball.src_rect.y = 0
  964. wait(1)
  965. end
  966. if shakes < 4
  967. wait(40)
  968. pokeball.src_rect.y=9*40
  969. pbGraphicsUpdate
  970. pokeball.src_rect.y+=40
  971. pbGraphicsUpdate
  972. pbSEPlay("recall")
  973. spritePoke.showshadow=true
  974. ballburst = EBBallBurst.new(pokeball.viewport,pokeball.x,pokeball.y,50,@vector.zoom1,balltype)
  975. for i in 0...32
  976. if i < 20
  977. pokeball.opacity -= 25.5
  978. shadow.opacity -= 4
  979. spritePoke.zoom_x += 0.075
  980. spritePoke.zoom_y += 0.075
  981. spritePoke.tone.red -= 12.8
  982. spritePoke.tone.green -= 12.8
  983. spritePoke.tone.blue -= 12.8
  984. end
  985. ballburst.update
  986. wait(1)
  987. end
  988. ballburst.dispose
  989. ballburst = nil
  990. @sprites["battlebox0"].visible = true if @sprites["battlebox0"]
  991. @sprites["battlebox2"].visible = true if @sprites["battlebox2"]
  992. clearMessageWindow
  993. @vector.set(vector)
  994. 20.times do
  995. if @safaribattle
  996. @sprites["player"].x += 60
  997. @sprites["player"].y -= 30
  998. @sprites["player"].zoom_x -= 0.1
  999. @sprites["player"].zoom_y -= 0.1
  1000. end
  1001. wait(1,true)
  1002. end
  1003. else
  1004. spritePoke.visible=false
  1005. wait(40)
  1006. pbSEPlay("balldrop",80)
  1007. pokeball.color = Color.new(0,0,0,0)
  1008. fp = {}
  1009. for j in 0...3
  1010. fp["#{j}"] = Sprite.new(pokeball.viewport)
  1011. fp["#{j}"].bitmap = pbBitmap("Graphics/Animations/ebStar")
  1012. fp["#{j}"].ox = fp["#{j}"].bitmap.width/2
  1013. fp["#{j}"].oy = fp["#{j}"].bitmap.height/2
  1014. fp["#{j}"].x = pokeball.x
  1015. fp["#{j}"].y = pokeball.y
  1016. fp["#{j}"].opacity = 0
  1017. fp["#{j}"].z = pokeball.z + 1
  1018. end
  1019. for i in 0...16
  1020. for j in 0...3
  1021. fp["#{j}"].y -= [3,4,3][j]
  1022. fp["#{j}"].x -= [3,0,-3][j]
  1023. fp["#{j}"].opacity += 32*(i < 8 ? 1 : -1)
  1024. fp["#{j}"].angle += [4,2,-4][j]
  1025. end
  1026. @sprites["battlebox#{targetBattler}"].opacity-=25.5
  1027. pokeball.color.alpha += 8
  1028. wait(1)
  1029. end
  1030. if @battle.opponent
  1031. 5.times do
  1032. pokeball.opacity -= 51
  1033. shadow.opacity -= 13
  1034. wait(1)
  1035. end
  1036. @vector.set(vector)
  1037. wait(20,true)
  1038. end
  1039. spritePoke.clear
  1040. end
  1041. @playerfix=true if @safaribattle
  1042. end
  1043.  
  1044. alias pbThrowSuccess_ebs pbThrowSuccess unless self.method_defined?(:pbThrowSuccess_ebs)
  1045. def pbThrowSuccess
  1046. if !@battle.opponent
  1047. @briefmessage = true
  1048. pbMEPlay("BW_captured",70)
  1049. pbBGMPlay("#{CAPTUREBGM}") if !CAPTUREBGM.nil?
  1050. frames = (3.5*Graphics.frame_rate).to_i
  1051. wait(frames)
  1052. end
  1053. clearMessageWindow
  1054. @sprites["ballshadow"].dispose
  1055. @sprites["captureball"].dispose
  1056. vector = @battle.doublebattle ? VECTOR2 : VECTOR1
  1057. @vector.set(vector)
  1058. end
  1059. #=============================================================================
  1060. # New methods of displaying TrainerSendOut animations
  1061. #=============================================================================
  1062. alias pbTrainerSendOut_ebs pbTrainerSendOut unless self.method_defined?(:pbTrainerSendOut_ebs)
  1063. def pbTrainerSendOut(battlerindex,pkmn)
  1064. sendoutSMSequence if $smAnim
  1065. # initial configuration of used variables
  1066. metrics=load_data("Data/metrics.dat")
  1067. balltype = []
  1068. ballframe = 0
  1069. dig = []
  1070. alt = []
  1071. curve = []
  1072. orgcord = []
  1073. burst = {}
  1074. dust = {}
  1075. # the amount of current Pokemon handled
  1076. max = @firstsendout ? (@battle.doublebattle ? 2 : 1) : 1
  1077. # sets up Pokemon sprites, Pokeballs and databoxes
  1078. for m in 0...max
  1079. m = @firstsendout ? m : 0
  1080. i = @firstsendout ? [1,3][m] : battlerindex
  1081. @sprites["battlebox#{i}"].x = -264 - [0,8,0,10][i]
  1082. @sprites["battlebox#{i}"].y = @battle.doublebattle ? [0,60,0,8][i] : [0,24,0,8][i]
  1083.  
  1084. @sprites["pokeball#{i}"] = Sprite.new(@viewport)
  1085. @sprites["pokeball#{i}"].bitmap=BitmapCache.load_bitmap("#{checkEBFolderPath}/pokeballs")
  1086. balltype.push(@battle.battlers[i].pokemon.ballused)
  1087. balltype[m] = 0 if balltype[m]*41 >= @sprites["pokeball#{i}"].bitmap.width
  1088. @sprites["pokeball#{i}"].src_rect.set(balltype[m]*41,ballframe*40,41,40)
  1089. @sprites["pokeball#{i}"].ox = 20
  1090. @sprites["pokeball#{i}"].oy = 20
  1091. @sprites["pokeball#{i}"].zoom_x = 0.75
  1092. @sprites["pokeball#{i}"].zoom_y = 0.75
  1093. @sprites["pokeball#{i}"].z = 19
  1094. @sprites["pokeball#{i}"].opacity = 0
  1095.  
  1096. species = getBattlerPokemon(@battle.battlers[i]).species
  1097. handled = false
  1098. for poke in [:DIGLETT,:DUGTRIO]
  1099. num = getConst(PBSpecies,poke)
  1100. next if num.nil? || handled
  1101. if species == num
  1102. dig.push(true)
  1103. handled = true
  1104. end
  1105. end
  1106. dig.push(false) if !handled
  1107.  
  1108. @sprites["pokemon#{i}"].setPokemonBitmap(getBattlerPokemon(@battle.battlers[i]),false)
  1109. @sprites["pokemon#{i}"].showshadow = false
  1110. orgcord.push(@sprites["pokemon#{i}"].oy)
  1111. @sprites["pokemon#{i}"].oy = @sprites["pokemon#{i}"].height/2 if !dig[m]
  1112. @sprites["pokemon#{i}"].tone = Tone.new(255,255,255)
  1113. @sprites["pokemon#{i}"].opacity = 255
  1114. @sprites["pokemon#{i}"].visible = false
  1115. curve.push(
  1116. calculateCurve(
  1117. @sprites["pokemon#{i}"].x,@sprites["enemybase"].y-50-(orgcord[m]-@sprites["pokemon#{i}"].oy),
  1118. @sprites["pokemon#{i}"].x,@sprites["enemybase"].y-100-(orgcord[m]-@sprites["pokemon#{i}"].oy),
  1119. @sprites["pokemon#{i}"].x,@sprites["enemybase"].y-50-(orgcord[m]-@sprites["pokemon#{i}"].oy),30
  1120. )
  1121. )
  1122. end
  1123. # initial trainer fade and Pokeball throwing animation
  1124. pbSEPlay("throw")
  1125. for j in 0...30
  1126. ballframe += 1
  1127. ballframe = 0 if ballframe > 7
  1128. for m in 0...max
  1129. m = @firstsendout ? m : 0
  1130. i = @firstsendout ? [1,3][m] : battlerindex
  1131. t = ["","2"][m]
  1132. if @firstsendout && @sprites["trainer#{t}"]
  1133. @sprites["trainer#{t}"].zoom_x -= 0.02
  1134. @sprites["trainer#{t}"].zoom_y -= 0.02
  1135. @sprites["trainer#{t}"].x += 1
  1136. @sprites["trainer#{t}"].y -= 2
  1137. @sprites["trainer#{t}"].opacity -= 12.8
  1138. end
  1139. @sprites["pokeball#{i}"].src_rect.set(balltype[m]*41,ballframe*40,41,40)
  1140. @sprites["pokeball#{i}"].x = curve[m][j][0]
  1141. @sprites["pokeball#{i}"].y = curve[m][j][1]
  1142. @sprites["pokeball#{i}"].opacity += 51
  1143. end
  1144. @sprites["oppArrow"].hide if @battle.opponent && SHOWPARTYARROWS && EBUISTYLE < 2
  1145. wait(1)
  1146. end
  1147. # configuring the Y position of Pokemon sprites
  1148. for m in 0...max
  1149. m = @firstsendout ? m : 0
  1150. i = @firstsendout ? [1,3][m] : battlerindex
  1151. @sprites["pokemon#{i}"].visible = true
  1152. @sprites["pokemon#{i}"].y -= 50 + (orgcord[m] - @sprites["pokemon#{i}"].oy) if !dig[m]
  1153. @sprites["pokemon#{i}"].zoom_x = 0
  1154. @sprites["pokemon#{i}"].zoom_y = 0
  1155. @sprites["battlebox#{i}"].appear
  1156.  
  1157. burst["#{i}"] = EBBallBurst.new(@viewport,@sprites["pokeball#{i}"].x,@sprites["pokeball#{i}"].y,19,1,balltype[m])
  1158. end
  1159. # starting Pokemon release animation
  1160. pbSEPlay("recall")
  1161. @sendingOut = false
  1162. clearMessageWindow
  1163. for j in 0...16
  1164. for m in 0...max
  1165. m = @firstsendout ? m : 0
  1166. i = @firstsendout ? [1,3][m] : battlerindex
  1167. burst["#{i}"].update
  1168. next if j < 4
  1169. @sprites["pokeball#{i}"].opacity -= 51
  1170. @sprites["pokemon#{i}"].zoom_x += 0.1*@vector.zoom1
  1171. @sprites["pokemon#{i}"].zoom_y += 0.1*@vector.zoom1
  1172. @sprites["pokemon#{i}"].still
  1173. if EBUISTYLE==2
  1174. @sprites["battlebox#{i}"].show
  1175. elsif EBUISTYLE==0
  1176. @sprites["battlebox#{i}"].update
  1177. else
  1178. @sprites["battlebox#{i}"].x += 22
  1179. end
  1180. end
  1181. wait(1)
  1182. end
  1183. for j in 0...2
  1184. for m in 0...max
  1185. m = @firstsendout ? m : 0
  1186. i = @firstsendout ? [1,3][m] : battlerindex
  1187. @sprites["pokemon#{i}"].zoom_x -= 0.1*@vector.zoom1
  1188. @sprites["pokemon#{i}"].zoom_y -= 0.1*@vector.zoom1
  1189. @sprites["pokemon#{i}"].still
  1190. burst["#{i}"].update
  1191. @sprites["battlebox#{i}"].x -= 2 if EBUISTYLE==1
  1192. playBattlerCry(@battle.battlers[i]) if j == 0
  1193. end
  1194. wait(1)
  1195. end
  1196. for j in 0...18
  1197. for m in 0...max
  1198. m = @firstsendout ? m : 0
  1199. i = @firstsendout ? [1,3][m] : battlerindex
  1200. burst["#{i}"].update
  1201. burst["#{i}"].dispose if j == 17
  1202. next if j < 8
  1203. @sprites["pokemon#{i}"].tone.red -= 51 if @sprites["pokemon#{i}"].tone.red > 0
  1204. @sprites["pokemon#{i}"].tone.green -= 51 if @sprites["pokemon#{i}"].tone.green > 0
  1205. @sprites["pokemon#{i}"].tone.blue -= 51 if @sprites["pokemon#{i}"].tone.blue > 0
  1206. end
  1207. wait(1)
  1208. end
  1209. burst = nil
  1210. # dropping Pokemon onto the ground
  1211. for j in 0...12
  1212. for m in 0...max
  1213. m = @firstsendout ? m : 0
  1214. i = @firstsendout ? [1,3][m] : battlerindex
  1215. if j == 11
  1216. @sprites["pokemon#{i}"].showshadow = true
  1217. elsif j > 0
  1218. @sprites["pokemon#{i}"].y += 5 if !dig[m]
  1219. else
  1220. @sprites["pokemon#{i}"].y += orgcord[m] - @sprites["pokemon#{i}"].oy if !dig[m]
  1221. @sprites["pokemon#{i}"].oy = orgcord[m] if !dig[m]
  1222. end
  1223. end
  1224. wait(1) if j > 0 && j < 11
  1225. end
  1226. # handler for screenshake (and weight animation upon entry)
  1227. for m in 0...max
  1228. m = @firstsendout ? m : 0
  1229. i = @firstsendout ? [1,3][m] : battlerindex
  1230. val = getBattlerMetrics(metrics,@battle.battlers[i]); val = 1 if dig[m]
  1231. dust["#{i}"] = EBDustParticle.new(@viewport,@sprites["pokemon#{i}"],1)
  1232. @sprites["pokeball#{i}"].dispose
  1233. alt.push(val)
  1234. end
  1235. shake = false
  1236. heavy = false
  1237. onlydig = false
  1238. for m in 0...max
  1239. i = @firstsendout ? [1,3][m] : battlerindex
  1240. shake = true if alt[m] < 1 && !dig[m]
  1241. heavy = true if @battle.battlers[i].weight*0.1 >= 291 && alt[m] < 1 && !dig[m]
  1242. end
  1243. for m in 0...max; onlydig = true if !shake && dig[m]; end
  1244. pbSEPlay("drop") if shake && !heavy
  1245. pbSEPlay("drop_heavy") if heavy
  1246. mult = heavy ? 2 : 1
  1247. for i in 0...8
  1248. next if onlydig
  1249. for m in 0...max
  1250. m = @firstsendout ? m : 0
  1251. j = @firstsendout ? [1,3][m] : battlerindex
  1252. next if alt[m] < 1
  1253. @sprites["pokemon#{j}"].y += (i/4 < 1) ? 4 : -4
  1254. end
  1255. if shake
  1256. y=(i/4 < 1) ? 2 : -2
  1257. moveEntireScene(0,y*mult)
  1258. end
  1259. wait(1)
  1260. end
  1261. # dust animation upon entry of heavy pokemon
  1262. for j in 0..24
  1263. next if !heavy
  1264. for m in 0...max
  1265. m = @firstsendout ? m : 0
  1266. i = @firstsendout ? [1,3][m] : battlerindex
  1267. dust["#{i}"].update if @battle.battlers[i].weight*0.1 >= 291 && alt[m] < 1
  1268. dust["#{i}"].dispose if j == 24
  1269. end
  1270. wait(1,true) if j < 24
  1271. end
  1272. dust = nil
  1273. # shiny animation upon entry
  1274. for m in 0...max
  1275. m = @firstsendout ? m : 0
  1276. i = @firstsendout ? [1,3][m] : battlerindex
  1277. pbCommonAnimation("Shiny",@battle.battlers[i],nil) if shinyBattler?(@battle.battlers[i])
  1278. end
  1279. @sendingOut = false
  1280. return true
  1281. end
  1282. #=============================================================================
  1283. # New methods of displaying PokemonSendOut animations
  1284. #=============================================================================
  1285. alias pbSendOut_ebs pbSendOut unless self.method_defined?(:pbSendOut_ebs)
  1286. def pbSendOut(battlerindex,pkmn) # Player sending out Pokémon
  1287. # initial configuration of used variables
  1288. metrics=load_data("Data/metrics.dat")
  1289. balltype = []
  1290. ballframe = 0
  1291. dig = []
  1292. alt = []
  1293. curve = []
  1294. orgcord = []
  1295. burst = {}
  1296. dust = {}
  1297. # the amount of current Pokemon handled
  1298. max = @firstsendout ? (@battle.doublebattle ? 2 : 1) : 1
  1299. defaultvector = @battle.doublebattle ? VECTOR2 : VECTOR1
  1300. # sets up Pokemon sprites, Pokeballs and databoxes
  1301. for m in 0...max
  1302. m = @firstsendout ? m : 0
  1303. i = @firstsendout ? [0,2][m] : battlerindex
  1304. @sprites["battlebox#{i}"].x = @viewport.rect.width + 10
  1305. @sprites["battlebox#{i}"].y = @battle.doublebattle ? [180,0,232,0][i] : [204,0,232,0][i]
  1306.  
  1307. @sprites["pokeball#{i}"] = Sprite.new(@viewport)
  1308. @sprites["pokeball#{i}"].bitmap=BitmapCache.load_bitmap("#{checkEBFolderPath}/pokeballs")
  1309. balltype.push(@battle.battlers[i].pokemon.ballused)
  1310. balltype[m] = 0 if balltype[m]*41 >= @sprites["pokeball#{i}"].bitmap.width
  1311. @sprites["pokeball#{i}"].src_rect.set(balltype[m]*41,ballframe*40,41,40)
  1312. @sprites["pokeball#{i}"].ox = 20
  1313. @sprites["pokeball#{i}"].oy = 20
  1314. @sprites["pokeball#{i}"].zoom_x = 0.75
  1315. @sprites["pokeball#{i}"].zoom_y = 0.75
  1316. @sprites["pokeball#{i}"].z = 19
  1317. @sprites["pokeball#{i}"].opacity = 0
  1318.  
  1319. species = getBattlerPokemon(@battle.battlers[i]).species
  1320. handled = false
  1321. for poke in [:DIGLETT,:DUGTRIO]
  1322. num = getConst(PBSpecies,poke)
  1323. next if num.nil? || handled
  1324. if species == num
  1325. dig.push(true)
  1326. handled = true
  1327. end
  1328. end
  1329. dig.push(false) if !handled
  1330.  
  1331. @sprites["pokemon#{i}"].setPokemonBitmap(getBattlerPokemon(@battle.battlers[i]),true)
  1332. @sprites["pokemon#{i}"].showshadow = false
  1333. orgcord.push(@sprites["pokemon#{i}"].oy)
  1334. @sprites["pokemon#{i}"].oy = @sprites["pokemon#{i}"].height/2 if !dig[m]
  1335. @sprites["pokemon#{i}"].tone = Tone.new(255,255,255)
  1336. @sprites["pokemon#{i}"].opacity = 255
  1337. @sprites["pokemon#{i}"].visible = false
  1338. end
  1339. # vector alignment
  1340. @vector.set(@firstsendout ? SENDOUTVECTOR1 : SENDOUTVECTOR2)
  1341. (@firstsendout ? 44 : 20).times do
  1342. for m in 0...max
  1343. next if !@firstsendout
  1344. t = ["","B"][m]
  1345. @sprites["player#{t}"].opacity += 25.5 if @sprites["player#{t}"]
  1346. end
  1347. wait(1,true)
  1348. end
  1349. # player throw animation
  1350. for j in 0...7
  1351. next if !@firstsendout
  1352. for m in 0...max
  1353. t = ["","B"][m]
  1354. if @sprites["player#{t}"]
  1355. @sprites["player#{t}"].src_rect.x += @sprites["player#{t}"].bitmap.width/4 if j == 0
  1356. @sprites["player#{t}"].x -= 2 if j > 0
  1357. end
  1358. end
  1359. wait(1,true)
  1360. end
  1361. wait(6,true) if @firstsendout
  1362. for j in 0...4
  1363. next if !@firstsendout
  1364. for m in 0...max
  1365. t = ["","B"][m]
  1366. if @sprites["player#{t}"]
  1367. @sprites["player#{t}"].src_rect.x += @sprites["player#{t}"].bitmap.width/4 if j%2==0
  1368. @sprites["player#{t}"].x += 3
  1369. end
  1370. end
  1371. wait(1,true)
  1372. end
  1373. pbSEPlay("throw")
  1374. addzoom = @sprites["playerbase"].zoom_x*2
  1375. # calculating the curve for the Pokeball trajectory
  1376. posX = @firstsendout ? [80,30] : [100,40]
  1377. posY = @firstsendout ? [40,160,120] : [70,170,120]
  1378. z1 = @firstsendout ? addzoom : 1
  1379. z2 = @firstsendout ? addzoom : 2
  1380. z3 = @firstsendout ? 1 : 2
  1381. for m in 0...max
  1382. m = @firstsendout ? m : 0
  1383. i = @firstsendout ? [0,2][m] : battlerindex
  1384. curve.push(
  1385. calculateCurve(
  1386. @sprites["pokemon#{i}"].x-posX[0],@sprites["playerbase"].y-posY[0]*z1-(orgcord[m]-@sprites["pokemon#{i}"].oy)*z2,
  1387. @sprites["pokemon#{i}"].x-posX[1],@sprites["playerbase"].y-posY[1]*z1-(orgcord[m]-@sprites["pokemon#{i}"].oy)*z2,
  1388. @sprites["pokemon#{i}"].x,@sprites["playerbase"].y-posY[2]*z1-(orgcord[m]-@sprites["pokemon#{i}"].oy)*z2,28
  1389. )
  1390. )
  1391. @sprites["pokeball#{i}"].zoom_x *= addzoom
  1392. @sprites["pokeball#{i}"].zoom_y *= addzoom
  1393. end
  1394. # initial Pokeball throwing animation
  1395. for j in 0...48
  1396. ballframe += 1
  1397. ballframe = 0 if ballframe > 7
  1398. for m in 0...max
  1399. m = @firstsendout ? m : 0
  1400. i = @firstsendout ? [0,2][m] : battlerindex
  1401. t = ["","2"][m]
  1402. @sprites["pokeball#{i}"].src_rect.set(balltype[m]*41,ballframe*40,41,40)
  1403. @sprites["pokeball#{i}"].x = curve[m][j][0] if j < 28
  1404. @sprites["pokeball#{i}"].y = curve[m][j][1] if j < 28
  1405. @sprites["pokeball#{i}"].opacity += 42
  1406. end
  1407. @sprites["plArrow"].hide if @battle.opponent && SHOWPARTYARROWS && EBUISTYLE < 2
  1408. wait(1)
  1409. end
  1410. # configuring the Y position of Pokemon sprites
  1411. for m in 0...max
  1412. m = @firstsendout ? m : 0
  1413. i = @firstsendout ? [0,2][m] : battlerindex
  1414. @sprites["pokemon#{i}"].visible = true
  1415. @sprites["pokemon#{i}"].y -= 120 + (orgcord[m] - @sprites["pokemon#{i}"].oy)*z3 if !dig[m]
  1416. @sprites["pokemon#{i}"].zoom_x = 0
  1417. @sprites["pokemon#{i}"].zoom_y = 0
  1418. @sprites["battlebox#{i}"].appear
  1419.  
  1420. burst["#{i}"] = EBBallBurst.new(@viewport,@sprites["pokeball#{i}"].x,@sprites["pokeball#{i}"].y,29,(@firstsendout ? 1 : 2),balltype[m])
  1421. end
  1422. # starting Pokemon release animation
  1423. pbSEPlay("recall")
  1424. clearMessageWindow(true)
  1425. for j in 0...16
  1426. for m in 0...max
  1427. m = @firstsendout ? m : 0
  1428. i = @firstsendout ? [0,2][m] : battlerindex
  1429. t = ["","B"][m]
  1430. @sprites["player#{t}"].opacity -= 25.5 if @firstsendout if @sprites["player#{t}"]
  1431. burst["#{i}"].update
  1432. next if j < 4
  1433. @sprites["pokeball#{i}"].opacity -= 51
  1434. if @firstsendout
  1435. @sprites["pokemon#{i}"].zoom_x += 0.05*addzoom*2
  1436. @sprites["pokemon#{i}"].zoom_y += 0.05*addzoom*2
  1437. else
  1438. @sprites["pokemon#{i}"].zoom_x += 0.1*@vector.zoom1*2
  1439. @sprites["pokemon#{i}"].zoom_y += 0.1*@vector.zoom1*2
  1440. end
  1441. @sprites["pokemon#{i}"].still
  1442. if EBUISTYLE==2
  1443. @sprites["battlebox#{i}"].show
  1444. elsif EBUISTYLE==0
  1445. @sprites["battlebox#{i}"].update
  1446. else
  1447. @sprites["battlebox#{i}"].x -= 22
  1448. end
  1449. end
  1450. wait(1)
  1451. end
  1452. for j in 0...2
  1453. for m in 0...max
  1454. m = @firstsendout ? m : 0
  1455. i = @firstsendout ? [0,2][m] : battlerindex
  1456. if @firstsendout
  1457. @sprites["pokemon#{i}"].zoom_x -= 0.05*addzoom*2
  1458. @sprites["pokemon#{i}"].zoom_y -= 0.05*addzoom*2
  1459. else
  1460. @sprites["pokemon#{i}"].zoom_x -= 0.1*@vector.zoom1*2
  1461. @sprites["pokemon#{i}"].zoom_y -= 0.1*@vector.zoom1*2
  1462. end
  1463. @sprites["pokemon#{i}"].still
  1464. burst["#{i}"].update
  1465. @sprites["battlebox#{i}"].x += 2 if EBUISTYLE==1
  1466. playBattlerCry(@battle.battlers[i]) if j == 0
  1467. end
  1468. wait(1)
  1469. end
  1470. for j in 0...18
  1471. for m in 0...max
  1472. m = @firstsendout ? m : 0
  1473. i = @firstsendout ? [0,2][m] : battlerindex
  1474. burst["#{i}"].update
  1475. burst["#{i}"].dispose if j == 17
  1476. next if j < 8
  1477. @sprites["pokemon#{i}"].tone.red -= 51 if @sprites["pokemon#{i}"].tone.red > 0
  1478. @sprites["pokemon#{i}"].tone.green -= 51 if @sprites["pokemon#{i}"].tone.green > 0
  1479. @sprites["pokemon#{i}"].tone.blue -= 51 if @sprites["pokemon#{i}"].tone.blue > 0
  1480. end
  1481. wait(1)
  1482. end
  1483. burst = nil
  1484. # dropping Pokemon onto the ground
  1485. if !@firstsendout
  1486. for m in 0...max
  1487. m = @firstsendout ? m : 0
  1488. i = @firstsendout ? [0,2][m] : battlerindex
  1489. @sprites["pokemon#{i}"].y += (orgcord[m] - @sprites["pokemon#{i}"].oy)*2 if !dig[m]
  1490. @sprites["pokemon#{i}"].oy = orgcord[m] if !dig[m]
  1491. end
  1492. end
  1493. for j in 0...12
  1494. for m in 0...max
  1495. m = @firstsendout ? m : 0
  1496. i = @firstsendout ? [0,2][m] : battlerindex
  1497. if j == 11
  1498. @sprites["pokemon#{i}"].showshadow = true
  1499. elsif j > 0
  1500. @sprites["pokemon#{i}"].y += 12 if !dig[m]
  1501. else
  1502. @sprites["pokemon#{i}"].y += orgcord[m] - @sprites["pokemon#{i}"].oy if !dig[m]
  1503. @sprites["pokemon#{i}"].oy = orgcord[m] if !dig[m]
  1504. end
  1505. end
  1506. wait(1) if j > 0 && j < 11
  1507. end
  1508. # handler for screenshake (and weight animation upon entry)
  1509. for m in 0...max
  1510. m = @firstsendout ? m : 0
  1511. i = @firstsendout ? [0,2][m] : battlerindex
  1512. val = getBattlerMetrics(metrics,@battle.battlers[i]); val = 1 if dig[m]
  1513. dust["#{i}"] = EBDustParticle.new(@viewport,@sprites["pokemon#{i}"],(@firstsendout ? 1 : 2))
  1514. @sprites["pokeball#{i}"].dispose
  1515. alt.push(val)
  1516. end
  1517. shake = false
  1518. heavy = false
  1519. onlydig = false
  1520. for m in 0...max
  1521. i = @firstsendout ? [0,2][m] : battlerindex
  1522. shake = true if alt[m] < 1 && !dig[m]
  1523. heavy = true if @battle.battlers[i].weight*0.1 >= 291 && alt[m] < 1 && !dig[m]
  1524. end
  1525. for m in 0...max; onlydig = true if !shake && dig[m]; end
  1526. pbSEPlay("drop") if shake && !heavy
  1527. pbSEPlay("drop_heavy") if heavy
  1528. mult = heavy ? 2 : 1
  1529. for i in 0...8
  1530. next if onlydig
  1531. for m in 0...max
  1532. m = @firstsendout ? m : 0
  1533. j = @firstsendout ? [0,2][m] : battlerindex
  1534. next if alt[m] < 1
  1535. @sprites["pokemon#{j}"].y += (i/4 < 1) ? 4 : -4
  1536. end
  1537. if shake
  1538. y=(i/4 < 1) ? 2 : -2
  1539. moveEntireScene(0,y*mult)
  1540. end
  1541. wait(1)
  1542. end
  1543. # dust animation upon entry of heavy pokemon
  1544. for j in 0..24
  1545. next if !heavy
  1546. for m in 0...max
  1547. m = @firstsendout ? m : 0
  1548. i = @firstsendout ? [0,2][m] : battlerindex
  1549. dust["#{i}"].update if @battle.battlers[i].weight*0.1 >= 291 && alt[m] < 1
  1550. dust["#{i}"].dispose if j == 24
  1551. end
  1552. wait(1,true) if j < 24
  1553. end
  1554. dust = nil
  1555. # shiny animation upon entry
  1556. for m in 0...max
  1557. m = @firstsendout ? m : 0
  1558. i = @firstsendout ? [0,2][m] : battlerindex
  1559. pbCommonAnimation("Shiny",@battle.battlers[i],nil) if shinyBattler?(@battle.battlers[i])
  1560. end
  1561. @vector.set(defaultvector)
  1562. wait(20,true)
  1563. if USELOWHPBGM && !@battle.doublebattle
  1564. pkmn = @battle.battlers[@firstsendout ? 0 : battlerindex]
  1565. if pkmn.hp <= pkmn.totalhp*0.25 && pkmn.hp > 0
  1566. $game_system.bgm_memorize
  1567. pbBGMPlay("lowhpbattle")
  1568. @lowHPBGM = true
  1569. end
  1570. end
  1571. @sendingOut = false
  1572. @firstsendout = false
  1573. return true
  1574. end
  1575. #=============================================================================
  1576. # All the various types of displaying messages in battle
  1577. #=============================================================================
  1578. def clearMessageWindow(force=false)
  1579. unless force
  1580. return if @sendingOut
  1581. end
  1582. @sprites["messagewindow"].text=""
  1583. @sprites["messagewindow"].refresh
  1584. @sprites["messagebox"].visible=false
  1585. end
  1586.  
  1587. def windowVisible?
  1588. return @sprites["messagebox"].visible
  1589. end
  1590.  
  1591. def changeMessageViewport(viewport=nil)
  1592. @sprites["messagebox"].viewport=(@sprites["messagebox"].viewport==@msgview) ? viewport : @msgview
  1593. @sprites["messagewindow"].viewport=(@sprites["messagewindow"].viewport==@msgview) ? viewport : @msgview
  1594. end
  1595.  
  1596. alias pbFrameUpdate_ebs pbFrameUpdate unless self.method_defined?(:pbFrameUpdate_ebs)
  1597. def pbFrameUpdate(cw=nil)
  1598. cw.update if cw
  1599. animateBattleSprites(true)
  1600. end
  1601.  
  1602. alias pbShowWindow_ebs pbShowWindow unless self.method_defined?(:pbShowWindow_ebs)
  1603. def pbShowWindow(windowtype)
  1604. if EBUISTYLE==0
  1605. return pbShowWindow_ebs(windowtype)
  1606. end
  1607. @sprites["messagebox"].visible = (windowtype==MESSAGEBOX ||
  1608. windowtype==COMMANDBOX ||
  1609. windowtype==FIGHTBOX)# ||
  1610. #windowtype==BLANK )
  1611. @sprites["messagewindow"].visible = (windowtype==MESSAGEBOX)
  1612. end
  1613.  
  1614. alias pbWaitMessage_ebs pbWaitMessage unless self.method_defined?(:pbWaitMessage_ebs)
  1615. def pbWaitMessage; end
  1616.  
  1617. def databoxVisible(val=true,omit=false)
  1618. if !omit
  1619. @sprites["messagebox"].visible = false if val && @messagemode
  1620. end
  1621. return if EBUISTYLE < 2
  1622. for i in 0...4
  1623. next if i%2==1
  1624. @sprites["battlebox#{i}"].visible = val if @sprites["battlebox#{i}"]
  1625. end
  1626. end
  1627.  
  1628. alias pbDisplay_ebs pbDisplay unless self.method_defined?(:pbDisplay_ebs)
  1629. def pbDisplay(msg,brief=false)
  1630. databoxVisible(false)
  1631. pbDisplayMessage(msg,brief)
  1632. clearMessageWindow
  1633. databoxVisible(!windowVisible?)
  1634. end
  1635.  
  1636. alias pbDisplayMessage_ebs pbDisplayMessage unless self.method_defined?(:pbDisplayMessage_ebs)
  1637. def pbDisplayMessage(msg,brief=false)
  1638. return clearMessageWindow if msg==""
  1639. pbWaitMessage
  1640. pbRefresh
  1641. pbShowWindow(MESSAGEBOX)
  1642. cw=@sprites["messagewindow"]
  1643. cw.text=msg
  1644. i=0
  1645. loop do
  1646. animateBattleSprites(true)
  1647. pbGraphicsUpdate
  1648. pbInputUpdate
  1649. cw.update
  1650. if i==40
  1651. cw.text=""
  1652. cw.visible=false
  1653. return
  1654. end
  1655. if Input.trigger?(Input::C) || (defined?($mouse) && $mouse.leftClick?) || @abortable
  1656. if cw.pausing?
  1657. pbPlayDecisionSE() if !@abortable
  1658. cw.resume
  1659. end
  1660. end
  1661. if !cw.busy?
  1662. if brief
  1663. 10.times do
  1664. pbGraphicsUpdate
  1665. pbFrameUpdate(cw)
  1666. end
  1667. #@briefmessage=true
  1668. return
  1669. end
  1670. i+=1
  1671. end
  1672. end
  1673. end
  1674.  
  1675. alias pbDisplayPausedMessage_ebs pbDisplayPausedMessage unless self.method_defined?(:pbDisplayPausedMessage_ebs)
  1676. def pbDisplayPausedMessage(msg)
  1677. return clearMessageWindow if msg==""
  1678. pbWaitMessage
  1679. pbRefresh
  1680. pbShowWindow(MESSAGEBOX)
  1681. if @messagemode
  1682. @switchscreen.pbDisplay(msg)
  1683. return
  1684. end
  1685. cw=@sprites["messagewindow"]
  1686. cw.text=_ISPRINTF("{1:s}\1",msg)
  1687. loop do
  1688. animateBattleSprites(true)
  1689. pbGraphicsUpdate
  1690. pbInputUpdate
  1691. if Input.trigger?(Input::C) || (defined?($mouse) && $mouse.leftClick?) || @abortable
  1692. if cw.busy?
  1693. pbPlayDecisionSE() if cw.pausing? && !@abortable
  1694. cw.resume
  1695. elsif !inPartyAnimation?
  1696. cw.text=""
  1697. pbPlayDecisionSE()
  1698. cw.visible=false if @messagemode
  1699. return
  1700. end
  1701. end
  1702. cw.update
  1703. end
  1704. end
  1705.  
  1706. alias pbShowCommands_ebs pbShowCommands unless self.method_defined?(:pbShowCommands_ebs)
  1707. def pbShowCommands(msg,commands,defaultValue)
  1708. return pbShowCommands_ebs(msg,commands,defaultValue) if EBUISTYLE==0
  1709. pbWaitMessage
  1710. pbRefresh
  1711. self.databoxVisible(false)
  1712. pbShowWindow(MESSAGEBOX)
  1713. dw=@sprites["messagewindow"]
  1714. dw.text=msg
  1715. cw = NewChoiceSel.new(@viewport,commands)
  1716. pbRefresh
  1717. loop do
  1718. animateBattleSprites(true)
  1719. pbGraphicsUpdate
  1720. pbInputUpdate
  1721. cw.update
  1722. dw.update
  1723. if Input.trigger?(Input::B) && defaultValue >=0
  1724. if dw.busy?
  1725. pbPlayDecisionSE() if dw.pausing?
  1726. dw.resume
  1727. else
  1728. pbSEPlay("SE_Select2")
  1729. cw.dispose(self)
  1730. dw.text=""
  1731. self.databoxVisible(!self.windowVisible?)
  1732. return defaultValue
  1733. end
  1734. end
  1735. if Input.trigger?(Input::C) || (defined?($mouse) && cw.over && $mouse.leftClick?)
  1736. if dw.busy?
  1737. pbPlayDecisionSE() if dw.pausing?
  1738. dw.resume
  1739. else
  1740. pbSEPlay("SE_Select2")
  1741. cw.dispose(self)
  1742. dw.text=""
  1743. self.databoxVisible(!self.windowVisible?)
  1744. return cw.index
  1745. end
  1746. end
  1747. end
  1748. end
  1749.  
  1750. alias pbForgetMove_ebs pbForgetMove unless self.method_defined?(:pbForgetMove_ebs)
  1751. def pbForgetMove(pokemon,moveToLearn)
  1752. for i in 0...4
  1753. @sprites["battlebox#{i}"].visible=false if @sprites["battlebox#{i}"]
  1754. end
  1755. ret = pbForgetMove_ebs(pokemon,moveToLearn)
  1756. for i in 0...4
  1757. @sprites["battlebox#{i}"].visible=true if @sprites["battlebox#{i}"]
  1758. end
  1759. return ret
  1760. end
  1761.  
  1762. alias pbNameEntry_ebs pbNameEntry unless self.method_defined?(:pbNameEntry_ebs)
  1763. def pbNameEntry(*args)
  1764. vis = [false,false,false,false]
  1765. for i in 0...4
  1766. if @sprites["battlebox#{i}"]
  1767. vis[i] = @sprites["battlebox#{i}"].visible
  1768. @sprites["battlebox#{i}"].visible=false
  1769. end
  1770. end
  1771. ret = pbNameEntry_ebs(*args)
  1772. for i in 0...4
  1773. @sprites["battlebox#{i}"].visible=vis[i] if @sprites["battlebox#{i}"]
  1774. end
  1775. return ret
  1776. end
  1777.  
  1778. alias pbShowPokedex_ebs pbShowPokedex unless self.method_defined?(:pbShowPokedex_ebs)
  1779. def pbShowPokedex(*args)
  1780. vis = [false,false,false,false]
  1781. for i in 0...4
  1782. if @sprites["battlebox#{i}"]
  1783. vis[i] = @sprites["battlebox#{i}"].visible
  1784. @sprites["battlebox#{i}"].visible=false
  1785. end
  1786. end
  1787. ret = pbShowPokedex_ebs(*args)
  1788. for i in 0...4
  1789. @sprites["battlebox#{i}"].visible=vis[i] if @sprites["battlebox#{i}"]
  1790. end
  1791. return ret
  1792. end
  1793. #=============================================================================
  1794. # Ability messages
  1795. #=============================================================================
  1796. def showAbilityMessage(battler,hide=true)
  1797. return if battler.pokemon.nil? || (!EFFECTMESSAGES && !INCLUDEGEN6)
  1798. effect=PBAbilities.getName(battler.ability)
  1799. bitmap=pbBitmap("#{checkEBFolderPath}/abilityMessage")
  1800. rect=(battler.index%2==0) ? Rect.new(0,56,280,56) : Rect.new(0,0,280,56)
  1801. baseColor=PokeBattle_SceneConstants::MESSAGEBASECOLOR
  1802. shadowColor=PokeBattle_SceneConstants::MESSAGESHADOWCOLOR
  1803. @sprites["abilityMessage"].bitmap.clear
  1804. @sprites["abilityMessage"].bitmap.blt(0,0,bitmap,rect)
  1805. bitmap=@sprites["abilityMessage"].bitmap
  1806. pbDrawOutlineText(bitmap,38,-3,280-38,bitmap.font.size,_INTL("{1}'s",battler.pokemon.name),baseColor,shadowColor,0)
  1807. pbDrawOutlineText(bitmap,0,27,280-28,bitmap.font.size,"#{effect}",baseColor,shadowColor,2)
  1808. @sprites["abilityMessage"].x=(battler.index%2==0) ? -280 : Graphics.width
  1809. o = @battle.doublebattle ? 30 : 0
  1810. @sprites["abilityMessage"].y=(battler.index%2==0) ? @vector.y - 128 - o : @vector.y2 - 64 + o
  1811. pbSEPlay("BW_ability")
  1812. 10.times do
  1813. @sprites["abilityMessage"].x+=(battler.index%2==0) ? 28 : -28
  1814. @sprites["abilityMessage"].zoom_y+=0.1
  1815. animateBattleSprites
  1816. pbGraphicsUpdate
  1817. end
  1818. t=255
  1819. @sprites["abilityMessage"].tone=Tone.new(t,t,t)
  1820. 50.times do
  1821. t-=25.5 if t > 0
  1822. @sprites["abilityMessage"].tone=Tone.new(t,t,t)
  1823. animateBattleSprites
  1824. pbGraphicsUpdate
  1825. end
  1826. pbHideEffect(battler) if hide
  1827. end
  1828.  
  1829. def hideAbilityMessage(battler)
  1830. return if !EFFECTMESSAGES && !INCLUDEGEN6
  1831. 10.times do
  1832. @sprites["abilityMessage"].x+=(battler.index%2==0) ? -28 : 28
  1833. @sprites["abilityMessage"].zoom_y-=0.1
  1834. animateBattleSprites
  1835. pbGraphicsUpdate
  1836. end
  1837. end
  1838.  
  1839. if INCLUDEGEN6 || EFFECTMESSAGES
  1840. alias displayEffMsg pbDisplayEffect unless !self.method_defined?(:displayEffMsg)
  1841. def pbDisplayEffect(battler,hide=true)
  1842. return displayEffMsg(battler,hide) if INCLUDEGEN6 && EBUISTYLE==0
  1843. return showAbilityMessage(battler,hide)
  1844. end
  1845. alias hideEffMsg pbHideEffect unless !self.method_defined?(:hideEffMsg)
  1846. def pbHideEffect(battler)
  1847. return hideEffMsg(battler) if INCLUDEGEN6 && EBUISTYLE==0
  1848. return hideAbilityMessage(battler)
  1849. end
  1850. end
  1851. #=============================================================================
  1852. # Safari Zone visuals
  1853. #=============================================================================
  1854. alias pbSafariStart_ebs pbSafariStart unless self.method_defined?(:pbSafariStart_ebs)
  1855. def pbSafariStart
  1856. return pbSafariStart_ebs if EBUISTYLE==0
  1857. @briefmessage=false
  1858. @sprites["battlebox0"]=NewSafariDataBox.new(@battle,@viewport)
  1859. @sprites["battlebox0"].x=Graphics.width+10
  1860. @sprites["battlebox0"].y=204
  1861. @sprites["battlebox0"].appear
  1862. 12.times do
  1863. @sprites["battlebox0"].x-=22
  1864. animateBattleSprites
  1865. Graphics.update
  1866. end
  1867. 2.times do
  1868. @sprites["battlebox0"].x+=2
  1869. animateBattleSprites
  1870. Graphics.update
  1871. end
  1872. pbRefresh
  1873. end
  1874.  
  1875. alias pbSafariCommandMenu_ebs pbSafariCommandMenu unless self.method_defined?(:pbSafariCommandMenu_ebs)
  1876. def pbSafariCommandMenu(index)
  1877. @orgPos=[@vector.x,@vector.y,@vector.angle,@vector.scale,@vector.zoom1] if @orgPos.nil?
  1878. cmd=pbSafariCommandMenu_ebs(index)
  1879. @idleTimer=-1
  1880. vector = @battle.doublebattle ? VECTOR2 : VECTOR1
  1881. @vector.set(vector)
  1882. @vector.inc=0.2
  1883. return cmd
  1884. end
  1885.  
  1886. def pbThrowBait
  1887. @briefmessage=false
  1888. frame=0
  1889. ball=sprintf("Graphics/Pictures/battleBait")
  1890. # sprites
  1891. coords=[@sprites["pokemon1"].x,@sprites["pokemon1"].y]
  1892. spritePoke=@sprites["pokemon1"]
  1893. spriteBall=IconSprite.new(0,0,@viewport)
  1894. spriteBall.visible=false
  1895. # pictures
  1896. pictureBall=PictureEx.new(spritePoke.z+1)
  1897. picturePoke=PictureEx.new(spritePoke.z)
  1898. dims=[spritePoke.x,spritePoke.y]
  1899. pokecenter=getSpriteCenter(@sprites["pokemon1"])
  1900. ballendy=PokeBattle_SceneConstants::FOEBATTLER_Y-4
  1901. # starting positions
  1902. pictureBall.moveVisible(1,true)
  1903. pictureBall.moveName(1,ball)
  1904. pictureBall.moveOrigin(1,PictureOrigin::Center)
  1905. pictureBall.moveXY(0,1,64,256)
  1906. picturePoke.moveVisible(1,true)
  1907. picturePoke.moveXY(0,1,coords[0],coords[1])
  1908. # directives
  1909. picturePoke.moveSE(1,"Audio/SE/throw")
  1910. pictureBall.moveCurve(30,1,64,256,Graphics.width/2,48,pokecenter[0]-(14*6),pokecenter[1])
  1911. pictureBall.moveAngle(30,1,-720)
  1912. pictureBall.moveAngle(0,pictureBall.totalDuration,0)
  1913. # Show Pokémon jumping before eating the bait
  1914. picturePoke.moveSE(50,"Audio/SE/jump")
  1915. picturePoke.moveXY(8,50,coords[0],coords[1]-8)
  1916. picturePoke.moveXY(8,58,coords[0],coords[1])
  1917. pictureBall.moveVisible(66,false)
  1918. picturePoke.moveSE(66,"Audio/SE/jump")
  1919. picturePoke.moveXY(8,66,coords[0],coords[1]-8)
  1920. picturePoke.moveXY(8,74,coords[0],coords[1])
  1921. # TODO: Show Pokémon eating the bait (pivots at the bottom right corner)
  1922. @playerfix=false
  1923. loop do
  1924. frame+=1
  1925. @sprites["player"].x-=8 if frame < 31
  1926. if frame%2==0 && frame >= (2*1) && frame <= (2*3)
  1927. @sprites["player"].src_rect.x+=(@sprites["player"].bitmap.width/4)
  1928. end
  1929. pictureBall.update
  1930. picturePoke.update
  1931. setPictureIconSprite(spriteBall,pictureBall)
  1932. setPictureSpriteEB(spritePoke,picturePoke)
  1933. moveEntireScene(-6,0,false) if frame<15
  1934. animateBattleSprites
  1935. pbGraphicsUpdate
  1936. pbInputUpdate
  1937. break if !pictureBall.running? && !picturePoke.running?
  1938. end
  1939. @vector.setXY(@orgPos[0],@orgPos[1])
  1940. @sprites["player"].src_rect.x=0
  1941. @playerfix=true
  1942. spriteBall.dispose
  1943. end
  1944.  
  1945. def pbThrowRock
  1946. @briefmessage=false
  1947. frame=0
  1948. ball=sprintf("Graphics/Pictures/battleRock")
  1949. anger=sprintf("Graphics/Pictures/battleAnger")
  1950. coords=[@sprites["pokemon1"].x,@sprites["pokemon1"].y]
  1951. # sprites
  1952. spritePoke=@sprites["pokemon1"]
  1953. spriteBall=IconSprite.new(0,0,@viewport)
  1954. spriteBall.visible=false
  1955. spriteAnger=IconSprite.new(0,0,@viewport)
  1956. spriteAnger.visible=false
  1957. # pictures
  1958. pictureBall=PictureEx.new(spritePoke.z+1)
  1959. picturePoke=PictureEx.new(spritePoke.z)
  1960. pictureAnger=PictureEx.new(spritePoke.z+1)
  1961. dims=[spritePoke.x,spritePoke.y]
  1962. pokecenter=getSpriteCenter(@sprites["pokemon1"])
  1963. ballendy=PokeBattle_SceneConstants::FOEBATTLER_Y-4
  1964. # starting positions
  1965. pictureBall.moveVisible(1,true)
  1966. pictureBall.moveName(1,ball)
  1967. pictureBall.moveOrigin(1,PictureOrigin::Center)
  1968. pictureBall.moveXY(0,1,64,256)
  1969. picturePoke.moveVisible(1,true)
  1970. picturePoke.moveXY(0,1,coords[0],coords[1])
  1971. pictureAnger.moveVisible(1,false)
  1972. pictureAnger.moveName(1,anger)
  1973. pictureAnger.moveXY(0,1,pokecenter[0]-56-(14*6),pokecenter[1]-48)
  1974. pictureAnger.moveOrigin(1,PictureOrigin::Center)
  1975. pictureAnger.moveZoom(0,1,100)
  1976. # directives
  1977. picturePoke.moveSE(1,"Audio/SE/throw")
  1978. pictureBall.moveCurve(30,1,64,256,Graphics.width/2,48,pokecenter[0]-(14*6),pokecenter[1])
  1979. pictureBall.moveAngle(30,1,-720)
  1980. pictureBall.moveAngle(0,pictureBall.totalDuration,0)
  1981. pictureBall.moveSE(30,"Audio/SE/notverydamage")
  1982. pictureBall.moveVisible(40,false)
  1983. # Show Pokémon being angry
  1984. pictureAnger.moveSE(48,"Audio/SE/jump")
  1985. pictureAnger.moveVisible(48,true)
  1986. pictureAnger.moveZoom(8,48,130)
  1987. pictureAnger.moveZoom(8,56,100)
  1988. pictureAnger.moveXY(0,64,pokecenter[0]+56-(14*6),pokecenter[1]-64)
  1989. pictureAnger.moveSE(64,"Audio/SE/jump")
  1990. pictureAnger.moveZoom(8,64,130)
  1991. pictureAnger.moveZoom(8,72,100)
  1992. pictureAnger.moveVisible(80,false)
  1993. @playerfix=false
  1994. loop do
  1995. frame+=1
  1996. @sprites["player"].x-=8 if frame < 31
  1997. if frame%2==0 && frame >= (2*1) && frame <= (2*3)
  1998. @sprites["player"].src_rect.x+=(@sprites["player"].bitmap.width/4)
  1999. end
  2000. pictureBall.update
  2001. picturePoke.update
  2002. pictureAnger.update
  2003. setPictureIconSprite(spriteBall,pictureBall)
  2004. setPictureIconSprite(spriteAnger,pictureAnger)
  2005. setPictureSpriteEB(spritePoke,picturePoke)
  2006. moveEntireScene(-6,0,false) if frame<15
  2007. animateBattleSprites
  2008. pbGraphicsUpdate
  2009. pbInputUpdate
  2010. break if !pictureBall.running? && !picturePoke.running? && !pictureAnger.running?
  2011. end
  2012. @vector.setXY(@orgPos[0],@orgPos[1])
  2013. @sprites["player"].src_rect.x=0
  2014. @playerfix=true
  2015. spriteBall.dispose
  2016. end
  2017. end
  2018. #===============================================================================
  2019. # Safari Zone compatibility
  2020. #===============================================================================
  2021. class PokeBattle_SafariZone
  2022. alias initialize_ebs initialize unless self.method_defined?(:initialize_ebs)
  2023.  
  2024. def initialize(scene,player,party2)
  2025. scene.safaribattle=true
  2026. initialize_ebs(scene,player,party2)
  2027. end
  2028. end
  2029. #===============================================================================
  2030. # Evolution scene
  2031. #===============================================================================
  2032. class PokemonEvolutionScene
  2033. # main update function
  2034. def update(poke=true,bar=false)
  2035. self.updateBackground
  2036. @sprites["poke"].update if poke
  2037. @sprites["poke2"].update if poke
  2038. if bar
  2039. @sprites["bar1"].y -= 8 if @sprites["bar1"].y > -@viewport.rect.height*0.5
  2040. @sprites["bar2"].y += 8 if @sprites["bar2"].y < @viewport.rect.height*1.5
  2041. end
  2042. end
  2043. # background update function
  2044. def updateBackground
  2045. for j in 0...6
  2046. @sprites["l#{j}"].y = @viewport.rect.height if @sprites["l#{j}"].y <= 0
  2047. t = (@sprites["l#{j}"].y.to_f/@viewport.rect.height)*255
  2048. @sprites["l#{j}"].tone = Tone.new(t,t,t)
  2049. z = ((@sprites["l#{j}"].y.to_f - @viewport.rect.height/2)/(@viewport.rect.height/2))*1.0
  2050. @sprites["l#{j}"].angle = (z < 0) ? 180 : 0
  2051. @sprites["l#{j}"].zoom_y = z.abs
  2052. @sprites["l#{j}"].y -= 2
  2053. end
  2054. end
  2055. # update for the particle effects
  2056. def updateParticles
  2057. for j in 0...16
  2058. @sprites["s#{j}"].visible = true
  2059. if @sprites["s#{j}"].opacity == 0
  2060. @sprites["s#{j}"].opacity = 255
  2061. @sprites["s#{j}"].speed = 1
  2062. @sprites["s#{j}"].x = @sprites["poke"].x
  2063. @sprites["s#{j}"].y = @sprites["poke"].y
  2064. x, y = randCircleCord(256)
  2065. @sprites["s#{j}"].end_x = @sprites["poke"].x - 256 + x
  2066. @sprites["s#{j}"].end_y = @sprites["poke"].y - 256 + y
  2067. end
  2068. @sprites["s#{j}"].x -= (@sprites["s#{j}"].x - @sprites["s#{j}"].end_x)*0.01*@sprites["s#{j}"].speed
  2069. @sprites["s#{j}"].y -= (@sprites["s#{j}"].y - @sprites["s#{j}"].end_y)*0.01*@sprites["s#{j}"].speed
  2070. @sprites["s#{j}"].opacity -= 4*@sprites["s#{j}"].speed
  2071. end
  2072. end
  2073. # update for the rays going out of the Pokemon
  2074. def updateRays(i)
  2075. for j in 0...8
  2076. next if j > i/8
  2077. if @sprites["r#{j}"].opacity == 0
  2078. @sprites["r#{j}"].opacity = 255
  2079. @sprites["r#{j}"].zoom_x = 0
  2080. @sprites["r#{j}"].zoom_y = 0
  2081. end
  2082. @sprites["r#{j}"].opacity -= 4
  2083. @sprites["r#{j}"].zoom_x += 0.04
  2084. @sprites["r#{j}"].zoom_y += 0.04
  2085. end
  2086. end
  2087. # initializes the evolution sequence
  2088. def pbStartScreen(pokemon,newspecies)
  2089. @pokemon = pokemon
  2090. @newspecies = newspecies
  2091. @sprites = {}
  2092. @viewport = Viewport.new(0,0,Graphics.width,Graphics.height)
  2093. @viewport.z = 99999
  2094. @viewport.color = Color.new(0,0,0,0)
  2095. # initial fading transition
  2096. 16.times do
  2097. @viewport.color.alpha += 16
  2098. pbWait(1)
  2099. end
  2100. # initializes bars for cutting the screen off
  2101. @sprites["bar1"] = Sprite.new(@viewport)
  2102. @sprites["bar1"].drawRect(@viewport.rect.width,@viewport.rect.height/2,Color.new(0,0,0))
  2103. @sprites["bar1"].z = 99999
  2104. @sprites["bar2"] = Sprite.new(@viewport)
  2105. @sprites["bar2"].drawRect(@viewport.rect.width,@viewport.rect.height/2,Color.new(0,0,0))
  2106. @sprites["bar2"].y = @viewport.rect.height/2
  2107. @sprites["bar2"].z = 99999
  2108. # initializes messages window
  2109. @sprites["msgwindow"] = Kernel.pbCreateMessageWindow(@viewport)
  2110. @sprites["msgwindow"].visible = false
  2111. @sprites["msgwindow"].z = 9999
  2112. # background graphics
  2113. @sprites["bg1"] = Sprite.new(@viewport)
  2114. @sprites["bg1"].bitmap = pbBitmap("Graphics/Pictures/EBS/evobg")
  2115. @sprites["bg2"] = Sprite.new(@viewport)
  2116. @sprites["bg2"].bitmap = pbBitmap("Graphics/Pictures/EBS/overlay")
  2117. @sprites["bg2"].z = 5
  2118. # particles for the background
  2119. for j in 0...6
  2120. @sprites["l#{j}"] = Sprite.new(@viewport)
  2121. @sprites["l#{j}"].bitmap = pbBitmap("Graphics/Pictures/EBS/line1")
  2122. @sprites["l#{j}"].y = (@viewport.rect.height/6)*j
  2123. @sprites["l#{j}"].ox = @sprites["l#{j}"].bitmap.width/2
  2124. @sprites["l#{j}"].x = @viewport.rect.width/2
  2125. end
  2126. # original Pokemon sprite
  2127. @sprites["poke"] = defined?(DynamicPokemonSprite) ? DynamicPokemonSprite.new(false,0,@viewport) : PokemonBattlerSprite.new(false,0,@viewport)
  2128. @sprites["poke"].setPokemonBitmap(@pokemon)
  2129. @sprites["poke"].showshadow = false if defined?(DynamicPokemonSprite)
  2130. @sprites["poke"].ox = @sprites["poke"].bitmap.width/2
  2131. @sprites["poke"].oy = @sprites["poke"].bitmap.height/2
  2132. @sprites["poke"].x = @viewport.rect.width/2
  2133. @sprites["poke"].y = @viewport.rect.height/2
  2134. @sprites["poke"].z = 50
  2135. # evolved Pokemon sprite
  2136. @sprites["poke2"] = defined?(DynamicPokemonSprite) ? DynamicPokemonSprite.new(false,0,@viewport) : PokemonBattlerSprite.new(false,0,@viewport)
  2137. @sprites["poke2"].setPokemonBitmap(@pokemon,false,@newspecies)
  2138. @sprites["poke2"].showshadow = false if defined?(DynamicPokemonSprite)
  2139. @sprites["poke2"].ox = @sprites["poke2"].bitmap.width/2
  2140. @sprites["poke2"].oy = @sprites["poke2"].bitmap.height/2
  2141. @sprites["poke2"].x = @viewport.rect.width/2
  2142. @sprites["poke2"].y = @viewport.rect.height/2
  2143. @sprites["poke2"].z = 50
  2144. @sprites["poke2"].zoom_x = 0
  2145. @sprites["poke2"].zoom_y = 0
  2146. @sprites["poke2"].tone = Tone.new(255,255,255)
  2147. # initializes the shine at the beginning animation
  2148. @sprites["shine"] = Sprite.new(@viewport)
  2149. @sprites["shine"].bitmap = pbBitmap("Graphics/Pictures/EBS/shine1")
  2150. @sprites["shine"].ox = @sprites["shine"].bitmap.width/2
  2151. @sprites["shine"].oy = @sprites["shine"].bitmap.height/2
  2152. @sprites["shine"].x = @sprites["poke"].x
  2153. @sprites["shine"].y = @sprites["poke"].y
  2154. @sprites["shine"].zoom_x = 0
  2155. @sprites["shine"].zoom_y = 0
  2156. @sprites["shine"].opacity = 0
  2157. @sprites["shine"].z = 60
  2158. # initializes the shine during animation
  2159. @sprites["shine2"] = Sprite.new(@viewport)
  2160. @sprites["shine2"].bitmap = pbBitmap("Graphics/Pictures/EBS/shine3")
  2161. @sprites["shine2"].ox = @sprites["shine2"].bitmap.width/2
  2162. @sprites["shine2"].oy = @sprites["shine2"].bitmap.height/2
  2163. @sprites["shine2"].x = @sprites["poke"].x
  2164. @sprites["shine2"].y = @sprites["poke"].y
  2165. @sprites["shine2"].zoom_x = 0
  2166. @sprites["shine2"].zoom_y = 0
  2167. @sprites["shine2"].opacity = 0
  2168. @sprites["shine2"].z = 40
  2169. # initializes the shine at the end
  2170. @sprites["shine3"] = Sprite.new(@viewport)
  2171. @sprites["shine3"].bitmap = pbBitmap("Graphics/Pictures/EBS/shine4")
  2172. @sprites["shine3"].ox = @sprites["shine3"].bitmap.width/2
  2173. @sprites["shine3"].oy = @sprites["shine3"].bitmap.height/2
  2174. @sprites["shine3"].x = @sprites["poke"].x
  2175. @sprites["shine3"].y = @sprites["poke"].y
  2176. @sprites["shine3"].zoom_x = 0.5
  2177. @sprites["shine3"].zoom_y = 0.5
  2178. @sprites["shine3"].opacity = 0
  2179. @sprites["shine3"].z = 60
  2180. # initializes particles
  2181. for j in 0...16
  2182. @sprites["s#{j}"] = Sprite.new(@viewport)
  2183. @sprites["s#{j}"].bitmap = pbBitmap("Graphics/Pictures/EBS/shine2")
  2184. @sprites["s#{j}"].ox = @sprites["s#{j}"].bitmap.width/2
  2185. @sprites["s#{j}"].oy = @sprites["s#{j}"].bitmap.height/2
  2186. @sprites["s#{j}"].x = @sprites["poke"].x
  2187. @sprites["s#{j}"].y = @sprites["poke"].y
  2188. @sprites["s#{j}"].z = 60
  2189. s = rand(4) + 1
  2190. x, y = randCircleCord(192)
  2191. @sprites["s#{j}"].end_x = @sprites["s#{j}"].x - 192 + x
  2192. @sprites["s#{j}"].end_y = @sprites["s#{j}"].y - 192 + y
  2193. @sprites["s#{j}"].speed = s
  2194. @sprites["s#{j}"].visible = false
  2195. end
  2196. # initializes light rays
  2197. rangle = []
  2198. for i in 0...8; rangle.push((360/8)*i + 15); end
  2199. for j in 0...8
  2200. @sprites["r#{j}"] = Sprite.new(@viewport)
  2201. @sprites["r#{j}"].bitmap = BitmapCache.load_bitmap("Graphics/Pictures/EBS/ray")
  2202. @sprites["r#{j}"].ox = 0
  2203. @sprites["r#{j}"].oy = @sprites["r#{j}"].bitmap.height/2
  2204. @sprites["r#{j}"].opacity = 0
  2205. @sprites["r#{j}"].zoom_x = 0
  2206. @sprites["r#{j}"].zoom_y = 0
  2207. @sprites["r#{j}"].x = @viewport.rect.width/2
  2208. @sprites["r#{j}"].y = @viewport.rect.height/2
  2209. a = rand(rangle.length)
  2210. @sprites["r#{j}"].angle = rangle[a]
  2211. @sprites["r#{j}"].z = 60
  2212. rangle.delete_at(a)
  2213. end
  2214. @viewport.color.alpha = 0
  2215. end
  2216.  
  2217. # closes the evolution screen.
  2218. def pbEndScreen
  2219. $game_temp.message_window_showing = false if $game_temp
  2220. @viewport.color = Color.new(0,0,0,0)
  2221. 16.times do
  2222. Graphics.update
  2223. self.update
  2224. @viewport.color.alpha += 16
  2225. end
  2226. pbDisposeSpriteHash(@sprites)
  2227. 16.times do
  2228. Graphics.update
  2229. @viewport.color.alpha -= 16
  2230. end
  2231. @viewport.dispose
  2232. end
  2233. # initial animation when starting evolution
  2234. def glow
  2235. t = 0
  2236. pbSEPlay("Flash")
  2237. 16.times do
  2238. Graphics.update
  2239. self.update(false)
  2240. @sprites["shine"].zoom_x += 0.08
  2241. @sprites["shine"].zoom_y += 0.08
  2242. @sprites["shine"].opacity += 16
  2243. t += 16
  2244. @sprites["poke"].tone = Tone.new(t,t,t)
  2245. @sprites["bar1"].y += 3
  2246. @sprites["bar2"].y -= 3
  2247. end
  2248. 16.times do
  2249. Graphics.update
  2250. self.update(false)
  2251. @sprites["shine"].zoom_x -= 0.02
  2252. @sprites["shine"].zoom_y -= 0.02
  2253. @sprites["shine"].opacity -= 16
  2254. t -= 16
  2255. @sprites["poke"].tone = Tone.new(t,t,t)
  2256. @sprites["bar1"].y += 3
  2257. @sprites["bar2"].y -= 3
  2258. self.updateParticles
  2259. end
  2260. end
  2261. # aniamtion to flash the screen after evolution is completed
  2262. def flash(cancel)
  2263. srt = cancel ? "poke" : "poke2"
  2264. pbSEPlay("Flash3") if !cancel
  2265. for key in @sprites.keys
  2266. next if ["bar1","bar2","bg1","bg2","l0","l1","l2","l3","l4","l5"].include?(key)
  2267. @sprites[key].visible = false
  2268. end
  2269. @sprites[srt].visible = true
  2270. @sprites[srt].zoom_x = 1
  2271. @sprites[srt].zoom_y = 1
  2272. @sprites[srt].tone = Tone.new(0,0,0)
  2273. for i in 0...(cancel ? 32 : 64)
  2274. Graphics.update
  2275. @viewport.color.alpha -= cancel ? 8 : 4
  2276. self.update(true,true)
  2277. end
  2278. return if cancel
  2279. pbSEPlay("Saint6")
  2280. for j in 0...64
  2281. @sprites["p#{j}"] = Sprite.new(@viewport)
  2282. n = [5,2][rand(2)]
  2283. @sprites["p#{j}"].bitmap = pbBitmap("Graphics/Pictures/EBS/shine#{n}")
  2284. @sprites["p#{j}"].z = 10
  2285. @sprites["p#{j}"].ox = @sprites["p#{j}"].bitmap.width/2
  2286. @sprites["p#{j}"].oy = @sprites["p#{j}"].bitmap.height/2
  2287. @sprites["p#{j}"].x = rand(@viewport.rect.width + 1)
  2288. @sprites["p#{j}"].y = @viewport.rect.height/2 + rand(@viewport.rect.height/2 - 64)
  2289. z = [0.2,0.4,0.5,0.6,0.8,1.0][rand(6)]
  2290. @sprites["p#{j}"].zoom_x = z
  2291. @sprites["p#{j}"].zoom_y = z
  2292. @sprites["p#{j}"].opacity = 0
  2293. @sprites["p#{j}"].speed = 2 + rand(5)
  2294. end
  2295. for i in 0...64
  2296. Graphics.update
  2297. self.update
  2298. for j in 0...64
  2299. @sprites["p#{j}"].opacity += (i < 32 ? 2 : -2)*@sprites["p#{j}"].speed
  2300. @sprites["p#{j}"].y -= 1 if i%@sprites["p#{j}"].speed == 0
  2301. if @sprites["p#{j}"].opacity > 128
  2302. @sprites["p#{j}"].zoom_x /= 1.5
  2303. @sprites["p#{j}"].zoom_y /= 1.5
  2304. end
  2305. end
  2306. end
  2307. end
  2308. # starts the evolution screen
  2309. def pbEvolution(cancancel=true)
  2310. # stops BGM and displays message
  2311. pbBGMStop()
  2312. 16.times do
  2313. Graphics.update
  2314. self.update
  2315. @sprites["bar1"].y -= @sprites["bar1"].bitmap.height/16
  2316. @sprites["bar2"].y += @sprites["bar2"].bitmap.height/16
  2317. end
  2318. @sprites["msgwindow"].visible = true
  2319. Kernel.pbMessageDisplay(@sprites["msgwindow"],_INTL("\\se[]What?\r\n{1} is evolving!\\^",@pokemon.name)) { self.update }
  2320. Kernel.pbMessageWaitForInput(@sprites["msgwindow"],100,true) { self.update }
  2321. @sprites["msgwindow"].visible = false
  2322. # plays Pokemon's cry
  2323. pbPlayCry(@pokemon)
  2324. pbCryFrameLength(@pokemon.species).times do
  2325. Graphics.update
  2326. self.update
  2327. end
  2328. pbBGMPlay("evolv")
  2329. canceled = false
  2330. # beginning glow effect
  2331. self.glow
  2332. k1 = 1 # zoom factor for the Pokemon
  2333. k2 = 1 # zoom factor for the shine
  2334. s = 1 # speed of the animation
  2335. @viewport.color = Color.new(255,255,255,0)
  2336. pbSEPlay("Heal4")
  2337. # main animation loop
  2338. for i in 0...256
  2339. k1 *= -1 if i%(32/s) == 0
  2340. k2 *= -1 if i%(16) == 0
  2341. s *= 2 if i%64 == 0 && i > 0 && s < 8
  2342. Graphics.update
  2343. Input.update
  2344. self.update(false)
  2345. self.updateParticles
  2346. self.updateRays(i)
  2347. @sprites["poke"].zoom_x += 0.03125*k1*s
  2348. @sprites["poke"].zoom_y += 0.03125*k1*s
  2349. @sprites["poke"].tone.red += 16
  2350. @sprites["poke"].tone.green += 16
  2351. @sprites["poke"].tone.blue += 16
  2352. @sprites["poke2"].zoom_x -= 0.03125*k1*s
  2353. @sprites["poke2"].zoom_y -= 0.03125*k1*s
  2354. if @sprites["shine2"].opacity < 255
  2355. @sprites["shine2"].opacity += 16
  2356. @sprites["shine2"].zoom_x += 0.08
  2357. @sprites["shine2"].zoom_y += 0.08
  2358. else
  2359. @sprites["shine2"].zoom_x += 0.01*k2
  2360. @sprites["shine2"].zoom_y += 0.01*k2
  2361. @sprites["shine2"].tone.red += 0.5
  2362. @sprites["shine2"].tone.green += 0.5
  2363. @sprites["shine2"].tone.blue += 0.5
  2364. end
  2365. if i >= 240
  2366. @sprites["shine3"].opacity += 16
  2367. @sprites["shine3"].zoom_x += 0.1
  2368. @sprites["shine3"].zoom_y += 0.1
  2369. end
  2370. @viewport.color.alpha += 32 if i >= 248
  2371. if Input.trigger?(Input::B) && cancancel
  2372. pbBGMStop()
  2373. canceled = true
  2374. break
  2375. end
  2376. end
  2377. @viewport.color = Color.new(255,255,255)
  2378. self.flash(canceled)
  2379. if canceled
  2380. # prints message when evolution is cancelled
  2381. @sprites["msgwindow"].visible = true
  2382. Kernel.pbMessageDisplay(@sprites["msgwindow"],_INTL("Huh?\r\n{1} stopped evolving!",@pokemon.name)) { self.update }
  2383. else
  2384. # creates the actual evolved Pokemon
  2385. self.createEvolved
  2386. end
  2387. end
  2388. # function used to create the newly evolved Pokemon
  2389. def createEvolved
  2390. frames = pbCryFrameLength(@newspecies)
  2391. # plays Pokemon's cry
  2392. pbBGMStop()
  2393. pbPlayCry(@newspecies)
  2394. frames.times do
  2395. Graphics.update
  2396. self.update
  2397. end
  2398. pbMEPlay("EvolutionSuccess")
  2399. # gets info of the new species
  2400. newspeciesname = PBSpecies.getName(@newspecies)
  2401. oldspeciesname = PBSpecies.getName(@pokemon.species)
  2402. @sprites["msgwindow"].visible = true
  2403. Kernel.pbMessageDisplay(@sprites["msgwindow"],_INTL("\\se[]Congratulations! Your {1} evolved into {2}!\\wt[80]",@pokemon.name,newspeciesname)) { self.update }
  2404. @sprites["msgwindow"].text = ""
  2405. removeItem = false
  2406. createSpecies = pbCheckEvolutionEx(@pokemon){|pokemon,evonib,level,poke|
  2407. if evonib == PBEvolution::Shedinja
  2408. # checks if a Pokeball is available for Shedinja
  2409. next poke if $PokemonBag.pbQuantity(getConst(PBItems,:POKEBALL))>0
  2410. elsif evonib == PBEvolution::TradeItem || evonib == PBEvolution::DayHoldItem || evonib == PBEvolution::NightHoldItem
  2411. # consumes evolutionary item
  2412. removeItem = true if poke == @newspecies
  2413. end
  2414. next -1
  2415. }
  2416. @pokemon.setItem(0) if removeItem
  2417. @pokemon.species = @newspecies
  2418. $Trainer.seen[@newspecies] = true
  2419. $Trainer.owned[@newspecies] = true
  2420. pbSeenForm(@pokemon)
  2421. @pokemon.name = newspeciesname if @pokemon.name == oldspeciesname
  2422. @pokemon.calcStats
  2423. # checking moves for new species
  2424. movelist = @pokemon.getMoveList
  2425. for i in movelist
  2426. if i[0] == @pokemon.level
  2427. # learning new moves
  2428. pbLearnMove(@pokemon,i[1],true) { self.update }
  2429. end
  2430. end
  2431. # adding new species of Pokemon to the party
  2432. if createSpecies>0 && $Trainer.party.length<6
  2433. newpokemon = @pokemon.clone
  2434. newpokemon.iv = @pokemon.iv.clone
  2435. newpokemon.ev = @pokemon.ev.clone
  2436. newpokemon.species = createSpecies
  2437. newpokemon.name = PBSpecies.getName(createSpecies)
  2438. newpokemon.setItem(0)
  2439. newpokemon.clearAllRibbons
  2440. newpokemon.markings = 0
  2441. newpokemon.ballused = 0
  2442. newpokemon.calcStats
  2443. newpokemon.heal
  2444. $Trainer.party.push(newpokemon)
  2445. $Trainer.seen[createSpecies] = true
  2446. $Trainer.owned[createSpecies] = true
  2447. pbSeenForm(newpokemon)
  2448. $PokemonBag.pbDeleteItem(getConst(PBItems,:POKEBALL))
  2449. end
  2450. end
  2451. end
  2452. #===============================================================================
  2453. # Hatching scene
  2454. #===============================================================================
  2455. class PokemonEggHatchScene
  2456. # main update function
  2457. def update
  2458. self.updateBackground
  2459. @sprites["poke"].update
  2460. return if @frame >= 5
  2461. if defined?(AnimatedBitmapWrapper)
  2462. @sprites["poke"].sprite.bitmap.blt((@sprites["poke"].bitmap.width - @cracks.width)/2,(@sprites["poke"].bitmap.height - @cracks.height)/2,@cracks.bitmap,Rect.new(0,0,@cracks.width,@cracks.height))
  2463. else
  2464. @sprites["poke"].bitmap.blt((@sprites["poke"].bitmap.width - @cracks.height)/2,(@sprites["poke"].bitmap.height - @cracks.height)/2,@cracks.bitmap,Rect.new(@cracks.height*@frame,0,@cracks.height,@cracks.height))
  2465. end
  2466. #@sprites["poke"].update
  2467. end
  2468. # background update function
  2469. def updateBackground
  2470. for j in 0...6
  2471. @sprites["l#{j}"].y = @viewport.rect.height if @sprites["l#{j}"].y <= 0
  2472. t = (@sprites["l#{j}"].y.to_f/@viewport.rect.height)*255
  2473. @sprites["l#{j}"].tone = Tone.new(t,t,t)
  2474. z = ((@sprites["l#{j}"].y.to_f - @viewport.rect.height/2)/(@viewport.rect.height/2))*1.0
  2475. @sprites["l#{j}"].angle = (z < 0) ? 180 : 0
  2476. @sprites["l#{j}"].zoom_y = z.abs
  2477. @sprites["l#{j}"].y -= 2
  2478. end
  2479. end
  2480. # advancing the frames
  2481. def advance
  2482. @frame += 1
  2483. 2.times do
  2484. @cracks.update
  2485. end
  2486. end
  2487. # initializes sprites for animation
  2488. def pbStartScene(pokemon)
  2489. @frame = 0
  2490. @sprites = {}
  2491. @pokemon = pokemon
  2492. @nicknamed = false
  2493. @viewport = Viewport.new(0,0,Graphics.width,Graphics.height)
  2494. @viewport.z = 99999
  2495. @viewport.color = Color.new(0,0,0,0)
  2496. # initial fading transition
  2497. 16.times do
  2498. @viewport.color.alpha += 16
  2499. pbWait(1)
  2500. end
  2501. # initializes bars for cutting the screen off
  2502. @sprites["bar1"] = Sprite.new(@viewport)
  2503. @sprites["bar1"].drawRect(@viewport.rect.width,@viewport.rect.height/2,Color.new(0,0,0))
  2504. @sprites["bar1"].z = 99999
  2505. @sprites["bar2"] = Sprite.new(@viewport)
  2506. @sprites["bar2"].drawRect(@viewport.rect.width,@viewport.rect.height/2,Color.new(0,0,0))
  2507. @sprites["bar2"].y = @viewport.rect.height/2
  2508. @sprites["bar2"].z = 99999
  2509. # background graphics
  2510. @sprites["bg1"] = Sprite.new(@viewport)
  2511. @sprites["bg1"].bitmap = pbBitmap("Graphics/Pictures/EBS/hatchbg")
  2512. @sprites["bg2"] = Sprite.new(@viewport)
  2513. @sprites["bg2"].bitmap = pbBitmap("Graphics/Pictures/EBS/overlay")
  2514. @sprites["bg2"].z = 5
  2515. # initializes messages window
  2516. @sprites["msgwindow"] = Kernel.pbCreateMessageWindow(@viewport)
  2517. @sprites["msgwindow"].visible = false
  2518. @sprites["msgwindow"].z = 9999
  2519. # particles for the background
  2520. for j in 0...6
  2521. @sprites["l#{j}"] = Sprite.new(@viewport)
  2522. @sprites["l#{j}"].bitmap = pbBitmap("Graphics/Pictures/EBS/line2")
  2523. @sprites["l#{j}"].y = (@viewport.rect.height/6)*j
  2524. @sprites["l#{j}"].ox = @sprites["l#{j}"].bitmap.width/2
  2525. @sprites["l#{j}"].x = @viewport.rect.width/2
  2526. end
  2527. eggs = @pokemon.eggsteps
  2528. @pokemon.eggsteps = 1
  2529. @sprites["poke"] = defined?(DynamicPokemonSprite) ? DynamicPokemonSprite.new(false,0,@viewport) : PokemonBattlerSprite.new(false,0,@viewport)
  2530. @sprites["poke"].setPokemonBitmap(@pokemon) # Egg sprite
  2531. @sprites["poke"].z = 50
  2532. @sprites["poke"].ox = @sprites["poke"].bitmap.width/2
  2533. @sprites["poke"].oy = @sprites["poke"].bitmap.height
  2534. @sprites["poke"].x = @viewport.rect.width/2
  2535. @sprites["poke"].y = @viewport.rect.height/2 + @sprites["poke"].bitmap.height*0.5
  2536. @sprites["poke"].showshadow = false if defined?(DynamicPokemonSprite)
  2537. crackfilename = sprintf("Graphics/Battlers/Eggs/%scracks",getConstantName(PBSpecies,@pokemon.species)) rescue nil
  2538. if !pbResolveBitmap(crackfilename)
  2539. crackfilename = sprintf("Graphics/Battlers/Eggs/%03dcracks",@pokemon.species)
  2540. if !pbResolveBitmap(crackfilename)
  2541. crackfilename = sprintf("Graphics/Battlers/Eggs/000cracks")
  2542. end
  2543. end
  2544. @cracks = defined?(AnimatedBitmapWrapper) ? AnimatedBitmapWrapper.new(crackfilename) : pbBitmap(crackfilename)
  2545. @pokemon.eggsteps = eggs
  2546. @viewport.color.alpha = 0
  2547.  
  2548. @sprites["rect"] = Sprite.new(@viewport)
  2549. @sprites["rect"].drawRect(@viewport.rect.width,@viewport.rect.height,Color.new(255,255,255))
  2550. @sprites["rect"].opacity = 0
  2551. @sprites["rect"].z = 100
  2552. end
  2553.  
  2554. def pbMain
  2555. # stops BGM and displays message
  2556. pbBGMStop()
  2557. 16.times do
  2558. Graphics.update
  2559. self.update
  2560. @sprites["bar1"].y -= @sprites["bar1"].bitmap.height/16
  2561. @sprites["bar2"].y += @sprites["bar2"].bitmap.height/16
  2562. end
  2563. pbBGMPlay("evolv")
  2564. wait(32)
  2565. # Egg bounce animation
  2566. 2.times do
  2567. 3.times do
  2568. @sprites["poke"].zoom_y += 0.04
  2569. wait
  2570. end
  2571. for i in 0...6
  2572. @sprites["poke"].y -= 6 * (i < 3 ? 1 : -1)
  2573. wait
  2574. end
  2575. for i in 0...6
  2576. @sprites["poke"].zoom_y -= 0.04 * (i < 3 ? 2 : -1)
  2577. @sprites["poke"].y -= 2 if i >= 3
  2578. wait
  2579. end
  2580. 3.times do
  2581. @sprites["poke"].y += 2
  2582. wait
  2583. end
  2584. self.advance
  2585. pbSEPlay("eb_ice2",80)
  2586. wait(24)
  2587. end
  2588. # Egg shake animation
  2589. m = 16; n = 2; k = -1
  2590. for j in 0...3
  2591. self.advance if j < 2
  2592. pbSEPlay("eb_ice2",80) if j < 2
  2593. for i in 0...m
  2594. k *= -1 if i%n == 0
  2595. @sprites["poke"].x += k * 4
  2596. @sprites["rect"].opacity += 64 if j == 2 && i >= (m - 5)
  2597. wait
  2598. end
  2599. k = j < 1 ? 1.5 : 2
  2600. n = 3
  2601. m = 42
  2602. wait(24) if j < 1
  2603. end
  2604. # Egg burst animation
  2605. self.advance
  2606. pbSEPlay("recall")
  2607. @sprites["poke"].setPokemonBitmap(@pokemon) # Egg sprite
  2608. @sprites["poke"].ox = @sprites["poke"].bitmap.width/2
  2609. @sprites["poke"].oy = @sprites["poke"].bitmap.height
  2610. @sprites["poke"].x = @viewport.rect.width/2
  2611. @sprites["poke"].y = @viewport.rect.height/2 + @sprites["poke"].bitmap.height*0.5
  2612. @sprites["ring"] = Sprite.new(@viewport)
  2613. @sprites["ring"].z = 200
  2614. @sprites["ring"].bitmap = pbBitmap("Graphics/Pictures/EBS/shine7")
  2615. @sprites["ring"].ox = @sprites["ring"].bitmap.width/2
  2616. @sprites["ring"].oy = @sprites["ring"].bitmap.height/2
  2617. @sprites["ring"].color = Color.new(232,92,42)
  2618. @sprites["ring"].opacity = 0
  2619. @sprites["ring"].x = @viewport.rect.width/2
  2620. @sprites["ring"].y = @viewport.rect.height/2
  2621. for j in 0...16
  2622. @sprites["s#{j}"] = Sprite.new(@viewport)
  2623. @sprites["s#{j}"].z = 200
  2624. @sprites["s#{j}"].bitmap = pbBitmap("Graphics/Pictures/EBS/shine6")
  2625. @sprites["s#{j}"].ox = @sprites["s#{j}"].bitmap.width/2
  2626. @sprites["s#{j}"].oy = @sprites["s#{j}"].bitmap.height/2
  2627. @sprites["s#{j}"].color = Color.new(232,92,42)
  2628. @sprites["s#{j}"].x = @viewport.rect.width/2
  2629. @sprites["s#{j}"].y = @viewport.rect.height/2
  2630. @sprites["s#{j}"].opacity = 0
  2631. r = 96 + rand(64)
  2632. x, y = randCircleCord(r)
  2633. @sprites["s#{j}"].end_x = @sprites["s#{j}"].x - r + x
  2634. @sprites["s#{j}"].end_y = @sprites["s#{j}"].y - r + y - 32
  2635. z = 1 - rand(20)*0.01
  2636. @sprites["s#{j}"].zoom_x = z
  2637. @sprites["s#{j}"].zoom_y = z
  2638. end
  2639. 16.times do
  2640. for j in 0...16
  2641. @sprites["s#{j}"].x -= (@sprites["s#{j}"].x - @sprites["s#{j}"].end_x)*0.05
  2642. @sprites["s#{j}"].y -= (@sprites["s#{j}"].y - @sprites["s#{j}"].end_y)*0.05
  2643. @sprites["s#{j}"].color.alpha -= 16
  2644. @sprites["s#{j}"].opacity += 32
  2645. end
  2646. @sprites["ring"].color.alpha -= 16
  2647. @sprites["ring"].opacity += 32
  2648. @sprites["ring"].zoom_x += 0.5
  2649. @sprites["ring"].zoom_y += 0.5
  2650. wait
  2651. end
  2652. for i in 0...48
  2653. for j in 0...16
  2654. @sprites["s#{j}"].x -= (@sprites["s#{j}"].x - @sprites["s#{j}"].end_x)*0.05
  2655. @sprites["s#{j}"].y -= (@sprites["s#{j}"].y - @sprites["s#{j}"].end_y)*0.05
  2656. @sprites["s#{j}"].end_y += 2
  2657. @sprites["s#{j}"].zoom_x -= 0.01
  2658. @sprites["s#{j}"].zoom_y -= 0.01
  2659. @sprites["s#{j}"].opacity -= 16 if i >= 32
  2660. end
  2661. @sprites["ring"].zoom_x += 0.5
  2662. @sprites["ring"].zoom_y += 0.5
  2663. @sprites["ring"].opacity -= 32
  2664. wait
  2665. end
  2666. 16.times do
  2667. @sprites["rect"].opacity -= 16
  2668. wait
  2669. end
  2670. wait(32)
  2671. # Finish scene
  2672. frames = pbCryFrameLength(@pokemon.species)
  2673. pbBGMStop()
  2674. pbPlayCry(@pokemon)
  2675. frames.times do
  2676. Graphics.update
  2677. self.update
  2678. end
  2679. pbMEPlay("EvolutionSuccess")
  2680. @sprites["msgwindow"].visible = true
  2681. cmd = [_INTL("Yes"),_INTL("No")]
  2682. Kernel.pbMessageDisplay(@sprites["msgwindow"],_INTL("\\se[]{1} hatched from the Egg!\\wt[80]",@pokemon.name)) { self.update }
  2683. Kernel.pbMessageDisplay(@sprites["msgwindow"],_INTL("Would you like to nickname the newly hatched {1}?",@pokemon.name)) { self.update }
  2684. if Kernel.pbShowCommands(@sprites["msgwindow"],cmd,1,0) { self.update } == 0
  2685. nickname = pbEnterPokemonName(_INTL("{1}'s nickname?",@pokemon.name),0,10,"",@pokemon,true)
  2686. @pokemon.name = nickname if nickname != ""
  2687. @nicknamed = true
  2688. end
  2689. @sprites["msgwindow"].text = ""
  2690. @sprites["msgwindow"].visible = false
  2691. end
  2692.  
  2693. def wait(frames=1)
  2694. frames.times do
  2695. Graphics.update
  2696. self.update
  2697. end
  2698. end
  2699.  
  2700. def pbEndScene
  2701. $game_temp.message_window_showing = false if $game_temp
  2702. 16.times do
  2703. @viewport.color.alpha += 16
  2704. wait
  2705. end
  2706. pbDisposeSpriteHash(@sprites)
  2707. 16.times do
  2708. @viewport.color.alpha -= 16
  2709. pbWait(1)
  2710. end
  2711. @viewport.dispose
  2712. end
  2713. end
Add Comment
Please, Sign In to add comment