Files
2020-12-22 20:54:55 -06:00

39 lines
1.1 KiB
Plaintext

/// crypt(file, encryption_key)
// I might have messed up something (game id?) here because
// official and recompiled builds don't seem to be compatible.
if (!file_exists(argument0)) return -1;
var keypos = 0;
var gmid = string(game_id);
var key = "";
var read = 0;
var file = 0;
var epos = 0;
var rate = min(argument2, 10);
rate = max(rate, 0);
repeat (5) gmid += gmid;
epos = 0;
var keys;
repeat (floor(string_length(string(game_id)) * 5)) {
keys[epos] = ord(string_copy(gmid, epos, 2)) ^ ord(string_char_at(argument1, keypos)) - floor(epos / 3);
keypos += 1;
if (keypos > string_length(argument1)) keypos = 1;
epos += 1;
}
epos -= 1;
keypos = 0;
file = file_bin_open(argument0, 2);
file_bin_seek(file, 0);
var filesize = file_bin_size(file);
rate *= filesize / 10000;
rate = round(rate);
do {
read = file_bin_read_byte(file);
file_bin_seek(file, file_bin_position(file) - 1);
file_bin_write_byte(file, read ^ keys[keypos]);
keypos += 1;
if (keypos > epos) keypos = 1;
if (rate) file_bin_seek(file, file_bin_position(file) + rate);
} until (file_bin_position(file) >= filesize);
file_bin_close(file);
return 1;