Advertisement
Guest User

pokedex BW

a guest
Jul 29th, 2017
619
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 87.99 KB | None | 0 0
  1. #===============================================================================
  2. # * BW2 Pokédex by shiney570 made from scratch.
  3. #===============================================================================
  4.  
  5.  
  6. # Generel Settings.
  7.  
  8. # Whether to use the new Pokedex or not.
  9. USE_ADVANCED_BW2_POKEDEX = true
  10.  
  11. # Change to false if you don't use Luka S.J's Elite Battle 2015.
  12. USING_BITMAP_WRAPPER = false
  13. # Whether you want to see all forms on the form page no matter whether
  14. # the player saw them or not.
  15. ALWAYSSHOWALLFORMS = false
  16. #===============================================================================
  17. # * SET UP YOUR REGIONAL DEXES HERE
  18. #===============================================================================
  19.  
  20. # - Choose between: Kanto ("Kanto")
  21. # Johto ("Johto")
  22. # Hoenn ("Hoenn")
  23. # Sinnoh ("Sinnoh")
  24. # Sinnoh2 ("Sinnoh2")
  25. # Unova ("Unova")
  26. # Unova2 ("Unova2")
  27. # Custom ("Custom")
  28. # None ("")
  29.  
  30. REGIONAL_DEX = "Unova2"
  31. REGIONAL_DEX2= "Sinnoh2"
  32.  
  33. # This is just a quick example of a Custom Pokédex. Just add and edit values
  34. # of the array and change REGIONAL_DEX or REGIONAL_DEX2 to "Custom" to use
  35. # your selfmade Pokédex.
  36. CUSTOM_DEX = [151,152,153,154,155,156,157,158,159,10,11,12,13,14]
  37.  
  38.  
  39. # Change to false if you don't use Luka S.J's Elite Battle 2015.
  40. USING_BITMAP_WRAPPER = true
  41.  
  42. # Dex Names which will appear in the Pokédex.
  43. def pbDexNames
  44. return ["UNOVA","SINNOH","NATIONAL"]
  45. end
  46. #==============================================================================#
  47. # * Regional Dex'es of already existing Pokémon Editions. #
  48. #==============================================================================#
  49. $regional_dex_1=[]
  50. $regional_dex_2=[]
  51.  
  52. # Gen 1 Dex.
  53. if REGIONAL_DEX=="Kanto" || REGIONAL_DEX2=="Kanto"
  54. kanto_dex=[]
  55. for dex_num in 1..151
  56. kanto_dex.insert(kanto_dex.length,dex_num)
  57. end
  58. $regional_dex_1=kanto_dex if REGIONAL_DEX=="Kanto"
  59. $regional_dex_2=kanto_dex if REGIONAL_DEX2=="Kanto"
  60. end
  61.  
  62. # Gen 2 Dex.
  63. if REGIONAL_DEX=="Johto" || REGIONAL_DEX2=="Johto"
  64. johto_dex=[152,153,154,155,156,157,158,159,160,16,17,18,21,22,163,164,19,
  65. 20,161,162,172,25,26,10,11,12,13,14,15,165,166,167,168,74,75,76,41,42,169,173,
  66. 35,36,174,39,40,175,176,27,28,23,24,206,179,180,181,194,195,92,93,94,201,95,
  67. 208,69,70,71,187,188,189,46,47,60,61,62,186,129,130,118,119,79,80,199,43,44,
  68. 45,182,96,97,63,64,65,132,204,205,29,30,31,32,33,34,193,469,191,192,102,103,
  69. 185,202,48,49,123,212,127,214,109,110,88,89,81,82,100,101,190,424,209,210,37,
  70. 38,58,59,234,183,184,50,51,56,57,52,53,54,55,66,67,68,236,106,107,237,203,128,
  71. 241,240,126,238,124,239,125,122,83,177,178,211,72,73,98,99,213,120,121,90,91,
  72. 222,223,223,170,171,86,87,108,463,114,465,133,134,135,136,169,197,116,117,230,
  73. 207,225,220,221,473,216,217,231,232,226,227,84,85,77,78,104,105,115,111,112,
  74. 198,228,229,218,219,215,200,137,233,113,242,131,138,139,140,141,142,143,1,2,3,
  75. 4,5,6,7,8,9,144,145,146,243,244,245,147,148,149,246,247,248,249,250,150,151,251]
  76. $regional_dex_1=johto_dex if REGIONAL_DEX=="Johto"
  77. $regional_dex_2=johto_dex if REGIONAL_DEX2=="Johto"
  78. end
  79.  
  80. # Gen 3 Dex.
  81. if REGIONAL_DEX=="Hoenn" || REGIONAL_DEX2=="Hoenn"
  82. hoenn_dex=[252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,
  83. 267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,
  84. 286,287,288,289,63,64,65,290,291,292,293,294,295,296,297,118,119,129,130,298,
  85. 183,184,74,75,76,299,300,301,41,42,169,72,73,302,303,304,305,306,66,67,68,307,
  86. 308,309,310,311,312,81,82,100,101,313,314,43,44,45,182,84,85,315,316,317,318,
  87. 319,320,321,322,323,218,219,324,88,89,109,110,325,326,27,28,327,227,328,329,
  88. 330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,
  89. 174,39,40,349,350,351,120,121,352,353,354,355,356,357,358,359,37,38,172,25,26,
  90. 54,55,360,202,177,178,203,231,232,127,214,111,112,361,362,363,364,365,366,367,
  91. 368,369,222,170,171,370,116,117,230,371,372,373,374,375,376,377,378,379,380,
  92. 381,382,383,384,385,386]
  93. $regional_dex_1=hoenn_dex if REGIONAL_DEX=="Hoenn"
  94. $regional_dex_2=hoenn_dex if REGIONAL_DEX2=="Hoenn"
  95. end
  96.  
  97.  
  98. # Gen 4 Dex.
  99.  
  100. # Gen 4 V2 Dex.
  101. if REGIONAL_DEX=="Sinnoh" || REGIONAL_DEX2=="Sinnoh"
  102. sinnoh2_dex=[387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,
  103. 403,404,405,63,64,65,129,130,406,315,407,41,42,169,74,75,76,95,208,408,409,410,
  104. 411,66,67,68,54,55,412,413,414,256,266,267,268,269,415,416,417,418,419,420,421,
  105. 422,423,214,190,424,425,426,427,428,92,93,94,200,429,198,430,431,432,118,119,
  106. 340,433,358,434,435,307,308,436,437,77,78,438,185,439,122,440,113,242,173,35,
  107. 36,441,172,25,26,163,164,442,443,444,445,446,143,201,447,448,194,195,278,279,
  108. 203,449,450,298,183,184,451,452,453,454,455,223,224,456,457,72,73,349,350,458,
  109. 226,459,460,215,461,480,481,482,483,484]
  110. $regional_dex_1=sinnoh2_dex if REGIONAL_DEX=="Sinnoh"
  111. $regional_dex_2=sinnoh2_dex if REGIONAL_DEX2=="Sinnoh"
  112. end
  113.  
  114. # Gen 4 V2 Dex.
  115. if REGIONAL_DEX=="Sinnoh2" || REGIONAL_DEX2=="Sinnoh2"
  116. sinnoh2_dex=[387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,
  117. 403,404,405,63,64,65,129,130,406,315,407,41,42,169,74,75,76,95,208,408,409,410,
  118. 411,66,67,68,54,55,412,413,414,256,266,267,268,269,415,416,417,418,419,420,421,
  119. 422,423,214,190,424,425,426,427,428,92,93,94,200,429,198,430,431,432,118,119,
  120. 340,433,358,434,435,307,308,436,437,77,78,438,185,439,122,440,113,242,173,35,
  121. 36,441,172,25,26,163,164,442,443,444,445,446,143,201,447,448,194,195,278,279,
  122. 203,449,450,298,183,184,451,452,453,454,455,223,224,456,457,72,73,349,350,458,
  123. 226,459,460,215,461,480,481,482,483,484,490,479,207,472,299,476,280,281,282,
  124. 475,108,463,133,134,135,163,196,197,470,471,333,334,175,176,468,228,229,81,82,
  125. 462,114,465,193,469,357,111,112,464,355,356,477,137,233,474,123,212,239,125,
  126. 466,240,126,467,220,221,473,361,362,478,359,487]
  127. $regional_dex_1=sinnoh2_dex if REGIONAL_DEX=="Sinnoh2"
  128. $regional_dex_2=sinnoh2_dex if REGIONAL_DEX2=="Sinnoh2"
  129. end
  130.  
  131. # Gen 5 Dex.
  132. if REGIONAL_DEX=="Unova" || REGIONAL_DEX2=="Unova"
  133. unova_dex=[]
  134. for dex_num in 495..649
  135. unova_dex.insert(unova_dex.length,dex_num)
  136. end
  137. $regional_dex_1=unova_dex if REGIONAL_DEX=="Unova"
  138. $regional_dex_2=unova_dex if REGIONAL_DEX2=="Unova"
  139. end
  140.  
  141. # Gen 5 V2 Dex.
  142. if REGIONAL_DEX=="Unova2" || REGIONAL_DEX2=="Unova2"
  143. unova2_dex=[495,496,497,498,499,500,501,502,503,504,505,509,
  144. 510,519,520,521,540,541,542,191,192,506,507,508,179,180,181,54,55,298,183,184,
  145. 447,448,206,531,511,512,513,514,515,516,543,544,545,109,110,81,82,462,58,59,
  146. 240,126,467,239,125,466,19,20,41,42,169,88,89,527,528,524,525,526,95,208,532,
  147. 533,534,529,530,300,301,427,428,546,547,548,549,517,518,173,35,36,133,134,135,
  148. 136,196,197,470,471,551,552,553,554,555,550,568,569,572,573,627,628,629,630,27,
  149. 28,557,558,559,560,556,561,328,329,330,562,563,564,565,566,567,599,600,601,406,
  150. 315,407,574,575,576,577,578,579,415,416,587,214,127,522,523,418,419,570,571,580,
  151. 581,588,589,616,617,585,586,590,591,351,299,476,304,305,306,343,344,636,637,595,
  152. 596,597,598,602,603,604,592,593,594,610,611,612,335,336,605,606,607,608,609,631,
  153. 632,613,614,615,641,642,645,451,452,227,322,323,325,326,425,426,353,354,278,279,
  154. 337,338,359,114,465,619,620,207,472,624,625,638,639,640,535,536,537,618,213,458,
  155. 226,223,224,222,120,121,320,321,131,363,364,365,333,334,37,38,436,437,215,461,
  156. 225,582,583,584,220,221,473,132,374,375,376,86,87,538,539,626,621,622,623,633,
  157. 634,635,287,288,289,341,342,174,39,40,108,463,193,469,357,455,453,454,246,247,
  158. 248,643,644,646,647,648,649]
  159. $regional_dex_1=unova2_dex if REGIONAL_DEX=="Unova2"
  160. $regional_dex_2=unova2_dex if REGIONAL_DEX2=="Unova2"
  161. end
  162.  
  163. # Custom Dex.
  164. if REGIONAL_DEX=="Custom" || REGIONAL_DEX2=="Custom"
  165. $regional_dex_1=CUSTOM_DEX if REGIONAL_DEX=="Custom"
  166. $regional_dex_2=CUSTOM_DEX if REGIONAL_DEX2=="Custom"
  167. end
  168.  
  169. # Method which creates an array for the National Dex.
  170. def pbNationalDex
  171. national_dex=[]
  172. for dex_num in 1..PBSpecies.maxValue
  173. national_dex.insert(national_dex.length,dex_num)
  174. end
  175. return national_dex
  176. end
  177. #===============================================================================
  178. # * Updating existing methods to work with the new way of Regional Dex'es.
  179. #===============================================================================
  180.  
  181. class PokeBattle_Trainer
  182.  
  183. def pokedexSeen(region=-1) # Number of Pokémon seen
  184. ret=0
  185. if region==-1
  186. for i in 0..PBSpecies.maxValue
  187. ret+=1 if @seen[i]
  188. end
  189. else
  190. if pbGetMetadata($game_map.map_id,MetadataMapPosition)[0]==0
  191. regionlist=$regional_dex_1 # Region A
  192. else
  193. regionlist=$regional_dex_2 # Region B
  194. end
  195. regionlist=pbAllRegionalSpecies(region)
  196. for i in regionlist
  197. ret+=1 if @seen[i]
  198. end
  199. end
  200. return ret
  201. end
  202.  
  203. def pokedexOwned(region=-1) # Number of Pokémon owned
  204. ret=0
  205. if region==-1
  206. for i in 0..PBSpecies.maxValue
  207. ret+=1 if @owned[i]
  208. end
  209. else
  210. if pbGetMetadata($game_map.map_id,MetadataMapPosition)[0]==0
  211. regionlist=$regional_dex_1 # Region A
  212. else
  213. regionlist=$regional_dex_2 # Region B
  214. end
  215. for i in regionlist
  216. ret+=1 if @owned[i]
  217. end
  218. return ret
  219. end
  220. end
  221. end
  222.  
  223. def pbSetSpritePositionToMiddle(sprite)
  224. sprite.x=Graphics.width/2-(sprite.bitmap.width/2)
  225. sprite.y=Graphics.height/2-(sprite.bitmap.height/2)
  226. end
  227. #===============================================================================
  228. # * Starting the Pokédex.
  229. #===============================================================================
  230. class StartPokedex
  231.  
  232. def initialize
  233. if !$Trainer.pokedex
  234. p "Pokédex isn't obtained yet. The game will return." if $DEBUG
  235. return
  236. end
  237. @bg=Sprite.new
  238. @bg.z=999999
  239. if $Trainer.isFemale?
  240. @bg.bitmap=Bitmap.new("Graphics/Pictures/Pokedex/StartPokedex/OpenDex_f")
  241. else
  242. @bg.bitmap=Bitmap.new("Graphics/Pictures/Pokedex/StartPokedex/OpenDex")
  243. end
  244. @load=Sprite.new
  245. @load.bitmap=Bitmap.new("Graphics/Pictures/Pokedex/StartPokedex/load2")
  246. @load.y= -384
  247. @load.z=999999
  248. @black_bitmap=Bitmap.new(512,384)
  249. @black_sprite=Sprite.new
  250. @black_sprite.bitmap=@black_bitmap
  251. @black_sprite.z=999999
  252. @black_sprite.opacity=0
  253. @black_bitmap.fill_rect(0,0,512,384,Color.new(0,0,0))
  254. update
  255. end
  256.  
  257. def update(frame=0)
  258. loop do
  259. Graphics.update
  260. Input.update
  261. frame+=1
  262. break if Input.trigger?(Input::B)
  263. break if Input.trigger?(Input::C)
  264. if defined?($mouse)
  265. break if $mouse.inAreaLeft?(0,0,512,384)
  266. end
  267. break if frame>=120
  268. end
  269. startMainPokedex
  270. end
  271.  
  272. def startMainPokedex
  273. 20.times do
  274. @load.y+=384/20
  275. Graphics.update
  276. pbWait(1)
  277. end
  278. 10.times do
  279. @black_sprite.opacity+=255/10
  280. @load.ox+=@load.bitmap.width/20
  281. @load.oy+=@load.bitmap.height/20
  282. @load.zoom_x+=0.1
  283. @load.zoom_y+=0.1
  284. Graphics.update
  285. pbWait(1)
  286. end
  287. pbWait(25)
  288. @bg.dispose
  289. @load.dispose
  290. @black_sprite.dispose
  291. MainPokedex.new(0,0,-46,nil)
  292. end
  293. end
  294. #===============================================================================
  295. # * Main Pokédex Window.
  296. #===============================================================================
  297. class MainPokedex
  298.  
  299. def initialize(dex_index,panel_y,panel_sel_y,pokedex) # 0,0,-46
  300. $pokedex=currentDex if panel_sel_y<0
  301. $pokedex=pokedex if (pokedex != nil)# <--Only used because of search function.
  302. @dex_index=dex_index
  303. @index=0
  304. @viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
  305. @viewport.z=99999
  306. @sprites={}
  307. @sprites["bg"]=Sprite.new(@viewport)
  308. @sprites["bg"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/bg")
  309. @main_bitmap=Bitmap.new(302,2+$pokedex.length*48)
  310. @sprites["panels"]=Sprite.new(@viewport)
  311. @sprites["panels"].x=192
  312. @sprites["panels"].y=panel_y
  313. @sprites["panel_sel"]=Sprite.new(@viewport)
  314. @sprites["panel_sel"].y=panel_sel_y
  315. drawDexPanels
  316. drawPanels
  317. @sprites["scroll_bar"]=IconSprite.new(502,18,@viewport)
  318. @sprites["scroll_bar"].setBitmap("Graphics/Pictures/Pokedex/scroll_bar")
  319. @sprites["slider"]=IconSprite.new(500,16,@viewport)
  320. @sprites["slider"].setBitmap("Graphics/Pictures/Pokedex/slider")
  321. @sprites["undiscovered"]=IconSprite.new(34,82,@viewport)
  322. @sprites["undiscovered"].setBitmap("Graphics/Pictures/Pokedex/undiscovered")
  323. @sprites["undiscovered"].visible=false
  324. @sprites["pkmn_info"]=IconSprite.new(12,0,@viewport)
  325. @sprites["pkmn_info"].setBitmap("Graphics/Pictures/Pokedex/pkmn_info")
  326. @sprites["pkmn_info"].visible=false
  327. @sprites["pkmn_info"].z+=1
  328. @sprites["pkmn_sprite"]=BitmapSprite.new(Graphics.width,Graphics.height,@viewport)
  329. @sprites["pkmn_sprite"].x=96
  330. @sprites["pkmn_sprite"].y=96
  331. @sprites["down_bg"]=Sprite.new(@viewport)
  332. @sprites["down_bg"].bitmap=Bitmap.new("Graphics/Pictures/Universal/down_bg")
  333. @sprites["down_bg"].y=336
  334. @sprites["select"]=IconSprite.new(10,340,@viewport)
  335. @sprites["select"].setBitmap("Graphics/Pictures/Pokedex/select")
  336. @sprites["start"]=IconSprite.new(142,340,@viewport)
  337. @sprites["start"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/start")
  338. @sprites["leftright"]=IconSprite.new(278,346,@viewport)
  339. @sprites["leftright"].setBitmap("Graphics/Pictures/Pokedex/leftright")
  340. @sprites["exit"]=IconSprite.new(426,346,@viewport)
  341. @sprites["exit"].setBitmap("Graphics/Pictures/Universal/exit")
  342. @sprites["return"]=IconSprite.new(474,346,@viewport)
  343. @sprites["return"].setBitmap("Graphics/Pictures/Universal/return")
  344. @sprites["leftright2"]=IconSprite.new(278,346,@viewport)
  345. @sprites["leftright2"].setBitmap("Graphics/Pictures/Pokedex/leftright4")
  346. updateLeftRight2Sprite
  347. @sprites["overlay"]=BitmapSprite.new(Graphics.width,Graphics.height,@viewport)
  348. pbSetSystemFont(@sprites["overlay"].bitmap)
  349. update
  350. end
  351.  
  352. # Method which returns an array of the current dex.
  353. def currentDex
  354. if $PokemonGlobal.pokedexUnlocked[0] && pbGetMetadata($game_map.map_id,MetadataMapPosition)[0]==0
  355. p "Your Regional Dex is empty. Please edit it in the Script-Editor." if REGIONAL_DEX.empty? && $DEBUG
  356. return $regional_dex_1 if !REGIONAL_DEX.empty?
  357. elsif $PokemonGlobal.pokedexUnlocked[1] && pbGetMetadata($game_map.map_id,MetadataMapPosition)[0]==1
  358. p "Your Regional Dex is empty. Please edit it in the Script-Editor." if REGIONAL_DEX2.empty? && $DEBUG
  359. return $regional_dex_2
  360. elsif $PokemonGlobal.pokedexUnlocked[0] && !REGIONAL_DEX.empty?
  361. return $regional_dex_1
  362. elsif $PokemonGlobal.pokedexUnlocked[1] && !REGIONAL_DEX2.empty?
  363. return $regional_dex_2
  364. elsif $PokemonGlobal.pokedexUnlocked[-1]
  365. return pbNationalDex
  366. else
  367. p "None of the Dex'es is unlocked yet." if $DEBUG
  368. return nil
  369. end
  370. end
  371.  
  372. # Method for drawing the panels.
  373. def drawPanels
  374. @main_bitmap=Bitmap.new(302,2+$pokedex.length*48)
  375. @main_bitmap.clear
  376. @sprites["panels"].bitmap=@main_bitmap
  377. for i in 0..$pokedex.length-1
  378. species=PokeBattle_Pokemon.new($pokedex[i],1)
  379. # Drawing panels.
  380. panel=Sprite.new
  381. if $Trainer.seen[$pokedex[i]]
  382. panel.bitmap=Bitmap.new("Graphics/Pictures/Pokedex/panel_pkmn")
  383. @main_bitmap.blt(0,2+i*48,panel.bitmap,Rect.new(0,0,panel.bitmap.width,
  384. panel.bitmap.height))
  385. # Drawing little Pokémon icon.
  386. icon=Sprite.new
  387. icon.bitmap=Bitmap.new(sprintf("Graphics/Icons/icon%03d",$pokedex[i]))
  388. # icon.src_rect.width=64
  389. @main_bitmap.blt(2,i*48-18,icon.bitmap,Rect.new(0,0,
  390. icon.bitmap.width/2,icon.bitmap.height))
  391. icon.dispose
  392. else
  393. panel.bitmap=Bitmap.new("Graphics/Pictures/Pokedex/panel")
  394. @main_bitmap.blt(64,2+i*48,panel.bitmap,Rect.new(0,0,panel.bitmap.width,
  395. panel.bitmap.height))
  396. end
  397. panel.dispose
  398. # Drawing little caught icon.
  399. if $Trainer.owned[$pokedex[i]]
  400. owned=Sprite.new(@viewport)
  401. owned.bitmap=Bitmap.new("Graphics/Pictures/Pokedex/caught")
  402. @main_bitmap.blt(82,10+i*48,owned.bitmap,Rect.new(0,0,owned.bitmap.width,
  403. owned.bitmap.height))
  404. owned.dispose
  405. end
  406. # Drawing text.
  407. text=BitmapSprite.new(Graphics.width, Graphics.height)
  408. pbSetSystemFont(text.bitmap)
  409. dex_number=(i+1).to_s
  410. if dex_number.length==1
  411. dex_number.insert(0,"0")
  412. end
  413. if dex_number.length==2
  414. dex_number.insert(0,"0")
  415. end
  416. textpos=[]
  417. textpos.push([dex_number,0,0,0,Color.new(222,222,222),
  418. Color.new(132,132,132)])
  419. if $Trainer.seen[$pokedex[i]]
  420. pkmn_name=species.name
  421. else
  422. pkmn_name="?????"
  423. end
  424. textpos.push([pkmn_name,56,0,0,Color.new(222,222,222),
  425. Color.new(132,132,132)])
  426. pbDrawTextPositions(text.bitmap,textpos)
  427. @main_bitmap.blt(112,6+48*i,text.bitmap,Rect.new(0,0,190,32))
  428. text.dispose
  429. end
  430. end
  431.  
  432. # Method for drawing the Dex Panels.
  433. def drawDexPanels
  434. num=0
  435. num+=1 if $PokemonGlobal.pokedexUnlocked[0] # Regional Dex 1
  436. num+=1 if $PokemonGlobal.pokedexUnlocked[1] # Regional Dex 2
  437. num+=1 if $PokemonGlobal.pokedexUnlocked[-1]# National Dex
  438. for i in 1..num
  439. @sprites["dex_panel#{i}"]=IconSprite.new(0,290-46*i+46,@viewport)
  440. @sprites["dex_panel#{i}"].setBitmap("Graphics/Pictures/Pokedex/leftpanel")
  441. end
  442. dexnames=pbDexNames
  443. base=Color.new(255,255,255)
  444. shadow=Color.new(165,165,173)
  445. textos=[]
  446. if num==3 && pbGetMetadata($game_map.map_id,MetadataMapPosition)[0]==0
  447. @dexes=[2,1,0]
  448. elsif num==3 && pbGetMetadata($game_map.map_id,MetadataMapPosition)[0]==1
  449. @dexes=[2,0,1]
  450. elsif num==3 && pbGetMetadata($game_map.map_id,MetadataMapPosition)[0]>1
  451. @dexes=[1,0,2]
  452. elsif num==2
  453. if pbGetMetadata($game_map.map_id,MetadataMapPosition)[0]==0 && $PokemonGlobal.pokedexUnlocked[0]
  454. @dexes=[1,0] if $PokemonGlobal.pokedexUnlocked[1]
  455. @dexes=[2,0] if $PokemonGlobal.pokedexUnlocked[-1]
  456. elsif pbGetMetadata($game_map.map_id,MetadataMapPosition)[0]==1 && $PokemonGlobal.pokedexUnlocked[1]
  457. @dexes=[0,1] if $PokemonGlobal.pokedexUnlocked[0]
  458. @dexes=[2,1] if $PokemonGlobal.pokedexUnlocked[-1]
  459. elsif $PokemonGlobal.pokedexUnlocked[0]
  460. textos.push([_INTL("{1}", dexnames[0]),4,252,false,base,shadow])
  461. @dexes=[1,0] if $PokemonGlobal.pokedexUnlocked[1]
  462. @dexes=[2,0] if $PokemonGlobal.pokedexUnlocked[-1]
  463. elsif $PokemonGlobal.pokedexUnlocked[1]
  464. @dexes=[0,1] if $PokemonGlobal.pokedexUnlocked[0]
  465. @dexes=[2,1] if $PokemonGlobal.pokedexUnlocked[-1]
  466. end
  467. elsif num==1
  468. @dexes=[0] if $PokemonGlobal.pokedexUnlocked[0]
  469. @dexes=[1] if $PokemonGlobal.pokedexUnlocked[1]
  470. @dexes=[2] if $PokemonGlobal.pokedexUnlocked[-1]
  471. end
  472. textos.push([_INTL("{1}", dexnames[@dexes[0]]),4,298,false,base,shadow])
  473. if num>=2
  474. textos.push([_INTL("{1}", dexnames[@dexes[1]]),4,252,false,base,shadow])
  475. end
  476. if num==3
  477. textos.push([_INTL("{1}", dexnames[@dexes[2]]),4,206,false,base,shadow])
  478. end
  479. normal_dexes=[$regional_dex_1,$regional_dex_2,pbNationalDex]
  480. y=5000
  481. y=290 if num==3 && $pokedex==normal_dexes[@dexes[0]]
  482. y=244 if num==3 && $pokedex==normal_dexes[@dexes[1]]
  483. y=198 if num==3 && $pokedex==normal_dexes[@dexes[2]]
  484. y=290 if num==2 && $pokedex==normal_dexes[@dexes[0]]
  485. y=244 if num==2 && $pokedex==normal_dexes[@dexes[1]]
  486. y=290 if num==1
  487. @sprites["dex_panel_sel"]=IconSprite.new(0,y,@viewport)
  488. @sprites["dex_panel_sel"].setBitmap("Graphics/Pictures/Pokedex/leftpanel2")
  489. @sprites["dexnames"]=BitmapSprite.new(Graphics.width,Graphics.height,@viewport)
  490. pbSetSystemFont(@sprites["dexnames"].bitmap)
  491. pbDrawTextPositions(@sprites["dexnames"].bitmap,textos)
  492. end
  493.  
  494. # Method for checking and updating if a species is in the dex and the
  495. # dex has changed.
  496. def updateDexIndexIfDexHasChanged(species)
  497. return if @dex_index<1
  498. #if @dex_index<1
  499. # @sprites["panels"].y=0
  500. # @sprites["panel_sel"].y= -46
  501. # return
  502. #end
  503. for i in 0...$pokedex.length
  504. if $pokedex[i]==species
  505. @dex_index=i+1
  506. if @dex_index<8
  507. @sprites["panels"].y=0
  508. @sprites["panel_sel"].y=@dex_index*48-46
  509. elsif @dex_index>$pokedex.length-8
  510. @sprites["panels"].y= -48*($pokedex.length-7)
  511. @sprites["panel_sel"].y=290-($pokedex.length-@dex_index)*48
  512. else
  513. @sprites["panels"].y= -48*(@dex_index-1)
  514. @sprites["panel_sel"].y=2
  515. end
  516. return
  517. end
  518. end
  519. @sprites["panels"].y=0
  520. @sprites["panel_sel"].y=2
  521. @dex_index=1
  522. end
  523.  
  524. # Updates the leftright2 sprite.
  525. def updateLeftRight2Sprite
  526. @sprites["leftright2"].x=278
  527. if @dex_index<8 && (@dex_index>($pokedex.length-7))
  528. @sprites["leftright2"].src_rect.x=0
  529. @sprites["leftright2"].src_rect.width=96
  530. elsif @dex_index<8
  531. @sprites["leftright2"].src_rect.x=0
  532. @sprites["leftright2"].src_rect.width=48
  533. elsif (@dex_index>($pokedex.length-7))
  534. @sprites["leftright2"].src_rect.x=48
  535. @sprites["leftright2"].src_rect.width=48
  536. @sprites["leftright2"].x=278+50
  537. else
  538. @sprites["leftright2"].src_rect.x=0
  539. @sprites["leftright2"].src_rect.width=0
  540. end
  541.  
  542. end
  543.  
  544. # Method which checks whether you can scroll down or not.
  545. def canScrollDown
  546. return (@dex_index>7 && @sprites["panel_sel"].y==290 && ((@sprites["panels"].bitmap.height+@sprites["panels"].y)>338))
  547. end
  548.  
  549. # Method which checks whether you can scroll up or not.
  550. def canScrollUp
  551. return (@dex_index>0 && @sprites["panel_sel"].y==2 )
  552. end
  553.  
  554. # This method updates the position of the slider.
  555. def updateSliderPosition
  556. pos=16
  557. pos+=300*@dex_index/$pokedex.length
  558. @sprites["slider"].y=pos
  559. end
  560.  
  561. # Method returning the number of the current selected Pokémon.
  562. def currentPokemon
  563. return ($pokedex[@dex_index-1])
  564. end
  565.  
  566. # Method for updating the background.
  567. def updateBackground
  568. return if !@sprites["bg"]
  569. @sprites["bg"].x-=2
  570. @sprites["bg"].x=0 if @sprites["bg"].x <= -512
  571. end
  572.  
  573. # Method which is basically pbWait(x) but with a background update added.
  574. def waitAndUpdate(x)
  575. x.times do
  576. updateBackground
  577. pbWait(1)
  578. end
  579. end
  580.  
  581. # Method for scrolling 7 Pokémon up.
  582. def scrollToLeft
  583. return if @dex_index<8
  584. @sprites["leftright"].setBitmap("Graphics/Pictures/Pokedex/leftright2")
  585. 7.times do
  586. @dex_index-=1
  587. if @sprites["panel_sel"].y>10
  588. @sprites["panel_sel"].y-=48
  589. else
  590. @sprites["panels"].y+=48
  591. end
  592. updatePokemonSprite
  593. updateSliderPosition
  594. waitAndUpdate(1)
  595. end
  596. waitAndUpdate(3)
  597. @sprites["leftright"].setBitmap("Graphics/Pictures/Pokedex/leftright")
  598. end
  599.  
  600. # Method for scrolling 7 Pokémon down.
  601. def scrollToRight
  602. return if (@dex_index>($pokedex.length-7))
  603. @sprites["leftright"].setBitmap("Graphics/Pictures/Pokedex/leftright3")
  604. 7.times do
  605. @dex_index+=1
  606. if @sprites["panel_sel"].y<280
  607. @sprites["panel_sel"].y+=48
  608. else
  609. @sprites["panels"].y-=48
  610. end
  611. updatePokemonSprite
  612. updateSliderPosition
  613. waitAndUpdate(1)
  614. end
  615. waitAndUpdate(3)
  616. @sprites["leftright"].setBitmap("Graphics/Pictures/Pokedex/leftright")
  617. end
  618.  
  619. # updates the Pokemon Sprite when called.
  620. def updatePokemonSprite
  621. @sprites["pkmn_sprite"].bitmap.clear
  622. if $Trainer.seen[currentPokemon]
  623. @sprites["panel_sel"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/panel_sel_pkmn")
  624. @sprites["panel_sel"].x=192
  625. if USING_BITMAP_WRAPPER==true && defined?(AnimatedBitmapWrapper)
  626. pkmnbitmap=AnimatedBitmapWrapper.new(pbPokemonBitmapFile(currentPokemon,false))
  627. else
  628. pkmnbitmap=AnimatedBitmap.new(pbPokemonBitmapFile(currentPokemon,false))
  629. end
  630. @sprites["pkmn_sprite"].bitmap.blt(0,0,
  631. pkmnbitmap.bitmap,Rect.new(0,0,pkmnbitmap.bitmap.width,pkmnbitmap.bitmap.height))
  632. @sprites["pkmn_sprite"].ox=pkmnbitmap.bitmap.width/2
  633. @sprites["pkmn_sprite"].oy=pkmnbitmap.bitmap.height/2
  634. @sprites["pkmn_info"].visible=true
  635. @sprites["undiscovered"].visible=false
  636. else
  637. @sprites["panel_sel"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/panel_sel")
  638. @sprites["panel_sel"].x=256
  639. @pokemon_sprite.visible=false if @pokemon_sprite
  640. @sprites["pkmn_info"].visible=false
  641. @sprites["undiscovered"].visible=true
  642. end
  643. end
  644.  
  645. # Function for using the mouse for the scrolling bar.
  646. def mouseScrollBar
  647. if $mouse.inAreaPress?(494,10,18,315)#16, 300
  648. if $mouse.y>316
  649. @sprites["slider"].y=316
  650. elsif $mouse.y<16
  651. @sprites["slider"].y=16
  652. else
  653. @sprites["slider"].y=$mouse.y
  654. end
  655. @dex_index=(@sprites["slider"].y-16)*$pokedex.length/300
  656. @dex_index=1 if @dex_index<1
  657. if @sprites["slider"].y>16
  658. @sprites["panels"].y= -48*($pokedex.length-7)
  659. @sprites["panels"].y= -48*(@dex_index-1) if @dex_index<($pokedex.length-5)
  660. @sprites["panels"].y=0 if ($pokedex.length<7)
  661. @sprites["panel_sel"].y=48*(@dex_index-1)+@sprites["panels"].y+2
  662. else
  663. @sprites["panels"].y=0
  664. end
  665. end
  666. end
  667.  
  668. # Method for updating the Dex Panels.
  669. def mouseDexPanels
  670. update=false
  671. current= -1
  672. if @nextDex
  673. current=(@sprites["dex_panel_sel"].y-198)/48
  674. max=0
  675. for i in 0...3
  676. max+=1 if @sprites["dex_panel#{i}"]
  677. end
  678. if max==current
  679. current=4-max
  680. else
  681. current+=1
  682. end
  683. end
  684. if $mouse.leftClick?(@sprites["dex_panel1"]) || current==1
  685. return if @sprites["dex_panel_sel"].y==@sprites["dex_panel1"].y
  686. pkmn=currentPokemon
  687. if @dexes[0]==0
  688. $pokedex=$regional_dex_1
  689. elsif @dexes[0]==1
  690. $pokedex=$regional_dex_2
  691. else
  692. $pokedex=pbNationalDex
  693. end
  694. @sprites["dex_panel_sel"].y=@sprites["dex_panel1"].y
  695. update=true
  696. end
  697. if @sprites["dex_panel2"]
  698. if $mouse.leftClick?(@sprites["dex_panel2"]) || current==2
  699. return if @sprites["dex_panel_sel"].y==@sprites["dex_panel2"].y
  700. pkmn=currentPokemon
  701. if @dexes[1]==0
  702. $pokedex=$regional_dex_1
  703. elsif @dexes[1]==1
  704. $pokedex=$regional_dex_2
  705. else
  706. $pokedex=pbNationalDex
  707. end
  708. @sprites["dex_panel_sel"].y=@sprites["dex_panel2"].y
  709. update=true
  710. end
  711. end
  712. if @sprites["dex_panel3"]
  713. if $mouse.leftClick?(@sprites["dex_panel3"]) || current==3
  714. return if @sprites["dex_panel_sel"].y==@sprites["dex_panel3"].y
  715. pkmn=currentPokemon
  716. if @dexes[2]==0
  717. $pokedex=$regional_dex_1
  718. elsif @dexes[2]==1
  719. $pokedex=$regional_dex_2
  720. else
  721. $pokedex=pbNationalDex
  722. end
  723. @sprites["dex_panel_sel"].y=@sprites["dex_panel3"].y
  724. update=true
  725. end
  726. end
  727. return if !update
  728. @black=Sprite.new(@viewport)
  729. @black.z=9999999
  730. black_bitmap=Bitmap.new(512,384)
  731. black_bitmap.fill_rect(0,0,512,384,Color.new(0,0,0))
  732. @black.bitmap=black_bitmap
  733. @black.opacity=0
  734. $pokedex2=$pokedex
  735. 10.times do
  736. @black.opacity+=255/10
  737. waitAndUpdate(1)
  738. end
  739. @sprites["dex_panel_sel"].visible=false
  740. updateDexIndexIfDexHasChanged(pkmn)
  741. drawPanels
  742. updateSliderPosition
  743. updatePokemonSprite if @dex_index>0
  744. @sprites["dex_panel_sel"].visible=true
  745. 10.times do
  746. @black.opacity-=255/10
  747. waitAndUpdate(1)
  748. end
  749. @black.dispose
  750. @nextDex=false
  751. end
  752.  
  753. # If a Panel was being pressed this will return the current clicked Pokémon.
  754. def mousePanelInput
  755. return if !$mouse.leftPressed?(@sprites["panels"])
  756. # when clicking on a panel and no panel is selected yet.
  757. if @sprites["panel_sel"].y<0
  758. for i in 0..6
  759. if $mouse.inArea?(192,i*48+2,302,42) && Input.releaseex?(Input::Mouse_Left)
  760. @sprites["panel_sel"].y+=48*(i+1)
  761. @dex_index+=i+1
  762. @sprites["panel_sel"].x=192
  763. @sprites["panel_sel"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/panel_sel_pkmn")
  764. updatePokemonSprite
  765. waitAndUpdate(5)
  766. @sprites["panel_sel"].visible=false
  767. waitAndUpdate(5)
  768. @sprites["panel_sel"].visible=true
  769. @scene=2 if $Trainer.seen[currentPokemon]
  770. return
  771. end
  772. end
  773. end
  774. # when clicking on the selected panel.
  775. if $mouse.leftPressed?(@sprites["panel_sel"])
  776. updatePokemonSprite
  777. @sprites["panel_sel"].visible=true
  778. waitAndUpdate(5)
  779. @sprites["panel_sel"].visible=false
  780. waitAndUpdate(5)
  781. @sprites["panel_sel"].visible=true
  782. @scene=2 if $Trainer.seen[currentPokemon]
  783. return
  784. end
  785. # when clicking on a panel which is not the selected panel.
  786. subtract=(@sprites["panel_sel"].y-2)/48
  787. for i in 0..6
  788. if $mouse.inArea?(192,i*48+2,302,42) && $mouse.leftPressed?(@sprites["panels"])
  789. addition=i
  790. end
  791. end
  792. return if !addition
  793. species=currentPokemon+addition-subtract
  794. @dex_index+=addition-subtract
  795. graphic_change=(addition-subtract)*48
  796. @sprites["panel_sel"].y+=graphic_change
  797. @sprites["panel_sel"].visible=true
  798. updatePokemonSprite
  799. waitAndUpdate(5)
  800. @sprites["panel_sel"].visible=false
  801. waitAndUpdate(5)
  802. @sprites["panel_sel"].visible=true
  803. @scene=2 if $Trainer.seen[currentPokemon]
  804. end
  805.  
  806. # Method for ending the scene.
  807. def pbEndScene
  808. pbFadeOutAndHide(@sprites)
  809. pbDisposeSpriteHash(@sprites)
  810. @viewport.dispose
  811. end
  812.  
  813. def update(current_dex_index=0,current_index=0)
  814. @scene= -1 # 0=exit , 1=Search Function , 2=Pokémon information
  815. @nextDex=false
  816. while @scene<0
  817. Graphics.update
  818. Input.update
  819. # Animating background.
  820. updateBackground
  821. # Inputs
  822. if Input.trigger?(Input::DOWN) && @index==0
  823. if @dex_index<$pokedex.length
  824. @dex_index+=1
  825. if @sprites["panel_sel"].y<290
  826. @sprites["panel_sel"].y+=48
  827. else
  828. @sprites["panels"].y-=48 if canScrollDown
  829. end
  830. end
  831. end
  832. if Input.trigger?(Input::UP) && @index==0
  833. if @dex_index>1
  834. @dex_index-=1
  835. if @sprites["panel_sel"].y>2
  836. @sprites["panel_sel"].y-=48
  837. else
  838. @sprites["panels"].y+=48 if canScrollUp
  839. end
  840. end
  841. end
  842. if Input.trigger?(Input::C)
  843. case @index
  844. when 0
  845. @scene=2
  846. end
  847. end
  848.  
  849. if Input.trigger?(Input::B)
  850. pbShowAnimation("exit")
  851. @scene=0
  852. end
  853. if defined?($mouse)
  854. mousePanelInput
  855. mouseScrollBar
  856. mouseDexPanels
  857. if $mouse.inAreaLeft?(278,346,34,28)
  858. scrollToLeft
  859. end
  860. if $mouse.inAreaLeft?(328,346,34,28)
  861. scrollToRight
  862. end
  863. if $mouse.leftClick?(@sprites["exit"])
  864. pbShowAnimation("exit")
  865. @scene=0
  866. end
  867. if $mouse.leftClick?(@sprites["return"])
  868. @sprites["return"].setBitmap("Graphics/Pictures/Universal/return2")
  869. pbWait(10)
  870. @sprites["return"].setBitmap("Graphics/Pictures/Universal/return")
  871. pbWait(5)
  872. @scene=0
  873. $MenuClose=true
  874. end
  875. if $mouse.leftClick?(@sprites["start"])
  876. @sprites["start"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/start2")
  877. waitAndUpdate(10)
  878. @sprites["start"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/start")
  879. waitAndUpdate(5)
  880. @scene=1
  881. end
  882. if $mouse.leftClick?(@sprites["select"])
  883. @sprites["select"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/select2")
  884. waitAndUpdate(10)
  885. @sprites["select"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/select")
  886. waitAndUpdate(5)
  887. @nextDex=true
  888. mouseDexPanels
  889. end
  890. end
  891. # updating if index has changed.
  892. if @index != current_index
  893. if !@sprites["cursor_1"]
  894. drawBW2Cursor(469,339,23,25) if @index==1
  895. end
  896. current_index=@index
  897. end
  898. # updating if dex index has changed.
  899. if @dex_index != current_dex_index
  900. updatePokemonSprite
  901. updateSliderPosition
  902. current_dex_index=@dex_index
  903. updateLeftRight2Sprite
  904. end
  905.  
  906.  
  907. end
  908. a=@sprites["panels"].y if @scene==2
  909. b=@sprites["panel_sel"].y if @scene==2
  910. pbEndScene
  911. PokedexSearch.new if @scene==1
  912. if a && b && @dex_index && currentPokemon
  913. PokedexPages.new(@dex_index,a,b) if $Trainer.seen[currentPokemon] && @scene==2
  914. end
  915.  
  916. end
  917.  
  918. end
  919.  
  920.  
  921. #===============================================================================
  922. # * Four Pokédex Pages
  923. #===============================================================================
  924. class PokedexPages
  925. def initialize(dex_index,panel_y,panel_sel_y)
  926. @dex_index=dex_index
  927. @old_dex_index=dex_index
  928. @species=$pokedex[@dex_index-1]
  929. @panel_y=panel_y
  930. @panel_sel_y=panel_sel_y
  931. @pokemon=PokeBattle_Pokemon.new(@species,1)
  932. @viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
  933. @viewport.z=99999
  934. @sprites={}
  935. @sprites["bg"]=Sprite.new(@viewport)
  936. @sprites["bg"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/Pages/bg1")
  937. @sprites["down_bg"]=IconSprite.new(0,336,@viewport)
  938. @sprites["down_bg"].bitmap=Bitmap.new("Graphics/Pictures/Universal/down_bg")
  939. @sprites["updown"]=IconSprite.new(10,342,@viewport)
  940. @sprites["updown"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/Pages/updown")
  941. @sprites["info"]=IconSprite.new(96,340,@viewport)
  942. @sprites["info"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/Pages/info")
  943. @sprites["area"]=IconSprite.new(160,340,@viewport)
  944. @sprites["area"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/Pages/area")
  945. @sprites["forms"]=IconSprite.new(224,340,@viewport)
  946. @sprites["forms"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/Pages/forms")
  947. @sprites["exit"]=IconSprite.new(426,346,@viewport)
  948. @sprites["exit"].bitmap=Bitmap.new("Graphics/Pictures/Universal/exit")
  949. @sprites["return"]=IconSprite.new(474,346,@viewport)
  950. @sprites["return"].bitmap=Bitmap.new("Graphics/Pictures/Universal/return")
  951. @page=1
  952. @sel=0
  953. update
  954. end
  955.  
  956. # Method for updating the background.
  957. def updateBackground
  958. return if !@sprites["bg"]
  959. @sprites["bg"].x-=2
  960. @sprites["bg"].x=0 if @sprites["bg"].x <= -512
  961. end
  962.  
  963. # Method which is basically pbWait(x) but with a background update added.
  964. def waitAndUpdate(x)
  965. x.times do
  966. updateBackground
  967. pbWait(1)
  968. end
  969. end
  970.  
  971. # Method for disposing all necessary sprites if the page changes.
  972. def disposeSprites
  973. # Page 1 Sprites
  974. @sprites["overlay"].dispose if @sprites["overlay"]
  975. @sprites["page1"].dispose if @sprites["page1"]
  976. @sprites["owned"].dispose if @sprites["owned"]
  977. @sprites["pokemon"].dispose if @sprites["pokemon"]
  978. @sprites["dexentry"].dispose if @sprites["dexentry"]
  979. # Page 2 Sprites
  980. @sprites["map"].dispose if @sprites["map"]
  981. @sprites["map2"].dispose if @sprites["map2"]
  982. @sprites["mapbottom"].dispose if @sprites["mapbottom"]
  983. # Page 3 Sprites
  984. @sprites["formname_bg"].dispose if @sprites["formname_bg"]
  985. @sprites["front"].dispose if @sprites["front"]
  986. @sprites["back"].dispose if @sprites["back"]
  987. @sprites["select"].dispose if @sprites["select"]
  988. @sprites["start"].dispose if @sprites["start"]
  989. @sprites["text"].dispose if @sprites["text"]
  990. @sprites["leftarrow"].dispose if @sprites["leftarrow"]
  991. @sprites["rightarrow"].dispose if @sprites["rightarrow"]
  992. end
  993.  
  994. # Method which checks whether you can scroll down or not.
  995. def canScrollDown
  996. return (@dex_index != ($pokedex.length))
  997. end
  998.  
  999. # Method which checks whether you can scroll up or not.
  1000. def canScrollUp
  1001. return (@dex_index != 1)
  1002. end
  1003.  
  1004. # Method for pressing exit.
  1005. def pressedExit
  1006. @sprites["exit"].bitmap=Bitmap.new("Graphics/Pictures/Universal/exit2")
  1007. waitAndUpdate(10)
  1008. @sprites["exit"].bitmap=Bitmap.new("Graphics/Pictures/Universal/exit")
  1009. waitAndUpdate(5)
  1010. end
  1011.  
  1012. # Method for ending the scene.
  1013. def pbEndScene
  1014. pbFadeOutAndHide(@sprites)
  1015. pbDisposeSpriteHash(@sprites)
  1016. @viewport.dispose
  1017. end
  1018.  
  1019.  
  1020. # Method for getting the next seen Pokémon in the dex. Will return 0
  1021. # if there if there is no next seen Pokémon.
  1022. def searchNextSeenPokemon(dir)
  1023. if dir==2 # DOWN
  1024. for i in @dex_index...$pokedex.length
  1025. return (i+1) if $Trainer.seen[$pokedex[i]]
  1026. end
  1027. return 0
  1028. elsif dir==8 # UP
  1029. i=@dex_index-2
  1030. while !$Trainer.seen[$pokedex[i]]
  1031. i-=1
  1032. return 0 if i==0
  1033. end
  1034. return (i+1)
  1035. end
  1036. end
  1037.  
  1038. def changePokemon(dir)
  1039. new_index=searchNextSeenPokemon(dir)
  1040. if dir==2 # DOWN
  1041. return if !canScrollDown
  1042. if new_index != @dex_index && new_index != 0 && new_index
  1043. @dex_index=new_index
  1044. else
  1045. return
  1046. end
  1047. @sprites["updown"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/Pages/updown3")
  1048. elsif dir==8 # UP
  1049. return if !canScrollUp
  1050. if new_index != @dex_index && new_index != 0 && new_index
  1051. @dex_index=new_index
  1052. else
  1053. return
  1054. end
  1055. @sprites["updown"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/Pages/updown2")
  1056. end
  1057. waitAndUpdate(10)
  1058. @sprites["updown"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/Pages/updown")
  1059. waitAndUpdate(5)
  1060. disposeSprites
  1061. @species=$pokedex[@dex_index-1]
  1062. @pokemon=PokeBattle_Pokemon.new(@species,1)
  1063. drawPageOne if @page==1
  1064. drawPageTwo if @page==2
  1065. @backSprite=nil if @page==3
  1066. @frontSprite=nil if @page==3
  1067. drawPageThree if @page==3
  1068. end
  1069.  
  1070. # Method for updating Page 2.
  1071. def updatePage2
  1072. @numpoints.times {|i|
  1073. @sprites["point#{i}"].opacity=[64,96,128,160,128,96][(Graphics.frame_count/4)%6] if @sprites["point#{i}"]
  1074. }
  1075. end
  1076.  
  1077. def update
  1078. @animSprite=false # For Page 3 whether the Pokémon sprite is animated or not.
  1079. page=0
  1080. @spriteIsFrontSprite=true
  1081. loop do
  1082. Graphics.update
  1083. Input.update
  1084. updateBackground
  1085. updatePage2 if @page==2
  1086. updatePage3 if @page==3
  1087. if !@sprites
  1088. break
  1089. end
  1090. # Inputs
  1091. if Input.trigger?(Input::DOWN)
  1092. if @sel==0
  1093. changePokemon(2)
  1094. end
  1095. end
  1096. if Input.trigger?(Input::UP)
  1097. if @sel==0
  1098. changePokemon(8)
  1099. end
  1100. end
  1101. if Input.trigger?(Input::RIGHT)
  1102. @page+=1 if @page<3
  1103. end
  1104. if Input.trigger?(Input::LEFT)
  1105. @page-=1 if @page>1
  1106. end
  1107. if Input.trigger?(Input::B)
  1108. pressedExit
  1109. break
  1110. end
  1111. if defined?($mouse)
  1112. if $mouse.inAreaLeft?(10,342,28,34) # up arrow
  1113. changePokemon(8)
  1114. end
  1115. if $mouse.inAreaLeft?(58,344,28,34) # down arrow
  1116. changePokemon(2)
  1117. end
  1118. if $mouse.leftClick?(@sprites["exit"])
  1119. pressedExit
  1120. break
  1121. end
  1122. if $mouse.leftClick?(@sprites["info"])
  1123. @page=1
  1124. end
  1125. if $mouse.leftClick?(@sprites["area"])
  1126. @page=2
  1127. end
  1128. if $mouse.leftClick?(@sprites["forms"])
  1129. @page=3
  1130. end
  1131. if @page==3
  1132. if @sprites["leftarrow"]
  1133. if !@sprites["leftarrow"].disposed?
  1134. if $mouse.leftClick?(@sprites["leftarrow"])
  1135. switchFormToLeft
  1136. end
  1137. end
  1138. end
  1139.  
  1140. if @sprites["rightarrow"]
  1141. if !@sprites["rightarrow"].disposed?
  1142. if $mouse.leftClick?(@sprites["rightarrow"])
  1143. switchFormToRight
  1144. end
  1145. end
  1146. end
  1147. if @sprites["select"]
  1148. if !@sprites["select"].disposed?
  1149. if $mouse.leftClick?(@sprites["select"])
  1150. @sprites["select"].setBitmap("Graphics/Pictures/Pokedex/Pages/turn_sprite2")
  1151. waitAndUpdate(10)
  1152. @sprites["front"].visible=@sprites["back"].visible
  1153. @spriteIsFrontSprite=@sprites["front"].visible
  1154. @sprites["back"].visible=(@sprites["front"].visible)? false : true
  1155. @sprites["select"].setBitmap("Graphics/Pictures/Pokedex/Pages/turn_sprite")
  1156. waitAndUpdate(5)
  1157. end
  1158. end
  1159. end
  1160.  
  1161. if @sprites["start"]
  1162. if !@sprites["start"].disposed?
  1163. if $mouse.leftClick?(@sprites["start"])
  1164. @sprites["start"].setBitmap("Graphics/Pictures/Pokedex/Pages/start_sprite2")
  1165. waitAndUpdate(10)
  1166. if @animSprite
  1167. @animSprite=false
  1168. else
  1169. @animSprite=true
  1170. end
  1171. @sprites["start"].setBitmap("Graphics/Pictures/Pokedex/Pages/start_sprite")
  1172. end
  1173. end
  1174. end
  1175. end
  1176. end
  1177. # If the page changes.
  1178. if @page != page
  1179. @sprites["info"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/Pages/info") if page==1
  1180. @sprites["area"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/Pages/area") if page==2
  1181. @sprites["forms"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/Pages/forms") if page==3
  1182. @sprites["info"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/Pages/info2") if @page==1
  1183. @sprites["area"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/Pages/area2") if @page==2
  1184. @sprites["forms"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/Pages/forms2") if @page==3
  1185. disposeSprites
  1186. drawPageOne if @page==1
  1187. drawPageTwo if @page==2
  1188. drawPageThree if @page==3
  1189. page=@page
  1190. end
  1191. end
  1192. pbEndScene
  1193. if @dex_index<8
  1194. @panel_y=0
  1195. @panel_sel_y=@dex_index*48-46
  1196. elsif @dex_index>$pokedex.length-8
  1197. @panel_y= -48*($pokedex.length-7)
  1198. @panel_sel_y=290-($pokedex.length-@dex_index)*48
  1199. else
  1200. @panel_y= -48*(@dex_index-1)
  1201. @panel_sel_y=2
  1202. end
  1203. MainPokedex.new(@dex_index,@panel_y,@panel_sel_y,$pokedex)
  1204. end
  1205. #===============================================================================
  1206. # * Pokédex INFO
  1207. #===============================================================================
  1208. def drawPageOne
  1209. @sprites["bg"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/Pages/bg1")
  1210. @sprites["page1"]=Sprite.new(@viewport)
  1211. @sprites["page1"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/Pages/page1")
  1212. @sprites["overlay"]=BitmapSprite.new(Graphics.width,Graphics.height,@viewport)
  1213. @sprites["dexentry"]=BitmapSprite.new(Graphics.width,Graphics.height,@viewport)
  1214. pbSetSystemFont(@sprites["overlay"].bitmap)
  1215. pbSetSystemFont(@sprites["dexentry"].bitmap)
  1216. baseColor=Color.new(90,82,82)
  1217. baseColor2=Color.new(255,255,255)
  1218. shadowColor=Color.new(165,165,173)
  1219. textpos=[
  1220. [sprintf(_INTL("HT")),288,152,0,baseColor,shadowColor],
  1221. [sprintf(_INTL("WT")),288,184,0,baseColor,shadowColor]
  1222. ]
  1223. dex_num=@dex_index.to_s
  1224. if dex_num.length==1
  1225. dex_num.insert(0,"0")
  1226. end
  1227. if dex_num.length==2
  1228. dex_num.insert(0,"0")
  1229. end
  1230. textpos.push([_INTL("#{dex_num}"),272,26,0,baseColor,shadowColor])
  1231. textpos.push([_INTL("#{@pokemon.name}"),352,26,0,baseColor,shadowColor])
  1232. if $Trainer.owned[@species]
  1233. @sprites["owned"]=IconSprite.new(204,16,@viewport)
  1234. @sprites["owned"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/Pages/owned")
  1235. dexdata=pbOpenDexData
  1236. pbDexDataOffset(dexdata,@species,8)
  1237. type1=dexdata.fgetb
  1238. type2=dexdata.fgetb
  1239. pbDexDataOffset(dexdata,@species,33)
  1240. height=dexdata.fgetw
  1241. weight=dexdata.fgetw
  1242. dexdata.close
  1243. kind=pbGetMessage(MessageTypes::Kinds,@species)
  1244. dexentry=pbGetMessage(MessageTypes::Entries,@species)
  1245. inches=(height/0.254).round
  1246. pounds=(weight/0.45359).round
  1247. textpos.push([_ISPRINTF("{1:s} Pokémon",kind),376,60,2,baseColor,shadowColor])
  1248. if pbGetCountry()==0xF4 # If the user is in the United States
  1249. textpos.push([_ISPRINTF("{1:d}'{2:02d}\"",inches/12,inches%12),490,152,1,baseColor,shadowColor])
  1250. textpos.push([_ISPRINTF("{1:4.1f} lbs.",pounds/10.0),490,184,1,baseColor,shadowColor])
  1251. else
  1252. textpos.push([_ISPRINTF("{1:.1f} m",height/10.0),490,152,1,baseColor,shadowColor])
  1253. textpos.push([_ISPRINTF("{1:.1f} kg",weight/10.0),490,184,1,baseColor,shadowColor])
  1254. end
  1255. drawTextEx(@sprites["dexentry"].bitmap,
  1256. 36,234,Graphics.width-36,3,dexentry,baseColor2,shadowColor)
  1257. footprintfile=pbPokemonFootprintFile(@species)
  1258. if footprintfile
  1259. footprint=BitmapCache.load_bitmap(footprintfile)
  1260. @sprites["overlay"].bitmap.blt(225,116,footprint,footprint.rect)
  1261. footprint.dispose
  1262. end
  1263. typebitmap=AnimatedBitmap.new(_INTL("Graphics/Pictures/types"))
  1264. type1rect=Rect.new(0,type1*24,64,24)
  1265. type2rect=Rect.new(0,type2*24,64,24)
  1266. @sprites["overlay"].bitmap.blt(304,108,typebitmap.bitmap,type1rect)
  1267. @sprites["overlay"].bitmap.blt(384,108,typebitmap.bitmap,type2rect) if type1!=type2
  1268. typebitmap.dispose
  1269. else
  1270. # if $Trainer.seen[@species]
  1271. # typebitmap=AnimatedBitmap.new(_INTL("Graphics/Pictures/types"))
  1272. # type1rect=Rect.new(0,type1*24,64,24)
  1273. # type2rect=Rect.new(0,type2*24,64,24)
  1274. # @sprites["overlay"].bitmap.blt(304,108,typebitmap.bitmap,type1rect)
  1275. # @sprites["overlay"].bitmap.blt(384,108,typebitmap.bitmap,type2rect) if type1!=type2
  1276. # typebitmap.dispose
  1277. # end
  1278.  
  1279. textpos.push([_INTL("????? Pokémon"),376,60,2,baseColor,shadowColor])
  1280. if pbGetCountry()==0xF4 # If the user is in the United States
  1281. textpos.push([_INTL("???'??\""),490,152,1,baseColor,shadowColor])
  1282. textpos.push([_INTL("????.? lbs."),490,184,1,baseColor,shadowColor])
  1283. else
  1284. textpos.push([_INTL("????.? m"),490,152,1,baseColor,shadowColor])
  1285. textpos.push([_INTL("????.? kg"),490,184,1,baseColor,shadowColor])
  1286. end
  1287. end
  1288. pbDrawTextPositions(@sprites["overlay"].bitmap,textpos)
  1289. if USING_BITMAP_WRAPPER && defined?(AnimatedBitmapWrapper)
  1290. pkmnbitmap=AnimatedBitmapWrapper.new(pbPokemonBitmapFile(@species,false))
  1291. else
  1292. pkmnbitmap=AnimatedBitmap.new(pbPokemonBitmapFile(@species,false))
  1293. end
  1294. @sprites["pokemon"]=BitmapSprite.new(pkmnbitmap.bitmap.width,
  1295. pkmnbitmap.bitmap.height,@viewport)
  1296. @sprites["pokemon"].bitmap.blt(0,0,
  1297. pkmnbitmap.bitmap,pkmnbitmap.bitmap.rect)
  1298. @sprites["pokemon"].mirror=true
  1299. @sprites["pokemon"].ox=pkmnbitmap.width/2
  1300. @sprites["pokemon"].oy=pkmnbitmap.height/2
  1301. @sprites["pokemon"].x=96
  1302. @sprites["pokemon"].y=96
  1303. pkmnbitmap.dispose
  1304. pbPlayCry(@species)
  1305. end
  1306. #===============================================================================
  1307. # * Pokédex AREA
  1308. #===============================================================================
  1309. def drawPageTwo
  1310. regionmap= -1
  1311. pbRgssOpen("Data/townmap.dat","rb"){|f|
  1312. @mapdata=Marshal.load(f)
  1313. }
  1314. mappos=!$game_map ? nil : pbGetMetadata($game_map.map_id,MetadataMapPosition)
  1315. region=regionmap
  1316. if region<0 # Use player's current region
  1317. region=mappos ? mappos[0] : 0 # Region 0 default
  1318. end
  1319. @sprites["map"]=IconSprite.new(0,0,@viewport)
  1320. @sprites["map"].setBitmap("Graphics/Pictures/#{@mapdata[region][1]}")
  1321. @sprites["map"].x+=(Graphics.width-@sprites["map"].bitmap.width)/2
  1322. for hidden in REGIONMAPEXTRAS
  1323. if hidden[0]==region && hidden[1]>0 && $game_switches[hidden[1]]
  1324. if !@sprites["map2"]
  1325. @sprites["map2"]=BitmapSprite.new(480,320,@viewport)
  1326. @sprites["map2"].x=@sprites["map"].x; @sprites["map2"].y=@sprites["map"].y
  1327. end
  1328. pbDrawImagePositions(@sprites["map2"].bitmap,[
  1329. ["Graphics/Pictures/#{hidden[4]}",
  1330. hidden[2]*PokemonRegionMapScene::SQUAREWIDTH,
  1331. hidden[3]*PokemonRegionMapScene::SQUAREHEIGHT,0,0,-1,-1]
  1332. ])
  1333. end
  1334. end
  1335. @point=BitmapWrapper.new(PokemonRegionMapScene::SQUAREWIDTH+4,
  1336. PokemonRegionMapScene::SQUAREHEIGHT+4)
  1337. @point.fill_rect(0,0,
  1338. PokemonRegionMapScene::SQUAREWIDTH+4,
  1339. PokemonRegionMapScene::SQUAREHEIGHT+4,Color.new(255,0,0))
  1340. @point2=BitmapWrapper.new(PokemonRegionMapScene::SQUAREWIDTH+4,
  1341. PokemonRegionMapScene::SQUAREHEIGHT+4)
  1342. @point2.fill_rect(4,0,
  1343. PokemonRegionMapScene::SQUAREWIDTH,
  1344. PokemonRegionMapScene::SQUAREHEIGHT+4,Color.new(255,0,0))
  1345. @point3=BitmapWrapper.new(PokemonRegionMapScene::SQUAREWIDTH+4,
  1346. PokemonRegionMapScene::SQUAREHEIGHT+4)
  1347. @point3.fill_rect(0,4,
  1348. PokemonRegionMapScene::SQUAREWIDTH+4,
  1349. PokemonRegionMapScene::SQUAREHEIGHT,Color.new(255,0,0))
  1350. @point4=BitmapWrapper.new(PokemonRegionMapScene::SQUAREWIDTH+4,
  1351. PokemonRegionMapScene::SQUAREHEIGHT+4)
  1352. @point4.fill_rect(4,4,
  1353. PokemonRegionMapScene::SQUAREWIDTH,
  1354. PokemonRegionMapScene::SQUAREHEIGHT,Color.new(255,0,0))
  1355. encdata=load_data("Data/encounters.dat")
  1356. points=[]
  1357. mapwidth=1+PokemonRegionMapScene::RIGHT-PokemonRegionMapScene::LEFT
  1358. for enc in encdata.keys
  1359. enctypes=encdata[enc][1]
  1360. if pbFindEncounter(enctypes,@species)
  1361. mappos=pbGetMetadata(enc,MetadataMapPosition)
  1362. if mappos && mappos[0]==region
  1363. showpoint=true
  1364. for loc in @mapdata[region][2]
  1365. showpoint=false if loc[0]==mappos[1] && loc[1]==mappos[2] &&
  1366. loc[7] && !$game_switches[loc[7]]
  1367. end
  1368. if showpoint
  1369. mapsize=pbGetMetadata(enc,MetadataMapSize)
  1370. if mapsize && mapsize[0] && mapsize[0]>0
  1371. sqwidth=mapsize[0]
  1372. sqheight=(mapsize[1].length*1.0/mapsize[0]).ceil
  1373. for i in 0...sqwidth
  1374. for j in 0...sqheight
  1375. if mapsize[1][i+j*sqwidth,1].to_i>0
  1376. points[mappos[1]+i+(mappos[2]+j)*mapwidth]=true
  1377. end
  1378. end
  1379. end
  1380. else
  1381. points[mappos[1]+mappos[2]*mapwidth]=true
  1382. end
  1383. end
  1384. end
  1385. end
  1386. end
  1387. i=0
  1388. for j in 0...points.length
  1389. if points[j]
  1390. s=SpriteWrapper.new(@viewport)
  1391. s.x=(j%mapwidth)*PokemonRegionMapScene::SQUAREWIDTH-2
  1392. s.x+=(Graphics.width-@sprites["map"].bitmap.width)/2
  1393. s.y=(j/mapwidth)*PokemonRegionMapScene::SQUAREHEIGHT-2
  1394. s.y+=(Graphics.height-@sprites["map"].bitmap.height)/2
  1395. if j>=1 && points[j-1]
  1396. if j>=mapwidth && points[j-mapwidth]
  1397. s.bitmap=@point4
  1398. else
  1399. s.bitmap=@point2
  1400. end
  1401. else
  1402. if j>=mapwidth && points[j-mapwidth]
  1403. s.bitmap=@point3
  1404. else
  1405. s.bitmap=@point
  1406. end
  1407. end
  1408. @sprites["point#{i}"]=s
  1409. i+=1
  1410. end
  1411. end
  1412. @numpoints=i
  1413. return true
  1414. end
  1415. #===============================================================================
  1416. # * Pokédex FORMS
  1417. #===============================================================================
  1418. def drawPageThree
  1419. species=@species
  1420. @gender=$Trainer.formlastseen[species][0]
  1421. @form=$Trainer.formlastseen[species][1]
  1422. @available=pbGetAvailable # [name, gender, form]
  1423. @sprites["bg"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/Pages/bg3")
  1424. @sprites["formname_bg"]=IconSprite.new(130,6,@viewport)
  1425. @sprites["formname_bg"].setBitmap("Graphics/Pictures/Pokedex/Pages/formname")
  1426. @sprites["text"]=BitmapSprite.new(Graphics.width,Graphics.height,@viewport)
  1427. @sprites["front"]=PokemonSprite.new(@viewport)
  1428. @sprites["back"]=PokemonSprite.new(@viewport)
  1429. if @spriteIsFrontSprite
  1430. @sprites["back"].visible=false
  1431. else
  1432. @sprites["front"].visible=false
  1433. end
  1434. @sprites["icon"]=PokemonSpeciesIconSprite.new(@species,@viewport)
  1435. @sprites["icon"].gender=@gender
  1436. @sprites["icon"].form=@form
  1437. @sprites["icon"].x=52
  1438. @sprites["icon"].y=290
  1439. @sprites["icon"].visible=false
  1440. @sprites["select"]=IconSprite.new(130,306,@viewport)
  1441. @sprites["select"].setBitmap("Graphics/Pictures/Pokedex/Pages/turn_sprite")
  1442. @sprites["start"]=IconSprite.new(258,306,@viewport)
  1443. @sprites["start"].setBitmap("Graphics/Pictures/Pokedex/Pages/start_sprite")
  1444.  
  1445. @sprites["leftarrow"]=IconSprite.new(8,0,@viewport)
  1446. @sprites["leftarrow"].setBitmap("Graphics/Pictures/Pokedex/Pages/arrow_left")
  1447.  
  1448. @sprites["rightarrow"]=IconSprite.new(484,0,@viewport)
  1449. @sprites["rightarrow"].setBitmap("Graphics/Pictures/Pokedex/Pages/arrow_right")
  1450. @frontSprite=nil; @backSprite=nil; @formNeedsRefresh=false
  1451. end
  1452.  
  1453. # Updating Page 3. Will be called every frame.
  1454. def updatePage3
  1455. @sprites["text"].bitmap.clear
  1456. pbSetSystemFont(@sprites["text"].bitmap)
  1457. name=""
  1458. for i in @available
  1459. if i[1]==@gender && i[2]==@form
  1460. name=i[0]
  1461. break
  1462. end
  1463. end
  1464. text=[
  1465. [_INTL("{1}",name),
  1466. 256,44,2,
  1467. Color.new(255,255,255),Color.new(165,165,173)],
  1468. ]
  1469. pbDrawTextPositions(@sprites["text"].bitmap,text)
  1470. frontBitmap=pbCheckPokemonBitmapFiles([@species,false,(@gender==1),false,@form,false])
  1471. if (frontBitmap && !@frontSprite) || @formNeedsRefresh
  1472. frontSprite=AnimatedBitmap.new(frontBitmap)
  1473. if USING_BITMAP_WRAPPER && defined?(AnimatedBitmapWrapper)
  1474. frontSprite=AnimatedBitmapWrapper.new(frontBitmap)
  1475. else
  1476. frontSprite=AnimatedBitmap.new(frontBitmap)
  1477. end
  1478. @sprites["front"].bitmap=frontSprite.bitmap
  1479. end
  1480. backBitmap=pbCheckPokemonBitmapFiles([@species,true,(@gender==1),false,@form,false])
  1481. if (backBitmap && !@backSprite) || @formNeedsRefresh
  1482. if USING_BITMAP_WRAPPER && defined?(AnimatedBitmapWrapper)
  1483. backSprite=AnimatedBitmapWrapper.new(backBitmap)
  1484. else
  1485. backSprite=AnimatedBitmap.new(backBitmap)
  1486. end
  1487.  
  1488. @sprites["back"].bitmap=backSprite.bitmap
  1489. end
  1490. metrics=load_data("Data/metrics.dat")
  1491. backMetric=metrics[0][@species]
  1492. pbSetSpritePositionToMiddle(@sprites["front"])
  1493. pbSetSpritePositionToMiddle(@sprites["back"])
  1494. @sprites["icon"].update
  1495. if Input.trigger?(Input::C)
  1496. pbChooseForm
  1497. end
  1498. if (!@frontSprite || !@backSprite) || @formNeedsRefresh
  1499. @frontSprite=frontSprite
  1500. @backSprite=backSprite
  1501. @formNeedsRefresh=false
  1502. end
  1503. animateSprite
  1504. end
  1505.  
  1506. # Checking for available forms.
  1507. def pbGetAvailable
  1508. available=[] # [name, gender, form]
  1509. dexdata=pbOpenDexData
  1510. pbDexDataOffset(dexdata,@species,18)
  1511. genderbyte=dexdata.fgetb
  1512. dexdata.close
  1513. formnames=pbGetMessage(MessageTypes::FormNames,@species)
  1514. if !formnames || formnames==""
  1515. formnames=[""]
  1516. else
  1517. formnames=strsplit(formnames,/,/)
  1518. end
  1519. @gender=0 if genderbyte==0 || genderbyte==255 # Always male or genderless
  1520. @gender=1 if genderbyte==254 # Always female
  1521. if formnames && formnames[0]!=""
  1522. for j in 0...2
  1523. if $Trainer.formseen[@species][j][0] || ALWAYSSHOWALLFORMS # That gender/form has been seen
  1524. if pbResolveBitmap(sprintf("Graphics/Battlers/%sf",getConstantName(PBSpecies,@species))) ||
  1525. pbResolveBitmap(sprintf("Graphics/Battlers/%03df",@species))
  1526. available.push([_INTL("{1} Male",formnames[0]),j,0]) if j==0
  1527. available.push([_INTL("{1} Female",formnames[0]),j,0]) if j==1
  1528. else
  1529. gendertopush=(genderbyte==254) ? 1 : 0
  1530. available.push([formnames[0],gendertopush,0])
  1531. break
  1532. end
  1533. end
  1534. end
  1535. else
  1536. if $Trainer.formseen[@species][0][0] || ALWAYSSHOWALLFORMS # Male/form 0 has been seen
  1537. if genderbyte!=254 && genderbyte!=255 # Not always female & not genderless
  1538. available.push([_INTL("Male"),0,0])
  1539. end
  1540. end
  1541. if $Trainer.formseen[@species][1][0] || ALWAYSSHOWALLFORMS # Female/form 0 has been seen
  1542. if genderbyte!=0 && genderbyte!=255 # Not always male & not genderless
  1543. available.push([_INTL("Female"),1,0])
  1544. end
  1545. end
  1546. if $Trainer.formseen[@species][0][0] || ALWAYSSHOWALLFORMS # Genderless/form 0 has been seen
  1547. if genderbyte==255 # Genderless
  1548. if formnames && formnames.length>1
  1549. available.push([_INTL("One Form"),0,0])
  1550. else
  1551. available.push([_INTL("Genderless"),0,0])
  1552. end
  1553. end
  1554. end
  1555. end
  1556. for i in 1...formnames.length
  1557. for j in 0...2
  1558. if $Trainer.formseen[@species][j][i] || ALWAYSSHOWALLFORMS # That gender/form has been seen
  1559. if pbResolveBitmap(sprintf("Graphics/Battlers/%sf_%d",getConstantName(PBSpecies,@species),i)) ||
  1560. pbResolveBitmap(sprintf("Graphics/Battlers/%03df_%d",@species,i))
  1561. available.push([_INTL("{1} Male",formnames[i]),j,i]) if j==0
  1562. available.push([_INTL("{1} Female",formnames[i]),j,i]) if j==1
  1563. else
  1564. available.push([formnames[i],j,i])
  1565. break
  1566. end
  1567. end
  1568. end
  1569. end
  1570. return available
  1571. end
  1572.  
  1573. # Checking for commands.
  1574. def pbGetCommands
  1575. commands=[]
  1576. for i in @available
  1577. commands.push(i[0])
  1578. end
  1579. return commands
  1580. end
  1581.  
  1582. # Animates the Sprite. Thanks Luka for his BitmapWrapper class.
  1583. def animateSprite
  1584. if !defined?(AnimatedBitmapWrapper)
  1585. p "Animation can only be played when using AnimatedBitmapWrapper." if $DEBUG
  1586. return
  1587. end
  1588. if @animSprite
  1589. if @frontSprite.finished?
  1590. @frontSprite.toFrame(0)
  1591. @backSprite.toFrame(0)
  1592. end
  1593. @frontSprite.play
  1594. @backSprite.play
  1595. @sprites["front"].bitmap=@frontSprite.bitmap.clone
  1596. @sprites["back"].bitmap=@backSprite.bitmap.clone
  1597. end
  1598. end
  1599.  
  1600. # Switches the form to the left.
  1601. def switchFormToLeft
  1602. @sprites["leftarrow"].setBitmap("Graphics/Pictures/Pokedex/Pages/arrow_left2")
  1603. x=@sprites["front"].x
  1604. 10.times do
  1605. @sprites["front"].x-=(x+@sprites["front"].bitmap.width/2)/10
  1606. @sprites["back"].x=@sprites["front"].x
  1607. updateBackground
  1608. animateSprite
  1609. pbWait(1)
  1610. end
  1611. @sprites["leftarrow"].setBitmap("Graphics/Pictures/Pokedex/Pages/arrow_left")
  1612. minForm=0
  1613. for i in 0...@available.length
  1614. if @gender==@available[i][1] && @form==@available[i][2]
  1615. currentForm=i
  1616. break
  1617. end
  1618. end
  1619. if currentForm==minForm
  1620. nextForm=@available.length-1
  1621. else
  1622. nextForm=currentForm-1
  1623. end
  1624. @gender=@sprites["icon"].gender=@available[nextForm][1]
  1625. @form=@sprites["icon"].form=@available[nextForm][2]
  1626. @formNeedsRefresh=true
  1627. updatePage3
  1628. @sprites["front"].x=512+(@sprites["front"].bitmap.width/2)
  1629. x=@sprites["front"].x/2
  1630. 10.times do
  1631. @sprites["front"].x-=(x+@sprites["front"].bitmap.width/2)/10
  1632. @sprites["back"].x=@sprites["front"].x
  1633. updateBackground
  1634. animateSprite
  1635. pbWait(1)
  1636. end
  1637. end
  1638.  
  1639. # Switches the form to the right.
  1640. def switchFormToRight
  1641. @sprites["rightarrow"].setBitmap("Graphics/Pictures/Pokedex/Pages/arrow_right2")
  1642. x=@sprites["front"].x
  1643. 10.times do
  1644. @sprites["front"].x+=(x+@sprites["front"].bitmap.width/2)/10
  1645. @sprites["back"].x=@sprites["front"].x
  1646. updateBackground
  1647. animateSprite
  1648. pbWait(1)
  1649. end
  1650. @sprites["rightarrow"].setBitmap("Graphics/Pictures/Pokedex/Pages/arrow_right")
  1651. maxForm=@available.length-1
  1652. for i in 0...@available.length
  1653. if @gender==@available[i][1] && @form==@available[i][2]
  1654. currentForm=i
  1655. break
  1656. end
  1657. end
  1658. if currentForm==maxForm
  1659. nextForm=0
  1660. else
  1661. nextForm=currentForm+1
  1662. end
  1663. @gender=@sprites["icon"].gender=@available[nextForm][1]
  1664. @form=@sprites["icon"].form=@available[nextForm][2]
  1665. @formNeedsRefresh=true
  1666. updatePage3
  1667. @sprites["front"].x=0-(@sprites["front"].bitmap.width/2)
  1668. x=256-(@sprites["front"].bitmap.width/2)
  1669. 10.times do
  1670. @sprites["front"].x+=(x+@sprites["front"].bitmap.width/2)/10
  1671. @sprites["back"].x=@sprites["front"].x
  1672. updateBackground
  1673. animateSprite
  1674. pbWait(1)
  1675. end
  1676. end
  1677.  
  1678. # Choosing the form manually by pressing enter.
  1679. def pbChooseForm
  1680. oldgender=@gender
  1681. oldform=@form
  1682. commands=pbGetCommands
  1683. using(cmdwindow=Window_CommandPokemon.new(commands)) {
  1684. cmdwindow.height=128 if cmdwindow.height>128
  1685. cmdwindow.z=@viewport.z+1
  1686. pbBottomRight(cmdwindow)
  1687. for i in 0...@available.length
  1688. if @available[i][1]==@gender && @available[i][2]==@form
  1689. cmdwindow.index=i
  1690. break
  1691. end
  1692. end
  1693. loop do
  1694. updateBackground
  1695. oldindex=cmdwindow.index
  1696. Graphics.update
  1697. Input.update
  1698. cmdwindow.update
  1699. @sprites["icon"].update
  1700. if cmdwindow.index!=oldindex
  1701. @gender=@sprites["icon"].gender=@available[cmdwindow.index][1]
  1702. @form=@sprites["icon"].form=@available[cmdwindow.index][2]
  1703. @formNeedsRefresh=true
  1704. updatePage3
  1705. end
  1706. if Input.release?(Input::B)
  1707. pbPlayCancelSE()
  1708. @gender=@sprites["icon"].gender=oldgender
  1709. @form=@sprites["icon"].form=oldform
  1710. break
  1711. end
  1712. if Input.trigger?(Input::C)
  1713. pbPlayDecisionSE()
  1714. break
  1715. end
  1716. end
  1717. }
  1718. end
  1719. end
  1720. #===============================================================================
  1721. # Pokédex Search
  1722. #===============================================================================
  1723. class PokedexSearch
  1724. def initialize
  1725. @options=["ORDER","NAME","TYPE","COLOR"]
  1726. @order=["NUMBER","A to Z","Heavy to Light","Light to Heavy",
  1727. "Tall to Short","Short to Tall"]
  1728. @name=["--","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P",
  1729. "Q","R","S","T","U","V","W","X","Y","Z"]
  1730. @type=["-","Normal","Fighting","Flying","Poison","Ground","Rock","Bug",
  1731. "Ghost","Steel","Fire","Water","Grass","Electric","Psychic",
  1732. "Ice","Dragon","Dark"]
  1733. @color=["-","Red","Blue","Yellow","Green","Black","Brown","Purple","Gray",
  1734. "White","Pink"]
  1735. @stuff=[@order,@name,@type,@color]
  1736. @viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
  1737. @viewport.z=99999
  1738. @sprites={}
  1739. @sprites["bg"]=Sprite.new(@viewport)
  1740. @sprites["bg"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/bg")
  1741. for i in 0...@options.length
  1742. @sprites["index_panel#{i+1}"]=IconSprite.new(8,4+50*i,@viewport)
  1743. @sprites["index_panel#{i+1}"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/Search/index_panel")
  1744. end
  1745. drawPanels
  1746. @sprites["check0"]=IconSprite.new(262,0,@viewport)
  1747. @sprites["check0"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/Search/checked")
  1748. @sprites["check0"].visible=false
  1749. @sprites["check1"]=IconSprite.new(262,0,@viewport)
  1750. @sprites["check1"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/Search/checked")
  1751. @sprites["check1"].visible=false
  1752. @sprites["down_bg"]=Sprite.new(@viewport)
  1753. @sprites["down_bg"].bitmap=Bitmap.new("Graphics/Pictures/Universal/down_bg")
  1754. @sprites["down_bg"].y=Graphics.height-@sprites["down_bg"].bitmap.height
  1755. @sprites["functions"]=IconSprite.new(0,288,@viewport)
  1756. @sprites["functions"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/Search/functions")
  1757. @sprites["exit"]=IconSprite.new(426,346,@viewport)
  1758. @sprites["exit"].setBitmap("Graphics/Pictures/Universal/exit")
  1759. @sprites["return"]=IconSprite.new(474,346,@viewport)
  1760. @sprites["return"].setBitmap("Graphics/Pictures/Universal/return")
  1761. @sprites["index_panel_sel"]=IconSprite.new(262,-5000,@viewport)
  1762. @sprites["index_panel_sel"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/Search/index_panel_sel")
  1763. @sprites["panel_sel"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/Search/panel_sel")
  1764. @sprites["panel_sel"].visible=false
  1765. @sprites["sort"]=IconSprite.new(8,124,@viewport)
  1766. @sprites["overlay"]=BitmapSprite.new(Graphics.width, Graphics.height, @viewport)
  1767. @sprites["overlay2"]=BitmapSprite.new(Graphics.width, Graphics.height, @viewport)
  1768. @sprites["scroll_bar"]=IconSprite.new(502,18,@viewport)
  1769. @sprites["scroll_bar"].setBitmap("Graphics/Pictures/Pokedex/scroll_bar")
  1770. @sprites["scroll_bar"].visible=false
  1771. @sprites["slider"]=IconSprite.new(500,16,@viewport)
  1772. @sprites["slider"].setBitmap("Graphics/Pictures/Pokedex/slider")
  1773. @sprites["slider"].visible=false
  1774. update
  1775. end
  1776.  
  1777. # Method for updating the background.
  1778. def updateBackground
  1779. return if !@sprites["bg"]
  1780. @sprites["bg"].x-=2
  1781. @sprites["bg"].x=0 if @sprites["bg"].x <= -512
  1782. end
  1783.  
  1784. # Method which is basically pbWait(x) but with a background update added.
  1785. def waitAndUpdate(frames)
  1786. frames.times do
  1787. updateBackground
  1788. pbWait(1)
  1789. end
  1790. end
  1791.  
  1792. # Method for ending the scene.
  1793. def pbEndScene
  1794. pbFadeOutAndHide(@sprites)
  1795. pbDisposeSpriteHash(@sprites)
  1796. @viewport.dispose
  1797. end
  1798.  
  1799. # Method for updating the Index panel.
  1800. def updateIndexPanel
  1801. @sprites["index_panel_sel"].y= 2+50*(@index-1)
  1802. end
  1803.  
  1804. # Method for the action which happens when pressing exit.
  1805. def exitPressed
  1806. @sprites["exit"].setBitmap("Graphics/Pictures/Universal/exit2")
  1807. waitAndUpdate(10)
  1808. @sprites["exit"].setBitmap("Graphics/Pictures/Universal/exit")
  1809. waitAndUpdate(5)
  1810. end
  1811.  
  1812. # Method for drawing the second page.
  1813. def drawPageTwo
  1814. @index2=0
  1815. @sprites["scroll_bar"].visible=true
  1816. @sprites["slider"].visible=true
  1817. @sprites["panel_sel"].y=2
  1818. @sprites["panel_sel"].visible=true
  1819. @sprites["panel_#{@index}"].visible=true
  1820. @sprites["overlay_#{@index}"].visible=true
  1821. @sprites["overlay2"].visible=true
  1822. @sprites["functions"].visible=false
  1823. @sprites["exit"].visible=false
  1824. @sprites["overlay"].visible=false
  1825. @sprites["check0"].visible=true if $searchSettings[@index][0]>(-1)
  1826. if ($searchSettings[2][1]>(-1)) && @index==2
  1827. @sprites["check1"].visible=true
  1828. end
  1829. updateCheckSprite
  1830. updateSliderPosition
  1831. index2Text
  1832. for i in 0...@options.length
  1833. @sprites["index_panel#{i+1}"].visible=false
  1834. end
  1835. @sprites["sort"].visible=true
  1836. @sprites["sort"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/Search/sort")
  1837. @sprites["sort"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/Search/sort2") if @index==2
  1838. end
  1839.  
  1840. # Method for drawing the first page.
  1841. def drawPageOne
  1842. @sprites["scroll_bar"].visible=false
  1843. @sprites["slider"].visible=false
  1844. @sprites["panel_sel"].visible=false
  1845. @sprites["panel_#{@index}"].visible=false
  1846. @sprites["overlay_#{@index}"].visible=false
  1847. @sprites["sort"].visible=false
  1848. @sprites["panel_#{@index}"].y=2
  1849. @sprites["panel_#{@index}"].visible=false
  1850. @sprites["overlay_#{@index}"].y=@sprites["panel_#{@index}"].y
  1851. @sprites["overlay_#{@index}"].visible=false
  1852. @sprites["overlay2"].visible=false
  1853. @sprites["check0"].visible=false
  1854. @sprites["check1"].visible=false
  1855. @sprites["functions"].visible=true
  1856. @sprites["exit"].visible=true
  1857. @sprites["overlay"].visible=true
  1858. @sprites["index_panel_sel"].visible=true
  1859. indexText
  1860. for i in 0...@options.length
  1861. @sprites["index_panel#{i+1}"].visible=true
  1862. end
  1863. @index+=1
  1864. end
  1865.  
  1866. # Method for drawing panels.
  1867. def drawPanels
  1868. @count=0 if !@count
  1869. @count+=1
  1870. panel=Sprite.new
  1871. panel.bitmap=Bitmap.new("Graphics/Pictures/Pokedex/Search/panel")
  1872. baseColor = Color.new(255,255,255)
  1873. shadowColor = Color.new(165,165,173)
  1874. for i in 0...@stuff.length
  1875. @sprites["panel_#{i}"]=Sprite.new(@viewport)
  1876. @sprites["panel_#{i}"].bitmap=Bitmap.new(240,48*@stuff[i].length-1)
  1877. @sprites["panel_#{i}"].x=258
  1878. @sprites["panel_#{i}"].y=2
  1879. @sprites["panel_#{i}"].visible=false
  1880. end
  1881. @sprites["panel_sel"]=IconSprite.new(256,2,@viewport)
  1882. for i in 0...@stuff.length
  1883. @sprites["overlay_#{i}"]=BitmapSprite.new(240,48*@stuff[i].length-1,@viewport)
  1884. @sprites["overlay_#{i}"].visible=false
  1885. @sprites["overlay_#{i}"].x=258
  1886. @sprites["overlay_#{i}"].y=2
  1887. pbSetSystemFont(@sprites["overlay_#{i}"].bitmap)
  1888. textpos=[]
  1889. for u in 0...@stuff[i].length
  1890. if u != @stuff[i].length
  1891. textpos.push([_INTL("#{@stuff[i][u+1]}"),120,8+48*u,2,baseColor,shadowColor])
  1892. end
  1893. @sprites["panel_#{i}"].bitmap.blt(0,u*48,panel.bitmap,Rect.new(
  1894. 0,0,panel.bitmap.width,panel.bitmap.height))
  1895. end
  1896. pbDrawTextPositions(@sprites["overlay_#{i}"].bitmap,textpos)
  1897. end
  1898. panel.dispose
  1899. @sprites["panel_0"].src_rect.height-=48
  1900. end
  1901.  
  1902. # Method for drawing the text of the index Page.
  1903. def indexText
  1904. @sprites["overlay"].bitmap.clear
  1905. baseColor = Color.new(255,255,255)
  1906. shadowColor = Color.new(165,165,173)
  1907. pbSetSystemFont(@sprites["overlay"].bitmap)
  1908. textpos=[]
  1909. for i in 0...@options.length
  1910. textpos.push([_INTL("#{@options[i]}"),98,8+50*i,false,baseColor,shadowColor])
  1911. textpos.push([_INTL("#{@stuff[i][0]}"),385,8+50*i,2,baseColor,shadowColor]) if !$searchSettings
  1912. end
  1913. if $searchSettings
  1914. for i in 0...@options.length
  1915. if i ==2
  1916. if $searchSettings[2][0]>(-1) && $searchSettings[2][1]>(-1) # Two types are selected.
  1917. v=$searchSettings[2][0]+1; v2=$searchSettings[2][1]+1
  1918. txt="#{@stuff[2][v]}/#{@stuff[2][v2]}"
  1919. elsif $searchSettings[2][0]>(-1)
  1920. v=$searchSettings[2][0]+1
  1921. txt="#{@stuff[2][v]}"
  1922. elsif $searchSettings[2][1]>(-1)
  1923. v=$searchSettings[2][1]+1
  1924. txt="#{@stuff[2][v]}"
  1925. else
  1926. txt="#{@stuff[2][0]}"
  1927. end
  1928. elsif $searchSettings[i]>(-1)
  1929. v=$searchSettings[i]+1
  1930. txt="#{@stuff[i][v]}"
  1931. else
  1932. txt="#{@stuff[i][0]}"
  1933. end
  1934. textpos.push([_INTL("#{txt}"),385,8+50*i,2,baseColor,shadowColor])
  1935. end
  1936. end
  1937. pbDrawTextPositions(@sprites["overlay"].bitmap,textpos)
  1938. end
  1939.  
  1940. # Method for drawing the text of the second Page (does not include
  1941. # the text on the panels).
  1942. def index2Text
  1943. @sprites["overlay2"].bitmap.clear
  1944. baseColor = Color.new(255,255,255)
  1945. shadowColor = Color.new(165,165,173)
  1946. pbSetSystemFont(@sprites["overlay2"].bitmap)
  1947. textpos=[]
  1948. textpos.push([_INTL("#{@options[@index]}"),128,128,2,baseColor,shadowColor])
  1949. if @index==2
  1950. if $searchSettings[2][0]>(-1) && $searchSettings[2][1]>(-1) # Two types are selected.
  1951. v=$searchSettings[2][0]+1; v2=$searchSettings[2][1]+1
  1952. txt="#{@stuff[2][v]}"
  1953. txt2="#{@stuff[2][v2]}"
  1954. elsif $searchSettings[2][0]>(-1)
  1955. v=$searchSettings[2][0]+1
  1956. txt="#{@stuff[2][v]}"
  1957. txt2="#{@stuff[2][0]}"
  1958. elsif $searchSettings[2][1]>(-1)
  1959. v=$searchSettings[2][1]+1
  1960. txt2="#{@stuff[2][v]}"
  1961. txt="#{@stuff[2][0]}"
  1962. else
  1963. txt="#{@stuff[2][0]}"
  1964. txt2="#{@stuff[2][0]}"
  1965. end
  1966. elsif $searchSettings[@index]>(-1)
  1967. v=$searchSettings[@index]+1
  1968. txt="#{@stuff[@index][v]}"
  1969. else
  1970. txt="#{@stuff[@index][0]}"
  1971. end
  1972. textpos.push([_INTL("#{txt}"),128,176,2,baseColor,shadowColor])
  1973. if txt2
  1974. textpos.push([_INTL("#{txt2}"),128,224,2,baseColor,shadowColor])
  1975. end
  1976. pbDrawTextPositions(@sprites["overlay2"].bitmap,textpos)
  1977. end
  1978.  
  1979.  
  1980. # Method for scrolling down.
  1981. def scrollDownPanel
  1982. return if currentIndex<7
  1983. return if @sprites["panel_sel"].y<290
  1984. if ((maxIndex)>=currentIndex)
  1985. @sprites["panel_#{@index}"].y-=48
  1986. @sprites["overlay_#{@index}"].y-=48
  1987. end
  1988. updateSliderPosition
  1989. end
  1990.  
  1991. # Method for scrolling up.
  1992. def scrollUpPanel
  1993. @sprites["panel_#{@index}"].y+=48
  1994. @sprites["overlay_#{@index}"].y+=48
  1995. end
  1996.  
  1997. # Method which checks if you can scroll down.
  1998. def canScrollDown
  1999. return (@index2.length-2-@index2)>0
  2000. end
  2001.  
  2002. # Method which checks if you can scroll up.
  2003. def canScrollUp
  2004. return (@index2>0)
  2005. end
  2006.  
  2007. # Method which will return the current Index.
  2008. def currentIndex
  2009. return @index2
  2010. end
  2011.  
  2012. # Method which will current the maximum reachable Index.
  2013. def maxIndex
  2014. return (@stuff[@index].length-2)
  2015. end
  2016.  
  2017. # This method updates the position of the slider.
  2018. def updateSliderPosition
  2019. pos=16
  2020. pos+=300*currentIndex/maxIndex
  2021. @sprites["slider"].y=pos
  2022. end
  2023.  
  2024. # This method updates the little checked sprite in the second page
  2025. # when a panel was selected.
  2026. def updateCheckSprite
  2027. if @index==2
  2028. if $searchSettings[2][0]>(-1)
  2029. y=14+@sprites["panel_#{@index}"].y+$searchSettings[2][0]*48
  2030. @sprites["check0"].y=y
  2031. @sprites["check0"].visible=true
  2032. else
  2033. @sprites["check0"].visible=false
  2034. end
  2035. if $searchSettings[2][1]>(-1)
  2036. y=14+@sprites["panel_#{@index}"].y+$searchSettings[2][1]*48
  2037. @sprites["check1"].y=y
  2038. @sprites["check1"].visible=true
  2039. else
  2040. @sprites["check1"].visible=false
  2041. end
  2042. elsif $searchSettings[@index]>(-1)
  2043. y=14+@sprites["panel_#{@index}"].y+$searchSettings[@index]*48
  2044. @sprites["check0"].y=y
  2045. @sprites["check0"].visible=true
  2046. else
  2047. @sprites["check0"].visible=false
  2048. end
  2049. end
  2050.  
  2051. # Will return true if it's the first side. the method is using the visibility
  2052. # of the object @sprites["exit"] to check.
  2053. def firstPage
  2054. return (@sprites["exit"].visible==true)
  2055. end
  2056.  
  2057. # Will return true if it's the second side. the method is using the visibility
  2058. # of the object @sprites["exit"] to check.
  2059. def secondPage
  2060. return (@sprites["exit"].visible==false)
  2061. end
  2062.  
  2063. # Function which will return the index.
  2064. def mousePanelClick
  2065. for i in 0..6
  2066. if $mouse.inAreaLeft?(256,2+i*48,240,44)
  2067. val=i
  2068. end
  2069. end
  2070. return if !val
  2071. val-= (@sprites["panel_#{@index}"].y-2)/48
  2072. return val
  2073. end
  2074.  
  2075. # Function for saving the setting when clicking on on a panel with the mouse.
  2076. def mousePanelClickUpdate
  2077. val=mousePanelClick
  2078. if val
  2079. # Lines which are handling the Types since you can select two types.
  2080. if @index==2
  2081. if $searchSettings[2][0]==val
  2082. $searchSettings[2][0]= -1
  2083. elsif $searchSettings[2][1]==val
  2084. $searchSettings[2][1]= -1
  2085. elsif $searchSettings[2][0]== -1
  2086. $searchSettings[2][0]=val
  2087. elsif $searchSettings[2][0]>(-1)
  2088. $searchSettings[2][1]=val
  2089. end
  2090. # Lines which are handling everything except the Types.
  2091. elsif $searchSettings[@index]==val
  2092. $searchSettings[@index]= -1
  2093. else
  2094. $searchSettings[@index]=val
  2095. end
  2096. end
  2097. updateCheckSprite
  2098. index2Text
  2099. end
  2100.  
  2101. # Function for using the mouse for the scrolling bar.
  2102. def mouseScrollBar
  2103. return if @sprites["exit"].visible
  2104. return if !$mouse.inAreaPress?(494,10,18,315)
  2105. # Updating slider.
  2106. if $mouse.y>316
  2107. @sprites["slider"].y=316
  2108. elsif $mouse.y<16
  2109. @sprites["slider"].y=16
  2110. else
  2111. @sprites["slider"].y=$mouse.y
  2112. end
  2113. # Updating index.
  2114. @index2= (@sprites["slider"].y-16)*maxIndex/300
  2115. @index2=0 if @index2<0
  2116. # Updating panel position.
  2117. y_pos=@sprites["panel_#{@index}"].y
  2118. @sprites["panel_#{@index}"].y= -48*(currentIndex-6)+2 if @sprites["panel_sel"].y>=290
  2119. @sprites["panel_#{@index}"].y= -48*currentIndex+2 if @sprites["panel_sel"].y<=2
  2120. if y_pos<@sprites["panel_#{@index}"].y && @sprites["panel_sel"].y>10
  2121. @sprites["panel_#{@index}"].y=y_pos
  2122. end
  2123. # Updating overlay.
  2124. @sprites["overlay_#{@index}"].y=@sprites["panel_#{@index}"].y
  2125. # Updating selected panel.
  2126. @sprites["panel_sel"].y=2+48*currentIndex+@sprites["panel_#{@index}"].y
  2127. end
  2128.  
  2129. # Update Method
  2130. def update
  2131. index= -1 ; index2=0
  2132. @index=0 ; @index2=0;
  2133. @searchStarted=false; returnpressed=false
  2134. if !$searchSettings
  2135. $searchSettings=[]
  2136. @options.length.times do
  2137. $searchSettings.push(-1)
  2138. end
  2139. $searchSettings[2]=[-1,-1] # 2 Types can be choosen.
  2140. end
  2141. loop do
  2142. Graphics.update
  2143. Input.update
  2144. updateBackground
  2145. updateIndexPanel
  2146. if @newDex
  2147. if @newDex.empty?
  2148. @sprites["search"].dispose
  2149. @newDex=nil
  2150. else
  2151. break
  2152. end
  2153. end
  2154. if Input.trigger?(Input::B)
  2155. if firstPage
  2156. exitPressed
  2157. break
  2158. elsif secondPage
  2159. @sprites["return"].bitmap=Bitmap.new("Graphics/Pictures/Universal/return2")
  2160. waitAndUpdate(10)
  2161. @sprites["return"].bitmap=Bitmap.new("Graphics/Pictures/Universal/return")
  2162. waitAndUpdate(5)
  2163. drawPageOne
  2164. end
  2165. end
  2166. # Scrolling down.
  2167. if Input.trigger?(Input::DOWN) && @index<@options.length
  2168. if secondPage
  2169. if currentIndex<maxIndex
  2170. @index2+=1
  2171. scrollDownPanel if @sprites["panel_sel"].y>=290
  2172. @sprites["panel_sel"].y+=48 if @sprites["panel_sel"].y<290
  2173. updateSliderPosition
  2174. end
  2175. else
  2176. @index+=1
  2177. end
  2178. end
  2179. # Scrolling up.
  2180. if Input.trigger?(Input::UP) && @index>0
  2181. if secondPage
  2182. if currentIndex>0
  2183. @index2-=1
  2184. scrollUpPanel if @sprites["panel_sel"].y<10
  2185. @sprites["panel_sel"].y-=48 if @sprites["panel_sel"].y>5
  2186. updateSliderPosition
  2187. end
  2188. else
  2189. @index-=1
  2190. end
  2191. end
  2192. if Input.trigger?(Input::C)
  2193. if firstPage
  2194. waitAndUpdate(10)
  2195. @sprites["index_panel_sel"].visible=false
  2196. waitAndUpdate(5)
  2197. drawPageTwo
  2198. elsif secondPage
  2199. if ($searchSettings[3][0]>(-1)) && @index==2
  2200. $searchSettings[3][1]=@index2
  2201. else
  2202. $searchSettings[@index]=@index2
  2203. end
  2204. updateCheckSprite
  2205. index2Text
  2206. end
  2207. end
  2208. if defined?($mouse)
  2209. for i in 0...@options.length
  2210. if firstPage && $mouse.inAreaLeft?(262,4+50*i,
  2211. @sprites["index_panel#{i+1}"].bitmap.width,
  2212. @sprites["index_panel#{i+1}"].bitmap.height)
  2213. @index=i
  2214. @sprites["index_panel_sel"].y=2+50*i
  2215. waitAndUpdate(10)
  2216. @sprites["index_panel_sel"].visible=false
  2217. waitAndUpdate(5)
  2218. drawPageTwo
  2219. end
  2220. end
  2221. if firstPage && $mouse.leftClick?(@sprites["exit"])
  2222. exitPressed
  2223. break
  2224. end
  2225. if firstPage && $mouse.inAreaLeft?(4,299,98,36)
  2226. pbReset
  2227. end
  2228. if firstPage && $mouse.inAreaLeft?(226,294,286,46)
  2229. pbStartSearch
  2230. end
  2231. if secondPage && $mouse.leftClick?(@sprites["panel_#{@index}"])
  2232. mousePanelClickUpdate
  2233. end
  2234. if $mouse.leftPressed?(@sprites["return"])
  2235. @sprites["return"].bitmap=Bitmap.new("Graphics/Pictures/Universal/return2")
  2236. waitAndUpdate(10)
  2237. @sprites["return"].bitmap=Bitmap.new("Graphics/Pictures/Universal/return")
  2238. waitAndUpdate(5)
  2239. returnpressed=true if firstPage
  2240. break if firstPage
  2241. drawPageOne if secondPage
  2242. end
  2243. mouseScrollBar
  2244. end
  2245. # Index Index changes.
  2246. if @index != index
  2247. indexText
  2248. index=@index
  2249. end
  2250. # if panel index changes.
  2251. if @index2 != index2
  2252. updateCheckSprite
  2253. index2=@index2
  2254. end
  2255. end
  2256. pbEndScene
  2257. if @newDex
  2258. MainPokedex.new(0,0,-46,@newDex)
  2259. elsif !returnpressed
  2260. MainPokedex.new(0,0,-46,nil)
  2261. end
  2262. end
  2263.  
  2264. # Will return the pokedex without species which the trainer didn't see.
  2265. def convertDex(dex)
  2266. ret=[]
  2267. for i in 0...dex.length
  2268. ret.push(dex[i]) if $Trainer.seen[dex[i]]
  2269. end
  2270. return ret
  2271. end
  2272.  
  2273. # Method will return the number of total search criteria (created for the
  2274. # search bar).
  2275. def totalCriteria
  2276. ret=0
  2277. ret+=1 if $searchSettings[0]>(-1)
  2278. ret+=1 if $searchSettings[1]>(-1)
  2279. ret+=1 if $searchSettings[2][0]>(-1) || $searchSettings[2][1]>(-1)
  2280. ret+=1 if $searchSettings[3]>(-1)
  2281. return ret
  2282. end
  2283.  
  2284. # Method which will reset all the settings.
  2285. def pbReset
  2286. @sprites["reset2"]=IconSprite.new(4,300,@viewport)
  2287. @sprites["reset2"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/Search/reset2")
  2288. waitAndUpdate(10)
  2289. @sprites["reset2"].dispose
  2290. $searchSettings=[]
  2291. @options.length.times do
  2292. $searchSettings.push(-1)
  2293. end
  2294. $searchSettings[2]=[-1,-1] # Creating a 2nd option for the Type.
  2295. indexText
  2296. end
  2297.  
  2298. # This method is basically the core of the class. It will sort out every
  2299. # Pokémon which has the choosen settings.
  2300. def pbStartSearch
  2301. @sprites["start2"]=IconSprite.new(226,294,@viewport)
  2302. @sprites["start2"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/Search/start2")
  2303. waitAndUpdate(10)
  2304. @sprites["start2"].dispose
  2305. waitAndUpdate(5)
  2306. @sprites["search"]=Sprite.new(@viewport)
  2307. @sprites["search"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/Search/pkmn_search")
  2308. @sprites["search"].y=DEFAULTSCREENHEIGHT-@sprites["search"].bitmap.height
  2309. @sprites["search_bar"].dispose if @sprites["search_bar"]
  2310. @sprites["search_bar"]=Sprite.new(@viewport)
  2311. @sprites["search_bar"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/Search/search_bar")
  2312. @sprites["search_bar"].x=18
  2313. bar_width=@sprites["search_bar"].bitmap.width
  2314. @sprites["search_bar"].y=@sprites["search"].y+58
  2315. @sprites["search_bar"].src_rect.width=0
  2316. wasNoScanBefore=true
  2317. criteria=totalCriteria
  2318. if !$pokedex2
  2319. $pokedex2=$pokedex
  2320. end
  2321. $pokedex=$pokedex2
  2322. newDex=[]
  2323. # Searching Pokémon by name.
  2324. if $searchSettings[1]>(-1)
  2325. alphabet="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  2326. letter=alphabet[$searchSettings[1],1]
  2327. letter2=letter.downcase
  2328. oldDex=$pokedex.clone
  2329. for i in 0...oldDex.length
  2330. pokemon=PokeBattle_Pokemon.new(oldDex[i],1)
  2331. if pokemon.name[0,1]==(letter || letter2)
  2332. newDex.push(oldDex[i])
  2333. end
  2334. end
  2335. wasNoScanBefore=false
  2336. end
  2337. # Searching Pokémon by type.
  2338. if $searchSettings[2][0]>(-1) || $searchSettings[2][1]>(-1) ||
  2339. ($searchSettings[2][0]>(-1) && $searchSettings[2][1]>(-1))
  2340. type=$searchSettings[2][0] if $searchSettings[2][0]>(-1)
  2341. type2=$searchSettings[2][1] if $searchSettings[2][1]>(-1)
  2342. # Since the 9th type is "???" we need to adapt the variable type.
  2343. if ($searchSettings[2][0])>8
  2344. type+=1
  2345. end
  2346. if ($searchSettings[2][1])>8
  2347. type2+=1
  2348. end
  2349. oldDex=newDex
  2350. oldDex=$pokedex.clone if wasNoScanBefore
  2351. newDex=[]
  2352. for i in 0...oldDex.length
  2353. pokemon=PokeBattle_Pokemon.new(oldDex[i],1)
  2354. if pokemon.hasType?(type) && !type2
  2355. newDex.push(oldDex[i])
  2356. elsif pokemon.hasType?(type2) && !type
  2357. newDex.push(oldDex[i])
  2358. elsif pokemon.hasType?(type) && pokemon.hasType?(type2)
  2359. newDex.push(oldDex[i])
  2360. end
  2361. end
  2362. wasNoScanBefore=false
  2363. end
  2364. # Searching Pokémon by color.
  2365. if $searchSettings[3]>(-1)
  2366. color=$searchSettings[3]
  2367. oldDex=newDex
  2368. oldDex=$pokedex.clone if wasNoScanBefore
  2369. newDex=[]
  2370. for i in 0...oldDex.length
  2371. pokemon=PokeBattle_Pokemon.new(oldDex[i],1)
  2372. if pokemon.hasColor?(color)
  2373. newDex.push(oldDex[i])
  2374. end
  2375. end
  2376. end
  2377. # Sorting Pokémon from A to Z.
  2378. if $searchSettings[0] == 0
  2379. wasAlreadyOneOption=true
  2380. oldDex=newDex
  2381. oldDex=$pokedex.clone if wasNoScanBefore
  2382. oldDex2=oldDex.clone
  2383. newDex=[]
  2384. for i in 0...oldDex2.length
  2385. pokemon=PokeBattle_Pokemon.new(oldDex2[i],1)
  2386. oldDex[i]=[pokemon.name,oldDex[i]]
  2387. oldDex2[i]=pokemon.name
  2388. end
  2389. oldDex2=oldDex2.sort
  2390. for i in 0...oldDex2.length
  2391. pokemon=oldDex2[i]
  2392. for i in 0...oldDex.length
  2393. if pokemon==oldDex[i][0]
  2394. newDex.push(oldDex[i][1])
  2395. break
  2396. end
  2397. end
  2398. end
  2399. wasNoScanBefore=false
  2400. end
  2401. # Sorting Pokémon from Heavy to Light and from Light to Heavy.
  2402. if $searchSettings[0]==1 || $searchSettings[0]==2
  2403. oldDex=newDex
  2404. oldDex=$pokedex.clone if wasNoScanBefore
  2405. oldDex2=oldDex.clone
  2406. newDex=[]
  2407. for i in 0...oldDex2.length
  2408. pokemon=PokeBattle_Pokemon.new(oldDex2[i],1)
  2409. oldDex[i]=[pokemon.weight,oldDex[i]]
  2410. oldDex2[i]=pokemon.weight
  2411. end
  2412. oldDex2=oldDex2.sort
  2413. oldDex2=oldDex2.reverse if $searchSettings[0]==1
  2414. for i in 0...oldDex2.length
  2415. weight=oldDex2[i]
  2416. for i in 0...oldDex.length
  2417. if weight==oldDex[i][0]
  2418. newDex.push(oldDex[i][1]) if oldDex[i][1] != newDex[newDex.length-1]
  2419. break
  2420. end
  2421. end
  2422. end
  2423. wasNoScanBefore=false
  2424. end
  2425. # Sorting Pokémon from Tall to Short and from Short to Tall.
  2426. if $searchSettings[0]==3 || $searchSettings[0]==4
  2427. wasAlreadyOneOption=true
  2428. oldDex=newDex
  2429. oldDex=$pokedex.clone if wasNoScanBefore
  2430. oldDex2=oldDex.clone
  2431. newDex=[]
  2432. for i in 0...oldDex2.length
  2433. dexdata=pbOpenDexData
  2434. pbDexDataOffset(dexdata,oldDex2[i],33)
  2435. height=dexdata.fgetb
  2436. dexdata.close
  2437. pokemon=PokeBattle_Pokemon.new(oldDex2[i],1)
  2438. oldDex[i]=[height,oldDex[i]]
  2439. oldDex2[i]=height
  2440. end
  2441. oldDex2=oldDex2.sort
  2442. oldDex2.reverse! if $searchSettings[0]==3
  2443. for a in 0...oldDex2.length
  2444. height=oldDex2[a]
  2445. for b in 0...oldDex.length
  2446. if height==oldDex[b][0]
  2447. check=true
  2448. if !newDex.empty?
  2449. for c in 0...newDex.length
  2450. check=false if newDex[c]==oldDex[b][1]
  2451. end
  2452. end
  2453. if check==true
  2454. newDex.push(oldDex[b][1])
  2455. break
  2456. end
  2457. end
  2458. end
  2459. @sprites["search_bar"].src_rect.width+=(bar_width/criteria)/oldDex2.length
  2460. end
  2461. end
  2462. # Finished search.
  2463. frames=40
  2464. frame=0
  2465. frames.times do
  2466. frame+=1
  2467. waitAndUpdate(1)
  2468. @sprites["search_bar"].src_rect.width=(bar_width*frame)/frames
  2469. end
  2470. waitAndUpdate(20)
  2471. @sprites["search_bar"].dispose
  2472. newDex=convertDex(newDex)
  2473. newDex=$pokedex if totalCriteria==0
  2474. if newDex.empty?
  2475. @sprites["search"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/Search/no_pkmn_found")
  2476. else
  2477. @sprites["search"].bitmap=Bitmap.new("Graphics/Pictures/Pokedex/Search/pkmn_found")
  2478. end
  2479. loop do
  2480. waitAndUpdate(1)
  2481. break if Input.trigger?(Input::C)
  2482. if defined?($mouse)
  2483. if $mouse.inAreaLeft?(0,0,Graphics.width,Graphics.height)
  2484. break
  2485. end
  2486. end
  2487. end
  2488. @searchStarted=true
  2489. @newDex=newDex
  2490. end
  2491. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement