Advertisement
Guest User

PScreen_Party

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