Freitag, 11. Oktober 2013

Es gibt Tage...



die sollte man sich rot im Kalender markieren.

Einen dieser Tage haben wir bereits hinter uns, nämlich unseren Alpha-Release zur Werkschau der MD.H.
Wir freuen uns über alle treuen Fans, die uns an diesem Tag begleitet und mit ihrem wertvollen Feedback den Weg zur neuen Version von "Outlaws of Justice" bereitet haben.

Euch erwarten beim nächsten Update ein neues Leveldesign und ein neues Kampfsystem.

Für alle, denen es jetzt schon unter den Fingern brennt: Im Stuhl zurücklehnen, nochmal ein paar alte Western rauskramen und die Zeit bis zur Fertigstellung nutzen um sich in die richtige Laune zu bringen.

Ihr solltet z.B. unseren Teaser anschauen! Viel Spaß ;)



Bis bald!

Dienstag, 30. Juli 2013

Tools for the Fools




Tools for the Fools

Unity 2D

Als wir unser Projekt starteten mussten wir Programmierer einige Entscheidungen treffen. Welche Engine wir benutzen würden stand schon fest: Unity 3D. Jetzt fragt ihr euch sicher, warum wir eine 3D-Engine für ein 2D Spiel nehmen.

Unity ist eine Engine, die sehr leicht modifizierbar ist, deshalb ist es Indie-Entwicklern möglich diese auf ihre persönlichen Bedürfnisse anzupassen. So kann man unter anderem eigene Inspektoren, sowie ganze Editorfenster schreiben, die es einem ermöglichen die Wertezuweisungen selbst für die "härtesten Programmier-Noobs" zugänglich zu machen.

Abbildung 1: Custom Inspector


In Abbildung 1 sieht man unseren selbstgeschriebenen Inspektor, dessen Funktionalität auf Position und Skalierung eingeschränkt wurde, da die Rotation für 2D irrelevant ist, da die Charactere bereits in der richtigen Rotation gezeichnet worden sind.

Wir haben uns dafür entschieden, dass die Charaktere die x und y Werte benutzen, da diese bei einem 2D-Vektor benutzt werden. In Abbildung 1 sieht man also, dass der Z Wert, sozusagen die Tiefe (Ein Charakter steht vor einem Anderen), durch eine Enumeration ersetzt wurde. Diese Enumeration kann den Wert Layer1Layer6 oder Background annehmen, wobei nur der Boden auf dem Hintergrund sein sollte.

Tools?

Tools können in Unity einfach erstellt werden indem man eine EditorWindow Klasse erstellt, diese einem Menü-Item zuweist und eben jene dann mit ganz normalen GUI-Elementen füllt.
Der Vorteil von EditorKlassen ist, dass man noch die EditorGUI-Klassen benutzen kann und andere Dinge, wie PrefabUtilities u.ä.



Abbildung 2: Tool und Inspektor im Vergleich


Für die, die die Unity Oberfläche noch nie gesehen haben, mögen die beiden Fenster in Abbildung 2 jetzt beide unübersichtlich aussehen, doch wenn man genauer hinschaut, sieht man sehr viele nützliche Funktionen.
Doch in Wahrheit ist das Tool viel komfortabler, übersichtlicher und durch die Erweiterbarkeit auch sehr viel nützlicher als der Unity-eigene Inspektor, der einfach alle Variablen darstellt, die public sind.

Zu den Erweiterungen und der Funktionalität der Tools kommen wir später bei Unsere Tools.
Diese Tools sind zwar leicht zu erstellen und zu benutzen, bedürfen jedoch einiger Wartung und auf jeden Fall eine nicht unbeträchtliche Programmierdauer, deshalb sollte man sich als Team, abhängig von der Zeit der Entwicklungszeit für das gesamte Spiel, entscheiden, ob solche Tools überhaupt sinnvoll sind.

Der Grund besteht ganz einfach darin, dass man die Tools immer sehr genau auf sein Projekt zuschneidet, da sie modular programmiert noch sehr viel zeitaufwändiger wären.
Wenn man jedoch ein Tool modular programmiert, könnte man es für weitere Projekte einsetzen und/oder im Assetstore zum Verkauf anbieten. Jedoch sollte man sich überlegen, ob es den Aufwand wirklich wert ist, denn Zeit ist ja bekanntlich Geld :D

Um zu erkennen, ob die Leveldesigner oder andere Leute die mit der Engine arbeiten ein Tool/AddOn benötigen erkennt man oft daran:
  • Sie beschweren sich über unnötige eintönige Aufgaben
  •  Eine Funktionalität die das Spiel oft benötigt ist von Unity nicht oder nur mangelhaft gegeben
  • Ein Arbeitsablauf wird oft gebraucht
Bedacht werden sollte hierbei:

  • Die Programmierzeit sollte ein Bruchteil der durch das Tool eingesparten Arbeitszeit sein
  • Das Tool muss übersichtlich sein und leicht zu benutzen

o   Sonst geht Zeit für Erklärungen und das Lesen von Handbüchern verloren, was wiederum für die Tonne ist
  • Man sollte sich mit GUI und Tools auskennen, sonst geht unnötig viel Zeit verloren

Unsere Tools

Character Editor

Der Character Editor war das erste Tool für unser Projekt, da die Leveldesigner schnellstmöglich eine Grundlage zum Arbeiten brauchten.
Mithilfe dieses Tools kann man blitzschnell Charaktere erzeugen und diesen Dialoge und Overhead-Texte zuweisen.

Abbildung 3: Character Sheet

In Abbildung 3 ist das Character Sheet zu sehen. Oben im Bild ist eine Fläche, die den Namen des angewählten Charakters anzeigt.
Wenn kein Charakter angewählt ist, erscheint ein Knopf mithilfe dessen man einen neuen Charakter anlegen kann.
Wenn ein Charakter angewählt ist, kann man weiter unten dessen Werte anschauen. Diese Vorgehensweise wird in den anderen Tools ebenfalls benutzt.

Hier sieht man nur die Werte Name, ID und Talk Type, wobei letzteres vielleicht ein wenig mehr Erklärung bedarf. Das System, was die Dialoge und Overhead-Texte verwaltet, wird benutzt, sobald der Spieler in Interaktion mit einem anderen Charakter tritt. Wenn besagter Talk Type auf Dialog gestellt ist, beginnt eine Dialog-Unterhaltung, bei Overhead eine Overhead-Text-Unterhaltung.
Und nun zu den Dialogen und Overheads.

Abbildung 4: Dialog Sheet


In Abbildung 4 sieht man das Dialog-Sheet, in dem alle Dialoge des Spiels erstellt und bearbeitet werden können.

Jeder Dialog hat folgende Werte:

Für den Editor:
  • Prefix
  • Namen
Für das Spiel:
  • ID
  • Text
  • Wahrheitswert (Ist nach dem Dialog die Unterhaltung vorbei?)
  • Nächster Charakter
  • Nächster Dialog
Bei manchen Dialogen wird diese Grundfunktionalität um andere Werte erweitert.

So können die Dialoge in 3 verschiedene Dialogarten unterteilt werden:
  • Non Selectable
  • Selectable
  • Overhead
Non Selectable sind Dialoge, bei denen nur einfacher Text angezeigt wird und die vom Spieler mit einem Betätigen der Enter-Taste oder einem Mausklick weitergeschaltet werden können. Diese werden zum Beispiel benutzt um Story-Texte oder Fragen anzuzeigen.

Bei Selectable Dialogen kommen die Buttons ins Spiel. Diese lassen den Leveldesigner eine beliebige Anzahl an Buttons einfügen, welcher einen Anzeigetext haben kann und auf einen anderen nächsten Dialog verweist (Siehe Abbildung 5).

Abbildung 5: Ein Selectable mit Buttons


Die letzte Kategorie Overheads unterscheidet sich gravierend von den anderen 2 Dialogarten.
Die Overhead-Texte werden in Sprechblasen über den Köpfen der sprechenden Charaktere angezeigt und haben eine festgelegte Anzeigezeit, die der Spieler nicht beeinflussen kann, die von den Level-Designern im Tool festgelegt wird.


Abbildung 6: Erweiterung um die angezeigte Zeit (in Sekunden)

Außerdem können unendliche viele Overhead-Unterhaltungen gleichzeitig geführt werden, ohne dass der Spieler involviert sein muss.

Fertige Dialog- und Overhead-Texte im Spiel:

Abbildung 7: Ein Overhead(links) und ein Selectable (rechts)

Event Manager

Der Eventmanager ist dafür da, an bestimmten Stellen Events auszulösen.
Events können an Dialoge oder an TriggerAreas (Auslöser-Gebiete) angehängt werden und werden ausgeführt, sobald der Spieler den Dialog gelesen hat, oder das Gebiet betritt.

Abbildung 8: Customization Sheet

Als erstes wird ein Dialog oder eine TriggerArea zur Bearbeitung ausgewählt. Hierbei kann der Level-Designer den Listen Filter auf eine Art einstellen um die Auswahl-Anzeige einzuschränken (In diesem Beispiel ist der Filter auf All).

Wenn ein Dialog mit Buttons ausgewählt wird, muss er erst einen Button auswählen bevor er die Events hierfür bearbeiten kann (Jeder Button hat individuelle Events).
Sobald dies getan ist kann man im Event Sheet die Events des ausgewählten Elements bearbeiten.

Abbildung 9: Event Sheet

Nachdem man ein ausgewählt oder ein neues Event erstellt hat, kann man dieses wie in Abbildung 9 zu sehen bearbeiten.
Als erstes wird ein Event Type ausgewählt, der bestimmt, welche Aktion ausgelöst wird (in diesem Fall Check Quest Status). Außerdem kann man noch sagen, ob das Event öfter ausgelöst werden kann (Can only be called once?) und wie lange die Abklingzeit für dieses Event ist (Event Cooldown).
Sobald man eine Aktion ausgewählt hat kann man deren Werte bearbeiten.

In diesem Fall kann man angeben welcher Quest auf seine Erfülltheit getestet wird (Quest ID) und von welchem Charakter (Char ID) welcher Dialog aufgerufen werden soll, wenn der Quest erfüllt ist oder eben nicht (Dialog ID (True) und Dialog ID (False)).

Asset Creator

Unser letztes Tool ist der Asset Creator, der dazu da ist, dass sich unsere Level-Designer aus der riesigen Masse an Assets, die für unser Spiel gezeichnet wurden, ein Asset anschauen und dieses mit einem einfachen Maus-Klick platzieren können.

Abbildung 10: Der Asset Creator

Der Asset Creator bieten noch einiges mehr an Funktionalität, wie in Abbildung 10 zu sehen ist.
Man kann durch einen einfachen Maus-Klick alle Assets in seine eigene Bibliothek laden, die von einem der Programmierer oder Level-Designern erstellt wurden.

Oben im Bild sieht man, dass auch hier eine Filter-Option vorhanden ist, die die angezeigten Assets auf eine bestimmte Kategorie einschränkt (z.B. Nature, Character, Other, …).
Zudem kann man in einem Feld nach einem bestimmten Asset per Name suchen, was dann automatisch angewählt wird.

In der Preview unten im Bild sieht man die Textur von der das Haus genommen wurde und kann außerdem erkennen, welches Haus angewählt wurde (hervorgehoben durch eine weiße Box).
Die Preview kann durch einen Klick auf den Maximize Knopf vergrößert werden.

Abbildung 11: Die maximierte Ansicht der Preview

Jedes Asset wird nach der Auswahl durch den Create Asset Knopf in der Mitte des aktuellen Szenen-Abschnitts erstellt, sodass man nicht lange suchen muss, wie in Abbildung 12 zu sehen ist.

Abbildung 12: Ein erstelltes Haus

Fazit

Nun seid ihr am Ende dieses ellenlangen Technik-Beitrags angelangt und ich möchte noch ein kleines Fazit zu Tools in Unity abgeben.

Tools für Unity können unglaublich mächtig sein, wenn sie richtig geschrieben werden. Doch wir als Team haben bereits unzählige Fehlfunktionen der Engine festgestellt, die den Programmierern unendlich oft Kopfzerbrechen bereiten. So sollte man wenn man diese Tools programmiert immer darauf achten, dass man jemanden zur Hand hat, der das Tool laufend testet und einem Feedback gibt, da man selbst nie alle Fehler finden kann, die ein solches Werkzeug produziert.

Mit laufendem Feedback ist es jedoch durch die so leicht zugänglichen Editor-Klassen von Unity sehr gut möglich ein super effizientes Tool zu schreiben, was dem Team und vor allem den Level-Designern Tage an Arbeit sparen kann, was natürlich am meisten den Producer freut ;)

In diesem Sinne, ran an die Tools, oder wie mein Co-Programmierer immer zu sagen pflegt: „Tool it you Fool!“.

P.S.: Bei Rückfragen schreibt einfach an unsere Team-Adresse: Redletter.Games@Gmail.com

Donnerstag, 18. Juli 2013

Charaktervorstellung



Hallo werte Leserschaft,
heute wollen wir euch unseren Hauptcharakter und seinen Gegenspieler vorstellen. Ihr bekommt einen kleinen Einblick in ihre Eigenschaften und könnt die Character Concepts sehen.

Wie bereits erwähnt heißt unser Protagonist Kenneth Wesson. Kenneth ist ein Kopfgeldjäger in den 30ern, chronischer Raucher und wortkarg. Über seine Vergangenheit wollen wir jetzt nicht zu viel verraten, denn die Geschichte soll sich im Laufe des Spiels entfalten, aber wir können euch schon sagen was sein Hauptmotiv ist: Rache. Kenneth ist auch kein strahlender Cowboy auf seinem weißen Pferd, er tötet für Geld und es ist ihm größtenteils egal, wen er da eigentlich umlegt. Der Grund dafür ist unsere Nähe zum Italo-Western, in denen der Held meistens kein „Good Guy“ ist, sondern aus sehr trivialen und menschlichen Gründen wie Geld, Rache oder Machtgier handelt. Hier seht ihr das Finale Concept Drawing unseres Protagonisten: 

Wer sich ein wenig mit Western auskennt kann vielleicht sehen, welcher Schauspieler als Inspirationsquelle gedient hat ;-)

Nun zu unserem Antagonisten, dem Gang Anführer Alcides „El Cazador“. Dieser fiese Kerl ist das Ziel von Kenneths Rachegelüsten und ein gefährlicher Bandit. Sein Spitzname bedeutet „Der Jäger“ und ist wohlverdient, hat Alcides in seiner langen Laufbahn als professioneller Krimineller doch schon so einige Opfer erlegt und mit Verrätern und Deserteuren kurzen Prozess gemacht. Kenneth hat noch eine Rechnung mit ihm offen und ist ihm seit längerem auf der Spur, doch Alcides ist sehr geschickt im Umgang mit dem Revolver und dieser Kampf wird kein leichter werden. Das fertige Concept Art von Alcides sieht wie folgt aus:

Wie ihr sehen könnt und es der Name auch schon vermuten lässt, hat Alcides einen mexikanischen Einschlag. Er ist jedoch nicht der einzige mexikanisch angehauchter Charakter in unserem Spiel der eine wichtige Rolle spielt, aber dazu später mehr. Generell bietet unsere Spielwelt eine Mischung aus hispanischen und westlichen Charakteren und Umgebungen, wie sie häufig im Italo-Western zu sehen ist.

Ich hoffe dieser kleine Einblick in unser Projekt hat uns gefallen und ihr bleibt interessiert, ab jetzt werden wir nämlich regelmäßig kleinere oder größere Updates schreiben um euch auf dem Laufenden zu halten.