Advertisement
Guest User

Untitled

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