[Tutorial] "Unendlicher" Weg

  • Moinsen, Quajutsi hier; diesmal mit einem Tutorial im Gepäck :huh:


    Und zwar möchte ich euch (auf Wunsch von Sternenprinzessin ) zeigen, wie ihr in eurem Spiel einen "unendlichen" Weg umsetzen könnt.

    Ursprünglich wollte ich dazu ein Video aufnehmen, aber da die Videoqualität... nun ja... gelinde gesagt, sehr ruckelig war, das Ganze halt hier in Schrift und Bildern.

    Gebaut und getestet habe ich das Ganze im RPG Maker XP, es sollte sich aber auch in allen anderen Makern umsetzen lassen.


    Zum Start hier eine abstrakte Map, wie die einzelnen Abschnitte grob aufgebaut sind:


    (Blaues Tile = Wasser, nicht begehbar; Grünes/Gelbes Tile = Weg, begehbar)


    Auf diesem Mapabschnitt sieht man einen einfachen Weg. Die Rote Markierung in der Mitte des Abschnitts markiert die Tiles, auf denen später die Teleportevents platziert werden. Wichtig hierbei ist, dass ein jeder solcher Abschnitt links sowie rechts neben diesem 2 Tiles breiten Gebiet jeweils genügend weitere Tiles besitzt, da die Map, wenn ihr euch ihrem Rand nähert, den Spieler nicht mehr zentriert. Beim XP würde ich, so wie hier, 10 Tiles empfehlen. Bei den anderen Makern sollte dies denke ich auch passen, aber da könnt ihr ja auch etwas rumprobieren. ;)

    Das Ganze gilt natürlich auch für oben und unten, falls eure Map höher als die Minimalhöhe ist, wobei es hier auch etwas weniger Tiles - 8 müsste ganz gut passen - sein können.




    Als nächstes geht's ans Kopieren dieser Abschnitte. Später solltet ihr drei identische Abschnitte auf eurer Map haben, ich zeige euch das Teleportieren hier aber am Beispiel von zwei Abschnitten:



    Wie ihr hier sehen könnt, habe ich den Abschnitt mit etwas Abstand nach rechts kopiert. Zwischen diesen beiden Abschnitten könnt ihr nun den Weg beliebig gestalten, Hauptsache sie sind hinterher durch den mittleren Teil mit einander verbunden. Ich werde es hier so gestalten, dass man unendlich nach rechts läuft, und nur ans Ziel kommt, wenn man stattdessen nach links läuft. In diesem Fall würde ich rechts neben diesem Aufbau - natürlich mit entsprechend Abstand - den Zielort sowie rechts daran anknüpfend den dritten Abschnitt einfügen. Falls ihr es genau andersherum machen wollt (links unendlich, rechts Ziel) müsst ihr den dritten Abschnitt natürlich links an den Zielort anknüpfend platzieren.

    (Weitergehend werde ich den Abschnitt ganz links immer als ersten Abschnitt, den Abschnitt, der mit dem ersten Abschnitt verbunden ist, als zweiten Abschnitt, und den an den Zielort anknüpfenden Abschnitt als dritten Abschnitt oder Zielabschnitt bezeichnen)




    Jetzt kommt der spaßige Teil: unsere Events!



    Zunächst kümmern wir uns mal um die Teleportevents (Auf dem Bild die Orange markierten Tiles links), die uns zum Zielabschnitt bringen (Auf dem Bild die Rot markierten Tiles rechts). Diese werden nur auf dem ersten Abschnitt platziert.

    Wie man hier vielleicht schon erkennen kann, soll uns ein Teleportevent auf dem einen Abschnitt auf dasselbe Tile des anderen Abschnitts teleportieren. Wenn sich bspw. ein Teleportevent auf den Koordinaten (11,3) unseres ersten Abschnitts befindet, so soll es den Spieler auch auf die Koordinaten (11,3) des Zielabschnitts bringen (Achtung! Nicht mit den Mapkoordinaten verwechseln, ich behandle in diesem Bespiel die Abschnitte hier nur sozusagen als Maps mit eigenen internen Koordinaten.)

    Jedes unserer Events braucht also als einzigen Eventbefehl eine entsprechende Spielerübertragung (Blickrichtung beibehalten, kein Fading); der Auslöser des Events wird auf Spielerberührung eingestellt; und fertig ist unser Teleportevent.

    (Falls ihr unendlich nach links gehen wollt, müssen eure Events natürlich stattdessen auf dem zweiten Abschnitt platziert werden.)

    So in etwa sollte euer Event aussehen:





    Weiter geht's mit unseren "unendlichen" Teleportern (Auf dem Bild die Orange markierten Tiles diesmal rechts):



    Diese sollen uns vom zweiten Abschnitt bzw. dem Zielabschnitt zurück in den ersten Abschnitt bringen. Ich greife hier die Beispielkoordinaten aus dem vorigen Absatz nochmal auf: Dort hatten wir ein Event auf den Beispielkoordinaten (11,3) platziert. Hier würde das Event nun auf den Beispielkoordinaten (12,3) des zweiten Abschnitts sowie des Zielabschnitts platziert werden - also genau ein Tile weiter rechts als unser Zielteleporter bzw. sein Zieltile für den Teleport.

    Auch diese Events bekommen als einzigen Eventbefehl wieder die entsprechende Spielerübertragung (Blickrichtung beibehalten, kein Fading); der Auslöser wird wieder auf Spielerberührung eingestellt; und tadaa - unser unendlicher Weg ist fertig.

    (Im Fall von links unendlich platziert ihr eure Events natürlich auf dem ersten Abschnitt und dem Zielabschnitt statt auf dem zweiten Abschnitt und dem Zielabschnitt; und die Spielerübertragung sollte den Spieler zurück auf den zweiten Abschnitt bringen. Außerdem sollten sich die "unendlichen" Teleportevents nun ein Tile weiter links als die Zielteleporter bzw. ihre Zieltiles für den Teleport befinden, anstatt ein Tile weiter rechts.)



    Das Ganze lässt sich natürlich auch um 90° drehen, sodass ihr unendlich nach unten (oder oben) lauft - vergesst nur nicht, dass ihr den Tileabstand zum Rand (10 nach rechts/links bzw. 8 nach oben/unten) nicht mitdrehen müsst, da das Spielefenster ja nicht mitgedreht wird.




    Alternative: X Durchläufe

    Hier noch eine Alternative, falls ihr den Weg nur X mal durchlaufen wollt:


    Als Beispiel sagen wir mal, der Spieler solle 6 mal nach Rechts laufen müssen, bevor er zum Zielort kommt.

    Folgende Änderungen müsst ihr dann vornehmen:


    -Ihr braucht den Zielabschnitt nicht mehr - euer Zielort kann nun einfach rechts an den zweiten Abschnitt anknüpfen.

    -Die Events auf dem ersten Abschnitt müssen den Spieler dementsprechend natürlich nun auf den zweiten Abschnitt statt den Zielabschnitt übertragen

    -Bei den Events auf dem ersten Abschnitt packt ihr den Teleportbefehl in eine Bedingte Verzweigung, die Überprüft, ob eine Variable größer als 0 ist. Wenn ja, soll zunächst die Variable um 1 verringert und danach der Spieler teleportiert werden


    -Bei den Events auf dem zweiten Abschnitt macht ihr genau das Gleiche - nur prüft ihr jetzt, ob die Variable kleiner als 6 ist, und erhöht sie in diesem Fall dann um 1



    Dies macht nun folgendes: Solange ihr nach rechts geht und die Variable kleiner als 6 ist, werden ihr zurück zum ersten Abschnitt transportiert und die Variable erhöht sich um 1. Ist sie 6 oder größer, passiert nichts und ihr lauft einfach durch das Event durch zum Zielort.

    Geht ihr zurück nach links und ist die Variable größer als 0, werdet ihr zurück zum zweiten Abschnitt transportiert und die Variable verringert sich um 1. Ist sie 0 oder kleiner, passiert nichts und ihr lauft einfach durch das Event zum Mapanfang zurück.

    Ihr könnt natürlich auch fies sein und sagen, sobald der Spieler auch nur einmal zurückläuft, kommt er an den Anfang der Map zurück :evil:

    Dazu entfernt ihr einfach alle Befehle aus den Events des ersten Abschnitts und ersetzt sie durch eine Variablensteuerung, die eure Variable auf 0 setzt - Der Spieler läuft nun über das Event, ohne zum zweiten Abschnitt teleportiert zu werden, und sein Fortschritt geht verloren.




    Ich hoffe, ich konnte euch das Ganze verständlich erklären. Wenn ihr Fragen oder Anmerkungen habt, stellt sie gerne, dann werde ich sehen, ob ich noch was übersehen habe oder verbessern muss. ^^


    ~ Euer Quajutsi

  • Ich liebe dich gerade ein kleines bisschen dafür :D
    Genau sowas brauche ich für mein Projekt und ich hab bisher nur eine super umständliche Lösung gemakert, die mich nicht wirklich glücklich gemacht hat xD

  • Cooles Tutorial, danke fürs Teilen :)

    Es gibt noch einen Plan B, den ich in Nutzlos umgesetzt habe. Im Maker gibt es auf der Map die Option "Horizontale / vertikale Schleife", dann wird die Map automatisch wiederholt, egal wie lange man läuft. Bei mir wird der Spieler nur dann aus der Map wieder rausgelassen, wenn er nach unten läuft, ansonsten kann er unendlich durch den Wald laufen.

  • Vielen Dank, lieber Quajutsi, für dieses ausführliche und sehr interessante Tutorial.

    Ich kann das sehr gut gebrauchen für mein neues Projekt (Spoiler).


    Liebe Grüsse

    <3 Luna <3

    Gute Freunde und füreinander da sein und sich gegenseitig unterstützen sind das Wichtigste und Wertvollste auf der Welt!

    I support LGBTQIA+ worldwide!

    Dieser Beitrag wurde bereits 3 Mal editiert, zuletzt von Luna ()

  • Danke das du das Tutorial gemacht hast!

    Es ist echt super geworden!

    Vor allem das man auch noch die Menge der Durchläufe einstellen kann, finde ich an deiner Möglichkeit echt cool^^

    Ich arbeite mit dem MV und wusste nicht das man da auch Loops einstellen kann. Da muss ich mich mal weiter informieren.

    Jetzt kann ich ja testen welche Möglichkeit besser passt^^


    Ganz blöde Idee: Ähnlich wie deinen Test der Weisheit, aber wenn man 100 mal durch den Loop läuft, statt einmal umzudrehen, wird man zum "Prinzen der Sturheit" oder einfach zum "sturen Bock" und man kann auf jede Meinungsverschiedenheit mit "Stur bleiben ohne weiter nachzudenken" reagieren. xD

  • Sternenprinzessin beim MV ist das so, dass du in den Map Properties einstellen kannst, dass sich die Map immer wieder wiederholt, wenn du über den Rand hinausgehst (entweder horizontal, vertikal, oder beides).

    Heißt, im Prinzip müsstest du das ganze ähnlich wie in den in meinem Tutorial beschriebenen Abschnitten mit den Events aufziehen.


    \/


    Ich nehme mal wieder meine abstrakte Map als Beispiel her. Wie du siehst, habe ich hier die Events aus der Mitte jeweils an den linken und rechten Rand der Map verschoben.

    Zu beachten wäre hier allerdings, dass die Events am linken Rand der MV Map denen der rechten Seite der Mitte der vorigen Map entsprechen und die am rechten Rand der MV Map denen der linken Seite der Mitte der vorigen Map.

    Heißt, bei den Events auf der linken Seite (auf der MV Map rot) müsste zunächst eine Bedingte Verzweigung abfragen, ob der Spieler nach rechts schaut, und wenn ja, soll etwas passieren (bspw. Abfrage mit anschließender Variablenerhöhung oder wenn die Variable hoch genug ist Teleport zum Zielort), bei den Events auf der rechten Seite (auf der MV Map orange) müsste dementsprechend zunächst eine Bedingte Verzweigung abfragen, ob der Spieler nach links schaut, und wenn ja soll etwas passieren (um beim Beispiel zu bleiben, Abfrage mit anschließender Variablenverringerung oder wenn die Variable klein genug ist Teleport zum Herkunftsort). (Überprüfung der Blickrichtung, damit die Events nicht falsch ausgelöst werden)


    Was hier Schwierigkeiten machen könnte, ist der Teleport zum Herkunfts- bzw. Zielort, da du da die innerhalb der oben in meinem Tutorial beschriebenen Randgrenzen (10 Tiles links bzw. rechts und 8 Tiles oben bzw. unten neben den Events) befindlichen Tiles auf eine neue Map übernehmen musst, damit man den Teleport nicht merkt, und ich glaube gerade da kann man sehr schnell Fehler machen.

    Im Prinzip heißt das: Bei meiner Beispielmap muss ich die 10 Tiles rechts neben den Events auf der linken Seite + die Tiles der Eventreihe selbst sowie die 10 Tiles links neben den Events auf der Rechten Seite + die Tiles der Eventreihe selbst auf die neue Map übernehmen.

    Bei der Herkunftsmap würden die Teleporter dann ein Tile rechts neben den Positionen der auf der MV Map auf der linken Seite platzierten Events platziert werden, bei der Zielmap ein Tile links neben den Positionen der auf der MV Map auf der rechten Seite platzierten Events (damit die Events nach dem Teleport nicht ausgelöst werden und es auch sonst keine Probleme gibt).

    Evtl. müsste man dann noch rechts bzw. links eine weiter Tilereihe zur Randgrenze hinzurechnen, da ja von den Events der Herkunfts-/Zielmap aus gesehen der Abstand nach rechts bzw. links nur noch 9 Tiles betragen würde... :/


    Naja, so genau habe ich das Ganze im MV jetzt nicht getestet, hoffe aber dass ich so einige Anhaltspunkte liefern konnte ;)