diff options
author | Matthew Stewart | 2018-06-28 18:44:22 -0400 |
---|---|---|
committer | Eugene Sandulenko | 2018-08-09 08:37:30 +0200 |
commit | 0879985ddd27dd1e119efb6e8200df5f0ba3e970 (patch) | |
tree | cfcb3f0bbbf7189a83f873192de48cdee441bbfb /engines/startrek/rooms | |
parent | c47150358157524c4b0079b7927ded660359f99f (diff) | |
download | scummvm-rg350-0879985ddd27dd1e119efb6e8200df5f0ba3e970.tar.gz scummvm-rg350-0879985ddd27dd1e119efb6e8200df5f0ba3e970.tar.bz2 scummvm-rg350-0879985ddd27dd1e119efb6e8200df5f0ba3e970.zip |
STARTREK: MUDD3
Diffstat (limited to 'engines/startrek/rooms')
-rw-r--r-- | engines/startrek/rooms/function_map.h | 43 | ||||
-rw-r--r-- | engines/startrek/rooms/mudd0.cpp | 7 | ||||
-rw-r--r-- | engines/startrek/rooms/mudd2.cpp | 34 | ||||
-rw-r--r-- | engines/startrek/rooms/mudd3.cpp | 406 |
4 files changed, 469 insertions, 21 deletions
diff --git a/engines/startrek/rooms/function_map.h b/engines/startrek/rooms/function_map.h index d1f3b7800e..89b03975f7 100644 --- a/engines/startrek/rooms/function_map.h +++ b/engines/startrek/rooms/function_map.h @@ -1569,7 +1569,50 @@ RoomAction mudd2ActionList[] = { RoomAction mudd3ActionList[] = { { Action(ACTION_TICK, 1, 0, 0), &Room::mudd3Tick1 }, + { Action(ACTION_USE, OBJECT_ICOMM, -1, 0), &Room::mudd3UseCommunicator }, + { Action(ACTION_LOOK, 0x20, 0, 0), &Room::mudd3LookAtScreen }, + { Action(ACTION_USE, OBJECT_ISTRICOR, 0x20, 0), &Room::mudd3UseSTricorderOnScreen }, + { Action(ACTION_USE, OBJECT_KIRK, 0x20, 0), &Room::mudd3UseKirkOnScreen }, + { Action(ACTION_USE, OBJECT_SPOCK, 0x21, 0), &Room::mudd3UseSpockOnSphere }, + { Action(ACTION_TIMER_EXPIRED, 3, 0, 0), &Room::mudd3Timer3Expired }, + { Action(ACTION_USE, OBJECT_MCCOY, 0x21, 0), &Room::mudd3UseMccoyOnSphere }, + { Action(ACTION_USE, OBJECT_REDSHIRT, 0x21, 0), &Room::mudd3UseRedshirtOnSphere }, + { Action(ACTION_USE, OBJECT_IMTRICOR, 0x21, 0), &Room::mudd3UseMTricorderOnSphere }, + { Action(ACTION_USE, OBJECT_ISTRICOR, 0x21, 0), &Room::mudd3UseSTricorderOnSphere }, + { Action(ACTION_FINISHED_WALKING, 2, 0, 0), &Room::mudd3ReadyToHookUpTricorders }, + { Action(ACTION_TIMER_EXPIRED, 1, 0, 0), &Room::mudd3Timer1Expired }, + { Action(ACTION_TIMER_EXPIRED, 2, 0, 0), &Room::mudd3Timer2Expired }, + { Action(ACTION_TIMER_EXPIRED, 4, 0, 0), &Room::mudd3Timer4Expired }, + { Action(ACTION_USE, OBJECT_IDISKS, 0x21, 0), &Room::mudd3UseMemoryDiskOnSphere }, + + // Common code + { Action(ACTION_USE, OBJECT_IDEGRIME, -1, 0), &Room::mudd0UseDegrimer }, + { Action(ACTION_USE, OBJECT_ILENSES, OBJECT_IDEGRIME, 0), &Room::mudd0UseLenseOnDegrimer }, + { Action(ACTION_USE, OBJECT_IALIENDV, -1, 0), &Room::mudd0UseAlienDevice }, + { Action(ACTION_FINISHED_ANIMATION, 9, 0, 0), &Room::mudd0FiredAlienDevice }, + + { Action(ACTION_GET, 13, 0, 0), &Room::mudd3GetRepairTool }, + { Action(ACTION_FINISHED_WALKING, 3, 0, 0), &Room::mudd3ReachedRepairTool }, + { Action(ACTION_FINISHED_ANIMATION, 1, 0, 0), &Room::mudd3PickedUpRepairTool }, + { Action(ACTION_LOOK, 0x21, 0, 0), &Room::mudd3LookAtSphere }, + { Action(ACTION_WALK, 0x22, 0, 0), &Room::mudd3WalkToNorthDoor }, + { Action(ACTION_TOUCHED_HOTSPOT, 0, 0, 0), &Room::mudd3TouchedHotspot0 }, + { Action(ACTION_WALK, 0x23, 0, 0), &Room::mudd3WalkToEastDoor }, + { Action(ACTION_TOUCHED_HOTSPOT, 1, 0, 0), &Room::mudd3TouchedHotspot1 }, + { Action(ACTION_LOOK, OBJECT_KIRK, 0, 0), &Room::mudd3LookAtKirk }, + { Action(ACTION_LOOK, OBJECT_SPOCK, 0, 0), &Room::mudd3LookAtSpock }, + { Action(ACTION_LOOK, OBJECT_MCCOY, 0, 0), &Room::mudd3LookAtMccoy }, + { Action(ACTION_LOOK, OBJECT_REDSHIRT, 0, 0), &Room::mudd3LookAtRedshirt }, + { Action(ACTION_LOOK, 8, 0, 0), &Room::mudd3LookAtMudd }, + { Action(ACTION_TALK, OBJECT_KIRK, 0, 0), &Room::mudd3TalkToKirk }, + { Action(ACTION_TALK, OBJECT_SPOCK, 0, 0), &Room::mudd3TalkToSpock }, + { Action(ACTION_TALK, OBJECT_MCCOY, 0, 0), &Room::mudd3TalkToMccoy }, + { Action(ACTION_TALK, OBJECT_REDSHIRT, 0, 0), &Room::mudd3TalkToRedshirt }, + { Action(ACTION_TALK, 8, 0, 0), &Room::mudd3TalkToMudd }, + { Action(ACTION_USE, OBJECT_IMEDKIT, -1, 0), &Room::mudd3UseMedkit }, + // TODO: remainder? something about losing atmosphere? }; + RoomAction mudd4ActionList[] = { { Action(ACTION_TICK, 1, 0, 0), &Room::mudd4Tick1 }, }; diff --git a/engines/startrek/rooms/mudd0.cpp b/engines/startrek/rooms/mudd0.cpp index 54b3a2244f..381a07a14b 100644 --- a/engines/startrek/rooms/mudd0.cpp +++ b/engines/startrek/rooms/mudd0.cpp @@ -165,7 +165,7 @@ void Room::mudd0UseLenseOnDegrimer() { _vm->_awayMission.mudd.missionScore++; showText(TX_MUD0N011); - // Identical (?) audio files: TX_MUD0N011, TX_MUD1N013, TX_MUD2N010 + // Identical (?) audio files: TX_MUD0N011, TX_MUD1N013, TX_MUD2N010, TX_MUD3N016 } @@ -174,6 +174,7 @@ void Room::mudd0UseAlienDevice() { 9, // MUDD0 13, // MUDD1 11, // MUDD2 + 11, // MUDD3 }; _vm->_awayMission.disableInput = true; @@ -191,13 +192,13 @@ void Room::mudd0FiredAlienDevice() { _vm->_awayMission.mudd.discoveredLenseAndDegrimerFunction = true; _vm->_awayMission.mudd.missionScore += 5; showText(TX_SPEAKER_KIRK, TX_MUD0_002); - // Identical (?) audio files: TX_MUD0_002, TX_MUD1_002 + // Identical (?) audio files: TX_MUD0_002, TX_MUD1_002, TX_MUD2_002 } } void Room::mudd0UseDegrimer() { - // Identical (?) audio files: TX_MUD0N002, TX_MUD1N004, TX_MUD2N001... + // Identical (?) audio files: TX_MUD0N002, TX_MUD1N004, TX_MUD2N001, TX_MUD3N001... showText(TX_MUD0N002); } diff --git a/engines/startrek/rooms/mudd2.cpp b/engines/startrek/rooms/mudd2.cpp index 81a975dfe6..d2a420d0c4 100644 --- a/engines/startrek/rooms/mudd2.cpp +++ b/engines/startrek/rooms/mudd2.cpp @@ -69,9 +69,9 @@ void Room::mudd2Tick1() { _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_REDSHIRT] = DIR_W; _vm->_awayMission.mudd.muddDroppedCapsule = false; - if (_vm->_awayMission.mudd.field4e == 0) { - _vm->_awayMission.mudd.field4e = 0; - } else if (_vm->_awayMission.mudd.field4e == 2) { + if (_vm->_awayMission.mudd.muddState == 0) { + _vm->_awayMission.mudd.muddState = 0; + } else if (_vm->_awayMission.mudd.muddState == 2) { _vm->_awayMission.mudd.muddDroppedCapsule = true; if (!_vm->_awayMission.mudd.muddUnconscious) { _vm->_awayMission.mudd.muddUnconscious = false; @@ -80,16 +80,16 @@ void Room::mudd2Tick1() { } else { loadActorAnim2(OBJECT_MUDD, "s4sbob", 0x9f, 0xba); } - } else if (_vm->_awayMission.mudd.field3f) { - _vm->_awayMission.mudd.field4e = 0; - } else if (_vm->_awayMission.mudd.field4e == 1) { + } else if (_vm->_awayMission.mudd.muddCurrentlyInsane) { + _vm->_awayMission.mudd.muddState = 0; + } else if (_vm->_awayMission.mudd.muddState == 1) { playMidiMusicTracks(3); loadActorAnim2(OBJECT_MUDD, "s4sbhw", 0x99, 0xbf); _vm->_awayMission.disableInput = 2; _vm->_awayMission.mudd.muddInhaledGas = true; _vm->_awayMission.timers[1] = 70; - _vm->_awayMission.mudd.field4e = 2; - _vm->_awayMission.mudd.field3f = true; + _vm->_awayMission.mudd.muddState = 2; + _vm->_awayMission.mudd.muddCurrentlyInsane = true; } } @@ -107,7 +107,7 @@ void Room::mudd2UseSpockOnCapsules() { void Room::mudd2GetCapsules() { if (!_vm->_awayMission.mudd.muddInhaledGas || _vm->_awayMission.mudd.muddUnconscious) { - if (!_vm->_awayMission.mudd.field36) + if (!_vm->_awayMission.mudd.translatedAlienLanguage) showText(TX_SPEAKER_MCCOY, TX_MUD2_024); else walkCrewmanC(OBJECT_MCCOY, 0x9f, 0xbf, &Room::mudd2MccoyReachedCapsules); @@ -149,7 +149,7 @@ void Room::mudd2UseCapsuleOnControlPanel() { } void Room::mudd2MccoyReachedControlPanel() { - if (_vm->_awayMission.mudd.field36) + if (_vm->_awayMission.mudd.translatedAlienLanguage) showText(TX_SPEAKER_MCCOY, TX_MUD2_014); else loadActorAnimC(OBJECT_MCCOY, "musehn", -1, -1, &Room::mudd2MccoyPutCapsuleInControlPanel); @@ -164,15 +164,17 @@ void Room::mudd2MccoyPutCapsuleInControlPanel() { if (_vm->_awayMission.mudd.muddUnconscious) showText(TX_SPEAKER_MCCOY, TX_MUD2_034); + _vm->_awayMission.mudd.putCapsuleInMedicalMachine = true; + loseItem(OBJECT_ICAPSULE); _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_MCCOY] = DIR_W; walkCrewman(OBJECT_MCCOY, 0xfe, 0xb2); } void Room::mudd2UseKirkOnBed() { - if (!_vm->_awayMission.mudd.field4c && !_vm->_awayMission.mudd.field36) { + if (!_vm->_awayMission.mudd.putCapsuleInMedicalMachine && !_vm->_awayMission.mudd.translatedAlienLanguage) { walkCrewmanC(OBJECT_KIRK, 0xd7, 0xbd, &Room::mudd2KirkReachedBed); - } else if (_vm->_awayMission.mudd.field36) { + } else if (_vm->_awayMission.mudd.translatedAlienLanguage) { walkCrewman(OBJECT_KIRK, 0xd7, 0xbd, 7); // BUG(?): no continuation? } } @@ -293,9 +295,9 @@ void Room::mudd2UseMedkitOnMudd() { if (!_vm->_awayMission.mudd.muddInhaledGas) return; else if (_vm->_awayMission.mudd.muddUnconscious) { - if (!_vm->_awayMission.mudd.field36) + if (!_vm->_awayMission.mudd.translatedAlienLanguage) showText(TX_SPEAKER_MCCOY, TX_MUD2_015); - else if (!_vm->_awayMission.mudd.field4c) + else if (!_vm->_awayMission.mudd.putCapsuleInMedicalMachine) showText(TX_SPEAKER_MCCOY, TX_MUD2_021); else walkCrewmanC(OBJECT_MCCOY, 0xde, 0xaf, &Room::mudd2MccoyReachedMudd); @@ -310,8 +312,8 @@ void Room::mudd2MccoyReachedMudd() { } void Room::mudd2MccoyCuredMudd() { - _vm->_awayMission.mudd.field3f = false; - _vm->_awayMission.mudd.field4e = 3; + _vm->_awayMission.mudd.muddCurrentlyInsane = false; + _vm->_awayMission.mudd.muddState = 3; _vm->_awayMission.mudd.muddDroppedCapsule = false; _vm->_awayMission.mudd.muddInhaledGas = false; diff --git a/engines/startrek/rooms/mudd3.cpp b/engines/startrek/rooms/mudd3.cpp index e3f215f784..1eed3de931 100644 --- a/engines/startrek/rooms/mudd3.cpp +++ b/engines/startrek/rooms/mudd3.cpp @@ -22,13 +22,415 @@ #include "startrek/room.h" -#define OBJECT_DOOR1 8 +#define OBJECT_MUDD 8 +#define OBJECT_9 9 +#define OBJECT_ALIEN_IMAGE 10 +#define OBJECT_ALIENDV 11 +#define OBJECT_NORTH_DOOR 12 +#define OBJECT_REPAIR_TOOL 13 -#define HOTSPOT_CONSOLE 0x20 +#define HOTSPOT_SCREEN 0x20 +#define HOTSPOT_SPHERE 0x21 +#define HOTSPOT_NORTH_DOOR 0x22 +#define HOTSPOT_EAST_DOOR 0x23 namespace StarTrek { void Room::mudd3Tick1() { + playVoc("MUD3LOOP"); + + _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_REDSHIRT] = DIR_W; + + if (_vm->_awayMission.mudd.databaseDestroyed) { + loadActorAnim(OBJECT_9, "s4lbpb", 0xa2, 0x9f); + + // FIXME: is this supposed to be in this if statement? + if (!_vm->_awayMission.mudd.tookRepairToolFromDatabaseRoom) + loadActorAnim(OBJECT_REPAIR_TOOL, "s4lbdv", 0xb7, 0xa8); + } + + _vm->_awayMission.mudd.muddInDatabaseRoom = false; + + if (!_vm->_awayMission.mudd.muddVisitedDatabaseRoom && _vm->_awayMission.mudd.translatedAlienLanguage && !_vm->_awayMission.mudd.muddCurrentlyInsane) { + _vm->_awayMission.mudd.muddVisitedDatabaseRoom = true; + loadActorAnim(OBJECT_MUDD, "s4lbhs", 0xa2, 0x9f); + playMidiMusicTracks(3); + _vm->_awayMission.mudd.muddInDatabaseRoom = true; + _vm->_awayMission.timers[2] = 10; + } +} + +void Room::mudd3UseCommunicator() { + showText(TX_SPEAKER_KIRK, TX_MUD3_003); + showText(TX_SPEAKER_UHURA, TX_STATICU1); +} + +void Room::mudd3LookAtScreen() { + if (_vm->_awayMission.mudd.translatedAlienLanguage) // FIXME: flipped conditions? + showText(TX_MUD3N017); + else + showText(TX_SPEAKER_SPOCK, TX_MUD3_038); +} + +void Room::mudd3UseSTricorderOnScreen() { + if (_roomVar.mudd.tricordersUnavailable) + showText(TX_SPEAKER_SPOCK, TX_MUD3_039); + else + spockScan(DIR_S, TX_MUD3_017, false); +} + +// BUGFIX: Event was actually "use screen on kirk", which makes no sense. +void Room::mudd3UseKirkOnScreen() { + if (!_vm->_awayMission.mudd.translatedAlienLanguage) { + showText(TX_MUD3N011); + showText(TX_SPEAKER_SPOCK, TX_MUD3_037); + } +} + +void Room::mudd3UseSpockOnSphere() { + _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_SPOCK] = DIR_S; + loadActorStandAnim(OBJECT_SPOCK); + + if (_vm->_awayMission.mudd.computerDataErased) { + if (!_vm->_awayMission.mudd.databaseDestroyed) { + showText(TX_MUD3N000); + showText(TX_SPEAKER_SPOCK, TX_MUD3_052); + showText(TX_SPEAKER_KIRK, TX_MUD3_012); + showText(TX_SPEAKER_MCCOY, TX_MUD3_024); + } + showText(TX_SPEAKER_KIRK, TX_MUD3_006); + showText(TX_SPEAKER_SPOCK, TX_MUD3_048); + showText(TX_SPEAKER_KIRK, TX_MUD3_008); + showText(TX_SPEAKER_SPOCK, TX_MUD3_051); + } else if (_vm->_awayMission.mudd.translatedAlienLanguage) { + if (_vm->_awayMission.mudd.accessedAlienDatabase) + showText(TX_SPEAKER_SPOCK, TX_MUD3_035); + else { + _vm->_awayMission.mudd.accessedAlienDatabase = true; + + showText(TX_SPEAKER_SPOCK, TX_MUD3_054); + showText(TX_SPEAKER_MCCOY, TX_MUD3_032); + showText(TX_SPEAKER_SPOCK, TX_MUD3_050); + showText(TX_SPEAKER_SPOCK, TX_MUD3_049); + showText(TX_SPEAKER_SPOCK, TX_MUD3_046); + showText(TX_SPEAKER_KIRK, TX_MUD3_007); + + _vm->_awayMission.mudd.missionScore++; + playVoc("LSHAIANS"); + loadActorAnim(OBJECT_ALIEN_IMAGE, "s4lbap", 0x32, 0x64); + + _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_KIRK] = DIR_W; + _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_SPOCK] = DIR_W; + _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_MCCOY] = DIR_W; + _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_REDSHIRT] = DIR_W; + loadActorStandAnim(OBJECT_KIRK); + loadActorStandAnim(OBJECT_SPOCK); + loadActorStandAnim(OBJECT_MCCOY); + loadActorStandAnim(OBJECT_REDSHIRT); + + _vm->_awayMission.disableInput = true; + _vm->_awayMission.timers[3] = 40; + } + } else if (_vm->_awayMission.mudd.discoveredBase3System) { + showText(TX_SPEAKER_SPOCK, TX_MUD3_043); + showText(TX_SPEAKER_MCCOY, TX_MUD3_022); + showText(TX_SPEAKER_SPOCK, TX_MUD3_056); + showText(TX_SPEAKER_KIRK, TX_MUD3_015); + showText(TX_SPEAKER_SPOCK, TX_MUD3_047); + _roomVar.mudd.suggestedUsingTricorders = true; + } else { + showText(TX_SPEAKER_SPOCK, TX_MUD3_044); + _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_SPOCK] = DIR_W; + walkCrewman(OBJECT_SPOCK, 0xcd, 0x87); + } +} + +// Finished looking at alien image +void Room::mudd3Timer3Expired() { + _vm->_awayMission.disableInput = false; + + showText(TX_SPEAKER_MCCOY, TX_MUD3_027); + showText(TX_SPEAKER_SPOCK, TX_MUD3_053); + showText(TX_SPEAKER_MCCOY, TX_MUD3_028); + showText(TX_SPEAKER_MCCOY, TX_MUD3_026); +} + +void Room::mudd3UseMccoyOnSphere() { + // ENHANCEMENT: Turn to face south + _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_MCCOY] = DIR_S; + loadActorStandAnim(OBJECT_MCCOY); + + showText(TX_SPEAKER_MCCOY, TX_MUD3_021); + _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_MCCOY] = DIR_W; + walkCrewman(OBJECT_MCCOY, 0xec, 0x84); +} + +void Room::mudd3UseRedshirtOnSphere() { + // ENHANCEMENT: Turn to face south + _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_REDSHIRT] = DIR_S; + loadActorStandAnim(OBJECT_REDSHIRT); + + showText(TX_SPEAKER_BUCHERT, TX_MUD3_068); // BUGFIX: original played McCoy's audio by mistake + _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_REDSHIRT] = DIR_W; + walkCrewman(OBJECT_REDSHIRT, 0xec, 0x84); +} + +void Room::mudd3UseMTricorderOnSphere() { + if (_roomVar.mudd.tricordersUnavailable) + showText(TX_SPEAKER_SPOCK, TX_MUD3_039); // BUGFIX: speaker is Spock + else { + _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_MCCOY] = DIR_S; + loadActorStandAnim(OBJECT_MCCOY); + if (!_vm->_awayMission.mudd.translatedAlienLanguage && _roomVar.mudd.suggestedUsingTricorders && _vm->_awayMission.mudd.discoveredBase3System) { + _vm->_awayMission.disableInput = true; + + _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_MCCOY] = DIR_S; + walkCrewman(OBJECT_MCCOY, 0xac, 0x88); + _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_SPOCK] = DIR_S; + walkCrewmanC(OBJECT_SPOCK, 0xa5, 0x8c, &Room::mudd3ReadyToHookUpTricorders); + } else { + showText(TX_SPEAKER_MCCOY, TX_MUD3_021); + _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_MCCOY] = DIR_W; + walkCrewman(OBJECT_MCCOY, 0xec, 0x84); + } + } +} + +void Room::mudd3UseSTricorderOnSphere() { + _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_SPOCK] = DIR_S; + loadActorStandAnim(OBJECT_SPOCK); + + if (_roomVar.mudd.tricordersUnavailable) + showText(TX_SPEAKER_SPOCK, TX_MUD3_039); // BUGFIX: speaker is Spock + else if (_vm->_awayMission.mudd.translatedAlienLanguage || (_vm->_awayMission.mudd.discoveredBase3System && !_roomVar.mudd.suggestedUsingTricorders)) { + showText(TX_SPEAKER_SPOCK, TX_MUD3_041); + _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_SPOCK] = DIR_W; + walkCrewman(OBJECT_SPOCK, 0xcd, 0x87); + } else if (_vm->_awayMission.mudd.discoveredBase3System && _roomVar.mudd.suggestedUsingTricorders) { // Hooking up tricorders + _vm->_awayMission.disableInput = true; + _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_MCCOY] = DIR_S; + walkCrewmanC(OBJECT_MCCOY, 0xca, 0x88, &Room::mudd3ReadyToHookUpTricorders); + } else { // No idea how to access it + showText(TX_SPEAKER_SPOCK, TX_MUD3_042); + walkCrewman(OBJECT_SPOCK, 0xcd, 0x87); + } +} + +void Room::mudd3ReadyToHookUpTricorders() { + showText(TX_SPEAKER_SPOCK, TX_MUD3_018); + + _roomVar.mudd.tricordersUnavailable = true; + _vm->_awayMission.timers[1] = 50; + + loadActorAnim2(OBJECT_SPOCK, "sscans"); + playSoundEffectIndex(SND_TRICORDER); +} + +void Room::mudd3Timer1Expired() { // Tricorders ready for use again + showText(TX_SPEAKER_SPOCK, TX_MUD3_040); + showText(TX_SPEAKER_SPOCK, TX_MUD3_034); + + _vm->_awayMission.disableInput = false; + _roomVar.mudd.tricordersUnavailable = false; + _roomVar.mudd.suggestedUsingTricorders = false; + _vm->_awayMission.mudd.translatedAlienLanguage = true; + _vm->_awayMission.mudd.missionScore++; + + _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_SPOCK] = DIR_W; + _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_MCCOY] = DIR_W; + walkCrewman(OBJECT_SPOCK, 0xcd, 0x87); + walkCrewman(OBJECT_MCCOY, 0xec, 0x84); +} + +// Harry Mudd stumbled into the room +void Room::mudd3Timer2Expired() { + const int choices[] = { + TX_SPEAKER_KIRK, + TX_MUD3_010, + TX_MUD3_009, + TX_BLANK + }; + + _vm->_awayMission.mudd.computerDataErased = true; + + showText(TX_SPEAKER_MUDD, TX_MUD3_065); + int choice = showText(choices); + + if (choice == 0) { // Allow him to access the database + showText(TX_SPEAKER_MUDD, TX_MUD3_066); + _vm->_awayMission.mudd.gaveMuddDatabaseAccess = true; + } else { // Don't allow it (he destroys it by accident) + showText(TX_SPEAKER_MUDD, TX_MUD3_064); + _vm->_awayMission.timers[4] = 98; + _vm->_awayMission.disableInput = 2; + playMidiMusicTracks(26); + loadActorAnim(OBJECT_MUDD, "s4lbhb", 0xa2, 0x9f); + } +} + +void Room::mudd3Timer4Expired() { + _vm->_awayMission.mudd.databaseDestroyed = true; + + showText(TX_SPEAKER_MUDD, TX_MUD3_063); + showText(TX_SPEAKER_MCCOY, TX_MUD3_031); + + _vm->_awayMission.disableInput = false; +} + +void Room::mudd3UseMemoryDiskOnSphere() { + if (_vm->_awayMission.mudd.databaseDestroyed) + showText(TX_MUD3N014); + else if (_vm->_awayMission.mudd.translatedAlienLanguage && !_vm->_awayMission.mudd.gaveMuddDatabaseAccess) { + showText(TX_MUD3N020); + if (!_vm->_awayMission.mudd.gotPointsForDownloadingData) { + _vm->_awayMission.mudd.missionScore += 3; + _vm->_awayMission.mudd.gotPointsForDownloadingData = true; + } + } else + showText(TX_MUD3N019); +} + + +void Room::mudd3GetRepairTool() { + if (_vm->_awayMission.mudd.tookRepairToolFromDatabaseRoom) + showText(TX_MUD3N018); // NOTE: unused, since the object disappears, can't be selected again + else { + _vm->_awayMission.disableInput = true; + _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_KIRK] = DIR_N; + walkCrewmanC(OBJECT_KIRK, 0xba, 0xc1, &Room::mudd3ReachedRepairTool); + } +} + +void Room::mudd3ReachedRepairTool() { + _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_KIRK] = DIR_N; + loadActorAnimC(OBJECT_KIRK, "kusemn", -1, -1, &Room::mudd3PickedUpRepairTool); +} + +void Room::mudd3PickedUpRepairTool() { + _vm->_awayMission.disableInput = false; + loadActorStandAnim(OBJECT_REPAIR_TOOL); + _vm->_awayMission.mudd.tookRepairToolFromDatabaseRoom = true; + _vm->_awayMission.mudd.missionScore++; + giveItem(OBJECT_IDOOVER); +} + +void Room::mudd3LookAtSphere() { + // ENHANCEMENT: Turn to face south + _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_KIRK] = DIR_S; + loadActorStandAnim(OBJECT_KIRK); + + showText(TX_MUD3N015); +} + +void Room::mudd3WalkToNorthDoor() { + _roomVar.mudd.walkingToDoor = true; + _vm->_awayMission.disableInput = true; + walkCrewman(OBJECT_KIRK, 0xb8, 0x70); +} + +void Room::mudd3TouchedHotspot0() { // Triggers north door + if (_roomVar.mudd.walkingToDoor) { + playVoc("SMADOOR3"); + loadActorAnim(OBJECT_NORTH_DOOR, "s4lbdo", 0xba, 0x6f); + } +} + +void Room::mudd3WalkToEastDoor() { + _roomVar.mudd.walkingToDoor = true; + _vm->_awayMission.disableInput = true; + walkCrewman(OBJECT_KIRK, 0x121, 0x81); +} + +void Room::mudd3TouchedHotspot1() { + if (_roomVar.mudd.walkingToDoor) { + playVoc("SMADOOR3"); + } +} + +void Room::mudd3LookAtKirk() { + if (!_vm->_awayMission.mudd.muddInDatabaseRoom) + showText(TX_MUD3N005); + else + showText(TX_MUD3N004); +} + +void Room::mudd3LookAtSpock() { + if (!_vm->_awayMission.mudd.muddInDatabaseRoom) + showText(TX_MUD3N012); + else + showText(TX_MUD3N002); +} + +void Room::mudd3LookAtMccoy() { + if (!_vm->_awayMission.mudd.muddInDatabaseRoom) + showText(TX_MUD3N010); + else + showText(TX_MUD3N009); +} + +void Room::mudd3LookAtRedshirt() { + if (!_vm->_awayMission.mudd.muddInDatabaseRoom) + showText(TX_MUD3N007); + else + showText(TX_MUD3N006); +} + +void Room::mudd3LookAtMudd() { + showText(TX_MUD3N003); +} + +void Room::mudd3TalkToKirk() { + if (!_vm->_awayMission.mudd.muddInDatabaseRoom) { + showText(TX_SPEAKER_KIRK, TX_MUD3_014); + showText(TX_SPEAKER_SPOCK, TX_MUD3_057); + showText(TX_SPEAKER_MCCOY, TX_MUD3_025); + } else + showText(TX_SPEAKER_KIRK, TX_MUD3_002); +} + +void Room::mudd3TalkToSpock() { + if (!_vm->_awayMission.mudd.muddInDatabaseRoom) { + showText(TX_SPEAKER_SPOCK, TX_MUD3_055); + showText(TX_SPEAKER_MCCOY, TX_MUD3_033); + showText(TX_SPEAKER_KIRK, TX_MUD3_011); + } else + showText(TX_SPEAKER_SPOCK, TX_MUD3_019); +} + +void Room::mudd3TalkToMccoy() { + if (!_vm->_awayMission.mudd.muddInDatabaseRoom) + showText(TX_SPEAKER_MCCOY, TX_MUD3_023); + else { + showText(TX_SPEAKER_MCCOY, TX_MUD3_030); + showText(TX_SPEAKER_MUDD, TX_MUD3_062); + } +} + +void Room::mudd3TalkToRedshirt() { + if (!_vm->_awayMission.mudd.muddInDatabaseRoom) { + showText(TX_SPEAKER_BUCHERT, TX_MUD3_070); + showText(TX_SPEAKER_KIRK, TX_MUD3_016); + showText(TX_SPEAKER_BUCHERT, TX_MUD3_071); + } else + showText(TX_SPEAKER_BUCHERT, TX_MUD3_067); +} + +void Room::mudd3TalkToMudd() { + if (_vm->_awayMission.mudd.databaseDestroyed) { + showText(TX_SPEAKER_MUDD, TX_MUD3_060); + showText(TX_SPEAKER_MCCOY, TX_MUD3_029); + showText(TX_SPEAKER_MUDD, TX_MUD3_061); + showText(TX_SPEAKER_KIRK, TX_MUD3_013); + showText(TX_SPEAKER_MUDD, TX_MUD3_058); + showText(TX_SPEAKER_SPOCK, TX_MUD3C001); + showText(TX_SPEAKER_BUCHERT, TX_MUD3_069); + showText(TX_SPEAKER_MUDD, TX_MUD3_059); + showText(TX_SPEAKER_KIRK, TX_MUD3_005); + } +} + +void Room::mudd3UseMedkit() { + showText(TX_SPEAKER_MCCOY, TX_MUD3_020); } } |