GST024 - 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
Kommentare
Neuer Kommentar