Ich selber habe mich bisher nur sehr kurz mit Mods zu Civ beschäftigt, das SDK zum letzten Teil fasziniert mich aber Aufgrund meines Informatikhintergrundes.
Zu Anfang müssen wir erst einmal ein paar Grundlegende DInge klären, den Aufbau von Civ V betreffend.
Im Gegensatz zu allen anderen (jedenfalls mir bekannten) modbaren Spielen basiert Civilization V (im Folgenden C5) auf einer SQL Datenbank.
Und zwar vollkommen, d.h. alle Spielwerte werden in einer datenbank verwaltet. Die XML Dateien , die ihr vielleicht schon gesehen habt sind nichts weiter als eine Konzession an die alten CIv Modder.
Sie beschreiben Veränderungen an der Datenbank, im Spiel selbst werden sie NICHT benutzt. Ihr könntet diese Dateien also ohne weiteres wieder löschen sobald ihr einen Mod das erste mal gespielt habt.
Um dies alles zu verstehen machen wir mal ein paar kurze Definitionen:
SQL: Steht für Structured English Query Language und ist eine Sprache mit deren Hilfe man Abfragen an eine Datenbank stellen kann.
Eine SQL fähige Datenbank ist, grob gesagt, eine Ansammlung von Tabellen mit Spalten und Zeilen. Bevor ich euch jetzt mit relationalen Datenbanken und dem ganzen Theoriegedöns nerve, will ich meinen Datenbankdozenten von der Hochschule zitieren:
Ist wie in Excel, nur viel mehr Tabellen.
Wichtig hierbei ist es, dass jeder Wert nur EINMAL vorkommt.
Beispiel:
In einer Tabelle definieren wir alle Völker. Eines davon ist Deutsch.
In einer anderen Tabelle definieren wir die Eliteunits, dort würde dann beim deutschen Panzer als Volk Deutsch stehen.
Das ist dann aber kein zweiter Eintrag mit derselben Aussage (deutsch), sondern nur ein Link zum eintrag unter Völkern.
Hat den gewaltigen Vorteil, dass wenn ich irgendwann auf die Idee komme das Volk "Deutsch" in "Schlümpfe" umzubenennen, ich dies nur einmal tun muss, nicht tausend mal in hunderten von Tabellen.
SQl ist geichzeitig eine sehr einfach zu erlernende Sprache und hochkomplex. Sie verfügt nur über sehr wenig befehle, im grunde kann man es schon fast auf ca. 10 reduzieren.
Die wichtigsten sind
SELECT , FROM, WHERE,ORDER BY, UPDATE, DELETE, SET und IN.
Wer damit umgehen kann, ist in der Lage in sekundenschnelle weitreichende Veränderungen an der Datenbank vorzunehmen.
Code: Alles auswählen
UPDATE UnitClasses SET MaxPlayerInstances = 0 WHERE Type
IN ("UNITCLASS_SETTLER","UNITCLASS_ARTIST","UNITCLASS_SCIENTIST","UNITCLASS_MERCHANT","UNITCLASS_ENGINEER");
macht z.B. alle oben angeführten Unit Klassen unproduzierbar.
Andererseits kannman damit natürlich auch schön böse Fehler machen.
Um es den Moddern (die ja eher selten Datenbankadmins sind) einfacher zu machen, hat sich Firaxis dazu entschieden, eine zweite manipulationsmöglichkeit anzubieten.
Mit Hilfe von XML Files kann man seine Änderungswünsche beschreiben, das Spiel macht dann beim starten des Mods SQL Befehle daraus und ändert die Datenbank.
XML steht für Extensible Markup Language und bedeutet sowas wie " erweiterte Auszeichnungssprache".
Sehr kryptisch aber das Konzept ist klar: Text wird nach seiner Bedeutung hierarchisch gegliedert. das sind die Auszeichnungen, auf englisch Tags.
Beispiel:
Code: Alles auswählen
<Technologies>
<Row>
<ID>0</ID>
<Type>TECH_AGRICULTURE</Type>
<Cost>20</Cost>
<Description>TXT_KEY_TECH_AGRICULTURE_TITLE</Description>
<Civilopedia>TXT_KEY_TECH_AGRICULTURE_DESC</Civilopedia>
<Help>TXT_KEY_TECH_AGRICULTURE_HELP</Help>
<Era>ERA_ANCIENT</Era>
<Trade>true</Trade>
<GoodyTech>true</GoodyTech>
<GridX>0</GridX>
<GridY>5</GridY>
<Quote>TXT_KEY_TECH_AGRICULTURE_QUOTE</Quote>
<PortraitIndex>0</PortraitIndex>
<IconAtlas>TECH_ATLAS_1</IconAtlas>
<AudioIntro>AS2D_TECH_AGRICULTURE</AudioIntro>
<AudioIntroHeader>AS2D_HEADING_TECH_AGRICULTURE</AudioIntroHeader>
</Row>
</Technologies>
So ein Text sagt uns folgendes: Es gibt eine Struktur(hier: einen Tabelle), die nennt sich Technologies, sie besteht aus Rows(Zeilen).
Eine Row wiederum besteht aus vielen einzelnen Elementen (den Spalteneinträgen ). Das was dannz.B. zwischen <Type> und </Type> steht ist der Wert des Eintrages.
In Zeile eins, und Spalte eins der Tabelle Technologies steht also 0, in Zeile 1, Spalte 2 TECH_AGRICULTURE usw.
Zeile 2 würde dann wieder mit <Row> beginnen und vor dem nächsten </Row> kämen wieder alles Spaltenwerte.
So verstanden? Wenn noch nicht ganz macht es nichts, es wird bald klarer.
XML ist KEINE Programmiersprache und auch KEINE Scriptsprache. Sie ist nur eine für Menschen etwas umständliche, für Maschinen aber optimal lesbare Möglichkeit einen Text zu schreiben.
Wer XML mal in Aktion sehen will, kann einfach mal ein docX Dokument (Office2010) mit 7z aufmachen und sich die entpackten Dateien mit Notepad++ ansehen.
Alternativ kann man sich in so gut wie jedem Browser den Quelltext einen Seite anzeigen lassen. Wenn man dies macht erhält man den HTML Code einer Webseite. Ist zwar nicht GENAU dasselbe, aber sehr nah dran (HTML ist quasi eine unsaubere Abart von XML).
Lua ist eine Skriptsprache (== Programmiersprache für Anfänger). Sie wird benutzt um in C5 Logik zu realisieren.
Logik im Sinne von: Es passiert etwas.
Ich werde vorerst nicht auf Lua eingehen, ist ein wenig zu kompliziert für eine kurze Einführung.
Wenn wir nur neue Techs etc hinzufügen wollen, oder etwas bestehendes verändern benötigen wr es vorerst auch gar nicht.
Wir haben also vorerst zwei Möglichkeiten.
- 1. Die Datenbank direkt verändern.
- 2. Die Datenbank über XML Dateien verändern lassen.
Ich habe mich bei dieser Einführung auf ein wunderbares Dokument von Kael gestützt.
Wer Kael nicht kennt: Er ist sozusagen der Gottvater aller Civ Modder.
Zu finden ist es hier:
http://kael.civfanatics.net/files/ModdersGuide.pdf
Ein weiterer guter Ort für recherchen ist die Civ V Wiki:
http://wiki.2kgames.com/civ5/index.php/Main_Page
WORK IN PROGRESS, GEHT BIS HEUTE ABEND SO WEITER.
Als nächstes schauen wir uns mal die Datenbank an.
Bitte postet erst nachdem ich den Thread freigegeben habe.