07-29-2016, 12:15 PM
(07-24-2016, 09:15 PM)Carpaccio Wrote: I wasn't sure if I would be able to, but here it is! Fair warning, it's over 5 GB.
Dropbox Link
Alright, from looking at it, it's PS3 SEGS data. You can dump the individual segs files by using this QuickBMS script:
Code:
get FULLSIZE asize
findloc OFFSET string "segs"
for OFFSET = OFFSET < FULLSIZE
goto OFFSET
get DUMMY long
findloc SIZE string "segs" ""
if SIZE == ""
math SIZE = FULLSIZE
endif
math SIZE -= OFFSET
log "" OFFSET SIZE
math OFFSET += SIZE
next
Then you can decompress the individual segs data using this QuickBMS script:
Code:
# AR segs archives - Arc System Works (script 0.1.3)
# Sonic Unleashed
# Battle Fantasia
# BlazBlue
# Arcana Heart 3
# Persona 4 Arena (Ultimax)
# ...
# script for QuickBMS http://quickbms.aluigi.org
get BASE_NAME basename
string BASE_NAME += /
comtype deflate
endian big
getdstring SIGN 4
math WORKAROUND = 0
if SIGN == "segs"
get DUMMY short
get CHUNKS short
get FULL_SIZE long
get FULL_ZSIZE long
savepos BASE_OFF
xmath BASE_OFF "BASE_OFF + (CHUNKS * 8)"
putvarchr MEMORY_FILE 0 FULL_SIZE
log MEMORY_FILE 0 0
append
for i = 0 < CHUNKS
get ZSIZE short
get SIZE short
get OFFSET long
math OFFSET -= 1
if i == 0
if OFFSET == 0
math WORKAROUND = 1
endif
endif
if WORKAROUND != 0
math OFFSET + BASE_OFF
endif
if SIZE == 0
math SIZE = 0x00010000
endif
clog MEMORY_FILE OFFSET ZSIZE SIZE
next i
append
else
# pfd
get SIZE asize
log MEMORY_FILE 0 SIZE
endif
# the files are just compressed pfd files
# so we handle them here automatically (both!)
goto 0 MEMORY_FILE
get FULL_SIZE asize MEMORY_FILE
endian big
getdstring TYPE 4 MEMORY_FILE
if TYPE == "" # pfd
get DUMMY long MEMORY_FILE
get DUMMY long MEMORY_FILE
get FILES long MEMORY_FILE
savepos BASE_OFF MEMORY_FILE
for BASE_OFF = BASE_OFF < FULL_SIZE
get HEADDATA_SIZE long MEMORY_FILE
get SIZE long MEMORY_FILE
get OFFSET long MEMORY_FILE
get DUMMY long MEMORY_FILE
get DUMMY long MEMORY_FILE
get NAME string MEMORY_FILE
math OFFSET += BASE_OFF
set FNAME string BASE_NAME
string FNAME += NAME
log FNAME OFFSET SIZE MEMORY_FILE
math BASE_OFF += HEADDATA_SIZE
goto BASE_OFF MEMORY_FILE
next
elif TYPE == "FPAC"
endian little
get BASE_OFF long MEMORY_FILE
get TOT_SIZE long MEMORY_FILE
if TOT_SIZE != FULL_SIZE
endian big
ReverseLong BASE_OFF
ReverseLong TOT_SIZE
endif
get FILES long MEMORY_FILE
get DUMMY long MEMORY_FILE
get NAMELEN long MEMORY_FILE
get DUMMY long MEMORY_FILE
get DUMMY long MEMORY_FILE
for i = 0 < FILES
getdstring NAME NAMELEN MEMORY_FILE
get FILEID long MEMORY_FILE
get OFFSET long MEMORY_FILE
get SIZE long MEMORY_FILE
Padding 16 MEMORY_FILE 0
math OFFSET += BASE_OFF
set FNAME string BASE_NAME
string FNAME += NAME
log FNAME OFFSET SIZE MEMORY_FILE
next i
else
get NAME basename
get EXT extension
string NAME += "_unpacked."
string NAME += EXT
set FNAME string BASE_NAME
string FNAME += NAME
log FNAME 0 FULL_SIZE MEMORY_FILE
endif
print "\nyou can try to reuse this script with the output files (pac, pfd and so on)\nfor extracting the other files contained in them"
Warning: Use quickbms_4gb files on this; the normal version will stop extracting files from up to 4.37GB big, but if you use the quickbms_4gb, it will extract the segs files properly.