diff options
Diffstat (limited to 'engines/hugo/file_v3d.cpp')
-rw-r--r-- | engines/hugo/file_v3d.cpp | 49 |
1 files changed, 30 insertions, 19 deletions
diff --git a/engines/hugo/file_v3d.cpp b/engines/hugo/file_v3d.cpp index e4809a7208..e98b4cc013 100644 --- a/engines/hugo/file_v3d.cpp +++ b/engines/hugo/file_v3d.cpp @@ -39,18 +39,20 @@ #include "hugo/util.h" namespace Hugo { -FileManager_v3d::FileManager_v3d(HugoEngine &vm) : FileManager_v2d(vm) { +FileManager_v3d::FileManager_v3d(HugoEngine *vm) : FileManager_v2d(vm) { } FileManager_v3d::~FileManager_v3d() { } +/** +* Read a PCX image into dib_a +*/ void FileManager_v3d::readBackground(int screenIndex) { -// Read a PCX image into dib_a debugC(1, kDebugFile, "readBackground(%d)", screenIndex); _sceneryArchive1.seek((uint32) screenIndex * sizeof(sceneBlock_t), SEEK_SET); - + sceneBlock_t sceneBlock; // Read a database header entry sceneBlock.scene_off = _sceneryArchive1.readUint32LE(); sceneBlock.scene_len = _sceneryArchive1.readUint32LE(); @@ -61,31 +63,38 @@ void FileManager_v3d::readBackground(int screenIndex) { sceneBlock.ob_off = _sceneryArchive1.readUint32LE(); sceneBlock.ob_len = _sceneryArchive1.readUint32LE(); - seq_t dummySeq; // Image sequence structure for Read_pcx + seq_t *dummySeq; // Image sequence structure for Read_pcx if (screenIndex < 20) { _sceneryArchive1.seek(sceneBlock.scene_off, SEEK_SET); // Read the image into dummy seq and static dib_a - readPCX(_sceneryArchive1, &dummySeq, _vm.screen().getFrontBuffer(), true, _vm._screenNames[screenIndex]); + dummySeq = readPCX(_sceneryArchive1, 0, _vm->_screen->getFrontBuffer(), true, _vm->_screenNames[screenIndex]); } else { _sceneryArchive2.seek(sceneBlock.scene_off, SEEK_SET); // Read the image into dummy seq and static dib_a - readPCX(_sceneryArchive2, &dummySeq, _vm.screen().getFrontBuffer(), true, _vm._screenNames[screenIndex]); + dummySeq = readPCX(_sceneryArchive2, 0, _vm->_screen->getFrontBuffer(), true, _vm->_screenNames[screenIndex]); } + free(dummySeq); } +/** +* Open "database" file (packed files) +*/ void FileManager_v3d::openDatabaseFiles() { debugC(1, kDebugFile, "openDatabaseFiles"); if (!_stringArchive.open(STRING_FILE)) - Utils::Error(FILE_ERR, "%s", STRING_FILE); + error("File not found: %s", STRING_FILE); if (!_sceneryArchive1.open("scenery1.dat")) - Utils::Error(FILE_ERR, "%s", "scenery1.dat"); + error("File not found: scenery1.dat"); if (!_sceneryArchive2.open("scenery2.dat")) - Utils::Error(FILE_ERR, "%s", "scenery2.dat"); + error("File not found: scenery2.dat"); if (!_objectsArchive.open(OBJECTS_FILE)) - Utils::Error(FILE_ERR, "%s", OBJECTS_FILE); + error("File not found: %s", OBJECTS_FILE); } +/** +* Close "Database" files +*/ void FileManager_v3d::closeDatabaseFiles() { debugC(1, kDebugFile, "closeDatabaseFiles"); @@ -95,13 +104,15 @@ void FileManager_v3d::closeDatabaseFiles() { _objectsArchive.close(); } +/** +* Open and read in an overlay file, close file +*/ void FileManager_v3d::readOverlay(int screenNum, image_pt image, ovl_t overlayType) { -// Open and read in an overlay file, close file debugC(1, kDebugFile, "readOverlay(%d, ...)", screenNum); image_pt tmpImage = image; // temp ptr to overlay file _sceneryArchive1.seek((uint32)screenNum * sizeof(sceneBlock_t), SEEK_SET); - + sceneBlock_t sceneBlock; // Database header entry sceneBlock.scene_off = _sceneryArchive1.readUint32LE(); sceneBlock.scene_len = _sceneryArchive1.readUint32LE(); @@ -113,7 +124,7 @@ void FileManager_v3d::readOverlay(int screenNum, image_pt image, ovl_t overlayTy sceneBlock.ob_len = _sceneryArchive1.readUint32LE(); uint32 i = 0; - + if (screenNum < 20) { switch (overlayType) { case BOUNDARY: @@ -129,7 +140,7 @@ void FileManager_v3d::readOverlay(int screenNum, image_pt image, ovl_t overlayTy i = sceneBlock.ob_len; break; default: - Utils::Error(FILE_ERR, "%s", "Bad ovl_type"); + error("Bad overlayType: %d", overlayType); break; } if (i == 0) { @@ -137,7 +148,7 @@ void FileManager_v3d::readOverlay(int screenNum, image_pt image, ovl_t overlayTy image[i] = 0; return; } - + // Read in the overlay file using MAC Packbits. (We're not proud!) int16 k = 0; // byte count do { @@ -149,7 +160,7 @@ void FileManager_v3d::readOverlay(int screenNum, image_pt image, ovl_t overlayTy *tmpImage++ = _sceneryArchive1.readByte(); } else { // Repeat next byte -data+1 times int16 j = _sceneryArchive1.readByte(); - + for (i = 0; i < (byte)(-data + 1); i++, k++) *tmpImage++ = j; } @@ -169,7 +180,7 @@ void FileManager_v3d::readOverlay(int screenNum, image_pt image, ovl_t overlayTy i = sceneBlock.ob_len; break; default: - Utils::Error(FILE_ERR, "%s", "Bad ovl_type"); + error("Bad overlayType: %d", overlayType); break; } if (i == 0) { @@ -177,7 +188,7 @@ void FileManager_v3d::readOverlay(int screenNum, image_pt image, ovl_t overlayTy image[i] = 0; return; } - + // Read in the overlay file using MAC Packbits. (We're not proud!) int16 k = 0; // byte count do { @@ -189,7 +200,7 @@ void FileManager_v3d::readOverlay(int screenNum, image_pt image, ovl_t overlayTy *tmpImage++ = _sceneryArchive2.readByte(); } else { // Repeat next byte -data+1 times int16 j = _sceneryArchive2.readByte(); - + for (i = 0; i < (byte)(-data + 1); i++, k++) *tmpImage++ = j; } |