Während ich lerne, die Moddingmöglichkeiten von GalCiv III zu erforschen, werde ich hier einzelne Aspekte erklären.
Fragen, Tipps, Tricks und Hilfsangebote sind jederzeit willkommen. Allgemeine Modding-Diskussionen sollten wir aber in ein eigenes Thema auslagern.
Dieser Modding-Guide wird eure Mithilfe brauchen. Denn für manche Themen wie die Erstellung von Grafiken bin ich vollkommen ungeeignet und auf Hilfe angewiesen!
Als Grundidee werde ich versuchen das Volk der Jülziish (oder Blues) aus dem Perry Rhodan Universum einzubauen. Nicht sehr originell, aber für diesen ersten Versuch gibt es einige interessante Ansätze für Modifikationen:
* Blues haben eine hohe Fortpflanzungsrate, neigen aber auch zu internen Zwisten bis hin zu Bürgerkriegen.
* Als besondere Technologie kennen Blues eine Molkexpanzerung - das schreit nach einem veränderten Techbaum bei der Schiffspanzerung
* Als Event darf eine Hornschreckenplage nicht fehlen.
* Diskusförmige Raumschiffe
* ...
Mods werden im Ordner Eigene Dokumente\My Games\GalCiv3\Mods\ installiert. Dabei muss die Ordnerstruktur dem Aufbau der Verzeichnisse im Spieleordner folgen.
Am einfachsten kopiert man die Ordnerstruktur des ExampleMod und bennent diese um. Ich habe Blues als Namen gewählt:
GalCiv 3 unterstützt zwei unterschiedliche Arten des Moddings:
* Ersatz der vorhandenen Dateien - Dateien gleichen Namens im Mods-Ordner ersetzen den Inhalt der Originaldateien
* Dateien gleicher Struktur, aber mit anderem Dateinamen ergänzen die Originaldateien
Um es uns einfach zu machen, suchen wir also nach den Originaldateien und werden bei Standardinstallation in C:\Steam\SteamApps\common\Galactic Civilizations III\data fündig.
Von hier kopiert man die gewünschten Originaldateien in den neu erstellten Mods-Ordner und bennent diese bei Bedarf um. Ich werde im jeweiligen Kapitel aufführen, welche Originaldateien als Basis für die Modifikation verwendet werden.
Um eine eigene Rasse anzulegen, gibt es zwei Möglichkeiten.
Die erste und deutlich einfachere ist die Verwendung der Werkzeuge im Spiel zur Erstellung einer eigenen Rasse. Es gibt allerdings gewisse Einschränkungen bei den Anpassungsmöglichkeiten.
Die zweite ist wie oben beschrieben die passenden XML-Dateien zu erstellen. Am einfachsten als Kopie einer existierenden Rasse.
Nehmen wir zuerst den einfachen Weg der vorhandenen Möglichkeiten im Spiel.
Da wir den Blues nicht einfach als Terraner, Thalaner oder gar als Drengin verkleiden wollen, benötigen sie ihr eigenes Gesicht.
Also schnell ein Bild eines typischen Blues mit Tellerkopf und blauem Flaum erzeugt und in zwei Größen abgespeichert.
Ein Portrait mit Maximalgröße 128x128 Pixel im PNG-Format:
Der Einfachheit halber dann nochmals das gleiche Bild vergrößert als 1920x1080 PNG (Sagte ich schon, ich habe keine Begabung für Graphiken?)
Zusätzlich zu den beiden Portraits könnte ich noch einen Hintergrund für das Portrait und ein Logo für die Rasse erstellen. Aber da bediene ich mich vorerst aus dem im Spiel vorhandenen Fundus.
Die Bilder werden in folgendes Verzeichnis kopiert:
Documents\My Games\GalCiv3\Factions
\LeaderBGs - Hintergrund für Portraits - 1920x1080 \LeaderFGs - Portrait im Spiel z.B. bei Diplomatie - 1920x1080 \Logos - Flagge/Logo der Rasse - 128x128 \Portraits - kleines Portrait des Anführers - 128x128
Jetzt kann GalCiv3 gestartet werden - die Blues warten auf uns!
Nach Auswahl von New Game kann eine neue Rasse erstellt werden:
Falls wir diesen Knopf drücken grüßen uns die Terraner - alternativ lässt sich auch jede der anderen existierenden Rasse als Kopiervorlage verwenden.
Schnell wählen wir ein neues Portrait für den Anführer aus durch Auswahl von "Picture" - ganz am Ende der Liste taucht unser zuvor erstelltes Bild auf:
Die Video-Option kann ich leider nicht zeigen, da ich keine Videos im Bink2-Format erstellen kann. Wenn mir da jemand helfen kann, bitte melden!
Noch einen geeigneten Hintergrund dazu ausgewählt und das ganze nochmals für das kleine Portrait:
Dann taufen wir unseren Anführer noch auf Iül-Theer-Hij, den Meister der Neunzehnten Vorsicht, die Vorsicht für interplanetarische Zusammenarbeit und den Bestand des Reiches.
Fertig ist unser Anführer:
Copyright-Hinweis: Der Blues ist dem Titelbild des Perry Rhodan Romans 2036 entnommen und nicht meine Eigenkreation. Alle Rechte liegen beim Pabel-Moewig Verlag GmbH, Rastatt
PS: Ja, ich habe da Tippfehler in der Beschreibung von Iül-Theer-Hij gemacht - bin aber zu faul dafür jetzt neue Screenshots zu machen.
Im nächsten Schritt muss der neuen Rasse ein Name, eine Beschreibung und ein Logo verpasst werden. Ein Heimatplanet und Sonnensystem kann ebenfalls festgelegt werden.
Und hier zeigt sich die erste Einschränkung dieser Methode: Man kann zwar den Planetennamen überschreiben (Earth => Gatas), aber als Sonnensystem nur eines der im Spiel vorhandenen auswählen. Ein eigenes Sonnensystem Verth kann ich nicht erstellen.
Also schnell weiter zu den Eigenschaften unserer Blues. Hohe Fortpflanzungsrate, zerstritten, militaristisch und mutig sollen sie sein. Als Bonus erhalten sie bei der Besiedelung neuer Planeten die doppelte Bevölkerungszahl und das erste Gebäude gratis.
Ich habe keine Ahnung, ob daraus eine wettbewerbsfähige Rasse entstehen wird. Aber die verfügbaren Punkte werden so voll ausgeschöpft.
Im nächsten Menu können Farben für Karte und UI, Schiffstypen und Farben festgelegt werden.
Auch hier gilt wieder: Es können nur im Spiel bereits vorhandene Einstellungen verwendet werden. Sollen die Blues also irgendwann ihre charakteristischen Diskusschiffe bekommen, müssen wir zu anderen Mitteln greifen.
Ich klicke also ein paar mal auf "zufällig alles einstellen" (der Recyclingknopf rechts am Rand) und gebe mich damit zufrieden.
Zum Schluss kann noch die Persönlichkeit der neuen Blues-Rasse eingestellt werden. Das ist wichtig, wenn die KI mit dieser Rasse spielen sollte.
Außerdem kann ich einen Techbaum auswählen. Da ich noch keinen eigenen Techbaum für die Blues erstellt habe, muss der Standardtechbaum als Grundlage reichen.
Jetzt noch speichern und die Blues stehen zur Verfügung:
Ziel: Die Rasse der Blues über XML als Modifikation zu erstellen und dabei alle Details abzubilden, die in Teil 2 mit den Ingame-Werkzeugen gewählt worden sind.
Das Bild unseres Anführers und Logos müssen ihren Weg in die Modifikation finden. Dazu wird im Modverzeichnis ein Unterordner \Gfx\Factions angelegt.
Innerhalb dieses Ordners können dann die Ordner wie in Teil 1 beschrieben angelegt und gefüllt werden:
\LeaderBGs - Hintergrund für Portraits
\LeaderFGs - Portrait im Spiel z.B. bei Diplomatie
\Logos - Flagge/Logo der Rasse
\Portraits - kleines Portrait des Anführers
Schritt 2: Die passende XML-Vorlage finden
Das kopierte Beispiel-Modverzeichnis ist ansonsten noch vollkommen leer. Bevor es also weitergeht, muss die passende XML-Vorlage für eine neue Rasse gefunden werden.
Dazu schaue ich in das Installationsverzeichnis von GalCiv ...\SteamApps\common\Galactic Civilizations III\data.
Im Unterordner .\Game lächeln mich auch gleich 137 XML-Dateien an. Da muss doch einfach die passende dabei sein!
Eine Suche nach *faction* liefert 6 XML-Dateien mit denen sich die Rassen im Spiel anpassen lassen. Wichtig ist zunächst nur FactionDefs.xml - hier finden sich alle Rassen (auch die nicht spielbaren).
Im Unterordner \English\Text fördert die Suche eine weitere Datei namens FactionText.xml zu Tage.
Beide Dateien kopiere ich in die passenden Ordner Game und Text meiner Blues-Mod. Anschließend benenne ich die Dateien um und ergänze jeweils ein _Blues im Dateinamen:
FactionDefs_Blues.xml
FactionText_Blues.xml
Ohne Umbenennung würde ich alle Rassen aus GalCiv 3 durch meine Eigenkreationen ersetzen. Das will ich aber vorerst nicht.
InternalName - Eindeutiger Schlüssel für die Rasse DisplayName - Name DisplayNameShort - Kurzname LeaderName - Name des Anführers Description - Beschreibt die Rasse im Startmenu LeaderDescription - Bescheibt den Anführer im Startmenu RaceType - Legt fest, ob es sich um eine spielbare "Major" oder nicht spielbare "Minor" Rasse handelt.
Wie man sieht, habe ich keine Texte eingetragen, sondern Textschlüssel definiert. Diese Textvariablen füllen wir ganz am Schluss mit Inhalten.
Texte hier direkt einzutragen ist ein ganz schlechter Programmierstil und erschwert eine spätere Übersetzung enorm. Für Testzwecke ist's aber ausnahmsweise ok.
Die zulässigen Werte für RaceType sind in einer anderen Datei definiert. Wie man zulässige Werte findet, steht im Spoiler.
Achtung Spoiler:
Im Kopf jeder XML-Datei wird auf das zu verwendende Schema verwiesen:
In FactionDefs.xsd sind alle zulässigen Tags definiert, die wir zur Beschreibung der neuen Rasse verwenden können.
Im Kopf der Datei werden weitere Schemata eingebunden - diese definieren dann die zulässigen Werte der einzelnen Einträge:
Die zulässigen Werte für RaceType finden sich dann in Lib/Enums/PlayerTypes.xsd und sind "Major", "Minor" und "Special". Was "Special" bewirkt, habe ich noch nicht getestet. Vermutlich für die Dread Lords und Arnor?
Auf zum nächsten Abschnitt! "PersonalityTraits" kann ja eigentlich nur beschreiben, wie die KI sich verhalten soll.
Ich wähle die gleichen Eigenschaften aus wie zuvor beschrieben.
RequiresHomeworld - "true" wenn die Rasse mit einem Heimatplaneten starten soll. Kann auch entfernt werden, z.B. wenn man Weltraumvagabunden oder Flüchtlinge erschaffen will. HomeStarSystem - Muss ein in StarSystemDefs.xml definiertes Sonnensystem sein. Für den Anfang tut es das heimatliche Sonnensystem. HomePlanetName - Kann den Namen des Startplaneten (und des ganzen Sonnensystems) überschreiben. Wird HomePlanetName weggelassen, dann werden die Standardnamen verwendet.
Unverändert übernehme ich die Startraumschiffe (Kolonieschiff, Erkunder-Flaggschiff, Explorer) und den Techbaum. Später wird es hier sicher noch Änderungen geben:
ShipCallsign - Text, der allen Schiffsnamen vorangestellt wird LogoImage - Logo der Rasse (ich habe immer noch kein eigenes erstellt und verwende den Platzhalter aus Teil 2) LeaderThumbnail - Bild des Anführers aus \Gfx\Factions\Portraits LeaderImageFG - Bild des Anführers aus \Gfx\Factions\LeaderFGs LeaderImageBG - Hintergrundbild aus Gfx\Factions\LeaderBGs NewsRobotMovie_Approach - Video für den Forschungsroboter - habe ich vom terranischen Modell auf ein generisches umgestellt NewsRobotMovie_Idle - dito StartupImage - Keine Ahnung wo genau das verwendet wird. Jedenfalls nicht beim Start eines neuen Spieles. Egal welches Bild ich hier eintrage, es tut sich nichts. StartupTitle - Titel des Begrüßungsschirms StartupDescription - Text auf dem Begrüßungsschirm (Einführung in die gespielte Rasse) StartupTraitsDescription - Erläuterungstext der speziellen Fähigkeiten MapColorDef - Farbschema auf der Karte UIColorDef - Farbschema des UI FactionMoviesFGDef - Video des Anführers. Löschen, wenn kein Video vorhanden ist, sonst wird das in LeaderImageFG definierte Bild mit einem Video überschrieben FactionMoviesBGDef - Videohintergrund - ebenfalls löschen. FactionMusicDef - welche Musik dudeln soll. Hat jemand "Blues"-Musik in Ultraschallfrequenzen für mich?
Der nächste Abschnitt wimdet sich dem Aussehen der Raumschiffe.
Achtung Spoiler:
Ich habe versucht die zufällig gewählten Werte aus Teil 2 zu reproduzieren:
CreditsInit - Startgeldbetrag WarEnduranceInit - bisher keine Ahnung DefaultResistance - bisher keine Ahnung InfluenceTallyInit - bisher keine Ahnung StartingColonyPopulation - Startbevölkerung (nicht setzen, wenn es keinen Heimatplaneten gibt!)
Der Kreis schließt sich - wie zu Beginn wieder ein paar Werte zur Steuerung der KI:
Sagte ich was von kreativ? Vergesst es, das lasse ich lieber Writing Bull oder andere geeignetere Modder erledigen.
Ich sammle einfach alle definierten Textschlüssel aus FactionDefs_Blues.xml auf und lege für jeden davon einen Eintrag in FactionText_Blues.xml an.
Nicht vergessen, vorher alle bestehenden Einträge in dieser Datei löschen!
Da GC3 noch keine Mehrsprachigkeit unterstützt, lege ich alle Texte vorerst auf Englisch an. Ansonsten hätte ich ein furchtbares Sprachwirrwar im Spiel.
Code:
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<StringTableList
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../Schema/Lib/StringTable.xsd">
<!-- Created by Ronnar -->
<!-- Based om FactionText.xml -->
<!-- http://www.civforum.de/showthread.ph...-Modding-Guide -->
<!-- Tech Names and Descriptions -->
<StringTable>
<Label>FACTION_BLUES_Name</Label>
<String>Jülziish</String>
</StringTable>
<StringTable>
<Label>FACTION_BLUES_ShortName</Label>
<String>Blues</String>
</StringTable>
<StringTable>
<Label>FACTION_BLUES_LeaderName</Label>
<String>Iül-Theer-Hij</String>
</StringTable>
<StringTable>
<Label>FACTION_BLUES_Dec</Label>
<String>Jülziish or the "Blues" as the Terrans call them are the predominating race in the galactic eastside. Blues are intelligent and very fertile. However internal conflicts and fracticidal wars slow their expansion down.</String>
</StringTable>
<StringTable>
<Label>FACTION_BLUES_LeaderDec</Label>
<String>Leader of the 19th precaution, responsible for interplanetary collaboration and security of the Jülziish empire.</String>
</StringTable>
<StringTable>
<Label>FACTION_BLUES_Callsign</Label>
<String>Blues</String>
</StringTable>
<StringTable>
<Label>FACTION_BLUES_StartupTitle</Label>
<String>Go Forth And Multiply</String>
</StringTable>
<StringTable>
<Label>FACTION_BLUES_StartupDescription</Label>
<String>Jülziish or the "Blues" as the Terrans call them are the predominating race in the galactic eastside. Blues are intelligent and very fertile. However internal conflicts and fracticidal wars slow their expansion down.
Some other races describe them as cold-hearted, however this is mostly base on a misunderstanding of their complex social structures. Blues cannot be trusted as allies and will often change allegiance or try to avoid conflict.
</String>
</StringTable>
<StringTable>
<Label>FACTION_BLUES_StartupTraitsDescription</Label>
<String>Jülziish are famous for their couisine. Technology wise they may be behind the rest of the galaxy, but their Molkex armor for spaceships is surpassing any other defense system known.</String>
</StringTable>
<StringTable>
<Label>FACTION_BLUES_PlanetName</Label>
<String>Gatas</String>
</StringTable>
</StringTableList>
Möge die weiße Kreatur der Weisheit mit euch und die farblose Kreatur des Mysteriums nach Lesen dieser Zeilen von euch gewichen sein!
Wenn es jemand ausprobieren will: Das ZIP-Archiv aus dem Anhang in den Mod-Ordner kopieren und entpacken.
Feedback, Anregungen, Grafikspenden sind willkommen!
Edit: Download entfernt - da hatte ich doch glatt eine veraltete Datei im Archiv
Das terranische Sonnensystem einfach in "Gatas" umzubenennen war natürlich etwas billig. Bevor die Jülziish meutern, muss das Verth-System mit dem Heimatplaneten Gatas also ordentlich modelliert werden.
Als erstes brauche ich eine Sonne. Wie gehabt nehme ich die vorhandene Datei StarDefs.xml und benenne sie in StarDefs_Blues.xml um.
Alle Sterne bis auf einen werden gelöscht und dieser wird umbenannt und zu einem blauen Riesenstern gemacht:
InternalName - eindeutiger Schlüssel für den Stern DisplayName - Name ObjectType - "Star" Type - Typ des Sterns, siehe StarTypes.xsd ArtDefine - Aussehen des Sterns, muss nicht notwendigerweise mit dem Sternentyp übereinstimmen. Ein Typ YellowStar lässt sich mit dem Aussehen eines BlueStarArt kombinieren.
Das Verth-System hat 14 Planeten - das wären zuviele auf der Karte, aber einige davon lassen sich umsetzen.
PlanetDefs.xml -> kopieren, umbenennen zu PlanetDefs_Blues.xml und Inhalte löschen:
InternalName - Eindeutiger Schlüssel für den Planeten DisplayName - Name PlanetType - Dead, Habitable, Uninhabitable, GasGiant siehe StarSystemTypes.xsd PlanetClass - Klasse des Planeten (0 ist unbewohnbar) PlanetTrait - Optional, kann einen Sonderplaneten beschreiben gemäß PlanetTraitDefs.xml. Beispielsweise Extremwelten wie Eisplaneten "FrozenWorld" oder Welten mit Nahrungsüberfluss "BreadBasketWorld" DisableColonizationEvent - Optional, kann Event bei der Besiedelung verhindern. Wird üblicherweise bei Planeten im Heimatsystem gesetzt. ArtDefine - Aussehen des Planeten wie Kontinente etc. Zulässige Werte stehen in PlanetArtDefs.xml. Es gibt aber noch andere wie TempOKPlanet02 - keine Ahnung wo die definiert sind.
Sonne und Planeten gibt es - jetzt müssen sie nur noch in die korrekten Umlaufbahnen gebracht werden.
StarSystemDefs.xml -> kopieren, umbenennen zu StarSystemDefs_Blues.xml und löschen:
InternalName - Eindeutiger Schlüssel für das Sternsystem DisplayName - Anzeigename Description - Beschreibung OrbitLane - Umlaufbahn - Werte aus StarSystemTypes.xsd: "Star", "DeadZone" (Unbewohnbare Zone nahe am Stern), "HabitableZone" für bewohnbare Systeme, "OuterZone" weit draussen BodyType - legt fest ob es sich um einen Stern, einen Planeten oder Asteroiden handelt. Auch Doppelsternsysteme sind möglich "BinaryStar" - Werte aus StarSystemTypes.xsd BodyDef - Verknüpfung zu Werten aus PlanetDefs.xml oder StarDefs.xml
Fertig ist das Sonnensystem!
Jetzt noch den Blues zuweisen in FactionDefs_Blues.xml:
Und wie immer noch die Texte schreiben. Ich könnte sie in die existierende Textdatei einfügen, habe aber eine eigene für Sterne und Planeten angelegt StarsPlanetsTexts_Blues.xml
Code:
<StringTable>
<Label>VerthSystem_Name</Label>
<String>Verth</String>
</StringTable>
<StringTable>
<Label>VerthSystem_Dec</Label>
<String>The Jülziish home system.
Habitable worlds Class 11
and 4.
1 Frozen, 2 Dead worlds and 1 Asteroid Chain.</String>
</StringTable>
<StringTable>
<Label>Verth_Name</Label>
<String>Verth</String>
</StringTable>
<StringTable>
<Label>Fryjund_Name</Label>
<String>Fryjund</String>
</StringTable>
<StringTable>
<Label>Gatas_Name</Label>
<String>Gatas</String>
</StringTable>
<StringTable>
<Label>Gytüll_Name</Label>
<String>Gytüll</String>
</StringTable>
<StringTable>
<Label>Alpasim_Name</Label>
<String>Alpasim</String>
</StringTable>
<StringTable>
<Label>Bnaypüsh_Name</Label>
<String>Bnaypüsh</String>
</StringTable>
Zitat von Franz Marc, deutscher Maler, Mitbegründer der Künstlergemeinschaft »Blauer Reiter«
Blau ist die einzige Farbe, bei der ich mich wohl fühle.
Was liegt also näher als den Blues eine blaue Farbe auf der Karte und im UI zu verpassen?
Problematisch nur, dass die Terraner in den Grundeinstellungen ebenfalls einen Blauton nutzen. Also muss eine neue Farbvariante her.
Die ColorDefs.xml wird in den .\Core Ordner kopiert und umbenannt zu ColorDefs_Blues.xml
Dann gebe ich den Blues ein reines Blau, den Kriegsnebel mache ich etwas heller als gewöhnlich mit einem Blaustich.
Farben werden als RGB-Werte definiert.
Natürlich würde ein einziger Eintrag für all die identischen Blautöne ausreichen. Aber vielleicht muss ich später zwischen der Farbe der Rasse, Karte und UI unterscheiden.
Also lege ich dafür verschiedene Einträge an, alle mit demselben Farbton:
Ich aktiviere die Debuggingkonsole (mit Taste ö) und entferne den Nebel des Grauens mit "fow".
Dann lasse ich die Blues vollautomatisch gegen die Terraner spielen (mit "soak"). Mich interessieren momentan ja nur die Farben und da will ich nicht selber klicken.
Nach 50 Zügen sind meine Blues den Terranern begegnet. Die Farben lassen sich gut unterscheiden, sowohl auf der Hauptkarte als auch in der Minimap:
Aber überlebensfähig werden unsere Blues nicht sein: Schon nach 50 Runden und nur 4 Planeten liegt die Zufriedenheit auf allen Planeten unter 20.
Die Terraner haben zu dieser Zeit ebenfalls 4 Planeten, aber eine Zufriedenheit zwischen 60 und 100.
Wenn es bei dem Malus auf Zufriedenheit für Blues bleiben soll, dann muss ich wohl die KI-Prioritäten verändern.
In Verbindung mit dem beschleunigten Wachstum der Blues auch noch die KI-Priorität auf Wachstum zu stellen war wohl zu viel des Guten. Die Blues haben zu diesem Zeitpunkt schon die 1,6fache Bevölkerung verglichen mit den Terranern.