summaryrefslogtreecommitdiff
path: root/VP-isowork.lua
diff options
context:
space:
mode:
Diffstat (limited to 'VP-isowork.lua')
-rw-r--r--VP-isowork.lua112
1 files changed, 82 insertions, 30 deletions
diff --git a/VP-isowork.lua b/VP-isowork.lua
index 4b9efb2..ace75af 100644
--- a/VP-isowork.lua
+++ b/VP-isowork.lua
@@ -11,33 +11,54 @@ function apply_hacks(hacks, file)
end
function prepare_out(file_out)
+ local iso_file
if got_psp then
local x = Output "VP-FR.iso"
x:destroy()
- globals[3] = dvdabstract(file_out or "VP-FR.iso", true)
+ iso_file = dvdabstract(file_out or "VP-FR.iso", true)
else
- globals[3] = Output(file_out or "VP-FR.bin")
+ iso_file = Output(file_out or "VP-FR.bin")
end
- local iso = isobuilder(globals[3])
+ local iso = isobuilder(iso_file)
+ iso.iso_file = iso_file
return iso
end
-function startup(file_in, file_in2, iso_out)
+function startup(file_in, file_in2, iso_out, file_in3, file_in4)
+ local cdutil, cdutil2, cdutil3, cdutil4
if not loadmodule then error("This can only be used with lua-interface...") end
loadmodule "lualibs"
loadmodule "luahandle"
loadmodule "luacd"
- loadmodule "luaslz"
+ pcall(loadmodule, "luaslz")
loadmodule "luahttp"
loadmodule "luaxml"
--- globals[1] = cdabstract(file_in or "VP-SQUISH.bin")
- globals[1] = dvdabstract(file_in or "VP-PSP-EUR.iso")
- local cdutil = cdutils(globals[1])
+ local r, v
+ r, v = pcall(cdabstract, file_in or "VP-SQUISH.bin")
+ if not r then
+ v = dvdabstract(file_in or "VP-PSP-EUR.iso")
+ end
+ cdutil = cdutils(v)
+ cdutil.iso_in = v
if file_in2 then
- globals[2] = cdabstract(file_in2)
- local cdutil2 = cdutils(globals[2])
+ v = cdabstract(file_in2)
+ cdutil2 = cdutils(v)
+ cdutil2.iso_in = v
+ end
+ if file_in3 then
+ r, v = pcall(cdabstract, file_in3)
+ if not r then
+ v = dvdabstract(file_in3)
+ end
+ cdutil3 = cdutils(v)
+ cdutil3.iso_in = v
+ end
+ if file_in4 then
+ v = cdabstract(file_in4)
+ cdutil4 = cdutils(v)
+ cdutil4.iso_in = v
end
- return cdutil, cdutil2, iso_out
+ return cdutil, cdutil2, iso_out, cdutil3, cdutil4
end
anti_cd_swap_hack = {
@@ -47,56 +68,85 @@ anti_cd_swap_hack = {
[0x2820] = { 0x00, 0x00, 0x00, 0x00 },
}
-function iso_identify(cdutil)
+function iso_identify(cdutil, additionnal)
local slusdirentuscd1 = cdutil:findpath "/SLUS_011.56;1"
local slusdirentuscd2 = cdutil:findpath "/SLUS_011.79;1"
- local slusdirentjpcd1 = cdutil:findpath "/SLPM_863_79;1"
- local slusdirentjpcd2 = cdutil:findpath "/SLPM_863_80;1"
+ local slusdirentjpcd1 = cdutil:findpath "/SLPM_863.79;1"
+ local slusdirentjpcd2 = cdutil:findpath "/SLPM_863.80;1"
local slusdirentsquished = cdutil:findpath "/VALKYRIE.EXE;1"
local pspdata = cdutil:findpath "/UMD_DATA.BIN"
if pspdata then
local pspdataf = cdutil:cdfile(pspdata)
local umddata = pspdataf:read()
if umddata == "ULUS-10107|400F6E7A41D6C586|0001|G" then
- got_us = true
+ if not additionnal then got_us = true else got_add_us = true end
elseif umddata == "ULES-00724|2A9CD5DEEA986357|0001|G" then
- got_eu = true
+ if not additionnal then got_eu = true else got_add_eu = true end
elseif umddata == "ULJM-05101|7862BF3F2632E5B5|0001|G" then
- got_jp = true
+ if not additionnal then got_jp = true else got_add_jp = true end
else
error "Wrong PSP iso."
end
- got_psp = true
+ if not additionnal then
+ got_psp = true
+ got_cd1 = true
+ got_cd2 = true
+ else
+ got_add_psp = true
+ got_add_cd1 = true
+ got_add_cd2 = true
+ end
end
- if slusdirentuscd1 and got_cd1 then error "Got twice CD1." end
- if slusdirentuscd2 and got_cd2 then error "Got twice CD2." end
+ if (slusdirentuscd1 or slusdirentjpcd1) and got_cd1 and not additionnal then error "Got twice CD1." end
+ if (slusdirentuscd2 or slusdirentjpcd2) and got_cd2 and not additionnal then error "Got twice CD2." end
+ if (slusdirentuscd1 or slusdirentjpcd1) and got_add_cd1 and additionnal then error "Got twice CD1." end
+ if (slusdirentuscd2 or slusdirentjpcd2) and got_add_cd2 and additionnal then error "Got twice CD2." end
+
+ if (slusdirentuscd1 or slusdirentuscd2) and not additionnal then got_us = true end
+ if (slusdirentjpcd1 or slusdirentjpcd2) and not additionnal then got_jp = true end
+ if (slusdirentuscd1 or slusdirentjpcd1) and not additionnal then got_cd1 = true end
+ if (slusdirentuscd2 or slusdirentjpcd2) and not additionnal then got_cd2 = true end
- if slusdirentuscd1 or slusdirentuscd2 then got_us = true end
- if slusdirentjpcd1 or slusdirentjpcd2 then got_jp = true end
- if slusdirentuscd1 or slusdirentjpcd1 then got_cd1 = true end
- if slusdirentuscd2 or slusdirentjpcd2 then got_cd2 = true end
+ if (slusdirentuscd1 or slusdirentuscd2) and additionnal then got_add_us = true end
+ if (slusdirentjpcd1 or slusdirentjpcd2) and additionnal then got_add_jp = true end
+ if (slusdirentuscd1 or slusdirentjpcd1) and additionnal then got_add_cd1 = true end
+ if (slusdirentuscd2 or slusdirentjpcd2) and additionnal then got_add_cd2 = true end
- if slusdirentsquished then
+ if slusdirentsquished and not additionnal then
got_cd1 = true
got_cd2 = true
-- let's fallback...
got_us = true
end
- if not slusent then
- slusent = slusdirentuscd1 or slusdirentuscd2 or slusdirentjpcd1 or slusdirentjpcd2 or slusdirentsquished
+ if slusdirentsquished and additionnal then
+ got_add_cd1 = true
+ got_add_cd2 = true
+ -- let's fallback...
+ got_add_jp = true
+ end
+
+ if not slusdirent then
+ slusdirent = slusdirentuscd1 or slusdirentuscd2 or slusdirentjpcd1 or slusdirentjpcd2 or slusdirentsquished
end
if got_us and got_jp then error "2 isos must from the same version of the game." end
+ if got_add_us and got_add_jp then error "2 isos must from the same version of the game." end
+
+ if got_us and got_add_jp and got_cd1 and got_cd2 and got_add_cd1 and got_add_cd2 then
+ jp_in_us = true
+ end
+
+ -- should check for PSP / PSX mixup...
end
function build_basic(iso, cdutil, iso_full)
local cp = function(path, name, dirtree) copyfile(path, name, dirtree, iso, cdutil) end
iso:foreword(cdutil)
local pvd = createpvd(cdutil)
- pvd.volid = "VP-FR"
+ pvd.volid = jp_in_us and "VP-JP-US" or "VP-FR"
local root = iso:setbasics(pvd)
dirent = cdutil:findpath "/"
root:setbasicsxa()
@@ -136,7 +186,8 @@ function build_basic(iso, cdutil, iso_full)
psp_dirtrees.PSPVAL1:setbasicsxa()
dummy:destroy()
else
- local systemcnfstring = "BOOT=cdrom:\\VP-FR.EXE;1\r\nTCB=4\r\nEVENT=16\r\nSTACK=801fff00\r\n"
+ local systemcnfstring
+ systemcnfstring = jp_in_us and "BOOT=cdrom:\\VP-JP-US.EXE;1\r\nTCB=4\r\nEVENT=16\r\nSTACK=801fff00\r\n" or "BOOT=cdrom:\\VP-FR.EXE;1\r\nTCB=4\r\nEVENT=16\r\nSTACK=801fff00\r\n"
local systemcnf = Buffer()
local slus = Buffer(true)
slus:copyfrom(cdutil:cdfile(slusdirent))
@@ -149,7 +200,7 @@ function build_basic(iso, cdutil, iso_full)
end
apply_hacks(slz3_patch, slus)
slus:seek(0)
- iso:createfile(root, "VP-FR.EXE", slus, slusdirent):setbasicsxa()
+ iso:createfile(root, jp_in_us and "VP-JP-US.EXE" or "VP-FR.EXE", slus, slusdirent):setbasicsxa()
slus:seek(0)
local readme = Buffer()
readme:write("Readme...")
@@ -161,3 +212,4 @@ function build_basic(iso, cdutil, iso_full)
end
end
end
+