Spine Tutorial 2 – Erfolge

Voraussetzungen

Einleitung

Mit Hilfe von Spine lassen sich sehr einfach Erfolge umsetzen, wie man sie auch von anderen Plattformen wie Steam gewohnt ist. Dieses Tutorial zeigt, was man alles tun muss, um Erfolge einzubauen. Als Grundlage dient das erste Tutorial zum Thema Initialisierung. Benötigt wird das Modul „Erfolge“ in den Scripts SPINE_MODULE_ACHIEVEMENTS.

Erfolge konfigurieren

Um Erfolge nutzen zu können, brauchen sie folgende Eigenschaften:

  • ID
  • Name
  • Beschreibung
  • Icon
  • Versteckt

Die ID ist nötig, um den Erfolg zu identifizieren und eine Zuordnung zwischen den einzelnen Komponenten herzustellen. Sie ist eindeutig und ist sowohl in den Scripten als auch in Spine nötig. Der Name des Erfolgs ist genau einer ID zugeordnet und wird auf dem Erfolg sowie in Spine angezeigt. Die Beschreibung gibt eine Information zu dem entsprechenden Erfolg. Der Text kann leer sein oder auch erst eingeblendet werden, wenn der Erfolg freigeschaltet wurde. Angezeigt wird er nur in Spine, nicht aber in der Modifikation. Und zu guter Letzt besteht jeder Erfolg ebenfalls aus einer kleinen Grafik. Diese ist in zweifacher Ausführung nötig für den freigeschalteten und den gesperrten Zustand. Wer selbst keine entsprechenden Texturen erstellen kann, kann auch die Standardtextur nutzen, die Spine mitliefert. Es wird jedoch empfohlen, eine eigene zu erstellen, um eine Individualisierung zu haben. Die Textur wird auf eine Auflösung von 64×64 skaliert und sollte diese Auflösung daher nicht unterschreiten. Wenn zwar ein Icon für den freigeschalteten Erfolg, nicht aber für den gesperrten hochgeladen wird, dann generiert Spine automatisch eine ausgegraute Variante. Zuletzt gibt es noch das Versteckt-Flag. Dieses ist ebenfalls lediglich für Spine selbst relevant und gibt an, ob der Erfolg erst sichtbar sein soll, wenn man ihn freigeschaltet hat, oder von Anfang an.

Die Konfiguration der Erfolge findet in der Spine_UserConstants.d statt. Zuerst einmal wichtig sind die Konstanten:

  • MAX_ACHIEVEMENTS
  • SPINE_ACHIEVEMENT_NAMES
  • SPINE_ACHIEVEMENT_TEXTURES
  • SPINE_ACHIEVEMENT_PROGRESS

MAX_ACHIEVEMENTS enthält die Anzahl aller in der entsprechenden Modifikation enthaltenen Erfolge. SPINE_ACHIEVEMENT_NAMES enthält die Namen der einzelnen Erfolge und SPINE_ACHIEVEMENT_TEXTURES die dazugehörige Textur. SPINE_ACHIEVEMENT_DEFAULT.TGA ist die von Spine mitgelieferte Standardtextur und kann verwendet werden, wenn keine eigene Textur vorhanden ist. Ansonsten den Eintrag mit dem Namen der eigenen Textur ersetzen. SPINE_ACHIEVEMENT_PROGRESS gibt den maximalen Fortschritt für Fortschrittserfolge an (siehe weiter unten).

Nun sollte man sich noch für jeden Erfolg eine Konstante anlegen, den identifier. Das kann wie folgt aussehen.

const int Mod_Erfolg_01 = 0;

Wichtig dabei ist, dass der erste Erfolg immer die ID 0 besitzt, alle weiteren aufsteigend. Die Reihenfolge ist aber lediglich für die Zuordnung wichtig und hat nichts mit der Reihenfolge der Freischaltung der Erfolge zu tun.

Eine komplette Beispielkonfiguration der Erfolge könnte dann wie folgt aussehen.

const int Mod_Erfolg_01 = 0;
const int Mod_Erfolg_02 = 1;
const int Mod_Erfolg_03 = 2;

const int MAX_ACHIEVEMENTS = 3;
const string SPINE_ACHIEVEMENT_NAMES[MAX_ACHIEVEMENTS] = {
	"Kapitel 1", // wird freigeschaltet nach Abschluss von Kapitel 1
	"Sammler", // wird freigeschaltet, wenn man 10 Pflanzen gesammelt hat
	"Erwache" // wird freigeschaltet, wenn man den Schlaefer besiegt hat
};

const string SPINE_ACHIEVEMENT_TEXTURES[MAX_ACHIEVEMENTS] = {
	"SPINE_ACHIEVEMENT_DEFAULT.TGA",
	"SPINE_ACHIEVEMENT_DEFAULT.TGA",
	"SPINE_ACHIEVEMENT_DEFAULT.TGA"
};

const string SPINE_ACHIEVEMENT_PROGRESS[MAX_ACHIEVEMENTS] = {
	"0",
	"10",
	"0"
};

Ab Spine 1.3 gibt es für die noch einfachere Erstellung der Erfolge in Spine selbst den Spine-Editor. Mit diesem lässt sich die komplette hier erwähnte Konfiguration angenehm über die GUI regeln.

Optionale Einstellungen

Neben den Pflichteinstellungen, gibt es ein paar weitere optionale Einstellungen, mit denen man die Erfolge etwas konfigurieren kann. Dazu existieren zur Zeit zwei Einstellungen:

  • SPINE_ACHIEVEMENTORIENTATION
  • SPINE_ACHIEVEMENT_DISPLAY_TIME

SPINE_ACHIEVEMENTORIENTATION gibt an, wo der Erfolg angezeigt werden soll. Dazu stehen die vier Positionen SPINE_BOTTOMRIGHT, SPINE_BOTTOMLEFT, SPINE_TOPLEFT und SPINE_TOPRIGHT zur Verfügung, die die vier Bildschirmecken repräsentieren. Mit SPINE_ACHIEVEMENT_DISPLAY_TIME lässt sich die Anzeigedauer der Erfolge konfigurieren. Der Standardwert ist 3000, was für 3 Sekunden steht.

Erfolge freischalten

Hat man die Konfiguration nun abgeschlossen, so muss man nur noch, wenn die entsprechende Bedingung für den Erfolg abgeschlossen ist, die richtige Spine-Funktion aufrufen.

Spine_UnlockAchievement(id);

Nimmt man die Erfolge aus dem vorigen Beispiel, so kann man beim Kapitelwechsel zu Kapitel 2 jetzt einfach

Spine_UnlockAchievement(Mod_Erfolg_01);

aufrufen und den Rest erledigt Spine.

Erfolge mit Fortschritt

Seit Spine 1.4 gibt es außerdem Erfolge mit einem Fortschritt. Man kann das beispielsweise für Erfolge wie “Töte 100 Gegner“ benutzen, aber auch für Erfolge der Art “Spiele mit allen drei Hauptgilden durch“. Für Fortschritts-Erfolge wird zusätzlich die maximale Menge, die zum Erreichen des Erfolgs benötigt ist, erwartet. Abfragen kann man den Maximal-Wert sowie den aktuell gespeicherten Fortschritt über

Spine_GetAchievementProgress(id);
Spine_GetAchievementMaxProgress(id);

Ändert sich der Fortschritt, so setzt man den neuen Wert ganz einfach über

Spine_UpdateAchievementProgress(id, progress);

Sobald der aktuelle Fortschritt dem maximalen Fortschritt entspricht, wird der Erfolg automatisch freigeschaltet.

Spine_IncrementAchievementProgress

Als kleine Hilfsfunktion für Fortschrittserfolge existiert Spine_IncrementAchievementProgress. Die Funktion erhöht den Fortschritt den Erfolgs um 1 ohne es manuell machen zu müssen.

Erfolge von anderen Modifikationen anfragen

Einige Teams veröffentlichen mehrere Modifikationen und wollen sie irgendwie miteinander verknüpfen. So wäre es möglich einen Erfolg nur dann freizuschalten, wenn der Spieler einen anderen Erfolg in der vorigen Mod des Teams freigeschaltet hat.

Dazu existiert die Funktion Spine_IsAchievementOfOtherModUnlocked. Als Parameter erhält sie die ID der anderen Modifikation (falls nicht bekannt kann diese in der Datenbank eingesehen werden) und die ID des Erfolgs. Wie auch Spine_IsAchievementUnlocked gibt die Funktion TRUE zurück, wenn der Erfolg freigeschaltet ist, ansonsten FALSE.

Erfolge in Spine-Datenbank bekommen

Gut, so weit kannst du die Erfolge in den Scripts benutzen, aber beim Datenbankeintrag in Spine werden sie nicht angezeigt und auch Freischalten lassen sie sich nicht.

Um das zu ändern musst du folgendes tun:

  1. Starte Spine
  2. In der Menüleiste oben wähle „Entwickler“ => „Management“
  3. Wähle deine Modifikation auf der linken Seite aus
  4. Wähle in den „Erfolge“ Tab
  5. Gibt hier alle Informationen zu deinen Erfolgen ein
  6. Wenn du alles eingegeben hast, schicke die Änderungen ab

Jetzt werden die Erfolge auf der Infoseite, in der Bibliothek und im Profil angezeigt und können vom Spiel aus freigeschaltet werden.

Schaue auch ins Tutorial Veröffentlichen auf Spine.