Don't call allocateArrays from readMAXS, rather call it explicitly after calling readMAXS; init _palManipCounter in the proper place (only needed when restarting); free palManip data on exit
svn-id: r17495
This commit is contained in:
parent
78f2f279c4
commit
cfe85b8618
7 changed files with 25 additions and 43 deletions
|
@ -261,6 +261,7 @@ protected:
|
||||||
virtual void readIndexFile();
|
virtual void readIndexFile();
|
||||||
void readClassicIndexFile(); // V1
|
void readClassicIndexFile(); // V1
|
||||||
void readEnhancedIndexFile(); // V2
|
void readEnhancedIndexFile(); // V2
|
||||||
|
virtual void readGlobalObjects();
|
||||||
virtual void loadCharset(int no);
|
virtual void loadCharset(int no);
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -410,6 +410,7 @@ void ScummEngine::readIndexFile() {
|
||||||
|
|
||||||
case MKID('MAXS'):
|
case MKID('MAXS'):
|
||||||
readMAXS(itemsize);
|
readMAXS(itemsize);
|
||||||
|
allocateArrays();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MKID('DIRN'):
|
case MKID('DIRN'):
|
||||||
|
@ -984,8 +985,6 @@ void ScummEngine_v5::readMAXS(int blockSize) {
|
||||||
|
|
||||||
if (_shadowPaletteSize)
|
if (_shadowPaletteSize)
|
||||||
_shadowPalette = (byte *)calloc(_shadowPaletteSize, 1);
|
_shadowPalette = (byte *)calloc(_shadowPaletteSize, 1);
|
||||||
|
|
||||||
allocateArrays();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScummEngine_v8::readMAXS(int blockSize) {
|
void ScummEngine_v8::readMAXS(int blockSize) {
|
||||||
|
@ -1015,8 +1014,6 @@ void ScummEngine_v8::readMAXS(int blockSize) {
|
||||||
|
|
||||||
_shadowPaletteSize = NUM_SHADOW_PALETTE * 256;
|
_shadowPaletteSize = NUM_SHADOW_PALETTE * 256;
|
||||||
_shadowPalette = (byte *)calloc(_shadowPaletteSize, 1);
|
_shadowPalette = (byte *)calloc(_shadowPaletteSize, 1);
|
||||||
|
|
||||||
allocateArrays();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScummEngine_v7::readMAXS(int blockSize) {
|
void ScummEngine_v7::readMAXS(int blockSize) {
|
||||||
|
@ -1049,8 +1046,6 @@ void ScummEngine_v7::readMAXS(int blockSize) {
|
||||||
|
|
||||||
_shadowPaletteSize = NUM_SHADOW_PALETTE * 256;
|
_shadowPaletteSize = NUM_SHADOW_PALETTE * 256;
|
||||||
_shadowPalette = (byte *)calloc(_shadowPaletteSize, 1);
|
_shadowPalette = (byte *)calloc(_shadowPaletteSize, 1);
|
||||||
|
|
||||||
allocateArrays();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScummEngine_v6::readMAXS(int blockSize) {
|
void ScummEngine_v6::readMAXS(int blockSize) {
|
||||||
|
@ -1082,8 +1077,6 @@ void ScummEngine_v6::readMAXS(int blockSize) {
|
||||||
|
|
||||||
_shadowPaletteSize = 256;
|
_shadowPaletteSize = 256;
|
||||||
_shadowPalette = (byte *)calloc(_shadowPaletteSize, 1);
|
_shadowPalette = (byte *)calloc(_shadowPaletteSize, 1);
|
||||||
|
|
||||||
allocateArrays();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScummEngine::readGlobalObjects() {
|
void ScummEngine::readGlobalObjects() {
|
||||||
|
|
|
@ -65,11 +65,7 @@ void ScummEngine_v2::readClassicIndexFile() {
|
||||||
_fileHandle->seek(0, SEEK_SET);
|
_fileHandle->seek(0, SEEK_SET);
|
||||||
|
|
||||||
readMAXS(0);
|
readMAXS(0);
|
||||||
|
allocateArrays();
|
||||||
// Jamieson630: palManipulate variable initialization
|
|
||||||
_palManipCounter = 0;
|
|
||||||
_palManipPalette = 0; // Will allocate when needed
|
|
||||||
_palManipIntermediatePal = 0; // Will allocate when needed
|
|
||||||
|
|
||||||
_fileHandle->readUint16LE(); /* version magic number */
|
_fileHandle->readUint16LE(); /* version magic number */
|
||||||
for (i = 0; i != _numGlobalObjects; i++) {
|
for (i = 0; i != _numGlobalObjects; i++) {
|
||||||
|
@ -122,7 +118,7 @@ void ScummEngine_v2::readEnhancedIndexFile() {
|
||||||
_musicEngine = new Player_V2(this, _midiDriver != MD_PCSPK);
|
_musicEngine = new Player_V2(this, _midiDriver != MD_PCSPK);
|
||||||
|
|
||||||
_numGlobalObjects = _fileHandle->readUint16LE();
|
_numGlobalObjects = _fileHandle->readUint16LE();
|
||||||
_fileHandle->seek(_numGlobalObjects, SEEK_CUR); // Skip object flags
|
_fileHandle->seek(_numGlobalObjects, SEEK_CUR);
|
||||||
_numRooms = _fileHandle->readByte();
|
_numRooms = _fileHandle->readByte();
|
||||||
_fileHandle->seek(_numRooms * 3, SEEK_CUR);
|
_fileHandle->seek(_numRooms * 3, SEEK_CUR);
|
||||||
_numCostumes = _fileHandle->readByte();
|
_numCostumes = _fileHandle->readByte();
|
||||||
|
@ -135,26 +131,28 @@ void ScummEngine_v2::readEnhancedIndexFile() {
|
||||||
_fileHandle->seek(0, SEEK_SET);
|
_fileHandle->seek(0, SEEK_SET);
|
||||||
|
|
||||||
readMAXS(0);
|
readMAXS(0);
|
||||||
|
allocateArrays();
|
||||||
// Jamieson630: palManipulate variable initialization
|
|
||||||
_palManipCounter = 0;
|
|
||||||
_palManipPalette = 0; // Will allocate when needed
|
|
||||||
_palManipIntermediatePal = 0; // Will allocate when needed
|
|
||||||
|
|
||||||
_fileHandle->readUint16LE(); /* version magic number */
|
_fileHandle->readUint16LE(); /* version magic number */
|
||||||
int num = _fileHandle->readUint16LE();
|
readGlobalObjects();
|
||||||
assert(num == _numGlobalObjects);
|
|
||||||
for (int i = 0; i != num; i++) {
|
|
||||||
byte tmp = _fileHandle->readByte();
|
|
||||||
_objectOwnerTable[i] = tmp & OF_OWNER_MASK;
|
|
||||||
_objectStateTable[i] = tmp >> OF_STATE_SHL;
|
|
||||||
}
|
|
||||||
readResTypeList(rtRoom, MKID('ROOM'), "room");
|
readResTypeList(rtRoom, MKID('ROOM'), "room");
|
||||||
readResTypeList(rtCostume, MKID('COST'), "costume");
|
readResTypeList(rtCostume, MKID('COST'), "costume");
|
||||||
readResTypeList(rtScript, MKID('SCRP'), "script");
|
readResTypeList(rtScript, MKID('SCRP'), "script");
|
||||||
readResTypeList(rtSound, MKID('SOUN'), "sound");
|
readResTypeList(rtSound, MKID('SOUN'), "sound");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ScummEngine_v2::readGlobalObjects() {
|
||||||
|
int i;
|
||||||
|
int num = _fileHandle->readUint16LE();
|
||||||
|
assert(num == _numGlobalObjects);
|
||||||
|
|
||||||
|
for (i = 0; i != num; i++) {
|
||||||
|
byte tmp = _fileHandle->readByte();
|
||||||
|
_objectOwnerTable[i] = tmp & OF_OWNER_MASK;
|
||||||
|
_objectStateTable[i] = tmp >> OF_STATE_SHL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ScummEngine_v2::readIndexFile() {
|
void ScummEngine_v2::readIndexFile() {
|
||||||
int magic = 0;
|
int magic = 0;
|
||||||
debug(9, "readIndexFile()");
|
debug(9, "readIndexFile()");
|
||||||
|
|
|
@ -81,11 +81,7 @@ void ScummEngine_v3old::readIndexFile() {
|
||||||
_fileHandle->seek(0, SEEK_SET);
|
_fileHandle->seek(0, SEEK_SET);
|
||||||
|
|
||||||
readMAXS(0);
|
readMAXS(0);
|
||||||
|
allocateArrays();
|
||||||
// Jamieson630: palManipulate variable initialization
|
|
||||||
_palManipCounter = 0;
|
|
||||||
_palManipPalette = 0; // Will allocate when needed
|
|
||||||
_palManipIntermediatePal = 0; // Will allocate when needed
|
|
||||||
|
|
||||||
_fileHandle->readUint16LE(); /* version magic number */
|
_fileHandle->readUint16LE(); /* version magic number */
|
||||||
readGlobalObjects();
|
readGlobalObjects();
|
||||||
|
|
|
@ -71,11 +71,7 @@ void ScummEngine_v4::readIndexFile() {
|
||||||
_fileHandle->seek(0, SEEK_SET);
|
_fileHandle->seek(0, SEEK_SET);
|
||||||
|
|
||||||
readMAXS(0);
|
readMAXS(0);
|
||||||
|
allocateArrays();
|
||||||
// Jamieson630: palManipulate variable initialization
|
|
||||||
_palManipCounter = 0;
|
|
||||||
_palManipPalette = 0; // Will allocate when needed
|
|
||||||
_palManipIntermediatePal = 0; // Will allocate when needed
|
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
itemsize = _fileHandle->readUint32LE();
|
itemsize = _fileHandle->readUint32LE();
|
||||||
|
@ -165,7 +161,6 @@ void ScummEngine_v4::readMAXS(int blockSize) {
|
||||||
_shadowPaletteSize = 256;
|
_shadowPaletteSize = 256;
|
||||||
|
|
||||||
_shadowPalette = (byte *) calloc(_shadowPaletteSize, 1); // FIXME - needs to be removed later
|
_shadowPalette = (byte *) calloc(_shadowPaletteSize, 1); // FIXME - needs to be removed later
|
||||||
allocateArrays();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScummEngine_v4::readGlobalObjects() {
|
void ScummEngine_v4::readGlobalObjects() {
|
||||||
|
|
|
@ -1686,8 +1686,6 @@ void ScummEngine_v99he::readMAXS(int blockSize) {
|
||||||
|
|
||||||
_objectRoomTable = (byte *)calloc(_numGlobalObjects, 1);
|
_objectRoomTable = (byte *)calloc(_numGlobalObjects, 1);
|
||||||
_numGlobalScripts = 2048;
|
_numGlobalScripts = 2048;
|
||||||
|
|
||||||
allocateArrays();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScummEngine_v90he::readMAXS(int blockSize) {
|
void ScummEngine_v90he::readMAXS(int blockSize) {
|
||||||
|
@ -1719,8 +1717,6 @@ void ScummEngine_v90he::readMAXS(int blockSize) {
|
||||||
_numGlobalScripts = 2048;
|
_numGlobalScripts = 2048;
|
||||||
else
|
else
|
||||||
_numGlobalScripts = 200;
|
_numGlobalScripts = 200;
|
||||||
|
|
||||||
allocateArrays();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScummEngine_v72he::readMAXS(int blockSize) {
|
void ScummEngine_v72he::readMAXS(int blockSize) {
|
||||||
|
@ -1746,8 +1742,6 @@ void ScummEngine_v72he::readMAXS(int blockSize) {
|
||||||
|
|
||||||
_objectRoomTable = (byte *)calloc(_numGlobalObjects, 1);
|
_objectRoomTable = (byte *)calloc(_numGlobalObjects, 1);
|
||||||
_numGlobalScripts = 200;
|
_numGlobalScripts = 200;
|
||||||
|
|
||||||
allocateArrays();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
byte *ScummEngine_v72he::getStringAddress(int i) {
|
byte *ScummEngine_v72he::getStringAddress(int i) {
|
||||||
|
|
|
@ -1170,6 +1170,9 @@ ScummEngine::~ScummEngine() {
|
||||||
|
|
||||||
free(_shadowPalette);
|
free(_shadowPalette);
|
||||||
|
|
||||||
|
free(_palManipPalette);
|
||||||
|
free(_palManipIntermediatePal);
|
||||||
|
|
||||||
res.freeResources();
|
res.freeResources();
|
||||||
if (_heversion >= 70) {
|
if (_heversion >= 70) {
|
||||||
free(_heV7RoomIntOffsets);
|
free(_heV7RoomIntOffsets);
|
||||||
|
@ -1403,6 +1406,8 @@ void ScummEngine::scummInit() {
|
||||||
initScreens(16, 144);
|
initScreens(16, 144);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_palManipCounter = 0;
|
||||||
|
|
||||||
for (i = 0; i < 256; i++)
|
for (i = 0; i < 256; i++)
|
||||||
_roomPalette[i] = i;
|
_roomPalette[i] = i;
|
||||||
if (_version == 1) {
|
if (_version == 1) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue