vampirevicky Posted 7 hours ago Posted 7 hours ago Body: Hi everyone, I am trying to extract 3D character models from Ben 10: Protector of Earth (PS2), developed by High Voltage Software (Omni Engine). I successfully unpacked the main GAME.WAD and GAME.DIR using the standard QuickBMS script. According to the extracted levels.txt, the main player models and animations are inside a file named 99_95.pss (~34.5 MB). The Problem: The .pss extension is fake. When opening the file in a hex editor, the header actually reads BIGB1 and mentions <Strat Wad>. This is a custom Omni Engine archive container. What I've tried: Standard ea_big4.bms: Fails with the error: the signature "BIGB" doesn't match the one expected by the script BIG4. ininja.bms (since I-Ninja runs on the same engine): Fails because the script expects a split .dir dictionary file, but these .pss files are standalone containers. You can clearly see raw PS2 files (like RIFF WAVE audio) sitting unencrypted inside the hex, so the data isn't heavily compressed, it's just locked in this custom BIGB container. Could someone please take a look and help me write a QuickBMS or Python script to unpack the internal files from this BIGB Strat Wad? Link to the sample file (99_95.pss): > [Paste your Google Drive / MEGA link here] Hex screenshot: [Attach your screenshot of the Hex Editor showing the BIGB1 header here] Any help or pointers to existing High Voltage Software tools would be massively appreciated! Thank you! https://www.mediafire.com/folder/qk0wmy2tv6kei/Ben+10+Protector+of+Earth+PS2+Wad+Extracted
Members wattostudios Posted 5 hours ago Members Posted 5 hours ago Just from visually looking at some of the files, I wonder if the format is something like this: +---------------------------------------+ | Ben 10 Protector of Earth [PS2] *.pss | +---------------------------------------+ // HEADER 4 - Header (BIGB) 4 - Header Length (492) 492 - Unknown // RIFF DATA 4 - null 4 - VAG Data Offset [*2048] X - Compressed RIFF Data X - null Padding to a multiple of 2048 bytes // VAG DATA X - VAG Data Stream X - null Padding to a multiple of 2048 bytes It looks like the RIFF data might be compressed, as some of the strings in there are obviously split in the middle, or are missing parts that might have been a repeat from earlier. It looks kinda like the remaining data might just be a single long VAG audio stream, or something like that. It seems to just be a continuous block of data with size 16 bytes, much like VAG audio looks. Not really sure how to take it from here though.
Members NeoGT404 Posted 4 hours ago Members Posted 4 hours ago I've seen this format before, here's how I currently handle it which is obviously wrong (I think it's a compressed stream with different data/token tracks that I just extract raw currently) f = File(i,endian='<') asrt(f.read(4) == b'BIGB') do = 0x10 + f.readu32() v = f.readu32() asrt(v in {0x9D,0xA3}) f.skip(4) if v == 0xA3: asrt(f.readu8() == 1) x = b'Type: ' + f.readc(0x40).split(b'\0')[0] + b'\n\nName: ' + f.readc(0x28).split(b'\0')[0] + b'\n\ncmd: ' if v == 0xA3: f.padc(3) s3,s4,s1,s2,zs1,zs2 = f.readu32(),f.readu32(),f.readu32(),f.readu32(),f.readu32(),f.readu32() cmd = f.readc(0x100).split(b'\0')[0] writefile(o + '/$comment.txt',x + cmd + b'\n') cmd = cmd.split(b' ') if b'-ps2' in cmd: gex = guess_ext_ps2 else: gex = guess_ext f.seek(do) d = f.decompress(zs1,'none',usize=s1) # placeholder writefile(f'{o}/1.cmp',d) d = f.decompress(zs2,'none',usize=s2) writefile(f'{o}/2.cmp',d) f.align(0x800) if s3: d = f.readc(s3) writefile(f'{o}/3.{gex(d)}',d) f.align(0x800) if s4: d = f.readc(s4) writefile(f'{o}/4.{gex(d)}',d) I'm looking into the executable and I'm seeing some sort of custom scripting/relocation format in the file which will be a pain lol
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now