Natural Selection 2 wird plattformunabhängig

 Ein MacBook von Apple.

Um überall die gleiche Entwicklungsumgebung für Natural Selection 2 zu haben hat Engine- und Tool-Entwickler Max McGuire sich entschieden einen neuen Laptop zu kaufen. Den letzten holte er sich, als er mit der Arbeit an NS2 begonnen hat. Damals hat er das billigste System genommen, dass es finden konnte und sagt heute selbst

Ich habe oft gemerkt, dass das alte Stichwort „Man bekommt, was man bezahlt.“ wahr ist und bei meinen Laptop war das definitiv der Fall.

Und so kam es, dass Max das gute Stück nach nur einem Jahr schon nicht mehr gebrauchen konnte. Auch nicht nach mehreren Wiederbelebungsversuchen mit neuer Hardware.

Dieser Beitrag ist sehr technisch und beschäftigt sich viel mit den Problemen beim Portieren einer Anwendung von Windows nach OS X. Wer einfach nur wissen möchte wann NS2 für OS X und Linux rauskommt sollte direkt zum letzten Absatz springen.

Dies ist ihm auch nicht zum ersten Mal passiert und so entschied er sich bei seinem neuen Laptop auf Qualität zu achten. Auch wenn es ihn zunächst mehr kosten würde. Rechnet man die Kosten und den Zeitverlust eines Hardwarefehlers, vielleicht sogar eines Datenverlusts, dagegen lohnt sich diese Ausgabe aber. Sein neues Macbook Pro mit mattem 17″ Display ist letzten Monat angekommen und er hat via Bootcamp Vista installier um seine für Windows ausgelegten Entwicklertools nutzen zu können.

Plattformunabhängigkeit

Eines der Ziele von Unknown Worlds ist es Natural Selection 2 und alle Begleittools vonhausasu und Windows, OS X und Linux lauffähig zu machen. Daher achtet besonders Max bei jeder Zeile Code darauf die Portabilität zu berücksichtigen. Dies war auch einer der Grunde alle Tools mit wxWidgets, einer Bibliothek für die Entwicklung plattformunabhängiger Tools und GUIs, zu bauen und plattformspezifischen Code, wie zum Beispiel Direct3D, abstract zu lassen um ihn einfach ersetzen zu könnnen.

OS X

Da Max jetzt einen neuen Computer mit OS X hatte, war es natürlich an der Zeit das Konzept der Plattformunabhängigkeit auch zu testen. Ein komplette Portierung des Spiels ist zum aktuellen Entwicklungsstand natürlich nicht möglich aber Max wollte unbeding die Grundzüge des Portierungsprozesses verstehen um sich schon Gedanken über die Organisierung von Dateien mit plattformspezifischem Code oder Zicken von wxWidgets zu machen.

Also hat Max sich vorgenommen an einem Wochenende die Builder Anwendung zu portieren. Der Builder ist dafür verantwortlich Dateien aus verschiedensten Programmen automatisch in Formate zu konvertieren, die von der Engine gelesen werden können. Es ist ferner das Unknown Worlds Tool welches auf die wenigsten Bibliotheken zurückgreift (nur wxWidgets) und nur sehr wenig windowsspezifischen Code enthält, welcher auch noch in einer einzigen Klasse gekapselt ist. Außerdem hat Max bei der Programmierung des Builders besonders viel Wert auf Plattformunabhängigkeit gelegt. Mit Recht hat er sich also darauf gefreut die Frücht seiner Arbeit zu ernten.

 wxWidgets unter OS X

Insgesamt war es sehr einfach den Builder unter OS X zum Laufen zu bekommen, auch wenn Max das komplette Wochenende dran saß. Der erste Schritt bestand darin, wxWidgets für den Mac zu kompilieren, was dank des mitgelieferten Konfigurationsscripts nicht schwierig war. Anschließend mussten ein eigenes Make-File für den Builder angelegt werden. Etwas, das Max seit dem College nicht mehr getan hatte. Anstatt diverse Helfer wie icompile, bakefiles, automake oder XCode zu verwenden hat er sich die Zeit genommen das ganze von Hand zu machen.

Als das Make-File lief mussten mehrere C++ Code Stellen gefixt werden, die nicht zum g++ Compiler portierbar waren. Während dieser Arbeit hat Max auch Fehler entdeckt, die der Microsoft Compiler nicht gefunden hatte. Diese Probleme waren recht schnell behoben und genau die Art von Inkompatiblität, die Max mit diesem Test entdecken wollte.

Ausführen unter OS X

Der letzte Schritt war  das Erzeugen einer unter OS X ausführbaren Datei. Die meiste Zeit hat Max ein absoluter Programieranfängerfehler gekostet: Er hat versucht nach Erklärungen für die Fehler zu suchen, die der Compiler ausgespuckt hat. Am Ende stand er mit der Fehlermeldung „Undefined symbol _main“ da. Nach einigen zermürbenden Stunden hat Max dann gemerkt, dass er den Code in einen Namespace gepackt hatte. Dann hatte er noch mit einigen Eigenheiten von OS X Anwendungen zu kämpfen aber am Ende lief der Builder.

Einige Funktionen des Builders funktionieren noch nicht vernünftig auf dem Mac aber darum möchte sich Max nicht kümmern. Auch hat er den plattformspezifischen Code (der dafür verantwortlich ist festzustellen, wann eine Datei zuletzt bearbeitet wurde) aber er hat eine gute Möglichkeit gefunden diese Codestücke zu verwalten.

Direct3D

Viele Leute denken, dass Direct3D die  größte Barriere beim Portieren einer Gameengine sei aber in den NS2-Engine steckt eigentlich sehr wenig Direct3D Code. D3D ist nur für 2.500 von 100.000 Zeilen Code der Engine verantwortlich. Das wesentlich größere Problem sind die vielen kleinen Dinge, von denen Max viele mit diesem Test beseitigen konnte.

Natural Selection 2 unter OS X und Linux

Noch ist nicht klar ob man bei Unknown Worlds die Zeit finden wird die OS X und Linux Versionen gleichzeitig mit der Windows Version zu releasen.

Übrigens muss nur die Engine portiert werden. Das Spiel an sich ist komplett in Lua udn bedarf keinerlei Anpassungen.

3 Gedanken zu “Natural Selection 2 wird plattformunabhängig

  1. Zu Stabilität: Ein schlankes Linux (Kernel + benötigte Tools) ist stabil. Ubuntu&Co. verhalten sich da eher wie Windows.

    Zu Sicherheit: Du bist unter Linux nicht parmanent als Administrator eingeloggt. Das bedeutet, dass ein Programm gar keinen gefährlichen Code ausführen kann. Da hat man es bei Windows deutlich einfacher.

  2. Ich würds auch für Linux wünschen.
    Und das mit der Stabilität ist sone Sache. Ich hab schon seit mindestens 2 Jahren Ubuntu als 2tes OS (was nicht heissen soll, dass ich mich besonders auskenne) und auch bei mir ist es ein Paar mal abgeschmiert. Aber ich denke wer ein stabiles Linux will, der kriegt es auch. Wenn man so wie ich Ubuntu nutzt(Ubuntu enthält viele Sachen,die sich noch nicht so richtig bewährt haben) und dazu immer die neuesten Kernel, CompizFusion, etc, etc darf auch nicht viel Stabilität erwarten. Wenn du aber etwas bewährtes nimmst (Debian oder „wasweissich“ :D) und es pflegst, ist es auch stabil. Das mit den Viren ist ne Glaubenssache. An dem Argument „weil Linux nicht so beliebt ist“ ist was dran aber es gibt auch etliche Gegenargumente. U.a ist man ja gerade deswegen auch sicherer. Das größte Problem für den Gamer sind noch nichtmal die Treiber – die würden sich „von selbst“ verbessern, wenn mehr Spiele verfügbar wären und das ist das Hauptproblem, imo.

  3. Frohes…restliches…Fest und danke fürs übersetzen, hut ab vor so viel Text.
    Ich fänds super wenns für Linux kommt, zwar ist linux trotz vieler falschen Meinungen nicht so stabil, aber umsonst.
    Ich habs selbst getestet und es ist oft einfach so abgestürzt, verstehe die ganzen kommentare wie „linux ist weniger anfällig für abstürtze“ oder „linux ist sicherer gegen viren“ von wegen, es gibt nur nicht so viele.

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>