Show notes
Mit Björn "@_orko" Vollmer über (Indie-)Spieleentwicklung auf iOS und die Entstehung von Super Spell BoyIntro (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 studiertpkw.de: "klassische" Rails Webentwicklungseit 10.10.2010 (weil 101010 = 42 o/) als Freiberuflicher Softwareentwickler unterwegsund seit kurzem: Mehr in Richtung Entwicklung von eigenen SpielenBrowser 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 aufwendigArbeitstitel: 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 UmfangAlle Dinge mussten selbst gemacht werden ^^Bisher unbekannte PlattformEinfach losgelegt, ohne sich in vorher groß einzulesenBei Spielen ohnehin wenig Kontakt mit UIKit und daher Custom-UIBü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/3446430857Grafik hat Björn mit OpenGL implementiertBei 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öglichkeitenEntscheidung für OpenGL war von eher pragmatischer NaturGrafiken (00:16:20)Grafiken kaufen? Selber machen?Mastermind: http://de.wikipedia.org/wiki/MastermindKurze Historie...Im April 2012: Mit Super Spell Boy angefangenIm Dezember 2012: Versuch ein (anderes) Spiel in zwei Monaten zu machen, weil die ursprüngliche Idee zu schwer erschienDann Anfang 2013: Doch wieder zurück zu Super Spell Boy, weil geilere Idee :)Pixel Art: http://en.wikipedia.org/wiki/Pixel_artPixel 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 werdenAnimationen sind Bilder, wo mehrere Bilder z.B. der Figur nebeneinander stehenGameloop: 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 GameloopSound & Music erstellen (00:28:52)Der Intro-Sound dieser Folge war die Menümusik aus dem SpielMusik/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 :PAuch hier zunächst wieder versucht Sound-Effekte einzukaufenFolgende 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/cfxrDas heisst: Die Sound sind auch selbst gemachtThema Musik: Kaufen ist teuer, daher Creative CommonsDabei ist er bei Eric Skiff (http://ericskiff.com/music/) gelandetDie 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 warFindet 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/id702233807Retro-Spiel, Retro-NameWorum geht es: Der Spieler steuert einen Zauberer auf seiner Burg und muss diese gegen unendliche Horden dunkler Kreaturen verteidigenWir fragen uns was es für ein Genre istIm App-Store: Action, ArcadeWir 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 vorbeiWie 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 BildschirmrandDie Herausforderung für den Spieler besteht in:Lernen und Erinnern der richtigen GestenLernen und Erinnern welche Gegner gegen welche Zauber anfällig sindBsp.: Brennender Gegner -> KEIN FeuerVon Beginn an alle Zauber verfügbarErst war die Idee, dass man nach und nach die Zauber freispieltIst aber "einfach" ein Arcadespiel: Solange spielen bis man stirbt.Alle UI-Elemente sind im Spiel integriert:Pause-Button ist das Tor der BurgAuf dem linken Turm liegt das Zauberbuch, in dem sich alle Zauber nachschlagen lassenWie sich das gehört gibt es auch Mana und Zauber brauchen unterschiedlich viel ManaMana regeneriert sich selbst, aber langsamManchmal lassen besiegte Gegner aber auch Mana-Tränke fallenPro-Tipp: Wenn man einen Zauber beschwört hat und ihn noch NICHT auf einen Gegner geschossen hat, regeneriert sich der Mana-Vorrat nichtNoch mal zur Erinnerung: Das alles muss innerhalb der Game-Loop passierenEreignisse müssen von Zeiteinheiten in Spielzeit (Frames) umgerechnet werdenBsp.: Alle 0,275 Sekunden soll sich Mana regenerieren, d.h. alle 12 FramesDas 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 ManaKollisionserkennung (00:43:50)Irgendwann muss ermittelt werden, ob ein Gegner getroffen wurde oder nichtEs wurden zwei Varianten verwendet:Rectangle-Rectangle: Überschneiden sich zwei Rechtecke, dann ist es ein TrefferProblem: Einige Zauber können über Gegner "hinwegfliegen" und treffen diese nichtLösung: Nur der Gegner darf getroffen werden, der vorher angeklickt wurdeProblem: 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 GegnerWenn in zwei aufeinanderfolgenden Frames ein Gegner zweimal von gleichen Stein getroffen wird, darf der Treffer nur einmal zählenDer Stein muss sich also merken wen er getroffen hat o_OVorbereitung für Combosystem ;-)Was "musste" man sich selber ausdenken?Konzepte wie Game-Loop und Erkennen von Kollisionen existieren und sind gut beschriebenDetails wie wen hat man getroffen, wen wollte man treffen etc. müssen dann selbst modelliert werdenKollisionserkennung kann beliebig komplex werden. Stichwort: PolygoneIn der Spieleentwicklung existieren ebenso Pattern wie in anderen Bereichen der Software-EntwicklungGesten (00:50:00)Was muss man da selber macheniOS nimmt einem kaum etwas abAngefangen 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 ErgebnisseAktuelle Version des Spiels verwendet eine eigene ImplementierungPrinzip basiert auf "Spiele entwickeln für iPhone und iPad (S. 398 ff.)"Man erstellt eine Matrix und vergibt jedem Feld der Matrix einen BuchstabenDie Geste wird über die Matrix gelegt und jedes durchquerte Feld wird ausgelesenErgebnis ist eine String-Repräsentation der Geste: Sampling der GesteWahl der Auflösung ist entscheidendMehrere Zeichenketten können die gleiche Geste bedeutenAktuell gute Ergebnisse aber immer noch nicht perfektWas stellt aber nun iOS zur Verfügung?iOS entscheidet ob es eine Geste oder ein Touch warMan 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 SekundeAussteuerung der erlaubten Toleranz bedingt potentielle Überschneidungen mit anderen GestenGLGestureRecognizer 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_OSound 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 übergebenSoundeffekte: Wird in dem entsprechenden Frame an iOS übergebenFertig :-)Entwicklungsprozess (00:58:59)Anzeige von Sprites mittels OpenGLBewegen/Animieren von SpritesInteragieren mit dem Spiel (Gesten-Erkennung)Testen (01:00:55)HockeyApp: http://hockeyapp.net/Für SSB: TestFlight: http://testflightapp.com/TestFlight kostenlosRegelmäßige Updates an Tester10 bis 15 TesterIterative Entwicklung parallel zum TestenZum Schluss: Menüs, Logo, Settings etc. (01:02:09)Macht das Spiel rundUmsetzung nochmals viel Zeit gebrauchtViele Fallstricke beim Sound/MusikBalancing (01:04:20)Auch iterativer/begleitender/explorativer ProzessGradwanderungSpannende PhaseSpiel eventuell zu schwer für Causal GamerDirk wartet immer noch auf sein Review zu Super Spell Boy im App-StoreEntwicklungsdauer (01:06:25)710:42 Stunden (~ 4,5 Monate)Überwiegend Teilzeit auf über ein Jahr gestrecktTeilzeit erschwert die EntwicklungSpriteKit (01:08:50)Sprite Kit Programming Guide: https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SpriteKitFrameworkRef/index.htmlNimmt viele Low-Level-Entwicklungen ab2D-Spiele-EntwicklungEntwicklung für iOS und OSXOpenGL drinPhysik drin (Collision Detection, Gravity)PartikelsystemAnimationenUnterstützt ab iOS7200 Millionen Installationen iOS 7Auf den Support von älteren iOS verzichtenKonzentrieren nur auf die Spiele-EntwicklungErhöhter Aufwand, wenn auch

