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() { | 
