Advertisement
Guest User

Untitled

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