- Script arrays are semantically identical to map arrays: They have fixed
sizes and can be multidimensional. They can also be initialized, although
this is just syntactic sugar. e.g.
int init_array[2] = { 10, 20 }
produces code identical to:
int init_array[2];
init_array[0] = 10;
init_array[1] = 20;
Script arrays are also implicitly initialized to 0, just like any other
variable in ACS.
- Unlike map arrays, they only exist for the life of the script, and each
script gets its own copy of the array.
- Script arrays exists in a separate space from script variables. I did
not repeat the bullshittery of map arrays here. (I still have no idea what I
was thinking when I designed them that way.)
- Each script and function that uses local arrays is recorded with a new
chunk: SARY for scripts and FARY for functions. The first two bytes are the
script/function number, and the rest of the chunk consists of four-byte
integers describing the size (in ints) of each array used by that
script/function. To determine how many arrays a script/function uses,
take the chunk length, subtract two, and divide by four.
- Fixed: You could not #define a string for use in a library, because it
was converted to a number at definition time and not at use time. This
is no longer the case. Symbolic constants now store the string in its
original form, and they now expand into the string when encountered
instead of their string table index.
the size of an array. Now #defines are fully processed inside an import but
are forgotten when the import is popped if they weren't created with
#libdefine.
SVN r280 (trunk)