Probleme beim Eventing (Rätsel mit Koordinaten-Varbiablen)

  • Hallo in die Runde!

    Ich besitze den RPG Maker MV jetzt schon eine ganze Weile, aber habe mich bisher noch nie wirklich mal längerfristig an einem Stück mit ihm beschäftigt. Dabei sind meistens nur Karten rausgekommen und wenig Eventing, auch wenn mir bereits eine in meinen Augen gute Intro-Szene gelungen ist mit mehreren parallelen Special Effect Events und Bewegungen von Monstern.

    Ich habe die letzten Wochen allerdings über einer Idee gebrütet, die mich wieder hierhergebracht hat, an den digitalen Arbeitsplatz von RPG Maker MV. Das inhaltliche Geschehen ist größtenteils erledigt, aber mir fehlt eindeutig Erfahrung in den Feinoptionen des Eventings (Wenn man das so nennt wenn man mit Events arbeitet) ^^


    Ich habe folgendes Problem:



    Abgebildet ist ein Vorführraum ohne große Dekoration, mir geht es nur ums rein Systematische. Die Mechanik soll folgende sein:

    Wenn der Spieler sich auf den blau markierten Feldern befindet, soll das Monster-Event mit ihm mitlaufen. Wenn es sich dann auf einem Schalter befindet, soll eine Mechanik ausgelöst werden, beispielsweise eine Tür geöffnet oder eine Kiste in Erscheinung treten. Bewegt sich das Monster dann (durch Spieler-Lauf-Anweisung) vom Schalter runter, wird die Tür wieder geschlossen.

    In der Theorie funktioniert das bisher bei mir so:

    Auf den blau markierten Feldern wird ein Schalter (1) aktiviert, der ein parallel verlaufendes Event (oben links) auslöst (Vorraussetzung Schalter aktiv). Dies geschieht durch "Spieler Berührung".

    Die Rot markierten Felder deaktivieren den Schalter durch "Spieler Berührung".


    Das Parallele Event nutzt die Bewegungstasten des Spielers, um das Monster zu bewegen. Sprich Pfeiltaste links einmal drücken bewegt das Monster um eins nach Links. Dies habe ich mit einer Koordinatenvariable verbunden, die die X-Koordinate des Monsters parallel immer anpasst (Variable steuern: "Eventkoordinate X A" = Karte X von "Monster").


    Sobald die Koordinate einen gewissen Wert erreicht hat, legt das einen Schalter (Dungeonschalter 1) um, der als Vorraussetzung für die Mechanik dient. Sprich wenn wir die Fledermaus auf den linken Schalter bewegen, indem wir den Bereich vor der Absperrung zum Monster betreten und nach Links laufen, erscheint die linke Kiste (im Bild mit einer grünen Kiste Visualisiert und vorher nicht für Spieler sichtbar).



    Sprinten ist auf der Karte deaktiviert und die Bewegung mit der Maus habe ich über ein Tutorial im .js file deaktiviert, also bleibt nur die Option mit normaler Geschwindigkeit und den Pfeiltasten zu laufen.


    So weit so gut, jedoch ergeben sich mir folgende Fragen:


    Kann ich theoretisch auch die Spielerkoordinaten nutzen, um eine andere Variable zu beeinflussen?

    Wenn ich beispielsweise den Bereich betrete und mich nach Links bewege (Egal ob Maus oder Pfeiltaste, laufend oder rennend), dass sich das Monster-Event in die entsprechende Richtung mitbewegt?

    Und kann ich die Position des Monsters als Auslöser so beibehalten?


    Das Problem ist, dass bei "Normaler" Geschwindigkeit des Monsterevents das Monster manchmal zurückhängt und damit einen ganzen Tile hinterherhängt. Das wäre für diese Konstellation des Rätsels zwar nicht weiter schlimm weil man nach unten laufen und an einer anderen Stelle wieder einsteigen könnte, aber für spätere, komplexere Rätsel wäre mir eine Optimierung des Ganzen lieber :)


    Danke schonmal im Vorraus fürs durchlesen und ich freue mich auf Antworten ^^

  • Spontan würde mir eine Möglichkeit einfallen, du kannst die Position des Spielers in eine Variable speichern, sowie auch abfragen. Ich denke das ein Paralleles Event ausreichen müsste, dass einmal abfrägt wo der Spieler sich befindet, ist diese in dem bestimmten Bereich so frage ab ob er sich nach links oder rechts bewegt, dann ob der Spieler sprintet oder nicht: eventuell Schalter setzen wegen der Geschwindigkeit (also das Monster-Event zwei Eventseiten geben mit einmal normaler Geschwindigkeit und auf der anderen Seite mit schneller Geschwindigkeit) und Event bewegen. Man könnte auch die Geschwindigkeit bei "Bewegungroute" festlegen.


    Ist aber nur Theorie / eine spontane Idee.


    Für die Abfrage mit dem Sprinten wirst du höchstwahrscheinlich eine Abfrage mit dem jeweiligen Script-Call benötigen. PC ist leider schon aus, ich kann morgen mal schauen - falls nicht schon jemand geantwortet hat.

  • du kannst die Position des Spielers in eine Variable speichern, sowie auch abfragen

    Du hast vollkommen recht! man braucht ein Event mit einer Positionsabfrage:


    das gleiche auch für die Y Position.

    Und dann für das Event die Position einstellen:



    Am Besten du machst die Charakter positionsabfrage als Gewöhnliches Ereignis, das mit einem Schalter Parallel läuft, der am Beginn des Spieles
    Aktiviert wird. Dann kannst Du IMMER auf die Positions-Variablen zugreifen.


    @KlavierMusik bleibt dein Vorschlag, ist nur so, dass ich das ständig mache, um die Maps unterhalb des Characters zu wechseln ohne dass er die Position ändert aber als ich dein RE gelesen habe, ist mir aufgefallen dass man das auch dafür verwenden kann.


    ich benutze dazu allerdings die exakte Pixelposition weil ich off-grid arbeite Da speichert einen Floatwert anstelle des Round Int.:

    Skript:

    $gameVariables._data[1] = $gamePlayer.x;

    $gameVariables.onChange();


    Skript:

    $gameVariables._data[2] = $gamePlayer.y;

    $gameVariables.onChange();


    Das arbeitet ein wenig präziser funktioniert aber nur bedingt bei Grid abhängiger Bewegung.

  • Guten Morgen in die Runde!

    Also das mit den Koordinaten abfragen nutze ich derzeit beim Monster für die X Koordinate (und später dann für Y wenn komplexer wird als ein 1-Feld-breiter Gang) und nutze den blauen Bereich als Schalteraktivierung.

    Solange ich mich also im blauen Bereich befinde, bewegt die Pfeiltaste Links/Rechts das Monsterevent nach Links/Rechts und erhöht/verringert so die x-pos-Koordinate.


    Moons.of.Kandar mir ergibt sich gerade nicht das Gesamtbild deines Vorschlages ... die X und Y Variable des Spielers Festlegen verstehe ich noch, aber den Ereignisstandort auf die Spielerkoordinaten festlegen würde doch das Monster in mir spawnen oder habe ich vor meinem ersten Kaffee grade einen Denkfehler?

    Kann ich auch theoretisch ein Event triggern, indem ich als Spieler bestimmte Koordinaten betrete? Also ohne "Spieler Berührung" sondern dass das Event durch die richtigen Pos-Variablen aktiv ist? Weil in den Vorraussetzungen sehe ich zwar 2 Schalter, die als Vorraussetzung möglich sind, aber nur eine Variable, oder geht das theoretisch mit 2 Eventseiten?


    Mit Skripten habe ich leider bisher null Erfahrung sammeln können ... ^^ dafür muss ich die Systemdateien abändern, ähnlich wie mit der deaktivierten Maussteuerung, oder?

  • Ne hast recht! Du musst dann halt dann +48px oder 1Field addieren und in Variable festlegen.

    Zuerst CharacterX oder Y auf neue Variable z.B FeindX oder Y, dann FeindX +1Field

    Dein Gegner bekommt dann die Variblen FeindX und FeindY.


    denk daran, wenn Sachen glitchen, dann hilft es oft am ende einer Variablen Umstellung 3 bis 5 Frames zu Warten ein zu fügen.

    Ich muss mich da auch entschuldigen, weil ich selber immer schon ein paar Schritte voraus denke, die ich bei den Anderen auch
    dann auch voraus setzte; Meine Frau regt das besonders auf ;)

  • Dein Vorschlag bringt mich auf eine Idee.

    Ich kann doch theoretisch den Bereich über die Spielerkoordinaten eingrenzen und so das Monster durch Positionierung bewegen.


    Allerdings gibts noch ein Problem ... sobald X von Player (B) und Feind (A) übereinstimmen nimmt er die Pfeiltastenbewegung auf den File bereits als Befehl das Monster zu bewegen und somit verrückt sich das Rätsel diagonal wenn man nicht exakt auf der gleichen X Koordinate anfängt, Y=5 zu betreten.


    Ansonsten hast du mir schon super weiter geholfen xD

  • Grid-Movement ist standardmäßig aktiv, nur per Plugin kann man das "deaktivieren", außer man macht das über Scripte (falls möglich) oder umständlich (wie z.B. ich) per Bilder...


    PS: Pixelmovement ist standardmäßig nicht enthalten, also du deaktivierst Gridmovement nicht direkt, sondern fügst das Feature Pixelmovement eher dazu.



    Da du Grid-Movement hast würde ich eher die erste Methode verwenden, um die Position des Spielers zu speichern. Mit dem Script / der exakte Pixelposition könnte man eventuell auftretende Probleme lösen, da man dort viel "feiner" arbeiten kann.


    Wie schon genannt reicht es in diesem "Level" aus die Y-Koordinate mit einem Wert festzulegen, da diese sich ja nicht ändert.

    Habs falsch gedacht sorry.


    Das Problem mit der Verzögerung hab ich noch nicht ganz verstanden. :S

    EDIT: Ich probiers mal heut Abend das nachzubauen.

  • Okay ich verstehe das Problem, es ist doch etwas schwieriger gewesen als gedacht:


    Ich habe eine nicht so optimale Lösung, die jedoch sehr simpel ist:

    1 Event mit 3 Event-Seiten.


    - Als erstes die Spielerposition bestimmen und abfragen (machst du ja schon),

    - dann eine Abfrage ob er die Pfeiltaste nach links, sowohl als auch rechts drückt, wenn ja skippe den Part (ich habe hier ein Label benutzt).

    Du kannst den Label benennen wie du möchtest, mit dieser Funktion wird alles zwischen "Zum Label Springen" und "Label" übersprungen.

    - danach eine Abfrage ob der Spieler die jeweilige Taste drückt. Für jede Taste setzt du einen Selbstschalter.

    - Ganz am Ende habe ich noch 1 Frame warten drin (sieht man im Bild nicht mehr) - mache ich standardmäßig immer rein, kann man hier aber auch weglassen.



    Die nächsten beiden Event Seiten:


    Ich denke das ist selbsterklärend. Autorun ist nicht sehr optimal, da dann das Movement etwas "ruckelt", jedoch werden so die auftretenden "Bugs" behoben.


    Probiers mal aus, wenn es für dich zu sehr ruckelt / du noch unzufrieden damit bist sag bescheid. Es gäbe noch eine andere, jedoch etwas aufwendigere und etwas kompliziertere Variante die mir noch einfallen würde.

  • Wurde schon folgendes Versucht? (Stark vereinfacht ausgedrückt)


    Abfrage ob man in den blauen Feldern steht

    Wenn ja, Schleife aktivieren

    X Koordiate Spieler = X Koordinate Monster (2 Sachen wären hier zu beachten, womöglich tut Monster nicht laufen sondern sich nur hin und her schieben, als weiteren sollte man womöglich die mögliche Reichweite des Mopnsters, also die X-Koordinate begrenzen, damit es nicht aus dem Bereich hinaus kann. Zusätzlich wäre die Frage ob das Monster wieder zumUrsprung zurück soll, wenn ja hat man sich vorab die Ursprungs-Koordinate zu sichern und ab roten Bereich mit diesem gleich zu setzen)


    Wenn man auf rote Felder steht, Schleife deaktivieren