Advertisement
mej71

PokemonEvolution

Apr 27th, 2015
1,366
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 24.29 KB | None | 0 0
  1. BATTLERZOOM = 1.0 #Unrelated to evolution
  2.  
  3. module PBEvolution
  4. Unknown = 0 # Do not use
  5. Happiness = 1
  6. HappinessDay = 2
  7. HappinessNight = 3
  8. Level = 4
  9. Trade = 5
  10. TradeItem = 6
  11. Item = 7
  12. AttackGreater = 8
  13. AtkDefEqual = 9
  14. DefenseGreater = 10
  15. Silcoon = 11
  16. Cascoon = 12
  17. Ninjask = 13
  18. Shedinja = 14
  19. Beauty = 15
  20. ItemMale = 16
  21. ItemFemale = 17
  22. DayHoldItem = 18
  23. NightHoldItem = 19
  24. HasMove = 20
  25. HasInParty = 21
  26. LevelMale = 22
  27. LevelFemale = 23
  28. Location = 24
  29. TradeSpecies = 25
  30. HappinessMoveType = 26
  31. TypeDark = 27
  32. LevelRain = 28
  33. LevelDay = 29
  34. LevelNight = 30
  35. UpsideDownLevel = 31
  36. Custom7 = 32
  37.  
  38. EVONAMES=["Unknown",
  39. "Happiness","HappinessDay","HappinessNight","Level","Trade",
  40. "TradeItem","Item","AttackGreater","AtkDefEqual","DefenseGreater",
  41. "Silcoon","Cascoon","Ninjask","Shedinja","Beauty",
  42. "ItemMale","ItemFemale","DayHoldItem","NightHoldItem","HasMove",
  43. "HasInParty","LevelMale","LevelFemale","Location","TradeSpecies",
  44. "HappinessMoveType","TypeDark","LevelRain","LevelDay","LevelNight",
  45. "UpsideDownLevel","Custom7"
  46. ]
  47.  
  48. # 0 = no parameter
  49. # 1 = Positive integer
  50. # 2 = Item internal name
  51. # 3 = Move internal name
  52. # 4 = Species internal name
  53. # 5 = Type internal name
  54. EVOPARAM=[0, # Unknown (do not use)
  55. 0,0,0,1,0, # Happiness, HappinessDay, HappinessNight, Level, Trade
  56. 2,2,1,1,1, # TradeItem, Item, AttackGreater, AtkDefEqual, DefenseGreater
  57. 1,1,1,1,1, # Silcoon, Cascoon, Ninjask, Shedinja, Beauty
  58. 2,2,2,2,3, # ItemMale, ItemFemale, DayHoldItem, NightHoldItem, HasMove
  59. 4,1,1,1,4, # HasInParty, LevelMale, LevelFemale, Location, TradeSpecies
  60. 3,1,1,1,1,1,1 # Custom 1-7
  61. ]
  62. end
  63.  
  64.  
  65.  
  66. #===============================================================================
  67. # Evolution helper functions
  68. #===============================================================================
  69. def pbGetEvolvedFormData(species)
  70. ret=[]
  71. _EVOTYPEMASK=0x3F
  72. _EVODATAMASK=0xC0
  73. _EVONEXTFORM=0x00
  74. pbRgssOpen("Data/evolutions.dat","rb"){|f|
  75. f.pos=(species-1)*8
  76. offset=f.fgetdw
  77. length=f.fgetdw
  78. if length>0
  79. f.pos=offset
  80. i=0; loop do break unless i<length
  81. evo=f.fgetb
  82. evonib=evo&_EVOTYPEMASK
  83. level=f.fgetw
  84. poke=f.fgetw
  85. if (evo&_EVODATAMASK)==_EVONEXTFORM
  86. ret.push([evonib,level,poke])
  87. end
  88. i+=5
  89. end
  90. end
  91. }
  92. return ret
  93. end
  94.  
  95. def pbEvoDebug()
  96. _EVOTYPEMASK=0x3F
  97. _EVODATAMASK=0xC0
  98. pbRgssOpen("Data/evolutions.dat","rb"){|f|
  99. for species in 1..PBSpecies.maxValue
  100. f.pos=(species-1)*8
  101. offset=f.fgetdw
  102. length=f.fgetdw
  103. puts PBSpecies.getName(species)
  104. if length>0
  105. f.pos=offset
  106. i=0; loop do break unless i<length
  107. evo=f.fgetb
  108. evonib=evo&_EVOTYPEMASK
  109. level=f.fgetw
  110. poke=f.fgetw
  111. puts sprintf("type=%02X, data=%02X, name=%s, level=%d",
  112. evonib,evo&_EVODATAMASK,PBSpecies.getName(poke),level)
  113. if poke==0
  114. p f.eof?
  115. break
  116. end
  117. i+=5
  118. end
  119. end
  120. end
  121. }
  122. end
  123.  
  124. def pbGetPreviousForm(species)
  125. _EVOTYPEMASK=0x3F
  126. _EVODATAMASK=0xC0
  127. _EVOPREVFORM=0x40
  128. pbRgssOpen("Data/evolutions.dat","rb"){|f|
  129. f.pos=(species-1)*8
  130. offset=f.fgetdw
  131. length=f.fgetdw
  132. if length>0
  133. f.pos=offset
  134. i=0; loop do break unless i<length
  135. evo=f.fgetb
  136. evonib=evo&_EVOTYPEMASK
  137. level=f.fgetw
  138. poke=f.fgetw
  139. if (evo&_EVODATAMASK)==_EVOPREVFORM
  140. return poke
  141. end
  142. i+=5
  143. end
  144. end
  145. }
  146. return species
  147. end
  148.  
  149. def pbGetMinimumLevel(species)
  150. ret=-1
  151. _EVOTYPEMASK=0x3F
  152. _EVODATAMASK=0xC0
  153. _EVOPREVFORM=0x40
  154. pbRgssOpen("Data/evolutions.dat","rb"){|f|
  155. f.pos=(species-1)*8
  156. offset=f.fgetdw
  157. length=f.fgetdw
  158. if length>0
  159. f.pos=offset
  160. i=0; loop do break unless i<length
  161. evo=f.fgetb
  162. evonib=evo&_EVOTYPEMASK
  163. level=f.fgetw
  164. poke=f.fgetw
  165. if poke<=PBSpecies.maxValue &&
  166. (evo&_EVODATAMASK)==_EVOPREVFORM && # evolved from
  167. [PBEvolution::Level,PBEvolution::LevelMale,
  168. PBEvolution::LevelFemale,PBEvolution::AttackGreater,
  169. PBEvolution::AtkDefEqual,PBEvolution::DefenseGreater,
  170. PBEvolution::Silcoon,PBEvolution::Cascoon,
  171. PBEvolution::Ninjask,PBEvolution::Shedinja].include?(evonib)
  172. ret=(ret==-1) ? level : [ret,level].min
  173. break
  174. end
  175. i+=5
  176. end
  177. end
  178. }
  179. return (ret==-1) ? 1 : ret
  180. end
  181.  
  182. def pbGetBabySpecies(species)
  183. ret=species
  184. _EVOTYPEMASK=0x3F
  185. _EVODATAMASK=0xC0
  186. _EVOPREVFORM=0x40
  187. pbRgssOpen("Data/evolutions.dat","rb"){|f|
  188. f.pos=(species-1)*8
  189. offset=f.fgetdw
  190. length=f.fgetdw
  191. if length>0
  192. f.pos=offset
  193. i=0; loop do break unless i<length
  194. evo=f.fgetb
  195. evonib=evo&_EVOTYPEMASK
  196. level=f.fgetw
  197. poke=f.fgetw
  198. if poke<=PBSpecies.maxValue && (evo&_EVODATAMASK)==_EVOPREVFORM # evolved from
  199. ret=poke
  200. break
  201. end
  202. i+=5
  203. end
  204. end
  205. }
  206. if ret!=species
  207. ret=pbGetBabySpecies(ret)
  208. end
  209. return ret
  210. end
  211.  
  212.  
  213.  
  214. #===============================================================================
  215. # Evolution animation
  216. #===============================================================================
  217. class SpriteMetafile
  218. VIEWPORT = 0
  219. TONE = 1
  220. SRC_RECT = 2
  221. VISIBLE = 3
  222. X = 4
  223. Y = 5
  224. Z = 6
  225. OX = 7
  226. OY = 8
  227. ZOOM_X = 9
  228. ZOOM_Y = 10
  229. ANGLE = 11
  230. MIRROR = 12
  231. BUSH_DEPTH = 13
  232. OPACITY = 14
  233. BLEND_TYPE = 15
  234. COLOR = 16
  235. FLASHCOLOR = 17
  236. FLASHDURATION = 18
  237. BITMAP = 19
  238.  
  239. def length
  240. return @metafile.length
  241. end
  242.  
  243. def [](i)
  244. return @metafile[i]
  245. end
  246.  
  247. def initialize(viewport=nil)
  248. @metafile=[]
  249. @values=[
  250. viewport,
  251. Tone.new(0,0,0,0),Rect.new(0,0,0,0),
  252. true,
  253. 0,0,0,0,0,100,100,
  254. 0,false,0,255,0,
  255. Color.new(0,0,0,0),Color.new(0,0,0,0),
  256. 0
  257. ]
  258. end
  259.  
  260. def disposed?
  261. return false
  262. end
  263.  
  264. def dispose
  265. end
  266.  
  267. def flash(color,duration)
  268. if duration>0
  269. @values[FLASHCOLOR]=color.clone
  270. @values[FLASHDURATION]=duration
  271. @metafile.push([FLASHCOLOR,color])
  272. @metafile.push([FLASHDURATION,duration])
  273. end
  274. end
  275.  
  276. def x
  277. return @values[X]
  278. end
  279.  
  280. def x=(value)
  281. @values[X]=value
  282. @metafile.push([X,value])
  283. end
  284.  
  285. def y
  286. return @values[Y]
  287. end
  288.  
  289. def y=(value)
  290. @values[Y]=value
  291. @metafile.push([Y,value])
  292. end
  293.  
  294. def bitmap
  295. return nil
  296. end
  297.  
  298. def bitmap=(value)
  299. if value && !value.disposed?
  300. @values[SRC_RECT].set(0,0,value.width,value.height)
  301. @metafile.push([SRC_RECT,@values[SRC_RECT].clone])
  302. end
  303. end
  304.  
  305. def src_rect
  306. return @values[SRC_RECT]
  307. end
  308.  
  309. def src_rect=(value)
  310. @values[SRC_RECT]=value
  311. @metafile.push([SRC_RECT,value])
  312. end
  313.  
  314. def visible
  315. return @values[VISIBLE]
  316. end
  317.  
  318. def visible=(value)
  319. @values[VISIBLE]=value
  320. @metafile.push([VISIBLE,value])
  321. end
  322.  
  323. def z
  324. return @values[Z]
  325. end
  326.  
  327. def z=(value)
  328. @values[Z]=value
  329. @metafile.push([Z,value])
  330. end
  331.  
  332. def ox
  333. return @values[OX]
  334. end
  335.  
  336. def ox=(value)
  337. @values[OX]=value
  338. @metafile.push([OX,value])
  339. end
  340.  
  341. def oy
  342. return @values[OY]
  343. end
  344.  
  345. def oy=(value)
  346. @values[OY]=value
  347. @metafile.push([OY,value])
  348. end
  349.  
  350. def zoom_x
  351. return @values[ZOOM_X]
  352. end
  353.  
  354. def zoom_x=(value)
  355. @values[ZOOM_X]=value
  356. @metafile.push([ZOOM_X,value])
  357. end
  358.  
  359. def zoom_y
  360. return @values[ZOOM_Y]
  361. end
  362.  
  363. def zoom_y=(value)
  364. @values[ZOOM_Y]=value
  365. @metafile.push([ZOOM_Y,value])
  366. end
  367.  
  368. def angle
  369. return @values[ANGLE]
  370. end
  371.  
  372. def angle=(value)
  373. @values[ANGLE]=value
  374. @metafile.push([ANGLE,value])
  375. end
  376.  
  377. def mirror
  378. return @values[MIRROR]
  379. end
  380.  
  381. def mirror=(value)
  382. @values[MIRROR]=value
  383. @metafile.push([MIRROR,value])
  384. end
  385.  
  386. def bush_depth
  387. return @values[BUSH_DEPTH]
  388. end
  389.  
  390. def bush_depth=(value)
  391. @values[BUSH_DEPTH]=value
  392. @metafile.push([BUSH_DEPTH,value])
  393. end
  394.  
  395. def opacity
  396. return @values[OPACITY]
  397. end
  398.  
  399. def opacity=(value)
  400. @values[OPACITY]=value
  401. @metafile.push([OPACITY,value])
  402. end
  403.  
  404. def blend_type
  405. return @values[BLEND_TYPE]
  406. end
  407.  
  408. def blend_type=(value)
  409. @values[BLEND_TYPE]=value
  410. @metafile.push([BLEND_TYPE,value])
  411. end
  412.  
  413. def color
  414. return @values[COLOR]
  415. end
  416.  
  417. def color=(value)
  418. @values[COLOR]=value.clone
  419. @metafile.push([COLOR,@values[COLOR]])
  420. end
  421.  
  422. def tone
  423. return @values[TONE]
  424. end
  425.  
  426. def tone=(value)
  427. @values[TONE]=value.clone
  428. @metafile.push([TONE,@values[TONE]])
  429. end
  430.  
  431. def update
  432. @metafile.push([-1,nil])
  433. end
  434. end
  435.  
  436.  
  437.  
  438. class SpriteMetafilePlayer
  439. def initialize(metafile,sprite=nil)
  440. @metafile=metafile
  441. @sprites=[]
  442. @playing=false
  443. @index=0
  444. @sprites.push(sprite) if sprite
  445. end
  446.  
  447. def add(sprite)
  448. @sprites.push(sprite)
  449. end
  450.  
  451. def playing?
  452. return @playing
  453. end
  454.  
  455. def play
  456. @playing=true
  457. @index=0
  458. end
  459.  
  460. def update
  461. if @playing
  462. for j in @index...@metafile.length
  463. @index=j+1
  464. break if @metafile[j][0]<0
  465. code=@metafile[j][0]
  466. value=@metafile[j][1]
  467. for sprite in @sprites
  468. case code
  469. when SpriteMetafile::X
  470. sprite.x=value
  471. when SpriteMetafile::Y
  472. sprite.y=value
  473. when SpriteMetafile::OX
  474. sprite.ox=value
  475. when SpriteMetafile::OY
  476. sprite.oy=value
  477. when SpriteMetafile::ZOOM_X
  478. sprite.zoom_x=value
  479. when SpriteMetafile::ZOOM_Y
  480. sprite.zoom_y=value
  481. when SpriteMetafile::SRC_RECT
  482. sprite.src_rect=value
  483. when SpriteMetafile::VISIBLE
  484. sprite.visible=value
  485. when SpriteMetafile::Z
  486. sprite.z=value
  487. # prevent crashes
  488. when SpriteMetafile::ANGLE
  489. sprite.angle=(value==180) ? 179.9 : value
  490. when SpriteMetafile::MIRROR
  491. sprite.mirror=value
  492. when SpriteMetafile::BUSH_DEPTH
  493. sprite.bush_depth=value
  494. when SpriteMetafile::OPACITY
  495. sprite.opacity=value
  496. when SpriteMetafile::BLEND_TYPE
  497. sprite.blend_type=value
  498. when SpriteMetafile::COLOR
  499. sprite.color=value
  500. when SpriteMetafile::TONE
  501. sprite.tone=value
  502. end
  503. end
  504. end
  505. @playing=false if @index==@metafile.length
  506. end
  507. end
  508. end
  509.  
  510.  
  511.  
  512. def pbSaveSpriteState(sprite)
  513. state=[]
  514. return state if !sprite || sprite.disposed?
  515. state[SpriteMetafile::BITMAP] = sprite.x
  516. state[SpriteMetafile::X] = sprite.x
  517. state[SpriteMetafile::Y] = sprite.y
  518. state[SpriteMetafile::SRC_RECT] = sprite.src_rect.clone
  519. state[SpriteMetafile::VISIBLE] = sprite.visible
  520. state[SpriteMetafile::Z] = sprite.z
  521. state[SpriteMetafile::OX] = sprite.ox
  522. state[SpriteMetafile::OY] = sprite.oy
  523. state[SpriteMetafile::ZOOM_X] = sprite.zoom_x
  524. state[SpriteMetafile::ZOOM_Y] = sprite.zoom_y
  525. state[SpriteMetafile::ANGLE] = sprite.angle
  526. state[SpriteMetafile::MIRROR] = sprite.mirror
  527. state[SpriteMetafile::BUSH_DEPTH] = sprite.bush_depth
  528. state[SpriteMetafile::OPACITY] = sprite.opacity
  529. state[SpriteMetafile::BLEND_TYPE] = sprite.blend_type
  530. state[SpriteMetafile::COLOR] = sprite.color.clone
  531. state[SpriteMetafile::TONE] = sprite.tone.clone
  532. return state
  533. end
  534.  
  535. def pbRestoreSpriteState(sprite,state)
  536. return if !state || !sprite || sprite.disposed?
  537. sprite.x = state[SpriteMetafile::X]
  538. sprite.y = state[SpriteMetafile::Y]
  539. sprite.src_rect = state[SpriteMetafile::SRC_RECT]
  540. sprite.visible = state[SpriteMetafile::VISIBLE]
  541. sprite.z = state[SpriteMetafile::Z]
  542. sprite.ox = state[SpriteMetafile::OX]
  543. sprite.oy = state[SpriteMetafile::OY]
  544. sprite.zoom_x = state[SpriteMetafile::ZOOM_X]
  545. sprite.zoom_y = state[SpriteMetafile::ZOOM_Y]
  546. sprite.angle = state[SpriteMetafile::ANGLE]
  547. sprite.mirror = state[SpriteMetafile::MIRROR]
  548. sprite.bush_depth = state[SpriteMetafile::BUSH_DEPTH]
  549. sprite.opacity = state[SpriteMetafile::OPACITY]
  550. sprite.blend_type = state[SpriteMetafile::BLEND_TYPE]
  551. sprite.color = state[SpriteMetafile::COLOR]
  552. sprite.tone = state[SpriteMetafile::TONE]
  553. end
  554.  
  555. def pbSaveSpriteStateAndBitmap(sprite)
  556. return [] if !sprite || sprite.disposed?
  557. state=pbSaveSpriteState(sprite)
  558. state[SpriteMetafile::BITMAP]=sprite.bitmap
  559. return state
  560. end
  561.  
  562. def pbRestoreSpriteStateAndBitmap(sprite,state)
  563. return if !state || !sprite || sprite.disposed?
  564. sprite.bitmap=state[SpriteMetafile::BITMAP]
  565. pbRestoreSpriteState(sprite,state)
  566. return state
  567. end
  568.  
  569.  
  570.  
  571. class PokemonEvolutionScene
  572. private
  573.  
  574. def pbGenerateMetafiles(s1x,s1y,s2x,s2y)
  575. sprite=SpriteMetafile.new
  576. sprite2=SpriteMetafile.new
  577. sprite.opacity=255
  578. sprite2.opacity=0
  579. sprite.ox=s1x
  580. sprite.oy=s1y
  581. sprite2.ox=s2x
  582. sprite2.oy=s2y
  583. for j in 0...26
  584. sprite.color.red=128
  585. sprite.color.green=0
  586. sprite.color.blue=0
  587. sprite.color.alpha=j*10
  588. sprite.color=sprite.color
  589. sprite2.color=sprite.color
  590. sprite.update
  591. sprite2.update
  592. end
  593. anglechange=0
  594. sevenseconds=Graphics.frame_rate*7
  595. for j in 0...sevenseconds
  596. sprite.angle+=anglechange
  597. sprite.angle%=360
  598. anglechange+=1 if j%2==0
  599. if j>=sevenseconds-50
  600. sprite2.angle=sprite.angle
  601. sprite2.opacity+=6
  602. end
  603. sprite.update
  604. sprite2.update
  605. end
  606. sprite.angle=360-sprite.angle
  607. sprite2.angle=360-sprite2.angle
  608. for j in 0...sevenseconds
  609. sprite2.angle+=anglechange
  610. sprite2.angle%=360
  611. anglechange-=1 if j%2==0
  612. if j<50
  613. sprite.angle=sprite2.angle
  614. sprite.opacity-=6
  615. end
  616. sprite.update
  617. sprite2.update
  618. end
  619. for j in 0...26
  620. sprite2.color.red=128
  621. sprite2.color.green=0
  622. sprite2.color.blue=0
  623. sprite2.color.alpha=(26-j)*10
  624. sprite2.color=sprite2.color
  625. sprite.color=sprite2.color
  626. sprite.update
  627. sprite2.update
  628. end
  629. @metafile1=sprite
  630. @metafile2=sprite2
  631. end
  632.  
  633. # Starts the evolution screen with the given Pokemon and new Pokemon species.
  634. public
  635.  
  636. def pbStartScreen(pokemon,newspecies)
  637. @sprites={}
  638. @viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
  639. @viewport.z=99999
  640. @pokemon=pokemon
  641. @newspecies=newspecies
  642. addBackgroundOrColoredPlane(@sprites,"background","evolutionbg",
  643. Color.new(248,248,248),@viewport)
  644. rsprite1=PokemonSprite.new(@viewport)
  645. rsprite2=PokemonSprite.new(@viewport)
  646. rsprite1.setPokemonBitmap(@pokemon,false)
  647. rsprite2.setPokemonBitmapSpecies(@pokemon,@newspecies,false)
  648. rsprite1.ox=rsprite1.bitmap.width/2
  649. rsprite1.oy=rsprite1.bitmap.height/2
  650. rsprite2.ox=rsprite2.bitmap.width/2
  651. rsprite2.oy=rsprite2.bitmap.height/2
  652. rsprite1.x=Graphics.width/2
  653. rsprite1.y=(Graphics.height-96)/2
  654. rsprite2.x=Graphics.width/2
  655. rsprite2.y=(Graphics.height-96)/2
  656. rsprite2.opacity=0
  657. @sprites["rsprite1"]=rsprite1
  658. @sprites["rsprite2"]=rsprite2
  659. pbGenerateMetafiles(rsprite1.ox,rsprite1.oy,rsprite2.ox,rsprite2.oy)
  660. @sprites["msgwindow"]=Kernel.pbCreateMessageWindow(@viewport)
  661. pbFadeInAndShow(@sprites)
  662. end
  663.  
  664. # Closes the evolution screen.
  665. def pbEndScreen
  666. Kernel.pbDisposeMessageWindow(@sprites["msgwindow"])
  667. pbFadeOutAndHide(@sprites)
  668. pbDisposeSpriteHash(@sprites)
  669. @viewport.dispose
  670. end
  671.  
  672. # Opens the evolution screen
  673. def pbEvolution(cancancel=true)
  674. metaplayer1=SpriteMetafilePlayer.new(@metafile1,@sprites["rsprite1"])
  675. metaplayer2=SpriteMetafilePlayer.new(@metafile2,@sprites["rsprite2"])
  676. metaplayer1.play
  677. metaplayer2.play
  678. pbBGMStop()
  679. pbPlayCry(@pokemon)
  680. Kernel.pbMessageDisplay(@sprites["msgwindow"],
  681. _INTL("\\se[]What?\r\n{1} is evolving!\\^",@pokemon.name))
  682. Kernel.pbMessageWaitForInput(@sprites["msgwindow"],100,true)
  683. pbPlayDecisionSE()
  684. oldstate=pbSaveSpriteState(@sprites["rsprite1"])
  685. oldstate2=pbSaveSpriteState(@sprites["rsprite2"])
  686. pbBGMPlay("evolv")
  687. canceled=false
  688. begin
  689. metaplayer1.update
  690. metaplayer2.update
  691. Graphics.update
  692. Input.update
  693. if Input.trigger?(Input::B) && cancancel
  694. canceled=true
  695. pbRestoreSpriteState(@sprites["rsprite1"],oldstate)
  696. pbRestoreSpriteState(@sprites["rsprite2"],oldstate2)
  697. Graphics.update
  698. break
  699. end
  700. end while metaplayer1.playing? && metaplayer2.playing?
  701. if canceled
  702. pbBGMStop()
  703. pbPlayCancelSE()
  704. Kernel.pbMessageDisplay(@sprites["msgwindow"],
  705. _INTL("Huh?\r\n{1} stopped evolving!",@pokemon.name))
  706. else
  707. frames=pbCryFrameLength(@newspecies)
  708. pbBGMStop()
  709. pbPlayCry(@newspecies)
  710. frames.times do
  711. Graphics.update
  712. end
  713. pbMEPlay("004-Victory04")
  714. newspeciesname=PBSpecies.getName(@newspecies)
  715. oldspeciesname=PBSpecies.getName(@pokemon.species)
  716. Kernel.pbMessageDisplay(@sprites["msgwindow"],
  717. _INTL("\\se[]Congratulations! Your {1} evolved into {2}!\\wt[80]",@pokemon.name,newspeciesname))
  718. @sprites["msgwindow"].text=""
  719. removeItem=false
  720. createSpecies=pbCheckEvolutionEx(@pokemon){|pokemon,evonib,level,poke|
  721. if evonib==PBEvolution::Shedinja
  722. if $PokemonBag.pbQuantity(getConst(PBItems,:POKEBALL))>0
  723. next poke
  724. end
  725. next -1
  726. elsif evonib==PBEvolution::TradeItem ||
  727. evonib==PBEvolution::DayHoldItem ||
  728. evonib==PBEvolution::NightHoldItem
  729. if poke==@newspecies
  730. removeItem=true # Item is now consumed
  731. end
  732. next -1
  733. else
  734. next -1
  735. end
  736. }
  737. @pokemon.setItem(0) if removeItem
  738. @pokemon.species=@newspecies
  739. $Trainer.seen[@newspecies]=true
  740. $Trainer.owned[@newspecies]=true
  741. pbSeenForm(@pokemon)
  742. @pokemon.firstmoves=[]
  743. @pokemon.name=newspeciesname if @pokemon.name==oldspeciesname
  744. @pokemon.calcStats
  745. # Check moves for new species
  746. movelist=@pokemon.getMoveList
  747. for i in movelist
  748. if i[0]==@pokemon.level # Learned a new move
  749. pbLearnMove(@pokemon,i[1],true)
  750. end
  751. end
  752. if createSpecies>0 && $Trainer.party.length<6
  753. newpokemon=@pokemon.clone
  754. newpokemon.iv=@pokemon.iv.clone
  755. newpokemon.ev=@pokemon.ev.clone
  756. newpokemon.species=createSpecies
  757. newpokemon.name=PBSpecies.getName(createSpecies)
  758. newpokemon.setItem(0)
  759. newpokemon.clearAllRibbons
  760. newpokemon.markings=0
  761. newpokemon.ballused=0
  762. newpokemon.calcStats
  763. newpokemon.heal
  764. $Trainer.party.push(newpokemon)
  765. $Trainer.seen[createSpecies]=true
  766. $Trainer.owned[createSpecies]=true
  767. pbSeenForm(newpokemon)
  768. $PokemonBag.pbDeleteItem(getConst(PBItems,:POKEBALL))
  769. end
  770. end
  771. end
  772. end
  773.  
  774.  
  775.  
  776. #===============================================================================
  777. # Evolution methods
  778. #===============================================================================
  779. def pbMiniCheckEvolution(pokemon,evonib,level,poke)
  780. case evonib
  781. when PBEvolution::Happiness
  782. return poke if pokemon.happiness>=220
  783. when PBEvolution::HappinessDay
  784. return poke if pokemon.happiness>=220 && PBDayNight.isDay?(pbGetTimeNow)
  785. when PBEvolution::HappinessNight
  786. return poke if pokemon.happiness>=220 && PBDayNight.isNight?(pbGetTimeNow)
  787. when PBEvolution::Level
  788. return poke if pokemon.level>=level
  789. when PBEvolution::Trade, PBEvolution::TradeItem
  790. return -1
  791. when PBEvolution::AttackGreater # Hitmonlee
  792. return poke if pokemon.level>=level && pokemon.attack>pokemon.defense
  793. when PBEvolution::AtkDefEqual # Hitmontop
  794. return poke if pokemon.level>=level && pokemon.attack==pokemon.defense
  795. when PBEvolution::DefenseGreater # Hitmonchan
  796. return poke if pokemon.level>=level && pokemon.attack<pokemon.defense
  797. when PBEvolution::Silcoon
  798. return poke if pokemon.level>=level && (((pokemon.personalID>>16)&0xFFFF)%10)<5
  799. when PBEvolution::Cascoon
  800. return poke if pokemon.level>=level && (((pokemon.personalID>>16)&0xFFFF)%10)>=5
  801. when PBEvolution::Ninjask
  802. return poke if pokemon.level>=level
  803. when PBEvolution::Shedinja
  804. return -1
  805. when PBEvolution::Beauty # Feebas
  806. return poke if pokemon.beauty>=level
  807. when PBEvolution::DayHoldItem
  808. return poke if pokemon.item==level && PBDayNight.isDay?(pbGetTimeNow)
  809. when PBEvolution::NightHoldItem
  810. return poke if pokemon.item==level && PBDayNight.isNight?(pbGetTimeNow)
  811. when PBEvolution::HasMove
  812. for i in 0...4
  813. return poke if pokemon.moves[i].id==level
  814. end
  815. when PBEvolution::HasInParty
  816. for i in $Trainer.party
  817. return poke if !i.isEgg? && i.species==level
  818. end
  819. when PBEvolution::LevelMale
  820. return poke if pokemon.level>=level && pokemon.isMale?
  821. when PBEvolution::LevelFemale
  822. return poke if pokemon.level>=level && pokemon.isFemale?
  823. when PBEvolution::Location
  824. return poke if $game_map.map_id==level
  825. when PBEvolution::TradeSpecies
  826. return -1
  827. when PBEvolution::HappinessMoveType
  828. for i in 0...4
  829. return poke if pokemon.happiness>=220 && pokemon.moves[i].type==level
  830. end
  831. when PBEvolution::TypeDark
  832. for i in $Trainer.party
  833. return poke if pokemon.level>=level && !i.egg? && (i.type1==17 || i.type2==17)
  834. end
  835. when PBEvolution::LevelRain
  836. return poke if pokemon.level>=level && $game_screen && ($game_screen.weather==1 || $game_screen.weather==2)
  837. when PBEvolution::LevelDay
  838. return poke if pokemon.level>=level&& PBDayNight.isDay?(pbGetTimeNow)
  839. when PBEvolution::LevelNight
  840. return poke if pokemon.level>=level && PBDayNight.isNight?(pbGetTimeNow)
  841. when PBEvolution::UpsideDownLevel
  842. return poke if pokemon.level>=level
  843. when PBEvolution::Custom7
  844. # Add code for custom evolution type 7
  845. end
  846. return -1
  847. end
  848.  
  849. def pbMiniCheckEvolutionItem(pokemon,evonib,level,poke,item)
  850. # Checks for when an item is used on the Pokémon (e.g. an evolution stone)
  851. case evonib
  852. when PBEvolution::Item
  853. return poke if level==item
  854. when PBEvolution::ItemMale
  855. return poke if level==item && pokemon.isMale?
  856. when PBEvolution::ItemFemale
  857. return poke if level==item && pokemon.isFemale?
  858. end
  859. return -1
  860. end
  861.  
  862. # Checks whether a Pokemon can evolve now. If a block is given, calls the block
  863. # with the following parameters:
  864. # Pokemon to check; evolution type; level or other parameter; ID of the new Pokemon species
  865. def pbCheckEvolutionEx(pokemon)
  866. return -1 if pokemon.species<=0 || pokemon.isEgg?
  867. return -1 if isConst?(pokemon.species,PBSpecies,:PICHU) && pokemon.form==1
  868. return -1 if isConst?(pokemon.item,PBItems,:EVERSTONE)
  869. ret=-1
  870. for form in pbGetEvolvedFormData(pokemon.species)
  871. ret=yield pokemon,form[0],form[1],form[2]
  872. break if ret>0
  873. end
  874. return ret
  875. end
  876.  
  877. # Checks whether a Pokemon can evolve now. If an item is used on the Pokémon,
  878. # checks whether the Pokemon can evolve with the given item.
  879. def pbCheckEvolution(pokemon,item=0)
  880. if item==0
  881. return pbCheckEvolutionEx(pokemon){|pokemon,evonib,level,poke|
  882. next pbMiniCheckEvolution(pokemon,evonib,level,poke)
  883. }
  884. else
  885. return pbCheckEvolutionEx(pokemon){|pokemon,evonib,level,poke|
  886. next pbMiniCheckEvolutionItem(pokemon,evonib,level,poke,item)
  887. }
  888. end
  889. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement