![Grin ;D](./images/smilies/grin.gif)
Es geht vorallem um 2 neue Befehle die ich in sfall eingebaut habe:
1. write_int(Offset, Value)
Mit diesem Befehl ist es möglich direkt Werte in der Engine per Script zu verändern. Theoretisch ist es sogar möglich ganz neue Funktionen in das laufende Fallout zu schreiben.
Der Befehl braucht in der Klammer 2 Variablen. Als erstes gibt man die Offset Adresse in dezimal an und als zweites die Zahl welche auf die Offset geschrieben werden soll.
2. call_offset(Offset)
Durch diesen Befehl ist es möglich alle Engine Funktionen direkt aufzurufen. Oft müssen allerdings mehrer Funktionen aufgerufen werden um ein korrektes Ergebnis zu erzielen.
Diese Befehl braucht lediglich die Offset Adresse der Funktion, auch wieder als dezimal Wert. Außerdem ist darauf zu achten das es zu Abstürzen kommen kann durch unsachgemäße Adressen oder durch mehrfaches aufrufen einer Funktion. Das liegt in der natur der Sache und ist nicht zu ändern. Aber durch ordentlich geschriebene Script's kann man das vermeiden
![Wink ;)](./images/smilies/wink.gif)
Um den Einstieg leichter zu gestalten habe ich eine Header mit vordefinierten Funktionen geschrieben welche diese beiden Befehle benutzen.
Darunter sind Funktionen für den Maus Input, Goris animation und vieles mehr.
Hier erstmal das Packet: http://www.file-upload.net/download-1395976/Pack.rar.html
Es enthält die sfall Version, den neuen Compiler und natürlich die extra.h.
Darüber hinaus kann jeder diese Header erweitern. Es gibt mehrer Möglichkeiten neue Offsets zu bekommen:
1.Die Effektivste Möglichkeit ist einen Disassembler zu verwenden, empfehlen kann ich IDA Pro. Vor allem ist dieser nützlich um sich ein Bild der über 3600 Engine Funktionen zu machen. Allerdings wären dafür Programmiererfahrungen sinnvoll.
2.Habe ich einen Script geschrieben mit dem es möglich ist "Ingame" nach Werten suchen zu lassen und diese in die debug.log schreiben zu lassen. Aktiviert wird das ganze durch drücken der Taste Q. Voraussetzungen dafür sind allerdings das der debug Modus von Fallout aktiviert ist und das man grob weiß in welchem Bereich man suchen muss.
Es können die Start Offset, End Offset und der Wertebereich definiert werden:
[spoiler]
Code: Select all
//Gl Script to Scan the Ram and wrote it in the debug.log ;)
procedure start;
variable read_start;
variable read_end;
variable value;
variable offset;
variable count;
variable mod;
procedure start begin
if (game_loaded) then begin
set_global_script_repeat(100);
set_global_script_type(0);
end
if (key_pressed(16)) then begin
read_start := 5340000;
read_end := 5350000;
while (mod != 2) do begin
if (read_int(read_start) >= 0) and (read_int(read_start) <= 999) then begin
value := read_int(read_start);
offset := read_start;
display_msg("Offset" + count + ": " + offset);
display_msg("Value" + count + ": " + value);
value := 0;
count := (count + 1);
read_start := (read_start + 1);
if (read_start == (read_end + 1)) then begin
display_msg("Ende erreicht!");
mod := 2;
end
end else if (not(read_int(read_start) >= 0)) or (not(read_int(read_start) <= 999)) then begin
read_start := (read_start + 1);
if (read_start == (read_end + 1)) then begin
display_msg("Ende erreicht!");
mod := 2;
end
end
end
end
end
3. Möglichkeit ist ein Memory Editor. Empfehlen würde ich da Cheat Engine, da mit diesem Programm sehr viel möglich ist. Direktes injecten von Assembler Code, Memory Disassembler, Pointer suche usw. Das ist wohl das einfachste verfahren für Leute die sich nicht mit Assembler auskennen und auch sonst nicht viel Programmiererfahrung haben. Eigentlich ist es ganz einfach man startet Fallout und Cheat Engine, gibt in Cheat Engine ein welchen Wert man suchen möchte(unbekannt ist auch möglich) danach wieder in Fallout und den Wert verändern, Cheat Engine das mitteilen und aussieben lassen. Im Idealfall bleibt dann der Wert übrig nach dem man gesucht hat. Die Adresse des Wertes muss noch in dezimal umgewandelt werden und schon kann man ihn mit write_int() im Script verwenden
![Wink ;)](./images/smilies/wink.gif)
Bei Fragen Anregungen oder Probleme stehen ich gerne zur Verfügung.
Viel Spaß damit wünsche ich euch
![Cheesy :D](./images/smilies/cheesy.gif)