Advertisement
Guest User

PScreen_Summary

a guest
May 20th, 2018
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 44.39 KB | None | 0 0
  1. class MoveSelectionSprite < SpriteWrapper
  2. attr_reader :preselected
  3. attr_reader :index
  4. def initialize(viewport=nil,fifthmove=false)
  5. super(viewport)
  6. @movesel = AnimatedBitmap.new("Graphics/Pictures/Summary/cursor_move")
  7. @frame = 0
  8. @index = 0
  9. @fifthmove = fifthmove
  10. @preselected = false
  11. @updating = false
  12. refresh
  13. end
  14. def dispose
  15. @movesel.dispose
  16. super
  17. end
  18. def index=(value)
  19. @index = value
  20. refresh
  21. end
  22. def preselected=(value)
  23. @preselected = value
  24. refresh
  25. end
  26. def refresh
  27. w = @movesel.width
  28. h = @movesel.height/2
  29. self.x = 240
  30. self.y = 92+(self.index*64)
  31. self.y -= 76 if @fifthmove
  32. self.y += 20 if @fifthmove && self.index==4
  33. self.bitmap = @movesel.bitmap
  34. if self.preselected
  35. self.src_rect.set(0,h,w,h)
  36. else
  37. self.src_rect.set(0,0,w,h)
  38. end
  39. end
  40. def update
  41. @updating = true
  42. super
  43. @movesel.update
  44. @updating = false
  45. refresh
  46. end
  47. end
  48.  
  49. class RibbonSelectionSprite < MoveSelectionSprite
  50. def initialize(viewport=nil)
  51. super(viewport)
  52. @movesel = AnimatedBitmap.new("Graphics/Pictures/Summary/cursor_ribbon")
  53. @frame = 0
  54. @index = 0
  55. @preselected = false
  56. @updating = false
  57. @spriteVisible = true
  58. refresh
  59. end
  60. def visible=(value)
  61. super
  62. @spriteVisible = value if !@updating
  63. end
  64. def refresh
  65. w = @movesel.width
  66. h = @movesel.height/2
  67. self.x = 228+(self.index%4)*68
  68. self.y = 76+((self.index/4).floor*68)
  69. self.bitmap = @movesel.bitmap
  70. if self.preselected
  71. self.src_rect.set(0,h,w,h)
  72. else
  73. self.src_rect.set(0,0,w,h)
  74. end
  75. end
  76. def update
  77. @updating = true
  78. super
  79. self.visible = @spriteVisible && @index>=0 && @index<12
  80. @movesel.update
  81. @updating = false
  82. refresh
  83. end
  84. end
  85.  
  86. class PokemonSummary_Scene
  87. def pbUpdate
  88. pbUpdateSpriteHash(@sprites)
  89. end
  90. def pbStartScene(party,partyindex)
  91. @viewport = Viewport.new(0,0,Graphics.width,Graphics.height)
  92. @viewport.z = 99999
  93. @party = party
  94. @partyindex = partyindex
  95. @pokemon = @party[@partyindex]
  96. @page = 1
  97. @typebitmap = AnimatedBitmap.new(_INTL("Graphics/Pictures/types"))
  98. @markingbitmap = AnimatedBitmap.new("Graphics/Pictures/Summary/markings")
  99. @sprites = {}
  100. @sprites["background"] = IconSprite.new(0,0,@viewport)
  101. @sprites["pokemon"] = PokemonSprite.new(@viewport)
  102. @sprites["pokemon"].setOffset(PictureOrigin::Center)
  103. @sprites["pokemon"].x = 104
  104. @sprites["pokemon"].y = 206
  105. @sprites["pokemon"].setPokemonBitmap(@pokemon)
  106. @sprites["pokeicon"] = PokemonIconSprite.new(@pokemon,@viewport)
  107. @sprites["pokeicon"].x = 14
  108. @sprites["pokeicon"].y = 52
  109. @sprites["pokeicon"].visible = false
  110. @sprites["itemicon"] = ItemIconSprite.new(30,320,@pokemon.item,@viewport)
  111. @sprites["itemicon"].blankzero = true
  112. @sprites["overlay"] = BitmapSprite.new(Graphics.width,Graphics.height,@viewport)
  113. pbSetSystemFont(@sprites["overlay"].bitmap)
  114. @sprites["movepresel"] = MoveSelectionSprite.new(@viewport)
  115. @sprites["movepresel"].visible = false
  116. @sprites["movepresel"].preselected = true
  117. @sprites["movesel"] = MoveSelectionSprite.new(@viewport)
  118. @sprites["movesel"].visible = false
  119. @sprites["ribbonpresel"] = RibbonSelectionSprite.new(@viewport)
  120. @sprites["ribbonpresel"].visible = false
  121. @sprites["ribbonpresel"].preselected = true
  122. @sprites["ribbonsel"] = RibbonSelectionSprite.new(@viewport)
  123. @sprites["ribbonsel"].visible = false
  124. @sprites["uparrow"] = AnimatedSprite.new("Graphics/Pictures/uparrow",8,28,40,2,@viewport)
  125. @sprites["uparrow"].x = 350
  126. @sprites["uparrow"].y = 56
  127. @sprites["uparrow"].play
  128. @sprites["uparrow"].visible = false
  129. @sprites["downarrow"] = AnimatedSprite.new("Graphics/Pictures/downarrow",8,28,40,2,@viewport)
  130. @sprites["downarrow"].x = 350
  131. @sprites["downarrow"].y = 260
  132. @sprites["downarrow"].play
  133. @sprites["downarrow"].visible = false
  134. @sprites["markingbg"] = IconSprite.new(260,88,@viewport)
  135. @sprites["markingbg"].setBitmap("Graphics/Pictures/Summary/overlay_marking")
  136. @sprites["markingbg"].visible = false
  137. @sprites["markingoverlay"] = BitmapSprite.new(Graphics.width,Graphics.height,@viewport)
  138. @sprites["markingoverlay"].visible = false
  139. pbSetSystemFont(@sprites["markingoverlay"].bitmap)
  140. @sprites["markingsel"] = IconSprite.new(0,0,@viewport)
  141. @sprites["markingsel"].setBitmap("Graphics/Pictures/Summary/cursor_marking")
  142. @sprites["markingsel"].src_rect.height = @sprites["markingsel"].bitmap.height/2
  143. @sprites["markingsel"].visible = false
  144. @sprites["messagebox"] = Window_AdvancedTextPokemon.new("")
  145. @sprites["messagebox"].viewport = @viewport
  146. @sprites["messagebox"].visible = false
  147. @sprites["messagebox"].letterbyletter = true
  148. pbBottomLeftLines(@sprites["messagebox"],2)
  149. drawPage(@page)
  150. pbFadeInAndShow(@sprites) { pbUpdate }
  151. end
  152. def pbStartForgetScene(party,partyindex,moveToLearn)
  153. @viewport = Viewport.new(0,0,Graphics.width,Graphics.height)
  154. @viewport.z = 99999
  155. @party = party
  156. @partyindex = partyindex
  157. @pokemon = @party[@partyindex]
  158. @page = 4
  159. @typebitmap = AnimatedBitmap.new(_INTL("Graphics/Pictures/types"))
  160. @sprites = {}
  161. @sprites["background"] = IconSprite.new(0,0,@viewport)
  162. @sprites["overlay"] = BitmapSprite.new(Graphics.width,Graphics.height,@viewport)
  163. pbSetSystemFont(@sprites["overlay"].bitmap)
  164. @sprites["pokeicon"] = PokemonIconSprite.new(@pokemon,@viewport)
  165. @sprites["pokeicon"].x = 14
  166. @sprites["pokeicon"].y = 52
  167. @sprites["movesel"] = MoveSelectionSprite.new(@viewport,moveToLearn>0)
  168. @sprites["movesel"].visible = false
  169. @sprites["movesel"].visible = true
  170. @sprites["movesel"].index = 0
  171. drawSelectedMove(moveToLearn,@pokemon.moves[0].id)
  172. pbFadeInAndShow(@sprites)
  173. end
  174. def pbEndScene
  175. pbFadeOutAndHide(@sprites) { pbUpdate }
  176. pbDisposeSpriteHash(@sprites)
  177. @typebitmap.dispose
  178. @markingbitmap.dispose if @markingbitmap
  179. @viewport.dispose
  180. end
  181. def pbDisplay(text)
  182. @sprites["messagebox"].text = text
  183. @sprites["messagebox"].visible = true
  184. pbPlayDecisionSE()
  185. loop do
  186. Graphics.update
  187. Input.update
  188. pbUpdate
  189. if @sprites["messagebox"].busy?
  190. if Input.trigger?(Input::C)
  191. pbPlayDecisionSE() if @sprites["messagebox"].pausing?
  192. @sprites["messagebox"].resume
  193. end
  194. elsif Input.trigger?(Input::C) || Input.trigger?(Input::B)
  195. break
  196. end
  197. end
  198. @sprites["messagebox"].visible = false
  199. end
  200. def pbConfirm(text)
  201. ret = -1
  202. @sprites["messagebox"].text = text
  203. @sprites["messagebox"].visible = true
  204. using(cmdwindow = Window_CommandPokemon.new([_INTL("Yes"),_INTL("No")])){
  205. cmdwindow.z = @viewport.z+1
  206. cmdwindow.visible = false
  207. pbBottomRight(cmdwindow)
  208. cmdwindow.y -= @sprites["messagebox"].height
  209. loop do
  210. Graphics.update
  211. Input.update
  212. cmdwindow.visible = true if !@sprites["messagebox"].busy?
  213. cmdwindow.update
  214. pbUpdate
  215. if !@sprites["messagebox"].busy?
  216. if Input.trigger?(Input::B)
  217. ret = false
  218. break
  219. elsif Input.trigger?(Input::C) && @sprites["messagebox"].resume
  220. ret = (cmdwindow.index==0)
  221. break
  222. end
  223. end
  224. end
  225. }
  226. @sprites["messagebox"].visible = false
  227. return ret
  228. end
  229. def pbShowCommands(commands,index=0)
  230. ret = -1
  231. using(cmdwindow = Window_CommandPokemon.new(commands)) {
  232. cmdwindow.z = @viewport.z+1
  233. cmdwindow.index = index
  234. pbBottomRight(cmdwindow)
  235. loop do
  236. Graphics.update
  237. Input.update
  238. cmdwindow.update
  239. pbUpdate
  240. if Input.trigger?(Input::B)
  241. pbPlayCancelSE
  242. ret = -1
  243. break
  244. elsif Input.trigger?(Input::C)
  245. pbPlayDecisionSE
  246. ret = cmdwindow.index
  247. break
  248. end
  249. end
  250. }
  251. return ret
  252. end
  253. def drawMarkings(bitmap,x,y)
  254. markings = @pokemon.markings
  255. markrect = Rect.new(0,0,16,16)
  256. for i in 0...6
  257. markrect.x = i*16
  258. markrect.y = (markings&(1<<i)!=0) ? 16 : 0
  259. bitmap.blt(x+i*16,y,@markingbitmap.bitmap,markrect)
  260. end
  261. end
  262. def drawPage(page)
  263. if @pokemon.isEgg?
  264. drawPageOneEgg; return
  265. end
  266. @sprites["itemicon"].item = @pokemon.item
  267. overlay = @sprites["overlay"].bitmap
  268. overlay.clear
  269. base = Color.new(248,248,248)
  270. shadow = Color.new(104,104,104)
  271. # Set background image
  272. @sprites["background"].setBitmap("Graphics/Pictures/Summary/bg_#{page}")
  273. imagepos=[]
  274. # Show the Poké Ball containing the Pokémon
  275. ballimage = sprintf("Graphics/Pictures/Summary/icon_ball_%02d",@pokemon.ballused)
  276. imagepos.push([ballimage,14,60,0,0,-1,-1])
  277. # Show status/fainted/Pokérus infected icon
  278. status = -1
  279. status = 6 if @pokemon.pokerusStage==1
  280. status = @pokemon.status-1 if @pokemon.status>0
  281. status = 5 if @pokemon.hp==0
  282. if status>=0
  283. imagepos.push(["Graphics/Pictures/statuses",124,100,0,16*status,44,16])
  284. end
  285. # Show Pokérus cured icon
  286. if @pokemon.pokerusStage==2
  287. imagepos.push([sprintf("Graphics/Pictures/Summary/icon_pokerus"),176,100,0,0,-1,-1])
  288. end
  289. # Show shininess star
  290. if @pokemon.isShiny?
  291. imagepos.push([sprintf("Graphics/Pictures/shiny"),2,134,0,0,-1,-1])
  292. end
  293. # Draw all images
  294. pbDrawImagePositions(overlay,imagepos)
  295. textpos = []
  296. # Write various bits of text
  297. pagename = [_INTL("INFO"),
  298. _INTL("TRAINER MEMO"),
  299. _INTL("SKILLS"),
  300. _INTL("EV's & IV's"),
  301. _INTL("MOVES"),
  302. _INTL("RIBBONS")][page-1]
  303. textpos = [
  304. [pagename,26,16,0,base,shadow],
  305. [@pokemon.name,46,62,0,base,shadow],
  306. [@pokemon.level.to_s,46,92,0,Color.new(255,255,255),Color.new(104,104,104)],
  307. [_INTL("Item"),66,318,0,Color.new(255,255,255),shadow]
  308. ]
  309. # Write the held item's name
  310. if @pokemon.hasItem?
  311. textpos.push([PBItems.getName(@pokemon.item),16,352,0,Color.new(255,255,255),Color.new(104,104,104)])
  312. else
  313. textpos.push([_INTL("None"),16,352,0,Color.new(255,255,255),Color.new(208,216,224)])
  314. end
  315. # Write the gender symbol
  316. if @pokemon.isMale?
  317. textpos.push([_INTL("♂"),178,62,0,Color.new(24,112,216),Color.new(136,168,208)])
  318. elsif @pokemon.isFemale?
  319. textpos.push([_INTL("♀"),178,62,0,Color.new(248,56,32),Color.new(224,152,144)])
  320. end
  321. # Draw all text
  322. pbDrawTextPositions(overlay,textpos)
  323. # Draw the Pokémon's markings
  324. drawMarkings(overlay,84,292)
  325. # Draw page-specific information
  326. case page
  327. when 1; drawPageOne
  328. when 2; drawPageTwo
  329. when 3; drawPageThree
  330. when 4; drawPageFour
  331. when 5; drawPageFive
  332. when 6; drawPageSix
  333. end
  334. end
  335. def drawPageOne
  336. overlay = @sprites["overlay"].bitmap
  337. base = Color.new(248,248,248)
  338. shadow = Color.new(104,104,104)
  339. dexNumBase = (@pokemon.isShiny?) ? Color.new(248,56,32) : Color.new(64,64,64)
  340. dexNumShadow = (@pokemon.isShiny?) ? Color.new(224,152,144) : Color.new(176,176,176)
  341. # If a Shadow Pokémon, draw the heart gauge area and bar
  342. if (@pokemon.isShadow? rescue false)
  343. shadowfract = @pokemon.heartgauge*1.0/PokeBattle_Pokemon::HEARTGAUGESIZE
  344. imagepos = [
  345. ["Graphics/Pictures/Summary/overlay_shadow",224,240,0,0,-1,-1],
  346. ["Graphics/Pictures/Summary/overlay_shadowbar",242,280,0,0,(shadowfract*248).floor,-1]
  347. ]
  348. pbDrawImagePositions(overlay,imagepos)
  349. end
  350. # Write various bits of text
  351. textpos = [
  352. [_INTL("Dex No."),238,80,0,base,shadow],
  353. [_INTL("Species"),238,112,0,base,shadow],
  354. [PBSpecies.getName(@pokemon.species),435,112,2,Color.new(64,64,64),Color.new(176,176,176)],
  355. [_INTL("Type"),238,144,0,base,shadow],
  356. [_INTL("OT"),238,176,0,base,shadow],
  357. [_INTL("ID No."),238,208,0,base,shadow],
  358. ]
  359. # Write the Regional/National Dex number
  360. dexnum = @pokemon.species
  361. dexnumshift = false
  362. if $PokemonGlobal.pokedexUnlocked[$PokemonGlobal.pokedexUnlocked.length-1]
  363. dexnumshift = true if DEXINDEXOFFSETS.include?(-1)
  364. else
  365. dexnum = 0
  366. for i in 0...$PokemonGlobal.pokedexUnlocked.length-1
  367. if $PokemonGlobal.pokedexUnlocked
  368. num = pbGetRegionalNumber(i,@pokemon.species)
  369. if num>0
  370. dexnum = num
  371. dexnumshift = true if DEXINDEXOFFSETS.include?(i)
  372. break
  373. end
  374. end
  375. end
  376. end
  377. if dexnum<=0
  378. textpos.push(["???",435,80,2,dexNumBase,dexNumShadow])
  379. else
  380. dexnum -= 1 if dexnumshift
  381. textpos.push([sprintf("%03d",dexnum),435,80,2,dexNumBase,dexNumShadow])
  382. end
  383. # Write Original Trainer's name and ID number
  384. if @pokemon.ot==""
  385. textpos.push([_INTL("RENTAL"),435,176,2,Color.new(64,64,64),Color.new(176,176,176)])
  386. textpos.push(["?????",435,208,2,Color.new(64,64,64),Color.new(176,176,176)])
  387. else
  388. ownerbase = Color.new(64,64,64)
  389. ownershadow = Color.new(176,176,176)
  390. case @pokemon.otgender
  391. when 0; ownerbase = Color.new(24,112,216); ownershadow = Color.new(136,168,208)
  392. when 1; ownerbase = Color.new(248,56,32); ownershadow = Color.new(224,152,144)
  393. end
  394. textpos.push([@pokemon.ot,435,176,2,ownerbase,ownershadow])
  395. textpos.push([sprintf("%05d",@pokemon.publicID),435,208,2,Color.new(64,64,64),Color.new(176,176,176)])
  396. end
  397. # Write Exp text OR heart gauge message (if a Shadow Pokémon)
  398. growthrate = @pokemon.growthrate
  399. startexp = PBExperience.pbGetStartExperience(@pokemon.level,growthrate)
  400. endexp = PBExperience.pbGetStartExperience(@pokemon.level+1,growthrate)
  401. if (@pokemon.isShadow? rescue false)
  402. textpos.push([_INTL("Heart Gauge"),238,240,0,base,shadow])
  403. heartmessage = [_INTL("The door to its heart is open! Undo the final lock!"),
  404. _INTL("The door to its heart is almost fully open."),
  405. _INTL("The door to its heart is nearly open."),
  406. _INTL("The door to its heart is opening wider."),
  407. _INTL("The door to its heart is opening up."),
  408. _INTL("The door to its heart is tightly shut.")][@pokemon.heartStage]
  409. memo = sprintf("<c3=404040,B0B0B0>%s\n",heartmessage)
  410. drawFormattedTextEx(overlay,234,304,264,memo)
  411. else
  412. textpos.push([_INTL("Exp. Points"),238,240,0,base,shadow])
  413. textpos.push([pbCommaNumber(@pokemon.exp),488,272,1,Color.new(64,64,64),Color.new(176,176,176)])
  414. textpos.push([_INTL("To Next Lv."),238,304,0,base,shadow])
  415. textpos.push([pbCommaNumber(endexp-@pokemon.exp),488,336,1,Color.new(64,64,64),Color.new(176,176,176)])
  416. end
  417. # Draw all text
  418. pbDrawTextPositions(overlay,textpos)
  419. # Draw Pokémon type(s)
  420. type1rect = Rect.new(0,@pokemon.type1*28,64,28)
  421. type2rect = Rect.new(0,@pokemon.type2*28,64,28)
  422. if @pokemon.type1==@pokemon.type2
  423. overlay.blt(402,146,@typebitmap.bitmap,type1rect)
  424. else
  425. overlay.blt(370,146,@typebitmap.bitmap,type1rect)
  426. overlay.blt(436,146,@typebitmap.bitmap,type2rect)
  427. end
  428. # Draw Exp bar
  429. if @pokemon.level<PBExperience::MAXLEVEL
  430. pbDrawImagePositions(overlay,[
  431. ["Graphics/Pictures/Summary/overlay_exp",362,372,0,0,(@pokemon.exp-startexp)*128/(endexp-startexp),6]
  432. ])
  433. end
  434. end
  435. def drawPageOneEgg
  436. @sprites["itemicon"].item = @pokemon.item
  437. overlay = @sprites["overlay"].bitmap
  438. overlay.clear
  439. base = Color.new(248,248,248)
  440. shadow = Color.new(104,104,104)
  441. pbSetSystemFont(overlay)
  442. # Set background image
  443. @sprites["background"].setBitmap("Graphics/Pictures/Summary/bg_egg")
  444. imagepos = []
  445. # Show the Poké Ball containing the Pokémon
  446. ballimage = sprintf("Graphics/Pictures/Summary/icon_ball_%02d",@pokemon.ballused)
  447. imagepos.push([ballimage,14,60,0,0,-1,-1])
  448. # Draw all images
  449. pbDrawImagePositions(overlay,imagepos)
  450. # Write various bits of text
  451. textpos=[
  452. [_INTL("TRAINER MEMO"),26,16,0,base,shadow],
  453. [@pokemon.name,46,62,0,base,shadow],
  454. [_INTL("Item"),62,318,0,base,shadow]
  455. ]
  456. # Write the held item's name
  457. if @pokemon.hasItem?
  458. textpos.push([PBItems.getName(@pokemon.item),16,352,0,Color.new(64,64,64),Color.new(176,176,176)])
  459. else
  460. textpos.push([_INTL("None"),16,352,0,Color.new(184,184,160),Color.new(208,208,200)])
  461. end
  462. # Draw all text
  463. pbDrawTextPositions(overlay,textpos)
  464. memo = ""
  465. # Write date received
  466. if @pokemon.timeReceived
  467. date = @pokemon.timeReceived.day
  468. month = pbGetMonthName(@pokemon.timeReceived.mon)
  469. year = @pokemon.timeReceived.year
  470. memo += _INTL("<c3=404040,B0B0B0>{1} {2}, {3}\n",date,month,year)
  471. end
  472. # Write map name egg was received on
  473. mapname = pbGetMapNameFromId(@pokemon.obtainMap)
  474. if (@pokemon.obtainText rescue false) && @pokemon.obtainText!=""
  475. mapname=@pokemon.obtainText
  476. end
  477. if mapname && mapname!=""
  478. memo+=_INTL("<c3=404040,B0B0B0>A mysterious Pokémon Egg received from <c3=F83820,E09890>{1}<c3=404040,B0B0B0>.\n",mapname)
  479. else
  480. memo+=_INTL("<c3=404040,B0B0B0>A mysterious Pokémon Egg.\n",mapname)
  481. end
  482. memo+="\n" # Empty line
  483. # Write Egg Watch blurb
  484. memo += _INTL("<c3=404040,B0B0B0>\"The Egg Watch\"\n")
  485. eggstate = _INTL("It looks like this Egg will take a long time to hatch.")
  486. eggstate = _INTL("What will hatch from this? It doesn't seem close to hatching.") if @pokemon.eggsteps<10200
  487. eggstate = _INTL("It appears to move occasionally. It may be close to hatching.") if @pokemon.eggsteps<2550
  488. eggstate = _INTL("Sounds can be heard coming from inside! It will hatch soon!") if @pokemon.eggsteps<1275
  489. memo += sprintf("<c3=404040,B0B0B0>%s\n",eggstate)
  490. # Draw all text
  491. drawFormattedTextEx(overlay,232,78,268,memo)
  492. # Draw the Pokémon's markings
  493. drawMarkings(overlay,82,292)
  494. end
  495. def drawPageTwo
  496. overlay = @sprites["overlay"].bitmap
  497. base = Color.new(248,248,248)
  498. shadow = Color.new(104,104,104)
  499. memo = ""
  500. # Write nature
  501. shownature = !(@pokemon.isShadow? && @pokemon.heartStage<=3 rescue false)
  502. if shownature
  503. naturename = PBNatures.getName(@pokemon.nature)
  504. memo += _INTL("<c3=F83820,E09890>{1}<c3=404040,B0B0B0> nature.\n",naturename)
  505. end
  506. # Write date received
  507. if @pokemon.timeReceived
  508. date = @pokemon.timeReceived.day
  509. month = pbGetMonthName(@pokemon.timeReceived.mon)
  510. year = @pokemon.timeReceived.year
  511. memo += _INTL("<c3=404040,B0B0B0>{1} {2}, {3}\n",date,month,year)
  512. end
  513. # Write map name Pokémon was received on
  514. mapname = pbGetMapNameFromId(@pokemon.obtainMap)
  515. if (@pokemon.obtainText rescue false) && @pokemon.obtainText!=""
  516. mapname = @pokemon.obtainText
  517. end
  518. mapname = INTL("Faraway place") if !mapname || mapname==""
  519. memo += sprintf("<c3=F83820,E09890>%s\n",mapname)
  520. # Write how Pokémon was obtained
  521. mettext = [_INTL("Met at Lv. {1}.",@pokemon.obtainLevel),
  522. _INTL("Egg received."),
  523. _INTL("Traded at Lv. {1}.",@pokemon.obtainLevel),
  524. "",
  525. _INTL("Had a fateful encounter at Lv. {1}.",@pokemon.obtainLevel)
  526. ][@pokemon.obtainMode]
  527. memo += sprintf("<c3=404040,B0B0B0>%s\n",mettext) if mettext && mettext!=""
  528. # If Pokémon was hatched, write when and where it hatched
  529. if @pokemon.obtainMode==1
  530. if @pokemon.timeEggHatched
  531. date = @pokemon.timeEggHatched.day
  532. month = pbGetMonthName(@pokemon.timeEggHatched.mon)
  533. year = @pokemon.timeEggHatched.year
  534. memo += _INTL("<c3=404040,B0B0B0>{1} {2}, {3}\n",date,month,year)
  535. end
  536. mapname = pbGetMapNameFromId(@pokemon.hatchedMap)
  537. mapname = INTL("Faraway place") if !mapname || mapname==""
  538. memo += sprintf("<c3=F83820,E09890>%s\n",mapname)
  539. memo += _INTL("<c3=404040,B0B0B0>Egg hatched.\n")
  540. else
  541. memo += "\n" # Empty line
  542. end
  543. # Write characteristic
  544. if shownature
  545. bestiv = 0
  546. tiebreaker = @pokemon.personalID%6
  547. for i in 0...6
  548. if @pokemon.iv[i]==@pokemon.iv[bestiv]
  549. bestiv = i if i>=tiebreaker && bestiv<tiebreaker
  550. elsif @pokemon.iv[i]>@pokemon.iv[bestiv]
  551. bestiv = i
  552. end
  553. end
  554. characteristic = [_INTL("Loves to eat."),
  555. _INTL("Often dozes off."),
  556. _INTL("Often scatters things."),
  557. _INTL("Scatters things often."),
  558. _INTL("Likes to relax."),
  559. _INTL("Proud of its power."),
  560. _INTL("Likes to thrash about."),
  561. _INTL("A little quick tempered."),
  562. _INTL("Likes to fight."),
  563. _INTL("Quick tempered."),
  564. _INTL("Sturdy body."),
  565. _INTL("Capable of taking hits."),
  566. _INTL("Highly persistent."),
  567. _INTL("Good endurance."),
  568. _INTL("Good perseverance."),
  569. _INTL("Likes to run."),
  570. _INTL("Alert to sounds."),
  571. _INTL("Impetuous and silly."),
  572. _INTL("Somewhat of a clown."),
  573. _INTL("Quick to flee."),
  574. _INTL("Highly curious."),
  575. _INTL("Mischievous."),
  576. _INTL("Thoroughly cunning."),
  577. _INTL("Often lost in thought."),
  578. _INTL("Very finicky."),
  579. _INTL("Strong willed."),
  580. _INTL("Somewhat vain."),
  581. _INTL("Strongly defiant."),
  582. _INTL("Hates to lose."),
  583. _INTL("Somewhat stubborn.")
  584. ][bestiv*5+@pokemon.iv[bestiv]%5]
  585. memo += sprintf("<c3=404040,B0B0B0>%s\n",characteristic)
  586. end
  587. # Write all text
  588. drawFormattedTextEx(overlay,232,78,268,memo)
  589. end
  590.  
  591. def drawPageThree
  592. overlay = @sprites["overlay"].bitmap
  593. base = Color.new(248,248,248)
  594. shadow = Color.new(104,104,104)
  595. # Determine which stats are boosted and lowered by the Pokémon's nature
  596. statshadows = []
  597. for i in 0...5; statshadows[i] = shadow; end
  598. if !(@pokemon.isShadow? && @pokemon.heartStage<=3 rescue false)
  599. natup = (@pokemon.nature/5).floor
  600. natdn = (@pokemon.nature%5).floor
  601. statshadows[natup] = Color.new(136,96,72) if natup!=natdn
  602. statshadows[natdn] = Color.new(64,120,152) if natup!=natdn
  603. end
  604. # Write various bits of text
  605. textpos = [
  606. [_INTL("HP"),292,76,2,base,shadow],
  607. [sprintf("%d/%d",@pokemon.hp,@pokemon.totalhp),462,76,1,Color.new(64,64,64),Color.new(176,176,176)],
  608. [_INTL("Attack"),248,120,0,base,statshadows[0]],
  609. [sprintf("%d",@pokemon.attack),456,120,1,Color.new(64,64,64),Color.new(176,176,176)],
  610. [_INTL("Defense"),248,152,0,base,statshadows[1]],
  611. [sprintf("%d",@pokemon.defense),456,152,1,Color.new(64,64,64),Color.new(176,176,176)],
  612. [_INTL("Sp. Atk"),248,184,0,base,statshadows[3]],
  613. [sprintf("%d",@pokemon.spatk),456,184,1,Color.new(64,64,64),Color.new(176,176,176)],
  614. [_INTL("Sp. Def"),248,216,0,base,statshadows[4]],
  615. [sprintf("%d",@pokemon.spdef),456,216,1,Color.new(64,64,64),Color.new(176,176,176)],
  616. [_INTL("Speed"),248,248,0,base,statshadows[2]],
  617. [sprintf("%d",@pokemon.speed),456,248,1,Color.new(64,64,64),Color.new(176,176,176)],
  618. [_INTL("Ability"),224,284,0,base,shadow],
  619. [PBAbilities.getName(@pokemon.ability),362,284,0,Color.new(64,64,64),Color.new(176,176,176)],
  620. ]
  621. # Draw all text
  622. pbDrawTextPositions(overlay,textpos)
  623. # Draw ability description
  624. abilitydesc = pbGetMessage(MessageTypes::AbilityDescs,@pokemon.ability)
  625. drawTextEx(overlay,224,316,282,2,abilitydesc,Color.new(64,64,64),Color.new(176,176,176))
  626. # Draw HP bar
  627. if @pokemon.hp>0
  628. hpzone = 0
  629. hpzone = 1 if @pokemon.hp<=(@pokemon.totalhp/2).floor
  630. hpzone = 2 if @pokemon.hp<=(@pokemon.totalhp/4).floor
  631. imagepos = [
  632. ["Graphics/Pictures/Summary/overlay_hp",360,110,0,hpzone*6,@pokemon.hp*96/@pokemon.totalhp,6]
  633. ]
  634. pbDrawImagePositions(overlay,imagepos)
  635. end
  636. end
  637.  
  638. def drawPageFour
  639. overlay = @sprites["overlay"].bitmap
  640. base = Color.new(248,248,248)
  641. shadow = Color.new(104,104,104)
  642. naturename = PBNatures.getName(@pokemon.nature)
  643. # Determine which stats are boosted and lowered by the Pokémon's nature
  644. statshadows = []
  645. for i in 0...5; statshadows[i] = shadow; end
  646. if !(@pokemon.isShadow? && @pokemon.heartStage<=3 rescue false)
  647. natup = (@pokemon.nature/5).floor
  648. natdn = (@pokemon.nature%5).floor
  649. statshadows[natup] = Color.new(136,96,72) if natup!=natdn
  650. statshadows[natdn] = Color.new(64,120,152) if natup!=natdn
  651. end
  652. # Write various bits of text
  653. textpos = [
  654. [_INTL("HP"),292,76,2,base,shadow],
  655. [sprintf("%d/%d",@pokemon.ev[0],@pokemon.iv[0]),456,76,1,Color.new(64,64,64),Color.new(176,176,176)],
  656. [_INTL("Attack"),248,120,0,base,statshadows[1]],
  657. [sprintf("%d/%d",@pokemon.ev[1],@pokemon.iv[1]),456,120,1,Color.new(64,64,64),Color.new(176,176,176)],
  658. [_INTL("Defense"),248,152,0,base,statshadows[2]],
  659. [sprintf("%d/%d",@pokemon.ev[2],@pokemon.iv[2]),456,152,1,Color.new(64,64,64),Color.new(176,176,176)],
  660. [_INTL("Sp. Atk"),248,184,0,base,statshadows[4]],
  661. [sprintf("%d/%d",@pokemon.ev[4],@pokemon.iv[4]),456,184,1,Color.new(64,64,64),Color.new(176,176,176)],
  662. [_INTL("Sp. Def"),248,216,0,base,statshadows[5]],
  663. [sprintf("%d/%d",@pokemon.ev[5],@pokemon.iv[5]),456,216,1,Color.new(64,64,64),Color.new(176,176,176)],
  664. [_INTL("Speed"),248,248,0,base,statshadows[3]],
  665. [sprintf("%d/%d",@pokemon.ev[3],@pokemon.iv[3]),456,248,1,Color.new(64,64,64),Color.new(176,176,176)],
  666. [_INTL("Nature"),224,284,0,base,shadow],
  667. [naturename,362,284,0,Color.new(64,64,64),Color.new(176,176,176)],
  668. ]
  669. # Draw all text
  670. pbDrawTextPositions(overlay,textpos)
  671. # Draw HP bar
  672. if @pokemon.hp>0
  673. hpzone = 0
  674. hpzone = 1 if @pokemon.hp<=(@pokemon.totalhp/2).floor
  675. hpzone = 2 if @pokemon.hp<=(@pokemon.totalhp/4).floor
  676. imagepos = [
  677. ["Graphics/Pictures/Summary/overlay_hp",360,110,0,hpzone*6,@pokemon.hp*96/@pokemon.totalhp,6]
  678. ]
  679. pbDrawImagePositions(overlay,imagepos)
  680. end
  681. end
  682.  
  683. def drawPageFive
  684. overlay = @sprites["overlay"].bitmap
  685. moveBase = Color.new(64,64,64)
  686. moveShadow = Color.new(176,176,176)
  687. ppBase = [moveBase, # More than 1/2 of total PP
  688. Color.new(248,192,0), # 1/2 of total PP or less
  689. Color.new(248,136,32), # 1/4 of total PP or less
  690. Color.new(248,72,72)] # Zero PP
  691. ppShadow = [moveShadow, # More than 1/2 of total PP
  692. Color.new(144,104,0), # 1/2 of total PP or less
  693. Color.new(144,72,24), # 1/4 of total PP or less
  694. Color.new(136,48,48)] # Zero PP
  695. @sprites["pokemon"].visible = true
  696. @sprites["pokeicon"].visible = false
  697. @sprites["itemicon"].visible = true
  698. textpos = []
  699. imagepos = []
  700. # Write move names, types and PP amounts for each known move
  701. yPos = 98
  702. for i in 0...@pokemon.moves.length
  703. move=@pokemon.moves[i]
  704. if move.id>0
  705. imagepos.push(["Graphics/Pictures/types",248,yPos+2,0,move.type*28,64,28])
  706. textpos.push([PBMoves.getName(move.id),316,yPos,0,moveBase,moveShadow])
  707. if move.totalpp>0
  708. textpos.push([_INTL("PP"),342,yPos+32,0,moveBase,moveShadow])
  709. ppfraction = 0
  710. if move.pp==0; ppfraction = 3
  711. elsif move.pp*4<=move.totalpp; ppfraction = 2
  712. elsif move.pp*2<=move.totalpp; ppfraction = 1
  713. end
  714. textpos.push([sprintf("%d/%d",move.pp,move.totalpp),460,yPos+32,1,ppBase[ppfraction],ppShadow[ppfraction]])
  715. end
  716. else
  717. textpos.push(["-",316,yPos,0,moveBase,moveShadow])
  718. textpos.push(["--",442,yPos+32,1,moveBase,moveShadow])
  719. end
  720. yPos += 64
  721. end
  722. # Draw all text and images
  723. pbDrawTextPositions(overlay,textpos)
  724. pbDrawImagePositions(overlay,imagepos)
  725. end
  726. def drawSelectedMove(moveToLearn,moveid)
  727. # Draw all of page four, except selected move's details
  728. drawMoveSelection(moveToLearn)
  729. # Set various values
  730. overlay = @sprites["overlay"].bitmap
  731. pbSetSystemFont(overlay)
  732. base = Color.new(64,64,64)
  733. shadow = Color.new(176,176,176)
  734. @sprites["pokemon"].visible = false if @sprites["pokemon"]
  735. @sprites["pokeicon"].pokemon = @pokemon
  736. @sprites["pokeicon"].visible = true
  737. @sprites["itemicon"].visible = false if @sprites["itemicon"]
  738. # Get data for selected move
  739. movedata = PBMoveData.new(moveid)
  740. basedamage = movedata.basedamage
  741. type = movedata.type
  742. category = movedata.category
  743. accuracy = movedata.accuracy
  744. move = moveid
  745. textpos = []
  746. # Write power and accuracy values for selected move
  747. if basedamage==0 # Status move
  748. textpos.push(["---",216,154,1,base,shadow])
  749. elsif basedamage==1 # Variable power move
  750. textpos.push(["???",216,154,1,base,shadow])
  751. else
  752. textpos.push([sprintf("%d",basedamage),216,154,1,base,shadow])
  753. end
  754. if accuracy==0
  755. textpos.push(["---",216,186,1,base,shadow])
  756. else
  757. textpos.push([sprintf("%d%",accuracy),216+overlay.text_size("%").width,186,1,base,shadow])
  758. end
  759. # Draw all text
  760. pbDrawTextPositions(overlay,textpos)
  761. # Draw selected move's damage category icon
  762. imagepos = [["Graphics/Pictures/category",166,124,0,category*28,64,28]]
  763. pbDrawImagePositions(overlay,imagepos)
  764. # Draw selected move's description
  765. drawTextEx(overlay,4,218,230,5,
  766. pbGetMessage(MessageTypes::MoveDescriptions,moveid),base,shadow)
  767. end
  768.  
  769. def drawMoveSelection(moveToLearn)
  770. overlay = @sprites["overlay"].bitmap
  771. overlay.clear
  772. base = Color.new(248,248,248)
  773. shadow = Color.new(104,104,104)
  774. moveBase = Color.new(64,64,64)
  775. moveShadow = Color.new(176,176,176)
  776. ppBase = [moveBase, # More than 1/2 of total PP
  777. Color.new(248,192,0), # 1/2 of total PP or less
  778. Color.new(248,136,32), # 1/4 of total PP or less
  779. Color.new(248,72,72)] # Zero PP
  780. ppShadow = [moveShadow, # More than 1/2 of total PP
  781. Color.new(144,104,0), # 1/2 of total PP or less
  782. Color.new(144,72,24), # 1/4 of total PP or less
  783. Color.new(136,48,48)] # Zero PP
  784. pbSetSystemFont(overlay)
  785. # Set background image
  786. if moveToLearn!=0
  787. @sprites["background"].setBitmap("Graphics/Pictures/Summary/bg_learnmove")
  788. else
  789. @sprites["background"].setBitmap("Graphics/Pictures/Summary/bg_movedetail")
  790. end
  791. # Write various bits of text
  792. textpos = [
  793. [_INTL("MOVES"),26,16,0,base,shadow],
  794. [_INTL("CATEGORY"),20,122,0,base,shadow],
  795. [_INTL("POWER"),20,154,0,base,shadow],
  796. [_INTL("ACCURACY"),20,186,0,base,shadow]
  797. ]
  798. imagepos = []
  799. # Write move names, types and PP amounts for each known move
  800. yPos = 98
  801. yPos -= 76 if moveToLearn!=0
  802. for i in 0...5
  803. move = @pokemon.moves[i]
  804. if i==4
  805. move = PBMove.new(moveToLearn) if moveToLearn!=0
  806. yPos += 20
  807. end
  808. if move && move.id>0
  809. imagepos.push(["Graphics/Pictures/types",248,yPos+2,0,move.type*28,64,28])
  810. textpos.push([PBMoves.getName(move.id),316,yPos,0,moveBase,moveShadow])
  811. if move.totalpp>0
  812. textpos.push([_INTL("PP"),342,yPos+32,0,moveBase,moveShadow])
  813. ppfraction = 0
  814. if move.pp==0; ppfraction = 3
  815. elsif move.pp*4<=move.totalpp; ppfraction = 2
  816. elsif move.pp*2<=move.totalpp; ppfraction = 1
  817. end
  818. textpos.push([sprintf("%d/%d",move.pp,move.totalpp),460,yPos+32,1,ppBase[ppfraction],ppShadow[ppfraction]])
  819. end
  820. else
  821. textpos.push(["-",316,yPos,0,moveBase,moveShadow])
  822. textpos.push(["--",442,yPos+32,1,moveBase,moveShadow])
  823. end
  824. yPos += 64
  825. end
  826. # Draw all text and images
  827. pbDrawTextPositions(overlay,textpos)
  828. pbDrawImagePositions(overlay,imagepos)
  829. # Draw Pokémon's type icon(s)
  830. type1rect = Rect.new(0,@pokemon.type1*28,64,28)
  831. type2rect = Rect.new(0,@pokemon.type2*28,64,28)
  832. if @pokemon.type1==@pokemon.type2
  833. overlay.blt(130,78,@typebitmap.bitmap,type1rect)
  834. else
  835. overlay.blt(96,78,@typebitmap.bitmap,type1rect)
  836. overlay.blt(166,78,@typebitmap.bitmap,type2rect)
  837. end
  838. end
  839. def drawPageSix
  840. overlay = @sprites["overlay"].bitmap
  841. base = Color.new(248,248,248)
  842. shadow = Color.new(104,104,104)
  843. @sprites["uparrow"].visible = false
  844. @sprites["downarrow"].visible = false
  845. # Write various bits of text
  846. textpos = [
  847. [_INTL("No. of Ribbons:"),234,332,0,Color.new(64,64,64),Color.new(176,176,176)],
  848. [@pokemon.ribbonCount.to_s,450,332,1,Color.new(64,64,64),Color.new(176,176,176)],
  849. ]
  850. # Draw all text
  851. pbDrawTextPositions(overlay,textpos)
  852. # Show all ribbons
  853. imagepos = []
  854. coord = 0
  855. if @pokemon.ribbons
  856. for i in @ribbonOffset*4...@ribbonOffset*4+12
  857. break if !@pokemon.ribbons[i]
  858. ribn = @pokemon.ribbons[i]-1
  859. imagepos.push(["Graphics/Pictures/ribbons",230+68*(coord%4),78+68*(coord/4).floor,
  860. 64*(ribn%8),64*(ribn/8).floor,64,64])
  861. coord += 1
  862. break if coord>=12
  863. end
  864. end
  865. # Draw all images
  866. pbDrawImagePositions(overlay,imagepos)
  867. end
  868. def drawSelectedRibbon(ribbonid)
  869. # Draw all of page five
  870. drawPage(6)
  871. # Set various values
  872. overlay = @sprites["overlay"].bitmap
  873. pbSetSystemFont(overlay)
  874. base = Color.new(64,64,64)
  875. shadow = Color.new(176,176,176)
  876. nameBase = Color.new(248,248,248)
  877. nameShadow = Color.new(104,104,104)
  878. # Get data for selected ribbon
  879. name = ribbonid ? PBRibbons.getName(ribbonid) : ""
  880. desc = ribbonid ? PBRibbons.getDescription(ribbonid) : ""
  881. # Draw the description box
  882. imagepos = [
  883. ["Graphics/Pictures/Summary/overlay_ribbon",8,280,0,0,-1,-1]
  884. ]
  885. pbDrawImagePositions(overlay,imagepos)
  886. # Draw name of selected ribbon
  887. textpos = [
  888. [name,18,286,0,nameBase,nameShadow]
  889. ]
  890. pbDrawTextPositions(overlay,textpos)
  891. # Draw selected ribbon's description
  892. drawTextEx(overlay,18,318,480,2,desc,base,shadow)
  893. end
  894. def pbGoToPrevious
  895. newindex = @partyindex
  896. while newindex>0
  897. newindex -= 1
  898. if @party[newindex] && (@page==1 || !@party[newindex].isEgg?)
  899. @partyindex = newindex
  900. break
  901. end
  902. end
  903. end
  904. def pbGoToNext
  905. newindex = @partyindex
  906. while newindex<@party.length-1
  907. newindex += 1
  908. if @party[newindex] && (@page==1 || !@party[newindex].isEgg?)
  909. @partyindex = newindex
  910. break
  911. end
  912. end
  913. end
  914. def pbMoveSelection
  915. @sprites["movesel"].visible = true
  916. @sprites["movesel"].index = 0
  917. selmove = 0
  918. oldselmove = 0
  919. switching = false
  920. drawSelectedMove(0,@pokemon.moves[selmove].id)
  921. loop do
  922. Graphics.update
  923. Input.update
  924. pbUpdate
  925. if @sprites["movepresel"].index==@sprites["movesel"].index
  926. @sprites["movepresel"].z = @sprites["movesel"].z+1
  927. else
  928. @sprites["movepresel"].z = @sprites["movesel"].z
  929. end
  930. if Input.trigger?(Input::B)
  931. pbPlayCancelSE
  932. break if !switching
  933. @sprites["movepresel"].visible = false
  934. switching = false
  935. elsif Input.trigger?(Input::C)
  936. pbPlayDecisionSE
  937. if selmove==4
  938. break if !switching
  939. @sprites["movepresel"].visible = false
  940. switching = false
  941. else
  942. if !(@pokemon.isShadow? rescue false)
  943. if !switching
  944. @sprites["movepresel"].index = selmove
  945. @sprites["movepresel"].visible = true
  946. oldselmove = selmove
  947. switching = true
  948. else
  949. tmpmove = @pokemon.moves[oldselmove]
  950. @pokemon.moves[oldselmove] = @pokemon.moves[selmove]
  951. @pokemon.moves[selmove] = tmpmove
  952. @sprites["movepresel"].visible = false
  953. switching = false
  954. drawSelectedMove(0,@pokemon.moves[selmove].id)
  955. end
  956. end
  957. end
  958. elsif Input.trigger?(Input::UP)
  959. selmove -= 1
  960. if selmove<4 && selmove>=@pokemon.numMoves
  961. selmove = @pokemon.numMoves-1
  962. end
  963. selmove = 0 if selmove>=4
  964. selmove = @pokemon.numMoves-1 if selmove<0
  965. @sprites["movesel"].index = selmove
  966. newmove = @pokemon.moves[selmove].id
  967. pbPlayCursorSE
  968. drawSelectedMove(0,newmove)
  969. elsif Input.trigger?(Input::DOWN)
  970. selmove += 1
  971. selmove = 0 if selmove<4 && selmove>=@pokemon.numMoves
  972. selmove = 0 if selmove>=4
  973. selmove = 4 if selmove<0
  974. @sprites["movesel"].index = selmove
  975. newmove = @pokemon.moves[selmove].id
  976. pbPlayCursorSE
  977. drawSelectedMove(0,newmove)
  978. end
  979. end
  980. @sprites["movesel"].visible=false
  981. end
  982. def pbRibbonSelection
  983. @sprites["ribbonsel"].visible = true
  984. @sprites["ribbonsel"].index = 0
  985. selribbon = @ribbonOffset*4
  986. oldselribbon = selribbon
  987. switching = false
  988. numRibbons = @pokemon.ribbons.length
  989. numRows = [((numRibbons+3)/4).floor,3].max
  990. drawSelectedRibbon(@pokemon.ribbons[selribbon])
  991. loop do
  992. @sprites["uparrow"].visible = (@ribbonOffset>0)
  993. @sprites["downarrow"].visible = (@ribbonOffset<numRows-3)
  994. Graphics.update
  995. Input.update
  996. pbUpdate
  997. if @sprites["ribbonpresel"].index==@sprites["ribbonsel"].index
  998. @sprites["ribbonpresel"].z = @sprites["ribbonsel"].z+1
  999. else
  1000. @sprites["ribbonpresel"].z = @sprites["ribbonsel"].z
  1001. end
  1002. hasMovedCursor = false
  1003. if Input.trigger?(Input::B)
  1004. pbPlayCancelSE
  1005. break if !switching
  1006. @sprites["ribbonpresel"].visible = false
  1007. switching = false
  1008. elsif Input.trigger?(Input::C)
  1009. if !switching
  1010. if @pokemon.ribbons[selribbon]
  1011. pbPlayDecisionSE
  1012. @sprites["ribbonpresel"].index = selribbon-@ribbonOffset*4
  1013. oldselribbon = selribbon
  1014. @sprites["ribbonpresel"].visible = true
  1015. switching = true
  1016. end
  1017. else
  1018. pbPlayDecisionSE
  1019. tmpribbon = @pokemon.ribbons[oldselribbon]
  1020. @pokemon.ribbons[oldselribbon] = @pokemon.ribbons[selribbon]
  1021. @pokemon.ribbons[selribbon] = tmpribbon
  1022. if @pokemon.ribbons[oldselribbon] || @pokemon.ribbons[selribbon]
  1023. @pokemon.ribbons.compact!
  1024. if selribbon>=numRibbons
  1025. selribbon = numRibbons-1
  1026. hasMovedCursor = true
  1027. end
  1028. end
  1029. @sprites["ribbonpresel"].visible = false
  1030. switching = false
  1031. drawSelectedRibbon(@pokemon.ribbons[selribbon])
  1032. end
  1033. elsif Input.trigger?(Input::UP)
  1034. selribbon -= 4
  1035. selribbon += numRows*4 if selribbon<0
  1036. hasMovedCursor = true
  1037. pbPlayCursorSE
  1038. elsif Input.trigger?(Input::DOWN)
  1039. selribbon += 4
  1040. selribbon -= numRows*4 if selribbon>=numRows*4
  1041. hasMovedCursor = true
  1042. pbPlayCursorSE
  1043. elsif Input.trigger?(Input::LEFT)
  1044. selribbon -= 1
  1045. selribbon += 4 if selribbon%4==3
  1046. hasMovedCursor = true
  1047. pbPlayCursorSE
  1048. elsif Input.trigger?(Input::RIGHT)
  1049. selribbon += 1
  1050. selribbon -= 4 if selribbon%4==0
  1051. hasMovedCursor = true
  1052. pbPlayCursorSE
  1053. end
  1054. if hasMovedCursor
  1055. @ribbonOffset = (selribbon/4).floor if selribbon<@ribbonOffset*4
  1056. @ribbonOffset = (selribbon/4).floor-2 if selribbon>=(@ribbonOffset+3)*4
  1057. @ribbonOffset = 0 if @ribbonOffset<0
  1058. @ribbonOffset = numRows-3 if @ribbonOffset>numRows-3
  1059. @sprites["ribbonsel"].index = selribbon-@ribbonOffset*4
  1060. @sprites["ribbonpresel"].index = oldselribbon-@ribbonOffset*4
  1061. drawSelectedRibbon(@pokemon.ribbons[selribbon])
  1062. end
  1063. end
  1064. @sprites["ribbonsel"].visible = false
  1065. end
  1066. def pbMarking(pokemon)
  1067. @sprites["markingbg"].visible = true
  1068. @sprites["markingoverlay"].visible = true
  1069. @sprites["markingsel"].visible = true
  1070. base = Color.new(248,248,248)
  1071. shadow = Color.new(104,104,104)
  1072. ret = pokemon.markings
  1073. markings = pokemon.markings
  1074. index = 0
  1075. redraw = true
  1076. markrect = Rect.new(0,0,16,16)
  1077. loop do
  1078. # Redraw the markings and text
  1079. if redraw
  1080. @sprites["markingoverlay"].bitmap.clear
  1081. for i in 0...6
  1082. markrect.x = i*16
  1083. markrect.y = (markings&(1<<i)!=0) ? 16 : 0
  1084. @sprites["markingoverlay"].bitmap.blt(300+58*(i%3),154+50*(i/3),@markingbitmap.bitmap,markrect)
  1085. end
  1086. textpos = [
  1087. [_INTL("Mark {1}",pokemon.name),366,96,2,base,shadow],
  1088. [_INTL("OK"),366,248,2,base,shadow],
  1089. [_INTL("Cancel"),366,298,2,base,shadow]
  1090. ]
  1091. pbDrawTextPositions(@sprites["markingoverlay"].bitmap,textpos)
  1092. redraw = false
  1093. end
  1094. # Reposition the cursor
  1095. @sprites["markingsel"].x = 284+58*(index%3)
  1096. @sprites["markingsel"].y = 144+50*(index/3)
  1097. if index==6 # OK
  1098. @sprites["markingsel"].x = 284
  1099. @sprites["markingsel"].y = 244
  1100. @sprites["markingsel"].src_rect.y = @sprites["markingsel"].bitmap.height/2
  1101. elsif index==7 # Cancel
  1102. @sprites["markingsel"].x = 284
  1103. @sprites["markingsel"].y = 294
  1104. @sprites["markingsel"].src_rect.y = @sprites["markingsel"].bitmap.height/2
  1105. else
  1106. @sprites["markingsel"].src_rect.y = 0
  1107. end
  1108. Graphics.update
  1109. Input.update
  1110. pbUpdate
  1111. if Input.trigger?(Input::B)
  1112. pbPlayCancelSE
  1113. break
  1114. elsif Input.trigger?(Input::C)
  1115. pbPlayDecisionSE
  1116. if index==6 # OK
  1117. ret = markings
  1118. break
  1119. elsif index==7 # Cancel
  1120. break
  1121. else
  1122. mask = (1<<index)
  1123. if (markings&mask)==0
  1124. markings |= mask
  1125. else
  1126. markings &= ~mask
  1127. end
  1128. redraw = true
  1129. end
  1130. elsif Input.trigger?(Input::UP)
  1131. if index==7; index = 6
  1132. elsif index==6; index = 4
  1133. elsif index<3; index = 7
  1134. else; index -= 3
  1135. end
  1136. pbPlayCursorSE
  1137. elsif Input.trigger?(Input::DOWN)
  1138. if index==7; index = 1
  1139. elsif index==6; index = 7
  1140. elsif index>=3; index = 6
  1141. else; index += 3
  1142. end
  1143. pbPlayCursorSE
  1144. elsif Input.trigger?(Input::LEFT)
  1145. if index<6
  1146. index -= 1
  1147. index += 3 if index%3==2
  1148. pbPlayCursorSE
  1149. end
  1150. elsif Input.trigger?(Input::RIGHT)
  1151. if index<6
  1152. index += 1
  1153. index -= 3 if index%3==0
  1154. pbPlayCursorSE
  1155. end
  1156. end
  1157. end
  1158. @sprites["markingbg"].visible = false
  1159. @sprites["markingoverlay"].visible = false
  1160. @sprites["markingsel"].visible = false
  1161. if pokemon.markings!=ret
  1162. pokemon.markings = ret
  1163. return true
  1164. end
  1165. return false
  1166. end
  1167. def pbOptions
  1168. dorefresh = false
  1169. commands = []
  1170. cmdGiveItem = -1
  1171. cmdTakeItem = -1
  1172. cmdPokedex = -1
  1173. cmdMark = -1
  1174. commands[cmdGiveItem = commands.length] = _INTL("Give item")
  1175. commands[cmdTakeItem = commands.length] = _INTL("Take item") if @pokemon.hasItem?
  1176. commands[cmdPokedex = commands.length] = _INTL("View Pokédex")
  1177. commands[cmdMark = commands.length] = _INTL("Mark")
  1178. commands[commands.length] = _INTL("Cancel")
  1179. command = pbShowCommands(commands)
  1180. if cmdGiveItem>=0 && command==cmdGiveItem
  1181. item = 0
  1182. pbFadeOutIn(99999){
  1183. scene = PokemonBag_Scene.new
  1184. screen = PokemonBagScreen.new(scene,$PokemonBag)
  1185. item = screen.pbChooseItemScreen(Proc.new{|item| pbCanHoldItem?(item) })
  1186. }
  1187. if item>0
  1188. dorefresh = pbGiveItemToPokemon(item,@pokemon,self,@partyindex)
  1189. end
  1190. elsif cmdTakeItem>=0 && command==cmdTakeItem
  1191. dorefresh = pbTakeItemFromPokemon(@pokemon,self)
  1192. elsif cmdPokedex>=0 && command==cmdPokedex
  1193. pbUpdateLastSeenForm(@pokemon)
  1194. pbFadeOutIn(99999){
  1195. scene = PokemonPokedexInfo_Scene.new
  1196. screen = PokemonPokedexInfoScreen.new(scene)
  1197. screen.pbStartSceneSingle(@pokemon.species)
  1198. }
  1199. dorefresh = true
  1200. elsif cmdMark>=0 && command==cmdMark
  1201. dorefresh = pbMarking(@pokemon)
  1202. end
  1203. return dorefresh
  1204. end
  1205. def pbChooseMoveToForget(moveToLearn)
  1206. selmove = 0
  1207. maxmove = (moveToLearn>0) ? 4 : 3
  1208. loop do
  1209. Graphics.update
  1210. Input.update
  1211. pbUpdate
  1212. if Input.trigger?(Input::B)
  1213. selmove = 4
  1214. pbPlayCancelSE
  1215. break
  1216. elsif Input.trigger?(Input::C)
  1217. pbPlayDecisionSE
  1218. break
  1219. elsif Input.trigger?(Input::UP)
  1220. selmove -= 1
  1221. selmove = maxmove if selmove<0
  1222. if selmove<4 && selmove>=@pokemon.numMoves
  1223. selmove = @pokemon.numMoves-1
  1224. end
  1225. @sprites["movesel"].index = selmove
  1226. newmove = (selmove==4) ? moveToLearn : @pokemon.moves[selmove].id
  1227. drawSelectedMove(moveToLearn,newmove)
  1228. elsif Input.trigger?(Input::DOWN)
  1229. selmove += 1
  1230. selmove = 0 if selmove>maxmove
  1231. if selmove<4 && selmove>=@pokemon.numMoves
  1232. selmove = (moveToLearn>0) ? maxmove : 0
  1233. end
  1234. @sprites["movesel"].index = selmove
  1235. newmove = (selmove==4) ? moveToLearn : @pokemon.moves[selmove].id
  1236. drawSelectedMove(moveToLearn,newmove)
  1237. end
  1238. end
  1239. return (selmove==4) ? -1 : selmove
  1240. end
  1241. def pbScene
  1242. pbPlayCry(@pokemon)
  1243. loop do
  1244. Graphics.update
  1245. Input.update
  1246. pbUpdate
  1247. dorefresh = false
  1248. if Input.trigger?(Input::A)
  1249. pbSEStop; pbPlayCry(@pokemon)
  1250. elsif Input.trigger?(Input::B)
  1251. pbPlayCancelSE
  1252. break
  1253. elsif Input.trigger?(Input::C)
  1254. pbPlayDecisionSE
  1255. if @page==5
  1256. pbMoveSelection
  1257. dorefresh = true
  1258. elsif @page==6
  1259. pbRibbonSelection
  1260. dorefresh = true
  1261. else
  1262. dorefresh = pbOptions
  1263. end
  1264. elsif Input.trigger?(Input::UP) && @partyindex>0
  1265. oldindex = @partyindex
  1266. pbGoToPrevious
  1267. if @partyindex!=oldindex
  1268. @pokemon = @party[@partyindex]
  1269. @sprites["pokemon"].setPokemonBitmap(@pokemon)
  1270. @sprites["itemicon"].item = @pokemon.item
  1271. pbSEStop; pbPlayCry(@pokemon)
  1272. @ribbonOffset = 0
  1273. dorefresh = true
  1274. end
  1275. elsif Input.trigger?(Input::DOWN) && @partyindex<@party.length-1
  1276. oldindex = @partyindex
  1277. pbGoToNext
  1278. if @partyindex!=oldindex
  1279. @pokemon = @party[@partyindex]
  1280. @sprites["pokemon"].setPokemonBitmap(@pokemon)
  1281. @sprites["itemicon"].item = @pokemon.item
  1282. pbSEStop; pbPlayCry(@pokemon)
  1283. @ribbonOffset = 0
  1284. dorefresh = true
  1285. end
  1286. elsif Input.trigger?(Input::LEFT) && !@pokemon.isEgg?
  1287. oldpage = @page
  1288. @page -= 1
  1289. @page = 1 if @page<1
  1290. @page = 6 if @page>6
  1291. if @page!=oldpage # Move to next page
  1292. pbPlayCursorSE
  1293. @ribbonOffset = 0
  1294. dorefresh = true
  1295. end
  1296. elsif Input.trigger?(Input::RIGHT) && !@pokemon.isEgg?
  1297. oldpage = @page
  1298. @page += 1
  1299. @page = 1 if @page<1
  1300. @page = 6 if @page>6
  1301. if @page!=oldpage # Move to next page
  1302. pbPlayCursorSE
  1303. @ribbonOffset = 0
  1304. dorefresh = true
  1305. end
  1306. end
  1307. if dorefresh
  1308. drawPage(@page)
  1309. end
  1310. end
  1311. return @partyindex
  1312. end
  1313. end
  1314.  
  1315. class PokemonSummaryScreen
  1316. def initialize(scene)
  1317. @scene = scene
  1318. end
  1319. def pbStartScreen(party,partyindex)
  1320. @scene.pbStartScene(party,partyindex)
  1321. ret = @scene.pbScene
  1322. @scene.pbEndScene
  1323. return ret
  1324. end
  1325. def pbStartForgetScreen(party,partyindex,moveToLearn)
  1326. ret = -1
  1327. @scene.pbStartForgetScene(party,partyindex,moveToLearn)
  1328. loop do
  1329. ret = @scene.pbChooseMoveToForget(moveToLearn)
  1330. if ret>=0 && moveToLearn!=0 && pbIsHiddenMove?(party[partyindex].moves[ret].id) && !$DEBUG
  1331. Kernel.pbMessage(_INTL("HM moves can't be forgotten now.")){ @scene.pbUpdate }
  1332. else
  1333. break
  1334. end
  1335. end
  1336. @scene.pbEndScene
  1337. return ret
  1338. end
  1339. def pbStartChooseMoveScreen(party,partyindex,message)
  1340. ret = -1
  1341. @scene.pbStartForgetScene(party,partyindex,0)
  1342. Kernel.pbMessage(message){ @scene.pbUpdate }
  1343. loop do
  1344. ret = @scene.pbChooseMoveToForget(0)
  1345. if ret<0
  1346. Kernel.pbMessage(_INTL("You must choose a move!")){ @scene.pbUpdate }
  1347. else
  1348. break
  1349. end
  1350. end
  1351. @scene.pbEndScene
  1352. return ret
  1353. end
  1354. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement