RSS
 

Jaques Roque released!

09 Mai

Jaques Roque ist endlich fertig! Anfang Mai war es endlich soweit, nach etlichen Tests und letzten Änderungen haben wir das Spiel und die Webseite fertiggstellt.

Alles weitere findet ihr unter:

http://www.jaquesroque.com

Ich hoffe ihr habt viel Spaß beim spielen!

 
 

Jaques Roque: Alpha 1.0

11 Mrz

Es ist endlich soweit. Ab nächster Woche wird eine kleine Anzahl an Testern Jaques Roque testen. Ich bin echt total stolz, dass wir schon soweit gekommen sind. Bis alles rund ist, ist es allerdings noch ein langer Weg. Das Polishing steht an. Es kommt jetzt noch viel Kleinzeug auf uns zu, aber ich denke auch diese Hürde werden wir meistern. In den letzten Wochen habe ich Levels, Levels und nochmals Levels gemacht. Zum Ende hin wurde es immer schwieriger da man kaum noch Ideen für wirklich neue Sachen hat. Insgesamt bin ich doch mehr als zufrieden mit dem Ergebnis. Bin mal gespannt ob es den Testern auch gefällt.

Update 21.03.10:
Die Testphase wurde gecancelt. Wir sind uns noch nicht ganz darüber einig wer die Version testen wird. Außerdem wollen wir noch einige bestehende Elemente (z. B. Partikeleffekte, GUI) verbessern um den Gesamteindruck des Spiels aufzuwerten. Ob der Alpha Test ein Beta Test werden wird lasse ich noch offen…

 
Kommentare deaktiviert

Posted in Jaques Roque

 

Neue Homepage mit Wordpress

08 Mrz

Ich habe meine Homepage auf WordPress umgestellt. Ich hoffe es gefällt. WordPress ist ein kostenloses Weblog+Content Managment-System. Es ist super einfach zu installieren und sehr benutzerfreundlich. WordPress bietet mir die Funktionalität die ich brauche, ohne das ich ständig daran weiterentwickeln muss. Ich bin bis jetzt sehr zufrieden damit, und kann es nur weiterempfehlen. Für mehr Informationen klickt einfach auf das WordPress-Logo.

 
Kommentare deaktiviert

Posted in Allgemein

 

Jaques Roque: Fortschritt

17 Aug

Das Jaques Roque Team, in dem ich mitarbeite, hat sich entschlossen, endlich Screenshots vom Spiel zu veröffentlichen. Die Shots zeigen InGame Szenen vom Geisterhaus (links oben), der Mine (Rechts oben) und Atlantis (unten). Wir arbeiten weiterhin fleißig an diesem Spiel, sofern es unsere Freizeit zulässt. Jaques Roque ist ein kommerzielles Spieleprojekt welches von Turri, Eiswuxe und mir im Winter 2007 ins Leben gerufen wurde. Wir sind sehr stolz auf das, was wir bisher erreicht haben. Es ist zwar ein kleines Rätselspiel jedoch steckt sehr viel Arbeit darin. Gerade in die Konzeption, in die Ideensuche und in die Gameplay-Tests investierten wir einen Großteil unserer Zeit. Es hat sich gelohnt, das Ergebnis kann sich sehen lassen. Das Spiel ist jedoch noch nicht fertig. Es fehlt noch einiges an Game Content: z. B. Tutorial Screens, ca. 40 von insgesamt 100 Levels und viele kleinere Bugfixes. Danach beginnt das Feintuning und sodann das Beta-Testing. Ich bin sehr gespannt wie sich das Projekt in Zukunft entwickeln wird und freue mich darauf demnächst wieder berichten zu dürfen.

Verschiedene InGame-Screenshots aus Jaques Roque

 
Kommentare deaktiviert

Posted in Jaques Roque

 

Der Font Compiler

14 Aug

Eingabe TGA-Bild welches konvertiert werden soll. Die Schrift muss in einem Raster angeordnet sein.

Konvertierungsoptionen

Ein etwas älteres Tool, aber sehr nützlich. Es dient dazu Bitmap Fonts zu rastern und zu croppen. In der Funktion recht einfach, man lädt ein TGA Bild mit oder ohne Alpha Kanal. Danach legt man die Rastergröße fest, die jeder Buchstabe einnehmen darf (siehe 2. Screenshot). Da es geringfügig zu Abweichungen kommen kann (z. B. bei Dithering), gibt es einen Schwellwert der beim Croppen überschritten werden muss (Pixel Deviation). Das Croppen schneidet überflüssige (hier schwarze) Pixel ab. Somit hat man immer die exakte Größe eines Buchstabens ohne Überhang. Spart geringfügig Speicherplatz, wobei das im Vergleich zu anderen Bilddaten in Jaques Roque, Peanuts sind. Leider fehlt in dem Editor noch die Öffnen Funktion, wobei ich jedoch denke, dass dieser Editor nach diesem Projekt ausgedient hat. Das Know-How wird teilweise übernommen, aber in ein neues Tool integriert. Das Programm ist zu unflexibel da die Darstellung über die .NET Graphics läuft und das Fileformat fix integriert ist. Es gibt also zwei simultane Umsetzungen, da es in C++ (im Hauptspiel) auch existiert. Coderedundanz ist “selten” gut, und lässt sich in diesem Fall vermeiden.

 
Kommentare deaktiviert

Posted in Tools

 

Unfertige Spiele

14 Feb

Wer kennt das nicht? Gerade das brennend erwatete Top-Game im Laden erstanden. Man hat keine Bemühungen gescheut, ein Schlaflager vor dem Spieleladen errichtet um ja beim Verkaufsstart einer der Ersten zu sein. Extra für den Release ein paar Tage frei genommen und vielleicht sogar den PC aufgerüstet. Und dann das: Das Spiel hat Fehler ohne Ende. Im schlimmsten Fall lässt es sich garnicht erst installieren und bricht mit “Fehler in xyz.dll” ab. Schnell ab ins Internet die Foren absuchen. Während man sich durch flamen in diversen Foren und gelegentlichen fluchen das Mütchen kühlt, vergeht die Zeit und die Hoffnung sinkt, dass noch rechtzeitig ein Patch erscheint.

Unfertige Spiele sind keine Seltenheit
Kennen sie das Szenario? Ich schon. Denn es ist mittlerweile bei vielen Spielentwicklern üblich geworden, Spiele unfertig zu releasen, anstatt den Termin für die Veröffentlichung zu verschieben. Nicht etwa weil man den Spielern das ersehnte Spiel vorenthalten will sondern aus Profitgründen. In der Entwicklung selber äußert sich das meist so, dass die Entwicklerteams durch die Crunchtime Hölle geschickt werden. Crunchtime bedeutet ein Todesmarsch in Form von Überstunden, Urlaubssperre und dem Arbeiten am Wochenende. Das geht dann manchmal über Wochen oder sogar Monate so. Der Hauptgrund liegt meiner Meinung nach in den meisten Fällen an der unterschätzten Größe des Projekts und/oder einem viel zu knappen Budget. Viele sehen in Computerspielen das schnelle Geld. Kurz gesagt: Bei so einer Einstellung kommt in 95% der Fälle nur Mist raus. Computerspiele benötigen vernünftiges Gamedesign, eine angemessene Entwicklungszeit und einen Puffer für den Feinschliff. Nur so kann man das Glück haben auch mal einen Topseller an den Start zu bringen.

Mein Antrieb
Meine Passion liegt darin den Menschen eine Freude zu machen und sie mit meinen Spiele zu unterhalten. Auf der Dusmania 2008 (Veranstaltung für Spielentwickler) hatten wir unser derzeitiges Spiel vorgestellt und zwei Mädels haben die bis dahin erstellten 30 Levels komplett durchgespielt. Es war ein super Gefühl, zu sehen das jemand soviel Spass an dem hat was mein Team und ich auf die Beine gestellt haben. Das ist mein Antrieb, und ich würde mich schämen als Publisher, ein Spiel oder Addon zu releasen welches offensichtliche Fehler aufweist. Dinge, welche die QA (Qualitätssicherung/Test) nicht übersehen haben kann, sondern die absichtlich durch Druck des Publishers, Zeit und Profitgründen im Spiel gelassen wurden.

Ich hoffe, dass sich diese “neue Modeerscheinung” bald zum NoGo für viele werden wird. Ich glaube daran, dass sich Qualität in den Verkaufzahlen und das Vertrauen der Spieler wiederspiegelt.

 
Kommentare deaktiviert

Posted in Computerspiele

 

Der Scene Editor

05 Jan

Scene Editor in Aktion. Der Partikel Effekt bewegt sich entlang der roten Linie (Key Frame Animation).

Das Bild links zeigt einen Editor. Ich habe ihn für mein kommerzielles Spieleprojekt geschrieben. Der Editor funktioniert über eine Managed C++ Kopplung zwischen der C# Editorapplikation und der in C++ geschriebenen Engine. Der Vorteil liegt darin, dass jegliche Änderungen an der Gameengine (nach erneutem Kompilieren) auch im Editor verfügbar sind. Den Namen “Scene Editor” habe ich ausgewählt, da es ein Allround Editor werden “sollte”. Leider wird der Editor bis heute nur als Partikel Editor genutzt. Das Scene-Managment funktioniert soweit, dass bestimmte Bewegungsabläufe von Grafiken oder Partikelquellen (Scene Objects) aufgenommen werden können. Man setzt Keyframes der jeweiligen Transformation (Rotation, Skalierung, Position und Alpha) und der Rest wird automatisch interpoliert. Das Tool ist schon etwas älter, daher habe ich die Interpolation noch on-the-fly berechnet, was wohl von der Performance her besser gerastert als Array in den Speichern gehört. Das Problem mit der Fertigstellung ist, dass der Aufwand einfach nicht mehr gerechtfertigt ist. Der Game Content, der mit dieser Funktionalität realisiert werden soll, kann in erheblich weniger Zeit direkt in das Programm integriert werden.

Guter Editor / Schlechter Editor
Ich denke, das Tool fällt in beide Kategorien. Er ist gut, da man hiermit wunderbar Partikeleffekte erzeugen kann. Schlecht hingegen ist, dass er durch die offene Scene Managment Baustelle nie fertig werden wird. Ich denke, ein gutes Werkzeug zeichnet sich durch die Einsparung von Zeit aus. Ein Tool sollte entwickelt werden, wenn immer wiederkehrende Prozesse automatisiert werden können bzw. die Entwicklung eine rentable Zeiteinsparung ist.

Benutzerfreundlichkeit
Ein Editor sollte vor allem eines sein: Schnell und einfach zu bedienen. Der Benutzer sollte so schnell wie möglich an sein gewünschtes Ergebnis geführt werden. Auch in komplexen Programmen. Die Kunst der einfachen Darstellung vieler Möglichkeiten ist der Schlüssel zur Benutzerfreundlichkeit.

 
Kommentare deaktiviert

Posted in Tools

 

Asserts vs. Exceptions vs. Secrets

03 Jan

Fehler in Programmen sind oftmals unerwartete Reaktionen im Programmfluss. Es können zwei Arten von Fehlern auftreten. Fehler die man verarbeiten (handled) und welche die man nicht verarbeiten kann (unhandled). Solche Schwierigkeiten nennt man im Fachjargon auch Ausnahmen (engl. Exceptions). Das Exceptions-Modell ist in vielen gängigen Programmiersprachen wie etwa C++, PHP (seit Version 5) oder Delphi vorzufinden.

Wie funktionieren Exceptions?
Stellen Sie sich die Hierachie eines Großunternehmens vor. Von unten nach oben gibt es normale Mitarbeiter, Abteilungsleiter, Filialleiter und dann den Vorstand. Angenommen ein Mitarbeiter bekommt durch einen Zufall per Post die Quartalszahlen für das Unternehmen. Der Mitarbeiter kann damit nicht wirklich was anfangen und gibt es weiter an den Abteilungsleiter. Der widerum gibt es an seinen Vorgesetzten. Solange bis die Nachricht den Vorstand erreicht. Dieser setzt sodann entsprechende Hebel in Bewegung. So ähnlich läuft das auch mit Exceptions, nur dass die Hierarchie des Unternehmens die Aufrufliste (engl. Callstack) des Programms darstellt. Ganz oben steht der Prozess bzw. der Einstiegspunkt des Programms und ganz unten die Funktion oder Methode welche die Exception ausgelöst hat.
Wie bei dem Beispiel mit dem Unternehmen wird auch hier die Exception an die aufrufende Methode in der Hierarchie weitergereicht. Kann diese Methode die Exception nicht verarbeiten, wird diese an dessen aufrufende Methode gereicht. Das geht solange, bis der Einstiegspunkt erreicht ist. Ist bis dahin die Exception nicht verarbeitet, wird dem Betriebssystem eine unbehandelte Ausnahme gemeldet was eine Prozessterminierung zur Folge hat.

Was sind Asserts?
Asserts sind Programmabschnitte in denen bestimmte Vorraussetzungen geschaffen sein müssen, damit der weitere Programmfluss die gewünschten Ergebnisse liefert. Schlägt eine Assertion fehl, wird der “Entwickler” darüber informiert. Warum der Entwickler? Asserts sind ein Debugging Konzept und nicht für den Release Modus bestimmt. Eine Assertion ist viel mehr ein Hinweis als ein Fehler.

Was ist mit Secret gemeint?
Mit Secret (zu Deutsch: Geheimnis) meine ich das verschweigen von Fehlern. Wenn eine Methode/Funktion nicht funktioniert, kann sie zum Beispiel den Wert false zurückliefern um anzuzeigen, dass etwas schief gelaufen ist. Es könnten aber auch Fehlercodes in Form von Ganzzahlen zurückgegeben werden. Nehmen wir als Beispiel die “CreateWindowEx”-Funktion der WindowsAPI. Im Fehlerfall gibt diese NULL zurück, und der Fehler kann über die Funktion GetLastError() abgerufen werden. Die Fehlerbehanldung wird somit komplett an den Aufrufenden übergeben. Werden die Rückgabewerte nicht verarbeitet, so passiert nichts und das Programm fährt fort. Der Fehler wird somit verschwiegen und es treten merkwürdige Ergebnisse auf (z. B. wie in diesem Fall: Ein Fenster wird nicht angezeigt).
Beispiele für Secrets: Frühere PHP Versionen, C/C++ und Windows API

Anwendungsbereiche
Als Faustregel sollte man Exceptions nur verwenden wenn man Methoden ausserhalb des Programms z. B. einer externen Bibliothek aufruft.
Es geht hierbei nicht um “fremden” Quellcode. Es ist viel mehr eine Art Verantwortungsbereich. In einem Industrieunternehmen teilt der Abteilungsleiter dem anderen auch nicht mit, dass sich Herr Christian W. aus Abschnitt B, Halle 1 gestern Vormittag den Fuß verstaucht hat weil ihm eine Kiste auf den Fuß gefallen ist (ausser vielleicht am Mittagstisch). Regulär ist es aber für die Produktion unerheblich. Interessant wird dagegen wenn der genannte Herr nicht mehr arbeiten kann und die Produktion dadurch zum erliegen kommt. Und genau hier fliegt die Exception. Ein Modul hat die Verantwortung richtig zu funktioneren. Kann es das nicht, sollte dies über eine Exception dem Aufrufer mitgeteilt werden. Alle internen “Problemchen” des Moduls, welche die Funktionalität nicht beeinträchtigen interessieren den Aufrufer nicht. Folglich sollten diese “Problemchen” über Asserts behandelt werden.

Secrets, (k)eine Alternative
Eine “Alternative” zu dem oben genannten Anwendungsbereich sind die Secrets. Ich empfehle diese aber nur zu verwenden, sofern die angewendete Programmiersprache kein Exception-Modell unterstützt. Eine aufgerufene Methode aus einer fremden Bibliothek könnte beispielsweise einen Boolean zurückliefern; true wenn alles gut lief; false wenn ein Fehler auftrat. Bis auf den Performancegewinn ergeben sich mit diesem Verfahren nur Nachteile:

  • Jede aufrufende Methode im Callstack muss jeden Rückgabewert der von ihr aufgerufenen Methode verarbeiten können bzw. an die obere Methode weiterleiten. Bei Exceptions funktioniert das automatisch, in dem die Ausnahme an die obere Methode weitergereicht wird.
  • Fängt eine Methode den Rückgabewert nicht ab bzw. verarbeitet diesen, wird der Fehler verschluckt. Das fehlerhafte Verhalten wirkt sich aber dennoch auf die Anwendung aus. Durch diese Problematik können die merkwürdigsten Verhaltensweisen des Programms auftreten ohne das eine genaue Struktur des Fehlers ensteht. Das erschwert die Problemsuche erheblich.
  • Exception Handling wird von den meisten Entwicklungsumgebungen unterstützt und vereinfacht das Debugging erheblich.

Fazit
Prinzipiell ist es wichtig, wie mit allen Werkzeugen zweckmässig und Verantwortungsvoll umzugehen. Exceptions sind mächtig doch auch mit Vorsicht zu genießen. Ein gesunder Mix aus Assertions, welche im eigenen Scope verwendet werden, und Exceptions welche Scopeübergreifend arbeiten sollte wohl das Beste aus den Befehlen rausholen. Secrets sollte man aufgrund der fehlenden Code-Transparenz komplett meiden.

 
Kommentare deaktiviert

Posted in Know-How

 

Wie man HTTP Variablen sicherer macht

02 Jan

Wenn ich im Internet surfe sehe ich oft Seiten, die große Sicherheitslücken in der Kommunikation zwischen Server und Client aufweisen.

Der normale Kommunikationsweg zwischen Webserver und Client erfolgt über HTTP-Variablen. Das heißt, der Wert einer Variable über den die Folgeseite verfügen soll, wird über die URL (GET) oder im Header (POST) mitgeschickt. Hier ein Beispiel für den Aufruf einer Webseite mit einer GET-Variable: news.php?id=4. Die Variable “id” hat den Wert 4. Ich habe den Namen id nicht ohne Grund gewählt. Datenkbanken identifizieren Datensätze häufig über eine numerisch generierte Zahl, welche fortlaufend und damit eindeutig ist.
Nehmen wir an, die Seite news.php verfügt nicht über eine ausreichende Sicherung der GET-Variablen und man würde den Wert der ID von Hand auf 2 oder 3 ändern, würde die Webseite die Inhalte der Artikel mit der ID 2 oder 3 darstellen. Denken Sie jetzt mal an ein Forum oder eine Community, bei der dieser kleine Trick dazu führen kann, das Dritte an Informationen von Benutzern kommen welche ihnen sonst unzugänglich geblieben wären.

Modifizierbare GET- und POST-Variablen einer HTTP-Anfrage können ebenfalls für eine SQL Injection genutzt werden. Hacker ändern in diesem Fall den Wert nicht direkt, sondern gehen in dem Fall davon aus, dass dieser ein Teil eines SQL Befehls darstellt. Die URL würde wie folgt aussehen: “site.php?id=3; DROP DATABASE mydatabase”. Boom! Und die Daten sind weg.

Hier einige Tipps, wie man derartigen Problemen aus dem Weg geht:

  1. Neuere Datenbanksysteme unterstützten sogenannte GUIDs (global unique identifiers). Es sind 128 Bit Schlüssel und wesentlich seltener als die numerischen IDs. “Seltener” heißt, wenn 2 oder mehr Systeme eine ID zur selben Zeit erzeugen, liegt nur sehr eine geringe Chance vor, dass unter den erzeugten IDs eine Doppelte existiert. Der Vorteil hierbei liegt darin, das eine generierte ID nicht inkrementell fortlaufend ist, sondern sich aus anderen Faktoren zusammensetzt (MAC-Adressen, Datum etc.). Der Nachteil ist, dass der GUID wesentlich mehr Speicherplatz in Anspruch nimmt.
  2. Der Datenbank Benutzer welcher, von der Webseite verwendet wird, sollte nur über eingeschränkte Berechtigungen verfügen. Werden von der Webseite z. B. nur Informationen und Inhalte ausgegeben, so benötigt der Datenbankbenutzer nur Leseberechtigungen.
  3. Validieren sie HTTP Variablen, bevor sie diese benutzen. Das prüfen von Strings oder ints bläht die Codegröße auf, daher ist eine Prüfsumme besser geeignet. Ein großteil der Serverseitigen Programmiersprachen unterstüzt Prüfsummenfunktionen wie z. B. MD5. Dies funktioniert wie folgt: Als erstes wird ein Schlüsselwort erstellt z. B. “MM3banana13″. Nun verknüpft man alle Variablen welche über diese Sicherung verfügen sollen zu einem String und fügt das Schlüsselwort am Anfang oder am Ende an. Die Reihenfolge ist wichtig, da die Zielseite den String auf die selbe Weise zusammensetzen wird. Mit diesem String wird ein MD5 Hash erzeugt der ebenfalls als HTTP-Variable übergeben wird. Die Empfängerseite setzt, wie schon eben beschrieben, den String auf dieselbe Weise zusammen und erzeugt einen MD5 Hash. Sie überprüft den erzeugten Hash und den empfangenen Hash. Wenn die Daten geändert wird unterscheiden sich die Prüfsummen. Man kann dieses Verfahren noch sicherer machen in dem man das Schlüsselwort in bestimmten Zeitabschnitten automatisiert ändert.
  4. Benutzen sie SSL-Verbindungen für sensible Daten. Dies macht die Kommunikation zwischen Server und Client wesentlich sicherer und für Dritte unzugänglich.

Sicherheit ist kein Hexenwerk. Mit ein paar Handgriffen kann man seine Webseite sicherer machen. Der Grundgedanke für Softwaresicherheit sollte lauten:

Man sollte immer Daten erwarten, welche man nicht erwartet.

 
Kommentare deaktiviert

Posted in Know-How