Samstag, 30. Dezember 2017

PoE Spielstände manuell editieren...



Seitdem ich Pillars of Eternity vor einer Woche installiert habe, habe ich das dringende Bedürfnis, das Verhältnis zwischen aktiven Zeiten und Erholungsschläfchen von momentan 1:200 auf ein etwas realistischeres Maß - um die 1:50 oder so - zu reduzieren. Daher begann ich im Lauf der letzten Woche, die Spielstände etwas genauer unter die Lupe zu nehmen, um an die wichtigsten Daten heran zu kommen.

Momentaner Wissensstand

Aus unerfindlichen Gründen haben die Skript-Kiddies, die Pillars of Eternity zusammengeklickt haben beschlossen, Spielstände im Gegensatz zu Baldur's Gate (dem Spiel, das Pillars of Eternity krampfhaft zu kopieren versucht, es aber nie einholen wird) nicht wie normale Menschen in einem SAVE-Ordner innerhalb des Spielverzeichnisses abzulegen. Stattdessen verstecken Sie unsere Spielstände lieber in einem obskuren Unterordner in den Untiefen des Windoze-Verhaus von Ordnern und Unterordnern der Users-Hierarchie, damit sie möglichst niemand findet. Bei mir ist das

[Boot-Laufwerk]:\USERS\ADMINISTRATOR\SAVED GAMES\PILLARS OF ETERNITY\

was - je nach Installation und Windoze-Version - statt [ADMINISTRATOR] auch [Mein Benutzername] sein kann.

Dieser Ordner enthält alle gespeicherten Spielstände - sowohl die vom Benutzer angelegten als auch die zwangsweise aufgedrückten, die man vor dem Speichern seiner regulären Spielstände jedes mal mühselig manuell löschen muss. Auch Baldur's Gate legt eine temporäre Kopie des aktuellen Spielstandes an - allerdings nur eine, und die nicht erst nach dem Verbraten wertvoller Spielzeit nach Betreten des Zielgebiets, sondern bereits vor dem Verlassen des Gebietes, aus dem man kommt. Die Spielstände haben zwar die Erweiterung '*.savegame', sind in Wirklichkeit aber umgelabelte ZIP-Archive, die man mit jedem x-beliebigen UNZIP-Programm öffnen und modifizieren kann. Ich empfehle 7-ZIP, das ich seit Jahren verwende.

Mit 7-Zip: Wählen sie zuerst Ihren Lieblings-Hexeditor (ich empfehle HxD, jeder andere tut es aber auch) als Standardprogramm zum 'Öffnen': Wählen Sie [Optionen] im [Extras]-Menü, dort den 'Editor'-Reiter im Notizbuch der Dialogbox und wählen Sie dann das Verzeichnis Ihres Hexeditors im 'Datei Öffnen')-Dialog.

Nachdem das erledigt ist, öffnen Sie den Spielstand Ihrer Wahl mittels Rechtsklick auf den Dateinamen und Auswahl des Menüpunktes 'Öffnen'. Sie sehen nun eine Menge Dateien in dem von 7-Zip angezeigten Fenster - zuerst bis zu sechs PNG-Grafiken [0.png...5.png] (eine für jedes aktuelle Gruppenmitglied). Danach folgen Dateipaare, die jeweils aus einer 'AR_*.fog' Datei (sie enthält Informationen darüber, welcher Teil des Gebiets bereits erkundet wurde und welcher weiterhin schwarz bleibt) und einer 'AR_*.LVL' besteht, die die veränderlichen Daten (Container, getötete Gegner, et cetera) des entsprechenden Gebietes enthält. Keine dieser Dateien enthält Daten, an denen man herumspielen sollte. Es ist den Aufwand nicht wert, selbst gebastelte Absturzursachen zu produzieren, nur weil man meint, Dinge mit Gewalt "feintunen" zu müssen...

Blättern sie bis zum Ende der Liste, stoßen Sie auf die Datei 'MobileObjects.save'. Das ist die einzige Datei im Archiv, die man modifizieren sollte. Tun Sie Sich selbst einen grossen Gefallen und lassen Sie Ihre Hände von der restlichen Dateien! Klicken Sie mit der rechten Maustaste auf die Datei und wählen Sie im aufklappenden Menü 'Editieren', was den Inhalt mit dem Hexeditor Ihrer Wahl anzeigen sollte, wenn Sie denn alle oben beschriebenen Schritte korrekt ausgeführt haben.

Momentan (ich habe das Spiel erst eine Woche) empfehle ich die folgenden Modifikationen eines Spielstandes:

0. Legen Sie eine Sicherungskopie des manipulierten Spielstandes an. Im Falle eines fehlgeschlagenen Versuchs sind sie damit auf der sicheren Seite!

1. Notieren Sie die Erfahrungspunkte Ihres Hauptcharakters und der NPCs in der Gruppe.

2. Optional (hängt vom verwendeten Hexeditor ab - mit HxD ist dieser Zwischenschritt nicht erforderlich!): Wandeln sie die Dezimalwerte (zum Beispiel mit dem Windows-eigenen Rechner im Programmierer-Modus) in hexadezimale Zahlen um.

3. Öffnen Sie die Suchfunktion Ihres Hexeditors und suchen sie nach dem Erfahrungswert des Charakters/NPCs Ihrer Wahl. Mit HxD: Öffnen Sie den "Suchen"-Dialog. Sie sehen nun ein Editierfeld und drei aufklappbare Listen. Geben sie den Erfahrungswert des zu bearbeitenden Charakters ein. Wählen Sie Ganzzahl in der ersten und 32 Bit Double Word in der zweiten Liste. Die dritte Little Endian belassen Sie in dieser Einstellung. Drücken Sie Okay, um die Suche zu Starten.

4. Wenn der korrekte Eintrag gefunden wurde, sollte direkt vor der farblich markierten Fundstelle der Variablenname 'Experience' gefolgt von der Sequenz 06 01 11 01 0B 01 stehen, und die letzten beiden Byte des markierten Doppelwortes sollten xx xx 01 00 (nur Level 12 Charaktere!) oder xx xx 00 00 sein. Sollte das 'Experience' vor der markierten Fundstelle fehlen, drücken Sie bitte F3, um weiter nach dem korrekten Speicherort zu suchen.

5. Editieren Sie das gefundene Doppelwort (eine Sequenz aus vier aufeinander folgenden Byte in umgekehrter Reihenfolge (Little Endian!)). Beachten Sie, dass es im Spiel ein Erfahrungspunkte-Limit von 66.000 Punkten gibt (0x000101D0 => geben Sie dafür D0 01 01 00 im Hexeditor ein).

6. Um die Attribute Ihres Charakters zu editieren blättern Sie mit der [Seite hoch]-Taste 0x1800 (6,144 dezimal) Byte zurück, und suchen Sie nach den folgenden Variablennamen:

01 09 'BaseMight' 06 01 11 01 15 01 xx 00 00 00 06 01 11 01 01
01 10 'BaseConstitution' 06 01 11 01 15 01 xx 00 00 00 06 01 11 01 01
01 0D 'BaseDexterity' 06 01 11 01 15 01 xx 00 00 00 06 01 11 01 01
01 0E 'BasePerception' 06 01 11 01 15 01 xx 00 00 00 06 01 11 01 01
01 0D 'BaseIntellect' 06 01 11 01 15 01 xx 00 00 00 06 01 11 01 01
01 0B 'BaseResolve' 06 01 11 01 15 01 xx 00 00 00 06 01 11 01 01

die mit xx markierten Bytes sind die dem Charakter (der Name steht ein Stückchen oberhalb von "BaseMight") zugeordneten Werte für das im Variablennamen enthaltene Attribut. Übertreiben Sie es nicht - 18 (0x12) ist der maximal zulässige Wert. Alles oberhalb von 25 (0x19) - inklusive der durch Gegenstände und Rasten erlangten Boni - wird vom Spiel stillschweigend verworfen. Es könnte aber zu Problemen führen, wenn der maximale Basiswert bereits größer als 24 ist.

7. Wann immer Sie das modifiziert haben, was Sie unbedingt ändern wollten, schließen Sie erst Ihren Hexeditor und dann Ihr UNZIP-Programm. Mindestens eines der beiden sollte nachfragen, ob Sie die Änderungen übernehmen möchten. Ein guter Rat: Editieren Sie nur die hier angegebenen Attribute! Auch wenn es kommod erscheint, an den anderen Werten herumzuschrauben, kann das zu Problemen führen, da alle anderen Werte miteinander zusammenhängen. Im besten Fall bleiben Ihre Manipulationen wirkungslos, im schlimmsten Fall hängt sich das Spiel auf oder verwirft den modifizierten Spielstand als korrumpiert.

8. Starten Sie Pillars of Eternity um zu überprüfen, ob das Patchen erfolgreich war.

9. Genießen Sie das Spiel mit den aufgepeppten (N)PC(s)!

Einschränkungen

Die Modifikation des Erfahrungswertes funktioniert bei allen Charakteren, während die Modifikation der Attribute nur bei Ihrer Spielfigur und den von Ihnen selbst erstellten NPCs (die zum Beispiel in Kneipen "angeworben" werden können) funktioniert. Die Attribute der mitgelieferten NPCs können nur durch Modifikation der Vorlagen im 'assets'-Ordner geändert werden. Mehr dazu in einem späteren Posting.

Ausblick

Ich sammle noch Daten für den ersten wirklichen Pillars of Eternity Editor (PoEE). Wenn ich etwas Zeit habe, werde ich meine BG-Tools auf meine Google-Drive-Präsenz hochladen. Da meine Programme noch in solidem Assembler geschrieben sind, nehmen sie nicht einmal ein Tausendstel des proprietären Unity3D-Mülls in Anspruch, sind dafür aber wesentlich flinker unterwegs.

Freitag, 29. Dezember 2017

Manually Modifying PoE Saves...



After playing this game a few days now, I feel the urgent need to lower the ratio between activities and resting times from something above 1:200 to a more realistic 1:50 or so. Hence, I started to evaluate my savegames a little bit closer to get access to their vital data.

This is what I found out until now

Unlike Baldur's Gate - the antetype PoE tries to reach, but never will catch - PoE does not store its savegames in a SAVE folder within the game's main folder. For what reasons ever, the script kiddies who clicked together PoE decided to hide your saves in an obscure folder inside Windoze's 'user account' folders. For me, it is

[Bootdrive]:\USERS\ADMINISTRATOR\SAVED GAMES\PILLARS OF ETERNITY\

but it might be [My Account Name] instead of [ADMINISTRATOR] on your machine, depending on your installation and Windoze version.

This folder holds all savegames - those you never asked for and those deliberately saved by you. All of them have the extension '*.savegame', but are simple zip archives for real. Hence, you can open them with any unzip program (I prefer 7-ZIP, but you might have another favourite unzipper).

For 7-Zip: First select your favourite hex editor - I prefer HxD, but you can choose your favourite hex editor, of course - as default 'open' application (select [Options] from the [Extras] menu, then click the 'editor' tab in the dialogbox and select your editor via 'file open').

Having done that, open the saved game of your choice via right click and select 'Open' from the pop-up menu. You will see a bunch of files, now. First, there are up to six PNG images [0.png...5.png] (one for each of your current party members), followed by pairs of area files - one 'AR_*.fog', defining how far the corresponding bitmap is explored (which parts remain black), one 'AR_*.LVL', containing data of interactive stuff (containers, state of quest NPCs, et cetera). None of these files is important nor should you try to edit them - it is not worth to create self-made trouble to fine tune whatever you think you have to fine tune...

Scroll down until you stumble upon the file named 'MobileObjects.save'. This is the only file you should open and edit. Do yourself a favour and leave your hands off of the other files! Click on the file name and select 'edit' from the pop-up menu to open the file with the editor you've chosen (as described above).

For the moment - I own the game just for a week, now - I suggest the following way to edit your game:

0. Make a backup copy of your saved game. In case your patch does not work properly, you are on the safe side...

1. Write down the current experience of your PC and NPCs.

2. Optional (depending on the hex editor!): Convert the decimal numbers into hexadecimal numbers (you can use Windoze's calculator in programmer mode or another tool of your choice).

3. Open the search dialog in your hex editor and search for the experience of the character of your choice. For HxD: Open the search dialog. There is an entryfield and several drop down listboxes. Enter the decimal number. Select 'Integer' in the first and '32 bit Double Word' in the second listbox, but leave the third (Little Endian...) alone. Click 'Okay' to start the search.

4. If you found the proper entry, you should find the plain text variable name 'Experience' followed by six hexadecimals 06 01 11 01 0B 01 preceding the highlighted hexadecimal number (it should end with one zero and the third byte should be 00 or 01). If 'Experience' is missing, press F3 to search for the next occurrence of your number!

5. Edit the found double word (a sequence of 4 byte in reverse (Little Endian!) order). Keep in mind that Experience in PoE 1 is limited to 66,000 (0x000101D0 => enter D0 01 01 00 in your hex editor).

6. If you want to edit the stats of that character: use your [Page Up] key and scroll about 0x1800 (6,144) byte back. There are six variable names of interest:

01 09 'BaseMight' 06 01 11 01 15 01 xx 00 00 00 06 01 11 01 01
01 10 'BaseConstitution' 06 01 11 01 15 01 xx 00 00 00 06 01 11 01 01
01 0D 'BaseDexterity' 06 01 11 01 15 01 xx 00 00 00 06 01 11 01 01
01 0E 'BasePerception' 06 01 11 01 15 01 xx 00 00 00 06 01 11 01 01
01 0D 'BaseIntellect' 06 01 11 01 15 01 xx 00 00 00 06 01 11 01 01
01 0B 'BaseResolve' 06 01 11 01 15 01 xx 00 00 00 06 01 11 01 01

The bytes marked with xx hold the currently assigned value for the corresponding property for that character (the name can be found somewhere above BaseMight').

7. Whenever you have modified what you wanted (I suggest not to modify anything not mentioned here!) close your hex editor and then the unzip program. At least one of them should ask if you want to save the changed content.

8. Start Pillars of Eternity and check if your patch works.

9. Enjoy your upgraded (N)PC(s)!

Caveats

Patching experience works for all characters. Patching statistics does not work for any pre-fabricated NPC - only the statistics for your PC and all player-created NPCs work permanently. To modify statistics of any pre-fabricated NPC, you have to modify the file template in the 'assets' folder. I will describe how to do that in a later posting.

Future Work

I am still collecting data for the first real Pillars of Eternity editor (PoEE). When I find some time, I will upload my BGT Editor (BG-Tools) to my Google Drive account. My programs are written in pure assembler, so they are 1/1000th of the size occupied by the proprietary Unity3D editor. Which did not help to modify BGT savegames, anyway...