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

Jump to navigation Jump to search
→‎Object Scripts in V3/4 (OC): Filled out unknowns based on object.cpp/ScummEngine_v4::resetRoomObject
m
(→‎Object Scripts in V3/4 (OC): Filled out unknowns based on object.cpp/ScummEngine_v4::resetRoomObject)
(3 intermediate revisions by 3 users not shown)
Line 24: Line 24:
== 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. For games until version 6, 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 name        2 ("LS") or 4 ("LSCR") bytes
Line 31: Line 31:
  Script code        variable
  Script code        variable


For v7 and v8 games the script id is stored in 2 bytes and starts with 2000.
Block name        4 bytes ("LSCR")
Block size        4 bytes
ID                2 bytes
Script code        variable


== Room Entry Scripts (EN or ENCD) ==
== Room Entry Scripts (EN or ENCD) ==
Line 52: Line 58:
== 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. A single VERB block contains the code for all possible player actions on the object. Starting with version 5, the whole code can be found in an [[Object resources|Object Resource]].  


  OBCD     
  OBCD     
Line 67: Line 73:
       Block name    4 bytes ("VERB")
       Block name    4 bytes ("VERB")
       Block size    4 bytes
       Block size    4 bytes
       offset table  variable
       offset table  variable {
      verb          1 byte (0xFF is default)
      verb          1 byte (0xFF is default)
      offset        2 bytes
      offset        2 bytes
       table end    1 byte(must be 0)
      }
       table end    1 byte (must be 0x00)
       object code  variable
       object code  variable
    OBNA
      Block name    4 bytes ("OBNA")
      Block size    4 bytes
      object name  null-terminated string
   
   


Line 79: Line 91:


  OC
  OC
   Block size        4 bytes
   Block size        4 bytes (LE)
   Block name        2 bytes ("OC")
   Block name        2 bytes ("OC")
   Object ID        1 byte (?)
   Object ID        2 bytes (LE)
   unknown           12 bytes
  unknown          1 byte
  x pos            1 byte
  y pos, par. state 1 byte
  image width / 8  1 byte
  parent            1 byte
  walk_x            2 bytes (LE)
   walk_y            2 bytes (LE)
  height, actor dir 1 byte
  name offset      1 byte
  offset table      variable {
    verb            1 byte (0xFF is default)
    offset           2 bytes
  }
  table end        1 byte (must be 0x00)
  object name      null-terminated string
  object code      variable
 
 
This block contains all object data except for the actual image bitmap. Compare this to V5+ objects, where metadata is split into seperate CDHD and OBNA blocks.


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:
Image width is given in strips, which are 8 pixels wide. The high bit of y pos is used to store the parent's state (0 or 1). Both x pos and y pos will be multiplied by 8 by the interpreter. The lower three bits (mask 0x07) of height are used to store actor dir. Name offset is the absolute offset of object name (or, if you prefer, the position after table end).


  verb               1 byte
The offset table is a variable block like that used in the VERB block in later games, which contains the verb identifier (1 byte) and the absolute offset (2 bytes). The table end is marked with 0x00. Next is the object's name, which is a standard null-terminated string. After this follows the actual object code. Note that unlike other script types, because there are multiple entry points (one for each supported verb), there are also multiple exit points (or "stopObjectCode" instructions).
  offset             2 bytes
  table end         1 byte (must be 0)
  object name       0 terminated string
  object code       variable
125

edits

Navigation menu