aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/access/access.cpp34
-rw-r--r--engines/access/access.h8
-rw-r--r--engines/access/files.cpp4
-rw-r--r--engines/access/files.h5
4 files changed, 46 insertions, 5 deletions
diff --git a/engines/access/access.cpp b/engines/access/access.cpp
index 4035870dad..e90e5bad22 100644
--- a/engines/access/access.cpp
+++ b/engines/access/access.cpp
@@ -83,6 +83,7 @@ AccessEngine::AccessEngine(OSystem *syst, const AccessGameDescription *gameDesc)
_establishFlag = false;
_establishMode = 0;
_establishGroup = 0;
+ _establishCtrlTblOfs = 0;
Common::fill(&_help1[0], &_help1[366], 0);
Common::fill(&_help2[0], &_help2[366], 0);
Common::fill(&_help1[0], &_help3[366], 0);
@@ -102,6 +103,9 @@ AccessEngine::AccessEngine(OSystem *syst, const AccessGameDescription *gameDesc)
_screenVirtX = 0;
_lastTime = g_system->getMillis();
_curTime = 0;
+ _narateFile = 0;
+ _txtPages = 0;
+ _sndSubFile = 0;
}
AccessEngine::~AccessEngine() {
@@ -233,9 +237,31 @@ void AccessEngine::establishCenter(int esatabIndex, int sub) {
doEstablish(esatabIndex, sub);
}
-byte *AccessEngine::loadEstablish(int sub) {
- warning("TODO: loadEstablish");
- return nullptr;
+const char *const _estTable[] = { "ETEXT0.DAT", "ETEXT1.DAT", "ETEXT2.DAT", "ETEXT3.DAT" };
+
+void AccessEngine::loadEstablish(int sub) {
+ if (!_files->existFile("ETEXT.DAT")) {
+ int oldGroup = _establishGroup;
+ _establishGroup = 0;
+
+ _eseg = _files->loadFile(_estTable[oldGroup]);
+ } else {
+ _eseg = _files->loadFile("ETEXT.DAT");
+ }
+
+ _establishCtrlTblOfs = READ_LE_UINT16(_eseg);
+
+ int ofs = _establishCtrlTblOfs + (sub * 2);
+ int idx = READ_LE_UINT16(_eseg + ofs);
+ _narateFile = READ_LE_UINT16(_eseg + idx);
+ _txtPages = READ_LE_UINT16(_eseg + idx + 2);
+
+ if (!_txtPages)
+ return;
+
+ _sndSubFile = READ_LE_UINT16(_eseg + idx + 4);
+ for (int i = 0; i < _txtPages; ++i)
+ _countTbl[i] = READ_LE_UINT16(_eseg + idx + 6 + (2 * i));
}
void AccessEngine::doEstablish(int esatabIndex, int sub) {
@@ -260,7 +286,7 @@ void AccessEngine::doEstablish(int esatabIndex, int sub) {
_bubbleBox->_maxChars = 37;
_fonts._printOrg = _fonts._printStart = Common::Point(48, 35);
- _eseg = loadEstablish(sub);
+ loadEstablish(sub);
_et = sub;
warning("CHECKME: Use of di");
_printEnd = 155;
diff --git a/engines/access/access.h b/engines/access/access.h
index 0d4ad19452..db969357aa 100644
--- a/engines/access/access.h
+++ b/engines/access/access.h
@@ -73,6 +73,8 @@ enum AccessDebugChannels {
struct AccessGameDescription;
+extern const char *const _estTable[];
+
class AccessEngine : public Engine {
private:
uint32 _lastTime, _curTime;
@@ -132,6 +134,7 @@ public:
bool _establishFlag;
int _establishMode;
int _establishGroup;
+ int _establishCtrlTblOfs;
int _numAnimTimers;
TimerList _timers;
FontManager _fonts;
@@ -164,6 +167,9 @@ public:
int _et;
int _printEnd;
int _txtPages;
+ int _narateFile;
+ int _sndSubFile;
+ int _countTbl[6];
// Fields that are included in savegames
int _conversation;
@@ -220,7 +226,7 @@ public:
*/
void freeInactiveData();
- byte *AccessEngine::loadEstablish(int sub);
+ void AccessEngine::loadEstablish(int sub);
void establish(int esatabIndex, int sub);
diff --git a/engines/access/files.cpp b/engines/access/files.cpp
index c805121d50..da3842492c 100644
--- a/engines/access/files.cpp
+++ b/engines/access/files.cpp
@@ -82,6 +82,10 @@ byte *FileManager::loadFile(const Common::String &filename) {
return handleFile();
}
+bool FileManager::existFile(const Common::String &filename) {
+ return _file.exists(filename);
+}
+
void FileManager::openFile(const Common::String &filename) {
// Open up the file
_fileNumber = -1;
diff --git a/engines/access/files.h b/engines/access/files.h
index 38d9179195..b91da7d6ff 100644
--- a/engines/access/files.h
+++ b/engines/access/files.h
@@ -64,6 +64,11 @@ public:
~FileManager();
/**
+ * Check the existence of a given file
+ */
+ bool FileManager::existFile(const Common::String &filename);
+
+ /**
* Load a given subfile from a container file
*/
byte *loadFile(int fileNum, int subfile);