Difference between revisions of "SCI Specifications: Chapter 1 - Introduction"

From SCI Wiki
Jump to navigationJump to search
 
(124 intermediate revisions by the same user not shown)
Line 1: Line 1:
==Introduction==
+
== Introduction ==
 
 
===The basics===
 
  
 +
 
 +
=== 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:
 
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<br />
 
script data: SCI scripts and local data<br />
Line 17: Line 16:
 
text data: Plain text information
 
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. <ref>With several notable exceptions, such as script 0 and most vocab resources.</ref>
  
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. <ref group="note">With several notable exceptions, such as script 0 and most vocab resources.</ref>
+
&nbsp;
 +
=== Resource Storage ===
  
===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.
 
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.
 
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.
 
<!--; neither of those is used by FreeSCI.-->
 
  
 
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).
 
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).
Line 33: Line 31:
 
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 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===
+
&nbsp;
 +
===<br /> SCI Resources ===
 +
 
 +
==== SCI0 Resources ====
  
 
The resource types of SCI0 can be roughly grouped into four sets:
 
The resource types of SCI0 can be roughly grouped into four sets:
  
*[[#Graphical resources summarized|Graphics (pic, view, font, cursor)]]
+
* <div id="VIEW"></div>'''VIEW''' - [[#SCI0 Graphical resources summarized|Graphics]]
*[[#Sound resources summarized|Sound (patch, sound)]]
+
* <div id="PIC"></div>'''PIC''' - [[#SCI0 Graphical resources summarized|Graphics]]
*[[#Logic resources summarized|Logic (script, vocab)]]
+
* <div id="SCRIPT"></div>'''SCRIPT''' - [[#SCI0 Logic resources summarized|Logic]]
*Text (Text resources are nothing more than a series of ASCIIZ strings)
+
* <div id="TEXT"></div>'''TEXT''' - (Text resources are series of ASCII strings)
<!--; but the other resources deserve further discussion.-->
+
* <div id="VOCAB"></div>'''VOCAB''' - [[#SCI0 Logic resources summarized|Vocab]]
 +
* <div id="SOUND"></div>'''SOUND''' - [[#SCI0 Sound resources summarized|Sound]]
 +
* <div id="VOCAB"></div>'''LOGIC''' - [[#SCI0 Logic resources summarized|Logic]]
 +
* <div id="FONT"></div>'''FONT''' - [[#SCI0 Graphical resources summarized|Graphics]]
 +
* <div id="CURSOR"></div>'''CURSOR''' - [[#SCI0 Graphical resources summarized|Graphics]]
 +
* <div id="PATCH"></div>'''PATCH''' - [[#SCI0 Sound resources summarized|Sound]]
 +
<!--; the other resources deserve further discussion.-->
 +
 
 +
====<br /> SCI01 extensions ====
 +
 
 +
SCI01 differs only in very few respects: It uses different compression algorithms 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.<ref>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.</ref>
 +
 
 +
====<br /> SCI1 extensions ====
 +
 
 +
SCI1 introduced new concepts like Palettes, scaled bitmap images and several new compression algorithms. In SCI1.0, the resource limit was first increased to 16383<ref>This appears to be the limit- none of the SCI1.0 games tested used resource numbers beyond 16383</ref>, 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:
 +
 
 +
* <div id="V56"></div>80: '''V56''': 256 color views
 +
* <div id="P56"></div>81: '''P56''': 256 color background pictures
 +
* <div id="SCR"></div>82: '''SCR''': Scripts (static data)
 +
* <div id="TEX"></div>83: '''TEX''': Texts (deprecated in favor of messages)
 +
* <div id="SND"></div>84: '''SND''': Sound data (MIDI music)
 +
* 85: No extension: Type 0x85 resources are 'memory' resources, which are only used internally.
 +
* <div id="VOC"></div>86(16): '''VOC''': Vocabulary (not used)<ref>Type 0x85 resources are 'memory' resources, which are only used internally.</ref>
 +
* <div id="FON"></div>87: '''FON''': Fonts
 +
* <div id="CUR"></div>88: '''CUR''': Mouse cursors (deprecated in favor of v56-based cursors)
 +
* <div id="PAT"></div>89: '''PAT''': Audio patch files
 +
* <div id="BIT"></div>8a: '''BIT''': Bitmap files (purpose unknown)
 +
* <div id="PAL"></div>8b: '''PAL''': 256 color palette files
 +
* <div id="CDA"></div>8c: '''CDA''': CD Audio resources
 +
* <div id="AUD"></div>8d: '''AUD''': Audio resources (voice and digital sound effects)
 +
* <div id="SYN"></div>8e: '''SYN''': Sync (audio synchronization)
 +
* <div id="MSG"></div>8f: '''MSG''': Message resources: Text plus metadata
 +
* <div id="MAP"></div>90: '''MAP''': Map (lookup tables for the individual resources)
 +
* <div id="HEP"></div>91: '''HEP''': Heap resources: Dynamic script data<ref>The script resource split introduced in SCI01 was incorporated into the actual resource layout in SCI1</ref>
 +
* <div id="SEQ"></div>??: '''SEQ''': Sequence resources for cut scenes (external)
 +
 
 +
====<br /> SCI1.1 extensions ====
 +
 
 +
* <div id="Sync36"></div>'''Sync36''': Sync36 (Audio36 synchronization)
 +
 
 +
====<br /> SCI2 extensions ====
 +
 
 +
* <div id="Wave"></div>'''Wave''': Wave (16-bit PCM mono 22050 Hz audio resource)
 +
 
 +
====<br /> SCI2.1 extensions ====
 +
 
 +
Early versions used a modified SCI2 kernel table. Most of these games maintain the "old school" Sierra graphics. Robot videos were introduced, in the DOS version of KQ7.
 +
<div id="VMD"></div>
 +
<div id="RBT"></div>Middle versions include the finalized kernel function table, the addition of '''VMD''' video resource and a more heavy usage of '''[[RBT]]''' (robot) videos. Graphics in these games were generally either cartoonish or 3D pre-rendered from filmed actors.
 +
 
 +
* <div id="RBT"></div>'''RBT''': robot videos
 +
* <div id="RBT"></div>'''VMD''': VMD videos
 +
 
 +
====<br /> SCI3 extensions ====
 +
 
 +
Middle versions include the finalized kernel function table (which was also used in the SCI3 games)
  
====Graphical resources summarized====
+
=== The individual resources: A summary ===
 +
 
 +
&nbsp;
 +
==== SCI0 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).
 
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).
Line 55: Line 118:
 
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.
 
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====
+
&nbsp;
 +
==== SCI0 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.
 
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.
Line 61: Line 125:
 
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.
 
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====
+
&nbsp;
 +
==== SCI0 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.
 
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.
Line 69: Line 134:
 
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.
 
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===
+
&nbsp;
 
+
=== Sierra SCI games ===
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.<ref group="note">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.</ref>
 
 
 
===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<ref group="note">This appears to be the limit- none of the SCI1.0 games I tested used resource numbers beyond 16383</ref>, 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<ref group="note">Type 0x85 resources are 'memory' resources, which are only used internally.</ref> :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  
 
Paul David Doherty, Vladimir Gneushev  
Line 126: Line 160:
 
|}
 
|}
  
====SCI0====  
+
&nbsp;
 +
==== SCI0 ====  
  
 
{| class="wikitable sortable"
 
{| class="wikitable sortable"
Line 134: Line 169:
 
| [[Sierra Christmas Card 1988|Season's Greetings (1988)]] || align="center" | 0.000.294 || align="center" | yes || align="center" | 0 || align="center" | Re Dd Ss
 
| [[Sierra Christmas Card 1988|Season's Greetings (1988)]] || align="center" | 0.000.294 || align="center" | yes || align="center" | 0 || align="center" | Re Dd Ss
 
|-   
 
|-   
| [[Leisure Suit Larry Goes Looking for Love (In Several Wrong Places!)|Leisure Suit Larry 2]] || align="center" | 0.000.343 || align="center" | yes || align="center" | 0 || align="center" | Re Dd Ss
+
| [[Leisure Suit Larry Goes Looking for Love (In Several Wrong Places)|Leisure Suit Larry 2]] || align="center" | 0.000.343 || align="center" | yes || align="center" | 0 || align="center" | Re Dd Ss
 
|-   
 
|-   
 
| [[Police Quest 2: The Vengeance|Police Quest 2]] || align="center" | 0.000.395 || align="center" | yes || align="center" | 0 || align="center" | Re Dd Ss
 
| [[Police Quest 2: The Vengeance|Police Quest 2]] || align="center" | 0.000.395 || align="center" | yes || align="center" | 0 || align="center" | Re Dd Ss
 
|-   
 
|-   
| [[Leisure Suit Larry Goes Looking for Love (In Several Wrong Places!)|Leisure Suit Larry 2]] || align="center" | 0.000.409 || align="center" | yes || align="center" | 0 || align="center" | Re Dd Ss
+
| [[Leisure Suit Larry Goes Looking for Love (In Several Wrong Places)|Leisure Suit Larry 2]] || align="center" | 0.000.409 || align="center" | yes || align="center" | 0 || align="center" | Re Dd Ss
 
|-   
 
|-   
 
| [[Space Quest III: The Pirates of Pestulon|Space Quest 3]] || align="center" | 0.000.453 || align="center" | yes || align="center" | 0 || align="center" | Re Dd Ss
 
| [[Space Quest III: The Pirates of Pestulon|Space Quest 3]] || align="center" | 0.000.453 || align="center" | yes || align="center" | 0 || align="center" | Re Dd Ss
Line 148: Line 183:
 
| [[Fun Seeker's Guide]] || align="center" | 0.000.506 || align="center" | yes || align="center" | 0 || align="center" | Re Dd Ss
 
| [[Fun Seeker's Guide]] || align="center" | 0.000.506 || align="center" | yes || align="center" | 0 || align="center" | Re Dd Ss
 
|-   
 
|-   
| [[Hoyle Official Book of Games]] || align="center" | 0.000.530 || align="center" | ? || align="center" | 0 || align="center" | Re Dd Ss
+
| [[Hoyle Official Book of Games, Volume 1]] || align="center" | 0.000.530 || align="center" | ? || align="center" | 0 || align="center" | Re Dd Ss
 
|-   
 
|-   
 
| [[Hero's Quest: So You Want to Be a Hero]] || align="center" | 0.000.566 || align="center" | yes || align="center" | 0 || align="center" | Re Dd Ss
 
| [[Hero's Quest: So You Want to Be a Hero]] || align="center" | 0.000.566 || align="center" | yes || align="center" | 0 || align="center" | Re Dd Ss
 
|-   
 
|-   
| [[Leisure Suit Larry 3: Passionate Patti in Pursuit of the Pulsating Pectorals!]] || align="center" | 0.000.572 || align="center" | yes || align="center" | 0 || align="center" | Re Dd Ss
+
| [[Leisure Suit Larry 3: Passionate Patti in Pursuit of the Pulsating Pectorals]] || align="center" | 0.000.572 || align="center" | yes || align="center" | 0 || align="center" | Re Dd Ss
 
|-   
 
|-   
 
| [[Quest for Glory I: So You Want to Be a Hero (EGA)]]|| align="center" | 0.000.629 || align="center" | yes || align="center" | 0 || align="center" | Re Dd Ss
 
| [[Quest for Glory I: So You Want to Be a Hero (EGA)]]|| align="center" | 0.000.629 || align="center" | yes || align="center" | 0 || align="center" | Re Dd Ss
 
|-   
 
|-   
| [[The Colonel's Bequest]] || align="center" | 0.000.631 || align="center" | yes || align="center" | 0 || align="center" | Re Dd Ss
+
| [[Colonel's Bequest, The]] || align="center" | 0.000.631 || align="center" | yes || align="center" | 0 || align="center" | Re Dd Ss
 
|-   
 
|-   
 
| [[Code-Name: ICEMAN]] || align="center" | 0.000.668 || align="center" | yes || align="center" | 0 || align="center" | Re Dd Ss
 
| [[Code-Name: ICEMAN]] || align="center" | 0.000.668 || align="center" | yes || align="center" | 0 || align="center" | Re Dd Ss
 
|-   
 
|-   
| [[Hoyle Official Book of Games, Vol. 2: Solitaire]] || align="center" | 0.000.685 || align="center" | ? || align="center" | 0 || align="center" | Re Dd Ss
+
| [[Hoyle Official Book of Games, Volume 2: Solitaire]] || align="center" | 0.000.685 || align="center" | ? || align="center" | 0 || align="center" | Re Dd Ss
 
|-   
 
|-   
 
| [[Conquests of Camelot: The Search for the Grail]] || align="center" | 0.000.685 || align="center" | yes || align="center" | 0 || align="center" | Re Dd Ss
 
| [[Conquests of Camelot: The Search for the Grail]] || align="center" | 0.000.685 || align="center" | yes || align="center" | 0 || align="center" | Re Dd Ss
Line 169: Line 204:
 
|}
 
|}
  
====SCI01====
+
&nbsp;
 +
 
 +
==== SCI01 ====
  
 
{| class="wikitable sortable"
 
{| class="wikitable sortable"
Line 178: Line 215:
 
|-  
 
|-  
 
| [[Quest for Glory II: Trial by Fire]] || align="center" | 1.000.072 || align="center" | yes || align="center" | 0 || align="center" | Re Ss
 
| [[Quest for Glory II: Trial by Fire]] || align="center" | 1.000.072 || align="center" | yes || align="center" | 0 || align="center" | Re Ss
|-
 
| [[Christmas Card EGA 1990]] || align="center" | 1.000.172 || align="center" | ? || align="center" | ? || align="center" | &nbsp;
 
|-
 
| [[Christmas Card VGA 1990]] || align="center" | 1.000.174 || align="center" | ? || align="center" | ? || align="center" | &nbsp;
 
 
|-  
 
|-  
 
| [[Space Quest III: The Pirates of Pestulon|Space Quest 3]] German || align="center" | SQ3 || align="center" | bilingual || align="center" | 0 || align="center" | Re Dd Ss
 
| [[Space Quest III: The Pirates of Pestulon|Space Quest 3]] German || align="center" | SQ3 || align="center" | bilingual || align="center" | 0 || align="center" | Re Dd Ss
 
|}
 
|}
  
====SCI1====
+
&nbsp;
 +
 
 +
==== SCI1 ====
  
 
{| class="wikitable sortable"
 
{| class="wikitable sortable"
 
|-  
 
|-  
 
! Game name !! align="center" | interpreter<br />version !! align="center" | Parser !! align="center" | Map file<br />version !! More
 
! Game name !! align="center" | interpreter<br />version !! align="center" | Parser !! align="center" | Map file<br />version !! More
 +
|-
 +
| [[Christmas Card 1990 - The Seasoned Professional (EGA)]] || align="center" | 1.000.172 || align="center" | ? || align="center" | ? || align="center" | &nbsp;
 +
|-
 +
| [[Christmas Card 1990 - The Seasoned Professional (VGA)]] || align="center" | 1.000.174 || align="center" | ? || align="center" | ? || align="center" | &nbsp;
 
|-  
 
|-  
 
| [[King's Quest V: Absence Makes the Heart Go Yonder]] || align="center" | 1.000.060 || align="center" | no || align="center" | 0 || align="center" | Re Ss
 
| [[King's Quest V: Absence Makes the Heart Go Yonder]] || align="center" | 1.000.060 || align="center" | no || align="center" | 0 || align="center" | Re Ss
Line 198: Line 237:
 
| [[Conquests of the Longbow: The Legend of Robin Hood]] || align="center" | 1.000.168 || align="center" | no || align="center" | 1 || align="center" | Rn Ss
 
| [[Conquests of the Longbow: The Legend of Robin Hood]] || align="center" | 1.000.168 || align="center" | no || align="center" | 1 || align="center" | Rn Ss
 
|-  
 
|-  
| [[Space Quest Chapter I SCI Demo]] || align="center" | 1.000.181 || align="center" | no || align="center" | 0 || align="center" | Rn Ss
+
| [[Space Quest 1 VGA Demo]] || align="center" | 1.000.181 || align="center" | no || align="center" | 0 || align="center" | Rn Ss
 
|-  
 
|-  
 
| [[Leisure Suit Larry 1: In the Land of the Lounge Lizards SCI|Leisure Suit Larry 1 (VGA)]] || align="center" | 1.000.577 || align="center" | ? || align="center" | ? || align="center" | &nbsp;
 
| [[Leisure Suit Larry 1: In the Land of the Lounge Lizards SCI|Leisure Suit Larry 1 (VGA)]] || align="center" | 1.000.577 || align="center" | ? || align="center" | ? || align="center" | &nbsp;
Line 207: Line 246:
 
|}
 
|}
  
====SCI1-T.A series====
+
&nbsp;
 +
 
 +
==== SCI1-T.A series ====
  
 
{| class="wikitable sortable"
 
{| class="wikitable sortable"
Line 217: Line 258:
 
| [[Space Quest I: The Sarien Encounter SCI|Space Quest I: The Sarien Encounter (VGA)]] || align="center" | T.A00.081 || align="center" | ? || align="center" | ? || align="center" | &nbsp;
 
| [[Space Quest I: The Sarien Encounter SCI|Space Quest I: The Sarien Encounter (VGA)]] || align="center" | T.A00.081 || align="center" | ? || align="center" | ? || align="center" | &nbsp;
 
|-  
 
|-  
| [[Leisure Suit Larry 5: Passionate Patti Does a Little Undercover Work!]] || align="center" | T.A00.169 || align="center" | no || align="center" | 1 || align="center" | Rn Ss
+
| [[Leisure Suit Larry 5: Passionate Patti Does a Little Undercover Work]] || align="center" | T.A00.169 || align="center" | no || align="center" | 1 || align="center" | Rn Ss
 
|-  
 
|-  
 
| [[Police Quest 3: The Kindred]] || align="center" | T.A00.178 || align="center" | ? || align="center" | ? || align="center" | &nbsp;
 
| [[Police Quest 3: The Kindred]] || align="center" | T.A00.178 || align="center" | ? || align="center" | ? || align="center" | &nbsp;
 
|}
 
|}
  
====SCI1 suspected forks====
+
&nbsp;
 +
==== SCI1 suspected forks ====
  
 
{| class="wikitable sortable"
 
{| class="wikitable sortable"
Line 230: Line 272:
 
| [[Jones in the Fast Lane]] || align="center" | x.yyy.zzz || align="center" | no || align="center" | 0 || align="center" | Re Dd Ss
 
| [[Jones in the Fast Lane]] || align="center" | x.yyy.zzz || align="center" | no || align="center" | 0 || align="center" | Re Dd Ss
 
|-  
 
|-  
| [[Mixed-up Mother Goose Demo]] Win || align="center" | x.yyy.zzz || align="center" | no || align="center" | 0 || align="center" | Re Dd Ss
+
| [[Mixed-Up Mother Goose VGA Demo]] Win || align="center" | x.yyy.zzz || align="center" | no || align="center" | 0 || align="center" | Re Dd Ss
 
|-  
 
|-  
 
| [[EcoQuest: The Search for Cetus]] || align="center" | 1.ECO.013 || align="center" | no || align="center" | 1 || align="center" | Rn Ss
 
| [[EcoQuest: The Search for Cetus]] || align="center" | 1.ECO.013 || align="center" | no || align="center" | 1 || align="center" | Rn Ss
 
|-  
 
|-  
| [[Mixed-up Fairy Tales Demo]] || align="center" | ????????? || align="center" | no || align="center" | 1 || align="center" | Rn Ss
+
| [[Mixed-Up Fairy Tales Demo]] || align="center" | ????????? || align="center" | no || align="center" | 1 || align="center" | Rn Ss
 
|}
 
|}
  
====SCI1.1====
+
&nbsp;
 +
 
 +
==== SCI1.1 ====
  
 
{| class="wikitable sortable"
 
{| class="wikitable sortable"
Line 247: Line 291:
 
| [[Dagger of Amon Ra Demo|Laura Bow 2 Demo]] || align="center" | x.yyy.zzz || align="center" | no || align="center" | 1 || align="center" | Rn D* Sh
 
| [[Dagger of Amon Ra Demo|Laura Bow 2 Demo]] || align="center" | x.yyy.zzz || align="center" | no || align="center" | 1 || align="center" | Rn D* Sh
 
|-  
 
|-  
| [[Quest for Glory 3 Demo]] || align="center" | 1.001.021 || align="center" | no || align="center" | 1 || align="center" | Rn Sh
+
| [[Quest for Glory III Demo]] || align="center" | 1.001.021 || align="center" | no || align="center" | 1 || align="center" | Rn Sh
 
|-  
 
|-  
 
| [[Crazy Nick's Pick: Leisure Suit Larry's Casino]] || align="center" | 1.001.029 || align="center" | no || align="center" | 1 || align="center" | Rn D* Sh
 
| [[Crazy Nick's Pick: Leisure Suit Larry's Casino]] || align="center" | 1.001.029 || align="center" | no || align="center" | 1 || align="center" | Rn D* Sh
Line 265: Line 309:
 
| [[King's Quest VI: Heir Today, Gone Tomorrow]] || align="center" | 1.001.054 || align="center" | no || align="center" | 1 || align="center" | Rn Sh
 
| [[King's Quest VI: Heir Today, Gone Tomorrow]] || align="center" | 1.001.054 || align="center" | no || align="center" | 1 || align="center" | Rn Sh
 
|-  
 
|-  
| [[King's Quest 6 Demo]] || align="center" | 1.001.055 || align="center" | no || align="center" | 1 || align="center" | Rn Sh
+
| [[King's Quest VI Demo]] || align="center" | 1.001.055 || align="center" | no || align="center" | 1 || align="center" | Rn Sh
 
|-  
 
|-  
 
| [[EcoQuest 2 Demo]] || align="center" | 1.001.055 || align="center" | no || align="center" | 1 || align="center" | Rn Sh
 
| [[EcoQuest 2 Demo]] || align="center" | 1.001.055 || align="center" | no || align="center" | 1 || align="center" | Rn Sh
 
|-  
 
|-  
| [[Christmas Card EGA 1992]] || align="center" | 1.001.055 || align="center" | ? || align="center" | ? || align="center" | &nbsp;
+
| [[Christmas Card 1990 - The Seasoned Professional (EGA)]] || align="center" | 1.001.055 || align="center" | ? || align="center" | ? || align="center" | &nbsp;
 
|-  
 
|-  
 
| [[Space Quest IV: Roger Wilco and the Time Rippers]] Windows || align="center" | 1.001.064 || align="center" | ? || align="center" | ? || align="center" | &nbsp;
 
| [[Space Quest IV: Roger Wilco and the Time Rippers]] Windows || align="center" | 1.001.064 || align="center" | ? || align="center" | ? || align="center" | &nbsp;
Line 283: Line 327:
 
| [[Freddy Pharkas Demo]] || align="center" | 1.001.069 || align="center" | no || align="center" | 1 || align="center" | Rn Sh
 
| [[Freddy Pharkas Demo]] || align="center" | 1.001.069 || align="center" | no || align="center" | 1 || align="center" | Rn Sh
 
|-  
 
|-  
| [[Leisure Suit Larry 6: Shape up or Slip Out!]] DOS+Win || align="center" | 1.001.069 || align="center" | no || align="center" | 1 || align="center" | Rn D* Sh
+
| [[Leisure Suit Larry 6: Shape Up or Slip Out!]] DOS+Win || align="center" | 1.001.069 || align="center" | no || align="center" | 1 || align="center" | Rn D* Sh
 
|-  
 
|-  
| <span style="color:red">Twisty history demo DOS+Win]</span> || align="center" | 1.001.069 || align="center" | no || align="center" | 1 || align="center" | Rn Sh
+
| [[Pepper's Adventures in Time Demo]] DOS+Win|| align="center" | 1.001.069 || align="center" | no || align="center" | 1 || align="center" | Rn Sh
 
|-  
 
|-  
| <span style="color:red">Twisty history demo DOS+Win]</span> || align="center" | 1.001.070 || align="center" | no || align="center" | 1 || align="center" | Rn Sh
+
| [[Pepper's Adventures in Time Demo]] DOS+Win || align="center" | 1.001.070 || align="center" | no || align="center" | 1 || align="center" | Rn Sh
 
|-  
 
|-  
 
| [[Pepper's Adventures in Time Demo]] DOS+Win || align="center" | 1.001.072 || align="center" | no || align="center" | 1 || align="center" | Rn Sh
 
| [[Pepper's Adventures in Time Demo]] DOS+Win || align="center" | 1.001.072 || align="center" | no || align="center" | 1 || align="center" | Rn Sh
Line 301: Line 345:
 
| [[Freddy Pharkas Demo]] Win || align="center" | 1.001.095 || align="center" | no || align="center" | 1 || align="center" | Rn Sh
 
| [[Freddy Pharkas Demo]] Win || align="center" | 1.001.095 || align="center" | no || align="center" | 1 || align="center" | Rn Sh
 
|-  
 
|-  
| [[Freddy Pharkas CD Demo]] Win || align="center" | 1.001.095 || align="center" | no || align="center" | 1 || align="center" | Rn Sh
+
| [[Freddy Pharkas Demo|Freddy Pharkas CD Demo]] Win || align="center" | 1.001.095 || align="center" | no || align="center" | 1 || align="center" | Rn Sh
 
|-  
 
|-  
| [[Leisure Suit Larry 6: Shape up or Slip Out!]] DOS+Win || align="center" | 1.001.113 || align="center" | no || align="center" | 1 || align="center" | Rn D* Sh
+
| [[Leisure Suit Larry 6: Shape Up or Slip Out!]] DOS+Win || align="center" | 1.001.113 || align="center" | no || align="center" | 1 || align="center" | Rn D* Sh
 
|-  
 
|-  
 
| [[King's Quest VI: Heir Today, Gone Tomorrow]] || align="center" | 1.cfs.158 || align="center" | ? || align="center" | ? || align="center" | &nbsp;
 
| [[King's Quest VI: Heir Today, Gone Tomorrow]] || align="center" | 1.cfs.158 || align="center" | ? || align="center" | ? || align="center" | &nbsp;
 
|-  
 
|-  
| [[Dagger of Amon Ra]] || align="center" | 2.000.274 || align="center" | no || align="center" | 1 || align="center" | Rn Sh
+
| [[Dagger of Amon Ra, The|The Dagger of Amon Ra]] || align="center"|2.000.274 || align="center" | no || align="center" | 1 || align="center" | Rn Sh
 
|-  
 
|-  
| [[Quest for Glory 1 VGA || align="center" | L.rry.021 || align="center" | ? || align="center" | ? || align="center" | &nbsp;
+
| [[Quest for Glory I: So You Want to Be a Hero (VGA)]] || align="center" | L.rry.021 || align="center" | ? || align="center" | ? || align="center" | &nbsp;
 
|-  
 
|-  
| [[Quest for Glory 3 German || align="center" | L.rry.083 || align="center" | ? || align="center" | ? || align="center" | &nbsp;
+
| [[Quest for Glory III: Wages of War]] German || align="center" | L.rry.083 || align="center" | ? || align="center" | ? || align="center" | &nbsp;
 
|-  
 
|-  
 
| [[Quest for Glory I: So You Want to Be a Hero (VGA)]] || align="center" | 2.000.411 || align="center" | no || align="center" | 1 || align="center" | Rn Sh
 
| [[Quest for Glory I: So You Want to Be a Hero (VGA)]] || align="center" | 2.000.411 || align="center" | no || align="center" | 1 || align="center" | Rn Sh
Line 318: Line 362:
 
|}
 
|}
  
====SCI32====
+
&nbsp;
 +
 
 +
==== SCI32 ====
  
 
{| class="wikitable sortable"
 
{| class="wikitable sortable"
Line 324: Line 370:
 
! valign="bottom" | Game name !! align="center" | interpreter<br />version !! align="center" valign="bottom" | Parser !! align="center" | Map file<br />version !! valign="bottom" | More
 
! valign="bottom" | Game name !! align="center" | interpreter<br />version !! align="center" valign="bottom" | Parser !! align="center" | Map file<br />version !! valign="bottom" | More
 
|-  
 
|-  
| Police Quest 4 floppy DOS+win || align="center" | ? || align="center" | ? || align="center" | ? || align="center" | &nbsp;
+
| [[Police Quest 4: Open Season]] floppy DOS+win || align="center" | ? || align="center" | ? || align="center" | ? || align="center" | &nbsp;
 
|-  
 
|-  
| Lighthouse || align="center" | ? || align="center" | ? || align="center" | ? || align="center" | &nbsp;
+
| [[Lighthouse: The Dark Being]] || align="center" | ? || align="center" | ? || align="center" | ? || align="center" | &nbsp;
 
|-  
 
|-  
| Lighthouse demo Win9x (another) || align="center" | ? || align="center" | ? || align="center" | ? || align="center" | &nbsp;
+
| [[Lighthouse Demo]] Win9x (another) || align="center" | ? || align="center" | ? || align="center" | ? || align="center" | &nbsp;
 
|-  
 
|-  
| Space Quest 6 || align="center" | ? || align="center" | ? || align="center" | ? || align="center" | &nbsp;
+
| [[Space Quest VI: The Spinal Frontier]] || align="center" | ? || align="center" | ? || align="center" | ? || align="center" | &nbsp;
 
|-  
 
|-  
| Quest for Glory 4 floppy || align="center" | 2.000.000 || align="center" | ? || align="center" | ? || align="center" | &nbsp;
+
| [[Quest for Glory IV: Shadows of Darkness]] floppy || align="center" | 2.000.000 || align="center" | ? || align="center" | ? || align="center" | &nbsp;
 
|-  
 
|-  
| Quest for Glory 4 demo (another) || align="center" | 2.000.000 || align="center" | ? || align="center" | ? || align="center" | &nbsp;
+
| [[Quest for Glory IV Demo]] (another) || align="center" | 2.000.000 || align="center" | ? || align="center" | ? || align="center" | &nbsp;
 
|-  
 
|-  
| Gabriel Knight 1 || align="center" | 2.000.000 || align="center" | no || align="center" | 1 || align="center" | Rn Sh
+
| [[Gabriel Knight: Sins of the Fathers]] || align="center" | 2.000.000 || align="center" | no || align="center" | 1 || align="center" | Rn Sh
 
|-  
 
|-  
| Torin's Passage DOS+win || align="center" | 2.100.002 || align="center" | no || align="center" | 3 || align="center" | Rn Sh
+
| [[Torin's Passage]] DOS+win || align="center" | 2.100.002 || align="center" | no || align="center" | 3 || align="center" | Rn Sh
 
|-  
 
|-  
| Gabriel Knight 2 DOS+win || align="center" | 2.100.002 || align="center" | no || align="center" | 3 || align="center" | Rn Sh
+
| [[Beast Within: A Gabriel Knight Mystery, The|The Beast Within: A Gabriel Knight Mystery]] DOS+win || align="center" | 2.100.002 || align="center" | no || align="center" | 3 || align="center" | Rn Sh
 
|-  
 
|-  
| Police Quest: S.W.A.T. demo Win || align="center" | 2.100.002 || align="center" | no || align="center" | 3 || align="center" | Rn Sh
+
| [[Police Quest: S.W.A.T. Demo]] Win || align="center" | 2.100.002 || align="center" | no || align="center" | 3 || align="center" | Rn Sh
 
|-  
 
|-  
| King's Quest 7 Win+Win9x || align="center" | 2.100.002 || align="center" | no || align="center" | 3 || align="center" | Rn Sh
+
| [[King's Quest VII: The Princeless Bride]] Win+Win9x || align="center" | 2.100.002 || align="center" | no || align="center" | 3 || align="center" | Rn Sh
 
|-  
 
|-  
| Phantasmagoria || align="center" | 2.100.002 || align="center" | ? || align="center" | ? || align="center" | &nbsp;
+
| [[Phantasmagoria]] || align="center" | 2.100.002 || align="center" | ? || align="center" | ? || align="center" | &nbsp;
 
|-  
 
|-  
| Quest for Glory 4 CD DOS+win || align="center" | 2.100.002 || align="center" | no || align="center" | 3 || align="center" | Rn Sh
+
| [[Quest for Glory IV: Shadows of Darkness]] CD DOS+win || align="center" | 2.100.002 || align="center" | no || align="center" | 3 || align="center" | Rn Sh
 
|-  
 
|-  
| Shivers Win || align="center" | 2.100.002 || align="center" | no || align="center" | 3 || align="center" | Rn Sh
+
| [[Shivers]] Win || align="center" | 2.100.002 || align="center" | no || align="center" | 3 || align="center" | Rn Sh
 
|-  
 
|-  
| Shivers demo Win || align="center" | 2.100.002 || align="center" | no || align="center" | 3 || align="center" | Rn Sh
+
| [[Shivers Demo]] Win || align="center" | 2.100.002 || align="center" | no || align="center" | 3 || align="center" | Rn Sh
 
|-  
 
|-  
| Phantasmagoria 2 Win9x || align="center" | 3.000.000 || align="center" | no || align="center" | 3 || align="center" | Rn Sc
+
| [[Phantasmagoria: A Puzzle of Flesh]] Win9x || align="center" | 3.000.000 || align="center" | no || align="center" | 3 || align="center" | Rn Sc
 
|-  
 
|-  
| Leisure suit Larry 7 DOS+Win9x || align="center" | 3.000.000 || align="center" | no || align="center" | 3 || align="center" | Rn Sc
+
| [[Leisure Suit Larry 7: Love for Sail!]] DOS+Win9x || align="center" | 3.000.000 || align="center" | no || align="center" | 3 || align="center" | Rn Sc
 
|-  
 
|-  
| Lighthouse demo Win9x || align="center" | 3.000.000 || align="center" | no || align="center" | 3 || align="center" | Rn Sc
+
| [[Lighthouse Demo]] Win9x || align="center" | 3.000.000 || align="center" | no || align="center" | 3 || align="center" | Rn Sc
 
|-  
 
|-  
| RAMA || align="center" | 3.000.000 || align="center" | no || align="center" | 3 || align="center" | Rn Sc
+
| [[RAMA]] || align="center" | 3.000.000 || align="center" | no || align="center" | 3 || align="center" | Rn Sc
 
|-  
 
|-  
| Shivers 2 || align="center" | 3.000.000 || align="center" | no || align="center" | 3 || align="center" | Rn Sc
+
| [[Shivers Two: Harvest of Souls]] || align="center" | 3.000.000 || align="center" | no || align="center" | 3 || align="center" | Rn Sc
 
|}
 
|}
 
&nbsp;
 
&nbsp;
  
 
;Notes
 
;Notes
<references group="note"/>
+
<references />
  
 
&nbsp;
 
&nbsp;
  
<span style="float: left">[[Sierra_Creative_Interpreter_Specifications|&lt; Previous: Sierra Creative Interpreter Specifications Preface]]</span><span style="float: right">[[SCI Specifications: Chapter_2_-_Resource_files|Next: Chapter 2 - Resource files &gt;]]</span>
+
<span style="float: left">[[SCI_Specifications|&lt; Previous: Sierra Creative Interpreter Specifications Preface]]</span><span style="float: right">[[SCI Specifications: Chapter_2_-_Resource_files|Next: Chapter 2 - Resource files &gt;]]</span>
 
&nbsp;
 
&nbsp;
  
 +
[[Category:SCI Documentation]]
 +
[[Category:Sierra Creative Interpreter Specifications]]
 
[[Category:SCI Resources]]
 
[[Category:SCI Resources]]
[[Category:Sierra Creative Interpreter Specifications]]
 

Latest revision as of 16:02, 19 December 2019

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. [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.

 


SCI Resources

SCI0 Resources

The resource types of SCI0 can be roughly grouped into four sets:


SCI01 extensions

SCI01 differs only in very few respects: It uses different compression algorithms 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.[2]


SCI1 extensions

SCI1 introduced new concepts like Palettes, scaled bitmap images and several new compression algorithms. In SCI1.0, the resource limit was first increased to 16383[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 (deprecated in favor of messages)
  • 84: SND: Sound data (MIDI music)
  • 85: No extension: Type 0x85 resources are 'memory' resources, which are only used internally.
  • 86(16): VOC: Vocabulary (not used)[4]
  • 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 (voice and digital sound effects)
  • 8e: SYN: Sync (audio synchronization)
  • 8f: MSG: Message resources: Text plus metadata
  • 90: MAP: Map (lookup tables for the individual resources)
  • 91: HEP: Heap resources: Dynamic script data[5]
  • ??: SEQ: Sequence resources for cut scenes (external)


SCI1.1 extensions

  • Sync36: Sync36 (Audio36 synchronization)


SCI2 extensions

  • Wave: Wave (16-bit PCM mono 22050 Hz audio resource)


SCI2.1 extensions

Early versions used a modified SCI2 kernel table. Most of these games maintain the "old school" Sierra graphics. Robot videos were introduced, in the DOS version of KQ7.

Middle versions include the finalized kernel function table, the addition of VMD video resource and a more heavy usage of RBT (robot) videos. Graphics in these games were generally either cartoonish or 3D pre-rendered from filmed actors.

  • RBT: robot videos
  • VMD: VMD videos


SCI3 extensions

Middle versions include the finalized kernel function table (which was also used in the SCI3 games)

The individual resources: A summary

 

SCI0 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.

 

SCI0 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.

 

SCI0 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.

 

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, Volume 1 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
Colonel's Bequest, The 0.000.631 yes 0 Re Dd Ss
Code-Name: ICEMAN 0.000.668 yes 0 Re Dd Ss
Hoyle Official Book of Games, Volume 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: Quest for the Crown (SCI remake) S.old.010 yes ? Dd Ss
Quest for Glory II: Trial by Fire 1.000.072 yes 0 Re Ss
Space Quest 3 German SQ3 bilingual 0 Re Dd Ss

 

SCI1

Game name interpreter
version
Parser Map file
version
More
Christmas Card 1990 - The Seasoned Professional (EGA) 1.000.172 ? ?  
Christmas Card 1990 - The Seasoned Professional (VGA) 1.000.174 ? ?  
King's Quest V: Absence Makes the Heart Go Yonder 1.000.060 no 0 Re Ss
Leisure Suit Larry 1 SCI Demo 1.000.084 no 0 Rn Ss
Conquests of the Longbow: The Legend of Robin Hood 1.000.168 no 1 Rn Ss
Space Quest 1 VGA Demo 1.000.181 no 0 Rn Ss
Leisure Suit Larry 1 (VGA) 1.000.577 ? ?  
King's Quest V: Absence Makes the Heart Go Yonder 1.000.784 ? ?  
Space Quest IV: Roger Wilco and the Time Rippers 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 I: The Sarien Encounter (VGA) T.A00.081 ? ?  
Leisure Suit Larry 5: Passionate Patti Does a Little Undercover Work T.A00.169 no 1 Rn Ss
Police Quest 3: The Kindred 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 VGA Demo Win x.yyy.zzz no 0 Re Dd Ss
EcoQuest: The Search for Cetus 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 III Demo 1.001.021 no 1 Rn Sh
Crazy Nick's Pick: Leisure Suit Larry's Casino 1.001.029 no 1 Rn D* Sh
Police Quest 1: In Pursuit of the Death Angel VGA 1.001.029 no 1 Rn D* Sh
Quest for Glory I VGA remake Demo 1.001.029 no 1 Rn D* Sh
Quest for Glory III: Wages of War 1.001.050 no 1 Rn Sh
Castle of Dr. Brain 1.001.053 no 1 Rn Sh
Island of Dr. Brain 1.001.053 no 1 Rn Sh
Island of Dr. Brain Demo 1.001.053 no 1 Rn Sh
King's Quest VI: Heir Today, Gone Tomorrow 1.001.054 no 1 Rn Sh
King's Quest VI Demo 1.001.055 no 1 Rn Sh
EcoQuest 2 Demo 1.001.055 no 1 Rn Sh
Christmas Card 1990 - The Seasoned Professional (EGA) 1.001.055 ? ?  
Space Quest IV: Roger Wilco and the Time Rippers Windows 1.001.064 ? ?  
EcoQuest 2: Lost Secret of The Rainforest 1.001.065 no 1 Rn Sh
Space Quest V: The Next Mutation 1.001.068 no 1 Rn Sh
Space Quest V: The Next Mutation French 1.001.068 ? ?  
Space Quest V: The Next Mutation German 1.001.068 ? ?  
Freddy Pharkas Demo 1.001.069 no 1 Rn Sh
Leisure Suit Larry 6: Shape Up or Slip Out! DOS+Win 1.001.069 no 1 Rn D* Sh
Pepper's Adventures in Time Demo DOS+Win 1.001.069 no 1 Rn Sh
Pepper's Adventures in Time Demo DOS+Win 1.001.070 no 1 Rn Sh
Pepper's Adventures in Time Demo DOS+Win 1.001.072 no 1 Rn Sh
Pepper's Adventures in Time 1.001.072 no 1 Rn Sh
Dagger of Amon Ra Demo 1.001.072 no 1 Rn Sh
Freddy Pharkas: Frontier Pharmacist 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: Shape Up or Slip Out! DOS+Win 1.001.113 no 1 Rn D* Sh
King's Quest VI: Heir Today, Gone Tomorrow 1.cfs.158 ? ?  
The Dagger of Amon Ra 2.000.274 no 1 Rn Sh
Quest for Glory I: So You Want to Be a Hero (VGA) L.rry.021 ? ?  
Quest for Glory III: Wages of War German L.rry.083 ? ?  
Quest for Glory I: So You Want to Be a Hero (VGA) 2.000.411 no 1 Rn Sh
Quest for Glory IV Demo No number no 1 Rn D* Sh

 

SCI32

Game name interpreter
version
Parser Map file
version
More
Police Quest 4: Open Season floppy DOS+win ? ? ?  
Lighthouse: The Dark Being ? ? ?  
Lighthouse Demo Win9x (another) ? ? ?  
Space Quest VI: The Spinal Frontier ? ? ?  
Quest for Glory IV: Shadows of Darkness floppy 2.000.000 ? ?  
Quest for Glory IV Demo (another) 2.000.000 ? ?  
Gabriel Knight: Sins of the Fathers 2.000.000 no 1 Rn Sh
Torin's Passage DOS+win 2.100.002 no 3 Rn Sh
The Beast Within: A Gabriel Knight Mystery 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 VII: The Princeless Bride Win+Win9x 2.100.002 no 3 Rn Sh
Phantasmagoria 2.100.002 ? ?  
Quest for Glory IV: Shadows of Darkness 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: A Puzzle of Flesh Win9x 3.000.000 no 3 Rn Sc
Leisure Suit Larry 7: Love for Sail! 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 Two: Harvest of Souls 3.000.000 no 3 Rn Sc

 

Notes
  1. With several notable exceptions, such as script 0 and most vocab resources.
  2. 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.
  3. This appears to be the limit- none of the SCI1.0 games tested used resource numbers beyond 16383
  4. Type 0x85 resources are 'memory' resources, which are only used internally.
  5. The script resource split introduced in SCI01 was incorporated into the actual resource layout in SCI1

 

< Previous: Sierra Creative Interpreter Specifications PrefaceNext: Chapter 2 - Resource files >