summaryrefslogtreecommitdiff
path: root/Xenogears/script-dec.cpp
blob: a829231e83364c9a51bb6ef4185db02cb9e3b50e (plain)
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
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "lzss.h"
#include "String.h"
#include "Input.h"
#include "Output.h"
#include "Main.h"

CODE_BEGINS
public:
Appli() : lzss_o(new lzss()) {}
virtual ~Appli() { delete lzss_o; }
private:

lzss * lzss_o;

void process_one_file(Handle * f, int d, int n) {
    String nom_du_fichier;
    long script_position, true_length;
    int i;
    Handle * f_out;
    
    if (f->GetSize() == 24) return;
    
    nom_du_fichier.set("xeno_d%d/ROOMS/%04i", d, n);
    MKDIR(nom_du_fichier.to_charp());

    i = 7;
//    for (i = 0; i < 9; i++) {
//	printm(M_BARE, "  Processing part %i\n", i);
	nom_du_fichier.set("xeno_d%d/ROOMS/%04i/script.comp", d, n);
//	sprintf(nom_du_fichier, "xeno_d%d/ROOMS/%04i/part-%i", d, n, i);
	f_out = new Output(nom_du_fichier);
	f->seek(0x130 + i * 4);
	f->read(&script_position, 4);
	f->seek(0x10c + i * 4);
	f->read(&true_length, 4);
	f->seek(script_position);
	lzss_o->lzss_decomp(f, f_out, true_length);
//	if (i == 7) {
//    	    fseek(f_out, 0, SEEK_SET);
//	    fread(&true_length, 4, 1, f_out);
//	    printm(M_BARE, "      (seems to be the script number %i)\n", true_length);
//	}
	delete f_out;
//    }
}

virtual int startup() throw (GeneralException)
{
    Handle * f_script_comp;
    int i;
    int num = 0;
    char nom_du_fichier[100];

    for (i = 384; i < 1844; i = i + 2) {
	printm(M_BARE, "CD 1 - File %d -> Script %d\n", i, num);
	sprintf(nom_du_fichier, "xeno_d1/ROOMS/%04d.out", i);
	f_script_comp = new Input(nom_du_fichier);
	
	process_one_file(f_script_comp, 1, num);

	delete f_script_comp;
	num++;
    }

    num = 0;

    for (i = 379; i < 1838; i = i + 2) {
	printm(M_BARE, "CD 2 - File %d -> Script %d\n", i, num);
	sprintf(nom_du_fichier, "xeno_d2/ROOMS/%04d.out", i);
	f_script_comp = new Input(nom_du_fichier);
	
	process_one_file(f_script_comp, 2, num);

	delete f_script_comp;
	num++;
    }
    printm(M_BARE, "Done !\n");
    return 0;
}
CODE_ENDS