import struct class Settings(object): class Banner(object): def __init__(self, name): self.name = name self.sounds = [] def add_sound(self, delay, sound_id): self.sounds.append((delay, sound_id)) def __init__(self, widescreen): self.banners = [] self.widescreen = widescreen def add_banner(self, name): b = self.Banner(name) self.banners.append(b) return b def export(self): header_size = 8 offset = header_size + (4 * len(self.banners)) banner_offsets = [] banner_data = [] for b in self.banners: banner_offsets.append(offset) b_header1 = 'xxxx' # will be replaced later b_header2 = struct.pack('>bxxxI', 1 if self.widescreen else 0, len(b.sounds)) b_sounds = map(lambda x: struct.pack('>II', *x), b.sounds) offset += 12 + (len(b_sounds) * 8) b_data = [b_header1, b_header2] b_data.extend(b_sounds) banner_data.append(b_data) # now build a string table str_tab = [] for b, b_data in zip(self.banners, banner_data): b_data[0] = struct.pack('>I', offset) offset += len(b.name) + 1 str_tab.append(b.name) str_tab.append('\0') # whatever file_pieces = [ 'NWcs', struct.pack('>I', len(self.banners)) ] file_pieces.extend(map(lambda x: struct.pack('>I', x), banner_offsets)) for b_data in banner_data: file_pieces.extend(b_data) file_pieces.extend(str_tab) return ''.join(file_pieces) s = Settings(widescreen=False) b = s.add_banner('/CS/Opening1.arc') b = s.add_banner('/CS/Opening3.arc') b = s.add_banner('/CS/Opening4.arc') b = s.add_banner('/CS/Opening5.arc') b = s.add_banner('/CS/Opening6.arc') b = s.add_banner('/CS/Opening7.arc') b = s.add_banner('/CS/Opening8.arc') b = s.add_banner('/CS/Opening9.arc') b = s.add_banner('/CS/Opening10.arc') b = s.add_banner('/CS/Opening11.arc') data = s.export() open('Opening.cs', 'wb').write(data) s = Settings(widescreen=True) b = s.add_banner('/CS/Kamek1_2.arc') b = s.add_banner('/CS/Kamek3_4.arc') b = s.add_banner('/CS/Kamek5_6.arc') b = s.add_banner('/CS/Kamek7_8.arc') b = s.add_banner('/CS/Kamek9_10.arc') b = s.add_banner('/CS/Kamek11.arc') b = s.add_banner('/CS/Kamek12.arc') b = s.add_banner('/CS/Kamek13_14.arc') b = s.add_banner('/CS/Kamek15_16.arc') b = s.add_banner('/CS/Kamek17.arc') data = s.export() open('Kamek.cs', 'wb').write(data)