Phantasy Star Generation:1 English translation project

Discuss/post fan stuff (images, fictions, games...)

Re: Phantasy Star Generation:1 English translation project

Postby Blaw- » Mon Oct 22, 2018 12:12 am

What do you mean by frankenstein ISO? .ISO is the most common format used on PS2 and are created properly.

For example, PSGEN2:

Code: Select all
ISOLuaList = {
   { dirname  = "MODULE", sector = 23, nb_sector = 1 },
   { filename = "SYSTEM.CNF", sector = 24 },
   { filename = "SLPM_625.53", sector = 25 },
   { filename = "MAPDATA.DAT", sector = 977 },
   { filename = "EVENT.DAT", sector = 13848 },
   { filename = "BTLDAT.DAT", sector = 18155 },
   { filename = "BTLSYS.DAT", sector = 26620 },
   { filename = "MODULE/CDVDSTM.IRX", sector = 30859 },
   { filename = "MODULE/EZMIDI.IRX", sector = 30872 },
   { filename = "MODULE/IOPRP271.IMG", sector = 30879 },
   { filename = "MODULE/LIBSD.IRX", sector = 31010 },
   { filename = "MODULE/MCMAN.IRX", sector = 31024 },
   { filename = "MODULE/MCSERV.IRX", sector = 31071 },
   { filename = "MODULE/MODHSYN.IRX", sector = 31075 },
   { filename = "MODULE/MODMIDI.IRX", sector = 31105 },
   { filename = "MODULE/PADMAN.IRX", sector = 31116 },
   { filename = "MODULE/SDRDRV.IRX", sector = 31138 },
   { filename = "MODULE/SIO2MAN.IRX", sector = 31142 },
   { filename = "SOUND.DAT", sector = 31146 },
   { filename = "MONDAT.DAT", sector = 35715 },
   { filename = "MODULE/MSIS_IOP.IRX", sector = 45752 },
   { filename = "TRADUCTION.TXT", sector = 45768 },
}


Code: Select all
------------------
-- misc functions --
------------------

function extract_file(source, dest, mode)
    if (mode == nil) then
   source = cdfile(source)
    else
   source = cdfile(source, mode)
    end
    dest = Output(dest)
    source:copyto(dest)
end

function insert_file(source, dest, mode)
    if (type(source) == "string") then
        source = Input(source)
    end
    if (type(dest) == "string") then
   dest = findpath(dest)
    end
    if (mode == nil) then
   writefile(source, -1, dest.Sector)
    else
   writefile(source, -1, dest.Sector, mode)
    end
end

function display(inp, n)
    local i
    if (type(inp) == "string") then
        inp = Input(inp)
    elseif (type(inp) ~= "table") then
        error("Display needs a string or an Input object")
    end
   
    i = 0
   
    while(not inp:isclosed()) do
   i = i + 1
        print(inp:read())
   if ((n ~= nil) and (i >= n)) then
       return
   end
    end
end

function pchar(n)
    if (not ((n >= 32) and (n <= 127))) then
        n = 46 -- aka '.' or 0x2e
    end
    return hex(n, "%c")
end

function hexdump(inp, from, to, width)
    local size, nlines, remaining, data_array, line, byte, outstring
   
    if (type(inp) == "string") then
        inp = Input(inp)
    elseif (type(inp) ~= "table") then
        error("Hexdump needs a string or an Input object")
    end
   
    size = inp:getsize()

    if (from == nil) then
        from = 0
    end
   
    if (to == nil) then
        to = size
    end
   
    if (to > size) then
        to = size
    end
   
    size = to - from
   
    if (width == nil) then
        width = 16
    end
   
    nlines = math.floor(size / width)
    remaining = math.mod(size, width)
    inp:seek(from)
    data_array = inp:read(size)
   
    for line = 0, nlines - 1, 1 do
        outstring = hex(line * width + from, "%08x   ")
        for byte = 0, width - 1, 1 do
            outstring = outstring .. hex(data_array[line * 16 + byte]) .. " "
        end
        outstring = outstring .. "  "
        for byte = 0, width - 1, 1 do
            outstring = outstring .. pchar(data_array[line * 16 + byte])
        end
        print(outstring)
    end
   
    if (remaining == 0) then
        return
    end
   
    outstring = hex(nlines * width + from, "%08x   ");
    for byte = 0, remaining - 1, 1 do
        outstring = outstring .. hex(data_array[nlines * 16 + byte]) .. " "
    end
    for byte = remaining + 1, width - 1, 1 do
        outstring = outstring .. "   "
    end
    outstring = outstring .. "  "
    for byte = 0, remaining - 1, 1 do
        outstring = outstring .. pchar(data_array[nlines * 16 + byte])
    end

    print(outstring)
end


--------------------------
-- cdutil object wrappers --
--------------------------

function check_cdutil()
    if (cdutil == nil) then error "cdutil object non existant" end
end

function cdfile(arg1, arg2, arg3, arg4)   
    local cdutil_implied = false
   
    if ((type(arg1) ~= "table") or (arg1.cdfile == nil)) then
   check_cdutil()
        cdutil_implied = true
   if (type(arg1) == "string") then
       arg1 = findpath(arg1)
   end
    else
   if (type(arg2) == "string") then
       arg2 = findpath(arg2)
   end
    end
   
    if ((arg2 == nil) and (arg3 == nil) and (arg4 == nil)) then
        return cdutil:cdfile(arg1)
    elseif ((arg3 == nil) and (arg4 == nil)) then
        if (cdutil_implied) then
            return cdutil:cdfile(arg1, arg2)
        else
            return arg1:cdfile(arg2)
        end
    elseif (arg4 == nil) then
        if (cdutil_implied) then
            return cdutil:cdfile(arg1, arg2, arg3)
        else
            return arg1:cdfile(arg2, arg3)
        end
    else
        return arg1:cdfile(arg2, arg3, arg4)
    end
end

function setisow(iso_w)
    check_cdutil()
    return cdutil:setisow(iso_w)
end

function guessmode(sect)
    check_cdutil()
    if (sect == nil) then
        return cdutil:guessmode()
    else
        return cdutil:guessmode(sect)
    end
end

function sectorseek(sect)
    check_cdutil()
    return cdutil:sectorseek(sect)
end

function readsector(sect, mode)
    check_cdutil()
    if (sect == nil) then
        return cdutil:readsector()
    elseif (mode == nil) then
        return cdutil:readsector(sect)
    else
        return cdutil:readsector(sect, mode)
    end
end

function readdatas(size, sector, mode)
    check_cdutil()
    if (sect == nil) then
        return cdutil:readdatas(size)
    elseif (mode == nil) then
        return cdutil:readdatas(size, sect)
    else
        return cdutil:readdatas(size, sect, mode)
    end
end

function readfile(handle, size, sector, mode)
    check_cdutil()
    if (sect == nil) then
        return cdutil:readfile(handle, size)
    elseif (mode == nil) then
        return cdutil:readfile(handle, size, sect)
    else
        return cdutil:readfile(handle, size, sect, mode)
    end
end

function writesector(array, sector, mode)
    check_cdutil()
    if (sector == nil) then
        return cdutil:writesector(array, sector)
    elseif (mode == nil) then
        return cdutil:writesector(array, sector, mode)
    end
end

function writedatas(array, size, sector, mode)
    check_cdutil()
    if (sector == nil) then
        return cdutil:writedatas(array, size)
    elseif (mode == nil) then
        return cdutil:writedatas(array, size, sector)
    else
        return cdutil:writedatas(array, size, sector, mode)
    end
end

function writefile(handle, size, sector, mode)
    check_cdutil()
    if (size == nil) then
        return cdutil:writefile(handle)
    elseif (sector == nil) then
        return cdutil:writefile(handle, size)
    elseif (mode == nil) then
        return cdutil:writefile(handle, size, sector)
    else
        return cdutil:writefile(handle, size, sector, mode)
    end
end

function findpath(path)
    check_cdutil()
    if (findpath == nil) then
   return cdutil:findpath "/"
    else
   return cdutil:findpath(path)
    end
end

function findparent(path)
    check_cdutil()
    return cdutil:findparent(path)
end

function finddirectory(dir, path)
    check_cdutil()
    return cdutil:finddirectory(dir, path)
end


-----------------------
-- iso object wrappers --
-----------------------

function check_iso()
    if (iso == nil) then error "iso object non existant" end
end

function foreword(lcdutil)
    check_iso()
    if ((lcdutil == nil) and (cdutil == nil)) then error "cdutil object non existant" end
    if (lcdutil == nil) then
        return iso:foreword(cdutil)
    else
        return iso:foreword(lcdutil)
    end
end

function foreword_handle(handle, mode)
    check_iso()
    if (mode == nil) then
        return iso:foreword_handle(handle)
    else
        return iso:foreword_handle(handle, mode)
    end
end

function foreword_array(array, mode)
    check_iso()
    if (mode == nil) then
        return iso:foreword_array(array)
    else
        return iso:foreword_array(array, mode)
    end
end

function getdispsect()
    check_iso()
    return iso:getdispsect()
end

function putfile(handle, mode, sector)
    check_iso()
    if (mode == nil) then
        iso:putfile(handle)
    elseif (sector == nil) then
        iso:putfile(handle, mode)
    else
        iso:putfile(handle, mode, sector)
    end
end

function putdatas(array, size, mode, sector)
    check_iso()
    if (mode == nil) then
        iso:putdatas(array, size)
    elseif (sector == nil) then
        iso:putdatas(array, size, mode)
    else
        iso:putdatas(array, size, mode, sector)
    end
end

function createsector(array, mode, sector)
    check_iso()
    if (mode == nil) then
        iso:createsector(array)
    elseif (sector == nil) then
        iso:createsector(array, mode)
    else
        iso:createsector(array, mode, sector)
    end
end

function setEOF()
    check_iso()
    iso:setEOF()
end

function clearEOF()
    check_iso()
    iso:clearEOF()
end

function setbasics(pvd, rootsize, ptsize, nvd, rootsect)
    check_iso()
    if (rootsize == nil) then
        iso:setbasics(pvd)
    elseif (ptsize == nil) then
        iso:setbasics(pvd, rootsize)
    elseif (nvd == nil) then
        iso:setbasics(pvd, rootsize, ptsize)
    elseif (rootsect) then
        iso:setbasics(pvd, rootsize, ptsize, nvd)
    else
        iso:setbasics(pvd, rootsize, ptsize, nvd, rootsect)
    end
end

function createdir(dirtree, name, size, direntry, mode)
    check_iso()
    if (size == nil) then
        iso:createdir(dirtree, name)
    elseif (mode == nil) then
        iso:createdir(dirtree, name, size, direntry)
    else
        iso:createdir(dirtree, name, size, direntry, mode)
    end
end

function createfile(dirtree, name, size, direntry, mode)
    check_iso()
    if (mode == nil) then
        iso:createfile(dirtree, name, size, direntry)
    else
        iso:createfile(dirtree, name, size, direntry, mode)
    end
end

function copydir(dirtree, cdutils, direntry, mode)
    check_iso()
    if (mode == nil) then
        iso:copydir(dirtree, cdutils, direntry)
    else
        iso:copydir(dirtree, cdutils, direntry, mode)
    end
end

function close(cuefile, mode, nsectors)
    check_iso()
    if (cuefile == nil) then
        iso:close()
    elseif (mode == nil) then
        iso:close(cuefile)
    elseif (nsectors == nil) then
        iso:close(cuefile, mode)
    else
        iso:close(cuefile, mode, nsectors)
    end
end


I don't know for PSGEN1 but if the ISO has been created with the translation tools, it should be fine.
Blaw-
Scorpius
Scorpius
 
Posts: 322
Joined: Mon Nov 12, 2012 11:48 pm

Re: Phantasy Star Generation:1 English translation project

Postby Zarper » Mon Oct 22, 2018 4:29 am

Blaw- wrote:What do you mean by frankenstein ISO? .ISO is the most common format used on PS2 and are created properly.

For example, PSGEN2:

Code: Select all
ISOLuaList = {
   { dirname  = "MODULE", sector = 23, nb_sector = 1 },
   { filename = "SYSTEM.CNF", sector = 24 },
   { filename = "SLPM_625.53", sector = 25 },
   { filename = "MAPDATA.DAT", sector = 977 },
   { filename = "EVENT.DAT", sector = 13848 },
   { filename = "BTLDAT.DAT", sector = 18155 },
   { filename = "BTLSYS.DAT", sector = 26620 },
   { filename = "MODULE/CDVDSTM.IRX", sector = 30859 },
   { filename = "MODULE/EZMIDI.IRX", sector = 30872 },
   { filename = "MODULE/IOPRP271.IMG", sector = 30879 },
   { filename = "MODULE/LIBSD.IRX", sector = 31010 },
   { filename = "MODULE/MCMAN.IRX", sector = 31024 },
   { filename = "MODULE/MCSERV.IRX", sector = 31071 },
   { filename = "MODULE/MODHSYN.IRX", sector = 31075 },
   { filename = "MODULE/MODMIDI.IRX", sector = 31105 },
   { filename = "MODULE/PADMAN.IRX", sector = 31116 },
   { filename = "MODULE/SDRDRV.IRX", sector = 31138 },
   { filename = "MODULE/SIO2MAN.IRX", sector = 31142 },
   { filename = "SOUND.DAT", sector = 31146 },
   { filename = "MONDAT.DAT", sector = 35715 },
   { filename = "MODULE/MSIS_IOP.IRX", sector = 45752 },
   { filename = "TRADUCTION.TXT", sector = 45768 },
}


Code: Select all
------------------
-- misc functions --
------------------

function extract_file(source, dest, mode)
    if (mode == nil) then
   source = cdfile(source)
    else
   source = cdfile(source, mode)
    end
    dest = Output(dest)
    source:copyto(dest)
end

function insert_file(source, dest, mode)
    if (type(source) == "string") then
        source = Input(source)
    end
    if (type(dest) == "string") then
   dest = findpath(dest)
    end
    if (mode == nil) then
   writefile(source, -1, dest.Sector)
    else
   writefile(source, -1, dest.Sector, mode)
    end
end

function display(inp, n)
    local i
    if (type(inp) == "string") then
        inp = Input(inp)
    elseif (type(inp) ~= "table") then
        error("Display needs a string or an Input object")
    end
   
    i = 0
   
    while(not inp:isclosed()) do
   i = i + 1
        print(inp:read())
   if ((n ~= nil) and (i >= n)) then
       return
   end
    end
end

function pchar(n)
    if (not ((n >= 32) and (n <= 127))) then
        n = 46 -- aka '.' or 0x2e
    end
    return hex(n, "%c")
end

function hexdump(inp, from, to, width)
    local size, nlines, remaining, data_array, line, byte, outstring
   
    if (type(inp) == "string") then
        inp = Input(inp)
    elseif (type(inp) ~= "table") then
        error("Hexdump needs a string or an Input object")
    end
   
    size = inp:getsize()

    if (from == nil) then
        from = 0
    end
   
    if (to == nil) then
        to = size
    end
   
    if (to > size) then
        to = size
    end
   
    size = to - from
   
    if (width == nil) then
        width = 16
    end
   
    nlines = math.floor(size / width)
    remaining = math.mod(size, width)
    inp:seek(from)
    data_array = inp:read(size)
   
    for line = 0, nlines - 1, 1 do
        outstring = hex(line * width + from, "%08x   ")
        for byte = 0, width - 1, 1 do
            outstring = outstring .. hex(data_array[line * 16 + byte]) .. " "
        end
        outstring = outstring .. "  "
        for byte = 0, width - 1, 1 do
            outstring = outstring .. pchar(data_array[line * 16 + byte])
        end
        print(outstring)
    end
   
    if (remaining == 0) then
        return
    end
   
    outstring = hex(nlines * width + from, "%08x   ");
    for byte = 0, remaining - 1, 1 do
        outstring = outstring .. hex(data_array[nlines * 16 + byte]) .. " "
    end
    for byte = remaining + 1, width - 1, 1 do
        outstring = outstring .. "   "
    end
    outstring = outstring .. "  "
    for byte = 0, remaining - 1, 1 do
        outstring = outstring .. pchar(data_array[nlines * 16 + byte])
    end

    print(outstring)
end


--------------------------
-- cdutil object wrappers --
--------------------------

function check_cdutil()
    if (cdutil == nil) then error "cdutil object non existant" end
end

function cdfile(arg1, arg2, arg3, arg4)   
    local cdutil_implied = false
   
    if ((type(arg1) ~= "table") or (arg1.cdfile == nil)) then
   check_cdutil()
        cdutil_implied = true
   if (type(arg1) == "string") then
       arg1 = findpath(arg1)
   end
    else
   if (type(arg2) == "string") then
       arg2 = findpath(arg2)
   end
    end
   
    if ((arg2 == nil) and (arg3 == nil) and (arg4 == nil)) then
        return cdutil:cdfile(arg1)
    elseif ((arg3 == nil) and (arg4 == nil)) then
        if (cdutil_implied) then
            return cdutil:cdfile(arg1, arg2)
        else
            return arg1:cdfile(arg2)
        end
    elseif (arg4 == nil) then
        if (cdutil_implied) then
            return cdutil:cdfile(arg1, arg2, arg3)
        else
            return arg1:cdfile(arg2, arg3)
        end
    else
        return arg1:cdfile(arg2, arg3, arg4)
    end
end

function setisow(iso_w)
    check_cdutil()
    return cdutil:setisow(iso_w)
end

function guessmode(sect)
    check_cdutil()
    if (sect == nil) then
        return cdutil:guessmode()
    else
        return cdutil:guessmode(sect)
    end
end

function sectorseek(sect)
    check_cdutil()
    return cdutil:sectorseek(sect)
end

function readsector(sect, mode)
    check_cdutil()
    if (sect == nil) then
        return cdutil:readsector()
    elseif (mode == nil) then
        return cdutil:readsector(sect)
    else
        return cdutil:readsector(sect, mode)
    end
end

function readdatas(size, sector, mode)
    check_cdutil()
    if (sect == nil) then
        return cdutil:readdatas(size)
    elseif (mode == nil) then
        return cdutil:readdatas(size, sect)
    else
        return cdutil:readdatas(size, sect, mode)
    end
end

function readfile(handle, size, sector, mode)
    check_cdutil()
    if (sect == nil) then
        return cdutil:readfile(handle, size)
    elseif (mode == nil) then
        return cdutil:readfile(handle, size, sect)
    else
        return cdutil:readfile(handle, size, sect, mode)
    end
end

function writesector(array, sector, mode)
    check_cdutil()
    if (sector == nil) then
        return cdutil:writesector(array, sector)
    elseif (mode == nil) then
        return cdutil:writesector(array, sector, mode)
    end
end

function writedatas(array, size, sector, mode)
    check_cdutil()
    if (sector == nil) then
        return cdutil:writedatas(array, size)
    elseif (mode == nil) then
        return cdutil:writedatas(array, size, sector)
    else
        return cdutil:writedatas(array, size, sector, mode)
    end
end

function writefile(handle, size, sector, mode)
    check_cdutil()
    if (size == nil) then
        return cdutil:writefile(handle)
    elseif (sector == nil) then
        return cdutil:writefile(handle, size)
    elseif (mode == nil) then
        return cdutil:writefile(handle, size, sector)
    else
        return cdutil:writefile(handle, size, sector, mode)
    end
end

function findpath(path)
    check_cdutil()
    if (findpath == nil) then
   return cdutil:findpath "/"
    else
   return cdutil:findpath(path)
    end
end

function findparent(path)
    check_cdutil()
    return cdutil:findparent(path)
end

function finddirectory(dir, path)
    check_cdutil()
    return cdutil:finddirectory(dir, path)
end


-----------------------
-- iso object wrappers --
-----------------------

function check_iso()
    if (iso == nil) then error "iso object non existant" end
end

function foreword(lcdutil)
    check_iso()
    if ((lcdutil == nil) and (cdutil == nil)) then error "cdutil object non existant" end
    if (lcdutil == nil) then
        return iso:foreword(cdutil)
    else
        return iso:foreword(lcdutil)
    end
end

function foreword_handle(handle, mode)
    check_iso()
    if (mode == nil) then
        return iso:foreword_handle(handle)
    else
        return iso:foreword_handle(handle, mode)
    end
end

function foreword_array(array, mode)
    check_iso()
    if (mode == nil) then
        return iso:foreword_array(array)
    else
        return iso:foreword_array(array, mode)
    end
end

function getdispsect()
    check_iso()
    return iso:getdispsect()
end

function putfile(handle, mode, sector)
    check_iso()
    if (mode == nil) then
        iso:putfile(handle)
    elseif (sector == nil) then
        iso:putfile(handle, mode)
    else
        iso:putfile(handle, mode, sector)
    end
end

function putdatas(array, size, mode, sector)
    check_iso()
    if (mode == nil) then
        iso:putdatas(array, size)
    elseif (sector == nil) then
        iso:putdatas(array, size, mode)
    else
        iso:putdatas(array, size, mode, sector)
    end
end

function createsector(array, mode, sector)
    check_iso()
    if (mode == nil) then
        iso:createsector(array)
    elseif (sector == nil) then
        iso:createsector(array, mode)
    else
        iso:createsector(array, mode, sector)
    end
end

function setEOF()
    check_iso()
    iso:setEOF()
end

function clearEOF()
    check_iso()
    iso:clearEOF()
end

function setbasics(pvd, rootsize, ptsize, nvd, rootsect)
    check_iso()
    if (rootsize == nil) then
        iso:setbasics(pvd)
    elseif (ptsize == nil) then
        iso:setbasics(pvd, rootsize)
    elseif (nvd == nil) then
        iso:setbasics(pvd, rootsize, ptsize)
    elseif (rootsect) then
        iso:setbasics(pvd, rootsize, ptsize, nvd)
    else
        iso:setbasics(pvd, rootsize, ptsize, nvd, rootsect)
    end
end

function createdir(dirtree, name, size, direntry, mode)
    check_iso()
    if (size == nil) then
        iso:createdir(dirtree, name)
    elseif (mode == nil) then
        iso:createdir(dirtree, name, size, direntry)
    else
        iso:createdir(dirtree, name, size, direntry, mode)
    end
end

function createfile(dirtree, name, size, direntry, mode)
    check_iso()
    if (mode == nil) then
        iso:createfile(dirtree, name, size, direntry)
    else
        iso:createfile(dirtree, name, size, direntry, mode)
    end
end

function copydir(dirtree, cdutils, direntry, mode)
    check_iso()
    if (mode == nil) then
        iso:copydir(dirtree, cdutils, direntry)
    else
        iso:copydir(dirtree, cdutils, direntry, mode)
    end
end

function close(cuefile, mode, nsectors)
    check_iso()
    if (cuefile == nil) then
        iso:close()
    elseif (mode == nil) then
        iso:close(cuefile)
    elseif (nsectors == nil) then
        iso:close(cuefile, mode)
    else
        iso:close(cuefile, mode, nsectors)
    end
end


I don't know for PSGEN1 but if the ISO has been created with the translation tools, it should be fine.

The "ISO" is a Mode 2 Form 1 raw 2352 byte sector image. The ISO standard is a pure data format and should be 2048 byte sector in this case.
While it's true that .iso is the most common proper format for PlayStation 2, that's because most of the games are stored on DVD. This is a CD based game and as such is usually dumped in a raw (BIN/CUE, IMG/CCD, MDF/MDS) image.
Last edited by Zarper on Mon Oct 22, 2018 1:17 pm, edited 1 time in total.
Zarper
Xanafalgue
Xanafalgue
 
Posts: 17
Joined: Sun Oct 21, 2018 5:30 am

Re: Phantasy Star Generation:1 English translation project

Postby Blaw- » Mon Oct 22, 2018 11:08 am

I would have to check but personally, mines has been dumped from the original CDs that I own and is recreated the same way (I directly dumped the games as a .ISO file).

But I only did the french version so I don't know for the english version.

As long as it's working, it's not a big deal anyway. You could always use a program like UltraISO to rebuild it if you want.
Blaw-
Scorpius
Scorpius
 
Posts: 322
Joined: Mon Nov 12, 2012 11:48 pm

Re: Phantasy Star Generation:1 English translation project

Postby Zarper » Mon Oct 22, 2018 11:41 am

Blaw- wrote:I would have to check but personally, mines has been dumped from the original CDs that I own and is recreated the same way (I directly dumped the games as a .ISO file).

But I only did the french version so I don't know for the english version.

As long as it's working, it's not a big deal anyway. You could always use a program like UltraISO to rebuild it if you want.

I've already converted it to a proper ISO since OPL won't recognize it in it's current state.
Just felt it was odd that the distributed files are raw images with a .iso extension when ISO does not support raw images. It's like someone made a raw image dump of the CD and just renamed the file to .iso because that's what other PS2 games use.
Zarper
Xanafalgue
Xanafalgue
 
Posts: 17
Joined: Sun Oct 21, 2018 5:30 am

Re: Phantasy Star Generation:1 English translation project

Postby Zarper » Mon Oct 22, 2018 11:54 am

Just had a look at the French files and they are the same. If that is from UltraISO, then UltraISO isn't dumping it correctly. A ISO file should always strip the metadata and only use the actual user data.
Zarper
Xanafalgue
Xanafalgue
 
Posts: 17
Joined: Sun Oct 21, 2018 5:30 am

Re: Phantasy Star Generation:1 English translation project

Postby Zarper » Mon Oct 22, 2018 6:11 pm

So I did some looking into this.

PS g:1 says in the patch notes that it wants a .iso of the CD, but it's actually a raw image.
PS g:2 Eng I can't find what image it wants, but it's not the same as the French one even though it says so on romhacking.net.
PS g:2 Fr actually says that it wants the BIN/CUE (raw) image, but for some reason the script renames it to a .iso without doing the conversion in the xdelta.

Why this confusion of image formats?
Zarper
Xanafalgue
Xanafalgue
 
Posts: 17
Joined: Sun Oct 21, 2018 5:30 am

Re: Phantasy Star Generation:1 English translation project

Postby SandyLandale » Mon Oct 22, 2018 11:12 pm

We were probably trying to go with what's most commonly available online. Maybe we should make instructions for converting things to BIN/CUE if necessary?
Also known as vivify93.
User avatar
SandyLandale
Blastoid
Blastoid
 
Posts: 240
Joined: Wed Oct 17, 2012 10:31 am

Re: Phantasy Star Generation:1 English translation project

Postby Blaw- » Mon Oct 22, 2018 11:26 pm

Zarper wrote:So I did some looking into this.

PS g:1 says in the patch notes that it wants a .iso of the CD, but it's actually a raw image.
PS g:2 Eng I can't find what image it wants, but it's not the same as the French one even though it says so on romhacking.net.
PS g:2 Fr actually says that it wants the BIN/CUE (raw) image, but for some reason the script renames it to a .iso without doing the conversion in the xdelta.

Why this confusion of image formats?


I changed for the french version last patch, it now require a .bin/.cue image : http://www.romhacking.net/translations/2301/ as it seems the .bin/.cue version is the most widespread one.

It doesn't just rename it to a .iso file. In fact, my french translated version is a .iso so I make a patch which notes the differences between the original .bin and the translated .iso so basically, the patch transform the .bin to be exactly the same translated .iso but it's not just a rename.

I don't know for the english versions though, as I'm not the ones who did the patches but this is also why PSCave directly shared prepatched iso.

About the english version of PSGEN2, you should better take Goldenboy's version : viewtopic.php?f=14&t=3775#p59372

It fixes the rares crashes on real hardware and fix a lot of other things. And like PSCave, it's already a prepatched iso.

Note that I played my french patch on a USB key with OPL loader and I never got a problem (just had to convert the iso to the format it used).

If you really need a .bin/.cue image, for example, best would be to download ultra iso (evaluation version can deal with 700mb max so it's okay, PSGEN 1 and 2 are smaller than that), then open the translated iso, extract those files :

PSGEN 1 :
BTLSYS.DAT
EVENT.DAT
EVG.DAT
MAP.DAT
SLPM_623.62

PSGEN 2 :
BTLDAT.DAT
EVENT.DAT
MAPDATA.DAT
SLPM_625.53

Then, open a japanese .bin/.cue image and replace the original files with the ones you extracted, then save the modifications.
Blaw-
Scorpius
Scorpius
 
Posts: 322
Joined: Mon Nov 12, 2012 11:48 pm

Re: Phantasy Star Generation:1 English translation project

Postby Zarper » Tue Oct 23, 2018 5:17 am

SandyLandale wrote:We were probably trying to go with what's most commonly available online. Maybe we should make instructions for converting things to BIN/CUE if necessary?

That's not what I'm saying at all.
The issue is that the file you request for patching (CRC32: 0C4DC729) and the patched file (CRC32: DB5B1FF1) are not ISO images, they are raw images. That's why you can't just play it on real hardware without first converting it to a proper ISO.
Zarper
Xanafalgue
Xanafalgue
 
Posts: 17
Joined: Sun Oct 21, 2018 5:30 am

Re: Phantasy Star Generation:1 English translation project

Postby Zarper » Tue Oct 23, 2018 5:28 am

Blaw- wrote:Note that I played my french patch on a USB key with OPL loader and I never got a problem (just had to convert the iso to the format it used.)

If you had to convert it, it isn't a real ISO. CRC32: 89847E96 is not an ISO and is easily detected as a raw image by simple math.
107 763 936 bytes / 2352 bytes = 45818 sectors = raw image
107 763 936 bytes / 2048 bytes = 52619,109375 sectors = NOT ISO
Zarper
Xanafalgue
Xanafalgue
 
Posts: 17
Joined: Sun Oct 21, 2018 5:30 am

Re: Phantasy Star Generation:1 English translation project

Postby Blaw- » Tue Oct 23, 2018 11:46 am

Not sure it was a convert, though. It was a loader to add the ISO on the USB Key, you couldn't just paste the ISO directly on the USB key. A bit like the NES/SNES mini.
Blaw-
Scorpius
Scorpius
 
Posts: 322
Joined: Mon Nov 12, 2012 11:48 pm

Re: Phantasy Star Generation:1 English translation project

Postby Zarper » Tue Oct 23, 2018 11:51 am

If it is a proper ISO, all you have to do is make a "CD" folder on a FAT32 format USB drive and load it up. No converting.
Zarper
Xanafalgue
Xanafalgue
 
Posts: 17
Joined: Sun Oct 21, 2018 5:30 am

Re: Phantasy Star Generation:1 English translation project

Postby Blaw- » Tue Oct 23, 2018 12:32 pm

I probaly not used the same launcher because it would not work like that, whatever the game/iso used. It was a very old tool.

Edit : I used that :

https://i.ytimg.com/vi/UEC66p9y4zE/maxresdefault.jpg

As you can see on the picture, you would have to load ISOs through this util to add them to the USB key.
Blaw-
Scorpius
Scorpius
 
Posts: 322
Joined: Mon Nov 12, 2012 11:48 pm

Re: Phantasy Star Generation:1 English translation project

Postby Zarper » Tue Oct 23, 2018 12:44 pm

Never seen that tool before, so can't tell you what it does.
But today, to load a ISO in OPL all you have to do is put it in a directory named after the media type (CD/DVD) and make it available to the PS2 (USB/SMB). The only caveat being that the FAT32 format can't store files larger than 4 GB, so you will have to split those up.

However, non of the PS generation translations are actually ISOs, so in that case they won't load until you make them into ISOs.
Zarper
Xanafalgue
Xanafalgue
 
Posts: 17
Joined: Sun Oct 21, 2018 5:30 am

Re: Phantasy Star Generation:1 English translation project

Postby Blaw- » Tue Oct 23, 2018 6:35 pm

I understand.

You might want to get in touch with Goldenboy for the english version if you want him to directly make a working ISO for USB loaders.
Blaw-
Scorpius
Scorpius
 
Posts: 322
Joined: Mon Nov 12, 2012 11:48 pm

PreviousNext

Return to Fan stuff

Who is online

Users browsing this forum: No registered users and 2 guests

cron