Mod-SDK
Mods erstellen
Mit Mods erweiterst du Dream City um neue Gebäude, Straßentypen, geänderte Werte und eigene Spielregeln. Dieses SDK enthält alles dafür: Vorlage, zwei Beispiele, Referenz-DLLs, Werkzeuge und diese Anleitung.
| Ordner | Inhalt |
|---|---|
Vorlage/meine-mod | Startpunkt für deine eigene Mod (Daten + Code) |
Beispiele/stadtvillen | Reine Daten-Mod: neue Villa, rote Allee, günstigere Häuser |
Beispiele/stadtfest | Code-Mod: monatliches Stadtfest mit Bonus und eigenem Festplatz |
Referenzen | DLLs des Spiels zum Kompilieren von Code-Mods (Version in VERSION.txt) |
Werkzeuge | ModPacken.ps1 (Prüfen und Packen), AssetBundlesBauen.cs (Modelle für Unity) |
Dokumentation | Diese Anleitung, Referenz.md (alle Vorlagen und Felder), mod.schema.json |
1. Schnellstart in fünf Minuten
- Ordner
Vorlage/meine-modkopieren und umbenennen. - In
mod.jsondieidändern (z. B.deinname.hochhaeuser) und Namen, Autor und Beschreibung eintragen. Für eine reine Daten-Mod die Zeile"assembly"und den Ordnersrclöschen. - In
buildings/ein Gebäude anlegen (siehe Abschnitt 3). - Den Ordner nach
Dokumente\Dream City\Mods\kopieren. - Dream City starten → Mods → deine Mod ist da und eingeschaltet. Fehler stehen direkt in der Liste.
Im Spiel öffnet Mods → Mod-Ordner öffnen genau diesen Ordner. Eine ZIP-Datei, die du dort ablegst, wird beim nächsten Start automatisch entpackt.
2. mod.json
{
"id": "deinname.meine-mod",
"name": "Meine Mod",
"version": "1.0.0",
"author": "Dein Name",
"description": "Kurze Beschreibung",
"api": 1,
"minGameVersion": "0.1.4",
"assembly": "MeineMod.dll",
"bundles": ["meine-mod"],
"dependencies": [{ "id": "anderer.autor.basis", "minVersion": "1.2.0" }]
}
| Feld | Pflicht | Bedeutung |
|---|---|---|
id | ja | Eindeutig, nur a–z 0–9 . - _. Nie mehr ändern – Spielstände und Updates hängen daran. |
name, version | ja | Version wie 1.2.0. Jedes Update im Portal braucht eine höhere Version. |
api | ja | Version der Mod-Schnittstelle. Aktuell 1 (steht auch in Referenzen/VERSION.txt). |
minGameVersion | empfohlen | Älteste Spielversion, mit der die Mod läuft. |
maxGameVersion | nein | Neueste getestete Version – danach lädt das Spiel die Mod nicht mehr. Nur setzen, wenn nötig. |
assembly | nein | DLL mit Code (Code-Mod). |
bundles | nein | Unity-AssetBundles mit Modellen und Materialien. |
dependencies | nein | Andere Mods, die vorher laden müssen. |
3. Neue Gebäude und Straßen (ohne Programmieren)
Jede Datei in buildings/ ist eine neue Gebäudeart, jede in roads/ ein neuer Straßentyp. Eine neue Art ist immer eine Kopie einer vorhandenen (base) mit geänderten Werten – alles, was du nicht angibst, bleibt wie bei der Vorlage (Aussehen, Verhalten, Rolle im Spiel).
{
"id": "Stadtvilla",
"base": "Einfamilienhaus",
"displayName": "Stadtvilla",
"category": "Wohnen",
"cost": 42000,
"residents": 6,
"footprint": [3, 3],
"wallColor": "#F2E8D5",
"roofColor": "#A8402E",
"icon": "bilder/villa.png"
}
- Alle Vorlagen (
base) und alle Felder stehen in **Referenz.md**. - Aufzählungen als Text (
"category": "Gewerbe"), Kennzeichen als Liste ("tags": ["Wohnen", "Nachtleben"]),
Größen als [x, y], Farben als "#RRGGBB".
- Farben:
wallColor,roofColor,groundColor,trimColor(Gebäude),surfaceColor(Straßen). - Bilder (
icon): PNG/JPG im Mod-Ordner. Modelle (prefab): Asset-Name aus einem AssetBundle (Abschnitt 6). - Gebäude der Kategorien Wohnen, Gewerbe und Industrie mit
lotSize> 0 wachsen von selbst in Zonen, alle anderen
erscheinen im Baumenü.
- Im Spiel heißt die Art
deine-mod-id.Stadtvilla. So stehen Mod-Gebäude im Spielstand.
4. Vorhandenes ändern (tweaks.json)
{
"buildings": { "Einfamilienhaus": { "cost": 9000 }, "Kraftwerk": { "upkeep": 800 } },
"roads": { "Autobahn": { "costPerMeter": 300 } }
}
Änderungen gelten nur, solange die Mod eingeschaltet ist, und werden beim Verlassen der Stadt zurückgesetzt. Ändern zwei Mods denselben Wert, gilt die zuletzt geladene. Geladen wird alphabetisch nach Ordnername, Abhängigkeiten zuerst.
5. Code-Mods (C#)
Für eigene Spielregeln. Voraussetzung: .NET SDK (8 oder neuer).
cd meine-mod/src
dotnet build -c Release
Die DLL landet automatisch im Mod-Ordner. Deine Klasse erbt von DreamCityMod:
using DreamSky.Modding;
public class MeineMod : DreamCityMod
{
public override void OnLoad() { /* einmal beim Spielstart */ }
public override void OnCityStarted() { Context.Toast("Hallo!"); }
public override void OnUpdate(float dt) { }
public override void OnNewDay() { }
public override void OnNewMonth() { }
public override void OnCityClosed() { }
}
Context bietet:
| Methode / Eigenschaft | Zweck |
|---|---|
Log, Warn | Ausgabe ins Spielprotokoll (%USERPROFILE%\AppData\LocalLow\…\Player.log) |
Toast(text) | Kurze Meldung im Spiel |
ReadText, WriteText, DataExists, DeleteData | Eigene Daten speichern und lesen (Datenordner der Mod, bleibt bei Updates) |
AddBuilding(id, base, def => …) | Neue Gebäudeart per Code (wie Abschnitt 3) |
AddRoadType(id, base, type => …) | Neuer Straßentyp per Code |
TweakBuilding(name, def => …) | Vorhandene Art ändern |
FindBuilding, FindRoadType, Buildings | Arten nachschlagen (während einer Stadt) |
LoadTexture(pfad), LoadAsset<T>(name) | Bilder aus dem Mod-Ordner, Assets aus den Bundles |
Darüber hinaus kannst du alle öffentlichen Klassen des Spiels nutzen (Assembly-CSharp.dll), z. B. CityEconomy (Geld, Steuern), CityStats (Einwohner, Jobs), GameClock (Zeit), RoadGraph (Straßennetz). Das Beispiel Beispiele/stadtfest zeigt das.
Robustheit: Wirft deine Mod Fehler, protokolliert das Spiel sie; nach fünf Fehlern wird nur deine Mod abgeschaltet. Code-Mods muss der Spieler ausdrücklich erlauben, weil Code mit seinen Rechten läuft.
Sicherheitsprüfung
Jede Code-Mod wird automatisch geprüft – beim Hochladen im Portal und noch einmal im Spiel, bevor sie geladen wird. Blockiert wird alles, womit eine Mod Daten von Spielern sammeln oder verschicken könnte:
| Nicht erlaubt | Stattdessen |
|---|---|
Netzwerk (System.Net, UnityWebRequest, Application.OpenURL) | – Mods laufen nur lokal |
Dateien (File, Directory, FileStream, StreamReader/Writer …) | Context.ReadText / Context.WriteText |
Systeminfos (Environment, Benutzerkonto, Geräte-ID, Zwischenablage) | – |
Andere Programme, Registry, DLL-Aufrufe (Process, Microsoft.Win32, DllImport, Marshal) | – |
Code nachladen (System.Reflection, Activator, Type.GetType, Expression.Compile) | normale Aufrufe |
| Kamera, Mikrofon | – |
Mod-Verwaltung des Spiels (ModManager, ModRepository) | Context |
Außerdem darf ein Paket nur die eine DLL aus mod.json enthalten (keine weiteren Programme) und wird mit dem Virenscanner ClamAV geprüft. Die vollständige Regelliste: scan-regeln.json. Wird deine Mod zu Unrecht blockiert, melde dich über das Portal.
6. Eigene Modelle (AssetBundles)
- Unity in derselben Version wie das Spiel installieren (
Referenzen/VERSION.txt), Projekt mit Vorlage „Universal 3D“ (URP). Werkzeuge/AssetBundlesBauen.csnachAssets/Editor/legen.- Prefab erstellen (1 Einheit = 1 m, Pivot unten mittig, Vorderseite zeigt nach +Z), im Inspector unten einem AssetBundle zuweisen, z. B.
meine-mod. - Menü Dream City → AssetBundles bauen, Datei
AssetBundles/meine-modin den Mod-Ordner kopieren. - In
mod.json:"bundles": ["meine-mod"], im Gebäude:"prefab": "NameDesPrefabs".
7. Kompatibilität
Damit Mods auch nach Spiel-Updates laufen:
- Das Spiel lädt nur Mods mit passender
api. Steigt die API-Version (selten, wird im Portal angekündigt),
zeigt das Spiel „Veraltet“ statt abzustürzen.
- Mit
minGameVersionverhinderst du, dass ältere Spiele deine Mod laden. - Code-Mods, die nicht mehr zur Spielversion passen (fehlende Methoden), werden mit „Passt nicht zu dieser
Spielversion“ abgeschaltet – baue sie dann mit den neuen Referenzen neu.
- Bleib bei
base-Namen ausReferenz.mdund ändere dieiddeiner Mod und ihrer Arten nie: sonst fehlen
sie in alten Spielständen.
- Fehlt eine Mod beim Laden eines Spielstands, fehlen nur ihre Gebäude, der Rest lädt normal.
8. Veröffentlichen
powershell -ExecutionPolicy Bypass -File Werkzeuge\ModPacken.ps1 -Mod pfad\zu\meine-mod– prüft alles und erzeugtdeinname.meine-mod-1.0.0.zip. Optional einpreview.png(16:9) in den Mod-Ordner legen.- Auf https://dream.soralyn.de/mods/ registrieren, Mod hochladen, ZIP auswählen.
- Spieler finden die Mod danach im Spiel unter Mods → Online im Portal und installieren sie mit einem Klick. Für Updates einfach eine neue Version mit höherer Versionsnummer hochladen.
Regeln im Portal: nur eigene Inhalte oder solche, die du verwenden darfst; kein Schadcode; maximal 100 MB je Paket.
Regeln im Portal
- Nur Inhalte hochladen, die du selbst gemacht hast oder verbreiten darfst (Lizenz beachten, Quellen nennen).
- Kein Schadcode: Code-Mods dürfen nichts tun, was Spieler nicht erwarten – keine fremden Downloads, kein Ausspähen, keine Änderungen außerhalb von Dream City.
- Keine beleidigenden, rechtswidrigen oder jugendgefährdenden Inhalte.
- Die Mod-ID gehört dir: Updates nur mit derselben ID und höherer Version.
- Verstöße werden entfernt, Konten können gesperrt werden. Problem gefunden? Auf der Seite der Mod „Mod melden“.