Advertisement
KingPoggers

load

Apr 23rd, 2019
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 37.96 KB | None | 0 0
  1. class PokemonLoadPanel < SpriteWrapper
  2. attr_reader :selected
  3.  
  4. def initialize(index,title,isContinue,trainer,framecount,mapid,viewport=nil)
  5. super(viewport)
  6. @index=index
  7. @title=title
  8. @isContinue=isContinue
  9. @trainer=trainer
  10. @totalsec=(framecount || 0)/Graphics.frame_rate
  11. @mapid=mapid
  12. @selected=(index==0)
  13. @bgbitmap=AnimatedBitmap.new("Graphics/Pictures/loadPanels")
  14. @refreshBitmap=true
  15. @refreshing=false
  16. refresh
  17. end
  18.  
  19. def dispose
  20. @bgbitmap.dispose
  21. self.bitmap.dispose
  22. super
  23. end
  24.  
  25. def selected=(value)
  26. if @selected!=value
  27. @selected=value
  28. @refreshBitmap=true
  29. refresh
  30. end
  31. end
  32.  
  33. def pbRefresh
  34. # Draw contents
  35. @refreshBitmap=true
  36. refresh
  37. end
  38.  
  39. def refresh
  40. return if @refreshing
  41. return if disposed?
  42. @refreshing=true
  43. if !self.bitmap || self.bitmap.disposed?
  44. self.bitmap=BitmapWrapper.new(@bgbitmap.width,111*2)
  45. pbSetSystemFont(self.bitmap)
  46. end
  47. if @refreshBitmap
  48. @refreshBitmap=false
  49. self.bitmap.clear if self.bitmap
  50. if @isContinue
  51. self.bitmap.blt(0,0,@bgbitmap.bitmap,
  52. Rect.new(0,(@selected ? 111*2 : 0),@bgbitmap.width,111*2))
  53. else
  54. self.bitmap.blt(0,0,@bgbitmap.bitmap,
  55. Rect.new(0,111*2*2+(@selected ? 23*2 : 0),@bgbitmap.width,23*2))
  56. end
  57. textpos=[]
  58. if @isContinue
  59. textpos.push([@title,16*2,5*2,0,Color.new(232,232,232),Color.new(136,136,136)])
  60. textpos.push([_INTL("Badges:"),16*2,56*2,0,Color.new(232,232,232),Color.new(136,136,136)])
  61. textpos.push([@trainer.numbadges.to_s,103*2,56*2,1,Color.new(232,232,232),Color.new(136,136,136)])
  62. textpos.push([_INTL("Pokédex:"),16*2,72*2,0,Color.new(232,232,232),Color.new(136,136,136)])
  63. textpos.push([@trainer.pokedexSeen.to_s,103*2,72*2,1,Color.new(232,232,232),Color.new(136,136,136)])
  64. textpos.push([_INTL("Time:"),16*2,88*2,0,Color.new(232,232,232),Color.new(136,136,136)])
  65. hour = @totalsec / 60 / 60
  66. min = @totalsec / 60 % 60
  67. if hour>0
  68. textpos.push([_INTL("{1}h {2}m",hour,min),103*2,88*2,1,Color.new(232,232,232),Color.new(136,136,136)])
  69. else
  70. textpos.push([_INTL("{1}m",min),103*2,88*2,1,Color.new(232,232,232),Color.new(136,136,136)])
  71. end
  72. if @trainer.gender==0
  73. textpos.push([@trainer.name,56*2,32*2,0,Color.new(56,160,248),Color.new(56,104,168)])
  74. else
  75. textpos.push([@trainer.name,56*2,32*2,0,Color.new(240,72,88),Color.new(160,64,64)])
  76. end
  77. mapname=pbGetMapNameFromId(@mapid)
  78. mapname.gsub!(/\\PN/,@trainer.name)
  79. textpos.push([mapname,193*2,5*2,1,Color.new(232,232,232),Color.new(136,136,136)])
  80. else
  81. textpos.push([@title,16*2,4*2,0,Color.new(232,232,232),Color.new(136,136,136)])
  82. end
  83. pbDrawTextPositions(self.bitmap,textpos)
  84. end
  85. @refreshing=false
  86. end
  87. end
  88.  
  89.  
  90.  
  91. class PokemonLoadScene
  92. def pbUpdate
  93. oldi=@sprites["cmdwindow"].index rescue 0
  94. pbUpdateSpriteHash(@sprites)
  95. newi=@sprites["cmdwindow"].index rescue 0
  96. if oldi!=newi
  97. @sprites["panel#{oldi}"].selected=false
  98. @sprites["panel#{oldi}"].pbRefresh
  99. @sprites["panel#{newi}"].selected=true
  100. @sprites["panel#{newi}"].pbRefresh
  101. while @sprites["panel#{newi}"].y>Graphics.height-16*2-23*2-1*2
  102. for i in 0...@commands.length
  103. @sprites["panel#{i}"].y-=23*2+1*2
  104. end
  105. for i in 0...6
  106. break if !@sprites["party#{i}"]
  107. @sprites["party#{i}"].y-=23*2+1*2
  108. end
  109. @sprites["player"].y-=23*2+1*2 if @sprites["player"]
  110. end
  111. while @sprites["panel#{newi}"].y<16*2
  112. for i in 0...@commands.length
  113. @sprites["panel#{i}"].y+=23*2+1*2
  114. end
  115. for i in 0...6
  116. break if !@sprites["party#{i}"]
  117. @sprites["party#{i}"].y+=23*2+1*2
  118. end
  119. @sprites["player"].y+=23*2+1*2 if @sprites["player"]
  120. end
  121. end
  122. end
  123.  
  124. def pbStartScene(commands,showContinue,trainer,framecount,mapid)
  125. @commands=commands
  126. @sprites={}
  127. @viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
  128. @viewport.z=99998
  129. @textviewport=Viewport.new(0,0,Graphics.width,Graphics.height)
  130. @textviewport.z=@viewport.z+1
  131. @sprites["overlay"]=BitmapSprite.new(Graphics.width,Graphics.height,@textviewport)
  132. @sprites["overlay2"]=BitmapSprite.new(Graphics.width,Graphics.height,@textviewport)
  133. addBackgroundOrColoredPlane(@sprites,"background","loadbg",
  134. Color.new(248,248,248),@viewport)
  135. y=16*2
  136. # initializes the scrolling panorama
  137. @sprites["panorama"] = ScrollingSprite.new(@viewport)
  138. @sprites["panorama"].setBitmap("Graphics/Pictures/fond")
  139. @sprites["panorama"].speed = 2
  140. for i in 0...commands.length
  141. @sprites["panel#{i}"]=PokemonLoadPanel.new(i,commands[i],
  142. (showContinue ? (i==0) : false),trainer,framecount,mapid,@viewport)
  143. @sprites["panel#{i}"].pbRefresh
  144. @sprites["panel#{i}"].x=24*2
  145. @sprites["panel#{i}"].y=y
  146. y+=(showContinue && i==0) ? 111*2+1*2 : 23*2+1*2
  147. end
  148. @sprites["cmdwindow"]=Window_CommandPokemon.new([])
  149. @sprites["cmdwindow"].x=Graphics.width
  150. @sprites["cmdwindow"].y=0
  151. @sprites["cmdwindow"].viewport=@viewport
  152. @sprites["cmdwindow"].visible=false
  153. end
  154.  
  155. def pbStartScene2
  156. pbFadeInAndShow(@sprites) { pbUpdate }
  157. end
  158.  
  159. def pbMoveSprites(xoffset)
  160. @sprites["cmdwindow"].x-=xoffset
  161. @sprites["player"].x-=xoffset if @sprites["player"]
  162. for i in 0..5
  163. @sprites["party#{i}"].x-=xoffset if @sprites["party#{i}"]
  164. end
  165. for i in 0..5
  166. @sprites["panel#{i}"].x-=xoffset if @sprites["panel#{i}"]
  167. end
  168. end
  169.  
  170. def pbDrawSaveCommands(savefiles)
  171. @savefiles=savefiles
  172. @sprites["overlay"].bitmap.clear
  173. textpos=[]
  174. if savefiles.length>=9
  175. numsavebuttons=9
  176. else
  177. numsavebuttons=savefiles.length
  178. end
  179. for i in 0...numsavebuttons
  180. @sprites["savefile#{i}"]=IconSprite.new(Graphics.width/2-384/2,i*45,@viewport)
  181. @sprites["savefile#{i}"].setBitmap("Graphics/Pictures/loadsavepanel")
  182. @sprites["savefile#{i}"].zoom_x=0.5
  183. @sprites["savefile#{i}"].zoom_y=0.5
  184. Graphics.update
  185. loop do
  186. @sprites["savefile#{i}"].zoom_x+=0.125
  187. @sprites["savefile#{i}"].zoom_y+=0.125
  188. Graphics.update
  189. break if @sprites["savefile#{i}"].zoom_x==1
  190. end
  191. if i<10
  192. textpos.push([savefiles[i][1],Graphics.width/2-savefiles[i][1].length*5,i*45+12,0,Color.new(255,255,255),Color.new(125,125,125)])
  193. pbDrawTextPositions(@sprites["overlay"].bitmap,textpos)
  194. end
  195. end
  196. @sprites["saveselect"]=IconSprite.new(Graphics.width/2-384/2,0,@viewport)
  197. @sprites["saveselect"].setBitmap("Graphics/Pictures/loadsavepanel_1")
  198. Graphics.update
  199. pbToggleSelecting
  200. end
  201.  
  202. def pbRemoveSaveCommands
  203. @sprites["overlay"].bitmap.clear
  204. @index=0 if !@index
  205. Graphics.update
  206.  
  207. pbDisposeSprite(@sprites,"saveselect")
  208. Graphics.update
  209. for i in 0...@savefiles.length
  210. pbDisposeSprite(@sprites,"savefile#{i}")
  211. Graphics.update
  212. end
  213. end
  214.  
  215. def pbChooseAutoSubFile(index,arrayindex)
  216. if !@sprites["autosavefile"]
  217. @sprites["overlay"].bitmap.clear
  218. @sprites["newsavefile1"]=IconSprite.new(20,Graphics.height/3,@viewport)
  219. @sprites["newsavefile1"].setBitmap("Graphics/Pictures/loadsavepanel")
  220. @sprites["autosavefile"]=IconSprite.new(300,Graphics.height/3,@viewport)
  221. @sprites["autosavefile"].setBitmap("Graphics/Pictures/loadsavepanel")
  222. @sprites["saveselect"]=IconSprite.new(20,Graphics.height/3,@viewport)
  223. @sprites["saveselect"].setBitmap("Graphics/Pictures/loadsavepanel_1")
  224. @sprites["autosavefile"].zoom_x=0.5
  225. @sprites["newsavefile1"].zoom_x=0.5
  226. @sprites["newsavefile1"].zoom_y=1.5
  227. @sprites["autosavefile"].zoom_y=1.5
  228. @sprites["saveselect"].zoom_x=0.5
  229. @sprites["saveselect"].zoom_y=1.5
  230. @sprites["overlay2"].bitmap.font.size=22
  231. textpos=[]
  232. textpos.push([@savefiles[arrayindex][1],Graphics.width/2-@savefiles[arrayindex][1].length/2*10,30,0,Color.new(0,0,0),Color.new(125,125,125)])
  233. textpos.push(["Normal Save",55,Graphics.height/3+12,0,Color.new(255,255,255),Color.new(125,125,125)])
  234. textpos.push(["Autosave",350,Graphics.height/3+12,0,Color.new(255,255,255),Color.new(125,125,125)])
  235. textpos.push([@savefiles[arrayindex][4],30,Graphics.height/3+35,0,Color.new(255,255,255),Color.new(125,125,125)])
  236. textpos.push([@savefiles[arrayindex][5],315,Graphics.height/3+35,0,Color.new(255,255,255),Color.new(125,125,125)])
  237. pbDrawTextPositions(@sprites["overlay"].bitmap,textpos)
  238. end
  239. if index==0
  240. @sprites["saveselect"].x=20
  241. else
  242. @sprites["saveselect"].x=300
  243. end
  244. end
  245.  
  246. def pbClearOverlay2
  247. @sprites["overlay2"].bitmap.clear
  248. end
  249.  
  250. def pbDrawCurrentSaveFile(savename="",auto=nil)
  251. @sprites["overlay2"].bitmap.clear
  252. textpos=[]
  253. if auto==nil
  254. textpos.push([savename,0,0,0,Color.new(255,255,255),Color.new(125,125,125)])
  255. else
  256. textpos.push([savename+ " Auto Save",0,0,0,Color.new(255,255,255),Color.new(125,125,125)])
  257. end
  258. pbDrawTextPositions(@sprites["overlay2"].bitmap,textpos)
  259. end
  260.  
  261. def pbDrawSaveText(savefiles,xoffset=0,yoffset=0)
  262. @sprites["overlay"].bitmap.clear
  263. @savefiles=savefiles
  264. textpos=[]
  265. for i in 0...savefiles.length
  266. if !((i*45+12-yoffset)<0) && !((i*45+12-yoffset>9*45))
  267. textpos.push([savefiles[i][1],Graphics.width/2-savefiles[i][1].length*5+xoffset,i*45+12-yoffset,0,Color.new(255,255,255),Color.new(125,125,125)])
  268. end
  269. end
  270. pbDrawTextPositions(@sprites["overlay"].bitmap,textpos)
  271. end
  272.  
  273. def pbToggleSelecting
  274. if @saveselecting
  275. @saveselecting=!@saveselecting
  276. else
  277. @saveselecting=true
  278. end
  279. end
  280.  
  281. def pbMoveSaveSel(index)
  282. @index=index
  283. if index<=7 &&
  284. @sprites["saveselect"].y=index*45
  285. pbDrawSaveText(@savefiles)
  286. elsif index==@savefiles.length-1
  287. @sprites["saveselect"].y=7*45
  288. pbDrawSaveText(@savefiles,0,45*(index-7))
  289. else
  290. pbDrawSaveText(@savefiles,0,45*(index-7))
  291. end
  292. if index==(@savefiles.length-1) && @savefiles.length-1>=8
  293. @sprites["savefile8"].visible=false if @sprites["savefile8"]
  294. else
  295. @sprites["savefile8"].visible=true if @sprites["savefile8"]
  296. end
  297. Graphics.update
  298. end
  299.  
  300. def pbStartDeleteScene
  301. @sprites={}
  302. @viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
  303. @viewport.z=99998
  304. addBackgroundOrColoredPlane(@sprites,"background","loadbg",
  305. Color.new(248,248,248),@viewport)
  306. end
  307.  
  308. def pbSetParty(trainer)
  309. return if !trainer || !trainer.party
  310. meta=pbGetMetadata(0,MetadataPlayerA+trainer.metaID)
  311. if meta
  312. filename=pbGetPlayerCharset(meta,1,trainer)
  313. @sprites["player"]=TrainerWalkingCharSprite.new(filename,@viewport)
  314. charwidth=@sprites["player"].bitmap.width
  315. charheight=@sprites["player"].bitmap.height
  316. @sprites["player"].x = 56*2 - charwidth/8
  317. @sprites["player"].y = 56*2 - charheight/8
  318. @sprites["player"].src_rect = Rect.new(0,0,charwidth/4,charheight/4)
  319. end
  320. for i in 0...trainer.party.length
  321. @sprites["party#{i}"]=PokemonIconSprite.new(trainer.party[i],@viewport)
  322. @sprites["party#{i}"].z=99999
  323. @sprites["party#{i}"].x=151*2+33*2*(i&1)
  324. @sprites["party#{i}"].y=36*2+25*2*(i/2)
  325. end
  326. end
  327.  
  328. def pbChoose(commands)
  329. @sprites["cmdwindow"].commands=commands
  330. loop do
  331. Graphics.update
  332. Input.update
  333. pbUpdate
  334. if Input.trigger?(Input::C) && (!@saveselecting || @saveselecting==false)
  335. return @sprites["cmdwindow"].index
  336. end
  337. end
  338. end
  339.  
  340. def pbEndScene
  341. pbFadeOutAndHide(@sprites) #{ pbUpdate }
  342. pbDisposeSpriteHash(@sprites)
  343. @viewport.dispose
  344. @commands=nil
  345. @textviewport.dispose
  346. end
  347.  
  348. def pbCloseScene
  349. pbDisposeSpriteHash(@sprites)
  350. @viewport.dispose
  351. end
  352. end
  353.  
  354.  
  355.  
  356. class PokemonLoad
  357. def initialize(scene)
  358. @scene=scene
  359. end
  360.  
  361. def pbTryLoadFile(savefile)
  362. trainer=nil
  363. framecount=nil
  364. game_system=nil
  365. pokemonSystem=nil
  366. mapid=nil
  367. File.open(savefile){|f|
  368. trainer=Marshal.load(f)
  369. framecount=Marshal.load(f)
  370. game_system=Marshal.load(f)
  371. pokemonSystem=Marshal.load(f)
  372. mapid=Marshal.load(f)
  373. }
  374. raise "Corrupted file" if !trainer.is_a?(PokeBattle_Trainer)
  375. raise "Corrupted file" if !framecount.is_a?(Numeric)
  376. raise "Corrupted file" if !game_system.is_a?(Game_System)
  377. raise "Corrupted file" if !pokemonSystem.is_a?(PokemonSystem)
  378. raise "Corrupted file" if !mapid.is_a?(Numeric)
  379. return [trainer,framecount,game_system,pokemonSystem,mapid]
  380. end
  381.  
  382. def pbStartDeleteScreen
  383. savefile=RTP.getSaveFileName("Game.rxdata")
  384. @scene.pbStartDeleteScene
  385. @scene.pbStartScene2
  386. if safeExists?(savefile)
  387. if Kernel.pbConfirmMessageSerious(_INTL("Delete all saved data?"))
  388. Kernel.pbMessage(_INTL("Once data has been deleted, there is no way to recover it.\1"))
  389. if Kernel.pbConfirmMessageSerious(_INTL("Delete the saved data anyway?"))
  390. Kernel.pbMessage(_INTL("Deleting all data.\r\nDon't turn off the power.\\wtnp[0]"))
  391. begin; File.delete(savefile); rescue; end
  392. begin; File.delete(savefile+".bak"); rescue; end
  393. Kernel.pbMessage(_INTL("The save file was deleted."))
  394. end
  395. end
  396. else
  397. Kernel.pbMessage(_INTL("No save file was found."))
  398. end
  399. @scene.pbEndScene
  400. $scene=pbCallTitle
  401. end
  402.  
  403. def pbStartLoadScreen(savenum=0,auto=nil,savename="Save Slot 1")
  404. $PokemonTemp = PokemonTemp.new
  405. $game_temp = Game_Temp.new
  406. $game_system = Game_System.new
  407. $PokemonSystem = PokemonSystem.new if !$PokemonSystem
  408. cmdContinue = -1
  409. cmdNewGame = -1
  410. cmdChooseSaveFile =-1
  411. cmdOption = -1
  412. cmdLanguage = -1
  413. cmdMysteryGift = -1
  414. cmdDeleteSaveFile =-1
  415. commands = []
  416. if auto !=nil
  417. if savenum==0 || savenum==1
  418. savefile=RTP.getSaveFileName("Game_autosave.rxdata")
  419. else
  420. savefile = RTP.getSaveFileName("Game_"+savenum.to_s+"_autosave.rxdata")
  421. end
  422. elsif savenum==0 || savenum==1
  423. savefile=RTP.getSaveFileName("Game.rxdata")
  424. else
  425. savefile = RTP.getSaveFileName("Game_"+savenum.to_s+".rxdata")
  426. end
  427. FontInstaller.install
  428. data_system = pbLoadRxData("Data/System")
  429. mapfile=$RPGVX ? sprintf("Data/Map%03d.rvdata",data_system.start_map_id) :
  430. sprintf("Data/Map%03d.rxdata",data_system.start_map_id)
  431. if data_system.start_map_id==0 || !pbRgssExists?(mapfile)
  432. Kernel.pbMessage(_INTL("No starting position was set in the map editor.\1"))
  433. Kernel.pbMessage(_INTL("The game cannot continue."))
  434. @scene.pbEndScene
  435. $scene=nil
  436. return
  437. end
  438. if safeExists?(savefile)
  439. trainer=nil
  440. framecount=0
  441. mapid=0
  442. showContinue=false
  443. haveBackup=false
  444. begin
  445. trainer, framecount, $game_system, $PokemonSystem, mapid=pbTryLoadFile(savefile)
  446. showContinue=true
  447. rescue
  448. if safeExists?(savefile+".bak")
  449. begin
  450. trainer, framecount, $game_system, $PokemonSystem, mapid=pbTryLoadFile(savefile+".bak")
  451. haveBackup=true
  452. showContinue=true
  453. rescue
  454. end
  455. end
  456. if haveBackup
  457. Kernel.pbMessage(_INTL("The save file is corrupt. The previous save file will be loaded."))
  458. else
  459. Kernel.pbMessage(_INTL("The save file is corrupt, or is incompatible with this game."))
  460. if !Kernel.pbConfirmMessageSerious(_INTL("Do you want to delete the save file and start anew?"))
  461. raise "scss error - Corrupted or incompatible save file."
  462. end
  463. begin; File.delete(savefile); rescue; end
  464. begin; File.delete(savefile+".bak"); rescue; end
  465. $game_system=Game_System.new
  466. $PokemonSystem=PokemonSystem.new if !$PokemonSystem
  467. Kernel.pbMessage(_INTL("The save file was deleted."))
  468. end
  469. end
  470. if showContinue
  471. if !haveBackup
  472. begin; File.delete(savefile+".bak"); rescue; end
  473. end
  474. end
  475. commands[cmdContinue=commands.length]=_INTL("Continue") if showContinue
  476. commands[cmdNewGame=commands.length]=_INTL("New Game")
  477. commands[cmdChooseSaveFile=commands.length]=_INTL("Other Save Files")
  478. commands[cmdDeleteSaveFile=commands.length]=_INTL("Delete This Save File")
  479. commands[cmdMysteryGift=commands.length]=_INTL("Mystery Gift") if (trainer.mysterygiftaccess rescue false)
  480. commands[cmdOption=commands.length]=_INTL("Options")
  481. else
  482. commands[cmdNewGame=commands.length]=_INTL("New Game")
  483. commands[cmdChooseSaveFile=commands.length]=_INTL("Other Save Files")
  484. commands[cmdOption=commands.length]=_INTL("Options")
  485. end
  486. if LANGUAGES.length>=2
  487. commands[cmdLanguage=commands.length]=_INTL("Language")
  488. end
  489. @scene.pbStartScene(commands,showContinue,trainer,framecount,mapid)
  490. @scene.pbSetParty(trainer) if showContinue
  491. @scene.pbStartScene2
  492. @scene.pbDrawCurrentSaveFile(savename,auto)
  493. loop do
  494. command=@scene.pbChoose(commands)
  495. deleting=false
  496. if cmdDeleteSaveFile>=0 && command==cmdDeleteSaveFile
  497. if Kernel.pbConfirmMessageSerious(_INTL("Are you sure you want to delete this save file?"))
  498. if Kernel.pbConfirmMessageSerious(_INTL("All data will be lost. Confirm once more to proceed."))
  499. begin; File.delete(savefile); rescue; end
  500. begin; File.delete(savefile+".bak"); rescue; end
  501. deleting=true
  502. @scene.pbClearOverlay2
  503. @scene.pbEndScene
  504. return
  505. pbSetUpSystem(0,nil)
  506. scene=PokemonLoadScene.new
  507. screen=PokemonLoad.new(scene)
  508. screen.pbStartLoadScreen(0,nil)
  509. end
  510. end
  511. retry if deleting==false
  512. elsif cmdContinue>=0 && command==cmdContinue
  513. unless safeExists?(savefile)
  514. pbPlayBuzzerSE()
  515. next
  516. end
  517. @scene.pbEndScene
  518. metadata=nil
  519. File.open(savefile){|f|
  520. Marshal.load(f) # Trainer already loaded
  521. $Trainer = trainer
  522. Graphics.frame_count = Marshal.load(f)
  523. $game_system = Marshal.load(f)
  524. Marshal.load(f) # PokemonSystem already loaded
  525. Marshal.load(f) # Current map id no longer needed
  526. $game_switches = Marshal.load(f)
  527. $game_variables = Marshal.load(f)
  528. $game_self_switches = Marshal.load(f)
  529. $game_screen = Marshal.load(f)
  530. $MapFactory = Marshal.load(f)
  531. $game_map = $MapFactory.map
  532. $game_player = Marshal.load(f)
  533. $PokemonGlobal = Marshal.load(f)
  534. metadata = Marshal.load(f)
  535. $ItemData = readItemList("Data/items.dat")
  536. $PokemonBag = Marshal.load(f)
  537. $PokemonStorage = Marshal.load(f)
  538. magicNumberMatches=false
  539. if $data_system.respond_to?("magic_number")
  540. magicNumberMatches=($game_system.magic_number==$data_system.magic_number)
  541. else
  542. magicNumberMatches=($game_system.magic_number==$data_system.version_id)
  543. end
  544. if !magicNumberMatches || $PokemonGlobal.safesave
  545. if pbMapInterpreterRunning?
  546. pbMapInterpreter.setup(nil,0)
  547. end
  548. begin
  549. $MapFactory.setup($game_map.map_id) # calls setMapChanged
  550. rescue Errno::ENOENT
  551. if $DEBUG
  552. Kernel.pbMessage(_INTL("Map {1} was not found.",$game_map.map_id))
  553. map=pbWarpToMap()
  554. if map
  555. $MapFactory.setup(map[0])
  556. $game_player.moveto(map[1],map[2])
  557. else
  558. $game_map=nil
  559. $scene=nil
  560. return
  561. end
  562. else
  563. $game_map=nil
  564. $scene=nil
  565. Kernel.pbMessage(_INTL("The map was not found. The game cannot continue."))
  566. end
  567. end
  568. $game_player.center($game_player.x, $game_player.y)
  569. else
  570. $MapFactory.setMapChanged($game_map.map_id)
  571. end
  572. }
  573. if !$game_map.events # Map wasn't set up
  574. $game_map=nil
  575. $scene=nil
  576. Kernel.pbMessage(_INTL("The map is corrupt. The game cannot continue."))
  577. return
  578. end
  579. $PokemonMap=metadata
  580. $PokemonEncounters=PokemonEncounters.new
  581. $PokemonEncounters.setup($game_map.map_id)
  582. pbAutoplayOnSave
  583. $game_map.update
  584. $PokemonMap.updateMap
  585. auto=(auto==nil)?false:auto
  586. pbStoredLastPlayed($game_variables[99],auto)
  587. $scene = Scene_Map.new
  588. return
  589. elsif cmdNewGame>=0 && command==cmdNewGame
  590. @scene.pbEndScene
  591. if $game_map && $game_map.events
  592. for event in $game_map.events.values
  593. event.clear_starting
  594. end
  595. end
  596. $game_temp.common_event_id=0 if $game_temp
  597. $scene = Scene_Map.new
  598. Graphics.frame_count = 0
  599. $game_system = Game_System.new
  600. $game_switches = Game_Switches.new
  601. $game_variables = Game_Variables.new
  602. $game_self_switches = Game_SelfSwitches.new
  603. $game_screen = Game_Screen.new
  604. $game_player = Game_Player.new
  605. $ItemData = readItemList("Data/items.dat")
  606. $PokemonMap = PokemonMapMetadata.new
  607. $PokemonGlobal = PokemonGlobalMetadata.new
  608. $PokemonStorage = PokemonStorage.new
  609. $PokemonEncounters = PokemonEncounters.new
  610. $PokemonTemp.begunNewGame=true
  611. $data_system = pbLoadRxData("Data/System")
  612. $MapFactory = PokemonMapFactory.new($data_system.start_map_id) # calls setMapChanged
  613. $game_player.moveto($data_system.start_x, $data_system.start_y)
  614. $game_player.refresh
  615. $game_map.autoplay
  616. $game_map.update
  617. #find next available slot
  618. checksave=RTP.getSaveFileName("Game.rxdata")
  619. if !safeExists?(checksave)
  620. $game_variables[99]=0
  621. else
  622. j=2
  623. loop do
  624. checksave=RTP.getSaveFileName("Game_"+j.to_s+".rxdata")
  625. if !safeExists?(checksave)
  626. $game_variables[99]=j
  627. break
  628. end
  629. j+=1
  630. end
  631. end
  632. auto=(auto==nil)?false:auto
  633. pbStoredLastPlayed($game_variables[99],auto)
  634. return
  635. elsif cmdMysteryGift>=0 && command==cmdMysteryGift
  636. pbFadeOutIn(99999){
  637. trainer=pbDownloadMysteryGift(trainer)
  638. }
  639. elsif cmdChooseSaveFile>=0 && command==cmdChooseSaveFile
  640. cancelled=false
  641. saveslots=[]
  642. newsavecheck=RTP.getSaveFileName("Game.rxdata") #load first save file outside the loop, since a save number isn't involved
  643. newautosavecheck=RTP.getSaveFileName("Game_autosave.rxdata")
  644. if safeExists?(newsavecheck)
  645. hasauto=(safeExists?(newautosavecheck))?true:false
  646. if hasauto==true
  647. t=File.mtime(newautosavecheck) rescue pbGetTimeNow
  648. autosavetime=t.strftime("%c")
  649. else
  650. autosavetime=""
  651. end
  652. t=File.mtime(newsavecheck) rescue pbGetTimeNow
  653. savetime=t.strftime("%c")
  654. saveslots.push([1,"Save Slot 1",hasauto,true,savetime,autosavetime])
  655. elsif safeExists?(newautosavecheck)
  656. t=File.mtime(newautosavecheck) rescue pbGetTimeNow
  657. autosavetime=t.strftime("%c")
  658. savetime=""
  659. saveslots.push([1,"Save Slot 1",true,false,savetime,autosavetime])
  660. end
  661. i=2
  662. loop do
  663. newsavecheck=RTP.getSaveFileName("Game_"+i.to_s+".rxdata")
  664. newautosavecheck=RTP.getSaveFileName("Game_"+i.to_s+"_autosave.rxdata")
  665. if safeExists?(newsavecheck)
  666. t=File.mtime(newsavecheck) rescue pbGetTimeNow
  667. savetime=t.strftime("%c")
  668. hasauto=(safeExists?(newautosavecheck))?true:false
  669. if hasauto==true
  670. t=File.mtime(newautosavecheck) rescue pbGetTimeNow
  671. autosavetime=t.strftime("%c")
  672. else
  673. autosavetime=""
  674. end
  675. slotname=sprintf("Save Slot %d",i)
  676. saveslots.push([i,slotname,hasauto,true,savetime,autosavetime])
  677. #Kernel.pbMessage(_INTL("{1}",saveslots))
  678. elsif safeExists?(newautosavecheck)
  679. t=File.mtime(newautosavecheck) rescue pbGetTimeNow
  680. savetime=""
  681. autosavetime=t.strftime("%c")
  682. slotname=sprintf("Save Slot %d",i)
  683. saveslots.push([i,slotname,true,false,savetime,autosavetime])
  684. else #don't break quite yet, in case save file in middle was removed
  685. newi=(i+1)
  686. newsavecheck=RTP.getSaveFileName("Game_"+newi.to_s+".rxdata")
  687. newautosavecheck=RTP.getSaveFileName("Game_"+newi.to_s+"_autosave.rxdata")
  688. if safeExists?(newsavecheck)
  689. i=newi
  690. t=File.mtime(newsavecheck) rescue pbGetTimeNow
  691. savetime=t.strftime("%c")
  692. hasauto=(safeExists?(newautosavecheck))?true:false
  693. if hasauto==true
  694. t=File.mtime(newautosavecheck) rescue pbGetTimeNow
  695. autosavetime=t.strftime("%c")
  696. else
  697. autosavetime=""
  698. end
  699. slotname=sprintf("Save Slot %d",newi)
  700. saveslots.push([newi,slotname,hasauto,true,savetime,autosavetime])
  701. elsif safeExists?(newautosavecheck)
  702. i=newi
  703. t=File.mtime(newautosavecheck) rescue pbGetTimeNow
  704. autosavetime=t.strftime("%c")
  705. savetime=""
  706. slotname=sprintf("Save Slot %d",newi)
  707. saveslots.push([newi,slotname,true,false,savetime,autosavetime])
  708. else #give one extra slot space check
  709. newi+=1
  710. newsavecheck=RTP.getSaveFileName("Game_"+newi.to_s+".rxdata")
  711. newautosavecheck=RTP.getSaveFileName("Game_"+newi.to_s+"_autosave.rxdata")
  712. if safeExists?(newsavecheck)
  713. i=newi
  714. t=File.mtime(newsavecheck) rescue pbGetTimeNow
  715. savetime=t.strftime("%c")
  716. hasauto=(safeExists?(newautosavecheck))?true:false
  717. if hasauto==true
  718. t=File.mtime(newautosavecheck) rescue pbGetTimeNow
  719. autosavetime=t.strftime("%c")
  720. else
  721. autosavetime=""
  722. end
  723. slotname=sprintf("Save Slot %d",newi)
  724. saveslots.push([newi,slotname,hasauto,true,savetime,autosavetime])
  725. elsif safeExists?(newautosavecheck)
  726. i=newi
  727. t=File.mtime(newautosavecheck) rescue pbGetTimeNow
  728. autosavetime=t.strftime("%c")
  729. savetime=""
  730. slotname=sprintf("Save Slot %d",newi)
  731. saveslots.push([newi,slotname,true,false,savetime,autosavetime])
  732. else
  733. break
  734. end
  735. end
  736. end
  737. i+=1
  738. end
  739. if saveslots.length>=1
  740. for i in 1..21 #move the commands and other graphics
  741. @scene.pbMoveSprites(i*2)
  742. Graphics.update
  743. end
  744. @scene.pbDrawSaveCommands(saveslots)
  745. #@scene.pbDrawSaveText(saveslots)
  746. Graphics.update
  747. @selected=0
  748. loop do
  749. Input.update
  750. Graphics.update
  751. if Input.trigger?(Input::DOWN)
  752. #@scene.pbToggleSelecting
  753. if @selected==saveslots.length-1
  754. @selected=0
  755. else
  756. @selected+=1
  757. end
  758. @scene.pbMoveSaveSel(@selected)
  759. elsif Input.trigger?(Input::UP)
  760. if @selected==0
  761. @selected=saveslots.length-1
  762. else
  763. @selected-=1
  764. end
  765. @scene.pbMoveSaveSel(@selected)
  766. elsif Input.trigger?(Input::B)
  767. @scene.pbRemoveSaveCommands
  768. Graphics.update
  769. for i in 1..21 #move the commands and other graphics
  770. @scene.pbMoveSprites(i*-2)
  771. Graphics.update
  772. end
  773. @scene.pbToggleSelecting
  774. break
  775. elsif Input.trigger?(Input::C)
  776. @scene.pbRemoveSaveCommands
  777. if saveslots[@selected][2]==true && saveslots[@selected][3]==true
  778. @scene.pbRemoveSaveCommands
  779. Graphics.update
  780. @scene.pbChooseAutoSubFile(0,@selected)
  781. autoindex=0
  782. loop do
  783. Graphics.update
  784. Input.update
  785. if Input.trigger?(Input::LEFT)
  786. if autoindex==0
  787. autoindex=1
  788. @scene.pbChooseAutoSubFile(1,@selected)
  789. else
  790. autoindex=0
  791. @scene.pbChooseAutoSubFile(0,@selected)
  792. end
  793. elsif Input.trigger?(Input::RIGHT)
  794. if autoindex==1
  795. autoindex=0
  796. @scene.pbChooseAutoSubFile(0,@selected)
  797. else
  798. autoindex=1
  799. @scene.pbChooseAutoSubFile(1,@selected)
  800. end
  801. elsif Input.trigger?(Input::C)
  802. break
  803. end
  804. end
  805. auto=(autoindex==1)?true:nil
  806. tempsave=saveslots[@selected][0]
  807. @scene.pbEndScene
  808. pbSetUpSystem(tempsave,auto)
  809. scene=PokemonLoadScene.new
  810. screen=PokemonLoad.new(scene)
  811. screen.pbStartLoadScreen(tempsave,auto,saveslots[@selected][1])
  812. return
  813. elsif saveslots[@selected][2]==true
  814. tempsave=saveslots[@selected][0]
  815. @scene.pbEndScene
  816. pbSetUpSystem(tempsave,true)
  817. scene=PokemonLoadScene.new
  818. screen=PokemonLoad.new(scene)
  819. screen.pbStartLoadScreen(tempsave,true,saveslots[@selected][1])
  820. return
  821. else
  822. tempsave=saveslots[@selected][0]
  823. @scene.pbEndScene
  824. pbSetUpSystem(tempsave,nil)
  825. scene=PokemonLoadScene.new
  826. screen=PokemonLoad.new(scene)
  827. screen.pbStartLoadScreen(tempsave,nil,saveslots[@selected][1])
  828. return
  829. end
  830. end
  831. end
  832.  
  833. else
  834. Kernel.pbMessage(_INTL("You don't have any other save files"))
  835. end
  836. elsif cmdOption>=0 && command==cmdOption
  837. scene=PokemonOptionScene.new
  838. screen=PokemonOption.new(scene)
  839. pbFadeOutIn(99999) { screen.pbStartScreen }
  840. elsif cmdLanguage>=0 && command==cmdLanguage
  841. @scene.pbEndScene
  842. $PokemonSystem.language=pbChooseLanguage
  843. pbLoadMessages("Data/"+LANGUAGES[$PokemonSystem.language][1])
  844. savedata=[]
  845. if safeExists?(savefile)
  846. File.open(savefile,"rb"){|f|
  847. 15.times { savedata.push(Marshal.load(f)) }
  848. }
  849. savedata[3]=$PokemonSystem
  850. begin
  851. File.open(RTP.getSaveFileName("Game.rxdata"),"wb"){|f|
  852. 15.times {|i| Marshal.dump(savedata[i],f) }
  853. }
  854. rescue; end
  855. end
  856. $scene=pbCallTitle
  857. return
  858. end
  859. end
  860. @scene.pbEndScene
  861. return
  862. end
  863. end
  864.  
  865.  
  866.  
  867. ################################################################################
  868. # Font installer
  869. ################################################################################
  870. module FontInstaller
  871. # filenames of fonts to be installed
  872. Filenames = [
  873. 'pkmnem.ttf',
  874. 'pkmnemn.ttf',
  875. 'pkmnems.ttf',
  876. 'pkmnrs.ttf',
  877. 'pkmndp.ttf',
  878. 'pkmnfl.ttf'
  879. ]
  880. # names (not filenames) of fonts to be installed
  881. Names = [
  882. 'Power Green',
  883. 'Power Green Narrow',
  884. 'Power Green Small',
  885. 'Power Red and Blue',
  886. 'Power Clear',
  887. 'Power Red and Green'
  888. ]
  889. # whether to notify player (via pop-up message) that fonts were installed
  890. Notify = true
  891. # location of fonts (relative to game folder)
  892. Source = 'Fonts/'
  893.  
  894. def self.getFontFolder
  895. fontfolder=MiniRegistry.get(MiniRegistry::HKEY_CURRENT_USER,
  896. "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders",
  897. "Fonts")
  898. return fontfolder+"\\" if fontfolder
  899. if ENV['SystemRoot']
  900. return ENV['SystemRoot'] + '\\Fonts\\'
  901. elsif ENV['windir']
  902. return ENV['windir'] + '\\Fonts\\'
  903. else
  904. return '\\Windows\\Fonts\\'
  905. end
  906. end
  907.  
  908. AFR = Win32API.new('gdi32', 'AddFontResource', ['P'], 'L')
  909. WPS = Win32API.new('kernel32', 'WriteProfileString', ['P'] * 3, 'L')
  910. SM = Win32API.new('user32', 'PostMessage', ['L'] * 4, 'L')
  911. WM_FONTCHANGE = 0x001D
  912. HWND_BROADCAST = 0xffff
  913.  
  914. def self.copy_file(src,dest)
  915. File.open(src, 'rb') {|r|
  916. File.open(dest, 'wb') {|w|
  917. while s = r.read(4096)
  918. w.write s
  919. end
  920. }
  921. }
  922. end
  923.  
  924. def self.pbResolveFont(name)
  925. RTP.eachPathFor(Source+name) {|file|
  926. return file if safeExists?(file)
  927. }
  928. return Source+name
  929. end
  930.  
  931. def self.install
  932. success = []
  933. # Check if all fonts already exist
  934. filesExist=true
  935. fontsExist=true
  936. dest=self.getFontFolder()
  937. for i in 0...Names.size
  938. if !safeExists?(dest + Filenames[i])
  939. filesExist=false
  940. end
  941. if !Font.exist?(Names[i])
  942. fontsExist=false
  943. end
  944. end
  945. return if filesExist
  946. # Check if all source fonts exist
  947. exist=true
  948. for i in 0...Names.size
  949. if !RTP.exists?(Source + Filenames[i])
  950. exist=false
  951. break
  952. end
  953. end
  954. return if !exist # Exit if not all source fonts exist
  955. Kernel.pbMessage(_INTL("One or more fonts used in this game do not exist on the system.\1"))
  956. Kernel.pbMessage(_INTL("The game can be played, but the look of the game's text will not be optimal.\1"))
  957. failed=false
  958. for i in 0...Filenames.size
  959. f = Filenames[i]
  960. if safeExists?(dest + f) && !Font.exist?(Names[i])
  961. File.delete(dest + f) rescue nil
  962. end
  963. # check if already installed...
  964. if not safeExists?(dest + f)
  965. # check to ensure font is in specified location...
  966. if RTP.exists?(Source + f)
  967. # copy file to fonts folder
  968. succeeded=false
  969. begin
  970. copy_file(pbResolveFont(f), dest + f)
  971. # add font resource
  972. AFR.call(dest + f)
  973. # add entry to win.ini/registry
  974. WPS.call('Fonts', Names[i] + ' (TrueType)', f)
  975. succeeded=safeExists?(dest + f)
  976. rescue SystemCallError
  977. # failed
  978. succeeded=false
  979. end
  980. if succeeded
  981. success.push(Names[i])
  982. else
  983. failed=true
  984. end
  985. end
  986. else
  987. success.push(Names[i]) # assume success
  988. end
  989. end
  990. if success.length>0 # one or more fonts successfully installed
  991. SM.call(HWND_BROADCAST,WM_FONTCHANGE,0,0)
  992. if Notify
  993. fonts = ''
  994. success.each do |f|
  995. fonts << f << ', '
  996. end
  997. if failed
  998. Kernel.pbMessage(_INTL("Some of the fonts were successfully installed.\1"))
  999. Kernel.pbMessage(_INTL("To install the other fonts, copy the files in this game's Fonts folder to the Fonts folder in Control Panel."))
  1000. else
  1001. Kernel.pbMessage(_INTL("The fonts were successfully installed.\1"))
  1002. end
  1003. if Kernel.pbConfirmMessage(_INTL("Would you like to restart the game and apply the changes?"))
  1004. a = Thread.new { system('Game') }
  1005. exit
  1006. end
  1007. end
  1008. else
  1009. # No fonts were installed.
  1010. Kernel.pbMessage(_INTL("To install the necessary fonts, copy the files in this game's Fonts folder to the Fonts folder in Control Panel."))
  1011. end
  1012. end
  1013. end
  1014.  
  1015.  
  1016. def pbGetLastPlayed
  1017. info=[]
  1018. counter=0
  1019. text=File.open("LastSave.dat", 'rb')
  1020. #text.gsub!(/\r\n?/, "\n")
  1021. text.each_line do |line|
  1022. line.chomp
  1023. info.push(line) if counter<=1
  1024. counter = counter + 1
  1025. end
  1026. info[0]=info[0].to_i
  1027. info[0]+=1 if info[0]<1
  1028. return [info[0],info[1]]
  1029. end
  1030.  
  1031. def pbStoredLastPlayed(savenum,auto)
  1032. File.open("LastSave.dat", 'w'){ |file| file.write("#{savenum}")
  1033. file.write("\n")
  1034. file.write("#{auto.to_s}")}
  1035. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement