Guest User

Untitled

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