(17.04.2021, 20:58)siebenstreich schrieb: Ein potentieller Makel ergäbe sich, wenn es viele Code-Stellen gibt, die auf denselben fehlerhaften Eintrag in der SCHICK.DAT zugreifen, denn dann muss man den Hot-Fix an jeder solchen Stelle vornehmen.Dann definiert man halt eine Funktion, die man an jeder solchen Stelle aufruft. Das halte ich jetzt für keinen besonders großen Aufwand.
(17.04.2021, 20:58)siebenstreich schrieb: Man [..] verbreitet Binärpatches.Da stimme ich zu. Ich finde es auch sehr unbefriedigend, wenn man nur die Binär-Files rausgibt und nirgendwo nachvollziehbar und reproduzierbar dokumentiert ist, was und wie geändert wurde.
(17.04.2021, 20:58)siebenstreich schrieb: Man bricht (zumindest die textlastigen) Daten der SCHICK.DAT auf ein besser lesbares Format herunter und macht dort die Änderungen.Wenn es nur um Text geht, braucht man kein lesbareres Format, weil der Text ja schon so lesbar ist. Du kannst dir ja mal die SCHICK.DAT mit einem Hex-Editor anschauen. Der Text ist bis auf ein paar Sonderzeichen direkt lesbar. Solche Patches könnte man mit diff und xxd erstellen. Gemessen an allen Beispielen, die du uns hier bisher vorgestellt hast, finde ich es aber immer noch am einfachsten, die Änderungen direkt im Quellcode vorzunehmen - so wie es bereits getan wird.
(17.04.2021, 20:58)siebenstreich schrieb: Die Frage ist jetzt, ob man das so gut findet, oder eher nicht.Ich finde es gut so und sähe nur zwei Gründe, warum man es anders machen sollte: 1. Falls es wirklich sehr viele sehr große Änderungen an der SCHICK.DAT gibt, die sehr viele unübersichtliche zusätzliche Codezeilen benötigen. 2. Man will generell nicht nur Bugs fixen, sondern komplexere Mod-artige Änderungen vornehmen (sowas schwebte mir ursprünglich mal vor, als ich das schick-data-gui Tool begonnen habe, bin davon aber wieder abgekommen).
Am Rande bemerkt verstehe ich nicht, warum Henne an den von dir verlinkten Stellen so umständliche Char-Arrays anstatt String-Literale benutzt:
Code:
const unsigned char add_line[110] = { 0x40, 0x3c,'I','C','H',' ',
'G','L','A','U','B','E',',',' ',
'I','C','H',' ',
'M','U','S','S',' ',
'E','S',' ' ,'N','U','R',' ',
'N','O','C','H',' ','E','I','N',' ',
'E','I','N','Z','I','G','E','S',' ',
'M','A','L',' ','V','E','R','S','U','C','H','E','N','!', 0x3e,' ',
'M','U','R','M','E','L','T',' ',
'%', 's',' ',
'A','L','S',' ',
'%', 's',' ',
'W','I','E','D','E','R',' ',
'A','U','F',' ',
'%','s','E',' ',
'F', 0x9a, 'S','S','E',' ',
'K','O','M','M','T','.',
'\0'
};
Ich habe ja nicht so viel Ahnung von C und C++, aber ginge das nicht auch so?
Code:
const unsigned char add_line[110] = "\x40\x3cICH GLAUBE, ICH MUSS ES NUR NOCH "
"EIN EINZIGES MAL VERSUCHEN!\x3e MURMELT %s "
"ALS %s WIEDER AUF %sE F\x9aSSE KOMMT.";