Kleanthes´ Patching for Dummies
(like himself)
1. Überblick über die Dateien
Um patchen zu können, muss man wissen, was die einzelnen Dateien bedeuten bzw. welche Inhalte sie besitzen. Obwohl auf genauere Details in den einzelnen Kapiteln noch eingegangen werden wird, will ich hier deshalb erst einmal einen kurzen Überblick über die einzelnen Dateien geben:
Für den Anfang ist es wichtig zu verstehen, wie die Index-Files funktionieren. Da die einzelnen Einträge im .mul File keine feste Länge haben (je nach Bild ist eine Graphik nun mal größer oder kleiner) gibt es die idx-Dateien, die man etwa mit einem Inhaltsverzeichnis vergleichen kann. In diesen Index-Dateien hat jeder Eintrag exakt die Länge 12 Byte. In diesen 12 Byte wird gespeichert, wo im entsprechenden Mul-File die Graphik zu finden ist. Um beispielsweise die Graphik mit der ID 123 zu finden, schaut der Client in der Index-Datei, an der Stelle 12*123 nach, liest dort die 12 Byte aus, in denen eben gespeichert ist, wo in der .mul Datei sich diese Graphik befindet. Mit diesem Wissen kann der Client nun aus der .mul Datei die Graphik laden. Das ist schon das große Geheimnis der Index-Files. Wo die Daten in den .mul Files also genau liegen, kann man also nur anhand des entsprechenden Index-Files herausfinden, da die Daten innerhalb des .mul Files absolut zufällig verteilt sein können.
1.1. Anim*.mul / Anim*.idx
1.2. Animdata.mul
1.3. Art.mul / Artidx.mul
1.4. GumpArt.mul / GumpIdx.mul
1.5. TexMaps.mul / TexIdx.mul
1.6. Tiledata.mul
1.7. Speech.mul / TexIdx.mul
1.8. VerData.mul
1.9. Cliloc.*
1.10. *.def
Diese Dateien enthalten die Animationen für anziehbare Gegenstände (Kleidung, Rüstung, Waffen, Lampen, etc.) und alle Körper (Monster, Mensch, Elf, etc.). Die .mul Dateien enthalten die eigentlichen Animationen, während die .idx Dateien der dazugehörige Index sind.
Die Dateinummern zeigen, aus welcher Version die Animationen stammen:
Anim - (ohne Nummer) Alles bis „Third
Dawn“ (2001)
Anim2 - „Lord Blackthorne´s Revenge” (LBR, 2002)
Anim3 - „Age of Shadows” (AOS, 2003)
Anim4 - „Samurai Empire” (SE, 2004)
Anim5 - „Mondain´s Legacy” (ML, 2005)
Für die Animationen sind auch die Dateien BodyConv.def und Body.def wichtig, dazu aber später mehr.
Die Animdata.mul enthält Definitionen für animierte Items, also Animationen die nicht extra eingepatcht werden, sondern durch mehrere „normale“ Itembilder gebildet werden, die einfach nacheinander gezeigt werden. Hierzu gehören zum Beispiel Kerzen, Wassereffekte, Fallen, Feuer, etc. Die Datei enthält also keine eigenen Bilddaten, sondern nur Informationen darüber, wann (also bei welcher ItemID) anstatt einer normalen Graphik eine Serie von Graphiken in einer Endlosschleife angezeigt werden sollen.
Die Art.mul enthält also die Graphiken von Gegenständen und Bodenplatten, nicht aber Gumps oder „echte“ Animationen (Kleidung, Monster, etc.).
1.4. GumpArt.mul / GumpIdx.mul
Gumps sind Bilder, die InGame „zusammengesetzt“ werden. Bestes Beispiel ist hierfür das Paperdoll, bei dem es ein Gump für den Rahmen gibt, eines für jeden Button, eines für den (nackten) Körper, eines für jedes Kleidungsstück, etc. – und all diese Bilder werden zusammengesetzt und angezeigt.
Es gibt aber auch andere Gumpbilder, die primär dazu verwendet werden, Dialogfenster darzustellen, zum Beispiel wenn ihr ein Handwerker-Menu öffnet, dann besteht dieses aus div. verschiedenen Gump-Bildern.
Manche Gumps (wie das Paperdoll) sind schon im Client definiert, für diese kommt nur noch vom Server eine Info, welche Kleidung ihr gerade tragt, etc. Andere Gumps (wie die Handwerksmenus) werden vollständig vom Server definiert, dieser schickt dann alle entsprechenden Gump-Nummern an den Client.
Hier werden Texturen (siehe Wikipedia: Textur gespeichert. Diese werden anstatt der entsprechenden Maptiles verwendet, wenn das entsprechende Tile gedehnt oder verzerrt werden müsste, zum Beispiel bei einem Hügel. Solange das Tile nur flach in der Gegend herumliegt, wird also das Maptile aus der Art.mul verwendet, sobald es aber gedreht, gedehnt, etc. werden soll, wird die entsprechende Textur verwendet und angepasst.
Die Tiledata.mul enthält zusätzliche Informationen über die Art-Graphiken. Auch hier wird zwischen „Map“- und „Static“-Art unterschieden. Generell werden in der Tiledata der Name einer Graphik und einige Optionen und „Flags“ (Schalter) festgelegt.
Für Map-Art wird in der Tiledata festgelegt, ob ein Tile z.B. unpassierbar ist (dann erlaubt der Client gar nicht erst, dass es betreten wird), flüssig (z.B. Meere und Flüsse), etc. Auch wird hier festgelegt, welche Textur (siehe ...) für welches Maptile verwendet werden soll.
Für Static-Art wird in der Tiledate wesentlich mehr definiert, zum Beispiel ob es ein tragbarer Gegenstand ist oder ob man durchsehen kann, ob man ihn stapeln kann, etc.etc.
Die Speech.mul enthält Schlüsselwörter, die der Client schon selbst erkennt, in verschiedenen Sprachen. Zum Beispiel, wenn ihr „kaufen“ sagt, erkennt der Client dies und schickt dem Server zusätzlich zu eurer Nachricht auch gleich die Information, dass sich das Schlüsselwort „kaufen“ in dem Text befindet. Dies erspart dem Server die Notwendigkeit, eure Texte selbst nach Schlüsselwörtern zu durchsuchen.
Die Verdata.mul war bis zur Version „Age of Shadows“ dazu gut, verschiedenste Dinge einzupatchen. Da diese Datei dadurch aber unverhältnismäßig groß wurde und außerdem von neueren Ultima Online Versionen gar nicht mehr geladen wird, wird davon abgeraten, diese Datei noch für irgendetwas zu verwenden. Patcht eure Sachen lieber gleich anständig in die entsprechenden Dateien ein. Methoden um in die Verdata zu patchen werden deswegen hier auch nicht besprochen.
Cliloc heißt „Client Localization“, denn diese Dateien dienen dazu, Texte in verschiedene Sprachen zu übertragen. Hierfür hat jeder Text eine eindeutige ID und der Server muss nur noch diese ID schicken und je nachdem, welche Sprache man eingestellt hat, holt sich der Client den Text aus der entsprechenden Datei. Wenn ein Eintrag z.B. in der dt. Datei nicht vorhanden ist, nimmt er standardmäßig jenen aus der englischen Datei.
Natürlich funktioniert das nur bei jenen Texten, die vom Server als Cliloc-ID übertragen werden, wenn der Server einen Text eben als Text schickt, wird er natürlich nicht übersetzt. Ein Beispiel: Wenn der Server die Nummer 1049531 sendet, zeigt der Client den Text „You attempt to calm your target, but fail.“ an – oder eben eine Übersetzung davon, wenn sich so eine findet. Wenn der Server die Nachricht „You attemp to calm your target, but fail.“ komplett als Text sendet, kann der Client diese natürlich nicht übersetzen, sondern zeigt sie genau so an.
Die Def-Files sind einfache Textdateien, in denen manuell einige Veränderungen eingestellt werden können, also zum Beispiel bereits im Client gefärbte Items und ähnliches. Es lassen sich damit auch einige Kleinigkeiten ändern, ohne dass man in den .mul Files patchen muss.