#include #include #include #include "lzss.h" #include "fileutils.h" void process_one_file(FILE * f, FILE * d, int n) { char nom_du_fichier[100]; char zeros[4] = {0, 0, 0, 0}, * datas; long script_position, true_length, delta, data_length; FILE * f_part; fprintf(stderr, " Copying header\n"); fseek(f, 0x14c, SEEK_SET); fread(&script_position, 1, 4, f); fseek(f, 0, SEEK_SET); copy(f, d, script_position); fseek(f, 0x150, SEEK_SET); fread(&script_position, 1, 4, f); fseek(f, script_position, SEEK_SET); data_length = filesize(f) - script_position; datas = (char *) malloc(data_length); fread(datas, 1, data_length, f); fprintf(stderr, " Processing script\n"); sprintf(nom_du_fichier, "xeno_d1/ROOMS/%04i/script.comp", n); f_part = fopen(nom_du_fichier, "r"); true_length = filesize(f_part); script_position = fseek(d, 0, SEEK_CUR); fseek(d, 0x14c, SEEK_SET); fwrite(&script_position, 1, 4, d); fseek(d, 0x128, SEEK_SET); fwrite(&true_length, 1, 4, d); fseek(d, 0, SEEK_END); lzss_comp(f_part, d, &delta); fclose(f_part); script_position = fseek(d, 0, SEEK_CUR); if ((true_length = (script_position & 3))) { fwrite(zeros, 1, 4 - true_length, d); } fprintf(stderr, " Processing extra datas\n"); script_position = fseek(d, 0, SEEK_CUR); fseek(d, 0x150, SEEK_SET); fwrite(&script_position, 1, 4, d); fseek(d, 0, SEEK_END); fwrite(datas, 1, data_length, d); free(datas); } int main(int argc, char ** argv) { FILE * f_script_comp, * f_new_script; int i; int num = 0; char nom_du_fichier[100]; for (i = 384; i < 1844; i = i + 2) { fprintf(stderr, "CD1 - File %d -> Script %d\n", i, num); sprintf(nom_du_fichier, "xeno_d1/ROOMS/%04d.out", i); f_script_comp = fopen(nom_du_fichier, "r"); sprintf(nom_du_fichier, "xeno_d1/ROOMS/%04d.out-new", i); f_new_script = fopen(nom_du_fichier, "w"); process_one_file(f_script_comp, f_new_script, num); fclose(f_script_comp); num++; } num = 0; for (i = 379; i < 1838; i = i + 2) { fprintf(stderr, "CD2 - File %d -> Script %d\n", i, num); sprintf(nom_du_fichier, "xeno_d2/ROOMS/%04d.out", i); f_script_comp = fopen(nom_du_fichier, "r"); sprintf(nom_du_fichier, "xeno_d2/ROOMS/%04d.out-new", i); f_new_script = fopen(nom_du_fichier, "w"); process_one_file(f_script_comp, f_new_script, num); fclose(f_script_comp); num++; } fprintf(stderr, "Done !\n"); }