summaryrefslogtreecommitdiff
path: root/Xenogears/script-comp.cpp
diff options
context:
space:
mode:
authorPixel <Pixel>2002-05-04 17:53:08 +0000
committerPixel <Pixel>2002-05-04 17:53:08 +0000
commit24fb33726eca4e8c5a88797adc9c17f4d541f543 (patch)
tree72b385bd9e880e699e43c7db3ba12817f0e8e45e /Xenogears/script-comp.cpp
Initial revision
Diffstat (limited to 'Xenogears/script-comp.cpp')
-rw-r--r--Xenogears/script-comp.cpp96
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");
+}