Spine Tutorial 1 – Initialisierung

Voraussetzungen

Einleitung

Spine erlaubt es neue Scriptfeatures zu nutzen, solange die Modifikation über Spine gestartet wurde. Sollte die Modifikation ohne Spine gestartet werden, so werden sämtliche Aufrufe von Spine-Funktionen ignoriert. Die Ausnahme sind Erfolge. Diese funktionieren auch, wenn die Modifikation ohne Spine gestartet wird.

Spine in Scripts einbinden

Spine in bestehende Scripte zu integrieren ist äußerst einfach. Wenn du das Scriptpaket geladen hast, entpacke das Archiv den Scripts-Ordner (_work/data/Scripts/Content) in deiner Modding-Installation von Gothic. Anschließend musst du nur noch die Gothic.src öffnen und die folgende Zeile eintragen:

Spine\Spine.src

Wichtig ist, dass diese Zeile unter Ikarus, LeGo und AI\AI_Intern\AI_Constants.d steht.

Wenn du jetzt die Scripte erneut compilierst, wird Spine bereits mitcompiliert.

Module

Spine bietet verschiedene Module wie auch LeGo, die sich einzeln aktivieren lassen. Das sorgt dafür, dass zum Einen nicht unnötig viele Resourcen belegt werden. Zum Anderen vermeidet es, das zukünftige Features, die die Modifikation sowieso nicht ohne ein weiteres Update der Scripts nutzen kann, gar nicht erst initialisiert werden.

Die verschiedenen Module sollen nun kurz dargestellt werden.

Username

Das Username-Modul ist sehr klein und bietet lediglich die Möglichkeit, des Username des aktuell eingeloggten Spine-Users zu ermitteln. Es kann nützlich sein für Modifikationen, die den Spieler personalisieren möchten. Das kann z.B. für Multiplayer oder Highscores der Fall sein.

Erfolge

Das Erfolge-Modul ermöglicht es auf sehr einfache Weise Erfolge zu implementieren. Man muss lediglich ein paar Werte konfigurieren und an der richtigen Stelle Spine_UnlockAchievement aufrufen. Mehr Informationen dazu gibt es in Tutorial 2 – Erfolge.

Scores

Mit dem Scores-Modul lassen sich Highscores und Rankings umsetzen. Es bietet verschiedene Methoden um einen Score zu setzen, sowie Informationen über die Scores abzufragen. Dazu gehören sowohl der eigene Score als auch Scores und Usernamen bestimmter Plätze im Highscore. Auch der eigene Platz lässt sich abfragen. Mehr dazu gibt es in Tutorial 3 – Scores.

Multiplayer

Mit dem Multiplayer-Modul lassen sich verschiedene Arten von Multiplayer-Modifikationen realisieren. Du kannst dich mit anderen Spielern verbinden und Nachrichten austauschen. Es wurde nicht für schnelle Echtzeitübertragungen gebaut, aber z.B. rundenbasierter Multiplayer with beispielsweise in unserer Schach-Modifikation ist kein Problem. Mehr dazu gibt es in Tutorial 5 – Multiplayer.

Overall Saves

Mit dem Overall-Save-Modul lassen sich Daten Savegame-übergreifend für eine Modifikation speichern und auslesen. Das kann nützlich sein, wenn man beispielsweise Erfolge erstellen möchte nach dem Schema „Spiel mit allen Gilden einmal abgeschlossen“ oder „x Gegner besiegt“. Mehr Informationen dazu gibt es in Tutorial 4 – Overall Saves.

Initialisierung

Um Spine nun zu initialisieren reicht eine weitere Zeile Code.

Spine_Init(SPINE_MODULE_GETCURRENTUSERNAME);

Die Zeile muss in die Funktion INIT_GLOBAL in der Startup.d. Wichtig ist, dass das NACH der Initialisierung von LeGo geschieht. Eine komplette INIT_GLOBAL-Funktion kann daher wie folgt aussehen:

func void INIT_GLOBAL()
{
	// wird fuer jede Welt aufgerufen (vor INIT_<LevelName>)
	Game_InitGerman();

	LeGo_Init(LeGo_All);
	Spine_Init(SPINE_MODULE_GETCURRENTUSERNAME);
};

Will man mehrere Spine-Module aktivieren, kann man diese einfach mit dem Bit-Operator ‚|‘ verodern. So kann mit mit der Zeile

Spine_Init(SPINE_MODULE_GETCURRENTUSERNAME | SPINE_MODULE_ACHIEVEMENTS);

sowohl das Username- als auch das Erfolge-Modul aktivieren.

Hat man die Initialisierung abgeschlossen, kann man nun mit der Zeile

Print(ConcatStrings("Username: ", Spine_GetCurrentUsername()));
in einer sekündlichen Schleife den Namen des eingeloggten Spielers ausgeben.

Spine-Funktionen testen

Führt man das Beispiel nun aus, wird man sehen, dass auf dem Bildschirm immer nur Username: erscheint. Das liegt daran, wie bereits in der Einleitung erwähnt, dass die Spine-Funktionen nur dann eine Auswirkung haben, wenn die Modifikation über Spine gestartet wurde. Solange die Modifikation allerdings nicht Teil der Spine-Datenbank ist – und das ist eine noch in Entwicklung befindliche Modifikation normalerweise nicht – ist sie das natürlich noch nicht. Dafür gibt es den Entwicklermodus. Der Entwicklermodus simuliert eine bereits in der Datenbank enthaltene Modifikation. Aktivieren lässt er sich in den Einstellungen von Spine im Entwickler-Tab und über die Menüleiste. Der Shortcut Strg + D aktiviert und deaktiviert den Entwickler-Modus ebenfalls. Als fortgeschrittenes Feature für Leute, die an mehreren Projekten gleichzeitig arbeiten, gibt es auch die Möglichkeit, einzelne Ordner auf die Shortcuts Strg + 0-9 zu legen und damit direkt in den Entwicklermodus für dieses Projekt zu wechseln. Du kannst die Einstellung dafür ebenfalls in den Entwickler-Einstellungen im Einstellungsmenü finden.

Ist der Entwicklermodus aktiv, werden alle über Spine installierte Modifikationen ausgeblendet und nur manuell installierte oder eben eigene lokale Modifikationen angezeigt. Startet man nun die Modifikation, so können alle Spine-Funktionen getestet werden. Die Scripts lassen sich ebenfalls direkt in Spine kompilieren und zSpy kann zum Debuggen gestartet werden.

Startet man nun seine Modifikation über Spine, so funktioniert auch die Ausgabe des Usernames.