Scripts in DromEd und ShockEd

  • Da hier heute die Frage aufkam, wozu man denn bestimmte Scripts brauchen kann, wollte ich mal ein eher überschaubares Tutorial schreiben über Scripts: Welche gibt es, wozu werden sie gebraucht, wo finde ich sie, usw.


    Scripts sind im DromEd-Editor im wesentlichen spezifische Botschafter, die Befehle, aber auch Eigenschaften übertragen.
    Man kann Scripts unterteilen in
    1. Auslöser (Trigger), die ein An/Aus-Signal senden
    Ein Beispiel wäre "TrigWorldfrob": Man frobbt ein Objekt, das dann ein Signal sendet
    2. Scripts, die einen Auslöser brauchen, um zu funktionieren
    Beispiel: "TrapTeleporter". Zusammen mit Beispiel 1.: Man frobbt etwas und ein Gegenstand wird teleportiert
    3. Scripts, die von sich aus etwas machen, also von Anfang an (sowas nennt man Sim-Start)
    Beispiel: "Sword". Ein Schwert hat dieses Script, es 'benimmt' sich deshalb wie ein Schwert. Hätte das Schwert das Script "BlackJack" (ihr könnt es ja mal versuchen), benimmt es sich etwas anders.
    Anm: Man schreibt ein Script übrigens in das Objekt oder Marker hinein (add-->S-->namedesscripts)


    All diese 3 Beispiele sind aus der gen.osm Familie und da sind wir auch schon bei der Frage:
    Welche Scripts gibts eigentlich?
    Schaut man sich die Originalmissionen an, findet man im wesentlichen 3 verschiedene Klassen
    Scripte aus den Originalmissionen (1):
    1. Convict.osm. Hier ist das VictoryCheck-Script unendlich wichtig, das man unbedingt auf den Startmarker legen muß, sonst werden Ziele nicht funktionieren (jedenfalls, wenn man nicht einen komplizierten Umweg wählt)
    2. gen.osm. Ohne gen.osm läuft in keiner FM irgendwas. Kein Auslöser wird funktionieren, man kann nichtmal was frobben.
    Deshalb muß man in jedem Fall am Anfang einer jeder FM-Bauerei diese beiden Scripts einladen. Man lädt sie entweder über das Menü ein oder über script_load "namedesscripts"
    3. Missionsspezifische Scripts. Diese Scripts sind anders als die beiden ersten Script-Familien nicht unbedingt notwendig, können aber in bestimmten Situationen manchen Umweg ersparen. Man muß sie einladen, wie andere osm(s) auch.


    Andere populäre Scripte
    Inwischen gibt es eine ganze Reihe sogenannter Custom-Scripts, die verschiedene Autoren bereitgestellt hatten.
    1. Den Anfang machte Gaylesaver mit seinen Scripts, die von Telliamed als Public Scripts ausgebaut und ergänzt wurden. Man kann sie noch heute für alles mögliche verwenden.
    Nur um ein Beispiel zu nennen: "Spy" (nicht zu verwechseln mit NVSpy) nehme ich sehr gerne her, um detaillierte Informationen über die Wirkungsweise meiner Trigger zu bekommen. "Trigsim" schreibe ich schnell hin, wenn etwas gleich am Start losgehen soll. Das gute daran: Ich hätte diese beiden Beispiele auch mit anderen Scripts machen können. Aber jeder hat seine Präferenzen.
    2. Telliamed schrieb schon recht früh an seinen tnh-Scripts (auch hier die Dokumentation), die eine ganze Reihe teilweise sehr spezifischer Befehle enthalten, die zu bestimmten Vorhaben wie die Faust aufs Auge passen können. Wenn ich z. B. einen Zähler will, denke ich automatisch an TrapThreshold, wenn ich den Spieler einfrieren will an Trapfreezeplayer.
    3. Nameless Voice mit den NV-Scripts. Die heute vermutlich populärste und vielerlei Hinsicht praktischste Scriptsammlung, wenn man weiß, wie sie funktioniert.


    Diese drei angeführten Custom-Scripts kommen mit mehr oder weniger ausgefeilten Dokumentationen daher, die es unbedingt zu beachten gilt. Anders, als die Original-Scripts funktionieren sie oft nur, wie man sich das erhofft wenn man spezifische Befehle in die Design Note schreibt (Add-->Editor-->Design Note).
    Man sollte von Anfang an versuchen zu verstehen, wie der Duktus dieser Design-Notes aussieht. (2)
    Vor allem muß man diese Dokumentationen (auch die der Originalscripts) immer und immer wieder lesen; man entdeckt meist etwas, das man noch nicht kennt oder vergessen hat.


    Dann gibt es noch einige Sonderscripts (keine Gewähr auf Vollständigkeit):
    1. KDScripts. Eigentlich eine vielversprechnde Sammlung, die sehr nützlich sein könnte. Sie wird momentan aber nicht mehr weiter entwickelt. Sehr schade
    2. TWScripts von The Watcher.

    3. Squirrel-Scripts, das seit NewDark 1.25 vorhanden ist. Man kann damit eigene Scipts schreiben. Referenzen und Demo:

    (Anleitung): https://www.ttlg.com/forums/search.php?searchid=102623

    (Demo von Daraan): https://www.ttlg.com/forums/showthread.php?t=147713



    Ich fasse zusammen:
    convict.osm und gen.osm sind die wichtigsten Scripte in DromEd
    Public-Scripts, tnh-Scripts und NVScripts können von fortgeschrittenen DromEdern auch genutzt werden, sie vereinfachen und ermöglichen oft vieles.




    (1): In T1 sind alle notwenigen Scripts enthalten, wenn man die convict.osm lädt. Hier wird keine gen.osm benötigt.
    (2) Hier will ich ein kleines Beispiel für den vielfältigen Einsatz einer NVRelayTrap aus den NVScripts geben:
    Eigentlich ist eine NVRelayTrap zunächst nichts anderes als eine normale RelayTrap, also ein "Weiterleiter". Erst mit der Design Note wird sie zu einem Alleskönner.
    Als Beispiel eine NVRelaytrap aus der FM "Die Farm". Das ist die Trap, die Garrett ins Jenseits befördert, wenn er am Anfang zu lange trödelt. So sieht die Design Note aus.
    NVRelayTrapTDest="Player"; NVRelayTrapTOn="[100.00]FireStim"; NVRelayTrapOff="Null"
    Was mag das bedeuten?
    NVRelayTrapTDest="Player" heißt: Das Ziel dieser Botschaft ist der Spieler (Garrett)
    NVRelayTrapTOn="[100.00]FireStim" heißt: Wenn Garrett diese Botschaft bekommt, erhält er zudem einen Feuerstoß mit der Intensität von 100 (und ist gleich mausetot)
    NVRelayTrapOff="Null" heißt: Diese NVRelayTrap kann nicht ausgeschaltet werden


    Für NVRelaytraps gibt es außer der Dokumentation ein nützliches Tutorial

  • Das wichtigste Script in Shocked, einem nahen Verwandten von DromEd, ist
    allobjs.osm. S. auch hier die Beschreibung ausgewählter wichtiger Scripts in diesem Modul. Ohne dieses Script werden SS2-FMs nicht laufen.
    Zu beachten sind die verschiedenen Control Flags für die Scripts. Es gibt viel mehr davon, als in DromEd.
    Verschiedene Autoren haben weitere Script-Module für die DarkEngine, deren Stiefonkel ShockEd ist, geschrieben
    1. Public Scripts für Shocked
    2. NVScripts für Shocked

    https://www.ttlg.com/forums/showthread.php?t=134166


    Weiteres
    -Ungestrippte Missionen (allerdings nicht alle) kann man hier beziehen. Einige mehr sind im Community Patch enthalten.
    -Analog zum DromEd Toolkit gibt es ein Shocked-Toolkit, mit dem man seine Installation auf neuesten Stand bringen kann
    -System Shock Schemas hier


    Savegames in Shocked laden

    In menu.cfg unter

    ;file

    gibt man folgende Zeile ein (einfach das kopieren)

    Code
    menu_file_9 Set Backup 0:set game_mode_backup 0

    Das macht es einfacher.

    1. Shocked starten, Mission laden.

    2. set game_mode_backup 0 übers Menu einstellen

    3. persistent player position übers Menu auswählen

    4. In game mode gehen, dann Escape drücken das Savegame übers Menu laden. Du bist nun am Anfang der Mission. Verwirrend, aber es ist anders, man landet in ShockeEd immer am Anfang.

    5. Zurück zum Editor, alt+e

    6. Drücke auf F3, gib "player" ein und drücke F8. Das bringt dich zum vom Startpunkt geschaffenen Playerobjekt.

    7. In game mode gehen. Du bist am richtigen Ort. Dein Inventar sollte alles aus dem Savegame beinhalten.



    -Zuletzt sei auf das SS2-Tool hingewiesen, womit man System Shock 2 und auch den Editor auf den neuesten Stand bringen kann

  • Scripte liegen in DromEd und System Shock 2 auf Objekten und geben dabei bestimmte Botschaften an ihre "Umwelt". Wer sich etwas näher mit der Scripterei befassen will, da kompliziertere Dinge anliegen, wird irgendwann etwas tiefer in diese Botschaften eintauchen müssen. Man steht bei Problemen erstmal wie ein Ochs vorm Berg und liest die Beschreibungen der Scripts einmal mehr durch - oft vergeblich. Meist ist es sehr hilfreich, Public Scripts oder NVScripts zu laden und das "Spy", bzw. "NVSpy"-Script auf das fragliche Objekt, die AI oder sogar auf den Spieler selbst zu legen, um dann zu schauen, was im DromEd game mode so vor sich geht. Denn mit diesen Scripts bekommt man eine kleine Analyse auf dem Bildschirm angezeigt, welche Botschaften dieses Objekt oder die Umgebung erhält (denn man kann diese Spione auf mehrere Objekte legen).
    Typische Botschaften sind z. B.
    Difficulty
    BeginScript
    Sim
    ObjRoomTransit
    DarkGameModeChange


    Aber was bedeutet das und wozu sollte ich es wissen?
    Die Botschaften in DromEd erfüllen einen Zweck, es sind Signale, die das Spiel erst möglich machen. Sobald wir wissen, wozu diese Signale da sind, können wir sie uns zunutze machen. Manch einer wird in diversen DromEd-Foren schon auf diese irre komplizierten Design-Notes, etwa für bestimmte Scripts, gestossen sein und sich gewundert haben, wozu das gut sein soll und wie man darauf kommt. Oft werden schlicht nachfolgende Botschaften in eine Form gebracht, die DromEd versteht.
    Beispiel: Die Botschaft “sim” in der Design Note einer NVRelayTrap. “sim” heißt nichts anderes als “jetzt gehts sofort los”. Die Design Note sieht dann so aus: NVRelaytrapOn="Sim"
    Bedeutet: „Jetzt geht’s sofort los, ich sende auch gleich ein Signal“
    Beispiel: „WaypointReached” auf einem TerrPt eines Aufzugs. Die Design Note sieht dann so aus: NVRelayTrapOn="WaypointReached". “Wenn der Aufzug bis hierhin fährt, sende ich sofort ein Signal”
    Beispiel: “FrobWorldBegin” auf einem Objekt mit FrobInfo. NVRelayTrapOn="FrobWorldBegin"
    “Wenn mich einer angrabbelt, sende ich sofort ein Signal”.


    Theoretisch kann man aus all diesen unten aufgeführten Botschaften wiederum spezifische Signale erzeugen.


    Noch eine Auflistung der meisten Botschaften, die vorkommen könnten
    Ich folge dabei im wesentlichen dieser Darstellung.