Advertisement
Guest User

Untitled

a guest
Sep 1st, 2016
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 69.78 KB | None | 0 0
  1. class PokeSelectionPlaceholderSprite < SpriteWrapper
  2. attr_accessor :text
  3.  
  4. def initialize(pokemon,index,viewport=nil)
  5. super(viewport)
  6. xvalues=[0,256,0,256,0,256]
  7. yvalues=[0,16,96,112,192,208]
  8. @pbitmap=AnimatedBitmap.new("Graphics/Pictures/partyPanelBlank")
  9. self.x=xvalues[index]
  10. self.y=yvalues[index]
  11. @text=nil
  12. end
  13.  
  14. def update
  15. super
  16. @pbitmap.update
  17. end
  18.  
  19. def selected
  20. return false
  21. end
  22.  
  23. def selected=(value)
  24. end
  25.  
  26. def preselected
  27. return false
  28. end
  29.  
  30. def preselected=(value)
  31. end
  32.  
  33. def switching
  34. return false
  35. end
  36.  
  37. def switching=(value)
  38. end
  39.  
  40. def refresh
  41. end
  42.  
  43. def dispose
  44. @pbitmap.dispose
  45. super
  46. end
  47. end
  48.  
  49.  
  50.  
  51. class PokeSelectionConfirmCancelSprite < SpriteWrapper
  52. attr_reader :selected
  53.  
  54. def initialize(text,x,y,narrowbox=false,viewport=nil)
  55. super(viewport)
  56. @refreshBitmap=true
  57. @bgsprite=ChangelingSprite.new(0,0,viewport)
  58. if narrowbox
  59. @bgsprite.addBitmap("deselbitmap","Graphics/Pictures/partyCancelNarrow")
  60. @bgsprite.addBitmap("selbitmap","Graphics/Pictures/partyCancelSelNarrow")
  61. else
  62. @bgsprite.addBitmap("deselbitmap","Graphics/Pictures/partyCancel")
  63. @bgsprite.addBitmap("selbitmap","Graphics/Pictures/partyCancelSel")
  64. end
  65. @bgsprite.changeBitmap("deselbitmap")
  66. @overlaysprite=BitmapSprite.new(@bgsprite.bitmap.width,@bgsprite.bitmap.height,viewport)
  67. @yoffset=8
  68. ynarrow=narrowbox ? -6 : 0
  69. pbSetSystemFont(@overlaysprite.bitmap)
  70. textpos=[[text,56,8+ynarrow,2,Color.new(248,248,248),Color.new(40,40,40)]]
  71. pbDrawTextPositions(@overlaysprite.bitmap,textpos)
  72. @overlaysprite.z=self.z+1 # For compatibility with RGSS2
  73. self.x=x
  74. self.y=y
  75. end
  76.  
  77. def dispose
  78. @overlaysprite.bitmap.dispose
  79. @overlaysprite.dispose
  80. @bgsprite.dispose
  81. super
  82. end
  83.  
  84. def viewport=(value)
  85. super
  86. refresh
  87. end
  88.  
  89. def color=(value)
  90. super
  91. refresh
  92. end
  93.  
  94. def x=(value)
  95. super
  96. refresh
  97. end
  98.  
  99. def y=(value)
  100. super
  101. refresh
  102. end
  103.  
  104. def selected=(value)
  105. @selected=value
  106. refresh
  107. end
  108.  
  109. def refresh
  110. @bgsprite.changeBitmap((@selected) ? "selbitmap" : "deselbitmap")
  111. if @bgsprite && [email protected]?
  112. @bgsprite.x=self.x
  113. @bgsprite.y=self.y
  114. @overlaysprite.x=self.x
  115. @overlaysprite.y=self.y
  116. @bgsprite.color=self.color
  117. @overlaysprite.color=self.color
  118. end
  119. end
  120. end
  121.  
  122.  
  123.  
  124. class PokeSelectionCancelSprite < PokeSelectionConfirmCancelSprite
  125. def initialize(viewport=nil)
  126. super(_INTL("CANCEL"),398,328,false,viewport)
  127. end
  128. end
  129.  
  130.  
  131.  
  132. class PokeSelectionConfirmSprite < PokeSelectionConfirmCancelSprite
  133. def initialize(viewport=nil)
  134. super(_INTL("CONFIRM"),398,308,true,viewport)
  135. end
  136. end
  137.  
  138.  
  139.  
  140. class PokeSelectionCancelSprite2 < PokeSelectionConfirmCancelSprite
  141. def initialize(viewport=nil)
  142. super(_INTL("CANCEL"),398,346,true,viewport)
  143. end
  144. end
  145.  
  146.  
  147.  
  148. class ChangelingSprite < SpriteWrapper
  149. def initialize(x=0,y=0,viewport=nil)
  150. super(viewport)
  151. self.x=x
  152. self.y=y
  153. @bitmaps={}
  154. @currentBitmap=nil
  155. end
  156.  
  157. def addBitmap(key,path)
  158. if @bitmaps[key]
  159. @bitmaps[key].dispose
  160. end
  161. @bitmaps[key]=AnimatedBitmap.new(path)
  162. end
  163.  
  164. def changeBitmap(key)
  165. @currentBitmap=@bitmaps[key]
  166. self.bitmap=@currentBitmap ? @currentBitmap.bitmap : nil
  167. end
  168.  
  169. def dispose
  170. return if disposed?
  171. for bm in @bitmaps.values; bm.dispose; end
  172. @bitmaps.clear
  173. super
  174. end
  175.  
  176. def update
  177. return if disposed?
  178. for bm in @bitmaps.values; bm.update; end
  179. self.bitmap=@currentBitmap ? @currentBitmap.bitmap : nil
  180. end
  181. end
  182.  
  183.  
  184.  
  185. class PokeSelectionSprite < SpriteWrapper
  186. attr_reader :selected
  187. attr_reader :preselected
  188. attr_reader :switching
  189. attr_reader :pokemon
  190. attr_reader :active
  191. attr_accessor :text
  192.  
  193. def initialize(pokemon,index,viewport=nil)
  194. super(viewport)
  195. @pokemon=pokemon
  196. active=(index==0)
  197. @active=active
  198. if active # Rounded panel
  199. @deselbitmap=AnimatedBitmap.new("Graphics/Pictures/partyPanelRound")
  200. @selbitmap=AnimatedBitmap.new("Graphics/Pictures/partyPanelRoundSel")
  201. @deselfntbitmap=AnimatedBitmap.new("Graphics/Pictures/partyPanelRoundFnt")
  202. @selfntbitmap=AnimatedBitmap.new("Graphics/Pictures/partyPanelRoundSelFnt")
  203. @deselswapbitmap=AnimatedBitmap.new("Graphics/Pictures/partyPanelRoundSwap")
  204. @selswapbitmap=AnimatedBitmap.new("Graphics/Pictures/partyPanelRoundSelSwap")
  205. else # Rectangular panel
  206. @deselbitmap=AnimatedBitmap.new("Graphics/Pictures/partyPanelRect")
  207. @selbitmap=AnimatedBitmap.new("Graphics/Pictures/partyPanelRectSel")
  208. @deselfntbitmap=AnimatedBitmap.new("Graphics/Pictures/partyPanelRectFnt")
  209. @selfntbitmap=AnimatedBitmap.new("Graphics/Pictures/partyPanelRectSelFnt")
  210. @deselswapbitmap=AnimatedBitmap.new("Graphics/Pictures/partyPanelRectSwap")
  211. @selswapbitmap=AnimatedBitmap.new("Graphics/Pictures/partyPanelRectSelSwap")
  212. end
  213. @spriteXOffset=28
  214. @spriteYOffset=0
  215. @pokeballXOffset=10
  216. @pokeballYOffset=0
  217. @pokenameX=96
  218. @pokenameY=16
  219. @levelX=20
  220. @levelY=62
  221. @statusX=80
  222. @statusY=68
  223. @genderX=224
  224. @genderY=16
  225. @hpX=224
  226. @hpY=60
  227. @hpbarX=96
  228. @hpbarY=50
  229. @gaugeX=128
  230. @gaugeY=52
  231. @itemXOffset=62
  232. @itemYOffset=48
  233. @annotX=96
  234. @annotY=58
  235. xvalues=[0,256,0,256,0,256]
  236. yvalues=[0,16,96,112,192,208]
  237. @text=nil
  238. @statuses=AnimatedBitmap.new(_INTL("Graphics/Pictures/statuses"))
  239. @hpbar=AnimatedBitmap.new("Graphics/Pictures/partyHP")
  240. @hpbarfnt=AnimatedBitmap.new("Graphics/Pictures/partyHPfnt")
  241. @hpbarswap=AnimatedBitmap.new("Graphics/Pictures/partyHPswap")
  242. @pokeballsprite=ChangelingSprite.new(0,0,viewport)
  243. @pokeballsprite.addBitmap("pokeballdesel","Graphics/Pictures/PartyBall/partyBallBasic")
  244. @pokeballsprite.addBitmap("pokeballsel","Graphics/Pictures/PartyBall/partyBallSelBasic")
  245. @pokeballsprite.addBitmap("greatballdesel","Graphics/Pictures/PartyBall/partyBallGreat")
  246. @pokeballsprite.addBitmap("greatballsel","Graphics/Pictures/PartyBall/partyBallSelGreat")
  247. @pokeballsprite.addBitmap("safariballdesel","Graphics/Pictures/PartyBall/partyBallSafari")
  248. @pokeballsprite.addBitmap("safariballsel","Graphics/Pictures/PartyBall/partyBallSelSafari")
  249. @pokeballsprite.addBitmap("ultraballdesel","Graphics/Pictures/PartyBall/partyBallUltra")
  250. @pokeballsprite.addBitmap("ultraballsel","Graphics/Pictures/PartyBall/partyBallSelUltra")
  251. @pokeballsprite.addBitmap("masterballdesel","Graphics/Pictures/PartyBall/partyBallMaster")
  252. @pokeballsprite.addBitmap("masterballsel","Graphics/Pictures/PartyBall/partyBallSelMaster")
  253. @pokeballsprite.addBitmap("netballdesel","Graphics/Pictures/PartyBall/partyBallNet")
  254. @pokeballsprite.addBitmap("netballsel","Graphics/Pictures/PartyBall/partyBallSelNet")
  255. @pokeballsprite.addBitmap("diveballdesel","Graphics/Pictures/PartyBall/partyBallDive")
  256. @pokeballsprite.addBitmap("diveballsel","Graphics/Pictures/PartyBall/partyBallSelDive")
  257. @pokeballsprite.addBitmap("nestballdesel","Graphics/Pictures/PartyBall/partyBallNest")
  258. @pokeballsprite.addBitmap("nestballsel","Graphics/Pictures/PartyBall/partyBallSelNest")
  259. @pokeballsprite.addBitmap("repeatballdesel","Graphics/Pictures/PartyBall/partyBallRepeat")
  260. @pokeballsprite.addBitmap("repeatballsel","Graphics/Pictures/PartyBall/partyBallSelRepeat")
  261. @pokeballsprite.addBitmap("timerballdesel","Graphics/Pictures/PartyBall/partyBallTimer")
  262. @pokeballsprite.addBitmap("timerballsel","Graphics/Pictures/PartyBall/partyBallSelTimer")
  263. @pokeballsprite.addBitmap("luxuryballdesel","Graphics/Pictures/PartyBall/partyBallLuxury")
  264. @pokeballsprite.addBitmap("luxuryballsel","Graphics/Pictures/PartyBall/partyBallSelLuxury")
  265. @pokeballsprite.addBitmap("premierballdesel","Graphics/Pictures/PartyBall/partyBallPremier")
  266. @pokeballsprite.addBitmap("premierballsel","Graphics/Pictures/PartyBall/partyBallSelPremier")
  267. @pokeballsprite.addBitmap("duskballdesel","Graphics/Pictures/PartyBall/partyBallDusk")
  268. @pokeballsprite.addBitmap("duskballsel","Graphics/Pictures/PartyBall/partyBallSelDusk")
  269. @pokeballsprite.addBitmap("healballdesel","Graphics/Pictures/PartyBall/partyBallHeal")
  270. @pokeballsprite.addBitmap("healballsel","Graphics/Pictures/PartyBall/partyBallSelHeal")
  271. @pokeballsprite.addBitmap("quickballdesel","Graphics/Pictures/PartyBall/partyBallQuick")
  272. @pokeballsprite.addBitmap("quickballsel","Graphics/Pictures/PartyBall/partyBallSelQuick")
  273. @pokeballsprite.addBitmap("cherishballdesel","Graphics/Pictures/PartyBall/partyBallCherish")
  274. @pokeballsprite.addBitmap("cherishballsel","Graphics/Pictures/PartyBall/partyBallSelCherish")
  275. @pokeballsprite.addBitmap("fastballdesel","Graphics/Pictures/PartyBall/partyBallFast")
  276. @pokeballsprite.addBitmap("fastballsel","Graphics/Pictures/PartyBall/partyBallSelFast")
  277. @pokeballsprite.addBitmap("levelballdesel","Graphics/Pictures/PartyBall/partyBallLevel")
  278. @pokeballsprite.addBitmap("levelballsel","Graphics/Pictures/PartyBall/partyBallSelLevel")
  279. @pokeballsprite.addBitmap("lureballdesel","Graphics/Pictures/PartyBall/partyBallLure")
  280. @pokeballsprite.addBitmap("lureballsel","Graphics/Pictures/PartyBall/partyBallSelLure")
  281. @pokeballsprite.addBitmap("heavyballdesel","Graphics/Pictures/PartyBall/partyBallHeavy")
  282. @pokeballsprite.addBitmap("heavyballsel","Graphics/Pictures/PartyBall/partyBallSelHeavy")
  283. @pokeballsprite.addBitmap("loveballdesel","Graphics/Pictures/PartyBall/partyBallLove")
  284. @pokeballsprite.addBitmap("loveballsel","Graphics/Pictures/PartyBall/partyBallSelLove")
  285. @pokeballsprite.addBitmap("friendballdesel","Graphics/Pictures/PartyBall/partyBallFriend")
  286. @pokeballsprite.addBitmap("friendballsel","Graphics/Pictures/PartyBall/partyBallSelFriend")
  287. @pokeballsprite.addBitmap("moonballdesel","Graphics/Pictures/PartyBall/partyBallMoon")
  288. @pokeballsprite.addBitmap("moonballsel","Graphics/Pictures/PartyBall/partyBallSelMoon")
  289. @pokeballsprite.addBitmap("sportballdesel","Graphics/Pictures/PartyBall/partyBallSport")
  290. @pokeballsprite.addBitmap("sportballsel","Graphics/Pictures/PartyBall/partyBallSelSport")
  291. @pkmnsprite=PokemonIconSprite.new(pokemon,viewport)
  292. @pkmnsprite.active=active
  293. @itemsprite=ChangelingSprite.new(0,0,viewport)
  294. @itemsprite.addBitmap("itembitmap","Graphics/Pictures/item")
  295. @itemsprite.addBitmap("mailbitmap","Graphics/Pictures/mail")
  296. @spriteX=xvalues[index]
  297. @spriteY=yvalues[index]
  298. @refreshBitmap=true
  299. @refreshing=false
  300. @preselected=false
  301. @switching=false
  302. @pkmnsprite.z=self.z+2 # For compatibility with RGSS2
  303. @itemsprite.z=self.z+3 # For compatibility with RGSS2
  304. @pokeballsprite.z=self.z+1 # For compatibility with RGSS2
  305. self.selected=false
  306. self.x=@spriteX
  307. self.y=@spriteY
  308. refresh
  309. end
  310.  
  311. def dispose
  312. @selbitmap.dispose
  313. @statuses.dispose
  314. @hpbar.dispose
  315. @deselbitmap.dispose
  316. @itemsprite.dispose
  317. @pkmnsprite.dispose
  318. @pokeballsprite.dispose
  319. self.bitmap.dispose
  320. super
  321. end
  322.  
  323. def selected=(value)
  324. @selected=value
  325. @refreshBitmap=true
  326. refresh
  327. end
  328.  
  329. def text=(value)
  330. @text=value
  331. @refreshBitmap=true
  332. refresh
  333. end
  334.  
  335. def pokemon=(value)
  336. @pokemon=value
  337. if @pkmnsprite && [email protected]?
  338. @pkmnsprite.pokemon=value
  339. end
  340. @refreshBitmap=true
  341. refresh
  342. end
  343.  
  344. def preselected=(value)
  345. if value!=@preselected
  346. @preselected=value
  347. refresh
  348. end
  349. end
  350.  
  351. def switching=(value)
  352. if value!=@switching
  353. @switching=value
  354. refresh
  355. end
  356. end
  357.  
  358. def color=(value)
  359. super
  360. refresh
  361. end
  362.  
  363. def x=(value)
  364. super
  365. refresh
  366. end
  367.  
  368. def y=(value)
  369. super
  370. refresh
  371. end
  372.  
  373. def hp
  374. return @pokemon.hp
  375. end
  376.  
  377. def refresh
  378. return if @refreshing
  379. return if disposed?
  380. @refreshing=true
  381. if !self.bitmap || self.bitmap.disposed?
  382. self.bitmap=BitmapWrapper.new(@selbitmap.width,@selbitmap.height)
  383. end
  384. if @pkmnsprite && [email protected]?
  385. @pkmnsprite.x=self.x+@spriteXOffset
  386. @pkmnsprite.y=self.y+@spriteYOffset
  387. @pkmnsprite.color=pbSrcOver(@pkmnsprite.color,self.color)
  388. @pkmnsprite.selected=self.selected
  389. end
  390. if @pokeballsprite && [email protected]?
  391. @pokeballsprite.x=self.x+@pokeballXOffset
  392. @pokeballsprite.y=self.y+@pokeballYOffset
  393. @pokeballsprite.color=self.color
  394. if @pokemon.ballused==1
  395. @pokeballsprite.changeBitmap(self.selected ? "greatballsel" : "greatballdesel")
  396. elsif @pokemon.ballused==2
  397. @pokeballsprite.changeBitmap(self.selected ? "safariballsel" : "safariballdesel")
  398. elsif @pokemon.ballused==3
  399. @pokeballsprite.changeBitmap(self.selected ? "ultraballsel" : "ultraballdesel")
  400. elsif @pokemon.ballused==4
  401. @pokeballsprite.changeBitmap(self.selected ? "masterballsel" : "masterballdesel")
  402. elsif @pokemon.ballused==5
  403. @pokeballsprite.changeBitmap(self.selected ? "netballsel" : "netballdesel")
  404. elsif @pokemon.ballused==6
  405. @pokeballsprite.changeBitmap(self.selected ? "diveballsel" : "diveballdesel")
  406. elsif @pokemon.ballused==7
  407. @pokeballsprite.changeBitmap(self.selected ? "nestballsel" : "nestballdesel")
  408. elsif @pokemon.ballused==8
  409. @pokeballsprite.changeBitmap(self.selected ? "repeatballsel" : "repeatballdesel")
  410. elsif @pokemon.ballused==9
  411. @pokeballsprite.changeBitmap(self.selected ? "timerballsel" : "timerballdesel")
  412. elsif @pokemon.ballused==10
  413. @pokeballsprite.changeBitmap(self.selected ? "luxuryballsel" : "luxuryballdesel")
  414. elsif @pokemon.ballused==11
  415. @pokeballsprite.changeBitmap(self.selected ? "premierballsel" : "premierballdesel")
  416. elsif @pokemon.ballused==12
  417. @pokeballsprite.changeBitmap(self.selected ? "duskballsel" : "duskballdesel")
  418. elsif @pokemon.ballused==13
  419. @pokeballsprite.changeBitmap(self.selected ? "healballsel" : "healballdesel")
  420. elsif @pokemon.ballused==14
  421. @pokeballsprite.changeBitmap(self.selected ? "quickballsel" : "quickballdesel")
  422. elsif @pokemon.ballused==15
  423. @pokeballsprite.changeBitmap(self.selected ? "cherishballsel" : "cherishballdesel")
  424. elsif @pokemon.ballused==16
  425. @pokeballsprite.changeBitmap(self.selected ? "fastballsel" : "fastballdesel")
  426. elsif @pokemon.ballused==17
  427. @pokeballsprite.changeBitmap(self.selected ? "levelballsel" : "levelballdesel")
  428. elsif @pokemon.ballused==18
  429. @pokeballsprite.changeBitmap(self.selected ? "lureballsel" : "lureballdesel")
  430. elsif @pokemon.ballused==19
  431. @pokeballsprite.changeBitmap(self.selected ? "heavyballsel" : "heavyballdesel")
  432. elsif @pokemon.ballused==20
  433. @pokeballsprite.changeBitmap(self.selected ? "loveballsel" : "loveballdesel")
  434. elsif @pokemon.ballused==21
  435. @pokeballsprite.changeBitmap(self.selected ? "friendballsel" : "friendballdesel")
  436. elsif @pokemon.ballused==22
  437. @pokeballsprite.changeBitmap(self.selected ? "moonballsel" : "moonballdesel")
  438. elsif @pokemon.ballused==23
  439. @pokeballsprite.changeBitmap(self.selected ? "sportballsel" : "sportballdesel")
  440. else
  441. @pokeballsprite.changeBitmap(self.selected ? "pokeballsel" : "pokeballdesel")
  442. end
  443. if @itemsprite && [email protected]?
  444. @itemsprite.visible=(@pokemon.item>0)
  445. if @itemsprite.visible
  446. @itemsprite.changeBitmap(@pokemon.mail ? "mailbitmap" : "itembitmap")
  447. @itemsprite.x=self.x+@itemXOffset
  448. @itemsprite.y=self.y+@itemYOffset
  449. @itemsprite.color=self.color
  450. end
  451. end
  452. if @refreshBitmap
  453. @refreshBitmap=false
  454. self.bitmap.clear if self.bitmap
  455. if self.selected
  456. if self.preselected
  457. self.bitmap.blt(0,0,@selswapbitmap.bitmap,Rect.new(0,0,@selswapbitmap.width,@selswapbitmap.height))
  458. self.bitmap.blt(0,0,@deselswapbitmap.bitmap,Rect.new(0,0,@deselswapbitmap.width,@deselswapbitmap.height))
  459. elsif @switching
  460. self.bitmap.blt(0,0,@selswapbitmap.bitmap,Rect.new(0,0,@selswapbitmap.width,@selswapbitmap.height))
  461. elsif @pokemon.hp<=0 && [email protected]?
  462. self.bitmap.blt(0,0,@selfntbitmap.bitmap,Rect.new(0,0,@selfntbitmap.width,@selfntbitmap.height))
  463. else
  464. self.bitmap.blt(0,0,@selbitmap.bitmap,Rect.new(0,0,@selbitmap.width,@selbitmap.height))
  465. end
  466. else
  467. if self.preselected
  468. self.bitmap.blt(0,0,@deselswapbitmap.bitmap,Rect.new(0,0,@deselswapbitmap.width,@deselswapbitmap.height))
  469. elsif @pokemon.hp<=0 && [email protected]?
  470. self.bitmap.blt(0,0,@deselfntbitmap.bitmap,Rect.new(0,0,@deselfntbitmap.width,@deselfntbitmap.height))
  471. else
  472. self.bitmap.blt(0,0,@deselbitmap.bitmap,Rect.new(0,0,@deselbitmap.width,@deselbitmap.height))
  473. end
  474. end
  475. base=Color.new(248,248,248)
  476. shadow=Color.new(40,40,40)
  477. pbSetSystemFont(self.bitmap)
  478. textpos=[[pokename,@pokenameX,@pokenameY,0,base,shadow]]
  479. if !@text || @text.length==0
  480. textpos.push([_ISPRINTF("{1: 3d}/{2: 3d}",@pokemon.hp,tothp),
  481. @hpX,@hpY,1,base,shadow])
  482. barbg=(@pokemon.hp<=0) ? @hpbarfnt : @hpbar
  483. barbg=(self.preselected || (self.selected && @switching)) ? @hpbarswap : barbg
  484. self.bitmap.blt(@hpbarX,@hpbarY,barbg.bitmap,Rect.new(0,0,@hpbar.width,@hpbar.height))
  485. [email protected]==0 ? 0 : (self.hp*96/@pokemon.totalhp)
  486. hpgauge=1 if hpgauge==0 && self.hp>0
  487. hpzone=0
  488. hpzone=1 if self.hp<=(@pokemon.totalhp/2).floor
  489. hpzone=2 if self.hp<=(@pokemon.totalhp/4).floor
  490. hpcolors=[
  491. Color.new(24,192,32),Color.new(96,248,96), # Green
  492. Color.new(232,168,0),Color.new(248,216,0), # Orange
  493. Color.new(248,72,56),Color.new(248,152,152) # Red
  494. ]
  495. # fill with HP color
  496. self.bitmap.fill_rect(@gaugeX,@gaugeY,hpgauge,2,hpcolors[hpzone*2])
  497. self.bitmap.fill_rect(@gaugeX,@gaugeY+2,hpgauge,4,hpcolors[hpzone*2+1])
  498. self.bitmap.fill_rect(@gaugeX,@gaugeY+6,hpgauge,2,hpcolors[hpzone*2])
  499. if @pokemon.hp==0 || @pokemon.status>0
  500. status=(@pokemon.hp==0) ? 5 : @pokemon.status-1
  501. statusrect=Rect.new(0,16*status,44,16)
  502. self.bitmap.blt(@statusX,@statusY,@statuses.bitmap,statusrect)
  503. end
  504. end
  505. if @pokemon.isMale?
  506. textpos.push([_INTL("♂"),@genderX,@genderY,0,Color.new(0,112,248),Color.new(120,184,232)])
  507. elsif @pokemon.isFemale?
  508. textpos.push([_INTL("♀"),@genderX,@genderY,0,Color.new(232,32,16),Color.new(248,168,184)])
  509. end
  510. end
  511. pbDrawTextPositions(self.bitmap,textpos)
  512. pbSetSmallFont(self.bitmap)
  513. leveltext=[([_INTL("Lv.{1}",@pokemon.level),@levelX,@levelY,0,base,shadow])]
  514. pbDrawTextPositions(self.bitmap,leveltext)
  515. end
  516. if @text && @text.length>0
  517. pbSetSystemFont(self.bitmap)
  518. annotation=[[@text,@annotX,@annotY,0,base,shadow]]
  519. pbDrawTextPositions(self.bitmap,annotation)
  520. end
  521. end
  522. @refreshing=false
  523. end
  524.  
  525. def update
  526. super
  527. @pokeballsprite.update if @pokeballsprite && [email protected]?
  528. @itemsprite.update if @itemsprite && [email protected]?
  529. if @pkmnsprite && [email protected]?
  530. @pkmnsprite.update
  531. end
  532. end
  533. end
  534.  
  535.  
  536. ##############################
  537.  
  538.  
  539. class PokemonScreen_Scene
  540. def pbShowCommands(helptext,commands,index=0)
  541. ret=-1
  542. helpwindow=@sprites["helpwindow"]
  543. helpwindow.visible=true
  544. using(cmdwindow=Window_CommandPokemon.new(commands)) {
  545. cmdwindow.index=index
  546. pbBottomRight(cmdwindow)
  547. helpwindow.text=""
  548. helpwindow.resizeHeightToFit(helptext,Graphics.width-cmdwindow.width)
  549. helpwindow.text=helptext
  550. pbBottomLeft(helpwindow)
  551. loop do
  552. Graphics.update
  553. Input.update
  554. cmdwindow.update
  555. self.update
  556. if Input.trigger?(Input::B)
  557. pbPlayCancelSE()
  558. ret=-1
  559. break
  560. end
  561. if Input.trigger?(Input::C)
  562. pbPlayDecisionSE()
  563. ret=cmdwindow.index
  564. break
  565. end
  566. end
  567. }
  568. return ret
  569. end
  570.  
  571. def update
  572. pbUpdateSpriteHash(@sprites)
  573. end
  574.  
  575. def pbSetHelpText(helptext)
  576. helpwindow=@sprites["helpwindow"]
  577. pbBottomLeftLines(helpwindow,1)
  578. helpwindow.text=helptext
  579. helpwindow.width=398
  580. helpwindow.visible=true
  581. end
  582.  
  583. def pbStartScene(party,starthelptext,annotations=nil,multiselect=false)
  584. @sprites={}
  585. @party=party
  586. @viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
  587. @viewport.z=99999
  588. @multiselect=multiselect
  589. addBackgroundPlane(@sprites,"partybg","partybg",@viewport)
  590. @sprites["messagebox"]=Window_AdvancedTextPokemon.new("")
  591. @sprites["helpwindow"]=Window_UnformattedTextPokemon.new(starthelptext)
  592. @sprites["messagebox"].viewport=@viewport
  593. @sprites["messagebox"].visible=false
  594. @sprites["messagebox"].letterbyletter=true
  595. @sprites["helpwindow"].viewport=@viewport
  596. @sprites["helpwindow"].visible=true
  597. pbBottomLeftLines(@sprites["messagebox"],2)
  598. pbBottomLeftLines(@sprites["helpwindow"],1)
  599. pbSetHelpText(starthelptext)
  600. # Add party Pokémon sprites
  601. for i in 0...6
  602. if @party[i]
  603. @sprites["pokemon#{i}"]=PokeSelectionSprite.new(
  604. @party[i],i,@viewport)
  605. else
  606. @sprites["pokemon#{i}"]=PokeSelectionPlaceholderSprite.new(
  607. @party[i],i,@viewport)
  608. end
  609. if annotations
  610. @sprites["pokemon#{i}"].text=annotations[i]
  611. end
  612. end
  613. if @multiselect
  614. @sprites["pokemon6"]=PokeSelectionConfirmSprite.new(@viewport)
  615. @sprites["pokemon7"]=PokeSelectionCancelSprite2.new(@viewport)
  616. else
  617. @sprites["pokemon6"]=PokeSelectionCancelSprite.new(@viewport)
  618. end
  619. # Select first Pokémon
  620. @activecmd=0
  621. @sprites["pokemon0"].selected=true
  622. pbFadeInAndShow(@sprites) { update }
  623. end
  624.  
  625. def pbEndScene
  626. pbFadeOutAndHide(@sprites) { update }
  627. pbDisposeSpriteHash(@sprites)
  628. @viewport.dispose
  629. end
  630.  
  631. def pbChangeSelection(key,currentsel)
  632. numsprites=(@multiselect) ? 8 : 7
  633. case key
  634. when Input::LEFT
  635. begin
  636. currentsel-=1
  637. end while currentsel>0 && currentsel<@party.length && !@party[currentsel]
  638. if currentsel>[email protected] && currentsel<6
  639. end
  640. currentsel=numsprites-1 if currentsel<0
  641. when Input::RIGHT
  642. begin
  643. currentsel+=1
  644. end while currentsel<@party.length && !@party[currentsel]
  645. currentsel=6
  646. elsif currentsel==numsprites
  647. currentsel=0
  648. end
  649. when Input::UP
  650. if currentsel>=6
  651. begin
  652. currentsel-=1
  653. end while currentsel>0 && !@party[currentsel]
  654. else
  655. begin
  656. currentsel-=2
  657. end while currentsel>0 && !@party[currentsel]
  658. end
  659. if currentsel>[email protected] && currentsel<6
  660. end
  661. currentsel=numsprites-1 if currentsel<0
  662. when Input::DOWN
  663. if currentsel>=5
  664. currentsel+=1
  665. else
  666. currentsel+=2
  667. currentsel=6 if currentsel<6 && !@party[currentsel]
  668. end
  669. if currentsel>[email protected] && currentsel<6
  670. currentsel=6
  671. elsif currentsel>=numsprites
  672. currentsel=0
  673. end
  674. end
  675. return currentsel
  676. end
  677.  
  678. def pbRefresh
  679. for i in 0...6
  680. sprite=@sprites["pokemon#{i}"]
  681. if sprite
  682. if sprite.is_a?(PokeSelectionSprite)
  683. sprite.pokemon=sprite.pokemon
  684. else
  685. sprite.refresh
  686. end
  687. end
  688. end
  689. end
  690.  
  691. def pbRefreshSingle(i)
  692. sprite=@sprites["pokemon#{i}"]
  693. if sprite
  694. if sprite.is_a?(PokeSelectionSprite)
  695. sprite.pokemon=sprite.pokemon
  696. else
  697. sprite.refresh
  698. end
  699. end
  700. end
  701.  
  702. def pbHardRefresh
  703. oldtext=[]
  704. lastselected=-1
  705. for i in 0...6
  706. oldtext.push(@sprites["pokemon#{i}"].text)
  707. lastselected=i if @sprites["pokemon#{i}"].selected
  708. @sprites["pokemon#{i}"].dispose
  709. end
  710. lastselected=0 if lastselected<0
  711. for i in 0...6
  712. if @party[i]
  713. @sprites["pokemon#{i}"]=PokeSelectionSprite.new(
  714. @party[i],i,@viewport)
  715. else
  716. @sprites["pokemon#{i}"]=PokeSelectionPlaceholderSprite.new(
  717. @party[i],i,@viewport)
  718. end
  719. @sprites["pokemon#{i}"].text=oldtext[i]
  720. end
  721. pbSelect(lastselected)
  722. end
  723.  
  724. def pbPreSelect(pkmn)
  725. @activecmd=pkmn
  726. end
  727.  
  728. def pbChoosePokemon(switching=false,initialsel=-1)
  729. for i in 0...6
  730. @sprites["pokemon#{i}"].preselected=(switching && i==@activecmd)
  731. @sprites["pokemon#{i}"].switching=switching
  732. end
  733. @activecmd=initialsel if initialsel>=0
  734. pbRefresh
  735. loop do
  736. Graphics.update
  737. Input.update
  738. self.update
  739. oldsel=@activecmd
  740. key=-1
  741. key=Input::DOWN if Input.repeat?(Input::DOWN)
  742. key=Input::RIGHT if Input.repeat?(Input::RIGHT)
  743. key=Input::LEFT if Input.repeat?(Input::LEFT)
  744. key=Input::UP if Input.repeat?(Input::UP)
  745. if key>=0
  746. @activecmd=pbChangeSelection(key,@activecmd)
  747. end
  748. if @activecmd!=oldsel # Changing selection
  749. pbPlayCursorSE()
  750. numsprites=(@multiselect) ? 8 : 7
  751. for i in 0...numsprites
  752. @sprites["pokemon#{i}"].selected=(i==@activecmd)
  753. end
  754. end
  755. if Input.trigger?(Input::B)
  756. return -1
  757. end
  758. if Input.trigger?(Input::C)
  759. pbPlayDecisionSE()
  760. cancelsprite=(@multiselect) ? 7 : 6
  761. return (@activecmd==cancelsprite) ? -1 : @activecmd
  762. end
  763. end
  764. end
  765.  
  766. def pbSelect(item)
  767. @activecmd=item
  768. numsprites=(@multiselect) ? 8 : 7
  769. for i in 0...numsprites
  770. @sprites["pokemon#{i}"].selected=(i==@activecmd)
  771. end
  772. end
  773.  
  774. def pbDisplay(text)
  775. @sprites["messagebox"].text=text
  776. @sprites["messagebox"].visible=true
  777. @sprites["helpwindow"].visible=false
  778. pbPlayDecisionSE()
  779. loop do
  780. Graphics.update
  781. Input.update
  782. self.update
  783. if @sprites["messagebox"].busy? && Input.trigger?(Input::C)
  784. pbPlayDecisionSE() if @sprites["messagebox"].pausing?
  785. @sprites["messagebox"].resume
  786. end
  787. if !@sprites["messagebox"].busy? &&
  788. (Input.trigger?(Input::C) || Input.trigger?(Input::B))
  789. break
  790. end
  791. end
  792. @sprites["messagebox"].visible=false
  793. @sprites["helpwindow"].visible=true
  794. end
  795.  
  796. def pbSwitchBegin(oldid,newid)
  797. oldsprite=@sprites["pokemon#{oldid}"]
  798. newsprite=@sprites["pokemon#{newid}"]
  799. 22.times do
  800. oldsprite.x+=(oldid&1)==0 ? -12 : 12
  801. newsprite.x+=(newid&1)==0 ? -12 : 12
  802. Graphics.update
  803. Input.update
  804. self.update
  805. end
  806. end
  807.  
  808. def pbSwitchEnd(oldid,newid)
  809. oldsprite=@sprites["pokemon#{oldid}"]
  810. newsprite=@sprites["pokemon#{newid}"]
  811. oldsprite.pokemon=@party[oldid]
  812. newsprite.pokemon=@party[newid]
  813. 22.times do
  814. oldsprite.x-=(oldid&1)==0 ? -12 : 12
  815. newsprite.x-=(newid&1)==0 ? -12 : 12
  816. Graphics.update
  817. Input.update
  818. self.update
  819. end
  820. for i in 0...6
  821. @sprites["pokemon#{i}"].preselected=false
  822. @sprites["pokemon#{i}"].switching=false
  823. end
  824. pbRefresh
  825. end
  826.  
  827. def pbDisplayConfirm(text)
  828. ret=-1
  829. @sprites["messagebox"].text=text
  830. @sprites["messagebox"].visible=true
  831. @sprites["helpwindow"].visible=false
  832. using(cmdwindow=Window_CommandPokemon.new([_INTL("Yes"),_INTL("No")])){
  833. cmdwindow.visible=false
  834. pbBottomRight(cmdwindow)
  835. cmdwindow.y-=@sprites["messagebox"].height
  836. loop do
  837. Graphics.update
  838. Input.update
  839. cmdwindow.visible=true if !@sprites["messagebox"].busy?
  840. cmdwindow.update
  841. self.update
  842. if Input.trigger?(Input::B) && !@sprites["messagebox"].busy?
  843. ret=false
  844. break
  845. end
  846. if Input.trigger?(Input::C) && @sprites["messagebox"].resume && !@sprites["messagebox"].busy?
  847. ret=(cmdwindow.index==0)
  848. break
  849. end
  850. end
  851. }
  852. @sprites["messagebox"].visible=false
  853. @sprites["helpwindow"].visible=true
  854. return ret
  855. end
  856.  
  857. def pbAnnotate(annot)
  858. for i in 0...6
  859. if annot
  860. @sprites["pokemon#{i}"].text=annot[i]
  861. else
  862. @sprites["pokemon#{i}"].text=nil
  863. end
  864. end
  865. end
  866.  
  867. def pbSummary(pkmnid)
  868. oldsprites=pbFadeOutAndHide(@sprites)
  869. scene=PokemonSummaryScene.new
  870. screen=PokemonSummary.new(scene)
  871. screen.pbStartScreen(@party,pkmnid)
  872. pbFadeInAndShow(@sprites,oldsprites)
  873. end
  874.  
  875. def pbChooseItem(bag)
  876. oldsprites=pbFadeOutAndHide(@sprites)
  877. @sprites["helpwindow"].visible=false
  878. @sprites["messagebox"].visible=false
  879. scene=PokemonBag_Scene.new
  880. screen=PokemonBagScreen.new(scene,bag)
  881. ret=screen.pbGiveItemScreen
  882. pbFadeInAndShow(@sprites,oldsprites)
  883. return ret
  884. end
  885.  
  886. def pbUseItem(bag,pokemon)
  887. oldsprites=pbFadeOutAndHide(@sprites)
  888. @sprites["helpwindow"].visible=false
  889. @sprites["messagebox"].visible=false
  890. scene=PokemonBag_Scene.new
  891. screen=PokemonBagScreen.new(scene,bag)
  892. ret=screen.pbUseItemScreen(pokemon)
  893. pbFadeInAndShow(@sprites,oldsprites)
  894. return ret
  895. end
  896.  
  897. def pbMessageFreeText(text,startMsg,maxlength)
  898. return Kernel.pbMessageFreeText(
  899. _INTL("Please enter a message (max. {1} characters).",maxlength),
  900. _INTL("{1}",startMsg),false,maxlength,Graphics.width) { update }
  901. end
  902. end
  903.  
  904.  
  905. ######################################
  906.  
  907.  
  908. class PokemonScreen
  909. def initialize(scene,party)
  910. @party=party
  911. @scene=scene
  912. end
  913.  
  914. def pbHardRefresh
  915. @scene.pbHardRefresh
  916. end
  917.  
  918. def pbRefresh
  919. @scene.pbRefresh
  920. end
  921.  
  922. def pbRefreshSingle(i)
  923. @scene.pbRefreshSingle(i)
  924. end
  925.  
  926. def pbDisplay(text)
  927. @scene.pbDisplay(text)
  928. end
  929.  
  930. def pbConfirm(text)
  931. return @scene.pbDisplayConfirm(text)
  932. end
  933.  
  934. def pbSwitch(oldid,newid)
  935. if oldid!=newid
  936. @scene.pbSwitchBegin(oldid,newid)
  937. tmp=@party[oldid]
  938. @party[oldid]=@party[newid]
  939. @party[newid]=tmp
  940. @scene.pbSwitchEnd(oldid,newid)
  941. end
  942. end
  943.  
  944. def pbMailScreen(item,pkmn,pkmnid)
  945. message=""
  946. loop do
  947. _INTL("Please enter a message (max. 256 characters)."),"",256)
  948. if message!=""
  949. # Store mail if a message was written
  950. poke1=poke2=poke3=nil
  951. if $Trainer.party[pkmnid+2]
  952. p=$Trainer.party[pkmnid+2]
  953. poke1=[p.species,p.gender,p.isShiny?,(p.form rescue 0),(p.isShadow? rescue false)]
  954. poke1.push(true) if p.isEgg?
  955. end
  956. if $Trainer.party[pkmnid+1]
  957. p=$Trainer.party[pkmnid+1]
  958. poke2=[p.species,p.gender,p.isShiny?,(p.form rescue 0),(p.isShadow? rescue false)]
  959. poke2.push(true) if p.isEgg?
  960. end
  961. poke3=[pkmn.species,pkmn.gender,pkmn.isShiny?,(pkmn.form rescue 0),(pkmn.isShadow? rescue false)]
  962. poke3.push(true) if pkmn.isEgg?
  963. pbStoreMail(pkmn,item,message,poke1,poke2,poke3)
  964. return true
  965. else
  966. return false if pbConfirm(_INTL("Stop giving the Pokémon Mail?"))
  967. end
  968. end
  969. end
  970.  
  971. def pbTakeMail(pkmn)
  972. if !pkmn.hasItem?
  973. pbDisplay(_INTL("{1} isn't holding anything.",pkmn.name))
  974. elsif !$PokemonBag.pbCanStore?(pkmn.item)
  975. pbDisplay(_INTL("The Bag is full. The Pokémon's item could not be removed."))
  976. elsif pkmn.mail
  977. if pbConfirm(_INTL("Send the removed mail to your PC?"))
  978. if !pbMoveToMailbox(pkmn)
  979. pbDisplay(_INTL("Your PC's Mailbox is full."))
  980. else
  981. pbDisplay(_INTL("The mail was sent to your PC."))
  982. pkmn.setItem(0)
  983. end
  984. elsif pbConfirm(_INTL("If the mail is removed, the message will be lost. OK?"))
  985. pbDisplay(_INTL("Mail was taken from the Pokémon."))
  986. $PokemonBag.pbStoreItem(pkmn.item)
  987. pkmn.setItem(0)
  988. pkmn.mail=nil
  989. end
  990. else
  991. $PokemonBag.pbStoreItem(pkmn.item)
  992. itemname=PBItems.getName(pkmn.item)
  993. pbDisplay(_INTL("Received the {1} from {2}.",itemname,pkmn.name))
  994. pkmn.setItem(0)
  995. end
  996. end
  997.  
  998. def pbGiveMail(item,pkmn,pkmnid=0)
  999. thisitemname=PBItems.getName(item)
  1000. if pkmn.isEgg?
  1001. pbDisplay(_INTL("Eggs can't hold items."))
  1002. return false
  1003. elsif pkmn.mail
  1004. pbDisplay(_INTL("{1}'s mail must be removed before giving it an item.",pkmn.name))
  1005. return false
  1006. end
  1007. if pkmn.item!=0
  1008. itemname=PBItems.getName(pkmn.item)
  1009. pbDisplay(_INTL("{1} is already holding {2}.\1",pkmn.name,itemname))
  1010. if pbConfirm(_INTL("Would you like to switch the two items?"))
  1011. $PokemonBag.pbDeleteItem(item)
  1012. if !$PokemonBag.pbStoreItem(pkmn.item)
  1013. if !$PokemonBag.pbStoreItem(item) # Compensate
  1014. raise _INTL("Can't re-store deleted item in bag")
  1015. end
  1016. pbDisplay(_INTL("The Bag is full. The Pokémon's item could not be removed."))
  1017. else
  1018. if pbIsMail?(item)
  1019. if pbMailScreen(item,pkmn,pkmnid)
  1020. pkmn.setItem(item)
  1021. pbDisplay(_INTL("The {1} was taken and replaced with the {2}.",itemname,thisitemname))
  1022. return true
  1023. else
  1024. if !$PokemonBag.pbStoreItem(item) # Compensate
  1025. raise _INTL("Can't re-store deleted item in bag")
  1026. end
  1027. end
  1028. else
  1029. pkmn.setItem(item)
  1030. pbDisplay(_INTL("Took the Pokémon's {1} and gave it the {2}.",itemname,thisitemname))
  1031. return true
  1032. end
  1033. end
  1034. end
  1035. else
  1036. if !pbIsMail?(item) || pbMailScreen(item,pkmn,pkmnid) # Open the mail screen if necessary
  1037. $PokemonBag.pbDeleteItem(item)
  1038. pkmn.setItem(item)
  1039. pbDisplay(_INTL("The Pokémon is now holding the {1}.",thisitemname))
  1040. return true
  1041. end
  1042. end
  1043. return false
  1044. end
  1045.  
  1046. def pbPokemonGiveScreen(item)
  1047. @scene.pbStartScene(@party,_INTL("Give to which Pokémon?"))
  1048. ret=false
  1049. if pkmnid>=0
  1050. ret=pbGiveMail(item,@party[pkmnid],pkmnid)
  1051. end
  1052. pbRefreshSingle(pkmnid)
  1053. @scene.pbEndScene
  1054. return ret
  1055. end
  1056.  
  1057. def pbPokemonGiveMailScreen(mailIndex)
  1058. @scene.pbStartScene(@party,_INTL("Give to which Pokémon?"))
  1059. if pkmnid>=0
  1060. pkmn=@party[pkmnid]
  1061. if pkmn.item!=0 || pkmn.mail
  1062. pbDisplay(_INTL("This Pokémon is holding an item. It can't hold mail."))
  1063. elsif pkmn.isEgg?
  1064. pbDisplay(_INTL("Eggs can't hold mail."))
  1065. else
  1066. pbDisplay(_INTL("Mail was transferred from the Mailbox."))
  1067. pkmn.mail=$PokemonGlobal.mailbox[mailIndex]
  1068. pkmn.setItem(pkmn.mail.item)
  1069. $PokemonGlobal.mailbox.delete_at(mailIndex)
  1070. pbRefreshSingle(pkmnid)
  1071. end
  1072. end
  1073. @scene.pbEndScene
  1074. end
  1075.  
  1076. def pbStartScene(helptext,doublebattle,annotations=nil)
  1077. @scene.pbStartScene(@party,helptext,annotations)
  1078. end
  1079.  
  1080. def pbChoosePokemon(helptext=nil)
  1081. @scene.pbSetHelpText(helptext) if helptext
  1082. return @scene.pbChoosePokemon
  1083. end
  1084.  
  1085. def pbChooseMove(pokemon,helptext)
  1086. movenames=[]
  1087. for i in pokemon.moves
  1088. break if i.id==0
  1089. if i.totalpp==0
  1090. movenames.push(_INTL("{1} (PP: ---)",PBMoves.getName(i.id),i.pp,i.totalpp))
  1091. else
  1092. movenames.push(_INTL("{1} (PP: {2}/{3})",PBMoves.getName(i.id),i.pp,i.totalpp))
  1093. end
  1094. end
  1095. return @scene.pbShowCommands(helptext,movenames)
  1096. end
  1097.  
  1098. def pbEndScene
  1099. @scene.pbEndScene
  1100. end
  1101.  
  1102. # Checks for identical species
  1103. def pbCheckSpecies(array)
  1104. for i in 0...array.length
  1105. for j in i+1...array.length
  1106. return false if array[i].species==array[j].species
  1107. end
  1108. end
  1109. return true
  1110. end
  1111.  
  1112. # Checks for identical held items
  1113. def pbCheckItems(array)
  1114. for i in 0...array.length
  1115. next if !array[i].hasItem?
  1116. for j in i+1...array.length
  1117. return false if array[i].item==array[j].item
  1118. end
  1119. end
  1120. return true
  1121. end
  1122.  
  1123. def pbPokemonMultipleEntryScreenEx(ruleset)
  1124. annot=[]
  1125. statuses=[]
  1126. ordinals=[
  1127. _INTL("INELIGIBLE"),
  1128. _INTL("NOT ENTERED"),
  1129. _INTL("BANNED"),
  1130. _INTL("FIRST"),
  1131. _INTL("SECOND"),
  1132. _INTL("THIRD"),
  1133. _INTL("FOURTH"),
  1134. _INTL("FIFTH"),
  1135. _INTL("SIXTH")
  1136. ]
  1137. if !ruleset.hasValidTeam?(@party)
  1138. return nil
  1139. end
  1140. ret=nil
  1141. addedEntry=false
  1142. if ruleset.isPokemonValid?(@party[i])
  1143. statuses[i]=1
  1144. else
  1145. statuses[i]=2
  1146. end
  1147. end
  1148. annot[i]=ordinals[statuses[i]]
  1149. end
  1150. @scene.pbStartScene(@party,_INTL("Choose Pokémon and confirm."),annot,true)
  1151. loop do
  1152. realorder=[]
  1153. if statuses[j]==i+3
  1154. realorder.push(j)
  1155. break
  1156. end
  1157. end
  1158. end
  1159. for i in 0...realorder.length
  1160. statuses[realorder[i]]=i+3
  1161. end
  1162. annot[i]=ordinals[statuses[i]]
  1163. end
  1164. @scene.pbAnnotate(annot)
  1165. if realorder.length==ruleset.number && addedEntry
  1166. @scene.pbSelect(6)
  1167. end
  1168. @scene.pbSetHelpText(_INTL("Choose Pokémon and confirm."))
  1169. addedEntry=false
  1170. if pkmnid==6 # Confirm was chosen
  1171. ret=[]
  1172. for i in realorder
  1173. ret.push(@party[i])
  1174. end
  1175. error=[]
  1176. if !ruleset.isValid?(ret,error)
  1177. pbDisplay(error[0])
  1178. ret=nil
  1179. else
  1180. break
  1181. end
  1182. end
  1183. if pkmnid<0 # Canceled
  1184. break
  1185. end
  1186. cmdEntry=-1
  1187. cmdNoEntry=-1
  1188. cmdSummary=-1
  1189. commands=[]
  1190. if (statuses[pkmnid] || 0) == 1
  1191. commands[cmdEntry=commands.length]=_INTL("Entry")
  1192. elsif (statuses[pkmnid] || 0) > 2
  1193. commands[cmdNoEntry=commands.length]=_INTL("No Entry")
  1194. end
  1195. pkmn=@party[pkmnid]
  1196. commands[cmdSummary=commands.length]=_INTL("Summary")
  1197. commands[commands.length]=_INTL("Cancel")
  1198. [email protected](_INTL("Do what with {1}?",pkmn.name),commands) if pkmn
  1199. if cmdEntry>=0 && command==cmdEntry
  1200. if realorder.length>=ruleset.number && ruleset.number>0
  1201. pbDisplay(_INTL("No more than {1} Pokémon may enter.",ruleset.number))
  1202. else
  1203. statuses[pkmnid]=realorder.length+3
  1204. addedEntry=true
  1205. pbRefreshSingle(pkmnid)
  1206. end
  1207. elsif cmdNoEntry>=0 && command==cmdNoEntry
  1208. statuses[pkmnid]=1
  1209. pbRefreshSingle(pkmnid)
  1210. elsif cmdSummary>=0 && command==cmdSummary
  1211. @scene.pbSummary(pkmnid)
  1212. end
  1213. end
  1214. @scene.pbEndScene
  1215. return ret
  1216. end
  1217.  
  1218. def pbChooseAblePokemon(ableProc,allowIneligible=false)
  1219. annot=[]
  1220. eligibility=[]
  1221. for pkmn in @party
  1222. elig=ableProc.call(pkmn)
  1223. eligibility.push(elig)
  1224. annot.push(elig ? _INTL("ABLE") : _INTL("NOT ABLE"))
  1225. end
  1226. ret=-1
  1227. @scene.pbStartScene(@party,
  1228. @party.length>1 ? _INTL("Choose a Pokémon.") : _INTL("Choose Pokémon or cancel."),annot)
  1229. loop do
  1230. @scene.pbSetHelpText(
  1231. @party.length>1 ? _INTL("Choose a Pokémon.") : _INTL("Choose Pokémon or cancel."))
  1232. if pkmnid<0
  1233. break
  1234. elsif !eligibility[pkmnid] && !allowIneligible
  1235. pbDisplay(_INTL("This Pokémon can't be chosen."))
  1236. else
  1237. ret=pkmnid
  1238. break
  1239. end
  1240. end
  1241. @scene.pbEndScene
  1242. return ret
  1243. end
  1244.  
  1245. def pbRefreshAnnotations(ableProc) # For after using an evolution stone
  1246. annot=[]
  1247. for pkmn in @party
  1248. elig=ableProc.call(pkmn)
  1249. annot.push(elig ? _INTL("ABLE") : _INTL("NOT ABLE"))
  1250. end
  1251. @scene.pbAnnotate(annot)
  1252. end
  1253.  
  1254. def pbClearAnnotations
  1255. @scene.pbAnnotate(nil)
  1256. end
  1257.  
  1258. def pbPokemonDebug(pkmn,pkmnid)
  1259. command=0
  1260. loop do
  1261. [email protected](_INTL("Do what with {1}?",pkmn.name),[
  1262. _INTL("HP/Status"),
  1263. _INTL("Level"),
  1264. _INTL("Species"),
  1265. _INTL("Moves"),
  1266. _INTL("Gender"),
  1267. _INTL("Ability"),
  1268. _INTL("Nature"),
  1269. _INTL("Shininess"),
  1270. _INTL("Form"),
  1271. _INTL("Happiness"),
  1272. _INTL("EV/IV/pID"),
  1273. _INTL("Pokérus"),
  1274. _INTL("Ownership"),
  1275. _INTL("Nickname"),
  1276. _INTL("Poké Ball"),
  1277. _INTL("Ribbons"),
  1278. _INTL("Egg"),
  1279. _INTL("Shadow Pokémon"),
  1280. _INTL("Make Mystery Gift"),
  1281. _INTL("Duplicate"),
  1282. _INTL("Delete"),
  1283. _INTL("Cancel")
  1284. ],command)
  1285. case command
  1286. ### Cancel ###
  1287. when -1, 21
  1288. break
  1289. ### HP/Status ###
  1290. when 0
  1291. cmd=0
  1292. loop do
  1293. [email protected](_INTL("Do what with {1}?",pkmn.name),[
  1294. _INTL("Set HP"),
  1295. _INTL("Status: Sleep"),
  1296. _INTL("Status: Poison"),
  1297. _INTL("Status: Burn"),
  1298. _INTL("Status: Paralysis"),
  1299. _INTL("Status: Frozen"),
  1300. _INTL("Fainted"),
  1301. _INTL("Heal")
  1302. ],cmd)
  1303. # Break
  1304. if cmd==-1
  1305. break
  1306. # Set HP
  1307. elsif cmd==0
  1308. params=ChooseNumberParams.new
  1309. params.setRange(0,pkmn.totalhp)
  1310. params.setDefaultValue(pkmn.hp)
  1311. newhp=Kernel.pbMessageChooseNumber(
  1312. _INTL("Set the Pokémon's HP (max. {1}).",pkmn.totalhp),params) { @scene.update }
  1313. if newhp!=pkmn.hp
  1314. pkmn.hp=newhp
  1315. pbDisplay(_INTL("{1}'s HP was set to {2}.",pkmn.name,pkmn.hp))
  1316. pbRefreshSingle(pkmnid)
  1317. end
  1318. # Set status
  1319. elsif cmd>=1 && cmd<=5
  1320. if pkmn.hp>0
  1321. pkmn.status=cmd
  1322. pkmn.statusCount=0
  1323. if pkmn.status==PBStatuses::SLEEP
  1324. params=ChooseNumberParams.new
  1325. params.setRange(0,9)
  1326. params.setDefaultValue(0)
  1327. sleep=Kernel.pbMessageChooseNumber(
  1328. _INTL("Set the Pokémon's sleep count."),params) { @scene.update }
  1329. pkmn.statusCount=sleep
  1330. end
  1331. pbDisplay(_INTL("{1}'s status was changed.",pkmn.name))
  1332. pbRefreshSingle(pkmnid)
  1333. else
  1334. pbDisplay(_INTL("{1}'s status could not be changed.",pkmn.name))
  1335. end
  1336. # Faint
  1337. elsif cmd==6
  1338. pkmn.hp=0
  1339. pbDisplay(_INTL("{1}'s HP was set to 0.",pkmn.name))
  1340. pbRefreshSingle(pkmnid)
  1341. # Heal
  1342. elsif cmd==7
  1343. pkmn.heal
  1344. pbDisplay(_INTL("{1} was fully healed.",pkmn.name))
  1345. pbRefreshSingle(pkmnid)
  1346. end
  1347. end
  1348. ### Level ###
  1349. when 1
  1350. params=ChooseNumberParams.new
  1351. params.setRange(1,PBExperience::MAXLEVEL)
  1352. params.setDefaultValue(pkmn.level)
  1353. level=Kernel.pbMessageChooseNumber(
  1354. _INTL("Set the Pokémon's level (max. {1}).",PBExperience::MAXLEVEL),params) { @scene.update }
  1355. if level!=pkmn.level
  1356. pkmn.level=level
  1357. pkmn.calcStats
  1358. pbDisplay(_INTL("{1}'s level was set to {2}.",pkmn.name,pkmn.level))
  1359. pbRefreshSingle(pkmnid)
  1360. end
  1361. ### Species ###
  1362. when 2
  1363. species=pbChooseSpecies(pkmn.species)
  1364. if species!=0
  1365. oldspeciesname=PBSpecies.getName(pkmn.species)
  1366. pkmn.species=species
  1367. pkmn.calcStats
  1368. oldname=pkmn.name
  1369. pkmn.name=PBSpecies.getName(pkmn.species) if pkmn.name==oldspeciesname
  1370. pbDisplay(_INTL("{1}'s species was changed to {2}.",oldname,PBSpecies.getName(pkmn.species)))
  1371. pbSeenForm(pkmn)
  1372. pbRefreshSingle(pkmnid)
  1373. end
  1374. ### Moves ###
  1375. when 3
  1376. cmd=0
  1377. loop do
  1378. [email protected](_INTL("Do what with {1}?",pkmn.name),[
  1379. _INTL("Teach move"),
  1380. _INTL("Forget move"),
  1381. _INTL("Reset movelist"),
  1382. _INTL("Reset initial moves")],cmd)
  1383. # Break
  1384. if cmd==-1
  1385. break
  1386. # Teach move
  1387. elsif cmd==0
  1388. move=pbChooseMoveList
  1389. if move!=0
  1390. pbLearnMove(pkmn,move)
  1391. pbRefreshSingle(pkmnid)
  1392. end
  1393. # Forget move
  1394. elsif cmd==1
  1395. move=pbChooseMove(pkmn,_INTL("Choose move to forget."))
  1396. if move>=0
  1397. movename=PBMoves.getName(pkmn.moves[move].id)
  1398. pkmn.pbDeleteMoveAtIndex(move)
  1399. pbDisplay(_INTL("{1} forgot {2}.",pkmn.name,movename))
  1400. pbRefreshSingle(pkmnid)
  1401. end
  1402. # Reset movelist
  1403. elsif cmd==2
  1404. pkmn.resetMoves
  1405. pbDisplay(_INTL("{1}'s moves were reset.",pkmn.name))
  1406. pbRefreshSingle(pkmnid)
  1407. # Reset initial moves
  1408. elsif cmd==3
  1409. pkmn.pbRecordFirstMoves
  1410. pbDisplay(_INTL("{1}'s moves were set as its first-known moves.",pkmn.name))
  1411. pbRefreshSingle(pkmnid)
  1412. end
  1413. end
  1414. ### Gender ###
  1415. when 4
  1416. if pkmn.gender==2
  1417. pbDisplay(_INTL("{1} is genderless.",pkmn.name))
  1418. else
  1419. cmd=0
  1420. loop do
  1421. oldgender=(pkmn.isMale?) ? _INTL("male") : _INTL("female")
  1422. msg=[_INTL("Gender {1} is natural.",oldgender),
  1423. _INTL("Gender {1} is being forced.",oldgender)][pkmn.genderflag ? 1 : 0]
  1424. _INTL("Make male"),
  1425. _INTL("Make female"),
  1426. _INTL("Remove override")],cmd)
  1427. # Break
  1428. if cmd==-1
  1429. break
  1430. # Make male
  1431. elsif cmd==0
  1432. pkmn.setGender(0)
  1433. if pkmn.isMale?
  1434. pbDisplay(_INTL("{1} is now male.",pkmn.name))
  1435. else
  1436. pbDisplay(_INTL("{1}'s gender couldn't be changed.",pkmn.name))
  1437. end
  1438. # Make female
  1439. elsif cmd==1
  1440. pkmn.setGender(1)
  1441. if pkmn.isFemale?
  1442. pbDisplay(_INTL("{1} is now female.",pkmn.name))
  1443. else
  1444. pbDisplay(_INTL("{1}'s gender couldn't be changed.",pkmn.name))
  1445. end
  1446. # Remove override
  1447. elsif cmd==2
  1448. pkmn.genderflag=nil
  1449. pbDisplay(_INTL("Gender override removed."))
  1450. end
  1451. pbSeenForm(pkmn)
  1452. pbRefreshSingle(pkmnid)
  1453. end
  1454. end
  1455. ### Ability ###
  1456. when 5
  1457. cmd=0
  1458. loop do
  1459. abils=pkmn.getAbilityList
  1460. oldabil=PBAbilities.getName(pkmn.ability)
  1461. commands=[]
  1462. for i in abils
  1463. commands.push((i[1]<2 ? "" : "(H) ")+PBAbilities.getName(i[0]))
  1464. end
  1465. commands.push(_INTL("Remove override"))
  1466. msg=[_INTL("Ability {1} is natural.",oldabil),
  1467. _INTL("Ability {1} is being forced.",oldabil)][pkmn.abilityflag!=nil ? 1 : 0]
  1468. [email protected](msg,commands,cmd)
  1469. # Break
  1470. if cmd==-1
  1471. break
  1472. # Set ability override
  1473. elsif cmd>=0 && cmd<abils.length
  1474. pkmn.setAbility(abils[cmd][1])
  1475. # Remove override
  1476. elsif cmd==abils.length
  1477. pkmn.abilityflag=nil
  1478. end
  1479. pbRefreshSingle(pkmnid)
  1480. end
  1481. ### Nature ###
  1482. when 6
  1483. cmd=0
  1484. loop do
  1485. oldnature=PBNatures.getName(pkmn.nature)
  1486. commands=[]
  1487. (PBNatures.getCount).times do |i|
  1488. commands.push(PBNatures.getName(i))
  1489. end
  1490. commands.push(_INTL("Remove override"))
  1491. msg=[_INTL("Nature {1} is natural.",oldnature),
  1492. _INTL("Nature {1} is being forced.",oldnature)][pkmn.natureflag ? 1 : 0]
  1493. [email protected](msg,commands,cmd)
  1494. # Break
  1495. if cmd==-1
  1496. break
  1497. # Set nature override
  1498. elsif cmd>=0 && cmd<PBNatures.getCount
  1499. pkmn.setNature(cmd)
  1500. pkmn.calcStats
  1501. # Remove override
  1502. elsif cmd==PBNatures.getCount
  1503. pkmn.natureflag=nil
  1504. end
  1505. pbRefreshSingle(pkmnid)
  1506. end
  1507. ### Shininess ###
  1508. when 7
  1509. cmd=0
  1510. loop do
  1511. oldshiny=(pkmn.isShiny?) ? _INTL("shiny") : _INTL("normal")
  1512. msg=[_INTL("Shininess ({1}) is natural.",oldshiny),
  1513. _INTL("Shininess ({1}) is being forced.",oldshiny)][pkmn.shinyflag!=nil ? 1 : 0]
  1514. _INTL("Make shiny"),
  1515. _INTL("Make normal"),
  1516. _INTL("Remove override")],cmd)
  1517. # Break
  1518. if cmd==-1
  1519. break
  1520. # Make shiny
  1521. elsif cmd==0
  1522. pkmn.makeShiny
  1523. # Make normal
  1524. elsif cmd==1
  1525. pkmn.makeNotShiny
  1526. # Remove override
  1527. elsif cmd==2
  1528. pkmn.shinyflag=nil
  1529. end
  1530. pbRefreshSingle(pkmnid)
  1531. end
  1532. ### Form ###
  1533. when 8
  1534. params=ChooseNumberParams.new
  1535. params.setRange(0,100)
  1536. params.setDefaultValue(pkmn.form)
  1537. f=Kernel.pbMessageChooseNumber(
  1538. _INTL("Set the Pokémon's form."),params) { @scene.update }
  1539. if f!=pkmn.form
  1540. pkmn.form=f
  1541. pbDisplay(_INTL("{1}'s form was set to {2}.",pkmn.name,pkmn.form))
  1542. pbSeenForm(pkmn)
  1543. pbRefreshSingle(pkmnid)
  1544. end
  1545. ### Happiness ###
  1546. when 9
  1547. params=ChooseNumberParams.new
  1548. params.setRange(0,255)
  1549. params.setDefaultValue(pkmn.happiness)
  1550. h=Kernel.pbMessageChooseNumber(
  1551. _INTL("Set the Pokémon's happiness (max. 255)."),params) { @scene.update }
  1552. if h!=pkmn.happiness
  1553. pkmn.happiness=h
  1554. pbDisplay(_INTL("{1}'s happiness was set to {2}.",pkmn.name,pkmn.happiness))
  1555. pbRefreshSingle(pkmnid)
  1556. end
  1557. ### EV/IV/pID ###
  1558. when 10
  1559. stats=[_INTL("HP"),_INTL("Attack"),_INTL("Defense"),
  1560. _INTL("Speed"),_INTL("Sp. Attack"),_INTL("Sp. Defense")]
  1561. cmd=0
  1562. loop do
  1563. persid=sprintf("0x%08X",pkmn.personalID)
  1564. [email protected](_INTL("Personal ID is {1}.",persid),[
  1565. _INTL("Set EVs"),
  1566. _INTL("Set IVs"),
  1567. _INTL("Randomise pID")],cmd)
  1568. case cmd
  1569. # Break
  1570. when -1
  1571. break
  1572. # Set EVs
  1573. when 0
  1574. cmd2=0
  1575. loop do
  1576. evcommands=[]
  1577. for i in 0...stats.length
  1578. evcommands.push(stats[i]+" (#{pkmn.ev[i]})")
  1579. end
  1580. [email protected](_INTL("Change which EV?"),evcommands,cmd2)
  1581. if cmd2==-1
  1582. break
  1583. elsif cmd2>=0 && cmd2<stats.length
  1584. params=ChooseNumberParams.new
  1585. params.setRange(0,PokeBattle_Pokemon::EVSTATLIMIT)
  1586. params.setDefaultValue(pkmn.ev[cmd2])
  1587. params.setCancelValue(pkmn.ev[cmd2])
  1588. f=Kernel.pbMessageChooseNumber(
  1589. _INTL("Set the EV for {1} (max. {2}).",
  1590. stats[cmd2],PokeBattle_Pokemon::EVSTATLIMIT),params) { @scene.update }
  1591. pkmn.ev[cmd2]=f
  1592. pkmn.totalhp
  1593. pkmn.calcStats
  1594. pbRefreshSingle(pkmnid)
  1595. end
  1596. end
  1597. # Set IVs
  1598. when 1
  1599. cmd2=0
  1600. loop do
  1601. hiddenpower=pbHiddenPower(pkmn.iv)
  1602. msg=_INTL("Hidden Power:\n{1}, power {2}.",PBTypes.getName(hiddenpower[0]),hiddenpower[1])
  1603. ivcommands=[]
  1604. for i in 0...stats.length
  1605. ivcommands.push(stats[i]+" (#{pkmn.iv[i]})")
  1606. end
  1607. ivcommands.push(_INTL("Randomise all"))
  1608. [email protected](msg,ivcommands,cmd2)
  1609. if cmd2==-1
  1610. break
  1611. elsif cmd2>=0 && cmd2<stats.length
  1612. params=ChooseNumberParams.new
  1613. params.setRange(0,31)
  1614. params.setDefaultValue(pkmn.iv[cmd2])
  1615. params.setCancelValue(pkmn.iv[cmd2])
  1616. f=Kernel.pbMessageChooseNumber(
  1617. _INTL("Set the IV for {1} (max. 31).",stats[cmd2]),params) { @scene.update }
  1618. pkmn.iv[cmd2]=f
  1619. pkmn.calcStats
  1620. pbRefreshSingle(pkmnid)
  1621. elsif cmd2==ivcommands.length-1
  1622. pkmn.iv[0]=rand(32)
  1623. pkmn.iv[1]=rand(32)
  1624. pkmn.iv[2]=rand(32)
  1625. pkmn.iv[3]=rand(32)
  1626. pkmn.iv[4]=rand(32)
  1627. pkmn.iv[5]=rand(32)
  1628. pkmn.calcStats
  1629. pbRefreshSingle(pkmnid)
  1630. end
  1631. end
  1632. # Randomise pID
  1633. when 2
  1634. pkmn.personalID=rand(256)
  1635. pkmn.personalID|=rand(256)<<8
  1636. pkmn.personalID|=rand(256)<<16
  1637. pkmn.personalID|=rand(256)<<24
  1638. pkmn.calcStats
  1639. pbRefreshSingle(pkmnid)
  1640. end
  1641. end
  1642. ### Pokérus ###
  1643. when 11
  1644. cmd=0
  1645. loop do
  1646. pokerus=(pkmn.pokerus) ? pkmn.pokerus : 0
  1647. msg=[_INTL("{1} doesn't have Pokérus.",pkmn.name),
  1648. _INTL("Has strain {1}, infectious for {2} more days.",pokerus/16,pokerus%16),
  1649. _INTL("Has strain {1}, not infectious.",pokerus/16)][pkmn.pokerusStage]
  1650. _INTL("Give random strain"),
  1651. _INTL("Make not infectious"),
  1652. _INTL("Clear Pokérus")],cmd)
  1653. # Break
  1654. if cmd==-1
  1655. break
  1656. # Give random strain
  1657. elsif cmd==0
  1658. pkmn.givePokerus
  1659. # Make not infectious
  1660. elsif cmd==1
  1661. strain=pokerus/16
  1662. p=strain<<4
  1663. pkmn.pokerus=p
  1664. # Clear Pokérus
  1665. elsif cmd==2
  1666. pkmn.pokerus=0
  1667. end
  1668. end
  1669. ### Ownership ###
  1670. when 12
  1671. cmd=0
  1672. loop do
  1673. gender=[_INTL("Male"),_INTL("Female"),_INTL("Unknown")][pkmn.otgender]
  1674. msg=[_INTL("Player's Pokémon\n{1}\n{2}\n{3} ({4})",pkmn.ot,gender,pkmn.publicID,pkmn.trainerID),
  1675. _INTL("Foreign Pokémon\n{1}\n{2}\n{3} ({4})",pkmn.ot,gender,pkmn.publicID,pkmn.trainerID)
  1676. ][pkmn.isForeign?($Trainer) ? 1 : 0]
  1677. _INTL("Make player's"),
  1678. _INTL("Set OT's name"),
  1679. _INTL("Set OT's gender"),
  1680. _INTL("Random foreign ID"),
  1681. _INTL("Set foreign ID")],cmd)
  1682. # Break
  1683. if cmd==-1
  1684. break
  1685. # Make player's
  1686. elsif cmd==0
  1687. pkmn.trainerID=$Trainer.id
  1688. pkmn.ot=$Trainer.name
  1689. pkmn.otgender=$Trainer.gender
  1690. # Set OT's name
  1691. elsif cmd==1
  1692. newot=pbEnterPlayerName(_INTL("{1}'s OT's name?",pkmn.name),1,7)
  1693. pkmn.ot=newot
  1694. # Set OT's gender
  1695. elsif cmd==2
  1696. [email protected](_INTL("Set OT's gender."),
  1697. [_INTL("Male"),_INTL("Female"),_INTL("Unknown")])
  1698. pkmn.otgender=cmd2 if cmd2>=0
  1699. # Random foreign ID
  1700. elsif cmd==3
  1701. pkmn.trainerID=$Trainer.getForeignID
  1702. # Set foreign ID
  1703. elsif cmd==4
  1704. params=ChooseNumberParams.new
  1705. params.setRange(0,65535)
  1706. params.setDefaultValue(pkmn.publicID)
  1707. val=Kernel.pbMessageChooseNumber(
  1708. _INTL("Set the new ID (max. 65535)."),params) { @scene.update }
  1709. pkmn.trainerID=val
  1710. pkmn.trainerID|=val<<16
  1711. end
  1712. end
  1713. ### Nickname ###
  1714. when 13
  1715. cmd=0
  1716. loop do
  1717. speciesname=PBSpecies.getName(pkmn.species)
  1718. msg=[_INTL("{1} has the nickname {2}.",speciesname,pkmn.name),
  1719. _INTL("{1} has no nickname.",speciesname)][pkmn.name==speciesname ? 1 : 0]
  1720. _INTL("Rename"),
  1721. _INTL("Erase name")],cmd)
  1722. # Break
  1723. if cmd==-1
  1724. break
  1725. # Rename
  1726. elsif cmd==0
  1727. newname=pbEnterPokemonName(_INTL("{1}'s nickname?",speciesname),0,10,"",pkmn)
  1728. pkmn.name=(newname=="") ? speciesname : newname
  1729. pbRefreshSingle(pkmnid)
  1730. # Erase name
  1731. elsif cmd==1
  1732. pkmn.name=speciesname
  1733. end
  1734. end
  1735. ### Poké Ball ###
  1736. when 14
  1737. cmd=0
  1738. loop do
  1739. oldball=PBItems.getName(pbBallTypeToBall(pkmn.ballused))
  1740. commands=[]; balls=[]
  1741. for key in $BallTypes.keys
  1742. item=getID(PBItems,$BallTypes[key])
  1743. balls.push([key,PBItems.getName(item)]) if item && item>0
  1744. end
  1745. balls.sort! {|a,b| a[1]<=>b[1]}
  1746. for i in 0...commands.length
  1747. cmd=i if pkmn.ballused==balls[i][0]
  1748. end
  1749. for i in balls
  1750. commands.push(i[1])
  1751. end
  1752. [email protected](_INTL("{1} used.",oldball),commands,cmd)
  1753. if cmd==-1
  1754. break
  1755. else
  1756. pkmn.ballused=balls[cmd][0]
  1757. end
  1758. end
  1759. ### Ribbons ###
  1760. when 15
  1761. cmd=0
  1762. loop do
  1763. commands=[]
  1764. for i in 1..PBRibbons.maxValue
  1765. commands.push(_INTL("{1} {2}",
  1766. pkmn.hasRibbon?(i) ? "[X]" : "[ ]",PBRibbons.getName(i)))
  1767. end
  1768. [email protected](_INTL("{1} ribbons.",pkmn.ribbonCount),commands,cmd)
  1769. if cmd==-1
  1770. break
  1771. elsif cmd>=0 && cmd<commands.length
  1772. if pkmn.hasRibbon?(cmd+1)
  1773. pkmn.takeRibbon(cmd+1)
  1774. else
  1775. pkmn.giveRibbon(cmd+1)
  1776. end
  1777. end
  1778. end
  1779. ### Egg ###
  1780. when 16
  1781. cmd=0
  1782. loop do
  1783. msg=[_INTL("Not an egg"),
  1784. _INTL("Egg with eggsteps: {1}.",pkmn.eggsteps)][pkmn.isEgg? ? 1 : 0]
  1785. _INTL("Make egg"),
  1786. _INTL("Make Pokémon"),
  1787. _INTL("Set eggsteps to 1")],cmd)
  1788. # Break
  1789. if cmd==-1
  1790. break
  1791. # Make egg
  1792. elsif cmd==0
  1793. if pbHasEgg?(pkmn.species) ||
  1794. pbConfirm(_INTL("{1} cannot be an egg. Make egg anyway?",PBSpecies.getName(pkmn.species)))
  1795. pkmn.level=EGGINITIALLEVEL
  1796. pkmn.calcStats
  1797. pkmn.name=_INTL("Egg")
  1798. dexdata=pbOpenDexData
  1799. pbDexDataOffset(dexdata,pkmn.species,21)
  1800. pkmn.eggsteps=dexdata.fgetw
  1801. dexdata.close
  1802. pkmn.hatchedMap=0
  1803. pkmn.obtainMode=1
  1804. pbRefreshSingle(pkmnid)
  1805. end
  1806. # Make Pokémon
  1807. elsif cmd==1
  1808. pkmn.name=PBSpecies.getName(pkmn.species)
  1809. pkmn.eggsteps=0
  1810. pkmn.hatchedMap=0
  1811. pkmn.obtainMode=0
  1812. pbRefreshSingle(pkmnid)
  1813. # Set eggsteps to 1
  1814. elsif cmd==2
  1815. pkmn.eggsteps=1 if pkmn.eggsteps>0
  1816. end
  1817. end
  1818. ### Shadow Pokémon ###
  1819. when 17
  1820. cmd=0
  1821. loop do
  1822. msg=[_INTL("Not a Shadow Pokémon."),
  1823. _INTL("Heart gauge is {1}.",pkmn.heartgauge)][(pkmn.isShadow? rescue false) ? 1 : 0]
  1824. _INTL("Make Shadow"),
  1825. _INTL("Lower heart gauge")],cmd)
  1826. # Break
  1827. if cmd==-1
  1828. break
  1829. # Make Shadow
  1830. elsif cmd==0
  1831. if !(pkmn.isShadow? rescue false) && pkmn.respond_to?("makeShadow")
  1832. pkmn.makeShadow
  1833. pbDisplay(_INTL("{1} is now a Shadow Pokémon.",pkmn.name))
  1834. pbRefreshSingle(pkmnid)
  1835. else
  1836. pbDisplay(_INTL("{1} is already a Shadow Pokémon.",pkmn.name))
  1837. end
  1838. # Lower heart gauge
  1839. elsif cmd==1
  1840. if (pkmn.isShadow? rescue false)
  1841. prev=pkmn.heartgauge
  1842. pkmn.adjustHeart(-700)
  1843. Kernel.pbMessage(_INTL("{1}'s heart gauge was lowered from {2} to {3} (now stage {4}).",
  1844. pkmn.name,prev,pkmn.heartgauge,pkmn.heartStage))
  1845. pbReadyToPurify(pkmn)
  1846. else
  1847. Kernel.pbMessage(_INTL("{1} is not a Shadow Pokémon.",pkmn.name))
  1848. end
  1849. end
  1850. end
  1851. ### Make Mystery Gift ###
  1852. when 18
  1853. pbCreateMysteryGift(0,pkmn)
  1854. ### Duplicate ###
  1855. when 19
  1856. if pbConfirm(_INTL("Are you sure you want to copy this Pokémon?"))
  1857. clonedpkmn=pkmn.clone
  1858. clonedpkmn.iv=pkmn.iv.clone
  1859. clonedpkmn.ev=pkmn.ev.clone
  1860. pbStorePokemon(clonedpkmn)
  1861. pbHardRefresh
  1862. pbDisplay(_INTL("The Pokémon was duplicated."))
  1863. break
  1864. end
  1865. ### Delete ###
  1866. when 20
  1867. if pbConfirm(_INTL("Are you sure you want to delete this Pokémon?"))
  1868. @party[pkmnid]=nil
  1869. @party.compact!
  1870. pbHardRefresh
  1871. pbDisplay(_INTL("The Pokémon was deleted."))
  1872. break
  1873. end
  1874. end
  1875. end
  1876. end
  1877.  
  1878. def pbPokemonScreen
  1879. @scene.pbStartScene(@party,@party.length>1 ? _INTL("Choose a Pokémon.") : _INTL("Choose Pokémon or cancel."),nil)
  1880. loop do
  1881. @scene.pbSetHelpText(@party.length>1 ? _INTL("Choose a Pokémon.") : _INTL("Choose Pokémon or cancel."))
  1882. break if pkmnid<0
  1883. pkmn=@party[pkmnid]
  1884. commands = []
  1885. cmdSummary = -1
  1886. cmdDebug = -1
  1887. cmdMoves = [-1,-1,-1,-1]
  1888. cmdSwitch = -1
  1889. cmdMail = -1
  1890. cmdItem = -1
  1891. # Build the commands
  1892. commands[cmdSummary=commands.length] = _INTL("Summary")
  1893. commands[cmdDebug=commands.length] = _INTL("Debug") if $DEBUG
  1894. for i in 0...pkmn.moves.length
  1895. move=pkmn.moves[i]
  1896. # Check for hidden moves and add any that were found
  1897. if !pkmn.isEgg? && (isConst?(move.id,PBMoves,:MILKDRINK) ||
  1898. isConst?(move.id,PBMoves,:SOFTBOILED) ||
  1899. HiddenMoveHandlers.hasHandler(move.id))
  1900. commands[cmdMoves[i]=commands.length] = PBMoves.getName(move.id)
  1901. end
  1902. end
  1903. commands[cmdSwitch=commands.length] = _INTL("Switch") if @party.length>1
  1904. if !pkmn.isEgg?
  1905. if pkmn.mail
  1906. commands[cmdMail=commands.length] = _INTL("Mail")
  1907. else
  1908. commands[cmdItem=commands.length] = _INTL("Item")
  1909. end
  1910. end
  1911. commands[commands.length] = _INTL("Cancel")
  1912. [email protected](_INTL("Do what with {1}?",pkmn.name),commands)
  1913. havecommand=false
  1914. for i in 0...4
  1915. if cmdMoves[i]>=0 && command==cmdMoves[i]
  1916. havecommand=true
  1917. if isConst?(pkmn.moves[i].id,PBMoves,:SOFTBOILED) ||
  1918. isConst?(pkmn.moves[i].id,PBMoves,:MILKDRINK)
  1919. amt=[(pkmn.totalhp/5).floor,1].max
  1920. if pkmn.hp<=amt
  1921. pbDisplay(_INTL("Not enough HP..."))
  1922. break
  1923. end
  1924. @scene.pbSetHelpText(_INTL("Use on which Pokémon?"))
  1925. oldpkmnid=pkmnid
  1926. loop do
  1927. @scene.pbPreSelect(oldpkmnid)
  1928. [email protected](true,pkmnid)
  1929. break if pkmnid<0
  1930. newpkmn=@party[pkmnid]
  1931. if pkmnid==oldpkmnid
  1932. pbDisplay(_INTL("{1} can't use {2} on itself!",pkmn.name,PBMoves.getName(pkmn.moves[i].id)))
  1933. elsif newpkmn.isEgg?
  1934. pbDisplay(_INTL("{1} can't be used on an Egg!",PBMoves.getName(pkmn.moves[i].id)))
  1935. elsif newpkmn.hp==0 || newpkmn.hp==newpkmn.totalhp
  1936. pbDisplay(_INTL("{1} can't be used on that Pokémon.",PBMoves.getName(pkmn.moves[i].id)))
  1937. else
  1938. pkmn.hp-=amt
  1939. hpgain=pbItemRestoreHP(newpkmn,amt)
  1940. @scene.pbDisplay(_INTL("{1}'s HP was restored by {2} points.",newpkmn.name,hpgain))
  1941. pbRefresh
  1942. end
  1943. break if pkmn.hp<=amt
  1944. end
  1945. break
  1946. elsif Kernel.pbCanUseHiddenMove?(pkmn,pkmn.moves[i].id)
  1947. @scene.pbEndScene
  1948. if isConst?(pkmn.moves[i].id,PBMoves,:FLY)
  1949. scene=PokemonRegionMapScene.new(-1,false)
  1950. screen=PokemonRegionMap.new(scene)
  1951. ret=screen.pbStartFlyScreen
  1952. if ret
  1953. $PokemonTemp.flydata=ret
  1954. return [pkmn,pkmn.moves[i].id]
  1955. end
  1956. @scene.pbStartScene(@party,
  1957. @party.length>1 ? _INTL("Choose a Pokémon.") : _INTL("Choose Pokémon or cancel."))
  1958. break
  1959. end
  1960. return [pkmn,pkmn.moves[i].id]
  1961. else
  1962. break
  1963. end
  1964. end
  1965. end
  1966. next if havecommand
  1967. if cmdSummary>=0 && command==cmdSummary
  1968. @scene.pbSummary(pkmnid)
  1969. elsif cmdDebug>=0 && command==cmdDebug
  1970. pbPokemonDebug(pkmn,pkmnid)
  1971. elsif cmdSwitch>=0 && command==cmdSwitch
  1972. @scene.pbSetHelpText(_INTL("Move to where?"))
  1973. oldpkmnid=pkmnid
  1974. if pkmnid>=0 && pkmnid!=oldpkmnid
  1975. pbSwitch(oldpkmnid,pkmnid)
  1976. end
  1977. elsif cmdMail>=0 && command==cmdMail
  1978. [email protected](_INTL("Do what with the mail?"),
  1979. [_INTL("Read"),_INTL("Take"),_INTL("Cancel")])
  1980. case command
  1981. when 0 # Read
  1982. pbFadeOutIn(99999){
  1983. pbDisplayMail(pkmn.mail,pkmn)
  1984. }
  1985. when 1 # Take
  1986. pbTakeMail(pkmn)
  1987. pbRefreshSingle(pkmnid)
  1988. end
  1989. elsif cmdItem>=0 && command==cmdItem
  1990. itemcommands = []
  1991. cmdUseItem = -1
  1992. cmdGiveItem = -1
  1993. cmdTakeItem = -1
  1994. cmdMoveItem = -1
  1995. # Build the commands
  1996. itemcommands[cmdUseItem=itemcommands.length] = _INTL("Use")
  1997. itemcommands[cmdGiveItem=itemcommands.length] = _INTL("Give")
  1998. itemcommands[cmdTakeItem=itemcommands.length] = _INTL("Take") if pkmn.hasItem?
  1999. itemcommands[cmdMoveItem=itemcommands.length] = _INTL("Move") if pkmn.hasItem? && !pbIsMail?(pkmn.item)
  2000. itemcommands[itemcommands.length] = _INTL("Cancel")
  2001. [email protected](_INTL("Do what with an item?"),itemcommands)
  2002. if cmdUseItem>=0 && command==cmdUseItem # Use
  2003. [email protected]($PokemonBag,pkmn)
  2004. if item>0
  2005. pbUseItemOnPokemon(item,pkmn,self)
  2006. pbRefreshSingle(pkmnid)
  2007. end
  2008. elsif cmdGiveItem>=0 && command==cmdGiveItem # Give
  2009. [email protected]($PokemonBag)
  2010. if item>0
  2011. pbGiveMail(item,pkmn,pkmnid)
  2012. pbRefreshSingle(pkmnid)
  2013. end
  2014. elsif cmdTakeItem>=0 && command==cmdTakeItem # Take
  2015. pbTakeMail(pkmn)
  2016. pbRefreshSingle(pkmnid)
  2017. elsif cmdMoveItem>=0 && command==cmdMoveItem # Move
  2018. item=pkmn.item
  2019. itemname=PBItems.getName(item)
  2020. @scene.pbSetHelpText(_INTL("Give {1} to which Pokémon?",itemname))
  2021. oldpkmnid=pkmnid
  2022. loop do
  2023. @scene.pbPreSelect(oldpkmnid)
  2024. [email protected](true,pkmnid)
  2025. break if pkmnid<0
  2026. newpkmn=@party[pkmnid]
  2027. if pkmnid==oldpkmnid
  2028. break
  2029. elsif newpkmn.isEgg?
  2030. pbDisplay(_INTL("Eggs can't hold items."))
  2031. elsif !newpkmn.hasItem?
  2032. newpkmn.setItem(item)
  2033. pkmn.setItem(0)
  2034. pbRefresh
  2035. pbDisplay(_INTL("{1} was given the {2} to hold.",newpkmn.name,itemname))
  2036. break
  2037. elsif pbIsMail?(newpkmn.item)
  2038. pbDisplay(_INTL("{1}'s mail must be removed before giving it an item.",newpkmn.name))
  2039. else
  2040. newitem=newpkmn.item
  2041. newitemname=PBItems.getName(newitem)
  2042. pbDisplay(_INTL("{1} is already holding one {2}.\1",newpkmn.name,newitemname))
  2043. if pbConfirm(_INTL("Would you like to switch the two items?"))
  2044. newpkmn.setItem(item)
  2045. pkmn.setItem(newitem)
  2046. pbRefresh
  2047. pbDisplay(_INTL("{1} was given the {2} to hold.",newpkmn.name,itemname))
  2048. pbDisplay(_INTL("{1} was given the {2} to hold.",pkmn.name,newitemname))
  2049. break
  2050. end
  2051. end
  2052. end
  2053. end
  2054. end
  2055. end
  2056. @scene.pbEndScene
  2057. return nil
  2058. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement