# Kirby's Epic Yarn (script 0.2.4) # script for QuickBMS http://quickbms.aluigi.org comtype BPE set ARC_NAME string "" get EXT extension if EXT == "arc" get SIZE asize log MEMORY_FILE2 0 SIZE callfunction ARC_EXTRACT cleanexit endif idstring "GFAC" get DUMMY1 long get DUMMY2 long get INFO_OFF long get DUMMY4 long get DATA_OFF long get DATA_SIZE long goto INFO_OFF get FILES long for i = 0 < FILES get CRC long get NAME_OFF long get SIZE long get OFFSET long math OFFSET - DATA_OFF savepos TMP math NAME_OFF & 0x00ffffff # & 0x80000000 ??? goto NAME_OFF get NAME string goto TMP putarray 0 i NAME putarray 1 i OFFSET putarray 2 i SIZE next i goto DATA_OFF idstring "GFCP" get VERSION long get ZIP long if ZIP == 1 comtype BPE elif ZIP == 2 comtype lz77wii_raw10 elif ZIP == 3 comtype lz77wii_raw10 # yeah the same else print "Error: unknown compression, contact me" cleanexit endif get SIZE long get ZSIZE long savepos OFFSET clog MEMORY_FILE OFFSET ZSIZE SIZE set LAME_PATH string "" for i = 0 < FILES getarray NAME 0 i getarray OFFSET 1 i getarray SIZE 2 i if SIZE == 0 set LAME_PATH string NAME else string FNAME p "%s/%s" LAME_PATH NAME set EXT extension NAME if EXT == "arc" log MEMORY_FILE2 OFFSET SIZE MEMORY_FILE set ARC_NAME string FNAME callfunction ARC_EXTRACT else log FNAME OFFSET SIZE MEMORY_FILE endif endif next i startfunction ARC_EXTRACT endian big get ARC_SIGN long MEMORY_FILE2 # 0x55aa382d if ARC_SIGN == 0x53415243 # "SARC" log FNAME 0 SIZE MEMORY_FILE2 print "Use http://aluigi.org/bms/splatoon_sarc.bms on this archive!" else if ARC_SIGN == 0x64617263 # "darc" endian little get DUMMY long MEMORY_FILE2 get DUMMY long MEMORY_FILE2 get DUMMY long MEMORY_FILE2 endif get INFO_OFF long MEMORY_FILE2 get INFO_SIZE long MEMORY_FILE2 get DATA_OFF long MEMORY_FILE2 goto INFO_OFF MEMORY_FILE2 get DUMMY long MEMORY_FILE2 get DUMMY long MEMORY_FILE2 get ENTRIES long MEMORY_FILE2 goto INFO_OFF MEMORY_FILE2 xmath NAMES_OFF "INFO_OFF + (ENTRIES * (4 + 4 + 4))" set PATH string ARC_NAME #"" set NAME string "" putarray 0 0 0 callfunction ARC_EXTRACT_FILES endif endian little endfunction startfunction ARC_EXTRACT_FILES getarray i 0 0 math i + 1 putarray 0 0 i string PATH + NAME string PATH + / get NAME_OFF long MEMORY_FILE2 get VALUE1 long MEMORY_FILE2 get VALUE2 long MEMORY_FILE2 xmath IS_FOLDER "NAME_OFF >> 24" math NAME_OFF & 0x00ffffff savepos TMP MEMORY_FILE2 math NAME_OFF + NAMES_OFF goto NAME_OFF MEMORY_FILE2 if ARC_SIGN == 0x64617263 get NAME unicode MEMORY_FILE2 else get NAME string MEMORY_FILE2 endif goto TMP MEMORY_FILE2 if IS_FOLDER == 0 math OFFSET = VALUE1 math SIZE = VALUE2 string FNAME p "%s%s" PATH NAME log FNAME OFFSET SIZE MEMORY_FILE2 else math DUMMY = VALUE1 math MAX_ENTRY = VALUE2 for getarray i 0 0 if i >= MAX_ENTRY break endif callfunction ARC_EXTRACT_FILES next endif endfunction