diff options
-rw-r--r-- | engines/mads/assets.cpp | 2 | ||||
-rw-r--r-- | engines/mads/dialogs.cpp | 2 | ||||
-rw-r--r-- | engines/mads/game.h | 2 | ||||
-rw-r--r-- | engines/mads/mads.cpp | 2 | ||||
-rw-r--r-- | engines/mads/msprite.cpp | 22 | ||||
-rw-r--r-- | engines/mads/msprite.h | 17 | ||||
-rw-r--r-- | engines/mads/msurface.cpp | 51 | ||||
-rw-r--r-- | engines/mads/msurface.h | 73 | ||||
-rw-r--r-- | engines/mads/nebular/game_nebular.cpp | 2 | ||||
-rw-r--r-- | engines/mads/resources.cpp | 13 | ||||
-rw-r--r-- | engines/mads/resources.h | 1 | ||||
-rw-r--r-- | engines/mads/scene.cpp | 27 | ||||
-rw-r--r-- | engines/mads/scene.h | 12 | ||||
-rw-r--r-- | engines/mads/scene_data.cpp | 173 | ||||
-rw-r--r-- | engines/mads/scene_data.h | 67 | ||||
-rw-r--r-- | engines/mads/user_interface.cpp | 2 |
16 files changed, 307 insertions, 161 deletions
diff --git a/engines/mads/assets.cpp b/engines/mads/assets.cpp index 6ad313ce3e..4c075d054e 100644 --- a/engines/mads/assets.cpp +++ b/engines/mads/assets.cpp @@ -82,7 +82,7 @@ SpriteAsset::SpriteAsset(MADSEngine *vm, const Common::String &resourceName, int _frameCount, frame.x, frame.y, frame.w, frame.h); } - frame.frame = MSprite::init(spriteDataStream, Common::Point(frame.x, frame.y), + frame.frame = new MSprite(spriteDataStream, Common::Point(frame.x, frame.y), frame.w, frame.h, false); _frames.push_back(frame); } diff --git a/engines/mads/dialogs.cpp b/engines/mads/dialogs.cpp index c865e048da..e4c7682a38 100644 --- a/engines/mads/dialogs.cpp +++ b/engines/mads/dialogs.cpp @@ -39,7 +39,7 @@ Dialog::~Dialog() { void Dialog::save(MSurface *s) { - _savedSurface = MSurface::init(_width, _height); + _savedSurface = new MSurface(_width, _height); s->copyTo(_savedSurface, Common::Rect(_position.x, _position.y, _position.x + _width, _position.y + _height), Common::Point()); diff --git a/engines/mads/game.h b/engines/mads/game.h index 4797908b1a..b8add9ab00 100644 --- a/engines/mads/game.h +++ b/engines/mads/game.h @@ -61,7 +61,6 @@ protected: VisitedScenes _visitedScenes; byte *_quotes; int _v1; - int _v2; int _v3; int _v4; int _v5; @@ -109,6 +108,7 @@ public: Common::Array<uint16> _globalFlags; InventoryObjects _objects; Scene _scene; + int _v2; public: virtual ~Game(); diff --git a/engines/mads/mads.cpp b/engines/mads/mads.cpp index f7fe03e2be..d78f37dd8b 100644 --- a/engines/mads/mads.cpp +++ b/engines/mads/mads.cpp @@ -83,7 +83,7 @@ void MADSEngine::initialise() { _events = new EventsManager(this); _palette = new Palette(this); _font = new Font(this); - _screen = MSurface::init(g_system->getWidth(), g_system->getHeight()); + _screen = new MSurface(g_system->getWidth(), g_system->getHeight()); _sound = new SoundManager(this, _mixer); _userInterface = UserInterface::init(this); _game = Game::init(this); diff --git a/engines/mads/msprite.cpp b/engines/mads/msprite.cpp index b15796d57c..279192fbdc 100644 --- a/engines/mads/msprite.cpp +++ b/engines/mads/msprite.cpp @@ -35,25 +35,13 @@ enum { kMarker = 2 }; -MADSEngine *MSprite::_vm; - -MSprite *MSprite::init(MSurface &s) { - return new MSprite(s); -} - -MSprite *MSprite::init(Common::SeekableReadStream *source, const Common::Point &offset, - int widthVal, int heightVal, bool decodeRle, uint8 encodingVal) { - - return new MSprite(source, offset, widthVal, heightVal, decodeRle, encodingVal); -} - -MSprite::MSprite(MSurface &s): _surface(s) { +MSprite::MSprite(): MSurface() { _encoding = 0; } MSprite::MSprite(Common::SeekableReadStream *source, const Common::Point &offset, int widthVal, int heightVal, bool decodeRle, uint8 encodingVal) - : _surface(*MSurface::init(widthVal, heightVal)), + : MSurface(widthVal, heightVal), _encoding(encodingVal), _offset(offset) { // Load the sprite data @@ -69,14 +57,14 @@ void MSprite::loadSprite(Common::SeekableReadStream *source) { byte *outp, *lineStart; bool newLine = false; - outp = _surface.getData(); - lineStart = _surface.getData(); + outp = getData(); + lineStart = getData(); while (1) { byte cmd1, cmd2, count, pixel; if (newLine) { - outp = lineStart + _surface.w; + outp = lineStart + getWidth(); lineStart = outp; newLine = false; } diff --git a/engines/mads/msprite.h b/engines/mads/msprite.h index bb21772908..f2194dab08 100644 --- a/engines/mads/msprite.h +++ b/engines/mads/msprite.h @@ -95,24 +95,15 @@ struct SpriteFrameHeader { uint32 reserved8; }; -class MSprite { +class MSprite: public MSurface { +private: + void loadSprite(Common::SeekableReadStream *source); public: - static MSprite *init(MSurface &s); - static MSprite *init(Common::SeekableReadStream *source, const Common::Point &offset, int widthVal, - int heightVal, bool decodeRle = true, uint8 encodingVal = 0); -protected: - static MADSEngine *_vm; - - MSprite(MSurface &s); + MSprite(); MSprite(Common::SeekableReadStream *source, const Common::Point &offset, int widthVal, int heightVal, bool decodeRle = true, uint8 encodingVal = 0); - - void loadSprite(Common::SeekableReadStream *source); -public: - static void setVm(MADSEngine *vm) { _vm = vm; } virtual ~MSprite(); - MSurface &_surface; Common::Point _pos; Common::Point _offset; uint8 _encoding; diff --git a/engines/mads/msurface.cpp b/engines/mads/msurface.cpp index a9561cdd9b..4c17b3a159 100644 --- a/engines/mads/msurface.cpp +++ b/engines/mads/msurface.cpp @@ -32,22 +32,6 @@ namespace MADS { MADSEngine *MSurface::_vm = nullptr; -MSurface *MSurface::init() { - if (_vm->getGameID() == GType_RexNebular) { - return new MSurfaceNebular(); - } else { - return new MSurfaceMADS(); - } -} - -MSurface *MSurface::init(int width, int height) { - if (_vm->getGameID() == GType_RexNebular) { - return new MSurfaceNebular(width, height); - } else { - return new MSurfaceMADS(width, height); - } -} - MSurface::MSurface() { pixels = nullptr; } @@ -120,7 +104,7 @@ void MSurface::drawSprite(const Common::Point &pt, SpriteInfo &info, const Commo return; int heightAmt = scaledHeight; - byte *src = info.sprite->_surface.getData(); + byte *src = info.sprite->getData(); byte *dst = getBasePtr(x - info.hotX - clipX, y - info.hotY - clipY); int status = kStatusSkip; @@ -278,33 +262,7 @@ void MSurface::translate(RGBList *list, bool isTransparent) { } /*------------------------------------------------------------------------*/ - -void MSurfaceMADS::loadCodes(Common::SeekableReadStream *source) { - if (!source) { - free(); - return; - } - - uint16 width = MADS_SCREEN_WIDTH; - uint16 height = MADS_SCREEN_HEIGHT - MADS_INTERFACE_HEIGHT; - byte *walkMap = new byte[source->size()]; - - setSize(width, height); - source->read(walkMap, source->size()); - - byte *ptr = (byte *)getBasePtr(0, 0); - - for (int y = 0; y < height; y++) { - for (int x = 0; x < width; x++) { - int ofs = x + (y * width); - if ((walkMap[ofs / 8] << (ofs % 8)) & 0x80) - *ptr++ = 1; // walkable - else - *ptr++ = 0; - } - } -} - +/* void MSurfaceMADS::loadBackground(int roomNumber, RGBList **palData) { // clear previous data empty(); @@ -386,7 +344,7 @@ void MSurfaceMADS::loadBackground(int roomNumber, RGBList **palData) { for (i = 0; i < tileCount; i++) { tileDataUncomp->seek(i * 4, SEEK_SET); uint32 tileOfs = tileDataUncomp->readUint32LE(); - MSurface *newTile = MSurface::init(tileWidth, tileHeight); + MSurface *newTile = new MSurface(tileWidth, tileHeight); if (i == tileCount - 1) compressedTileDataSize = tileDataComp->size() - tileOfs; @@ -454,7 +412,7 @@ void MSurfaceMADS::loadInterface(int index, RGBList **palData) { delete intStream; } -/*------------------------------------------------------------------------*/ +------------------------------------------------------------------------ void MSurfaceNebular::loadBackground(int roomNumber, RGBList **palData) { // clear previous data @@ -504,5 +462,6 @@ void MSurfaceNebular::loadBackgroundStream(Common::SeekableReadStream *source, R delete sourceUnc; } +*/ } // End of namespace MADS diff --git a/engines/mads/msurface.h b/engines/mads/msurface.h index 3904aa1e92..209ac97d58 100644 --- a/engines/mads/msurface.h +++ b/engines/mads/msurface.h @@ -50,24 +50,19 @@ struct SpriteInfo { * MADS graphics surface */ class MSurface : public Graphics::Surface { -public: +private: static MADSEngine *_vm; - +public: /** - * Sets the engine reference + * Sets the engine refrence used all surfaces */ static void setVm(MADSEngine *vm) { _vm = vm; } /** - * Create a new surface. - */ - static MSurface *init(); - - /** - * Create a surface + * Helper method for calculating new dimensions when scaling a sprite */ - static MSurface *init(int width, int height); -protected: + static int scaleValue(int value, int scale, int err); +public: /** * Basic constructor */ @@ -77,12 +72,7 @@ protected: * Constructor for a surface with fixed dimensions */ MSurface(int width, int height); -public: - /** - * Helper method for calculating new dimensions when scaling a sprite - */ - static int scaleValue(int value, int scale, int err); -public: + /** * Destructor */ @@ -182,55 +172,6 @@ public: * Translates the data of a surface using a specified RGBList translation matrix. */ void translate(RGBList *list, bool isTransparent = false); - - // Base virtual methods - /** - * Loads a background by scene name - */ - virtual void loadBackground(const Common::String &sceneName) {} - - /** - * Load background by room number - */ - virtual void loadBackground(int roomNumber, RGBList **palData) = 0; - - /** - * Load background from a passed stream - */ - virtual void loadBackground(Common::SeekableReadStream *source, RGBList **palData) {} - - /** - * Load scene codes from a passed stream - */ - virtual void loadCodes(Common::SeekableReadStream *source) = 0; - - /** - * Load a given user interface by index - */ - virtual void loadInterface(int index, RGBList **palData) {} -}; - -class MSurfaceMADS: public MSurface { - friend class MSurface; -protected: - MSurfaceMADS(): MSurface() {} - MSurfaceMADS(int width, int height): MSurface(width, height) {} -public: - virtual void loadCodes(Common::SeekableReadStream *source); - virtual void loadBackground(const Common::String &sceneName) {} - virtual void loadBackground(int roomNumber, RGBList **palData); - virtual void loadInterface(int index, RGBList **palData); -}; - -class MSurfaceNebular: public MSurfaceMADS { - friend class MSurface; -protected: - MSurfaceNebular(): MSurfaceMADS() {} - MSurfaceNebular(int width, int height): MSurfaceMADS(width, height) {} -private: - void loadBackgroundStream(Common::SeekableReadStream *source, RGBList **palData); -public: - virtual void loadBackground(int roomNumber, RGBList **palData); }; } // End of namespace MADS diff --git a/engines/mads/nebular/game_nebular.cpp b/engines/mads/nebular/game_nebular.cpp index e777ff8def..c55abf5601 100644 --- a/engines/mads/nebular/game_nebular.cpp +++ b/engines/mads/nebular/game_nebular.cpp @@ -34,7 +34,7 @@ namespace MADS { namespace Nebular { GameNebular::GameNebular(MADSEngine *vm): Game(vm) { - _surface =MSurface::init(MADS_SCREEN_WIDTH, MADS_SCREEN_HEIGHT - MADS_INTERFACE_HEIGHT); + _surface = new MSurface(MADS_SCREEN_WIDTH, MADS_SCREEN_HEIGHT - MADS_INTERFACE_HEIGHT); } int GameNebular::checkCopyProtection() { diff --git a/engines/mads/resources.cpp b/engines/mads/resources.cpp index 9f856eeefc..f24f7d2fc7 100644 --- a/engines/mads/resources.cpp +++ b/engines/mads/resources.cpp @@ -303,6 +303,19 @@ Common::String Resources::formatName(RESPREFIX resType, int id, const Common::St return result; } +Common::String Resources::formatResource(const Common::String &resName, + const Common::String &hagFilename) { + int v1 = 0, v2 = 0; + + if (resName.hasPrefix("*")) { + // Resource file specified + error("TODO: formatResource"); + } else { + // File outside of hag file + return resName; + } +} + /*------------------------------------------------------------------------*/ void File::openFile(const Common::String &filename) { diff --git a/engines/mads/resources.h b/engines/mads/resources.h index 033157ed60..8fed0ab437 100644 --- a/engines/mads/resources.h +++ b/engines/mads/resources.h @@ -47,6 +47,7 @@ public: static void init(MADSEngine *vm); static Common::String formatName(RESPREFIX resType, int id, const Common::String &ext); + static Common::String formatResource(const Common::String &resName, const Common::String &hagFilename); }; /** diff --git a/engines/mads/scene.cpp b/engines/mads/scene.cpp index 7bbb4e98ae..138cab500a 100644 --- a/engines/mads/scene.cpp +++ b/engines/mads/scene.cpp @@ -33,6 +33,8 @@ Scene::Scene(MADSEngine *vm): _vm(vm), _spriteSlots(vm) { _currentSceneId = 0; _vocabBuffer = nullptr; _sceneLogic = nullptr; + _sceneInfo = nullptr; + _scenePalette = nullptr; _verbList.push_back(VerbInit(VERB_LOOK, 2, 0)); _verbList.push_back(VerbInit(VERB_TAKE, 2, 0)); @@ -50,6 +52,7 @@ Scene::Scene(MADSEngine *vm): _vm(vm), _spriteSlots(vm) { Scene::~Scene() { delete[] _vocabBuffer; delete _sceneLogic; + delete _sceneInfo; } void Scene::clearDynamicHotspots() { @@ -84,11 +87,11 @@ int Scene::activeVocabIndexOf(int vocabId) { } void Scene::clearSequenceList() { - _sequenceList.clear(); + _sequences.clear(); } void Scene::clearMessageList() { - _messageList.clear(); + _messages.clear(); _talkFont = "*FONTCONV.FF"; _textSpacing = -1; } @@ -114,16 +117,22 @@ void Scene::loadScene(int sceneId, const Common::String &prefix, bool palFlag) { if (palFlag) _vm->_palette->resetGamePalette(18, 10); + _spriteSlots.clear(false); + _sequences.clear(); + _messages.clear(); + setPalette(_nullPalette); + _sceneInfo = SceneInfo::load(_vm, _currentSceneId, _v1, Common::String(), _vm->_game->_v2 ? 17 : 16, + _depthSurface, _backgroundSurface); } void Scene::loadHotspots() { File f(Resources::formatName(RESPREFIX_RM, _currentSceneId, ".HH")); int count = f.readUint16LE(); - _hotspotList.clear(); + _hotspots.clear(); for (int i = 0; i < count; ++i) - _hotspotList.push_back(Hotspot(f)); + _hotspots.push_back(Hotspot(f)); } void Scene::loadVocab() { @@ -142,10 +151,10 @@ void Scene::loadVocab() { } // Load scene hotspot list vocabs and verbs - for (uint i = 0; i < _hotspotList.size(); ++i) { - addActiveVocab(_hotspotList[i]._vocabId); - if (_hotspotList[i]._verbId) - addActiveVocab(_hotspotList[i]._verbId); + for (uint i = 0; i < _hotspots.size(); ++i) { + addActiveVocab(_hotspots[i]._vocabId); + if (_hotspots[i]._verbId) + addActiveVocab(_hotspots[i]._verbId); } loadVocabStrings(); @@ -170,7 +179,7 @@ void Scene::free() { } void Scene::setPalette(RGB4 *p) { - _scenePalette = p; +// _scenePalette = p; } } // End of namespace MADS diff --git a/engines/mads/scene.h b/engines/mads/scene.h index 7db10771ed..efe89c2b09 100644 --- a/engines/mads/scene.h +++ b/engines/mads/scene.h @@ -27,6 +27,7 @@ #include "common/array.h" #include "common/rect.h" #include "mads/assets.h" +#include "mads/msurface.h" #include "mads/scene_data.h" namespace MADS { @@ -63,15 +64,18 @@ public: bool _dynamicHotspotsChanged; byte *_vocabBuffer; Common::Array<int> _activeVocabs; - Common::Array<SequenceEntry> _sequenceList; - Common::Array<KernelMessage> _messageList; + Common::Array<SequenceEntry> _sequences; + Common::Array<KernelMessage> _messages; Common::String _talkFont; int _textSpacing; - Common::Array<Hotspot> _hotspotList; + Common::Array<Hotspot> _hotspots; ScreenObjects _screenObjects; - RGB4 *_scenePalette; + ScenePalette *_scenePalette; RGB4 _nullPalette[2]; int _v1; + SceneInfo *_sceneInfo; + MSurface _backgroundSurface; + MSurface _depthSurface; /** * Constructor diff --git a/engines/mads/scene_data.cpp b/engines/mads/scene_data.cpp index d0e40d4097..aac70750b8 100644 --- a/engines/mads/scene_data.cpp +++ b/engines/mads/scene_data.cpp @@ -23,6 +23,7 @@ #include "common/scummsys.h" #include "mads/scene_data.h" #include "mads/mads.h" +#include "mads/resources.h" #include "mads/nebular/nebular_scenes.h" namespace MADS { @@ -161,4 +162,176 @@ Hotspot::Hotspot(Common::SeekableReadStream &f) { _verbId = f.readUint16LE(); } +/*------------------------------------------------------------------------*/ + +void ARTHeader::load(Common::SeekableReadStream &f) { + _width = f.readUint16LE(); + _height = f.readUint16LE(); + + _palCount = f.readUint16LE(); + for (int i = 0; i < 256; ++i) { + RGB6 rgb; + rgb.r = f.readByte(); + rgb.g = f.readByte(); + rgb.b = f.readByte(); + f.read(&rgb.unused[0], 3); + + _palette.push_back(rgb); + } + + int palCount = f.readUint16LE(); + for (int i = 0; i < palCount; ++i) { + RGB4 rgb; + rgb.r = f.readByte(); + rgb.g = f.readByte(); + rgb.b = f.readByte(); + rgb.u = f.readByte(); + + _palData.push_back(rgb); + } +} + +/*------------------------------------------------------------------------*/ + +SceneInfo *SceneInfo::load(MADSEngine *vm, int sceneId, int v1, const Common::String &resName, + int v3, MSurface &depthSurface, MSurface &bgSurface) { + return new SceneInfo(vm, sceneId, v1, resName, v3, depthSurface, bgSurface); +} + +SceneInfo::SceneInfo(MADSEngine *vm, int sceneId, int v1, const Common::String &resName, + int flags, MSurface &depthSurface, MSurface &bgSurface) { + bool flag = true; + bool sceneFlag = sceneId >= 0; + bool ssFlag = false, wsFlag = false; + int handle = 0; + + SpriteAsset *spriteSets[10]; + int xpList[10]; + Common::fill(&spriteSets[0], &spriteSets[10], (SpriteAsset *)nullptr); + Common::fill(&xpList[0], &xpList[10], -1); + + // Figure out the resource to use + Common::String resourceName; + if (sceneFlag) { + resourceName = Resources::formatName(RESPREFIX_RM, sceneId, ".DAT"); + } else { + resourceName = "*" + Resources::formatResource(resName, resName); + } + + // Open the scene info resource for access + File infoFile(resName); + + // Read in basic data + _sceneId = infoFile.readUint16LE(); + _artFileNum = infoFile.readUint16LE(); + _depthStyle = infoFile.readUint16LE(); + _width = infoFile.readUint16LE(); + _height = infoFile.readUint16LE(); + infoFile.skip(24); + _nodeCount = infoFile.readUint16LE(); + _yBandsEnd = infoFile.readUint16LE(); + _yBandsStart = infoFile.readUint16LE(); + _maxScale = infoFile.readUint16LE(); + _minScale = infoFile.readUint16LE(); + for (int i = 0; i < 15; ++i) + _depthList[i] = infoFile.readUint16LE(); + _field4A = infoFile.readUint16LE(); + + // Load the set of objects that are associated with the scene + for (int i = 0; i < 20; ++i) { + InventoryObject obj; + obj.load(infoFile); + _objects.push_back(obj); + } + + int setCount = infoFile.readUint16LE(); + int field40E = infoFile.readUint16LE(); + + for (int i = 0; i < 20; ++i) { + char name[64]; + infoFile.read(name, 64); + _setNames.push_back(Common::String(name)); + } + + infoFile.close(); + int width = _width; + int height = _height; + + if (!bgSurface.getPixels()) { + bgSurface.setSize(width, height); + ssFlag = true; + } + + if (_depthStyle == 2) + width >>= 2; + if (!depthSurface.getPixels()) { + depthSurface.setSize(width, height); + wsFlag = true; + } + + // Load the depth surface with the scene codes + loadCodes(depthSurface); + + // Get the ART resource + if (sceneFlag) { + resourceName = Resources::formatName(RESPREFIX_RM, sceneId, ".ART"); + } else { + resourceName = "*" + Resources::formatResource(resName, resName); + } + + // Load in the ART header and palette + File artFile(resourceName); + ARTHeader artHeader; + artHeader.load(artFile); + artFile.close(); + + // Copy out the palette data + for (int i = 0; i < artHeader._palData.size(); ++i) + _palette.push_back(artHeader._palData[i]); +/* + if (!(flags & 1)) { + if (_vm->_game->_scene->_scenePalette) { + //_vm->_game->_scene->_scenePalette->clean(&artHeader._palCount); + //_vm->_game->_scene->_scenePalette->process(&artHeader._palCount) + } + } + */ + warning("TODO"); +} + +void SceneInfo::loadCodes(MSurface &depthSurface) { + File f(Resources::formatName(RESPREFIX_RM, _sceneId, ".DAT")); + + uint16 width = _width; + uint16 height = _height; + byte *walkMap = new byte[f.size()]; + + depthSurface.setSize(width, height); + f.read(walkMap, f.size()); + + byte *ptr = (byte *)depthSurface.getPixels(); + + for (int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) { + int ofs = x + (y * width); + if ((walkMap[ofs / 8] << (ofs % 8)) & 0x80) + *ptr++ = 1; // walkable + else + *ptr++ = 0; + } + } + + delete[] walkMap; +} + +/*------------------------------------------------------------------------*/ + +void ScenePalette::clean(int *palCount) { + warning("TODO: ScenePalette::clean"); +} + +void ScenePalette::process(int *palCount) { + warning("TODO: ScenePalette::process"); +} + } // End of namespace MADS diff --git a/engines/mads/scene_data.h b/engines/mads/scene_data.h index b464cbaee3..2fcd3f9ae4 100644 --- a/engines/mads/scene_data.h +++ b/engines/mads/scene_data.h @@ -25,8 +25,11 @@ #include "common/scummsys.h" #include "common/array.h" +#include "common/str.h" +#include "common/str-array.h" #include "common/rect.h" #include "mads/assets.h" +#include "mads/game_data.h" namespace MADS { @@ -242,6 +245,70 @@ public: virtual void postActions() = 0; }; +struct RGB6 { + byte r; + byte g; + byte b; + byte unused[3]; +}; + +struct ARTHeader { + int _width; + int _height; + int _palCount; + Common::Array<RGB6> _palette; + Common::Array<RGB4> _palData; + + void load(Common::SeekableReadStream &f); +}; + +/** + * Handles general data for a given scene + */ +class SceneInfo { +private: + MADSEngine *_vm; + + SceneInfo(MADSEngine *vm, int sceneId, int v1, const Common::String &resName, + int v3, MSurface &depthSurface, MSurface &bgSurface); + + /** + * Loads the given surface with depth information of a given scene + */ + void loadCodes(MSurface &depthSurface); +public: + int _sceneId; + int _artFileNum; + int _depthStyle; + int _width; + int _height; + + int _nodeCount; + int _yBandsEnd; + int _yBandsStart; + int _maxScale; + int _minScale; + int _depthList[15]; + int _field4A; + + int _field4C; + Common::Array<InventoryObject> _objects; + Common::StringArray _setNames; + Common::Array<RGB4> _palette; +public: + /** + * Instantiates the class and loads the data + */ + static SceneInfo *load(MADSEngine *vm, int sceneId, int flags, + const Common::String &resName, int v3, MSurface &depthSurface, MSurface &bgSurface); +}; + +class ScenePalette { +public: + void clean(int *palCount); + void process(int *palCount); +}; + } // End of namespace MADS #endif /* MADS_SCENE_DATA_H */ diff --git a/engines/mads/user_interface.cpp b/engines/mads/user_interface.cpp index 2af134a8ee..3bbf6a0b2b 100644 --- a/engines/mads/user_interface.cpp +++ b/engines/mads/user_interface.cpp @@ -33,7 +33,7 @@ UserInterface *UserInterface::init(MADSEngine *vm) { } UserInterface::UserInterface(MADSEngine *vm): _vm(vm), _surface( - MSurface::init(MADS_SCREEN_WIDTH, MADS_INTERFACE_HEIGHT)) { + new MSurface(MADS_SCREEN_WIDTH, MADS_INTERFACE_HEIGHT)) { } UserInterface::~UserInterface() { |