summaryrefslogtreecommitdiff
path: root/doc/devel/sc1
diff options
context:
space:
mode:
Diffstat (limited to 'doc/devel/sc1')
-rw-r--r--doc/devel/sc1186
1 files changed, 186 insertions, 0 deletions
diff --git a/doc/devel/sc1 b/doc/devel/sc1
new file mode 100644
index 0000000..373ac16
--- /dev/null
+++ b/doc/devel/sc1
@@ -0,0 +1,186 @@
+This file documents the file formats used in Star Control 1.
+
+The .pkg files are in the format described in the file "pkgformat".
+The extracted files are described in this document.
+
+The following describes the format used in the DOS version of SC1.
+
+Resource types used in starcon.pkg:
+ 1 - key config
+ 2 - some graphics type (flags = 7)
+ 3 - some graphics type (flags = 1)
+ 4 - some graphics type (flags = 2) 5 - some graphics type (flags = 3)
+ 6 - font
+ 7 - scenario
+ 8 - palette
+ 9 - strtab
+10 - ? (sound?)
+
+
+Files of types 2, 3, 4, 5, 9, and 10 may be compressed; they have
+a header of the following format: have the following format:
+
+Uncompressed files:
+ off len
+ 0x00 1 0 (means: not compressed)
+ 0x01 1 flags, 0 in practice
+ 0x04 2 Number of bytes that follow (MSB first)
+ 0x06 start of data
+
+Compressed files:
+ off len
+ 0x00 1 6 (means: compressed)
+ 0x01 1 flags
+ bit 0: unused
+ bit 1: (table2CodeLen)
+ if not set: table2 results are shifted by 6 bits.
+ if set: table2 results are shifted by 7 bits.
+ (never set in PC SC1 files)
+ bit 2: (litencoded) set if literal bytes are Huffman encoded
+ (never set in PC SC1 files)
+ rest: unused
+ 0x02 4 uncompressed size (MSB first)
+ 0x06 Huffman table 0 (8-bit codes) (only present if litencoded set)
+ used for encoding literal bytes
+ Huffman table 1 (6-bit codes)
+ used for encoding lengths
+ Huffman table 2 (6-bit codes)
+ used for the most significant table2CodeLen bits of an offset
+
+
+
+Huffman table:
+(numbers are in bits)
+ 8 one less than the number of lengths of codes
+ in the table (lenCnt)
+ 8 * lenCnt LONIBBLE: one less than one of the code lengths
+ HINIBBLE: one less than the number of codes with
+ this length
+This is enough to construct the huffman table.
+
+TODO: document the rest of the compression format; for now, look at the
+ code of sc1-decomp.
+
+
+Resource type 1 (key config):
+ off len
+ 0x00 1 bottom player special key ('n')
+ 0x01 1 top player special key ('1')
+ 0x02 1 bottom player left key ('m')
+ 0x03 1 top player left key ('2')
+ 0x04 1 bottom player right key (',')
+ 0x05 1 top player right key ('3')
+ 0x06 1 bottom player thrust key ('.')
+ 0x07 1 top player thrust key ('4')
+ 0x08 1 bottom player fire key ('/')
+ 0x09 1 top player fire key ('5')
+ 0x0a 1 ?
+ 0x0b 1 ?
+ 0x0c 1 ?
+ 0x0d 1 ?
+ 0x0e 1 ?
+ 0x0f 1 ?
+ 0x10 1 ?
+ 0x11 1 ?
+ 0x12 1 ?
+ 0x13 1 ?
+
+
+Resource types 2, 3, 4, and 5 (graphics):
+The difference between those types is the flags parameter that is passed
+to the load functions (see above in the table of resource types).
+bit 0: ?
+bit 1: probably indicates whether a palette is used
+bit 2: ?
+rest: unused
+
+(after decompression/removing packing header)
+ off len
+ 0x00 4 "IANM"
+ 0x04 2 frame count (MSB first)
+ 0x06 2 MSB first
+ LOBYTE: bits per pixel. All SC1 files are either 1 bpp or 4 bpp.
+For every frame:
+ 2 width (MSB first)
+ 2 height (MSB first)
+For every frame:
+ 2 x hotspot
+ 2 y hotspot
+ 1 if not zero, the file includes palettes
+ 1 transparant color
+ 16 (optional) (CGA?) palette (16 entries of 1 byte)
+ 16 (optional) (EGA/Tandy?) palette (16 entries of 1 byte)
+ 16 (optional) (MCGA/VGA?) palette (16 entries of 1 byte)
+ ? pixel data (indicees in palette)
+
+
+
+Resource type 6 (font):
+ off len
+ 0x00 1 ?
+ 0x01 1 ?
+ 0x02 1 LONIBBLE:
+ HINIBBLE:
+ 0x03 48
+
+The letters are actually readable if you do 'xxd -b'; it shouldn't be too
+hard to RE this one.
+
+
+Resource type 7 (scenario):
+ off len
+ 0x00 16 Title (\0 terminated)
+ 0x10 ? Short description (\0 terminated)
+ ? ? Unknown (probably description of star systems, Space Spines,
+ fleets and bases (maybe random seeds?))
+ 0x80 840(?) Long description (\0 terminated)
+
+
+Resource type 8 (palette):
+ off len
+ 0 768 palette data:
+for each of the 256 entries (with index 0 through 255):
+ 1 red value
+ 1 green value
+ 1 blue value
+
+
+Resource type 9 (string):
+ off len
+ 0x00 2 Number of strings (MSB first)
+ 0x02 2 unknown (always 0x0000)
+for each string s:
+ 2 len[s]: length of the string (MSB first)
+for each string s:
+ len[s] String data (not '\0'-terminated)
+
+
+starcon.exe:
+compressed using lzexe
+(http://fabrice.bellard.free.fr/lzexe.html)
+Using PLINK86 to load starcon.ovl as an overlay.
+
+
+
+The Amiga version of SC1:
+
+Resource types used in starcon.pkg:
+ 1 - key config (presumed; different from the DOS version)
+ 2 - graphics
+ 3 - graphics
+ 4 - graphics
+ 5 - graphics
+ 6 - font
+ 7 - scenario (as with the DOS version)
+ 8 - strings as on DOS, but also other data in the same format
+ (presumably including sound)
+
+Files of types 2, 3, 4, 5, 8 may be compressed as in the DOS version.
+
+Graphics files are in a different file format as on DOS. I haven't worked
+on these files yet.
+
+
+Initial version created on 2007-06-01 by Serge van den Boom.
+
+