Mods Registrieren

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.

OrdnerInhalt
Vorlage/meine-modStartpunkt für deine eigene Mod (Daten + Code)
Beispiele/stadtvillenReine Daten-Mod: neue Villa, rote Allee, günstigere Häuser
Beispiele/stadtfestCode-Mod: monatliches Stadtfest mit Bonus und eigenem Festplatz
ReferenzenDLLs des Spiels zum Kompilieren von Code-Mods (Version in VERSION.txt)
WerkzeugeModPacken.ps1 (Prüfen und Packen), AssetBundlesBauen.cs (Modelle für Unity)
DokumentationDiese Anleitung, Referenz.md (alle Vorlagen und Felder), mod.schema.json

1. Schnellstart in fünf Minuten

  1. Ordner Vorlage/meine-mod kopieren und umbenennen.
  2. In mod.json die id ändern (z. B. deinname.hochhaeuser) und Namen, Autor und Beschreibung eintragen. Für eine reine Daten-Mod die Zeile "assembly" und den Ordner src löschen.
  3. In buildings/ ein Gebäude anlegen (siehe Abschnitt 3).
  4. Den Ordner nach Dokumente\Dream City\Mods\ kopieren.
  5. 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" }]
}
FeldPflichtBedeutung
idjaEindeutig, nur a–z 0–9 . - _. Nie mehr ändern – Spielstände und Updates hängen daran.
name, versionjaVersion wie 1.2.0. Jedes Update im Portal braucht eine höhere Version.
apijaVersion der Mod-Schnittstelle. Aktuell 1 (steht auch in Referenzen/VERSION.txt).
minGameVersionempfohlenÄlteste Spielversion, mit der die Mod läuft.
maxGameVersionneinNeueste getestete Version – danach lädt das Spiel die Mod nicht mehr. Nur setzen, wenn nötig.
assemblyneinDLL mit Code (Code-Mod).
bundlesneinUnity-AssetBundles mit Modellen und Materialien.
dependenciesneinAndere 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 / EigenschaftZweck
Log, WarnAusgabe ins Spielprotokoll (%USERPROFILE%\AppData\LocalLow\…\Player.log)
Toast(text)Kurze Meldung im Spiel
ReadText, WriteText, DataExists, DeleteDataEigene 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, BuildingsArten 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 erlaubtStattdessen
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)

  1. Unity in derselben Version wie das Spiel installieren (Referenzen/VERSION.txt), Projekt mit Vorlage „Universal 3D“ (URP).
  2. Werkzeuge/AssetBundlesBauen.cs nach Assets/Editor/ legen.
  3. Prefab erstellen (1 Einheit = 1 m, Pivot unten mittig, Vorderseite zeigt nach +Z), im Inspector unten einem AssetBundle zuweisen, z. B. meine-mod.
  4. Menü Dream City → AssetBundles bauen, Datei AssetBundles/meine-mod in den Mod-Ordner kopieren.
  5. 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 minGameVersion verhinderst 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 aus Referenz.md und ändere die id deiner 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

  1. powershell -ExecutionPolicy Bypass -File Werkzeuge\ModPacken.ps1 -Mod pfad\zu\meine-mod – prüft alles und erzeugt deinname.meine-mod-1.0.0.zip. Optional ein preview.png (16:9) in den Mod-Ordner legen.
  2. Auf https://dream.soralyn.de/mods/ registrieren, Mod hochladen, ZIP auswählen.
  3. 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“.