1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#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");
}
|