Geekstammtisch

Geekstammtisch

Das heimelige Nerdgespräch über Webentwicklung, Ruby/Rails und mehr

GST024 - Super Spell Boy

Audio herunterladen: MP3 | AAC | OGG | OPUS

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