Unified
Split
Showing
with
43 additions
and 2 deletions.
- +18 −0 engines/mohawk/detection_tables.h
- +20 −1 engines/mohawk/myst_scripts.cpp
- +2 −0 engines/mohawk/myst_stacks/channelwood.cpp
- +2 −0 engines/mohawk/myst_stacks/myst.cpp
- +1 −1 gui/gui-manager.cpp
| @@ -48,6 +48,24 @@ static const MohawkGameDescription gameDescriptions[] = { | ||
| 0, | ||
| }, | ||
|
|
||
| // Myst | ||
| // English Windows 3.11, v1.0 | ||
| // From vonLeheCreative, #9645 | ||
| { | ||
| { | ||
| "myst", | ||
| "", | ||
| AD_ENTRY1("MYST.DAT", "0e4b6fcbd2419d4371365314fb7443f8"), | ||
| Common::EN_ANY, | ||
| Common::kPlatformWindows, | ||
| ADGF_NO_FLAGS, | ||
| GUI_OPTIONS_MYST | ||
| }, | ||
| GType_MYST, | ||
| 0, | ||
| 0, | ||
| }, | ||
|
|
||
| // Myst Demo | ||
| // English Windows 3.11 | ||
| // From CD-ROM Today July, 1994 | ||
| @@ -355,7 +355,26 @@ void MystScriptParser::o_changeCardSwitchRtL(uint16 op, uint16 var, uint16 argc, | ||
| } | ||
|
|
||
| void MystScriptParser::o_takePage(uint16 op, uint16 var, uint16 argc, uint16 *argv) { | ||
| uint16 cursorId = argv[0]; | ||
| // In most game releases, the first opcode argument is the new mouse cursor. | ||
| // However, in the original v1.0 English release this opcode takes no argument. | ||
| uint16 cursorId; // = argv[0]; | ||
| switch (var) { | ||
| case 41: // Vault white page | ||
| cursorId = kWhitePageCursor; | ||
| break; | ||
| case 25: // Fireplace red page | ||
| case 102: // Red page | ||
| cursorId = kRedPageCursor; | ||
| break; | ||
| case 24: // Fireplace blue page | ||
| case 103: // Blue page | ||
| cursorId = kBluePageCursor; | ||
| break; | ||
| default: | ||
| warning("Unexpected take page variable '%d'", var); | ||
| cursorId = kDefaultMystCursor; | ||
| } | ||
|
|
||
| uint16 oldPage = _globals.heldPage; | ||
|
|
||
| debugC(kDebugScript, "Opcode %d: takePage Var %d CursorId %d", op, var, cursorId); | ||
| @@ -368,6 +368,7 @@ void Channelwood::o_waterTankValveOpen(uint16 op, uint16 var, uint16 argc, uint1 | ||
| for (uint i = 0; i < 2; i++) | ||
| for (uint16 imageId = 3601; imageId >= 3595; imageId--) { | ||
| _vm->_gfx->copyImageToScreen(imageId, rect); | ||
| _vm->pollAndDiscardEvents(); | ||
| _vm->_system->updateScreen(); | ||
| } | ||
|
|
||
| @@ -699,6 +700,7 @@ void Channelwood::o_waterTankValveClose(uint16 op, uint16 var, uint16 argc, uint | ||
| for (uint i = 0; i < 2; i++) | ||
| for (uint16 imageId = 3595; imageId <= 3601; imageId++) { | ||
| _vm->_gfx->copyImageToScreen(imageId, rect); | ||
| _vm->pollAndDiscardEvents(); | ||
| _vm->_system->updateScreen(); | ||
| } | ||
|
|
||
| @@ -864,13 +864,15 @@ void Myst::o_fireplaceToggleButton(uint16 op, uint16 var, uint16 argc, uint16 *a | ||
| // Unset button | ||
| for (uint i = 4795; i >= 4779; i--) { | ||
| _vm->_gfx->copyImageToScreen(i, getInvokingResource<MystArea>()->getRect()); | ||
| _vm->pollAndDiscardEvents(); | ||
| _vm->_system->updateScreen(); | ||
| } | ||
| _fireplaceLines[var - 17] &= ~bitmask; | ||
| } else { | ||
| // Set button | ||
| for (uint i = 4779; i <= 4795; i++) { | ||
| _vm->_gfx->copyImageToScreen(i, getInvokingResource<MystArea>()->getRect()); | ||
| _vm->pollAndDiscardEvents(); | ||
| _vm->_system->updateScreen(); | ||
| } | ||
| _fireplaceLines[var - 17] |= bitmask; | ||
| @@ -261,7 +261,7 @@ void GuiManager::addToTrash(GuiObject* object, Dialog* parent) { | ||
| t.parent = 0; | ||
| // If a dialog was provided, check it is in the dialog stack | ||
| if (parent != 0) { | ||
| for (int i = 0 ; i < _dialogStack.size() ; ++i) { | ||
| for (uint i = 0 ; i < _dialogStack.size() ; ++i) { | ||
| if (_dialogStack[i] == parent) { | ||
| t.parent = parent; | ||
| break; | ||