Beiträge von Zia

    Total verständlich, danke dir! Es ist zumindest ein Ansatz, an dem ich noch rumprobieren kann.

    Um die 20 kommt hin. Ich kann nachher noch mal zählen, gerade habe ich schon wieder was umgebaut.

    Das Problem ist, dass man bei den Versuchen häufig zwischen "Keine Auswirkung" und "Crash beim Szenenwechsel" pendelt. Letzteres könnte darauf hindeuten, dass die Elemente tatsächlich entfernt sind, muss aber nicht. Ich vermute, dass die Listener in dem Fall zum Crash führen, weil sie nicht finden, wonach sie suchen, und das schon in dem Frame, in dem der destroy stattfindet. Ich versuche, ihnen beizubringen, nicht in Panik zu geraten, wenn sie ein Element nicht finden ... Das neue HUD wird sofort im Anschluss generiert.

    Ansonsten wäre natürlich toll, wenn es grundsätzlich nur eine Instanz des HUDs erzeugen würde und jedes Mal überschreibt/ergänzt, falls was fehlt, statt alles komplett neu anzulegen. Das HUD ist auf jeder Map identisch, da es sowieso alle Komponenten enthält.

    ...

    Danke dir für deine Zeit!

    Ich schaue mir das direkt mal an.

    EDIT:

    Ich habe es in 3 Varianten versucht, mit:

    destroy(true);

    destroy({ children: true });

    destroy({ children: true, texture: true, baseTexture: true });

    an allen relevanten Destroy-Positionen, aber leider scheint das keinen Unterschied zu machen. Die Elemente werden nicht entfernt.

    Ist vielleicht nicht die ultimative Lösung, dennoch vielleicht eine Idee.

    Ich nutze zum Beispiel zur Bearbeitung von Plugins und Modifikationen Chatgpt 4o. Vielleicht kann dir die KI helfen.

    Das hab ich schon versucht, aber die Gesamtheit des Codes ist wohl leider zu komplex. Oder ich konnte ihn nicht ausreichend anleiten.

    Hallo zusammen,

    in letzter Zeit habe ich zunehmend Memory Leaks in meinem Spiel festgestellt, und schließlich HUD Maker Ultra als Ursache identifiziert.

    Ich habe mich jetzt einige Tage mit dem Code beschäftigt und alles mögliche versucht. Aber meine Fähigkeiten reichen leider nicht, um einen funktionierenden Fix hinzubekommen.

    Falls jemand mit besseren JavaScript-Kenntnissen helfen möchte, dieses Plugin zu "retten", wäre ich wirklich dankbar.

    Leider hat der Autor den Support eingestellt und reagiert seit Jahren nicht mehr auf Anfragen. Ich weiß, es ist super undankbar, die Arbeit anderer Leute zu fixen, aber dieses Plugin ist enorm mächtig.

    Und - das zumindest muss man sagen - es ist sehr übersichtlich strukturiert und man findet sich thematisch gut zurecht.

    Kurz gesagt ist es ein Plugin, das mit einem externen Editor kommt. Darin kann man HUDs gestalten, mit so ziemlich allem, was man sich nur vorstellen kann. Füllbalken, Bilder, Formen, Custom Code und individuellen Bedingungen für jedes Element. Das alles wird in eine Json-Datei exportiert, die wiederum vom Plugin interpretiert wird. Bis dahin wirklich beeindruckend.

    Problematisch ist allerdings, wie das HUD gehandhabt wird. Bei jedem Szenenwechsel (z.B. Mapwechsel), wird das komplette HUD neu in den Cache geladen. Alle Elemente, Sprites, Bitmaps, etc. liegen unsichtbar im Hintergrund und warten darauf, dass ihre Conditions erfüllt werden. Das Problem dabei ist, dass die alten Instanzen des HUDs nicht entfernt werden. Wenn ich über 50 Teleporter laufe, habe ich also 50x das komplette Asset-Paket im Speicher. Binnen weniger Minuten kann ich den RAM überlaufen lassen, wenn ich es darauf anlege. Ohne das Plugin ist der RAM stabil niedrig.

    Im Code sind diverse destroy()-Befehle platziert, die aber entweder nur den Code zum Initialisieren der HUD-Instanzen entfernt, oder aber dem Autor war nicht bewusst, dass andere Komponenten des Plugins die Sprites am Leben halten, da sie noch darauf referenzieren.

    Das Plugin besteht aus zwei Files: SRD_HUDMakerUltra.js und SRD_UltraBase.js

    Im SRD_HUDMakerUltra.js werden die HUD-Elemente erzeugt.

    Im SRD_UltraBase.js befinden sich Listener, die in jedem Frame kommunizieren, ob die Bedingungen erfüllt sind, und ob die HUD-Elemente sichtbar werden müssen.

    Diese Listener sind bei meinen Versuchen immer das Problem.

    Mal verhindern sie, dass die Elemente aus dem Cache geleert werden, weil sie noch damit kommunizieren, und mal crasht das Spiel, weil die HUD-Elemente nicht mehr da sind, um zu kommunizieren.

    Ich weiß nicht, was die beste Lösung wäre.

    Mein letzter Versuch (ebenfalls nicht erfolgreich) war, den Szenenwechsel zu modifizieren. Sodass er im Grunde so abläuft:

    1. Stoppe alle Listener, kappe alle Verbindungen zu den HUD-Elementen

    2. Zerstöre alle HUD-Elemente, gib den Speicher frei

    3. Führe den Teleport durch (oder was auch immer für die neue HUD-Instanz verantwortlich ist)

    4. Generiere ein neues HUD im Hintergrund

    5. Reaktiviere die Listener

    Falls jemand einen Blick riskieren will, SRD_HUDMakerUltra.js und SRD_UltraBase.js sind hier zu finden:

    HUDMakerUltra/SRD_HUDMakerUltra.js at main · SumRndmDde/HUDMakerUltra
    Page dedicated to updating and distributing HUD Maker Ultra. - SumRndmDde/HUDMakerUltra
    github.com

    Vielen Dank im Voraus für jede Form von Unterstützung.

    Danke dir!

    Fürs erste nutze ich nun Galvs Timed Message Popup für den MV.

    MV Timed Message Popups
    FEATURES Display popup messages on the screen or over characters. These messages do not prevent player movement and last for a specified amount of time before…
    galvs-scripts.com

    Mit FOSSIL ist es MZ-fähig.

    Leider gibt es ein paar Dinge, die nicht optimal sind.

    * Der Text erscheint sofort, statt Buchstabe für Buchstabe (damit erübrigt sich dann auch Text-Sound).

    * Die Sprechblase ragt aus dem Bild, wenn ich am Bildrand entlanglaufe. Galvs Messagestyles z.B. verschiebt die Sprechblase entsprechend, sodass sie nie außerhalb des Bildes ist.

    * Eine MZ-Lösung ohne FOSSIL wäre natürlich schön.

    Falls also jemand noch eine Idee hat, wäre ich weiterhin sehr dankbar.

    ich kann natürlich nur von der Coding Seite es sagen, es müsste Funktionieren zusammen mit Galv seinen Plugins, wenn die erste Variante verwendet wird.

    Ja, das dachte ich mir auch. Sein Plugin modifiziert die Optik der Textbox, erweist sich aber als sehr kompatibel.

    Mit deinem Vorschlag wird das angehängte \pop[x] als Flag aber leider ignoriert. Es ist eine ganz normale Textbox, während der ich mich aber auch nicht bewegen kann. Sie verhält sich ganz normal, wie vom Maker selbst getriggert.

    Danke für euren Input!

    Zion: Ja, genau, ich habe den MZ.

    Es gibt den SideChatter von VisuStella. Aber da ich die Sprechblasen von Galv nutze, wäre es schade, wenn diese Texte dann irgendwo am Bildrand erscheinen. Dadurch benutze ich auch eigentlich keine Facesets oder Namen zur Zuordnung.

    Aber stimmt, es wäre eine Notfalllösung.

    MurdockMurphy: Geht es dabei nur um statische, sprechende NPCs, wie z.B. Shop-Besitzer, die sagen "Schau dir meine Waren an", wenn man vorbeiläuft?

    Firemaster640: Manuelle Textboxen sind schon ein bisschen Kopfschmerz, glaube ich. Bei einem ersten Test habe ich es nicht geschafft, dass der Galv-Message-Style angewendet wird, wenn man die Parameter an diesen Text hängt. Die Textboxen sind durch das Galv-Plugin als Sprechblasen konfiguriert, pointen auf den gewählten Sprecher und können ihm sogar folgen, während er sich bewegt.

    Außerdem habe ich ein Plugin, das der Textbox einen Sprech-Sound hinzufügt, während Text geprintet wird. Das müsste alles integriert / nachempfunden werden.

    Wenn es eine Lösung gäbe, dass man einer Textbox explizit sagen kann, dass sie einfach nicht sämtliche Prozesse stoppen soll ...

    Hallo zusammen,

    ich habe ein recht spezifisches Problem.

    Es geht um ein Feature, das nenne ich mal "WalkingTexts". Während ich herumlaufe, reden meine Begleiter manchmal, indem eine Galv-Sprechblase über den Köpfen meiner Party erscheint. Die Textbox ist so konfiguriert, dass sie mit \^ automatisch schließt.

    Normalerweise bleibt der Hero stehen, sobald eine Textbox aufgeht, daher habe ich ein kleines Plugin, mit dem ich per PluginCommand erlauben und verbieten kann, dass der Hero sich während einer offenen Textbox bewegen kann. Damit habe ich die WalkingTexts eingeklammert.

    Code
            ◆Plugin Command:AllowMovementWithOpenTextbox, Enable Movement During Messages
            ◆Text:None, None, Window, Middle
            :    :\v[607]\|\^\pop[a\v[606],-96]
            ◆Plugin Command:AllowMovementWithOpenTextbox, Disable Movement During Messages

    Das Problem ist, dass "On Hero Touch"-Events nicht korrekt auslösen, solang eine Textbox offen ist.

    Wenn diese Textbox innerhalb eines Autostarts o.ä. stattfindet, wird das "On Hero Touch"-Event komplett ignoriert. Ich kann also bspw. keine Items aufheben oder den Raum verlassen, solang jemand aus der Party redet.

    Wenn ich die Textbox aus einem Parallel Process starten lasse, wird das "On Hero Touch"-Event getriggert, aber erst abgearbeitet, sobald die Textbox geschlossen ist. D.h., ich bin schon viele Schritte entfernt, und dann verschwindet das Item erst vom Boden, oder ich teleportiere in den anderen Raum.

    Gibt es eine Möglichkeit, die Priorität der Textbox zu ändern, sodass das Spiel nicht alles stehen und liegen lässt, bis die Textbox wieder zu ist?

    ChatGPT hat ein Update bekommen, auf die Version "4o", die deutlich komplexere Zusammenhänge auf die Reihe bekommt. Bisher war das Limit etwa bei 80 bis 120 Zeilen Code - alles, was an Komplexität darüber lag, hat er nicht mehr überblicken können. Oder anders ausgedrückt, er hat jedes Problem mit dieser Anzahl Zeilen zu lösen versucht, was je nach Komplexität einfach nicht geht.

    Jetzt schafft er durchaus 400 Zeilen Code.

    Als Test habe ich Schritt für Schritt mit ihm ein Debug-Menü aufgebaut, wie es hier im Thread thematisiert war.

    * Das Menü ist komplett neu gebaut und nicht nur modifiziert. Es funktioniert im Grunde genauso wie vorher.

    * Allerdings sind Switches und Variablen nun in getrennten Listen, sodass man nicht so viel scrollen muss. Mit Links/Rechts kann man umherschalten.

    * PageUp rechnet nun +10, PageDown -10 auf Variablen. Ich verstehe bis heute nicht, warum das nativ im Maker umgekehrt ist.

    * Wenn man das Menü schließt und wieder öffnet, bleibt die Position für beide Listen separat gespeichert. (Wenn man also auf Switch 600 und auf Variable 1000 war, dann ist man dort später wieder, wenn man erneut F9 drückt)

    * Kommt mit Text in Variablen klar.

    Was ich nicht hinbekommen habe, ist ein Eingabefeld für Variablen. Ich habe es zig mal versucht. Aber das überstieg dann die Kapazitäten von ChatGPT. Ich wollte gern, dass man den Wert manuell eintippen kann, wenn man auf eine Variable Enter drückt. Wenn jemand Lust hat, kann er das sehr gern ergänzen, würde mich freuen.

    Falls außerdem jemand Lust hat, sich den Code mal auf Sinn und Redundanz anzuschauen, ebenfalls sehr gern. Ich frage mich nämlich, ob ChatGPT Probleme bei Iterationen wirklich im Kern behebt, oder nur Workaround um Workaround ergänzt, bis der Code am Ende irgendwie geht - aber eigentlich wäre es auch mit der Hälfte an Code gegangen. Oder ob er irgendwelche problematischen Mechaniken nutzt.

    Und wer das Plugin einfach nur testen möchte, ebenfalls sehr gern.


    Ich habe den VisuStella-Debugger nun mal getestet und kann leider keine Empfehlung aussprechen.

    Meine Anforderungen waren:

    1. Nicht crashen, wenn Variablen Text statt Zahlen enthalten. ✔

    Das klappt. Man kann den Text zwar nicht bearbeiten, aber das wäre auch nicht nötig. Aber man kann den gespeicherten Text einsehen und es stürzt nicht ab.

    2. Eintippen der Variablen-Werte, statt hochklicken ✔

    Man kann die gewünschten Zahlen direkt eintragen, das ist gut.

    3. Schnellere Bedienung von Switches und Variablen ❌

    Im Maker störte mich, dass Switches und Variablen hintereinander weg als eine Liste dargestellt werden. Dadurch scrollt man recht lange, bis man das Ziel erreicht hat.

    Im VisuStella Debugger sind Switches und Variablen in separate Listen getrennt, das fand ich gut.

    Leider scrollen diese Listen soooo langsam, dass man länger braucht als vorher.

    Außerdem kann man vom Anfang der Liste nicht ans Ende springen und umgekehrt. Wenn man von Variable 1 zu Variable 1000 will, muss man also durch die Liste nach unten scrollen.

    1000 Variablen zu scrollen dauert 1:50 Minuten.

    Das geht einfach nicht ... Schade drum.

    (Das Plugin bietet noch unzählige andere Funktionen, die bestimmt nützlich sind, aber für mich nicht wichtig. Daher habe ich mich damit nicht allzu sehr beschäftigt.)

    Ich denke schon, seine "Master-Demo" hat er zuletzt am 13. Dezember 2023 aktualisiert, das ist nicht soo lang her.

    Auf seiner Website kommentiert er Hilfegesuche auch noch.

    Allerdings hauptsächlich mit "Frag am besten mal in einem Forum nach". Aber ob man noch neue Plugins erwarten kann, weiß ich nicht.

    Edit:

    Galv hat sich bedankt und freut sich, dass ich mein Problem lösen konnte. Er klang jetzt aber nicht so, als würde er da irgendwie aktiv werden.

    Ich weiß aber auch nicht, ob das ein globales Problem ist, oder eher ein Sonderfall.

    Unter

    Window_Message.prototype.changeWindowDimensions = function() {

    werden die Fenstergrößen anhand der Textlänge berechnet, das passiert sowohl für X als auch für Y.

    Da habe ich jeweils ans "Endergebnis" noch einen Check gehängt, ob die Zahl gerade ist.

            w = Math.ceil(w); // Aufrunden auf die nächste ganze Zahl
            if (w % 2 !== 0) w += 1; // Stelle sicher, dass die Breite gerade ist

    und

            this.height = Math.ceil(this.height); // Aufrunden auf die nächste ganze Zahl
            if (this.height % 2 !== 0) this.height += 1; // Stelle sicher, dass die Höhe gerade ist

    Das Runden auf eine ganze Zahl ist ziemlich sicher nicht notwendig, aber da ich nicht wusste, was genau das Problem ist, habe ich das auch noch drin.

    Lustig, das scheint mein ganz privater Monolog-Thread zu sein.

    Aber - ich habe die Ursache und Lösung für das zitierte Problem gefunden und wollte es hier noch ergänzen, falls jemand über das gleiche Problem stolpert.

    Der MZ hat bei mir Schwierigkeiten, Bilder und Textboxen sauber darzustellen, wenn die Breite eine ungerade Pixelzahl hat. Dann rechnet er wohl mit halben Pixeln, wenn er versucht, den Mittelpunkt zu bestimmen oder so, keine Ahnung. Das Resultat sind halbtransparente Kanten sowie eine verschobene Window-Grafik, die zu diesen Linien geführt hat.

    Ich habe das Galv-Plugin leicht angepasst, sodass nach dem Ermitteln der Textlänge und damit der Breite der Textbox, noch auf die nächste gerade Zahl aufgerundet wird. Damit ist das Problem weg, da alle Textboxen definitiv eine gerade Pixelanzahl in der Breite haben.

    Hallo zusammen,

    wenn man das Spiel auf eine Größe zieht, die nicht der definierten Auflösung entspricht, hat man ja schwarze Balken an den Seiten.

    Ist es möglich, mithilfe eines Plugins eine Grafik zu definieren, die diese schwarzen Flächen ausfüllt?

    Dabei ist mir fast egal, ob man eine Textur kachelt, oder ob eine Art Wallpaper hinter dem Spiel liegt (wie damals, wenn man Gameboy-Spiele auf dem Fernseher gespielt hat). Bei letzterer Lösung könnte es natürlich sein, dass auch dieser Wallpaper irgendwann an seine Grenzen kommt und dann wieder Schwärze folgt, aber damit könnte ich leben.

    Herausforderung ist, dass man nichts von den Zusatzgrafiken sieht, solang das Spielfenster die "richtige" Auflösung hat.

    Meint ihr, das ist möglich? Gibt's da vielleicht ein Plugin für den MZ?

    Ich halte mich da auch an keinen Zeitplan. Bisher habe ich etwa 400 Stunden mit meinem Projekt zugebracht, und die liefen sehr gut.

    Wenn es so den Rest des Jahres weitergeht, werde ich mit der Entwicklung viel Freude haben. Und dann mal gucken, wie weit das Projekt ist. Wenn es noch ein zweites oder ein drittes Jahr Entwicklung braucht, bekommt es die Zeit sehr gerne.

    Meine Motivation war, mich mit dem Maker zu beschäftigen, daher habe ich jetzt schon was ich wollte. Der Release eines Tages wird ein wundervoller Bonus.