Ys IX demo data.vsf/vfs3 file

Extraction and unpacking of game archives and compression, encryption, obfuscation, decoding of unknown files
SMP112
Posts: 7
Joined: Wed Mar 24, 2021 4:42 am

Ys IX demo data.vsf/vfs3 file

Post by SMP112 »

The switch version's demo of Ys IX came out. The main file that I think holds the assets uses VFS3. I tried the killer 7 vfs bms script but it didn't work


https://drive.google.com/drive/u/0/fold ... J4D5eFncG-

There's smaller split files as well as the "Main one" Thank you.
SMP112
Posts: 7
Joined: Wed Mar 24, 2021 4:42 am

Re: Ys IX demo data.vsf/vfs3 file

Post by SMP112 »

Forgot to lift the sharing restriction.
Zolodei
Posts: 36
Joined: Sat Sep 16, 2017 6:34 pm

Re: Ys IX demo data.vsf/vfs3 file

Post by Zolodei »

Similar to killer7_vfs.bms but the structure may be slightly changed?
Похожа на killer7_vfs.bms но может структура немного изменена?
Zolodei
Posts: 36
Joined: Sat Sep 16, 2017 6:34 pm

Re: Ys IX demo data.vsf/vfs3 file

Post by Zolodei »

Here is a description of the file structure data.vfs.

Code: Select all

000000000000 4 Hender:   VFS3
000000000004 4 Unknown0: 16
000000000008 4 Unknown1: 1

00000000000C 4 Number of folders: 1110
000000000010 ? Folder Structure size: 1110 * 28 = 31080
 
            00000000 4 Unknown0.
            00000004 4 Unknown1.
            00000008 4 Unknown2.
            0000000C 4 Unknown3.
            00000010 4 Unknown4.
            00000014 4 Unknown5.
            00000018 4 Unknown6.
 
000000007978 4 Number of files: 27514
00000000797C ? File Structure size: 27514 * 40 = 1100560
 
            00000000 8 Offset To compressed file.
            00000008 8 Compressed file size.
            00000010 8 Decompressed file size.
            00000018 4 Unknown0.
            0000001c 4 Unknown1.
            00000020 4 Unknown2.
            00000024 4 Unknown3.
 
00000011448C 8 Offset To unknown Data: 0000665FD690
000000114494 8 Offset on file And folder names: 0000666482E8
00000011449C 4 Unknown2: 0

0000001144A0 1716349954 Compressed files size. 

0000665FD690 4 Unknown Data size: 306260
0000665FD694 306260

0000666482E8 4 Number of files: 27514

               00000000 4 Text size.
               00000004 ? Text.

0000666BBAA9 4 Number of folders: 1110

               00000000 4 Text size.
               00000004 ? Text.
eaZy
Posts: 13
Joined: Sat Apr 13, 2019 9:25 am

Re: Ys IX demo data.vsf/vfs3 file

Post by eaZy »

Some clarifications

The only issue for extraction - type of compression. Can't recognize it. It looks like its own Nihon Falcom compression format.

Sorry for bad English.

Code: Select all

000000000000 4 Hender:   VFS3
000000000004 4 Version: 16
000000000008 4 Unknown1: 1

00000000000C 4 Number of folders: 1110
000000000010 ? Folder Structure size: 1110 * 28 = 31080
 
            00000000 4 FolderCRC (?)
            00000004 4 FolderID
            00000008 4 Previous_FolderID
            0000000C 4 Next_FolderID.
            00000010 4 Folders_Count_in_Folder
            00000014 4 Unknown
            00000018 4 Files_Count_in_Folder
 
000000007978 4 Number of files: 27514
00000000797C ? File Structure size: 27514 * 40 = 1100560
 
            00000000 8 Offset To compressed file. (Real Ofsset += value from 0x0011448C)
            00000008 8 Compressed file size.
            00000010 8 Decompressed file size.
            00000018 4 FileCRC (?)
            0000001c 4 FileID
            00000020 4 File_Flags (File Flag 0x23 - normal file, File Flag 0x20 - File repeats - data for file size and compressed size can be found by offset)
            00000024 4 File_Folder_ID
 
00000011448C 8 Offset To File Chunks Data: 0000665FD690
000000114494 8 Offset on file And folder names: 0000666482E8
00000011449C 4 Unknown2: 0

0000665FD690 4 Chunks info Data size: 306260
From 0000665FD694 - Chunks Data (Sorted by FileID)
      00000000 Chunk Info Size for File   
      00000004 4 Compressed Chunk Size for File
      Next Chunk
      (Decompressed Chunk Size = 131072)
      If Chunk Size < 0 - Chunk is uncompressed (Size = - Chunk Size)
      
0000666482E8 4 Number of files: 27514 (Sorted by FileID)

               00000000 4 Text size.
               00000004 ? Text.

0000666BBAA9 4 Number of folders: 1110

               00000000 4 Text size.
               00000004 ? Text.
aluigi
Site Admin
Posts: 12984
Joined: Wed Jul 30, 2014 9:32 pm

Re: Ys IX demo data.vsf/vfs3 file

Post by aluigi »

I have tried to make a script with the provided information but there is probably something small I missed or maybe the compression is not the one I tought:

Code: Select all

# Ys IX VFS
#   info by eaZy https://zenhax.com/viewtopic.php?p=64813#p64813

comtype falcom
idstring "VFS3"
get VER long    # 16
get DUMMY long  # 1

get FOLDERS long
for i = 0 < FOLDERS
    get FolderCRC long
    get FolderID long
    get Previous_FolderID long
    get Next_FolderID long
    get Folders_Count_in_Folder long
    get Unknown long
    get Files_Count_in_Folder long
next i

get FILES long
savepos FILES_OFF
for i = 0 < FILES
    callfunction GET_FILE 1
next i

get CHUNKS_OFF longlong
get NAMES_OFF longlong
get ZERO long
savepos DATA_OFF

math CHUNK_SIZE = 131072
goto CHUNKS_OFF
get CHUNKS_SIZE long
for i = 0 < FILES
    get CHUNK_INFO_SIZE long
    savepos TMP
    putarray 2 i TMP
    xmath CHUNKS "CHUNK_INFO_SIZE / 4"
    putarray 3 i CHUNKS
    goto CHUNK_INFO_SIZE 0 SEEK_CUR
next i

goto NAMES_OFF
get NAMES long
for i = 0 < NAMES
    get NAMESZ long
    getdstring NAME NAMESZ
    putarray 0 i NAME
next i

get NAMES long
for i = 0 < NAMES
    get NAMESZ long
    getdstring NAME NAMESZ
    putarray 1 i NAME
next i

goto FILES_OFF
for i = 0 < FILES
    callfunction GET_FILE 1

    math OFFSET + DATA_OFF

    getarray NAME 0 FileID
    getarray PATH 1 File_Folder_ID
    string NAME p "%s/%s" PATH NAME # it's only the last subfolder!

    #print "DEBUG %OFFSET|X% %ZSIZE|X% %SIZE|X% %NAME%"

    getarray CHUNKS_OFF 2 FileID
    getarray CHUNKS     3 FileID
    goto CHUNKS_OFF

    log NAME 0 0
    append
    for x = 0 < CHUNKS
        get CHUNK_ZSIZE signed_long
        if CHUNK_ZSIZE < 0
            math CHUNK_ZSIZE n CHUNK_ZSIZE
            log NAME OFFSET CHUNK_ZSIZE
        else
            clog NAME OFFSET CHUNK_ZSIZE CHUNK_SIZE
        endif
        math OFFSET + CHUNK_ZSIZE
    next x
    append
next i

startfunction GET_FILE
    get OFFSET longlong
    get ZSIZE longlong
    get SIZE longlong
    get FileCRC long
    get FileID long
    get File_Flags long
    get File_Folder_ID long
endfunction