Alles anzeigenHallo, 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!
Modding-Entwicklungstagebuch #3: Code Modding
- Eric
- Geschlossen