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

Durch das Abschicken des Formulares stimmst du zu, dass der Wert unter "Name oder Pseudonym" gespeichert wird und öffentlich angezeigt werden kann. Wir speichern keine IP-Adressen oder andere Personenbezogene Daten. Die Nutzung von deinem echten Namen ist freiwillig.