Clonk kann nun Toast-Benachrichtigungen unter Windows und Linux anzeigen. Momentan werden diese nur für /readycheck verwendet, wodurch der Spieler / die Spielerin auch darüber benachrichtigt wird, wenn Clonk nicht das aktive Fenster ist; außerdem kann Ja / Nein direkt über die Benachrichtigung ausgewählt werden. Ein Klick auf die Benachrichtigung setzt einen als bereit, da man schließlich am PC sein muss, um sie zu beantworten.
Sollten diese Benachrichtungen unerwünscht sein, können Toasts je nach Anwendungsfall über das Bearbeiten der Einstellungen in der Registrierung oder Konfigurationsdatei im Abschnitt Toasts ausgeschaltet werden; für Readycheck ist dies ReadyCheck.
LinuxspielerInnen seien daran erinnert, dass die Benachrichtungen über libnotify funktionieren und nur verwendet werden, wenn damit gebaut wird; sollte die Benachrichtigung aufgrund von Systemproblemen nicht korrekt erstellt werden können, wird eine Fehlermeldung geloggt.
Weitere Features
Wenn die Logdatei aufgrund fehlender Berechtigungen im Clonkordner nicht geöffnet werden kann, wird nun eine Fehlermeldung angezeigt.
Ports können jetzt größer als 32767 sein und das volle Spektrum bis 65535 verwenden. (#59)
Dateiendungen und das clonk:// – Protokoll werden unter Windows jetzt im Nutzerpfad der Registrierung eingetragen, sodass keine Administratorrechte mehr notwendig sind, um sie zu setzen.
Bugfixes
Ungültige Namen für SetPlrExtraData und SetCrewExtraData verursachen nun eine Warnung und werden ignoriert, anstelle die Chance zu haben, alle Werte zu löschen.
Automatisches Objektverkaufen verkauft nun alle Objekte in einem Schritt.
Der fehlende Punkt in der Versionsangabe in der Fehlermeldung, die auftritt, wenn das Szenario eine neuere Engineversion als vorhanden verlangt, ist nun vorhanden.
Stacktraces geben Parameter, die einen zu false konvertierbaren Typen haben, mit dem korrekten Typ anstelle von 0 aus.
Die Engine behandelt WM_USER_LOG nicht mehr, da es einfach einen vom Nutzer übergebenen Zeiger als String behandelt und daher unter anderem Crashes verursachen kann.
global-> kann nun korrekt in Statements verwendet werden.
Die Engine crasht nicht mehr, wenn ein Initialisierungsfehler auftritt, bevor das Musiksystem initialisiert worden ist.
/console crasht unter X11 nicht mehr.
Zufallsteams werden nun korrekt rebalanciert, wenn ein Spieler von einem schon kleineren Team entfernt wird.
{ ist in Nicks nicht mehr erlaubt, da es zu Ausgabeproblemen in Teamchat führt.
In Endlosschleife laufender Musik wird jetzt wieder korrekt ohne Pause und Lognachricht abgespielt. (#55)
In Spielständen kann nun gejoint werden, auch wenn die maximale Spieleranzahl niedriger als die Anzahl der TeilnehmerInnen gesetzt worden ist.
Scrollen mit den Pfeiltasten funktioniert nun korrekt, wenn das Spiel pausiert ist (#56; danke an Cyprex).
Das Copyrightzeichen wird nun wieder korrekt in der Anwendungsbeschreibung angezeigt.
/fullscreen wird nicht mehr in die Registrierung eingetragen, da es entfernt worden ist.
Die Linux-X11-Konfiguration erkennt nun die rechte Umschalttaste korrekt.
Der Lobbycountdown wird von /readycheck auch mit größeren Standardcountdownwerten korrekt abgebrochen und gestartet.
c4group.exe wird im experimentellen Windows x64-Build korrekt geupdatet.
#strict 3 erzeugt bei return; jetzt korrekt return nil; anstelle von return 0;.
Das Drücken von F3 schaltet die Musik nur für die laufende Runde an / aus. Um diese Einstellung permanent zu setzen, kann der Eintrag im Optionsmenü in den Spieloptionen verwendet werden.
Natürlich gibt es weiterhin die Möglichkeit, dies außerhalb der Runde in den Optionen einzustellen.
Weitere Features
Bei ModulateClr und CustomMessage ist es in #strict 3– Scripts nun möglich, durch Angabe von 0 als Farbargument echtes Schwarz zu übergeben; nil entspricht weiterhin dem alten Verhalten in #strict 2 und kleiner und verwendet die Farbe weiß.
Der Download der experimentellen 64-Bit-Windows-Version ermöglicht nun das Verwenden einer 64-Bit-Version von Fmod, sofern vorhanden.
Die DefCore-Eigenschaft HideHUDElements hat nun einen neuen Wert – Inventory – erhalten, mit dem die Sichtbarkeit des Inventars an der linken unteren Bildschirmecke gesteuert werden kann. Benutzung erfolgt analog zu den anderen Flags, wofür ich auf die Dokumentation bzw. den Blogpost zu [346] verweise.
Maps löschen nun Einträge, die ein Objekt als Schlüssel verwenden, beim Entfernen dieses Objekts.
Die Anzahl der maximal verwendeten Soundkanäle wurde von 100 auf 1024 erhoben, um eine größere Vielfalt der Klangkulisse zu ermöglichen. 1024 ist dabei leider das Maximum, da Fmod nur so viele Kanäle gleichzeitig unterstützt und die Standardvoraussetzungen für FMod und SDL2_mixer dieselben sein sollten.
Der Auswertungsdialog hat nun nicht mehr Runde beenden im Fokus, wodurch versehentliches Beenden durch Drücken der Entertaste mit der Intention, den Chat zu öffnen, vermieden wird. Stattdessen öffnet das Drücken von Enter im Auswertungsdialog nun immer den Chat. Für schnelles Beenden über die Tastatur ist weiterhin das Drücken der Escapetaste möglich.
Bugfixes
Der Konsolenmodus crasht nicht mehr, wenn mehr als ein Sichtfenster offen ist und diese nicht in umgekehrter Reihenfolge geschlossen werden.
Das Spiel crasht nicht mehr, wenn zu wenig Soundkanäle für das Abspielen neuer Sounds vorhanden sind.
In [346] wurde eingeführt, dass Hit(int xdir, int ydir) nur noch in Objektdefinitionen ab Clonk Rage mit Argumenten abgerufen wird, da der Callback davor diese Parameter nicht hatte, was etwa in der Clonk Planet – Forschungsstation zu Scriptfehlern geführt hat. Leider ist uns dabei nicht aufgefallen, dass der mit Clonk Rage mitgelieferte Clonk Editor standardmäßig Definitionen mit der Versionsnummer 4.9.5, was Clonk Endeavour entspricht, erstellt – für Clonk Rage wäre mindestens 4.9.6 nötig. Warum dies der Fall ist, bleibt ein Mysterium; eigentlich sollte es auch keine Auswirkungen haben, da die Dokumentation das Anpassen der Versionsnummer an die jeweils aktuelle Version und / oder die Zielversion bei Änderungen des Objekts vorschreibt; die Realität sieht, wie so oft, aber anders aus. Daher wurde dieser Bugfix wieder rückgängig gemacht.
Der Konsolenmodus crasht nicht mehr beim Beenden von Clonk, wenn mehr als ein Sichtfenster offen ist.
Zur Wahrung der Kompatibilität werden Definitionen ohne Versionsangabe nicht mehr als uralte Definitionen, sondern wie Definitionen mit der Versionsnummer 4.9.10.7, was Clonk Rage entspricht, behandelt. Allerdings wird eine entsprechende Warnung ausgegeben, da die Versionsnummer erforderlich ist und wir keine näheren Garantien zum Verhalten bei deren Fehlen abgeben!
Debugbuilds der Engine sind nun wieder kompilierbar, das Inkludieren eines Headers hat gefehlt.
Hochauflösende Objektgrafiken in Clonk? Geht das? Jetzt schon! Durch die neue DefCore-Eigenschaft Scale kann nun ein Skalierungsfaktor in Prozent bestimmt werden, in dem die Objektgrafiken vorliegen. Der Wert gibt an, bei welchem Spielskalierungsfaktor die Objektgrafik in Originalgröße dargestellt wird.
Soll heißen:
Scale=100 bedeutet, dass die Objektgrafik bei 100% Spielskalierung (in den Optionen einstellbar) in Originalgröße gerendert wird. Bei höheren Spielskalierungen muss sie entsprechend raufskaliert werden. Dies ist das momentane und das Standardverhalten aller Objekte.
Scale=200 skaliert die Objektgrafik bei 100% Spielskalierung auf die Hälfte. Bei 200% Spielskalierung wird sie jedoch in Originalgröße dargestellt, wodurch die Unschärfe des Skalierens entfällt.
Werte sind nicht auf ganze Zahlen (100%, 200%, 400%, …) beschränkt, allerdings können bei unschönen Werten Skalierungsartefakte auftreten.
Länge, Breite, ActMap-Angaben können wie gewohnt in den Maßen angegeben werden, die das Objekt im Spiel haben soll. Eine Ausnahme besteht in der SolidMask – da die Pixel exakt den Pixeln der Grafik entsprechen müssen, müssen **nur** die Offsets in Grafikkoordinaten angegeben werden.
Beispiel: Ich möchte der Stahlbrücke aus Codename: Modern Combat eine höher auflösende Grafik verpassen. Ein Auszug aus den Grafikparametern der DefCore.txt lautet wie folgend:
Neue Soundengine
Bisher wurde für Sounds auf Windows FMOD und auf anderen Plattformen SDL_mixer 1.2 verwendet. Dies brachte einige Probleme mit sich, etwa den MIDI-Bug mit FMOD, verschiedene SDL-Unschönheiten und, dass kein Windows-LC-Archiv komplett out-of-the-box läuft, weil zuerst fmod.dll aus dem CR-Archiv kopiert werden muss, da diese aus Lizenzgründen nicht mitgeliefert werden darf. Ab 346 wird standardmäßig für alle Plattformen SDL2_mixer verwendet, wie bereits in 344 versucht wurde. Dies bringt eine kleine Klangänderung mit sich – wie stark, hängt von den Ohren der befragten Person und den verwendeten Sounds ab.
Im Gegensatz zum letzten Versuch gibt es allerdings für Windows-Nutzer die Möglichkeit, weiterhin FMOD zu verwenden, indem die fmod.dll aus Clonk Rage in den Clonk-Ordner eingefügt wird. Für alle bestehenden Installationen müsste dies also ohne zusätzlichen Aufwand bereits der Fall sein. Wenn FMOD korrekt geladen wird, erscheint beim Ladebildschirm noch vor dem Hauptmenü die Nachricht Using dynamically loaded FMod for sound.
Sollte allerdings SDL2_mixer verwendet werden und es bei Szenarien mit sehr vielen Sounds zu Problemen kommt, weil die mit 32-Bit zur Verfügung stehenden 2 GB RAM nicht ausreichen, kann auf die (momentan experimentelle) 64 Bit-Version ausgewichen werden.
Achtung: Die fmod.dll von Clonk Rage funktioniert nur mit der 32-Bit-Version. Für die 64-Bit-Version ist zwar dieselbe Funktionalität möglich, allerdings müsste dafür die 64 Bit-Version fmod64.dll vorhanden sein.
Verbesserung des authentischen Clonk-Planet-Erlebnisses
Die Landschaft von Szenarien, deren Versionsnummer kleiner als 4.6.5 ist, wird nun standardmäßig ohne 3D-Materialschattierung dargestellt, um dem Originalverhalten näherzukommen. EntwicklerInnen können die Materialschatterierung für ihre Szenarien über die Einstellung ShadeMaterials der [Landscape] – Sektion der Scenario.txt ändern. Ein Wert von true schaltet es ein, ein Wert von false aus.
Weiters wurden einige Bugs gefixt, die zu Scriptfehlern in alten Szenarien führten, etwa in der Clonk Planet – Forschungsstation.
Weitere neue Script- und Objektfeatures
Mittels der DefCore-Eigenschaft BaseAutoSell kann nun gesteuert werden, ob ein Objekt in der Basis automatisch verkauft wird oder nicht. Standardwert ist false, außer das Objekt hat die ID GOLD, damit Goldobjekte von Drittanbietern nicht kaputtgehen.
Mittels der DefCore-Eigenschaft HideHUDElements können nun bestimmte Elemente des Clonk-HUDs am linken Bildschirmrand in Crewmemberobjekten verborgen werden. Bitmaske. Mögliche Werte:
Name
Wert
Versteckt
Portrait
1
Clonkportrait
Captain
2
Kapitänssymbol
Name
4
Clonkname
Rank
8
Rangname
RankImage
16
Rangsymbol
All
31
Alles davon
Neuer Scriptoperator ??. Ist der erste Operand nil, wird der zweite Operand zurückgegeben, ansonsten der erste.
Neuer Scriptoperator ??=. Setzt den ersten Operanden auf den zweiten, wenn der erste nil ist.
Weitere Features
Der Netzwerkstack versucht nun nicht mehr, sich mit Nulladressen zu verbinden, was technisch nicht möglich ist; dadurch erzeugte Nachrichten müllen das Log nun nicht mehr voll.
Auf UNIX-Systemen werden etwaige auftretende Signale nach der Ausgabe des Stacktraces wieder ausgelöst, wodurch der Crashhandler des Systems aufgerufen wird.
Die Lobby zeigt nun die Anzahl der Spieler in der Lobby sowie der maximal möglichen Spielerzahl in der Titelleiste der Spielerliste an.
Vorladen ist nun standardmäßig aktiviert und nicht mehr in der experimentellen Phase. Wir bedanken uns bei allen Spielerinnen und Spielern, die Feedback geliefert haben.
/sound fällt nun auf die Dateiendung .ogg zurück, wenn kein Sound mit passendem Namen und Endung .wav gefunden werden kann.
Alt + Enter öffnet im laufenden Spiel nun die Chateingabe für Nachrichten über dem Clonk.
Leere Chateingabzeilen werden beim Drücken der passenden Tastenkombinationen entsprechend ausgefüllt, ohne sie davor schließen zu müssen.
experimenteller macOS-Support wie schon in 344
experimentelle 64-Bit-Windows-Anwendung
Bugfixes
Bei Fehlern während des Spielstarts wird nun anstelle eines nicht existierenden Stringtable-Eintrages namens IDS_PRC_FAIL eine passende Fehlermeldung angezeigt.
Mit etwas Glück ist ein bei Netzwerkspielen und insbesonders in Lobbies auftretender Crash behoben. (Technischer Hintergrund: StdStrBuf::AppendFormatV mit seinen verschiedenen Implementierungen für Windows und Linux wurde durch eine neue Implementierung mittels variadic templates anstelle von va_list erstellt. Damit tritt auch der Bug, dass über den Stack hinausgelesen wird, da die Argumentliste bei mehrfachen vsnprintf – Aufrufen nicht kopiert wird, nicht mehr auf, danke an Sharkigator aka Foaly fürs Melden und den Pull Request.)
Die Performance von die Landschaft modifizierenden Funktionen wie SetLandscapePixel und DrawMaterialQuad wurde drastisch verbessert; SetLandscapePixel sollte nun etwa 10 – 20 Mal so schnell sein wie davor. (Technischer Hintergrund: Zur Landschaftsbearbeitung muss Clonk die Landschaft aus dem GPU-Speicher in den Hauptspeicher laden. Bisher wurde immer die ganze Landschaft geladen, egal, wie groß die Änderung war; mit 346 wird nur der benötigte Bereich geladen.)
Fälle, in denen Maps ihre Schlüssel referenziert haben, wurden entfernt.
Kann weder ein UDP-Socket erstellt noch der Referenzserver gestartet werden, crasht das Spiel nicht mehr. (Technischer Hintergrund: Schlug die Referenzservererstellung fehl, wurde fälschlicherweise die Fehlermeldung des UDP-Sockets abgefragt.)
Die Landschaft zählt nun keine Pixel von ungültigen Materialien mehr.
Verlässt man die Lobby direkt am Anfang vom Vorladen, crasht das Spiel nicht mehr durch das versuchte Laden einer ungültigen Ressource.
Der Bereit-Dialog kann nun nicht mehr mit Ja bestätigt werden, wenn alle Ressourcen noch nicht vollständig herunterladen wurden.
Hit(int xdir, int ydir) wird nur noch in Objektdefinitionen ab Clonk Rage mit Argumenten abgerufen, da der Callback davor diese Parameter nicht hatte, was etwa in der Clonk Planet – Forschungsstation zu Scriptfehlern geführt hat.
Local(0) in Szenarien aus Clonk Planet – Zeiten wird nun wieder korrekt geladen. (Technische Hintergrund: Der Wert wurde als Integer geladen, anstelle automatisch bestimmt zu werden.)
Das Spiel crasht unter Windows nicht mehr, wenn ein Fehler direkt beim Programmstart auftritt.
Der Referenzserver antwortet nun mit HTTP 405 Method Not Allowed, wenn eine nicht unterstützte HTTP-Requestmethode verwendet wird.
Die Kompilieroption USE_STAT funktioniert wieder.
Aufnahmen werden nun gleich abgespielt, egal, ob mit oder ohne Vorladen aufgenommen wurde.
Updateknopf aus der Netzwerkliste entfernt. Die Architektur des Updatesystems hat zu Crashes geführt, wenn der Updateserver zu langsam geantwortet hat. (Technischer Hintergrund: Bis eine Antwort erhalten wird, wird die Mainloop im Netzwerkdialog ausgeführt. Verlässt man die Netzwerkliste, bevor eine Antwort erhalten worden ist, wird diese gelöscht; bei Erhalt der Antwort wird die Ausführung somit in einem gelöschten Objekt fortgesetzt.)
Temporäre Standalone-Dateien des Netzwerks werden nun korrekt gelöscht.
Lokal verfügbare, entpackte Ressourcen können nun nicht mehr in der Lobby gespeichert werden.
Startet der Host ein Netzwerkspiel mit entpackten Objektdefinitionen, verwendet er trotzdem die dadurch gepackten Versionen, um Desyncs durch andere Ladereihenfolgen vorzubeugen.
Jump and Run – Controls bleiben nicht mehr in gedrücktem Zustand, wenn die Taste während eines offenen Menüs / Dialogs losgelassen wird.
Neustartspielerwiederherstellungsinformationen werden nicht mehr gelöscht, wenn der „Spiel beenden“ – Dialog aufgerufen wird, aber mit Nein zum Spiel zurückgekehrt wird.