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

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

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

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

Wir sind stolz einen neuen m2etis-Release präsentieren zu können. Wir haben viele Bugs behoben, die Stabilität und die Dokumentation verbessert und veröffentlichen es nun als Teil unserer Clockwork-Origins-Projekte. Ihr könnt den Source Code als Archiv auf unserer Downloadseite oder auf GitHub finden.

Wir haben für die nahe Zukunft mehr Updates für m2etis geplant. Version 0.5 wird sich auf Performance-Optimierungen konzentrieren, damit wir mit anderen Publish-Subscribe-Middlewares konkurrieren können und eine bessere Netzwerk-Performance für all unsere Projekte, die wie Tri6 m2etis benutzen, erhalten.

Das ist soweit alles. Wir hoffen ihr freut euch über den neuen Release.

Datum: 25.1.2016