Advertisement
Nyaruko69

Untitled

May 25th, 2020
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.27 KB | None | 0 0
  1. #===============================================================================
  2. # Evolution scene
  3. #===============================================================================
  4. def randCircleCord(r,x=nil)
  5. x = rand(r*2) if x.nil?
  6. y1 = -Math.sqrt(r**2 - (x - r)**2)
  7. y2 = Math.sqrt(r**2 - (x - r)**2)
  8. return x, (rand(2)==0 ? y1.to_i : y2.to_i) + r
  9. end
  10.  
  11. class PokemonEvolutionScene
  12. # main update function
  13. def update(poke=true,bar=false)
  14. self.updateBackground
  15. @sprites["poke"].update if poke
  16. @sprites["poke2"].update if poke
  17. if bar
  18. @sprites["bar1"].y -= 8 if @sprites["bar1"].y > -@viewport.rect.height*0.5
  19. @sprites["bar2"].y += 8 if @sprites["bar2"].y < @viewport.rect.height*1.5
  20. end
  21. end
  22. # background update function
  23. def updateBackground
  24. for j in 0...6
  25. @sprites["l#{j}"].y = @viewport.rect.height if @sprites["l#{j}"].y <= 0
  26. t = (@sprites["l#{j}"].y.to_f/@viewport.rect.height)*255
  27. @sprites["l#{j}"].tone = Tone.new(t,t,t)
  28. z = ((@sprites["l#{j}"].y.to_f - @viewport.rect.height/2)/(@viewport.rect.height/2))*1.0
  29. @sprites["l#{j}"].angle = (z < 0) ? 180 : 0
  30. @sprites["l#{j}"].zoom_y = z.abs
  31. @sprites["l#{j}"].y -= 2
  32. end
  33. end
  34. # update for the particle effects
  35. def updateParticles
  36. for j in 0...16
  37. @sprites["s#{j}"].visible = true
  38. if @sprites["s#{j}"].opacity == 0
  39. @sprites["s#{j}"].opacity = 255
  40. @sprites["s#{j}"].speed = 1
  41. @sprites["s#{j}"].x = @sprites["poke"].x
  42. @sprites["s#{j}"].y = @sprites["poke"].y
  43. x, y = randCircleCord(256)
  44. @sprites["s#{j}"].end_x = @sprites["poke"].x - 256 + x
  45. @sprites["s#{j}"].end_y = @sprites["poke"].y - 256 + y
  46. end
  47. @sprites["s#{j}"].x -= (@sprites["s#{j}"].x - @sprites["s#{j}"].end_x)*0.01*@sprites["s#{j}"].speed
  48. @sprites["s#{j}"].y -= (@sprites["s#{j}"].y - @sprites["s#{j}"].end_y)*0.01*@sprites["s#{j}"].speed
  49. @sprites["s#{j}"].opacity -= 4*@sprites["s#{j}"].speed
  50. end
  51. end
  52. # update for the rays going out of the Pokemon
  53. def updateRays(i)
  54. for j in 0...8
  55. next if j > i/8
  56. if @sprites["r#{j}"].opacity == 0
  57. @sprites["r#{j}"].opacity = 255
  58. @sprites["r#{j}"].zoom_x = 0
  59. @sprites["r#{j}"].zoom_y = 0
  60. end
  61. @sprites["r#{j}"].opacity -= 4
  62. @sprites["r#{j}"].zoom_x += 0.04
  63. @sprites["r#{j}"].zoom_y += 0.04
  64. end
  65. end
  66. # initializes the evolution sequence
  67. def pbStartScreen(pokemon,newspecies)
  68. @pokemon = pokemon
  69. @newspecies = newspecies
  70. @sprites = {}
  71. @viewport = Viewport.new(0,0,Graphics.width,Graphics.height)
  72. @viewport.z = 99999
  73. @viewport.color = Color.new(0,0,0,0)
  74. # initial fading transition
  75. 16.times do
  76. @viewport.color.alpha += 16
  77. pbWait(1)
  78. end
  79. # initializes bars for cutting the screen off
  80. @sprites["bar1"] = Sprite.new(@viewport)
  81. @sprites["bar1"].drawRect(@viewport.rect.width,@viewport.rect.height/2,Color.new(0,0,0))
  82. @sprites["bar1"].z = 99999
  83. @sprites["bar2"] = Sprite.new(@viewport)
  84. @sprites["bar2"].drawRect(@viewport.rect.width,@viewport.rect.height/2,Color.new(0,0,0))
  85. @sprites["bar2"].y = @viewport.rect.height/2
  86. @sprites["bar2"].z = 99999
  87. # initializes messages window
  88. @sprites["msgwindow"] = Kernel.pbCreateMessageWindow(@viewport)
  89. @sprites["msgwindow"].visible = false
  90. @sprites["msgwindow"].z = 9999
  91. # background graphics
  92. @sprites["bg1"] = Sprite.new(@viewport)
  93. @sprites["bg1"].bitmap = pbBitmap("Graphics/Pictures/EBS/evobg")
  94. @sprites["bg2"] = Sprite.new(@viewport)
  95. @sprites["bg2"].bitmap = pbBitmap("Graphics/Pictures/EBS/overlay")
  96. @sprites["bg2"].z = 5
  97. # particles for the background
  98. for j in 0...6
  99. @sprites["l#{j}"] = Sprite.new(@viewport)
  100. @sprites["l#{j}"].bitmap = pbBitmap("Graphics/Pictures/EBS/line1")
  101. @sprites["l#{j}"].y = (@viewport.rect.height/6)*j
  102. @sprites["l#{j}"].ox = @sprites["l#{j}"].bitmap.width/2
  103. @sprites["l#{j}"].x = @viewport.rect.width/2
  104. end
  105. # original Pokemon sprite
  106. @sprites["poke"] = defined?(DynamicPokemonSprite) ? DynamicPokemonSprite.new(false,0,@viewport) : PokemonBattlerSprite.new(false,0,@viewport)
  107. @sprites["poke"].setPokemonBitmap(@pokemon)
  108. @sprites["poke"].showshadow = false if defined?(DynamicPokemonSprite)
  109. @sprites["poke"].ox = @sprites["poke"].bitmap.width/2
  110. @sprites["poke"].oy = @sprites["poke"].bitmap.height/2
  111. @sprites["poke"].x = @viewport.rect.width/2
  112. @sprites["poke"].y = @viewport.rect.height/2
  113. @sprites["poke"].z = 50
  114. # evolved Pokemon sprite
  115. @sprites["poke2"] = defined?(DynamicPokemonSprite) ? DynamicPokemonSprite.new(false,0,@viewport) : PokemonBattlerSprite.new(false,0,@viewport)
  116. @sprites["poke2"].setPokemonBitmap(pokemon,false,@newspecies)
  117. @sprites["poke2"].showshadow = false if defined?(DynamicPokemonSprite)
  118. @sprites["poke2"].ox = @sprites["poke2"].bitmap.width/2
  119. @sprites["poke2"].oy = @sprites["poke2"].bitmap.height/2
  120. @sprites["poke2"].x = @viewport.rect.width/2
  121. @sprites["poke2"].y = @viewport.rect.height/2
  122. @sprites["poke2"].z = 50
  123. @sprites["poke2"].zoom_x = 0
  124. @sprites["poke2"].zoom_y = 0
  125. @sprites["poke2"].tone = Tone.new(255,255,255)
  126. # initializes the shine at the beginning animation
  127. @sprites["shine"] = Sprite.new(@viewport)
  128. @sprites["shine"].bitmap = pbBitmap("Graphics/Pictures/EBS/shine1")
  129. @sprites["shine"].ox = @sprites["shine"].bitmap.width/2
  130. @sprites["shine"].oy = @sprites["shine"].bitmap.height/2
  131. @sprites["shine"].x = @sprites["poke"].x
  132. @sprites["shine"].y = @sprites["poke"].y
  133. @sprites["shine"].zoom_x = 0
  134. @sprites["shine"].zoom_y = 0
  135. @sprites["shine"].opacity = 0
  136. @sprites["shine"].z = 60
  137. # initializes the shine during animation
  138. @sprites["shine2"] = Sprite.new(@viewport)
  139. @sprites["shine2"].bitmap = pbBitmap("Graphics/Pictures/EBS/shine3")
  140. @sprites["shine2"].ox = @sprites["shine2"].bitmap.width/2
  141. @sprites["shine2"].oy = @sprites["shine2"].bitmap.height/2
  142. @sprites["shine2"].x = @sprites["poke"].x
  143. @sprites["shine2"].y = @sprites["poke"].y
  144. @sprites["shine2"].zoom_x = 0
  145. @sprites["shine2"].zoom_y = 0
  146. @sprites["shine2"].opacity = 0
  147. @sprites["shine2"].z = 40
  148. # initializes the shine at the end
  149. @sprites["shine3"] = Sprite.new(@viewport)
  150. @sprites["shine3"].bitmap = pbBitmap("Graphics/Pictures/EBS/shine4")
  151. @sprites["shine3"].ox = @sprites["shine3"].bitmap.width/2
  152. @sprites["shine3"].oy = @sprites["shine3"].bitmap.height/2
  153. @sprites["shine3"].x = @sprites["poke"].x
  154. @sprites["shine3"].y = @sprites["poke"].y
  155. @sprites["shine3"].zoom_x = 0.5
  156. @sprites["shine3"].zoom_y = 0.5
  157. @sprites["shine3"].opacity = 0
  158. @sprites["shine3"].z = 60
  159. # initializes particles
  160. for j in 0...16
  161. @sprites["s#{j}"] = Sprite.new(@viewport)
  162. @sprites["s#{j}"].bitmap = pbBitmap("Graphics/Pictures/EBS/shine2")
  163. @sprites["s#{j}"].ox = @sprites["s#{j}"].bitmap.width/2
  164. @sprites["s#{j}"].oy = @sprites["s#{j}"].bitmap.height/2
  165. @sprites["s#{j}"].x = @sprites["poke"].x
  166. @sprites["s#{j}"].y = @sprites["poke"].y
  167. @sprites["s#{j}"].z = 60
  168. s = rand(4) + 1
  169. x, y = randCircleCord(192)
  170. @sprites["s#{j}"].end_x = @sprites["s#{j}"].x - 192 + x
  171. @sprites["s#{j}"].end_y = @sprites["s#{j}"].y - 192 + y
  172. @sprites["s#{j}"].speed = s
  173. @sprites["s#{j}"].visible = false
  174. end
  175. # initializes light rays
  176. rangle = []
  177. for i in 0...8; rangle.push((360/8)*i + 15); end
  178. for j in 0...8
  179. @sprites["r#{j}"] = Sprite.new(@viewport)
  180. @sprites["r#{j}"].bitmap = BitmapCache.load_bitmap("Graphics/Pictures/EBS/ray")
  181. @sprites["r#{j}"].ox = 0
  182. @sprites["r#{j}"].oy = @sprites["r#{j}"].bitmap.height/2
  183. @sprites["r#{j}"].opacity = 0
  184. @sprites["r#{j}"].zoom_x = 0
  185. @sprites["r#{j}"].zoom_y = 0
  186. @sprites["r#{j}"].x = @viewport.rect.width/2
  187. @sprites["r#{j}"].y = @viewport.rect.height/2
  188. a = rand(rangle.length)
  189. @sprites["r#{j}"].angle = rangle[a]
  190. @sprites["r#{j}"].z = 60
  191. rangle.delete_at(a)
  192. end
  193. @viewport.color.alpha = 0
  194. end
  195.  
  196. # closes the evolution screen.
  197. def pbEndScreen
  198. $game_temp.message_window_showing = false if $game_temp
  199. @viewport.color = Color.new(0,0,0,0)
  200. 16.times do
  201. Graphics.update
  202. self.update
  203. @viewport.color.alpha += 16
  204. end
  205. pbDisposeSpriteHash(@sprites)
  206. 16.times do
  207. Graphics.update
  208. @viewport.color.alpha -= 16
  209. end
  210. @viewport.dispose
  211. end
  212. # initial animation when starting evolution
  213. def glow
  214. t = 0
  215. pbSEPlay("#{SE_EXTRA_PATH}Flash")
  216. 16.times do
  217. Graphics.update
  218. self.update(false)
  219. @sprites["shine"].zoom_x += 0.08
  220. @sprites["shine"].zoom_y += 0.08
  221. @sprites["shine"].opacity += 16
  222. t += 16
  223. @sprites["poke"].tone = Tone.new(t,t,t)
  224. @sprites["bar1"].y += 3
  225. @sprites["bar2"].y -= 3
  226. end
  227. 16.times do
  228. Graphics.update
  229. self.update(false)
  230. @sprites["shine"].zoom_x -= 0.02
  231. @sprites["shine"].zoom_y -= 0.02
  232. @sprites["shine"].opacity -= 16
  233. t -= 16
  234. @sprites["poke"].tone = Tone.new(t,t,t)
  235. @sprites["bar1"].y += 3
  236. @sprites["bar2"].y -= 3
  237. self.updateParticles
  238. end
  239. end
  240. # aniamtion to flash the screen after evolution is completed
  241. def flash(cancel)
  242. srt = cancel ? "poke" : "poke2"
  243. pbSEPlay("#{SE_EXTRA_PATH}Flash3") if !cancel
  244. for key in @sprites.keys
  245. next if ["bar1","bar2","bg1","bg2","l0","l1","l2","l3","l4","l5"].include?(key)
  246. @sprites[key].visible = false
  247. end
  248. @sprites[srt].visible = true
  249. @sprites[srt].zoom_x = 1
  250. @sprites[srt].zoom_y = 1
  251. @sprites[srt].tone = Tone.new(0,0,0)
  252. for i in 0...(cancel ? 32 : 64)
  253. Graphics.update
  254. @viewport.color.alpha -= cancel ? 8 : 4
  255. self.update(true,true)
  256. end
  257. return if cancel
  258. pbSEPlay("#{SE_EXTRA_PATH}Saint6")
  259. for j in 0...64
  260. @sprites["p#{j}"] = Sprite.new(@viewport)
  261. n = [5,2][rand(2)]
  262. @sprites["p#{j}"].bitmap = pbBitmap("Graphics/Pictures/EBS/shine#{n}")
  263. @sprites["p#{j}"].z = 10
  264. @sprites["p#{j}"].ox = @sprites["p#{j}"].bitmap.width/2
  265. @sprites["p#{j}"].oy = @sprites["p#{j}"].bitmap.height/2
  266. @sprites["p#{j}"].x = rand(@viewport.rect.width + 1)
  267. @sprites["p#{j}"].y = @viewport.rect.height/2 + rand(@viewport.rect.height/2 - 64)
  268. z = [0.2,0.4,0.5,0.6,0.8,1.0][rand(6)]
  269. @sprites["p#{j}"].zoom_x = z
  270. @sprites["p#{j}"].zoom_y = z
  271. @sprites["p#{j}"].opacity = 0
  272. @sprites["p#{j}"].speed = 2 + rand(5)
  273. end
  274. for i in 0...64
  275. Graphics.update
  276. self.update
  277. for j in 0...64
  278. @sprites["p#{j}"].opacity += (i < 32 ? 2 : -2)*@sprites["p#{j}"].speed
  279. @sprites["p#{j}"].y -= 1 if i%@sprites["p#{j}"].speed == 0
  280. if @sprites["p#{j}"].opacity > 128
  281. @sprites["p#{j}"].zoom_x /= 1.5
  282. @sprites["p#{j}"].zoom_y /= 1.5
  283. end
  284. end
  285. end
  286. end
  287. # starts the evolution screen
  288. def pbEvolution(cancancel=true)
  289. # stops BGM and displays message
  290. pbBGMStop()
  291. 16.times do
  292. Graphics.update
  293. self.update
  294. @sprites["bar1"].y -= @sprites["bar1"].bitmap.height/16
  295. @sprites["bar2"].y += @sprites["bar2"].bitmap.height/16
  296. end
  297. @sprites["msgwindow"].visible = true
  298. Kernel.pbMessageDisplay(@sprites["msgwindow"],_INTL("\\se[]¿Qué?\r\n¡{1} está evolucionando!\\^",@pokemon.name)) { self.update }
  299. Kernel.pbMessageWaitForInput(@sprites["msgwindow"],100,true) { self.update }
  300. @sprites["msgwindow"].visible = false
  301. # plays Pokemon's cry
  302. pbPlayCry(@pokemon)
  303. pbCryFrameLength(@pokemon.species).times do
  304. Graphics.update
  305. self.update
  306. end
  307. pbBGMPlay("evolv")
  308. canceled = false
  309. # beginning glow effect
  310. self.glow
  311. k1 = 1 # zoom factor for the Pokemon
  312. k2 = 1 # zoom factor for the shine
  313. s = 1 # speed of the animation
  314. @viewport.color = Color.new(255,255,255,0)
  315. pbSEPlay("#{SE_EXTRA_PATH}Heal4")
  316. # main animation loop
  317. for i in 0...256
  318. k1 *= -1 if i%(32/s) == 0
  319. k2 *= -1 if i%(16) == 0
  320. s *= 2 if i%64 == 0 && i > 0 && s < 8
  321. Graphics.update
  322. Input.update
  323. self.update(false)
  324. self.updateParticles
  325. self.updateRays(i)
  326. @sprites["poke"].zoom_x += 0.03125*k1*s
  327. @sprites["poke"].zoom_y += 0.03125*k1*s
  328. @sprites["poke"].tone.red += 16
  329. @sprites["poke"].tone.green += 16
  330. @sprites["poke"].tone.blue += 16
  331. @sprites["poke2"].zoom_x -= 0.03125*k1*s
  332. @sprites["poke2"].zoom_y -= 0.03125*k1*s
  333. if @sprites["shine2"].opacity < 255
  334. @sprites["shine2"].opacity += 16
  335. @sprites["shine2"].zoom_x += 0.08
  336. @sprites["shine2"].zoom_y += 0.08
  337. else
  338. @sprites["shine2"].zoom_x += 0.01*k2
  339. @sprites["shine2"].zoom_y += 0.01*k2
  340. @sprites["shine2"].tone.red += 0.5
  341. @sprites["shine2"].tone.green += 0.5
  342. @sprites["shine2"].tone.blue += 0.5
  343. end
  344. if i >= 240
  345. @sprites["shine3"].opacity += 16
  346. @sprites["shine3"].zoom_x += 0.1
  347. @sprites["shine3"].zoom_y += 0.1
  348. end
  349. @viewport.color.alpha += 32 if i >= 248
  350. if Input.trigger?(Input::B) && cancancel
  351. pbBGMStop()
  352. canceled = true
  353. break
  354. end
  355. end
  356. @viewport.color = Color.new(255,255,255)
  357. self.flash(canceled)
  358. if canceled
  359. # prints message when evolution is cancelled
  360. @sprites["msgwindow"].visible = true
  361. Kernel.pbMessageDisplay(@sprites["msgwindow"],_INTL("Huh?\r\n{1} stopped evolving!",@pokemon.name)) { self.update }
  362. else
  363. # creates the actual evolved Pokemon
  364. self.createEvolved
  365. end
  366. end
  367. # function used to create the newly evolved Pokemon
  368. def createEvolved
  369. frames = pbCryFrameLength(@newspecies)
  370. # plays Pokemon's cry
  371. pbBGMStop()
  372. pbPlayCry(@newspecies)
  373. frames.times do
  374. Graphics.update
  375. self.update
  376. end
  377. pbMEPlay("EvolutionSuccess")
  378. # gets info of the new species
  379. newspeciesname = PBSpecies.getName(@newspecies)
  380. oldspeciesname = PBSpecies.getName(@pokemon.species)
  381. @sprites["msgwindow"].visible = true
  382. Kernel.pbMessageDisplay(@sprites["msgwindow"],_INTL("\\se[]¡Enhorabuena! ¡Tu {1} evolucionó en {2}!\\wt[80]",@pokemon.name,newspeciesname)) { self.update }
  383. @sprites["msgwindow"].text = ""
  384. removeItem = false
  385. createSpecies = pbCheckEvolutionEx(@pokemon){|pokemon,evonib,level,poke|
  386. if evonib == PBEvolution::Shedinja
  387. # checks if a Pokeball is available for Shedinja
  388. next poke if $PokemonBag.pbQuantity(getConst(PBItems,:POKEBALL))>0
  389. elsif evonib == PBEvolution::TradeItem || evonib == PBEvolution::DayHoldItem || evonib == PBEvolution::NightHoldItem
  390. # consumes evolutionary item
  391. removeItem = true if poke == @newspecies
  392. end
  393. next -1
  394. }
  395. @pokemon.setItem(0) if removeItem
  396. @pokemon.species = @newspecies
  397. $Trainer.seen[@newspecies] = true
  398. $Trainer.owned[@newspecies] = true
  399. pbSeenForm(@pokemon)
  400. @pokemon.name = newspeciesname if @pokemon.name == oldspeciesname
  401. @pokemon.calcStats
  402. # checking moves for new species
  403. movelist = @pokemon.getMoveList
  404. for i in movelist
  405. if i[0] == @pokemon.level
  406. # learning new moves
  407. pbLearnMove(@pokemon,i[1],true) { self.update }
  408. end
  409. end
  410. # adding new species of Pokemon to the party
  411. if createSpecies>0 && $Trainer.party.length<6
  412. newpokemon = @pokemon.clone
  413. newpokemon.iv = @pokemon.iv.clone
  414. newpokemon.ev = @pokemon.ev.clone
  415. newpokemon.species = createSpecies
  416. newpokemon.name = PBSpecies.getName(createSpecies)
  417. newpokemon.setItem(0)
  418. newpokemon.clearAllRibbons
  419. newpokemon.markings = 0
  420. newpokemon.ballused = 0
  421. newpokemon.calcStats
  422. newpokemon.heal
  423. $Trainer.party.push(newpokemon)
  424. $Trainer.seen[createSpecies] = true
  425. $Trainer.owned[createSpecies] = true
  426. pbSeenForm(newpokemon)
  427. $PokemonBag.pbDeleteItem(getConst(PBItems,:POKEBALL))
  428. end
  429. end
  430. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement