• Our software update is now concluded. You will need to reset your password to log in. In order to do this, you will have to click "Log in" in the top right corner and then "Forgot your password?".
  • Welcome to PokéCommunity! Register now and join one of the best fan communities on the 'net to talk Pokémon and more! We are not affiliated with The Pokémon Company or Nintendo.

taking script requests

Blizzy

me = Scripter.new("Noob")
492
Posts
19
Years
  • i'll be taking some little script requests.
    i'm doing this to get some better in scripting.

    things that i won't do:
    -Battle System
    -Bag
    -Save
    -Enter Hero Name(keyboard)
    (and all the other complicated scripts)

    i will do selectable windows
    (since that not so hard)
    big request are ignored.
    please be clear what you want.
    if images are included,
    please post them too.

    so give me a little request, and i'll do my best
    (i'm not sure if it belongs here)
     

    Neo Genesis

    The Wanderer
    238
    Posts
    19
    Years
  • Yeah sure. Just really a basic pokemon cms but it has a window at the bottom that explans what that function does. Like if you hightlight Pokedex it will say "a device that stores pokemon data".
     
    Last edited:

    Blizzy

    me = Scripter.new("Noob")
    492
    Posts
    19
    Years
  • it's done :)
    and i've learned 1 thing.
    Code:
    alias

    just insert a new script, and put the following code in.
    it includes: Scene_Menu, Scene_Save, Scene_Load and Window_Savefile.
    note, i didn't test the saving very good.
    when you got an error, please send a pm

    Code:
    class Game_Temp
      alias initialize_old initalize
      def initialize
        $menu = 1
        initialize_old
      end
    end
    
    class Window_Command < Window_Selectable
      attr_reader  :commands
    end
    
    class Scene_Menu
      #-----------------------------------------------------------------
      # initialize menu
      #-----------------------------------------------------------------
      def initialize(menu_index = 0)
        @menu_index = menu_index
      end
      #--------------------------------------------------------------------------
      def main
        #command window options
        s1 = "Bag"
        s2 = $game_party.actors[0].name
        s3 = "Save"
        s4 = "Options"
        s5 = "Exit"
        s6 = "Pokemon"
        s7 = "Pokedex"
        if $menu == 3
          commands = [s7, s6,s1, s2, s3, s4, s5]
          y = 60
        end
        if $menu == 2
          commands = [s6, s1, s2, s3, s4, s5]
          y = 80
       end
       if $menu == 1
          commands = [s1,s2,s3,s4,s5]
          y = 100
       end
      
      if $game_system.save_disabled
        commands.delete!("Save")
      end
      @command_window = Window_Command.new(160, commands)
      @command_window.index = @menu_index
      @command_window.x = 560 - @command_window.width / 2
      @command_window.y = y
      if $game_party.actors.size == 0
        @command_window.disable_item(0)
        @command_window.disable_item(1)
        @command_window.disable_item(2)
        @command_window.disable_item(3)
      end
      #displays map on background
      @spriteset = Spriteset_Map.new
      #time window
      @time = Window_Time.new
      #time window.x and .y
      @time.x = @time.y = 40
      
      @help = Window_Help.new
      @help.x = 40
      @help.y = 340
      @help.width = 640 - 80
      @help.height = 96
      @help.z = 999
      Graphics.transition
      loop do
        Graphics.update
        Input.update
        update
        if $scene != self
          break
        end
      end 
      Graphics.freeze
      #erases command window
      @command_window.dispose
      #erases time window
      @time.dispose
      #erases background
      @spriteset.dispose
      #erases help window
      @help.dispose
    end
    
    #--------------------------------------------------------------------------
    def update
      #update command window
      @command_window.update
      #updates playtime window
      @time.update
      #updates the background
      @spriteset.update
      #updates help window
      @help.update
      case @command_window.commands[@command_window.index]
      when "Bag"
        @help.set_text("A bag for storing items")
      when $game_party.actors[0].name
        @help.set_text("Check your money and other game date")
      when "Save"
        @help.set_text("Saves the game")
      when "Options"
        @help.set_text("Change various game settings")
      when "Exit"
        @help.set_text("Close the menu")
      when "Pokedex"
        @help.set_text("A device for recording Pokemon data")
      when "Pokemon"
        @help.set_text("Organize Pokemon that are in your party")
      end
      
      if @command_window.active
        update_command
        return
      end
      
    end
    #--------------------------------------------------------------------------
    def update_command
      if Input.trigger?(Input::B)
        $game_system.se_play($data_system.cancel_se)
        $scene = Scene_Map.new
        return
      end
        if Input.trigger?(Input::C)
         if $game_party.actors.size == 0 and @command_window.index < 4
           $game_system.se_play($data_system.buzzer_se)
           return
         end
         case @command_window.commands[@command_window.index]
         when "Bag"
           $game_system.se_play($data_system.decision_se)
           #Warp.new(1, 134, 16, -1)
           $scene = Scene_Map.new
         when $game_party.actors[0].name
           $game_system.se_play($data_system.decision_se)
           $scene = Scene_Map.new
         when "Save"
           if $game_system.save_disabled
             $game_system.se_play($data_system.buzzer_se)
             return
           end
           $game_system.se_play($data_system.decision_se)
           $scene = Scene_Save.new
         when "Options"
           $game_system.se_play($data_system.decision_se)
           $scene = Scene_Map.new
         when  "Exit"
           $game_system.se_play($data_system.decision_se)
           $scene = Scene_Map.new            
         when "Pokemon"
           $game_system.se_play($data_system.decision_se)
           $scene = Scene_Map.new
         when  "Pokedex"
           $game_system.se_play($data_system.decision_se)
           $scene = Scene_Map.new
         end # case
       end # conditional
     end # method
    end # class
    
    class Window_Time < Window_Base
     #--------------------------------------------------------------------------
     # ● initialize
     #--------------------------------------------------------------------------
     def initialize
       super(0, 0, 160, 96)
       self.contents = Bitmap.new(width - 32, height - 32)
       self.contents.font.name = $fontface
       self.contents.font.size = $fontsize
       self.contents
       refresh
     end
     #--------------------------------------------------------------------------
     # ● refresh
     #--------------------------------------------------------------------------
     def refresh
       self.contents.clear
       self.contents.font.color = system_color
       self.contents.draw_text(16, 0, 120, 32, "Local Time")
       text = Time.new.strftime("%I:%M:%S %p ")
       self.contents.font.color = normal_color
       self.contents.draw_text(0 - 4, 32, 120, 32, text, 2)
     end
     #--------------------------------------------------------------------------
     # ● update
     #--------------------------------------------------------------------------
     def update
       super
       refresh
       end
     end
    
    #==============================================================================
    # ■ Scene_Save
    #------------------------------------------------------------------------------
    #  セーブ画面の処理を行うクラスです。
    #==============================================================================
    
    class Scene_Save < Scene_File
      #--------------------------------------------------------------------------
      # ● オブジェクト初期化
      #--------------------------------------------------------------------------
      def initialize
        super("Which file do you want to save to?")
      end
      #--------------------------------------------------------------------------
      # ● 決定時の処理
      #--------------------------------------------------------------------------
      def on_decision(filename)
        # セーブ SE を演奏
        $game_system.se_play($data_system.save_se)
        # セーブデータの書き込み
        file = File.open(filename, "wb")
        write_save_data(file)
        file.close
        # イベントから呼び出されている場合
        if $game_temp.save_calling
          # セーブ呼び出しフラグをクリア
          $game_temp.save_calling = false
          # マップ画面に切り替え
          $scene = Scene_Map.new
          return
        end
        # メニュー画面に切り替え
        case $menu
        when 1
          $scene = Scene_Menu.new(2)
        when 2
          $scene = Scene_Menu.new(3)
        when 3
          $scene = Scene_Menu.new(4)
        end
      end
      #--------------------------------------------------------------------------
      # ● キャンセル時の処理
      #--------------------------------------------------------------------------
      def on_cancel
        # キャンセル SE を演奏
        $game_system.se_play($data_system.cancel_se)
        # イベントから呼び出されている場合
        if $game_temp.save_calling
          # セーブ呼び出しフラグをクリア
          $game_temp.save_calling = false
          # マップ画面に切り替え
          $scene = Scene_Map.new
          return
        end
        # メニュー画面に切り替え
        case $menu
        when 1
          $scene = Scene_Menu.new(2)
        when 2
          $scene = Scene_Menu.new(3)
        when 3
          $scene = Scene_Menu.new(4)
        end
      end
      #--------------------------------------------------------------------------
      # ● セーブデータの書き込み
      #     file : 書き込み用ファイルオブジェクト (オープン済み)
      #--------------------------------------------------------------------------
      def write_save_data(file)
        # セーブファイル描画用のキャラクターデータを作成
        characters = []
        for i in 0...$game_party.actors.size
          actor = $game_party.actors[i]
          characters.push([actor.character_name, actor.character_hue])
        end
        # セーブファイル描画用のキャラクターデータを書き込む
        Marshal.dump(characters, file)
        # プレイ時間計測用のフレームカウントを書き込む
        Marshal.dump(Graphics.frame_count, file)
        # セーブ回数を 1 増やす
        $game_system.save_count += 1
        # マジックナンバーを保存する
        # (エディタで保存するたびにランダムな値に書き換えられる)
        $game_system.magic_number = $data_system.magic_number
        # 各種ゲームオブジェクトを書き込む
        Marshal.dump($game_system, file)
        Marshal.dump($game_switches, file)
        Marshal.dump($game_variables, file)
        Marshal.dump($game_self_switches, file)
        Marshal.dump($game_screen, file)
        Marshal.dump($game_actors, file)
        Marshal.dump($game_party, file)
        Marshal.dump($game_troop, file)
        Marshal.dump($game_map, file)
        Marshal.dump($game_player, file)
        Marshal.dump($menu, file)
      end
    end
    
    #==============================================================================
    # ■ Scene_Load
    #------------------------------------------------------------------------------
    #  ロード画面の処理を行うクラスです。
    #==============================================================================
    
    class Scene_Load < Scene_File
      #--------------------------------------------------------------------------
      # ● オブジェクト初期化
      #--------------------------------------------------------------------------
      def initialize
        # テンポラリオブジェクトを再作成
        $game_temp = Game_Temp.new
        # タイムスタンプが最新のファイルを選択
        $game_temp.last_file_index = 0
        latest_time = Time.at(0)
        for i in 0..3
          filename = make_filename(i)
          if FileTest.exist?(filename)
            file = File.open(filename, "r")
            if file.mtime > latest_time
              latest_time = file.mtime
              $game_temp.last_file_index = i
            end
            file.close
          end
        end
        super("Which file do you wish to load from?")
      end
      #--------------------------------------------------------------------------
      # ● 決定時の処理
      #--------------------------------------------------------------------------
      def on_decision(filename)
        # ファイルが存在しない場合
        unless FileTest.exist?(filename)
          # ブザー SE を演奏
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        # ロード SE を演奏
        $game_system.se_play($data_system.load_se)
        # セーブデータの書き込み
        file = File.open(filename, "rb")
        read_save_data(file)
        file.close
        # BGM、BGS を復帰
        $game_system.bgm_play($game_system.playing_bgm)
        $game_system.bgs_play($game_system.playing_bgs)
        # マップを更新 (並列イベント実行)
        $game_map.update
        # マップ画面に切り替え
        $scene = Scene_Map.new
      end
      #--------------------------------------------------------------------------
      # ● キャンセル時の処理
      #--------------------------------------------------------------------------
      def on_cancel
        # キャンセル SE を演奏
        $game_system.se_play($data_system.cancel_se)
        # タイトル画面に切り替え
        $scene = Scene_Title.new
      end
      #--------------------------------------------------------------------------
      # ● セーブデータの読み込み
      #     file : 読み込み用ファイルオブジェクト (オープン済み)
      #--------------------------------------------------------------------------
      def read_save_data(file)
        # セーブファイル描画用のキャラクターデータを読み込む
        characters = Marshal.load(file)
        # プレイ時間計測用のフレームカウントを読み込む
        Graphics.frame_count = Marshal.load(file)
        # 各種ゲームオブジェクトを読み込む
        $game_system        = Marshal.load(file)
        $game_switches      = Marshal.load(file)
        $game_variables     = Marshal.load(file)
        $game_self_switches = Marshal.load(file)
        $game_screen        = Marshal.load(file)
        $game_actors        = Marshal.load(file)
        $game_party         = Marshal.load(file)
        $game_troop         = Marshal.load(file)
        $game_map           = Marshal.load(file)
        $game_player        = Marshal.load(file)
        $menu        = Marshal.load(file)
        # マジックナンバーがセーブ時と異なる場合
        # (エディタで編集が加えられている場合)
        if $game_system.magic_number != $data_system.magic_number
          # マップをリロード
          $game_map.setup($game_map.map_id)
          $game_player.center($game_player.x, $game_player.y)
        end
        # パーティメンバーをリフレッシュ
        $game_party.refresh
      end
    end
    
    #==============================================================================
    # ■ Window_SaveFile
    #------------------------------------------------------------------------------
    #  セーブ画面およびロード画面で表示する、セーブファイルのウィンドウです。
    #==============================================================================
    
    class Window_SaveFile < Window_Base
      #--------------------------------------------------------------------------
      # ● 公開インスタンス変数
      #--------------------------------------------------------------------------
      attr_reader   :filename                 # ファイル名
      attr_reader   :selected                 # 選択状態
      #--------------------------------------------------------------------------
      # ● オブジェクト初期化
      #     file_index : セーブファイルのインデックス (0~3)
      #     filename   : ファイル名
      #--------------------------------------------------------------------------
      def initialize(file_index, filename)
        super(0, 64 + file_index % 4 * 104, 640, 104)
        self.contents = Bitmap.new(width - 32, height - 32)
        self.contents.font.name = $fontface
        self.contents.font.size = $fontsize
        self.opacity = 255
        self.back_opacity = 255
        @file_index = file_index
        @filename = "Save#{@file_index + 1}.rxdata"
        @time_stamp = Time.at(0)
        @file_exist = FileTest.exist?(@filename)
        if @file_exist
          file = File.open(@filename, "r")
          @time_stamp = file.mtime
          @characters = Marshal.load(file)
          @frame_count = Marshal.load(file)
          @game_system = Marshal.load(file)
          @game_switches = Marshal.load(file)
          @game_variables = Marshal.load(file)
          @menu = Marshal.load(file)
          @total_sec = @frame_count / Graphics.frame_rate
          file.close
        end
        refresh
        @selected = false
      end
      #--------------------------------------------------------------------------
      # ● リフレッシュ
      #--------------------------------------------------------------------------
      def refresh
        self.contents.clear
        # ファイル番号を描画
        self.contents.font.color = normal_color
        name = "File #{@file_index + 1}"
        self.contents.draw_text(4, 0, 600, 32, name)
        @name_width = contents.text_size(name).width
        # セーブファイルが存在する場合
        if @file_exist
          # キャラクターを描画
          for i in [email protected]
            bitmap = RPG::Cache.character(@characters[i][0], @characters[i][1])
            cw = bitmap.rect.width / 4
            ch = bitmap.rect.height / 4
            src_rect = Rect.new(0, 0, cw, ch)
            x = 300 - @characters.size * 32 + i * 64 - cw / 2
            self.contents.blt(x, 68 - ch, bitmap, src_rect)
          end
          # プレイ時間を描画
          hour = @total_sec / 60 / 60
          min = @total_sec / 60 % 60
          sec = @total_sec % 60
          time_string = sprintf("%02d:%02d:%02d", hour, min, sec)
          self.contents.font.color = normal_color
          self.contents.draw_text(4, 8, 600, 32, time_string, 2)
          # タイムスタンプを描画
          self.contents.font.color = normal_color
          time_string = @time_stamp.strftime("%Y/%m/%d %H:%M")
          self.contents.draw_text(4, 40, 600, 32, time_string, 2)
        end
      end
      #--------------------------------------------------------------------------
      # ● 選択状態の設定
      #     selected : 新しい選択状態 (true=選択 false=非選択)
      #--------------------------------------------------------------------------
      def selected=(selected)
        @selected = selected
        update_cursor_rect
      end
      #--------------------------------------------------------------------------
      # ● カーソルの矩形更新
      #--------------------------------------------------------------------------
      def update_cursor_rect
        if @selected
          self.cursor_rect.set(0, 0, @name_width + 8, 32)
        else
          self.cursor_rect.empty
        end
      end
    end
    --edit--
    fixed "Marshal" spelling error

    fixed "Alias"
     
    Last edited:

    Peekimon

    Me = cat-aholic, Meowr
    1,671
    Posts
    19
    Years
  • Haven't tested it, tho:

    This might produce an error:

    @menu = Mashal.load(file)

    The "r" is missing.
     

    Blizzy

    me = Scripter.new("Noob")
    492
    Posts
    19
    Years
  • Peekimon said:
    Haven't tested it, tho:

    This might produce an error:

    @menu = Mashal.load(file)
    The "r" is missing.
    --edit--
    ok, i got that one fixed now.
    typo :dead:
     
    Last edited:

    Matt12345678

    The Famous N00b
    187
    Posts
    19
    Years
  • Menu Script

    -virtual- said:
    i'll be taking some little script requests.
    i'm doing this to get some better in scripting.

    things that i won't do:
    -Battle System
    -Bag
    -Save
    -Enter Hero Name(keyboard)
    (and all the other complicated scripts)

    i will do selectable windows
    (since that not so hard)
    big request are ignored.
    please be clear what you want.
    if images are included,
    please post them too.

    so give me a little request, and i'll do my best
    (i'm not sure if it belongs here)
    Can I have scripts for menus? If so, then can the first one have:
    Bag
    (Player Name)
    Save
    Options
    Exit

    Second one:
    Bag
    PokeGear
    (Player Name)
    Save
    Options
    Exit

    Third one:
    Pokemon
    Bag
    PokeGear
    (Player Name)
    Save
    Options
    Exit

    Fourth one:
    Pokedex
    Pokemon
    Bag
    PokeGear
    (Player Name)
    Save
    Options
    Exit

    And under each one, can it say what it does?

    Pokedex-
    A tool that records data on Pokemon
    Pokemon-
    View the Pokemon in your party
    Bag-
    View the Items in your bag
    PokeGear-
    A Device with a Cell Phone and Radio built in. Other devices
    may be downloaded
    (Player Name)-
    View your Trainer Card
    Save-
    Save your game
    Options-
    Change the game options
    Exit-
    Exit the menu

    OMG if you can do this, then u will pwn all! ;)
     

    Peekimon

    Me = cat-aholic, Meowr
    1,671
    Posts
    19
    Years
  • Find this:
    Code:
    when "Bag"
        @help.set_text("A bag for storing items")
      when $game_party.actors[0].name
        @help.set_text("Check your money and other game date")
      when "Save"
        @help.set_text("Saves the game")
      when "Options"
        @help.set_text("Change various game settings")
      when "Exit"
        @help.set_text("Close the menu")
      when "Pokedex"
        @help.set_text("A device for recording Pokemon data")
      when "Pokemon"
        @help.set_text("Organize Pokemon that are in your party")

    Edit the text in " ", that easy.
     

    Blizzy

    me = Scripter.new("Noob")
    492
    Posts
    19
    Years
  • Neo Genesis said:
    okay I got line 9 to work but now line 15 has an error.
    i found out the problem (already pm it).
    but here's the code, again.
    i will put it in the script above too.
    Code:
    class Game_Temp
      alias initialize_old initialize
      def initialize
        $menu = 1
        initialize_old
      end
    end
    if you don't know how to insert it, look in the code below

    and matt, here's your menu
    Code:
    class Game_Temp
      alias initialize_old initialize
      def initialize
        $menu = 1
        initialize_old
      end
    end
    
    class Window_Command < Window_Selectable
      attr_reader  :commands
    end
    
    class Scene_Menu
      #-----------------------------------------------------------------
      # initialize menu
      #-----------------------------------------------------------------
      def initialize(menu_index = 0)
        @menu_index = menu_index
      end
      #--------------------------------------------------------------------------
      def main
        #command window options
        s1 = "Bag"
        s2 = $game_party.actors[0].name
        s3 = "Save"
        s4 = "Options"
        s5 = "Exit"
        s6 = "Pokemon"
        s7 = "Pokedex"
        s8 = "PokeGear"
        if $menu == 1
          commands = [s1,s2,s3,s4,s5]
          y = 80
        end
        if $menu == 2
          commands = [s1,s8,s2,s3,s4,s5]
          y = 80
        end
        if $menu == 3
          commands = [s6,s1,s8,s2,s3,s4,s5]
          y = 60
        end
        if $menu == 4
          commands = [s7,s6,s1,s8,s2,s3,s4,s5]
          y = 40
        end
        
      if $game_system.save_disabled
        commands.delete!("Save")
      end
      @command_window = Window_Command.new(160, commands)
      @command_window.index = @menu_index
      @command_window.x = 560 - @command_window.width / 2 - 20
      @command_window.y = y
      if $game_party.actors.size == 0
        @command_window.disable_item(0)
        @command_window.disable_item(1)
        @command_window.disable_item(2)
        @command_window.disable_item(3)
      end
      #displays map on background
      @spriteset = Spriteset_Map.new
      #time window
      @time = Window_Time.new
      #time window.x and .y
      @time.x = @time.y = 40
      
      @help = Window_Help.new
      @help.x = 40
      @help.y = 356
      @help.width = 640 - 80
      @help.height = 96
      @help.z = 999
      Graphics.transition
      loop do
        Graphics.update
        Input.update
        update
        if $scene != self
          break
        end
      end 
      Graphics.freeze
      #erases command window
      @command_window.dispose
      #erases time window
      @time.dispose
      #erases background
      @spriteset.dispose
      #erases help window
      @help.dispose
    end
    
    #--------------------------------------------------------------------------
    def update
      #update command window
      @command_window.update
      #updates playtime window
      @time.update
      #updates the background
      @spriteset.update
      #updates help window
      @help.update
      case @command_window.commands[@command_window.index]
      when "Bag"
        @help.set_text("View the Items in your bag")
      when $game_party.actors[0].name
        @help.set_text("View your Trainer Card")
      when "Save"
        @help.set_text("Save your game")
      when "Options"
        @help.set_text("Change the game options")
      when "Exit"
        @help.set_text("Exit the menu")
      when "Pokedex"
        @help.set_text("A tool that records data on Pokemon")
      when "Pokemon"
        @help.set_text("View the Pokemon in your party")
      when "PokeGear"
        @help.set_text("A Device with a Cell Phone and Radio built in.")
      end
      
      if @command_window.active
        update_command
        return
      end
      
    end
    #--------------------------------------------------------------------------
    def update_command
      if Input.trigger?(Input::B)
        $game_system.se_play($data_system.cancel_se)
        $scene = Scene_Map.new
        return
      end
        if Input.trigger?(Input::C)
         if $game_party.actors.size == 0 and @command_window.index < 4
           $game_system.se_play($data_system.buzzer_se)
           return
         end
         case @command_window.commands[@command_window.index]
         when "Bag"
           $game_system.se_play($data_system.decision_se)
           #Warp.new(1, 134, 16, -1)
           $scene = Scene_Map.new
         when $game_party.actors[0].name
           $game_system.se_play($data_system.decision_se)
           $scene = Scene_Map.new
         when "Save"
           if $game_system.save_disabled
             $game_system.se_play($data_system.buzzer_se)
             return
           end
           $game_system.se_play($data_system.decision_se)
           $scene = Scene_Save.new
         when "Options"
           $game_system.se_play($data_system.decision_se)
           $scene = Scene_Map.new
         when  "Exit"
           $game_system.se_play($data_system.decision_se)
           $scene = Scene_Map.new            
         when "Pokemon"
           $game_system.se_play($data_system.decision_se)
           $scene = Scene_Map.new
         when  "Pokedex"
           $game_system.se_play($data_system.decision_se)
           $scene = Scene_Map.new
         end # case
       end # conditional
     end # method
    end # class
    
    class Window_Time < Window_Base
     #--------------------------------------------------------------------------
     # ● initialize
     #--------------------------------------------------------------------------
     def initialize
       super(0, 0, 160, 96)
       self.contents = Bitmap.new(width - 32, height - 32)
       self.contents.font.name = $fontface
       self.contents.font.size = $fontsize
       self.contents
       refresh
     end
     #--------------------------------------------------------------------------
     # ● refresh
     #--------------------------------------------------------------------------
     def refresh
       self.contents.clear
       self.contents.font.color = system_color
       self.contents.draw_text(16, 0, 120, 32, "Local Time")
       text = Time.new.strftime("%I:%M:%S %p ")
       self.contents.font.color = normal_color
       self.contents.draw_text(0 - 4, 32, 120, 32, text, 2)
     end
     #--------------------------------------------------------------------------
     # ● update
     #--------------------------------------------------------------------------
     def update
       super
       refresh
       end
     end
    
    #==============================================================================
    # ■ Scene_Save
    #------------------------------------------------------------------------------
    #  セーブ画面の処理を行うクラスです。
    #==============================================================================
    
    class Scene_Save < Scene_File
      #--------------------------------------------------------------------------
      # ● オブジェクト初期化
      #--------------------------------------------------------------------------
      def initialize
        super("Which file do you want to save to?")
      end
      #--------------------------------------------------------------------------
      # ● 決定時の処理
      #--------------------------------------------------------------------------
      def on_decision(filename)
        # セーブ SE を演奏
        $game_system.se_play($data_system.save_se)
        # セーブデータの書き込み
        file = File.open(filename, "wb")
        write_save_data(file)
        file.close
        # イベントから呼び出されている場合
        if $game_temp.save_calling
          # セーブ呼び出しフラグをクリア
          $game_temp.save_calling = false
          # マップ画面に切り替え
          $scene = Scene_Map.new
          return
        end
        # メニュー画面に切り替え
        case $menu
        when 1
          $scene = Scene_Menu.new(2)
        when 2
          $scene = Scene_Menu.new(3)
        when 3
          $scene = Scene_Menu.new(4)
        end
      end
      #--------------------------------------------------------------------------
      # ● キャンセル時の処理
      #--------------------------------------------------------------------------
      def on_cancel
        # キャンセル SE を演奏
        $game_system.se_play($data_system.cancel_se)
        # イベントから呼び出されている場合
        if $game_temp.save_calling
          # セーブ呼び出しフラグをクリア
          $game_temp.save_calling = false
          # マップ画面に切り替え
          $scene = Scene_Map.new
          return
        end
        # メニュー画面に切り替え
        case $menu
        when 1
          $scene = Scene_Menu.new(2)
        when 2
          $scene = Scene_Menu.new(3)
        when 3
          $scene = Scene_Menu.new(4)
        end
      end
      #--------------------------------------------------------------------------
      # ● セーブデータの書き込み
      #     file : 書き込み用ファイルオブジェクト (オープン済み)
      #--------------------------------------------------------------------------
      def write_save_data(file)
        # セーブファイル描画用のキャラクターデータを作成
        characters = []
        for i in 0...$game_party.actors.size
          actor = $game_party.actors[i]
          characters.push([actor.character_name, actor.character_hue])
        end
        # セーブファイル描画用のキャラクターデータを書き込む
        Marshal.dump(characters, file)
        # プレイ時間計測用のフレームカウントを書き込む
        Marshal.dump(Graphics.frame_count, file)
        # セーブ回数を 1 増やす
        $game_system.save_count += 1
        # マジックナンバーを保存する
        # (エディタで保存するたびにランダムな値に書き換えられる)
        $game_system.magic_number = $data_system.magic_number
        # 各種ゲームオブジェクトを書き込む
        Marshal.dump($game_system, file)
        Marshal.dump($game_switches, file)
        Marshal.dump($game_variables, file)
        Marshal.dump($game_self_switches, file)
        Marshal.dump($game_screen, file)
        Marshal.dump($game_actors, file)
        Marshal.dump($game_party, file)
        Marshal.dump($game_troop, file)
        Marshal.dump($game_map, file)
        Marshal.dump($game_player, file)
        Marshal.dump($menu, file)
      end
    end
    
    #==============================================================================
    # ■ Scene_Load
    #------------------------------------------------------------------------------
    #  ロード画面の処理を行うクラスです。
    #==============================================================================
    
    class Scene_Load < Scene_File
      #--------------------------------------------------------------------------
      # ● オブジェクト初期化
      #--------------------------------------------------------------------------
      def initialize
        # テンポラリオブジェクトを再作成
        $game_temp = Game_Temp.new
        # タイムスタンプが最新のファイルを選択
        $game_temp.last_file_index = 0
        latest_time = Time.at(0)
        for i in 0..3
          filename = make_filename(i)
          if FileTest.exist?(filename)
            file = File.open(filename, "r")
            if file.mtime > latest_time
              latest_time = file.mtime
              $game_temp.last_file_index = i
            end
            file.close
          end
        end
        super("Which file do you wish to load from?")
      end
      #--------------------------------------------------------------------------
      # ● 決定時の処理
      #--------------------------------------------------------------------------
      def on_decision(filename)
        # ファイルが存在しない場合
        unless FileTest.exist?(filename)
          # ブザー SE を演奏
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        # ロード SE を演奏
        $game_system.se_play($data_system.load_se)
        # セーブデータの書き込み
        file = File.open(filename, "rb")
        read_save_data(file)
        file.close
        # BGM、BGS を復帰
        $game_system.bgm_play($game_system.playing_bgm)
        $game_system.bgs_play($game_system.playing_bgs)
        # マップを更新 (並列イベント実行)
        $game_map.update
        # マップ画面に切り替え
        $scene = Scene_Map.new
      end
      #--------------------------------------------------------------------------
      # ● キャンセル時の処理
      #--------------------------------------------------------------------------
      def on_cancel
        # キャンセル SE を演奏
        $game_system.se_play($data_system.cancel_se)
        # タイトル画面に切り替え
        $scene = Scene_Title.new
      end
      #--------------------------------------------------------------------------
      # ● セーブデータの読み込み
      #     file : 読み込み用ファイルオブジェクト (オープン済み)
      #--------------------------------------------------------------------------
      def read_save_data(file)
        # セーブファイル描画用のキャラクターデータを読み込む
        characters = Marshal.load(file)
        # プレイ時間計測用のフレームカウントを読み込む
        Graphics.frame_count = Marshal.load(file)
        # 各種ゲームオブジェクトを読み込む
        $game_system        = Marshal.load(file)
        $game_switches      = Marshal.load(file)
        $game_variables     = Marshal.load(file)
        $game_self_switches = Marshal.load(file)
        $game_screen        = Marshal.load(file)
        $game_actors        = Marshal.load(file)
        $game_party         = Marshal.load(file)
        $game_troop         = Marshal.load(file)
        $game_map           = Marshal.load(file)
        $game_player        = Marshal.load(file)
        $menu        = Marshal.load(file)
        # マジックナンバーがセーブ時と異なる場合
        # (エディタで編集が加えられている場合)
        if $game_system.magic_number != $data_system.magic_number
          # マップをリロード
          $game_map.setup($game_map.map_id)
          $game_player.center($game_player.x, $game_player.y)
        end
        # パーティメンバーをリフレッシュ
        $game_party.refresh
      end
    end
    
    #==============================================================================
    # ■ Window_SaveFile
    #------------------------------------------------------------------------------
    #  セーブ画面およびロード画面で表示する、セーブファイルのウィンドウです。
    #==============================================================================
    
    class Window_SaveFile < Window_Base
      #--------------------------------------------------------------------------
      # ● 公開インスタンス変数
      #--------------------------------------------------------------------------
      attr_reader   :filename                 # ファイル名
      attr_reader   :selected                 # 選択状態
      #--------------------------------------------------------------------------
      # ● オブジェクト初期化
      #     file_index : セーブファイルのインデックス (0~3)
      #     filename   : ファイル名
      #--------------------------------------------------------------------------
      def initialize(file_index, filename)
        super(0, 64 + file_index % 4 * 104, 640, 104)
        self.contents = Bitmap.new(width - 32, height - 32)
        self.contents.font.name = $fontface
        self.contents.font.size = $fontsize
        self.opacity = 255
        self.back_opacity = 255
        @file_index = file_index
        @filename = "Save#{@file_index + 1}.rxdata"
        @time_stamp = Time.at(0)
        @file_exist = FileTest.exist?(@filename)
        if @file_exist
          file = File.open(@filename, "r")
          @time_stamp = file.mtime
          @characters = Marshal.load(file)
          @frame_count = Marshal.load(file)
          @game_system = Marshal.load(file)
          @game_switches = Marshal.load(file)
          @game_variables = Marshal.load(file)
          @menu = Marshal.load(file)
          @total_sec = @frame_count / Graphics.frame_rate
          file.close
        end
        refresh
        @selected = false
      end
      #--------------------------------------------------------------------------
      # ● リフレッシュ
      #--------------------------------------------------------------------------
      def refresh
        self.contents.clear
        # ファイル番号を描画
        self.contents.font.color = normal_color
        name = "File #{@file_index + 1}"
        self.contents.draw_text(4, 0, 600, 32, name)
        @name_width = contents.text_size(name).width
        # セーブファイルが存在する場合
        if @file_exist
          # キャラクターを描画
          for i in [email protected]
            bitmap = RPG::Cache.character(@characters[i][0], @characters[i][1])
            cw = bitmap.rect.width / 4
            ch = bitmap.rect.height / 4
            src_rect = Rect.new(0, 0, cw, ch)
            x = 300 - @characters.size * 32 + i * 64 - cw / 2
            self.contents.blt(x, 68 - ch, bitmap, src_rect)
          end
          # プレイ時間を描画
          hour = @total_sec / 60 / 60
          min = @total_sec / 60 % 60
          sec = @total_sec % 60
          time_string = sprintf("%02d:%02d:%02d", hour, min, sec)
          self.contents.font.color = normal_color
          self.contents.draw_text(4, 8, 600, 32, time_string, 2)
          # タイムスタンプを描画
          self.contents.font.color = normal_color
          time_string = @time_stamp.strftime("%Y/%m/%d %H:%M")
          self.contents.draw_text(4, 40, 600, 32, time_string, 2)
        end
      end
      #--------------------------------------------------------------------------
      # ● 選択状態の設定
      #     selected : 新しい選択状態 (true=選択 false=非選択)
      #--------------------------------------------------------------------------
      def selected=(selected)
        @selected = selected
        update_cursor_rect
      end
      #--------------------------------------------------------------------------
      # ● カーソルの矩形更新
      #--------------------------------------------------------------------------
      def update_cursor_rect
        if @selected
          self.cursor_rect.set(0, 0, @name_width + 8, 32)
        else
          self.cursor_rect.empty
        end
      end
    end
    Peekimon said:
    Matt... uh, virtual already made that one... Look up.
    peekimon, please spare me your enthusiasm(good spelled?)
    i made this thread so people can request it. :)
    ps. i'm not mad at you :P
     
    Last edited:

    Peekimon

    Me = cat-aholic, Meowr
    1,671
    Posts
    19
    Years
  • peekimon, please spare me your enthusiasm(good spelled?)
    i made this thread so people can request it.
    ps. i'm not mad at you

    Ooh, sorry ^_^;

    Although, I have nothing to request. I'd like to say, that your RGSS Coding is superb! Keep it up!
     

    Blizzy

    me = Scripter.new("Noob")
    492
    Posts
    19
    Years
  • Peekimon said:
    Ooh, sorry ^_^;

    Although, I have nothing to request. I'd like to say, that your RGSS Coding is superb! Keep it up!
    i'm getting better and better :)
    if no one has any request, i'll be making a trainercard
    but i don't have the resources for that one.
     

    Jeff_PKLight

    RMXP User
    535
    Posts
    19
    Years
  • Well... there is one thing I would like to ask. :) Like many pokemon games, how do you make the options thing, like right after the press start screen at the beginning of the game?
     
    Back
    Top