protected ArrayHeader DefineArray(uint array, ArrayType type, int dim2, int dim1) { // Debug.WriteLine("DefineArray: {0} {1} {2} {3}", array, type, dim2, dim1); Debug.Assert(0 <= type && (int)type <= 5); NukeArray(array); var id = FindFreeArrayId(); int size; if (Game.Version == 8) { if ((array & 0x80000000) != 0) { throw new InvalidOperationException("Can't define bit variable as array pointer"); } size = (type == ArrayType.IntArray) ? 4 : 1; } else { if ((array & 0x8000) != 0) { throw new InvalidOperationException("Can't define bit variable as array pointer"); } size = (type == ArrayType.IntArray) ? 2 : 1; } WriteVariable(array, id); size *= dim2 + 1; size *= dim1 + 1; _strings[id] = new byte[size + 6 /*sizeof(ArrayHeader)*/]; var ah = new ArrayHeader(_strings[id]); ah.Type = type; ah.Dim1 = dim1 + 1; ah.Dim2 = dim2 + 1; return(ah); }
protected ArrayHeader DefineArray(uint array, ArrayType type, int dim2, int dim1) { // Debug.WriteLine("DefineArray: {0} {1} {2} {3}", array, type, dim2, dim1); Debug.Assert(0 <= type && (int)type <= 5); NukeArray(array); var id = FindFreeArrayId(); int size; if (Game.Version == 8) { if ((array & 0x80000000) != 0) { throw new InvalidOperationException("Can't define bit variable as array pointer"); } size = (type == ArrayType.IntArray) ? 4 : 1; } else { if ((array & 0x8000) != 0) { throw new InvalidOperationException("Can't define bit variable as array pointer"); } size = (type == ArrayType.IntArray) ? 2 : 1; } WriteVariable(array, id); size *= dim2 + 1; size *= dim1 + 1; _strings[id] = new byte[size + 6 /*sizeof(ArrayHeader)*/]; var ah = new ArrayHeader(_strings[id]); ah.Type = type; ah.Dim1 = dim1 + 1; ah.Dim2 = dim2 + 1; return ah; }