Advertisement
Guest User

Untitled

a guest
Feb 9th, 2016
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 37.68 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/summarymovesel")
  8. @frame=0
  9. @index=0
  10. @fifthmove=fifthmove
  11. @preselected=false
  12. @updating=false
  13. @spriteVisible=true
  14. refresh
  15. end
  16.  
  17. def dispose
  18. @movesel.dispose
  19. super
  20. end
  21.  
  22. def index=(value)
  23. @index=value
  24. refresh
  25. end
  26.  
  27. def preselected=(value)
  28. @preselected=value
  29. refresh
  30. end
  31.  
  32. def visible=(value)
  33. super
  34. @spriteVisible=value if !@updating
  35. end
  36.  
  37. def refresh
  38. w=@movesel.width
  39. h=@movesel.height/2
  40. self.x=240
  41. self.y=92+(self.index*64)
  42. self.y-=76 if @fifthmove
  43. self.y+=20 if @fifthmove && self.index==4
  44. self.bitmap=@movesel.bitmap
  45. if self.preselected
  46. self.src_rect.set(0,h,w,h)
  47. else
  48. self.src_rect.set(0,0,w,h)
  49. end
  50. end
  51.  
  52. def update
  53. @updating=true
  54. super
  55. @movesel.update
  56. @updating=false
  57. refresh
  58. end
  59. end
  60.  
  61.  
  62.  
  63. class PokemonSummaryScene
  64. def pbPokerus(pkmn)
  65. return pkmn.pokerusStage
  66. end
  67.  
  68. def pbUpdate
  69. pbUpdateSpriteHash(@sprites)
  70. end
  71.  
  72. def pbStartScene(party,partyindex)
  73. @viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
  74. @viewport.z=99999
  75. @party=party
  76. @partyindex=partyindex
  77. @pokemon=@party[@partyindex]
  78. @sprites={}
  79. @typebitmap=AnimatedBitmap.new(_INTL("Graphics/Pictures/types"))
  80. @sprites["background"]=IconSprite.new(0,0,@viewport)
  81. @sprites["overlay"]=BitmapSprite.new(Graphics.width,Graphics.height,@viewport)
  82. @sprites["pokemon"]=PokemonSprite.new(@viewport)
  83. @sprites["pokemon"].setPokemonBitmap(@pokemon)
  84. @sprites["pokemon"].mirror=true
  85. @sprites["pokemon"].color=Color.new(0,0,0,0)
  86. pbPositionPokemonSprite(@sprites["pokemon"],22,90)
  87. @sprites["pokeicon"]=PokemonBoxIcon.new(@pokemon,@viewport)
  88. @sprites["pokeicon"].x=14
  89. @sprites["pokeicon"].y=52
  90. @sprites["pokeicon"].mirror=false
  91. @sprites["pokeicon"].visible=false
  92. @sprites["movepresel"]=MoveSelectionSprite.new(@viewport)
  93. @sprites["movepresel"].visible=false
  94. @sprites["movepresel"].preselected=true
  95. @sprites["movesel"]=MoveSelectionSprite.new(@viewport)
  96. @sprites["movesel"].visible=false
  97. @page=0
  98. drawPageOne(@pokemon)
  99. pbFadeInAndShow(@sprites) { pbUpdate }
  100. end
  101.  
  102. def pbStartForgetScene(party,partyindex,moveToLearn)
  103. @viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
  104. @viewport.z=99999
  105. @party=party
  106. @partyindex=partyindex
  107. @pokemon=@party[@partyindex]
  108. @sprites={}
  109. @page=3
  110. @typebitmap=AnimatedBitmap.new(_INTL("Graphics/Pictures/types"))
  111. @sprites["background"]=IconSprite.new(0,0,@viewport)
  112. @sprites["overlay"]=BitmapSprite.new(Graphics.width,Graphics.height,@viewport)
  113. @sprites["pokeicon"]=PokemonBoxIcon.new(@pokemon,@viewport)
  114. @sprites["pokeicon"].x=14
  115. @sprites["pokeicon"].y=52
  116. @sprites["pokeicon"].mirror=false
  117. @sprites["movesel"]=MoveSelectionSprite.new(@viewport,moveToLearn>0)
  118. @sprites["movesel"].visible=false
  119. @sprites["movesel"].visible=true
  120. @sprites["movesel"].index=0
  121. drawSelectedMove(@pokemon,moveToLearn,@pokemon.moves[0].id)
  122. pbFadeInAndShow(@sprites)
  123. end
  124.  
  125. def pbEndScene
  126. pbFadeOutAndHide(@sprites) { pbUpdate }
  127. pbDisposeSpriteHash(@sprites)
  128. @typebitmap.dispose
  129. @viewport.dispose
  130. end
  131.  
  132. def drawMarkings(bitmap,x,y,width,height,markings)
  133. totaltext=""
  134. oldfontname=bitmap.font.name
  135. oldfontsize=bitmap.font.size
  136. oldfontcolor=bitmap.font.color
  137. bitmap.font.size=24
  138. bitmap.font.name="Arial"
  139. PokemonStorage::MARKINGCHARS.each{|item| totaltext+=item }
  140. totalsize=bitmap.text_size(totaltext)
  141. realX=x+(width/2)-(totalsize.width/2)
  142. realY=y+(height/2)-(totalsize.height/2)
  143. i=0
  144. PokemonStorage::MARKINGCHARS.each{|item|
  145. marked=(markings&(1<<i))!=0
  146. bitmap.font.color=(marked) ? Color.new(72,64,56) : Color.new(184,184,160)
  147. itemwidth=bitmap.text_size(item).width
  148. bitmap.draw_text(realX,realY,itemwidth+2,totalsize.height,item)
  149. realX+=itemwidth
  150. i+=1
  151. }
  152. bitmap.font.name=oldfontname
  153. bitmap.font.size=oldfontsize
  154. bitmap.font.color=oldfontcolor
  155. end
  156.  
  157. def drawPageOne(pokemon)
  158. if pokemon.isEgg?
  159. drawPageOneEgg(pokemon)
  160. return
  161. end
  162. overlay=@sprites["overlay"].bitmap
  163. overlay.clear
  164. @sprites["background"].setBitmap("Graphics/Pictures/BrassSummary1")
  165. imagepos=[]
  166. if pbPokerus(pokemon)==1 || pokemon.hp==0 || @pokemon.status>0
  167. status=6 if pbPokerus(pokemon)==1
  168. status=@pokemon.status-1 if @pokemon.status>0
  169. status=5 if pokemon.hp==0
  170. imagepos.push(["Graphics/Pictures/statuses",120,230,0,16*status,44,16])
  171. end
  172. if pokemon.isShiny?
  173. imagepos.push([sprintf("Graphics/Pictures/shiny"),6,76,0,0,-1,-1])
  174. end
  175. if pbPokerus(pokemon)==2
  176. imagepos.push([sprintf("Graphics/Pictures/summaryPokerus"),414,6,0,0,-1,-1])
  177. end
  178. ballused=@pokemon.ballused ? @pokemon.ballused : 0
  179. ballimage=sprintf("Graphics/Pictures/summaryball%02d",@pokemon.ballused)
  180. imagepos.push([ballimage,36,286,0,0,-1,-1])
  181. pbDrawImagePositions(overlay,imagepos)
  182. base=Color.new(0,0,0)
  183. shadow=Color.new(104,104,104)
  184. white=Color.new(248,248,248)
  185. green=Color.new(136,248,104)
  186. pbSetSystemFont(overlay)
  187. # TO BE CHANGED IN THE FUTURE, currently affects nothing
  188. # (replaced with the colours above)
  189. numberbase=(pokemon.isShiny?) ? Color.new(248,56,32) : Color.new(64,64,64)
  190. numbershadow=(pokemon.isShiny?) ? Color.new(224,152,144) : Color.new(176,176,176)
  191. #
  192. publicID=pokemon.publicID
  193. speciesname=PBSpecies.getName(pokemon.species)
  194. growthrate=pokemon.growthrate
  195. startexp=PBExperience.pbGetStartExperience(pokemon.level,growthrate)
  196. endexp=PBExperience.pbGetStartExperience(pokemon.level+1,growthrate)
  197. pokename=@pokemon.name
  198. # Left side of the Summary Screen
  199. # Colours are base, white
  200. # To center text on this side, make sure X is 84 and the third numb is 2
  201. textpos=[
  202. [_INTL("INFO"),84,2,2,base,white],
  203. [pokename,84,34,2,base,white],
  204. [_INTL("Lv {1}",pokemon.level.to_s),74,286,0,base,white]]
  205. if pokemon.hasItem?
  206. textpos.push([PBItems.getName(pokemon.item),84,254,2,base,white])
  207. else
  208. textpos.push([_INTL("NONE"),62,254,0,base,white])
  209. end
  210. if pokemon.isMale?
  211. textpos.push([_INTL("♂"),6,222,0,Color.new(120,96,240),Color.new(248,248,248)])
  212. elsif pokemon.isFemale?
  213. textpos.push([_INTL("♀"),6,222,0,Color.new(248,56,8),Color.new(248,248,248)])
  214. end
  215. pbDrawTextPositions(overlay,textpos)
  216. # Rest of page one
  217. # Colours are base, green
  218. textpos=[
  219. [_ISPRINTF("Dex No."),228,36,2,base,green],
  220. [sprintf("%03d",pokemon.species),400,36,2,base,green],
  221. [_INTL("Species"),228,70,2,base,green],
  222. [speciesname,400,70,2,base,green],
  223. [_INTL("Type"),228,104,2,base,green],
  224. [_INTL("OT"),228,138,2,base,green],
  225. [_INTL("ID No."),228,170,2,base,green],
  226. ]
  227. textpos.push([_INTL("EXP."),228,254,2,base,green])
  228. textpos.push([sprintf("%d",pokemon.exp),400,254,2,base,green])
  229. textpos.push([_INTL("TO NEXT"),228,288,2,base,green])
  230. textpos.push([sprintf("%d",endexp-pokemon.exp),400,288,2,base,green])
  231. idno=(pokemon.ot=="") ? "?????" : sprintf("%05d",publicID)
  232. textpos.push([idno,402,170,2,base,green])
  233. if pokemon.ot==""
  234. textpos.push([_INTL("RENTAL"),402,138,2,Color.new(64,64,64),Color.new(176,176,176)])
  235. else
  236. textpos.push([pokemon.ot,402,138,2,base,green])
  237. end
  238. pbDrawTextPositions(overlay,textpos)
  239. drawMarkings(overlay,440,4,72,20,pokemon.markings)
  240. type1rect=Rect.new(0,pokemon.type1*28,64,28)
  241. type2rect=Rect.new(0,pokemon.type2*28,64,28)
  242. if pokemon.type1==pokemon.type2
  243. overlay.blt(368,104,@typebitmap.bitmap,type1rect)
  244. else
  245. overlay.blt(336,104,@typebitmap.bitmap,type1rect)
  246. overlay.blt(400,104,@typebitmap.bitmap,type2rect)
  247. end
  248. if pokemon.level<PBExperience::MAXLEVEL
  249. overlay.fill_rect(312,230,(pokemon.exp-startexp)*174/(endexp-startexp),6,Color.new(32,136,248))
  250. end
  251. end
  252.  
  253. def drawPageOneEgg(pokemon)
  254. overlay=@sprites["overlay"].bitmap
  255. overlay.clear
  256. @sprites["background"].setBitmap("Graphics/Pictures/BrassSummary1")
  257. imagepos=[]
  258. if pbPokerus(pokemon)==1 || pokemon.hp==0 || @pokemon.status>0
  259. status=6 if pbPokerus(pokemon)==1
  260. status=@pokemon.status-1 if @pokemon.status>0
  261. status=5 if pokemon.hp==0
  262. imagepos.push(["Graphics/Pictures/statuses",120,230,0,16*status,44,16])
  263. end
  264. if pokemon.isShiny?
  265. imagepos.push([sprintf("Graphics/Pictures/shiny"),6,76,0,0,-1,-1])
  266. end
  267. if pbPokerus(pokemon)==2
  268. imagepos.push([sprintf("Graphics/Pictures/summaryPokerus"),414,6,0,0,-1,-1])
  269. end
  270. ballused=@pokemon.ballused ? @pokemon.ballused : 0
  271. ballimage=sprintf("Graphics/Pictures/summaryball%02d",@pokemon.ballused)
  272. imagepos.push([ballimage,36,286,0,0,-1,-1])
  273. pbDrawImagePositions(overlay,imagepos)
  274. base=Color.new(0,0,0)
  275. shadow=Color.new(104,104,104)
  276. white=Color.new(248,248,248)
  277. green=Color.new(136,248,104)
  278. pbSetSystemFont(overlay)
  279. textpos=[
  280. [_INTL("INFO"),84,2,2,base,white],
  281. [pokename,84,34,2,base,white],
  282. [_INTL("EGG"),74,286,0,base,white]]
  283. if pokemon.hasItem?
  284. textpos.push([PBItems.getName(pokemon.item),84,254,2,base,white])
  285. else
  286. textpos.push([_INTL(""),62,254,0,base,white])
  287. end
  288. pbDrawTextPositions(overlay,textpos)
  289. memo=""
  290. if pokemon.timeReceived
  291. month=pbGetAbbrevMonthName(pokemon.timeReceived.mon)
  292. date=pokemon.timeReceived.day
  293. year=pokemon.timeReceived.year
  294. memo+=_INTL("<c3=404040,efe4b0>{1} {2}, {3}\n",month,date,year)
  295. end
  296. mapname=pbGetMapNameFromId(pokemon.obtainMap)
  297. if (pokemon.obtainText rescue false) && pokemon.obtainText!=""
  298. mapname=pokemon.obtainText
  299. end
  300. if mapname && mapname!=""
  301. memo+=_INTL("<c3=404040,efe4b0>A mysterious Pokémon Egg received from <c3=F83820,E09890>{1}<c3=404040,B0B0B0>.\n",mapname)
  302. end
  303. memo+="<c3=404040,efe4b0>\n"
  304. memo+=_INTL("<c3=404040,efe4b0>\"The Egg Watch\"\n")
  305. eggstate=_INTL("It looks like this Egg will take a long time to hatch.")
  306. eggstate=_INTL("What will hatch from this? It doesn't seem close to hatching.") if pokemon.eggsteps<10200
  307. eggstate=_INTL("It appears to move occasionally. It may be close to hatching.") if pokemon.eggsteps<2550
  308. eggstate=_INTL("Sounds can be heard coming from inside! It will hatch soon!") if pokemon.eggsteps<1275
  309. memo+=sprintf("<c3=404040,efe4b0>%s\n",eggstate)
  310. drawFormattedTextEx(overlay,232,78,276,memo)
  311. drawMarkings(overlay,440,4,72,20,pokemon.markings)
  312. end
  313.  
  314. def drawPageTwo(pokemon)
  315. overlay=@sprites["overlay"].bitmap
  316. overlay.clear
  317. @sprites["background"].setBitmap("Graphics/Pictures/BrassSummary2")
  318. imagepos=[]
  319. if pbPokerus(pokemon)==1 || pokemon.hp==0 || @pokemon.status>0
  320. status=6 if pbPokerus(pokemon)==1
  321. status=@pokemon.status-1 if @pokemon.status>0
  322. status=5 if pokemon.hp==0
  323. imagepos.push(["Graphics/Pictures/statuses",120,230,0,16*status,44,16])
  324. end
  325. if pokemon.isShiny?
  326. imagepos.push([sprintf("Graphics/Pictures/shiny"),6,76,0,0,-1,-1])
  327. end
  328. if pbPokerus(pokemon)==2
  329. imagepos.push([sprintf("Graphics/Pictures/summaryPokerus"),414,6,0,0,-1,-1])
  330. end
  331. ballused=@pokemon.ballused ? @pokemon.ballused : 0
  332. ballimage=sprintf("Graphics/Pictures/summaryball%02d",@pokemon.ballused)
  333. imagepos.push([ballimage,36,286,0,0,-1,-1])
  334. pbDrawImagePositions(overlay,imagepos)
  335. base=Color.new(0,0,0)
  336. shadow=Color.new(104,104,104)
  337. white=Color.new(248,248,248)
  338. vanilla=Color.new(239,228,176)
  339. pbSetSystemFont(overlay)
  340. naturename=PBNatures.getName(pokemon.nature)
  341. pokename=@pokemon.name
  342. # Left side of the Summary Screen
  343. # Colours are base, white
  344. # To center text on this side, make sure X is 84 and the third numb is 2
  345. textpos=[
  346. [_INTL("MEMO"),84,2,2,base,white],
  347. [pokename,84,34,2,base,white],
  348. [_INTL("Lv {1}",pokemon.level.to_s),74,286,0,base,white]]
  349. if pokemon.hasItem?
  350. textpos.push([PBItems.getName(pokemon.item),84,254,2,base,white])
  351. else
  352. textpos.push([_INTL("NONE"),62,254,0,base,white])
  353. end
  354. if pokemon.isMale?
  355. textpos.push([_INTL("♂"),6,222,0,Color.new(120,96,240),Color.new(248,248,248)])
  356. elsif pokemon.isFemale?
  357. textpos.push([_INTL("♀"),6,222,0,Color.new(248,56,8),Color.new(248,248,248)])
  358. end
  359. pbDrawTextPositions(overlay,textpos)
  360. ###
  361. # Mess incoming, SORRY
  362. memo=""
  363. shownature=(!(pokemon.isShadow? rescue false)) || pokemon.heartStage<=3
  364. if shownature
  365. textpos=[
  366. [_INTL("{1} nature.",naturename),191,36,0,base,vanilla]]
  367. pbDrawTextPositions(overlay,textpos)
  368. end
  369. if pokemon.timeReceived
  370. month=pbGetAbbrevMonthName(pokemon.timeReceived.mon)
  371. date=pokemon.timeReceived.day
  372. year=pokemon.timeReceived.year
  373. textpos=[
  374. [_INTL("{1} {2}, {3}\n",month,date,year),191,70,0,base,vanilla]]
  375. pbDrawTextPositions(overlay,textpos)
  376. end
  377. mapname=pbGetMapNameFromId(pokemon.obtainMap)
  378. if (pokemon.obtainText rescue false) && pokemon.obtainText!=""
  379. mapname=pokemon.obtainText
  380. end
  381. if mapname && mapname!=""
  382. textpos=[
  383. [_INTL("{1}",mapname),191,104,0,base,vanilla]]
  384. pbDrawTextPositions(overlay,textpos)
  385. else
  386. textpos=[
  387. [_INTL("Faraway place",mapname),191,104,0,base,vanilla]]
  388. pbDrawTextPositions(overlay,textpos)
  389. end
  390. if pokemon.obtainMode
  391. mettext=[_INTL("Met at Lv. {1}.",pokemon.obtainLevel),
  392. _INTL("Egg received."),
  393. _INTL("Traded at Lv. {1}.",pokemon.obtainLevel),
  394. "",
  395. _INTL("Had a fateful encounter at Lv. {1}.",pokemon.obtainLevel)
  396. ][pokemon.obtainMode]
  397. textpos=[
  398. [_INTL("{1}",mettext),191,138,0,base,vanilla]]
  399. pbDrawTextPositions(overlay,textpos)
  400. if pokemon.obtainMode==1 # hatched
  401. if pokemon.timeEggHatched
  402. month=pbGetAbbrevMonthName(pokemon.timeEggHatched.mon)
  403. date=pokemon.timeEggHatched.day
  404. year=pokemon.timeEggHatched.year
  405. textpos=[
  406. [_INTL("{1} {2}, {3}",month,date,year),191,172,0,base,vanilla]]
  407. pbDrawTextPositions(overlay,textpos)
  408. end
  409. mapname=pbGetMapNameFromId(pokemon.hatchedMap)
  410. if mapname && mapname!=""
  411. textpos=[
  412. [_INTL("{1}",mapname),191,210,0,base,vanilla]]
  413. pbDrawTextPositions(overlay,textpos)
  414. else
  415. textpos=[
  416. [_INTL("Faraway Place",mapname),191,210,0,base,vanilla]]
  417. pbDrawTextPositions(overlay,textpos)
  418. end
  419. textpos=[
  420. [_INTL("Egg hatched."),191,210,0,base,vanilla]]
  421. pbDrawTextPositions(overlay,textpos)
  422. else
  423. textpos=[
  424. [_INTL(""),191,210,0,base,vanilla]]
  425. pbDrawTextPositions(overlay,textpos)
  426. end
  427. end
  428. if shownature
  429. bestiv=0
  430. tiebreaker=pokemon.personalID%6
  431. for i in 0...6
  432. if pokemon.iv[i]==pokemon.iv[bestiv]
  433. bestiv=i if i>=tiebreaker && bestiv<tiebreaker
  434. elsif pokemon.iv[i]>pokemon.iv[bestiv]
  435. bestiv=i
  436. end
  437. end
  438. characteristic=[_INTL("Loves to eat."),
  439. _INTL("Often dozes off."),
  440. _INTL("Often scatters things."),
  441. _INTL("Scatters things often."),
  442. _INTL("Likes to relax."),
  443. _INTL("Proud of its power."),
  444. _INTL("Likes to thrash about."),
  445. _INTL("A little quick tempered."),
  446. _INTL("Likes to fight."),
  447. _INTL("Quick tempered."),
  448. _INTL("Sturdy body."),
  449. _INTL("Capable of taking hits."),
  450. _INTL("Highly persistent."),
  451. _INTL("Good endurance."),
  452. _INTL("Good perseverance."),
  453. _INTL("Likes to run."),
  454. _INTL("Alert to sounds."),
  455. _INTL("Impetuous and silly."),
  456. _INTL("Somewhat of a clown."),
  457. _INTL("Quick to flee."),
  458. _INTL("Highly curious."),
  459. _INTL("Mischievous."),
  460. _INTL("Thoroughly cunning."),
  461. _INTL("Often lost in thought."),
  462. _INTL("Very finicky."),
  463. _INTL("Strong willed."),
  464. _INTL("Somewhat vain."),
  465. _INTL("Strongly defiant."),
  466. _INTL("Hates to lose."),
  467. _INTL("Somewhat stubborn.")
  468. ][bestiv*5+pokemon.iv[bestiv]%5]
  469.  
  470. textpos=[
  471. [_INTL("{1}",characteristic),191,244,0,base,vanilla]]
  472. pbDrawTextPositions(overlay,textpos)
  473. end
  474. drawFormattedTextEx(overlay,232,78,276,memo)
  475. drawMarkings(overlay,440,4,72,20,pokemon.markings)
  476. end
  477.  
  478. def drawPageThree(pokemon)
  479. overlay=@sprites["overlay"].bitmap
  480. overlay.clear
  481. @sprites["background"].setBitmap("Graphics/Pictures/BrassSummary3")
  482. imagepos=[]
  483. if pbPokerus(pokemon)==1 || pokemon.hp==0 || @pokemon.status>0
  484. status=6 if pbPokerus(pokemon)==1
  485. status=@pokemon.status-1 if @pokemon.status>0
  486. status=5 if pokemon.hp==0
  487. imagepos.push(["Graphics/Pictures/statuses",120,230,0,16*status,44,16])
  488. end
  489. if pokemon.isShiny?
  490. imagepos.push([sprintf("Graphics/Pictures/shiny"),6,76,0,0,-1,-1])
  491. end
  492. if pbPokerus(pokemon)==2
  493. imagepos.push([sprintf("Graphics/Pictures/summaryPokerus"),414,6,0,0,-1,-1])
  494. end
  495. ballused=@pokemon.ballused ? @pokemon.ballused : 0
  496. ballimage=sprintf("Graphics/Pictures/summaryball%02d",@pokemon.ballused)
  497. imagepos.push([ballimage,36,286,0,0,-1,-1])
  498. pbDrawImagePositions(overlay,imagepos)
  499. base=Color.new(0,0,0)
  500. shadow=Color.new(104,104,104)
  501. white=Color.new(248,248,248)
  502. green=Color.new(136,248,104)
  503. statshadows=[]
  504. for i in 0...5; statshadows[i]=shadow; end
  505. if !(pokemon.isShadow? rescue false) || pokemon.heartStage<=3
  506. natup=(pokemon.nature/5).floor
  507. natdn=(pokemon.nature%5).floor
  508. statshadows[natup]=Color.new(136,96,72) if natup!=natdn
  509. statshadows[natdn]=Color.new(64,120,152) if natup!=natdn
  510. end
  511. pbSetSystemFont(overlay)
  512. naturename=PBNatures.getName(pokemon.nature)
  513. pokename=@pokemon.name
  514. # Left side of the Summary Screen
  515. # Colours are base, white
  516. # To center text on this side, make sure X is 84 and the third numb is 2
  517. textpos=[
  518. [_INTL("SKILLS"),84,2,2,base,white],
  519. [pokename,84,34,2,base,white],
  520. [_INTL("Lv {1}",pokemon.level.to_s),74,286,0,base,white]]
  521. if pokemon.hasItem?
  522. textpos.push([PBItems.getName(pokemon.item),84,254,2,base,white])
  523. else
  524. textpos.push([_INTL("NONE"),62,254,0,base,white])
  525. end
  526. if pokemon.isMale?
  527. textpos.push([_INTL("♂"),6,222,0,Color.new(120,96,240),Color.new(248,248,248)])
  528. elsif pokemon.isFemale?
  529. textpos.push([_INTL("♀"),6,222,0,Color.new(248,56,8),Color.new(248,248,248)])
  530. end
  531. pbDrawTextPositions(overlay,textpos)
  532. ######
  533. pbSetSystemFont(overlay)
  534. abilityname=PBAbilities.getName(pokemon.ability)
  535. abilitydesc=pbGetMessage(MessageTypes::AbilityDescs,pokemon.ability)
  536. pokename=@pokemon.name
  537. textpos=[
  538. [_INTL("HP"),280,50,2,base,shadow],
  539. [sprintf("%3d/%3d",pokemon.hp,pokemon.totalhp),462,76,1,Color.new(64,64,64),Color.new(176,176,176)],
  540. [_INTL("Attack"),248,120,0,base,statshadows[0]],
  541. [sprintf("%d",pokemon.attack),280,80,1,Color.new(64,64,64),Color.new(176,176,176)],
  542. [_INTL("Defense"),248,152,0,base,statshadows[1]],
  543. [sprintf("%d",pokemon.defense),456,152,1,Color.new(64,64,64),Color.new(176,176,176)],
  544. [_INTL("Sp. Atk"),248,184,0,base,statshadows[3]],
  545. [sprintf("%d",pokemon.spatk),456,184,1,Color.new(64,64,64),Color.new(176,176,176)],
  546. [_INTL("Sp. Def"),248,216,0,base,statshadows[4]],
  547. [sprintf("%d",pokemon.spdef),456,216,1,Color.new(64,64,64),Color.new(176,176,176)],
  548. [_INTL("Speed"),248,248,0,base,statshadows[2]],
  549. [sprintf("%d",pokemon.speed),456,248,1,Color.new(64,64,64),Color.new(176,176,176)],
  550. [_INTL("Ability"),224,284,0,base,shadow],
  551. [abilityname,362,284,0,Color.new(64,64,64),Color.new(176,176,176)],
  552. ]
  553. pbDrawTextPositions(overlay,textpos)
  554. drawTextEx(overlay,224,316,282,2,abilitydesc,Color.new(64,64,64),Color.new(176,176,176))
  555. drawMarkings(overlay,440,4,72,20,pokemon.markings)
  556. if pokemon.hp>0
  557. hpcolors=[
  558. Color.new(24,192,32),Color.new(0,144,0), # Green
  559. Color.new(248,184,0),Color.new(184,112,0), # Orange
  560. Color.new(240,80,32),Color.new(168,48,56) # Red
  561. ]
  562. # hpzone=0
  563. # hpzone=1 if pokemon.hp<=(@pokemon.totalhp/2).floor
  564. # hpzone=2 if pokemon.hp<=(@pokemon.totalhp/4).floor
  565. # overlay.fill_rect(360,110,pokemon.hp*96/pokemon.totalhp,2,hpcolors[hpzone*2+1])
  566. # overlay.fill_rect(360,112,pokemon.hp*96/pokemon.totalhp,4,hpcolors[hpzone*2])
  567. end
  568. end
  569.  
  570. def drawPageFour(pokemon)
  571. overlay=@sprites["overlay"].bitmap
  572. overlay.clear
  573. @sprites["background"].setBitmap("Graphics/Pictures/BrassSummary4")
  574. imagepos=[]
  575. if pbPokerus(pokemon)==1 || pokemon.hp==0 || @pokemon.status>0
  576. status=6 if pbPokerus(pokemon)==1
  577. status=@pokemon.status-1 if @pokemon.status>0
  578. status=5 if pokemon.hp==0
  579. imagepos.push(["Graphics/Pictures/statuses",120,230,0,16*status,44,16])
  580. end
  581. if pokemon.isShiny?
  582. imagepos.push([sprintf("Graphics/Pictures/shiny"),6,76,0,0,-1,-1])
  583. end
  584. if pbPokerus(pokemon)==2
  585. imagepos.push([sprintf("Graphics/Pictures/summaryPokerus"),414,6,0,0,-1,-1])
  586. end
  587. ballused=@pokemon.ballused ? @pokemon.ballused : 0
  588. ballimage=sprintf("Graphics/Pictures/summaryball%02d",@pokemon.ballused)
  589. imagepos.push([ballimage,36,286,0,0,-1,-1])
  590. pbDrawImagePositions(overlay,imagepos)
  591. base=Color.new(0,0,0)
  592. shadow=Color.new(104,104,104)
  593. white=Color.new(248,248,248)
  594. green=Color.new(136,248,104)
  595. pbSetSystemFont(overlay)
  596. naturename=PBNatures.getName(pokemon.nature)
  597. pokename=@pokemon.name
  598. # Left side of the Summary Screen
  599. # Colours are base, white
  600. # To center text on this side, make sure X is 84 and the third numb is 2
  601. textpos=[
  602. [_INTL("MOVES"),84,2,2,base,white],
  603. [pokename,84,34,2,base,white],
  604. [_INTL("Lv {1}",pokemon.level.to_s),74,286,0,base,white]]
  605. if pokemon.hasItem?
  606. textpos.push([PBItems.getName(pokemon.item),84,254,2,base,white])
  607. else
  608. textpos.push([_INTL("NONE"),62,254,0,base,white])
  609. end
  610. if pokemon.isMale?
  611. textpos.push([_INTL("♂"),6,222,0,Color.new(120,96,240),Color.new(248,248,248)])
  612. elsif pokemon.isFemale?
  613. textpos.push([_INTL("♀"),6,222,0,Color.new(248,56,8),Color.new(248,248,248)])
  614. end
  615. pbDrawTextPositions(overlay,textpos)
  616. imagepos=[]
  617. yPos=98
  618. for i in 0...pokemon.moves.length
  619. if pokemon.moves[i].id>0
  620. imagepos.push(["Graphics/Pictures/types",248,yPos+2,0,
  621. pokemon.moves[i].type*28,64,28])
  622. textpos.push([PBMoves.getName(pokemon.moves[i].id),316,yPos,0,
  623. Color.new(64,64,64),Color.new(176,176,176)])
  624. if pokemon.moves[i].totalpp>0
  625. textpos.push([_ISPRINTF("PP"),342,yPos+32,0,
  626. Color.new(64,64,64),Color.new(176,176,176)])
  627. textpos.push([sprintf("%d/%d",pokemon.moves[i].pp,pokemon.moves[i].totalpp),
  628. 460,yPos+32,1,Color.new(64,64,64),Color.new(176,176,176)])
  629. end
  630. else
  631. textpos.push(["-",316,yPos,0,Color.new(64,64,64),Color.new(176,176,176)])
  632. textpos.push(["--",442,yPos+32,1,Color.new(64,64,64),Color.new(176,176,176)])
  633. end
  634. yPos+=64
  635. end
  636. pbDrawTextPositions(overlay,textpos)
  637. pbDrawImagePositions(overlay,imagepos)
  638. drawMarkings(overlay,440,4,72,20,pokemon.markings)
  639. end
  640.  
  641. def drawSelectedMove(pokemon,moveToLearn,moveid)
  642. overlay=@sprites["overlay"].bitmap
  643. @sprites["pokemon"].visible=false if @sprites["pokemon"]
  644. @sprites["pokeicon"].setBitmap(pbPokemonIconFile(pokemon))
  645. @sprites["pokeicon"].src_rect=Rect.new(0,0,64,64)
  646. @sprites["pokeicon"].visible=true
  647. movedata=PBMoveData.new(moveid)
  648. basedamage=movedata.basedamage
  649. type=movedata.type
  650. category=movedata.category
  651. accuracy=movedata.accuracy
  652. drawMoveSelection(pokemon,moveToLearn)
  653. pbSetSystemFont(overlay)
  654. move=moveid
  655. textpos=[
  656. [basedamage<=1 ? basedamage==1 ? "???" : "---" : sprintf("%d",basedamage),
  657. 216,154,1,Color.new(64,64,64),Color.new(176,176,176)],
  658. [accuracy==0 ? "---" : sprintf("%d",accuracy),
  659. 216,186,1,Color.new(64,64,64),Color.new(176,176,176)]
  660. ]
  661. pbDrawTextPositions(overlay,textpos)
  662. imagepos=[["Graphics/Pictures/category",166,124,0,category*28,64,28]]
  663. pbDrawImagePositions(overlay,imagepos)
  664. drawTextEx(overlay,4,218,238,5,
  665. pbGetMessage(MessageTypes::MoveDescriptions,moveid),
  666. Color.new(64,64,64),Color.new(176,176,176))
  667. end
  668.  
  669. def drawMoveSelection(pokemon,moveToLearn)
  670. overlay=@sprites["overlay"].bitmap
  671. overlay.clear
  672. base=Color.new(248,248,248)
  673. shadow=Color.new(104,104,104)
  674. @sprites["background"].setBitmap("Graphics/Pictures/BrassSummary4Details")
  675. if moveToLearn!=0
  676. @sprites["background"].setBitmap("Graphics/Pictures/BrassSummary4Learning")
  677. end
  678. pbSetSystemFont(overlay)
  679. textpos=[
  680. [_INTL("MOVES"),26,16,0,base,shadow],
  681. [_INTL("CATEGORY"),20,122,0,base,shadow],
  682. [_INTL("POWER"),20,154,0,base,shadow],
  683. [_INTL("ACCURACY"),20,186,0,base,shadow]
  684. ]
  685. type1rect=Rect.new(0,pokemon.type1*28,64,28)
  686. type2rect=Rect.new(0,pokemon.type2*28,64,28)
  687. if pokemon.type1==pokemon.type2
  688. overlay.blt(130,78,@typebitmap.bitmap,type1rect)
  689. else
  690. overlay.blt(96,78,@typebitmap.bitmap,type1rect)
  691. overlay.blt(166,78,@typebitmap.bitmap,type2rect)
  692. end
  693. imagepos=[]
  694. yPos=98
  695. yPos-=76 if moveToLearn!=0
  696. for i in 0...5
  697. moveobject=nil
  698. if i==4
  699. moveobject=PBMove.new(moveToLearn) if moveToLearn!=0
  700. yPos+=20
  701. else
  702. moveobject=pokemon.moves[i]
  703. end
  704. if moveobject
  705. if moveobject.id!=0
  706. imagepos.push(["Graphics/Pictures/types",248,yPos+2,0,
  707. moveobject.type*28,64,28])
  708. textpos.push([PBMoves.getName(moveobject.id),316,yPos,0,
  709. Color.new(64,64,64),Color.new(176,176,176)])
  710. if moveobject.totalpp>0
  711. textpos.push([_ISPRINTF("PP"),342,yPos+32,0,
  712. Color.new(64,64,64),Color.new(176,176,176)])
  713. textpos.push([sprintf("%d/%d",moveobject.pp,moveobject.totalpp),
  714. 460,yPos+32,1,Color.new(64,64,64),Color.new(176,176,176)])
  715. end
  716. else
  717. textpos.push(["-",316,yPos,0,Color.new(64,64,64),Color.new(176,176,176)])
  718. textpos.push(["--",442,yPos+32,1,Color.new(64,64,64),Color.new(176,176,176)])
  719. end
  720. end
  721. yPos+=64
  722. end
  723. pbDrawTextPositions(overlay,textpos)
  724. pbDrawImagePositions(overlay,imagepos)
  725. end
  726.  
  727. def drawPageFive(pokemon)
  728. overlay=@sprites["overlay"].bitmap
  729. overlay.clear
  730. @sprites["background"].setBitmap("Graphics/Pictures/BrassSummary5")
  731. imagepos=[]
  732. if pbPokerus(pokemon)==1 || pokemon.hp==0 || @pokemon.status>0
  733. status=6 if pbPokerus(pokemon)==1
  734. status=@pokemon.status-1 if @pokemon.status>0
  735. status=5 if pokemon.hp==0
  736. imagepos.push(["Graphics/Pictures/statuses",120,230,0,16*status,44,16])
  737. end
  738. if pokemon.isShiny?
  739. imagepos.push([sprintf("Graphics/Pictures/shiny"),6,76,0,0,-1,-1])
  740. end
  741. if pbPokerus(pokemon)==2
  742. imagepos.push([sprintf("Graphics/Pictures/summaryPokerus"),414,6,0,0,-1,-1])
  743. end
  744. ballused=@pokemon.ballused ? @pokemon.ballused : 0
  745. ballimage=sprintf("Graphics/Pictures/summaryball%02d",@pokemon.ballused)
  746. imagepos.push([ballimage,36,286,0,0,-1,-1])
  747. pbDrawImagePositions(overlay,imagepos)
  748. base=Color.new(0,0,0)
  749. shadow=Color.new(104,104,104)
  750. white=Color.new(248,248,248)
  751. green=Color.new(136,248,104)
  752. pbSetSystemFont(overlay)
  753. naturename=PBNatures.getName(pokemon.nature)
  754. pokename=@pokemon.name
  755. # Left side of the Summary Screen
  756. # Colours are base, white
  757. # To center text on this side, make sure X is 84 and the third numb is 2
  758. textpos=[
  759. [_INTL("RIBBONS"),84,2,2,base,white],
  760. [pokename,84,34,2,base,white],
  761. [_INTL("Lv {1}",pokemon.level.to_s),74,286,0,base,white]]
  762. if pokemon.hasItem?
  763. textpos.push([PBItems.getName(pokemon.item),84,254,2,base,white])
  764. else
  765. textpos.push([_INTL("NONE"),62,254,0,base,white])
  766. end
  767. if pokemon.isMale?
  768. textpos.push([_INTL("♂"),6,222,0,Color.new(120,96,240),Color.new(248,248,248)])
  769. elsif pokemon.isFemale?
  770. textpos.push([_INTL("♀"),6,222,0,Color.new(248,56,8),Color.new(248,248,248)])
  771. end
  772. pbDrawTextPositions(overlay,textpos)
  773. textpos=[
  774. [_INTL("No. of Ribbons:"),234,342,0,Color.new(64,64,64),Color.new(176,176,176)],
  775. [pokemon.ribbonCount.to_s,450,342,1,Color.new(64,64,64),Color.new(176,176,176)],
  776. ]
  777. pbDrawTextPositions(overlay,textpos)
  778. imagepos=[]
  779. coord=0
  780. if pokemon.ribbons
  781. for i in pokemon.ribbons
  782. ribn=i-1
  783. imagepos.push(["Graphics/Pictures/ribbons",236+64*(coord%4),86+80*(coord/4).floor,
  784. 64*(ribn%8),64*(ribn/8).floor,64,64])
  785. coord+=1
  786. break if coord>=12
  787. end
  788. end
  789. pbDrawImagePositions(overlay,imagepos)
  790. drawMarkings(overlay,440,4,72,20,pokemon.markings)
  791. end
  792.  
  793. def pbChooseMoveToForget(moveToLearn)
  794. selmove=0
  795. ret=0
  796. maxmove=(moveToLearn>0) ? 4 : 3
  797. loop do
  798. Graphics.update
  799. Input.update
  800. pbUpdate
  801. if Input.trigger?(Input::B)
  802. ret=4
  803. break
  804. end
  805. if Input.trigger?(Input::C)
  806. break
  807. end
  808. if Input.trigger?(Input::DOWN)
  809. selmove+=1
  810. if selmove<4 && selmove>=@pokemon.numMoves
  811. selmove=(moveToLearn>0) ? maxmove : 0
  812. end
  813. selmove=0 if selmove>maxmove
  814. @sprites["movesel"].index=selmove
  815. newmove=(selmove==4) ? moveToLearn : @pokemon.moves[selmove].id
  816. drawSelectedMove(@pokemon,moveToLearn,newmove)
  817. ret=selmove
  818. end
  819. if Input.trigger?(Input::UP)
  820. selmove-=1
  821. selmove=maxmove if selmove<0
  822. if selmove<4 && selmove>=@pokemon.numMoves
  823. selmove=@pokemon.numMoves-1
  824. end
  825. @sprites["movesel"].index=selmove
  826. newmove=(selmove==4) ? moveToLearn : @pokemon.moves[selmove].id
  827. drawSelectedMove(@pokemon,moveToLearn,newmove)
  828. ret=selmove
  829. end
  830. end
  831. return (ret==4) ? -1 : ret
  832. end
  833.  
  834. def pbMoveSelection
  835. @sprites["movesel"].visible=true
  836. @sprites["movesel"].index=0
  837. selmove=0
  838. oldselmove=0
  839. switching=false
  840. drawSelectedMove(@pokemon,0,@pokemon.moves[selmove].id)
  841. loop do
  842. Graphics.update
  843. Input.update
  844. pbUpdate
  845. if @sprites["movepresel"].index==@sprites["movesel"].index
  846. @sprites["movepresel"].z=@sprites["movesel"].z+1
  847. else
  848. @sprites["movepresel"].z=@sprites["movesel"].z
  849. end
  850. if Input.trigger?(Input::B)
  851. break if !switching
  852. @sprites["movepresel"].visible=false
  853. switching=false
  854. end
  855. if Input.trigger?(Input::C)
  856. if selmove==4
  857. break if !switching
  858. @sprites["movepresel"].visible=false
  859. switching=false
  860. else
  861. if !(@pokemon.isShadow? rescue false)
  862. if !switching
  863. @sprites["movepresel"].index=selmove
  864. oldselmove=selmove
  865. @sprites["movepresel"].visible=true
  866. switching=true
  867. else
  868. tmpmove=@pokemon.moves[oldselmove]
  869. @pokemon.moves[oldselmove]=@pokemon.moves[selmove]
  870. @pokemon.moves[selmove]=tmpmove
  871. @sprites["movepresel"].visible=false
  872. switching=false
  873. drawSelectedMove(@pokemon,0,@pokemon.moves[selmove].id)
  874. end
  875. end
  876. end
  877. end
  878. if Input.trigger?(Input::DOWN)
  879. selmove+=1
  880. selmove=0 if selmove<4 && selmove>=@pokemon.numMoves
  881. selmove=0 if selmove>=4
  882. selmove=4 if selmove<0
  883. @sprites["movesel"].index=selmove
  884. newmove=@pokemon.moves[selmove].id
  885. pbPlayCursorSE()
  886. drawSelectedMove(@pokemon,0,newmove)
  887. end
  888. if Input.trigger?(Input::UP)
  889. selmove-=1
  890. if selmove<4 && selmove>=@pokemon.numMoves
  891. selmove=@pokemon.numMoves-1
  892. end
  893. selmove=0 if selmove>=4
  894. selmove=@pokemon.numMoves-1 if selmove<0
  895. @sprites["movesel"].index=selmove
  896. newmove=@pokemon.moves[selmove].id
  897. pbPlayCursorSE()
  898. drawSelectedMove(@pokemon,0,newmove)
  899. end
  900. end
  901. @sprites["movesel"].visible=false
  902. end
  903.  
  904. def pbGoToPrevious
  905. if @page!=0
  906. newindex=@partyindex
  907. while newindex>0
  908. newindex-=1
  909. if @party[newindex] && !@party[newindex].isEgg?
  910. @partyindex=newindex
  911. break
  912. end
  913. end
  914. else
  915. newindex=@partyindex
  916. while newindex>0
  917. newindex-=1
  918. if @party[newindex]
  919. @partyindex=newindex
  920. break
  921. end
  922. end
  923. end
  924. end
  925.  
  926. def pbGoToNext
  927. if @page!=0
  928. newindex=@partyindex
  929. while newindex<@party.length-1
  930. newindex+=1
  931. if @party[newindex] && !@party[newindex].isEgg?
  932. @partyindex=newindex
  933. break
  934. end
  935. end
  936. else
  937. newindex=@partyindex
  938. while newindex<@party.length-1
  939. newindex+=1
  940. if @party[newindex]
  941. @partyindex=newindex
  942. break
  943. end
  944. end
  945. end
  946. end
  947.  
  948. def pbScene
  949. pbPlayCry(@pokemon)
  950. loop do
  951. Graphics.update
  952. Input.update
  953. pbUpdate
  954. if Input.trigger?(Input::B)
  955. break
  956. end
  957. dorefresh=false
  958. if Input.trigger?(Input::C)
  959. if @page==0
  960. break
  961. elsif @page==3
  962. pbMoveSelection
  963. dorefresh=true
  964. drawPageFour(@pokemon)
  965. end
  966. end
  967. if Input.trigger?(Input::UP) && @partyindex>0
  968. oldindex=@partyindex
  969. pbGoToPrevious
  970. if @partyindex!=oldindex
  971. @pokemon=@party[@partyindex]
  972. @sprites["pokemon"].setPokemonBitmap(@pokemon)
  973. @sprites["pokemon"].color=Color.new(0,0,0,0)
  974. pbPositionPokemonSprite(@sprites["pokemon"],40,144)
  975. dorefresh=true
  976. pbPlayCry(@pokemon)
  977. end
  978. end
  979. if Input.trigger?(Input::DOWN) && @partyindex<@party.length-1
  980. oldindex=@partyindex
  981. pbGoToNext
  982. if @partyindex!=oldindex
  983. @pokemon=@party[@partyindex]
  984. @sprites["pokemon"].setPokemonBitmap(@pokemon)
  985. @sprites["pokemon"].color=Color.new(0,0,0,0)
  986. pbPositionPokemonSprite(@sprites["pokemon"],40,144)
  987. dorefresh=true
  988. pbPlayCry(@pokemon)
  989. end
  990. end
  991. if Input.trigger?(Input::LEFT) && !@pokemon.isEgg?
  992. oldpage=@page
  993. @page-=1
  994. @page=0 if @page<0
  995. @page=4 if @page>4
  996. dorefresh=true
  997. if @page!=oldpage # Move to next page
  998. pbPlayCursorSE()
  999. dorefresh=true
  1000. end
  1001. end
  1002. if Input.trigger?(Input::RIGHT) && !@pokemon.isEgg?
  1003. oldpage=@page
  1004. @page+=1
  1005. @page=0 if @page<0
  1006. @page=4 if @page>4
  1007. if @page!=oldpage # Move to next page
  1008. pbPlayCursorSE()
  1009. dorefresh=true
  1010. end
  1011. end
  1012. if dorefresh
  1013. case @page
  1014. when 0
  1015. drawPageOne(@pokemon)
  1016. when 1
  1017. drawPageTwo(@pokemon)
  1018. when 2
  1019. drawPageThree(@pokemon)
  1020. when 3
  1021. drawPageFour(@pokemon)
  1022. when 4
  1023. drawPageFive(@pokemon)
  1024. end
  1025. end
  1026. end
  1027. return @partyindex
  1028. end
  1029. end
  1030.  
  1031.  
  1032.  
  1033. class PokemonSummary
  1034. def initialize(scene)
  1035. @scene=scene
  1036. end
  1037.  
  1038. def pbStartScreen(party,partyindex)
  1039. @scene.pbStartScene(party,partyindex)
  1040. ret=@scene.pbScene
  1041. @scene.pbEndScene
  1042. return ret
  1043. end
  1044.  
  1045. def pbStartForgetScreen(party,partyindex,moveToLearn)
  1046. ret=-1
  1047. @scene.pbStartForgetScene(party,partyindex,moveToLearn)
  1048. loop do
  1049. ret=@scene.pbChooseMoveToForget(moveToLearn)
  1050. if ret>=0 && moveToLearn!=0 && pbIsHiddenMove?(party[partyindex].moves[ret].id) && !$DEBUG
  1051. Kernel.pbMessage(_INTL("HM moves can't be forgotten now.")){ @scene.pbUpdate }
  1052. else
  1053. break
  1054. end
  1055. end
  1056. @scene.pbEndScene
  1057. return ret
  1058. end
  1059.  
  1060. def pbStartChooseMoveScreen(party,partyindex,message)
  1061. ret=-1
  1062. @scene.pbStartForgetScene(party,partyindex,0)
  1063. Kernel.pbMessage(message){ @scene.pbUpdate }
  1064. loop do
  1065. ret=@scene.pbChooseMoveToForget(0)
  1066. if ret<0
  1067. Kernel.pbMessage(_INTL("You must choose a move!")){ @scene.pbUpdate }
  1068. else
  1069. break
  1070. end
  1071. end
  1072. @scene.pbEndScene
  1073. return ret
  1074. end
  1075. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement