Wir haben uns mit unserem @HomeOfficeCGN Kollegen Björn hingesetzt und über Spieleentwicklung
gesprochen. Konkret ging es um iOS Spiele und noch konkreter um die Entstehung von Super Spell Boy, dem ersten
erschienen Titel für iOS von Björn. Wir gehen alles durch: von Grafiken erstellen, über Sounddesign, Gameloops
bis hin zur Preisfindung und Vermarktung.

Mit Björn "@_orko" Vollmer über (Indie-)Spieleentwicklung auf iOS und die Entstehung von Super Spell Boy
Intro (00:00:00)

Phill Schiller, Apple iPhone Event 2013: http://www.apple.com/apple-events/september-2013/
Intro Musik: Eric Skiff, http://ericskiff.com/music/

Unser Gast (00:01:50)

Björn @_orko Vollmer, Rhineality Games (http://rhinealitygames.com/)
Zu finden im @HomeOfficeCGN :)
hat Informatik an der FH Köln studiert
pkw.de: "klassische" Rails Webentwicklung
seit 10.10.2010 (weil 101010 = 42 o/) als Freiberuflicher Softwareentwickler unterwegs
und seit kurzem: Mehr in Richtung Entwicklung von eigenen Spielen

Browser Spieleentwicklung (00:04:00)

Begonnen hat Björn mit Browserspiel (erst in PHP, dann mit Ruby)
Spiel ist immer noch in der Entwicklung, ruht aber derzeit ;-)
Sci-Fi Setting, insgesamt sehr aufwendig
Arbeitstitel: Hard Space (http://hardspace.net/)
Nicht zu verwechseln mit Dead Space (https://en.wikipedia.org/wiki/DeadSpace(video_game))

iOS Spieleentwicklung (00:07:00)

Dann kam der Entschluss ein iOS Spiel zu machen (Startschuss: April 2012)
Ziele waren:
Mit weniger Umfang
Alle Dinge mussten selbst gemacht werden ^^
Bisher unbekannte Plattform
Einfach losgelegt, ohne sich in vorher groß einzulesen
Bei Spielen ohnehin wenig Kontakt mit UIKit und daher Custom-UI
Bücher
"Spiele entwickeln für iPhone und iPad" (ISBN 978-3-89864-725-0): http://www.amazon.de/Spiele-entwickeln-iPhone-iPad-Programmierung/dp/3898647250
"Spiele entwickeln für iPad, iPhone und iPod touch" (ISBN 978-3446430853): http://www.amazon.de/Spiele-entwickeln-iPad-iPhone-touch/dp/3446430857
Grafik hat Björn mit OpenGL implementiert
Bei OpenGL verlässt man Objective-C Land und macht Vanilla C ;-)
Björn war froh als er damit fertig war ^^
OpenGL muss nicht 3D sein, für 2D gibt es aber auch andere Möglichkeiten
Entscheidung für OpenGL war von eher pragmatischer Natur

Grafiken (00:16:20)

Grafiken kaufen? Selber machen?
Mastermind: http://de.wikipedia.org/wiki/Mastermind
Kurze Historie...
Im April 2012: Mit Super Spell Boy angefangen
Im Dezember 2012: Versuch ein (anderes) Spiel in zwei Monaten zu machen, weil die ursprüngliche Idee zu schwer erschien
Dann Anfang 2013: Doch wieder zurück zu Super Spell Boy, weil geilere Idee :)
Pixel Art: http://en.wikipedia.org/wiki/Pixel_art
Pixel Art Editor unter OS X Pixen: http://pixenapp.com/
Dann: Viel üben, nachmalen, ausprobieren…
Die Objekte im Spiel sind über Vertices definiert, über die Texturen gespannt werden
Animationen sind Bilder, wo mehrere Bilder z.B. der Figur nebeneinander stehen
Gameloop: http://en.wikipedia.org/wiki/Gameprogramming#Gamestructure, http://www.gameprogblog.com/generic-game-loop/
eine endlose Schleife, die z.B. 33 mal pro Sekunde ausgeführt wird (33 fps)
enthalten in der Schleife ist alles, was das Spiel ausmacht: Gamelogik, Rendering usw.
Taktung von Animationen und Ereignissen auf die Taktung der Gameloop

Sound & Music erstellen (00:28:52)

Der Intro-Sound dieser Folge war die Menümusik aus dem Spiel
Musik/Sound ist ein ähnliches Problem wie das Grafikproblem: Woher nehmen?
Laut Literatur hätte man damit direkt anfangen sollen, hat Björn aber nicht gemacht :P
Auch hier zunächst wieder versucht Sound-Effekte einzukaufen
Folgende Seiten angeschaut:
http://soundbible.com (free)
http://www.freesound.org (free)
Nix dabei gewesen, weil Sound sollte vom Stil zum Spiel passen (lies: 8-bit)
Dabei eine App gefunden, mit der man diese Sound leicht selber machen kann: http://thirdcog.eu/apps/cfxr
Das heisst: Die Sound sind auch selbst gemacht
Thema Musik: Kaufen ist teuer, daher Creative Commons
Dabei ist er bei Eric Skiff (http://ericskiff.com/music/) gelandet
Die Musik (und unser Intro) ist von dem Album "Resistor Anthems"
Basti erwähnt, dass das Spiel direkt einen vollständigeren Eindruck gemacht als Musik dabei war
Findet George Lucas auch ;-) (http://www.brainyquote.com/quotes/quotes/g/georgeluca462198.html)

Super Spell Boy (00:33:53)

Im App-Store: https://itunes.apple.com/app/id702233807
Retro-Spiel, Retro-Name
Worum geht es: Der Spieler steuert einen Zauberer auf seiner Burg und muss diese gegen unendliche Horden dunkler Kreaturen verteidigen
Wir fragen uns was es für ein Genre ist
Im App-Store: Action, Arcade
Wir einigen uns auf eine Mischung zwischen Tower Defense (https://en.wikipedia.org/wiki/Towerdefense) und Shoot'em Up (https://en.wikipedia.org/wiki/Shootem_up)
Wenn die Burg zerstört ist, dann ist das Spiel vorbei
Wie verteidigt man seine Burg? Natürlich mit Magie!
Man beschwört die Zauber per Gesten (a.k.a. der USP des Spiels)
Gespielt wird Portrait-Modus und die Gegner kommen vom oberen Bildschirmrand
Die Herausforderung für den Spieler besteht in:
Lernen und Erinnern der richtigen Gesten
Lernen und Erinnern welche Gegner gegen welche Zauber anfällig sind
Bsp.: Brennender Gegner -> KEIN Feuer
Von Beginn an alle Zauber verfügbar
Erst war die Idee, dass man nach und nach die Zauber freispielt
Ist aber "einfach" ein Arcadespiel: Solange spielen bis man stirbt.
Alle UI-Elemente sind im Spiel integriert:
Pause-Button ist das Tor der Burg
Auf dem linken Turm liegt das Zauberbuch, in dem sich alle Zauber nachschlagen lassen
Wie sich das gehört gibt es auch Mana und Zauber brauchen unterschiedlich viel Mana
Mana regeneriert sich selbst, aber langsam
Manchmal lassen besiegte Gegner aber auch Mana-Tränke fallen
Pro-Tipp: Wenn man einen Zauber beschwört hat und ihn noch NICHT auf einen Gegner geschossen hat, regeneriert sich der Mana-Vorrat nicht
Noch mal zur Erinnerung: Das alles muss innerhalb der Game-Loop passieren
Ereignisse müssen von Zeiteinheiten in Spielzeit (Frames) umgerechnet werden
Bsp.: Alle 0,275 Sekunden soll sich Mana regenerieren, d.h. alle 12 Frames
Das bedingt auch, dass die Events abhängig vom Framecounter getriggert werden und nicht in Realzeit, wenn das Spiel also langsamer läuft regeneriert nicht mehr alle 0,275 Sekunden Mana

Kollisionserkennung (00:43:50)

Irgendwann muss ermittelt werden, ob ein Gegner getroffen wurde oder nicht
Es wurden zwei Varianten verwendet:
Rectangle-Rectangle: Überschneiden sich zwei Rechtecke, dann ist es ein Treffer
Problem: Einige Zauber können über Gegner "hinwegfliegen" und treffen diese nicht
Lösung: Nur der Gegner darf getroffen werden, der vorher angeklickt wurde
Problem: Was heißt "angeklickt"?
Point-Rectangle: Ist ein Punkt in einem anderen Rechteck. Punkt ist in diesem Fall der "Finger" des Spielers.
Aber es gibt auch komplexere Erkennungen:
Der Steinzauber fliegt über das ganze Spielfeld und trifft dabei jeden Gegner
Wenn in zwei aufeinanderfolgenden Frames ein Gegner zweimal von gleichen Stein getroffen wird, darf der Treffer nur einmal zählen
Der Stein muss sich also merken wen er getroffen hat o_O
Vorbereitung für Combosystem ;-)
Was "musste" man sich selber ausdenken?
Konzepte wie Game-Loop und Erkennen von Kollisionen existieren und sind gut beschrieben
Details wie wen hat man getroffen, wen wollte man treffen etc. müssen dann selbst modelliert werden
Kollisionserkennung kann beliebig komplex werden. Stichwort: Polygone
In der Spieleentwicklung existieren ebenso Pattern wie in anderen Bereichen der Software-Entwicklung

Gesten (00:50:00)

Was muss man da selber machen
iOS nimmt einem kaum etwas ab
Angefangen mit GLGestureRecognizer (https://github.com/preble/GLGestureRecognizer)
Open Source Library basiert auf dem $1 Unistroke Recognizer: https://depts.washington.edu/aimgroup/proj/dollar/
In der damals verwendeten Version keine zufriedenstellenden Ergebnisse
Aktuelle Version des Spiels verwendet eine eigene Implementierung
Prinzip basiert auf "Spiele entwickeln für iPhone und iPad (S. 398 ff.)"
Man erstellt eine Matrix und vergibt jedem Feld der Matrix einen Buchstaben
Die Geste wird über die Matrix gelegt und jedes durchquerte Feld wird ausgelesen
Ergebnis ist eine String-Repräsentation der Geste: Sampling der Geste
Wahl der Auflösung ist entscheidend
Mehrere Zeichenketten können die gleiche Geste bedeuten
Aktuell gute Ergebnisse aber immer noch nicht perfekt
Was stellt aber nun iOS zur Verfügung?
iOS entscheidet ob es eine Geste oder ein Touch war
Man kann sich dann die Koordinaten der Geste geben lassen oder schon während der Ausführung der Geste die Koordinaten einsammeln (Björn macht die erste Variante)
Noch mal zur Erinnerung: Das alles muss innerhalb der Game-Loop passieren, sprich in jeder 1/33 Sekunde
Aussteuerung der erlaubten Toleranz bedingt potentielle Überschneidungen mit anderen Gesten
GLGestureRecognizer hat aktuelle eine neue Version. Denkbar ist eine Kombination aus beiden Ansätzen. Oder ganz neuer Ansatz/Bibliothek.
Von außen betrachtet ein einfaches Spiel und trotzdem gibt es schon Myriaden von Dingen zu beachten o_O

Sound und Musik abspielen (00:57:35)

Wie wird Sound/Musik abgespielt?
Sound und Musik ist erstaunlich einfach:
Musik: Zu Beginn des Spiels das Abspielen der Musik an iOS übergeben
Soundeffekte: Wird in dem entsprechenden Frame an iOS übergeben
Fertig :-)

Entwicklungsprozess (00:58:59)

Anzeige von Sprites mittels OpenGL
Bewegen/Animieren von Sprites
Interagieren mit dem Spiel (Gesten-Erkennung)

Testen (01:00:55)

HockeyApp: http://hockeyapp.net/
Für SSB: TestFlight: http://testflightapp.com/
TestFlight kostenlos
Regelmäßige Updates an Tester
10 bis 15 Tester
Iterative Entwicklung parallel zum Testen

Zum Schluss: Menüs, Logo, Settings etc. (01:02:09)

Macht das Spiel rund
Umsetzung nochmals viel Zeit gebraucht
Viele Fallstricke beim Sound/Musik

Balancing (01:04:20)

Auch iterativer/begleitender/explorativer Prozess
Gradwanderung
Spannende Phase
Spiel eventuell zu schwer für Causal Gamer
Dirk wartet immer noch auf sein Review zu Super Spell Boy im App-Store

Entwicklungsdauer (01:06:25)

710:42 Stunden (~ 4,5 Monate)
Überwiegend Teilzeit auf über ein Jahr gestreckt
Teilzeit erschwert die Entwicklung

SpriteKit (01:08:50)

Sprite Kit Programming Guide: https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SpriteKitFrameworkRef/index.html
Nimmt viele Low-Level-Entwicklungen ab
2D-Spiele-Entwicklung
Entwicklung für iOS und OSX
OpenGL drin
Physik drin (Collision Detection, Gravity)
Partikelsystem
Animationen
Unterstützt ab iOS7
200 Millionen Installationen iOS 7
Auf den Support von älteren iOS verzichten
Konzentrieren nur auf die Spiele-Entwicklung
Erhöhter Aufwand, wenn auch