diff options
author | Strangerke | 2014-08-23 23:49:08 +0200 |
---|---|---|
committer | Strangerke | 2014-08-23 23:49:08 +0200 |
commit | 955df7a94ce21d311d6e34d263d96070548d855e (patch) | |
tree | 1dc8f00f8ce22693aa92f2d0a4ff718627d08cba /engines | |
parent | f98d4668d718b04713ebe9ed2abc41f8bcaed609 (diff) | |
download | scummvm-rg350-955df7a94ce21d311d6e34d263d96070548d855e.tar.gz scummvm-rg350-955df7a94ce21d311d6e34d263d96070548d855e.tar.bz2 scummvm-rg350-955df7a94ce21d311d6e34d263d96070548d855e.zip |
ACCESS: Start implementing loadEstablish
Diffstat (limited to 'engines')
-rw-r--r-- | engines/access/access.cpp | 34 | ||||
-rw-r--r-- | engines/access/access.h | 8 | ||||
-rw-r--r-- | engines/access/files.cpp | 4 | ||||
-rw-r--r-- | engines/access/files.h | 5 |
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); |