Advertisement
Guest User

Untitled

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