Engineer AlphaTwentyThree Posted February 24 Engineer Share Posted February 24 (edited) The archive format itself is easy but I'm completely stuck at the compression. Tried comtype_scan with different offsets but no results. Files always start with 8 bytes of unknown data, then some 8 byte header identifier (screenshot is from a BXM file). The file name list has an "OodleKraken" identifier so I thought it would just be oodle but that compression didn't bring any result either. I can provide more files if needed. Thanks for your help! Edit: added some pkz samples as well (source_pkz.7z). pkz.7z source_pkz.7z Edited February 24 by AlphaTwentyThree Link to comment Share on other sites More sharing options...
Engineer h3x3r Posted February 24 Engineer Share Posted February 24 It's oodle but without comp size/ decomp size you can't decompress it. Link to comment Share on other sites More sharing options...
Engineer h3x3r Posted February 24 Engineer Share Posted February 24 Well i was unable to get over filenames since the logic is sooo stupid so filenames are dumped as offsets. #################################### # Bayonetta Origins (NSW) - *.pkzl # #################################### get BaseFileName basename comtype oodle idstring "pkzl" getdstring Dummy 0x4 get FileSize uint32 getdstring Dummy 0x4 get Files uint32 get EntrySize uint32 get FileNameTableSize uint32 for i = 0 < Files getdstring Dummy 0xC get Size uint32 getdstring Dummy 0x4 get Offset uint32 getdstring Dummy 0x4 get ZSize uint32 string Name p= "%s/%u.dat" BaseFileName Offset if ZSize != Size clog Name Offset ZSize Size else log Name Offset Size endif next i Link to comment Share on other sites More sharing options...
DKDave Posted February 24 Share Posted February 24 Or you can also use my script here, which should get the filenames 🙂 https://github.com/DKDave/Scripts/blob/master/QuickBMS/Multi-Game Archives/Platinum_Games_PKZ.bms Link to comment Share on other sites More sharing options...
Engineer AlphaTwentyThree Posted February 25 Author Engineer Share Posted February 25 So it IS oodle after all? Let me investigate what went wrong with my own script there! Thanks! Link to comment Share on other sites More sharing options...
Engineer Solution AlphaTwentyThree Posted March 3 Author Engineer Solution Share Posted March 3 (edited) SOLVED I just checked my script, turns out it was the exact same as yours, I already had the name retrieval implemented. Just tried it again without changing a thing and it suddenly works now?! Absolutely no idea why! The great mysteries of coding I guess... Here's my original script, now suddenly working as it should: # Bayonetta Origins: Cereza and the Lost Demon (NSW) # *. pkz extractor # # (c) 2024-03-03 by AlphaTwentyThree of ResHax # script for QuickBMS http://quickbms.aluigi.org comtype oodle idstring pkzl get ZERO short get VER short get FSIZE longlong get FILES long get TOC long goto TOC xmath NAMEOFF "0x20 * FILES + TOC" set SHIFT 0x10 for i = 1 <= FILES get NAMEPOS long math NAMEPOS += NAMEOFF get COMP long get SIZE longlong get OFFSET longlong get CSIZE longlong savepos MYOFF goto NAMEPOS get NAME string if SIZE != CSIZE clog NAME OFFSET CSIZE SIZE else log NAME OFFSET CSIZE endif goto MYOFF next i Edited March 3 by AlphaTwentyThree Link to comment Share on other sites More sharing options...
Engineer AlphaTwentyThree Posted March 3 Author Engineer Share Posted March 3 And to round things off for that game, here's the script for the contained archive format: # Bayonetta Origins: Cereza and the Lost Demon (NSW) # Data extractor # works with the following extensions: dat, dtt, eff, evn # # (c) 2024-03-03 by AlphaTwentyThree of ResHax # script for QuickBMS http://quickbms.aluigi.org get FOLDER basename idstring "DAT\0" get FILES long get OFF_OFFSETS long get OFF_TYPES long get OFF_NAMES long get OFF_SIZES long get OFF_UNK long goto OFF_NAMES get NAMEL long savepos OFF_NAMES for i = 0 < FILES goto OFF_OFFSETS get OFFSET long savepos OFF_OFFSETS goto OFF_NAMES getDstring NAME NAMEL savepos OFF_NAMES goto OFF_SIZES get SIZE long savepos OFF_SIZES string NAME p= "%s/%s" FOLDER NAME log NAME OFFSET SIZE next i 43,000+ files in the end, everything is pretty open for mining. 1 Link to comment Share on other sites More sharing options...
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