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:
Max Horn 2005-04-10 00:51:47 +00:00
parent 78f2f279c4
commit cfe85b8618
7 changed files with 25 additions and 43 deletions

View file

@ -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);

View file

@ -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() {

View file

@ -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()");

View file

@ -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();

View file

@ -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() {

View file

@ -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) {

View file

@ -1169,6 +1169,9 @@ ScummEngine::~ScummEngine() {
delete _costumeRenderer; delete _costumeRenderer;
free(_shadowPalette); free(_shadowPalette);
free(_palManipPalette);
free(_palManipIntermediatePal);
res.freeResources(); res.freeResources();
if (_heversion >= 70) { if (_heversion >= 70) {
@ -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) {