Ergebnis 1 bis 7 von 7

Thema: VX ACE [RGSS3] Titelbildschirm der sich bei Spielfortschritt verändert[Gelöst]

  1. #1

    VX ACE [RGSS3] Titelbildschirm der sich bei Spielfortschritt verändert[Gelöst]

    Hallo Leute, Räbbit mal wieder, mit einer Frage, die wohl eher was für fortgeschrittene Skripter sein dürfte.
    Und zwar:

    Gibt es eine Möglichkeit, in Kombination mit dem Skippen des Standard-Titelscreens (per Script), diesen Dauerhaft zu ändern (Andere Map/ andere Events), wenn man im Spiel fortschreitet. (Einen gewissen Punkt im Spiel erreicht/ Ein bestimmtes Save im Spielordner liegt)
    Als Laie stelle ich mir das so vor, dass es vllt. eine Möglichkeit gibt, auf der ersten Map (Titelbildschirm wird übersprungen, nicht zu vergessen) eine Skript abfrage gibt, die testet ob ein gewisser (globaler?) Schalter umgelegt, oder eine Variable gesetzt wurde.
    Dann noch ein normaler Cond. Branch auf welchen Titelscreen gesprungen werden soll und so weiter.

    Ich hoffe es ist verständlich was ich meine. Mache mir auch nicht allzu viele Hoffnungen, dass so etwas möglich ist, aber vielleicht weiß es ja einer der Cracks unter euch besser?

    Freue mich wie immer auf eure Antworten! : )

    Geändert von Mr.Räbbit (28.01.2015 um 19:51 Uhr)

  2. #2
    Das ist durchaus möglich, sogar recht einfach. Am besten wäre aber, du postest mal dein Skip-Script oder verlinkst es zumindest, das macht die Sache leichter.

  3. #3
    Wenn das tatsächlich gehen sollte, wäre das mehr als genial : D
    Bisher kenne ich mich mit der Skriptsprache zu wenig aus, um selber größere Experimente diesbezüglich durchzuführen.
    Geschweige denn solche, die mehr oder weniger über die Anwendung selbst hinausgehen.

    Das genutzte Skript:
    #==============================================================================
    # Skip Title Screen JV Master Script
    #------------------------------------------------------------------------------
    # Skip Title Screen, going to first game map.
    #==============================================================================


    #==============================================================================
    # Scene Title
    #==============================================================================
    class Scene_Title < Scene_Base
    def start
    SceneManager.clear
    Graphics.freeze
    DataManager.setup_new_game
    $game_map.autoplay
    SceneManager.goto(Scene_Map)
    end

    def terminate
    SceneManager.snapshot_for_background
    Graphics.fadeout(Graphics.frame_rate)
    end
    end
    #==============================================================================

  4. #4
    Okay, probier mal ob das tut was du willst (bzw. ob es überhaupt tut, ich hab den Maker nicht hier ). Gehört in einen neuen Slot über Main, das alte Script kannst du löschen.

    Das Script vergleicht zwischen allen existierenden Spielständen den Wert der Variable, die man bei TITLE_CHECK_VAR angeben kann und wählt dann den größten.

    Bei TITLE_LIST kannst du angeben, welche Map je nach Wert als "Titel" dienen soll und optional auch die Startkoordinaten, wenn die fehlen, wird oben links 0,0 genommen. Wenn das Script keinen Eintrag findet, nimmt es die Map und Koordinaten aus dem Editor.

    Code:
    class Scene_Title <Scene
      
      TITLE_CHECK_VAR = 1 # Die ID der Variable, die verglichen werden soll
      
      # Eine Liste, die möglichen Variablenwerten eine Map zuweist
      # Das Muster ist:
      # Wert der Variable => [Map-ID, optionale X-Koordinate, optionale Y-Koordinate]
      TITLE_LIST = {
        1 => [2, 3, 4],    #\
        17 => [32, 15, 8], #- Das sind nur Beispiele, die man löschen kann, falls das unklar ist xD
        42 => [5]          #/
      }
      
      def start
        SceneManager.clear
        Graphics.freeze
        setup_new_game
        $game_map.autoplay
        SceneManager.goto(Scene_Map)
      end
    
      def terminate
        SceneManager.snapshot_for_background
        Graphics.fadeout(Graphics.frame_rate)
      end
      
      ##
      # Hier passiert eigentlich die ganze Zauberei
      # Es werden alle Speicherstände der Reihe nach durchgegangen
      # und der größte Wert unserer Variablen ermittelt
      def setup_new_game
        vars = []
        DataManager.all_savefiles do |file|
          vars << DataManager.load_game_vars(file)[TITLE_CHECK_VAR]
        end
        max = vars.max
        if TITLE_LIST.has_key?(max)
          DataManager.setup_new_game(*TITLE_LIST[max])
        else
          # Wenn wir keinen gültigen Eintrag für den Wert in unserer Liste haben, nehmen wir die Werte aus der Database
          DataManager.setup_new_game($data_system.start_map_id, $data_system.start_x, $data_system.start_y)
        end
      end
    end
    
    module DataManager
      ##
      # Wir überschreiben die Originalmethode, sodass wir jetzt selbst angeben können,
      # von welcher Map und welchen Koordinaten wir das Spiel starten wollen.
      def self.setup_new_game(map_id, x=0, y=0)
        create_game_objects
        $game_party.setup_starting_members
        $game_map.setup(map_id)
        $game_player.moveto(x, y)
        $game_player.refresh
        Graphics.frame_count = 0
      end
      
      ##
      # In Spielständen steht ein Haufen Kram. Uns interessieren nur die Variablen
      def self.load_game_vars(filename)
        contents = File.open(filename, "rb") do |file|
          Marshal.load(file) # Header, uninteressant für uns
          Marshal.load(file)
        end
        return contents[:variables]
      rescue
        return Game_Variables.new
      end
      
      ##
      # Gibt uns alle existierenden Spielstände
      def self.all_savefiles
        if block_given?
          Dir.glob('Save*.rvdata2') do |file|
            yield file
          end
        else
          Dir.glob('Save*.rvdata2')
        end
      end
    end

    Geändert von Cepanks (28.01.2015 um 18:47 Uhr) Grund: Game_Variables, nicht GameVariables

  5. #5
    Hey, das ging ja schnell!

    Ich habe mal versucht es einzurichten und es scheint gut zu funktionieren! : D
    Habe es mit 2 Bildschirmen getestet, da gab es bis jetzt 0 Probleme = Hammer!

    Ein dickes, dickes Dankeschön an dich! Astreine Arbeit!

    Wie stehst du zu dem Script? Darf ich das mit Erwähnung deines Namens auch an andere Bedürftige weitergeben? Und wie stehts mit der kommerziellen Nutzung? *hust* ^^

  6. #6
    Zitat Zitat von Maister-Räbbit Beitrag anzeigen
    Wie stehst du zu dem Script? Darf ich das mit Erwähnung deines Namens auch an andere Bedürftige weitergeben? Und wie stehts mit der kommerziellen Nutzung? *hust* ^^
    Klar, mach damit was du willst, das ganze war weit weniger aufwendig, als du vermutlich denkst.
    Papp das hier von mir aus oben drüber und gut is.
    Zitat Zitat
    ####
    # Extended Skip Title by Cepanks
    # Released under the WTFPL; see http://www.wtfpl.net/txt/copying/ for details.
    ####

  7. #7
    Diese Lizenz kannte ich ja noch gar nicht xD

    Vielen Dank, Alter! ^^

Berechtigungen

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