Post Reply 
 
Thread Rating:
  • 1 Votes - 3 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Darkstar One Modding - Fragen an die Entwickler
Author Message
Norbert Offline
The DSO Modifier
****

Posts: 212
Joined: Jul 2010
Post: #1
Darkstar One Modding - Fragen an die Entwickler
Im Laufe der Programmierung von LUA-Skripts für die Modifikationen konnte ich viele, auch bisher unbekannte und undokumentierte, Funktionen erfolgreich einsetzen. Dennoch stoße ich immer wieder auf Probleme, für die ich keine Lösung finde, obwohl eigentlich entsprechende Funktionen dafür vorhanden sein müssten. Andernfalls wären einige Abläufe im Spiel gar nicht möglich. Es gibt da vieles, was mir aufgefallen ist und im Modding-Tool entweder fehlt oder nicht dokumentiert wurde.

Text gekürzt, steht jetzt alles im nächsten Beitrag.

Gruß
Norbert
(This post was last modified: 15-11-2010 03:10 PM by Norbert.)
05-08-2010 04:30 PM
Find all posts by this user Quote this message in a reply
Norbert Offline
The DSO Modifier
****

Posts: 212
Joined: Jul 2010
Post: #2
RE: Darkstar One Modding - Fragen an die Entwickler
Wie oben schon angedeutet, hätte ich noch etliche technische Fragen zur Programmierung von Mods.
Sie sind z.T. ziemlich speziell, aber vielleicht kann ja jemand die eine oder andere Frage beantworten.

Wie können diese Werte/Zustände per Skriptfunktionen ermittelt werden?
  • Radius von Hüllkugeln (Workaround: MissionLib.GetOrbiterRadius). (erl.) Undokumentierte get-Funktion dafür gefunden.
  • Nummer (Index für "Atmosphere" in PlanetTypes.ini) und Radius (oder Stärke) der Atmosphären von Planeten.
  • Reichweite des Hyperraumantriebs der DSO (Workaround: MissionLib.IsInRange und MissionLib.GetHyperdrive).
  • Anzahl Artefakte bis zum nächsten Upgrade.
  • Objekte wie Minen und Ringe anhand deren Handles prüfen, ob sie noch vorhanden sind.
  • Auflistung ALLER Objekte (Handles) in einem System, also auch dynamische wie z.B. Schiffe und Shuttles.
  • SPACE-Typ (SPACE_Konstante) der im Programm standardmäßig vorkommenden Superfrachter.
    Sie müsste eigentlich einen anderen Wert haben als 5 (SPACE_TRANSPORTER). In dem Fall könnte ich die Definitionen in der richtigen Sektion der StarShip.ini vornehmen und die Patches in der missions.bin meiner Mod könnten wieder entfallen.
    Der StarShip-Typ (ST_Konstante = 23) ist mir bekannt.
  • Handles von an Frachtern angedockten, von Jägern geschleppten oder frei im Raum schwebenden Containern, die man nicht selbst per Skript erzeugt hat und ohne die Abfrage im TargetSelect-Event zu verwenden.
  • Inhalt von Containern, ob angedockt oder nicht.
    Momentan ist nur Missionsware abfragbar, nicht jedoch normale Handelswaren. Sollte gehen, sonst könnten sie ja nicht in der TargetView-Liste angezeigt werden.
  • Treffer und Schäden an Containern.
  • Exportwaren des aktiven oder eines anderen Sternsystems.
  • Handles von Schiffswracks (ohne die Abfrage im TargetSelect-Event zu verwenden), die durch abgeschossene Kreuzer oder von der Funktion „NShip.CreateWreck“ erzeugt wurden, also nicht die statisch in der Planets.ini festgelegten Wracks, das geht ja. (Den Trick für abgeschossene Kreuzer hab ich mittlerweile raus.)
  • Abfrage der in der Schiffsinventarliste vorhandenen Waffen und Ausrüstungsgegenstände und ob sie (de)aktiviert sind.
    Das Vorhandensein von Ausrüstung prüfe ich z.Z. per Skript, welches die Sachen beim Kauf in die GLOBALS-Tabelle einträgt, die dann von allen Skripts abgefragt werden kann. Das geht aber nicht mit Waffen und auch der aktuelle Aktivierungsstatus einzelner Ausrüstungsgegenstände lässt sich so nicht abfragen.
  • Prüfen, ob vom Plasmawerfer der Waffenboost, Schildboost oder Plasmaschild eingeschaltet wurden und gerade aktiv sind.

Wie können diese Objekte/Effekte erzeugt werden?
  • Shuttles und Taxis (mit NWing.Define hatte ich keinen Erfolg, da es wohl keine Wings sind).
    Ich würde sie gerne mal als fliegende Bomben einsetzen.[Image: biggrin.gif]
  • Boss-Manöver für beliebige Schiffe, bzw. die Erzeugung von deren Spezialwaffen.
    Der Minenwerfer der Raptoren und die Tarnung der Thulschiffe lassen sich ja auch für andere Schiffe noch leicht erzeugen. Auch das Teleportieren der Arrack und der Frontalangriff der Terraner ließen sich mit etwas Aufwand noch halbwegs nachstellen. Was sich leider nicht für Jäger der anderen Rassen nachbilden lässt, sind die Raketenangriffe der Mortok-Bossjäger und die beweglichen Selbstschussminen der Octo, die um das Schiff herumschwirren.
  • Undokumentierte Effekte, wie z.B.:
    • der Schneeschauer-Effekt beim Aussetzen der Satelliten in Hornblowers Satellitenmission (erl.)
    • rot pulsierendes Cockpit der DSO, obwohl keine schweren Schäden vorliegen (so, wie z.B. vor Basilius' Abschuß)
    • Schild von Mortok-Bossjägern
    • Lichteffekt, der beim Teleportieren der Arrackjäger entsteht
    • Anomalie-Effekt, ohne dass tatsächlich eine Anomalie vorhanden ist
    • uvm.
  • Anomalien und Werbetafeln (per Funktion), ohne sie permanent in der Datei Planets.ini eintragen zu müssen.

Verschiedenes: Wie, wo, was?
  • Wo ist der Namespace "NTutorial" abgeblieben?
    Die Funktion „NTutorial.ShowPopup“ könnte ich gut gebrauchen! Eine Abfrage des Namespaces mit „lua.type(NTutorial)“ liefert "nil", obwohl NTutorial importiert wurde. Sollte aber "table" sein. Ich habe allerdings schon festgestellt, dass die Importfunktion leider keine Fehlermeldung auslöst, wenn der angegebene Namespace nicht existiert.
  • Warum gibt es die Funktionen „NGUI.Disable“ und „NGUI.Enable“ nicht mehr, obwohl dokumentiert? Könnte ich auch brauchen.
  • Wie heißen die StringIDs im LokaTool für die Kategorien der Funktion „NPlayer.SendMail( { Category, Text } )“?
  • Was bewirkt der Parameter "Mode" der Funktionen „NStarSystem.GetOrbiter“ und „NStarSystem.List“, wenn er größer als 0 ist?
    • Bei „NStarSystem.GetOrbiter“ konnte ich trotz vieler Versuche bisher noch keine Auswirkung feststellen.
    • Bei „NStarSystem.List“ ist mir das Verhalten mit "Mode > 0" noch unklar. Am Anfang des Spiels werden 40 Systeme geliefert, später dann werden manchmal alle Systemhandles geliefert, manchmal nur 396 und manchmal nur die Handles der Systeme des aktuellen Clusters und den umliegenden 3 Clustern der Rasse, wo man gerade ist. Sehr verwirrend.
  • Was sind die Parameter und Rückgabewerte der undokumentierten Funktion „NPlayer.AddAmmoType( { ??? } ) : { Stored? }“ ?
    Die Rückgabetabelle kann ich notfalls auch selbst analysieren, die benötigten Übergabe-Parameter aber leider nicht.
  • Spawnpunkte für Objekte in Canyon, Waffenfabrik und S'kaa-Mutterschiff: Wo und vor allem, wie viele? (erl.)
  • Verwendung der "Use" und "Item" Events? (erl.)
    • Die vom Event "Item" zurückgelieferte StringId für das LokaTool soll ja der zu benutzende Gegenstand sein. Nach dem Betätigen der Benutzen-Taste erscheint dieser jedoch nicht in der Auswahl, funktioniert also nicht. Funktioniert doch.
    • Und die Parametertabelle von "Use" müsste doch einen Wert oder String liefern, welcher Gegenstand überhaupt zur Benutzung ausgewählt wurde. In der Doku ist diese Tabelle aber als leer angegeben, was eigentlich gar nicht sein kann.
      Geht auch, es lässt sich aber immer nur ein eigener Gegenstand zur selben Zeit im Skript einbauen. Dieser wird dann immer an der ersten Stelle der Liste platziert und kann mit den Tasten "F"+"1" aktiviert werden. Was in dem Fall passiert, wenn in zwei oder mehreren gleichzeitig laufenden Skripts ein Item definiert wird, muss ich noch testen.
  • Event für die Explosion von Minen vorhanden?
  • Event für Schäden an Containern vorhanden (als Ergänzung zur Konstanten CONTAINER_DESTROYED)?
    Dann könnte man noch vor deren Zerstörung reagieren (z.B. mit Warnungen).
  • Die Arbeitsweise der verschiedenen Skripttypen (MTYPE_TERMINAL, MTYPE_USER_TERMINAL, usw.) ist praktisch überhaupt nicht dokumentiert.
    Ich habe mir das durch unzählige Versuche mühsam erarbeiten müssen und bin mir immer noch nicht sicher, ob ich da jetzt alles richtig mache.
    • MTYPE_USER_TERMINAL: So hatte ich mir z.B. einen Wolf nach einem nicht vorhandenen Fehler gesucht, weil ein Skript von diesem Typ das Event "MissionStart" ausgelöst hatte, obwohl die Bedingungen im "Init"-Event nicht erfüllt waren. Mit dem Typ MTYPE_TERMINAL hatte es dann ohne sonstige Änderungen im Skript richtig funktioniert.
      Vorteil von MTYPE_USER_TERMINAL: Es können mehrere Aufträge gleichzeitig im Terminal angenommen werden. Man muss allerdings sehr dabei aufpassen, dass es kein Chaos gibt. Vor allem beim Einsatz von Kameras kann es schnell zu unerwünschten Überschneidungen kommen.
    • MTYPE_SPACE: Der Zeitpunkt der Erzeugung wird anscheinend zufällig vom Programm bestimmt. Bei einigen wenigen Skripts funktioniert das auch, bei den meisten jedoch nicht. Die Missionen werden entweder nur extrem selten oder meistens sogar überhaupt nicht gestartet.
      • Wovon hängt eigentlich die Erzeugung noch ab (wenn keine Startbedingungen in "Init" gestellt werden)?
      • Hat der Parameter 'Timeout' im "Achieved"- bzw. "Failed"-Event irgendeine Auswirkung?
      Die Alternative, diese Skripts mit dem Typ MTYPE_ALWAYS zu definieren, ist unbefriedigend, da teilweise zu viele Startbedingungen gesetzt werden müssen. Es ist damit außerdem nicht möglich, alle notwendigen Bedingungen zu definieren, da einfach die Funktionen dafür fehlen (z.B. ob eine Story-Mission aktiv ist).
    • MTYPE_STORY: Kann dieser Typ für eigene Skripts verwendet werden? Ich nehme an, dass diese Missionen nicht von selbst starten, sondern von einem anderen Skript mit NMission.Create erzeugt werden müssen. Wird für Sternsysteme, in denen solch eine Mission läuft, automatisch ein "StoryLock" gesetzt?
    • MTYPE_STORY_TERMINAL: Für Auftragsmissionen im Terminal, schon klar.
      Auch hier: Wird für Sternsysteme, in denen solch eine Mission läuft, automatisch ein "StoryLock" gesetzt?
    Zu einigen Typen (z.B. MTYPE_TUNNEL) bin ich noch nicht gekommen, wer weiß, was da noch für böse Überraschungen lauern.
  • Jetzt mal eine einfache Frage:
    Wenn ich eine Mission mit dem Befehl „NMission.SetState( { State = MSTATE_ENDED } )“ beende, kann sie dann mit SetState MSTATE_RUNNING von einem anderen Skript wieder aktiviert werden und enthält ihre V-Tabelle noch alle Werte? Oder ist sie wie bei MSTATE_ACHIEVED endgültig zu Ende und die Werte sind verloren? Anders gefragt, wird die Mission mit MSTATE_ENDED nur angehalten und ist dann im Idle-Zustand, was ich mir wünschen würde?
    (erl.)
  • Gibt es eine allgemeine Möglichkeit (Funktion oder Event), betätigte Tasten der Tastatur abzufragen?
  • Gibt es eine Funktion, um INI-Dateien direkt auszulesen?
    Etwa in dieser Art (Pseudocode): x = IniReadValue( FileName, Section, ValueName )
  • Direkte Ausgabe von Strings möglich, ohne den Umweg über das LokaTool (StringIds) nehmen zu müssen?
    Wäre für unbekannte Strings und vor allem Zahlen sehr nützlich.
  • Beim Testen von Skripts sind Abstürze des Programms keine Ausnahme, sondern die Regel. Lästigerweise wird dabei auch häufig die config.bin zerstört, welche ich dann immer wieder aus einer Sicherungskopie zurück kopieren muss. Gibt es eine Möglichkeit, die vorhandenen Default-Werte zu ändern (Auflösung höher, Tastenbelegung usw.), so dass eine automatisch erzeugte config.bin gleich die eigenen Einstellungen enthält?

Wunschliste:
  • Einbindung der LUA-Pakete "io", "os" und "table".
  • Einbindung der Potenzfunktion math.pow und/oder des Exponential-Operators (^) sowie des Modulo-Operators (%) von LUA.
  • Einbindung der LUA-Funktionen bitand, bitor, bitnot und bitxor. Ist für Bitmasken sehr nützlich.
  • Reaktivierung des Namespaces "NTutorial" und der NGUI-Funktionen „Disable“ und „Enable“.
  • Eine Liste mit allen verfügbaren get- und set-Funktionen ("Logic", "Startwerte", "Walhalla", etc.) und ihren Parametern.
  • Eine Liste mit allen Sternen und ihren Namen des realen Universums. [Image: laugh.gif]

Legende:
Die hellgrau und mit "(erl.)" markierten Fragen haben sich mittlerweile dank der auf der neuen DVD von Purple Hills mitgelieferten Missions-Skripts oder eigener Recherchen beantwortet.

To be continued...
(This post was last modified: 13-05-2011 01:35 PM by Norbert.)
08-08-2010 10:36 AM
Find all posts by this user Quote this message in a reply
Norbert Offline
The DSO Modifier
****

Posts: 212
Joined: Jul 2010
Post: #3
RE: Darkstar One Modding - Fragen an die Entwickler
So, die gamescom 2010 in Köln ist längst vorbei, solange habe ich mich ja auf eine Antwort seitens der Entwickler oder anderen, sich auch mit der Materie auskennenden Mitarbeiter, auch gern geduldet. Dass aber gar nichts kommt, noch nicht einmal eine Antwort auf die einfachste der Fragen oder zumindest ein lapidares abschlägiges "Wir unterstützen ältere Spiele nicht mehr", hätte ich nicht gedacht. Das ist schon mehr als schwach, man hat wohl noch nicht einmal dafür die Zeit oder Lust!

"Lass den Depp sich doch dumm und dämlich testen und experimentieren"...wird sich wohl so mancher gedacht haben.Sad

edit:
Ein paar Fragen haben sich nun doch erledigt, da auf der kürzlich von mir gekauften neueren DVD die Skripts der in missions.bin enthaltenen Missionen mit dabei sind.Smile
Vielen Dank dafür. Ich selbst hatte bis dahin noch eine alte Version mit KS und ohne diesen Skripts.
(This post was last modified: 14-11-2010 07:17 PM by Norbert.)
08-09-2010 12:13 PM
Find all posts by this user Quote this message in a reply
Post Reply 


Forum Jump:


User(s) browsing this thread: 1 Guest(s)

Contact Us | kalypso media :: website | Return to Top | Return to Content | Lite (Archive) Mode | RSS Syndication