01.02.2016, 00:30
Hallo allerseits,
ich beobachte dieses Reverse-Engineering-Projekt schon länger und bin schwer beeindruckt, wie weit diese Mammut-Aufgabe bereits vorangeschritten ist. Respekt!
Den auf Github zugänglichen Quellcode von Version 3.02 (de) habe ich als Grundlage genommen, um mir mal ein paar Assembler-Kenntnisse anzueignen (C versteh ich bereits einigermaßen). Das ist ja wirklich gut machbar mit den ebenfalls verfügbaren IDA-Dateien.
Nachdem ich nun so ein bisschen drin bin, dachte ich, ich kann vielleicht auch ein bisschen mithelfen, und fand auch direkt klare Handlungsanweisungen von HenneNWH in einem früheren Beitrag (http://www.crystals-dsa-foren.de/showthr...#pid142632). Aber es ist ja ein Wahnsinn, sich da so weit einzuarbeiten, dass man wirklich mal eine lokale Variable "versteht"!
Assembler in C übersetzen ist schon mühsam genug, aber dann noch verstehen, was der Code wirklich tut ...!? Ich bin schon ziemlich beeindruckt davon, dass es doch so viele Funktionen und globale Variablen sind, die bereits "entschlüsselt" werden konnten. Ich dachte, ich fange mal mit dem Kampfsystem an, und versuche zu verstehen, wie das funktioniert - konkret wollte ich den Sinn von FIG_LIST_HEAD und der dort gespeicherten Werte verstehen. Da scheinen ja recht zentrale Daten des aktuellen Kampfes gespeichert zu sein. Gibt es irgendeine Stelle, an der ihr sowas dokumentieren würdet?
Ich muss echt sagen, dass ich nach Stunden des Code-Durchstöberns immer noch nicht viel verstehe. Was zur Hölle macht denn beispielsweise die Funktion `FIG_set_12_13` (oder `FIG_reset_12_13`) in seg006?! Da geht's offensichtlich um den an Stelle 0x12 gespeicherten Wert und der kann die Werte 0,1,2,3 annehmen, aber was bedeutet das? In der Funktion `FIG_set_0e` hat jemand kommentiert, es handle sich um eine "presence flag". Was auch immer das ist: Habt ihr das herausgefunden, indem ihr entsprechende DEBUG-logs hinzugefügt habt und das Spiel so lange gespielt habt, bis ihr entsprechenden Output generieren konntet? Oder wie würdet ihr bei sowas generell vorgehen?
ich beobachte dieses Reverse-Engineering-Projekt schon länger und bin schwer beeindruckt, wie weit diese Mammut-Aufgabe bereits vorangeschritten ist. Respekt!
Den auf Github zugänglichen Quellcode von Version 3.02 (de) habe ich als Grundlage genommen, um mir mal ein paar Assembler-Kenntnisse anzueignen (C versteh ich bereits einigermaßen). Das ist ja wirklich gut machbar mit den ebenfalls verfügbaren IDA-Dateien.
Nachdem ich nun so ein bisschen drin bin, dachte ich, ich kann vielleicht auch ein bisschen mithelfen, und fand auch direkt klare Handlungsanweisungen von HenneNWH in einem früheren Beitrag (http://www.crystals-dsa-foren.de/showthr...#pid142632). Aber es ist ja ein Wahnsinn, sich da so weit einzuarbeiten, dass man wirklich mal eine lokale Variable "versteht"!
Assembler in C übersetzen ist schon mühsam genug, aber dann noch verstehen, was der Code wirklich tut ...!? Ich bin schon ziemlich beeindruckt davon, dass es doch so viele Funktionen und globale Variablen sind, die bereits "entschlüsselt" werden konnten. Ich dachte, ich fange mal mit dem Kampfsystem an, und versuche zu verstehen, wie das funktioniert - konkret wollte ich den Sinn von FIG_LIST_HEAD und der dort gespeicherten Werte verstehen. Da scheinen ja recht zentrale Daten des aktuellen Kampfes gespeichert zu sein. Gibt es irgendeine Stelle, an der ihr sowas dokumentieren würdet?
Ich muss echt sagen, dass ich nach Stunden des Code-Durchstöberns immer noch nicht viel verstehe. Was zur Hölle macht denn beispielsweise die Funktion `FIG_set_12_13` (oder `FIG_reset_12_13`) in seg006?! Da geht's offensichtlich um den an Stelle 0x12 gespeicherten Wert und der kann die Werte 0,1,2,3 annehmen, aber was bedeutet das? In der Funktion `FIG_set_0e` hat jemand kommentiert, es handle sich um eine "presence flag". Was auch immer das ist: Habt ihr das herausgefunden, indem ihr entsprechende DEBUG-logs hinzugefügt habt und das Spiel so lange gespielt habt, bis ihr entsprechenden Output generieren konntet? Oder wie würdet ihr bei sowas generell vorgehen?