Samstag, 8. März 2014

Paint Wars Post Mortem

Hier ein Link zu dem Spiel.

Es ist ziemlich genau 5 Jahre her, dass ich mit der Programmierung von Paint Wars angefangen habe und etwa ein halbes Jahr seitdem ich es veröffentlicht habe. Ich sammle mal meine Gedanken, damit ich die Lektionen nicht vergesse und vielleicht andere auch daraus lernen können.

Hintergrund

Ich habe es anderswo im Blog schon mal erwähnt aber ich habe während meiner Studienzeit die Programmierung mehrerer Spiele angefangen und sie abgebrochen, sobald mir bewusst geworden ist, wieviel Zeit vor allem die Grafik auf sich nehmen würde. Zu diesem Zeitpunkt konnte man nicht Tools auf dem Niveau von XSI Softimage oder Engines wie Unreal und Unity quasi kostenlos kriegen. Heute kann man einen großen Teil ihrer Features einfach so nutzen. Ich hatte auch in meinem jungendlichen Leichtsinn den Eindruck, dass richtige Männer alles selbst machen und jede Einzelheit des Prozesses beherrschen müssen. Das dümmste, was ich gemacht habe, war ein .spr-File-Leser zu schreiben, um das Dateiformat zu lesen, dass ein 2D-Animationsprogramm, das ich damals hatte, ausgespuckt hat. Es hat am Ende sogar funktioniert.

Irgendwann wollte ich einfach nur etwas fertigkriegen. Also habe ich das einfachste gemacht, was grafisch und vom Spielaufbau her ging, ohne dass es spielerisch in dem Bereich zu kommen, wo es für mich nicht vertretbar ist, meinen Namen drunterzuschreiben. Das war Dreieck23.

Die Entwicklung von Dreieck23 dauerte viel zu lang aber ich war zufrieden, dass es irgendwann fertig war. Man könnte denken, dass das schwierigste an einer Hobbyentwicklung ist, die Grafik schön zu machen oder die Komplexität der Programmierung zu beherrschen, aber das ist es nicht. Die Entwicklung hat einen Sweet Spot in der Mitte, in dem die Systeme stehen und aus einem funktionierenden Spiel mit vielen kleinen Schritten ein spielenwertes Spiel gemacht wird. Davor quält man sich mit Befehlen, die was auf dem Bildschirm zeichnen sollten und es nicht tun, weil irgendwelche Koordinaten außerhalb des Bildschirms zeigen, und danach quält man sich mit der richtigen Handhabung von Auflösungen und die richtige Handhabung von "Cancel"-Befehlen in Menüs. Die größte Herausforderung ist es, bei den weniger spannenden Sachen durchzuhalten.

Ziele/Motivation

So wie Dreieck23 ein Kind von Mohrhuhn und des ersten Kapitels des OpenGL Red Book ist, wo einem beigebracht wird, sein erstes Primitiv (Dreieck) zu zeichnen, ist Paint Wars auch ein Kind seiner Umstände. Ich wollte nichts überstürzen. Stattdessen wollte ich noch ein Zwischenschritt in der Größe des Spiels machen, bevor ich mich einem Spiel widme, das ich tatsächlich machen will.


Das wenige an Aufwand sollte mir helfen, die Motivation aufrechtzuerhalten, das Spiel tatsächlich zuende zu bringen. Ein weiteres Ziel war, einmal ein Konsolenspiel zu machen, weil ich seit Jahrzehnten davon geträumt habe. Das dritte Ziel war, primitive 3D-Grafik in einem 2D Spiel zu benutzen, so dass ich am Ende des Projekts genug Kenntnisse über 3D Modellierung habe, dass ich besser entscheiden kann, ob das nächste Spiel ein 2D oder 3D Spiel wird.

Was lief gut?

1. Ich habe ein Stück weit C# gelernt und zum ersten Mal in fremden Code so eingestiegen, dass ich mir eine Übersicht schaffen konnte, wie ein Spiel auf Architekturebene aufgebaut werden kann. Ich habe zwar schon mal an einem professionellen Spiel gearbeitet aber während meiner 4 Monate dort, habe ich immer noch kein Bild, das gut genug ist, machen können, wie die Teile zusammenhängen. Dabei habe ich an Spiellogik, Editor, bißchen Grafik, Sound, Scripting, etwas von allem gearbeitet.

Ich habe dank des Äquivalents der Zertifizierungslisten gelernt, auf was für Details man im Drumherum des Spiels achten muss.

2. Ich habe mit Beaterator auf der PSP eigene Musik gemacht und gemastert. Das hat Spaß gemacht und ich kann jetzt mit absoluter Sicherheit sagen, dass man 90% der Charts innerhalb von 10 Minuten auf dem Klo zusammenstellen kann.

3. Von der Spielmechanik her ist das Spiel genau so geworden, wie ich es mir vorgestellt habe. Und meine ursprüngliche Vorstellung vom Spiel hat sich beim testen bewährt. Wenn man so herumliest, was andere Entwickler schreiben, passiert es sehr oft, dass ein implementiertes Spiel oder Feature nicht so ablaufen kann, wie man es sich am Anfang im Kopf vorgestellt hat. Oder es läuft so wie vorgestellt, macht aber trotzdem keinen Spaß.

Meine zwei Spiele sind nicht innovativ sondern vorhandene Konzepte "with a twist" aber es ist erstaunlich, wie schnell ich sie parametrisieren konnte, dass sie sich "richtig anfühlen". Ich habe nicht mehr als ein paar Minuten gebraucht, um Beschleunigung und Maximalgeschwindigkeit des eigenen Schiffs zu bestimmen, Geschwindigkeit und Frequenz der Schüsse usw. Ich habe diese Sachen vor dem allerersten Test mit mehreren Spielern bestimmt und meiner Erinnerung nach nicht ändern müssen.

4. Ich habe das Spiel fertiggekriegt und ausgeliefert.

Was lief weniger gut?

Die Entwicklung dauerte 4 Jahre. Das ist zu lang.

1. Nutzloser Versuch, das Spiel online spielbar zu machen. Es ist erstaunlich, wie naiv ich noch vor 3 Jahren sein konnte. Ich dachte, es spielt eine Rolle, ob das Spiel seine Verkäufe verdoppelt oder verdreifacht. Das tut es nicht. Da das Spiel keinen Single-Player-Modus hat, habe ich gedacht, dass es um einiges attraktiver ist, wenn man es online spielen kann. Also habe ich das Implementieren neuer Features abgebrochen und eine Weile lang (fragt nicht wie lang!) Zeit darin investiert, den Aufbau des Codes so zu ändern, um ihn auf Netzwerkfähigkeit vorzubereiten. Ich habe Dokumente gelesen, wie man ein XNA Spiel online spielbar macht, die ganzen Regelungen mit Einladungen, Statusanzeigen, Lobbys usw und dann mittendrin aufgegeben. Davon abgesehen, dass es die Komplexität des Spiels und die möglichen Fehlerquellen vervielfacht hätte, habe ich keine Möglichkeit gehabt, das Zeug vernünftig zu testen.

2. Der Grafikstil ist nicht so geworden, wie ich ihn haben wollte, und die Grafik an sich ist nicht gut. Ursprünglich hieß das Spiel Candy Wars. Ich wollte, dass die Spielelemente nach Bonbons und sonstige Süßigkeiten aussehen, ein wenig wie Candy Crush, und die Spielumgebungen Tischoberflächen oder sonstiges in etwa wie Micro-Machines von der Perspektive her. Bei den Hintergründen habe ich es nicht geschafft, Texturen zu machen, die den ganzen Bildschirm bedecken, stilisiert sind und trotzdem erkennbar, was sie darstellen. Wenn ich eher Richtung Fotorealismus ging, mit Fotos, über die ich ein paar Filter laufen liess, sah das zu häßlich aus. Also habe ich aus dem Thema Süßigkeiten  das Thema Ölfarben gemacht und den Titel geändert. Die Grafik war dann auch nicht mehr aus 3D-Elementen gemacht sondern nur noch 2D. Die Kollisionsabfrage passiert aber immer noch wie ursprünglich in einem 3D-Koordinatensystem, das parallel zum Koordinatensystem der Grafik existiert.

3. Wenn ich auf das Netzwerkzeug verzichtet und das Spiel früher rausgebracht hätte, hätte ich meine Verkäufe wahrscheinlich allein dadurch vervielfacht, dass mehr Interesse an Indie Games auf der Xbox bestand. Zahlen, von anderen Leuten, die ich vor einiger Zeit gelesen habe, sagten, dass man ungefähr mit 8000 Downloads der Demo rechnen soll, wobei 1/10 in Verkäufen umgewandelt bin. Inzwischen sind wir bei 1000 Downloads angekommen.


Die angegebenen verkauften Einheiten müssen laut Microsoft in dieser Darstellung nicht stimmen. Nur das Geld, das man kriegt, ist ausschlaggebend.


Wenn man die fehlenden Einheiten dieses Jahres dazurechnet, dann kommt man darauf, dass etwas weniger als 10% der Demos in Verkäufen umgewandelt wurden, was zu erwarten ist, wenn man ein Multiplayer-only Spiel macht, das solide aber spielerisch weder besonders reichhaltig, noch optisch ansprechend ist.

Zu diesem Zeitpunkt sind die Verkäufe also wie zu erwarten aber trotzdem ist es verdammt wenig.

Schlusswort

Habe ich meine Ziele erreicht? Ich habe das Spiel tatsächlich fertiggestellt. Ich habe ein Konsolenspiel gemacht. Es taugt. Ich habe nichts neues über 3D-Modellierungsprogramme gelernt und das bißchen, das ich gelernt habe, habe ich vergessen. Und XSI Softimage wird sterben.

Die größte Erkenntnis ist, dass ich bei den Zielen noch zwei zusätzliche Sachen aufnehmen sollte.

Erstens spielt es nicht nur eine Rolle, dass der netto Zeitaufwand für das Spiel gering ist. Wenn ich Vollzeit daran gearbeitet hätte, dann wäre ich in 1 oder 2 Monaten fertig. Wichtig ist auch, dass das Ende und der Anfang des Projekts nicht zu weit auseinanderliegen. Die Lebenszeit des Menschen ist begrenzt und man sollte nicht zuviel Zeit an Sachen verschwenden, dessen Chancen, erfolgreich zu sein, gering sind. Schnelle Iterationen sind nötig. Ich war in der Zeit nicht unbedingt faul. Ich habe es innerhalb von drei Jahren geschafft, vom Salsa-Nichtskönner zum bezahlten Salsa-Tanzlehrer zu werden, aber Paint Wars hat mich in dieser Zeit nicht glücklicher gemacht. Es war eine Sache in der Ecke  meines Bewusstseins, an die ich immer denken musste, dass sie beendet werden soll, auf die ich aber keine großartige Lust hatte.

Warum hatte ich darauf keine Lust? Das Hauptkriterium war wie bei Dreieck23, dass das Spiel einen Umfang hat, dass es fertiggestellt werden kann. Beide Spiele waren aber keine, die ich selbst spielen wollte. Ein weiteres Ziel ist also, ein Spiel zu machen, das ich spielen will.

Als letztes Ziel sollte ich darauf abzielen, Spiele zu machen, die erfolgreich sein können. Damit ist nicht nur das Spieldesign sondern auch der Markt gemeint, womit XNA gleich am Anfang ausfallen sollte. Ich habe das bewusst gewählt und ich wusste von vorne rein, dass mir Paint Wars kein Geld einbringen wird und das tut mir auch nicht weh. Was unerwartet weh tut, ist wie wenig Leute das Spiel spielen, wenn man bedenkt, wie lange es gedauert hat, bis es fertig war. Ich habe keine Statistiken über Dreieck23 aber ich denke, Paint Wars ist verhältnismäßig erfolgreicher, also ist das schonmal gut.

Damit ich die neuen Ziele besser erreichen kann, werde ich in Zukunft Tools benutzen, mit denen ich weniger programmieren muss und schneller zum Ergebnis komme. Ich habe Unreal Engine 3 runtergeladen aber die Funktionen dort erschienen mir zu umfangreich. Unity ist übersichtlicher. Im letzten Steam-Sale habe ich GameMaker Studio gekauft und gehe jetzt die Tutorials durch. Letzteres scheint recht beschränkt zu sein aber wahrscheinlich werde ich es für die nächsten zwei, drei Spiele benutzen und mit den Beschränkungen arbeiten lernen. Ich will halt keinen eigenen Leveleditor programmieren, weil es nichts bringt.

Mike Acton von Insomniac hat unter anderem gesagt, dass man seine Zeit in Sachen stecken sollte, die man besser als andere machen kann. Auch wenn ein richtiger Mann alles selbst macht, wird mein Spiel besser, wenn ich meinen eigenen Leveleditor programmiere, obwohl zig andere schon existieren, die ich nutzen kann? Eher nicht. Ich bin über die Phase hinaus, wo ich etwas lernen würde (z.B. das Design von Level-Editoren) nur damit ich es weiß. Ich werde jedes vorhandene Werkzeug benutzen, das mich schneller zum Ziel bringt.

Die Lektion von Paint Wars ist: das Leben währt nicht ewig, verschwende es nicht!

Keine Kommentare: