Hallo, ich bin Sergey, ihr kennt mich
wahrscheinlich als MacSergey. Ich bin der Autor von einigen beliebten
Mods für Cities: Skylines wie Intersection Marking Tool, Node
Controller Renewal, Network Multitool und einigen anderen. Ich wurde
vor 2 Jahren von Colossal Order angeheuert und arbeite jetzt an
Modding-Features für Cities: Skylines II. Ich schreibe das heutige
Entwicklertagebuch, um euch unsere Herangehensweise an Code-Modding
mitzuteilen.
Verbesserung des
Code-Modding
Code-Modding war ein wichtiger Bestandteil von
Cities: Skylines und wir wollen die gleichen und sogar noch mehr
Möglichkeiten für Modding in Cities: Skylines II bringen. Wir
glauben, dass die Möglichkeit, das Spiel zu modden, eine sehr coole
Sache ist, die eine Menge Möglichkeiten mit sich bringt. Wenn man
sich anschaut, wie verschiedene Spieler Mods nutzen, um Cities:
Skylines zu spielen, sieht man völlig unterschiedliche Spielstile,
fast so, als ob sie verschiedene Spiele spielen würden. Einige
Spieler möchten die reale Welt bis ins kleinste Detail nachbilden.
Einige Spieler möchten den Verkehr und die Produktionsketten der
Industrie verwalten. Manche Spieler wollen einfach nur Spaß haben
und die Stadt mit 100 Tornados zu verwüsten.
Jeder hat eine andere Vorstellung vom
"perfekten Set an Features". Bei den Features des
Basisspiels haben wir viele beliebte Vorschläge aus der Community
aufgenommen, aber ehrlich gesagt ist es nicht möglich, jeden Wunsch
eines jeden Spielers umzusetzen. An dieser Stelle kommen die Mods ins
Spiel. Jeder kann etwas implementieren oder das Spiel so verändern,
wie er möchte, selbst wenn man der Einzige auf der Welt ist, der
diese Funktion braucht.
So war es auch bei mir. Ich erfuhr von
Cities: Skylines im Jahr 2019, als ich einen Beitrag im Internet sah,
in dem ein Spieler seine Heimatstadt in dem Spiel nachbaute, und das
machte mir Lust, das Spiel auszuprobieren. Ich fing an zu spielen und
mochte die Möglichkeiten des Basisspiels, aber irgendwann dachte
ich: "Es wäre cool, wenn ich dies oder jenes tun könnte."
Dann wurde mir klar, dass ich das Spiel modifizieren konnte, aber
leider konnte ich keine Mods finden, die das taten, was ich wollte,
also beschloss ich, meine eigenen zu schreiben. Ich dachte nicht,
dass meine Mods beliebt sein würden oder dass jemand anderes die
gleichen Funktionen brauchte, aber es stellte sich heraus, dass meine
Mods sehr beliebt wurden.
Ich finde es so cool, obwohl Cities:
Skylines schon seit fast 9 Jahren auf dem Markt ist, habe ich immer
noch neue Mods für das Spiel gesehen. Einige von ihnen sind in den
Augen der Community zu unverzichtbaren Mods geworden. Und das alles
nur, weil die Leute nicht erkannt haben, dass sie sie brauchen, bis
sich jemand entschlossen hat, sie für sich selbst zu erstellen und
sie mit anderen zu teilen!
Mods in Cities: Skylines II
bringen
Cities: Skylines bot nur sehr begrenzte Unterstützung
für Modding. Oft kam man an einen Punkt, an dem das Spiel es nicht
mehr zuließ, etwas einfach zu modifizieren und man musste Tage damit
verbringen, es zu implementieren. Andere Modder stießen auf die
gleichen Einschränkungen und erstellten ihre eigenen
Implementierungen, die miteinander in Konflikt geraten konnten.
In Cities: Skylines II wollen wir so
viel Unterstützung wie möglich für Dinge bieten, die das Modding
vereinfachen, so dass ihr nicht eure eigene Implementierung von
generischen Dingen machen müsst, die von fast jeder Mod unabhängig
von ihrer Funktionalität benötigt werden. Wir haben auch einige
Verbesserungen der Nutzungsqualität implementiert, damit ihr nicht
tagelang versuchen müsst, herauszufinden, welche Version des
externen Tools ihr installieren müsst oder wie ihr ein Mod-Projekt
in der IDE einrichtet und die erforderlichen Spielabhängigkeiten
hinzufügt, um eure Mod zu kompilieren.
Der erste Schritt zur Erreichung
unserer Ziele war die Erstellung der Modding-Toolkette und ihre
Bereitstellung. Mit nur einem Knopfdruck werden alle notwendigen
Abhängigkeiten und externen Tools wie die Unity-Engine, der
Burst-Compiler und ECS installiert, die für die Erstellung von Mods
benötigt werden. Wenn irgendwelche Abhängigkeiten aktualisiert oder
Anforderungen geändert werden, benachrichtigt die Modding-Toolchain
euch darüber, sobald ihr das Spiel startet, und bietet Updates an,
damit euer Entwicklungssetup immer auf dem neuesten Stand ist.
Die Benutzeroberfläche verfolgt den
Installationsfortschritt für die Tools, die zum Modifizieren des
Spiels benötigt werden
Als Nächstes haben wir die
Mod-Projektvorlage erstellt, die den neuen Mechanismus für
.Net-Vorlagen verwendet und in der Liste der Projekte verfügbar ist,
wenn ein neues Projekt in Visual Studio oder Rider erstellt wird.
Alle erforderlichen Abhängigkeiten, Pfade und Post-Build-Aktionen
sind so eingestellt, dass man den "Build"-Button drücken
kann, und die Mod wird kompiliert, nachbearbeitet und im richtigen
Ordner abgelegt, so dass man das Spiel starten und sehen kann, dass
sie da ist.
Die Mod-Projektvorlage in Visual Studio
erstellt einen neuen Projektdialog
Wenn eure Mod fertig ist,
kann sie auf Paradox Mods direkt aus Visual Studio oder Rider
veröffentlicht werden, indem ihr die Veröffentlichungsoption der
Standard-IDE benutzt. Es gibt eine leere
Veröffentlichungskonfigurationsdatei in der Projektvorlage, die
ausgefüllt werden sollte. Danach klickt man auf sein Projekt und
wählt die Option "veröffentlichen". Dann wird eure Mod
auf Paradox Mods veröffentlicht und steht anderen Spielern zur
Verfügung, um sie zu abonnieren und zu nutzen.
Option zum Veröffentlichen im Reiter
Optimierung von Mods
Das
Spiel nutzt einige neue Technologien der Unity-Engine wie das Entity
Component System oder die Burst-Kompilierung, um von Multithreading
und Low-Level-Optimierung zu profitieren, die die Geschwindigkeit
einiger Berechnungen um das 30-40fache erhöhen können. Aber diese
Technologien erfordern zusätzliches Wissen, um diese Vorteile zu
erreichen, andernfalls kann die Leistung schlechter sein, als wenn
man sie gar nicht nutzt. Der Ansatz zum Modding, den man von Cities:
Skylines gewohnt ist, würde es nicht erlauben, die besten Ergebnisse
zu erzielen, die man in Cities: Skylines II.
Die Verwendung von Tools wie Harmony,
die für Cities: Skylines Modding üblich ist, ist immer noch
möglich, aber jetzt etwas eingeschränkter. Harmony kann nur
verwalteten Code patchen, aber ein Teil des Spielcodes wird nach der
Burst-Kompilierung zu Optimierungszwecken nicht verwaltet. Harmony
kann solchen Code nicht patchen, aber das ist kein Problem, da alle
Informationen über alle Spiel-Entitäten und -Komponenten von den
Mods-Systemen aus zugänglich sind und geändert oder hinzugefügt
werden können, ohne den bestehenden Spielcode zu verändern.
Um eure Mods zu optimieren, bieten wir
auch einen Mod Post Processor an, der die Kompilierung und
Low-Level-Optimierungen im Spiel vornimmt, damit Mods die gleichen
Möglichkeiten der Engine nutzen können, die auch das Spiel
verwendet, ohne dass ihr selbst herausfinden müsst, wie das geht.
Unser Ziel mit diesem Tool ist es, euch zu leiten, den richtigen
Ansatz zu verwenden und die häufigsten Fehler zu reduzieren, damit
ihr nicht viel Zeit damit verbringt, herauszufinden, was falsch ist.
Außerdem könnt ihr damit die gleiche Leistung und die gleichen
Optimierungen erreichen, die das Spiel haben wird, wenn das Team alle
Optimierungen vorgenommen hat.
Die Optimierungen sind nicht
erforderlich, da mancher Code davon nicht profitiert, es kommt also
wirklich darauf an, was der Code genau macht. In vielen Fällen
sollte es verwendet werden, da die Unity-API eine
Quellcode-Generierung verwendet, die einen Teil des Codes in der
Nachbearbeitungsphase durch seine tatsächliche Implementierung
ersetzt. Wenn euer Code solche API-Aufrufe verwendet und ihr nicht
das Setup verwendet, das wir für euch in der generierten
Mod-Projektvorlage und dem Mod-Postprozessor erstellt haben, wird
euer Code nicht funktionieren und eine "NotImplemented"-Ausnahme
auslösen.
Mod-Kompatibilität
Wenn ihr
Cities: Skylines gespielt habt, wisst ihr, wie sich
Spielaktualisierungen auf Mod-Funktionen auswirken können, und das
ist etwas, das wir in Cities: Skylines II verbessern. Obwohl es nicht
möglich ist, Mods komplett vor Problemen zu bewahren, da der
Spielcode, den sie modifizieren, geändert werden könnte, versuchen
wir, die Wahrscheinlichkeit zu verringern, dass Mods kaputt gehen,
wenn das Spiel aktualisiert wird.
Wenn ihr mit dem Modding vertraut seid,
wisst ihr wahrscheinlich, warum Mods kaputt gehen, aber wenn nicht,
werde ich versuchen, kurz zu erklären, warum das passiert: Wenn Mods
den Spielcode verändern, suchen sie nach bestimmten Teilen des
Codes, die bestimmte "Signaturen" (Klassennamen,
Methodenparameter, Felder usw.) verwenden. Wenn Updates oder
Fehlerbehebungen durchgeführt wurden, wurde der Basiscode des Spiels
geändert und die "Signaturen", nach denen die Mods suchen,
existieren nicht mehr oder die Stelle des Codes, die sie ändern,
funktioniert nach dem Update etwas anders. Wir können nicht wissen,
welchen Teil des Codes jede einzelne der Tausenden von Mods
modifiziert, und selbst dann mussten wir ihn ändern, um Probleme zu
beheben und dem Spiel neue Funktionen hinzuzufügen. Die einzige
Möglichkeit, Mods nicht zu zerstören, wäre, das Spiel überhaupt
nicht zu aktualisieren, was wir natürlich tun mussten. Einer der
lustigen Momente, die ich bei der Arbeit an einer der letzten
Erweiterungen für Cities: Skylines gearbeitet habe, war, als ich
nach der Veröffentlichung feststellte, dass eine meiner Mods kaputt
war und der Grund dafür die von mir vorgenommenen Änderungen am
Code des Basisspiels waren, um einen Fehler zu beheben oder eine neue
Funktion hinzuzufügen.
In Cities: Skylines II sollte das viel
weniger ein Problem sein, wenn Mods ihre Funktionen auf die gleiche
Weise einführen wie das Spiel selbst. Um eine komplett neue Funktion
zu erstellen, muss man nicht verschiedene Stellen im Spielcode finden
und alle ändern, um die Mod-Funktionalität einzubinden, und sich
darüber Gedanken machen, dass eine dieser Stellen im Basisspiel in
einem der zukünftigen Spiel-Updates geändert wird. Das Einzige, was
ihr tun müsst, ist euer eigenes System zu erstellen und es in der
Aktualisierungsschleife zu registrieren. Von diesem Moment an wird
das Spiel es genauso behandeln wie jedes andere System des
Basisspiels. Ein weiteres Beispiel sind die Spieleinstellungen. Wir
haben ein einfaches, aber flexibles automatisches System entwickelt,
das Eigenschaften, die ihr durch spezielle Attribute in eurem Mod
markiert, in die Spieleinstellungen übernimmt. Auch hier könnt ihr
eure Einstellungen durch den Aufruf einer Methode registrieren und
müsst euch nicht darum kümmern, wie ihr eine Einstellungsseite für
euren Mod erstellt.
Das System der Spieleinstellungen macht
das Hinzufügen von Einstellungen zu den Mods viel einfacher
Außerdem haben wir verbessert, wie das
Spiel Mods und ihre Abhängigkeiten verarbeitet. Es konnte
kompliziert sein, wenn eine Mod in eine andere Mod integriert ist,
Daten von einer dritten Mod erhält und etwas in einer vierten Mod
ändert. Dies war ein Problem in Cities: Skylines, wo das Spiel
Schwierigkeiten hatte, solche komplizierten Beziehungen zwischen Mods
und dem Spiel zu verwalten. Wahrscheinlich habt ihr schon einmal in
Cities: Skylines eine Situation, in der eine Mod eine andere Mod
kaputt machen konnte, weil sie unterschiedliche Versionen der
gleichen Abhängigkeit verwendeten. Cities: Skylines II versucht, die
meisten dieser komplizierten Beziehungen aufzufangen und löst
Abhängigkeitskonflikte zwischen Mods auf. Außerdem gibt es keine
Mod-Ladereihenfolge, bei der eine Mod vor einer anderen Mod geladen
werden muss, um zu funktionieren. Darüber müsst ihr euch in Cities:
Skylines II nicht kümmern.
Die Perspektive eines Modders
Bevor
ich bei Colossal Order gearbeitet habe, war ich zwar Programmierer,
aber bis jetzt habe ich noch nie in einem Spielestudio gearbeitet. Da
ich aus der Modding-Community komme, war mir bewusst, dass manche
Dinge nicht so wichtig erscheinen, wenn man sie aus der Perspektive
eines Spieleentwicklers betrachtet. Während der Entwicklung
verwendet man spezielle Engine-Tools und hat Zugang zum gesamten
Quellcode, aber aus der Perspektive eines Modders hat man nichts
davon. Manchmal ist der Unterschied so groß, dass man etwas mit ein
paar Klicks in den Entwicklertools machen kann, aber es dauert
Stunden oder sogar Tage ohne sie. Nachdem ich angefangen hatte, bei
Colossal Order zu arbeiten, gab es viele Momente, in denen ich
dachte: "Oh, wirklich, das ist so einfach im Engine-Editor zu
machen, aber ich und andere Modder haben sich damit schwer getan. Das
erklärt, warum es im Spiel nicht verbessert wurde." Mit meiner
Erfahrung als Modder fallen mir diese Unterschiede auf und ich kann
sie hervorheben, so dass wir Verbesserungen einführen können, die
das Erstellen von Mods wesentlich einfacher und schneller machen.
Wir verlassen uns nicht nur auf meine
Erfahrung im Modding, denn wir haben eine Modding-Beta, an der viele
Autoren beliebter Mods für Cities: Skylines mitwirken. Sie erhielten
frühzeitig Zugang zu Cities: Skylines II und die Modding-Toolchain,
damit sie das Spiel und seine Modding-Möglichkeiten erkunden
konnten. In dieser Zeit haben sie sogar einige einfache Mods
erstellt, von denen ihr einige vielleicht schon ausprobiert habt,
während wir noch an der Modding-Unterstützung gearbeitet haben. Wir
hören uns ihr Feedback dazu an, was sie in der Modding-API gerne
sehen würden oder auf welchen Teil des Spielcodes sie gerne
leichteren Zugriff haben würden. Wir wollen es ihnen ermöglichen,
ihre Ideen zum Leben zu erwecken und das Spiel in viele verschiedene
und interessante Richtungen zu bringen.
Es war sehr inspirierend für mich, an
Features zu arbeiten, die für andere Modder nützlich sein können,
und ich bin bereits stolz darauf, zu sehen, wie die Modder mit frühem
Zugang die Tools, die ich in das Spiel implementiert habe, nutzen, um
ihre erstaunlichen neuen Mods für Cities: Skylines II zu erstellen.
Ich kann es kaum erwarten, zu sehen, was sich die Community einfallen
lässt, sobald wir das Spiel um Code-Modding-Unterstützung erweitert
haben, und wir werden es basierend auf dem Feedback, das wir
erhalten, weiter verbessern.
Die Code Mod Tools werden am 25.
März zusammen mit dem Beach Properties Asset Pack veröffentlicht!