Advertisement
mej71

PokemonLoad

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