# Crimson Skies: High Road to Revenge (xbox bin) (script 0.2) # script for QuickBMS http://quickbms.aluigi.org get DUMMY long # 0x2622 if DUMMY <= 0x6a # https://zenhax.com/viewtopic.php?t=4264 get FILES long else get DUMMY long # 0x96 get FILES long get DUMMY long # 0x24e endif for i = 0 < FILES get TYPE long get NAMESZ long getdstring NAME NAMESZ get SIZE long savepos OFFSET xmath NEXT_OFF "OFFSET + SIZE" set EXT extension NAME if EXT == "wav" # or TYPE 6 get CODEC short get CHANNELS short get FREQUENCY long get AVGBYTES long get BLKALIGN short get BITS short math RIFF_MORE_SIZE = 4 getdstring RIFF_MORE RIFF_MORE_SIZE get DUMMY1 long get DUMMY2 long get DUMMY3 long # 0x2c or 0x3c if DUMMY1 == 0 getdstring DUMMY 0x10 savepos TMP math TMP - OFFSET math OFFSET + TMP math SIZE - TMP if SIZE > 0 callfunction TOWAV 1 endif else get DUMMY long get DUMMY long get DUMMY long get NUM long for x = 0 < NUM get DUMMY long next x savepos TMP math TMP - OFFSET math OFFSET + TMP math SIZE - TMP if SIZE > 0 log NAME OFFSET SIZE endif endif else log NAME OFFSET SIZE endif goto NEXT_OFF next i # Requirements: CODEC, BITS, FREQUENCY, CHANNELS, OFFSET, SIZE and NAME # Optional: RIFF_MORE/RIFF_MORE_SIZE, BLKALIGN and SAMPLES startfunction TOWAV # (aka DUMP_WAV) 0.2 math AVGBYTES = 0 if BLKALIGN == 0 if BITS >= 8 math BLKALIGN = BITS math BLKALIGN / 8 else math BLKALIGN = 1 endif math BLKALIGN * CHANNELS math AVGBYTES = FREQUENCY math AVGBYTES * BLKALIGN endif if CODEC == 0x69 xmath BLOCKALIGN "36 * CHANNELS" xmath AVGBYTES "(689 * BLOCKALIGN) + 4" endif log MEMORY_FILE 0 0 putdstring "RIFF" 4 MEMORY_FILE put 0 long MEMORY_FILE putdstring "WAVE" 4 MEMORY_FILE # "fmt " putdstring "fmt " 4 MEMORY_FILE put 0 long MEMORY_FILE put CODEC short MEMORY_FILE # wFormatTag: Microsoft PCM Format (0x0001) put CHANNELS short MEMORY_FILE # wChannels put FREQUENCY long MEMORY_FILE # dwSamplesPerSec put AVGBYTES long MEMORY_FILE # dwAvgBytesPerSec put BLKALIGN short MEMORY_FILE # wBlockAlign put BITS short MEMORY_FILE # wBitsPerSample if RIFF_MORE_SIZE > 0 putdstring RIFF_MORE RIFF_MORE_SIZE MEMORY_FILE endif get MEM_SIZE asize MEMORY_FILE math RIFFTMP = MEM_SIZE math RIFFTMP - 0x14 putvarchr MEMORY_FILE 0x10 RIFFTMP long # "fact" if CODEC != 1 if SAMPLES > 0 putdstring "fact" 4 MEMORY_FILE put 4 long MEMORY_FILE put SAMPLES long MEMORY_FILE endif endif # "data" putdstring "data" 4 MEMORY_FILE put SIZE long MEMORY_FILE get MEM_SIZE asize MEMORY_FILE math RIFFTMP = SIZE math RIFFTMP + MEM_SIZE math RIFFTMP - 8 putvarchr MEMORY_FILE 4 RIFFTMP long log NAME 0 MEM_SIZE MEMORY_FILE append log NAME OFFSET SIZE append endfunction