From fd9b52509f330146e4af1169ce107abffdf3dbb9 Mon Sep 17 00:00:00 2001 From: David Turner Date: Thu, 18 Feb 2010 23:31:51 +0000 Subject: Mohawk : Update with work on Myst EXIT opcodes to work out purpose. svn-id: r48087 --- engines/mohawk/myst_scripts.cpp | 88 ++++++++++++++++++++--------------------- engines/mohawk/myst_vars.cpp | 2 +- 2 files changed, 44 insertions(+), 46 deletions(-) (limited to 'engines') diff --git a/engines/mohawk/myst_scripts.cpp b/engines/mohawk/myst_scripts.cpp index 8321963198..a453bb0985 100644 --- a/engines/mohawk/myst_scripts.cpp +++ b/engines/mohawk/myst_scripts.cpp @@ -3383,6 +3383,7 @@ void MystScriptParser::opcode_201(uint16 op, uint16 var, uint16 argc, uint16 *ar case kIntroStack: _vm->_system->delayMillis(4 * 1000); _vm->_gfx->copyImageToScreen(4, Common::Rect(0, 0, 544, 333)); + // TODO : Wait until video ends, then change to card 5 break; case kSeleniticStack: // Used for Card 1191 (Maze Runner) @@ -3696,7 +3697,11 @@ void MystScriptParser::opcode_203_run(void) { break; case kMystStack: // Used for Card 4138 (Dock Forechamber Door) - // TODO: Fill in Logic.. + // TODO: Fill in Logic. Slide for Dock Forechamber Door? + // Original has Left to Right Open Slide and Upon leaving card, + // Right to left Slide before card change. + //debugC(kDebugScript, "Opcode %d: Clear Dock Forechamber Door Variable", op); + //_vm->_varStore->setVar(105, 0); break; case kMechanicalStack: // Used for Card 6043 (Weapons Rack with Snake Box) @@ -3798,7 +3803,7 @@ void MystScriptParser::opcode_204_run(void) { break; case kMystStack: // Used for Card 4134 and 4149 (Dock) - // TODO: Fill in.. + // TODO: Not sure of function. Not Gulls (at least directly). Fill in Logic. break; case kMechanicalStack: // TODO: Fill in Logic. @@ -3839,17 +3844,6 @@ void MystScriptParser::opcode_204(uint16 op, uint16 var, uint16 argc, uint16 *ar break; case kMystStack: // Used for Card 4134 and 4149 (Dock) - // TODO: Fill in logic.. Unsure of exact function to trigger and location on screen.. - if (false) { - // Card 4134 - _vm->_video->playMovie(_vm->wrapMovieFilename("birds1", kMystStack), 416, 0); - - // Card 4149 - _vm->_video->playMovie(_vm->wrapMovieFilename("birds2", kMystStack), 433, 0); - - // Unsure... - _vm->_video->playMovie(_vm->wrapMovieFilename("birds3", kMystStack), 0, 0); - } break; case kMechanicalStack: // Used for Card 6180 (Lower Elevator Puzzle) @@ -4473,7 +4467,15 @@ void MystScriptParser::opcode_215(uint16 op, uint16 var, uint16 argc, uint16 *ar switch (_vm->getCurStack()) { case kMystStack: // Used for Card 4134 (Dock Facing Marker Switch) - // TODO: Fill in logic. Logic for Gull Videos? + // TODO: Fill in logic for Gull Videos. + // may be offset and overlap and need video update to all these + // to run in sequence with opcode215_run() process... + if (false) { + // All birds(x) videos are 120x48 and played in top right corner of card + _vm->_video->playMovie(_vm->wrapMovieFilename("birds1", kMystStack), 544-120-1, 0); + _vm->_video->playMovie(_vm->wrapMovieFilename("birds2", kMystStack), 544-120-1, 0); + _vm->_video->playMovie(_vm->wrapMovieFilename("birds3", kMystStack), 544-120-1, 0); + } break; default: unknown(op, var, argc, argv); @@ -4486,9 +4488,18 @@ void MystScriptParser::opcode_216(uint16 op, uint16 var, uint16 argc, uint16 *ar switch (_vm->getCurStack()) { case kMystStack: - // Used for Card 4571 (Channelwood Tree) + // Used for Cards 4571 (Channelwood Tree), 4586 (Channelwood Tree), + // 4615 (Channelwood Tree) and 4601 (Channelwood Tree) if (argc == 0) { - // TODO: Fill in logic for Tree Position From Far... + // TODO: Fill in logic for Channelwood Tree Position i.e. Var 72 update // 0 to 12, 4 for Alcove + // Based on Timer code and following variables : + // 98 "Cabin Boiler Pilot Light Lit" + // 99 "Cabin Boiler Gas Valve Position" }, // 0 to 5 + // 305 "Cabin Boiler Lit" }, + // 306 "Cabin Boiler Steam Sound Control" }, // 0 to 27 + // 307 "Cabin Boiler Needle Position i.e. Fully Pressurised" }, // 0 to 1 + + // Note : Opcode 218 does boiler update code.. } else unknown(op, var, argc, argv); break; @@ -4686,9 +4697,9 @@ void MystScriptParser::opcode_300(uint16 op, uint16 var, uint16 argc, uint16 *ar case kMystStack: // Used in Card 4371 (Blue Book) Var = 101 // and Card 4363 (Red Book) Var = 100 - // TODO: Fill in Logic debugC(kDebugScript, "Opcode %d: Book Exit Function...", op); debugC(kDebugScript, "Var: %d", var); + // TODO: Fill in Logic break; case kStoneshipStack: // Used in Card 2218 (Telescope view) @@ -4727,7 +4738,7 @@ void MystScriptParser::opcode_301(uint16 op, uint16 var, uint16 argc, uint16 *ar switch (_vm->getCurStack()) { case kDemoPreviewStack: case kMystStack: - // Used in Card 4080 (Fireplace Book) and Other Myst Library Books + // Used in Cards 4047, 4059, 4060, 4068 and 4080 (Myst Library Books - Open) // TODO: Fill in Logic. Clear Variable on Book exit.. or Copy from duplicate.. _vm->_varStore->setVar(0, 1); break; @@ -4756,12 +4767,10 @@ void MystScriptParser::opcode_303(uint16 op, uint16 var, uint16 argc, uint16 *ar switch (_vm->getCurStack()) { case kMystStack: + // Used for Card 4134 (Dock Facing Marker Switch) // Used for Card 4141 (Myst Dock Facing Sea) - if (argc == 0) { - debugC(kDebugScript, "Opcode %d: Clear Dock Forechamber Door Variable", op); - _vm->_varStore->setVar(105, 0); - } else - unknown(op, var, argc, argv); + // In the original engine, this opcode stopped Gull Movies if playing, + // upon card change, but this behaviour is now default in this engine. break; default: unknown(op, var, argc, argv); @@ -4811,11 +4820,8 @@ void MystScriptParser::opcode_306(uint16 op, uint16 var, uint16 argc, uint16 *ar switch (_vm->getCurStack()) { case kMystStack: // Used for Card 4098 (Cabin Boiler Puzzle) - if (argc == 0) { - debugC(kDebugScript, "Opcode %d: Unknown...", op); - // TODO: Logic for clearing variable? - } else - unknown(op, var, argc, argv); + // In the original engine, this opcode stopped the Boiler Fire and Meter Needle videos + // if playing, upon card change, but this behaviour is now default in this engine. break; default: unknown(op, var, argc, argv); @@ -4828,7 +4834,7 @@ void MystScriptParser::opcode_307(uint16 op, uint16 var, uint16 argc, uint16 *ar switch (_vm->getCurStack()) { case kMystStack: - // Used for Card 4299 (Generator Room Controls) + // Used for Card 4297 (Generator Room Controls) if (argc == 0) { debugC(kDebugScript, "Opcode %d: Unknown...", op); // TODO: Logic for clearing variable? @@ -4847,11 +4853,8 @@ void MystScriptParser::opcode_308(uint16 op, uint16 var, uint16 argc, uint16 *ar switch (_vm->getCurStack()) { case kMystStack: // Used for Card 4530 (Rocketship Music Sliders) - if (argc == 0) { - debugC(kDebugScript, "Opcode %d: Unknown...", op); - // TODO: Logic for clearing variable? - } else - unknown(op, var, argc, argv); + // In the original engine, this opcode stopped the Selenitic Book Movie if playing, + // upon card change, but this behaviour is now default in this engine. break; default: unknown(op, var, argc, argv); @@ -4864,12 +4867,9 @@ void MystScriptParser::opcode_309(uint16 op, uint16 var, uint16 argc, uint16 *ar switch (_vm->getCurStack()) { case kMystStack: - // Used for Card 4168 (Green D'ni Book Open), Red Book Open and Blue Book Open - if (argc == 0) { - debugC(kDebugScript, "Opcode %d: Unknown...", op); - // TODO: Logic for clearing variable? - } else - unknown(op, var, argc, argv); + // Used for Card 4168 (Green D'ni Book Open) + // In the original engine, this opcode stopped the Green Book Atrus Movies if playing, + // upon card change, but this behaviour is now default in this engine. break; default: unknown(op, var, argc, argv); @@ -4883,11 +4883,9 @@ void MystScriptParser::opcode_312(uint16 op, uint16 var, uint16 argc, uint16 *ar switch (_vm->getCurStack()) { case kMystStack: // Used for Card 4698 (Dock Forechamber Imager) - if (argc == 0) { - debugC(kDebugScript, "Opcode %d: Unknown...", op); - // TODO: Logic for clearing variable? - } else - unknown(op, var, argc, argv); + // In the original engine, this opcode stopped the Imager Movie if playing, + // especially the hardcoded Topological Extrusion (Mountain) video, + // upon card change, but this behaviour is now default in this engine. break; default: unknown(op, var, argc, argv); diff --git a/engines/mohawk/myst_vars.cpp b/engines/mohawk/myst_vars.cpp index edb5295809..f8ea11a1e2 100644 --- a/engines/mohawk/myst_vars.cpp +++ b/engines/mohawk/myst_vars.cpp @@ -199,7 +199,7 @@ MystVarEntry mystVars[] = { { 48, 0, "Marker Switch on Dock - Duplicate of Var #4?" }, // 0 to 2 { 49, 0, "Generator Running" }, // Boolean used for Sound.. // 50 = TODO: ? - { 51, 2, "Forechamber Imager Movie Control Variable" }, // 0 to 4 = Blank, No Function? / Mountain?, Water, Atrus, Marker Switch + { 51, 2, "Forechamber Imager Movie Control Variable" }, // 0 to 4 = Blank, Mountain, Water, Atrus, Marker Switch { 52, 0, "Generator Switch #1" }, { 53, 0, "Generator Switch #2" }, { 54, 0, "Generator Switch #3" }, -- cgit v1.2.3