Ergebnis 1 bis 17 von 17

Thema: [RMXP] Kann ich die Macken des Makers bei Animation und Textbox beheben?

  1. #1

    [RMXP] Kann ich die Macken des Makers bei Animation und Textbox beheben?

    Hiho,

    Ich habe seit einiger Zeit wieder etwas mit dem Maker (XP) gearbeitet und ein paar kleine Problemchen, aus denen ich nicht so richtig schlau werde.

    Punkt 1: Wenn ich in Zwichensequenzen oder sonst wo, Charaktere animiere, verwende ich den "Set move route" > "Change Graphic"-Befehl, um die einzelnen Animationsphasen aus den Charakter- und Pose-Dateien einzustellen. Das klappt eigentlich auch meistens ohne Probleme, aber manchmal - und ich kann wirklich nicht nachvollziehen warum an diesen Stellen und anderswo nicht - kommt der Maker mit der Ausrichtung durcheinander und zeigt den falschen Animationsframe an. Das hat was mit der Ausrichtung der Events zu tun, aber manchmal kommt er an einer Stelle der Szene durchainander und bei all den anderen, genau auf die gleiche Art eingestellten Graphic-Changes geht alles ohne Probleme vonstatten.

    Punkt 2: Ich war ja regelrecht entsetzt als ich gesehen habe, dass, nachdem ich mir nach langer Maker-Abstinenz den XP im Humble-Bundle gekauft hatte (bei meiner alten Version ging irgendwie die Aktivierung nicht mehr...), nach all den Jahren, die SCHEISS 3-Zeilen-Textbox immer noch drin ist! Die haben diesen Bug echt nie gefixt? Gibt's wenigstens irgendeine Community-Lösung für das Problem? Weil, es ist extrem nervig, wenn man längere Dialoge schreibt, vor allem wenn man hinterher merkt, dass irgendwo ein Tippfehler drinne ist und dann das Textmaß nicht mehr passt...

    Irgendjemand eine Idee dazu? Nein?? Schade...

  2. #2
    Punkt 1: Ja, der XP ist dort inkonsistent. Ich mache das so, dass ich beim Wechsel des Bildes immer die gleiche Blickrichtung benutze. Also: Schaut der Chara nach rechts, müssen alle Animationsschritte auch nach rechts schauen. Bei aufwändigen Animationen würde ich den Charset gegen einen Dummy austauschen und die Animation per Variable anzeigen.

    Punkt 2: Der einzige Ausweg ist Rechtsklick und Batch Text Entry. Wenn man die Textbox überarbeiten möchte, ist das immer noch umständlich, aber zumindest kann man so alle 4 Zeilen nutzen.

  3. #3
    @Kelven: Danke für die flotte Antwort

    Punkt 1: Es gibt also keine Lösung oder wenigstens eine Faustregel, bei welchen Konstellationen von Ausrichtung/Animationsframe das auftritt? Ärgerlich!

    Punkt 2: Ja, genau so mache ich es die ganze Zeit. Aber wenn ich beim Testen dann einen meiner zahlreichen rechdshräipfelr finde bleibt mir nichts anderes übrig als den kompletten Text aus der Box zu kopieren und nochmal per Batch-Text-Entry einzufügen, damit ich einen einzelnen fehlerhaften Buchstaben austauschen kann. Nervig und beim nächsten Testlauf merke ich dann erst, das ich vergessen habe die alte Textbox zu löschen und der Typ jetzt 2 mal den selben Text aufsagt...

  4. #4
    Du könntest natürlich auch alle Dialoge im Script-Editor schreiben und per Call-Script ausführen lassen.
    Vielleicht findest du das ja einfacher.

  5. #5
    Zitat Zitat von Cornix Beitrag anzeigen
    Du könntest natürlich auch alle Dialoge im Script-Editor schreiben und per Call-Script ausführen lassen.
    Vielleicht findest du das ja einfacher.
    Öhm...
    nicht so richtig, weil ich auch gar nicht weiß wie das geht ^^'

  6. #6
    Du würdest einfach nur den Text in dem Scripteditor schreiben anstatt im Event.

    Hier ist einmal ein ganz schnellers, einfaches Script, welches dir erlaubt die Nachrichten einfach im Scripteditor zu definieren und über die Call-Script Methode auf zu rufen:
    Code:
    class Interpreter
      
      @@msgHash = {}
      
      @@msgHash["msg1"] = 
        "This is a test." + "\n" + "Its only purpose is to test the system."
      @@msgHash["msg2"] = 
        "Just another test..."
      
      def showMessage(msgKey)
        msg = @@msgHash[msgKey]
        
        if msg == nil
          msg = "<Unknown Message>"
        end
        
        @message_waiting = true
        $game_temp.message_proc = Proc.new { @message_waiting = false }
        $game_temp.message_text = msg
        
        return true
      end
      
    end
    Wenn du in deinem Event folgenden Code eingibst kannst du dann eine Nachricht anzeigen:
    Code:
    showMessage("schlüsselwort")
    Du kannst also einfach die einzelnen Nachrichten mit einem Schlüsselwort versehen (im Beispiel "msg1") und dann den eigentlichen Text im Scripteditor schreiben.
    Falls das Schlüsselwort nicht erkannt wird, würde das Script einfach "<Unknown Message>" in die Message-Box schreiben.

    Du kannst es ja einfach einmal ausprobieren, am besten mit folgenden drei Zeilen:
    Code:
    showMessage("msg1")
    showMessage("msg2")
    showMessage("msg3")
    Man könnte sogar die Texte aus einem Textdokument von der Festplatte laden lassen, damit du nichteinmal den Scripteditor öffnen musst. Das macht es auch unglaublich einfach das Spiel am Ende zu übersetzen.

    Geändert von Cornix (17.07.2014 um 15:45 Uhr)

  7. #7
    Ich hab das mal getestet und zwar nur mit msg1. Beim ersten Aufruf wird der Text angezeigt, danach nicht mehr.

  8. #8
    Zitat Zitat von Cornix Beitrag anzeigen
    Du würdest einfach nur den Text in dem Scripteditor schreiben anstatt im Event.
    Yo, klingt zwar recht praktisch und interessant, aber ich glaube das ist nichts für mich. Nicht wegen des scriptens wegen, aber, jede Message mit einem eigenen Codewort zu versehen würde bei mir unglaublich schnell in Chaos enden. Ich arbeite recht iterativ musst du wissen, setze immer mal wieder Textboxen um oder neue dazwischen. So würde es nicht lange dauern und zwischen "msg1" und "msg2" würde "msg475" stehen. Und mich dann langfristig noch zurecht zu finden wäre ein Ding der Unmöglichkeit...

    Trotzdem Danke

  9. #9
    Es hindert dich niemand daran statt "msg475" sowas wie "Finsterforst (Map 123) Opa Karls Mango-Quest" als Schlüssel zu wählen

    Mit Strg+F lässt sich sowas dann auch recht schnell wieder finden.

  10. #10
    @Kelven:
    Ich sehe schon, der XP hat wirklich ein schlechtes Scripting. Hier eine verbesserte Variante:
    Code:
    class Interpreter
      
      @@msgHash = {}
      
      @@msgHash["msg1"] = 
        "This is a test." + "\n" + "Its only purpose is to test the system."
      @@msgHash["msg2"] = 
        "Just another test..."
      
      def showMessage(msgKey)
        msg = @@msgHash[msgKey]
        
        if msg == nil
          msg = "<Unknown Message>"
        end
        
        @message_waiting = true
        $game_temp.message_proc = Proc.new { @message_waiting = false }
        $game_temp.message_text = msg.clone
        
        return true
      end
      
    end
    Ich würde auch nicht empfehlen die Schlüsselwörter "msg1" und dergleichen zu nennen. Du kannst dafür beliebig lange Texte benutzen, zum Beispiel:
    Code:
    showMessage("Dialog zwischen Alex und Alexina über Alex Vater")
    Aber natürlich kann man das Script auch sehr leicht abändern, dass du den Text einfach direkt eingeben kannst. Natürlich hast du damit jedoch wahrscheinlich noch weniger Platz als zuvor.

  11. #11
    Tja, also im Prinzip gibt's keine wirklichen Lösungen für diese Problem, mit denen ich zumindest im aktuellen Projekt was anfangen könnte.
    Texte aus Dateien auszulesen wäre zwar eigentlich eine feine Sache, da ich aber an einem alten Projekt arbeite, was auch schon fast fertig ist, lohnt sich's wohl nicht mehr damit anzufangen. Vor allem mache ich mir da Sorgen wie ich das Textmaß einhalten soll, ich seh ja dann nicht, wie viel Text in die Box passt, wenn das Eingabefeld nicht da ist. Wie wird das eigentlich gelöst?

    Viel problematischer ist aber immer noch die Sache mit der Animation. Ist schon doof wenn ein Charakter plötzlich ein Handy in der Hand hat, obwohl er doch eigentlich grade eine Axt schwingen sollte...
    Naja, muss ich halt aufpassen.

    Danke erstmal für de Antworten,

    MfG

    Lil_Lucy

  12. #12
    Es sollte, theoretisch, kein Problem sein das Message-System so um zu schreiben, dass Zeilenumbrücke automatisch geschehen. Ich verstehe sowieso nicht, weshalb man die Zeilenumbrücke im Maker manuell setzen muss.
    Aber ohne weitere Änderungen vorzunehmen wird es dir wohl nicht so sehr bei deinem Problem helfen wie du es gerne hättest. Man muss immer die Vor- und Nachteile für einen selbst abwägen.

  13. #13
    Hey,

    vielleicht ist dieser Ansatz das, was du suchst. Du kannst Kommentare in Events verwenden, die dann in Texte umgewandelt werden.
    Allerdings kam ich noch nicht dazu, das Script auch zu testen. Hab's nur kurz erstellt und an 2-3 Beispielen getestet. Sollten dir irgendwelche Fehler ins Gesicht springen, gibt einfach Bescheid.

    Füge das folgende Script einfach über Main ein:
    Code:
    class Interpreter
    
      # call command_108 method if comment command is used
      alias org_execute_command execute_command
      def execute_command
        if(@index < @list.size)
          if(@list[@index].code == 108) #comment command
            return command_108
          else
            return org_execute_command
          end
        else
          command_end
          return true
        end
      end
      
      def command_108
        mls = 448 # max textsize per line
        text = @list[@index].parameters[0] # first line of the comment command
        
        #for every addtional command line (code = 408) // max. 5 additional lines
        for i in 1..5
          if(@list[@index+i].code == 408)
            text += @list[@index+i].parameters[0]
          else
            break
          end
        end
        
        #after extracting texts, delete old comment lines from event command list
        for i in 0..4
          if(@list[@index+5-i].code == 408)
            @list.delete_at(@index+5-i)
          else
            break
          end
        end
        
        tmsgbx = Bitmap.new(1,1)
        
        # multiple lines needed?
        if(tmsgbx.text_size(text).width>mls)
          iLength = 0
          textarray = [""]
          ## create Substrings
          substrings = text.scan(/\S+|\s+/)
          ## check if line size limit is reached and switch to next line
          substrings.each do |ttext|
            subsize = tmsgbx.text_size(ttext).width
            linesize = tmsgbx.text_size(textarray[iLength]).width
            if(( subsize + linesize) > mls)
              iLength = iLength + 1
            end
            if(textarray[iLength]!=nil)
              textarray[iLength]= textarray[iLength]+ttext
            else
              ttext.slice!(/\s*/)
              textarray[iLength]= ttext
            end
          end
          ## insert every line as command list element
          added = 1
          textarray.each_with_index do |msgtext,indx|
            if(indx == 0)
              @parameters = msgtext
              @list[@index].code = 101
            else
              @list.insert(@index+added, RPG::EventCommand.new()) 
              @list[@index+added].parameters[0] = msgtext
              @list[@index+added].code = (indx % 4) == 0 ? 101 : 401
              added += 1
            end
          end
          command_101
        else
        ## one-liner
          command_101
        end    
      end
    end

  14. #14
    Hier noch eine kleine Anpassung (mit dem Befehl #nl kann man einen Zeilenumbruch erzwingen)

    Code:
    class Interpreter
    
      # call command_108 method if comment command is used
      alias org_execute_command execute_command
      def execute_command
        if(@index < @list.size)
          if(@list[@index].code == 108) #comment command
            return command_108
          else
            return org_execute_command
          end
        else
          command_end
          return true
        end
      end
      
      def command_108
        mls = 448 # max textsize per line
        text = @list[@index].parameters[0] # first line of the comment command
        
        #for every addtional command line (code = 408) // max. 5 additional lines
        for i in 1..5
          if(@list[@index+i].code == 408)
            text += @list[@index+i].parameters[0]
          else
            break
          end
        end
        
        #after extracting texts, delete old comment lines from event command list
        for i in 0..4
          if(@list[@index+5-i].code == 408)
            @list.delete_at(@index+5-i)
          else
            break
          end
        end
        
        tmsgbx = Bitmap.new(1,1)
        
        # multiple lines needed?
        if(tmsgbx.text_size(text).width>mls)
          iLength = 0
          textarray = [""]
          ## create Substrings
          substrings = text.scan(/\S+|\s+/)
          ## check if line size limit is reached and switch to next line
          substrings.each do |ttext|
            if(ttext == "#nl")
              iLength = iLength + 1
              textarray << ""
              next
            end
            
            subsize = tmsgbx.text_size(ttext).width
            linesize = tmsgbx.text_size(textarray[iLength]).width
            if(( subsize + linesize) > mls)
              iLength = iLength + 1
            end
            
            if(textarray[iLength]!=nil)
              textarray[iLength]= textarray[iLength]+ttext
            else
              ttext.slice!(/\s*/)
              textarray[iLength]= ttext
            end
          end
          ## insert every line as command list element
          added = 1
          textarray.each_with_index do |msgtext,indx|
            if(indx == 0)
              @parameters = msgtext
              @list[@index].code = 101
              @list[@index].parameters[0] = msgtext
            else
              @list.insert(@index+added, RPG::EventCommand.new()) 
              @list[@index+added].parameters[0] = msgtext
              @list[@index+added].code = (indx % 4) == 0 ? 101 : 401
              added += 1
            end
          end
          command_101
        else
        ## one-liner
          command_101
        end    
      end
    end

    Geändert von Linkey (22.07.2014 um 07:18 Uhr) Grund: Testbefehl "p(substrings)" aus dem Skript entfernt.

  15. #15
    Also um alten Scheiß nochmal aufzuwärmen: Ich habe grad mal gegoogelt, wegen dem Problem mit der 3-Zeilen-Textbox und es scheint einen Patch zu geben, der dieses behebt. Dummerweise scheint es zumindest mit der Steam-Version des RMXP nicht zu funktionieren, die lässt sich dann nicht mehr starten. Hat irgendjemand Lust das mal mit der Nicht-Steam-Version auszuprobieren, bzw. hat den Versuch schon hinter sich? Der Patch verändert nur die Startdatei, man muss also kein komplettes BackUp machen und der Schaden ist dann auch schnell behoben.

    EDIT: Link vergessen: http://rpgcrisis.net/forums/files/fi...ur-text-lines/

    Geändert von Lil_Lucy (27.08.2014 um 19:34 Uhr)

  16. #16
    Hey,

    Punkt1:
    Kenne ich, ich bin da ganz bei dir! Damals in meinem alten Projekt wo ich aufwendige Cutscenes erstellt habe, in denen auch schnelle Char Animationen nötig waren wie z.B. animierte Kämpfe die mehr waren als das übliche show battle animation auf char mit der id x, musste ich auch auf rgss zurück greifen. Zu der Zeit hatte mir soweit ich mich erinnern kann Monsta, ein altes Mitglied im rpg-studio, was kleines gebastelt. Damit war es mir möglich komfortabel per call script die char grafik jederzeit zu ändern, auch unabhängig ob sich das Event bewegt oder nicht. Hat mir in dem Fall sehr weiter geholfen und mehr Möglichkeiten gebracht. Ich schau mal, ob ich das raus kramen kann.

    Punkt2:
    Warum nutzt du nicht einfach den Limes Patch, gibts im rpg-studio zu finden.
    http://www.rpg-studio.org/forum/inde...596#post531596
    Funzt nur mit einer legalen aktuellen Maker Version und ändert nicht die Dateien auf der Festplatte. Hab allerdings keine Steam Version, sollte da aber kein Unterschied sein!?

  17. #17
    Zitat Zitat von schmoggi Beitrag anzeigen
    Warum nutzt du nicht einfach den Limes Patch, gibts im rpg-studio zu finden.
    http://www.rpg-studio.org/forum/inde...596#post531596
    Funzt nur mit einer legalen aktuellen Maker Version und ändert nicht die Dateien auf der Festplatte. Hab allerdings keine Steam Version, sollte da aber kein Unterschied sein!?
    Kannte ich noch nicht, danke. Aber kann man den noch irgendwo anders runter laden? Möchte mich ungern nur für die eine Datei extra dort im Forum anmelden...

Berechtigungen

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