Hallo,
ich hatte schon lange daran gedacht die rote Magierrobe von Amori blau umzufärben, weil es ja diesen blauen Mantel im Magierturm in Kapitel 5 gibt, aber nichts anderes dazu, Bisher ist das daran gescheitert, dass ich keine Ahnung hatte, wie man das lästige manuelle Umfärben von allen Einzelbildern mit vertretbarem Aufwand hinbekommen kann. Nun habe ich einen Weg gefunden, wie man das gut automatisieren kann. Ich möchte das Wissen hier teilen, auch damit es für mich persistent ist, falls ich dasselbe noch mal machen will. ![]()
Zutaten
Man braucht:
- POXMaker Tools: Pox maker tools
- POXConvert: PoxConvert
- Python: https://www.python.org/
- Einen Rechner oder eine Virtuelle Maschine mit Windows 7 abwärts
- ggf. weitere Modding-Tools, um Items ins Spiel zu bringen, nachzubearbeiten
Anleitung
1. Schritt: Ordner vorbereiten
Zunächst erstellt man am besten einen neuen Ordner und benennt ihn so, wie das neue Item heißen soll. Darin legt man wiederum neue Ordner an für Inventory und Layered.
In beiden Ordnern wird eine leere Text-Datei angelegt und so benannt: <Item-Name>.ini.
Am Ende sollte es also so eine Struktur geben:
- Arbeitsverzeichnis
- BlueArcaneShirt
- Inventory
- BlueArcaneShirt.ini
- Layered
- BlueArcaneShirt.ini
- Inventory
BlueArcanePant
...
- BlueArcaneShirt
2. Schritt: Template-Item auspacken
Man benötigt eine .pox-Datei für das Inventarbild und eine .pox-Datei für die Animation ingame. Diese befinden sich hier:
- Inventory: <SoA-Dir>/ArtLib/Ressources/Engine/InventoryImages
- Layered: <SoA-Dir>/ArtLib/Ressources/Engine/LayeredImages/HumanMaleLayers
Man nimmt das Tool PoxConvert und konvertiert dann nacheinander das Inventarbild und die Animation.
Zunächst kopiert man sich den Text vom Ini-Tab weg und fügt ihn in die neu angelegten Ini-Dateien hinein.
Inventarbild:
Layered:
[HEADER]
FileName=RedArcaneShirt.gif
GameClass=Character
ValidLayers=chest1,chest2,chest3,outer
LayeredParts=Yes
Blend=None
BlendAmount=0
UseLighting=Vert
TransparentColor=16776960
ImagePacking=IndividualFrames
Highlightable=Yes
CollisionHeight=101
CollisionOffset=74
CollisionRadius=13
Shadow=Complex
ShadowColor=0
FrameMultiplier=2
ImageWidth=148
ImageHeight=130
EditorImage=21
GameImageFrame=288
Actions=Stand,Attack1,BowAttack,Cast,Pain,Death,Walk,Run
...
Display More
Die rot markierten Stellen müssen durch den Namen des neuen Items ausgetauscht werden.
Die Zeile "TransparentColor" muss auch in die .ini-Datei des Inventarbilds eingefügt werden.
Dann ändert man unter "Options --> Background Color" die Hintergrundfarbe auf cyan (RGB: 0, 255, 255, Hex: #00FFFF). Anschließend geht man auf die Schaltfläche "Export Frames" und wählt als Zielordner den oben angelegten Ziel-Ordner aus. Dann kann man zusehen, wie das Tool nacheinander alle Frames durchgeht und als einzelne bmp-Dateien in den Zielordner anlegt.
Es gibt einen Bug, dass das Tool den ersten Frame nicht exportiert. Statt 360 Bilder entstehen nur 359 Bilder im Zielordner. Um den ersten Frame zu gewinnen macht man einen Screenshot vom ersten Frame, öffnet diesen in Paint, Paint.net oder einem anderen Programm. Dann schneidet man das Bild passend zurecht. Die Länge und Breite kann man entweder in der unteren Zeile in PoxConvert ablesen oder aus der .ini-Datei entnehmen. Das Bild muss als .bmp abgespeichert werden. Damit das Zusammenfügen später klappt, sollte es auf dem Suffix _0 enden. Farbtiefe ist erstmal egal, der Standardwert passt schon.
Ist man mit diesem Schritt durch, sollten die Ordner von oben so aussehen:
- BlueArcaneShirt
- Inventory
- BlueArcaneShirt.ini
- BlueArcaneShirt_0.bmp
- BlueArcaneShirt_1.bmp
- Layered
- BlueArcaneShirt.ini
- BlueArcaneShirt_0.bmp
- ...
- BlueArcaneShirt_359.bmp
- Inventory
Alle Bilder sollten einen cyan-Farbenden Hintergrund haben.
Schritt 3: Items umfärben
Normalerweise müsste man jetzt das Grafiktool seiner Wahl (z.B. paint.net oder GIMP) auspacken und jedes Bild einzeln umfärben. Zum Glück kann Python das auch, sodass man die ganze Aufgabe automatisieren kann. Dazu muss zunächst über pip das Paket "pillow" installiert werden:
Dann kann man einfach folgendes Skript benutzen, um die Items umzufärben:
Das Skript macht viele Dinge:
- Einen hue-shift auf das ganze Bild anwenden
- Bild grau machen und eine andere Farbe drüberlegen
- Aufhellen/Dunkler machen (Um schwarze/weiße Items zu erzeugen)
- Gamma-Wert verändern, um Glanz zu erhalten
- Bilder mit schwarzem Hintergrund ignorieren (Schatten des Inventory-Bilds)
- Cyan-Hintergrund wiederherstellen
Über die Parameter kann man steuern, was genau gemacht werden soll. Hat man im vorhergehenden Schritt bereits alle zu färbenden Items vorbereitet, kann man das Skript einfach nacheinander für alle Ordner ausführen.
Schritt 4: Eine .gif erzeugen
Dazu benötigt man das Tool BPMWork.
Man öffnet das Tool und wählt die als "INI-Properties-File die .ini-Datei aus. Im Hauptfenster fügt man alle .bmp-Dateien im Zielordner hinzu. Der Name der entstehenden Datei soll <ItemName>.gif sein, bei mir also BlueArcaneShirt.gif. Das wiederholt man für das Inventar-Bild und die Animation.
Die Option "transparent" ist verbuggt, die bitte nicht benutzen. Wenn man den "Loop" Schalter anwählt, funktioniert es. Ich hab nicht ausprobiert, was passiert, wenn man das weglässt.
Schritt 5: Eine .pox erzeugen
Hier benötigt man den Windows 7 (oder niedriger) Rechner und das Werkzeug Gif2Pox. Es reicht aus, wenn man z.B. über einen USB-Stick nur die entstandenen .gif-Dateien auf den Windows-7-Rechner zieht.
Zunächst muss man die Farbtiefe des Rechners auf 16bit umstellen. Das ist in Windows 7 noch möglich, alle nachfolgenden Versionen von Windows arbeiten mit höheren Farbtiefen. Das ist der Grund warum man einen alten Rechner, bzw. eine VM für diesen Schritt braucht, weil das oben genannte Tool mit der System-Farbtiefe arbeitet.
In Gif2Pox wählt man den zu konvertierenden Ordner aus. Das Tool sammelt sich dann selbst alle .gif-Dateien aus diesen Ordnern zusammen und macht daraus .pox-Dateien. Es ist also emfpehlenswert schon alle .gif-Dateien zusammenzuhaben, wenn man diesen Schritt angeht.
Schritt 6: Die Items in die Datenbank hinzufügen
Dazu benötigt man die Items.db und die xref.db.
Zunächst fügt man die erstellten .pox-Dateien in die entsprechenden Ordner hinzu (siehe Schritt 2)
Dann kopiert man sich in den Datenbank-Dateien den Eintrag von dem Quell-Item und fügt sie als neue Zeile hinzu und tauscht dann einfach alle Bezeichner gegen das neu erstellte Item aus.
In der Items.db kann dann noch an den Werten des neuen Items heraumgeschraubt werden, das kann man auch über das Tool "ItemMaker" erledigen.
Schritt 7: Die Items ins Spiel bringen
Zu Testzwecken nehme ich mir dazu die Datei corvus1.cnv aus dem "conversations" Ordner. Dort passt man den letzten Dialog so an:
[Corvus6]
Say=Das wohl kaum. So wie ich General Roth kenne, hat er den Kommandant der Listen bereits gebeten, dich zu bewerten. ....
script=player.additem(comletter);player.additem(BlueArcaneShirt);
Adventure=ch1-00;
AddQuest=ch1-00;
RspDflt=Das mache ich, Bruder. Mögen dich die Geister behüten. Wir reden weiter, wenn du wieder da bist.
Damit sorgt man dafür, dass Corvus einem zusammen mit dem Offizierspatent das neue Item aushändigt. So kann man im Spiel testen, ob es so funktioniert wie gewünscht.
Wie ihr das Item dann final ins Spiel bringt ist dann euch überlassen.