Gründung eines Indie-Game Studios

Backstory: Vor einiger Zeit wollte ich ein kleines Projekt in der Richtung der Spieleentwicklung starten. Zu Beginn war das Ganze als kleines Festungsverteidigungspiel geplant, wo ein preußisches Fort zu Beginn des 19. Jh. Wellen von Napoleons Truppen abwehren muss. Den Prototypen dazu begann ich alleine zu entwickeln. Als das ganze minimal anlief suchte ich mir dafür Helfer. Zeitnahm fand sich Florian, aktuell Mitbegründer, mit welchem ich das Konzept neu designte. Während ich noch am Umschreiben des Game Design Documents war, begann er mit der Refaktorisierung meines Projektes. Über die Zeit fanden sich dann die anderen Mitglieder. Dazu im Folgenden mehr.

Coffee Peak Games Logo

Seit knapp 3 Monaten arbeitet nun das Team und ich an dem Protoypen/ Proof of Concept unseres Spieles.
Nach und nach wurde klar, dass wir das ganze etwas seriöser fortführen wollen, da die Fortschritte sehr rapide kamen. Nachdem das anfänglich von mir initiierte Projekt nun 5 Mitarbeiter hat, haben wir uns nach längerem Organisationsaufwand entschieden, als Entwicklerkollektiv unter dem Namen „Coffee Peak Games“ aufzutreten. Der Name entstand während einer zermürbenden Brainstormingsitzung eher aus Zufall, als Florian, mein Stellvertreter, leicht angetütelt den Ballmer Peak erwähnte und wir in der Zeit der Entwicklung unseren Kaffeekonsum für das nächtliche arbeiten um einiges über die gesunde Grenze getrieben haben, dachten wir, dass der Name eigentlich ganz passend ist.
Somit wurde dies für gut befunden und (nüchtern) abgestimmt.

Organisatorisch musste natürlich auch ein Teamvertrag aufgesetzt werden, welcher uns juristisch Absichert, vor allem im Bereich der Finanzierung, Bezahlung, Gewinnbeteiligung oder dem Urheberrecht.
Um effektiver zu arbeiten nutzen wir Slack zur Kommunikation, GitLab zur Versionierung und GoogleDrive für die Konzepte, wobei das bald in’s GitLab-Wiki ausgelagert wird.
So ist es beispielsweise essentiell, für den Fall eines Austritts die Nutzungsrechte am Code oder sonstigen geistigen und materiellen Eigentum des Kollektivs zu sichern.

Das Team besteht derzeit aus folgenden Mitgliedern:

  • Meiner Wenigkeit (Game Design, Management, Entwicklung)
  • Florian (Stellvertreter, Entwicklung)
  • Andreas (Entwicklung)
  • Konstantin (extern, Entwicklung)
  • Marc (3D Modellierung)

Zudem benötigen wir unbedingt dringende Hilfe im künstlerischen Aspekt, da Marc auf Concept Arts angewiesen sein wird (und wir das für’s PR brauchen), sowie ein zweiter 3D Artist/Rigger/Animator auch sehr hilfreich wäre. Leider finden sich nicht viele Künstler mit dem „Ich arbeite kostenfrei weil ich Spaß am Projekt habe“-Mindset, da diese nicht den Luxus wie wir Entwickler haben, mit ihrem Job ein sicheres Einkommen zu generieren. Daher ist es verständlich, dass Künstler, die im Berufsleben händeringend nach Aufträgen suchen, kein Interesse an einem Rev-Share Projekt haben, wo der finanzielle Gewinn in den Sternen steht.

Für das erste Quartal 2017 ist die Beendigung des Protoypen geplant, das Jahresziel ist ein spielbare (testbare) Pre-Alpha Version. Eine Ausführliche Vorstellung des Projektes wird hier ebenfalls erscheinen, wenn wir neben Text und Konzepten auch optisch etwas präsentieren können.

Den Blog dazu wird es teils hier geben oder komplett auf unserer noch nicht begonnenen Website: http://www.coffeepeakgames.com

Funktion und Nutzung des A* Algorithmus | Teil 1 von 2

Für mein Projekt, ein Echtszeitstrategiespiel (RTS) zu entwickeln, habe ich mich konsequenterweise mit der Wegfindung einer KI beschäftigt.

In diesem Beitrag möchte ich die Funktion des A* Algorithmus erklären und demonstrieren, wie dies mit Unity realisiert werden kann. Genutzt wird hierbei das bereits bestehende A*-Project von Aron Granberg.

Beginnen wir mit dem Konzept der Wegfindung. Als Gottgleiches Individuum können wir einem Pixelhaufen das Kommando geben, sich von Punkt A nach B im Raum zu bewegen. Diese Punkte sind in Unity als Vector3 (x,y,z) verfügbar.
Ein einfaches Bewegungsskript würde die beiden Punkte entgegennehmen und die Einheit auf direktem Wege (Stichwort: Abstand zweier Vektoren) mit einer Geschwindigkeit moveSpeed bewegen. Beispiel:

private void MakeMove(Vector3 dir)
    {
        transform.LookAt(dir);
        transform.position = Vector3.MoveTowards(transform.position, dir, Time.deltaTime * moveSpeed);
        if (transform.position == destination) move = false;
}
if(move) MakeMove(B)

Dies mag für einen Prototypen oder das Pendant eines Hallo Welt Programmes in der Spieleentwicklung durchgehen. Doch was passiert, wenn die Einheit (im Falle ohne Collider) auf ein Hindernis, z.B eine Mauer stößt? Sie läuft durch. Für das Bewegungsskript gibt es keine Hindernisse.

Hierbei kommt die Wegfindung in’s Spiel (wortwörtlich). Salopp gesagt ist folgendes die Aufgabe der Wegfindungsskripte: Finde den Schnellstmöglichen weg von A nach B, ohne gegen eine Wand zu laufen.

Und das geht am besten mit effizienten Algorithmen wie dem A*.

Definition: Der A* Algorithmus ist ein heuristischer Suchagorithmus zur Berechnung des  kürzesten Pfades zweier Punkte auf einem Graphen.

A* Iterationsdarstellung
A* Iterationsdarstellung

Kurze Erklärung zum GIF: Es sind 2 Punkte gegeben, A (rot) und B (grün). Diese liegen auf einem Raster mit gleichgroßern Felder = Knoten.
Würde man sich frontal (o/l/u/r) bewegen, ergibt es die Kosten 10 für die Bewegung. Diagonale Bewegungen haben einen Wert von 14. Somit sind Gerade Bewegungen zu bevorzugen. Die Sogenannten G-Kosten bezeichnen die Distanz des Knotens vom Startpunkt.
Dazu kommen zwei weitere Werte: H-Kosten; wie weit ist der Punkt vom Zielpunkt entfernt ist; und die F Kosten; die Summe beider Werte.

Während jeder Iteration werden um alle Knoten die angrenzenden Knoten markiert und die G/H/F Kosten berechnet. Dann wird der geringste F Wert gesichtet, iteriert, dann der zweithöchste, etc, solange, bis ein Pfad zum Ziel gefunden wurde; der Pfad mit den geringsten F Kosten.
Kleine Grafik:

Beispielgraph A*
Beispielgraph A*

Der blaue Weg ist konsequenterweise der Schnellste.

Die Implementation in Unity erfolgt in Teil 2.

Neues Fenster mit JS browserunabhängig erzwingen

Durch Browsereinstellungen kann es passieren, dass trotz der JavaScript Methode

window.open()

die Links trotz des Defaultwertes _blank in einem neuen Tab geöffnet werden.

Um das zu umgehen, kann eine Eigenart der Funktion genutzt werden; werden Höhe und Breite angegeben, wird immer ein neues Fenster in der gewählten Dimension geöffnet. Ein kleiner Workaround, den ich gerade für mich entdeckt habe ist im Zusammenahg damit folgender: Mit dem Wissen, dass durch die Größenangabe immer ein neues Fenster geöffnet wird, benötigt man theoretisch nur die Verfügbare Bildschrimdimension (nicht die absolute, z.B HD/FullHD, 2k, etc.). Hierbei bietet uns ebenfalls JavaScript sehr simpel Hilfe an, da die Werte durch

window.screen.availWidth

beziehungsweise

window.screen.availWidth

ermittelt werden können.

Werden beide Grundlagen kombiniert erhält man folgendes Konstrukt:

<a href="#"  onclick="window.open(  \'http://www.google.de\',
\'_blank\',
\'toolbar=1,
location=1,
menubar=1,
width=window.screen.availWidth,
height=window.screen.availHeight\');"> Neues Fenster </a>

Durch die Parameter

toolbar, location, menubar

kann das neue Fenster noch genauer angepasst werden.

WebGoat – OpenSource Alternative zu OSCP

Wer Penetrationstesting lernen will, erreicht dies am besten durch eine Kombination von Theorie und Praxis. Das ist bekannt und trifft auf fast alle Gebiete der Informatik zu.
Als gute Ressource wird immer wieder der Kurs von Offensive Security: Offensive Security Certified Professional empfohlen. Leider übersteigt der Kaufpreis dieses, zweifellos guten, Kurses das Budget vieler, welche sich parallel zum Studium (oder einem vergleichbaren finanziell eher ertragslosen Lebesnabschnitt) spezialisieren oder weiterbilden wollen.

Als Alternative möchte ich kurz das WebGoat-Projekt von der OWASP vorstellen: WebGoat – OpenSource Alternative zu OSCP weiterlesen

Sprachbarrieren als Phishingschutz?

Sind Deutschsprachige (oder allgemein alle nicht-Englischmuttersprachler) E-Mail Nutzer durch sprachliche Barrieren besser vor internationalem Phishing/Spam geschützt als Englischsprachige Nutzer? Kann eine Sprachbarriere als Passiver Phishingschutz angesehen werden?

Sprachbarrieren als Phishingschutz? weiterlesen

Referenzensammlung

Im Laufe meiner privaten Weiterbildung zum IT-Sicherheits(-ahnungshaber) werde ich hier eine Liste aller hilfreichen Referenzen anlegen:

Blogs:

<? echo „Hallo Welt!“; ?>

Willkommen auf diesem bescheidenen Weblog, welcher eigentlich kein konkretes Ziel verfolgt. Er ist einfach da.


Hinter dem Pseudonym (TechTreeDev) verbirgt sich der relativ uninteressante Name Paul. Ich bin im Moment 20 Jahre jung/alt, mit periodischem Ablaufdatum im Dezember (Jahrgang ’96).

Als Dualer Student an der Berufsakademie Leipzig im Studiengang „Computer Science“ arbeite ich nebenbei als Webentwickler bei der Inveda.net GmbH. Zustätzlich bin ich an der besagten Einrichtung stellvertretender Studentenratssprecher und Vertreter der BA Leipzig in der Studierendenvertretung BA Sachsen (SBAS).

Privat arbeite ich an einer Künstlerplattform für Tattookünstler und entwickle mit meinem bis dato Namenlosem Team als Game Designer und Programmierer ein rollenspielbasiertes RTS.
Für die nächsten Jahre plane ich eine Spezialisierung in Richtung IT Security / InfoSec ein.


Ich werde hier wohl einige interessante Themen, welche mir in meiner beruflichen oder akademischen Laufbahn über den Weg stolpern, behandeln.
Mögliche Themen, die hier auftauchen könnten:

  • Webdevelopment
  • Game-Development & Game-Design
  • Server-Administration
  • Netzwerksicherheit

Schonmal Danke für’s Vorbeischauen und Lesen.

(Und Ja, <?=“Hallo Welt!“; ?> wäre kürzer gewesen. Sieht aber nicht schön aus.)

– Paul | TechTreeDev