Guest User

Untitled

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