diff options
author | Max Horn | 2003-07-12 22:00:59 +0000 |
---|---|---|
committer | Max Horn | 2003-07-12 22:00:59 +0000 |
commit | d35c57a53f0b9427f41f8c0deef40ef9493e88a9 (patch) | |
tree | f605010e63497fb8641e3c755bffcba0e3a052a1 | |
parent | 187b715306a7a1912e71a0854992a54115d1f751 (diff) | |
download | scummvm-rg350-d35c57a53f0b9427f41f8c0deef40ef9493e88a9.tar.gz scummvm-rg350-d35c57a53f0b9427f41f8c0deef40ef9493e88a9.tar.bz2 scummvm-rg350-d35c57a53f0b9427f41f8c0deef40ef9493e88a9.zip |
fixes for cutscenes in V2 games
svn-id: r8956
-rw-r--r-- | scumm/intern.h | 1 | ||||
-rw-r--r-- | scumm/script_v2.cpp | 34 |
2 files changed, 18 insertions, 17 deletions
diff --git a/scumm/intern.h b/scumm/intern.h index cc0a830ea4..054772406d 100644 --- a/scumm/intern.h +++ b/scumm/intern.h @@ -215,6 +215,7 @@ protected: virtual void clearStateCommon(byte type); void resetSentence(); + void setUserState(byte state); /* Version 2 script opcodes */ void o2_actorFromPos(); diff --git a/scumm/script_v2.cpp b/scumm/script_v2.cpp index 06df52eac6..908d428cf6 100644 --- a/scumm/script_v2.cpp +++ b/scumm/script_v2.cpp @@ -1219,17 +1219,15 @@ void Scumm_v2::o2_roomOps() { void Scumm_v2::o2_cutscene() { //warning("TODO o2_cutscene()"); - vm.cutSceneData[0] = _userState; + vm.cutSceneData[0] = _userState | (_userPut ? 16 : 0); vm.cutSceneData[1] = (int16)VAR(VAR_CURSORSTATE); vm.cutSceneData[2] = _currentRoom; vm.cutSceneData[3] = camera._mode; VAR(VAR_CURSORSTATE) = 200; - // TODO: some cursor command stuff (hide mouse etc maybe?) - freezeScripts(0); - _userPut = 0; - _cursor.state = 0; + // Hide inventory, freeze scripts, hide cursor + setUserState(15); _sentenceNum = 0; stopScript(SENTENCE_SCRIPT); @@ -1249,10 +1247,8 @@ void Scumm_v2::o2_endCutscene() { VAR(VAR_CURSORSTATE) = vm.cutSceneData[1]; - // TODO: some cursor command stuff (probably to reset it to the pre-cutscene state) - unfreezeScripts(); - _userPut = 1; - _cursor.state = 1; + // Reset user state to values before cutscene + setUserState(vm.cutSceneData[0] | 7); if (_gameId == GID_MANIAC) { camera._mode = (byte) vm.cutSceneData[3]; @@ -1357,27 +1353,31 @@ void Scumm_v2::o2_setObjectName() { } void Scumm_v2::o2_cursorCommand() { // TODO: Define the magic numbers - int cmd = getVarOrDirectWord(0x80); - int a2 = cmd >> 8; + uint16 cmd = getVarOrDirectWord(0x80); + byte state = cmd >> 8; if (cmd & 0xFF) { VAR(VAR_CURSORSTATE) = cmd & 0xFF; } + + setUserState(state); +} - if (a2 & 4) { // Userface - _userState = a2 & (32 | 64 | 128); +void Scumm_v2::setUserState(byte state) { + if (state & 4) { // Userface + _userState = state & (32 | 64 | 128); runInventoryScript(0); } - if (a2 & 1) { // Freeze - if (a2 & 8) + if (state & 1) { // Freeze + if (state & 8) freezeScripts(0); else unfreezeScripts(); } - if (a2 & 2) { // Cursor Show/Hide - if (a2 & 16) { + if (state & 2) { // Cursor Show/Hide + if (state & 16) { _userPut = 1; _cursor.state = 1; } else { |