Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

07.10.2013, 14:22

Von Priestern und Winzerschorlen: Erfahrungsberichte vom ONC

Am vergangenen Wochenende haben wir auf der Devmania 2013 den ersten Platz belegt. Unter 19 eingereichten Projekten setzte sich der Gottesdienst-Simulator MMXIV durch. Der Sieg kam für uns etwas überraschend, immerhin war es unser erster Wettbewerb und unsere erste Devmania. Dennoch waren wir nicht unvorbereitet! Der folgende Beitrag beschreibt unter anderem unser Vorgehen, welche Stolperfallen wir vermieden haben und wie wir es schafften, erfolgreich in kurzer Zeit ein Spiel zu entwickeln. Unser Vorgehen ist dabei sicherlich nicht optimal, aber vielleicht gibt es ja den einen oder anderen, der etwas mitnehmen kann. Erst einmal ein kurzes Review der letzten Tage und Wochen:

Vorbereitung

Da wir noch nie an einem solchen Wettbewerb teilgenommen hatten, haben wir uns am Sonntag vor der Devmania in Skype zusammengefunden und einen ersten Probelauf gestartet. Wir waren insgesamt drei Personen: ich, als Programmierer, und zwei Designer/Grafiker. Eine Freundin gab uns dann das Thema ‚Arztpraxis‘, zu dem wir ein Spiel entwickeln sollten. Nach 6 Stunden mussten wir feststellen: wir haben es überhaupt nicht drauf! Endergebnis war ein „Spiel“, bei dem der Spieler eine Arztpraxis sieht (zumindest die Wände und den Boden davon). Ein einzelner Patient läuft auf einen Pfeil zu, dessen Richtung ich durch Anklicken drehen kann. Betritt er ein Feld mit einem Pfeil, läuft er in diese Richtung. Das war also unser Ergebnis nach 6 Stunden: ein Klick auf einen Pfeil und der einzelne Patient wechselt die Richtung und rennt dann gegen die Wand. Kein Menü. Kein Sieg. Kein Interface. Kein Spiel. Klingt nach Spaß, nicht wahr?


(Link)

Von Stolperfallen und dergleichen

Nichtsdestotrotz muss man sagen, dass der Probelauf im Nachhinein betrachtet das Beste war, was wir hätten tun können. Hier die gesammelte Liste der Fehler, die wir gemacht haben:

- Kein zeitiges Erstellen von Dummy-Grafiken.

- Zu viele einzelne Tile-Grafiken.

- Zu viel Spielkonzepte entworfen, die am Ende gar
nicht umgesetzt werden konnten.

- Schlechte Kommunikation zwischen Entwickler und Designer, was umgesetzt werden muss bzw. welche Spielelemente es gibt.

- Zu viel Zeit verschwendet, das GameWindow zu erstellen, Bilder zu importieren, etc. Obwohl wir unsere eigene (noch in Entwicklung befindliche) Engine verwendet haben, hat allein das Erstellen der Projekt-Datei inkl. Abhängigkeiten viel Zeit verschlungen.

- Fehlende Absprache, welche Grafiken benötigt werden, wie sie heißen sollen und wie groß sie sind.

- Zu wenig Spielbarkeit, zu viel Grafik.

Lessons learned

In einer Retrospektive haben wir das Ganze nun bewertet und daraus Rückschlüsse gezogen, was wir bei der Devmania besser machen wollen, wie wir unseren Workflow optimieren und wie die Kommunikationswege aussehen können. Im Nachhinein bewerte ich unsere Vorgehensweise auf der Devmania als sehr gut, aber noch nicht optimal. Hier nun einige Dinge, die uns extrem geholfen haben, das Spiel auf den Stand zu bringen, mit dem wir gewonnen haben:

Auswahl des Themas und Grundkonzept

Auf der Titelseite der Mainzer Zeitung sprang uns relativ schnell das Wort „Gottesdienst“ ins Gesicht. Wir haben kurz diskutiert („Nein, das können wir doch nicht machen…“) und uns dann darauf geeinigt. Zu dem Zeitpunkt hatte keiner eine Idee, wie ein Spiel zu diesem Thema überhaupt aussehen könnte.

Nun haben wir uns zusammengesetzt und das Spielkonzept definiert. Hierbei ging es wirklich nur um ein grobes Konzept, das noch keine wirklichen Features enthält. Wir wollten einen Gottesdienst simulieren und kamen nach einem kurzen Brainstorming auf „Predigten halten“ und „Gläubige besuchen die Kirche“. Daraus entwickelte sich die Idee, Predigten zu halten, um Gläubige „bei der Stange zu halten“, da sie sonst die Kirche verlassen. Wir einigten uns darauf, dass Gläubige Bedürfnisse haben, die durch Predigten gestillt werden. Eine Predigt definierten wir als Spielobjekt, das eine Dauer, eine Abklingzeit, einen Namen und eine Zahl von Bedürfnissen hat, die sie erfüllt.


(Link)


Spielfeld, Grafiken und Teamaufteilung

Nachdem unser wirklich sehr dünnes Spielkonzept stand, haben wir das Spielfeld auf einem gerasterten Blatt skizziert. Wo sind die Bänke, wo ist Platz für Predigten? Wo ist der Altar und der Priester? Wo der Score-Balken und der Timer, der angibt, wann das Level geschafft ist?

Wir haben festgelegt, welche Grafiken wir benötigen (Bank, Altar, Besucher, etc.) und wie diese heißen sollen.

Dann haben wir das Team aufgeteilt: Ich habe ab diesem Zeitpunkt die nächsten 8 Stunden fast komplett durchprogrammiert, René hat Grafiken erstellt und Matthias hat das Design vorangetrieben und die Kommunikation zwischen uns sichergestellt.

Karteikarten machen es einfacher

Eins der Dinge, die wir uns vorgenommen haben, war, sämtliche Elemente des Spiels auf Tasks zu schreiben. Diese wurden vom Designer an den Programmierer gereicht, der sie auf dem Tisch geordnet und herumgeschoben hat. Fertige Tasks wurden auf einen Stapel zur Seite gelegt. Tasks waren unter anderem „Der Altar und die Bänke sind zu sehen.“, „Ein Timer läuft ab.“ oder „Eine Predigt kann mit Druck auf die entsprechende Taste gestartet werden.“. Dieses Konzept klingt aufwändig und übertrieben, hat uns im Endeffekt aber einen immensen Tempoverteil gebracht, da ich als Programmierer wirklich nur auf die Tasks schauen und keine Rücksprache mit dem Team halten musste.

Platzhalter und dergleichen

Relativ schnell bekam ich vom Designer dem USB-Stick zugeschoben, der für sämtliche geforderten Spielobjekte Platzhalter-Grafiken in vereinbarter Größe hatte. Ich habe diese sofort eingepflegt und verwendet. Im Laufe des Entwicklungsprozesses habe ich lediglich die Grafiken gegen immer neu eintreffende ausgetauscht. Relativ früh (nach ca. 1h) konnte ich so schon sehen, wie in etwa das Spielfeld aussehen wird und wie viel Platz wir noch haben für weitere optische Features.

Kleine Iterationen und große Veränderungen

Wir haben sehr kleine Iterationen durchgeführt. Immer wenn ein neuer Task abgearbeitet war, wurde dieser getestet und das „Spiel“ wurde durchgeklickt. So konnten wir recht schnell erkennen, ob das Konzept gut ist. Dadurch, dass wir jederzeit eine spielbare Version hatten, konnten wir das Spiel im aktuellen Status immer wieder revidieren. So haben wir Spielelemente wieder verworfen, noch bevor sie implementiert wurden, z.B. das geplante Skill-/Upgradesystem. Dies hat vor unnötiger Arbeit bewahrt. Außerdem haben wir das Konzept des Spieles mehrmals umgestellt. Ursprünglich war das Spiel eher gemütlicher geplant. So sollten z.B. auch im Gang Bibeltexte der aktuellen Predigt durchscrollen. Dies fanden wir dann aber doch nicht so passend…

Feedback

Als Programmierer / Entwickler bekommt man schnell einen Tunnelblick für sein eigenes Projekt. Man findet jedes Feature toll, mag das Konzept und nichts wird kritisiert. Vor allem, wenn man unter Zeitdruck steht. Wir hatten nach ca. 3 Stunden die erste spielbare Version: Der Spieler kann Predigten mit Q, W, E und R auswählen, um die Zuschauer bei Laune zu halten, sonst verlassen diese die Kirche. Ab diesem Zeitpunkt haben wir uns kontinuierlich ahnungslose Opfer gesucht und sie unser Spiel testen lassen. Aus den Reaktionen haben wir viele Rückschlüsse ziehen können. Viele der Tester haben von sich aus auch Ideen eingebracht. So haben wir die Steuerung auf Q, S, P und L umgelegt, die Bedürfnisse farblich hervorgeben, sowie die Gedankenwolken rot unterlegt, wenn die Zeit kritisch wird. Das Spiel wurde beschleunigt (von 90 auf 30 Sekunden, von 3 Sekunden Predigtdauer auf 1 Sekunde), dann wieder etwas verlangsamt, weil es den Leuten zu hektisch war. Dann gab es später ein Step-by-Step-Tutorial, das den Spieler mit jedem Level mehr an das Spiel und die Elemente heranführte. Das Feedback war zu diesem Zeitpunkt zur Abwechslung auch einmal positiv. Gegen Ende kam erst das Feature des Ketzers mit dem Anarchie-Schild, den wir von Anfang an im Kopf hatten, aber bei dem wir noch nicht wussten, was er genau können sollte.

An dieser Stelle noch einmal ein dickes „Danke“ an alle, die uns geholfen haben, das Spielerlebnis zu verbessern.

Code Freeze

Um 3.30 Uhr Mainzer Zeit haben wir einen Code-Freeze beschlossen. Ab diesem Zeitpunkt hatten wir das Gefühl, dass unser Spiel spielbar ist. Wir haben keine neuen Features implementiert, sondern ausschließlich noch getestet, kleinere Bugs eliminiert und hier da ein Feedback zur Steuerung oder zum Interface eingebaut. Letztendlich waren alle auch sehr müde und fertig, so dass weitere Features wohl eher im Chaos geendet hatten, als wirklich das Spiel noch zu verbessern.


(Link)


Aussicht

Im Nachhinein hätten wir noch 1-2 Features mehr implementieren können. So wurde vorgeschlagen, dass der Priester mit einer Bibel nach dem Ketzer schmeißt, der dann umkippt oder dass Weihrauch die Sicht auf die Bedürfnisse der Gläubigen verdecken könnte. Ein Gospelchor könnte im Hintergrund stehen und ein „Halleluja“ könnte als Sound gespielt werden, wenn der Spieler „Godlike“ ist. Gläubige könnten wieder in die Kirche zurückkommen, wenn der Spieler erfolgreiche Kombos durchführt. Die größte Kritik meinerseits am Spiel ist: fehlender Sound und fehlendes visuelles Feedback für erfolgreiches Predigen.

Fazit

Wir kamen auf den Wettbewerb mit der Erwartung, „einmal mitzumachen“. Durch die Vorbereitung hatten wir uns einen Workflow konzipiert, waren aber zugleich etwas eingeschüchtert, da wir so massiv an dem Testlauf gescheitert sind. Umso überraschter waren wir dann, den ersten Platz wirklich auch zu bekommen. Damit hatten wir nicht gerechnet!

Im Nachhinein waren dieser vorherige Fehlschlag und der daraus resultierende Workflow aber genau das, was wir gebraucht haben. Koordination, Absprache und eine fließende Arbeit. Ich bin sehr glücklich darüber, dass wir gewonnen haben und sehe das auch als Anerkennung unserer Fähigkeiten und Leistung. Ferner freue ich mich, so viele neue Leute und ihre eigentlichen Projekte kennengelernt zu haben. Überhaupt ging ich am Sonntag (todmüde) mit vielen neuen Eindrücken heimwärts.

Letztendlich möchte ich betonen, wie freundlich und hilfsbereit wirklich jeder auf der Devmania war. Selten habe ich so viele offene Leute gesehen, die ohne irgendein Anliegen auf dich zukommen und vollkommen unbefangen ein Gespräch beginnen. Vielen Dank an alle, die dort waren!


Außerdem würde mich noch interessieren: wie waren eure Erlebnisse bezüglich des Contests? Wie lief euer Entwicklungsprozess ab? Was lief gut bei euch und was nicht? Wie würdet ihr nächstes Jahr an den Wettbewerb gehen?

2

07.10.2013, 19:11

Als kleines Addendum möchte ich Nephtyz hier voll und ganz zustimmen, einen Probelauf machen hat uns sehr viel gebracht. Dadurch, dass wir den Vorteil hatten, einen Designer zu haben (Sanity) der einfach zwischen mir (Design und dabei am Stück Pixeln) und Programmierung springen konnte hat uns das Ganze natürlich enorm vereinfacht.

Wenn ich etwas mit Sanity am Design ausgearbeitet habe, musste ich Nephtyz nicht extra noch erklären was zu tun ist und wie wir etwas gemeint haben. Sanity hat einfach einen Task erstellt und im schlimmsten Fall noch eine kurze Rückfrage beantwortet. So konnte ich einfach weiter zeichnen und somit mehr oder weniger beide Arbeitsfelder zeitgleich abdecken.

Hier auch nochmal danke an alle Tester die ich nichts Ahnend gegriffen habe und in den Gottesdienst schicken musste.
Die gut angebrachte Kritik von den Testern hat uns gezeigt wo wir Fehler gemacht haben und wo wir richtig lagen!

Vielen dank für das Feedback der Jury nach der Entscheidung, wir haben Dadurch für unser eigentliches Hauptprojekt einen unglaublichen Selbstvertrauens-Boost bekommen und hoffen, dass wir auch bald mehr vorzeigen können.
Ich für meinen Teil würde es lieben, wenn eine so fähige Community wie diese hier unser Spiel testen möchte.

In diesem Sinne,
Gott sei mit euch! ( ;) )

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

3

07.10.2013, 22:52

Also bei mir lief das in etwa so:

Da ich schon ein paar Jahre teilgenommen habe, war meine Vorbereitung (mal wieder), das Projekt aus dem letzten Jahr zu kopieren und alles bis auf ein Minimum zu loeschen oder auszukommentieren. Ich hatte also schonmal ein schwarzes Fenster und etwas auskommentierten Code um Grafiken/ Musik zu laden und anzuzeigen und ein kleines Framework, das beliebig viele Objekte verwalten kann.

Ich war dann etwa um 13:00 auf der Dusmania angekommen. Die Eroeffnungsrede lies ja etwas warten und in der Zeit beschloss ich dann schonmal mangels Mitstreiter, das ich diesmal irgendwas "im Grid" baue. Habe also meinen Gameobjekte Integer Koordinaten gegeben und dann konnte man sie mit z.b. den Pfeiltasten schonmal durch die Gegend fahren. Bzw. sprangen sie dann immer einen Feld weiter, was fuer den Anfang auch ok war. Ich baute schonmal vier von den Dingern, die erstmal einfach weisse Kreise waren und die ich dann schonmal unabhaengig ueber den Bildschirm fahren konnte. bzw. auch aus dem Bildschirm raus. Oder durcheinander hindurch...

Dann wurde endlich das Thema bekannt gegeben. Ich fand dann das Wort Tueftelarbeit, also klar: was zum tuefteln bauen! Ich hatte dann die Idee eine Art Sokoban zu bauen aber mit dem Twist, das man verschiedene Charaktere mit unterschiedlichen Eigenschaften hat. Urspruenglich wollte ich noch jemand, der was rotieren kann, aber das war dann zu kompliziert. Also machte ich meine Kugeln zu abgerundeten Rechtecken. Im Hintergrund zunaechst ein provisorisches Schachbrett, dann noch Spieler einfaerben, fertig (kurz vor 4): https://www.dropbox.com/sh/vlrtpdb05m1zu…ll-DSC07354.JPG

Als naechstes kam ein Levelformat, das einfach aus einer Text-Datei bestand. Z.B. '1'-'4' fuer die Charaktere "." -> begehbar "x" -> blockiert. Das war einfach einzulesen und funktionierte auf Anhieb. Die Spieler konnten allerdings einfach noch rausfahren in den blockierten Bereich. Kollision musste her. Da die Charaktere mehrere Felder belegten, brauchten sie also erstmal eine Groesse. Vor der Bewegung wurde dann einfach getestet, ob auf dem neuen Platz irgendwo eine blockiertes Tile ist, dann wurde die Bewegung abgebrochen. Jetzt kamen auch noch Kisten dazu, die dann verschiebar werden sollten. Erstmal waren sie aber nur ein billiger Charaktere-Abklatsch, der sich einfach nicht bewegen konnte. Im Prinzip wurde sie also nur angezeigt. Dann hatte ich die Idee mit den Eisfeldern. Das war einfach eine Untergrundtile mit der Eigenschaft, das man darauf bis zum naechsten Hindernis weiterrutschen sollte. Nach der Bewegung wurde nun also getestet, ob man komplett auf Eis steht. Wenn ja, wurde die Taste quasi automatisch nochmal gedrueckt. Das gab den verschiedenen Charaktergroessen auch gleich viel mehr Sinn, weil man quasi je nach Form mit einem "Bein" neben dem Eis bleiben konnte. Hier im Hintergrund sieht man wie das mit meinem Testlevel etwa aussah (halb 7): https://www.dropbox.com/sh/vlrtpdb05m1zu…ll-DSC07376.JPG

Jetzt brauchte ich Kollsion zwischen den Charakteren. Also einfach schauen, ob sich die Rechtecke der Charaktere ueberlappen. Das ging auch recht gut, auch wenn ich erst nen Fehler hatte, das alles ueberall 1 Feld zu gross angesehen wurde. Jemanden Im Eis zu stoppen bekam ich damit gleich noch dazu. Die Kisten waren dann natuerlich auch erstmal blockierend, da sie das gleiche Verhalten hatte. Es erhab sich mittlerweile aber das Problem, das man mit der Eisflaeche quasi in einer Bewegung durch den halben Level sprang. Daher baute ich eine Interpolation ein, damit sich ein Objekt langsam bewegt. Logisch ist es aber trotzdem sofort da. (Das fuehrte spaeter zu dem Fehler, das man Sachen auf der anderen Seite der Eisflaeche sofort anstoesst, obwohl man optisch noch nicht da ist.) Nun kam das schwierigste am Gameplay, das Verschieben der Kisten. Ich entschloss mich das so zu machen: Alle Kisten anschubsen, die den Weg evtl. blockieren, dann Charakter bewegen, soweit wie moeglich. Falls dann immer noch auf einer Eisflaeche, nochmal versuchen Kisten anzuschubsen und weiterbewegen usw. bis nichts mehr geht. Dummerweise gibts auch da kleiner Probleme, wenn man z.b. gleichzeitig durch eine Kiste und eine Wand blockiert ist, kann man die Kiste anschubsen, sich selbst dann aber gar nicht mehr bewegen. Als Letztes brauchte ich noch Zielfelder. Deren Logik ist einfach, wenn sie alle mit irgendwas kollidieren, ist der Level geloest! Jetzt versuchte ich nochmal die Grafik zu verbessern und ersetzte den Hintergrund durch abstraktere Formen.

Die Spiellogk war nurn komplett! Man konnte richtig spielen und ich baute die ertsen Level. Da die ersten zur Einfuherung gedacht waren, gingen die fix. Ich legte mir auch schon zu jedem Level einen Text bereit, um das Spiel zu erklaeren (9 Uhr): https://www.dropbox.com/sh/vlrtpdb05m1zu…ll-DSC07395.JPG

Dann beschloss ich, alle Erklaerungen als Audio auszugeben, da ich ohnehin die passende Hardware dazu dabei hatte und in den Notizen schon einige Sprueche gesammelt hatte. Der Code dazu war einfach hinzuzufuegen. Vermutlich einfach als Textausgaben. Ich malte auch die Tiles nochmal um und bekam eine Kiste von Bjoern. Die einzige professionelle Grafik im Spiel... Ich bastelte noch ein paar aufwendigere Level, wobei ich mir dann nich mehr so sicher war, ob die ueberhaupt jemand zu Gesicht bekam, daher gabs auch noch einen Cheat um weiterzukommen. Alle Tester schafften aber zumindest die ersten 5-6 Level immer auf Anhieb.

Womit ich im Nachhinein nicht zufrieden bin, einmal der Durchnittsspieler wird nur so 10 min Spass mit dem Spiel haben, weil er dann nicht mehr weiterkommt, da es zu schnell zu schwer ist. Und fuer Hardcoregamer sind natuerlich nicht genug Level da. Nochmal spielen, wird es vermutlich keiner. Zweiter Punkt ist die Steuerung. Spaetestens ab dem dritten Charakter nervt es einfach nur noch, das man fuer jeden einzelne Tasten merken muss. Man haette Pfeiltasten + Anklicken gebraucht. Witzigerweise habe ich es selbst vor ein paar Jahren schonmal mit Anklicken gemacht, als ich ein ganz aehnliches Spiel gebaut hab: http://www.games-net.de/hosted/tggc/scor…ne.php?action=1 Das war aber in der kurzen Zeit dann einfach nicht mehr umsetzbar, da ich auch noch Schlafen wollte. ;-)

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

4

08.10.2013, 13:35

Den genauen zeitlichen Ablauf der Bubble Schorle werde ich wohl nicht mehr hinbekommen, da ich zu Müde war, aber ein paar Dinge kann ich trotzdem mal zum Spiel sagen.

Ursprünglich bin ich auf die Devmania gefahren, weil ich irgendwas mit Python in Pygame entwickeln wollte, Toa erzählte mir auf der Hinfahrt von zwei Leuten, die das letztes Jahr gemacht haben. Die hab ich dann gleich angesprochen und rausgefunden, dass sie dieses Jahr aus Performancegründen C++ und SFML einsetzen wollen, was mich nicht daran gehindert hat, deren Team trotzdem beizutreten :)

Ich hatte zuvor weder mit SFML noch Box2D (was wir für Physik genommen haben) gearbeitet und seit ca. 3 Jahren nichtmehr in C++ entwickelt (nur Code gelesen und Papers angeschaut). 2D habe ich auch noch nie gemacht. Deshalb war ich erstaunt, dass wir überhaupt was fertig bekommen haben :D

Bis das Thema bekannt gegeben wurde haben wir noch die Toolchain ans Laufen gebracht. Dann standen wir eine Weile relativ ratlos vor dem Plakat, bis wir uns für Weinschorle/Winzerschorle entschieden hatten. Das heißt noch nicht, dass wir ne Idee gehabt hätten, aber wir brauchten sowieso noch einen Moment, bis das ganze Crosscompile-Buildsystem endlich funktionierte. Man hätte sich auch vorbereiten können, aber das wäre langweilig gewesen ;) Etwas später hatten wir dann ein Makefile und ich konnte mich schnell in SFML und Box2D einarbeiten, während die anderen beiden an einer Spielidee feilten.

Dann kam uns die Idee, eine kleine Fliege oder Spinne in die Weinschorle fallen zu lassen, die sich dann über die aufsteigenden Luftblasen retten muss. Es galt, einen Prototypen zu bauen, um rauszufinden, wie man am besten die Physik einbaut. Zuerst entstand eine kleine GameObject-Klasse die das Bindeglied zwischen SFML und Box2D bilden sollte, darauf aufbauend kam dann eine Bubble-Klasse. Parallel haben wir uns ein Koordinatensystem ausgedacht, mit dem sowohl wir als auch Box2D zurechtkamen, wobei sich hinterher raustellte, dass wir garnicht gut damit klar kamen. Eine Einheit in Box2D sollten 500 Pixel darstellen, unsere kleinsten Blasen waren 0.1 m groß und damit 50 Pixel (Radius). Anschließend begann das Gerechne, bis die Koordinaten für das "Spielfeld" standen, hat es ganz schön gedauert und ich bin LongHairedHacker auch sehr dankbar, dass er das gemacht hat und nicht ich selbst.

Der Prototyp nahm Gestalt an, ich konnte 50 grüne Kreise auf schwarzem Hintergrund aufsteigen lassen :)

Es war mittlerweile schon relativ spät abends, und wir bauten die ersten Texturen und ein bewegliches Viewport ein. Die Rechnerei war ekelhaft, wir haben so oft über unser Koordinatensystem und die Box2D-API geflucht... Habe ich erwähnt, dass unsere y-Achse nach unten ging? So ganz unintuitiv? Das hat beim Umrechnen und Positionen ausrechnen immer wieder zu falschen Vorzeichen geführt, wobei wirs mit Humor genommen haben, unseren eigenen Code und uns selbst zur Sau gemacht haben ("Wer hat denn den Scheiß programmiert?!") und unsere Nachbarn wach gehalten haben :)

Die Texturen kamen, zunächst noch mit einem Grünstich und ohne unsere Schicke Umrandung. Nun ging es daran, den Spieler einzubauen, zunächst noch repräsentiert durch ein weißes Quadrat. Es war mittlerweile so ca. 12 Uhr nachts, und wir haben sicherlich mal wieder zwei Stunden investiert, Zahlen für Kräfte und Impulse in die Physikengine einzutippen. Die Spielerfigur, unsere kleine, putzige Spinne war mittlerweile auch fertig, die Physik stand und ich habe mich daran gemacht, ein Animationssystem zu bauen (SFML scheint sowas ja nicht von Haus aus zu bieten). Das war relativ schnell erledigt und funktionierte auch wunderbar :) Mittlerweile nahm auch die Grafik gestalt an, aber die Physik gefiel uns noch nicht. Mittlerweile hatten wir eine Abart von Stokesscher Reibung implementiert, auch bekannt als Socksche Reibung, damit unsere Blasen sich auch anständig verhalten und beim Aufsteigen nicht immer schneller werden :) Die Spinne sprang noch zu schnell, was wir zuerst darauf geschoben hatten, dass das Viewport hart an die Spielerposition gekoppelt war. Nachdem wir das dann kubisch ausgekoppelt hatten (linear sah doof aus, quadratisch ist problematisch wegen Vorzeichen, kubisch ist einfach geil) haben wir gemerkt, dass die Spinne wirklich zu schnell sprang, was sogar dazu führte, dass sie durch manche Blasen einfach durchspringen konnte. Also nochmal eine gefühlte Stunde Zahlen ausprobieren. Irgendwo hier kam dann erstmals das Gefühl auf, dass es eigentlich ziemlich viel Spaß macht, mit der Spinne über die Blasen zu springen und wir haben erstmals überlegt ob wir vielleicht wirklich einen dritten Platz machen könnten, einfach weil das Spiel lustig ist und das Tierchen so total putzig :)

Dann ging es daran, einen Windows-Build zu erstellen, was uns wieder zwei Stunden gekostet hat (etwa). Die Grafikerin ging so gegen 6 Uhr schlafen, der andere Programmierer so gegen 8. Ein Windows-Build wurde nicht fertig, wir vermuten, dass unser Crappy-Code-Design in der Main daran Schuld ist. Wir haben dann gegen 8 aufgegeben und beschlossen, dass wir auf Linux abgeben. Abschließend habe ich mich noch mit der SFML-Sound-API rumgeärgert, darin ist irgendwo ein Bug. Ich habe dann den Sound gefixt und in der Küche geholfen. Kurz vor Abgabe habe ich die anderen beiden geweckt, wir haben den Code gepackt und abgegeben. Obwohl ich an der Orga beteiligt war habe ich natürlich nicht an der Jury teilgenommen und weiß bis heute nicht, nach welchen Kriterien die Bewerten. Nur falls da jemand Zweifel bekommt ;)

Wir haben nie mit einem zweiten Platz gerechnet. Im Nachhinein sind uns dann ein paar Gründe eingefallen, was an dem Spiel gut war:
- die Physik hat funktioniert. Es gab keine Glitches, tote Ecken oder Bugs die man ausnutzen konnte. Man kann mit der Spinne 3x springen, danach muss sie sich erst wieder auf einer Blase ausruhen. Wir haben Stundenlang Zahlen probiert für Wiederstandskraft, Impuls, Masse, etc. Während dieser Zeit war ich sehr froh, dass ich Physik studiere und die ganzen Zusammenhänge noch aus dem Stehgreif beherrsche.
- Die Spinne ist niedlich :) Und die Grafiken sahen am Schluss sogar echt schick aus, gewollt retro und pixelig aber auf eine liebenswerte Art und Weise :)

Ich bedanke mich bei dem tollen Team bei dem ich mitmachen durfte und bei allen anderen Devmania-Teilnehmern. Es hat mir wirklich Spaß gemacht :)

Wir werden bald noch eine Windows-Version herausbringen (arbeiten grade an einem kleinen Redesign der Main, was unsere Probleme hoffentlich lösen sollte), dann kann auch die Mehrheit der Anwesenden mal Spielen :)

Was wir hätten besser machen können/was nicht fertig wurde:
- es war geplant, die Bubbles noch auf der y-Achse zufällig zu verteilen und dafür zu sorgen, dass neue Bubbles nur dort entstehen, wo der Spieler ist. Ist uns zu spät wieder eingefallen.
- wir hätten uns vorbereiten können, garnichtmal fertigen Code mitbringen, sondern einfach mal mit SFML und Box2D rumspielen, was aber natürlich schwierig gewesen wäre, da wir uns erst auf dieser Devmania kennen gelernt haben ;)
- mehr schlafen :P

Trotzdem (oder vielleicht genau deshalb) hatten wir eine Menge Spaß auf der Devmania und es hat mich gefreut auch mal wieder ein paar Gesichter hier aus dem Forum wiederzusehen :)

Gruß Socke

P.S. Rechtschreibfehler gehören dem Finder :) Ich übernehme keine Garantie für Zeitspannen und Zeitpunkte ;) Das war alles Gefühlt ;)

Lachsen

Frischling

Beiträge: 4

Wohnort: Saarbrücken

  • Private Nachricht senden

5

10.10.2013, 23:48

Unser Erfahrungsbericht zu Ninja Hobo Connoisseur!


(Link)


Zunächst einmal: Ich wollte für diesen Contest unbedingt unsere (praktisch hauseigene) HTML5 Spielengine benutzen, an der wir schon eine ganze Weile arbeiten. Wir haben die Engine bewusst getrennt vom Spiel entwickelt und der Contest war dann Test um zu sehen wie gut uns diese Trennung gelungen ist.

Dies war unsere aller erste Devmania und wir waren entsprechend knappt aufgestellt. Von unserem Entwicklerteam (Radical Fish Games) waren nur 2 Personen anwesend: Ich (Grafik & Programmierung) und Intero (Soundtrack).
Dazu kam dann noch Sacaldur, der uns seine JavaScript Kenntnisse angeboten. Schließlich hat er sich vor allem um das Level-Design gekümmert, da es (wahrscheinlich) zuviel Zeit gekostet hätte ihn in unsere Engine einzuarbeiten.

Aber zunächst einmal zum Spiel selber.
Unser Schlüsselwort war "Winzerschorle". Auf dem Titelblatt war ein kleiner Bericht über eine (so typisch deutsche) Haarspalterei: "Winzerschorlen" soll es nur dann heißen, wenn die Weinschorle tatsächlich vom Winzer kommt. Sonst nur "Weinschorle".
Daraus entstand dann die Idee eines Kämpfers für die korrekte Bezeichung von Winzerschorlen. Dementsprechend jemand, der alle "falschen" Winzerschorlen zerstört.
Und so kam es zum Ninja Hobo Connoisseur. (ich bin mir nicht mehr so ganz sicher, wie wir auf Ninja und Hobo kamen... wahrscheinlich war es Schicksal).

Ausarbeitung der Spielidee:
Noch während die ersten Vorträge liefen haben wir uns überlegt, wie wir das Gameplay genau gestalten. Ich muss gestehen dass uns in dem Fall wirklich der alles entscheidende Geistesblitz gefehlt hat. So kam es am Ende auf das (recht banale) "bewerfe alle Weinflaschen mit Korken". Dazu kamen dann noch ein paar Sonderfähigkeiten (in Form von "echten" Winzerschorlen) um etwas Abwechslung rein zu bringen:
  • weiße Winzerschorlen lassen einen weit springen
  • rote Winzerschorlen erlauben das werfen von flambierten Korken um gefrorene Flaschen zu brechen
  • rosette Winzerschorlen erlauben das Anziehen von metallenen Flaschen.
Darüber hinaus hatten wir Ideen für einen (epischen) Flaschenbosskampf. Das haben wir uns aber schon bewusst als "optional" notiert bzw. "zum Schluss wenn noch Zeit ist".

Schlussendlich war das Spielkonzept dann doch erstaunlich nahe an unserem Hauptprojekt (CrossCode) - anstatt Bälle wirft man Korken, ansonsten rennt man herum und springt auf Plattformen.
Das hängt sicherlich damit zusammen, dass die Engine all diese Sachen gut unterstützt - man hätte sich aber auch was ganz anderes ausdenken können. Richtig gebunden waren wir nur an der grafischen Perspektive.

Arbeitsaufteilung

Arbeitsaufteilung war gerade am Anfang kritisch. Nachdem das Konzept in etwa fest stand, brauchten wir erstmal die Grundtechnik möglichst schnell entwickelt. Erst wenn die Technik halbwegs stand, konnte man mit dem Level Design beginnen.
Nun hat es leider viel zu lange gedauert, bist die Grundtechnik stand und der Grund dafür war folgender: Wir haben uns zu Beginn zu sehr auf die Grafik konzentriert. Inbesondere habe ich viel Zeit (ca. eine Stunde) alleine damit verbracht eine aufwändige 6 Posen Lauf Animation (in 3 unterschiedlichen Richtungen!) zu pixeln - bevor ich richtig angefangen habe, die Technik umzusetzen. Es wäre definitiv sinnvoller gewesen, zuerst mit Platzhaltern zu arbeiten.

Aufgrund dieser Fehlentscheidung konnte Sacaldur als Leveldesigner in den ersten Stunden nicht wirklich viel unternehmen. Glücklicherweise kamen wir dann auf die sinnvolle Idee, dass man die Level zumindest schon mal konzeptionell vor-skizzieren kann, damit dann die Umsetzung schneller und leichter von der Hand ging. Daraufhin habe ich mich darauf konzentriert zunächst "technische Platzhalter" für den Leveleditor zu basteln, die man schon platzieren konnte obwohl sie noch nicht wirklich funktionierten. So konnte Sacaldur dann nach einiger Zeit nach und nach damit Anfangen die Level zu gestalten. Die Einführung zum Leveleditor für Sacaldur (der wie gesagt unsere Engine nicht kannte) ist im Endeffekt zu knapp ausgefallen, weshalb es zwischendurch zu einigen Komplikationen kam - insgesamt hat er sich aber sehr gut geschlagen und sich das meiste Detailwissen eigenständig angeeignet (in dem Sinne: Hut ab!).

Intero hatte sich Anfangs an Grafiken versucht sich dann aber recht bald voll auf Soundtrack und Soundeffekte konzentriert. Damit war er dann auch die meiste Zeit beschäftigt.

Während Intero sich dann etwas Schlaf gönnen konnte haben Sacaldur und ich die Nacht knallhart durchgearbeitet. Die meisten Features haben wir dann tatsächlich umgesetzt bekommen, lediglich die rosette Winzerschorle hat nicht mehr reingepasst.
Dafür haben wir es geschafft das Spiel halbwegs rund zu machen: Es gab einen Startbildschirm und ein Ende mit Spieldauer. Dank Sacaldurs durchgehenden Ansatz hatten wir am Ende ganze 16 Level zusammen gehabt (vielleicht waren dies ein paar zuviel dafür das es nur so wenig Gameplay Inhalte gab).

Insgesamt war die Arbeitsaufteilung am Anfang etwas holprig, hat sich dann aber nach einiger Zeit soweit eingependelt, dass jeder einen guten Teil beitragen konnte.

Ergebnis

Wir haben ein halbwegs rundes Spiel fertig gestellt. Ein paar der geplanten Features konnten wir zwar nicht mehr umsetzen, aber am Ende kam etwas raus, was zumindest eine gewisse Menge Spielspaß hatte.
Persönlich war ich mit dem Ergebnis sehr zufrieden. Auch die Engine hat sich bei der Entwicklung gut gehalten. So kann man sagen, dass die Trennung zuwischen Engine und Spiel bei CrossCode gut gelungen ist.
Im Endeffekt hat unser Spiel dann leider keinen Preis gewonnen. Ich muss gestehen, dass ich ein bisschen enttäuscht war. Ich kann die Entscheidung der Jury aber auch irgendwo nachvollziehen. Unser Spielkonzept hätte sicherlich origineller sein können - Gameplay mäßig war es sehr nah an unserem Hauptprojekt.

Und hier kann man das ganze Spielen:
Ninja Hobo Connoisseur
(das ganze läuft im Browser. gestest unter Chrome, Firefox und Internet Explorer 10)
Anmerkung: Wir haben das Spiel ein klein wenig aufpoliert. Der eigentliche Spielinhalt ist aber praktisch unverändert.

Schluss endlich hatten wir aber vor allem eine Menge Spaß und viel dazugelernt.
In dem Sinne jetzt zum Abschluss:

Lessons learned

  • Beim nächsten mal die Technik voll priorisieren und notfalls mit Grafikplatzhaltern arbeiten
  • Jeweils eine Person für Grafik und Technik ist echt praktisch für Arbeitsaufteilung
  • Etwas mehr Zeit für ein interessantes Spielkonzept und dafür weniger für eine aufwändiger Umsetzung

Und das war es dann von meiner Seite!
Dann spätestens bis zur nächsten Devmania!

Werbeanzeige