aboutsummaryrefslogtreecommitdiff
path: root/scumm/resource_v3.cpp
diff options
context:
space:
mode:
authorMax Horn2005-04-03 15:06:08 +0000
committerMax Horn2005-04-03 15:06:08 +0000
commitb507231f7135f0af2a27b047f1982685736e0e7b (patch)
tree433e1dca1aa39631e819bad11fd2a08aa0aa1dc8 /scumm/resource_v3.cpp
parentf63b35381b4b8e50cefb08103498dc195e38c29b (diff)
downloadscummvm-rg350-b507231f7135f0af2a27b047f1982685736e0e7b.tar.gz
scummvm-rg350-b507231f7135f0af2a27b047f1982685736e0e7b.tar.bz2
scummvm-rg350-b507231f7135f0af2a27b047f1982685736e0e7b.zip
ScummEngine_v4 used to be a subclass of ScummEngine_v3, now it is the other way around; added a new class ScummEngine_v3old, for GF_OLD_BUNDLE games; took advantage of the new inheritance structure and turned various methods into virtual methods which then are overriden in subclasses
svn-id: r17346
Diffstat (limited to 'scumm/resource_v3.cpp')
-rw-r--r--scumm/resource_v3.cpp211
1 files changed, 39 insertions, 172 deletions
diff --git a/scumm/resource_v3.cpp b/scumm/resource_v3.cpp
index 5a81c0820e..31a1f7a4e7 100644
--- a/scumm/resource_v3.cpp
+++ b/scumm/resource_v3.cpp
@@ -23,145 +23,48 @@
#include "stdafx.h"
#include "scumm/scumm.h"
#include "scumm/intern.h"
-#include "scumm/resource.h"
namespace Scumm {
-void ScummEngine_v3::readIndexFile() {
- if (_features & GF_OLD_BUNDLE) {
- int magic = 0;
- debug(9, "readIndexFile()");
-
- closeRoom();
- openRoom(0);
-
- magic = _fileHandle->readUint16LE();
- if (magic != 0x0100)
- warning("The magic id doesn't match (0x%X)", magic);
-
- _numGlobalObjects = _fileHandle->readUint16LE();
- _fileHandle->seek(_numGlobalObjects * 4, SEEK_CUR);
- _numRooms = _fileHandle->readByte();
- _fileHandle->seek(_numRooms * 3, SEEK_CUR);
- _numCostumes = _fileHandle->readByte();
- _fileHandle->seek(_numCostumes * 3, SEEK_CUR);
- _numScripts = _fileHandle->readByte();
- _fileHandle->seek(_numScripts * 3, SEEK_CUR);
- _numSounds = _fileHandle->readByte();
-
- _fileHandle->clearIOFailed();
- _fileHandle->seek(0, SEEK_SET);
-
- readMAXS();
-
- // Jamieson630: palManipulate variable initialization
- _palManipCounter = 0;
- _palManipPalette = 0; // Will allocate when needed
- _palManipIntermediatePal = 0; // Will allocate when needed
-
- _fileHandle->readUint16LE(); /* version magic number */
- readGlobalObjects();
- readResTypeList(rtRoom, MKID('ROOM'), "room");
- readResTypeList(rtCostume, MKID('COST'), "costume");
- readResTypeList(rtScript, MKID('SCRP'), "script");
- readResTypeList(rtSound, MKID('SOUN'), "sound");
-
- closeRoom();
- } else {
- uint16 blocktype;
- uint32 itemsize;
- int numblock = 0;
-
- debug(9, "readIndexFile()");
-
- closeRoom();
- openRoom(0);
-
- while (!_fileHandle->eof()) {
- itemsize = _fileHandle->readUint32LE();
- blocktype = _fileHandle->readUint16LE();
- if (_fileHandle->ioFailed())
- break;
-
- switch (blocktype) {
- case 0x4E52: // 'NR'
- _fileHandle->readUint16LE();
- break;
- case 0x5230: // 'R0'
- _numRooms = _fileHandle->readUint16LE();
- break;
- case 0x5330: // 'S0'
- _numScripts = _fileHandle->readUint16LE();
- break;
- case 0x4E30: // 'N0'
- _numSounds = _fileHandle->readUint16LE();
- break;
- case 0x4330: // 'C0'
- _numCostumes = _fileHandle->readUint16LE();
- break;
- case 0x4F30: // 'O0'
- _numGlobalObjects = _fileHandle->readUint16LE();
- break;
- }
- _fileHandle->seek(itemsize - 8, SEEK_CUR);
- }
-
- _fileHandle->clearIOFailed();
- _fileHandle->seek(0, SEEK_SET);
-
- readMAXS();
-
- // Jamieson630: palManipulate variable initialization
- _palManipCounter = 0;
- _palManipPalette = 0; // Will allocate when needed
- _palManipIntermediatePal = 0; // Will allocate when needed
-
- while (1) {
- itemsize = _fileHandle->readUint32LE();
-
- if (_fileHandle->ioFailed())
- break;
-
- blocktype = _fileHandle->readUint16LE();
-
- numblock++;
-
- switch (blocktype) {
-
- case 0x4E52: // 'NR'
- _fileHandle->seek(itemsize - 6, SEEK_CUR);
- break;
-
- case 0x5230: // 'R0'
- readResTypeList(rtRoom, MKID('ROOM'), "room");
- break;
-
- case 0x5330: // 'S0'
- readResTypeList(rtScript, MKID('SCRP'), "script");
- break;
-
- case 0x4E30: // 'N0'
- readResTypeList(rtSound, MKID('SOUN'), "sound");
- break;
-
- case 0x4330: // 'C0'
- readResTypeList(rtCostume, MKID('COST'), "costume");
- break;
-
- case 0x4F30: // 'O0'
- readGlobalObjects();
- break;
-
- default:
- // FIXME: this is a little hack because Indy3 FM-TOWNS has
- // 32 extra bytes of unknown meaning appended to 00.LFL
- if (!(_gameId == GID_INDY3 && _features & GF_FMTOWNS))
- error("Bad ID %c%c found in directory!", blocktype & 0xFF, blocktype >> 8);
- return;
- }
- }
- closeRoom();
- }
+void ScummEngine_v3old::readIndexFile() {
+ int magic = 0;
+ debug(9, "readIndexFile()");
+
+ closeRoom();
+ openRoom(0);
+
+ magic = _fileHandle->readUint16LE();
+ if (magic != 0x0100)
+ warning("The magic id doesn't match (0x%X)", magic);
+
+ _numGlobalObjects = _fileHandle->readUint16LE();
+ _fileHandle->seek(_numGlobalObjects * 4, SEEK_CUR);
+ _numRooms = _fileHandle->readByte();
+ _fileHandle->seek(_numRooms * 3, SEEK_CUR);
+ _numCostumes = _fileHandle->readByte();
+ _fileHandle->seek(_numCostumes * 3, SEEK_CUR);
+ _numScripts = _fileHandle->readByte();
+ _fileHandle->seek(_numScripts * 3, SEEK_CUR);
+ _numSounds = _fileHandle->readByte();
+
+ _fileHandle->clearIOFailed();
+ _fileHandle->seek(0, SEEK_SET);
+
+ readMAXS();
+
+ // Jamieson630: palManipulate variable initialization
+ _palManipCounter = 0;
+ _palManipPalette = 0; // Will allocate when needed
+ _palManipIntermediatePal = 0; // Will allocate when needed
+
+ _fileHandle->readUint16LE(); /* version magic number */
+ readGlobalObjects();
+ readResTypeList(rtRoom, MKID('ROOM'), "room");
+ readResTypeList(rtCostume, MKID('COST'), "costume");
+ readResTypeList(rtScript, MKID('SCRP'), "script");
+ readResTypeList(rtSound, MKID('SOUN'), "sound");
+
+ closeRoom();
}
void ScummEngine_v3::loadCharset(int no) {
@@ -191,40 +94,4 @@ void ScummEngine_v3::loadCharset(int no) {
file.close();
}
-void ScummEngine_v3::readMAXS() {
- // FIXME - I'm not sure for those values yet, they will have to be rechecked
-
- _numVariables = 800; // 800
- _numBitVariables = 4096; // 2048
- _numLocalObjects = 200; // 200
- _numArray = 50;
- _numVerbs = 100;
- _numNewNames = 50;
- _objectRoomTable = NULL;
- _numCharsets = 9; // 9
- _numInventory = 80; // 80
- _numGlobalScripts = 200;
- _numFlObject = 50;
-
- _shadowPaletteSize = 256;
-
- _shadowPalette = (byte *) calloc(_shadowPaletteSize, 1); // FIXME - needs to be removed later
- allocateArrays();
-}
-
-void ScummEngine_v3::readGlobalObjects() {
- int num = _fileHandle->readUint16LE();
- assert(num == _numGlobalObjects);
- for (int i = 0; i != num; i++) {
- uint32 bits = _fileHandle->readByte();
- byte tmp;
- bits |= _fileHandle->readByte() << 8;
- bits |= _fileHandle->readByte() << 16;
- _classData[i] = bits;
- tmp = _fileHandle->readByte();
- _objectOwnerTable[i] = tmp & OF_OWNER_MASK;
- _objectStateTable[i] = tmp >> OF_STATE_SHL;
- }
-}
-
} // End of namespace Scumm