Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 20 von 21

Thema: [XP] Zelda Starter Kit - Habe da ein paar Fragen

  1. #1

    [XP] Zelda Starter Kit - Habe da ein paar Fragen

    Hallo.

    Einige hier kennen doch bestimmt das Project Zelda Engine Starter Kit oder?
    Da wollte ich mal gerne etwas fragen.

    Frage 1. Das Save-Script
    Da ich Hilfe von Stardust bekommen habe ist diese Frage erledigt

    """"
    Frage 2.
    Wie kann man dem Starter Kit ein Laufgeräusche Skript hinzufügen?
    Wenn ich ein fertiges nehme dann zeigt der mir nur Errors an.
    Es soll vom Terrain abhängig sein welcher Soundeffekt abgespielt werden soll.
    Ist es auch möglich die Terrainmenge zu erhöhen?
    """"

    Frage 3. Reitskript
    Das mit dem Script zum Reiten hat sich erledigt
    Ich werde das Pferd nun doch nicht mehr einbauen
    da ich das für 2D Zelda Games nicht typisch finde.

    """"

    Frage 4.
    Gibt es ein vernünftiges Text Script?
    Ich möchte größere Schrift in mein Spiel einbauen da die jetzige zu
    klein ist bei den Grafiken die ich verwende.

    Die Schrift soll beim vergrößern """nicht""" weichgezeichnet sein.

    Wäre toll wenn mir bei den Dingen jemand helfen könnte.

    Wenn ihr euch meine Projektpräsentation mal anschauen wollt dann
    klickt auf den Link in meiner Signatur

  2. #2
    Also das Auslesen der Variablen & Switches aus Spielständen ist mit Sicherheit möglich. Das habe ich bei meinem eigenen auch Projekt eingebaut, dabei könnte ich dir helfen.

    Zur zweiten Frage: Was für eine Fehlermeldung erscheint denn genau?

    Es gibt mehrere Vehicle-Scripts, z.B. dieses hier:
    Script
    Ansonsten hilft dir Google sicher weiter

  3. #3
    hey ho,

    zu 3:
    zunächst mal: ich habe keine ahnung vom Zelda Starter Kid, aber im Prinzip verändert es nichts an der grundlegenen Bedienung des RPG , oder?

    denn dann ließe sich ein Reitsystem ins Spiel einbauen ganz ohne Scripts, nur durch mehr oder weniger simples Anwenden von den grundeigenen Funktionen des RPG Maker XPs.

    musst nur die Epona Charaktergrafiken haben und Charaktergrafiken mit Link, der auf Epona reitet.

    sry, dass ich jez nicht weiter ausführe, wie du das mit dem Reiten anstellen musst, aber mir fehlt gerade etwas die Zeit zum ausführlichen Schreiben.
    Bestimmt findet sich aber irgendwo ein Tutorial dazu... hab nur gerade keinen "Link" parat (haha... Wortwitz ).

    Aber vlcht kommst du ja selber drauf, wie du das anstellen kannst, ansonsten kannst du mir ja vlcht ne PM schicken. Vlcht mach ich sogar selber n Tutorial... mal schauen, was der Zeitplan zulässt.

    mfg

  4. #4
    Hey endlich wird mir vernünftig geantwortet.
    In anderen Foren bin ich gescheitert.

    @thebigF
    Wie ich das Leitsysteme hinbekommen soll werde ich nie wissen da ich kein scripter bin. Wäre toll wenn du mir da helfen könntest.

    @stardust

    Zu 3.
    Ich werde mir das Script mal ansehen.

    Zu 1.
    Das wäre wirklich der Hammer wenn du mir da helfen könntest. Das würde mich ein ganzes Stück weiterbringen.

    Zu 2.
    Kann ich dir imo nicht zeigen.
    Bin gerade mobil mit n Handy online.

    Zu 3.

  5. #5
    hey ho,

    wie gesagt, du musst nicht scripten können und brauchst kein Skript eventuell.
    Ich kann auch nicht scripten^^

    Könntest du das Reitsystem wie du es haben möchtest etwas genauer beschreiben? wie genau soll das Reitsystem aussehen? Wie in Zelda OoT?
    Mit Karroten verfüttern? Soll das Pferd von überall aus herbeirufbar sein?

    mit normalen Events lässt sich im RPG Maker zumindest ein Pferd bereitbar machen.
    Auch was das verschnellern mit Karrotten angeht, müsste das mit normalen Events noch machbar sein.

  6. #6
    Also was das herbeirufen angeht.
    Ich bau ein Ocarinascript ein. (Weiß aber noch nicht ob es eine Ocarina oder ein anderes Instrument wird)
    Damit wird dann halt Epona gerufen und es wird eingestellt auf welchen Maps das Pferd herbeirufbar ist oder nicht.

    Ja es sollte am besten so wie in Ocarina of Time aufgebaut sein.
    Und man sollte das Bogenschießen vom Pferd nicht vergessen.

  7. #7
    Man kann das meiste durchaus mit Events machen, nur gehen vor allem die komplexen Sachen mit Scripts viel einfacher und komfortabler

    Nun ich weiss nicht genau, was das Starter-Kit an den Standardscripten überschreibt. Es ist wohl das Beste, wenn du mir einen Downloadlink zu dem Starter-Kit oder direkt zu deinem Projekt schickst, dann kann ich mir die Sache ansehen.

  8. #8
    Mein Projekt gebe ich nicht heraus tut mir leid.
    Aber so groß an den Scripten was geändert habe ich nicht.
    Ich hab nur das Auto Font Install Script gelöscht weil das ohne
    Administratorrechten nicht funktioniert und die meisten Leute
    sowas nicht wissen.
    Und ich hab die Schriftart geändert aber das ist ja normal.

    Aber sonst ist alles wie im Starter Kit.
    Hier der Link

    Project Zelda Engine StarterKit

  9. #9
    Schon in Ordnung, es ging auch mit dem Starter-Kit

    Also mit dem hier werden die Rubine im Besitz sowie die Herzcontainer angezeigt. Wenn du die Variablen so wie im Starter-Kit belassen hast, sollte es funktionieren.

    Code:
    #==============================================================================
    # ¦ New/Load Game Enhanced
    #------------------------------------------------------------------------------
    #  Additions by stardust
    #==============================================================================
    
    SAVES_MAX = 3
    SAVE_PICTURE = "choose_save"
    STARTING_HEARTS = 3
    
    class Game_Temp
      attr_accessor :name_fileproc
      alias new_initialize initialize
      def initialize
        new_initialize
        @name_fileproc = ""
      end
    end
    
    class Game_System
      attr_accessor :newgame_switch
      attr_accessor :played_bgm
      attr_accessor :played_bgs
      attr_accessor :save_slot
      alias new_initialize initialize
      def initialize
        new_initialize
        @newgame_switch = false
        @played_bgm = ""
        played_bgs = ""
        @save_slot = ""
      end
    end
    
    #==============================================================================
    # ¦ Window_NameEdit
    #------------------------------------------------------------------------------
    #  ???????????????????????
    #==============================================================================
    
    class Window_NameEdit < Window_Base
      def refresh
        self.contents.clear
        @charset_index = 0 if @charset_index == nil
        # ?????
        name_array = @name.split(//)
        for i in 0...@max_char
          c = name_array[i]
          if c == nil
            c = "_"
          end
          x = 840 - @max_char * 14 + i * 28
          self.contents.draw_text_outline(x, 32, 28, 32, c, 1)
        end
        # ?????????
        bitmap = RPG::Cache.character(@actor.character_name, @actor.character_hue)
        cw = bitmap.rect.width / 9.3
        ch = bitmap.rect.height / 4
        src_rect = Rect.new(@charset_index*120, 0, cw, ch)
        self.contents.blt(840 - @max_char * 14 - 40 - (cw/2), 68 - ch, bitmap, src_rect)
      end
      
      def charset_index(index)
        @charset_index = index
        refresh
      end
    end
    
    #==============================================================================
    # ¦ Scene_Name
    #------------------------------------------------------------------------------
    #  ??????????????????
    #==============================================================================
    
    class Scene_Name
      #--------------------------------------------------------------------------
      # ? ?????
      #--------------------------------------------------------------------------
      def main
        #-------------------------------
        # Animated Background Setup
        #-------------------------------
        
        @back = Sprite.new
        #@sprite.bitmap = RPG::Cache.title($data_system.title_name)
        @backgroundList = ["Titlescreen1"]
        @backgroundGameFrameCount = 0
        # Number of game frames per background frame.
        @backgroundG_BFrameCount = 3.4
        @back.bitmap = RPG::Cache.title(@backgroundList[0])
        
        
        @sprite = Sprite.new
        @sprite.bitmap = RPG::Cache.title($data_system.title_name)
        # ???????
        @actor = $game_actors[$game_temp.name_actor_id]
        # ????????
        @edit_window = Window_NameEdit.new(@actor, $game_temp.name_max_char)
        @input_window = Window_NameInput.new
        # ?????????
        Graphics.transition
        # ??????
        loop do
          # ????????
          Graphics.update
          # ???????
          Input.update
          # ??????
          update
          # ????????????????
          if $scene != self
            break
          end
        end
        # ?????????
        Graphics.freeze
        # ????????
        @sprite.dispose
        @back.dispose
        @edit_window.dispose
        @input_window.dispose
      end
      #--------------------------------------------------------------------------
      # ? ??????
      #--------------------------------------------------------------------------
      def update
        # ????????
        @edit_window.update
        @input_window.update
        @backgroundGameFrameCount = @backgroundGameFrameCount + 1
        if @backgroundGameFrameCount >= @backgroundG_BFrameCount
            @backgroundGameFrameCount = 0
            # Add current background frame to the end
            @backgroundList = @backgroundList << @backgroundList[0]
            # and drop it from the first position
            @backgroundList.delete_at(0)
            @sprite.bitmap = RPG::Cache.title(@backgroundList[0])
          end
        # B ??????????
        if Input.repeat?(Input::B)
          # ??????? 0 ???
          if @edit_window.index == 0
            return
          end
          # ????? SE ???
          $game_system.se_play($data_system.cancel_se)
          # ?????
          @edit_window.back
          return
        end
        # C ??????????
        if Input.trigger?(Input::C)
          # ??????? [??] ???
          if @input_window.character == nil
            # ???????
            if @edit_window.name == ""
              # ???????????
              @edit_window.restore_default
              # ???????
              if @edit_window.name == ""
                # ??? SE ???
                $game_system.se_play($data_system.buzzer_se)
                return
              end
              # ?? SE ???
              $game_system.se_play($data_system.decision_se)
              return
            end
            # ??????????
            @actor.name = @edit_window.name
            # ?? SE ???
            $game_system.se_play($data_system.decision_se)
            # ??????????
            #--------------------------------------------------------
            # Things After this has been edited to fit the new system
            #--------------------------------------------------------
          
            $game_party.setup_starting_members
            $game_map.setup($data_system.start_map_id)
            $game_player.moveto($data_system.start_x, $data_system.start_y)
            $game_player.refresh
            $game_map.autoplay
            $game_map.update
            
            $game_variables[8] = STARTING_HEARTS*2
            $game_variables[41] = STARTING_HEARTS
            $game_variables[42] = 0
            $game_variables[50] = 0
            
            file = $game_temp.name_fileproc
            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(Time.new, file)
            Marshal.dump(characters, file)
            Marshal.dump(Graphics.frame_count, file)
            $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_party, file)
            Marshal.dump($game_self_switches, file)
            Marshal.dump($game_screen, file)
            Marshal.dump($game_actors, file)
            Marshal.dump($game_troop, file)
            Marshal.dump($game_map, file)
            Marshal.dump($game_player, file)
            file.close
            $game_party.remove_actor(1)
            $scene = Scene_Map.new
            $game_temp.name_calling = false
            #--------------------------------------------------------
            # Edits ends here
            #--------------------------------------------------------
            return
          end
          # ????????????
          if @edit_window.index == $game_temp.name_max_char
            # ??? SE ???
            $game_system.se_play($data_system.buzzer_se)
            return
          end
          # ???????
          if @input_window.character == ""
            # ??? SE ???
            $game_system.se_play($data_system.buzzer_se)
            return
          end
            # ?? SE ???
            $game_system.se_play($data_system.decision_se)
            # ?????
            @edit_window.add(@input_window.character)
            return
          end
        @wait = 3 if @wait == nil or @wait == 0
        @charset_index = 0 if @charset_index == nil or @charset_index == 6
        @wait -= 1
        return if @wait > 0
        @charset_index += 1
        @edit_window.charset_index(@charset_index)
      end
    end
    
    
    
    
    #==============================================================================
    # ¦ Window_SaveFile
    #------------------------------------------------------------------------------
    #  ???????????????????????????????????
    #==============================================================================
    
    class Window_NewLoadFile < Window_Base
      #--------------------------------------------------------------------------
      # ? ??????????
      #--------------------------------------------------------------------------
      attr_reader   :filename                 # ?????
      attr_reader   :selected                 # ????
      #--------------------------------------------------------------------------
      # ? ?????????
      #     file_index : ?????????????? (0~3)
      #     filename   : ?????
      #--------------------------------------------------------------------------
      def initialize(file_index, filename)
        super(50, 64 + file_index % 4 * 104 + (12*file_index) + 12, 540, 104)
        self.contents = Bitmap.new(width - 32, height - 32)
        self.contents.font.name = $defaultfonttype  # "File" (File #) window font
        self.contents.font.size = $defaultfontsize
        @charset_index = 0
        @file_index = file_index
        @filename = "Save#{@file_index + 1}.sav"
        @time_stamp = Time.at(0)
        @file_exist = FileTest.exist?(@filename)
        @yp = 12
        if @file_exist
          File.delete(@filename) if File.stat(@filename).size == 0
          @file_exist = FileTest.exist?(@filename)
          if @file_exist
            file = File.open(@filename, "rb")
            @time_stamp = Marshal.load(file)
            @characters = Marshal.load(file)
            @frame_count = Marshal.load(file)
            @game_system = Marshal.load(file)
            @game_switches = Marshal.load(file)
            @game_variables = Marshal.load(file)
            @game_party = Marshal.load(file)
            @total_sec = @frame_count / Graphics.frame_rate
            file.close
          end
        end
        refresh
        @selected = false
      end
      #--------------------------------------------------------------------------
      # ? ??????
      #--------------------------------------------------------------------------
      def refresh
        self.contents.clear
        # ?????????
        self.contents.font.color = normal_color
        if @file_index == SAVES_MAX
          @exit = RPG::Cache.picture("exit")
          self.z = 0
          self.y = 390
          src_rect = Rect.new(0, 0, @exit.rect.width, @exit.rect.height)
          self.contents.blt(self.x + 8, 64 - @exit.rect.height, @exit, src_rect)
          self.opacity = 0 
        end
        name = ""
        name = @game_party.actors[0].name if @file_exist
        self.contents.draw_text_outline(4, 0, 600, 32, name)
        @name_width = contents.text_size(name).width
        # ??????????????
        if @file_exist
          for i in 0...@characters.size
            bitmap = RPG::Cache.character(@characters[i][0], @characters[i][1])
            cw = bitmap.rect.width / 9.3
            ch = bitmap.rect.height / 4
            src_rect = Rect.new(@charset_index*120, 0, cw, ch)
            x = 105 - @characters.size * 120 + i * 64 - cw / 2
            self.contents.blt(x+35, 63 - ch, bitmap, src_rect)
            heart_display(x+78, 83-ch)
          end
          # Rubine
          self.contents.draw_text_outline(80, 16, 600, 32, sprintf("000",$game_variables[53].to_s))
          # Zeit
          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_outline(4, 8, 600, 32, time_string, 2)
          # Datum
          self.contents.font.color = normal_color
          time_string = @time_stamp.strftime("%Y / %m/ %d  %H:%M")
          self.contents.draw_text_outline(self.width-self.contents.text_size(time_string).width-32, 40, self.contents.text_size(time_string).width, 32, time_string, 0)
        else
          @name_width = contents.text_size("New Game").width
          self.contents.draw_text_outline(4, 0, 600, 32, "New Game") if self.opacity != 0
        end
      end
      def heart_display(x, y)
        @x = x
        @y = y
        
        @link_heart = @game_variables[8]
        @link_maxheart = @game_variables[41]
        
        if @link_heart == 1
          insert_halfheart
        elsif @link_heart >= 2
          insert_fullheart
        end
        if @link_heart <= 2
          insert_emptyheart
        elsif @link_heart == 3
          insert_halfheart
        elsif @link_heart >= 4
          insert_fullheart
        end
        if @link_maxheart >= 3
          if @link_heart <= 4
            insert_emptyheart
          elsif @link_heart == 5
            insert_halfheart
          elsif @link_heart >= 6
            insert_fullheart
          end
        end
        if @link_maxheart >= 4
          if @link_heart <= 6
            insert_emptyheart
          elsif @link_heart == 7
            insert_halfheart
          elsif @link_heart >= 8
            insert_fullheart
          end
        end
        if @link_maxheart >= 5
          if @link_heart <= 8
            insert_emptyheart
          elsif @link_heart == 9
            insert_halfheart
          elsif @link_heart >= 10
            insert_fullheart
          end
        end
        if @link_maxheart >= 6
          if @link_heart <= 10
            insert_emptyheart
          elsif @link_heart == 11
            insert_halfheart
          elsif @link_heart >= 12
            insert_fullheart
          end
        end
        if @link_maxheart >= 7
          if @link_heart <= 12
            insert_emptyheart
          elsif @link_heart == 13
            insert_halfheart
          elsif @link_heart >= 14
            insert_fullheart
          end
        end
        if @link_maxheart >= 8
          if @link_heart <= 14
            insert_emptyheart
          elsif @link_heart == 15
            insert_halfheart
          elsif @link_heart >= 16
            insert_fullheart
          end
        end
        if @link_maxheart >= 9
          if @link_heart <= 16
            insert_emptyheart
          elsif @link_heart == 17
            insert_halfheart
          elsif @link_heart >= 18
            insert_fullheart
          end
        end
        if @link_maxheart >= 10
          if @link_heart <= 18
            insert_emptyheart
          elsif @link_heart == 19
            insert_halfheart
          elsif @link_heart >= 20
            insert_fullheart
          end
        end
        if @link_maxheart >= 11
          @y += 16
          @x = x
          if @link_heart <= 20
            insert_emptyheart
          elsif @link_heart == 21
            insert_halfheart
          elsif @link_heart >= 22
            insert_fullheart
          end
        end
        if @link_maxheart >= 12
          if @link_heart <= 22
            insert_emptyheart
          elsif @link_heart == 23
            insert_halfheart
          elsif @link_heart >= 24
            insert_fullheart
          end
        end
        if @link_maxheart >= 13
          if @link_heart <= 24
            insert_emptyheart
          elsif @link_heart == 25
            insert_halfheart
          elsif @link_heart >= 26
            insert_fullheart
          end
        end
        if @link_maxheart >= 14
          if @link_heart <= 26
            insert_emptyheart
          elsif @link_heart == 27
            insert_halfheart
          elsif @link_heart >= 28
            insert_fullheart
          end
        end
        if @link_maxheart >= 15
          if @link_heart <= 28
            insert_emptyheart
          elsif @link_heart == 29
            insert_halfheart
          elsif @link_heart >= 30
            insert_fullheart
          end
        end
        if @link_maxheart >= 16
          if @link_heart <= 30
            insert_emptyheart
          elsif @link_heart == 31
            insert_halfheart
          elsif @link_heart >= 32
            insert_fullheart
          end
        end
        if @link_maxheart >= 17
          if @link_heart <= 32
            insert_emptyheart
          elsif @link_heart == 33
            insert_halfheart
          elsif @link_heart >= 34
            insert_fullheart
          end
        end
        if @link_maxheart >= 18
          if @link_heart <= 34
            insert_emptyheart
          elsif @link_heart == 35
            insert_halfheart
          elsif @link_heart >= 36
            insert_fullheart
          end
        end
        if @link_maxheart >= 19
          if @link_heart <= 36
            insert_emptyheart
          elsif @link_heart == 37
            insert_halfheart
          elsif @link_heart >= 38
            insert_fullheart
          end
        end
        if @link_maxheart >= 20
          if @link_heart <= 38
            insert_emptyheart
          elsif @link_heart == 39
            insert_halfheart
          elsif @link_heart >= 40
            insert_fullheart
          end
        end  end
      def insert_fullheart
        bitmap = RPG::Cache.picture("FullHeart")
        cw = bitmap.width
        ch = bitmap.height
        src_rect = Rect.new(0, 0, cw, ch)
        self.contents.blt((@x - cw / 2) + 68, 38, bitmap, src_rect)
        @x += cw
      end
      
      def insert_halfheart
        bitmap = RPG::Cache.picture("HalfHeart")
        cw = bitmap.width
        ch = bitmap.height
        src_rect = Rect.new(0, 0, cw, ch)
        self.contents.blt((@x - cw / 2) + 68, 38, bitmap, src_rect)
        @x += cw
      end
      
      def insert_emptyheart
        bitmap = RPG::Cache.picture("EmptyHeart")
        cw = bitmap.width
        ch = bitmap.height
        src_rect = Rect.new(0, 0, cw, ch)
        self.contents.blt((@x - cw / 2) + 68, 38, bitmap, src_rect)
        @x += cw
      end
      #--------------------------------------------------------------------------
      # ? ???????
      #     selected : ??????? (true=?? false=???)
      #--------------------------------------------------------------------------
      def selected=(selected)
        @selected = selected
        update_cursor_rect
      end
      def charset_index(index)
        @charset_index = index
        refresh
      end
      #--------------------------------------------------------------------------
      # ? ?????????
      #--------------------------------------------------------------------------
      def update_cursor_rect
        if @selected
          if @file_index == SAVES_MAX
            self.cursor_rect.set(self.x + 7, 63 - @exit.rect.height, @exit.rect.width+2, @exit.rect.height+2)
          else
            self.cursor_rect.set(0, 0, @name_width + 8, 32)
          end
        else
          self.cursor_rect.empty
        end
      end
    end
    
    
    
    
    
    #==============================================================================
    # ¦ Scene_File
    #------------------------------------------------------------------------------
    #  ????????????????????????
    #==============================================================================
    
    class Scene_NewLoadFile
      #--------------------------------------------------------------------------
      # ? ?????????
      #     help_text : ????????????????
      #--------------------------------------------------------------------------
      def initialize(help_text)
        @help_text = help_text
      end
      #--------------------------------------------------------------------------
      # ? ?????
      #--------------------------------------------------------------------------
      def main
        
        $game_party.setup_starting_members
        
        #-------------------------------
        # Animated Background Setup
        #-------------------------------
        
        @back = Sprite.new
        #@sprite.bitmap = RPG::Cache.title($data_system.title_name)
        @backgroundList = ["SaveScreen1","SaveScreen1","SaveScreen1",
        "SaveScreen1","SaveScreen1","SaveScreen1","SaveScreen1","SaveScreen1",
        "SaveScreen1","SaveScreen1","SaveScreen1","SaveScreen1","SaveScreen1",
        "SaveScreen2","SaveScreen3","SaveScreen4","SaveScreen5","SaveScreen6",
        "SaveScreen6","SaveScreen5","SaveScreen4","SaveScreen3","SaveScreen2",
        "SaveScreen1","SaveScreen1","SaveScreen1","SaveScreen1","SaveScreen1",
        "SaveScreen1","SaveScreen1","SaveScreen1","SaveScreen1","SaveScreen1",]
        @backgroundGameFrameCount = 0
        # Number of game frames per background frame.
        @backgroundG_BFrameCount = 3.4
        @back.bitmap = RPG::Cache.title(@backgroundList[0])
            
        @sprite = Sprite.new
        @sprite.bitmap = RPG::Cache.title($data_system.title_name)
        # ???????????
        @save_sprite = Sprite.new
        @save_sprite.bitmap = RPG::Cache.title(SAVE_PICTURE)
        @save_sprite.x = 0
        @save_sprite.y = 0
        # ???????????????
        @savefile_windows = []
        for i in 0..SAVES_MAX
          @savefile_windows.push(Window_NewLoadFile.new(i, make_filename(i)))
        end
        # ??????????????
        @file_index = $game_temp.last_file_index
        @savefile_windows[@file_index].selected = true
        # ?????????
        Graphics.transition
        # ??????
        loop do
          # ????????
          Graphics.update
          # ???????
          Input.update
          # ??????
          update
          # ????????????????
          if $scene != self
            break
          end
        end
        # ?????????
        Graphics.freeze
        # ????????
        @sprite.dispose
        @back.dispose
        @save_sprite.dispose
        for i in @savefile_windows
          i.dispose
        end
      end
      #--------------------------------------------------------------------------
      # ? ??????
      #--------------------------------------------------------------------------
      def update
        @backgroundGameFrameCount = @backgroundGameFrameCount + 1
        if @backgroundGameFrameCount >= @backgroundG_BFrameCount
            @backgroundGameFrameCount = 0
            # Add current background frame to the end
            @backgroundList = @backgroundList << @backgroundList[0]
            # and drop it from the first position
            @backgroundList.delete_at(0)
            @sprite.bitmap = RPG::Cache.title(@backgroundList[0])
          end
        for i in @savefile_windows
          i.update
        end
        # ????????
        @save_sprite.update
        # C ??????????
        if Input.trigger?(Input::C)
          if @file_index == SAVES_MAX
            $scene = nil
          else
            $game_system.se_play($data_system.decision_se)
            if FileTest.exist?(make_filename(@file_index))
              on_decision(make_filename(@file_index))
              $game_temp.last_file_index = @file_index
            else
              $game_system.save_slot = make_filename(@file_index)
              file = File.new(make_filename(@file_index), "wb")
              on_new(file)
              $game_temp.last_file_index = @file_index
            end
          end
        end
        # B ??????????
        if Input.trigger?(Input::B)
          # ???? on_cancel (??????) ???
          on_cancel
          return
        end
        # ??????????????
        if Input.repeat?(Input::DOWN)
          # ????????????????????????
          # ?????????? 3 ??????
          if Input.trigger?(Input::DOWN) or @file_index < 3
            # ???? SE ???
            $game_system.se_play($data_system.cursor_se)
            # ?????????
            @savefile_windows[@file_index].selected = false
            @file_index = (@file_index + 1) % 4
            @savefile_windows[@file_index].selected = true
            return
          end
        end
        # ??????????????
        if Input.repeat?(Input::UP)
          # ????????????????????????
          # ?????????? 0 ???????
          if Input.trigger?(Input::UP) or @file_index > 0
            # ???? SE ???
            $game_system.se_play($data_system.cursor_se)
            # ?????????
            @savefile_windows[@file_index].selected = false
            @file_index = (@file_index + 3) % 4
            @savefile_windows[@file_index].selected = true
            return
          end
        end
        @wait = 3 if @wait == nil or @wait == 0
        @charset_index = 0 if @charset_index == nil or @charset_index == 6
        @wait -= 1
        return if @wait > 0
        @charset_index += 1
        for i in 0..@savefile_windows.size-1
          @savefile_windows[i].charset_index(@charset_index)
          next
        end
      end
      #--------------------------------------------------------------------------
      # ? ????????
      #     file_index : ?????????????? (0~3)
      #--------------------------------------------------------------------------
      def make_filename(file_index)
        return "Save#{file_index + 1}.sav"
      end
    end
    
    
    
    
    class Scene_NewLoad < Scene_NewLoadFile
      def initialize
        $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, "rb")
            if file.mtime > latest_time
              latest_time = file.mtime
              $game_temp.last_file_index = i
            end
            file.close
          end
        end
        super("Load from which file")
      end
    
      def on_new(file)
        
        $game_map.setup($data_system.start_map_id)
        
        $game_system.newgame_switch = true
        $game_temp.name_fileproc = file
        $game_temp.name_calling = true
        $game_temp.name_actor_id = 1
        $game_temp.name_max_char = 8
        $scene = Scene_Name.new
      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, $game_system.newgame_switch)
        file.close
        Audio.bgm_stop
        $game_system.bgm_play($game_system.playing_bgm) if !$game_system.newgame_switch
        $game_system.bgs_play($game_system.playing_bgs) if !$game_system.newgame_switch
        $game_map.autoplay
        # ?????? (????????)
        $game_map.update
        $game_party.remove_actor(1) if $game_system.newgame_switch
        # ?????????
        $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, newgame)
        if !newgame
          Audio.bgm_stop
          # ?????????????????????????
          time = Marshal.load(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_party         = Marshal.load(file)
          $game_self_switches = Marshal.load(file)
          $game_screen        = Marshal.load(file)
          $game_actors        = Marshal.load(file)
          $game_troop         = Marshal.load(file)
          $game_map           = Marshal.load(file)
          $game_player        = 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)
            $game_player.refresh
          end
        else
          characters = []
          for i in 0...$game_party.actors.size
            actor = $game_party.actors[i]
            characters.push([actor.character_name, actor.character_hue])
          end
          time = Time.new
          # ??????????????????????
          Graphics.frame_count = 0
          # ????????????????
          $game_system        = Game_System.new
          $game_switches      = Game_Switches.new
          $game_variables     = Game_Variables.new
          $game_party         = Game_Party.new
          $game_self_switches = Game_SelfSwitches.new
          $game_screen        = Game_Screen.new
          $game_actors        = Game_Actors.new
          $game_troop         = Game_Troop.new
          $game_map           = Game_Map.new
          $game_player        = Game_Player.new
          #$game_party.setup_starting_members
          $game_map.setup($data_system.start_map_id)
          $game_player.moveto($data_system.start_x, $data_system.start_y)
          $game_player.refresh
        end
        # ???????????????????
        # (?????????????????)
        # ???????????????
        $game_party.refresh
      end
    end

  10. #10
    Und wie soll ich die anzeigen?
    Bei mir zeigt der beim starten nur Datum, Uhrzeit, Linkcharanimation.
    Herzen sehe ich keine, Rubine auch nicht und was fehlt sind die
    Artefakte die er anzeigen soll.

    Kann man die da irgendwie einfügen in das Script?

  11. #11
    Du musst das New/Load Game-Script einfach durch dieses ersetzen.

    Das mit den Artefakten ist nicht in dem Script drinn. Wie viele Artefakte soll es denn geben?

  12. #12
    Es sind insgesamt 9 Artefakte.
    Und sie sollen als Picture angezeigt werden.
    Die Anzeige für Datum und Uhrzeit soll weg weil dort die
    Artefakte in der Reihe angezeigt werden sollen.
    Außerdem finde ich die Datum/Uhrzeitanzeige nicht
    unbedingt wichtig bei Zelda Spielen.

    Dann habe ich ein Problem mit der Herzanzeige.
    Die geht nur bis 10 Herzen.
    Wenn ich mehr Herzcontainer habe als 10 dann werden
    die übrigen nicht angezeigt.
    Es soll so angezeigt werden wie im HUD also 2 Reihen mit jeweils 10 Herzen.
    Die Rubinanzeige soll dann neben den Herzen über der jetzigen Datum/Uhrzeitanzeige sein. Und vor der Anzahl soll ebenfalls ein kleines Picture angezeigt werden.

    Und ich habe den LinkChar gewechselt und wenn er den Link Char dort anzeigt dann nur mit 2 Animationssequenzen.

  13. #13
    Das lässt sich schon einbauen. Allerdings komme ich zurzeit nicht oft zum makern und muss auch mein eigenes Projekt vorantreiben. Übernächste Woche sollte sich die Lage wieder beruhigt haben, dann kann ich dir das Script gerne anpassen

  14. #14

  15. #15

  16. #16
    Irgendwo ist die Standartgröße (18?) gespeichert. Ich finde dies imo leider nicht. Wenn ich mich richtig entsinne, wurde der Wert mit der Schriftart in Main gespeichert, dem ist aber nicht so.

    €dit: In Main einfügen:
    Code (Ruby):
    $defaultfontsize = $fontsize = Font.default_size = 18


    Google » RPG Maker XP Schrift » erstes Ergebnis » Hier reingepostet ^,^

    Geändert von SMWma (18.09.2010 um 22:34 Uhr)

  17. #17
    Hi SkyLink,
    ich hab mir mal aus neugir dein Project Zelda Engine StarterKit für den rmXP runtergeladen und ich muss sagen das die Sprites (Chars, Chipsets etc.) sehr gut konvertiert wurden.

    Ich gehe mal davon aus, dass du die Sprites aus dem SNES Spiel gerippt hast und sie dann rmXP tauglich konvertiert hast.

    Wärst du vielleicht so freundlich mir zu sagen womit du die SNES Sprites für den rmXP konvertiert hast?
    Gab es da ein bestimmtes Tool?

    Mit freundlichen Grüßen
    Mongkey

  18. #18

  19. #19
    Ich habe das Script entsprechend angepasst:
    Code:
    #==============================================================================
    # ¦ New/Load Game Enhanced
    #------------------------------------------------------------------------------
    #  Additions by stardust
    #   - Herzanzeige
    #   - Artefakte
    #   - Rubin & Icon
    #   - Div. Anpassungen
    #==============================================================================
    
    #Einstellungen-----------------------------------------------------------------
    SAVES_MAX = 3
    SAVE_PICTURE = "choose_save"
    STARTING_HEARTS = 3
    NEWGAME_TEXT = "Neues Spiel"
    
    #Artefakt-Switches
    ARTEFAKT01_SWITCH = 151
    ARTEFAKT02_SWITCH = 152
    ARTEFAKT03_SWITCH = 153
    ARTEFAKT04_SWITCH = 154
    ARTEFAKT05_SWITCH = 155
    ARTEFAKT06_SWITCH = 156
    ARTEFAKT07_SWITCH = 157
    ARTEFAKT08_SWITCH = 158
    ARTEFAKT09_SWITCH = 159
    
    #------------------------------------------------------------------------------
    
    class Game_Temp
      attr_accessor :name_fileproc
      alias new_initialize initialize
      def initialize
        new_initialize
        @name_fileproc = ""
      end
    end
    
    class Game_System
      attr_accessor :newgame_switch
      attr_accessor :played_bgm
      attr_accessor :played_bgs
      attr_accessor :save_slot
      alias new_initialize initialize
      def initialize
        new_initialize
        @newgame_switch = false
        @played_bgm = ""
        played_bgs = ""
        @save_slot = ""
      end
    end
    
    #==============================================================================
    # ¦ Window_NameEdit
    #------------------------------------------------------------------------------
    #  ???????????????????????
    #==============================================================================
    
    class Window_NameEdit < Window_Base
      def refresh
        self.contents.clear
        @charset_index = 0 if @charset_index == nil
        # ?????
        name_array = @name.split(//)
        for i in 0...@max_char
          c = name_array[i]
          if c == nil
            c = "_"
          end
          x = 840 - @max_char * 14 + i * 28
          self.contents.draw_text_outline(x, 32, 28, 32, c, 1)
        end
        # ?????????
        bitmap = RPG::Cache.character(@actor.character_name, @actor.character_hue)
        cw = bitmap.rect.width / 9.3
        ch = bitmap.rect.height / 4
        src_rect = Rect.new(@charset_index*120, 0, cw, ch)
        self.contents.blt(840 - @max_char * 14 - 40 - (cw/2), 68 - ch, bitmap, src_rect)
      end
      
      def charset_index(index)
        @charset_index = index
        refresh
      end
    end
    
    #==============================================================================
    # ¦ Scene_Name
    #------------------------------------------------------------------------------
    #  ??????????????????
    #==============================================================================
    
    class Scene_Name
      #--------------------------------------------------------------------------
      # ? ?????
      #--------------------------------------------------------------------------
      def main
        #-------------------------------
        # Animated Background Setup
        #-------------------------------
        
        @back = Sprite.new
        #@sprite.bitmap = RPG::Cache.title($data_system.title_name)
        @backgroundList = ["Titlescreen1"]
        @backgroundGameFrameCount = 0
        # Number of game frames per background frame.
        @backgroundG_BFrameCount = 3.4
        @back.bitmap = RPG::Cache.title(@backgroundList[0])
        
        
        @sprite = Sprite.new
        @sprite.bitmap = RPG::Cache.title($data_system.title_name)
        # ???????
        @actor = $game_actors[$game_temp.name_actor_id]
        # ????????
        @edit_window = Window_NameEdit.new(@actor, $game_temp.name_max_char)
        @input_window = Window_NameInput.new
        # ?????????
        Graphics.transition
        # ??????
        loop do
          # ????????
          Graphics.update
          # ???????
          Input.update
          # ??????
          update
          # ????????????????
          if $scene != self
            break
          end
        end
        # ?????????
        Graphics.freeze
        # ????????
        @sprite.dispose
        @back.dispose
        @edit_window.dispose
        @input_window.dispose
      end
      #--------------------------------------------------------------------------
      # ? ??????
      #--------------------------------------------------------------------------
      def update
        # ????????
        @edit_window.update
        @input_window.update
        @backgroundGameFrameCount = @backgroundGameFrameCount + 1
        if @backgroundGameFrameCount >= @backgroundG_BFrameCount
            @backgroundGameFrameCount = 0
            # Add current background frame to the end
            @backgroundList = @backgroundList << @backgroundList[0]
            # and drop it from the first position
            @backgroundList.delete_at(0)
            @sprite.bitmap = RPG::Cache.title(@backgroundList[0])
          end
        # B ??????????
        if Input.repeat?(Input::B)
          # ??????? 0 ???
          if @edit_window.index == 0
            return
          end
          # ????? SE ???
          $game_system.se_play($data_system.cancel_se)
          # ?????
          @edit_window.back
          return
        end
        # C ??????????
        if Input.trigger?(Input::C)
          # ??????? [??] ???
          if @input_window.character == nil
            # ???????
            if @edit_window.name == ""
              # ???????????
              @edit_window.restore_default
              # ???????
              if @edit_window.name == ""
                # ??? SE ???
                $game_system.se_play($data_system.buzzer_se)
                return
              end
              # ?? SE ???
              $game_system.se_play($data_system.decision_se)
              return
            end
            # ??????????
            @actor.name = @edit_window.name
            # ?? SE ???
            $game_system.se_play($data_system.decision_se)
            # ??????????
            #--------------------------------------------------------
            # Things After this has been edited to fit the new system
            #--------------------------------------------------------
          
            $game_party.setup_starting_members
            $game_map.setup($data_system.start_map_id)
            $game_player.moveto($data_system.start_x, $data_system.start_y)
            $game_player.refresh
            $game_map.autoplay
            $game_map.update
            
            $game_variables[8] = STARTING_HEARTS*2
            $game_variables[41] = STARTING_HEARTS
            $game_variables[42] = 0
            $game_variables[50] = 0
            
            file = $game_temp.name_fileproc
            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(Time.new, file)
            Marshal.dump(characters, file)
            Marshal.dump(Graphics.frame_count, file)
            $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_party, file)
            Marshal.dump($game_self_switches, file)
            Marshal.dump($game_screen, file)
            Marshal.dump($game_actors, file)
            Marshal.dump($game_troop, file)
            Marshal.dump($game_map, file)
            Marshal.dump($game_player, file)
            file.close
            $game_party.remove_actor(1)
            $scene = Scene_Map.new
            $game_temp.name_calling = false
            #--------------------------------------------------------
            # Edits ends here
            #--------------------------------------------------------
            return
          end
          # ????????????
          if @edit_window.index == $game_temp.name_max_char
            # ??? SE ???
            $game_system.se_play($data_system.buzzer_se)
            return
          end
          # ???????
          if @input_window.character == ""
            # ??? SE ???
            $game_system.se_play($data_system.buzzer_se)
            return
          end
            # ?? SE ???
            $game_system.se_play($data_system.decision_se)
            # ?????
            @edit_window.add(@input_window.character)
            return
          end
        @wait = 3 if @wait == nil or @wait == 0
        @charset_index = 0 if @charset_index == nil or @charset_index == 6
        @wait -= 1
        return if @wait > 0
        @charset_index += 1
        @edit_window.charset_index(@charset_index)
      end
    end
    
    
    
    
    #==============================================================================
    # ¦ Window_SaveFile
    #------------------------------------------------------------------------------
    #  ???????????????????????????????????
    #==============================================================================
    
    class Window_NewLoadFile < Window_Base
      #--------------------------------------------------------------------------
      # ? ??????????
      #--------------------------------------------------------------------------
      attr_reader   :filename                 # ?????
      attr_reader   :selected                 # ????
      
      #--------------------------------------------------------------------------
      # ? ?????????
      #     file_index : ?????????????? (0~3)
      #     filename   : ?????
      #--------------------------------------------------------------------------
      def initialize(file_index, filename)
        super(50, 64 + file_index % 4 * 104 + (12*file_index) + 12, 540, 104)
        self.contents = Bitmap.new(width - 32, height - 32)
        self.contents.font.name = $defaultfonttype
        self.contents.font.size = $defaultfontsize
        self.opacity = 0
        @charset_index = 0
        @file_index = file_index
        @filename = "Save#{@file_index + 1}.sav"
        @time_stamp = Time.at(0)
        @file_exist = FileTest.exist?(@filename)
        @yp = 12    
        if @file_exist
          File.delete(@filename) if File.stat(@filename).size == 0
          @file_exist = FileTest.exist?(@filename)
          if @file_exist
            file = File.open(@filename, "rb")
            @time_stamp = Marshal.load(file)
            @characters = Marshal.load(file)
            @frame_count = Marshal.load(file)
            @game_system = Marshal.load(file)
            @game_switches = Marshal.load(file)
            @game_variables = Marshal.load(file)
            @game_party = Marshal.load(file)
            @total_sec = @frame_count / Graphics.frame_rate
            file.close
          end
        end
        refresh
        @selected = false
      end
      #--------------------------------------------------------------------------
      # ? ??????
      #--------------------------------------------------------------------------
      def refresh
        self.contents.clear
        # ?????????
        self.contents.font.color = normal_color
        if @file_index == SAVES_MAX
          @exit = RPG::Cache.picture("exit")
          self.z = 0
          self.y = 390
          src_rect = Rect.new(0, 0, @exit.rect.width, @exit.rect.height)
          self.contents.blt(self.x - 78, 60 - @exit.rect.height, @exit, src_rect)
          self.opacity = 0 
        end
        name = ""
        name = @game_party.actors[0].name if @file_exist
        self.contents.draw_text_outline(4, -1, 600, 32, name)
        @name_width = contents.text_size(name).width
        # ??????????????
        if @file_exist
          for i in 0...@characters.size
            bitmap = RPG::Cache.character(@characters[i][0], @characters[i][1])
            cw = bitmap.rect.width / 9.3
            ch = bitmap.rect.height / 4
            src_rect = Rect.new(@charset_index*120, 0, cw, ch)
            x = 105 - @characters.size * 120 + i * 64 - cw / 2
            self.contents.blt(x+25, 73 - ch, bitmap, src_rect)
            heart_display(x+78, 83-ch)
          end
          
          # Rubine
          bitmap = RPG::Cache.picture("HUD___Rubin")
          self.contents.blt(431, 2, bitmap, Rect.new(0, 0, bitmap.width, bitmap.height))
          self.contents.draw_text_outline(425, 0, 600, 32, sprintf("%10.3d",@game_variables[53].to_s))
          
          # Artefakte
          if @game_switches[ARTEFAKT01_SWITCH] then
            bitmap = RPG::Cache.picture("Artefakt1")
            self.contents.blt(106, 40, bitmap, Rect.new(0, 0, bitmap.width, bitmap.height))
          end
          if @game_switches[ARTEFAKT02_SWITCH] then
            bitmap = RPG::Cache.picture("Artefakt2")
            self.contents.blt(142, 40, bitmap, Rect.new(0, 0, bitmap.width, bitmap.height))
          end
          if @game_switches[ARTEFAKT03_SWITCH] then
            bitmap = RPG::Cache.picture("Artefakt3")
            self.contents.blt(178, 40, bitmap, Rect.new(0, 0, bitmap.width, bitmap.height))
          end
          if @game_switches[ARTEFAKT04_SWITCH] then
            bitmap = RPG::Cache.picture("Artefakt4")
            self.contents.blt(214, 40, bitmap, Rect.new(0, 0, bitmap.width, bitmap.height))
          end
          if @game_switches[ARTEFAKT05_SWITCH] then
            bitmap = RPG::Cache.picture("Artefakt5")
            self.contents.blt(250, 40, bitmap, Rect.new(0, 0, bitmap.width, bitmap.height))
          end
          if @game_switches[ARTEFAKT06_SWITCH] then
            bitmap = RPG::Cache.picture("Artefakt6")
            self.contents.blt(286, 40, bitmap, Rect.new(0, 0, bitmap.width, bitmap.height))
          end
          if @game_switches[ARTEFAKT07_SWITCH] then
            bitmap = RPG::Cache.picture("Artefakt7")
            self.contents.blt(322, 40, bitmap, Rect.new(0, 0, bitmap.width, bitmap.height))
          end
          if @game_switches[ARTEFAKT08_SWITCH] then
            bitmap = RPG::Cache.picture("Artefakt8")
            self.contents.blt(358, 40, bitmap, Rect.new(0, 0, bitmap.width, bitmap.height))
          end
          if @game_switches[ARTEFAKT09_SWITCH] then
            bitmap = RPG::Cache.picture("Artefakt9")
            self.contents.blt(390, 40, bitmap, Rect.new(0, 0, bitmap.width, bitmap.height))
          end
        else
          #Schrift für Neues Spiel
          if self.filename != "Save" + (SAVES_MAX + 1).to_s + ".sav" then
            @name_width = contents.text_size(NEWGAME_TEXT).width
            self.contents.draw_text_outline(4, 0, 600, 32, NEWGAME_TEXT)
          end
        end
      end
      
      def heart_display(x, y)
        @x = x
        @y = y
        
        @link_heart = @game_variables[8]
        @link_maxheart = @game_variables[41]
        
        if @link_heart == 1
          insert_halfheart
        elsif @link_heart >= 2
          insert_fullheart
        end
        if @link_heart <= 2
          insert_emptyheart
        elsif @link_heart == 3
          insert_halfheart
        elsif @link_heart >= 4
          insert_fullheart
        end
        if @link_maxheart >= 3
          if @link_heart <= 4
            insert_emptyheart
          elsif @link_heart == 5
            insert_halfheart
          elsif @link_heart >= 6
            insert_fullheart
          end
        end
        if @link_maxheart >= 4
          if @link_heart <= 6
            insert_emptyheart
          elsif @link_heart == 7
            insert_halfheart
          elsif @link_heart >= 8
            insert_fullheart
          end
        end
        if @link_maxheart >= 5
          if @link_heart <= 8
            insert_emptyheart
          elsif @link_heart == 9
            insert_halfheart
          elsif @link_heart >= 10
            insert_fullheart
          end
        end
        if @link_maxheart >= 6
          if @link_heart <= 10
            insert_emptyheart
          elsif @link_heart == 11
            insert_halfheart
          elsif @link_heart >= 12
            insert_fullheart
          end
        end
        if @link_maxheart >= 7
          if @link_heart <= 12
            insert_emptyheart
          elsif @link_heart == 13
            insert_halfheart
          elsif @link_heart >= 14
            insert_fullheart
          end
        end
        if @link_maxheart >= 8
          if @link_heart <= 14
            insert_emptyheart
          elsif @link_heart == 15
            insert_halfheart
          elsif @link_heart >= 16
            insert_fullheart
          end
        end
        if @link_maxheart >= 9
          if @link_heart <= 16
            insert_emptyheart
          elsif @link_heart == 17
            insert_halfheart
          elsif @link_heart >= 18
            insert_fullheart
          end
        end
        if @link_maxheart >= 10
          if @link_heart <= 18
            insert_emptyheart
          elsif @link_heart == 19
            insert_halfheart
          elsif @link_heart >= 20
            insert_fullheart
          end
        end
        if @link_maxheart >= 11
          @y += 16
          @x = x
          if @link_heart <= 20
            insert_emptyheart(true)
          elsif @link_heart == 21
            insert_halfheart(true)
          elsif @link_heart >= 22
            insert_fullheart(true)
          end
        end
        if @link_maxheart >= 12
          if @link_heart <= 22
            insert_emptyheart(true)
          elsif @link_heart == 23
            insert_halfheart(true)
          elsif @link_heart >= 24
            insert_fullheart(true)
          end
        end
        if @link_maxheart >= 13
          if @link_heart <= 24
            insert_emptyheart(true)
          elsif @link_heart == 25
            insert_halfheart(true)
          elsif @link_heart >= 26
            insert_fullheart(true)
          end
        end
        if @link_maxheart >= 14
          if @link_heart <= 26
            insert_emptyheart(true)
          elsif @link_heart == 27
            insert_halfheart(true)
          elsif @link_heart >= 28
            insert_fullheart(true)
          end
        end
        if @link_maxheart >= 15
          if @link_heart <= 28
            insert_emptyheart(true)
          elsif @link_heart == 29
            insert_halfheart(true)
          elsif @link_heart >= 30
            insert_fullheart(true)
          end
        end
        if @link_maxheart >= 16
          if @link_heart <= 30
            insert_emptyheart(true)
          elsif @link_heart == 31
            insert_halfheart(true)
          elsif @link_heart >= 32
            insert_fullheart(true)
          end
        end
        if @link_maxheart >= 17
          if @link_heart <= 32
            insert_emptyheart(true)
          elsif @link_heart == 33
            insert_halfheart(true)
          elsif @link_heart >= 34
            insert_fullheart(true)
          end
        end
        if @link_maxheart >= 18
          if @link_heart <= 34
            insert_emptyheart(true)
          elsif @link_heart == 35
            insert_halfheart(true)
          elsif @link_heart >= 36
            insert_fullheart(true)
          end
        end
        if @link_maxheart >= 19
          if @link_heart <= 36
            insert_emptyheart(true)
          elsif @link_heart == 37
            insert_halfheart(true)
          elsif @link_heart >= 38
            insert_fullheart(true)
          end
        end
        if @link_maxheart >= 20
          if @link_heart <= 38
            insert_emptyheart(true)
          elsif @link_heart == 39
            insert_halfheart(true)
          elsif @link_heart >= 40
            insert_fullheart(true)
          end
        end  end
      def insert_fullheart(secondRow = false)
        bitmap = RPG::Cache.picture("FullHeart")
        cw = bitmap.width
        ch = bitmap.height
        src_rect = Rect.new(0, 0, cw, ch)
        y = 0
        if secondRow then
          y += 20
        end 
        self.contents.blt((@x - cw / 2) + 100, y, bitmap, src_rect)
        @x += cw
      end
      
      def insert_halfheart(secondRow = false)
        bitmap = RPG::Cache.picture("HalfHeart")
        cw = bitmap.width
        ch = bitmap.height
        src_rect = Rect.new(0, 0, cw, ch)
        y = 0
        if secondRow then
          y += 20
        end 
        self.contents.blt((@x - cw / 2) + 100, y, bitmap, src_rect)
        @x += cw
      end
      
      def insert_emptyheart(secondRow = false)
        bitmap = RPG::Cache.picture("EmptyHeart")
        cw = bitmap.width
        ch = bitmap.height
        src_rect = Rect.new(0, 0, cw, ch)
        y = 0
        if secondRow then
          y += 20
        end    
        self.contents.blt((@x - cw / 2) + 100, y , bitmap, src_rect)
        @x += cw
      end
      #--------------------------------------------------------------------------
      # ? ???????
      #     selected : ??????? (true=?? false=???)
      #--------------------------------------------------------------------------
      def selected=(selected)
        @selected = selected
        update_cursor_rect
      end
      def charset_index(index)
        @charset_index = index
        refresh
      end
      #--------------------------------------------------------------------------
      # ? ?????????
      #--------------------------------------------------------------------------
      def update_cursor_rect
        if @selected
          if @file_index == SAVES_MAX
            self.cursor_rect.set(self.x + 7, 63 - @exit.rect.height, @exit.rect.width+2, @exit.rect.height+2)
          else
            self.cursor_rect.set(0, 0, @name_width + 8, 32)
          end
        else
          self.cursor_rect.empty
        end
      end
    
    end
    
    #==============================================================================
    # ¦ Scene_File
    #------------------------------------------------------------------------------
    #  ????????????????????????
    #==============================================================================
    
    class Scene_NewLoadFile
      #--------------------------------------------------------------------------
      # ? ?????????
      #     help_text : ????????????????
      #--------------------------------------------------------------------------
      def initialize(help_text)
        @help_text = help_text
      end
      #--------------------------------------------------------------------------
      # ? ?????
      #--------------------------------------------------------------------------
      def main
        
        $game_party.setup_starting_members
        
        #-------------------------------
        # Animated Background Setup
        #-------------------------------
        
        @back = Sprite.new
        #@sprite.bitmap = RPG::Cache.title($data_system.title_name)
        @backgroundList = ["SaveScreen"]
        @backgroundGameFrameCount = 0
        # Number of game frames per background frame.
        @backgroundG_BFrameCount = 3.4
        @back.bitmap = RPG::Cache.title(@backgroundList[0])
            
        @sprite = Sprite.new
        @sprite.bitmap = RPG::Cache.title($data_system.title_name)
        # ???????????????
        @savefile_windows = []
        for i in 0..SAVES_MAX
          @savefile_windows.push(Window_NewLoadFile.new(i, make_filename(i)))
        end
     
        # ??????????????
        @file_index = $game_temp.last_file_index
        @savefile_windows[@file_index].selected = true
        # ?????????
        Graphics.transition
        # ??????
        loop do
          # ????????
          Graphics.update
          # ???????
          Input.update
          # ??????
          update
          # ????????????????
          if $scene != self
            break
          end
        end
        # ?????????
        Graphics.freeze
        # ????????
        @sprite.dispose
        @back.dispose
        for i in @savefile_windows
          i.dispose
        end
      end
      #--------------------------------------------------------------------------
      # ? ??????
      #--------------------------------------------------------------------------
      def update
        @backgroundGameFrameCount = @backgroundGameFrameCount + 1
        if @backgroundGameFrameCount >= @backgroundG_BFrameCount
            @backgroundGameFrameCount = 0
            # Add current background frame to the end
            @backgroundList = @backgroundList << @backgroundList[0]
            # and drop it from the first position
            @backgroundList.delete_at(0)
            @sprite.bitmap = RPG::Cache.title(@backgroundList[0])
          end
        for i in @savefile_windows
          i.update
        end
        # C ??????????
        if Input.trigger?(Input::C)
          if @file_index == SAVES_MAX
            $scene = nil
          else
            $game_system.se_play($data_system.decision_se)
            if FileTest.exist?(make_filename(@file_index))
              on_decision(make_filename(@file_index))
              $game_temp.last_file_index = @file_index
            else
              $game_system.save_slot = make_filename(@file_index)
              file = File.new(make_filename(@file_index), "wb")
              on_new(file)
              $game_temp.last_file_index = @file_index
            end
          end
        end
        # B ??????????
        if Input.trigger?(Input::B)
          # ???? on_cancel (??????) ???
          on_cancel
          return
        end
        # ??????????????
        if Input.repeat?(Input::DOWN)
          # ????????????????????????
          # ?????????? 3 ??????
          if Input.trigger?(Input::DOWN) or @file_index < 3
            # ???? SE ???
            $game_system.se_play($data_system.cursor_se)
            # ?????????
            @savefile_windows[@file_index].selected = false
            @file_index = (@file_index + 1) % 4
            @savefile_windows[@file_index].selected = true
            return
          end
        end
        # ??????????????
        if Input.repeat?(Input::UP)
          # ????????????????????????
          # ?????????? 0 ???????
          if Input.trigger?(Input::UP) or @file_index > 0
            # ???? SE ???
            $game_system.se_play($data_system.cursor_se)
            # ?????????
            @savefile_windows[@file_index].selected = false
            @file_index = (@file_index + 3) % 4
            @savefile_windows[@file_index].selected = true
            return
          end
        end
        @wait = 3 if @wait == nil or @wait == 0
        @charset_index = 0 if @charset_index == nil or @charset_index == 6
        @wait -= 1
        return if @wait > 0
        @charset_index += 1
        for i in 0..@savefile_windows.size-1
          @savefile_windows[i].charset_index(@charset_index)
          next
        end
      end
      #--------------------------------------------------------------------------
      # ? ????????
      #     file_index : ?????????????? (0~3)
      #--------------------------------------------------------------------------
      def make_filename(file_index)
        return "Save#{file_index + 1}.sav"
      end
    end
    
    
    
    
    class Scene_NewLoad < Scene_NewLoadFile
      def initialize
        $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, "rb")
            if file.mtime > latest_time
              latest_time = file.mtime
              $game_temp.last_file_index = i
            end
            file.close
          end
        end
        super("Load from which file")
      end
    
      def on_new(file)
        
        $game_map.setup($data_system.start_map_id)
        
        $game_system.newgame_switch = true
        $game_temp.name_fileproc = file
        $game_temp.name_calling = true
        $game_temp.name_actor_id = 1
        $game_temp.name_max_char = 8
        $scene = Scene_Name.new
      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, $game_system.newgame_switch)
        file.close
        Audio.bgm_stop
        $game_system.bgm_play($game_system.playing_bgm) if !$game_system.newgame_switch
        $game_system.bgs_play($game_system.playing_bgs) if !$game_system.newgame_switch
        $game_map.autoplay
        # ?????? (????????)
        $game_map.update
        $game_party.remove_actor(1) if $game_system.newgame_switch
        # ?????????
        $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, newgame)
        if !newgame
          Audio.bgm_stop
          # ?????????????????????????
          time = Marshal.load(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_party         = Marshal.load(file)
          $game_self_switches = Marshal.load(file)
          $game_screen        = Marshal.load(file)
          $game_actors        = Marshal.load(file)
          $game_troop         = Marshal.load(file)
          $game_map           = Marshal.load(file)
          $game_player        = 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)
            $game_player.refresh
          end
        else
          characters = []
          for i in 0...$game_party.actors.size
            actor = $game_party.actors[i]
            characters.push([actor.character_name, actor.character_hue])
          end
          time = Time.new
          # ??????????????????????
          Graphics.frame_count = 0
          # ????????????????
          $game_system        = Game_System.new
          $game_switches      = Game_Switches.new
          $game_variables     = Game_Variables.new
          $game_party         = Game_Party.new
          $game_self_switches = Game_SelfSwitches.new
          $game_screen        = Game_Screen.new
          $game_actors        = Game_Actors.new
          $game_troop         = Game_Troop.new
          $game_map           = Game_Map.new
          $game_player        = Game_Player.new
          #$game_party.setup_starting_members
          $game_map.setup($data_system.start_map_id)
          $game_player.moveto($data_system.start_x, $data_system.start_y)
          $game_player.refresh
        end
        # ???????????????????
        # (?????????????????)
        # ???????????????
        $game_party.refresh
      end
    end
    lg
    stardust

    Geändert von stardust (04.10.2010 um 21:28 Uhr)

  20. #20

    Zelda Engine 4.0 Fehlermeldung Save/Load line 420

    Hallo Community

    Ich habe ein Großes Problem.
    Ich habe mir Zelda Engine 4.0 für Rpg maker xp gedownloadet und wollte das spielen.
    Da ich den alten Spielstand gelöscht habe und neu gemacht habe kommt immer eine Fehler meldung.

    004. MX - Zelda Load & Save line 420

    Ich habe keine ahnung was da ist es würde mich freuen wenn ihr mir helfen könntet.

    Hier noch mal der Code:


    Code:
    #==============================================================================#
    # ¦ Maximusmaxy's Zelda-styled Title/Load/Save/Name/GameOver Screens           #
    #------------------------------------------------------------------------------#
    # Ocarina of Time/Majora's Mask-styled Title Screen.                           #
    # Link to the Past-styled Gameover Screen.                                     #
    #------------------------------------------------------------------------------#
    # Author: Maximusmaxy                                                          #
    # Version 0.3.4: 11/12/11                                                      #
    #==============================================================================#
    # 
    # Introduction:
    # This script overides the standard title screen with a Zelda title screen
    # simular to the title screens from Ocarina of time and the Majora's Mask.
    # The old gameover screen has been updated to use a Link to the Past style
    # save and continue/quit style screen. The script also features methods of 
    # quicksaving and autosaving.
    #
    # Instuctions:
    # All instructions to set up the title screen are in the configuration.
    # 
    # Zelda Style Saving:
    # In a majority of zelda games, after loading a saved game you will return to
    # the entrance of the map or the begginning of the dungeon. To achieve this
    # the player coordinates are saved each time you enter a map. When the game
    # is saved the player coordinates will be altered in the save file. The
    # autosaving of the coordinates can be disabled ie. for dungeons when you want
    # the player to return to the entrance, by using the script call:
    # PZE.autosave(false), and then PZE.autosave(true) to re-enable it.
    #
    # After a gameover, and you use the save and continue, you will return to the
    # last saved coordinates and your player hp will return to the amount specified
    # in the configuration or the call script.
    #
    # Script Calls:
    #
    # PZE.save
    # Saves the game to the loaded save file.
    #
    # PZE.load
    # Loads the game from the loaded save file.
    # 
    # PZE.autosave(ENABLED)
    # ENABLED can be true or false for enabling/disabling the autosave coordinates.
    #
    # PZE.gameover_hp(HP)
    # HP is the amount of hp you will recieve after a gameover.
    #
    #===============================================================================
    
    $pze_ztitle = 0.34
    
    module PZE
    
    #===============================================================================
    # Configuration
    #===============================================================================
      #determine the font used for the title screen
      TITLE_FONT_NAME = 'P'
      TITLE_FONT_SIZE = 22
      #automatically change the hero's name to the same as the file name
      HERO_NAME = false
      #quick start skips the title in debug mode. Useful for debugging
      QUICK_START = true
      #use the full keyboard to input your name. Requires Yan Keyboard Input.
      KEYBOARD_NAME = false
      #Zelda style saving. Read Zelda Style saving in the configuration.
      ZELDASAVE = true
      #Save the player coordinates on map entry. Change with the call script.
      AUTOSAVE = true
      #Zelda style gameover screen
      GAMEOVER = true
      #The windowskin to use on the gameover screen
      GAMEOVER_WINDOWSKIN = 'Windowskin - PZE - Game Over'
      #The amount of HP recieved after gameover. Change with the call script.
      GAMEOVER_HP = 12 #3 hearts
      # Load Screen BGM
      LOADSCREEN_BGM = RPG::AudioFile.new('Title Screen - File Select', 100)
      #enable/disable the quicksave feature
      QUICKSAVE = true
      #quick save input key
      QUICKSAVE_INPUT = Input::F5
      #quick load input key
      QUICKLOAD_INPUT = Input::F6
      #common event that runs at the start of a new game. set to 0 to disable
      COMMON_EVENT = 2
      #-----------------------------------------------------------------------------
      # File Information Display Setup
      #-----------------------------------------------------------------------------
      #Hero
      Hero_Display = true
      Hero_Speed = 5
      Hero_X = -30
      Hero_Y = -20
      #Hearts
      Heart_Display = true
      Heart_Columns = 10 
      Heart_X = 53
      Heart_Y = 66
      #Heart Container Pieces
      Heart_Piece_Display = true
      Heart_Piece_X = 270
      Heart_Piece_Y = 60
      #Magic
      Magic_Display = false
      Magic_Width = 80
      Magic_Color = Color.new(32, 192, 40)
      Magic_X = 200
      Magic_Y = 76
      #Rupees/Gold
      Rupee_Display = true
      Rupee_X = 265
      Rupee_Y = 20
      #-----------------------------------------------------------------------------
      # Custom Information Display Setup
      #-----------------------------------------------------------------------------
      # Custom information setup follows this format:
      # [IMAGE, X, Y, CONDITION, ID],
      # IMAGE is the filename of the image located in the titles folder.
      # X,Y is the location of the image
      # CONDITION can be 'switch', 'variable' or 'item'.
      # ID is the ID of the selected condition
      #
      # EG.['Picture', 6, 9, 'switch', 69]
      #
      # NOTE: Condition can be left as '' to always be shown.
      #
      # NOTE: If the condition is a variable, the amount will be shown next to it.
      # The same will be applied if the condition is an item and there is more then
      # 1 of the item possessed.
      #-----------------------------------------------------------------------------
      Custom_Display = [             #set to Custom_Display = [] if not applicable
      ['ZSpiritualStone_1', 25, 116, 'switch', 127],
      ['ZSpiritualStone_2',45, 116, 'switch', 128],
      ['ZSpiritualStone_3', 65, 116, 'switch', 129],
      ['ZMedallion_1', 120, 116, 'switch', 130],
      ['ZMedallion_2', 145, 116, 'switch', 131],
      ['ZMedallion_3', 170, 116, 'switch', 132],
      ['ZMedallion_4', 195, 116, 'switch', 133],
      ['ZMedallion_5', 220, 116, 'switch', 134],
      ['ZMedallion_6', 245, 116, 'switch', 135],
      ['ZMedallion_7', 270, 116, 'switch', 136],
      ['ZMedallion_8', 295, 116, 'switch', 137],
      ]
      
    
    
    #===============================================================================
    # End Configuration
    #===============================================================================
    
      def self.save
        return if $game_temp.pze_quickstart
        file = File.open("Saves/Save#{$game_system.file_id + 1}.rxdata", 'wb')
        temp_save = Scene_Save.new
        temp_save.write_save_data(file)
        file.close
      end
      
      def self.load
        return if $game_temp.pze_quickstart
        file = File.open("Saves/Save#{$game_system.file_id + 1}.rxdata", 'r')
        temp_load = Scene_Load.new
        temp_load.read_save_data(file)
        file.close
        $game_temp.pze_loading = true
        return
      end
      
      def self.autosave(save)
        $game_system.pze_autosave = save
        return
      end
      
      def self.gameover_hp(hp)
        $game_system.pze_gameover_hp = hp
        return
      end
    end
    
    #===============================================================================
    # Game_Temp
    #===============================================================================
    
    class Game_Temp
      attr_accessor :autosave_coordinates
      attr_accessor :pze_quicksaving
      attr_accessor :pze_loading
      attr_accessor :pze_quickstart
      alias max_ztitle_initialize_later initialize unless $@
      def initialize
        max_ztitle_initialize_later
        @autosave_coordinates = [$data_system.start_map_id, $data_system.start_x, $data_system.start_y, 2]
        @pze_quicksaving = false
        @pze_loading = false
        @pze_quickstart = false
      end
    end
    
    #===============================================================================
    # Game_System
    #===============================================================================
    
    class Game_System
      attr_accessor :file_name
      attr_accessor :file_id
      attr_accessor :pze_autosave
      attr_accessor :pze_gameover_hp
      alias max_ztitle_initialize_later initialize unless $@
      def initialize
        max_ztitle_initialize_later
        @file_name = ''
        @file_id = 0
        @pze_autosave = PZE::AUTOSAVE
        @pze_gameover_hp = PZE::GAMEOVER_HP
      end
    end
    
    #===============================================================================
    # Game_Map
    #===============================================================================
    
    class Game_Map
      attr_accessor :map_id
    end
    
    #===============================================================================
    # Sprite_Zelda_Title
    #===============================================================================
    
    class Sprite_Zelda_Title < Sprite
      attr_reader :character_table
      attr_reader :file_name
      def initialize(viewport = nil)
        super(viewport)
        @fade_in = false
        @fade_out = false
        @fade_speed = 0
        @phase = false
        @phase_count = 0
        @move_x = 0
        @move_y = 0
        @move_duration = 0
        self.opacity = 0
        self.color = Color.new(255,255,255,0)
      end
      
      def update
        #update phase
        if @phase
          self.color.alpha += 4 * (@phase_count < 15 ? 1 : -1)
          @phase_count += 1
          @phase_count = 0 if @phase_count == 30
        end
        #update fade in
        if @fade_in
          self.opacity += @fade_speed
          @fade_in = false if self.opacity >= 255
        end
        #update fade out
        if @fade_out
          self.opacity -= @fade_speed
          @fade_out = false if self.opacity <= 0
        end
        #update move
        if @move_duration > 0
          self.x = (self.x * (@move_duration - 1) + @move_x) / @move_duration
          self.y = (self.y * (@move_duration - 1) + @move_y) / @move_duration
          @move_duration -= 1
        end
        #update the actor sprite
        unless @hero.nil?
          #update pattern
          @hero_count += 1
          if @hero_count % PZE::Hero_Speed == 0
            s = PZE::Hero_Speed
            @hero_count = 0 if @hero_count / s == @hero_frames
            @hero.src_rect = Rect.new(@hero_count / s * @hw, 0, @hw, @hh)
          end
        end
      end
      
      def dispose
        #dispose the hero sprite aswell
        unless @hero.nil?
          @hero.dispose 
          @hero = nil
        end
        super
      end
      
      def bitmap=(*args)
        super(*args)
        #set the font on bitmap creation
        self.bitmap.font.name = PZE::TITLE_FONT_NAME
        self.bitmap.font.size = PZE::TITLE_FONT_SIZE
      end
      
      def x=(value)
        super
        #move the hero sprite aswell
        @hero.x = value + PZE::Hero_X unless @hero.nil?
      end
      
      def y=(value)
        super
        #move the hero sprite aswell
        @hero.y = value + PZE::Hero_Y unless @hero.nil?
      end
      
      def opacity=(value)
        super
        #set the hero opacity to the bitmap opacity
        @hero.opacity = value unless @hero.nil?
      end
      
      def phase=(bool)
        #enable/disable the phase
        @phase = bool
        #adjust the phase count to about the middle
        @phase_count = 7
        #adjust alpha level
        self.color.alpha = (@phase ? 30 : 0)
      end
      
      def fade_in(speed)
        #fade the sprite in at specified speed
        @fade_in = true
        @fade_speed = speed
      end
      
      def fade_out(speed = nil)
        #return true if the sprite is fading out
        return @fade_out if speed.nil?
        #fade the sprite out at specified speed
        @fade_out = true
        @fade_speed = speed
      end
      
      def move_to(x, y, speed)
        #set the move to coordinates
        @move_x = x
        @move_y = y
        #set the duration of the move
        @move_duration = speed
      end
      
      def draw_bar(text)
        #draw a bar with text for the menu options
        self.bitmap = Bitmap.new(130,33)
        bar = RPG::Cache.title('ZBar')
        self.bitmap.blt(0,0,bar,bar.rect)
        self.bitmap.draw_text(0,0,130,33,text,1)
      end
      
      def draw_info(text, align = 0)
        #draw information text
        self.bitmap = Bitmap.new(640,32) if self.bitmap.nil?
        self.bitmap.clear
        self.bitmap.draw_text(0,0,640,32,text,align)
      end
      
      def draw_link
        #draw a file link
        self.bitmap = RPG::Cache.title('ZFile_Link')
      end
      
      def draw_cursor
        #draw a name input cursor
        self.bitmap = RPG::Cache.title('ZCursor')
        self.phase = true
        self.opacity = 200
      end
      
      def draw_back
        #draw a name input back key
        self.bitmap = RPG::Cache.title('ZBack')
      end
      
      def draw_end
        #draw a name input end key
        self.bitmap = Bitmap.new(91,33)
        bitmap = RPG::Cache.title('ZEnd')
        self.bitmap.blt(0,0,bitmap,bitmap.rect)
        self.bitmap.draw_text(0,0,91,33,'END',1)
      end
      
      def draw_character_table
        #draw a name input character table
        self.bitmap = Bitmap.new(455, 175)
        @character_table =
        ['A','B','C','D','E','F','G','H','I','J','K','L','M',
         'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
         'a','b','c','d','e','f','g','h','i','j','k','l','m',
         'n','o','p','q','r','s','t','u','v','w','x','y','z',
         '1','2','3','4','5','6','7','8','9','0','.','-',' ']
        @character_table.each_with_index do |char, i|
          self.bitmap.draw_text((i % 13) * 35, (i / 13) * 35, 35, 35, char)
        end
      end
      
      def draw_name(text = '')
        #draw a name bar
        self.bitmap = Bitmap.new(219,33) if self.bitmap.nil?
        self.bitmap.clear
        bitmap = RPG::Cache.title('ZName')
        self.bitmap.blt(0,0,bitmap,bitmap.rect)
        self.bitmap.draw_text(34,0,185,33,text)
      end
      
      def draw_display(i)
        #draw a file information display
        self.bitmap = Bitmap.new(350,147) if self.bitmap.nil?
        self.bitmap.clear
        display = RPG::Cache.title('ZDisplay')
        self.bitmap.blt(0,0,display,display.rect)
        #load temp file data
        file = File.open("Saves/Save#{i + 1}.rxdata", 'r')
        characters = Marshal.load(file)
        frame_count = Marshal.load(file)
    	system = Marshal.load(file)
        switches = Marshal.load(file)
        variables = Marshal.load(file)
        self_switches = Marshal.load(file)
        screen = Marshal.load(file)
        actors = Marshal.load(file)
        party = Marshal.load(file)
        file.close
        #get the file name for the name window
        @file_name = system.file_name
        self.bitmap.draw_text(164,0,185,33,@file_name)
        #rupees/gold display
        if PZE::Rupee_Display
          bitmap = RPG::Cache.title('ZRupee')
          x, y = PZE::Rupee_X, PZE::Rupee_Y
          self.bitmap.blt(x,y,bitmap,bitmap.rect)
          self.bitmap.draw_text(x + bitmap.rect.width + 4,
          y, 350, PZE::TITLE_FONT_SIZE, 'x ')
          old_color = self.bitmap.font.color.clone
          #change font color to green if rupee count has reached the maximum
          if defined?(ZeldaHUD_Customization) &&
             party.gold == variables[ZeldaHUD_Customization::GoldCapVariable] &&
             party.gold != 0
            self.bitmap.font.color = Color.new(50,255,50)
          end
          self.bitmap.draw_text(x + bitmap.rect.width + 4 + bitmap.text_size(
          'x ').width, y, 350, PZE::TITLE_FONT_SIZE, party.gold.to_s)
          self.bitmap.font.color = old_color
        end
        #Custom display images
        PZE::Custom_Display.each do |info|
          next if info[3] == 'switch' && !switches[info[4]]
          next if info[3] == 'item' && party.item_number(info[4]) == 0
          bitmap = RPG::Cache.title(info[0])
          self.bitmap.blt(info[1],info[2],bitmap,bitmap.rect)
          if info[3] == 'variable'
            self.bitmap.draw_text(info[1] + bitmap.rect.width + 4,
            info[2], 350, PZE::TITLE_FONT_SIZE, 'x ' + variables[info[4]].to_s)
          elsif info[3] == 'item'
            value = party.item_number(info[4])
            if value > 2
              self.bitmap.draw_text(info[1] + bitmap.rect.width + 4,
              info[2], 350, PZE::TITLE_FONT_SIZE, 'x ' + value.to_s)
            end
          end
        end
        #get the hero
        hero = party.actors[0]
        #skip drawing hero stats if the hero does not exist
        return if hero.nil?
        #hero display
        if PZE::Hero_Display
          #draw the hero sprite
          @hero = Sprite.new
          @hero.bitmap = RPG::Cache.character(
                         hero.character_name, hero.character_hue)
          @hero_count = 0
          @hero.opacity = 0
          @hero.z = 3
          #compatibility with COG extra frames
          if defined?(XAS_REGEXP)
            hero.character_name[XAS_REGEXP::FRAMES]
            @hero_frames = $1.nil? ? 4 : $1.to_i
          else
            @hero_frames = 4
          end
          #set the source rect dependant on bitmap width/height
          @hw, @hh = @hero.bitmap.width / @hero_frames, @hero.bitmap.height / 4
          @hero.src_rect = Rect.new(0, 0, @hw, @hh)
        end
        #hearts display
        if PZE::Heart_Display
          bitmap = RPG::Cache.title('ZHearts_List')
          x, y, c = PZE::Heart_X, PZE::Heart_Y, PZE::Heart_Columns
          (0...(hero.maxhp / 4)).each do |i|
            self.bitmap.blt(i % c * 17 + x, i / c * 17 + y, bitmap, Rect.new([[
            hero.hp % 4 + (hero.hp / 4 - i) * 4, 0].max, 4].min * 16, 0, 16, 16))
          end
        end
        #heart container piece display
        if PZE::Heart_Piece_Display
          bitmap = RPG::Cache.title('ZHeart_Container_Pieces_List')
          x, y = PZE::Heart_Piece_X, PZE::Heart_Piece_Y
          self.bitmap.blt(x, y, bitmap, Rect.new(52 * (hero.maxhp % 4), 0, 52, 48))
        end
        #magic display
        if PZE::Magic_Display
          bitmap = RPG::Cache.title('ZMagic_Bar_List')
          x, y, width = PZE::Magic_X, PZE::Magic_Y, PZE::Magic_Width
          self.bitmap.blt(x, y, bitmap, Rect.new(0,0,4,21))
          dest_rec = Rect.new(x + 4, y, width - 8, 21) 
          self.bitmap.stretch_blt(dest_rec, bitmap, Rect.new(4, 0, 1, 21))
          self.bitmap.blt(x + width - 4, y, bitmap, Rect.new(5, 0, 4, 21))
          rate = hero.sp / hero.maxsp
          self.bitmap.fill_rect(x + 4, y + 4,(width - 8) * rate,13,PZE::Magic_Color)
        end
      end
    end
    
    #===============================================================================
    # Sprite_Quick_Save_Load
    #===============================================================================
    
    class Sprite_Quick_Save_Load < Sprite
      attr_reader :count
      def initialize(text)
        super(nil)
        self.bitmap = Bitmap.new(300,32)
        self.bitmap.draw_text(0,0,300,32,text)
        self.x, self.y, self.z = 0, 448, 99999
        @count = 0
      end
      
      def dispose
        #dispose the bitmap aswell
        self.bitmap.dispose
        super
      end
      
      def update
        #update the count
        @count += 1
      end
    end
    
    #===============================================================================
    # Scene_Title
    #===============================================================================
    
    class Scene_Title
      def main
        #go to battle test if battle testing
        if $BTEST
          battle_test
          return
        end
        #load the data
        $data_actors        = load_data('Data/Actors.rxdata')
        $data_classes       = load_data('Data/Classes.rxdata')
        $data_skills        = load_data('Data/Skills.rxdata')
        $data_items         = load_data('Data/Items.rxdata')
        $data_weapons       = load_data('Data/Weapons.rxdata')
        $data_armors        = load_data('Data/Armors.rxdata')
        $data_enemies       = load_data('Data/Enemies.rxdata')
        $data_troops        = load_data('Data/Troops.rxdata')
        $data_states        = load_data('Data/States.rxdata')
        $data_animations    = load_data('Data/Animations.rxdata')
        $data_tilesets      = load_data('Data/Tilesets.rxdata')
        $data_common_events = load_data('Data/CommonEvents.rxdata')
        $data_system        = load_data('Data/System.rxdata')
        #quick start if activated
        if PZE::QUICK_START && $DEBUG
          quick_start
          return
        end
        #create the game system
        $game_system = Game_System.new
        #stop audio and play the title bgm
        Audio.me_stop
        Audio.bgs_stop
        $game_system.bgm_play(PZE::LOADSCREEN_BGM)
        #initialize variables
        @scene = 1
        @index = 0
        @file = 0
        @ce = true #true = copy, false = erase
        @copy_to = 0
        @text = ''
        #make the sprites
        make_sprites
        #array for holding the active sprites
        @sprites = [@window,@copy,@erase,@options,@info,@keys,*@files]
        #transition
        Graphics.transition
        #fade in
        wait(25, true)
        #change active sprites
        @sprites = [@copy,@erase,@options,*@files]
        #phase first file
        @files[0].phase = true
        #main loop
        loop do
          Graphics.update
          Input.update
          update
          break if $scene != self
        end
        #freeze
        Graphics.freeze
        #dispose everything
        dispose_sprites
      end
      
      def make_sprites
        #background
        @background = Plane.new
        @background.bitmap = RPG::Cache.title('ZBackground')
        #window
        @window = Sprite_Zelda_Title.new
        @window.bitmap = RPG::Cache.title('ZWindow')
        #files, names, links and displays
        @files = []
        @names = {}
        @links = {}
        @displays = {}
        (0..2).each do |i|
          #files
          @files[i] = Sprite_Zelda_Title.new
          @files[i].draw_bar("File #{i + 1}")
          @files[i].x, @files[i].y = 124, 148 + i * 33
          #if the file exists
          if FileTest.exist?("Saves/Save#{i + 1}.rxdata")
            #displays
            @displays[i] = Sprite_Zelda_Title.new
            @displays[i].draw_display(i)
            @displays[i].x, @displays[i].y, @displays[i].z = 124, 148, 1
            #names
            @names[i] = Sprite_Zelda_Title.new
            @names[i].draw_name(@displays[i].file_name)
            @names[i].x, @names[i].y = @files[i].x + 130, @files[i].y
            #links
            @links[i] = Sprite_Zelda_Title.new
            @links[i].draw_link
            @links[i].x, @links[i].y = @files[i].x + 110, @files[i].y + 9
            @links[i].z = 2
          end
        end
        #copy
        @copy = Sprite_Zelda_Title.new
        @copy.draw_bar('Copy')
        @copy.x, @copy.y = 124, 264
        #erase
        @erase = Sprite_Zelda_Title.new
        @erase.draw_bar('Erase')
        @erase.x, @erase.y = 124, 297
        #options
        @options = Sprite_Zelda_Title.new
        @options.draw_bar('Options')
        @options.x, @options.y = 124, 347
        #yes
        @yes = Sprite_Zelda_Title.new
        @yes.draw_bar('Yes')
        @yes.x, @yes.y = 124, 314
        #quit
        @quit = Sprite_Zelda_Title.new
        @quit.draw_bar('Quit')
        @quit.x, @quit.y = 124, 347
        #info
        @info = Sprite_Zelda_Title.new
        @info.draw_info('Please Select a File')
        @info.x, @info.y = 125, 91
        #keys
        @keys = Sprite_Zelda_Title.new
        @keys.draw_info('C - Decide · X - Cancel', 1)
        @keys.y = 423
        #name
        @name = Sprite_Zelda_Title.new
        @name.draw_name
        #message
        @message = Sprite_Zelda_Title.new
        @message.draw_info('This is an Empty File')
        @message.x, @message.z = 260, 10
        #character table
        @table = Sprite_Zelda_Title.new
        @table.draw_character_table
        @table.x, @table.y, @table.z = 124, 148, 100
        #back
        @back = Sprite_Zelda_Title.new
        @back.draw_back
        @back.x, @back.y, @back.z = 398, 328, 100
        #end
        @end = Sprite_Zelda_Title.new
        @end.draw_end
        @end.x, @end.y, @end.z = 468, 328, 100
      end
      
      def dispose_sprites
        #background
        @background.dispose
        #window
        @window.dispose
        #files
        @files.each do |file|
          file.bitmap.dispose
          file.dispose
        end
        #names
        @names.each_value do |name|
          name.bitmap.dispose
          name.dispose
        end
        #displays
        @displays.each_value do |display| 
          display.bitmap.dispose
          display.dispose
        end
        #links
        @links.each_value {|link| link.dispose}
        #bar and info windows
        [@copy,@erase,@options,@yes,@quit,@info,@keys,@message,@table,
         @end].each do |sprite| 
          sprite.bitmap.dispose
          sprite.dispose
        end
        #back
        @back.dispose
      end
      
      def quick_start
        #reset all objects and go straight to the map
        Graphics.frame_count = 0
        $game_temp          = Game_Temp.new
        $game_temp.pze_quickstart = true
        $game_system        = Game_System.new
        $game_switches      = Game_Switches.new
        $game_variables     = Game_Variables.new
        $game_self_switches = Game_SelfSwitches.new
        $game_screen        = Game_Screen.new
        $game_actors        = Game_Actors.new
        $game_party         = Game_Party.new
        $game_troop         = Game_Troop.new
        $game_map           = Game_Map.new
        $game_player        = Game_Player.new
        command_new_game
      end
      
      def wait(frames, fade = nil)
        #fade in/out if specified
        @sprites.each{|sprite| sprite.fade_in(255 / frames)} if fade
        @sprites.each{|sprite| sprite.fade_out(255 / frames)} if fade == false
        #wait for each frame
        (frames + 1).times do
          Graphics.update
          update_sprites
        end
      end
      
      def update
        update_sprites
        case @scene
        when 1 #main
          update_main
        when 2 #select
          update_select
        when 3 #name
          update_name
        when 4 #copy/erase which
          update_copy_erase
        when 5 #copy to
          update_copy_to
        when 6 #are you sure
          update_are_you_sure
        when 7 #options
          update_options
        end
      end
      
      def update_sprites
        #pan the background
        @background.ox -= 1
        #update the sprites
        @sprites.each {|sprite| sprite.update}
        #move links/names to the relative file position
        @links.each do |i, link|
          next if link.fade_out
          link.x, link.y = @files[i].x + 102, @files[i].y + 6
          link.opacity = @files[i].opacity
        end
        @names.each do |i, name|
          name.x, name.y = @files[i].x + 130, @files[i].y
          name.opacity = @files[i].opacity
        end
      end
      #-----------------------------------------------------------------------------
      # Main
      #-----------------------------------------------------------------------------
      def update_main
        if Input.trigger?(Input::C)
          $game_system.se_play($data_system.decision_se)
          case @index
          when 0,1,2
            @names[@index].nil? ? main_name_transition : main_select_transition
          when 3,4
            @ce = @index == 3 ? true : false
            main_copy_erase_transition
          when 5
            main_options_transition
          end
        elsif Input.trigger?(Input::B)
          $game_system.se_play($data_system.cancel_se)
        elsif Input.repeat?(Input::DOWN)
          @index += 1
          @index = 0 if @index == 6
          update_main_index
        elsif Input.repeat?(Input::UP)
          @index -= 1
          @index = 5 if @index == -1
          update_main_index
        end
      end
      
      def update_main_index
        $game_system.se_play($data_system.cursor_se)
        @sprites.each {|sprite| sprite.phase = false}
        case @index
        when 0,1,2
          @files[@index].phase = true
        when 3
          @copy.phase = true
        when 4
          @erase.phase = true
        when 5
          @options.phase = true
        end
      end
      
      def main_select_transition
        @file = @index
        @files[@index].phase = false
        @sprites = [@copy,@erase,@options,@files[(@index+1)%3],@files[(@index+2)%3]]
        wait(10, false)
        @info.draw_info('Open this file?')
        @files[@index].move_to(124,148,10)
        @sprites = [@files[@index],@displays[@index],@yes,@quit]
        wait(10, true)
        @sprites = [@yes,@quit,@displays[@index]]
        @yes.phase = true
        @scene = 2
        @index = 0
      end
      
      def main_name_transition
        @file = @index
        @files[@index].phase = false
        @sprites = [@copy,@erase,@options,*@files]
        wait(10, false)
        @info.draw_info('Name?')
        @name.x, @name.y = 480, 91
        @name.move_to(200,91,10)
        @sprites = [@name,@table,@end,@back]
        wait(10, true)
        if PZE::KEYBOARD_NAME
          @keys.draw_info('Enter - Accept · Esc - Quit', 1)
          @keyboard = Sprite_Zelda_Title.new
          @keyboard.draw_info('Type your name using the keyboard', 1)
          @keyboard.y, @keyboard.opacity = 26, 255
        else
          @letter_cursor = Sprite_Zelda_Title.new
          @letter_cursor.draw_cursor
          @letter_cursor.x, @letter_cursor.y = 100, 136
        end
        @name_cursor = Sprite_Zelda_Title.new
        @name_cursor.draw_cursor
        @name_cursor.x, @name_cursor.y = 210, 78
        @scene = 3
        @index = 0
      end
      
      def main_copy_erase_transition
        @sprites.each{|sprite| sprite.phase = false}
        @sprites = [@copy,@erase,@options]
        wait(10, false)
        @info.draw_info((@ce ? 'Copy' : 'Erase') + ' which file?')
        @message.draw_info('This is an Empty File')
        @files.each_with_index {|file, i| file.move_to(124, 248 + i * 33, 10)}
        @message.visible = false
        @sprites = [@quit,@message,*@files]
        wait(10, true)
        @quit.phase = true
        @scene = 4
        @index = 3
      end
      
      def main_options_transition
        @sprites.each{|sprite| sprite.phase = false}
        wait(10, false)
        @info.draw_info('Options')
        @scene = 7
      end
      #-----------------------------------------------------------------------------
      # Select
      #-----------------------------------------------------------------------------
      def update_select
        if Input.trigger?(Input::C)
          case @index
          when 0
            load_game
          when 1
            select_main_transition
          end
        elsif Input.trigger?(Input::B)
          select_main_transition
        elsif Input.repeat?(Input::DOWN) || Input.repeat?(Input::UP)
          @index = (@index == 0 ? 1 : 0)
          update_select_index
        end
      end
      
      def update_select_index
        #play the cursor sound effect
        $game_system.se_play($data_system.cursor_se)
        #phase the selected index
        @sprites.each {|sprite| sprite.phase = false}
        case @index
        when 0
          @yes.phase = true
        when 1
          @quit.phase = true
        end
      end
      
      def load_game
        Audio.se_play('Audio/SE/Title Screen - Press Start', 100) #####
        file = File.open("Saves/Save#{@file + 1}.rxdata", 'rb')
        temp_load = Scene_Load.new
        temp_load.read_save_data(file)
        file.close
        if Graphics.frame_count <= 2
          #start a new game
          command_new_game
        else
          #load game
          Audio.bgs_stop
          Audio.bgm_stop
    	  $game_system.bgm_play($game_system.playing_bgm)
          $game_system.bgs_play($game_system.playing_bgs)
          $game_map.update
          $scene = Scene_Map.new
          if PZE::HERO_NAME
            $data_actors[$game_party.actors[0].id].name = $game_system.file_name
          end
        end
        #setup initial autosave coordinates
        $game_temp.autosave_coordinates = [$game_map.map_id, $game_player.x,
        $game_player.y, $game_player.direction]
      end
      
      def command_new_game
        #create the startup common event
        $game_temp.common_event_id = PZE::COMMON_EVENT
        #setup starting data
        $game_party.setup_starting_members
        $game_map.setup($data_system.start_map_id)
        if PZE::HERO_NAME && $game_party.actors[0] != nil
          $game_party.actors[0].name = $game_system.file_name
          $data_actors[$game_party.actors[0].id].name = $game_system.file_name
        end
        $game_player.moveto($data_system.start_x, $data_system.start_y)
        $game_player.refresh
        $game_map.autoplay
        $game_map.update
        $game_system.map_interpreter.update if PZE::COMMON_EVENT != 0
        $scene = Scene_Map.new
        #setup initial autosave coordinates
        $game_temp.autosave_coordinates = [$game_map.map_id, $game_player.x,
        $game_player.y, $game_player.direction]
      end
      
      def select_main_transition
        $game_system.se_play($data_system.cancel_se)
        @sprites.each {|sprite| sprite.phase = false}
        @sprites = [@displays[@file],@yes,@quit]
        wait(10, false)
        @info.draw_info('Please Select a File')
        @files[@file].move_to(124, 148 + @file * 33, 10)
        @sprites = [@erase,@copy,@options,*@files]
        wait(10, true)
        @files[@file].phase = true
        @index = @file
        @scene = 1
      end
      #-----------------------------------------------------------------------------
      # Name Entry
      #-----------------------------------------------------------------------------
      def update_name
        @name_cursor.update
        if PZE::KEYBOARD_NAME
          if Input.repeat?(Input::BACK)
            $game_system.se_play($data_system.cancel_se)
            return if @text == ''
            @text = @text[0,@text.size - 1] 
            @name.draw_name(@text)
            update_name_index
          elsif Input.trigger?(Input::ESC)
            $game_system.se_play($data_system.cancel_se)
            name_main_transition
          elsif Input.trigger?(Input::ENTER)
            if @text == ''
              $game_system.se_play($data_system.cancel_se)
              name_main_transition
            else
              new_file
            end
          elsif Input.typing?
            if @name.bitmap.text_size(@text).width >= 170
              $game_system.se_play($data_system.cancel_se)
            else
              $game_system.se_play($data_system.cursor_se)
              @text += Input.key_type
              @name.draw_name(@text)
              update_name_index
            end
          end
        else
          @letter_cursor.update
          if Input.repeat?(Input::C)
            case @index
            when 73, 74 #back
              $game_system.se_play($data_system.cancel_se)
              return if @text == ''
              @text = @text[0,@text.size - 1] 
              @name.draw_name(@text)
              update_name_index
            when 75, 76, 77 #end
              if @text == ''
                $game_system.se_play($data_system.cancel_se)
                name_main_transition
              else
                new_file
              end
            else #text
              if @name.bitmap.text_size(@text).width >= 170
                $game_system.se_play($data_system.cancel_se)
              else
                $game_system.se_play($data_system.decision_se)
                @text += @table.character_table[@index]
                @name.draw_name(@text)
                update_name_index
              end
            end
          elsif Input.repeat?(Input::B)
            $game_system.se_play($data_system.cancel_se)
            if @text == ''
              name_main_transition
            else
              @text = @text[0,@text.size - 1] 
              @name.draw_name(@text)
              update_name_index
            end
          elsif Input.repeat?(Input::DOWN)
            $game_system.se_play($data_system.cursor_se)
            if @index > 59
              @index / 13 == 5 ? @index -= 65 : @index += 13
            else
              @index / 13 == 4 ? @index -= 52 : @index += 13
            end
            update_name_index
          elsif Input.repeat?(Input::UP)
            $game_system.se_play($data_system.cursor_se)
            if (@index > 7 && @index < 13) || @index > 72
              @index / 13 == 0 ? @index += 65  : @index -= 13
            else
              @index / 13 == 0 ? @index += 52  : @index -= 13
            end
            update_name_index
          elsif Input.repeat?(Input::LEFT)
            $game_system.se_play($data_system.cursor_se)
            if @index > 74
              @index = 74
            elsif @index > 72
              @index = 75
            else
              @index % 13 == 0 ? @index += 12 : @index -= 1
            end
            update_name_index
          elsif Input.repeat?(Input::RIGHT)
            $game_system.se_play($data_system.cursor_se)
            if @index > 74
              @index = 74
            elsif @index > 72
              @index = 75
            else
              @index % 13 == 12 ? @index -= 12 : @index += 1
            end
            update_name_index
          end
        end
      end
      
      def update_name_index
        unless PZE::KEYBOARD_NAME
          @letter_cursor.x = 100 + (@index % 13) * 35
          @letter_cursor.y = 136 + (@index / 13) * 35
        end
        size = @name.bitmap.text_size(@text).width
        @name_cursor.x = 210 + size if size < 170
        @sprites.each {|sprite| sprite.phase = false}
        case @index
        when 73, 74 #back
          @back.phase = true
          @letter_cursor.visible = false unless PZE::KEYBOARD_NAME
        when 75, 76, 77 #end
          @end.phase = true
          @letter_cursor.visible = false unless PZE::KEYBOARD_NAME
        else #text
          @letter_cursor.visible = true unless PZE::KEYBOARD_NAME
        end
      end
      
      def new_file
        $game_system.se_play($data_system.decision_se)
        #reset globals
        Graphics.frame_count = 0
        $game_temp          = Game_Temp.new
        $game_system        = Game_System.new
        $game_system.file_name = @text
        $game_system.file_id = @file
        $game_switches      = Game_Switches.new
        $game_variables     = Game_Variables.new
        $game_self_switches = Game_SelfSwitches.new
        $game_screen        = Game_Screen.new
        $game_actors        = Game_Actors.new
        $game_party         = Game_Party.new
        $game_troop         = Game_Troop.new
        $game_map           = Game_Map.new
        $game_player        = Game_Player.new
        #setup starting data
        $game_party.setup_starting_members
        if PZE::HERO_NAME && $game_party.actors[0] != nil
          $game_party.actors[0].name = $game_system.file_name
          $data_actors[$game_party.actors[0].id].name = $game_system.file_name
        end
        $game_map.setup($data_system.start_map_id)
        $game_player.moveto($data_system.start_x, $data_system.start_y)
        $game_player.refresh
        #open the file
        file = File.open("Saves/Save#{@file + 1}.rxdata", 'wb')
        #create a temp save scene and write the save data
        temp_save = Scene_Save.new
        temp_save.write_save_data(file)
        #close the file
        file.close
        #create the name, display and link
        @names[@file] = Sprite_Zelda_Title.new
        @names[@file].draw_name(@text)
        @displays[@file] = Sprite_Zelda_Title.new
        @displays[@file].draw_display(@file)
        @displays[@file].x, @displays[@file].y, @displays[@file].z = 124, 148, 1
        @links[@file] = Sprite_Zelda_Title.new
        @links[@file].draw_link
        @links[@file].z = 2
        #transfer to main menu
        name_main_transition
      end
      
      def name_main_transition
        @sprites.each {|sprite| sprite.phase = false}
        unless PZE::KEYBOARD_NAME
          @letter_cursor.dispose 
          @letter_cursor = nil
        end
        @name_cursor.dispose
        @name_cursor = nil
        wait(10, false)
        if PZE::KEYBOARD_NAME
          @keys.draw_info('C - Decide · X - Cancel', 1)
          @keyboard.dispose
          @keyboard = nil
        end
        @info.draw_info('Please Select a File')
        @text = ''
        @name.draw_name
        @sprites = [@copy,@erase,@options,*@files]
        wait(10, true)
        @files[@file].phase = true
        @index = @file
        @scene = 1
      end
      #-----------------------------------------------------------------------------
      # Copy/Erase
      #-----------------------------------------------------------------------------
      def update_copy_erase
        if Input.trigger?(Input::C)
          case @index
          when 0,1,2
            if FileTest.exist?("Saves/Save#{@index + 1}.rxdata")
              $game_system.se_play($data_system.decision_se)
              @ce ? copy_copy_to_transition : erase_are_you_sure_transition
            else
              $game_system.se_play($data_system.buzzer_se)
            end
          when 3
            copy_erase_main_transition
          end
        elsif Input.trigger?(Input::B)
          copy_erase_main_transition
        elsif Input.repeat?(Input::DOWN)
          @index += 1
          @index = 0 if @index == 4
          update_copy_erase_index
        elsif Input.repeat?(Input::UP)
          @index -= 1
          @index = 3 if @index == -1
          update_copy_erase_index
        end
      end
      
      def update_copy_erase_index
        #play the cursor sound effect
        $game_system.se_play($data_system.cursor_se)
        #phase the selected index
        @sprites.each {|sprite| sprite.phase = false}
        case @index
        when 0,1,2
          @files[@index].phase = true
          if FileTest.exist?("Saves/Save#{@index + 1}.rxdata")
            @message.y = (@index - (@index < @file ? 0 : 1)) * 33 + 281
            @message.visible = (@scene == 4 ? false : true)
          else
            @message.y = @index * 33 + 248
            @message.visible = (@scene == 4 ? true : false)
          end
        when 3
          @message.visible = false
          @quit.phase = true
        end
      end
      
      def copy_erase_main_transition
        $game_system.se_play($data_system.cancel_se)
        @sprites.each {|sprite| sprite.phase = false}
        @message.visible = false
        @sprites = [@quit,@message]
        wait(10, false)
        @info.draw_info('Please Select a File')
        @files.each_with_index{|file, i| file.move_to(124, 148 + i * 33, 10)}
        @sprites = [@erase,@copy,@options,*@files]
        wait(10, true)
        @ce ? @copy.phase = true : @erase.phase = true
        @index = @ce ? 3 : 4
        @scene = 1
      end
      
      def copy_copy_to_transition
        @file = @index
        @sprites.each {|sprite| sprite.phase = false}
        @message.visible = false
        @files[@index].move_to(124, 148, 10)
        @files[0].move_to(124, 281, 10) if @index > 0
        @files[1].move_to(124, 314, 10) if @index > 1
        @sprites = [@quit,@displays[@index],*@files]
        wait(10, true)
        @info.draw_info('Copy to which file?')
        @message.draw_info('This file is in use')
        @quit.phase = true
        @index = 3
        @scene = 5
      end
      
      def erase_are_you_sure_transition
        @file = @index
        @sprites.each {|sprite| sprite.phase = false}
        @message.visible = false
        @sprites = [@files[(@index+1)%3],@files[(@index+2)%3]]
        wait(10, false)
        @info.draw_info('Are you sure?')
        @files[@index].move_to(124, 148, 10)
        @sprites = [@yes,@displays[@file],@files[@file]]
        wait(10, true)
        @sprites = [@yes,@quit,@displays[@file]]
        @quit.phase = true
        @index = 1
        @scene = 6
      end
      #-----------------------------------------------------------------------------
      # Copy to
      #-----------------------------------------------------------------------------
      def update_copy_to
        if Input.trigger?(Input::C)
          case @index
          when 0,1,2
            if FileTest.exist?("Saves/Save#{@index + 1}.rxdata")
              $game_system.se_play($data_system.buzzer_se)
            else
              $game_system.se_play($data_system.decision_se)
              copy_to_are_you_sure_transition
            end
          when 3
            copy_to_copy_transition
          end
        elsif Input.trigger?(Input::B)
          copy_to_copy_transition
        elsif Input.repeat?(Input::DOWN)
          loop do
            @index += 1
            @index = 0 if @index == 4
            break if @index != @file
          end
          update_copy_erase_index
        elsif Input.repeat?(Input::UP)
          loop do
            @index -= 1
            @index = 3 if @index == -1
            break if @index != @file
          end
          update_copy_erase_index
        end
      end
      
      def copy_to_copy_transition
        $game_system.se_play($data_system.cancel_se)
        @sprites.each {|sprite| sprite.phase = false}
        @message.visible = false
        @sprites = [@displays[@file],@yes]
        wait(10, false)
        @info.draw_info((@ce ? 'Copy' : 'Erase') + ' which file?')
        @message.draw_info('This is an Empty File')
        @files.each_with_index {|file, i| file.move_to(124, 248 + i * 33, 10)}
        @sprites = [@quit,*@files]
        wait(10, true)
        @quit.phase = true
        @index = 3
        @scene = 4
      end
      
      def copy_to_are_you_sure_transition
        @copy_to = @index
        @sprites.each {|sprite| sprite.phase = false}
        @message.visible = false
        @sprites = [@files[3 - (@file + @copy_to)]]
        wait(10, false)
        @info.draw_info('Are you sure?')
        @message.draw_info('This is an Empty File')
        @files[@index].move_to(124,249,10)
        @sprites = [@files[@copy_to],@yes,@quit]
        wait(10, true)
        @sprites = [@displays[@file],@yes,@quit]
        @quit.phase = true
        @index = 1
        @scene = 6
      end
      #-----------------------------------------------------------------------------
      # Are You Sure?
      #-----------------------------------------------------------------------------
      def update_are_you_sure
        if Input.trigger?(Input::C)
          case @index
          when 0
            $game_system.se_play($data_system.decision_se)
            @ce ? copy_file : erase_file
          when 1
            @ce ? are_you_sure_copy_to_transition : copy_to_copy_transition
          end
        elsif Input.trigger?(Input::B)
          @ce ? are_you_sure_copy_to_transition : copy_to_copy_transition
        elsif Input.repeat?(Input::DOWN) || Input.repeat?(Input::UP)
          @index = (@index == 0 ? 1 : 0)
          update_select_index
        end
      end
      
      def copy_file
        @sprites.each {|sprite| sprite.phase = false}
        Audio.se_play('Audio/SE/System - Load Screen - Copy File', 100) ##
        [@yes,@quit].each{|sprite| sprite.fade_out(255 / 10)}
        @sprites = [@displays[@file],@yes,@quit]
        wait(10)
        @displays[@copy_to] = Sprite_Zelda_Title.new
        @displays[@copy_to].draw_display(@file)
        @displays[@copy_to].x, @displays[@copy_to].y = 124, 249
        @displays[@copy_to].z = 1
        @names[@copy_to] = Sprite_Zelda_Title.new
        @names[@copy_to].draw_name(@displays[@file].file_name)
        @names[@copy_to].x, @names[@copy_to].y = 154, 249
        @links[@copy_to] = Sprite_Zelda_Title.new
        @links[@copy_to].draw_link
        @links[@copy_to].x, @links[@copy_to].y = 134, 258
        @links[@copy_to].z = 2
        @sprites = [@displays[@file],@displays[@copy_to]]
        wait(10, true)
        @sprites = [@displays[@file],@displays[@copy_to],@links[@copy_to]]
        wait(10, true)
        file = File.open("Saves/Save#{@file + 1}.rxdata",'rb')
        copy = File.open("Saves/Save#{@copy_to + 1}.rxdata",'wb')
        copy.write(file.read)
        file.close
        copy.close
        wait(20)
        @sprites = [@displays[@file],@displays[@copy_to]]
        wait(10,false)
        @info.draw_info('Please Select a File')
        @files.each_with_index{|file, i| file.move_to(124,148 + i * 33,10)}
        @sprites = [@copy,@erase,@options,*@files]
        wait(10,true)
        @displays[@copy_to].y = 148
        @files[0].phase = true
        @index = 0
        @scene = 1
      end
      
      def erase_file
        @sprites.each {|sprite| sprite.phase = false}
        Audio.se_play('Audio/SE/System - Load Screen - Erase File', 100) ########
        @sprites = [@yes,@quit,@links[@file]]
        wait(10,false)
        @links[@file].dispose
        @links.delete(@file)
        @names[@file].dispose
        @names.delete(@file)
        @info.draw_info('File erased')
        @displays[@file].move_to(124,480,10)
        @sprites = [@displays[@file],@files[(@file+1)%3],@files[(@file+2)%3]]
        wait(10,false)
        @displays[@file].dispose
        @displays.delete(@file)
        File.delete("Saves/Save#{@file + 1}.rxdata") 
        wait(20)
        @info.draw_info('Please Select a File')
        @files.each_with_index{|file, i| file.move_to(124,148 + i * 33,10)}
        @sprites = [@copy,@erase,@options,*@files]
        wait(10,true)
        @files[0].phase = true
        @index = 0
        @scene = 1
      end
      
      def are_you_sure_copy_to_transition
        $game_system.se_play($data_system.cancel_se)
        @sprites.each {|sprite| sprite.phase = false}
        @sprites = [@yes]
        wait(10, false)
        @info.draw_info('Copy to which file?')
        @message.draw_info('This file is in use')
        y = 281 + ((3 - (@file + @copy_to)) < @copy_to ? 33 : 0)
        @files[@copy_to].move_to(124, y, 10)
        @sprites = [@displays[@file],@quit,*@files]
        wait(10, true)
        @quit.phase = true
        @index = 3
        @scene = 5
      end
      #-----------------------------------------------------------------------------
      # Options
      #-----------------------------------------------------------------------------
      def update_options
        if Input.trigger?(Input::B)
          options_main_transition
        end
      end
      
      def options_main_transition
        $game_system.se_play($data_system.cancel_se)
        wait(10, true)
        @info.draw_info('Please Select a File')
        @options.phase = true
        @index = 5
        @scene = 1
      end
    end
    
    #===============================================================================
    # Scene_Map
    #===============================================================================
    
    class Scene_Map
      alias max_ztitle_main_later main unless $@
      alias max_ztitle_update_later update unless $@
      alias max_ztitle_transfer_later transfer_player unless $@
      def main
        max_ztitle_main_later
        #dispose the quicksave sprite if it exists
        @quick_save_load.dispose unless @quick_save_load.nil?
      end
      
      def update
        max_ztitle_update_later
        if PZE::QUICKSAVE && !$game_temp.message_window_showing
          if Input.trigger?(PZE::QUICKSAVE_INPUT) #save
            #delete the old sprite
            unless @quick_save_load.nil?
              @quick_save_load.dispose
              @quick_save_load = nil
            end
            #flag for quicksave
            $game_temp.pze_quicksaving = true
            #save the game
            number = ($game_temp.pze_quickstart ? 0 : $game_system.file_id + 1)
            file = File.open("Saves/Quicksave#{number}.rxdata", 'wb')
            temp_save = Scene_Save.new
            temp_save.write_save_data(file)
            Marshal.dump($game_temp, file)
            file.close
            #deflag quicksave
            $game_temp.pze_quicksaving = false
            #show the save sprite
            @quick_save_load = Sprite_Quick_Save_Load.new('Quicksave Wrote')
          elsif Input.trigger?(PZE::QUICKLOAD_INPUT) #load
            #delete the old sprite
            unless @quick_save_load.nil?
              @quick_save_load.dispose
              @quick_save_load = nil
            end
            number = ($game_temp.pze_quickstart ? 0 : $game_system.file_id + 1)
            #if a quicksave file exists
            if FileTest.exist?("Saves/Quicksave#{number}.rxdata")
              #load the game
              file = File.open("Saves/Quicksave#{number}.rxdata", 'r')
              temp_load = Scene_Load.new
              temp_load.read_save_data(file)
              $game_temp = Marshal.load(file)
              file.close
              #refresh the spriteset
              @spriteset.dispose
              @spriteset = Spriteset_Map.new
              #replay music
              $game_system.bgm_play($game_system.playing_bgm)
              $game_system.bgs_play($game_system.playing_bgs)
              #update the map
              $game_map.update
              #show the load sprite
              @quick_save_load = Sprite_Quick_Save_Load.new('Quicksave Loaded')
            #else if there is no quicksave available
            else
              #show error message
              error = 'Error: No quicksave available'
              @quick_save_load = Sprite_Quick_Save_Load.new(error)
            end
          end
          unless @quick_save_load.nil?
            #update the sprite
            @quick_save_load.update
            #dispose the sprite if needed
            if @quick_save_load.count == 100
              @quick_save_load.dispose
              @quick_save_load = nil
            end
          end
        end
        if $game_temp.pze_loading
          @spriteset.dispose
          @spriteset = Spriteset_Map.new
          $game_temp.pze_loading = false
        end
      end
      
      def transfer_player
        max_ztitle_transfer_later
        #autosave coordinates if enabled
        if $game_system.pze_autosave
          $game_temp.autosave_coordinates = [$game_map.map_id,
          $game_player.x, $game_player.y, $game_player.direction]
        end
      end
    end
    
    #===============================================================================
    # Scene_Save
    #===============================================================================
    
    class Scene_Save < Scene_File
      alias max_ztitle_save_later write_save_data unless $@
      def write_save_data(*args)
        if PZE::ZELDASAVE && !$scene.is_a?(Scene_Title) &&
           !$game_temp.pze_quicksaving
          #save current data
          map = $game_map.map_id
          x, y, d = $game_player.x, $game_player.y, $game_player.direction
          map_x, map_y = $game_map.display_x, $game_map.display_y
          #overwrite current data
          $game_map.map_id = $game_temp.autosave_coordinates[0]
          $game_player.moveto($game_temp.autosave_coordinates[1],
                              $game_temp.autosave_coordinates[2])
          case $game_temp.autosave_coordinates[3]
          when 2  # down
            $game_player.turn_down
          when 4  # left
            $game_player.turn_left
          when 6  # right
            $game_player.turn_right
          when 8  # up
            $game_player.turn_up
          end
          #end the running interpreter
          $game_system.map_interpreter.command_end
          #write the save data
          max_ztitle_save_later(*args)
          #reload the old data
          $game_map.map_id = map
          $game_player.moveto(x,y)
          $game_map.display_x, $game_map.display_y = map_x, map_y
          case d
          when 2  # down
            $game_player.turn_down
          when 4  # left
            $game_player.turn_left
          when 6  # right
            $game_player.turn_right
          when 8  # up
            $game_player.turn_up
          end
        else
          max_ztitle_save_later(*args)
        end
      end
    end
    
    #===============================================================================
    # Scene_Gameover
    #===============================================================================
    
    class Scene_Gameover
      alias max_ztitle_update_later update unless $@
      def update
        if PZE::GAMEOVER
          unless @command.nil?
            @command.update
            if Input.trigger?(Input::C)
              $game_system.se_play($data_system.decision_se)
              #deflag gameover
              $game_temp.gameover = false
              #recover the player
              $game_party.actors[0].recover_all
              #set player hp to gameover hp
              $game_party.actors[0].hp = $game_system.pze_gameover_hp
              #refresh the player
              $game_player.refresh
              case @command.index
              when 0 #save and continue
                #save, load then go to map
                PZE.save
                PZE.load
                return_to_autosave_position
              when 1 #save and quit
                #save and go to title
                PZE.save
                $scene = Scene_Cutscene.new (SCENE::MM_MAIN) ##
              when 2 #continue without saving
                return_to_autosave_position
              end
              #fade out
              8.times do 
                Graphics.update
                @command.opacity -= 32
              end
              @command.dispose
            end
          else
            if Input.trigger?(Input::C) || Input.trigger?(Input::B)
              $game_system.se_play($data_system.decision_se)
              #create the command window
              text = ['Save and Continue','Save and Quit','Continue without saving']
              @command = Window_Command.new(260, text)
              unless PZE::GAMEOVER_WINDOWSKIN == ''
                @command.windowskin = RPG::Cache.windowskin(PZE::GAMEOVER_WINDOWSKIN)
              end
              @command.x, @command.y = 190, 288
              @command.opacity = 0
              #fade in
              8.times do 
                Graphics.update
                @command.opacity += 32
              end
            end
          end
        else
          max_ztitle_update_later
        end
      end
      def return_to_autosave_position
        #reset coordinates if zeldasave
        if PZE::ZELDASAVE
          if $game_map.map_id != $game_temp.autosave_coordinates[0]
            $game_map.setup_map($game_temp.autosave_coordinates[0])
          end
          $game_player.moveto($game_temp.autosave_coordinates[1],
                              $game_temp.autosave_coordinates[2])
          case $game_temp.autosave_coordinates[3]
          when 2  # down
            $game_player.turn_down
          when 4  # left
            $game_player.turn_left
          when 6  # right
            $game_player.turn_right
          when 8  # up
            $game_player.turn_up
          end
          #end the interpreter
          $game_system.map_interpreter.command_end
        end
        # XAS Compatability: turn off the gameover switch
        unless XAS_BA.nil?
          $game_switches[XAS_BA::GAMEOVER_SWITCH_ID] = false
        end
        #reset to scene map
        $scene = Scene_Map.new
      end
      private :return_to_autosave_position
    end

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •