Difference between revisions of "SCUMM/Technical Reference/Script resources"

From ScummVM :: Wiki
Jump to navigation Jump to search
(Put object code for V3/4 into separate part)
m
Line 12: Line 12:
 
Starting with Scumm V5, the blockname contains 4 bytes and the block size is BE including the 8 bytes for the header. Older games just have a 2 bytes blockname and the block size is in LE without the 6 bytes for the header.
 
Starting with Scumm V5, the blockname contains 4 bytes and the block size is BE including the 8 bytes for the header. Older games just have a 2 bytes blockname and the block size is in LE without the 6 bytes for the header.
  
 +
<br>
  
= Global Scripts (SC or SCRP) =
+
== Global Scripts (SC or SCRP) ==
  
 
Global scripts are limited to 200 and stored in the '''LF''' or '''LFLF''' container. The id and the offset is stored in the ''directory of scripts'' in the game [[SCUMM/Index File|index file]].
 
Global scripts are limited to 200 and stored in the '''LF''' or '''LFLF''' container. The id and the offset is stored in the ''directory of scripts'' in the game [[SCUMM/Index File|index file]].
Line 21: Line 22:
 
  Script code        variable
 
  Script code        variable
  
= Local Scripts (LS or LSCR) =
+
== Local Scripts (LS or LSCR) ==
  
 
Local scripts are stored within a room. The first byte after the blockname contains the id of the script. IDs for local scripts always start at 200.
 
Local scripts are stored within a room. The first byte after the blockname contains the id of the script. IDs for local scripts always start at 200.
Line 31: Line 32:
  
  
= Room Entry Scripts (EN or ENCD) =
+
== Room Entry Scripts (EN or ENCD) ==
  
 
This block contains special code when a room is entered.  
 
This block contains special code when a room is entered.  
Line 40: Line 41:
  
  
= Room Exit Scripts (EX or EXCD) =
+
== Room Exit Scripts (EX or EXCD) ==
  
 
This block contains special code when the player leaves a room  
 
This block contains special code when the player leaves a room  
Line 49: Line 50:
  
  
= Object Scripts V5+ (OBCD) =
+
== Object Scripts V5+ (OBCD) ==
  
 
These are scripts that correspond to VERB actions. VERBs are predefined activities at the bottom of the screen, e.g. "Open", "Look", "Give" etc. For each named object in a room, the game designer could define responses to the players actions. Starting with version 5, the whole code can be found in an [[Object resources|Object Resource]].  
 
These are scripts that correspond to VERB actions. VERBs are predefined activities at the bottom of the screen, e.g. "Open", "Look", "Give" etc. For each named object in a room, the game designer could define responses to the players actions. Starting with version 5, the whole code can be found in an [[Object resources|Object Resource]].  
Line 73: Line 74:
 
   
 
   
  
= Object Scripts in V3/4 (OC) =
+
== Object Scripts in V3/4 (OC) ==
  
 
In Version 3 and 4 the code can be found in the '''OC''' block:
 
In Version 3 and 4 the code can be found in the '''OC''' block:

Revision as of 05:42, 24 April 2007

SCUMM/Technical ReferenceScript resources


Scripts control the internal logic of the games. They exist in different flavours:

  • global scripts
  • local scripts
  • room entry scripts
  • room exit scripts
  • object scripts

Starting with Scumm V5, the blockname contains 4 bytes and the block size is BE including the 8 bytes for the header. Older games just have a 2 bytes blockname and the block size is in LE without the 6 bytes for the header.


Global Scripts (SC or SCRP)

Global scripts are limited to 200 and stored in the LF or LFLF container. The id and the offset is stored in the directory of scripts in the game index file.

Block name         2 ("SC") or 4 ("SCRP") bytes
Block size         4 bytes 
Script code        variable

Local Scripts (LS or LSCR)

Local scripts are stored within a room. The first byte after the blockname contains the id of the script. IDs for local scripts always start at 200.

Block name         2 ("LS") or 4 ("LSCR") bytes
Block size         4 bytes
ID                 1 byte
Script code        variable


Room Entry Scripts (EN or ENCD)

This block contains special code when a room is entered.

Block name         2 ("EN") or 4 ("ENCD") bytes
Block size         4 bytes
Script code        variable


Room Exit Scripts (EX or EXCD)

This block contains special code when the player leaves a room

Block name         2 ("EX") or 4 ("EXCD") bytes
Block size         4 bytes
Script code        variable


Object Scripts V5+ (OBCD)

These are scripts that correspond to VERB actions. VERBs are predefined activities at the bottom of the screen, e.g. "Open", "Look", "Give" etc. For each named object in a room, the game designer could define responses to the players actions. Starting with version 5, the whole code can be found in an Object Resource.

OBCD    
  Block name       4 bytes ("OBCD")
  Block size       4 bytes
   CDHD
     Block name    4 bytes ("CDHD")
     Block size    4 bytes (25)
     obj id        2 bytes
     ...           see Object Resource
   VERB
     Block name    4 bytes ("VERB")
     Block size    4 bytes
     offset table  variable
     verb          1 byte (0xFF is default)
     offset        2 bytes
     table end     1 byte(must be 0)
     object code   variable

Object Scripts in V3/4 (OC)

In Version 3 and 4 the code can be found in the OC block:

OC
  Block size        4 bytes
  Block name        2 bytes ("OC")
  Object ID         1 byte (?)
  unknown           12 bytes

Now starts a variable block similar to the VERB block in later games, which contains the verb identifier (1 byte) and the offset. The table end is marked with 0. Directly behind the object name is stored followed by the object code:

  verb               1 byte
  offset             2 bytes
  table end          1 byte (must be 0)
  object name        0 terminated string
  object code        variable