[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