diff options
author | Paul Gilbert | 2014-08-23 13:13:56 -0400 |
---|---|---|
committer | Paul Gilbert | 2014-08-23 13:13:56 -0400 |
commit | 31c8a524a35c19291bbd7bed3d117791a90c7401 (patch) | |
tree | 2ae6be87eef895555894f634f883380db11d654f /engines/access | |
parent | 7aa2c7fe5cca8eaa9c68c471cef4595b99021206 (diff) | |
download | scummvm-rg350-31c8a524a35c19291bbd7bed3d117791a90c7401.tar.gz scummvm-rg350-31c8a524a35c19291bbd7bed3d117791a90c7401.tar.bz2 scummvm-rg350-31c8a524a35c19291bbd7bed3d117791a90c7401.zip |
ACCESS: More implementation of CharManager
Diffstat (limited to 'engines/access')
-rw-r--r-- | engines/access/access.cpp | 25 | ||||
-rw-r--r-- | engines/access/access.h | 11 | ||||
-rw-r--r-- | engines/access/char.cpp | 67 | ||||
-rw-r--r-- | engines/access/char.h | 11 | ||||
-rw-r--r-- | engines/access/room.cpp | 37 | ||||
-rw-r--r-- | engines/access/room.h | 2 | ||||
-rw-r--r-- | engines/access/screen.h | 5 | ||||
-rw-r--r-- | engines/access/scripts.cpp | 2 |
8 files changed, 115 insertions, 45 deletions
diff --git a/engines/access/access.cpp b/engines/access/access.cpp index c84ac8b28d..0718fd697e 100644 --- a/engines/access/access.cpp +++ b/engines/access/access.cpp @@ -62,7 +62,6 @@ AccessEngine::AccessEngine(OSystem *syst, const AccessGameDescription *gameDesc) _startup = 0; _currentCharFlag = false; _boxSelect = false; - _charFlag = 0; _scale = 0; _scaleH1 = _scaleH2 = 0; _scaleN1 = 0; @@ -78,7 +77,7 @@ AccessEngine::AccessEngine(OSystem *syst, const AccessGameDescription *gameDesc) _intTim[3] = 0; _timer[3] = 0; Common::fill(&_objectsTable[0], &_objectsTable[100], (SpriteResource *)nullptr); - Common::fill(&_establishTable[0], &_establishTable[100], 0); + Common::fill(&_establishTable[0], &_establishTable[100], false); Common::fill(&_flags[0], &_flags[256], 0); _establishFlag = false; _establishMode = 0; @@ -220,15 +219,15 @@ void AccessEngine::freeInactiveData() { _inactive = nullptr; } -void AccessEngine::establish(int v1, int sub) { +void AccessEngine::establish(int esatabIndex, int sub) { _establishMode = 0; _establishGroup = 0; - doEstablish(v1, sub); + doEstablish(esatabIndex, sub); } -void AccessEngine::establishCenter(int v1, int sub) { +void AccessEngine::establishCenter(int esatabIndex, int sub) { _establishMode = 1; - doEstablish(v1, sub); + doEstablish(esatabIndex, sub); } byte *AccessEngine::loadEstablish(int sub) { @@ -236,17 +235,19 @@ byte *AccessEngine::loadEstablish(int sub) { return nullptr; } -void AccessEngine::doEstablish(int v1, int sub) { +void AccessEngine::doEstablish(int esatabIndex, int sub) { + _establishMode = 1; + _screen->forceFadeOut(); _screen->clearScreen(); _screen->setPanel(3); - if (v1 != -1) { - _files->loadScreen(95, v1); + if (esatabIndex != -1) { + _files->loadScreen(95, esatabIndex); _buffer2.copyBuffer(_screen); } - _room->setIconPalette(); + _screen->setIconPalette(); _screen->forceFadeIn(); _fonts._charSet._lo = 1; @@ -374,8 +375,4 @@ void AccessEngine::freeChar() { _animation->freeAnimationData(); } -void AccessEngine::loadChar(int charId) { - -} - } // End of namespace Access diff --git a/engines/access/access.h b/engines/access/access.h index 974277280c..2e2358f268 100644 --- a/engines/access/access.h +++ b/engines/access/access.h @@ -88,7 +88,7 @@ private: void dummyLoop(); - void doEstablish(int v1, int sub); + void doEstablish(int esatabIndex, int sub); protected: const AccessGameDescription *_gameDescription; Common::RandomSource _randomSource; @@ -126,7 +126,7 @@ public: ASurface _buffer2; Common::Array<CharEntry *> _charTable; SpriteResource *_objectsTable[100]; - int _establishTable[100]; + bool _establishTable[100]; bool _establishFlag; int _establishMode; int _establishGroup; @@ -150,7 +150,6 @@ public: int _startTravelBox; bool _currentCharFlag; bool _boxSelect; - int _charFlag; int _scale; int _scaleH1, _scaleH2; int _scaleN1; @@ -221,9 +220,9 @@ public: byte *AccessEngine::loadEstablish(int sub); - void establish(int v1, int sub); + void establish(int esatabIndex, int sub); - void establishCenter(int v1, int sub); + void establishCenter(int esatabIndex, int sub); void plotList(); void plotList1(); @@ -239,8 +238,6 @@ public: void doLoadSave(); void freeChar(); - - void loadChar(int charId); }; } // End of namespace Access diff --git a/engines/access/char.cpp b/engines/access/char.cpp index a01643b651..40f3bf376a 100644 --- a/engines/access/char.cpp +++ b/engines/access/char.cpp @@ -31,7 +31,7 @@ CharEntry::CharEntry(const byte *data) { Common::MemoryReadStream s(data, 999); _charFlag = s.readByte(); - _estabFlag = s.readSint16LE(); + _estabIndex = s.readSint16LE(); _screenFile._fileNum = s.readSint16LE(); _screenFile._subfile = s.readSint16LE(); @@ -68,7 +68,7 @@ CharEntry::CharEntry(const byte *data) { CharEntry::CharEntry() { _charFlag = 0; - _estabFlag = 0; + _estabIndex = 0; _startColor = _numColors = 0; } @@ -84,6 +84,69 @@ CharManager::CharManager(AccessEngine *vm) : Manager(vm) { default: error("Unknown game"); } + + _charFlag = 0; +} + +void CharManager::loadChar(int charId) { + CharEntry &ce = _charTable[charId]; + _charFlag = ce._charFlag; + + _vm->_establishFlag = false; + if (ce._estabIndex != -1) { + _vm->_establishFlag = true; + if (!_vm->_establishTable[ce._estabIndex]) { + _vm->_establishTable[ce._estabIndex] = true; + _vm->establish(ce._estabIndex, 0); + } + } + + if (_charFlag != 0 && _charFlag != 3) { + if (!_vm->_establishFlag) + _vm->_screen->fadeOut(); + + _vm->_files->loadScreen(ce._screenFile._fileNum, ce._screenFile._subfile); + _vm->_screen->setIconPalette(); + _vm->_screen->fadeIn(); + } + + _vm->_buffer1.copyFrom(*_vm->_screen); + _vm->_screen->copyFrom(_vm->_buffer2); + _vm->_screen->setDisplayScan(); + + if (_charFlag != 2 && _charFlag != 3) { + charMenu(); + } + + _vm->_screen->_startColor = ce._startColor; + _vm->_screen->_numColors = ce._numColors; + if (ce._paletteFile._fileNum != -1) { + _vm->_screen->loadPalette(ce._paletteFile._fileNum, ce._paletteFile._subfile); + } + _vm->_screen->setIconPalette(); + _vm->_screen->setPalette(); + + _vm->loadCells(ce._cells); + if (ce._animFile._fileNum != -1) { + byte *data = _vm->_files->loadFile(ce._animFile._fileNum, ce._animFile._subfile); + _vm->_animation->loadAnimations(data, _vm->_files->_filesize); + } + + // Load script data + _vm->_scripts->freeScriptData(); + if (ce._scriptFile._fileNum != -1) { + const byte *data = _vm->_files->loadFile(ce._scriptFile._fileNum, ce._scriptFile._subfile); + _vm->_scripts->setScript(data, _vm->_files->_filesize); + } + + // Load extra cells + _vm->_extraCells.clear(); + for (uint i = 0; i < ce._extraCells.size(); ++i) + _vm->_extraCells.push_back(ce._extraCells[i]); +} + +void CharManager::charMenu() { + error("TODO: charMenu"); } } // End of namespace Access diff --git a/engines/access/char.h b/engines/access/char.h index 8d6c49d47a..4bd38d7c6d 100644 --- a/engines/access/char.h +++ b/engines/access/char.h @@ -32,7 +32,7 @@ namespace Access { class CharEntry { public: int _charFlag; - int _estabFlag; + int _estabIndex; FileIdent _screenFile; FileIdent _paletteFile; int _startColor, _numColors; @@ -47,10 +47,19 @@ public: }; class CharManager: public Manager { +private: + void charMenu(); public: Common::Array<CharEntry> _charTable; + int _converseMode; + int _charFlag; + + // Fields that are included in savegames + int _conversation; public: CharManager(AccessEngine *vm); + + void loadChar(int charId); }; } // End of namespace Access diff --git a/engines/access/room.cpp b/engines/access/room.cpp index d703114090..3ff4d66337 100644 --- a/engines/access/room.cpp +++ b/engines/access/room.cpp @@ -241,39 +241,40 @@ void Room::roomLoop() { } void Room::setupRoom() { - _vm->_screen->setScaleTable(_vm->_scale); - _vm->_screen->setBufferScan(); + Screen &screen = *_vm->_screen; + screen.setScaleTable(_vm->_scale); + screen.setBufferScan(); if (_roomFlag != 2) - setIconPalette(); + screen.setIconPalette(); - if (_vm->_screen->_vWindowWidth == _playFieldWidth) { - _vm->_screen->_scrollX = 0; - _vm->_screen->_scrollCol = 0; + if (screen._vWindowWidth == _playFieldWidth) { + screen._scrollX = 0; + screen._scrollCol = 0; } else { int xv = _vm->_player->_rawPlayer.x / TILE_WIDTH; - _vm->_screen->_scrollX = _vm->_player->_rawPlayer.x % TILE_WIDTH; - _vm->_screen->_scrollCol = MAX(xv - (_vm->_screen->_vWindowWidth / 2), 0); + screen._scrollX = _vm->_player->_rawPlayer.x % TILE_WIDTH; + screen._scrollCol = MAX(xv - (screen._vWindowWidth / 2), 0); - int sx = _vm->_screen->_scrollCol + _vm->_screen->_vWindowWidth - _playFieldWidth; + int sx = screen._scrollCol + screen._vWindowWidth - _playFieldWidth; if (sx >= 0) { - _vm->_screen->_scrollCol -= sx + 1; + screen._scrollCol -= sx + 1; } } - if (_vm->_screen->_vWindowHeight == _playFieldHeight) { - _vm->_screen->_scrollY = 0; - _vm->_screen->_scrollRow = 0; + if (screen._vWindowHeight == _playFieldHeight) { + screen._scrollY = 0; + screen._scrollRow = 0; } else { - _vm->_screen->_scrollY = _vm->_player->_rawPlayer.y - + screen._scrollY = _vm->_player->_rawPlayer.y - (_vm->_player->_rawPlayer.y >> 4); int yp = MAX((_vm->_player->_rawPlayer.y >> 4) - - (_vm->_screen->_vWindowHeight / 2), 0); - _vm->_screen->_scrollRow = yp; + (screen._vWindowHeight / 2), 0); + screen._scrollRow = yp; - yp = yp + _vm->_screen->_vWindowHeight - _playFieldHeight; + yp = yp + screen._vWindowHeight - _playFieldHeight; if (yp >= 0) { - _vm->_screen->_scrollRow = yp + 1; + screen._scrollRow = yp + 1; } } } diff --git a/engines/access/room.h b/engines/access/room.h index 40290956cd..d876a30875 100644 --- a/engines/access/room.h +++ b/engines/access/room.h @@ -117,8 +117,6 @@ protected: virtual void mainAreaClick() = 0; public: - virtual void setIconPalette() {} -public: Plotter _plotter; Common::Array<JetFrame> _jetFrame; int _function; diff --git a/engines/access/screen.h b/engines/access/screen.h index e66a7a3759..5ffba5ad3e 100644 --- a/engines/access/screen.h +++ b/engines/access/screen.h @@ -114,6 +114,11 @@ public: */ void setInitialPalettte(); + /** + * Set icon palette + */ + void setIconPalette() {} + void loadPalette(Common::SeekableReadStream *stream); void loadPalette(int fileNum, int subfile); diff --git a/engines/access/scripts.cpp b/engines/access/scripts.cpp index f4934d45a3..985f5cba66 100644 --- a/engines/access/scripts.cpp +++ b/engines/access/scripts.cpp @@ -313,7 +313,7 @@ void Scripts::cmdConverse() { _vm->_conversation = _data->readUint16LE(); _vm->_room->clearRoom(); _vm->freeChar(); - _vm->loadChar(_vm->_conversation); + _vm->_char->loadChar(_vm->_conversation); _vm->_events->setCursor(CURSOR_ARROW); _vm->_images.clear(); |