Crystals-DSA-Foren
Der HEX-Thread / Spielstandsprobleme - Druckversion

+- Crystals-DSA-Foren (https://www.crystals-dsa-foren.de)
+-- Forum: Allgemeines zur Nordlandtrilogie DOS (https://www.crystals-dsa-foren.de/forumdisplay.php?fid=20)
+--- Forum: Technische Werkstatt (https://www.crystals-dsa-foren.de/forumdisplay.php?fid=34)
+--- Thema: Der HEX-Thread / Spielstandsprobleme (/showthread.php?tid=80)

Seiten: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52


RE: Der HEX-Thread - thEClaw - 07.09.2011

Es sind alle Bilder vorhanden, die Nummerierung entspricht den Item-Codes (also dem ersten und eventuell zweiten Byte des HEX-Codes für ein Item). Vielleicht ist es auch "Itemcode - 1"...


RE: Der HEX-Thread - tommy - 07.09.2011

nee das kann nicht stimmen was du da erzählst, das geht ja schon bei den ersten items los, das Schwert hat zum Beispiel die ID 0x01 0x00 also 1 und bei mir stimmt dieser Wert erst, wenn ich die Bilder mithilfe der zugehörigen datei umbenenne.

allerdings hab ich beim umbenennen auch das Problem, dass die zugehörige Datei mehr Bilder umfasst als tatsächlich vorhanden sind

Edit: ich glaub ich hab einen kleinen Fehler beim umbenennen, ich werde das mal schnell prüfen

so den Fehler im meinem Programm hab ich behoben, aber das Problem bleibt trotzdem noch


RE: Der HEX-Thread - thEClaw - 07.09.2011

Warum umbenennen? Ich habe nochmal geschaut: Itemcode - 1 = Dateiname des Bildes
Es sind sämtliche Bilder vorhanden, die das Spiel für Gegenstände verwendet. Vielleicht fehlen ja ein paar ganz exotische Sachen, aber selbst daran zweifle ich.
EDIT: Ich beziehe mich übrigens auf die ITEMS.DAT, die du für die verschiedenen Spiele auf der vorigen Seite dieses Threads finden kannst.

Dasselbe gilt für die Portraits. Das Portrait-Byte, das von DSA2 und 3 verwendet wird, kannst du direkt in den Dateinamen überführen. Habe ich in meinem Programm auch so gemacht.


RE: Der HEX-Thread - tommy - 07.09.2011

ok da dir mir scheinbar nicht glaubst, gebe ich dir mal noch ein paar andere Items ;)

Wassertschlauch 0x1E, 0x00 = 30Dezimal laut deiner Berechnung: PIC029 ist aber PIC030
Zauberstab 0x85, 0x00 = 133Dezimal laut deiner Berechnung: PIC132 ist aber PIC069
Bogen des Atherion 0x00, 0x01 = 256Dezimal laut deiner Berechnung: PIC255 ist aber PIC181/PIC283


Das sind die bilder aus dsa3

Edit: jo ich bezieh mich auf die gleiche datei^^
Edit2: achso du beziehst dich auf die ".dat", die hab ich eigentlich nur verwendet um die vorhandenen Bilder umzubenennen, aber vielleicht habe ich sie auch einfach nur falsch benutzt, vielleicht könntest du das ja nochmal näher erläutern?

Edit3: Ok hat sich erledigt, ich hab die datei genau falschrum benutzt, ich habe versucht die Bilder im Ordner ind der datei nachzuschlagen und sie entsprechend umzubenennen


RE: Der HEX-Thread - thEClaw - 07.09.2011

(07.09.2011, 10:08)tommy schrieb: Wassertschlauch 0x1E, 0x00 = 30Dezimal laut deiner Berechnung: PIC029 ist aber PIC030
Zauberstab 0x85, 0x00 = 133Dezimal laut deiner Berechnung: PIC132 ist aber PIC069
Bogen des Atherion 0x00, 0x01 = 256Dezimal laut deiner Berechnung: PIC255 ist aber PIC181/PIC283
Wasserschlauch: 1E 00 = 30 -> passt
Zauberstab: 45 00 = 69 -> passt
Bogen des Artherion: B5 00 = 181 -> passt

Es muss also doch keine 1 abgezogen werden, da habe ich mich verguckt.


(07.09.2011, 10:08)tommy schrieb: Edit: jo ich bezieh mich auf die gleiche datei^^
Edit2: achso du beziehst dich auf die ".dat", die hab ich eigentlich nur verwendet um die vorhandenen Bilder umzubenennen, aber vielleicht habe ich sie auch einfach nur falsch benutzt, vielleicht könntest du das ja nochmal näher erläutern?

Edit3: Ok hat sich erledigt, ich hab die datei genau falschrum benutzt, ich habe versucht die Bilder im Ordner ind der datei nachzuschlagen und sie entsprechend umzubenennen
In den .DAT-Dateien sind für jedes Item 16 Bytes enthalten (bei DSA1 nur 12, bei DSA2 genau 14). Die ersten beiden Bytes geben dir exakt das zum Gegenstand gehörige Bild an. Eigentlich müsste man diese Nummer nachschlagen, allerdings sind die von mir hochgeladenen Bilder schon passend durchnummeriert - die ersten beiden Bytes der Gegenstände geben dir also die Bildnummer an.

Ich hänge nochmal eine vollständige Sammlung an Informationen bezüglich der Items an. Leider kann ich die Bilder für die Gegenstände aus DSA1 nicht extrahieren. Ich habe "nvf2tga" probiert (ich glaube, es stammt von HenneNWH hier aus dem Forum), allerdings stimmt etwas nicht mit der Farbpalette. Die Bilder sind zwar da, aber die Palette müsste für jedes Bild geändert werden.


RE: Der HEX-Thread - HenneNWH - 08.09.2011

(07.09.2011, 15:17)thEClaw schrieb: ...Leider kann ich die Bilder für die Gegenstände aus DSA1 nicht extrahieren. Ich habe "nvf2tga" probiert (ich glaube, es stammt von HenneNWH hier aus dem Forum), allerdings stimmt etwas nicht mit der Farbpalette. Die Bilder sind zwar da, aber die Palette müsste für jedes Bild geändert werden.

Der Grund dafür ist, dass die Farbpalette der Gegenstände in SCHICKM.EXE fest eingebaut ist und ich sie noch nicht in "nvf2tga" integriert hab. Da sich die bekannte Menge der Spieldaten, wohl nicht mehr groß ändern wird.
Kann ich gern die Farbpaletten von Schick einbauen. Das wird aber nicht vor Dienstag passieren.

Für Interessierte gibt es hier noch den Link zum Aufenthaltsort von "nvf2tga" BrightEyes. Unter tools/nvf2tga wird man fündig.


RE: Der HEX-Thread - thEClaw - 08.09.2011

Kennst du die Palette? Die variiert doch bestimmt für Portraits, Items etc. Ich weiß nicht, ob du dir diese Arbeit machen musst, das musst du selbst abschätzen können.

Aber ich weiß ja, wie gern man die eigenen Programme so vollständig wie möglich macht - falls es also mit wenig Aufwand zu machen wäre... ;)


RE: Der HEX-Thread - HenneNWH - 08.09.2011

(08.09.2011, 07:49)thEClaw schrieb: Kennst du die Palette? Die variiert doch bestimmt für Portraits, Items etc.

Die Palette kenne ich sehr wohl. Im Spiel gibt es insgesamt 256/0x100 Farben, welche in Bereiche eingeteilt sind.
Z.B. sind die Gesichter der Helden 0x20-0x3f, die Gegenstände 0x40-0x5f. Bei diesen speziellen Bereichen gibt es feste Paletten die für alle Bilder eines Typs gelten.

(08.09.2011, 07:49)thEClaw schrieb: Aber ich weiß ja, wie gern man die eigenen Programme so vollständig wie möglich macht - falls es also mit wenig Aufwand zu machen wäre... ;)

Ja, das ist die Suche nach einem kreativen Lösungsansatz, welcher oft in einer ruhigen Minute an einem stillen Örtchen findet. :idea:

Als ich nvf2tga geschrieben hatte, war es eigentlich nur für DSA2/DSA3 gedacht,
da dort die Farbpaletten immer in den NVF-Dateien waren und NVF-Dateien auch immer *.NVF heißen.
Bei Schick war das leider noch nicht so. :motz:


RE: Der HEX-Thread - thEClaw - 08.09.2011

Kannst es ja ändern ;).


RE: Der HEX-Thread - 20mithrandir - 08.09.2011

(06.09.2011, 20:47)tommy schrieb: @20mithrandir die ItemBilder scheinen nicht immer korrekt zu sein, hast du vielleicht ne vollständige Liste?
Siehe Posts von thEClaw

Nur als Info: Bei DSA 1 Spielständen arbeite ich mich vom Dateiende immer um einen 'Charakter-Block' (fixe Länge) nach vorne und prüfe dann die Gruppen / Positions Bytes ... bis ich den entsprechenden Charakter gefunden habe. Nach Schlüsselswörtern/Bytes suche ich nicht.

Ich hatte in den letzten beiden Wochen sowohl etwas Streß im Büro als auch 'Deus Ex: Human Revolution' als Zeitraubfaktor ; - )

Ich würde gerne, sofern es evtl. Feedback zu anderen Spielversionen gibt, das Programm heuer noch finalisieren. Dazu werde ich die englischen ROA1+2 noch ausprobieren, die ich von GOG.com habe. Disketten Versionen werde ich wahrscheinlich kategorisch nicht unterstützen. Von den dt. CD Versionen habe ich hier, denk ich, sogar zwei verschiedene ... vielleicht komme ich ja dieser Tage noch dazu. Ich bin dann jedenfalls ab 25. September erstmal in Urlaub, falls mich jemand sucht ; - )


RE: Der HEX-Thread - tommy - 11.09.2011

Sooo nachdem mir bei Speichern einmal mein Laptop ausgegangen ist und so leider mein halbes Programm futsch war, kann ich nun endlich wieder eine neue Version meines Editors bereitstellen :)

[attachment=2518]

Mitlerweile wird auch DSA1 Teilweise unterstützt, Talentwerte und Zauberwerte folgen in einer der nächsten Versionen, und items werden nach wievor durch doppelklick hinzugefügt(mitlerweile ist die Itemliste auch vollständig).

ansonsten können bugs gerne gemeldet werden. Und für verbesserungsvorschläge habe ich auch immer ein offenes Ohr^^


Edit: da fällt mir ein, vielleicht könnte ja mal ein Admin einen Thread aufmachen wo im ersten Post eine übersicht über alle verfügbaren editoren gegeben wird, die dann auch einigermasen aktuell gehalten wird, ich finde in einem 40Seiten langen Thread gehen die doch irgendwie alle unter.


RE: Der HEX-Thread - 20mithrandir - 12.09.2011

Also ich habe mir heute mal die Item Bilder (hier referenzierte RAR Archive) angeschaut. Wenn ich die ITEMS.DAT der einzelnen Spielversionen auslese, komme ich da aber auf keinen grünen Zweig.

Die ersten paar Icons scheinen um -1 verschoben zu sein (ich habe dann aus 000 bis 016 einfach 001 bis 017 gemacht), andere stimmen dann mit dem Code überein, und bei höheren Codes scheint mir gar nichts mehr zusammenzulaufen.

Ein Beispiel mit einem Spielstand aus DSA 2 Sternenschweif:

Items aus ITEMS.DAT eingelesen (jeweils unsigned bytes):
Code:
[...]
0900... Icon (dez.): PIC009 ... Langbogen (ursprüngl. PIC008)
0A00... Icon (dez.): PIC010 ... Pfeile (ursprüngl. PIC009)
[...]
5300... Icon (dez.): PIC083 ... Kettenzeug (ok!)
5400... Icon (dez.): PIC084 ... Lederzeug (ok!)
[...]
8C00... Icon (dez.): PIC140 ... Olginwurz oder so (sollte laut Spiel allerdings Hexenbesen sein)
1301... Icon (dez.): PIC275 ... Drachentöter (sollte laut Spiel allerdings Orkschmuck sein)

Konzentrieren wir uns einmal auf dieses '1301'.

In der ITEMS.DAT (auch hier einmal als Attachement gepostet worden) ist dieses '1301' das viertletzte Item:
Code:
13010200064C9600320064000100

In der DSA Hex Liste (Excel Sheet, auch hier einmal als Attachement gepostet) steht für diesen Code (richtigerweise):
Code:
13 01 ... Orkschmuck

In der Icon Liste scheint dies 'PIC162' zu sein. Aber wie komme ich von HEX '1301' mit little endian auf DEZ '162' ?

Stehe ich auf der Leitung?

PS: Habe auch mit ROA (GOG.com) Teil 1 und 2 getestet, scheinen genauso wie die deutschen Varianten zu funktionieren, konnte keine Probleme feststellen...


RE: Der HEX-Thread - tommy - 12.09.2011

klingt fast wie das problem was ich auch hatte, hast du die unterschiedlichen längen der Eintrage beachtet?
Bei DSA1 hat eine Spalte 12Bytes, bei DSA2 14 und bei DSA3 16...wer auch immer sich das ausgedacht hat^^...ja und ansonsten ergibt sich das passende bild wie folgt

bsp. pseudocode DSA3:
Code:
value = ItemID + 256*IdemID_zusatz;
value_2 = bytes[value*16];
value_2 += 256*bytes[value*16+1];

in value_2 steht nun die nummer des zum Item passenden Bildes

Edit: ich seh gerade anhand deiner ausführungen, das du genau den fehler gemacht hast den ich auch gemacht habe. Du darfst nicht in der datei nach dem Code "13 01" (orkschmuck) suchen, sonder der code 13 01 gibt die position in der Datei an, also in diesem fall wäre das Zeile 269Dezimal


RE: Der HEX-Thread - thEClaw - 12.09.2011

Da es sich noch niemand angeschaut hat:

Hier

Wenn es danach noch Fragen gibt, gibt's Haue! :D ;)


RE: Der HEX-Thread - 20mithrandir - 12.09.2011

(12.09.2011, 14:54)tommy schrieb: Edit: ich seh gerade anhand deiner ausführungen, das du genau den fehler gemacht hast den ich auch gemacht habe. Du darfst nicht in der datei nach dem Code "13 01" (orkschmuck) suchen, sonder der code 13 01 gibt die position in der Datei an, also in diesem fall wäre das Zeile 269Dezimal
Ich suche nicht in der Datei. Ich nehme die ITEMS.DAT um sämtliche Gegenstände aufzulisten. Ich lese also alle Gegenstände aus der Datei heraus. Und hier steht eben als Item Code zum Beispiel '1301'.

Bisher habe ich den Item Code (die ersten beiden Bytes) einfach als Wert hergenommen. Allerdings trifft 'PIC275' nicht zu.

Wenn ich also die Position in der Datei auswerten muss, wäre das allerdings an Offset '1308' (2067 / 14 = 147 bzw. 4872 / 14 = 348 also das 147te bzw. 348te Item in der Datei). Aber auch 'PIC147' bzw. 'PIC348' trifft nicht zu.

Ich weiß leider immer noch nicht, wie ich auf 'PIC162' kommen sollte. Bei deinem Pseudo-Code weiß ich nicht, was der 'Zusatz' jetzt bedeuten soll. Kannst du das evtl. Mit Beispieldaten machen?

(07.09.2011, 15:17)thEClaw schrieb: Die ersten beiden Bytes geben dir exakt das zum Gegenstand gehörige Bild an. Eigentlich müsste man diese Nummer nachschlagen, allerdings sind die von mir hochgeladenen Bilder schon passend durchnummeriert - die ersten beiden Bytes der Gegenstände geben dir also die Bildnummer an.

Die ersten beiden Bytes sind '13' und '01', was überall als sogenannter 'Item Code' bezeichnet wird. Bitte nicht hauen, aber wie heißt das Icon dazu nun?

Vielleicht kannst du ja auf mein Beispiel eingehen. Das Item aus der ITEMS.DAT von Sternenschweif, das mit '1301' beginnt (Offset '1308', viertletztes Item) würde sich da anbieten...


RE: Der HEX-Thread - tommy - 12.09.2011

Zitat:
Zitat:thEClaw schrieb: Die ersten beiden Bytes geben dir exakt das zum Gegenstand gehörige Bild an. Eigentlich müsste man diese Nummer nachschlagen, allerdings sind die von mir hochgeladenen Bilder schon passend durchnummeriert - die ersten beiden Bytes der Gegenstände geben dir also die Bildnummer an.


Die ersten beiden Bytes sind '13' und '01', was überall als sogenannter 'Item Code' bezeichnet wird. Bitte nicht hauen, aber wie heißt das Icon dazu nun?

Vielleicht kannst du ja auf mein Beispiel eingehen. Das Item aus der ITEMS.DAT von Sternenschweif, das mit '1301' beginnt (Offset '1308', viertletztes Item) würde sich da anbieten...

ich seh gerade bei den bereits duchnummerierten Bildern von thEClaw stimmen die codes immer noch nicht, da hast due recht


Zitat:Ich suche nicht in der Datei. Ich nehme die ITEMS.DAT um sämtliche Gegenstände aufzulisten. Ich lese also alle Gegenstände aus der Datei heraus. Und hier steht eben als Item Code zum Beispiel '1301'.
das ist genau der falsche weg, die Item Codes stehen nicht in der Datei!!!!!, die ItemCodes geben nur die position an, an der du in der Datei suchen musst!!!


Zitat:Ich weiß leider immer noch nicht, wie ich auf 'PIC162' kommen sollte. Bei deinem Pseudo-Code weiß ich nicht, was der 'Zusatz' jetzt bedeuten soll. Kannst du das evtl. Mit Beispieldaten machen?
mit dem "Zusatz" meine ich lediglich das 2te byte der Item ID

So und hier bekommst du jetzt noch mal dein Beispiel^^ (DSA3 beispiel)
dei Orkschmuck hat die ID 13 01 --> 0x0113Hex --> 275Dezimal

so nun schauen wir in der Items.DAT in Zeile 275 bzw. wir lesen die Bytes ab der Position 275*16 = 4400

in dieser Zeile steht "A2 00 80 08 00 00 02 00 01 00 0A 00 00 00 00 00"

0x00A2Hex --> 162Dezimal
und siehe da PIC 162 ist dein Orkschmuck^^

ich hoffe meine erleuterungen konnten dir helfen


RE: Der HEX-Thread - thEClaw - 12.09.2011

@ tommy: Habe deinen Post gar nicht gesehen. Die Nummern stimmen, ich habe noch kein Gegenbeispiel gefunden. Gib mir eins, wenn du kannst ;).

Also Item "0x1301", ja?
0x1301 = ?Gegenstand? (vermutlich DSA2, da du durch 14 geteilt hast)
0x1301 = 275
275 * 14 (DSA2) = 3850

Bytes 3850 bis 3850 + 13 (also insgesamt 14 Bytes) in ITEMS.DAT von DSA2:
a2 00 80 08 00 00 02 00 01 00 0a 00 00 00

Gegenstandsbild:
0xa200 = 162 (scheinen also Orkschmuckstücke zu sein)

Ich kann es jetzt leider nicht prüfen, da ich keine Liste mit den Item-Codes finde.
In der ITEMS.DAT stehen quasi die Eigenschaften (inklusive Bild, das sind die ersten zwei Byte im little-endian-Format), die ein Item haben kann. Das ganze in 12/14 oder 16-Byte-Blöcken (je nach Spiel). Wenn du ein beliebiges Item hast, sagt dir das Item gleich, welcher dieser Eigenschaftsblöcke es beschreibt. Das ganze ist also ein mehrstufiger Prozess - insbesondere, wenn du auch noch AT/PA/RS-Werte auslesen willst. Dafür nimmst du nämlich aus der ITEMS.DAT einen zum Gegenstand gehörigen Wert, rechnest ihn erneut um und schaust in einer anderen Datei nach den gewünschten Werten. Alles ein wenig verworren.

Zu den restlichen Bytes aus "a2 00 80 08 00 00 02 00 01 00 0a 00 00 00" willst du jetzt auch noch was wissen? Was genau ist denn unklar?


RE: Der HEX-Thread - tommy - 12.09.2011

Zitat:@ tommy: Habe deinen Post gar nicht gesehen. Die Nummern stimmen, ich habe noch kein Gegenbeispiel gefunden. Gib mir eins, wenn du kannst ;).

bei deiner letzten items.rar, hast du doch gesagt das die Items bereits sortiert sind, aber wenn ich nun den code für orkschmuck nachschauen (0x113 --> 275) , dann its das PIC275 nicht das gesuchte, auch die direkt umliegenden scheinen nicht die gesuchten zu sein....oder hab ich mich vertan und du hattes gar keine sortierte Liste angehängt?

Edit:

Zitat:thEClaw schrieb: 0x1301 = 275

wäre schön, wenn du das nicht auf diese Weise schreiben würdest, denn 0x1301 ist 4865 ;)


RE: Der HEX-Thread - tommy - 12.09.2011

mal was anderes, was haltet ihr eigentlich von der Idee mal alle Editoren und Tools, die hier so rumgeistern mal in einem Thread zusammenzufassen?

ich würde mich auch dafür anbieten, diesen thread zu erstellen. Allerdings wenn dann wieder mal die Phase kommt, wo ich nicht so aktiv im Forum bin, müsste das dann am besten durch einen admin oder so weiterverwaltet werden.


RE: Der HEX-Thread - 20mithrandir - 12.09.2011

Danke nochmals für die Ausführungen. Jetzt hab ich's endlich gerafft. Der Item Code ist also tatsächlich der Index des Items in der ITEMS.DAT ... Ich hatte irgendwie gedacht, dass der auch noch als Wert ausgelesen werden müsste. Langer Rede kurzer Sinn: Tausend Dank, es klappt nun endlich alles einwandfrei.

Nur die Benennung ist evtl. noch ein Problem. Ich habe hier die 'ITEMNAME.LXT' ... wenn die Gegenstände dort dieselbe Reihenfolge haben, kann ich die doch einfach eins nach dem anderen durchgehen, oder? Gibt's die übrigens auch für die ROA Versionen, bzw. woher kann man die Exportieren / Entpacken?