Der letzte Monat in diesem Jahr hat begonnen, Zeit also über den Fortschritt im November zu berichten.

Ich habe viel an den allgemeinen Projektkonfigurationen gearbeitet. Ich habe ein Tool geschrieben, um automatisch alle gemeinsamen Dateien aller Projekte zu aktualisieren. Vorher muss ich immer jedes Projekt manuell updaten, wenn ich beispielsweise eine Abhängigkeit auf einen Stand bringen wollte. Das wird mir jetzt viel Zeit ersparen und vor allem auch dafür sorgen, dass die Projekte nicht mehr auseinander laufen.

clockUtils:

Auf Code-Seite habe ich nur die Projektinfrastruktur aktualisiert, damit sie mit der neuen Konfiguration zusammenpasst. Aber ich habe clockUtils auch in das GitHub-Repository für Vcpkg gebracht. Das ist ein Repository für Visual Studio-Projekte, um einfach an aktuellen Versionen für verschiedenen Open-Source-Bibliotheken zu kommen. Ich hoffe, dass es helfen wird, clockUtils zu verbreiten.

m2etis:

m2etis hat einige nützliche Verbesserungen erhalten. Ich habe einige überflüssige Threads entfernt und alte Threads wiederverwendet. Ich habe die Performance dafür nicht gemessen, aber selbst, wenn es nicht schneller ist als vorher, ist der Code jetzt deutlich besser. Außerdem habe ich gflags durch clock_argParser ersetzt. Das war sehr einfach und jetzt funktioniert alles auf allen unterstützten Plattformen auf die selbe einfache Art.

Ein cooler Nebeneffekt beim Update von m2etis auf die Projektkonfiguration war, dass m2etis jetzt problemlos für Android gebaut werden kann. Ich habe damit noch keine Applikation getestet, aber es kompiliert zumindest problemlos. Das ist ein weiterer Schritt vorwärts, um letztlich die i6engine für Android zu bauen.

Cwizz:

Cwizz' GUI wurde weiter verbessert. Ich habe dazu auf Qt 5.6 aktualisiert. Dadurch kann ich jetzt automatische DPI-Skalierung nutzen. Das behebt die meisten Probleme, die ich unter Android hatte. Es gibt noch ein paar Probleme, aber die sind nicht so groß wie die vorher. Ich hoffe ich kriege alles innerhalb der nächsten Wochen behoben, damit die Open Beta im Frühjahr 2017 beginnen kann.

Elemental War:

Sehr gute Neuigkeiten für Elemental War: Ich habe alle Aufgaben für die Singleplayer-Alpha abgeschlossen und diese vor einer Woche an ein paar Freunde geschickt. Ich habe zwar noch kein Feedback erhalten, aber die Arbeit geht weiter. Ich habe bereits ein paar Optimierungen und weitere Grafiken eingebaut und mit der konzeptuellen Arbeit für die Multiplayer-Modi begonnen. Der Singleplayer war ein erster großer Schritt für mich, der nächste wird die Multiplayer-Alpha. Ich hoffe ich werde damit schnell fertig.

 

Wie üblich gibt es viel mehr kleine Dinge, die im letzten Monat erledigt wurden. Aber ich wollte mich auf die großen Dinge konzentrieren. Der nächste Fortschrittsbericht wird möglicherweise ein Rückblick auf das komplette Jahr 2016. Aber da bin ich noch nicht sicher. Vielleicht schreibe ich auch einfach zwei News dafür.

Datum: 3.12.2016

Weil ich heute die rpm- und deb-Repositories für clockUtils aktualisiert habe, ist es an der Zeit den neuen Release offiziell anzukündigen.

Version 1.1 von clockUtils ist fertig. Sie enthält einige Bugfixes für die meisten Bibliotheken. Zum Beispiel war Socket::receivePacket(std::string&) unter Windows sehr langsam. Jetzt ist es viel schneller. Auch statisches Linken hat nicht funktioniert.

Aber es gibt natürlich auch neue Features. Ich habe die Toolchain verbessert, damit sie Builds mit clang unter Linux und MinGW unter Windows unterstützt. Aber weil die Arbeit mit MinGW nicht so einfach ist, weil es viele verschiedene Distributionen gibt, die sich alle in den unterstützten Features unterscheiden (z.B. Threads), habe ich die Unterstützung dafür für 1.2 erstmal wieder rausgeworfen, bis ich eine bessere Lösung dafür finde.

Der iniParser hat einige neue Möglichkeiten spendiert bekommen, die enthaltenen Daten abzufragen. Es ist jetzt möglich die enthaltenen Sektionen abzufragen und ebenso die darin enthaltenen Einträge. Das ist äußerst hilfreich, um Informationen über Konfigurationsdateien zu erhalten, deren Inhalt man nicht kennt oder die dynamisch gefüllt werden.

In unsere Container-Bibliothek habe ich eine einfache LockFreeQueue eingebaut. Diese ist aktuell laut den UnitTests 2-3x so schnell wie unsere DoubleBufferQueue. Ich denke, dass man da noch mehr rausholen kann, aber es ist meiner Meinung nach schon ein guter Start.

Alle Änderungen können im Changelog nachgelesen werden.

Der Source-Code sowie die Prebuilt-Pakete für Windows können in unserem Download-Bereich und auf GitHub geladen werden.

Datum: 6.11.2016

Oktober ist vorbei und es war ein großartiger Monat.

clockUtils:

clockUtils 1.1 ist bereits fertig, aber ich muss noch die Linux-Pakete bauen und hochladen, bevor der offizielle Release kommt. Aber GitHub ist bereits aktualisiert und auch im Downloadbereich gibt es bereits das Source-Archiv und die Prebuilt-Package für Visual Studio 2013 und 2015, wie gewohnt als 32 und 64 bit Variante.

Die wichtigsten Änderungen sind bessere ini-Parser-Fähigkeiten, um einige Informationen über die enthaltenen Daten abzufragen, bessere Socket-Performance und eine neue LockFreeQueue-Implementierung in unserer Container-Bibliothek. Der komplette Changelog kann auf der Changelog-Seite eingesehen werden.

Bereits veröffentlicht wurde diesen Monat SocketPerformanceChecker 0.9. Ich habe da noch ein paar lokale Änderungen, die noch nicht auf GitHub sind. Das sind alles nur Sachen, um die Toolchain Visual Studio 2015 zu unterstützen. Ich werde das Repository bald aktualisieren, arbeite aber gerade noch an ein paar Verbesserungen.

i6engine:

Für die i6engine habe ich einige Bugs im Zusammenhang mit der GUI behoben, die mir bei der Arbeit an Elemental War aufgefallen sind. Die funktioniert jetzt deutlich besser.

Außerdem habe ich die Arbeit an einem Tool für die i6engine namens TakeControl gestartet. Es wird die Synchronisation von Sprachausgaben deutlich vereinfachen. Aktuell gibt es da nur einen GUI-Prototyp ohne Funktionalität, aber es wird da weiter gehen.

Elemental War:

Die GUI fürs Hauptmenü ist fast komplett fertig und ich habe einige weitere Bugs behoben. Es stehen jetzt nur noch ein paar Bugfixes und einige Tests aus für die interne Singleplayer-Alpha.

Datum: 1.11.2016

Heute habe ich Version 0.9.0 des SocketPerformanceCheckers auf GitHub getagged. Ich habe alle geplanten Features vor ein paar Tagen abgeschlossen und da alle Tests für unser Continous-Integration-Framework, die ich geschrieben habe, für Windows und Linux durchlaufen, denke ich ist es so weit zu releasen.

Die Hauptfeatures sind:

- m²etis-Plugin (es ist zwar keine Socket-Implementierung, aber für uns ist es sehr gut fürs Profiling)

- Qt-Plugins für UDP und TCP

- LineChart für die Präsentation der Ergebnisse

- Möglichkeit, Ergebnisse zu exportieren

Es gab noch mehr Verbesserungen, aber das waren die wichtigsten.

Ein weiterer Release wird kommen, aber dafür gibt es noch keinen Termin. Falls ihr irgendwelches Feedback hab, würden wir das sehr gerne hören.

Datum: 7.10.2016

Wow, ein weiterer Monat ist vorbei, die Zeit vergeht so schnell. Diesen Monat habe ich die Spiele fokussiert. Ich habe auch einige kleine Dinge für die Bibliotheken erledigt, aber da war nichts allzu interessantes dabei. Aber eine wichtige Verbesserung war der Start des Continous-Integration-Tests. Ich habe ein kleines Framework dafür geschrieben, das alle unsere Projekte testen wird. Es gibt bereits einige Jobs für einige der Projekte und hab auch schon einige Fehler gefunden, hauptsächlich in den Toolchains.

Aber jetzt komme ich zu den Projekten.

clockUtils:

Ich hab diesen Monat nicht allzu viel geschafft, aber die gute Nachricht ist, dass ein neuer Release beinahe abgeschlossen ist. Es ist nur noch ein Ticket offen. Ich will eine lock-free Queue in die Container-Bibliothek einbauen. Danach wird der neue Release kommen. Wenn nichts dazwischen kommt wird der Release im September sein. Cwizz benutzt eine 1.1 Revision bereits, weil es die neue Funktionalität des ini Parsers benötigt.

 

Cwizz:

Cwizz hat eine komplette Überarbeitung der Grafik bekommen. Ich habe nicht nur das Layout verbessert, sondern auch den kompletten Style. Es sieht jetzt sehr viel besser aus. Abgesehen davon habe ich auch einige Fehler behoben, die wir während des Testens gefunden haben. Diesen Sonntag wird die nächste Version in der geschlossenen Beta veröffentlicht. Danach gibt es nur noch eine weitere Version bevor die deutsche offene Beta startet. Diese Version ist dann für November angesetzt, also nicht mehr lang bis dahin.

Eine weitere interessante Entwicklung für Cwizz ist die Browser-Version unseres Fragenerstellungstools. Es befindet sich noch in einem frühen Stadium, aber ich hoffe Michael kriegt das bald fertig.

Es tut sich hier also gerade viel.

 

Elemental War:

Auch in Elemental War hat sich viel getan. Ich habe alle Gameplay-Element, die ich für die Singleplayer-Alpha, die ich in den kommenden Monaten starten will, abgeschlossen. Es fehlen jetzt nur noch ein paar Dinge, hauptsächlich Optimierungen und ein wenig Inhalt. Aber grundsätzlich ist der Singleplayer jetzt so gut wie fertig. Nach dem Start der Singleplayer-Alpha wird der nächste große Schritt die Multiplayer-Modi einzubauen. Ich denke also ein Release in 2017 ist möglich.

 

Im Gegensatz zu den letzten News, die sich hauptsächlich mit den Bibliotheken beschäftigt haben, hat sich der Fokus mittlerweile etwas verschoben. Das liegt daran, dass die Bibliotheken mittlerweile ziemlich gut sind. Ich baue fast nur noch die Features ein, die ich für die Spiele brauche. Und die Spiele werden bald kommen.

Datum: 1.9.2016

Hallo mal wieder. Ein weiterer Monat ist vergangen und ich habe wieder zahlreiche Ziele erreicht, auch wenn ich etwas unproduktiv war, vor allem aufgrund der Hitze. Aber nichtsdestotrotz gibt es hier den neuesten Fortschrittsbericht.

clockUtils:

clockUtils 1.1 macht sehr gute Fortschritte. Diesen Monat hab ich MinGW auf Windows zum Laufen gekriegt. Der Trick dabei war die mingw64-Distribution zu verwenden, da diese std::thread unterstützt. Ich musste einige Anpassungen machen, aber nun kompiliert es auch unter Verwendung von MinGW. Abgesehen davon gibt es kaum interessantes zu berichten. Ich habe einige kleinere Tickets abgearbeitet. Dazu gehört z.B. die Möglichkeit Einträge aus ini-Dateien zu entfernen und asserts zum Checken von validen Zuständen im Debugmodus (z.b. für die Unittests).

Da der SocketPerformanceChecker immer noch offiziell zu clockUtils gehört erwähne ich ihn hier. Eventuell werde ich ihn auch auf der Homepage irgendwann mal in ein extra Projekt umziehen. Jedenfalls hat der SPC eine neue Statistik bekommen, die den Durchsatz repräsentiert. Ich dachte das wäre sinnvoller als die aktuellen Dauern, weil man so direkt sieht wie viele Nachrichten bei einer gegebenen Nachrichtengröße pro Sekunden gesendet werden können. Außerdem zeigt der SPC jetzt alle Ergebnisse in einem LineChart an. Sieht meiner Meinung nach schon sehr gut aus. Der Code dafür steht bereits auf GitHub.

i6engine:

i6engine kam diesen Monat etwas zu kurz. Ich habe noch nicht einmal die News für den i6engine 1.0.1 Release geschrieben, obwohl sie bereits seit ein paar Wochen auf GitHub und der Homepage steht. Ich habe während der Arbeit an Elemental War einiges Bugs gefunden und mich daher entschieden, das Update bereitzustellen. Abgesehen davon habe ich einen weiteren Bug behoben, wobei der Splash Screen unter Windows nicht immer das oberste Fenster war. Das ist es jetzt. Die anderen Änderungen waren Sachen wie sich selbst beendende Integrationtests und Lua aus dem Engine-Code entfernen und stattdessen als Abhängigkeit anzulegen.

m2etis:

m2etis baut jetzt wie die meisten anderen Projekte alle seine Abhängigkeiten selbst beim Aufruf von CMake. Aber die größte Verbesserung betrifft die Performance. Obwohl m2etis immer noch nicht so schnell ist, wie ich es gerne hätte, konnte ich die Performance um ca. 25% verbessern. Das ist ganz gut soweit. Das Hauptproblem aktuell ist die langsame Serialisierung. Ich denke ich werde nach einer schnelleren Lösung als boost suchen oder es direkt selber schreiben für clockUtils.

Elemental War:

Hier hab ich sehr viel geschafft. Ich habe alle mir aktuell bekannten Bugs behoben und auch viele andere Tickets abgearbeitet. Diese beinhalten neuen Content wie Monsterfähigkeiten, aber auch neue Features und Optimierungen. Besonders das neue Itemsystem habe ich angefangen. Das ist fast das letzte Feature, das für die Singleplayer-Alpha fehlt, die ich dieses Jahr noch starten will. Aktuell sind noch fünf Feature-Tickets übrig und dazu ein paar Optimierungen, Content und Tests, die ich vor der Alpha noch abschließen will. Ich bin also im Zeitplan.

Eine weitere gute Nachricht: Ein alter Kollege von mir, mit dem ich bereits an den meisten meiner Gothic-2-Modifikationen gearbeitet habe, unterstützt mich jetzt mit Texturen. Er erstellt die Leveltexturen für einige der Settings und auch für neue Turmmodelle. Und für Turmmodelle habe ich jetzt auch einen Kontakt. Also macht endlich auch die graphische Seite Fortschritte.

 

Das waren die interessantesten Neuigkeiten. Ich könnte noch mehr über Cwizz erzählen, aber dafür will ich erst die Homepage erstellen. Aber um ein wenig vorzugreifen: Ich habe eine konkrete Roadmap für die Open Beta der deutschsprachigen Version angesetzt und die wird noch dieses Jahr kommen!

Datum: 1.8.2016

Wow, die erste Hälfte des Jahres ist bereits rum. In dieser Zeit hab ich sehr viele Dinge geschafft und die letzten Fortschritte gibt's in dieser News.

clockUtils:

Du hast es wahrscheinlich schon gesehen: Ich habe diesen Monat clockUtils 1.0.0 veröffentlicht. Das war ein großer Schritt, weil es unser erster Major-Release ist. Ich habe einige neue Features für diesen Release eingebaut wie beispielsweise die Möglichkeit eines DNS-Lookups für unseres Sockets und Verbesserungen unseres Argument-Parsers. The komplette Changelog ist hier.

Seit dem Release habe ich natürlich die Arbeit an Version 1.1 gestartet. Das Kernfeature wird erweiterter Compiler-Support sein. Ich habe bereits eine offizielle Toolchain für Clang unter Linux eingebaut. Das hat zwar schon funktioniert, aber gtest für unsere Unittests wurde trotzdem mit gcc statt mit clang gebaut. Das hat sich jetzt geändert. Aktuell versuche ich unter Windows mit MinGW zu bauen. Das ist aber gar nicht so einfach, weil es nicht nur eine Distribution gibt, sondern viele verschiedene. Und leider unterstützen die meisten kein std::thread. Aber ich habe jetzt eine neue Spur gefunden, also krieg ich das vllt. bald hin. Das andere Feature für den nächsten Release sind Verbesserungen unseres ini-Parsers. Ich habe die Möglichkeit eingebaut alle Sektionen eines Konfig-Files abzufragen und für jede Sektion auch alle Einträge. Ich dachte es könnte nützlich sein, auch wenn ich noch keinen konkreten eigenen Use Case dafür hatte, als ich mit der Implementierung angefangen habe, da alle Einträge immer bekannt sind in unseren Projekten und wir keinen dynamischen Zugriff brauchten. Aber nur ein paar Tage nach der Implementierung habe ich ein Feature gefunden, das sich damit viel leichter implementieren wird, und zwar für Cwizz.

Zusammen mit clockUtils 1.0.0 habe ich meinen SocketPerformanceChecker auf Version 0.8.0 getagged auf GitHub. Ich erwähne das hier, weil ich das Tool as Benchmark- und Vergleichstool für unsere Sockets entwickelt habe. Die Ergebnisse sind auch wirklich gut.

Mittlerweile habe ich noch Support für Qt-Sockets und auch für m2etis eingebaut. m2etis ist zwar keine reine Socket-Implementieurng, daher wird es immer langsamer sein als diese, aber es ist eine sehr gute Möglichkeit m2etis zu profilen und mit Sockets zu vergleichen. Aktuell ist es noch ziemlich langsam, aber ich habe auch noch keine Performance-Optimierungen eingebaut.

 

i6engine:

i6engine 1.0.0 wurde ebenfalls diesen Monat veröffentlicht. Außerdem war das der erste offizielle Release der Engine. Ich will hier nicht ins Detail über den Release gehen, alle nötigen Informationen gibt es hier.

Seit dem Release habe ich nur ein paar kleinere Dinge gemacht wie das Upgraden der Dependencies (clockUtils, m2etis, CEGUI, boost, OpenAL Soft). Weil es auf Twitter auch gewünscht wurde gibt es jetzt ebenfalls eine kleine Galerie mit ein paar Screenshots der Tools, die wir mitliefern. Die kannst du hier finden.

Weil ich während meiner Arbeit an Elemental War wieder einige Bugs gefunden habe werde ich nach diesem Sprint, also Sonntag nächste Woche (10. Juli), ein Update auf Version 1.0.1 veröffentlichen.

 

m2etis:

m2etis 0.5.0 hat noch nicht viele Fortschritte gemacht bisher, aber der wichtige Punkt ist, dass ich die Arbeit daran wieder aufgenommen habe. Ich habe m2etis bereits mit Hilfe meines neues SocketPerformanceCheckers geprofiled und einige Bottlenecks gefunden. Ich habe einige von ihnen bereits behoben und noch viele Ideen, wie ich die Performance verbessern kann. Also mal sehen, was ich noch rausholen kann.

 

Elemental War:

Und natürlich hat auch Elemental War gute Fortschritte erzielt. Ich habe sehr viel Code refactored, um die Code-Qualität zu verbessern. Das hat eine Weile gedauert, aber dafür ist es jetzt sehr viel einfacher neue Features einzubauen, Bugs zu fixen usw. Außerdem habe ich andere Bereiche verbessert wie die Darstellung der Turm- und Gegnerstats und viele neue Features eingebaut.

Datum: 2.7.2016

Heute ist die Zeit gekommen unsere erste Version 1.0 zu veröffentlichen. Für diesen Release hat clockUtils noch einmal einige neue Features spendiert bekommen wie beispielsweise eine neue Container-Bibliothek, die aktuell eine DoubleBufferQueue enthält, die threadsicheren Queue-Zugriff erlaubt. Wir hatten die Implementierung dafür bereits sowohl in der i6engine als auch in m2etis und haben sie jetzt in clockUtils umgezogen, weil es etwas ist, was für mehrere verschiedene Projekte nützlich ist. Andere Änderungen betreffen unseren Argument-Parser und unsere Sockets. Beide Bibliotheken haben neue Features, die die Benutzung verbessern, wie beispielsweise die Markierung von Variablen als "required" oder es zu erlauben, Argumente mehrfach zu setzen. Unsere Sockets unterstützen jetzt z.B. einen DNS-Lookup, den man statt einer IP verwenden kann.

Eine List aller Änderungen findet sich in unserem Changelog.

Das Source-Archiv und die Windows-Pakete für Visual Studio 2013 und 2015 können auf unserer Downloadseite gefunden werden und auch unser GitHub-Repository wurde bereits aktualisiert. Der master-Branch enthält den aktuellen Release. Branch dev-1.0 wird für Bugfixes bestehen bleiben. Der neue Entwicklungsbranch ist dev-1.1.

Release 1.1 wird Support für weitere Compiler bieten. Aktuell geplant sind MinGW für Windows, eine komplette Toolchain für clang für Linux und vielleicht auch für Windows. Falls du irgendwelche anderen Compiler unterstützt sehen willst, lass es uns wissen, wir werden sehen, was wir tun können.

Außerdem habe ich den SocketPerformanceChecker, der zum Vergleich von verschiedenen Socket-Implementierungen gedacht ist, auf Version 0.8.0 getagged. Er kann im entsprechenden GitHub-Repository gefunden werden. Er bietet bereits die grundsätzliche Funktionalität, um verschiedene Socket-Implementierungen zu vergleichen. Zukünftige Updates werden weitere Socket-Implementierungen (z.B. Qt-Sockets und eventuell auch m2etis, was zwar keine Socket-Bibliothek ist, aber Netzwerk generell behandelt) enthalten und wahrscheinlich eine Automatisierung des Starts the SocketPerformanceHelpers, um ihn auf der ausgewählten Maschine direkt zu starten.

Datum: 5.6.2016

Diesen Monat habe ich viele verschiedene Dinge geschafft.

 

clockUtils:

Obwohl der Code für clockUtils 1.0 bereits fertig ist, fehlen aktuell noch ein Logo, ein Icon und ein kleines Performance-Tool. Logo und Icon werde ich morgen bekommen, weil ich die nicht selbst erstellen kann, dafür habe ich begonnen das Performance-Tool zu schreiben. Das grundlegende Framework ist auch bereits fertig und bietet schon sechs verschiedene Socket-Implementierungen, die getestet werden können. Obwohl es noch hin und wieder abstürzt und noch nicht unter Linux getestet wurde, sind die Ergebnisse bereits sehr interessant: clockUtils asynchroner TCP-Socket schlägt boost::asios TCP-Socket und beide Modi von clockUtils' UDP-Socket schlagen den von boost::asio. Ich muss zwar noch einiges testen und die restlichen Bugs beheben, aber die Tendenz sieht gut aus.

Das komplette Performance-Tool kann im offiziellen GitHub-Repository unter https://github.com/ClockworkOrigins/SocketPerformanceChecker eingesehen werden.

Der Release von clockUtils 1.0 ist auf Sonntag festgelegt.

 

i6engine:

Auch die i6engine hat einige Aufmerksamkeit von mir bekommen. Ich habe alle übrigen Bugs behoben und die letzten Features für den anstehenden Release von Version 1.0 eingebaut.

Der ParticleEditor erlaubt es nun eine Box zu definieren, um die Größe der Partikel einschätzen zu können. Das wird bei der Skalierung neuer Partikel helfen und dafür sorgen, dass man sie nicht mehr ingame nachjustieren muss.

Während es bereits zahlreiche Plugin-Schnittstellen für unseren Leveleditor gibt, habe ich jetzt noch die Möglichkeit hinzugefügt Plugins zu schreiben, um eigene Typen von Objekten einzufügen. Als Beispiel-Plugin dafür habe ich eines geschrieben, um NPCs aus dem RPG-Modul einzufügen.

Als ich an der neuen GUI für Elemental War gearbeitet hab habe ich herausgefunden, dass man den Standard-Font, den die GUI benutzen soll, nicht setzen konnte. Jetzt kann man das.

Und das letzte große Feature war eine Möglichkeit, um die Skalierung eines MovableTexts abhängig von der Entfernung zwischen Kamera und Text zu ändern. Dafür gibt es jetzt eine Callback, die die neue Größe berechnen kann.

Aktuell sind gerade mal noch vier Tickets für den neuen Release übrig. Drei davon sind für das Logo, das Icon und zwei Texturen, die für den Release noch ausgetauscht werden müssen. Das letzte ist für die Tutorialsseite auf der Homepage.

Der Release von i6engine 1.0 ist auf Sonntag nächste Woche festgelegt.

 

Elemental War:

Elemental War ist jetzt öffentlich. Ich habe die Homepage freigegeben und den ersten Screenshot hochgeladen. Dieser zeigt die neue GUI. Ansonsten habe ich jede Menge neue Sachen eingebaut und viele Bugs behoben. Das Projekt macht sehr gute Fortschritte. Das einzige Problem aktuell ist, dass mir jemand für die Grafik fehlt, aber ich hoffe, dass sich das bald ändern wird.

 

Das ist soweit alles, aber bald gibt es mehr, schließlich stehen innerhalb der nächsten zwei Wochen zwei Releases an.

Datum: 1.6.2016

Ein weiterer Monat ist vergangen und die Liste an Fortschritten ist diesmal leider recht kurz. Das liegt daran, dass ich meine Masterarbeit fertigschreiben musste. Ich hoffe ich kann jetzt wieder mehr für die Projekte machen.

 

clockUtils:

clockUtils hat wieder einige Verbesserungen für seine Argument-Parser-Bibliothek bekommen. Es ist jetzt möglich Variablen sowohl als required als auch als multiple zu markieren. Eine Variable die required ist wird einen ClockError beim Parsen verursachen, wenn sie nicht gesetzt ist. Multiple Variablen können mehrfach auftreten. Beispielsweise benötigt der gcc die Möglichkeit mehrere Include-Pfade zu parsen. Ein solches Feature ist jetzt möglich durch die neue Funktionalität.

Alle Änderungen sind wieder im offiziellen Repository auf GitHub auf Branch dev-1.0 verfügbar.

Der Release von clockUtils 1.0 ist für Juni eingeplant. Es fehlen gerade mal noch drei Tickets. Ich hoffe wir kriegen bald alles fertig.

 

i6engine:

Auch die i6engine hat ein paar Fortschritte gemacht diesen Monat. Neben ein paar Fixes für Bugs, die bei einer Testsession meiner Tower Defense Elemental War (Homepage kommt bald) aufgetreten sind, habe ich die Tools leicht verbessert. Statt die Kommandozeile selbst zu parsen nutzen sie jetzt unsere clockUtils argParser Bibliothek. Das verbessert unsere Code-Qualität und macht das ganze sehr einfach.

Da auch i6engine 1.0 im Juni auf GitHub und unserer Homepage veröffentlicht werden soll sind noch einige letzte Verbesserungen zu erledigen. Weil ich diesen Monat nicht so viel Zeit hatte, habe ich nur die Tutorials gecheckt. Die stimmen jetzt mit der aktuellen API überein und beschreiben auch die internen Vorgänge wieder richtig.

Datum: 1.5.2016

Ein weiterer Monat, ein weiterer Report. Wir haben wieder einiges getan diesen Monat und hatten z.B. unser erstes Geschäftsmeeting.

 

Allgemeines:

Unsere Homepage hat einige neue Features bekommen, die ihr bald sehen könnt. Ich habe das Grundsetup für zukünftige Spieleseiten angelegt. Sie werden erstmal nur die Newsseite, eine Features-Seite zur Beschreibung des Spiels und eine Galerie, um euch einige Screenshots zu zeigen, enthalten. Das Galerie-Feature ist das zweite, das unsere Homepage bekommen hat. Eine erste Spieleseite wird bald live geschaltet, sie braucht nur noch ein paar Screenshots. Danach werden weitere bald folgen, besonders für Cwizz. Ich denke, dass auch die i6engine spätestens zu ihrem Release voraussichtlich im Juni ebenfalls eine Galerie bekommen wird, um Features und Editoren zu zeigen.

 

clockUtils:

clockUtils hat diesen Monat mehrere Updates erhalten. Wir haben unsere DoubleBufferQueue-Implementierung überarbeitet. Die API ähnelt jetzt nicht mehr der der std::queue, ist dafür aber eher wie andere clockUtils-APIs. Durch diese Änderungen können wir Fehler besser erkennen und bemerkbar machen. Die STL hat nämlich teilweise undefiniertes Verhalten, z.B. beim Aufruf von front() auf eine leere Queue. In diesem Fall erhält man bei unserer DoubleBufferQueue jetzt einen ClockError::NO_ELEMENT.

Außerdem hat die Container-Bibliothek ihren fehlenden Dokumentations-Eintrag bekommen. Er ist grundsätzlich aufgebaut wie die anderen Doku-Seiten, schließlich besteht die Bibliothek aktuell auch nur aus einer Klasse.

Unsere Sockets, sowohl TCP als auch UDP, unterstützen jetzt DNS-Lookups. Ihr könnt die IP für einen Hostnamen über die neue Methode resolveHostname(const std::string & hostname) erhalten. Aber ihr könnt auch direkt zu einem Hostnamen connecten, indem ihr connectToHostname verwendet. Natürlich geht das ebenfalls für den UdpSocket, wo ihr Pakete direkt zu einem Hostnamen senden könnt.

Und zuletzt kann der Argumentparser jetzt mehr wie unter Linux benutzt werden. Das heißt ihr könnt Variablen mit einem langen und einem kurzen Namen registrieren. Angenommen ihr habt eine Variable "file", dann könnt ihr diese als langen Namen nutzen und z.B. f als kurzen Namen. Jetzt kann der Parser sowohl --file als auch -f erkennen und der Variablen "file" zuweisen.

All diese Änderungen sind bereits live in unserem GitHub Repository auf Branch dev-1.0.

 

i6engine:

Unsere Engine hat zwei größere Updates neben einigen kleinen und Fehlerbehebungen erhalten.

Das erste ist grundlegender Support für Terraforming. Das besteht aus zwei Teilen. Der erste ist die Möglichkeit, Terrains während der Laufzeit zu generieren und aus einem std::vector<std::vector<double>> statt einer Heightmap zu erstellen. Der andere Teil erlaubt es, die Höhe eines Vertex während der Laufzeit zu ändern. Das funktioniert sehr gut, aber aktuell gibt es während der Anwendung dieser Änderungen einen kleinen Performance-Einbruch. Wir müssen sehen, ob wir das beheben können oder vielleicht behebt auch ein Ogre-Update dieses Problem. Das Feature kann im neuen SampleTerraforming ausprobiert werden.

Das andere größere Update war in unserem Editor. Es bietet nun zwei weitere Plugin-Möglichkeiten. Eines wird während des Ladens eines Level benutzt, das andere für das Speichern von Objekten. Die Anwendungsfälle können sehr einfach anhand unseres RPG-Moduls dargestellt werden:

Das Level-Lade-Plugin kann einfach genutzt werden, um nicht nur die Leveldatei zu laden, sondern auch NPCs und Items, die der Welt in einem Startup-Script hinzugefügt werden. Ein Plugin mit dieser Funktionalität wird direkt von der Engine angeboten. Das Objekt-Speicher-Plugin wird für jedes GameObject in der Welt aufgerufen und kann diese beim Speichern spezielle behandeln. Es wird benutzt, um NPCs und Items im Editor zu behandeln. Das Speichern eines Levels mit NPCs oder Items generiert nun ein entsprechendes Startup-Script, um sie dem Level während des Startups wieder hinzuzufügen, wenn unser RPG-Modul genutzt wird.

 

Ich hoffe dieser neue Report war interessant. Ich denke die nächste News wird noch for dem Fortschrittsbereich für den April kommen und die erste Spieleseite eröffnen.

Datum: 1.4.2016

Februar ist schon wieder vorbei und wir haben viele Fortschritte, die wir mit euch teilen wollen.

 

clockUtils:

In clockUtils 0.5 resultierte die Dekomprimierung eines unkomprimierten Strings in zufälligem Verhalten. Das haben wir jetzt insofern abgeändert, dass im Fehlerfall ein ClockError zurückgegeben wird und im normalen Fall ClockError::SUCCESS. Das ist zwar eine Änderung der API der compress und decompress-Methoden, aber das ist es wert.

Desweiteren enthält clockUtils nun eine neue Bibliothek, die aktuell nur Header beinhaltet. Die neue Bibliothek heißt Container und enthält eine DoubleBufferQueue, die threadsicheren Queue-Zugriff erlaubt. Wir benutzen sie sowohl in der i6engine als auch in m2etis, also ist die Klasse ganz gut getestet in echten Anwendungen.

Alle Änderungen sind auf den dev-1.0 Branch in unserem GitHub-Repository gepushed. Es ist jetzt nicht mehr viel Arbeit für 1.0 zu tun. Wir hoffen daher, dass wir sie in den nächsten Monaten veröffentlichen können.

 

i6engine:

Diesen Monat hat unsere Engine eine Menge Fixes und neue Features bekommen. Einige seltene Abstürze, die wir während der Arbeit an einem unserer Spiele gefunden haben, sind jetzt Geschichte. Außerdem haben wir durch die Fixes an clockUtils 0.5 einiges über das Verhalten von conditionVariablen gelernt, was wir nun auch auf die Engine angewandt haben.

Für unser Objekt-System haben wir einige neue Componentes für neue Features angelegt. So ist es nun möglich Animationsevents an einer AnimationControllerComponent zu registrieren und zu speichern. Das ist notwendig automatische Übergänge zwischen Animationen, Sounds oder Partikel zu bestimmten Zeitpunkten innerhalb einer Animation auszulösen usw. Das ganze System is bereits in einem unserer Spiele im Einsatz und funktioniert sehr gut. Weitere Components betreffen unsere Lichter. Es ist jetzt möglich, diese zu animieren. Das heißt, dass man jetzt ihre Attribute wie die Farbe oder die Reichweite über die Zeit interpolieren kann. Vielleicht willst du ja flackerndes Licht, das ist jetzt kein Problem mehr.

Das Soundsystem erlaubt es jetzt Sounds zu gruppieren. In fast jedem Spiel kann man die Lautstärke für verschiedene Kategorieren von Sounds wie Effekten, Hintergrundmusik und Dialogen einstellen. Diese Gruppierung ist jetzt auch möglich. Die Anpassung der Lautstärke für eine komplette Gruppe ist ein extra Ticket und wird später bearbeitet.

Auch unsere Tools haben diesen Monat einige Updates bekommen. Neben zahlreichen Fixes für unseren neuen ParticleEditor haben wir alle unsere GUI-Tools lokalisiert. Das schließt den i6engine-editor, NPCCreator, DialogCreator und ParticleEditor ein. Aktuell unterstützen wir nur Deutsch und Englisch, mehr Sprachen folgen möglicherweise, sobald wir die Engine veröffentlicht haben und jemand in andere Sprachen übersetzt.

Aktuell arbeiten wir an einem Weg, Terrains während der Laufzeit zu erstellen. Man soll die TerrainAppearanceComponent mit einem Array füllen können und dieses auch zur Laufzeit ändern können (Terraforming, yay).

 

m2etis:

m2etis hat neue Möglichkeiten für seine Testscripte bekommen, um alle Kanalkonfigurationen profilen zu können. Das funktioniert sowohl für Windows, wo die Visual Studio Performance Tools genutzt werden, als auch unter Linux mit Google Performance Tools. Die ersten Profiling-Ergebnisse der aktuellen Implementierung zeigen die meiste Zeit das Warten an einingen conditionVariables. Die einzige "signifikante" m2etis-Zeit ist innerhalb der RealTimeClock aufgrund des langsamen boost::date_time. Wie wir bereits früher in der i6engine festgestellt haben, ist std::chrono hier deutlich schneller als boost, besonders unter Windows (ungefähr Faktor 40). Ein Wechsel von boost zu std::chrono hat die CPU-Nutzung der RealTimeClock von 10% auf 0.5% gesenkt. m2etis wird hier also ebenso profitieren.

 

 

Das ist soweit alles für die angekündigten Projekte. Wir haben manchmal eines unserer Spiele erwähnt und hoffen, bald ein paar Informationen dazu zu veröffentlichen. Deshalb werden wir auch im März oder April die Spieleseiten-Vorlagen und die Galerie für die Homepage aufsetzen. Sobald das erledigt ist, werden wir die Homepage für das erste Spiel aufsetzen und einige Screenshots veröffentlichen. Auch die i6engine wird vermutlich eine Galerie bekommen, um ihre Möglichkeiten aufzuzeigen.

Datum: 1.3.2016

Beginnend in diesem Monat wollen wir euch mithilfe unseres monatlichen Fortschrittsberichts einen Blick in unsere Fortschritte gewähren. Wir werden den Report immer am ersten des Monats veröffentlichen. Hier also, was wie im Januar erreicht haben und was für Februar geplant ist.

 

Allgemeines:

Diesen Monat haben wir die Benutzbarkeit der Webseite für uns verbessert, um leichter Änderungen vornehmen zu können. Zusätzlich haben wir auf der Startseite von clockwork-origins.de einen Newsticker eingefügt. Dort könnt ihr die letzte fünf News sehen.

 

clockUtils:

clockUtils hat gute Fortschritte gemacht. Wir haben einige seltene Deadlocks und Race Conditions in unserer Socket-Implementierung behoben. Es hat mehrere Stunden gedauert, alles loszuwerden, aber wir haben es letztlich geschafft. Da das das letzte bekannte Problem war konnten wir ein Update auf Version 0.5 veröffentlichen. Seit dieser Version wird clockUtils nun ebenfalls auf GitHub verfügbar sein. Falls ihr also Lust habt, könnt ihr das Repository forken und selber den Code ändern. Natürlich würden wir es begrüßen, wenn ihr eure Änderungen wieder mit uns teilt.

Der nächste Schritt ist Version 1.0, die bald erscheinen wird. Die ersten kleinen Schritte dazu sind bereits getan.

 

i6engine:

Wir haben bisher noch keine Version der i6engine offiziell veröffentlicht, weil wir noch ein paar Sachen bezüglich der Lizenz klären müssen, aber wir wollen euch trotzdem schon berichten, was sich tut und was ihr von der ersten Veröffentlichung erwarten könnt.

Diesen Monat haben wir sehr viel an den Tools, die wir anbieten, gearbeitet.

Unser Leveleditor wurde komplett neu geschrieben und nutzt jetzt Qt für die GUI. Außerdem hat er zahlreiche neue Features spendiert bekommen, z.B. Unterstützung für Plugins, um direkt aus dem Editor ein Spiel mit dem geladenen Level zu starten oder das Layout und die Art, wie Attribute von Components dargestellt und geparst werden sollen, zu definieren.

Desweiteren haben wir zwei neue Editoren zum Erstellen von NPCs und Dialogen. Der NPCCreator kann neue NPCs erstellen und existierende editieren, inklusive Echtzeitvorschau des Modells. Der DialogCreator benötigt noch einige Features, bietet aber bereits die Möglichkeit Dialoge zu erstellen und zu bearbeiten. Der nächste große Schritt wird es sein, die Dialogscripte soweit zu abstrahieren, dass man zum Erstellen nichts über Scripting wissen muss. Das bedeutet dann, dass jeder Storywriter in eurem Team direkt die Dialoge schreiben kann.

Das letzte Tool, an dem diesen Monat gearbeitet wurde, ist der ParticleEditor. Bisher haben wir den ParticleUniverseEditor benutzt, allerdings hat er nicht sonderlich gut funktioniert und es war alles andere als einfach, ihn auf Linux zu portieren und viel musste geändert werden. Deswegen haben wir uns entschieden ihn mit Qt neu zu schreiben. Wir haben einige alte Features wie Videoaufnahmen entfernt, die wir eventuell später wieder hinzufügen, wenn wir sie brauchen oder sie von jemand anderem angefordert werden. Jedenfalls funktionieren jetzt die grundlegenden Mechanismen wie Erstellung, Bearbeitung und Speichern von Partikeln mit Echtzeitvorschau, Script-Editor und einem Überblick über die Components mit der Möglichkeit, sie zu verändern, sehr gut, und zwar unter Windows und Linux.

 

m2etis:

m2etis ist eines unserer ersten Projekte, an dem wir während unseres Studiums gearbeitet haben. Es handelt sich dabei um eine sehr mächtige Template-basierte Publish-Subscribe-Netzwerk-Middleware, die alle ihre Kanäle während der Kompilierungszeit generiert. Dadurch wird der Overhead zur Laufzeit sehr klein. Diesen Monat haben wir Version 0.4 veröffentlicht, was jetzt eine stabile Version ist. Als nächstes werden wir uns auf die Performance konzetrieren, weil dort aktuell noch viel Geschwindigkeit verschwendet wird. Das liegt größtenteils daran, dass viele Teile von m2etis in nur einem Thread laufen und auch nicht geprofiled wurden.

 

Das ist soweit dann erstmal alles. Wir hoffen ihr freut euch über diese neuen monatlichen Informationen. Beobachtet unsere öffentlichen Repositories für mehr Updates oder tretet unseren Mailinglisten bei, um up-to-date und gut informiert zu bleiben.

Datum: 1.2.2016

Heute haben wir einen neuen Release von clockUtils fertiggestellt. Der Großteil sind Verbesserungen und Fixes für unsere TcpSocket-Implementierung. Dafür haben wir zahlreiche Race Conditions behoben. Eine komplette Liste der Änderungen kannst du hier finden: http://clockwork-origins.de/de/clockUtils/changelogs

Zusammen mit dem neuen Release haben wir auch ein öffentliches Repository auf GitHub erstellt. Dadurch habt ihr die Möglichkeit auch abseits der Releases auf der Homepage auf dem neuesten Stand zu bleiben. Unser Repository ist hier zu finden: https://github.com/ClockworkOrigins/clockUtils

Wir hoffen ihr mögt die neue Version. Das nächste Update wird auf Version 1.0!

Datum: 16.1.2016

Wir sind stolz unseren ersten Releasen von clockUtils, unserer C++-Bibliothekssammlung für häufige Aufgaben, verkünden zu können. Der erste Release beinhaltet vier Bibliotheken für das Parsen der Kommandozeile, Komprimierung, die Benutzung von ini-Dateien (Konfigurationsdateien) und Sockets, sowohl für Linux als auch Windows. Die komplette Dokumentation ist hier zu finden: http://clockwork-origins.de/de/clockUtils/docu

Wir hoffen ihr erfreut euch an diesen Bibliotheken und wir wären froh, wenn wir etwas Feedback erhalten.

Datum: 26.6.2015