FOE hat geschrieben:Besteht eigentlich ein allgemeines Interesse, dass ich weiterhin den genauen Aufbau der Savegame hier dokumentiere?
Ich würde sagen Ja, abgesehen ev. von "Cheat" Punkten natürlich!

Nun gut, dann werd ich mal fröhlich weiterdokumentieren =) Aber da haben wir wieder das Problem: Was sind "Cheat Punkte"? Wenn man den Aufbau der Savegame kennt, kann man theoretisch alles an seinem Savegame ändern, was man nur möchte. Zum Beispiel das Gold erhöhen, ohne als Cheater markiert zu werden.
Allerdings ist dieses Wissen für Modentwickler wiederrum sehr interessant, die diese Analyse dann kein zweites Mal machen müssen. Da mich jetzt ein Moderator ermutigt hat, weiter zu dokumentieren, werd ich das jetzt auch weitermachen =)
FOE hat geschrieben:Läuft mal ohne Probleme und zeigt alles mal schön an, wobei man bei er Ausgabe natürlich noch einiges Ändern könnte!

Jo klar. Das war auch eine Testversion, um zu kontrollieren, ob meine Werte allgemein genug ermittelt werden. Inzwischen habe ich einiges an Feedback erhalten und weiß, dass der Viewer soweit die Daten korrekt anzeigt

Das "schöner" machen werd ich demnächst zusammen mit blumen7od in Angriff nehmen
2. Aufbau des Savegames
Den ersten Teil der Analyse findet ihr hier:
gleicher Thread, anderer Post =)
Bis zu der Beschreibung des Talentbaums ist insofern alles richtig und dank dem Viewer sogar von mehreren Leuten bestätigt worden: Danke! Der Talentbaum war dort allerdings noch ein wenig spärlich untersucht, das hole ich jetzt nach.
2.2 Talentbaum
Der Talentbaum hat folgenden groben Aufbau:
Code: Alles auswählen
uint | Größe des Talentbaum-Arrays (nennen wir die Variable "TLen")
TLen*uint| Pro Talent der geskillte Wert
TLen gibt hier an, wie viele uint (4 Byte) Blöcke nun an Daten kommen, die den Talentbaum beschreiben. Dieser Wert ist unter Umständen größer, als die Anzahl der Talente der Charakterklasse. Die Werte die am Ende dieses Blocks kommen sind mir noch nicht genau bekannt - vielleicht Platzhalter für optionale Talente der Modding Comunity?
Kommen wir aber zu den Talenten an sich: Jede Klasse hat ja einen eigenen Talentbaum, somit unterscheidet sich der Block nun auch von Klasse zu Klasse.
2.2.1 Talentbaum: Alchemist
Das ist die Reihenfolge der Talente, wie sie für den Alchemisten gespeichert werden:
Code: Alles auswählen
01 Ember Bolt
02 Magic Waepon Expertise
03 Iceshock
04 Adventurer
05 Ember Lightning
06 Offensive Spell Mastery
07 Barter
08 Ember Lance
09 Pyre
10 Advanced Spellcasting
11 Ember Strike
12 Nether Imp
13 Ranged Weopon Expertise
14 Thorned Minions
15 Pet Mastery
16 Summon Alchemical Golem
17 Charm Spell Mastery //"Hex+1" ??!!
18 Terror
19 Treasure Hunter
20 Burning Bind
21 Summon Beam Golem
22 Ember Shock
23 Armor Expertise
24 Ember Shield
25 Critical Strikes
26 Infuse
27 Defence Spell Mastery
28 Frailty
29 Martial Weapon Expertise
30 Ember Phase
31 Block and Parry
32 Ember Sentry
33 Dual Wielding
Interessant ist hier, dass die Reihenfolge der Talente überhaupt nicht mit der im Talentbaum übereinstimmt. Vermutlich durchlief der Talentbaum während der Entwicklung des Spiels mehere Veränderungen, die im Savegame jedoch gleich blieben.
Ein weiterer Interessanter Punkt beim Alchemisten: Der Talentwert für
"Charm Spell Mastery" ist im Savegame um einen Wert zuwenig gespeichert. Hier muss man eins hinzuaddieren, um auf den korrekten Wert zu kommen. Das ist nur beim Alchemisten so und auch nur bei diesem Spell.... seltsam... oO
2.2.1 Talentbaum: Destroyer
Der Talentbaum des Destroyers hat wohl die geringsten Änderungen in der Entwicklung gehabt:
Code: Alles auswählen
01 Slash Attack
02 Dual Wielding
03 Adventurer
04 Spectral Echo
05 Frost Shield
06 Stampede
07 Chain Vortex
08 Offensive Spell Mastery
09 Treasure Hunter
10 Critical Strikes
11 Soul Rend
12 Titan Stomp
13 Martial Weapon Expertise
14 Ranged Weapon Expertise
15 Doomquake
16 Defensive Spell Mastery
17 Seismic Burst
18 Barter
19 Block and Parry
20 Devastate
21 Shadow Armor
22 Charm Spell Mastery
23 Entropic Aura
24 Shadow Bowman
25 Magic Weapon Expertise
26 Armor Expertise
27 Pet Mastery
28 Aura of Thorns
29 Spectral Decay
30 Advanced Spellcasting
2.2.1 Talentbaum: Vanquisher
auch beim Vanquisher gibt es wieder eine deutlich andere Reihenfolge, als der Talentbaum ingame:
Code: Alles auswählen
01 Ranged Weapon Expertise
02 Ricochet
03 Frost Pilum
04 Offensive Spell Mastery
05 Seeking Shot
06 Explosive Shot
07 Critical Strikes
08 Adventurer
09 Arrow Hail
10 Barter
11 Needle Arc
12 Venomous Dirks
13 Treasure Hunter
14 Defensive Spell Mastery
15 Wind of Justice
16 Stab
17 Armor Expertise
18 Martial Weapon Expertise
19 Hamstring
20 Devouring Trap
21 Pet Mastery
22 Flame Trap
23 Flechette Trap
24 Dual Wielding
25 Shock Trap
26 Block and Parry
27 Magic Weapon Expertise
28 Charm Spell Mastery
29 Lightning Bomb
30 Advanced Spellcasting
2.3 Zusätzlich erlernbare Sprüche des Chars
Wie wir alle Wissen, kann der Charakter auch noch durch Schriftrollen vier weitere Sprüche lernen. Diese werden direkt nach dem Block der Talentbeschreibung angegeben. Das Format sieht so aus:
Code: Alles auswählen
string | Spruch 1 Name
uint | Spruch 1 Basistalentwert
string | Spruch 2 Name
uint | Spruch 2 Basistalentwert
string | Spruch 3 Name
uint | Spruch 3 Basistalentwert
string | Spruch 4 Name
uint | Spruch 4 Basistalentwert
Hier gibts nun ein paar Besonderheiten zu betrachten. Nicht jeder Charackter hat auch wirklich schon vier Sprüche erlernt - was passiert also dann? Nun am Aufbau ändert sich nichts. Wir erinnern uns, wie ein String Aufgebaut war:
Code: Alles auswählen
ushort | Länge des Strings (Anzahl Zeichen)
unicode | Der String an sich in Unicode Kodierung
Wenn ein Charackter nun nur drei Sprühe gelernt hat, so werden nur 6 Bytes für den vierten Spruch benötigt:
- Zuerst 2 Bytes (ushort): Wie lang ist der Name des Spruchs? hier "0"
Dann käme der Name des Spruchs, voriger Eintrag sagte aber, dass der String die Länge null hat. Somit wird dieser Wert übersprungen.
Jetzt kommt wie gehabt der Talentwert des Spruches als uint (4 Bytes). Da wir aber keinen erlernt haben steht hier konstant "0" drin.
Und noch was gibt es zu beachten. Was bedeutet hier nun
"Basistalentwert"? Wenn ihr zum Beispiel "Charm Spell Mastery" mit 4 Punkten geskillt habt, würde man doch erwarten, dass beim zusätzlichem Spruch "Summon Zombies" nun hier eine vier drinsteht. Stimmt aber nicht! Hier wird ziemlich wahrscheinlich dennoch eine 1 drinstehen, denn hier wird nur der
Basiswert angegeben. Die weiteren drei Punkte des Spruches gelten als Modifizierer und werden direkt aus dem Talentbaum ermittelt. Ändert man Testweise diesen Wert nun von 1 auf 2, stellt man ingame nun fest, dass der Spruch dennoch um einen Talentwert gestiegen ist...
3. Jemand bock zu helfen?
Erst mal vielen Dank an diejenigen, die mir Feedback zum SaveGameViewer gegeben haben und ich somit sichergehen konnte, dass meine ermittelten Werte korrekt sind.
blumen7od hat sich bei mir gemeldet und wird sich nun vermutlich primär um das Journaling kümmern (wir wissen zu Zeit WIE die Daten gespechert werden, aber leider nicht exakt WO). Außerdem wird er mir bischen beim "verschönern" des Viewers helfen =)
Für das Feature "automatisches Signaturupdate für Foren": Mein Programm kann inzwischen alle solchen erforderlichen Daten ermitteln. Allerdings kann ich nicht wirklich viel PHP: Jemand mit PHP-Kenntnissen lust mit mir zusammenzuarhbeiten und den Web-Part für das Signaturupdate zu übernehmen?
4. SaveGameViewer
Der SaveGameViewer hat nun noch weitere Funktionen hinzubekommen (sieht aber "noch" immer etwas hässlich aus ^^). Ich werde vermutlich morgen die nächste Version zum Testen hochladen
So, dann mal bis zum nächstem mal bei unserer fröhlichen Savegame Analyse =)