diff options
Diffstat (limited to 'Xenogears')
-rw-r--r-- | Xenogears/Decrypt.cpp | 1026 | ||||
-rw-r--r-- | Xenogears/Translate.cpp | 512 | ||||
-rw-r--r-- | Xenogears/archive.cpp | 74 | ||||
-rw-r--r-- | Xenogears/build-sector-2.cpp | 28 | ||||
-rw-r--r-- | Xenogears/build-sector.cpp | 28 | ||||
-rw-r--r-- | Xenogears/main_dump.cpp | 566 | ||||
-rw-r--r-- | Xenogears/reinsert.cpp | 580 | ||||
-rw-r--r-- | Xenogears/script-comp.cpp | 218 | ||||
-rw-r--r-- | Xenogears/script-dec.cpp | 164 | ||||
-rw-r--r-- | Xenogears/test-dlzss.cpp | 14 | ||||
-rw-r--r-- | Xenogears/test-lzss.cpp | 14 |
11 files changed, 1612 insertions, 1612 deletions
diff --git a/Xenogears/Decrypt.cpp b/Xenogears/Decrypt.cpp index 7cdb1aa..0683078 100644 --- a/Xenogears/Decrypt.cpp +++ b/Xenogears/Decrypt.cpp @@ -1,513 +1,513 @@ -#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include "generic.h"
-#include "Input.h"
-#include "Output.h"
-#include "Main.h"
-
-CODE_BEGINS
-void init_table(long table[5000])
-{
- long i;
-
- for (i = 0; i < 5000; i++) {
- table[i] = 0;
- }
-}
-
-char found_position(long table[5000], int number, FILE * f_source)
-{
- long position;
- long i;
-
- position = ftell(f_source);
-
- for (i = 0; i < number; i++) {
- if (table[i] <= position)
- return (1);
- }
- return (0);
-}
-
-long found_next(long table[5000], long script_number, long max_script)
-{
- long i;
- long next = 0xFFFF;
- long actual = table[script_number];
-
- for (i = 0; i < script_number; i++) {
- if (table[i] > actual) {
- if (table[i] < next)
- next = table[i];
- }
- }
-
- for (i = script_number + 1; i < max_script; i++) {
- if (table[i] > actual) {
- if (table[i] < next)
- next = table[i];
- }
- }
-
- return (next);
-}
-
-void dump_text(FILE * f_source, FILE * f_cible, long table[5000], long script_number,
- long max_script, unsigned char *length_table, unsigned char *line_table)
-{
- long next;
- unsigned char val;
- char temp_string[2] = {0, 0};
- long position;
- unsigned char temp1 = 0;
- unsigned char temp2 = 0;
-
- next = found_next(table, script_number, max_script);
-
- fseek(f_source, table[script_number], SEEK_SET);
-
- fprintf(f_cible, "<Text_block lines:%d width:%d>\n",
- line_table[script_number], length_table[script_number]);
-
- position = ftell(f_source);
-
- while (position < next) {
- val = 0;
-
- fread((unsigned char *) &val, 1, 1, f_source);
-
- if (val == 0x00) // "<Close>"
- {
- break;
- } else if (val == 0x01) // "\n"
- {
- fprintf(f_cible, "\n");
- } else if (val == 0x02) // "<New>"
- {
- fprintf(f_cible, "<New>\n");
- } else if (val == 0x03) // "<Wait>"
- {
- fprintf(f_cible, "<Wait>");
- } else if (val == 0x0F) // Extended opcode. Reads two more bytes.
- {
- fread((unsigned char *) &temp1, 1, 1, f_source);
- fread((unsigned char *) &temp2, 1, 1, f_source);
- if (temp1 == 0) {
- fprintf(f_cible, "<Delay %d>", temp2);
- } else if (temp1 == 5) {
- switch (temp2) {
- case 0:
- fprintf(f_cible, "<Fei>");
- break;
- case 1:
- fprintf(f_cible, "<Elly>");
- break;
- case 2:
- fprintf(f_cible, "<Citan>");
- break;
- case 3:
- fprintf(f_cible, "<Bart>");
- break;
- case 4:
- fprintf(f_cible, "<Billy>");
- break;
- case 5:
- fprintf(f_cible, "<Rico>");
- break;
- case 6:
- fprintf(f_cible, "<Emeralda>");
- break;
- case 7:
- fprintf(f_cible, "<Chu-Chu>");
- break;
- case 8:
- fprintf(f_cible, "<Maria>");
- break;
- case 9:
- fprintf(f_cible, "<Citan2>");
- break;
- case 10:
- fprintf(f_cible, "<Emeralda2>");
- break;
- case 11:
- fprintf(f_cible, "<Weltall>");
- break;
- case 12:
- fprintf(f_cible, "<Weltall-2>");
- break;
- case 13:
- fprintf(f_cible, "<Vierge>");
- break;
- case 14:
- fprintf(f_cible, "<Heimdal>");
- break;
- case 15:
- fprintf(f_cible, "<Brigandier>");
- break;
- case 16:
- fprintf(f_cible, "<Renmazuo>");
- break;
- case 17:
- fprintf(f_cible, "<Stier>");
- break;
- case 18:
- fprintf(f_cible, "<BigChu-chu>");
- break;
- case 19:
- fprintf(f_cible, "<Seibzehn>");
- break;
- case 20:
- fprintf(f_cible, "<Crescens>");
- break;
- case 21:
- fprintf(f_cible, "<Regurus>");
- break;
- case 22:
- fprintf(f_cible, "<Fenrir>");
- break;
- case 23:
- fprintf(f_cible, "<Andvari>");
- break;
- case 24:
- fprintf(f_cible, "<Renmazuo>");
- break;
- case 25:
- fprintf(f_cible, "<Stier-2>");
- break;
- case 26:
- fprintf(f_cible, "<Xenogears>");
- break;
- case 27:
- fprintf(f_cible, "<BARTHOS>");
- break;
- case 28:
- fprintf(f_cible, "<Yggdra>");
- break;
- case 128:
- fprintf(f_cible, "<Perso1>");
- break;
- case 129:
- fprintf(f_cible, "<Perso2>");
- break;
- case 130:
- fprintf(f_cible, "<Perso3>");
- break;
- default:
- fprintf(f_cible, "<Gear %d>", temp2);
- }
- } else {
- fprintf(f_cible, "<Opcode %d %d>", temp1, temp2);
- }
- } else if (val == 0x10) // " "
- {
- fprintf(f_cible, " ");
- } else if (val == 0x11) // "+"
- {
- fprintf(f_cible, "+");
- } else if (val == 0x12) // ","
- {
- fprintf(f_cible, ",");
- } else if (val == 0x13) // "-"
- {
- fprintf(f_cible, "-");
- } else if (val == 0x14) // "."
- {
- fprintf(f_cible, ".");
- } else if (val == 0x15) // "/"
- {
- fprintf(f_cible, "/");
- } else if ((val >= 0x16) && (val <= 0x1F)) // "0-9"
- {
- temp_string[0] = val + 0x1A;
- fprintf(f_cible, temp_string);
- } else if ((val >= 0x20) && (val <= 0x39)) // "A-Z"
- {
- temp_string[0] = val + 0x21;
- fprintf(f_cible, temp_string);
- } else if (val == 0x3A) // "["
- {
- fprintf(f_cible, "[");
- } else if (val == 0x3B) // "]"
- {
- fprintf(f_cible, "]");
- } else if (val == 0x3C) // "="
- {
- fprintf(f_cible, "=");
- } else if ((val >= 0x3D) && (val <= 0x56)) // "a-z"
- {
- temp_string[0] = val + 0x24;
- fprintf(f_cible, temp_string);
- } else if (val == 0x57) // "!"
- {
- fprintf(f_cible, "!");
- } else if (val == 0x58) // "\""
- {
- fprintf(f_cible, "\"");
- } else if (val == 0x59) // "#"
- {
- fprintf(f_cible, "#");
- } else if (val == 0x5A) // "%"
- {
- fprintf(f_cible, "%%");
- } else if (val == 0x5B) // "&"
- {
- fprintf(f_cible, "&");
- } else if (val == 0x5C) // "'"
- {
- fprintf(f_cible, "'");
- } else if (val == 0x5D) // "("
- {
- fprintf(f_cible, "(");
- } else if (val == 0x5E) // ")"
- {
- fprintf(f_cible, ")");
- } else if (val == 0x5F) // ":"
- {
- fprintf(f_cible, ":");
- } else if (val == 0x60) // "?"
- {
- fprintf(f_cible, "?");
- } else if (val == 0x61) // "<0>"
- {
- fprintf(f_cible, "<0>");
- } else if (val == 0x62) // "<1>"
- {
- fprintf(f_cible, "<1>");
- } else if (val == 0x63) // "<2>"
- {
- fprintf(f_cible, "<2>");
- } else if (val == 0x64) // "<3>"
- {
- fprintf(f_cible, "<3>");
- } else if (val == 0x65) // "<4>"
- {
- fprintf(f_cible, "<4>");
- } else if (val == 0x66) // "<5>"
- {
- fprintf(f_cible, "<5>");
- } else if (val == 0x67) // "<6>"
- {
- fprintf(f_cible, "<6>");
- } else if (val == 0x68) // "<7>"
- {
- fprintf(f_cible, "<7>");
- } else if (val == 0x69) // "<8>"
- {
- fprintf(f_cible, "<8>");
- } else if (val == 0x6A) // "<9>"
- {
- fprintf(f_cible, "<9>");
- } else if (val == 0x6B) // "<%>"
- {
- fprintf(f_cible, "<%%>");
- } else if (val == 0x6C) // "<&>"
- {
- fprintf(f_cible, "<&>");
- } else if (val == 0x6D) // "*"
- {
- fprintf(f_cible, "*");
- } else if (val == 0x6E) // "<C>"
- {
- fprintf(f_cible, "<C>");
- } else if (val == 0x6F) // "<S>"
- {
- fprintf(f_cible, "<S>");
- } else if (val == 0x70) // "<T>"
- {
- fprintf(f_cible, "<T>");
- } else if (val == 0x71) // "<*>"
- {
- fprintf(f_cible, "<*>");
- } else if (val == 0x72) // "<R>"
- {
- fprintf(f_cible, "<R>");
- } else if (val == 0x73) // "<L>"
- {
- fprintf(f_cible, "<L>");
- } else if (val == 0x74) // "<U>"
- {
- fprintf(f_cible, "<U>");
- } else if (val == 0x75) // "<U>"
- {
- fprintf(f_cible, "<D>");
- } else if (val == 0x76) // "<.>"
- {
- fprintf(f_cible, "<.>");
- } else if (val == 0x77) // "<:>"
- {
- fprintf(f_cible, "<:>");
- } else if (val == 0x79) // "</>"
- {
- fprintf(f_cible, "</>");
- } else if (val == 0x7A) // "<..>"
- {
- fprintf(f_cible, "<..>");
- } else if (val == 0x7B) // "<`>"
- {
- fprintf(f_cible, "<`>");
- } else if (val == 0x7D) // "<+>"
- {
- fprintf(f_cible, "<+>");
- } else if (val == 0x7E) // "<->"
- {
- fprintf(f_cible, "<->");
- } else if (val == 0x7F) // "<X>"
- {
- fprintf(f_cible, "<X>");
- } else if (val == 0x80) // "<[>"
- {
- fprintf(f_cible, "<[>");
- } else if (val == 0x81) // "<]>"
- {
- fprintf(f_cible, "<]>");
- } else if (val == 0x82) // "<%>"
- {
- fprintf(f_cible, "<%%>");
- } else if (val == 0x83) // "<&>"
- {
- fprintf(f_cible, "<&>");
- } else if (val == 0x84) // "<(>"
- {
- fprintf(f_cible, "<(>");
- } else if (val == 0x85) // "<)>"
- {
- fprintf(f_cible, "<)>");
- } else if (val == 0x86) // "<#>"
- {
- fprintf(f_cible, "<#>");
- } else if (val == 0x87) // "`"
- {
- fprintf(f_cible, "`");
- } else if (val == 0x88) // "°"
- {
- fprintf(f_cible, "°");
- } else if (val == 0x89) // "<=>"
- {
- fprintf(f_cible, "<=>");
- } else if (val == 0x8A) // "<?>"
- {
- fprintf(f_cible, "<?>");
- } else if (val == 0x8B) // "<!>"
- {
- fprintf(f_cible, "<!>");
- } else if (val == 0x8C) // "_"
- {
- fprintf(f_cible, "_");
- } else if (val == 0x8D) // "~"
- {
- fprintf(f_cible, "~");
- } else if (val == 0x8E) // "<...>"
- {
- fprintf(f_cible, "<...>");
- } else if (val == 0x8F) // "<'>"
- {
- fprintf(f_cible, "<'>");
- } else if (val == 0xFE) // "<Extra1 X>
- {
- fread((unsigned char *) &temp1, 1, 1, f_source);
- fprintf(f_cible, "<Extra1 %d>", temp1);
- } else if (val == 0xFF) // "<Extra2 X>
- {
- fread((unsigned char *) &temp1, 1, 1, f_source);
- fprintf(f_cible, "<Extra2 %d>", temp1);
- } else {
- fprintf(f_cible, "<Bare %X>", val);
- }
-
- position = ftell(f_source);
- }
- fprintf(f_cible, "\n<End_of_block>\n\n");
-}
-
-int decrypt(FILE * f_source, FILE * f_cible, int room_number)
-{
- long i, j;
- long table[5000];
- unsigned char line_table[5000];
- unsigned char length_table[5000];
- long script_number = 0;
- long temp = 0;
- char temp_char;
- int counter = 0;
-
- fread((long *) &script_number, 4, 1, f_source);
-
- if (script_number == 0x0000FFFF)
- return (1);
-
- script_number = (script_number++);
-
- fprintf(f_cible, "<Blocks:%li>\n", script_number);
- init_table(table);
-
- i = j = 0;
-
- while (i < script_number) {
- fread((long *) &temp, 2, 1, f_source);
- if (table[j - 1] != temp)
- table[j++] = temp;
- i++;
- }
-
- script_number = j;
-
- for (i = 0; i < script_number; i++) {
- fread((unsigned char *) &length_table[i], 1, 1, f_source);
- fread((unsigned char *) &line_table[i], 1, 1, f_source);
- }
-
- fseek(f_source, table[script_number - 1], SEEK_SET);
-
- do {
- fread((char *) &temp_char, 1, 1, f_source);
- counter++;
- } while (temp_char != 0);
-
- table[script_number] = ftell(f_source);
-
- for (i = 0; i < script_number; i++) {
- dump_text(f_source, f_cible, table, i, script_number, length_table, line_table);
- }
-
- return (0);
-}
-
-int startup(void) throw (GeneralException)
-{
- int i;
- char file_name[100];
- FILE *f_source, *f_cible;
-
- for (i = 0; i < 730; i++) {
- printf("%d\n", i);
- sprintf(file_name, "xeno_d1/ROOMS/%04d/script.comp", i);
- f_source = fopen(file_name, "rb");
-
- sprintf(file_name, "xeno_d1/ROOMS/%04d/script.txt", i);
-
- if (f_source != NULL) {
- f_cible = fopen(file_name, "w");
- decrypt(f_source, f_cible, 5);
- fclose(f_source);
- fclose(f_cible);
- }
- }
- for (i = 0; i < 730; i++) {
- printf("%d\n", i);
- sprintf(file_name, "xeno_d2/ROOMS/%04d/script.comp", i);
- f_source = fopen(file_name, "rb");
-
- sprintf(file_name, "xeno_d2/ROOMS/%04d/script.txt", i);
-
- if (f_source != NULL) {
- f_cible = fopen(file_name, "w");
- decrypt(f_source, f_cible, 5);
- fclose(f_source);
- fclose(f_cible);
- }
- }
-
- return 0;
-}
-CODE_ENDS
+#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include "generic.h" +#include "Input.h" +#include "Output.h" +#include "Main.h" + +CODE_BEGINS +void init_table(long table[5000]) +{ + long i; + + for (i = 0; i < 5000; i++) { + table[i] = 0; + } +} + +char found_position(long table[5000], int number, FILE * f_source) +{ + long position; + long i; + + position = ftell(f_source); + + for (i = 0; i < number; i++) { + if (table[i] <= position) + return (1); + } + return (0); +} + +long found_next(long table[5000], long script_number, long max_script) +{ + long i; + long next = 0xFFFF; + long actual = table[script_number]; + + for (i = 0; i < script_number; i++) { + if (table[i] > actual) { + if (table[i] < next) + next = table[i]; + } + } + + for (i = script_number + 1; i < max_script; i++) { + if (table[i] > actual) { + if (table[i] < next) + next = table[i]; + } + } + + return (next); +} + +void dump_text(FILE * f_source, FILE * f_cible, long table[5000], long script_number, + long max_script, unsigned char *length_table, unsigned char *line_table) +{ + long next; + unsigned char val; + char temp_string[2] = {0, 0}; + long position; + unsigned char temp1 = 0; + unsigned char temp2 = 0; + + next = found_next(table, script_number, max_script); + + fseek(f_source, table[script_number], SEEK_SET); + + fprintf(f_cible, "<Text_block lines:%d width:%d>\n", + line_table[script_number], length_table[script_number]); + + position = ftell(f_source); + + while (position < next) { + val = 0; + + fread((unsigned char *) &val, 1, 1, f_source); + + if (val == 0x00) // "<Close>" + { + break; + } else if (val == 0x01) // "\n" + { + fprintf(f_cible, "\n"); + } else if (val == 0x02) // "<New>" + { + fprintf(f_cible, "<New>\n"); + } else if (val == 0x03) // "<Wait>" + { + fprintf(f_cible, "<Wait>"); + } else if (val == 0x0F) // Extended opcode. Reads two more bytes. + { + fread((unsigned char *) &temp1, 1, 1, f_source); + fread((unsigned char *) &temp2, 1, 1, f_source); + if (temp1 == 0) { + fprintf(f_cible, "<Delay %d>", temp2); + } else if (temp1 == 5) { + switch (temp2) { + case 0: + fprintf(f_cible, "<Fei>"); + break; + case 1: + fprintf(f_cible, "<Elly>"); + break; + case 2: + fprintf(f_cible, "<Citan>"); + break; + case 3: + fprintf(f_cible, "<Bart>"); + break; + case 4: + fprintf(f_cible, "<Billy>"); + break; + case 5: + fprintf(f_cible, "<Rico>"); + break; + case 6: + fprintf(f_cible, "<Emeralda>"); + break; + case 7: + fprintf(f_cible, "<Chu-Chu>"); + break; + case 8: + fprintf(f_cible, "<Maria>"); + break; + case 9: + fprintf(f_cible, "<Citan2>"); + break; + case 10: + fprintf(f_cible, "<Emeralda2>"); + break; + case 11: + fprintf(f_cible, "<Weltall>"); + break; + case 12: + fprintf(f_cible, "<Weltall-2>"); + break; + case 13: + fprintf(f_cible, "<Vierge>"); + break; + case 14: + fprintf(f_cible, "<Heimdal>"); + break; + case 15: + fprintf(f_cible, "<Brigandier>"); + break; + case 16: + fprintf(f_cible, "<Renmazuo>"); + break; + case 17: + fprintf(f_cible, "<Stier>"); + break; + case 18: + fprintf(f_cible, "<BigChu-chu>"); + break; + case 19: + fprintf(f_cible, "<Seibzehn>"); + break; + case 20: + fprintf(f_cible, "<Crescens>"); + break; + case 21: + fprintf(f_cible, "<Regurus>"); + break; + case 22: + fprintf(f_cible, "<Fenrir>"); + break; + case 23: + fprintf(f_cible, "<Andvari>"); + break; + case 24: + fprintf(f_cible, "<Renmazuo>"); + break; + case 25: + fprintf(f_cible, "<Stier-2>"); + break; + case 26: + fprintf(f_cible, "<Xenogears>"); + break; + case 27: + fprintf(f_cible, "<BARTHOS>"); + break; + case 28: + fprintf(f_cible, "<Yggdra>"); + break; + case 128: + fprintf(f_cible, "<Perso1>"); + break; + case 129: + fprintf(f_cible, "<Perso2>"); + break; + case 130: + fprintf(f_cible, "<Perso3>"); + break; + default: + fprintf(f_cible, "<Gear %d>", temp2); + } + } else { + fprintf(f_cible, "<Opcode %d %d>", temp1, temp2); + } + } else if (val == 0x10) // " " + { + fprintf(f_cible, " "); + } else if (val == 0x11) // "+" + { + fprintf(f_cible, "+"); + } else if (val == 0x12) // "," + { + fprintf(f_cible, ","); + } else if (val == 0x13) // "-" + { + fprintf(f_cible, "-"); + } else if (val == 0x14) // "." + { + fprintf(f_cible, "."); + } else if (val == 0x15) // "/" + { + fprintf(f_cible, "/"); + } else if ((val >= 0x16) && (val <= 0x1F)) // "0-9" + { + temp_string[0] = val + 0x1A; + fprintf(f_cible, temp_string); + } else if ((val >= 0x20) && (val <= 0x39)) // "A-Z" + { + temp_string[0] = val + 0x21; + fprintf(f_cible, temp_string); + } else if (val == 0x3A) // "[" + { + fprintf(f_cible, "["); + } else if (val == 0x3B) // "]" + { + fprintf(f_cible, "]"); + } else if (val == 0x3C) // "=" + { + fprintf(f_cible, "="); + } else if ((val >= 0x3D) && (val <= 0x56)) // "a-z" + { + temp_string[0] = val + 0x24; + fprintf(f_cible, temp_string); + } else if (val == 0x57) // "!" + { + fprintf(f_cible, "!"); + } else if (val == 0x58) // "\"" + { + fprintf(f_cible, "\""); + } else if (val == 0x59) // "#" + { + fprintf(f_cible, "#"); + } else if (val == 0x5A) // "%" + { + fprintf(f_cible, "%%"); + } else if (val == 0x5B) // "&" + { + fprintf(f_cible, "&"); + } else if (val == 0x5C) // "'" + { + fprintf(f_cible, "'"); + } else if (val == 0x5D) // "(" + { + fprintf(f_cible, "("); + } else if (val == 0x5E) // ")" + { + fprintf(f_cible, ")"); + } else if (val == 0x5F) // ":" + { + fprintf(f_cible, ":"); + } else if (val == 0x60) // "?" + { + fprintf(f_cible, "?"); + } else if (val == 0x61) // "<0>" + { + fprintf(f_cible, "<0>"); + } else if (val == 0x62) // "<1>" + { + fprintf(f_cible, "<1>"); + } else if (val == 0x63) // "<2>" + { + fprintf(f_cible, "<2>"); + } else if (val == 0x64) // "<3>" + { + fprintf(f_cible, "<3>"); + } else if (val == 0x65) // "<4>" + { + fprintf(f_cible, "<4>"); + } else if (val == 0x66) // "<5>" + { + fprintf(f_cible, "<5>"); + } else if (val == 0x67) // "<6>" + { + fprintf(f_cible, "<6>"); + } else if (val == 0x68) // "<7>" + { + fprintf(f_cible, "<7>"); + } else if (val == 0x69) // "<8>" + { + fprintf(f_cible, "<8>"); + } else if (val == 0x6A) // "<9>" + { + fprintf(f_cible, "<9>"); + } else if (val == 0x6B) // "<%>" + { + fprintf(f_cible, "<%%>"); + } else if (val == 0x6C) // "<&>" + { + fprintf(f_cible, "<&>"); + } else if (val == 0x6D) // "*" + { + fprintf(f_cible, "*"); + } else if (val == 0x6E) // "<C>" + { + fprintf(f_cible, "<C>"); + } else if (val == 0x6F) // "<S>" + { + fprintf(f_cible, "<S>"); + } else if (val == 0x70) // "<T>" + { + fprintf(f_cible, "<T>"); + } else if (val == 0x71) // "<*>" + { + fprintf(f_cible, "<*>"); + } else if (val == 0x72) // "<R>" + { + fprintf(f_cible, "<R>"); + } else if (val == 0x73) // "<L>" + { + fprintf(f_cible, "<L>"); + } else if (val == 0x74) // "<U>" + { + fprintf(f_cible, "<U>"); + } else if (val == 0x75) // "<U>" + { + fprintf(f_cible, "<D>"); + } else if (val == 0x76) // "<.>" + { + fprintf(f_cible, "<.>"); + } else if (val == 0x77) // "<:>" + { + fprintf(f_cible, "<:>"); + } else if (val == 0x79) // "</>" + { + fprintf(f_cible, "</>"); + } else if (val == 0x7A) // "<..>" + { + fprintf(f_cible, "<..>"); + } else if (val == 0x7B) // "<`>" + { + fprintf(f_cible, "<`>"); + } else if (val == 0x7D) // "<+>" + { + fprintf(f_cible, "<+>"); + } else if (val == 0x7E) // "<->" + { + fprintf(f_cible, "<->"); + } else if (val == 0x7F) // "<X>" + { + fprintf(f_cible, "<X>"); + } else if (val == 0x80) // "<[>" + { + fprintf(f_cible, "<[>"); + } else if (val == 0x81) // "<]>" + { + fprintf(f_cible, "<]>"); + } else if (val == 0x82) // "<%>" + { + fprintf(f_cible, "<%%>"); + } else if (val == 0x83) // "<&>" + { + fprintf(f_cible, "<&>"); + } else if (val == 0x84) // "<(>" + { + fprintf(f_cible, "<(>"); + } else if (val == 0x85) // "<)>" + { + fprintf(f_cible, "<)>"); + } else if (val == 0x86) // "<#>" + { + fprintf(f_cible, "<#>"); + } else if (val == 0x87) // "`" + { + fprintf(f_cible, "`"); + } else if (val == 0x88) // "°" + { + fprintf(f_cible, "°"); + } else if (val == 0x89) // "<=>" + { + fprintf(f_cible, "<=>"); + } else if (val == 0x8A) // "<?>" + { + fprintf(f_cible, "<?>"); + } else if (val == 0x8B) // "<!>" + { + fprintf(f_cible, "<!>"); + } else if (val == 0x8C) // "_" + { + fprintf(f_cible, "_"); + } else if (val == 0x8D) // "~" + { + fprintf(f_cible, "~"); + } else if (val == 0x8E) // "<...>" + { + fprintf(f_cible, "<...>"); + } else if (val == 0x8F) // "<'>" + { + fprintf(f_cible, "<'>"); + } else if (val == 0xFE) // "<Extra1 X> + { + fread((unsigned char *) &temp1, 1, 1, f_source); + fprintf(f_cible, "<Extra1 %d>", temp1); + } else if (val == 0xFF) // "<Extra2 X> + { + fread((unsigned char *) &temp1, 1, 1, f_source); + fprintf(f_cible, "<Extra2 %d>", temp1); + } else { + fprintf(f_cible, "<Bare %X>", val); + } + + position = ftell(f_source); + } + fprintf(f_cible, "\n<End_of_block>\n\n"); +} + +int decrypt(FILE * f_source, FILE * f_cible, int room_number) +{ + long i, j; + long table[5000]; + unsigned char line_table[5000]; + unsigned char length_table[5000]; + long script_number = 0; + long temp = 0; + char temp_char; + int counter = 0; + + fread((long *) &script_number, 4, 1, f_source); + + if (script_number == 0x0000FFFF) + return (1); + + script_number = (script_number++); + + fprintf(f_cible, "<Blocks:%li>\n", script_number); + init_table(table); + + i = j = 0; + + while (i < script_number) { + fread((long *) &temp, 2, 1, f_source); + if (table[j - 1] != temp) + table[j++] = temp; + i++; + } + + script_number = j; + + for (i = 0; i < script_number; i++) { + fread((unsigned char *) &length_table[i], 1, 1, f_source); + fread((unsigned char *) &line_table[i], 1, 1, f_source); + } + + fseek(f_source, table[script_number - 1], SEEK_SET); + + do { + fread((char *) &temp_char, 1, 1, f_source); + counter++; + } while (temp_char != 0); + + table[script_number] = ftell(f_source); + + for (i = 0; i < script_number; i++) { + dump_text(f_source, f_cible, table, i, script_number, length_table, line_table); + } + + return (0); +} + +int startup(void) throw (GeneralException) +{ + int i; + char file_name[100]; + FILE *f_source, *f_cible; + + for (i = 0; i < 730; i++) { + printf("%d\n", i); + sprintf(file_name, "xeno_d1/ROOMS/%04d/script.comp", i); + f_source = fopen(file_name, "rb"); + + sprintf(file_name, "xeno_d1/ROOMS/%04d/script.txt", i); + + if (f_source != NULL) { + f_cible = fopen(file_name, "w"); + decrypt(f_source, f_cible, 5); + fclose(f_source); + fclose(f_cible); + } + } + for (i = 0; i < 730; i++) { + printf("%d\n", i); + sprintf(file_name, "xeno_d2/ROOMS/%04d/script.comp", i); + f_source = fopen(file_name, "rb"); + + sprintf(file_name, "xeno_d2/ROOMS/%04d/script.txt", i); + + if (f_source != NULL) { + f_cible = fopen(file_name, "w"); + decrypt(f_source, f_cible, 5); + fclose(f_source); + fclose(f_cible); + } + } + + return 0; +} +CODE_ENDS diff --git a/Xenogears/Translate.cpp b/Xenogears/Translate.cpp index 1edef8b..3f85437 100644 --- a/Xenogears/Translate.cpp +++ b/Xenogears/Translate.cpp @@ -1,256 +1,256 @@ -#include <stdio.h>
-#include <string.h>
-
-void dump_text(FILE * f_source, FILE * f_cible)
-{
- unsigned char val;
- unsigned char temp1 = 0;
- unsigned char temp2 = 0;
-
- while (!feof(f_source)) {
- val = 0;
-
- fread((unsigned char *) &val, 1, 1, f_source);
-
- if (val == 0x00) // "<Close>"
- {
-// break;
- fprintf(f_cible, "<EOF>\n");
- } else if (val == 0x01) // "\n"
- {
- fprintf(f_cible, "\n");
- } else if (val == 0x02) // "<New>"
- {
- fprintf(f_cible, "<New>\n");
- } else if (val == 0x03) // "<Wait>"
- {
- fprintf(f_cible, "<Wait>");
- } else if (val == 0x0F) // "<Delay X>
- {
- fread((unsigned char *) &temp1, 1, 1, f_source);
- fread((unsigned char *) &temp2, 1, 1, f_source);
- if (temp1 == 0) {
- fprintf(f_cible, "<Delay %d>", temp2);
- } else if (temp1 == 5) {
- fprintf(f_cible, "<Gear %d>", temp2);
- } else {
- fprintf(f_cible, "<Opcode %d %d>", temp1, temp2);
- }
- } else if (val == 0x10) // " "
- {
- fprintf(f_cible, " ");
- } else if (val == 0x11) // "+"
- {
- fprintf(f_cible, "+");
- } else if (val == 0x12) // ","
- {
- fprintf(f_cible, ",");
- } else if (val == 0x13) // "-"
- {
- fprintf(f_cible, "-");
- } else if (val == 0x14) // "."
- {
- fprintf(f_cible, ".");
- } else if (val == 0x15) // "/"
- {
- fprintf(f_cible, "/");
- } else if ((val >= 0x16) && (val <= 0x1F)) // "0-9"
- {
- fprintf(f_cible, "%c", val + 0x1a);
- } else if ((val >= 0x20) && (val <= 0x39)) // "A-Z"
- {
- fprintf(f_cible, "%c", val + 0x21);
- } else if (val == 0x3A) // "["
- {
- fprintf(f_cible, "[");
- } else if (val == 0x3B) // "]"
- {
- fprintf(f_cible, "]");
- } else if (val == 0x3C) // "="
- {
- fprintf(f_cible, "=");
- } else if ((val >= 0x3D) && (val <= 0x56)) // "a-z"
- {
- fprintf(f_cible, "%c", val + 0x24);
- } else if (val == 0x57) // "!"
- {
- fprintf(f_cible, "!");
- } else if (val == 0x58) // "\""
- {
- fprintf(f_cible, "\"");
- } else if (val == 0x59) // "#"
- {
- fprintf(f_cible, "#");
- } else if (val == 0x5A) // "%"
- {
- fprintf(f_cible, "%%");
- } else if (val == 0x5B) // "&"
- {
- fprintf(f_cible, "&");
- } else if (val == 0x5C) // "'"
- {
- fprintf(f_cible, "'");
- } else if (val == 0x5D) // "("
- {
- fprintf(f_cible, "(");
- } else if (val == 0x5E) // ")"
- {
- fprintf(f_cible, ")");
- } else if (val == 0x5F) // ":"
- {
- fprintf(f_cible, ":");
- } else if (val == 0x60) // "?"
- {
- fprintf(f_cible, "?");
- } else if (val == 0x61) // "<0>"
- {
- fprintf(f_cible, "<0>");
- } else if (val == 0x62) // "<1>"
- {
- fprintf(f_cible, "<1>");
- } else if (val == 0x63) // "<2>"
- {
- fprintf(f_cible, "<2>");
- } else if (val == 0x64) // "<3>"
- {
- fprintf(f_cible, "<3>");
- } else if (val == 0x65) // "<4>"
- {
- fprintf(f_cible, "<4>");
- } else if (val == 0x66) // "<5>"
- {
- fprintf(f_cible, "<5>");
- } else if (val == 0x67) // "<6>"
- {
- fprintf(f_cible, "<6>");
- } else if (val == 0x68) // "<7>"
- {
- fprintf(f_cible, "<7>");
- } else if (val == 0x69) // "<8>"
- {
- fprintf(f_cible, "<8>");
- } else if (val == 0x6A) // "<9>"
- {
- fprintf(f_cible, "<9>");
- } else if (val == 0x6B) // "<%>"
- {
- fprintf(f_cible, "<%%>");
- } else if (val == 0x6C) // "<&>"
- {
- fprintf(f_cible, "<&>");
- } else if (val == 0x6D) // "*"
- {
- fprintf(f_cible, "*");
- } else if (val == 0x6E) // "<C>"
- {
- fprintf(f_cible, "<C>");
- } else if (val == 0x6F) // "<S>"
- {
- fprintf(f_cible, "<S>");
- } else if (val == 0x70) // "<T>"
- {
- fprintf(f_cible, "<T>");
- } else if (val == 0x71) // "<*>"
- {
- fprintf(f_cible, "<*>");
- } else if (val == 0x72) // "<R>"
- {
- fprintf(f_cible, "<R>");
- } else if (val == 0x73) // "<L>"
- {
- fprintf(f_cible, "<L>");
- } else if (val == 0x74) // "<U>"
- {
- fprintf(f_cible, "<U>");
- } else if (val == 0x75) // "<U>"
- {
- fprintf(f_cible, "<D>");
- } else if (val == 0x76) // "<.>"
- {
- fprintf(f_cible, "<.>");
- } else if (val == 0x77) // "<:>"
- {
- fprintf(f_cible, "<:>");
- } else if (val == 0x79) // "</>"
- {
- fprintf(f_cible, "</>");
- } else if (val == 0x7A) // "<..>"
- {
- fprintf(f_cible, "<..>");
- } else if (val == 0x7B) // "<`>"
- {
- fprintf(f_cible, "<`>");
- } else if (val == 0x7D) // "<+>"
- {
- fprintf(f_cible, "<+>");
- } else if (val == 0x7E) // "<->"
- {
- fprintf(f_cible, "<->");
- } else if (val == 0x7F) // "<X>"
- {
- fprintf(f_cible, "<X>");
- } else if (val == 0x80) // "<[>"
- {
- fprintf(f_cible, "<[>");
- } else if (val == 0x81) // "<]>"
- {
- fprintf(f_cible, "<]>");
- } else if (val == 0x82) // "<%>"
- {
- fprintf(f_cible, "<%%>");
- } else if (val == 0x83) // "<&>"
- {
- fprintf(f_cible, "<&>");
- } else if (val == 0x84) // "<(>"
- {
- fprintf(f_cible, "<(>");
- } else if (val == 0x85) // "<)>"
- {
- fprintf(f_cible, "<)>");
- } else if (val == 0x86) // "<#>"
- {
- fprintf(f_cible, "<#>");
- } else if (val == 0x87) // "`"
- {
- fprintf(f_cible, "`");
- } else if (val == 0x88) // "°"
- {
- fprintf(f_cible, "°");
- } else if (val == 0x89) // "<=>"
- {
- fprintf(f_cible, "<=>");
- } else if (val == 0x8A) // "<?>"
- {
- fprintf(f_cible, "<?>");
- } else if (val == 0x8B) // "<!>"
- {
- fprintf(f_cible, "<!>");
- } else if (val == 0x8C) // "_"
- {
- fprintf(f_cible, "_");
- } else if (val == 0x8D) // "~"
- {
- fprintf(f_cible, "~");
- } else if (val == 0x8E) // "<...>"
- {
- fprintf(f_cible, "<...>");
- } else if (val == 0x8F) // "<'>"
- {
- fprintf(f_cible, "<'>");
- } else if (val == 0xFE) // "<Extra1 X>
- {
- fread((unsigned char *) &temp1, 1, 1, f_source);
- fprintf(f_cible, "<Extra1 %d>", temp1);
- } else if (val == 0xFF) // "<Extra2 X>
- {
- fread((unsigned char *) &temp1, 1, 1, f_source);
- fprintf(f_cible, "<Extra2 %d>", temp1);
- } else {
- fprintf(f_cible, "<Bare %X>", val);
- }
- }
-}
-
-int main(void) {
- dump_text(stdin, stdout);
-}
+#include <stdio.h> +#include <string.h> + +void dump_text(FILE * f_source, FILE * f_cible) +{ + unsigned char val; + unsigned char temp1 = 0; + unsigned char temp2 = 0; + + while (!feof(f_source)) { + val = 0; + + fread((unsigned char *) &val, 1, 1, f_source); + + if (val == 0x00) // "<Close>" + { +// break; + fprintf(f_cible, "<EOF>\n"); + } else if (val == 0x01) // "\n" + { + fprintf(f_cible, "\n"); + } else if (val == 0x02) // "<New>" + { + fprintf(f_cible, "<New>\n"); + } else if (val == 0x03) // "<Wait>" + { + fprintf(f_cible, "<Wait>"); + } else if (val == 0x0F) // "<Delay X> + { + fread((unsigned char *) &temp1, 1, 1, f_source); + fread((unsigned char *) &temp2, 1, 1, f_source); + if (temp1 == 0) { + fprintf(f_cible, "<Delay %d>", temp2); + } else if (temp1 == 5) { + fprintf(f_cible, "<Gear %d>", temp2); + } else { + fprintf(f_cible, "<Opcode %d %d>", temp1, temp2); + } + } else if (val == 0x10) // " " + { + fprintf(f_cible, " "); + } else if (val == 0x11) // "+" + { + fprintf(f_cible, "+"); + } else if (val == 0x12) // "," + { + fprintf(f_cible, ","); + } else if (val == 0x13) // "-" + { + fprintf(f_cible, "-"); + } else if (val == 0x14) // "." + { + fprintf(f_cible, "."); + } else if (val == 0x15) // "/" + { + fprintf(f_cible, "/"); + } else if ((val >= 0x16) && (val <= 0x1F)) // "0-9" + { + fprintf(f_cible, "%c", val + 0x1a); + } else if ((val >= 0x20) && (val <= 0x39)) // "A-Z" + { + fprintf(f_cible, "%c", val + 0x21); + } else if (val == 0x3A) // "[" + { + fprintf(f_cible, "["); + } else if (val == 0x3B) // "]" + { + fprintf(f_cible, "]"); + } else if (val == 0x3C) // "=" + { + fprintf(f_cible, "="); + } else if ((val >= 0x3D) && (val <= 0x56)) // "a-z" + { + fprintf(f_cible, "%c", val + 0x24); + } else if (val == 0x57) // "!" + { + fprintf(f_cible, "!"); + } else if (val == 0x58) // "\"" + { + fprintf(f_cible, "\""); + } else if (val == 0x59) // "#" + { + fprintf(f_cible, "#"); + } else if (val == 0x5A) // "%" + { + fprintf(f_cible, "%%"); + } else if (val == 0x5B) // "&" + { + fprintf(f_cible, "&"); + } else if (val == 0x5C) // "'" + { + fprintf(f_cible, "'"); + } else if (val == 0x5D) // "(" + { + fprintf(f_cible, "("); + } else if (val == 0x5E) // ")" + { + fprintf(f_cible, ")"); + } else if (val == 0x5F) // ":" + { + fprintf(f_cible, ":"); + } else if (val == 0x60) // "?" + { + fprintf(f_cible, "?"); + } else if (val == 0x61) // "<0>" + { + fprintf(f_cible, "<0>"); + } else if (val == 0x62) // "<1>" + { + fprintf(f_cible, "<1>"); + } else if (val == 0x63) // "<2>" + { + fprintf(f_cible, "<2>"); + } else if (val == 0x64) // "<3>" + { + fprintf(f_cible, "<3>"); + } else if (val == 0x65) // "<4>" + { + fprintf(f_cible, "<4>"); + } else if (val == 0x66) // "<5>" + { + fprintf(f_cible, "<5>"); + } else if (val == 0x67) // "<6>" + { + fprintf(f_cible, "<6>"); + } else if (val == 0x68) // "<7>" + { + fprintf(f_cible, "<7>"); + } else if (val == 0x69) // "<8>" + { + fprintf(f_cible, "<8>"); + } else if (val == 0x6A) // "<9>" + { + fprintf(f_cible, "<9>"); + } else if (val == 0x6B) // "<%>" + { + fprintf(f_cible, "<%%>"); + } else if (val == 0x6C) // "<&>" + { + fprintf(f_cible, "<&>"); + } else if (val == 0x6D) // "*" + { + fprintf(f_cible, "*"); + } else if (val == 0x6E) // "<C>" + { + fprintf(f_cible, "<C>"); + } else if (val == 0x6F) // "<S>" + { + fprintf(f_cible, "<S>"); + } else if (val == 0x70) // "<T>" + { + fprintf(f_cible, "<T>"); + } else if (val == 0x71) // "<*>" + { + fprintf(f_cible, "<*>"); + } else if (val == 0x72) // "<R>" + { + fprintf(f_cible, "<R>"); + } else if (val == 0x73) // "<L>" + { + fprintf(f_cible, "<L>"); + } else if (val == 0x74) // "<U>" + { + fprintf(f_cible, "<U>"); + } else if (val == 0x75) // "<U>" + { + fprintf(f_cible, "<D>"); + } else if (val == 0x76) // "<.>" + { + fprintf(f_cible, "<.>"); + } else if (val == 0x77) // "<:>" + { + fprintf(f_cible, "<:>"); + } else if (val == 0x79) // "</>" + { + fprintf(f_cible, "</>"); + } else if (val == 0x7A) // "<..>" + { + fprintf(f_cible, "<..>"); + } else if (val == 0x7B) // "<`>" + { + fprintf(f_cible, "<`>"); + } else if (val == 0x7D) // "<+>" + { + fprintf(f_cible, "<+>"); + } else if (val == 0x7E) // "<->" + { + fprintf(f_cible, "<->"); + } else if (val == 0x7F) // "<X>" + { + fprintf(f_cible, "<X>"); + } else if (val == 0x80) // "<[>" + { + fprintf(f_cible, "<[>"); + } else if (val == 0x81) // "<]>" + { + fprintf(f_cible, "<]>"); + } else if (val == 0x82) // "<%>" + { + fprintf(f_cible, "<%%>"); + } else if (val == 0x83) // "<&>" + { + fprintf(f_cible, "<&>"); + } else if (val == 0x84) // "<(>" + { + fprintf(f_cible, "<(>"); + } else if (val == 0x85) // "<)>" + { + fprintf(f_cible, "<)>"); + } else if (val == 0x86) // "<#>" + { + fprintf(f_cible, "<#>"); + } else if (val == 0x87) // "`" + { + fprintf(f_cible, "`"); + } else if (val == 0x88) // "°" + { + fprintf(f_cible, "°"); + } else if (val == 0x89) // "<=>" + { + fprintf(f_cible, "<=>"); + } else if (val == 0x8A) // "<?>" + { + fprintf(f_cible, "<?>"); + } else if (val == 0x8B) // "<!>" + { + fprintf(f_cible, "<!>"); + } else if (val == 0x8C) // "_" + { + fprintf(f_cible, "_"); + } else if (val == 0x8D) // "~" + { + fprintf(f_cible, "~"); + } else if (val == 0x8E) // "<...>" + { + fprintf(f_cible, "<...>"); + } else if (val == 0x8F) // "<'>" + { + fprintf(f_cible, "<'>"); + } else if (val == 0xFE) // "<Extra1 X> + { + fread((unsigned char *) &temp1, 1, 1, f_source); + fprintf(f_cible, "<Extra1 %d>", temp1); + } else if (val == 0xFF) // "<Extra2 X> + { + fread((unsigned char *) &temp1, 1, 1, f_source); + fprintf(f_cible, "<Extra2 %d>", temp1); + } else { + fprintf(f_cible, "<Bare %X>", val); + } + } +} + +int main(void) { + dump_text(stdin, stdout); +} diff --git a/Xenogears/archive.cpp b/Xenogears/archive.cpp index 286fa43..6701c2c 100644 --- a/Xenogears/archive.cpp +++ b/Xenogears/archive.cpp @@ -1,37 +1,37 @@ -#include <stdio.h>
-#include <values.h>
-#include <stdlib.h>
-#include "fileutils.h"
-
-void dearchive(FILE * f) {
- long nb;
- long * address;
- char fname[100];
- int i;
- FILE * f_out;
-
- fread(&nb, 4, 1, f);
- nb++;
- fprintf(stderr, "Reading index... (%li elements)\n", nb);
-
- address = (long *) malloc(nb * sizeof(long) + 1);
-
- for (i = 0; i < nb; i++) {
- fread(address + i, 4, 1, f);
- }
- address[nb] = MAXINT;
-
- for (i = 0; i < nb; i++) {
- fprintf(stderr, "Dumping file %i\n", i);
- sprintf(fname, "part-%i.lz", i);
- f_out = fopen(fname, "wb");
- copy(fileno(f), fileno(f_out), address[i + 1] - address[i]);
- fclose(f_out);
- }
-
- free(address);
-}
-
-int main(void) {
- dearchive(stdin);
-}
+#include <stdio.h> +#include <values.h> +#include <stdlib.h> +#include "fileutils.h" + +void dearchive(FILE * f) { + long nb; + long * address; + char fname[100]; + int i; + FILE * f_out; + + fread(&nb, 4, 1, f); + nb++; + fprintf(stderr, "Reading index... (%li elements)\n", nb); + + address = (long *) malloc(nb * sizeof(long) + 1); + + for (i = 0; i < nb; i++) { + fread(address + i, 4, 1, f); + } + address[nb] = MAXINT; + + for (i = 0; i < nb; i++) { + fprintf(stderr, "Dumping file %i\n", i); + sprintf(fname, "part-%i.lz", i); + f_out = fopen(fname, "wb"); + copy(fileno(f), fileno(f_out), address[i + 1] - address[i]); + fclose(f_out); + } + + free(address); +} + +int main(void) { + dearchive(stdin); +} diff --git a/Xenogears/build-sector-2.cpp b/Xenogears/build-sector-2.cpp index 1b1be62..6ab7835 100644 --- a/Xenogears/build-sector-2.cpp +++ b/Xenogears/build-sector-2.cpp @@ -1,14 +1,14 @@ -#include <stdio.h>
-#include "yazedc.h"
-
-int main(void) {
- unsigned char datas[2352];
-
- fread(datas, 2352, 1, stdin);
- minute = datas[12];
- second = datas[13];
- frame = datas[14];
- fprintf(stderr, "Sector info: %2i:%02i:%04i\n", minute, second, frame);
- do_encode_L2(datas, MODE_2, 0);
- fwrite(datas, 2352, 1, stdout);
-}
+#include <stdio.h> +#include "yazedc.h" + +int main(void) { + unsigned char datas[2352]; + + fread(datas, 2352, 1, stdin); + minute = datas[12]; + second = datas[13]; + frame = datas[14]; + fprintf(stderr, "Sector info: %2i:%02i:%04i\n", minute, second, frame); + do_encode_L2(datas, MODE_2, 0); + fwrite(datas, 2352, 1, stdout); +} diff --git a/Xenogears/build-sector.cpp b/Xenogears/build-sector.cpp index 744a087..3effc35 100644 --- a/Xenogears/build-sector.cpp +++ b/Xenogears/build-sector.cpp @@ -1,14 +1,14 @@ -#include <stdio.h>
-#include "yazedc.h"
-
-int main(void) {
- unsigned char datas[2352];
-
- fread(datas, 2352, 1, stdin);
- minute = datas[12];
- second = datas[13];
- frame = datas[14];
- fprintf(stderr, "Sector info: %2i:%02i:%04i\n", minute, second, frame);
- do_encode_L2(datas, MODE_2_FORM_1, 0);
- fwrite(datas, 2352, 1, stdout);
-}
+#include <stdio.h> +#include "yazedc.h" + +int main(void) { + unsigned char datas[2352]; + + fread(datas, 2352, 1, stdin); + minute = datas[12]; + second = datas[13]; + frame = datas[14]; + fprintf(stderr, "Sector info: %2i:%02i:%04i\n", minute, second, frame); + do_encode_L2(datas, MODE_2_FORM_1, 0); + fwrite(datas, 2352, 1, stdout); +} diff --git a/Xenogears/main_dump.cpp b/Xenogears/main_dump.cpp index e2f5058..1610ec1 100644 --- a/Xenogears/main_dump.cpp +++ b/Xenogears/main_dump.cpp @@ -1,283 +1,283 @@ -/*
- * Xenogears extractor by Nicolas "Pixel" Noble (nicolas@nobis-crew.org)
- * Highly based upon Yazoo's Chrono Cross CD extractor
- *
- * ******** Original disclaimer by Yazoo ********
- *
- * Chrono Cross CD extractor Copyright 2000-2001 by Yazoo (hamm@efrei.fr) Revision 0.1b ANSI C
- *
- *
- * Features:
- *
- * Dump the complete content of Chrono Chross CD1/CD2 US and Japanese version It requires a iso
- * named Chrono1.iso in the same directory
- *
- * Todo list:
- *
- * Find a way to locate end of the last file Better support for CD2 Dump in subdirectory according
- * to CD1/CD2 repartition Recompilation in Visual C++ 6 for disk speed optimisation Source comment
- * and reorganisation Log feature (Optional since you can redirect output with > ) Progression
- * indicator Better detection of the ISO with error control Major code optimisation Integration in
- * main Chrono Cross Hacking tool
- *
- * ******** End of original disclaimer by Yazoo ********
- *
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include "cdutils.h"
-#include "generic.h"
-#include "Input.h"
-#include "Output.h"
-#include "Main.h"
-#include "cdabstract.h"
-
-CODE_BEGINS
-public:
-Appli() : tourne(0), nb_seqs(0), f_def(0), f_iso(0), cdutil(0) {}
-virtual ~Appli() {
- delete cdutil;
- delete f_def;
- delete f_iso;
- delete f_out;
-}
-private:
-
-unsigned int tourne;
-
-struct t_index_tab {
- unsigned long address;
- long size;
- long type;
- long index;
-};
-
-struct t_sequence {
- unsigned int n;
- unsigned int sum;
- String prefix;
- String name;
- int type;
-};
-
-String title, iso_filename, prefix;
-unsigned long iso_size;
-unsigned int nb_records, nb_seqs;
-struct t_sequence sequences[100];
-Handle * f_def, * f_iso, * f_out;
-
-cdutils * cdutil;
-
-Byte user_data[2352];
-
-virtual int startup() throw (GeneralException)
-{
-
- verbosity = 3;
-
- printm(M_BARE,
-"Xenogears File Extractor by Nicolas \"Pixel\" Noble\n"
-"Highly based upon the Chrono Cross File Extractor By Yazoo\n\n");
-
- if (argc != 3) {
- printm(M_BARE, "Usage: %s <definition_file.sqr> <iso_file_name>\nSee readme.txt for details\n",
- argv[0]);
- exit(-1);
- }
-
- printm(M_STATUS, "Processing file %s...\n", argv[1]);
-
- f_def = new Input(argv[1]);
-
- if (process_def_file()) {
- printm(M_ERROR, "Unable to process the definition file \"%s\"...\n", argv[1]);
- exit(-1);
- }
-
- iso_filename = argv[2];
-
- printm(M_STATUS, "Begin processing iso file.\n");
- f_iso = cdabstract::open_cd(iso_filename);
-
- if (check_iso()) {
- printm(M_ERROR, "Invalid iso file for " + title + "\n");
- printm(M_ERROR, "===> Make sure you are using a Genuine iso file.\n");
- } else {
- printm(M_INFO, "Genuine " + title + " iso detected.\n");
- }
-
- cdutil = new cdutils(f_iso);
-
- printm(M_STATUS, "Entering files read sequence\n");
- read_files();
- return 0;
-}
-
-/*
- * Ugly but working... for now
- */
-int process_def_file()
-{
- String t;
- unsigned int n, sum = 0;
-
- *f_def >> t;
- printm(M_INFO, "Read title: " + t + "\n");
- title = t;
-
- *f_def >> t;
- iso_size = t.to_int();
- printm(M_INFO, "Read iso size: %lu bytes\n", iso_size);
-
- *f_def >> t;
- printm(M_INFO, "Read global directory prefix: " + t + "\n");
- prefix = t;
-
- *f_def >> t;
- nb_records = t.to_int();
- printm(M_INFO, "Read total of records: %u\n", nb_records);
-
- while (1) {
- *f_def >> t;
- n = t.to_int();
- if (!n) {
- if (sum == nb_records) {
- printm(M_INFO, "Definition file seems coherent\n");
- return 0;
- } else {
- printm(M_ERROR, "Definition file incoherent\n");
- return 1;
- }
- }
- sum += n;
- sequences[nb_seqs].n = n;
- sequences[nb_seqs].sum = sum;
- *f_def >> t;
- sequences[nb_seqs].prefix = t;
- *f_def >> t;
- n = t.to_int();
- sequences[nb_seqs].type = n;
- *f_def >> t;
- sequences[nb_seqs].name = t;
- printm(M_INFO, "Read definition of sequence %i:\n===> %5i (sum = %5i) chunks of " + t +
- " (" + sequences[nb_seqs].prefix + ")\n", nb_seqs, n, sum);
- nb_seqs++;
- }
-}
-
-long check_iso()
-{
- unsigned long length;
-
- length = f_iso->GetSize();
- if (length < 0) {
- printm(M_INFO, "Can not get file size, assuming reading from CD.\n");
- } else {
- printm(M_INFO, "Filesize of iso file " + iso_filename + " is %ld bytes\n", length);
- if (length != iso_size) {
- return 1;
- }
- }
- return 0;
-}
-
-void read_files()
-{
- t_index_tab index_tab[10000];
- unsigned char t[8];
- unsigned long i;
- unsigned long j;
- unsigned int seq = 0;
- unsigned long indexer;
- struct t_index_tab *p = (struct t_index_tab *) t;
-
- Byte fat[32768];
-
-#define INDEXPOS 24
-
- cdutil->sector_seek(INDEXPOS);
- for (i = INDEXPOS; i < (INDEXPOS + 16); i++) {
- printm(M_INFO, "Reading fat sector %lu\n", i);
- cdutil->read_sector(&fat[2048 * (i - INDEXPOS)], MODE_2_FORM_1);
- }
-
- indexer = 0;
- for (j = 0; j < 32768; j = j + 7) {
- t[0] = 0;
- bcopy((char *) &fat[j], (char *) t + 1, 7);
- p->address >>= 8;
- index_tab[indexer] = *p;
- if (p->size > 0 && p->address != 0) {
- index_tab[indexer].index = j / 7;
- printm(M_INFO, "Found a quite valid index: number %4lu, address %6lu, size %3li\n",
- indexer, index_tab[indexer].address, index_tab[indexer].size);
- indexer++;
- if (indexer == nb_records)
- break;
- } else {
- printm(M_WARNING, "Ignored invalid index chunk number %4lu (size = %lu) (%02x %02x %02x %02x %02x %02x %02x)\n",
- j / 7, -index_tab[indexer].size, t[0], t[1], t[2], t[4], t[5], t[6], t[7]);
- }
- }
- printm(M_STATUS, "Index file generation complete.\n\n");
-
- for (i = 0; i < nb_records; i++) {
- if (sequences[seq].sum == i)
- seq++;
- index_tab[i].type = sequences[seq].type;
- if (sequences[seq].type == 0) {
- printm(M_INFO, "%6lu (%10lu): ignored\n", index_tab[i].address, index_tab[i].size);
- } else {
- printm(M_INFO, "%6lu (%10lu): ", index_tab[i].address, index_tab[i].size);
- file_dump(index_tab[i].address, index_tab[i].size, i, seq);
- if (verbosity >= M_INFO) {
- fprintf(stderr, "\n");
- }
- }
- }
- fprintf(stderr, "\n");
-}
-
-void file_dump(unsigned long debut, unsigned long taille, long num, int seq)
-{
- long i;
- long nbsects;
- String nom;
- String extension = ".out";
- String nom_t;
- char type = sequences[seq].type;
- char ptitbidule[] = "-\\|/";
-
- nom_t.set("%04ld", num);
-
- nom = "./" + prefix + "/";
-
- MKDIR(nom.to_charp());
-
- nom += sequences[seq].prefix + "/";
- MKDIR(nom.to_charp());
-
- nom += nom_t + extension;;
-
- f_out = new Output(nom);
- nbsects = taille / sec_sizes[type];
- if (taille % sec_sizes[type])
- nbsects++;
- cdutil->sector_seek(debut);
- for (i = 0; i < nbsects; i++) {
- if (verbosity < M_INFO)
- fprintf(stderr, " (%c)\010\010\010\010\010", ptitbidule[((tourne++) >> 8) % 4]);
- cdutil->read_sector(user_data, type);
- if (i != (nbsects - 1)) {
- f_out->write(user_data, sec_sizes[type]);
- } else {
- f_out->write(user_data, taille % sec_sizes[type] ? taille % sec_sizes[type] : sec_sizes[type]);
- }
- }
- delete f_out;
- f_out = 0;
- printm(M_BARE, " (*) Dumped file number %4ld - type \"" + sequences[seq].name + "\" \r", num);
-}
-CODE_ENDS
+/* + * Xenogears extractor by Nicolas "Pixel" Noble (nicolas@nobis-crew.org) + * Highly based upon Yazoo's Chrono Cross CD extractor + * + * ******** Original disclaimer by Yazoo ******** + * + * Chrono Cross CD extractor Copyright 2000-2001 by Yazoo (hamm@efrei.fr) Revision 0.1b ANSI C + * + * + * Features: + * + * Dump the complete content of Chrono Chross CD1/CD2 US and Japanese version It requires a iso + * named Chrono1.iso in the same directory + * + * Todo list: + * + * Find a way to locate end of the last file Better support for CD2 Dump in subdirectory according + * to CD1/CD2 repartition Recompilation in Visual C++ 6 for disk speed optimisation Source comment + * and reorganisation Log feature (Optional since you can redirect output with > ) Progression + * indicator Better detection of the ISO with error control Major code optimisation Integration in + * main Chrono Cross Hacking tool + * + * ******** End of original disclaimer by Yazoo ******** + * + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include "cdutils.h" +#include "generic.h" +#include "Input.h" +#include "Output.h" +#include "Main.h" +#include "cdabstract.h" + +CODE_BEGINS +public: +Appli() : tourne(0), nb_seqs(0), f_def(0), f_iso(0), cdutil(0) {} +virtual ~Appli() { + delete cdutil; + delete f_def; + delete f_iso; + delete f_out; +} +private: + +unsigned int tourne; + +struct t_index_tab { + unsigned long address; + long size; + long type; + long index; +}; + +struct t_sequence { + unsigned int n; + unsigned int sum; + String prefix; + String name; + int type; +}; + +String title, iso_filename, prefix; +unsigned long iso_size; +unsigned int nb_records, nb_seqs; +struct t_sequence sequences[100]; +Handle * f_def, * f_iso, * f_out; + +cdutils * cdutil; + +Byte user_data[2352]; + +virtual int startup() throw (GeneralException) +{ + + verbosity = 3; + + printm(M_BARE, +"Xenogears File Extractor by Nicolas \"Pixel\" Noble\n" +"Highly based upon the Chrono Cross File Extractor By Yazoo\n\n"); + + if (argc != 3) { + printm(M_BARE, "Usage: %s <definition_file.sqr> <iso_file_name>\nSee readme.txt for details\n", + argv[0]); + exit(-1); + } + + printm(M_STATUS, "Processing file %s...\n", argv[1]); + + f_def = new Input(argv[1]); + + if (process_def_file()) { + printm(M_ERROR, "Unable to process the definition file \"%s\"...\n", argv[1]); + exit(-1); + } + + iso_filename = argv[2]; + + printm(M_STATUS, "Begin processing iso file.\n"); + f_iso = cdabstract::open_cd(iso_filename); + + if (check_iso()) { + printm(M_ERROR, "Invalid iso file for " + title + "\n"); + printm(M_ERROR, "===> Make sure you are using a Genuine iso file.\n"); + } else { + printm(M_INFO, "Genuine " + title + " iso detected.\n"); + } + + cdutil = new cdutils(f_iso); + + printm(M_STATUS, "Entering files read sequence\n"); + read_files(); + return 0; +} + +/* + * Ugly but working... for now + */ +int process_def_file() +{ + String t; + unsigned int n, sum = 0; + + *f_def >> t; + printm(M_INFO, "Read title: " + t + "\n"); + title = t; + + *f_def >> t; + iso_size = t.to_int(); + printm(M_INFO, "Read iso size: %lu bytes\n", iso_size); + + *f_def >> t; + printm(M_INFO, "Read global directory prefix: " + t + "\n"); + prefix = t; + + *f_def >> t; + nb_records = t.to_int(); + printm(M_INFO, "Read total of records: %u\n", nb_records); + + while (1) { + *f_def >> t; + n = t.to_int(); + if (!n) { + if (sum == nb_records) { + printm(M_INFO, "Definition file seems coherent\n"); + return 0; + } else { + printm(M_ERROR, "Definition file incoherent\n"); + return 1; + } + } + sum += n; + sequences[nb_seqs].n = n; + sequences[nb_seqs].sum = sum; + *f_def >> t; + sequences[nb_seqs].prefix = t; + *f_def >> t; + n = t.to_int(); + sequences[nb_seqs].type = n; + *f_def >> t; + sequences[nb_seqs].name = t; + printm(M_INFO, "Read definition of sequence %i:\n===> %5i (sum = %5i) chunks of " + t + + " (" + sequences[nb_seqs].prefix + ")\n", nb_seqs, n, sum); + nb_seqs++; + } +} + +long check_iso() +{ + unsigned long length; + + length = f_iso->GetSize(); + if (length < 0) { + printm(M_INFO, "Can not get file size, assuming reading from CD.\n"); + } else { + printm(M_INFO, "Filesize of iso file " + iso_filename + " is %ld bytes\n", length); + if (length != iso_size) { + return 1; + } + } + return 0; +} + +void read_files() +{ + t_index_tab index_tab[10000]; + unsigned char t[8]; + unsigned long i; + unsigned long j; + unsigned int seq = 0; + unsigned long indexer; + struct t_index_tab *p = (struct t_index_tab *) t; + + Byte fat[32768]; + +#define INDEXPOS 24 + + cdutil->sector_seek(INDEXPOS); + for (i = INDEXPOS; i < (INDEXPOS + 16); i++) { + printm(M_INFO, "Reading fat sector %lu\n", i); + cdutil->read_sector(&fat[2048 * (i - INDEXPOS)], MODE_2_FORM_1); + } + + indexer = 0; + for (j = 0; j < 32768; j = j + 7) { + t[0] = 0; + bcopy((char *) &fat[j], (char *) t + 1, 7); + p->address >>= 8; + index_tab[indexer] = *p; + if (p->size > 0 && p->address != 0) { + index_tab[indexer].index = j / 7; + printm(M_INFO, "Found a quite valid index: number %4lu, address %6lu, size %3li\n", + indexer, index_tab[indexer].address, index_tab[indexer].size); + indexer++; + if (indexer == nb_records) + break; + } else { + printm(M_WARNING, "Ignored invalid index chunk number %4lu (size = %lu) (%02x %02x %02x %02x %02x %02x %02x)\n", + j / 7, -index_tab[indexer].size, t[0], t[1], t[2], t[4], t[5], t[6], t[7]); + } + } + printm(M_STATUS, "Index file generation complete.\n\n"); + + for (i = 0; i < nb_records; i++) { + if (sequences[seq].sum == i) + seq++; + index_tab[i].type = sequences[seq].type; + if (sequences[seq].type == 0) { + printm(M_INFO, "%6lu (%10lu): ignored\n", index_tab[i].address, index_tab[i].size); + } else { + printm(M_INFO, "%6lu (%10lu): ", index_tab[i].address, index_tab[i].size); + file_dump(index_tab[i].address, index_tab[i].size, i, seq); + if (verbosity >= M_INFO) { + fprintf(stderr, "\n"); + } + } + } + fprintf(stderr, "\n"); +} + +void file_dump(unsigned long debut, unsigned long taille, long num, int seq) +{ + long i; + long nbsects; + String nom; + String extension = ".out"; + String nom_t; + char type = sequences[seq].type; + char ptitbidule[] = "-\\|/"; + + nom_t.set("%04ld", num); + + nom = "./" + prefix + "/"; + + MKDIR(nom.to_charp()); + + nom += sequences[seq].prefix + "/"; + MKDIR(nom.to_charp()); + + nom += nom_t + extension;; + + f_out = new Output(nom); + nbsects = taille / sec_sizes[type]; + if (taille % sec_sizes[type]) + nbsects++; + cdutil->sector_seek(debut); + for (i = 0; i < nbsects; i++) { + if (verbosity < M_INFO) + fprintf(stderr, " (%c)\010\010\010\010\010", ptitbidule[((tourne++) >> 8) % 4]); + cdutil->read_sector(user_data, type); + if (i != (nbsects - 1)) { + f_out->write(user_data, sec_sizes[type]); + } else { + f_out->write(user_data, taille % sec_sizes[type] ? taille % sec_sizes[type] : sec_sizes[type]); + } + } + delete f_out; + f_out = 0; + printm(M_BARE, " (*) Dumped file number %4ld - type \"" + sequences[seq].name + "\" \r", num); +} +CODE_ENDS diff --git a/Xenogears/reinsert.cpp b/Xenogears/reinsert.cpp index fb7460e..bf60cb4 100644 --- a/Xenogears/reinsert.cpp +++ b/Xenogears/reinsert.cpp @@ -1,290 +1,290 @@ -#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include "cdutils.h"
-#include "generic.h"
-#include "Input.h"
-#include "Output.h"
-#include "Main.h"
-
-CODE_BEGINS
-public:
-Appli() : tourne(0), nb_seqs(0), f_def(0), f_iso_r(0), f_iso_w(0), f_in(0), cdutil(0), slus_index(-1), force(0) {}
-virtual ~Appli() {
- delete cdutil;
- delete f_def;
- delete f_iso_r;
- delete f_iso_w;
- delete f_in;
-}
-private:
-
-unsigned int tourne;
-
-struct t_index_tab {
- unsigned long address;
- long size;
- long type;
- long index;
-};
-
-struct t_sequence {
- unsigned int n;
- unsigned int sum;
- String prefix;
- String name;
- int type;
-};
-
-String title, iso_filename, prefix, in_filename;
-unsigned long iso_size;
-unsigned int nb_records, nb_seqs;
-struct t_sequence sequences[1000];
-Handle * f_def, * f_iso_r, * f_iso_w, * f_in;
-cdutils * cdutil;
-
-int slus_index, force;
-
-unsigned char user_data[2352];
-
-void usage() throw (GeneralException) {
- printm(M_BARE, "Usage: %s <definition_file.sqr> <iso_file_name> <file_index> <filename> [-f]\nSee readme.txt for details\n",
- argv[0]);
- throw Exit(-1);
-}
-
-virtual int startup() throw (GeneralException)
-{
- int fileindex;
-
- verbosity = 1;
-
- printm(M_BARE, "Xenogears File Insertor by Nicolas \"Pixel\" Noble\n\n");
-
- if ((argc != 5) && (argc != 6)) {
- usage();
- }
-
- if (argc == 6) {
- if (strcmp(argv[5], "-f")) {
- usage();
- } else {
- force = 1;
- }
- }
-
- printm(M_STATUS, "Processing file %s...\n", argv[1]);
-
- f_def = new Input(argv[1]);
-
- if (process_def_file(f_def)) {
- printm(M_ERROR, "Unable to process the definition file \"%s\"...\n", argv[1]);
- throw Exit(-1);
- }
-
- iso_filename = argv[2];
-
- printm(M_STATUS, "Begin processing iso file.\n");
- f_iso_r = new Input(iso_filename);
- f_iso_w = new Output(iso_filename, 0, 0);
- f_iso_w->seek(0, SEEK_SET);
-
- cdutil = new cdutils(f_iso_r, f_iso_w);
-
- if (check_iso()) {
- printm(M_ERROR, "Invalid iso file for " + title + "\n");
- printm(M_ERROR, "===> Make sure you are using a Genuine iso file.\n");
- throw Exit(-1);
- } else {
- printm(M_INFO, "Genuine " + title + " iso detected.\n");
- }
-
- fileindex = atoi(argv[3]);
- in_filename = argv[4];
- f_in = new Input(in_filename);
-
- printm(M_STATUS, "Entering files write sequence\n");
- write_files(fileindex);
- return 0;
-}
-
-/*
- * Ugly but working... for now
- */
-int process_def_file(Handle * f_def)
-{
- unsigned int n, sum = 0;
- String t;
-
- *f_def >> t;
- printm(M_INFO, "Read title: " + t + "\n");
- title = t;
-
- *f_def >> t;
- iso_size = t.to_int();
- printm(M_INFO, "Read iso size: %lu bytes\n", iso_size);
-
- *f_def >> t;
- printm(M_INFO, "Read global directory prefix: " + t + "\n");
- prefix = t;
-
- *f_def >> t;
- nb_records = t.to_int();
- printm(M_INFO, "Read total of records: %u\n", nb_records);
-
- while (1) {
- *f_def >> t;
- n = t.to_int();
- if (!n) {
- if (sum == nb_records) {
- printm(M_INFO, "Definition file seems coherent\n");
- return 0;
- } else {
- printm(M_ERROR, "Definition file incoherent\n");
- return 1;
- }
- }
- sum += n;
- sequences[nb_seqs].n = n;
- sequences[nb_seqs].sum = sum;
- *f_def >> t;
- sequences[nb_seqs].prefix = t;
- *f_def >> t;
- n = t.to_int();
- sequences[nb_seqs].type = n;
- *f_def >> t;
- sequences[nb_seqs].name = t;
- printm(M_INFO, "Read definition of sequence %i:\n===> %5i (sum = %5i) chunks of " + t +
- " (" + sequences[nb_seqs].prefix + ")\n", nb_seqs, n, sum);
- nb_seqs++;
- }
-}
-
-long check_iso()
-{
- unsigned long length;
-
- length = f_iso_r->GetSize();
- printm(M_INFO, "Filesize of iso file " + iso_filename + " is %ld bytes\n", length);
- if (length != iso_size) {
- return 1;
- }
- return 0;
-}
-
-#define INDEXPOS 24
-
-void rewrite_fat(Byte * new_fat) {
- unsigned char old_fat[34816];
- int i;
-
- cdutil->sector_seek(INDEXPOS);
- for (i = INDEXPOS; i < (INDEXPOS + 16); i++) {
- printm(M_INFO, "Writing fat sector %lu\n", i);
- cdutil->write_sector(&new_fat[2048 * (i - INDEXPOS)], MODE_2_FORM_1);
- }
-
- cdutil->sector_seek(slus_index + 1);
- for (i = slus_index + 1; i < (slus_index + 18); i++) {
- printm(M_INFO, "Reading SLUS sector %lu\n", i);
- cdutil->read_sector(&old_fat[2048 * (i - slus_index - 1)], MODE_2_FORM_1);
- }
-
- bcopy((char *) new_fat, (char *) old_fat + 4, 32768);
- cdutil->sector_seek(slus_index + 1);
- for (i = slus_index + 1; i < (slus_index + 18); i++) {
- printm(M_INFO, "Writing SLUS sector %lu\n", i);
- cdutil->write_sector(&old_fat[2048 * (i - slus_index - 1)], MODE_2_FORM_1);
- }
-}
-
-void write_files(int fileindex) throw (GeneralException)
-{
- t_index_tab index_tab[10000];
- unsigned char t[8];
- unsigned long i;
- unsigned long j;
- unsigned int seq = 0;
- unsigned long indexer;
- struct t_index_tab *p = (struct t_index_tab *) t;
-
- long old_file_size, new_file_size, old_nb_sects, new_nb_sects;
- unsigned char fat[32768];
-
- cdutil->sector_seek(INDEXPOS);
- for (i = INDEXPOS; i < (INDEXPOS + 16); i++) {
- printm(M_INFO, "Reading fat sector %lu\n", i);
- cdutil->read_sector(&fat[2048 * (i - INDEXPOS)], MODE_2_FORM_1);
- }
-
- indexer = 0;
- for (j = 0; j < 32768; j = j + 7) {
- t[0] = 0;
- bcopy((char *) &fat[j], (char *) t + 1, 7);
- p->address >>= 8;
- index_tab[indexer] = *p;
- if (p->size > 0 && p->address != 0) {
- index_tab[indexer].index = j / 7;
- printm(M_INFO, "Found a quite valid index: number %4lu, address %6lu, size %3li\n",
- indexer, index_tab[indexer].address, index_tab[indexer].size);
- indexer++;
- if (indexer == nb_records)
- break;
- } else {
- printm(M_WARNING, "Ignored invalid index chunk number %4lu (size = %lu) (%02x %02x %02x %02x %02x %02x %02x)\n",
- j / 7, -index_tab[indexer].size, t[0], t[1], t[2], t[4], t[5], t[6], t[7]);
- }
- }
- printm(M_STATUS, "Index file generation complete.\n\n");
-
- for (i = 0; i < nb_records; i++) {
- if (sequences[seq].sum == i)
- seq++;
- index_tab[i].type = sequences[seq].type;
- if (sequences[seq].prefix == "SLUS") {
- if (slus_index >= 0) {
- printm(M_ERROR, "Two SLUS files defined\n");
- throw Exit(-1);
- }
- slus_index = index_tab[i].address;
- }
- }
-
- if (slus_index < 0) {
- printm(M_ERROR, "No SLUS file defined\n");
- throw Exit(-1);
- }
-
- printm(M_INFO, "SLUS file found at sector %6i\n", slus_index);
-
- new_file_size = f_in->GetSize();
- old_file_size = index_tab[fileindex].size;
-
- new_nb_sects = new_file_size / sec_sizes[index_tab[fileindex].type];
- old_nb_sects = old_file_size / sec_sizes[index_tab[fileindex].type];
-
- if (new_file_size % sec_sizes[index_tab[fileindex].type]) {
- new_nb_sects++;
- }
-
- if (old_file_size % sec_sizes[index_tab[fileindex].type]) {
- old_nb_sects++;
- }
-
- if (new_nb_sects > old_nb_sects) {
- printm(M_ERROR, "New file too big.\n");
- if (!force) {
- throw Exit(-1);
- }
- }
-
- printm(M_INFO, "New file size: %12li, old file size: %12li\n", new_file_size, old_file_size);
- printm(M_INFO, "New file ssize: %12li, old file ssize: %12li\n", new_nb_sects, old_nb_sects);
-
- printm(M_INFO, "File address: %6i\n", index_tab[fileindex].address);
-
- cdutil->write_file(f_in, index_tab[fileindex].type, index_tab[fileindex].address);
- *((long *)(&fat[index_tab[fileindex].index * 7 + 3])) = new_file_size;
- rewrite_fat(fat);
-}
-CODE_ENDS
+#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include "cdutils.h" +#include "generic.h" +#include "Input.h" +#include "Output.h" +#include "Main.h" + +CODE_BEGINS +public: +Appli() : tourne(0), nb_seqs(0), f_def(0), f_iso_r(0), f_iso_w(0), f_in(0), cdutil(0), slus_index(-1), force(0) {} +virtual ~Appli() { + delete cdutil; + delete f_def; + delete f_iso_r; + delete f_iso_w; + delete f_in; +} +private: + +unsigned int tourne; + +struct t_index_tab { + unsigned long address; + long size; + long type; + long index; +}; + +struct t_sequence { + unsigned int n; + unsigned int sum; + String prefix; + String name; + int type; +}; + +String title, iso_filename, prefix, in_filename; +unsigned long iso_size; +unsigned int nb_records, nb_seqs; +struct t_sequence sequences[1000]; +Handle * f_def, * f_iso_r, * f_iso_w, * f_in; +cdutils * cdutil; + +int slus_index, force; + +unsigned char user_data[2352]; + +void usage() throw (GeneralException) { + printm(M_BARE, "Usage: %s <definition_file.sqr> <iso_file_name> <file_index> <filename> [-f]\nSee readme.txt for details\n", + argv[0]); + throw Exit(-1); +} + +virtual int startup() throw (GeneralException) +{ + int fileindex; + + verbosity = 1; + + printm(M_BARE, "Xenogears File Insertor by Nicolas \"Pixel\" Noble\n\n"); + + if ((argc != 5) && (argc != 6)) { + usage(); + } + + if (argc == 6) { + if (strcmp(argv[5], "-f")) { + usage(); + } else { + force = 1; + } + } + + printm(M_STATUS, "Processing file %s...\n", argv[1]); + + f_def = new Input(argv[1]); + + if (process_def_file(f_def)) { + printm(M_ERROR, "Unable to process the definition file \"%s\"...\n", argv[1]); + throw Exit(-1); + } + + iso_filename = argv[2]; + + printm(M_STATUS, "Begin processing iso file.\n"); + f_iso_r = new Input(iso_filename); + f_iso_w = new Output(iso_filename, 0, 0); + f_iso_w->seek(0, SEEK_SET); + + cdutil = new cdutils(f_iso_r, f_iso_w); + + if (check_iso()) { + printm(M_ERROR, "Invalid iso file for " + title + "\n"); + printm(M_ERROR, "===> Make sure you are using a Genuine iso file.\n"); + throw Exit(-1); + } else { + printm(M_INFO, "Genuine " + title + " iso detected.\n"); + } + + fileindex = atoi(argv[3]); + in_filename = argv[4]; + f_in = new Input(in_filename); + + printm(M_STATUS, "Entering files write sequence\n"); + write_files(fileindex); + return 0; +} + +/* + * Ugly but working... for now + */ +int process_def_file(Handle * f_def) +{ + unsigned int n, sum = 0; + String t; + + *f_def >> t; + printm(M_INFO, "Read title: " + t + "\n"); + title = t; + + *f_def >> t; + iso_size = t.to_int(); + printm(M_INFO, "Read iso size: %lu bytes\n", iso_size); + + *f_def >> t; + printm(M_INFO, "Read global directory prefix: " + t + "\n"); + prefix = t; + + *f_def >> t; + nb_records = t.to_int(); + printm(M_INFO, "Read total of records: %u\n", nb_records); + + while (1) { + *f_def >> t; + n = t.to_int(); + if (!n) { + if (sum == nb_records) { + printm(M_INFO, "Definition file seems coherent\n"); + return 0; + } else { + printm(M_ERROR, "Definition file incoherent\n"); + return 1; + } + } + sum += n; + sequences[nb_seqs].n = n; + sequences[nb_seqs].sum = sum; + *f_def >> t; + sequences[nb_seqs].prefix = t; + *f_def >> t; + n = t.to_int(); + sequences[nb_seqs].type = n; + *f_def >> t; + sequences[nb_seqs].name = t; + printm(M_INFO, "Read definition of sequence %i:\n===> %5i (sum = %5i) chunks of " + t + + " (" + sequences[nb_seqs].prefix + ")\n", nb_seqs, n, sum); + nb_seqs++; + } +} + +long check_iso() +{ + unsigned long length; + + length = f_iso_r->GetSize(); + printm(M_INFO, "Filesize of iso file " + iso_filename + " is %ld bytes\n", length); + if (length != iso_size) { + return 1; + } + return 0; +} + +#define INDEXPOS 24 + +void rewrite_fat(Byte * new_fat) { + unsigned char old_fat[34816]; + int i; + + cdutil->sector_seek(INDEXPOS); + for (i = INDEXPOS; i < (INDEXPOS + 16); i++) { + printm(M_INFO, "Writing fat sector %lu\n", i); + cdutil->write_sector(&new_fat[2048 * (i - INDEXPOS)], MODE_2_FORM_1); + } + + cdutil->sector_seek(slus_index + 1); + for (i = slus_index + 1; i < (slus_index + 18); i++) { + printm(M_INFO, "Reading SLUS sector %lu\n", i); + cdutil->read_sector(&old_fat[2048 * (i - slus_index - 1)], MODE_2_FORM_1); + } + + bcopy((char *) new_fat, (char *) old_fat + 4, 32768); + cdutil->sector_seek(slus_index + 1); + for (i = slus_index + 1; i < (slus_index + 18); i++) { + printm(M_INFO, "Writing SLUS sector %lu\n", i); + cdutil->write_sector(&old_fat[2048 * (i - slus_index - 1)], MODE_2_FORM_1); + } +} + +void write_files(int fileindex) throw (GeneralException) +{ + t_index_tab index_tab[10000]; + unsigned char t[8]; + unsigned long i; + unsigned long j; + unsigned int seq = 0; + unsigned long indexer; + struct t_index_tab *p = (struct t_index_tab *) t; + + long old_file_size, new_file_size, old_nb_sects, new_nb_sects; + unsigned char fat[32768]; + + cdutil->sector_seek(INDEXPOS); + for (i = INDEXPOS; i < (INDEXPOS + 16); i++) { + printm(M_INFO, "Reading fat sector %lu\n", i); + cdutil->read_sector(&fat[2048 * (i - INDEXPOS)], MODE_2_FORM_1); + } + + indexer = 0; + for (j = 0; j < 32768; j = j + 7) { + t[0] = 0; + bcopy((char *) &fat[j], (char *) t + 1, 7); + p->address >>= 8; + index_tab[indexer] = *p; + if (p->size > 0 && p->address != 0) { + index_tab[indexer].index = j / 7; + printm(M_INFO, "Found a quite valid index: number %4lu, address %6lu, size %3li\n", + indexer, index_tab[indexer].address, index_tab[indexer].size); + indexer++; + if (indexer == nb_records) + break; + } else { + printm(M_WARNING, "Ignored invalid index chunk number %4lu (size = %lu) (%02x %02x %02x %02x %02x %02x %02x)\n", + j / 7, -index_tab[indexer].size, t[0], t[1], t[2], t[4], t[5], t[6], t[7]); + } + } + printm(M_STATUS, "Index file generation complete.\n\n"); + + for (i = 0; i < nb_records; i++) { + if (sequences[seq].sum == i) + seq++; + index_tab[i].type = sequences[seq].type; + if (sequences[seq].prefix == "SLUS") { + if (slus_index >= 0) { + printm(M_ERROR, "Two SLUS files defined\n"); + throw Exit(-1); + } + slus_index = index_tab[i].address; + } + } + + if (slus_index < 0) { + printm(M_ERROR, "No SLUS file defined\n"); + throw Exit(-1); + } + + printm(M_INFO, "SLUS file found at sector %6i\n", slus_index); + + new_file_size = f_in->GetSize(); + old_file_size = index_tab[fileindex].size; + + new_nb_sects = new_file_size / sec_sizes[index_tab[fileindex].type]; + old_nb_sects = old_file_size / sec_sizes[index_tab[fileindex].type]; + + if (new_file_size % sec_sizes[index_tab[fileindex].type]) { + new_nb_sects++; + } + + if (old_file_size % sec_sizes[index_tab[fileindex].type]) { + old_nb_sects++; + } + + if (new_nb_sects > old_nb_sects) { + printm(M_ERROR, "New file too big.\n"); + if (!force) { + throw Exit(-1); + } + } + + printm(M_INFO, "New file size: %12li, old file size: %12li\n", new_file_size, old_file_size); + printm(M_INFO, "New file ssize: %12li, old file ssize: %12li\n", new_nb_sects, old_nb_sects); + + printm(M_INFO, "File address: %6i\n", index_tab[fileindex].address); + + cdutil->write_file(f_in, index_tab[fileindex].type, index_tab[fileindex].address); + *((long *)(&fat[index_tab[fileindex].index * 7 + 3])) = new_file_size; + rewrite_fat(fat); +} +CODE_ENDS diff --git a/Xenogears/script-comp.cpp b/Xenogears/script-comp.cpp index 01f6bdd..4e835a7 100644 --- a/Xenogears/script-comp.cpp +++ b/Xenogears/script-comp.cpp @@ -1,109 +1,109 @@ -#include "lzss.h"
-#include "Input.h"
-#include "Output.h"
-#include "generic.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, Handle * d, Handle * f_part, int n) {
- String nom_du_fichier;
- char zeros[4] = {0, 0, 0, 0}, * datas;
- int script_position, true_length, delta, data_length;
- printm(M_BARE, " Copying header\n");
-
- f->seek(0x14c);
- f->read(&script_position, 4);
- f->seek(0);
- copy(f, d, script_position);
-
- f->seek(0x150);
- f->read(&script_position, 4);
- f->seek(script_position);
-
- data_length = f->GetSize() - script_position;
-
- datas = (char *) malloc(data_length);
- f->read(datas, data_length);
-
- printm(M_BARE, " Processing script\n");
-
- true_length = f_part->GetSize();
-
- script_position = d->tell();
- d->seek(0x14c);
- d->write(&script_position, 4);
- d->seek(0x128);
- d->write(&true_length, 4);
- d->seek(0, SEEK_END);
-
- lzss_o->lzss_comp(f_part, d, &delta);
-
- script_position = d->tell();
- if ((true_length = (script_position & 3))) {
- d->write(zeros, 4 - true_length);
- }
-
- printm(M_BARE, " Processing extra datas\n");
- script_position = d->tell();
- d->seek(0x150);
- d->write(&script_position, 4);
-
- d->seek(0,SEEK_END);
- d->write(datas, data_length);
-
- free(datas);
-}
-
-virtual int startup() throw (GeneralException)
-{
- Handle * f_script_comp, * f_old_script, * f_new_script;
- int i;
- int num = 0;
- String nom_du_fichier;
-
- for (i = 384; i < 1844; i = i + 2) {
- printm(M_BARE, "CD1 - File %d -> Script %d\n", i, num);
- nom_du_fichier.set("xeno_d1/ROOMS/%04d.out", i);
- f_old_script = new Input(nom_du_fichier);
- nom_du_fichier.set("xeno_d1/ROOMS/%04d.out-new", i);
- f_new_script = new Output(nom_du_fichier);
- nom_du_fichier.set("xeno_d1/ROOMS/%04d/script.comp", num);
- f_script_comp = new Input(nom_du_fichier);
-
- process_one_file(f_old_script, f_new_script, f_script_comp, num);
-
- delete f_script_comp;
- delete f_new_script;
- delete f_old_script;
- num++;
- }
- num = 0;
-
- for (i = 379; i < 1838; i = i + 2) {
- printm(M_BARE, "CD2 - File %d -> Script %d\n", i, num);
- nom_du_fichier.set("xeno_d2/ROOMS/%04d.out", i);
- f_old_script = new Input(nom_du_fichier);
- nom_du_fichier.set("xeno_d2/ROOMS/%04d.out-new", i);
- f_new_script = new Output(nom_du_fichier);
- nom_du_fichier.set("xeno_d2/ROOMS/%04d/script.comp", num);
- f_script_comp = new Input(nom_du_fichier);
-
- process_one_file(f_old_script, f_new_script, f_script_comp, num);
-
- delete f_script_comp;
- delete f_new_script;
- delete f_old_script;
- num++;
- }
- printm(M_BARE, "Done !\n");
-
- return 0;
-}
-CODE_ENDS
+#include "lzss.h" +#include "Input.h" +#include "Output.h" +#include "generic.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, Handle * d, Handle * f_part, int n) { + String nom_du_fichier; + char zeros[4] = {0, 0, 0, 0}, * datas; + int script_position, true_length, delta, data_length; + printm(M_BARE, " Copying header\n"); + + f->seek(0x14c); + f->read(&script_position, 4); + f->seek(0); + copy(f, d, script_position); + + f->seek(0x150); + f->read(&script_position, 4); + f->seek(script_position); + + data_length = f->GetSize() - script_position; + + datas = (char *) malloc(data_length); + f->read(datas, data_length); + + printm(M_BARE, " Processing script\n"); + + true_length = f_part->GetSize(); + + script_position = d->tell(); + d->seek(0x14c); + d->write(&script_position, 4); + d->seek(0x128); + d->write(&true_length, 4); + d->seek(0, SEEK_END); + + lzss_o->lzss_comp(f_part, d, &delta); + + script_position = d->tell(); + if ((true_length = (script_position & 3))) { + d->write(zeros, 4 - true_length); + } + + printm(M_BARE, " Processing extra datas\n"); + script_position = d->tell(); + d->seek(0x150); + d->write(&script_position, 4); + + d->seek(0,SEEK_END); + d->write(datas, data_length); + + free(datas); +} + +virtual int startup() throw (GeneralException) +{ + Handle * f_script_comp, * f_old_script, * f_new_script; + int i; + int num = 0; + String nom_du_fichier; + + for (i = 384; i < 1844; i = i + 2) { + printm(M_BARE, "CD1 - File %d -> Script %d\n", i, num); + nom_du_fichier.set("xeno_d1/ROOMS/%04d.out", i); + f_old_script = new Input(nom_du_fichier); + nom_du_fichier.set("xeno_d1/ROOMS/%04d.out-new", i); + f_new_script = new Output(nom_du_fichier); + nom_du_fichier.set("xeno_d1/ROOMS/%04d/script.comp", num); + f_script_comp = new Input(nom_du_fichier); + + process_one_file(f_old_script, f_new_script, f_script_comp, num); + + delete f_script_comp; + delete f_new_script; + delete f_old_script; + num++; + } + num = 0; + + for (i = 379; i < 1838; i = i + 2) { + printm(M_BARE, "CD2 - File %d -> Script %d\n", i, num); + nom_du_fichier.set("xeno_d2/ROOMS/%04d.out", i); + f_old_script = new Input(nom_du_fichier); + nom_du_fichier.set("xeno_d2/ROOMS/%04d.out-new", i); + f_new_script = new Output(nom_du_fichier); + nom_du_fichier.set("xeno_d2/ROOMS/%04d/script.comp", num); + f_script_comp = new Input(nom_du_fichier); + + process_one_file(f_old_script, f_new_script, f_script_comp, num); + + delete f_script_comp; + delete f_new_script; + delete f_old_script; + num++; + } + printm(M_BARE, "Done !\n"); + + return 0; +} +CODE_ENDS diff --git a/Xenogears/script-dec.cpp b/Xenogears/script-dec.cpp index 0285013..55edb31 100644 --- a/Xenogears/script-dec.cpp +++ b/Xenogears/script-dec.cpp @@ -1,82 +1,82 @@ -#include <stdio.h>
-#include <stdlib.h>
-#include "lzss.h"
-#include "BString.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
+#include <stdio.h> +#include <stdlib.h> +#include "lzss.h" +#include "BString.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 diff --git a/Xenogears/test-dlzss.cpp b/Xenogears/test-dlzss.cpp index 4591b9d..ecd0f7e 100644 --- a/Xenogears/test-dlzss.cpp +++ b/Xenogears/test-dlzss.cpp @@ -1,7 +1,7 @@ -#include <stdio.h>
-#include "lzss.h"
-
-int main(void) {
- lzss_decomp(0, 1);
- return 0;
-}
+#include <stdio.h> +#include "lzss.h" + +int main(void) { + lzss_decomp(0, 1); + return 0; +} diff --git a/Xenogears/test-lzss.cpp b/Xenogears/test-lzss.cpp index b92808c..0257e99 100644 --- a/Xenogears/test-lzss.cpp +++ b/Xenogears/test-lzss.cpp @@ -1,7 +1,7 @@ -#include <stdio.h>
-#include "lzss.h"
-
-int main(void) {
- lzss_comp(0, 1);
- return 0;
-}
+#include <stdio.h> +#include "lzss.h" + +int main(void) { + lzss_comp(0, 1); + return 0; +} |