seeseekey.net - Invictus Deus Ex Machina

Mit den in den letzten Jahren zunehmenden Fähigkeiten der Browser, tauchten vermehrt Engines auf, mit denen einfach 2D und 3D Anwendungen und Spiele programmiert werden konnten. Eine dieser Engine ist dabei Babylon.js. Dabei handelt es sich um eine auf HTML5 und WebGL basierende 3D-Engine, welche in Javascript implementiert ist. Sie enthält unter anderem einen kompletten Szenengraph mit Entitäten wie Licht, Kameras, Materialien und Meshes. Daneben deckt die Funktionalität der Engine Themengebiete wie Kollision, Physik, Animation, Partikel und vieles mehr ab.

Ein einfaches Beispiel

Ausprobiert werden kann die Engine auf dem Babylon.js Playground. Lizenziert ist Babylon.js unter der Apache License in der Version 2.0 und damit freie Software. Der dazugehörige Quelltext ist auf GitHub zu finden. Daneben kann die Engine auch über die offizielle Seite unter babylonjs.com bezogen werden.

In meinem gestrigen Artikel ging es um eine Command & Conquer Version für den Browser. Neben dem Original gibt es eine Reihe von Projekte welche sich mehr oder weniger mit Command & Conquer beschäftigen. Eines dieser Projekte ist OpenRA. Dabei handelt es sich um eine Engine welche das Feeling und die Spielmechanik von Command & Conquer nachbaut. So kann die Engine unter anderem die Spieldaten der alten Command & Conquer Teile nutzen. Angeboten werden dabei aber im Moment nur einzelne Missionen und keine zusammenhängende Kampagne. Neben dem Singleplayermodus gibt es auch einen Multiplayermodus.

Der Titelschirm von OpenRA

OpenRA ist unter der GPLv3 lizenziert und damit freie Software. Der Quelltext ist auf GitHub zu finden. Geschrieben ist das ganze in C#. Damit ist ist OpenRA unter Linux, Mac OS X und Windows lauffähig. Die offizielle Seite des Projektes ist unter openra.net zu finden.

Seitdem WebGL in unsere Browser eingezogen sind, gibt es auch die entsprechenden Techdemos für diese Technologie. Ein sehr schönes Techdemo ist dabei Pearl Boy welches auf der entsprechenden Webseite zu finden ist.

Das Boot auf dem Wasser

Man befindet sich mit einem Boot auf dem Wasser und steuert einen Jungen in diesem Boot. Mit Hilfe der WASD-Tasten kann man sich meditativ über das Wasser bewegen oder alternativ dieses verlassen und schwimmen. Technisch baut das ganze auf der Goo Engine auf, bei welcher es sich um eine Grafikengine für WebGL und HTML 5 handelt.

Die Unity Engine hat in den letzten Jahren enorm an Beliebtheit gewonnen. Das dürfte nicht zu letzte an den kostenlosen Grundversionen gelegen haben. Daneben gibt es auch die Pro Variante welche mit knapp 1200 € zu Buche schlägt.

Die Unity Subskriptionsseite

Wer sich das auf Schlag nicht leisten kann, hat nun die Möglichkeit Unity Pro für $ 75 respektive 57 € im Monat zu abonnieren. Auch die Pro-Versionen der Plugins für iOS, Android und Co. können dabei auch abonniert werden. Das ganze schlägt dann mit zusätzlichen $ 75 pro Plugin und Monat zu Buche. Zu finden ist die neue Subskriptionsseite unter https://store.unity3d.com/products/subscription. Die Mindestlaufzeit für ein Abo beträgt dabei 12 Monate.

Bei melonJS handelt es sich um eine Javascript Engine zur Spieleentwicklung im Browser mittels HTML5. Möchte man dort ein Level laden, so geschieht das in Form einer TMX Datei. In melonJS gibt es dabei zwei Methoden zum laden der entsprechenden Daten. Diese sind „me.loader.preload“ und „me.loader.load“. Alle Beispiele welche man im Netz so findet nutzen dabei immer die „preload“ Methode:

var g_resources= [
{ name: "desert1",          type: "image", src: "desert1.png" },
{ name: "desert",           type: "tmx",   src: "desert.tmx" },
{ name: "player_male_base", type: "image", src: "player_male_base.png" },
{ name: "fog",              type: "image", src: "fog.png" }
];

...

me.loader.preload(g_resources);

Das Problem ist das man bei größeren Spielen mit ein paar hundert MiB Spieldaten, das ganze schlecht komplett in den Speicher laden kann. Hierfür gibt es die „load“ Methode. Allerdings enthält diese einige Fehler welche das ganze erschweren. Die „preload“ Methode trägt jede TMX Datei in das Array „levels“ im „me.levelDirector“ ein. Bei der „load“ Methode passiert genau dies nicht. Deshalb muss man hier anders vorgehen (bis der Fehler behoben ist). Ein Minimalbeispiel zum laden eines Levels sieht damit so aus:

<!DOCTYPE html>
<html>
  <head>
    <title>melonJS minimal sample</title>
    <meta charset="utf-8" />
  </head>
  <body>
    <script type="text/javascript" src="melonJS.js"></script>

    <script type="text/javascript">
      var jsApp = {
        start: function() {
          if (!me.video.init('jsapp', 640, 480, false, '1', false))
          {
            alert("Sorry but your browser does not support html 5 canvas.");
            return;
          }

          me.loader.onload = this.loaded.bind(this);

          //lade manuell
          me.loader.load({name: "desert1",  type:"image",  src: "desert1.png"}, this.onload);
          me.loader.load({name: "desert",  type:"tmx",  src: "desert.tmx"}, this.onload);

          //zeige Ladebildschirm
          me.state.change(me.state.LOADING);
        },

        onload: function(data) {
          me.levelDirector.addTMXLevel("desert"); //Bugfix
          me.levelDirector.loadLevel("desert");
        },

        loaded: function() {
          me.state.set(me.state.PLAY, new PlayScreen());
          me.state.change(me.state.PLAY);
        }
      }

      var PlayScreen = me.ScreenObject.extend({
      });

      //starte wenn der Browser bereit ist
      window.onReady(function() {
        jsApp.start();
      });
    </script>
  </body>
</html>

Damit lädt man ein Level dynamisch, ohne auf die „preload“ Methode angewiesen zu sein. Möglich wird dies durch den kleinen Bugfix in der „onload“ Methode:

me.levelDirector.addTMXLevel("desert"); //Bugfix

Dieser sorgt dafür das der levelDirector über die entsprechende TMX Datei informiert wird und somit die Datei beim laden des Levels auch findet.

Für Unity (die Spielengine, nicht die Ubuntuoberfläche) gibt es eine Menge Dokumentation angefangen bei Tutorien bis zu Büchern (wobei deutsche Bücher an dieser Stelle Mangelware sind). Eines der ausführlicheren Tutorien ist „Hack & Slash RPG Tutorial“ welches mittlerweile aus 285 Teilen besteht. Zu finden ist dieses unter http://www.burgzergarcade.com/hack-slash-rpg-unity3d-game-engine-tutorial. In dem Tutorial wird dabei Stück für Stück ein Rollenspiel in Unity aufgebaut und stetig verbessert. Das ganze wird dabei in Form von Videos präsentiert, was bestimmte Erklärungen wesentlich vereinfacht.

Weitere Informationen gibt es unter:
http://de.wikipedia.org/wiki/Unity_3D

Gestern versuchte ich Fallout 3 auf einem Mac OS X und anschließend auf einem Linux System zu installieren. Das ganze sollte mittels Wine zum laufen gebracht werden, was grundsätzlich kein Problem darstellen sollte. Allerdings stellte sich das dank DRM aller SecuROM und DVD Überprüfung als ein Ding der Unmöglichkeit heraus, vor allem dann wenn man kein CD/DVD-ROM Laufwerk im entsprechenden Rechner hat. Nun gut wer nicht will, der hat schon.

Der Übertäter in Form von Fallout 3

Wenn Fallout schon nicht funktioniert, so kann man sich ja immerhin noch am geistigen Vater des Spieles bedienen: Wasteland. Allerdings muss man sich nicht mit dem Original von 1987 begnügen sondern kann ab Oktober 2013 mit deren Nachfolger Wasteland 2 vorlieb nehmen. Das ganze würde über Kickstarter mit einer Summe von $ 2.933.252 finanziert.

Das Spiel wird es in einer Linux, Windows und Mac OS X Version geben und auch als DRM freie Version angeboten. Neben der englischen Originalsprache soll das Spiel mindestens in die Sprachen Französisch, Italienisch, Deutsch und Spanisch übersetzt werden.

Technisch wird das ganze auf der Unity Engine aufsetzen, welche dafür um eine Linux Unterstützung erweitert wird. Den entsprechenden Entwicklerblog findet man unter http://wasteland.inxile-entertainment.com/blog/.

Weitere Informationen gibt es unter:
http://de.wikipedia.org/wiki/Wasteland

Bei der Spieleentwicklung auf iOS Geräten ist es von Vorteil eine Engine zu benutzen um sich einige „lästige“ Arbeit vom Hals zu schaffen. Unter http://maniacdev.com/2009/08/the-open-source-iphone-game-engine-comparison/ gibt es dazu eine schöne Liste von Open Source Engines für iOS. Dabei wurden nur Engines aufgelistet, welche auch darauf basierende Software im AppStore haben. Mir persönlich gefällt das Sparrow Framework ganz gut welches unter http://gamua.com/sparrow/ zu finden ist und sich für 2D Spiele eignet.

Rollenspiele in Javascript sind an sich eine schöne Sache. Man muss keine zusätzliche Software installieren und das Spiel als solches ist auch immer aktuell. Gezeigt hat dies neulich Mozilla mit dem MMORPG BrowserQuest welches komplett im Browser läuft. Möchte man RPGs selber schreiben so sollte man sich mal die Bibliothek RPG JS anschauen, welche unter http://rpgjs.com/ zu finden ist. Die Engine ist dabei unter MIT und GPL dual lizenziert.

Weitere Informationen gibt es unter:
http://www.guido-muehlwitz.de/2012/02/rollenspiele-in-html5/
http://www.golem.de/news/browserquest-mozilla-startet-browser-mmog-in-html5-1203–90802.html

Den Firefox 4 gibt es ja standardmäßig nicht für Ubuntu 10.10. Da aber die Javaskriptengine eine echte Beschleunigung erfahren hat, welche ich auch ausnutzen wollte musste ein PPA her. Dieses PPA ist ppa:mozillateam/firefox-stable welches auch auf der Konsole mittels

sudo add-apt-repository ppa:mozillateam/firefox-stable
sudo apt-get update && sudo apt-get dist-upgrade

hinzugefügt werden kann. Danach sollte man sich noch das deutsche Sprachpaket installieren, da die Firefoxversion sonst Englisch ist. Zu finden ist dieses Paket unter http://releases.mozilla.org/pub/mozilla.org/firefox/releases/4.0/linux-x86_64/xpi/de.xpi. Und schon ist Firefox 4 da :)

Weitere Informationen gibt es unter:
http://linuxundich.de/de/software/firefox-4–0-in-ubuntu-mozilla-team-ppa-installieren/