Eine wichtige Sache gibt es beim Rumbasteln mit
Tiles und
Walls zu beachten. Wie ihr aus dem Spiel ja wisst, kann euer Held nicht über bestimmte Flächen der Karte (Lava, Flüsse) laufen und auch nicht auf gespenstische Weise durch Wände hindurch. Dies wird durch die sogenannte
Walkable-Info realisiert. Drückt im Editor mal die Space-Taste und ihr schaltet diese ein. Ein weiterer Druck liefert euch die Detailansicht, in der die einzelnen
Tiles noch genauer aufgeschlüsselt werden.
Jede
Tile setzt sich nochmals aus 5 mal 5 "Unter-
Tiles" zusammen. Diese entstehenden 25 Kästchen könnt ihr euch quasi als die möglichen Standorte der Charaktere auf einer
Tile vorstellen. Wenn ihr Euch im Spiel bewegt, läuft euer Held also von der
Sub-Tile einer
Tile zu einer anderen
Sub-Tile einer anderen
Tile.
Nun kann jedes dieser 25 entstehenden Kästchen eine unterschiedliche
Walkable-Einstellung besitzen. Die erweiterte Darstellung (also nach zweimal Space-Taste drücken) zeigt Euch, was in einer
Sub-Tile erlaubt ist und was nicht. Es gibt zum Beispiel die Möglichkeit dass die
Sub-Tile nur das Hindurchlaufen des Charakters behindern, dies gälte z.B für alle Wände. Dann gibts welche, die für Schüsse nicht durchdringlich sind, oder das Überspringen mit dem Barbaren-Skill Leap/Leap-Attack verhindern.
Wenn ihr also Eure Karten baut, vergesst nicht zu überprüfen, ob Euer Charakter am Ende auch überall laufen kann wo er es soll. Es ist ziemlich frustrierend ne Karte zu basteln und die Fußboden-
Tiles akribisch auszulegen, nur um hinterher festzustellen, dass man da gar nicht drüber laufen kann.
Anmerkung: Bei den meisten Floor-
Tilesets gibt es ziemlich am Anfang im Ausahlmenü welche, die keinerlei Einschränkungen haben. Wenn ihr Euch Karten anguckt, werdet ihr feststellen, dass große Gebiete einzig und allein mit diesen Dingern ausgelegt sind. Was aber im Editor eintönig und sich wiederholend aussieht, wird nachher im Spiel anders aussehen. Diese Tiles sind nämlich nur repräsentativ für einen Pool von anderen Tiles, aus denen nachher im Spiel der Fussboden gebaut wird.
Also keine Angst, wenn es im Editor eintönig aussieht, muss es nicht unbedingt im Spiel auch so aussehen.
-------------------------------------------------------------------------------
So, nun wisst ihr bereits, wie man die Wände und Fussboden-Grafiken verändert und damit fast das gesamte Level umbauen kann. Zu Fragen wie "Wie kann ich die Kartengröße verändern?", "Wie kann ich die Tiles aus anderen Karten verwenden?" oder "Wie kann ich die Anzahl Layer in einer Karte erhöhen?" komme ich später.
Zunächst gibt es noch eine Sache, die beim Editieren der Karten wichtig ist:
Objekte. Das sind Dinge, mit denen ihr interagieren könnt, oder die besondere Effekte haben. Beispiele fürs Erstere sind z.B. die Menschen in der Stadt, Schatztruhen oder auch Wegpunkte. Beispiele fürs zweite wären etwa Fackeln, die die Umgebung beleuchten oder Feuer auf dem Boden, die euren Charakter verletzen, wenn er durch sie hindurchläuft.
Öffnet nochmal die Karte von Tristram und schaltet in den Objekt-Modus (einmal die Tab-Taste drücken). Ihr werdet feststellen, dass der Bildschirm regelrecht überflutet ist mit
Objekten. Größtenteils handelt es sich dabei um Feuer, teilweise findet ihr aber auch andere Sachen, z.B. den Spawnpoint von Griswold (also die Stelle der Karte, an der Griswold erstellt wird, wenn Euer Char in seine Nähe kommt), die Spawnpoints einiger Champion-Monster, Cains Käfig (Cain´s Gibbet) oder aber Wirts Leiche. All dies sind
Objekte.
Das Editieren dieser läuft im Grunde genauso wie bei Wänden und Fussböden. Mit linksklicken selektiert ihr sie (teilweise is das etwas hakelig), Strg+X löscht und Strg+C kopiert. Um neue
Objekte einzufügen, drückt ihr die Einfg-Taste (ja, rechts oberhalb von Return, noch ein Stück, nicht die da, DIE DA, über Entf ^^). Nun wird ein
Objekt dort in die Landschaft gestellt (meistens Gheed). Ein Rechtsklick darauf öffnet Euch ein Auswahlmenü, in dem ihr nun was Passendes aussuchen könnt.
Unter der Spalte Type 1 findet ihr die meisten NPCs wieder, auch einige andere Sachen sind da mit drin z.B. die Spawnpunkte von Superunique-Monstern. Diese könnt ihr problemlos in Karten jedes Aktes setzen (z.B. Charsi in die Harrogath-Karte). Anders sieht es aus mit Objekten vom Type 2, die sind aktabhängig und können nur in den passenden Karten gesetzt werden. Ihr werdet vielleicht bemerken, dass sehr viele ein "?" als Beschreibung haben, das kommt daher, dass viele noch nicht bekannt sind (wer Spaß dran hat, kann ja mal experimentieren
).
Noch ein Hinweis: Vermeidet es besser, besondere
Objekte mehrfach zu setzen, Wegpunkte etwa. Könnte sein, dass das zum Crashen des Spiels führt.
-------------------------------------------------------------------------------
Ihr habt nun also erfolgreich Tristram umgebaut, abgespeichert und seid zufrieden mit Eurer Arbeit, aber wie krieg ich denn jetzt die neue Karte in mein Diablo 2 Spiel?
Ganz genauso wie mit allen anderen Dateien. Ihr fügt sie kurzerhand mit MPQ2K oder einem anderen Programm in die Patch_d2.mpq ein. Hinweis für die Pfade: Die Karten sind unter
data\global\tiles versteckt, dann geht´s weiter mit
..\act1\..
..\act2\..
..\act3\..
..\act4\..
..\expansion\..
je nachdem, in welchen Akt eure Karte gehört und dann kommt noch ein Unterordner (etwa "town" für das Jägerinnen-Camp). Die kompletten Pfade stehen übrigens in der
lvlprest.txt, dort einfach nachgucken, wenn ihr nicht wisst wohin mit der Datei.
-------------------------------------------------------------------------------
Nun wisst ihr das Wesentliche zum eigentlichen Editieren der Karten und ich empfehle, zur Vertiefung ein bissel damit zu üben.
Weiter gehts mit eher organisationstechnischen Aspekten, sprich:
- wie kann ich andere Karten als den vorgegebenen öffnen?
- wie kann ich mehrere Karten gleichzeitig öffnen?
- wie kann ich andere Tiles für meine Karte verwenden?
- wie kann ich die Anzahl Layer erhöhen? (benötigt Iselveo´s Editor)
- wie kann ich die Kartengröße verandern? (benötigt Iselveo´s Editor)
-------------------------------------------------------------------------------
Wie kann ich andere Karten als den vorgegebenen öffnen?
Zunächst braucht ihr natürlich erst einmal die passende .ds1 Datei zur entsprechenden Karte. Am besten ihr schaut dazu in der
lvlprest.txt nach, dort steht in der äußersten linken Spalte eine Kurzbeschreibung der Karte und weiter rechts folgen in einigen Spalten der Name und Pfad der passenden .ds1. Häufig findet ihr für ein Gebiet mehrere Dateien vor. Das liegt daran, dass die meisten Gebiete bei jedem Spielstart anders aussehen, also gibt es für ein und dasselbe Areal mehrere Varianten. Das fünfte Level des Turms der Gräfin etwa: Es gibt eine Variante mit Ausrichtung des Levels nach nordost und eine nach nordwest. Möglich sind prinzipiell bis zu sechs Varianten pro Level, also könntet ihr theoretisch bis zu sechs verschiedene Varianten des Turmlevels erstellen.
Aber zurück zum eigentlichen Problem: Ihr habt nun also die entsprechende .ds1 extrahiert und im Ordner des Leveleditors abgespeichert. Der nächste Schritt besteht darin, eine neue .bat-Datei zu erstellen. Dazu erzeugt ihr einfach eine neue .txt-Datei und benennt diese in .bat um. Der Dateiname ist eigentlich egal, wählt einen passenden, damit ihr wisst, welche .bat welche Karte öffnet. Alternativ könnt ihr allerdings auch eine der bereits vorhandenen .bats umändern, braucht also keine neue erstellen. Hängt lediglich davon ab, wie ihr das Ganze organisiert: für jede .ds1 eine passende .bat oder aber nur eine .bat, die für die jeweilige Karte angepasst wird.
Als nächstes müssen wir die Aktion, die die .bat ausführt bestimmen. Dazu rechtsklickt ihr auf sie und wählt "Bearbeiten". Unabhängig davon, ob ihr eine bestehende .bat geöffnet habt, oder eine neue erstellt habt, tragt ihr nun folgendes ein:
@echo off (hatte ich oben schonmal erwähnt, einfach so hinschreiben)
win_ds1edit <Name der zu öffnenden Karte> Parameter 1 (siehe unten)
Parameter 2 (siehe unten)
> debug_<Kartenname>.txt
Friemeln wir das mal auseinander:
win_ds1edit <Name der zu öffnenden Karte> ist die Anweisung, mit dem Programm win_ds1edit die Karte mit dem nachfolgenden Namen zu öffnen.
Parameter 1 ist quasi eine Bestimmungszahl, welches Tileset für die Karte verwendet wird. Ihr findet sie in der
lvltypes.txt in der ersten Spalte. Geht einfach zur der Zeile, zu der euer Level gehört und verwendet die Zahl in der Spalte
Id als Parameter.
Beispiel: Sagen wir mal, ihr wollt eines der Harem-Level des Palastes im 2. Akt verändern. Der dazu passende Parameter wäre dann die Nummer 14.
Parameter 2 ähnelt Parameter 1 und bestimmt die Zeile in der
lvlprest.txt. Sucht einfach die Zeile, in der der Dateiname eurer Karte steht und verwendet die Zahl in der Spalte
Def als zweiten Parameter.
Wider das Beispiel Harem-Level: Wir wollen die Datei Harem2.ds1 (das erste Level des Harems, das ohne Monster) öffnen, das wäre also Def 353.
> debug_<Kartenname>.txt sorgt lediglich dafür, dass ein Fehlerprotokoll erstellt wird, indem ihr alle vom Programm abgearbeiteten Schritte und eventuell aufgetretene Fehler nachvollziehen könnt. Der Name kann schnurzegal sein.
Das ist Alles. Die .bat speichern und dann starten, dann sollte das Level korrekt geladen werden. Im Grunde ganz einfach, ihr müsst nur eben bei den Parametern sorgfältig sein, wenns nicht klappt liegt es meistens daran.
Als Beispiel nochmal den kompletten Eintrag in die .bat zu Öffnen der Datei
Cathy3.ds1 (Kapelle des Klosters im ersten Akt):
@echo off
win_ds1edit Cathy3.ds1 9 257 > debug_Cathedral.txt
-------------------------------------------------------------------------------
Wie kann ich mehrere Karten gleichzeitig öffnen?
Mitunter kann es sinnvoll sein gleich mehrere Karten parallel zu bearbeiten, z.B. weil ihr Elemente der einen Karte in die andere übernehmen wollt oder weil ihr die andere zum Vergleich braucht. Auch für diesen Fall ist Ds1Edit gerüstet und erlaubt euch, bis zu zehn verschiedene Karten gleichzeitig zu öffnen.
Zu diesem Zweck brauchen wir eine neue Datei, diesmal eine .ini. Erstellt sie wie ihr schon die .bats erstellt habt, einfach ne neue .txt Datei einfügen und dann in .ini umbenennen. Das ganze natürlich im Editor-Verzeichnis. In die .ini hinein tragt ihr dann die zu öffnenden .ds1 Dateien mit den dazugehörigen Parametern. Das Ganze sieht also wie folgt aus:
<Param1> <Param2> Name der .ds1 Datei
wobei <Param1> wie im vorhergehenden Abschnitt beschrieben aus der
lvltypes.txt kommt und <Param2> aus der
lvlprest.txt. Das Ganze könnte also wie folgt aussehen:
2 43 FallCmp5.ds1
2 43 FallCmp6.ds1
2 43 FallCmp7.ds1
2 44 FallCmpBish.ds1
20 529 DockTown3.ds1
Habt ihr alle dateien, die ihr öffnen wollt drin stehen, speichert das Ganze ab und öffnet nun eine .bat (entweder eine neue, oder eine bereits bestehende). Der Eintrag dort muss nun wie folgt aussehen:
@echo off
win_ds1edit <Name der .ini> > debug.txt
D.h., win_ds1edit öffnet nun nicht mehr eine einzelne .ds1, sondern alle, die in der .ini stehen. Probiert es mal aus. Im Editor selbst schaltet ihr über die Zahlen-Tasten (1-0) zwischen den einzelnen Karten hin- und her.
Beim Kopieren zwischen den Karten ist Vorsicht geboten: Stimmen die Parameter (in der .ini) nicht exakt überein, kann es passieren, dass Teile des Kopierten verschwinden, da nicht alle Karten diesselben Tiles verwenden. Mehr zu dieser Thematik (andere Tiles für die Karten) folgt in den nächsten Abschnitten.
-------------------------------------------------------------------------------
Wie kann ich andere Tilesets in meiner Karte verwenden?
Nun schauen wir uns mal an, wie wir die Tiles aus anderen Levels verwenden können. Das Ganze ist etwas kompliziert, wenn ihr es jedoch ein paar mal gemacht habt, ist es halb so schlimm.
Desweiteren gleich vorneweg noch eine weitere Anmerkung: Es ist im Allgemeinen nicht möglich, Tiles aus anderen Akten ohne unschöne Farbeffekte zu importieren. Der Grund dafür ist, dass D2/LoD für jeden Akt eine eigene 256-Farben Palette verwendet. Wenn ihr jetzt Tilesets aus anderen Akten verwendet, werden diesen durch die unterschiedliche Palette andere Farben zugeteilt als vorgesehen, was mitunter nicht wirklich toll aussieht. Bei einigen klappt es recht gut (Akt5 Tiles sehen auch im 1.Akt passabel aus), bei anderen weniger (Akt4 Tiles im 1. Akt - die kriegen pinkfarbene Flecken). Zur Not kann man die .dt1 Dateien ändern (in denen sind die Grafiken der Tiles abgelegt) um das hinzukriegen, darauf gehe ich aber an dieser Stelle nicht ein.
Beginnen wir einfach mal. Schnappt euch die Datei
lvltypes.txt und öffnet sie. Darin steht nun, welche .dt1s für welches Level verwendet werden. Untereinander seht ihr dort die verschiedenen Leveltypen und jeweils rechts davon in den Spalten File1-31 die verwendeten .dt1s mit ihren Pfadnamen. Aber was sind .dt1 Dateien denn eigentlich?
Wie oben erwähnt enthalten die .dt1s im Wesentlichen die Grafiken, die auf die Tiles gelegt werden - etwa eine Wand oder ein Baum. Zusätzlich ist die "Walkable"-Info dort abgespeichert, d.h. welche Sub-Tile begehbar ist etc. und noch eine Reihe anderer Dinge, die uns aber nicht zu interessieren brauchen. Die Grafiken können sowohl die der Fussböden als auch der Wände sein. Wenn ihr euch den Leveleditor wie einen Lego-Kasten vorstellt, dann sind die .dt1s quasi einzelne Baukästen, von denen jeder bestimmte Bauteile enthält (einer die Bäume, ein anderer Steine usw.).
Wie kriege ich raus, in welcher .dt1 die Tile versteckt ist, die ich brauche? Gute Frage, zu der ich hier wieder Absätze schreiben könnte. Am besten ihr überlegt in welchem Level die Tile auftaucht und probiert dann die in Frage kommenden .dt1s durch. Alternativ könnt ihr Euch Tools runterladen, etwa die DT1Tools (wieder von Paul Siramy) oder aber Cv5.2. Mit beiden könnt ihr Euch die .dt1s direkt angucken. Weitere Infos in den entsprechenden Readme-Dateien.
Wie mache ich nun neue .dt1s für ein bestimmtes Level verfügbar? Ihr ahnt es schon: indem ich die entsprechenden Einträge in die richtige Zeile kopiere. Angenommen ihr wollt die Friedhof-Tiles im ersten Akt auch im Lager der Jägerinnen verbauen, dann kopiert ihr den Eintrag
Act1/Graveyard/graveyrd.dt1 aus der Wilderness-Zeile in eine freie Zelle der Town-Zeile (File 11).
An dieser Stelle wieder ein wichtiger Hinweis: Vermeidet es besser irgendwelche .dt1s zu löschen oder durch andere zu ersetzen - führt in 99% aller Fälle zu Ärger.
Nur wenn ihr Euch absolut sicher seid, dass keine einzige Tile der .dt1 in dem betreffenden Gebiet verwendet wird, könnt ihr sie rausschmeißen.
Hier sind wir nun fertig, speichert die
lvltypes.txt ab und schließt sie.
Als nächstes knöpfen wir uns die
lvlprest.txt vor und jetzt wird es etwas mathematisch.
Sucht zunächst mal die Zeile der .ds1 Datei, die ihr editieren wollt heraus und scrollt ganz nach rechts bis zur Spalte
Dt1Mask. Dort findet ihr nun eine Zahl und wundert Euch, woher die kommt.
Im Grunde ist es recht simpel. Diese Zahl ist eine Summe aus Zweierpotenzen und dient als Maske für die
lvltypes.txt. Genauer gesagt, diese Zahl bestimmt, welche der
File-Spalten in der
lvltypes.txt für die entsprechende .ds1 Datei auch wirklich geladen werden.
Schauen wir uns das mal an:
File1 entspricht einem Wert von 2^0 = 1
File2 entspricht einem Wert von 2^1 = 2
File3 entspricht einem Wert von 2^2 = 4
File4 entspricht einem Wert von 2^3 = 8
File5 entspricht einem Wert von 2^4 = 16
File6 entspricht einem Wert von 2^5 = 32
File7 entspricht einem Wert von 2^6 = 64
File8 entspricht einem Wert von 2^7 = 128
File9 entspricht einem Wert von 2^8 = 256
File10 entspricht einem Wert von 2^9 = 512
File11 entspricht einem Wert von 2^10 = 1.024
File12 entspricht einem Wert von 2^11 = 2.048
File13 entspricht einem Wert von 2^12 = 4.096
File14 entspricht einem Wert von 2^13 = 8.192
File15 entspricht einem Wert von 2^14 = 16.384
File16 entspricht einem Wert von 2^15 = 32.768
File17 entspricht einem Wert von 2^16 = 65.536
File18 entspricht einem Wert von 2^17 = 131.072
File19 entspricht einem Wert von 2^18 = 262.144
File20 entspricht einem Wert von 2^19 = 524.288
File21 entspricht einem Wert von 2^20 = 1.048.576
File22 entspricht einem Wert von 2^21 = 2.097.152
File23 entspricht einem Wert von 2^22 = 4.194.304
File24 entspricht einem Wert von 2^23 = 8.388.608
File25 entspricht einem Wert von 2^24 = 16.777.216
File26 entspricht einem Wert von 2^25 = 33.554.432
File27 entspricht einem Wert von 2^26 = 67.108.864
File28 entspricht einem Wert von 2^27 = 134.217.728
File29 entspricht einem Wert von 2^28 = 268.435.456
File30 entspricht einem Wert von 2^29 = 536.870.912
File31 entspricht einem Wert von 2^30 = 1.073.741.824
Die "Maske" besteht nun aus der Summe der Zahlen der
verwendeten Spalten. Angenommen wir möchten die .dt1s verwenden, die in der
lvltypes.txt in den Spalten File1, File6, File7 und File 13 stehen, dann wäre die Summe folglich:
1 + 32 + 64 + 8129 = 8226
Diesen Wert tragen wir dann in der Spalte
Dt1Mask in der
lvlprest.txt ein.
Noch ein Beispiel: Wie kommt man auf den Masken-Wert 959 in der Spalte "Act 1 - Town 1"? Dazu sehen wir in der
lvltypes.txt in der Zeile "Act1 - Town" nach und stellen fest: Dort gibt es Einträge in File1-6 und File8-10. Demzufolge ist nach Adam Ries
1 + 2 + 4 + 8 + 16 + 32 + 128 + 256 + 512 = 959
Also werden alle dort aufgeführten .dt1 Dateien auch wirklich geladen und verwendet.
Ihr habt sicher gemerkt, dass ich stets das "verwenden" betont habe. Dies hat auch seinen Grund: Zu einem Leveltyp in der
lvltypes.txt können durchaus eine ganze Menge .ds1 Dateien gehören, aber offensichtlich nutzen nur wenige davon wirklich auch alle in der
lvltypes.txt als verfügbar eingestellte .dt1s.
Diese scheinbar umständliche "Maskierung" dient lediglich zur Performance-Verbesserung: Warum sollte auch das Spiel 20 megafette Grafikdateien für jede einzelne .ds1 laden(.dt1s bewegen sich in Dateigrößen von einigen Dutzend kB bis hin zu mehr als 2 MB!), wenn am Ende nur 3 davon auch wirklich benötigt werden. Daher solltet ihr bei euren Maps auch diese Seite betrachten, denn damit kann man unter Umständen die Performance etwas verbessern.
Habt ihr nun also die Werte in der
Dt1Mask entsprechend verändert, wird die
lvlprest.txt abgespeichert und zugemacht. Nun packt ihr beide Dateien (lvltypes.txt und lvlprest.txt) in die Patch_D2.mpq, oder halt direkt ins mod_dir Verzeichnis, wenn ihr denn eines erstellt habt. Falls ihr die Dateien in die Patch_d2 gepackt habt, müsst ihr noch sicherstellen, dass der Editor diese auch lädt (d.h. eventuell den Eintrag in der Ds1edit.ini umändern).
Fertig! Von nun an könnt ihr in den Levels, die ihr in der
lvlprest.txt[/i] entsprechend markiert habt auch andere Tiles verwenden. Falls es nicht klappt und der Editor die Karte nicht lädt, sondern stattdessen das .bat-Fenster die Befehle runterscrollt und den Editor dann beendet, habt ihr bestimmt beim Berechnen des Dt1Mask-Wertes einen Fehler gemacht (is bei mir die Hauptursache). Zur näheren Untersuchung ist auch die debug-Datei enorm nützlich, die euch nämlich genau angibt, an welcher Stelle und warum der Ladevorgang beendet wurde.