diff options
| author | Bastien Bouclet | 2016-08-05 08:07:02 +0200 | 
|---|---|---|
| committer | Eugene Sandulenko | 2017-07-03 08:50:10 +0200 | 
| commit | 23bbf05c9162e8126df21794b08eb953d65d057e (patch) | |
| tree | 5283789bd4abc14029f156f474ccf33e443d5822 | |
| parent | 1b062d1e39988388468bb13af97276d5674bbcbe (diff) | |
| download | scummvm-rg350-23bbf05c9162e8126df21794b08eb953d65d057e.tar.gz scummvm-rg350-23bbf05c9162e8126df21794b08eb953d65d057e.tar.bz2 scummvm-rg350-23bbf05c9162e8126df21794b08eb953d65d057e.zip | |
MOHAWK: Start converting RivenHotspot into a class
| -rw-r--r-- | engines/mohawk/console.cpp | 10 | ||||
| -rw-r--r-- | engines/mohawk/riven.cpp | 87 | ||||
| -rw-r--r-- | engines/mohawk/riven.h | 19 | ||||
| -rw-r--r-- | engines/mohawk/riven_card.cpp | 46 | ||||
| -rw-r--r-- | engines/mohawk/riven_card.h | 32 | ||||
| -rw-r--r-- | engines/mohawk/riven_external.cpp | 88 | ||||
| -rw-r--r-- | engines/mohawk/riven_scripts.cpp | 18 | 
7 files changed, 164 insertions, 136 deletions
| diff --git a/engines/mohawk/console.cpp b/engines/mohawk/console.cpp index 9b4d0564e2..966929b4ef 100644 --- a/engines/mohawk/console.cpp +++ b/engines/mohawk/console.cpp @@ -510,17 +510,17 @@ bool RivenConsole::Cmd_ChangeStack(int argc, const char **argv) {  }  bool RivenConsole::Cmd_Hotspots(int argc, const char **argv) { -	debugPrintf("Current card (%d) has %d hotspots:\n", _vm->getCurCard()->getId(), _vm->getHotspotCount()); +	debugPrintf("Current card (%d) has %d hotspots:\n", _vm->getCurCard()->getId(), _vm->_hotspots.size()); -	for (uint16 i = 0; i < _vm->getHotspotCount(); i++) { -		debugPrintf("Hotspot %d, index %d, BLST ID %d (", i, _vm->_hotspots[i].index, _vm->_hotspots[i].blstID); +	for (uint16 i = 0; i < _vm->_hotspots.size(); i++) { +		debugPrintf("Hotspot %d, index %d, BLST ID %d (", i, _vm->_hotspots[i]->index, _vm->_hotspots[i]->blstID); -		if (_vm->_hotspots[i].enabled) +		if (_vm->_hotspots[i]->enabled)  			debugPrintf("enabled");  		else  			debugPrintf("disabled"); -		debugPrintf(") - (%d, %d, %d, %d)\n", _vm->_hotspots[i].rect.left, _vm->_hotspots[i].rect.top, _vm->_hotspots[i].rect.right, _vm->_hotspots[i].rect.bottom); +		debugPrintf(") - (%d, %d, %d, %d)\n", _vm->_hotspots[i]->rect.left, _vm->_hotspots[i]->rect.top, _vm->_hotspots[i]->rect.right, _vm->_hotspots[i]->rect.bottom);  		debugPrintf("    Name = %s\n", _vm->getHotspotName(i).c_str());  	} diff --git a/engines/mohawk/riven.cpp b/engines/mohawk/riven.cpp index b7ff1c38ed..586c5f5f74 100644 --- a/engines/mohawk/riven.cpp +++ b/engines/mohawk/riven.cpp @@ -58,7 +58,6 @@ MohawkEngine_Riven::MohawkEngine_Riven(OSystem *syst, const MohawkGameDescriptio  	_ignoreNextMouseUp = false;  	_extrasFile = nullptr;  	_curStack = kStackUnknown; -	_hotspots = nullptr;  	_gfx = nullptr;  	_sound = nullptr;  	_externalScriptHandler = nullptr; @@ -68,7 +67,6 @@ MohawkEngine_Riven::MohawkEngine_Riven(OSystem *syst, const MohawkGameDescriptio  	_saveLoad = nullptr;  	_optionsDialog = nullptr;  	_card = nullptr; -	_hotspotCount = 0;  	_curHotspot = -1;  	removeTimer(); @@ -105,7 +103,9 @@ MohawkEngine_Riven::~MohawkEngine_Riven() {  	delete _scriptMan;  	delete _optionsDialog;  	delete _rnd; -	delete[] _hotspots; +	for (uint i = 0; i < _hotspots.size(); i++) { +		delete _hotspots[i]; +	}  	delete g_atrusJournalRect1;  	delete g_atrusJournalRect2;  	delete g_cathJournalRect2; @@ -257,8 +257,8 @@ void MohawkEngine_Riven::handleEvents() {  			case Common::KEYCODE_F4:  				_showHotspots = !_showHotspots;  				if (_showHotspots) { -					for (uint16 i = 0; i < _hotspotCount; i++) -						_gfx->drawRect(_hotspots[i].rect, _hotspots[i].enabled); +					for (uint16 i = 0; i < _hotspots.size(); i++) +						_gfx->drawRect(_hotspots[i]->rect, _hotspots[i]->enabled);  					needsUpdate = true;  				} else  					refreshCard(); @@ -414,8 +414,8 @@ void MohawkEngine_Riven::refreshCard() {  	_card->open();  	if (_showHotspots) -		for (uint16 i = 0; i < _hotspotCount; i++) -			_gfx->drawRect(_hotspots[i].rect, _hotspots[i].enabled); +		for (uint16 i = 0; i < _hotspots.size(); i++) +			_gfx->drawRect(_hotspots[i]->rect, _hotspots[i]->enabled);  	// Now we need to redraw the cursor if necessary and handle mouse over scripts  	updateCurrentHotspot(); @@ -425,46 +425,17 @@ void MohawkEngine_Riven::refreshCard() {  }  void MohawkEngine_Riven::loadHotspots(uint16 id) { -	// Clear old hotspots -	delete[] _hotspots; - -	// NOTE: The hotspot scripts are cleared by the RivenScriptManager automatically. +	for (uint i = 0; i < _hotspots.size(); i++) { +		delete _hotspots[i]; +	}  	Common::SeekableReadStream *inStream = getResource(ID_HSPT, id); -	_hotspotCount = inStream->readUint16BE(); -	_hotspots = new RivenHotspot[_hotspotCount]; - -	for (uint16 i = 0; i < _hotspotCount; i++) { -		_hotspots[i].enabled = true; - -		_hotspots[i].blstID = inStream->readUint16BE(); -		_hotspots[i].name_resource = inStream->readSint16BE(); - -		int16 left = inStream->readSint16BE(); -		int16 top = inStream->readSint16BE(); -		int16 right = inStream->readSint16BE(); -		int16 bottom = inStream->readSint16BE(); +	uint16 hotspotCount = inStream->readUint16BE(); +	_hotspots.resize(hotspotCount); -		// Riven has some invalid rects, disable them here -		// Known weird hotspots: -		// - tspit 371 (DVD: 377), hotspot 4 -		if (left >= right || top >= bottom) { -			warning("%s %d hotspot %d is invalid: (%d, %d, %d, %d)", getStackName(_curStack).c_str(), id, i, left, top, right, bottom); -			left = top = right = bottom = 0; -			_hotspots[i].enabled = 0; -		} - -		_hotspots[i].rect = Common::Rect(left, top, right, bottom); - -		_hotspots[i].u0 = inStream->readUint16BE(); -		_hotspots[i].mouse_cursor = inStream->readUint16BE(); -		_hotspots[i].index = inStream->readUint16BE(); -		_hotspots[i].u1 = inStream->readSint16BE(); -		_hotspots[i].zipModeHotspot = inStream->readUint16BE(); - -		// Read in the scripts now -		_hotspots[i].scripts = _scriptMan->readScripts(inStream); +	for (uint16 i = 0; i < hotspotCount; i++) { +		_hotspots[i] = new RivenHotspot(this, inStream);  	}  	delete inStream; @@ -474,11 +445,11 @@ void MohawkEngine_Riven::loadHotspots(uint16 id) {  void MohawkEngine_Riven::updateZipMode() {  	// Check if a zip mode hotspot is enabled by checking the name/id against the ZIPS records. -	for (uint32 i = 0; i < _hotspotCount; i++) { -		if (_hotspots[i].zipModeHotspot) { +	for (uint32 i = 0; i < _hotspots.size(); i++) { +		if (_hotspots[i]->zipModeHotspot) {  			if (_vars["azip"] != 0) {  				// Check if a zip mode hotspot is enabled by checking the name/id against the ZIPS records. -				Common::String hotspotName = getName(HotspotNames, _hotspots[i].name_resource); +				Common::String hotspotName = getName(HotspotNames, _hotspots[i]->name_resource);  				bool foundMatch = false; @@ -489,9 +460,9 @@ void MohawkEngine_Riven::updateZipMode() {  							break;  						} -				_hotspots[i].enabled = foundMatch; +				_hotspots[i]->enabled = foundMatch;  			} else // Disable the hotspot if zip mode is disabled -				_hotspots[i].enabled = false; +				_hotspots[i]->enabled = false;  		}  	}  } @@ -499,8 +470,8 @@ void MohawkEngine_Riven::updateZipMode() {  void MohawkEngine_Riven::checkHotspotChange() {  	uint16 hotspotIndex = 0;  	bool foundHotspot = false; -	for (uint16 i = 0; i < _hotspotCount; i++) -		if (_hotspots[i].enabled && _hotspots[i].rect.contains(_eventMan->getMousePos())) { +	for (uint16 i = 0; i < _hotspots.size(); i++) +		if (_hotspots[i]->enabled && _hotspots[i]->rect.contains(_eventMan->getMousePos())) {  			foundHotspot = true;  			hotspotIndex = i;  		} @@ -508,7 +479,7 @@ void MohawkEngine_Riven::checkHotspotChange() {  	if (foundHotspot) {  		if (_curHotspot != hotspotIndex) {  			_curHotspot = hotspotIndex; -			_cursor->setCursor(_hotspots[_curHotspot].mouse_cursor); +			_cursor->setCursor(_hotspots[_curHotspot]->mouse_cursor);  			_system->updateScreen();  		}  	} else { @@ -524,12 +495,12 @@ void MohawkEngine_Riven::updateCurrentHotspot() {  }  Common::String MohawkEngine_Riven::getHotspotName(uint16 hotspot) { -	assert(hotspot < _hotspotCount); +	assert(hotspot < _hotspots.size()); -	if (_hotspots[hotspot].name_resource < 0) +	if (_hotspots[hotspot]->name_resource < 0)  		return Common::String(); -	return getName(HotspotNames, _hotspots[hotspot].name_resource); +	return getName(HotspotNames, _hotspots[hotspot]->name_resource);  }  void MohawkEngine_Riven::checkInventoryClick() { @@ -663,13 +634,7 @@ uint32 MohawkEngine_Riven::getCurCardRMAP() {  }  void MohawkEngine_Riven::runHotspotScript(uint16 hotspot, uint16 scriptType) { -	assert(hotspot < _hotspotCount); -	for (uint16 i = 0; i < _hotspots[hotspot].scripts.size(); i++) -		if (_hotspots[hotspot].scripts[i].type == scriptType) { -			RivenScriptPtr script = _hotspots[hotspot].scripts[i].script; -			_scriptMan->runScript(script, false); -			break; -		} +	_hotspots[hotspot]->runScript(scriptType);  }  void MohawkEngine_Riven::delayAndUpdate(uint32 ms) { diff --git a/engines/mohawk/riven.h b/engines/mohawk/riven.h index 55661617b0..2fa8c65906 100644 --- a/engines/mohawk/riven.h +++ b/engines/mohawk/riven.h @@ -42,6 +42,7 @@ class RivenConsole;  class RivenSaveLoad;  class RivenOptionsDialog;  class RivenCard; +class RivenHotspot;  class RivenSoundManager;  // Riven Stack Types @@ -86,20 +87,6 @@ extern Common::Rect *g_cathJournalRect3;  extern Common::Rect *g_trapBookRect3;  extern Common::Rect *g_demoExitRect; -struct RivenHotspot { -	uint16 blstID; -	int16 name_resource; -	Common::Rect rect; -	uint16 u0; -	uint16 mouse_cursor; -	uint16 index; -	int16 u1; -	int16 zipModeHotspot; -	RivenScriptList scripts; - -	bool enabled; -}; -  struct ZipMode {  	Common::String name;  	uint16 id; @@ -148,7 +135,6 @@ private:  	void handleEvents();  	// Hotspot related functions and variables -	uint16 _hotspotCount;  	void loadHotspots(uint16);  	void checkInventoryClick();  	bool _showHotspots; @@ -180,10 +166,9 @@ public:  	uint32 getCurCardRMAP();  	// Hotspot functions/variables -	RivenHotspot *_hotspots; +	Common::Array<RivenHotspot *> _hotspots;  	int32 _curHotspot;  	Common::Array<ZipMode> _zipModeData; -	uint16 getHotspotCount() const { return _hotspotCount; }  	void runHotspotScript(uint16 hotspot, uint16 scriptType);  	int32 getCurHotspot() const { return _curHotspot; }  	Common::String getHotspotName(uint16 hotspot); diff --git a/engines/mohawk/riven_card.cpp b/engines/mohawk/riven_card.cpp index 34045faef2..9f4635ffbd 100644 --- a/engines/mohawk/riven_card.cpp +++ b/engines/mohawk/riven_card.cpp @@ -196,4 +196,50 @@ SLSTRecord RivenCard::getSound(uint16 index) const {  	error("Could not find sound %d in card %d", index, _id);  } +RivenHotspot::RivenHotspot(MohawkEngine_Riven *vm, Common::ReadStream *stream) : +		_vm(vm) { +	loadFromStream(stream); +} + +void RivenHotspot::loadFromStream(Common::ReadStream *stream) { +	enabled = true; + +	blstID = stream->readUint16BE(); +	name_resource = stream->readSint16BE(); + +	int16 left = stream->readSint16BE(); +	int16 top = stream->readSint16BE(); +	int16 right = stream->readSint16BE(); +	int16 bottom = stream->readSint16BE(); + +	// Riven has some invalid rects, disable them here +	// Known weird hotspots: +	// - tspit 371 (DVD: 377), hotspot 4 +	if (left >= right || top >= bottom) { +		warning("Invalid hotspot: (%d, %d, %d, %d)", left, top, right, bottom); +		left = top = right = bottom = 0; +		enabled = 0; +	} + +	rect = Common::Rect(left, top, right, bottom); + +	_u0 = stream->readUint16BE(); +	mouse_cursor = stream->readUint16BE(); +	index = stream->readUint16BE(); +	_u1 = stream->readSint16BE(); +	zipModeHotspot = stream->readUint16BE(); + +	// Read in the scripts now +	_scripts = _vm->_scriptMan->readScripts(stream); +} + +void RivenHotspot::runScript(uint16 scriptType) { +	for (uint16 i = 0; i < _scripts.size(); i++) +		if (_scripts[i].type == scriptType) { +			RivenScriptPtr script = _scripts[i].script; +			_vm->_scriptMan->runScript(script, false); +			break; +		} +} +  } // End of namespace Mohawk diff --git a/engines/mohawk/riven_card.h b/engines/mohawk/riven_card.h index b83f330c79..b4e41972f5 100644 --- a/engines/mohawk/riven_card.h +++ b/engines/mohawk/riven_card.h @@ -95,6 +95,38 @@ private:  	Common::Array<SLSTRecord> _soundList;  }; +/** + * A Card Hotspot + * + * Hotspots are named rectangular areas of the view. + * Hotspots can be interactive through their scripts. + */ +class RivenHotspot { +public: +	RivenHotspot(MohawkEngine_Riven *vm, Common::ReadStream *stream); + +	/** Run one of the hotspot's scripts */ +	void runScript(uint16 scriptType); + +	uint16 blstID; +	int16 name_resource; +	uint16 index; +	Common::Rect rect; +	uint16 mouse_cursor; +	int16 zipModeHotspot; + +	bool enabled; // TODO: Remove + +private: +	void loadFromStream(Common::ReadStream *stream); + +	MohawkEngine_Riven *_vm; + +	uint16 _u0; +	int16 _u1; +	RivenScriptList _scripts; +}; +  } // End of namespace Mohawk  #endif diff --git a/engines/mohawk/riven_external.cpp b/engines/mohawk/riven_external.cpp index a7161dff7b..b0aa782669 100644 --- a/engines/mohawk/riven_external.cpp +++ b/engines/mohawk/riven_external.cpp @@ -316,19 +316,19 @@ void RivenExternal::checkDomeSliders(uint16 resetSlidersHotspot, uint16 openDome  	// Let's see if we're all matched up...  	if (_vm->_vars["adomecombo"] == _sliderState) {  		// Set the button hotspot to the open dome hotspot -		_vm->_hotspots[resetSlidersHotspot].enabled = false; -		_vm->_hotspots[openDomeHotspot].enabled = true; +		_vm->_hotspots[resetSlidersHotspot]->enabled = false; +		_vm->_hotspots[openDomeHotspot]->enabled = true;  	} else {  		// Set the button hotspot to the reset sliders hotspot -		_vm->_hotspots[resetSlidersHotspot].enabled = true; -		_vm->_hotspots[openDomeHotspot].enabled = false; +		_vm->_hotspots[resetSlidersHotspot]->enabled = true; +		_vm->_hotspots[openDomeHotspot]->enabled = false;  	}  }  void RivenExternal::checkSliderCursorChange(uint16 startHotspot) {  	// Set the cursor based on _sliderState and what hotspot we're over  	for (uint16 i = 0; i < kDomeSliderSlotCount; i++) { -		if (_vm->_hotspots[i + startHotspot].rect.contains(_vm->_system->getEventManager()->getMousePos())) { +		if (_vm->_hotspots[i + startHotspot]->rect.contains(_vm->_system->getEventManager()->getMousePos())) {  			if (_sliderState & (1 << (24 - i)))  				_vm->_cursor->setCursor(kRivenOpenHandCursor);  			else @@ -343,7 +343,7 @@ void RivenExternal::dragDomeSlider(uint16 soundId, uint16 resetSlidersHotspot, u  	int16 foundSlider = -1;  	for (uint16 i = 0; i < kDomeSliderSlotCount; i++) { -		if (_vm->_hotspots[i + startHotspot].rect.contains(_vm->_system->getEventManager()->getMousePos())) { +		if (_vm->_hotspots[i + startHotspot]->rect.contains(_vm->_system->getEventManager()->getMousePos())) {  			// If the slider is not at this hotspot, we can't do anything else  			if (!(_sliderState & (1 << (24 - i))))  				return; @@ -367,7 +367,7 @@ void RivenExternal::dragDomeSlider(uint16 soundId, uint16 resetSlidersHotspot, u  		while (_vm->_system->getEventManager()->pollEvent(event)) {  			switch (event.type) {  			case Common::EVENT_MOUSEMOVE: -				if (foundSlider < 24 && !(_sliderState & (1 << (23 - foundSlider))) && _vm->_hotspots[foundSlider + startHotspot + 1].rect.contains(event.mouse)) { +				if (foundSlider < 24 && !(_sliderState & (1 << (23 - foundSlider))) && _vm->_hotspots[foundSlider + startHotspot + 1]->rect.contains(event.mouse)) {  					// We've moved the slider right one space  					_sliderState &= ~(_sliderState & (1 << (24 - foundSlider)));  					foundSlider++; @@ -376,7 +376,7 @@ void RivenExternal::dragDomeSlider(uint16 soundId, uint16 resetSlidersHotspot, u  					// Now play a click sound and redraw  					_vm->_sound->playSound(soundId);  					drawDomeSliders(startHotspot); -				} else if (foundSlider > 0 && !(_sliderState & (1 << (25 - foundSlider))) && _vm->_hotspots[foundSlider + startHotspot - 1].rect.contains(event.mouse)) { +				} else if (foundSlider > 0 && !(_sliderState & (1 << (25 - foundSlider))) && _vm->_hotspots[foundSlider + startHotspot - 1]->rect.contains(event.mouse)) {  					// We've moved the slider left one space  					_sliderState &= ~(_sliderState & (1 << (24 - foundSlider)));  					foundSlider--; @@ -414,10 +414,10 @@ void RivenExternal::drawDomeSliders(uint16 startHotspot) {  	uint16 bitmapId = _vm->findResourceID(ID_TBMP, "*sliders*");  	for (uint16 i = 0; i < kDomeSliderSlotCount; i++) { -		Common::Rect srcRect = _vm->_hotspots[startHotspot + i].rect; +		Common::Rect srcRect = _vm->_hotspots[startHotspot + i]->rect;  		srcRect.translate(-dstAreaRect.left, -dstAreaRect.top); // Adjust the rect so it's in the destination area -		Common::Rect dstRect = _vm->_hotspots[startHotspot + i].rect; +		Common::Rect dstRect = _vm->_hotspots[startHotspot + i]->rect;  		if (_sliderState & (1 << (24 - i)))  			_vm->_gfx->drawImageRect(bitmapId, srcRect, dstRect); @@ -450,13 +450,13 @@ void RivenExternal::xaatrusopenbook(uint16 argc, uint16 *argv) {  	// Set hotspots depending on the page  	if (page == 1) { -		_vm->_hotspots[1].enabled = false; -		_vm->_hotspots[2].enabled = false; -		_vm->_hotspots[3].enabled = true; +		_vm->_hotspots[1]->enabled = false; +		_vm->_hotspots[2]->enabled = false; +		_vm->_hotspots[3]->enabled = true;  	} else { -		_vm->_hotspots[1].enabled = true; -		_vm->_hotspots[2].enabled = true; -		_vm->_hotspots[3].enabled = false; +		_vm->_hotspots[1]->enabled = true; +		_vm->_hotspots[2]->enabled = true; +		_vm->_hotspots[3]->enabled = false;  	}  	// Draw the image of the page @@ -515,13 +515,13 @@ void RivenExternal::xacathopenbook(uint16 argc, uint16 *argv) {  	// Set hotspots depending on the page  	if (page == 1) { -		_vm->_hotspots[1].enabled = false; -		_vm->_hotspots[2].enabled = false; -		_vm->_hotspots[3].enabled = true; +		_vm->_hotspots[1]->enabled = false; +		_vm->_hotspots[2]->enabled = false; +		_vm->_hotspots[3]->enabled = true;  	} else { -		_vm->_hotspots[1].enabled = true; -		_vm->_hotspots[2].enabled = true; -		_vm->_hotspots[3].enabled = false; +		_vm->_hotspots[1]->enabled = true; +		_vm->_hotspots[2]->enabled = true; +		_vm->_hotspots[3]->enabled = false;  	}  	// Draw the image of the page @@ -947,11 +947,11 @@ void RivenExternal::xbait(uint16 argc, uint16 *argv) {  	_vm->_system->updateScreen();  	// Set the bait if we put it on the plate -	if (_vm->_hotspots[9].rect.contains(_vm->_system->getEventManager()->getMousePos())) { +	if (_vm->_hotspots[9]->rect.contains(_vm->_system->getEventManager()->getMousePos())) {  		_vm->_vars["bbait"] = 1;  		_vm->getCurCard()->drawPicture(4); -		_vm->_hotspots[3].enabled = false; // Disable bait hotspot -		_vm->_hotspots[9].enabled = true; // Enable baitplate hotspot +		_vm->_hotspots[3]->enabled = false; // Disable bait hotspot +		_vm->_hotspots[9]->enabled = true; // Enable baitplate hotspot  	}  } @@ -1006,15 +1006,15 @@ void RivenExternal::xbaitplate(uint16 argc, uint16 *argv) {  	_vm->_system->updateScreen();  	// Set the bait if we put it on the plate, remove otherwise -	if (_vm->_hotspots[9].rect.contains(_vm->_system->getEventManager()->getMousePos())) { +	if (_vm->_hotspots[9]->rect.contains(_vm->_system->getEventManager()->getMousePos())) {  		_vm->_vars["bbait"] = 1;  		_vm->getCurCard()->drawPicture(4); -		_vm->_hotspots[3].enabled = false; // Disable bait hotspot -		_vm->_hotspots[9].enabled = true; // Enable baitplate hotspot +		_vm->_hotspots[3]->enabled = false; // Disable bait hotspot +		_vm->_hotspots[9]->enabled = true; // Enable baitplate hotspot  	} else {  		_vm->_vars["bbait"] = 0; -		_vm->_hotspots[3].enabled = true; // Enable bait hotspot -		_vm->_hotspots[9].enabled = false; // Disable baitplate hotspot +		_vm->_hotspots[3]->enabled = true; // Enable bait hotspot +		_vm->_hotspots[9]->enabled = false; // Disable baitplate hotspot  	}  } @@ -1194,8 +1194,8 @@ void RivenExternal::xgpincontrols(uint16 argc, uint16 *argv) {  	// Get our mouse position and adjust it to the beginning of the hotspot  	Common::Point mousePos = _vm->_system->getEventManager()->getMousePos(); -	mousePos.x -= _vm->_hotspots[3].rect.left; -	mousePos.y -= _vm->_hotspots[3].rect.top; +	mousePos.x -= _vm->_hotspots[3]->rect.left; +	mousePos.y -= _vm->_hotspots[3]->rect.top;  	// And now adjust it to which box we hit  	mousePos.x /= 10; @@ -1995,8 +1995,8 @@ void RivenExternal::xschool280_playwhark(uint16 argc, uint16 *argv) {  	}  	// Enable the correct hotspots for the movement now -	_vm->_hotspots[2].enabled = !_vm->_hotspots[2].enabled; -	_vm->_hotspots[3].enabled = !_vm->_hotspots[3].enabled; +	_vm->_hotspots[2]->enabled = !_vm->_hotspots[2]->enabled; +	_vm->_hotspots[3]->enabled = !_vm->_hotspots[3]->enabled;  	// Update the cursor  	_vm->updateCurrentHotspot(); @@ -2048,7 +2048,7 @@ void RivenExternal::xbookclick(uint16 argc, uint16 *argv) {  	// Track down our hotspot  	// Of course, they're not in any sane order...  	static const uint16 hotspotMap[] = { 1, 3, 2, 0 }; -	Common::Rect hotspotRect = _vm->_hotspots[hotspotMap[argv[3] - 1]].rect; +	Common::Rect hotspotRect = _vm->_hotspots[hotspotMap[argv[3] - 1]]->rect;  	debug(0, "xbookclick:");  	debug(0, "\tVideo Code = %d", argv[0]); @@ -2157,9 +2157,9 @@ void RivenExternal::xooffice30_closebook(uint16 argc, uint16 *argv) {  	_vm->_video->playMovieBlockingRiven(1);  	// Set the hotspots into their correct states -	_vm->_hotspots[2].enabled = false; -	_vm->_hotspots[5].enabled = false; -	_vm->_hotspots[6].enabled = true; +	_vm->_hotspots[2]->enabled = false; +	_vm->_hotspots[5]->enabled = false; +	_vm->_hotspots[6]->enabled = true;  	// We now need to draw PLST 1 and refresh, but PLST 1 is  	// drawn when refreshing anyway, so don't worry about that. @@ -2484,7 +2484,7 @@ void RivenExternal::xtisland390_covercombo(uint16 argc, uint16 *argv) {  	// If we have hit the correct 5 buttons in a row, activate the hotspot to open up the  	// telescope cover. -	_vm->_hotspots[9].enabled = (correctDigits == 5); +	_vm->_hotspots[9]->enabled = (correctDigits == 5);  }  // Atrus' Journal and Trap Book are added to inventory @@ -2617,9 +2617,9 @@ void RivenExternal::setMarbleHotspots() {  		uint32 &marblePos = _vm->_vars[s_marbleNames[i]];  		if (marblePos == 0) // In the receptacle -			_vm->_hotspots[i + 3].rect = _marbleBaseHotspots[i]; +			_vm->_hotspots[i + 3]->rect = _marbleBaseHotspots[i];  		else                 // On the grid -			_vm->_hotspots[i + 3].rect = generateMarbleGridRect(getMarbleX(marblePos), getMarbleY(marblePos)); +			_vm->_hotspots[i + 3]->rect = generateMarbleGridRect(getMarbleX(marblePos), getMarbleY(marblePos));  	}  } @@ -2627,7 +2627,7 @@ void RivenExternal::xt7800_setup(uint16 argc, uint16 *argv) {  	// First, let's store the base receptacle hotspots for the marbles  	if (_marbleBaseHotspots.empty())  		for (uint16 i = 0; i < kMarbleCount; i++) -			_marbleBaseHotspots.push_back(_vm->_hotspots[i + 3].rect); +			_marbleBaseHotspots.push_back(_vm->_hotspots[i + 3]->rect);  	// Move the marble hotspots based on their position variables  	setMarbleHotspots(); @@ -2640,7 +2640,7 @@ void RivenExternal::drawMarbles() {  		if (_vm->_vars["themarble"] - 1 == i)  			continue; -		Common::Rect rect = _vm->_hotspots[i + 3].rect; +		Common::Rect rect = _vm->_hotspots[i + 3]->rect;  		// Trim the rect down a bit  		rect.left += 3;  		rect.top += 3; @@ -2663,7 +2663,7 @@ void RivenExternal::xtakeit(uint16 argc, uint16 *argv) {  	marble = 0;  	for (uint32 i = 0; i < kMarbleCount; i++) -		if (_vm->_hotspots[i + 3].rect.contains(_vm->_system->getEventManager()->getMousePos())) { +		if (_vm->_hotspots[i + 3]->rect.contains(_vm->_system->getEventManager()->getMousePos())) {  			marble = i + 1;  			break;  		} diff --git a/engines/mohawk/riven_scripts.cpp b/engines/mohawk/riven_scripts.cpp index bdb30bd391..35b719537b 100644 --- a/engines/mohawk/riven_scripts.cpp +++ b/engines/mohawk/riven_scripts.cpp @@ -358,10 +358,10 @@ void RivenSimpleCommand::mohawkSwitch(uint16 op, uint16 argc, uint16 *argv) {  // Command 9: enable hotspot (blst_id)  void RivenSimpleCommand::enableHotspot(uint16 op, uint16 argc, uint16 *argv) { -	for (uint16 i = 0; i < _vm->getHotspotCount(); i++) { -		if (_vm->_hotspots[i].blstID == argv[0]) { +	for (uint16 i = 0; i < _vm->_hotspots.size(); i++) { +		if (_vm->_hotspots[i]->blstID == argv[0]) {  			debug(2, "Enabling hotspot with BLST ID %d", argv[0]); -			_vm->_hotspots[i].enabled = true; +			_vm->_hotspots[i]->enabled = true;  		}  	} @@ -371,10 +371,10 @@ void RivenSimpleCommand::enableHotspot(uint16 op, uint16 argc, uint16 *argv) {  // Command 10: disable hotspot (blst_id)  void RivenSimpleCommand::disableHotspot(uint16 op, uint16 argc, uint16 *argv) { -	for (uint16 i = 0; i < _vm->getHotspotCount(); i++) { -		if (_vm->_hotspots[i].blstID == argv[0]) { +	for (uint16 i = 0; i < _vm->_hotspots.size(); i++) { +		if (_vm->_hotspots[i]->blstID == argv[0]) {  			debug(2, "Disabling hotspot with BLST ID %d", argv[0]); -			_vm->_hotspots[i].enabled = false; +			_vm->_hotspots[i]->enabled = false;  		}  	} @@ -601,9 +601,9 @@ void RivenSimpleCommand::activateBLST(uint16 op, uint16 argc, uint16 *argv) {  		uint16 hotspotID = blst->readUint16BE();  		if (argv[0] == index) -			for (uint16 j = 0; j < _vm->getHotspotCount(); j++) -				if (_vm->_hotspots[j].blstID == hotspotID) -					_vm->_hotspots[j].enabled = (enabled == 1); +			for (uint16 j = 0; j < _vm->_hotspots.size(); j++) +				if (_vm->_hotspots[j]->blstID == hotspotID) +					_vm->_hotspots[j]->enabled = (enabled == 1);  	}  	delete blst; | 
