# Dawngate DBPF (script 0.2.1) # script for QuickBMS http://quickbms.aluigi.org getdstring SIGN 4 goto 0 if SIGN == "DBPF" math GUESS_ZIP = 1 idstring "DBPF" get VER long goto 0x24 get FILES long get ZERO long get INFO_SIZE long goto 0x3c get DUMMY long get OFFSET long goto OFFSET get DUMMY long get DUMMY long # yeah this format is slightly different than the classical one from Maxis # unfortunately I no longer have the original samples but the script was # perfect, ENTRY_SIZE has been added only recently and it seems to work # with both the formats savepos TMP xmath ENTRY_SIZE "(INFO_SIZE - (TMP - OFFSET)) / FILES" xmath ENTRY_SKIP "ENTRY_SIZE - (4 + 4 + 4 + 4)" for i = 0 < FILES savepos ENTRY_OFF #get DUMMY longlong # some versions use 64bit, others 32bit getdstring DUMMY ENTRY_SKIP get OFFSET long get ZSIZE long get SIZE long get FLAGS long math ENTRY_OFF + ENTRY_SIZE goto ENTRY_OFF math ZSIZE & 0x7fffffff if ZSIZE == SIZE log "" OFFSET SIZE else # FLAGS 0x0001ffff if GUESS_ZIP != 0 # the original script used ea_jdlz but versions 2 and 3 use dk2... no idea math GUESS_ZIP = 0 goto OFFSET get CHECK short # 0xfb10 or also 0xfb50 and others math CHECK & 0xff10 if CHECK == 0xfb10 comtype dk2 else comtype EA_JDLZ endif goto ENTRY_OFF endif clog "" OFFSET ZSIZE SIZE endif next i else comtype snappy endian big idstring "snap" # "pans" get FLAGS long get FILES long get NAMES_SIZE Long get OFFSET asize xmath NAMES_OFF "OFFSET - NAMES_SIZE" log MEMORY_FILE NAMES_OFF NAMES_SIZE xmath OFFSET "NAMES_OFF - (FILES * 0x20)" goto OFFSET for i = 0 < FILES get NAME_OFF long get SIZE long get ZSIZE long getdstring ZERO 0xc get OFFSET long get ZERO long goto NAME_OFF MEMORY_FILE get NAME string MEMORY_FILE clog NAME OFFSET ZSIZE SIZE next i endif