mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-26 20:59:00 +00:00
MOHAWK: Misc Mechanical fixes. Many thanks to Patrick Monnerat for the patch.
- Adds break statements where missing in Mechanical::toggleVar() and Mechanical::setVarValue() - Restore proper numbering of Achenar and Sirrus panel state variables, which were wrongly swapped. - When bird is singing, play sound continuously. - When operating the fortress elevator, keep the engine sound active while the elevator is moving.
This commit is contained in:
parent
a360a64dd7
commit
8e80f5690d
@ -560,6 +560,7 @@ void MystScriptParser::o_playSoundBlocking(uint16 op, uint16 var, uint16 argc, u
|
||||
debugC(kDebugScript, "Opcode %d: playSoundBlocking", op);
|
||||
debugC(kDebugScript, "\tsoundId: %d", soundId);
|
||||
|
||||
_vm->_sound->stopSound();
|
||||
_vm->_sound->playSoundBlocking(soundId);
|
||||
}
|
||||
|
||||
|
@ -102,6 +102,7 @@ void Mechanical::setupOpcodes() {
|
||||
|
||||
void Mechanical::disablePersistentScripts() {
|
||||
_fortressSimulationRunning = false;
|
||||
_elevatorRotationLeverMoving = false;
|
||||
_elevatorGoingMiddle = false;
|
||||
_birdSinging = false;
|
||||
_fortressRotationRunning = false;
|
||||
@ -126,10 +127,10 @@ void Mechanical::runPersistentScripts() {
|
||||
|
||||
uint16 Mechanical::getVar(uint16 var) {
|
||||
switch(var) {
|
||||
case 0: // Sirrus's Secret Panel State
|
||||
return _state.sirrusPanelState;
|
||||
case 1: // Achenar's Secret Panel State
|
||||
case 0: // Achenar's Secret Panel State
|
||||
return _state.achenarPanelState;
|
||||
case 1: // Sirrus's Secret Panel State
|
||||
return _state.sirrusPanelState;
|
||||
case 2: // Achenar's Secret Room Crate Lid Open and Blue Page Present
|
||||
if (_state.achenarCrateOpened) {
|
||||
if (_globals.bluePagesInBook & 4 || _globals.heldPage == 3)
|
||||
@ -195,16 +196,21 @@ uint16 Mechanical::getVar(uint16 var) {
|
||||
|
||||
void Mechanical::toggleVar(uint16 var) {
|
||||
switch(var) {
|
||||
case 0: // Sirrus's Secret Panel State
|
||||
_state.sirrusPanelState ^= 1;
|
||||
case 1: // Achenar's Secret Panel State
|
||||
case 0: // Achenar's Secret Panel State
|
||||
_state.achenarPanelState ^= 1;
|
||||
break;
|
||||
case 1: // Sirrus's Secret Panel State
|
||||
_state.sirrusPanelState ^= 1;
|
||||
break;
|
||||
case 3: // Achenar's Secret Room Crate State
|
||||
_state.achenarCrateOpened ^= 1;
|
||||
break;
|
||||
case 4: // Myst Book Room Staircase State
|
||||
_mystStaircaseState ^= 1;
|
||||
break;
|
||||
case 10: // Fortress Staircase State
|
||||
_state.staircaseState ^= 1;
|
||||
break;
|
||||
case 16: // Code Lock Shape #1 - Left
|
||||
case 17: // Code Lock Shape #2
|
||||
case 18: // Code Lock Shape #3
|
||||
@ -242,6 +248,7 @@ bool Mechanical::setVarValue(uint16 var, uint16 value) {
|
||||
switch (var) {
|
||||
case 13:
|
||||
_elevatorPosition = value;
|
||||
break;
|
||||
case 14: // Elevator going down when at top
|
||||
_elevatorGoingDown = value;
|
||||
break;
|
||||
@ -724,6 +731,7 @@ void Mechanical::birdSing_run() {
|
||||
uint32 time = _vm->_system->getMillis();
|
||||
if (_birdSingEndTime < time) {
|
||||
_bird->pauseMovie(true);
|
||||
_vm->_sound->stopSound();
|
||||
_birdSinging = false;
|
||||
}
|
||||
}
|
||||
|
@ -141,6 +141,19 @@ Audio::SoundHandle *Sound::replaceSoundMyst(uint16 id, byte volume, bool loop) {
|
||||
&& name.equals(_vm->getResourceName(ID_MSND, convertMystID(_handles[i].id))))
|
||||
return &_handles[i].handle;
|
||||
|
||||
// The original engine also forces looping for those sounds
|
||||
switch (id) {
|
||||
case 2205:
|
||||
case 2207:
|
||||
case 5378:
|
||||
case 7220:
|
||||
case 9119: // Elevator engine sound in mechanical age is looping.
|
||||
case 9120:
|
||||
case 9327:
|
||||
loop = true;
|
||||
break;
|
||||
}
|
||||
|
||||
stopSound();
|
||||
return playSound(id, volume, loop);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user