summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--PE/compil.lex16
-rw-r--r--PE/pe-hack.lua96
-rw-r--r--cd-tool.cpp15
-rw-r--r--str-player.cpp20
4 files changed, 78 insertions, 69 deletions
diff --git a/PE/compil.lex b/PE/compil.lex
index 76d3dbe..cda7fa0 100644
--- a/PE/compil.lex
+++ b/PE/compil.lex
@@ -2,10 +2,16 @@
#define yputc(a) putc(a, yyout)
#include "table.h"
+ int oldpt = -1;
+
%%
"<PT"[[:digit:]]+">\n" {
int d = atoi(yytext + 3);
+ if (d != (oldpt + 1)) {
+ fprintf(stderr, "Pointeur incorrect ligne %i: %i\n", yylineno, d);
+ }
+ oldpt = d;
yputc(0xfe);
yputc(d);
}
@@ -15,14 +21,10 @@
yputc(d);
}
-"<TAG0>" {
- yputc(0xfb);
- yputc(0);
-}
-
-"<TAG1>" {
+"<TAG"[[:digit:]]+">" {
+ int d = atoi(yytext + 4);
yputc(0xfb);
- yputc(1);
+ yputc(d);
}
"<CHOICES "[[:digit:]]+">\n" {
diff --git a/PE/pe-hack.lua b/PE/pe-hack.lua
index 9de8e09..f7a943a 100644
--- a/PE/pe-hack.lua
+++ b/PE/pe-hack.lua
@@ -1,7 +1,7 @@
function mainpatch()
- local dirent, pvd, root, is_cd1, is_cd2, slusname, fmvdir, systemcnfstring, inslus, slus, peimg, pesect, tim, startsect, fmvdirtree, falsesect, i
+ local dirent, pvd, root, is_cd1, is_cd2, slusname, fmvdir, systemcnfstring, inslus, slus, peimg, pesect, tim, startsect, fmvdirtree, xadirtree, falsesect, i
- dirent = cdutil:findpath "/SLUS_006.62;1" or cdutil:findpath "/SLUS_006.68;1" or error "Not a Parasite Eve CD"
+ dirent = cdutil:findpath "/SLUS_006.62;1" or cdutil:findpath "/SLUS_006.68;1" or error "Not a Parasite Eve CD"
iso:foreword(cdutil)
pvd = createpvd(cdutil)
@@ -63,6 +63,14 @@ STACK=801fff00
fmvdirtree = iso:createdir(root, fmvdir, 1, dirent)
fmvdirtree.hardhide = true
iso:copydir(fmvdirtree, cdutil, dirent)
+
+ if (is_cd2) then
+ print "Copying xastream directory"
+ dirent = cdutil:findpath("/XASTREAM")
+ xadirtree = iso:createdir(root, "XASTREAM", 1, dirent)
+ xadirtree.hardhide = true
+ iso:copydir(xadirtree, cdutil, dirent)
+ end
print "Finalizing CD"
iso:createfile(root, "README.TXT", Input("readme.txt")):setbasicsxa()
@@ -76,18 +84,7 @@ STACK=801fff00
end
function do_img_file(slus, startsect, pesect)
- local i, j, sect1, tab1, sect2, tab2, sect3, tab3, sizes1, sizes2, sizes3, sect, file, file1, file2, file3, songsect, b1, b2, b3, b4, lastsect, s1, s2, s3, str
-
- sect1 = {}
- tab1 = {}
- sect2 = {}
- tab2 = {}
- sect3 = {}
- tab3 = {}
- sizes1 = {}
- sizes2 = {}
- sizes3 = {}
-
+ local i, j, sect1, tab1, sect2, tab2, sect3, tab3, sizes1, sizes2, sizes3, sect, file, file1, file2, file3, songsect, b1, b2, b3, b4, lastsect, s1, s2, s3, str = 0, 0, {}, {}, {}, {}, {}, {}, {}, {}, {}
print "Putting various files"
slus:seek(0x838da)
@@ -168,10 +165,7 @@ function do_img_file(slus, startsect, pesect)
if (file3) then
if (groups[i] ~= nil) then
str = string.format("%02i", groups[i])
- print("Script is from group " .. str)
file3 = patch_room(file3, Input("scripts/c/" .. str .. ".out"), i)
- else
- print("Room has no script")
end
iso:putfile(file3)
end
@@ -215,23 +209,22 @@ function do_img_file(slus, startsect, pesect)
end
function patch_map(sector, size)
- local map, font, buff
+ local map, font, names, buff
- map = cdfile(cdutil, sector, size)
font = Input("font.tim")
+ names = Input("names.tim")
buff = Buffer(true)
- buff:copyfrom(map)
- buff:wseek(8)
+ buff:writeU32(8)
+ buff:writeU32(font:getsize() + 8)
buff:copyfrom(font)
+ buff:copyfrom(names)
+
return buff
end
function patch_day1(sector, size)
- local day1, buffs, offs, i, trad, r
+ local day1, buffs, offs, i, trad, r = nil, {}, {}
- buffs = {}
- offs = {}
-
day1 = cdfile(cdutil, sector, size)
for i = 1, 4, 1 do
@@ -270,13 +263,13 @@ function patch_day1(sector, size)
end
function patch_room(_room, _script, nb)
- local r, truescriptsize, scriptsize, enlargment, room, script, roomsize, ptrptrs, ptrscriptptrs, oldscriptsize, scriptptr, rest, t, i, nbptrs
+ local r, truescriptsize, scriptsize, enlargment, room, script, roomsize, ptrptrs, ptrscriptptrs, oldscriptsize, scriptptr, rest, t, i, nbptrs, add
script = Buffer(true)
script:copyfrom(_script)
buffer_pad(script)
- r = Buffer(true)
+ r = Buffer()
truescriptsize = _script:getsize()
scriptsize = script:getsize()
@@ -287,6 +280,8 @@ function patch_room(_room, _script, nb)
room:copyfrom(_room, roomsize)
room:seek(ptrptrs + 32)
ptrscriptsptr = andB(room:readU32(), 0xfffff)
+ add = andB(room:readU32(), 0xfffff)
+ add = (andB(room:readU32(), 0xfffff) - add) / 4
room:seek(ptrscriptsptr + 8)
oldscriptsize = room:readU32()
scriptptr = andB(room:readU32(), 0xfffff)
@@ -315,30 +310,29 @@ function patch_room(_room, _script, nb)
r:copyfrom(room, ptrscriptsptr - room:tell() + 8)
r:writeU32(truescriptsize)
room:readU32()
- for i = 1, 3, 1 do
- t = room:readU32()
- r:writeU32(t)
+ r:writeU32(room:readU32())
+ for i = 1, add, 1 do
+ r:writeU32(room:readU32())
end
nbptrs = (roomsize - room:tell()) / 12
for i = 1, nbptrs, 1 do
+ r:writeU32(room:readU32())
t = room:readU32()
- r:writeU32(t)
- t = room:readU32()
- r:writeU32(orB(andB(t, 0xfff00000), andB(t, 0xfffff) + enlargment))
- t = room:readU32()
- r:writeU32(t)
+ r:writeU32(orB(shl(shr(t, 20), 20), andB(t, 0xfffff) + enlargment))
+ r:writeU32(room:readU32())
end
- r:copyto(Output("output/room-" .. hex(nb, "%04i") .. ".bin"))
- r:seek(0)
+-- r:copyto(Output("output/room-" .. hex(nb, "%04i") .. ".bin"))
+-- r:seek(0)
return r
end
function apply_hacks(hacks, file)
local k, v, i, h
+
for k, v in pairs(slus_hacks) do
for i, h in ipairs(v) do
file[k + i - 1] = h
@@ -362,7 +356,7 @@ end
files = {
[10] = "font.tim",
- [70] = "menu.bin",
+ [70] = "mainmenu.bin",
[72] = patch_map,
[76] = patch_day1,
}
@@ -418,7 +412,7 @@ slus_hacks = {
-- Text "Failed to escape"
[0x81dad] = { 0x15, 0x44, 0x38, 0x43, 0x34, 0x0f, 0x4d, 0x32,
- 0x37, 0x44, 0x4d, 0x34, 0xff },
+ 0x37, 0x3e, 0x44, 0x4d, 0x34, 0xff },
-- Text "Can't escape!"
[0x81dca] = { 0x15, 0x44, 0x38, 0x43, 0x34, 0x0f, 0x38, 0x3c,
@@ -427,19 +421,25 @@ slus_hacks = {
-- Font width table
- [0x81ea1] = { 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 8, 11, 14,
- 9, 8, 7, 8, 7, 7, 8, 9, 6, 7, 9, 8, 11, 9, 7, 8,
- 7, 9, 7, 7, 9, 9, 11, 7, 9, 7, 9, 4, 7, 6, 4, 4,
- 8, 8, 7, 7, 7, 7, 8, 9, 5, 4, 8, 5, 11, 9, 7, 8,
- 8, 7, 6, 5, 9, 9, 11, 7, 9, 6, 4, 4, 7, 7, 7, 7,
- 7, 7, 7, 7, 5, 5, 7, 7, 9, 9, 9, 7, 11, 11, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ [0x81ea1] = { 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6,
+ 6, 8, 11, 14, 9, 8, 7, 8, 7, 7, 8, 9,
+ 6, 7, 9, 8, 11, 9, 7, 8, 7, 9, 7, 7,
+ 9, 9, 11, 7, 9, 7, 9, 4, 7, 6, 4, 4,
+ 8, 8, 7, 7, 7, 7, 8, 9, 5, 4, 8, 5,
+ 11, 9, 7, 8, 8, 7, 6, 5, 9, 9, 11, 7,
+ 9, 6, 4, 4, 7, 7, 7, 7, 7, 7, 7, 7,
+ 5, 5, 7, 7, 9, 9, 9, 7, 11, 11, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
-- PE.BIN filename extension
[0x01b4c] = { 0x54, 0x49, 0x4d },
+
+-- Debug room
+-- [0x2f888] = { },
}
groups = {
diff --git a/cd-tool.cpp b/cd-tool.cpp
index ad283a4..67f1d2d 100644
--- a/cd-tool.cpp
+++ b/cd-tool.cpp
@@ -17,7 +17,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-/* $Id: cd-tool.cpp,v 1.20 2003-12-11 16:53:42 pixel Exp $ */
+/* $Id: cd-tool.cpp,v 1.21 2003-12-19 21:17:07 pixel Exp $ */
#include <getopt.h>
#include <stdio.h>
@@ -55,6 +55,7 @@ struct option long_options[] = {
{"force", 0, NULL, 'f'},
{"verbose", 0, NULL, 'v'},
{"debug", 0, NULL, 'g'},
+ {"archive", 1, NULL, 'a'},
{0, 0, NULL, 0 }
};
@@ -103,7 +104,9 @@ void showhelp(void) {
" extract <file> <addr> <size> - extract some sectors to <file>\n"
" insert-file <file> <path> - insert the file to <path>\n"
" insert <file> <addr> - insert some sectors at <addr>\n"
+#if 0
" copy <isofile> - copy to another iso\n"
+#endif
" lua <luascript> - interpret single LUA script\n"
" luapatch <luapatch> <file> - create a new iso file using the LUA script\n"
" luacomp <luascript> <file> - compile a LUA script\n"
@@ -111,6 +114,7 @@ void showhelp(void) {
"Additional options:\n"
" -v for verbose mode.\n"
" -g for LUA compiling debug mode (ie, no stripping)\n"
+" -a to load an additionnal archive file\n"
" -h for this help page\n"
, argv[0]);
}
@@ -138,7 +142,7 @@ virtual int startup() throw (GeneralException) {
verbosity = M_WARNING;
- while ((c = getopt_long(argc, argv, "Hhm:p:fvg", long_options, NULL)) != EOF) {
+ while ((c = getopt_long(argc, argv, "Hhm:p:fvga:", long_options, NULL)) != EOF) {
switch (c) {
case 'h':
case 'H':
@@ -160,6 +164,9 @@ virtual int startup() throw (GeneralException) {
case 'g':
debug = true;
break;
+ case 'a':
+ new Archive(optarg);
+ break;
}
}
@@ -233,7 +240,7 @@ virtual int startup() throw (GeneralException) {
}
printm(M_STATUS, "Reading path %s to file %s.\n", arg2, arg1);
#if 0
- cdutil->read_file(file, type, dir->Sector, dir->Size);
+ cdutil->read_file(file, dir->Size, type, dir->Sector);
#else
cdfile * f = new cdfile(cdutil, dir, type);
printm(M_STATUS, f->GetName());
@@ -253,7 +260,7 @@ virtual int startup() throw (GeneralException) {
sector = atoi(argv[optind++]);
file = new Output(arg1);
printm(M_STATUS, "Reading %i bytes from sector %i to file %s.\n", size, sector, arg1);
- cdutil->read_file(file, type, sector, size);
+ cdutil->read_file(file, size, type, sector);
} else if (!strcmp(argv[optind], "insert-file")) {
cdutils::DirEntry dir, * d;
unsigned char * buffer;
diff --git a/str-player.cpp b/str-player.cpp
index b1a814a..d13b706 100644
--- a/str-player.cpp
+++ b/str-player.cpp
@@ -75,19 +75,19 @@ void process_one_sector(Handle * f) {
f->read(sector, 2336);
h = (STR_Header *) ((Byte *) sector + 8);
-/*
+
printm(M_INFO, "SubHeader: FN = %x, CN = %x, SM = %x, CI = %x: ", sector[0], sector[1], sector[2], sector[3]);
printm(M_BARE, "SubHeader FN : %x\n", sector[0]);
printm(M_BARE, "SubHeader CN : %x\n", sector[1]);
printm(M_BARE, "SubHeader SM : %x\n", sector[2]);
printm(M_BARE, "SubHeader CI : %x\n", sector[3]);
-*/
+
if ((channel != -1) && (channel != sector[1]))
return;
if ((sector[2] == 0x48) || (sector[2] == 0x42)) {
-/* printm(M_BARE, "Video sector\n");
+ printm(M_BARE, "Video sector\n");
printm(M_BARE, "Status : %04x\n", h->StSTATUS);
printm(M_BARE, "Type : %04x\n", h->StTYPE);
printm(M_BARE, "Sector Offset: %i\n", h->StSECTOR_OFFSET);
@@ -98,7 +98,7 @@ void process_one_sector(Handle * f) {
printm(M_BARE, "Movie Height : %i\n", h->StMOVIE_HEIGHT);
printm(M_BARE, "Movie HeadM : %08x\n", h->StMOVIE_HEADM);
printm(M_BARE, "Movie HeadV : %08x\n", h->StMOVIE_HEADV);
- printm(M_BARE, "Channels : %04x\n", h->Channels); */
+ printm(M_BARE, "Channels : %04x\n", h->Channels);
if (h->StSECTOR_OFFSET == 0) {
video = (Byte *) malloc(h->StSECTOR_SIZE * 2016);
if (!screen) {
@@ -118,14 +118,14 @@ void process_one_sector(Handle * f) {
if (h->StSECTOR_SIZE == (h->StSECTOR_OFFSET + 1)) {
// Frame finished.
-// printm(M_BARE, "End of Frame.\n");
+ printm(M_BARE, "End of Frame.\n");
Uint8 * buffer = ((Uint8 *) screen->pixels);
if (SDL_MUSTLOCK(screen))
if (SDL_LockSurface(screen) < 0)
exit(1);
-// printm(M_BARE, "Width: %i, Height: %i - bpp: %i\n", width, height, bpp);
+ printm(M_BARE, "Width: %i, Height: %i - bpp: %i\n", width, height, bpp);
bs_decode_rgb24(buffer, (bs_header_t *) video, width, height, 0);
// fwrite(screen->pixels, 3, width * height, stdout);
@@ -140,9 +140,9 @@ void process_one_sector(Handle * f) {
int locked = 0;
SoundSector * buffer = (SoundSector *) sector;
-/* printm(M_BARE, "Audio sector\n");
+ printm(M_BARE, "Audio sector\n");
printm(M_BARE, "Frequency: %i\n", xahalfhz(buffer) ? 18900 : 37800);
- printm(M_BARE, "Channels : %s\n", xastereo(buffer) ? "stereo" : "mono"); */
+ printm(M_BARE, "Channels : %s\n", xastereo(buffer) ? "stereo" : "mono");
// fwrite(sector + 8, 1, 2324, stdout);
while (audio_len > 0) {
@@ -187,9 +187,9 @@ void process_one_sector(Handle * f) {
saveXaDecode(xachannel(buffer));
} else {
-// printm(M_BARE, "Unknow sector\n");
+ printm(M_BARE, "Unknow sector\n");
}
-// printm(M_BARE, "---------------------------------\n\n");
+ printm(M_BARE, "---------------------------------\n\n");
}
virtual int startup() throw (GeneralException) {