diff options
Diffstat (limited to 'PE')
-rw-r--r-- | PE/compil.lex | 16 | ||||
-rw-r--r-- | PE/pe-hack.lua | 96 |
2 files changed, 57 insertions, 55 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 = { |