Code: Select all
# Script to extract the sound effects in GRY files from
# the PC games Twisted Metal2, Jet Moto, and Outwars
# Modified from the "WAVE format scanner" script by AlphaTwentyThree
# https://forum.xentax.com/viewtopic.php?f=13&p=74664#p74664
IDString "\x27\x70\x06\x03"
For i = 1
   FindLoc OFFSET binary "\xA0\xB9\xB7\x00" 0
   if OFFSET == ""
      cleanexit
   endif
   GOTO OFFSET
   FindLoc OFFSET2 binary "\x2E\x3E\x9D\x00" 0
   if OFFSET2 == ""
      cleanexit
   endif
   GOTO OFFSET2
   get NAME basename
   string NAME += "_"
   if i < 10
      string NAME += 0
      string NAME += i
   else
      string NAME += i
   endif
   string NAME += "_"
   string NAME += OFFSET
   string NAME += ".vgmstream"
   get DUMMY long
   get STREAMSIZE long
   SAVEPOS MYOFF
   set HEADERSIZE MYOFF
   math HEADERSIZE -= OFFSET
   set SIZE HEADERSIZE
   math SIZE += STREAMSIZE
   log NAME OFFSET SIZE
   set SEARCH OFFSET
   math SEARCH += SIZE
   if SEARCH == FSIZE
      cleanexit
   endif
   GOTO SEARCH
Next i
Then you can play the extracted files with Foobar2000 and vgmstream with the following .txth files.
Code: Select all
# PC Twisted Metal 2 and Jet Moto
id_value = 0xA0B9B700
id_offset = @0x00:BE
codec = PCM16LE
channels = @0x06$1
sample_rate = @0x08
start_offset = 0x1c
data_size = @0x18
num_samples = data_size
Not too sure if the ADPCM plays correctly, because they play in mono, but interleave has to be set.
Code: Select all
# Outwars ADPCM - all except O5
id_value = 0xA0B9B700
id_offset = @0x00:BE
codec = MSADPCM
interleave = @0x14$2
channels = @0x0a$1
sample_rate = @0x0c
start_offset = 0x4e
data_size = @0x4a
num_samples = data_size
Code: Select all
# Outwars PCM from O5
id_value = 0xA0B9B700
id_offset = @0x00:BE
codec = PCM16LE
channels = @0x0a$1
sample_rate = @0x0c
start_offset = 0x20
data_size = @0x1c
num_samples = data_size