Themabewertung:
  • 5 Bewertung(en) - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Reverse Engineering der NLT
Ich habe gerade die Smack-Videos im Intro von Riva komprimiert und mit Hendriks Packer wieder verpackt. Das hat alles prima geklappt, außer dass jetzt das Bild nur noch lila ist...

Ist vielleicht bekannt, welche Smack-Version von Riva unterstützt wird?
Ich habe gerade freeDSA kompiliert und bekomme jetzt den Fehler
Zitat:ERROR : LuaError
error running function `Main': ../lua/loader/loader.tab.lua:50: Couldn't open file ../data/work//ANIS_EXT/30: No such file or directory
LuaStackTrace:

[C]: in function `error'
../lua/file.lua:7: in function `open'
../lua/loader/loader.tab.lua:50: in function `LoadANI'
../lua/main.lua:160: in function <../lua/main.lua:84>

Abgebrochen

Was kann man da machen? :think:
Check nochmal aus und guck naochmal ob du die dateien schick.dat und dsagen.dat ins Verzeichnis trunk/data/
kopiert hast. Dann klappts, oder auch nicht ;)
(01.02.2009, 22:39)HenneNWH schrieb: Check nochmal aus und guck naochmal ob du die dateien schick.dat und dsagen.dat ins Verzeichnis trunk/data/
kopiert hast. Dann klappts, oder auch nicht ;)

Das klappt damit, aber dafür geht jetzt etwas anderes schief:
Zitat:error running function `Main': ../lua/loader/loader.tab.lua:164: bad argument #1 to 'ipairs' (table expected, got nil)
Das sieht für mich diesmal wie ein echter Bug aus, denn ../data/temp/ani01.tga ist definitiv vorhanden.

EDIT: Ich habe einfach mal in Animation:LoadANI das obj.objects = {} vor if objects > 0 gezogen, und bin immerhin in den nächsten Fehler gerasselt. ( Couldn't open file ../data/work/DSAGEN_EXT/GEN1.NVF: No such file or directory)

Sollte freedsa im Moment eigentlich theoretisch laufen?

EDIT2:
Ha! :idea: Wenn ich zusätzlich noch
Code:
local backg = Image:LoadRLE(DSAGEN_DIR.."GEN1.NVF", 320, 200)
backg:DumpTGA(TEMP_DIR.."gen1.tga",1)
auskommentiere, dann läuft es. Wie kann man das Programm eigentlich wieder beenden?
Gerade habe ich gesehen, dass Borbaradwurms Lycos-Seite nicht mehr existiert. Schade. Sind alle Daten im Schattenkind-Wiki gesichert? Wie steht es eigentlich um das Reverse Engineering allgemein? Wo könnte man sich noch nützlich machen?
(03.02.2009, 20:56)Rabenaas schrieb: Gerade habe ich gesehen, dass Borbaradwurms Lycos-Seite nicht mehr existiert. Schade. Sind alle Daten im Schattenkind-Wiki gesichert? Wie steht es eigentlich um das Reverse Engineering allgemein? Wo könnte man sich noch nützlich machen?
Also die Daten von der Seite existieren noch, die Seite ist allerdings nicht mehr online weil Lycos den Hostingservice zum 15. Februar 2009 aufgibt.
(22.11.2007, 23:46)Hendrik schrieb: - Tracing der DosBox nach geöffneten Dateien ergibt, dass sich SCHICKM.EXE nicht die Bohne für die SOUND.ADV interessiert. Die DIGI.ADV hingegen wird beim Start geladen.

Also sieht es wohl schlecht für XMI-Sound mit der CD-Version aus.
(hier)

Ich habe mal SCHICKM.EXE durch einen Disassembler geschickt. Unter bestimmten Umständen (Wert auf dem Stack ist nicht false) greift das Programm auch auf SOUND.ADV zu. Die Überprüfung findet direkt nach dem Einlesen von SOUND.CFG und vor DIGI.ADV statt. Der Code ist also im Programm drin und lässt sich wohl auch irgendwie freischalten.
Servus,

ich bin letztens über das Forum (und speziell diesen Thread hier) gestolpert und habe mir komplett durchgelesen, was ihr zu RE und so schon gemacht habt. Gerade die Analyse der Daten ist ja schon weit fortgeschritten. :up:

Wie sind denn eure Pläne bezüglich des weiteren Vorgehens? Ich hab schon im Wiki geschaut, aber da hat sich ja auch schon seit längerem nichts mehr getan. Ich würde euch gerne unterstützen,soweit möglich; Hex spreche ich zwar im Moment nicht mehr ganz flüssig, aber das kommt mit ein bisschen Übung schon wieder und programmieren kann ich auch.

Gruß,

Bimberbube
Moin Bimberbube,

und herzlich willkommen im Forum. In der Tat läuft die Arbeit am Reverse-Engineering im Moment etwas schleppend. Wir bleiben aber weiter dran. Ich z.B. verbessere im Moment weiter mein Packprogramm und hoffe, noch in diesem Monat eine erste beta-Version (die alpha-Versionen gibt es ja schon eine Weile) veröffentlichen zu können.

Soweit ich weiß, ist HenneNWH weiter mit der Analyse der SCHICKM.EXE beschäftigt und arbeitet an einem verbesserten DosBox-Patch.

Wenn du (oder jemand anderes) helfen willst, es gibt einen Haufen Baustellen, wo du etwas tun könntest:
  • (MODDING) Ich glaube, über ein Tool, das zwischen den Grafikformaten der NLT und gängigen Formaten (z.B. PNG,JPEG) umwandeln kann, würden sich hier viele freuen.
  • (MODDING) Gleiches gilt für Editoren, mit denen man z.B. Waffen oder Kämpfe bearbeiten kann.
  • (ANALYSE) Du könntest den bestehenden DosBox-Patch erweitern (z.B. gibt es noch keine Funktionalität für Riva).
  • (ENTWICKLUNG) Da wir die Archive und die Grafikformate von Schick schon lesen können, wäre vielleicht ein Prototyp von FREEDSA interessant, der z.B. das Durchwandern von Dungeons/Städten oder das Reisen auf der Landkarte (ohne Zufallsbegegnungen, Rast o.ä.) darstellen kann.
Hallo, ich bin's - der Bart von Fidel Castro. Und mir ist total langweilich nie geschnitten wurde.
I'm a roleplayer. My dice are like my relationships: platonic and unlucky.
Wie sind eigentlich die Skripte der Questen in Schick codiert? Ist das alles fest im Hauptprogramm verankert? Besonders interessant wäre der Mechanismus der Datumsabfragen.
@Hendrik: Ich hab mich mal ein bisschen im Wiki umgeschaut und auch den SVN ausgecheckt, bin damit aber bisher nicht wirklich weitergekommen. Wenn ich lua/main.lua ausführen will, bekomme ich:

lua: ../lugre/lua/lib.input.lua:53: attempt to call global 'GetAllKeyNames' (a nil value)
stack traceback:
../lugre/lua/lib.input.lua:53: in main chunk
[C]: in function 'dofile'
../lugre/lua/lugre.lua:71: in function 'lugre_include_libs'
main.lua:30: in main chunk
[C]: ?

Wo sollte GetAllKeyNames denn definiert sein (kann mich nicht gerade eingehender lua-Kenntnisse rühmen; ich benutze "Lua 5.1.3 Copyright © 1994-2008 Lua.org, PUC-Rio").

Davon abgesehen fände sich auch bei den "Baustellen", die du angegeben hast, sicherlich was zu tun. Gehe ich recht in der Annahme, dass die Tools alle in Lua geschrieben werden sollen? Und spräche was dagegen, das Wiki vielleicht etwas klarer zu strukturieren - zumindest ich finde die Struktur nicht sonderlich intuitiv? ;)
(20.03.2009, 15:44)bimberbube schrieb: @Hendrik: Ich hab mich mal ein bisschen im Wiki umgeschaut und auch den SVN ausgecheckt, bin damit aber bisher nicht wirklich weitergekommen. Wenn ich lua/main.lua ausführen will, bekomme ich:

lua: ../lugre/lua/lib.input.lua:53: attempt to call global 'GetAllKeyNames' (a nil value)
stack traceback:
../lugre/lua/lib.input.lua:53: in main chunk
[C]: in function 'dofile'
../lugre/lua/lugre.lua:71: in function 'lugre_include_libs'
main.lua:30: in main chunk
[C]: ?

Wo sollte GetAllKeyNames denn definiert sein (kann mich nicht gerade eingehender lua-Kenntnisse rühmen; ich benutze "Lua 5.1.3 Copyright © 1994-2008 Lua.org, PUC-Rio").

Hast du auch die Lugre-Bibliothek schon gebaut und richtig eingebunden? Dort ist GetAllKeyNames auch definiert. Soweit ich mich erinnere, war dazu das "premake"-Script im Hauptverzeichnis da.

(20.03.2009, 15:44)bimberbube schrieb: Davon abgesehen fände sich auch bei den "Baustellen", die du angegeben hast, sicherlich was zu tun. Gehe ich recht in der Annahme, dass die Tools alle in Lua geschrieben werden sollen? Und spräche was dagegen, das Wiki vielleicht etwas klarer zu strukturieren - zumindest ich finde die Struktur nicht sonderlich intuitiv? ;)

Die Tools müssen nicht unbedingt in LUA geschrieben werden. Solltest du da etwas machen wollen, kannst du dich ja mal mit Skotsche austauschen, der auch seine Hilfe angeboten hat und gerne etwas mit Java machen würde.
Das Wiki ist in der Tat etwas stiefmütterlich behandelt worden. Ich habe gelegentlich schon mal versucht, etwas Ordnung reinzubringen, aber letztlich auch nicht viel Zeit darauf verwandt. Es wäre schön, wenn da mal jemand aufräumen würde. Was findest du denn konkret unintuitiv an der Struktur bzw. hast du schon einen Vorschlag, wie man es übersichtlicher gestalten könnte? Eventuell würde sich zu diesem Thema auch ein eigener Thread oder eine Diskussionsseite auf dem Wiki anbieten, damit hier nicht zu viel behandelt wird.
Hallo, ich bin's - der Bart von Fidel Castro. Und mir ist total langweilich nie geschnitten wurde.
I'm a roleplayer. My dice are like my relationships: platonic and unlucky.
Hi Hendrik,

(20.03.2009, 18:53)Hendrik schrieb:
(20.03.2009, 15:44)bimberbube schrieb: @Hendrik: Ich hab mich mal ein bisschen im Wiki umgeschaut und auch den SVN ausgecheckt, bin damit aber bisher nicht wirklich weitergekommen. Wenn ich lua/main.lua ausführen will, bekomme ich:

lua: ../lugre/lua/lib.input.lua:53: attempt to call global 'GetAllKeyNames' (a nil value)
stack traceback:
../lugre/lua/lib.input.lua:53: in main chunk
[C]: in function 'dofile'
../lugre/lua/lugre.lua:71: in function 'lugre_include_libs'
main.lua:30: in main chunk
[C]: ?

Wo sollte GetAllKeyNames denn definiert sein (kann mich nicht gerade eingehender lua-Kenntnisse rühmen; ich benutze "Lua 5.1.3 Copyright © 1994-2008 Lua.org, PUC-Rio").

Hast du auch die Lugre-Bibliothek schon gebaut und richtig eingebunden? Dort ist GetAllKeyNames auch definiert. Soweit ich mich erinnere, war dazu das "premake"-Script im Hauptverzeichnis da.

Hmm, das mit premake habe ich nicht gemacht, schaue ich mir mal an, danke.

(20.03.2009, 18:53)Hendrik schrieb:
(20.03.2009, 15:44)bimberbube schrieb: Davon abgesehen fände sich auch bei den "Baustellen", die du angegeben hast, sicherlich was zu tun. Gehe ich recht in der Annahme, dass die Tools alle in Lua geschrieben werden sollen? Und spräche was dagegen, das Wiki vielleicht etwas klarer zu strukturieren - zumindest ich finde die Struktur nicht sonderlich intuitiv? ;)

Die Tools müssen nicht unbedingt in LUA geschrieben werden. Solltest du da etwas machen wollen, kannst du dich ja mal mit Skotsche austauschen, der auch seine Hilfe angeboten hat und gerne etwas mit Java machen würde.

Okay, werde ich tun.

(20.03.2009, 18:53)Hendrik schrieb: Das Wiki ist in der Tat etwas stiefmütterlich behandelt worden. Ich habe gelegentlich schon mal versucht, etwas Ordnung reinzubringen, aber letztlich auch nicht viel Zeit darauf verwandt. Es wäre schön, wenn da mal jemand aufräumen würde. Was findest du denn konkret unintuitiv an der Struktur bzw. hast du schon einen Vorschlag, wie man es übersichtlicher gestalten könnte? Eventuell würde sich zu diesem Thema auch ein eigener Thread oder eine Diskussionsseite auf dem Wiki anbieten, damit hier nicht zu viel behandelt wird.

Auf der Hauptseite sind viele Links, die aber fast alle extern sind, ich finde da findet man nicht so richtig den Einsteig. Aber eine genaue Struktur habe ich mir jetzt auch noch nicht überlegt, mal sehen, da muss ich mir mal die aktuellen Artikel anschauen. Die Diskussion sollte man auf jeden Fall auslagern, in diesem Thread hat sie ja eigentlich nichts verloren. ;)

Gruß,

bimberbube
Um zum einen das Wiki etwas übersichtlicher zu machen und zum anderen die Koordination der verschiedenen Arbeiten zu erleichtern, habe ich im Wiki mal einen Artikel "Tasklist nach Aufgaben" angelegt. Der ist im Moment noch unvollständig und vor allem auf meine Arbeiten bezogen. Es wäre schön, wenn die Beteiligten zum einen ihre eigenen Arbeiten dort reinschreiben würden, als auch die Gesamtliste zu ergänzen um Dinge, die mir jetzt nicht aufgefallen sind. Wenn sie etwas vollständiger ist, kann man ja einen Verweis auf die Liste in der Hauptseite (oder gar im Menü links) unterbringen.
Hallo, ich bin's - der Bart von Fidel Castro. Und mir ist total langweilich nie geschnitten wurde.
I'm a roleplayer. My dice are like my relationships: platonic and unlucky.
Hi,

mittlerweile habe ich es immerhin geschafft, alles zu bauen, beim ausführen von freedsa bekomme ich allerdings eine Fehlermeldung:

Code:
roland@abelina:~/subversion/freedsa_trunk/bin$ ./freedsa
MainWorkingDir    ../
lugreluapath    ../lugre/lua/
Lua version : 5.1
/usr/local/lib/OGRE
OGRE_VERSION 10601
bIsFullScreen=1
file: trying to load ../data/schick.dat
    File:    schick.dat
    Version:    V3.02
    Language:    de
    With 308 Files
extract ../data/work/ANIS to ../data/work/ANIS_EXT with 36 files
extract ../data/work/MONSTER to ../data/work/MONSTER_EXT with 36 files
extract ../data/work/MFIGS to ../data/work/MFIGS_EXT with 43 files
extract ../data/work/WFIGS to ../data/work/WFIGS_EXT with 43 files
Animation(1)
64 34
LuaErrorHandler start

LuaErrorHandler end
lugre/src/lugre_main.cpp:202:Lugre_Run
lugre/src/lugre_game.cpp:19:Run
  lugre/src/lugre_scripting.cpp:263:LuaCall
   lugre/src/lugre_scripting.cpp:209:LuaErrorHandler
PrintLuaStackTrace:
LuaStackTrace:

ERROR : LuaError
error running function `Main': ../lua/loader/loader.tab.lua:164: bad argument #1 to 'ipairs' (table expected, got nil)
LuaStackTrace:

    [C]: in function `ipairs'
    ../lua/loader/loader.tab.lua:164: in function `DumpTGA'
    ../lua/main.lua:156: in function <../lua/main.lua:84>

Aborted

Kann mir jemand sagen, wo das Problem liegt?

Danke,

bimberbube
Für Schweif ergeben verschieden Konfigurationen der Musikeinstelungen die
folgende Tabelle:

Code:
FM Ton          | Digital   | SOUND.CFG  (hex)                                      

SB                 | SB        | 2002 0700 2002 0700 0000 0000 0000 0000 0000 0000
Adlib              | Adlib    | 8803 FFFF 8803 FFFF 0000 0000 0000 0000 0000 0000
GUS               | Forte   | FFFF FFFF FFFF FFFF 0000 0000 0000 0000 0000 0000
Roland MT32 | SB        | 3003 FFFF 2002 0700 0000 0000 0000 0000 0000 0000
CD Sound      | SB       | CDC CDCD 2002 0700 0000 0000 0000 0000 0000 0000
--                   | SB Pro | 0000 0000 2002 0700 0000 0000 0000 0000 0000 0000

Offensichtlich sind jeweils im "little endian"-Format Byte 0 und
1 für FM-Ton, sowie Byte 2 und 3 für Digitalsound zuständig. Im ersten Byte
steht der I/O Port und im 2 der Interrupt.

Zusätzlich dazu werden die gewählten Miles Audiotreiber nach SOUND.ADV und
DIGI.ADV. Dabei handelt es sich um TSR-Programme die weitgehend selbständig ablaufen.

Wenn man sich die Executables von Schick im Disassembler ansieht, dann werden dort
u.U. durchaus SOUND.ADV und z.B. GEN.XMI geladen. Also muss es irgendwie
möglich sein, auch die CD-Version von Schick mit MIDI-Sound zu spielen.

EDIT: Schick scheint das selbe Format zu haben wie Schweif.
Interessant. Vielleicht muss nur an einer Stelle ein JMP umgebogen werden, um auch in der CD-Version der Schicksalsklinge MIDI-Sound zu kriegen. Da ich sowieso gerade mit dem Code von Schick/Schweif rumwurstel, werde ich mir das mal angucken.

Übrigens: Ich arbeite derzeit wieder am DosBox-Patch, wer sich dafür interessiert, kann ja mal meinen neuesten Eintrag im Entwicklertagebuch lesen.
Hallo, ich bin's - der Bart von Fidel Castro. Und mir ist total langweilich nie geschnitten wurde.
I'm a roleplayer. My dice are like my relationships: platonic and unlucky.
Die Startroutine springt die Routine
Code:
seg000:014C                 call seg002:5816
an, und diese dann
Code:
seg002:5905                 call seg002:00E6
Diese initialisiert scheinbar die Hardware.
SOUND.ADV würde völlig analog zu DIGI.ADV behandelt, wenn da nicht
Code:
seg002:0156                 jmp 0196
wäre.

Vermutlich muss man das jmp auf 158 umbiegen. :think:
Das reicht leider nicht aus. Ich habe meine SCHICKM.EXE jetzt am Offset 0x7736 und 0x7737, wo der JMP-Befehl abgelegt ist, gepatcht, indem ich beide Bytes auf 0x90 (NOP=No Operation) gesetzt habe -- statt zu springen, wird jetzt der direkt folgende Code aufgerufen und die SOUND.ADV auch noch geladen. Die SOUND.ADV und die SOUND.CFG habe ich von einer funktionierenden Sternenschweif-Konfiguration genommen.

Das Spiel startet wie gewohnt, der Logger zeigt mir auch an, dass auf die SOUND.ADV zugegriffen wird. Dennoch höre ich keinen Sound. Vermutlich muss noch irgendwo die Abspiel-Routine freigeschaltet werden. Die ist allerdings nicht so einfach zu finden. Man müsste die Routine finden, die Dateien aus dem Archiv lädt und von dort aus eine Routine, die auf die .XMI-Dateien zugreift (was leider nur über deren Index am Ende der SCHICKM.EXE stattfinden kann). Von dort wiederum könnte man die passenden Stellen finden, wo gepatcht werden müsste.

Ansonsten bliebe noch die Möglichkeit, einen Assembler-Diff mit der Diskettenversion zu versuchen, aber ob das wirklich etwas bringt, weiß ich nicht. Vermutlich muss man sich durch mehrere tausend Zeilen Differenz wühlen - vom Regen in die Traufe.
Hallo, ich bin's - der Bart von Fidel Castro. Und mir ist total langweilich nie geschnitten wurde.
I'm a roleplayer. My dice are like my relationships: platonic and unlucky.
Was auffällt ist, dass AOUND.ADV zwei mal im Speicher steht, DIGI.ADV aber nur einmal. Vielleicht ist das ein Hinweis.

Wenn das nicht weiterhilft, findet man ziemlich einfach die stellen, an denen auf das CD-ROM zugegriffen wird. Und da jedes mal, wenn ein anderes Lied gespielt wird, der Lesekopf anders positioniert wird...

Mal gucken.

EDIT: "sound hardware nicht gefunden" hört sich auch interessant an.

EDIT2: Die Funktion mit "bitte auswählen:" und "keine musik", etc. ruft eine funktoin auf, die auf das CDROM zugreift :D




Benutzer, die gerade dieses Thema anschauen: 31 Gast/Gäste