From 5f2ffa680eb407442e1edce75f801093a7466922 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Tue, 10 Sep 2019 17:51:58 +1000 Subject: [PATCH] Extract sound ctls, tbls and sequences --- tools/extract | 44 +++++++++++++++++++++++++++++++++----------- 1 file changed, 33 insertions(+), 11 deletions(-) diff --git a/tools/extract b/tools/extract index 295f22623..24d6302af 100755 --- a/tools/extract +++ b/tools/extract @@ -33,7 +33,6 @@ class Extractor: self.extract_audio() self.extract_files() self.extract_fonts() - self.extract_midis() self.extract_globals() self.extract_textures() self.extract_ucodes() @@ -43,8 +42,33 @@ class Extractor: # def extract_audio(self): - # Not implemented - pass + sfxctl = self.val('sfxctl') + sfxtbl = sfxctl + 0x2fb80 + musicctl = sfxtbl + 0x4c2160 + musictbl = musicctl + 0xa060 + seqtbl = musictbl + 0x17c070 + self.write('audio/sfx.ctl', self.rom[sfxctl:sfxtbl]) + self.write('audio/sfx.tbl', self.rom[sfxtbl:musicctl]) + self.write('audio/music.ctl', self.rom[musicctl:musictbl]) + self.write('audio/music.tbl', self.rom[musictbl:seqtbl]) + + seqtbllen = 0x563b0 if self.romid == 'ntsc-beta' else 0x563a0 + + sequences = self.rom[seqtbl:seqtbl+seqtbllen] + self.write('audio/sequences.bin', sequences) + + # Extract sequences + count = int.from_bytes(sequences[0:2], 'big') + i = 0 + while i < count: + sequence = self.extract_sequence(sequences, i) + self.write('audio/sequences/%03d.seq' % i, sequence) + i += 1 + + def extract_sequence(self, sequences, index): + pos = 4 + index * 8 + offset = int.from_bytes(sequences[pos:pos+4], 'big') + return self.decompress(sequences[offset:]) # # Files @@ -121,14 +145,6 @@ class Extractor: def extract_globals(self): self.write('Uglobals', self.globals) - # - # MIDIs - # - - def extract_midis(self): - # Not implemented - pass - # # Textures # @@ -193,31 +209,37 @@ class Extractor: 'game': 0x4fc40, 'files': 0x28080, 'globals': 0x39850, + 'sfxctl': 0x80a250, }, 'ntsc-1.0': { 'game': 0x4fc40, 'files': 0x28080, 'globals': 0x39850, + 'sfxctl': 0x80a250, }, 'ntsc-beta': { 'game': 0x43c40, 'files': 0x29160, 'globals': 0x30850, + 'sfxctl': 0x7be940, }, 'pal-final': { 'game': 0x4fc40, 'files': 0x28910, 'globals': 0x39850, + 'sfxctl': 0x7f87e0, }, 'pal-beta': { 'game': 0x4fc40, 'files': 0x29b90, 'globals': 0x39850, + 'sfxctl': 0x7f87e0, }, 'jap-final': { 'game': 0x4fc40, 'files': 0x28800, 'globals': 0x39850, + 'sfxctl': 0x7fc670, }, }