Open main menu

SCUMM/Arrays and Strings

< SCUMM
Revision as of 15:06, 22 April 2006 by Joachimeberhard (talk | contribs) (Initial move-in of http://www.scummvm.org/docs/specs/aary.php)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Introduction

Arrays are used for storing arbitrary blocks of data. They are accessible by the scripts, and so can be used for storing anything that might be useful; however, the contents of an array is not stored in the data file and can only be set at run time. Arrays can be dynamically allocated and freed as desired, but only a limited number are available. See the section on Arrays in the Scripts chapter for more information.

The way Arrays work was redesigned completely between V5 and V6.

V5 chunk Format

V5 Arrays are not stored in the data file. 32 Arrays are available for access using the arrayOps opcode. V5 Arrays (sometimes also referred to as Strings) are one-dimensional.

V6 chunk Format

 Size    Type             Description
 ====    ====             ===========
 8       chunk tag        AARY chunk tag
for each array {
 2       word LE          array resource number
 2       word LE          X size minus one
 2       word LE          Y size minus one
 2       word LE          array type
}
 2       word LE          zero

The X and Y size fields are set to one less than the actual size; an entry of 0 means a size of 1. Arrays are always two-dimensional.

The type field can be one of:

Value Meaning
1 Array of bits
2 Array of nibbles (half bytes)
3 Array of bytes
4 Array of chars (= a string)
5 Array of integers

V8 chunk Format

 Size    Type             Description
 ====    ====             ===========
 8       chunk tag        AARY chunk tag
for each array {
 4       dword LE         array resource number
 4       dword LE         X size minus one
 4       dword LE         Y size minus one
}
 4       dword LE         zero

The X and Y size fields are set to one less than the actual size; an entry of 0 means a size of 1. One dimensional arrays are simply a special case, where one dimension has size 1.