Jump to content

ThatTrueStruggle

Member
  • Posts

    2
  • Joined

  • Last visited

Posts posted by ThatTrueStruggle

  1. I had actually written a program that reads a *SIR0 table and extracts the files from it: https://www.dropbox.com/s/0q67hp1um2w4nn5/FARCReader.exe?dl=0

    *: It works only on a few SIR0 tables. It only works on the ones that have file names and then the offsets afterwards. This is the code I followed from gdkchan :

    0x0 - FARC Signature
    0x20 - Number of files
    0x24 - SIR0 Offset
    0x28 - SIR0 Length
    0x2C - Data Offset
    
    SIR0 Table Structure
    (All offsets here are relative to the SIR0 offset)
    0x0 - SIR0 Signature
    0x4 - Offset to Pointers Table
    0x8 - Offset to encoded Relocation Table
    0xC - Padding only
    (String table with file names starts after this, they're UTF16 and Null Terminated)
    
    Pointers Table
    0x0 - Offset to the Files Table
    0x4 - Total number of files
    
    Files Table
    (Each entry have 0x10 bytes)
    0x0 - Offset to the Name of the file (relative to the SIR0 offset)
    0x4 - Offset to the File Data (relative to Data Offset at 0x2C, see first header)
    0x8 - Length of the file in bytes
    0xC - Only 0x0 was observed, may be related to compression tho
    

  2. Hey guys, I'm ThatTrueStruggle. You might know me from VG-Resource, but enough of that. I've come in searching of knowledge for finishing a script. Right now, I have a script written to extract CGFX files from those BIN files. However what's giving me grief is a format called the BGRS format. I'm assuming it's a type of subfile for BCH files. Also since BCH files don't have a set file size, I can't use the same method on the CGFX files. But yeah any knowledge you guys have, It'd be amazing. Here's my current script for use with QuickBMS.

    idstring "FARC"
    get Size asize
    callfunction CGFXExtract
    goto 0 
    callfunction BCHExtract
    
    startfunction CGFXExtract
    for i = 0
    	get PATH basename
    	SavePos Position
    	if Position == SIZE
    		break
    	endif
    	FindLoc Offset string "CGFX" 0 "noCGFX"
    	if Offset == "noCGFX"
    		break
    	endif
    	goto Offset
    	idstring "CGFX"
    	get Endianness short
    	get Length short
    	get Revision long
    	get FileLength long
    	goto Offset
    	goto FileLength 0 SEEK_CUR
    	string PATH += i
    	string PATH += ".cgfx"
    	log PATH Offset fileLength
    next i
    endfunction
    
    startfunction BCHExtract
    
    endfunction
    

×
×
  • Create New...