Levelscripts via XSE

    • [Scripten (Fortgeschritten)]

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Levelscripts via XSE

      Hallo

      In diesem Tutorial möchte ich euch zeigen was ein Levelscript ist und wie er funktioniert. Ich werde es so leicht und verständlich wie nur möglich erklären, so das es auch wirklich jeder verstehen kann.

      Wir benötigen...
      • AM 1.92
      • XSE 1.0.0


      Was ist ein Levelscript?

      Sehr gute Frage, die aber leicht zu beantworten ist. Ein Levelscript ist ein Script, der startet, sobald man die Map betritt. Man kann es wirklich mit einem Level beschreiben. Denn jedes Level beginnt mit einem anderen Script, sobald man ihn betritt. Er ist sehr nützlich um bspw. eine Sequenz zu starten. Es erspart Arbeit und ist um einiges eleganter als bspw. ein handelsüblicher applymovement-Script.

      Wie erstelle ich denn einen Levelscript?

      Das ist leicht zu beantworten. Eigentlich ist es ein normaler Script mit ein paar Zusatzfunktionen, die ich nachher erklären werde. Zuerst brauchen wir aber einen Script, den wir danach zu einem Levelscript umgestalten. So, ich werde nun einen Script verwenden, in dem uns unsere Mutter aufhält und fragt, wie es uns geht.

      Quellcode

      1. #dynamic 0x800000
      2. #org @main
      3. lock
      4. faceplayer
      5. applymovement 0x1 @go
      6. waitmovement 0x0
      7. msgbox @text
      8. callstd 0x6
      9. setvar 0x4041 0x1
      10. release
      11. end
      12. #org @text
      13. = Hallo, wie geht es dir?
      14. #org @go
      15. #raw 0x13
      16. #raw 0x13
      17. #raw 0x11
      18. #raw 0xFE
      Alles anzeigen


      Es ist ein ganz normaler applymovment-Script. Ihr könnt aber auch jeden anderen Script verwenden.

      Quellcode

      1. setvar 0x4041 0x1


      Diese Zeile ist in diesem Script aber besonders wichtig. Denn egal was für eine Art von (Level) Script ihr ausführt, ihr müsst ihr setvar setzen.Setvar, lässt den Script starten. Ansonsten hängt sich das ganze auf. Es darf also auf keinen Fall fehlen. Ein Tutorial für XSE-Scripts findet ihr hier:

      XSE Tutorial by Pilo11

      Nun gut, wie ihr seht sollte unsere Mutter zwei Schritte nach rechts und dann einen nach oben gehen. Jetzt machen wir den Levelscript, indem wir in XSE folgendes tun:



      1. Script in XSE einfügen und auf diesen Button drücken um den Script zu kompilieren. Danach wie gewohnt auf Kopieren klicken und bei Schritt 2 fortfahren.
      2. Das kopierte Offset,in meinem Fall 0x800000, in dieses Feld einfügen.
      3. Auf diese Feld klicken.
      4. Auf dieses Feld klicken und wieder kompilieren, danach das Offset bei "new Offset" kopieren.


      Sobald ihr das geschafft habt, könnt ihr in Advance Map weitermachen. Ihr seht im Header-Bereich einen Abschnitt, bei dem "Map Script" steht, dort klickt ihr auf hinzufügen. Dann klickt auf "Script Typ". Nun wählt ihr das 2. "02 prüft werte, ladet handler 3000EB0(Playback)". Fügt das Script-Offset, das wir im XSE kompiliert haben in "Script Offset 2" ein. Bei Flag geben wir die oben angegebene Setvar an. In meinem Fall war das 4041. Das sollte so aussehen:



      So, klickt auf "Map Script speichern". Und speichert das ganze zu Sicherheit nochmal, damit auch nichts verloren geht.

      Unser schlussendliches Ergebnis ist fabelhaft.



      Falls das Ergebnis anders aussieht, schaut euch die Problembehandlung an, da findet ihr Hilfe.

      Problembehandlung

      Eigentlich gibt es nur ein Problem, und zwar folgendes:
      Ihr habt ein totales Chaos in eurem Script? Erscheinen viele Zeichen, und das in einer Endlosschleife?



      Dann empfehle ich, folgendes zu tun:

      Geht wieder in AM und drückt Ctrl + H und es öffnet sich im Header die Profi-Ansicht. Da müsst ihr das Map Script-Offset kopieren und in XSE einfügen. Danach klickt ihr wieder auf das Werkzeugzeichen und auf das Levelscriptzeichen nebendran. Ihr werdet im 3. Abschnitt ein Word entdecken mit dem Wert 0x0. Ändert das zu 0xFFFF und kompiliert das ganze und speichert es wieder im Header unter Map Scripts. So, das ganze noch kurz Bildlich:



      Das Ergebnis sollte das sein, was ihr euch auch wünscht. Einen sauberen, fehlerfreien Levelscript.

      -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

      Ich möchte gerne Alen danken, da er mich beim Levelscript Problem unterstützt hatte :P

      Ich hoffe ich konnte euch einigermaßen helfen, und nun ist dieser Teil auch wieder online. :thumbsup:

      Grüsse

      Gfe
      Das waren noch Zeiten...

      ...

      Wodka schrieb:

      Wodka - 3. Oktober 2012

      Ich spüre seinen Atem in meinem Nacken o.O!

      PEDODAD!


      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Gfe ()

    • Bei mir gibts immer Fehler... Deswegen sage ich es gleich jetzt, bevor es zu spärt ist. Fals bei euch nicht 0x0 steht, sondern 0xFFFF an dem Word, so macht das nichts, den dass ist die richtige Variante. Ich habe da nur einen Fehler gemacht, also wen jemand aus dem Team das verbessern kann, bitte ändern und sich bei den Credits eintragen. Also, wen 0xFFFF steht, einfach zu 0x0 ändern, steht ws anderes, habt ihr einen Fehler gemacht, oder es klapt einfach nicht. (Weis aber nicht warum...)

      Sorry für das kleine Missverständniss...

      Gfe
      Das waren noch Zeiten...

      ...

      Wodka schrieb:

      Wodka - 3. Oktober 2012

      Ich spüre seinen Atem in meinem Nacken o.O!

      PEDODAD!


    • Schön, dass du dir die (Aliteration ftw.) Arbeit angetan und ein Tutorial geschrieben hast. Allerdings hast du im Endeffekt schlicht und ergreifend dieses Tutorial übersetzt ^^'.

      Mir fehlt eine Erklärung zum "setvar"-Befehl, warum er in einem Levelscript wichtig ist, was er überhaupt bewirkt etc.
      Mit diesem Tutorial kann zwar jeder einen Levelscript schreiben, allerdings bleibt einem das Verständnis verwehrt.

      Aber: Schönes Tutorial, gut strukturiert, ausführlich erklärt und mit passenden Screenshots versehen. Tragst du den fehlenden Inhalt nach, habe ich nichts mehr zu bemängeln :).

      Btw., Credits dafür, dass ich dir einen Link schicke? :D.

      Liebe Grüße, Alen.
      MfG, Alen

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Alen ()

    • Gfe schrieb:

      Reicht dir die Erwähnungs nicht? xD

      Doch, aber sie ist nicht gerechtfertigt.

      Dinn schrieb:

      Vielleicht könntest Du auch nochmal er Script-Typen es gibt :)

      Diese verschiedenen Script-Typen sind mehr oder weniger selbsterklärend.
      • "Setmaptile"-Script verwendet man beim Schreiben eines Setmaptile-Levelscriptes.
      • "Beim Betreten / Nicht bei Menü schließen" gibt an, dass der Levelscript beim Betreten der Map aktiviert wird, nicht aber beim Schließen eines Menüs.
      • "Beim Betreten / Menü schließen" gibt an, dass der Levelscript sowohl beim Betreten der Map, als auch beim Schließen eines Menüs aktiviert wird.

      Berichtigt mich ^^.

      Lg.
      MfG, Alen
    • Hey Gfe,
      ich habe eben einen Levelscript nach deinem Tutorial erstellt und er ist mir auch nach einigen Schwierigkeiten gelungen.
      Hier einige Punkte, die zu bemängeln sind und wirklich nochmal überarbeitet werden sollten:


      Schreibe hinzu, dass für jeden Mapscript eine neue, noch nicht benutzte Variable im Script stehen muss. Jemand, der neu in dem Gebiet ist oder es nicht versteht, wird sonst wahrscheinlich immer die selbe benutzen.

      ihr müsst ihr setvar setzen.Setvar, lässt den Script starten. Ansonsten höngt sich das ganze auf.
      *kack Deutsch*
      Wenn ich es richtig verstanden habe, wird der Wert der angegebenen Variablen (in AM) mit dem angegebenen Wert (auch in AM daneben) verglichen und wenn diese übereinstimmen, wird der Script gestartet, der dann den Wert der Variablen verändert und beim nächsten Betreten der Map den Vergleich als Ungleich darstellt und der Script daher nicht mehr ausgeführt wird.

      4. Auf dieses Feld klicken und wieder kompilieren, danach das Offset bei "new Offset" kopieren.
      Zum einen könntest du erwähnen, dass man dieses Offset im erscheinenden Log suchen muss, zum anderen müssen Zitate exakt gleich sein und da steht "1newoffset = 0x[...]", was mich dann auch später verwirrt hat, und zum anderen
      ist mir nach mehreren Versuchen aufgefallen, dass dieses Offset immernoch das vom 1. Kompilieren ist und daher eh in der Zwischenablage gespeichert ist.



      Im letzten Abschnitt Problembehandlung findet sich ein sehr verwirrender Widerspruch wieder, den du wirklich verbessern solltest. Im Text schreibst du noch: "Ihr werdet im 3. Abschnitt ein Word endecken mit dem Wert 0xFFFF. Ändert das zu 0x0", im folgenden Bild ist es genau andersherum dargestellt, 0x0 steht da und du hast danebengeschrieben, dass man es durch ein 0xFFFF ersetzen soll. Was nun?



      Und zuletzt noch eine unklare Sache:
      Danach klickt ihr wieder auf das Werkzeugzeichen und auf das Levelscriptzeichen nebendran.
      Soll man davon ausgehen, dass man Xse noch von vorher offen und das Levelscriptzeichen aktiviert hat (Schritt 4) und man es nun deaktivieren soll oder soll es aktiviert sein?


      Mfg.
    • Du schreibst einen Script, welcher als Levelscript fungieren soll. In diesem Fall allerdings ohne "setvar"-Befehl.
      In AM fügst du als Flag z.B. 6000 ein (Anstatt 6000 kannst du theoretisch auch andere Werte zwischen 0000 und FFFF verwenden, allerdings funktionieren nicht alle Werte), als Wert 0000 ein. Das Spiel versteht das folgendermaßen: "Führe Levelscript aus, wenn Variable 0x6000 den Wert 0x0 zugewiesen bekommen hat". Da standardmäßig sämtliche Variablen den Wert 0x0 zugewiesen haben, wird der Levelscript ausgeführt.

      Damit der Levelscript nach einem bestimmten Ereignis nicht mehr ausgeführt wird, fügst du im dementsprechenden Script ein "setvar 0x6000 0x1" ein. Jetzt hat die Variable 0x6000 den Wert 0x1 zugewiesen bekommen, also wird der Script nicht mehr ausgeführt, da der Levelscript ja bloß dann ausgeführt werden kann, wenn der Variable 0x6000 der Wert 0x0 zugewiesen wurde.

      Ich hoffe, ich verbreite hier keine falschen Informationen.

      Lg, Alen
      MfG, Alen