Die Engine verwendet nun libcurl für HTTP-Requests, wodurch HTTPS für den Masterserver verwendet werden kann.
UPnP
Die Engine unterstützt jetzt automatische Portweiterleitung via UPnP. Sofern der Router UPnP aktiviert hat, ist nun keine manuelle Portweiterleitung mehr nötig.
Man beachte, dass manche Router es mit der Implementierung von UPnP nicht sehr standardkonform nehmen; in solchen Fällen ist die manuelle Weiterleitung weiterhin nötig.
Logging
Das Logsystem wurde komplett überarbeitet:
Nachrichten in der Clonk.log sowie der Standardausgabe werden nun immer mit Schweregrad geloggt. Subsysteme in Clonk haben nun ihre eigenen Logger mit eigener Kategorie erhalten, wodurch das Identifizieren von Problemen leichter fällt. Außerdem werden jegliche Nachrichten in der Logdatei und der Standardausgabe nun als UTF-8 kodiert.
Konfiguration
Welche Logger mit welchen Leveln loggen, lässt sich über die Config manuell steuern. Dies ist noch nicht in den erweiterten Einstellungen sichtbar und muss manuell in der Registry oder der Konfigurationsdatei eingetragen werden.
Die folgenden Logger lassen sich konfiguieren:
C4AudioSystem
C4AulProfiler
C4AulExec
C4GameControl
C4Network2IO
C4Network2HTTPClient
C4Network2UPnP
C4Playback
CStdDDraw
CPNGFile
Glib
Network
Für jeden Logger stehen die folgenden Werte zur Verfügung:
LogLevel: Das Log-Level, ab dem Nachrichten geloggt werden sollen.
GuiLogLevel: Das Log-Level, ab dem Nachrichten in der GUI angezeigt werden sollen.
ShowLoggerNameInGui: Ob der Name des Loggers bei der Anzeige der Nachrichten in Clonk angezeigt werden soll. Gültige Werte sind true und false.
Gültige Werte für LogLevel und GuiLogLevel sind trace, debug, info, warn, error, critical und off. Die Level inkludieren dabei alle Level über ihnen – warn zeigt warn, error und critical an, trace alle Levels, off deaktiviert den jeweiligen Logger.
Beispiel für die Windows-Registry
Beispiel für Konfigurationsdateien
[Logging]
[C4AudioSystem] LogLevel=trace
Neue Gamma-Implementierung
Bisher hat Clonk die Gammarampe direkt auf den Bildschirm angewendet. Diese Implementierung war allerdings immer suboptimal – es hat nicht bei allen funktioniert, hat sich mit jeder manuellen Gammasetzung im System gebissen (wie z.B. dem Nachtmodus), und immer den gesamten Bildschirm verfärbt. Die neue Implementierung verwendet nun Shader, wodurch nur Clonk vom Gamma beeinflusst wird, und funktioniert immer, ohne Monitoreinstellungen zu verändern.
Die „Gamma deaktivieren“ – Einstellung ist weiterhin funktionsfähig, wird mit dem Update aber wieder zurückgesetzt, sodass Spieler die neue Gammaimplementierung nicht erst manuell aktivieren müssen.
Hazard
Hazard 2.5 rev 2043 ist nun Teil von LC und hat auch schon die ersten Bugfixes erhalten.
Weitere Features
Die Ausführungsgeschwindigkeit von FindObjects wurde stark verbessert.
Der Konsolenmodus verwendet unter Windows nun die modernere Version der Steuerelemente.
Der Konsolenmodus verwendet unter Linux nun GTK3 statt GTK2.
Bei dynamischen Landschaften kann DrawMap nun benannte Overlays aus der Landscape.txt verwenden, sofern KeepMapCreator=1 in der Scenario.txt gesetzt ist.
Das c4group-Kommandozeilenwerkzeug kann nun mit -ga Updategruppen erstellen, die auch funktionieren, wenn das Ziel beim Anwenden des Updates nicht vorhanden ist.
Objects.c4d
Die Spielziele „Goldabbau“ und „Erzabbau“ zeigen in ihrer Beschreibung nun an, wie viel des Goldes / Erzes, was noch abgebaut werden muss, als Gold- / Erzstücke im Freien herumliegt.
Bugfixes
Die Mac-Version hat fehlerhafterweise vorausgesetzt, dass LLVM über Homebrew installiert worden ist. Dies wurde nun behoben.
Ein rarer Crash mit Menüs wurde behoben.
Objektcommands werden nun richtig in Objects.txt gespeichert und aus Objects.txt geladen.
CustomMessage zeigt nun mittels MSG_Left linksbündig ausgerichteten Text richtig an.
Fehlermeldungen über ungültige Zeichen in Scripts zeigen diese nun richtig in der Nachricht an.
Wenn ein Objekt in einem Enginecallback (etwa ein TimerCall) sich selbst via SetObjectStatus inaktiv setzt, crasht die Engine nicht mehr. Dieser alte Bug hat die Crashes in der Geschichte von Harkon verursacht, welche nun wieder problemlos gespielt werden kann.
Ein Crash mit einem SetObjectStatus – Aufruf mit fClearPointers = true und enthaltenen Objekten wurde behoben.
Wenn eine Objektdefinition nur C4D_EnergyHolder alsLineConnect und keine Flags für die jeweiligen Leitungen gesetzt hat, hat das Objekt nicht mehr OCF_LineConstruct gesetzt. Dies verhindert seltsame Fehlermeldungen, dass eine Leitung nicht möglich sei, da das Objekt keine Leitungen unterstützt, aber trotzdem für den Bau einer Leitung in Betracht gezogen würde.
Das Laden von Ressourcen in der Lobby hat manchmal gerade geladene Dateien beschädigt. Dies kann nun nicht mehr passieren.
Fehler beim Packen von Gruppen für das Laden über das Netzwerk wurden behoben.
Ein Crash in der Entfernung von Effekten wurden behoben.
Der IRC-Client zeigt nun im Server-Tab korrekt die Serveradresse an, wenn der Dialog geschlossen und wieder geöffnet wird.
Hazard.c4d
Das Shuttle-Eingang-Hifsobjekt hat nun eine Versionsnummer.
DeserializeObjects ruft die Sonderbehandlung nun korrekt mit Argumenten auf.
Die Leiter verursacht keine Warnung wegen falscher Parametertypen mehr.
Die deutschen Beschreibungen von Jetpack und Rüstung haben keine kaputten Umlaute mehr.
Wenn die Spielregelwahl nur ein Spielziel erzeugt, fehlt in der ausgegebenen Nachricht kein Komma mehr.
Alle Einstellungen von Clonk können nun direkt in Clonk verändert werden, anstelle die Konfigurationsdateien oder die Registry zu bearbeiten und davor sicherzugehen, dass alle Clonk-Instanzen beendet worden sind. Der Dialog ist über „Erweiterte Einstellungen“ in den Hauptmenüoptionen erreichbar.
Manche Änderungen benötigen weiterhin einen Neustart, um in Kraft zu treten.
Ein willkürliches Ändern beliebiger Einstellungen kann – wie beim direkten Editieren der Konfiguration – zu Problemen führen! Dies wird dem Spieler in einem Dialog auch nochmals mitgeteilt.
Weitere Features
Analog zu F3 für Musik schaltet Strg+F3 nun Sounds ein / aus.
Außer „Gamma deaktivieren“ wurden alle Troubleshooting-Optionen aus der Grafikoptionsoberfläche entfernt, da sie so gut wie nie benötigt werden und für Probleme geschaffen worden sind, die es seit über einem Jahrzehnt nicht mehr gibt. Die Einstellungen selber sind weiterhin über die Erweiterten Einstellungen erreichbar, sollte sie jemand tatsächlich benötigen.
Nach einer Community-Abstimmung ist der Standardwert für den /sound-Cooldown nun 0, damit ist der Cooldown nun standardmäßig deaktiviert. Er kann aber in den Erweiterten Einstellungen konfiguiert werden.
Die verwendete Konfiguration des Audiogeräts wird nun in die Clonk.log geschrieben, um etwaige Soundprobleme besser debuggen zu können.
Der Konfigurationswert Developer.ConsoleScriptStrictness wurde hinzugefügt – damit kann festgelegt werden, welches Strict-Level /script sowie die Scripteingabefelder im Konsolenmodus verwenden sollen. Der Standardwert ist MaxStrict, womit das höchste verfügbare Level verwendet wird; weitere gültige Werte sind Strict1, Strict2, Strict3 und NonStrict.
Bugfixes
Ein Bug, der hohe CPU-Auslastung verursacht hat, wurde behoben.
In manchen Situationen auftretende Crashes nach dem Öffnen eines Objektmenüs wurden behoben.
Gibt man in der Scenario.txt Material=Earth-Rough oder eine andere Material-Textur-Kombination an, platziert die Engine Tiere und Nester nicht mehr vor dem Himmel, wenn das Szenario angibt, mindestens für Version [359] geschrieben worden zu sein (Version=4,9,10,15,359 oder höher). Bei älteren Szenarioversionen wird eine Debug-Warnung geloggt und das alte Verhalten aus Kompatibilitätsgründen beibehalten.
MP3-kodierte Audiodateien im MPEG-Layer 1 / 2 – Format werden nun auch korrekt geladen, wenn sie mit einem ungültigen Frame beginnen, indem nach dem ersten gültigen Frame gesucht wird.
Die Fenstergröße für Konsolenmodus-Viewports wird nun unter Windows korrekt gespeichert.
Eine Race Condition, die fehlende Sounds und Lautstärkeschwankungen verursacht hat, wurde behoben .
Zwei-Kanal-Stereo wird nun forciert, um Probleme bei der positionsbezogenen Wiedergabe von Sounds zu vermeiden.
In den letzten Wochen haben wir den internen HTTP-Client wieder auf libcurl umgestellt, was diesmal allerdings mit größeren internem Refactoring in Verbindung gestanden ist (die technisch versiertere Erklärung wäre „es verwendet jetzt Coroutines“). Um diese Änderungen besser testen zu können, wird diese Open Beta ins Leben gerufen, um Communityfeedback zu den Änderungen zu erhalten, um sie letztendlich in ein Hauptrelease zu mergen.
Um daran teilzunehmen, müsst ihr nur die Engine von einem der oberen Links herunterladen und verwenden. Sie ist netzwerkkompatibel mit 358, kann (und soll) also in normalen Netzwerkspielen verwendet werden. Weiters tut sie sich per Ingame-Updater auf eine neuere Versionen updaten, der manuelle Schritt muss also nur einmal erledigt werden.
Änderungen
HTTPS kann nun für Adressen verwendet werden.
Die Masterserver-URL ist nun https://league.clonkspot.org.
HTTP-Requests wie das Aktualisieren der Netzwerkspielliste und dem Registrieren eines Spiels am Masterserver sind nun schneller.
Erwünschtes Feedback
Lädt die Netzwerkspielliste korrekt nach?
Lädt die Netzwerkspielliste schnell nach? Sie sollte grundsätzlich immer schneller als bisher sein.
Funktioniert das Abbrechen eines Requests? (z.B. die Netzwerkspielliste mit Escape verlassen, während sie lädt)
Funktionieren die Requests während einer laufenden Netzwerkrunde, aka werden keine Fehler geloggt?
Gibt es Fälle, wo das Laden der Netzwerkspielliste nie Ergebnisse liefert, sondern im „Abfrage der Spielinformationen“ – Zustand hängt? Löst sich dieser Zustand von selbst oder muss die Engine neu gestartet werden?
Funktioniert der Direktbeitritt über eine Adresse?
Feedback kann im Forum oder auf Discord (Kanal #development-irc) gepostet werden; bitte inkludiert, ob ihr die aktuellste Open Beta-Version verwendet (Info -> Nach Updates suchen), und auf welcher Plattform (Windows x86 / x64, Linux) die Probleme auftreten.
32-Bit-Linuxbuilds werden nicht mehr angeboten, da Ubuntu 20.04 nur mehr als 64-Bit-Distribution zur Verfügung steht.
Features
FMOD-Unterstützung wurde entfernt, da derselbe Klangeffekt nun mit SDL2 erreicht werden kann, indem der Konfigurationseintrag Sound.PreferLinearResampling aktiviert wird.
Bugfixes
Graphics.RenderInactive funktioniert nun korrekt in allen Kombinationen.
Die Engine crasht nicht mehr bei /readycheck, wenn kein Toast erstellt werden konnte, weil das Spiel unter Windows 7 läuft.
Fenster im Konsolenmodus werden unter Windows wieder korrekt gruppiert.
Fenster im Konsolenmodus crashen nicht mehr, wenn mehr als ein Spieler verwendet wird.
Netzwerkspiele verbrauchen unter Linux und macOS nicht mehr unnötig viel CPU-Zeit.
Aufnahmen von Runden, in denen der Host /script verwendet hat, desyncen nicht mehr.
Unter Linux funktioniert die Zwischenablage wieder korrekt.
Overlays unter Linux werden wieder korrekt geladen.
Engineinventarmenüs wie das Kauf- oder Aktiviermenü behalten den Cursor auch auf dem richtigen Element, wenn ein anderer Spieler in der Zwischenzeit die angezeigten Elemente etwa durch Entfernen eines Objekts aus dem Inventar verändert.
Der Versuch, Heimatbasismaterial, welches mit einer negativen Stückzahl verfügbar ist, zu kaufen, zeigt nun dieselbe „Nicht verfügbar“ – Nachricht an, als wären 0 Elemente vorhanden.
Der Windows x86 – Build ist nun large address aware – damit kann LC bis zu 4 GB Arbeitsspeicher verwenden, was etwa mehr geladene Sounds ermöglicht. Empfohlen wird jedoch der Wechsel auf den Windows x64 – Build.
Heapbeschädigung erzeugt nun einen Crashdump unter Windows.
Die Shader verwenden nun GLSL anstelle von uralten ARB-/ATI-Extensions. Sie können über die Konfigurationseinstellung Graphics.Shader aktiviert werden.
Das Rendering verwendet nun Triangle Strips statt Polygonen, was zu besserer Performance führt.
Wenn die Gammaramp nicht abgefragt werden kann, wird eine Fehlermeldung geloggt.
C4Group-Dateien werden nun mit Kompressionslevel 2 anstelle von 9 geschrieben, was zu besserer Performance führt. (Danke an Funni.)
Das interne Texturladen wurde optimiert, wodurch Programmstart und Spielladen nun merkbar schneller sind.
Das interne Schriftladen wurde optimiert, wodurch der Programmstart nun merkbar schneller ist.
Die Rückgabewerte von GetPlrViewMode sind nun als Konstanten verfügbar: C4PVM_Cursor, C4PVM_Target und C4PVM_Scrolling. Zur Bedeutung sei auf die Dokumentation verwiesen.
Bugfixes
IP-Adressen werden alle in die Referenz geschrieben, anstelle ein Limit zu haben.
Die Flüssigkeitsanimation wird beim Laden der Landscape.png nicht mehr an falschen Stellen angezeigt.
LoadScenarioSection crasht nicht mehr, wenn es von einem Objektmenü-Callback aus aufgerufen wird, aber der Sektionswechsel das Objekt entfernt.
Das interne SetCommand in Objektmenüs verwendet nun korrekt nil statt 0.
Wenn die Gammaramp-Größe 0 ist, wird die Standardgammarampgröße verwendet, anstelle zu crashen.
Kaufmenüeinträge werden nun auch korrekt angezeigt, wenn die Grafikskalierung der Definition nicht 100 ist.
Die Engine verzählt sich bei den Geburtstagswünschen an Clonks nicht mehr um ein Jahr.
ID-Grafiken in Text ({{C4ID}}) werden nun auch korrekt angezeigt, wenn die Grafikskalierung der Definition nicht 100 ist.
Die Engine crasht nicht mehr, wenn man ein Gebäude mit Masse 0 zu bauen versucht.
Vorladen unter macOS endet nun nicht mehr mit einem schwarzen Bildschirm.
Vorladen unter macOS crasht nicht mehr die Engine, wenn der GL-Kontext nicht erstellt werden konnte, sondern zeigt eine Fehlermeldung an.
GatlingReload.wav ist nun im korrekten Format.
Falsche Parametertypen in Standardobjektpacks wurden korrigiert.
MP3 kann nun als Musik- und Sounddateiformat verwendet werden.
Der Credits-Dialog zeigt nun alle verwendeten Lizenzen an.
Bugfixes
ForceAutoContextMenu und ForceAutoStopControl werden in Sections nun korrekt von der Haupt-Scenario.txt geerbt.
Die Scriptfunktion PlayerObjectCommand gibt nun eine Warnung bzw. einen Fehler in #strict 3 aus, wenn Call als Command übergeben wird, da der nötige Codepfad nicht implementiert ist. Generell sollte diese Funktion nicht in neuem Code verwendet werden.
Bugs bei Objekten als Schlüssel für Maps wurden gefixt.
Pictures von Objekten und Definitionen mit Grafikskalierung als Menüsymbole werden nun korrekt gerendert.
SetObjectOrder gibt nun false zurück, wenn das Objekt vor oder nach sich selbst sortiert werden soll, da dies zu korrupten Objektlisten oder Endlosschleifen führt.
Doppelte Tastendrücke werden nun als einzelne Tastendrücke behandelt, anstelle verloren zu gehen, wenn für sie kein Callback existiert.
SetActionKeepPhase hinzugefügt, äquivalent zu SetAction() && SetPhase() mit den jeweiligen Parametern.
ForcedAutoStopControl und ForcedAutoContextMenu können jetzt per Szenariosektion angegeben werden.
Contents() hat nun einen dritten Parameter bool returnAttached, der angibt, ob auch Objekte mit Prozedur ATTACH zurückgegeben werden sollen.
bool RejectGrabbed(object byObj) hinzugefügt – gibt dieser Objektcallback true zurück, wird das Anfassen des Objekts, in dem der Callback aufgerufen wird, verhindert. (Danke an TLK.)
Die Performance von Menüeintragssymbolen außer mit Overlays oder Objekten wurde verbessert.
Kann die Spielerdatei eines beitretenden Spielers im Netzwerk nicht geladen werden, wird nun eine Warnung geloggt.
Wird General.AllowScriptingInReplays auf true gesetzt, kann nun in Aufnahmen gescriptet werden. (Danke an Bratkartoffl.)
Bugfixes
Die Engine crasht nicht mehr, wenn eine Definition neu geladen wird, die als Menüeintragssymbol verwendet wird.
Korrupte Zeitstempel in Gruppen verursachen keinen Crash mehr, wenn man als Client versucht, sie vom Host zu laden.
Zeilenbrüche duplizieren Markup (<i> und <c>) nicht mehr.
Wird im Konsolenmodus ein Objekt ausgewählt, werden nun nicht mehr alle globalen Scriptfunktionen sowie alle Objektfunktionen auf public gesetzt.
LoadScenarioSection speichert Landschaft und Objekte wieder korrekt.
nil wird nun auch korrekt zu int oder bool konvertiert, wenn die strict 3 – Funktion indirekt von einer Funktion mit niedrigerer Strictness aufgerufen wird.
Mannschaftsmitglieder, die inaktiv gesetzt worden sind und damit über den Sektionswechsel hinweg erhalten bleiben, bleiben bei Sektionswechsel stehen, um eine feststeckende ComDir zu vermeiden.
Alle Clonks im Originalpack verwenden nun dieselben Vertices wie der Standardclonk.
Alle Clonks im Originalpack verwenden bei Inventarwechsel nun unter allen Umständen die korrekte Action + Phase.
Eine Warnung wegen falschem Parametertypen im Inuk wurde behoben.
Bei nicht passenden Parametertypen von Callbacks, welche in #strict 2 oder niedriger eine Warnung verursachen, wird die Funktion nun auch tatsächlich trotzdem ausgeführt.