Archiv für die Kategorie ‘Entwicklung’

Kleiner Entwicklungsrückblick

Montag, 15. November 2010

Manchmal finde ich mich selbst etwas frustriert, wenn ich darüber nachdenke, wie lange ich bereits an dem Projekt Cyber E-Razor rockt die Galaxis arbeite und wie lange ich vermutlich noch daran arbeiten werde. Nämlich sehr lange. Das liegt vor allem an zwei Gründen, da mache ich mir nix vor: Zum Einen ist das halt einfach extrem aufwändig, so ein Projekt umzusetzen — und das auch noch alleine. “Normalerweise” entwickeln hunderte von Menschen über viele Jahre an einem Spiel und bringen einen Arbeitsaufwand ein, den ich alleine in mein Projekt stecke. Das führt uns zu Punkt zwei, denn zum Anderen ist es so, dass ich nicht nur das eigentliche Spiel Cyber E-Razor rockt die Galaxis erfinde und erbaue, sondern alles auf dem Weg dorthin selbst programmiere. In den Augen einiger Leute dürfte das relativ dämlich wirken. Aber bei diesem Hobbyprojekt geht es — wie schon an der einen oder anderen Stelle angesprochen — ja gar nicht (nur) um das fertige Produkt, was am Ende (hoffentlich) dabei rauskommt. Sondern bei diesem Hobbyprojekt ist der Weg das eigentliche Ziel. Und wenn man sich diesen Weg mal vor Augen hält, ist der tatsächlich gar nicht so unproduktiv. Im Gegenteil: Eigentlich habe ich im Rahmen der Entwicklung von Cyber E-Razor rockt die Galaxis und der zu Grunde liegenden “Engine” viele kleine bis mittelgroße oder sogar große (Teil-)Projekte erarbeitet und teilweise bereits fertig abgeschlossen. Mit Frust mischt sich dann vielleicht doch ein wenig Stolz, wenn ich mir die folgende Liste anschaue:

  • Eine umfangreiche Mathebibliothek für die Rechnung mit und Transformation von Vektoren und Matrizen;
  • Eine eigene Programmiersprache inklusive Schnittstelle zu C++;
  • Eine Physik-Engine für die Interaktion von Starrkörpern;
  • Ein DirectX-Wrapper-Framework mit Ressourcenverwaltung und Zusatzfunktionalität;
  • Ein XML-System zum Lesen, Schreiben, Verarbeiten und Generieren von XML-Bäumen;
  • Ein umfangreiches konfigurierbares GUI-System.

Im Moment bin ich noch auf der Suche nach einem “neuen” Werkzeug zum Zählen der Code-Zeilen etc. Denn das vorherige Visual-Studio-Addin kann ich leider bis auf Weiteres nicht mehr benutzen. Es müssten mittlerweile ca. 150.000 Zeilen (gesamt) sein. Bis bald.

Bald geht es endlich mit dem World-Editor weiter…

Freitag, 24. September 2010

So, Freunde! Es ist zwar wahr, dass hier nicht gerade viel passiert und dies leider auch ein wenig die tatsächliche Entwicklung widerspiegelt, die im Hintergrund stattfindet. Jedoch bin ich nicht ganz untätig. Das geplante und bereits schon einmal angesprochene XML-System ist fertig und bereits integriert: GUI-Elemente müssen jetzt nicht immer zwangsläufig im eigentlichen Code programmiert werden, sondern lassen sich nun über eine Spezifikation in XML definieren. Lediglich für die Logik muss dann noch ausführbarer Programmcode her, der aber gerne alternativ zu C++ auch in Ernie-Script verfasst werden kann.

Ansonsten beschäftige ich mich gerade mit einer kleinen Zusatzkomponente, die es unterstützt, mehrere kleinere Grafikdateien zu laden und diese möglichst “platzsparend angeordnet” in eine große Textur zu packen. Den Grund hierfür erkläre ich euch natürlich: Fakt ist, dass ein ständiger Wechsel des “States” der Grafikkarte enormen negativen Einfluss auf die Performance nimmt. Das bedeutet, je seltener der Zustand der Grafikkarte geändert wird — z.B. durch das Wechseln der aktuellen Textur oder Setzen von Shader-Optionen —, desto schneller läuft das gesamte Spiel. Also bietet es sich an, häufig verwendete Pixelgrafiken gebündelt in eine Textur bzw. ein paar wenige Texturen zu packen, weil somit die aktuell gesetzte Textur nicht unbedingt gewechelt werden muss, wenn verschiedene Grafiken dargestellt werden sollen. Gut, gar kein Problem: Ich nehme mir ein Bildbearbeitungsprogramm und klatsche die Grafiken einfach neben- und untereinander in diese Textur in Form einer größeren Pixelgrafik. Blöd wird es erst, wenn plötzlich unvorhergesehen viele neue Grafiken hinzukommen. Jedesmal muss die Textur manuell bearbeitet oder vielleicht sogar eine weitere Textur angelegt werden. Das muss ja nicht nur über ein beliebiges Bildbearbeitungsprogramm mühselig aktuell gehalten werden, sondern entsprechende Texturen und die Koordinaten der einzelnen Bilderchen innerhalb der Texturen müssen im Programmcode gepflegt und verwaltet werden. Der Trick ist also, dies alles zu automatisieren.

Insbesondere für den World-Editor, der ja seit ca. einem Jahr die eigentliche Hauptbaustelle darstellt, werden viele kleine Bilderchen benötigt, die die verschiedensten Bearbeitungs- und Einstellungsmöglichkeiten repräsentieren — vergleichbar mit den Toolbars und Shortcut-Leisten üblicher Computerprogramme, wie sie wohl so gut wie jeder kennt. Wenn es jetzt bald losgeht, dass ich hier zack-auf-zack neue Features dem World-Editor hinzufügen werde, dann muss ich mich so nicht mehr um eine geeignete Organisation der kleinen Grafiken kümmern. Das passiert alles automatisch. Die Grafiken bleiben dann sogar in ihren Originaldateien erhalten und sind leicht austauschbar und vor allem erweiterbar.

Hierfür muss ich jetzt noch ein paar Zeilen Code schreiben. Ganz trivial ist die Lösung des Problems übrigens nicht. Das Stichwort hierzu ist “Bin-Packing” bzw. “2D-Bin-Packing”, wofür es eine überschaubare Anzahl an ganz vernünftigen Ansätzen, aber leider keine “Killer-Lösung” gibt. Das Problem ist nämlich NP-hart und selbst die Branchen, in denen die Kohle steckt, haben mit dem Finden einer jeweils geeigneten Lösung zu kämpfen — z.B. um ein möglichst optimales Design eines Mikrochips zu realisieren oder einen LKW möglichst “geeignet” zu beladen, wofür jeweils Bin-Packing-Algorithmen angewendet werden. Ich bediene mich jedoch einer relativ einfachen Variante des 2D-Bin-Packings. Entsprechende Funktionalität kann ich ja bei Bedarf später noch optimieren.

TIGHT GANG!!

Aktueller Status

Montag, 01. März 2010

Ja, es ist schlimm, es ist schlimm! Es ist sehr schlimm! Aber ich komme im Moment einfach nur sehr selten dazu, überhaupt am Projekt weiterzuarbeiten. Und das obwohl ich eigentlich gehofft hatte, die Wintermonate verstärkt hierfür nutzen zu können. Schade. Bevor ich am World-Editor weiterbastle, muss ich noch das GUI-System ein wenig aufpolieren. Ansonsten würde ich mich tot programmieren, wenn es um den Bau der einzelnen Fenster für die verschiedenen Einstellungen etc. geht. Hierfür habe ich nun einen kleinen Entwicklungsschritt zwischengeschoben: Ich erstelle gerade ein kleines System zur Behandlung von XML-Dateien bzw. von XML-Bäumen generell. Diese sollen dann nämlich der Spezifikation von GUI-Komponenten dienen, was eine enorme Erleichterung bei der Verwaltung dieser bedeuten dürfte. Denn der Programmierer (ich) muss sich dann nicht mehr um die Speicherverwaltung der Objekte, Verschachtelung verschiedener GUI-Elemente, korrekte Positionierung und so weiter kümmern. Das steht dann einfach nur alles in einer übersichtlichen XML-Datei, fertig. Die konkrete Logik hinter den GUI-Elementen (Buttons, Drop-Down-Menüs, etc.) muss dann natürlich noch programmiert werden, das ist klar. Bis die Tage.

Projektstatistik 11/2009

Montag, 30. November 2009

So, auch diesen Monat gibt es wieder eine Projektstatistik, schließlich tut sich im Moment ja wieder einiges, obwohl ich nicht die allermeiste Zeit habe. Aber da ich ja nun angefangen bin Spiel-spezifischere Komponenten zu entwickeln, bin ich im Moment sehr motiviert, so dass ich auch zwischendurch mal einfach ein paar Zeilen code. So sind im Laufe des Novembers ca. 6.000 Zeilen hinzugekommen (knapp 2.000 Zeilen reiner Code). Aber seht selbst. Hier ist die aktuelle Tabelle:

Zeilen gesamt Nur Code Nur Kommentare Code mit Kommentaren Leerzeilen Nicht-Leerzeilen
132.662 56.419 41.473 3.866 30.904 101.758
100 % 43 % 31 % 3 % 23 % 77 %

(Zur vorigen Tabelle geht es hier.)

Dann habe ich da noch eine erfreuliche Nachricht für euch: Ich wurde schon das eine oder andere Mal gefragt, ob man mal einen Blick auf den Sourcecode werfen dürfe oder auch, ob es sich um ein Open-Source-Projekt handelt. Tja, dazu kann ich bisher ehrlich gesagt selber noch nicht allzu viel sagen, weil ich noch gar nicht weiß, wohin das Projekt noch führt und wie es sich weiterentwickelt. Ausführbaren Code veröffentliche ich also noch nicht, aber ich habe nun eine Dokumentation generieren lassen unter Zuhilfenahme des wirklich tollen Tools Doxygen, wodurch ein sehr guter Überblick über die gesamte Engine und die bisher fertigen bzw. angefangenen Teile des eigentlichen Spiels gegeben wird und die eine Art Dokumentation der API der Engine darstellt. Folgt hierfür einfach diesem Link: Der Code. Viele werden damit wahrscheinlich nix anfangen können, weil es viel zu technisch ist. Aber ich denke, es ist dennoch eine ganz interessante Sache.

Bis die Tage, Freunde.

Projektstatistik 10/2009

Samstag, 31. Oktober 2009

Im September hatte ich leider wieder nicht allzu viel Zeit, daher gab es auch keine entsprechende Projektstatistik. Ich habe lediglich hier und da ein paar Bugs beseitigt, wenn ich mal ne halbe Stunde oder so Zeit hatte.

Aber da ich mich diesen Monat nicht so viel um meine Freundin kümmern musste, hatte ich viel Zeit, mich meinem besonderen Kumpel Cyber zu widmen. Dafür muss ich halt wieder näxten Monat dran glauben. Vielleicht kann ich sie aber mit Schmick und Schmunke abspeisen. ;)

Hier ist die aktuelle Tabelle:

Zeilen gesamt Nur Code Nur Kommentare Code mit Kommentaren Leerzeilen Nicht-Leerzeilen
126.601 54.118 39.421 3.651 29.411 97.190
100 % 43 % 31 % 3 % 23 % 77 %

(Zur vorigen Tabelle geht es hier.)

Hui, da hat sich jetzt doch so einiges getan seit August: Ca. 3.000 Codezeilen sind hinzugekommen. Das ist nicht schlecht, finde ich. Die Debug-Konsole ist fertig und mit dem World-Editor bin ich auch bereits angefangen. Ein aktueller Screenshot der geöffneten Debug-Konsole ist hier zu sehen:

Der World-Editor wird natürlich raffiniert sein und auch so Sachen wie Undo/Redo-Funktionalität unterstützen. So ein System muss volles Rohr ausgeklügelt und von vorne bis hinten durchgeplant sein, sonst fliegt einem alles um die Ohren. Der World-Editor wird also ein sehr großer Brocken, den ich zu bewältigen habe. Hier gehe ich aber Schritt für Schritt vor: Zunächst wird man nur einzelne “Blöcke” platzieren können, auf denen Cyber herumlaufen und -springen können soll. Dann kommen Items (einsammelbare Gegenstände) hinzu. Später auch noch Monster und geskriptete Ereignisse (basierend auf Ernie-Script). Das Ganze muss dann noch mit Grafik hinterlegt werden können, was auch keine einfache Sache sein wird. Puh, aber ich freue mich!

Projektstatistik 08/2009

Montag, 31. August 2009

Es tut mir leid, dass ihr solange nix mehr von mir gehört habt. Aber ich war in den letzten Wochen viel unterwegs, sowohl privat als auch beruflich. Seit Cyber laufen gelernt hat, habe ich mich bisher leider nicht wieder um die Weiterentwicklung kümmern können. Daher gab es im Juli auch keine Projektstatistik, weil sich ohnehin nix getan hat. Das soll sich natürlich jetzt im September wieder ändern, ganz klar.

Hier ist die aktuelle Tabelle, die sich zur vorigen Tabelle nicht nennenswert geändert hat:

Zeilen gesamt Nur Code Nur Kommentare Code mit Kommentaren Leerzeilen Nicht-Leerzeilen
118.334 50.993 36.838 3.132 27.371 90.963
100 % 43 % 31 % 3 % 23 % 77 %

(Zur vorigen Tabelle geht es hier.)

Für September habe ich mir vorgenommen, die bereits angesprochene Debugging-Konsole umzusetzen und bereits mit ein paar Spiel-spezifischeren Features zu beginnen. Dazu gehört vor allem ein Manager zur Verwaltung von Ingame-Objekten. Bis es soweit ist, ziehen wir uns halt nochmal Cyber rein, wie geil er läuft. Hihihihi.

Projektstatistik 06/2009

Dienstag, 30. Juni 2009

Wie ich bereits im vorigen Beitrag erzählt habe, war das Scripting-System hauptsächlicher Gegenstand meiner Entwicklung in den letzten Wochen. Hierfür sind knapp 2.000 Zeilen hinzugekommen (reiner Code). Mehr soll an dieser Stelle auch gar nicht dazu gesagt werden. Hier ist die aktuelle Tabelle:

Zeilen gesamt Nur Code Nur Kommentare Code mit Kommentaren Leerzeilen Nicht-Leerzeilen
116.323 50.157 36.157 3.086 26.923 89.400
100 % 43 % 31 % 3 % 23 % 77 %

(Zur vorigen Tabelle geht es hier.)

Das Scripting-System werde ich noch ein wenig überarbeiten und ein paar Bugs aufspüren, die sich womöglich noch darin versteckt halten. Danach werde ich mich an einem Animationssystem versuchen. Dann sollte es vielleicht wieder etwas interessanter werden. Mit Videos und Screenshots und so. Aber das dürfte noch etwas dauern. Bis dahin gibt es sicherlich noch einen Eintrag mit der dann aktuellen Projektstatistik. Tschau Kakao!

Projektstatistik 05/2009

Sonntag, 31. Mai 2009

Oh Mann, ich bin immer noch nicht dazu gekommen, den zweiten Teil über Shader- und Rendering-System zu verfassen. So ein Mist! Aber es ist nicht so, dass ich diesen Monat nix geschafft hätte. Da gibt es ja jetzt diese T-Shirts, die man online bestellen kann. Das Scripting-System habe ich auch weiterentwickelt und nahezu fertiggestellt. Da könnt ihr euch bald eine kleine Testanwendung herunterladen, bei der man über die Windows-Konsole Skripte ausführen kann. Aber erst will ich dann doch den zweiten Teil über Shader- und Rendering-System veröffentlichen. Mal sehen, wann ich dazu komme. Näxte Woche bin ich ja auch schon wieder nicht da.

Aber es ist schon erstaunlich, wie sich so kleinere Programmiersessions zwischendurch im Monat aufsummieren. Im Mai habe ich trotz Umzug und allgemein wenig Zeit 1.500 Zeilen reinen Code verfasst:

Zeilen gesamt Nur Code Nur Kommentare Code mit Kommentaren Leerzeilen Nicht-Leerzeilen
111.766 48.059 34.860 2.963 25.884 85.882
100 % 43 % 31 % 3 % 23 % 77 %

(Zur vorigen Tabelle geht es hier.)

Die hinzugekommenen Code-Zeilen sind fast ausschließlich in das Scripting-System eingeflossen. Was das Scripting-System bisher noch nicht unterstützt — aber unterstützen wird, wenn es fertig ist —, sind Objekte in Form von Strukturen oder Arrays und selbstdefinierte Funktionen, die ihrerseits wieder Skript-Code enthalten. (“Externe” C++-Funktionen können bereits eingebunden werden.)

Ich brauche übrigens noch einen geilen Namen für die Sprache des Scripting-Systems, in der die Skripte verfasst sind. So sehr viele Gedanken habe ich mir darüber noch nicht gemacht, aber ich dachte vielleicht an “Tamer” oder “Flinsch” — vielleicht auch sowas wie “GoaScript”.

Projektstatistik 04/2009

Donnerstag, 30. April 2009

Puh! Das war was! Leider bin ich im Moment recht busy unterwegs. Zum Beispiel ziehen meine liebe Freundin Anna und ich gerade in eine neue Bude. Sehr geil! Nur leider finde ich da im Moment — wie so oft — nicht genug Zeit, um mich mit wirklich wichtigen Dingen auseinanderzusetzen: Die Weiterentwicklung des Spiels oder halt erstmal der zugrunde liegenden Engine. Daher lässt auch der zweite Teil über Shader- und Rendering-System noch auf sich warten. Aber jetzt gibt es wenigstens schon mal die monatliche Statistik. Der Mai ist mittlerweise ja schon fortgeschritten, was aber die Statistik nicht verfälscht. Denn ich habe ja eh in den vergangenen Tagen nix am Code ändern können.

Zeilen gesamt Nur Code Nur Kommentare Code mit Kommentaren Leerzeilen Nicht-Leerzeilen
108.066 46.503 33.773 2.881 24.909 83.157
100 % 43 % 31 % 3 % 23 % 77 %

(Zur vorigen Tabelle geht es hier.)

Ich hoffe, dass ich spätestens näxte Woche dazu komme den zweiten Teil über Shader- und Rendering-System zu verfassen. Ansonsten bin ich nun seit April dabei das Scripting-System aufzupolieren und fertigzustellen. Da liegt aber noch ein ganz schöner Brocken vor mir. Schubidu.

Projektstatistik 03/2009

Dienstag, 31. März 2009

Ja heftig! Diesen Monat hab ich ja richtig was geschafft! Viel sagen möchte ich da jetzt gar nicht zu, lest euch lieber den ersten Teil über Shader- und Rendering-System durch. Bis demnächst.

Zeilen gesamt Nur Code Nur Kommentare Code mit Kommentaren Leerzeilen Nicht-Leerzeilen
105.514 44.977 33.283 2.869 24.385 81.129
100 % 43 % 32 % 3 % 23 % 77 %

(Zur vorigen Tabelle geht es hier.)