[Scummvm-git-logs] scummvm master -> 36cf36ba130484e5fb81b4ae622b9165b79310b0

yuv422 yuv422 at users.noreply.github.com
Tue Aug 25 22:29:46 UTC 2020


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
36cf36ba13 DRAGONS: Fixed bug where all files weren't accessible to DE and FR versions


Commit: 36cf36ba130484e5fb81b4ae622b9165b79310b0
    https://github.com/scummvm/scummvm/commit/36cf36ba130484e5fb81b4ae622b9165b79310b0
Author: Eric Fry (yuv422 at users.noreply.github.com)
Date: 2020-08-26T08:28:04+10:00

Commit Message:
DRAGONS: Fixed bug where all files weren't accessible to DE and FR versions

Changed paths:
    engines/dragons/bigfile.cpp
    engines/dragons/bigfile.h
    engines/dragons/dragons.cpp
    engines/dragons/dragons.h


diff --git a/engines/dragons/bigfile.cpp b/engines/dragons/bigfile.cpp
index 91492bd0db..c04eceac82 100644
--- a/engines/dragons/bigfile.cpp
+++ b/engines/dragons/bigfile.cpp
@@ -25,21 +25,24 @@
 namespace Dragons {
 
 uint32 BigfileArchive::getResourceId(const char *filename) {
-	for (uint32 i = 0; i < DRAGONS_BIGFILE_TOTAL_FILES; i++) {
+	for (uint32 i = 0; i < _totalRecords; i++) {
 		if (scumm_stricmp(_fileInfoTbl[i].filename.c_str(), filename) == 0) {
 			return i;
 		}
 	}
 
-	return DRAGONS_BIGFILE_TOTAL_FILES;
+	return _totalRecords;
 }
 
-BigfileArchive::BigfileArchive(DragonsEngine *vm, const char *filename) :_vm(vm), _fd(0) {
+BigfileArchive::BigfileArchive(DragonsEngine *vm, const char *filename) :_vm(vm), _fd(nullptr) {
 	_fd = new Common::File();
 	if (!_fd->open(filename)) {
 		error("BigfileArchive::BigfileArchive() Could not open %s", filename);
 	}
 
+	_totalRecords = _vm->getBigFileTotalRecords();
+	_fileInfoTbl.resize(_totalRecords);
+
 	loadFileInfoTbl();
 }
 
@@ -57,7 +60,7 @@ void BigfileArchive::loadFileInfoTbl() {
 
 	fd.seek(_vm->getBigFileInfoTblFromDragonEXE());
 
-	for (int i = 0; i < DRAGONS_BIGFILE_TOTAL_FILES; i++) {
+	for (int i = 0; i < _totalRecords; i++) {
 		fd.read(filename, 16);
 		filename[15] = 0;
 		_fileInfoTbl[i].filename = filename;
@@ -69,7 +72,7 @@ void BigfileArchive::loadFileInfoTbl() {
 
 byte *BigfileArchive::load(const char *filename, uint32 &dataSize) {
 	uint32 id = getResourceId(filename);
-	if (id >= DRAGONS_BIGFILE_TOTAL_FILES) {
+	if (id >= _totalRecords) {
 		error("Invalid resourceID for input filename: %s", filename);
 	}
 
@@ -85,7 +88,7 @@ byte *BigfileArchive::load(const char *filename, uint32 &dataSize) {
 
 bool BigfileArchive::doesFileExist(const char *filename) {
 	uint32 id = getResourceId(filename);
-	return (id < DRAGONS_BIGFILE_TOTAL_FILES);
+	return (id < _totalRecords);
 }
 
 
diff --git a/engines/dragons/bigfile.h b/engines/dragons/bigfile.h
index 867bcc876c..a192ca0d78 100644
--- a/engines/dragons/bigfile.h
+++ b/engines/dragons/bigfile.h
@@ -22,14 +22,13 @@
 #ifndef DRAGONS_BIGFILE_H
 #define DRAGONS_BIGFILE_H
 
+#include "common/array.h"
 #include "common/file.h"
 
 namespace Dragons {
 
 class DragonsEngine;
 
-#define DRAGONS_BIGFILE_TOTAL_FILES 576
-
 struct FileInfo {
 	Common::String filename;
 	uint32 offset;
@@ -45,7 +44,8 @@ class BigfileArchive {
 private:
 	DragonsEngine *_vm;
 	Common::File *_fd;
-	FileInfo _fileInfoTbl[DRAGONS_BIGFILE_TOTAL_FILES];
+	uint16 _totalRecords;
+	Common::Array<FileInfo> _fileInfoTbl;
 
 public:
 	BigfileArchive(DragonsEngine *vm, const char *filename);
diff --git a/engines/dragons/dragons.cpp b/engines/dragons/dragons.cpp
index b9e906d7c5..bc7dedf0cf 100644
--- a/engines/dragons/dragons.cpp
+++ b/engines/dragons/dragons.cpp
@@ -1480,6 +1480,13 @@ uint32 DragonsEngine::getSpeechTblOffsetFromDragonEXE() {
 	}
 }
 
+uint16 DragonsEngine::getBigFileTotalRecords() {
+	if (_language == Common::EN_USA || _language == Common::EN_GRB) {
+		return 576;
+	}
+	return 588;
+}
+
 uint32 DragonsEngine::getBigFileInfoTblFromDragonEXE() {
 	switch (_language) {
 	case Common::EN_USA : return 0x4a238;
diff --git a/engines/dragons/dragons.h b/engines/dragons/dragons.h
index 6048e33c42..8ba7f5da6b 100644
--- a/engines/dragons/dragons.h
+++ b/engines/dragons/dragons.h
@@ -327,6 +327,7 @@ public:
 	void clearAllText();
 
 	//TODO this logic should probably go in its own class.
+	uint16 getBigFileTotalRecords();
 	uint32 getBigFileInfoTblFromDragonEXE();
 	uint32 getFontOffsetFromDragonEXE();
 	uint32 getSpeechTblOffsetFromDragonEXE();




More information about the Scummvm-git-logs mailing list