[Scummvm-cvs-logs] SF.net SVN: scummvm:[55423] scummvm/trunk/engines/mohawk/myst_stacks
bgk at users.sourceforge.net
bgk at users.sourceforge.net
Sat Jan 22 14:03:55 CET 2011
Revision: 55423
http://scummvm.svn.sourceforge.net/scummvm/?rev=55423&view=rev
Author: bgk
Date: 2011-01-22 13:03:54 +0000 (Sat, 22 Jan 2011)
Log Message:
-----------
MOHAWK: Implement Channelwood opcodes 118 and 203: Sirius's drawer
Modified Paths:
--------------
scummvm/trunk/engines/mohawk/myst_stacks/channelwood.cpp
scummvm/trunk/engines/mohawk/myst_stacks/channelwood.h
Modified: scummvm/trunk/engines/mohawk/myst_stacks/channelwood.cpp
===================================================================
--- scummvm/trunk/engines/mohawk/myst_stacks/channelwood.cpp 2011-01-22 13:01:10 UTC (rev 55422)
+++ scummvm/trunk/engines/mohawk/myst_stacks/channelwood.cpp 2011-01-22 13:03:54 UTC (rev 55423)
@@ -65,7 +65,7 @@
OPCODE(115, o_valveHandleMove3);
OPCODE(116, o_valveHandleMoveStart3);
OPCODE(117, opcode_117);
- OPCODE(118, opcode_118);
+ OPCODE(118, o_drawerOpen);
OPCODE(119, opcode_119);
OPCODE(122, o_waterTankValveClose);
OPCODE(123, o_executeMouseUp);
@@ -77,7 +77,7 @@
// "Init" Opcodes
OPCODE(201, o_lever_init);
OPCODE(202, o_pipeValve_init);
- OPCODE(203, opcode_203);
+ OPCODE(203, o_drawer_init);
// "Exit" Opcodes
OPCODE(300, opcode_300);
@@ -86,11 +86,11 @@
#undef OPCODE
void MystScriptParser_Channelwood::disablePersistentScripts() {
- opcode_203_disable();
+
}
void MystScriptParser_Channelwood::runPersistentScripts() {
- opcode_203_run();
+
}
uint16 MystScriptParser_Channelwood::getVar(uint16 var) {
@@ -129,9 +129,8 @@
return _state.stairsUpperDoorState;
case 17: // Achenar's Holoprojector Selection
return _state.holoprojectorSelection;
-// case 18: // Sirrus's Room Bed Drawer Open
-// return 0;
-// return 1;
+ case 18: // Sirrus's Room Bed Drawer Open
+ return _siriusDrawerState;
case 19: // Sound - Water Tank Valve
return (_state.waterValveStates & 0x80) ? 1 : 0;
case 20: // Sound - First Water Valve Water Flowing To Left
@@ -158,13 +157,26 @@
return _doorOpened;
case 32: // Sound - Water Flowing in Pipe to Book Room Elevator
return ((_state.waterValveStates & 0xf8) == 0xb0 && _state.pipeState) ? 1 : 0;
-// case 102: // Sirrus's Desk Drawer / Red Page State
-// return 0; // Drawer Closed
-// return 1; // Drawer Open, Red Page Taken
-// return 2; // Drawer Open, Red Page Present
-// case 103: // Blue Page Present
-// return 0; // Blue Page Taken
-// return 1; // Blue Page Present
+ case 33: // Channelwood Lower Walkway to Upper Walkway Spiral Stair Upper Door State
+ if (_state.stairsUpperDoorState) {
+ if (_tempVar == 1)
+ return 2;
+ else
+ return 1;
+ } else {
+ return 0;
+ }
+ case 102: // Sirrus's Desk Drawer / Red Page State
+ if (_siriusDrawerState) {
+ if(!(_globals.redPagesInBook & 16) && (_globals.heldPage != 11))
+ return 2; // Drawer Open, Red Page Present
+ else
+ return 1; // Drawer Open, Red Page Taken
+ } else {
+ return 0; // Drawer Closed
+ }
+ case 103: // Blue Page Present
+ return !(_globals.bluePagesInBook & 16) && (_globals.heldPage != 5);
default:
return MystScriptParser::getVar(var);
}
@@ -181,6 +193,22 @@
case 16: // Channelwood Lower Walkway to Upper Walkway Spiral Stair Upper Door State
_state.stairsUpperDoorState ^= 1;
break;
+ case 102: // Red page
+ if (!(_globals.redPagesInBook & 16)) {
+ if (_globals.heldPage == 11)
+ _globals.heldPage = 0;
+ else
+ _globals.heldPage = 11;
+ }
+ break;
+ case 103: // Blue page
+ if (!(_globals.bluePagesInBook & 16)) {
+ if (_globals.heldPage == 5)
+ _globals.heldPage = 0;
+ else
+ _globals.heldPage = 5;
+ }
+ break;
default:
MystScriptParser::toggleVar(var);
break;
@@ -197,6 +225,12 @@
refresh = true;
}
break;
+ case 5: // Lower Walkway to Upper Walkway Spiral Stair Lower Door State
+ if (_state.stairsLowerDoorState != value) {
+ _state.stairsLowerDoorState = value;
+ refresh = true;
+ }
+ break;
case 9:
refresh = pipeChangeValve(value, 0x40);
break;
@@ -215,8 +249,12 @@
case 14:
refresh = pipeChangeValve(value, 0x02);
break;
-// case 18: // Sirrus's Room Bed Drawer Open
-// temp ^= 1;
+ case 18: // Sirrus's Room Bed Drawer Open
+ if (_siriusDrawerState != value) {
+ _siriusDrawerState = value;
+ refresh = true;
+ }
+ break;
case 30: // Door opened
_doorOpened = value;
break;
@@ -553,15 +591,12 @@
unknown(op, var, argc, argv);
}
-void MystScriptParser_Channelwood::opcode_118(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
- varUnusedCheck(op, var);
+void MystScriptParser_Channelwood::o_drawerOpen(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
+ debugC(kDebugScript, "Opcode %d: Open Sirius drawer", op);
- if (argc == 0) {
- // Used on Card 3318 (Sirrus' Room Nightstand Drawer)
- // Triggered when clicked on drawer
- // TODO: Implement function...
- } else
- unknown(op, var, argc, argv);
+ _siriusDrawerState = 1;
+ _vm->redrawArea(18, false);
+ _vm->redrawArea(102, false);
}
void MystScriptParser_Channelwood::opcode_119(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
@@ -674,35 +709,10 @@
_valveVar = var;
}
-static struct {
- bool enabled;
-} g_opcode203Parameters;
-
-void MystScriptParser_Channelwood::opcode_203_run(void) {
- if (g_opcode203Parameters.enabled) {
- // Used for Card 3310 (Sirrus' Room Right Bed Drawer),
- // Card 3307 (Sirrus' Room Left Bed Drawer)
- // and Card 3318 (Sirrus' Room Nightstand Drawer)
- // TODO: Fill in Logic...
- }
+void MystScriptParser_Channelwood::o_drawer_init(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
+ _siriusDrawerState = 0;
}
-void MystScriptParser_Channelwood::opcode_203_disable(void) {
- g_opcode203Parameters.enabled = false;
-}
-
-void MystScriptParser_Channelwood::opcode_203(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
- varUnusedCheck(op, var);
-
- // Used for Card 3310 (Sirrus' Room Right Bed Drawer),
- // Card 3307 (Sirrus' Room Left Bed Drawer)
- // and Card 3318 (Sirrus' Room Nightstand Drawer)
- if (argc == 0)
- g_opcode203Parameters.enabled = true;
- else
- unknown(op, var, argc, argv);
-}
-
void MystScriptParser_Channelwood::opcode_300(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
// Used in Card 3012 (Achenar's Holoprojector Control)
varUnusedCheck(op, var);
Modified: scummvm/trunk/engines/mohawk/myst_stacks/channelwood.h
===================================================================
--- scummvm/trunk/engines/mohawk/myst_stacks/channelwood.h 2011-01-22 13:01:10 UTC (rev 55422)
+++ scummvm/trunk/engines/mohawk/myst_stacks/channelwood.h 2011-01-22 13:03:54 UTC (rev 55423)
@@ -51,9 +51,6 @@
void toggleVar(uint16 var);
bool setVarValue(uint16 var, uint16 value);
- void opcode_203_run();
- void opcode_203_disable();
-
DECLARE_OPCODE(o_bridgeToggle);
DECLARE_OPCODE(o_pipeExtend);
DECLARE_OPCODE(opcode_102);
@@ -73,7 +70,7 @@
DECLARE_OPCODE(o_valveHandleMove3);
DECLARE_OPCODE(o_valveHandleMoveStart3);
DECLARE_OPCODE(opcode_117);
- DECLARE_OPCODE(opcode_118);
+ DECLARE_OPCODE(o_drawerOpen);
DECLARE_OPCODE(opcode_119);
DECLARE_OPCODE(o_executeMouseUp);
DECLARE_OPCODE(o_waterTankValveClose);
@@ -82,7 +79,7 @@
DECLARE_OPCODE(o_lever_init);
DECLARE_OPCODE(o_pipeValve_init);
- DECLARE_OPCODE(opcode_203);
+ DECLARE_OPCODE(o_drawer_init);
DECLARE_OPCODE(opcode_300);
@@ -90,6 +87,8 @@
uint16 _valveVar; // 64
+ uint16 _siriusDrawerState; // 66
+
uint16 _doorOpened; // 68
bool _leverPulled;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list