diff options
author | Pixel <Pixel> | 2002-05-04 17:53:08 +0000 |
---|---|---|
committer | Pixel <Pixel> | 2002-05-04 17:53:08 +0000 |
commit | 24fb33726eca4e8c5a88797adc9c17f4d541f543 (patch) | |
tree | 72b385bd9e880e699e43c7db3ba12817f0e8e45e /Xenogears/script-comp.cpp |
Initial revision
Diffstat (limited to 'Xenogears/script-comp.cpp')
-rw-r--r-- | Xenogears/script-comp.cpp | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/Xenogears/script-comp.cpp b/Xenogears/script-comp.cpp new file mode 100644 index 0000000..96645df --- /dev/null +++ b/Xenogears/script-comp.cpp @@ -0,0 +1,96 @@ +#include <stdio.h> +#include <stdlib.h> +#include "lz77.h" +#include "fileutils.h" + +void process_one_file(int f, int d, int n) { + char nom_du_fichier[100]; + char zeros[4] = {0, 0, 0, 0}, * datas; + long script_position, true_length, delta, data_length; + int f_part; + + fprintf(stderr, " Copying header\n"); + + lseek(f, 0x14c, SEEK_SET); + read(f, &script_position, 4); + lseek(f, 0, SEEK_SET); + copy(f, d, script_position); + + lseek(f, 0x150, SEEK_SET); + read(f, &script_position, 4); + lseek(f, script_position, SEEK_SET); + + data_length = filesize(f) - script_position; + + datas = (char *) malloc(data_length); + read(f, datas, data_length); + + fprintf(stderr, " Processing script\n"); + sprintf(nom_du_fichier, "xeno_d1/ROOMS/%04i/script.comp", n); + + f_part = open(nom_du_fichier, O_RDONLY); + true_length = filesize(f_part); + + script_position = lseek(d, 0, SEEK_CUR); + lseek(d, 0x14c, SEEK_SET); + write(d, &script_position, 4); + lseek(d, 0x128, SEEK_SET); + write(d, &true_length, 4); + lseek(d, 0, SEEK_END); + + lz77_comp(f_part, d, &delta); + + close(f_part); + + script_position = lseek(d, 0, SEEK_CUR); + if ((true_length = (script_position & 3))) { + write(d, zeros, 4 - true_length); + } + + fprintf(stderr, " Processing extra datas\n"); + script_position = lseek(d, 0, SEEK_CUR); + lseek(d, 0x150, SEEK_SET); + write(d, &script_position, 4); + lseek(d, 0, SEEK_END); + + write(d, datas, data_length); + + free(datas); +} + +int main(int argc, char ** argv) +{ + int 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 = open(nom_du_fichier, O_RDONLY); + sprintf(nom_du_fichier, "xeno_d1/ROOMS/%04d.out-new", i); + f_new_script = open(nom_du_fichier, O_WRONLY | O_CREAT | O_TRUNC, 00644); + + process_one_file(f_script_comp, f_new_script, num); + + close(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 = open(nom_du_fichier, O_RDONLY); + sprintf(nom_du_fichier, "xeno_d2/ROOMS/%04d.out-new", i); + f_new_script = open(nom_du_fichier, O_WRONLY | O_CREAT | O_TRUNC, 00644); + + process_one_file(f_script_comp, f_new_script, num); + + close(f_script_comp); + num++; + } + fprintf(stderr, "Done !\n"); +} |