SCI Specifications: Chapter 1 - Introduction
Introduction
The basics
The Sierra Creative Interpreter is a stack-based virtual machine ("P-Machine"). In addition to its roughly 125 basic opcodes, it provides a set of extended functions for displaying graphics, playing sound, receiving input, writing and reading data to and from the hard disk, and handling complex arithmetical and logical functions. In version 0.xxx of the interpreter, Sierra split the game data into nine different types of information:
script data: SCI scripts and local data
vocab data: Parser data and debug information
patch data: Information pertaining to specific audio output devices
sound data: MIDI music tracks
cursor data: Mouse pointer shapes
view data: Sets of sets of image and hotspot information
pic data: Background images and metadata
font data: Bitmap fonts
text data: Plain text information
Each game may contain up to 1000 different elements of each data type; these elements are referred to as "resources". The index numbers of the various resources need not be in sequence; they are usually assigned arbitrarily. [note 1]
Resource Storage
Individual resources can be stored in one of two ways: Either in resource files (which, surprisingly, are called something like "RESOURCE.000" or "RESOURCE.001"), or in external patch files (not to be confused with "patch" resources). The external files are called something like "PIC.100" or "script.000", and they take precedence over data from resource files.
There is also a file called "RESOURCE.MAP", which contains a lookup table for the individual resources, and another file, "RESOURCE.CFG", which contains configuration information.
Resource information stored in external patch files is not compressed and therefore easily readable. It is, however, preceded by two bytes: The first byte contains the resource type ORed with 0x80, the purpose of the second byte is unknown (but it appears to be ignored by the original SCI version 0 engine).
As stated before, external patch files take precedence over resource resource files. Applying those external files as patches is an option since FreeSCI version 0.2.2.
The resource files, however, are more complicated. Each of them contains a sequence of resources preceded by a header; these resources may be compressed. It is, also, quite common to find resources shared by several resource files. The reason for this appears to be that that, back when hard disks were rare and hard to come by, the games had to be playable from floppy disks. To prevent unnecessary disk-jockeying, common stuff was placed in several resource files, each of which was then stored on one disk.
The individual resources: A summary
The resource types of SCI0 can be roughly grouped into four sets:
- Graphics (pic, view, font, cursor)
- Sound (patch, sound)
- Logic (script, vocab)
- Text (Text resources are nothing more than a series of ASCIIZ strings)
Graphical resources summarized
The screen graphics are compromised of the four graphics resources. The background pictures are drawn using vector-oriented commands from at least one pic resource (several resources may be overlaid). The fact that vector graphics were used for SCI0 allows for several interesting picture quality improvements. Pic resources also include two additional "maps": The priority map, which marks parts of the pictures with a certain priority, so that other things with less priority can be fully or partially covered by them even if they are drawn at a later time, and the control map, which delimits the walking area and some special places used by the game logic. FreeSCI uses a fourth auxiliary map for during drawing time (this is a heritage from Carl Muckenhoupt's original code).
View resources contain most of the games' pixmaps (multi-color bitmaps). Each view contains a list of loops, and each loop contains a list of cels. The cels themselves contain the actual image information: RLE encoded pixmaps with transparency information, and relative offsets.
View resources are used for foreground images as well as for background images (for example, the "Spielburg" sign in QfG1 (EGA) is stored in a view resource and added to the background picture after it is drawn).
The cursor resource contains simple bitmaps for drawing the mouse pointer. It only allows for black, white, and transparent pixels in SCI0.
The fourth graphics resource is font data. It contains bitmapped fonts which are used to draw most of the text in the games. Text is used in one of four places: Text boxes, Text input fields, the title bar menu, and occasionally on-screen.
Sound resources summarized
SCI0 uses two types of resources for sound: Patch resources, and sound resources. Sound resources contain a rather simple header, and music data stored in a slightly modified version of the MIDI standard.
Patch resources contain device-dependent instrument mapping information for the instruments used in the sound resources. SCI0 sound resources do not adhere to the General Midi (GM) standard (which was, to my knowledge, written several years after the first SCI0 game was released), though later SCI versions may do so.
Logic resources summarized
Whenever the parser needs to look up a word, it looks for it in one of the vocab resources. This is not the sole purpose of the vocab resources, though; they provide information required by the debugger, including the help text for the debugger help menu and the names of the various SCI opcodes and kernel functions.
Script resources are the heart (or, rather, the brains) of the game. Consequently, they also are its most complex aspects, containing class and object information, local data, pointer relocation tables, and, of course, SCI bytecode.
To run the game, scripts are loaded on the SCI stack, their pointers are relocated appropriately, and their functions are executed by a virtual machine. They use a set of 0x7d opcodes, which may take either 8 or 16 bit parameters (so, effectively, there is twice the amount of commands). The functions may refer to global data, local temporary data, local function parameter data, or object data (selectors). They may, additionally, indirectly refer to "hunk" data, which is stored outside of the SCI heap. Since the whole design is object oriented, functions may re-use or overload the functions of their superclasses.
SCI01 extensions
SCI01 differs only in very few respects: It uses different compression algorithms (all of which are supported since FreeSCI 0.2.1), and a different type of sound resources, which may contain digitized sound effects (PCM data). The basic music data, however, still resembles MIDI data.
Also, scripts are split into two parts when loaded: A dynamic part, which resides in the heap as before, and a static part, which is stored externally to conserve heap space.[note 2]
SCI1 extensions
SCI1, which is not covered by FreeSCI at the moment, introduces new concepts like Palettes, scaled bitmap images and several new compression algorithms. In SCI1.0, the resource limit was first increased to 16383[note 3], and then to 65535 in SCI1. Because of the inherent limitations of the FAT file system the primary target OS of Sierra's SCI interpreter was limited to, patch file names were altered accordingly, with the resource number (not padded) before the dot and a three-letter resource ID behind it; examples are "0.scr" or "100.v56".
The complete list of suffixes is as follows:
- 80: v56: 256 color views
- 81: p56: 256 color background pictures
- 82: scr: Scripts (static data)
- 83: tex: Texts (apparently deprecated in favor of messages)
- 84: snd: Sound data (MIDI music)
- 86[note 4] :voc: Vocabulary (not used)
- 87: fon: Fonts
- 88: cur: Mouse cursors (deprecated in favor of v56-based cursors)
- 89: pat: Audio patch files
- 8a: bit: Bitmap files (purpose unknown)
- 8b: pal: 256 color palette files
- 8c: cda: CD Audio resources
- 8d: aud: Audio resources (probably sound effects)
- 8e: syn: Sync (purpose unknown)
- 8f: msg: Message resources: Text plus metadata
- 90: map: Map (purpose unknown)
- 91: hep: Heap resources: Dynamic script data
Apparently, the script resource split introduced in SCI01 was incorporated into the actual resource layout in SCI1.
Sierra SCI games
Paul David Doherty, Vladimir Gneushev
The listing here is almost certainly incomplete. Thanks to the information provided by Vladimir, game information now includes some features of certain versions the interpreter shipped with, they are listed below:
Symbol | Meaning |
---|---|
Rn | Resource patches identified by name (script.256) |
Re | Resource patches identified by extension (256.scr) |
Dd | Built-in debugger |
D* | Interpreter binary shipped with debug symbols |
Ss | Scripts consist of script resources only |
Sh | Scripts use heap and script resources |
Sc | Scripts use 'csc' resources |
SCI0
Game name | interpreter version |
Parser | Map file version |
More |
---|---|---|---|---|
Season's Greetings (1988) | 0.000.294 | yes | 0 | Re Dd Ss |
Leisure Suit Larry 2 | 0.000.343 | yes | 0 | Re Dd Ss |
Police Quest 2 | 0.000.395 | yes | 0 | Re Dd Ss |
Leisure Suit Larry 2 | 0.000.409 | yes | 0 | Re Dd Ss |
Space Quest 3 | 0.000.453 | yes | 0 | Re Dd Ss |
Police Quest 2 | 0.000.490 | yes | 0 | Re Dd Ss |
King's Quest 4 | 0.000.502 | yes | 0 | Re Dd Ss |
Fun Seeker's Guide | 0.000.506 | yes | 0 | Re Dd Ss |
Hoyle Official Book of Games | 0.000.530 | ? | 0 | Re Dd Ss |
Hero's Quest: So You Want to Be a Hero | 0.000.566 | yes | 0 | Re Dd Ss |
Leisure Suit Larry 3: Passionate Patti in Pursuit of the Pulsating Pectorals! | 0.000.572 | yes | 0 | Re Dd Ss |
Quest for Glory I: So You Want to Be a Hero (EGA) | 0.000.629 | yes | 0 | Re Dd Ss |
The Colonel's Bequest | 0.000.631 | yes | 0 | Re Dd Ss |
Code-Name: ICEMAN | 0.000.668 | yes | 0 | Re Dd Ss |
Hoyle Official Book of Games, Vol. 2: Solitaire | 0.000.685 | ? | 0 | Re Dd Ss |
Conquests of Camelot: The Search for the Grail | 0.000.685 | yes | 0 | Re Dd Ss |
Code-Name: ICEMAN | 0.000.685 | yes | 0 | Re Dd Ss |
Space Quest III: The Pirates of Pestulon | 0.000.685 | yes | 0 | Re Dd Ss |
SCI01
Game name | interpreter version |
Parser | Map file version |
More |
---|---|---|---|---|
King's Quest I | S.old.010 | yes | ? | Dd Ss |
Quest for Glory 2 | 1.000.072 | yes | 0 | Re Ss |
Christmas Greeting Card 1990 EGA | 1.000.172 | ? | ? | |
Christmas Greeting Card 1990 VGA | 1.000.174 | ? | ? | |
Space Quest 3 German | SQ3 | bilingual | 0 | Re Dd Ss |
SCI1
Game name | interpreter version |
Parser | Map file version |
More |
---|---|---|---|---|
King's Quest 5 | 1.000.060 | no | 0 | Re Ss |
Leisure suit Larry 1 demo | 1.000.084 | no | 0 | Rn Ss |
Conquest of the Long Bow | 1.000.168 | no | 1 | Rn Ss |
Space Quest 1 demo | 1.000.181 | no | 0 | Rn Ss |
Leisure Suit Larry 1 (VGA) | 1.000.577 | ? | ? | |
King's Quest 5 | 1.000.784 | ? | ? | |
Space Quest 4 | 1.000.753 | no | 0 | Re Ss |
SCI1-T.A series
Game name | interpreter version |
Parser | Map file version |
More |
---|---|---|---|---|
Police Quest 3 demo | T.A00.052 | no | 1 | Rn Ss |
Space Quest 1 (VGA) | T.A00.081 | ? | ? | |
Leisure suit Larry 5 | T.A00.169 | no | 1 | Rn Ss |
Police Quest 3 | T.A00.178 | ? | ? |
SCI1 suspected forks
Game name | interpreter version |
Parser | Map file version |
More |
---|---|---|---|---|
Jones in the Fast Lane | x.yyy.zzz | no | 0 | Re Dd Ss |
Mixed-up Mother Goose demo Win | x.yyy.zzz | no | 0 | Re Dd Ss |
EcoQuest 1 | 1.ECO.013 | no | 1 | Rn Ss |
Mixed-up Fairy Tales demo | ????????? | no | 1 | Rn Ss |
SCI1.1
Game name | interpreter version |
Parser | Map file version |
More |
---|---|---|---|---|
EcoQuest 1 demo | x.yyy.zzz | no | 1 | Rn D* Sh |
Laura Bow 2 demo | x.yyy.zzz | no | 1 | Rn D* Sh |
Quest for Glory 3 demo | 1.001.021 | no | 1 | Rn Sh |
LSL: Crazy Nick's Budget Picks | 1.001.029 | no | 1 | Rn D* Sh |
Police Quest 1 | 1.001.029 | no | 1 | Rn D* Sh |
Quest for Glory 1 VGA demo | 1.001.029 | no | 1 | Rn D* Sh |
Quest for Glory 3 | 1.001.050 | no | 1 | Rn Sh |
Island of Dr. Brain 1 | 1.001.053 | no | 1 | Rn Sh |
Island of Dr. Brain 2 | 1.001.053 | no | 1 | Rn Sh |
Island of Dr. Brain 2 demo | 1.001.053 | no | 1 | Rn Sh |
King's Quest 6 | 1.001.054 | no | 1 | Rn Sh |
King's Quest 6 demo | 1.001.055 | no | 1 | Rn Sh |
EcoQuest 2 demo | 1.001.055 | no | 1 | Rn Sh |
Christmas Greeting Card 1992 | 1.001.055 | ? | ? | |
Space Quest 4 Windows | 1.001.064 | ? | ? | |
EcoQuest 2 | 1.001.065 | no | 1 | Rn Sh |
Space Quest 5 | 1.001.068 | no | 1 | Rn Sh |
Space Quest 5 French | 1.001.068 | ? | ? | |
Space Quest 5 German | 1.001.068 | ? | ? | |
Freddy Pharkas DOS demo | 1.001.069 | no | 1 | Rn Sh |
Leisure suit Larry 6 DOS+Win | 1.001.069 | no | 1 | Rn D* Sh |
Twisty history demo DOS+Win] | 1.001.069 | no | 1 | Rn Sh |
Twisty history demo DOS+Win] | 1.001.070 | no | 1 | Rn Sh |
Twisty history demo DOS+Win | 1.001.072 | no | 1 | Rn Sh |
Pepper's Adventures in Time | 1.001.072 | no | 1 | Rn Sh |
Laura Bow 2 | 1.001.072 | no | 1 | Rn Sh |
Freddy Pharkas | 1.cfs.081 | no | 1 | Rn Sh |
Gabriel Knight 1 demo | 1.001.092 | no | 1 | Rn Sh |
Freddy Pharkas demo Win | 1.001.095 | no | 1 | Rn Sh |
Freddy Pharkas CD demo Win | 1.001.095 | no | 1 | Rn Sh |
Leisure suit Larry 6 DOS+Win | 1.001.113 | no | 1 | Rn D* Sh |
King's Quest 6 | 1.cfs.158 | ? | ? | |
Laura Bow 2 | 2.000.274 | no | 1 | Rn Sh |
Quest for Glory 1 VGA | L.rry.021 | ? | ? | |
Quest for Glory 3 German | L.rry.083 | ? | ? | |
Quest for Glory 1 VGA | 2.000.411 | no | 1 | Rn Sh |
Quest for Glory 4 demo | No number | no | 1 | Rn D* Sh |
SCI32
Game name | interpreter version |
Parser | Map file version |
More |
---|---|---|---|---|
Police Quest 4 floppy DOS+win | ? | ? | ? | |
Lighthouse | ? | ? | ? | |
Lighthouse demo Win9x (another) | ? | ? | ? | |
Space Quest 6 | ? | ? | ? | |
Quest for Glory 4 floppy | 2.000.000 | ? | ? | |
Quest for Glory 4 demo (another) | 2.000.000 | ? | ? | |
Gabriel Knight 1 | 2.000.000 | no | 1 | Rn Sh |
Torin's Passage DOS+win | 2.100.002 | no | 3 | Rn Sh |
Gabriel Knight 2 DOS+win | 2.100.002 | no | 3 | Rn Sh |
Police Quest: S.W.A.T. demo Win | 2.100.002 | no | 3 | Rn Sh |
King's Quest 7 Win+Win9x | 2.100.002 | no | 3 | Rn Sh |
Phantasmagoria | 2.100.002 | ? | ? | |
Quest for Glory 4 CD DOS+win | 2.100.002 | no | 3 | Rn Sh |
Shivers Win | 2.100.002 | no | 3 | Rn Sh |
Shivers demo Win | 2.100.002 | no | 3 | Rn Sh |
Phantasmagoria 2 Win9x | 3.000.000 | no | 3 | Rn Sc |
Leisure suit Larry 7 DOS+Win9x | 3.000.000 | no | 3 | Rn Sc |
Lighthouse demo Win9x | 3.000.000 | no | 3 | Rn Sc |
RAMA | 3.000.000 | no | 3 | Rn Sc |
Shivers 2 | 3.000.000 | no | 3 | Rn Sc |
- Notes
- ↑ With several notable exceptions, such as script 0 and most vocab resources.
- ↑ The background for this is that heap space started running out in Quest for Glory 2. In order to compensate for this, changes were made to both the script library and the interpreter.
- ↑ This appears to be the limit- none of the SCI1.0 games I tested used resource numbers beyond 16383
- ↑ Type 0x85 resources are 'memory' resources, which are only used internally.
< Previous: Sierra Creative Interpreter Specifications PrefaceNext: Chapter 2 - Resource files >