MOHAWK: Start converting RivenHotspot into a class
This commit is contained in:
parent
1b062d1e39
commit
23bbf05c91
7 changed files with 164 additions and 136 deletions
|
@ -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());
|
||||
}
|
||||
|
||||
|
|
|
@ -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];
|
||||
uint16 hotspotCount = inStream->readUint16BE();
|
||||
_hotspots.resize(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();
|
||||
|
||||
// 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) {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue