diff options
| -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); | 
