aboutsummaryrefslogtreecommitdiff
path: root/engines/hugo/file_v3d.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/hugo/file_v3d.cpp')
-rw-r--r--engines/hugo/file_v3d.cpp49
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;
}