[Scummvm-git-logs] scummvm master -> 9327e5a3811138a1e68d6348591faeee8eb01a60

bluegr bluegr at gmail.com
Sun Jan 24 21:13:34 UTC 2021


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
9327e5a381 STARTREK: More bridge sequences functionality


Commit: 9327e5a3811138a1e68d6348591faeee8eb01a60
    https://github.com/scummvm/scummvm/commit/9327e5a3811138a1e68d6348591faeee8eb01a60
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2021-01-24T23:13:09+02:00

Commit Message:
STARTREK: More bridge sequences functionality

Changed paths:
  A engines/startrek/bridge.h
    engines/startrek/bridge.cpp
    engines/startrek/room.cpp


diff --git a/engines/startrek/bridge.cpp b/engines/startrek/bridge.cpp
index 8005a2a26a..14b12e7d29 100644
--- a/engines/startrek/bridge.cpp
+++ b/engines/startrek/bridge.cpp
@@ -20,6 +20,7 @@
  *
  */
 
+#include "startrek/bridge.h"
 #include "startrek/iwfile.h"
 #include "startrek/resource.h"
 #include "startrek/room.h"
@@ -48,125 +49,6 @@ BridgeActorAndMenu bridgeActorsAndMenus[] = {
 	{ 7, "bstndsc", "eng",      30,   30 },	// Scotty
 };
 
-enum BridgeMenuEvent {
-	kBridgeNone = -1,
-	kBridgeKirkCommand = 0,
-	kBridgeUnk1 = 1,
-	kBridgeUnk2 = 2,
-	kBridgeStarfieldFullScreen = 3,
-	kBridgeKirkCaptainsLog = 16,
-	kBridgeKirkTransporter = 17,
-	kBridgeKirkOptions = 18,
-	kBridgeSpock = 32,
-	kBridgeSpockComputer = 33,
-	kBridgeScottyDamageControl = 48,
-	kBridgeScottyEmergencyPower = 49,
-	kBridgeUhura = 64,
-	kBridgeSuluOrbit = 80,
-	kBridgeSuluShields = 81,
-	kBridgeChekovNavigation = 96,
-	kBridgeChekovWeapons = 97,
-	kBridgeChekovRepairShields = 112,
-	kBridgeChekovRepairPhasers = 113,
-	kBridgeChekovRepairPhotonTorpedoes = 114,
-	kBridgeChekovRepairSensors = 115,
-	kBridgeChekovRepairBridge = 116,
-	kBridgeChekovRepairHull = 117,
-	kBridgeChekovRepairWarpDrives = 118,
-	kBridgeSuluTargetAnalysis = 119
-};
-
-enum BridgeSequence {
-	kSeqNone = -1,
-	// -- Chapter 1 ----
-	kSeqStartMissionDemon = 0,
-	kSeqEndMockBattle = 1,
-	kSeqShowDebriefDemon = 2,
-	kSeqArrivedAtPolluxV = 3,
-	kSeqEndMissionDemon = 4,
-	// -- Chapter 2 ----
-	kSeqStartMissionTug = 5,
-	kSeqStartElasiPirateBattle = 6,
-	kSeqArrivedAtBetaMyamid = 7,
-	kSeqApproachedTheMasada = 8,
-	kSeqEndMissionTug = 9,
-	// -- Chapter 3 ----
-	kSeqStartMissionLove = 10,
-	kSeqAfterLoveDebrief = 11,
-	kSeqStartRomulanBattle = 12,
-	kSeqAfterRomulanBattle = 13,
-	kSeqArrivedAtArk7 = 14,
-	kSeqEndMissionLove = 15,
-	// -- Chapter 4 ----
-	kSeqStartMissionMudd = 16,
-	kSeqFightElasiShipsAndContactMudd = 17,
-	kSeqEndMissionMudd = 18,
-	// -- Chapter 5 ----
-	kSeqStartMissionFeather = 19,
-	kSeqUnk20 = 20,
-	kSeqUnk21 = 21,
-	kSeqStartMissionTrial = 22,
-	kSeqUnk23 = 23,
-	kSeqUnk24 = 24,
-	kSeqUnk25 = 25,
-	kSeqUnk26 = 26,
-	kSeqUnk27 = 27,
-	// -- Chapter 6 ----
-	kSeqStartMissionVeng = 28,
-	kSeqUnk29 = 29,
-	// -- Chapter 7 ----
-	kSeqStartMissionSins = 30,
-	kSeqUnk31 = 31
-};
-
-enum Planet {
-	kPlanetNone = -1,
-	kPlanetCenturius = 0,
-	kPlanetCameronsStar = 1,
-	kPlanetArk7 = 2,      // Chapter 3: Love's Labor Jeopardized (love)
-	kPlanetHarlequin = 3, // Chapter 4: Another Fine Mess (mudd)
-	kPlanetHarrapa = 4,
-	kPlanetElasiPrime = 5,
-	kPlanetDigifal = 6, // Chapter 5A: The Feathered Serpent (feather)
-	kPlanetStrahkeer = 7,
-	kPlanetHrakkour = 8, // Chapter 5B: The Feathered Serpent (trial)
-	kPlanetTriRhoNautica = 9,
-	kPlanetShivaOmicron = 10,
-	kPlanetAlphaProxima = 11, // Chapter 6: The Old Devil Moon (sins)
-	kPlanetOmegaMaelstrom = 12,
-	kPlanetArgosIV = 13,
-	kPlanetBetaMyamid = 14, // Chapter 2: Hijacked (tug)
-	kPlanetSirius = 15,
-	kPlanetSigmaZhukova = 16,
-	kPlanetCastor = 17,
-	kPlanetPollux = 18, // Chapter 1: Demon world (demon)
-	kPlanetChristgen = 19
-};
-
-enum BridgeTalkers {
-	kBridgeTalkerNone = -1,
-	kBridgeTalkerKirk = 0,
-	kBridgeTalkerSpock,
-	kBridgeTalkerSulu,
-	kBridgeTalkerChekov,
-	kBridgeTalkerUhura,
-	kBridgeTalkerScotty,
-	kBridgeTalkerMcCoy,
-	kBridgeTalkerCaptainsLog,
-	kBridgeTalkerElasiCaptain,
-	kBridgeTalkerElasiCereth,
-	kBridgeTalkerAutobeacon,
-	kBridgeTalkerVoice,
-	kBridgeTalkerHarryMudd
-};
-
-enum RandomEncounterType {
-	kRandomEncounterNone = 0,
-	kRandomEncounterKlingon = 1,
-	kRandomEncounterRomulan = 2,
-	kRandomEncounterElasi = 3
-};
-
 void StarTrekEngine::initBridge(bool b) {
 	_gfx->loadPalette("bridge");
 	_sound->loadMusicFile("bridge");
@@ -249,12 +131,21 @@ void StarTrekEngine::showTextboxBridge(int talker, Common::String text) {
 	case kBridgeTalkerAutobeacon:
 		showTextbox("Autobeacon", text, 160, 130, 161, 0);
 		break;
-	case kBridgeTalkerVoice:
+	case kBridgeTalkerHarryMuddsVoice:
 		showTextbox("Voice", text, 160, 130, 44, 0);
 		break;
 	case kBridgeTalkerHarryMudd:
 		showTextbox("Harry Mudd", text, 160, 190, 44, 0);
 		break;
+	case kBridgeTalkerTaraz:
+		showTextbox("Taraz", text, 160, 190, 44, 0);
+		break;
+	case kBridgeTalkerAdmiralKenka:
+		showTextbox("Admiral Kenka", text, 160, 190, 44, 0);
+		break;
+	case kBridgeTalkerKallarax:
+		showTextbox("Kallarax", text, 160, 190, 44, 0);
+		break;
 	}
 }
 
@@ -485,7 +376,7 @@ void StarTrekEngine::playBridgeSequence(int sequenceId) {
 		showTextboxBridge(kBridgeTalkerSpock, 8);	// The ion trail of the scout ship leads to the Harrapan system, Captain
 		showTextboxBridge(kBridgeTalkerUhura, 9);
 		showTextboxBridge(kBridgeTalkerKirk, 10);
-		showTextboxBridge(kBridgeTalkerVoice, 11);
+		showTextboxBridge(kBridgeTalkerHarryMuddsVoice, 11);
 		showTextboxBridge(kBridgeTalkerKirk, 12);
 		showTextboxBridge(kBridgeTalkerUhura, 13);
 		showBridgeScreenTalkerWithMessage(15, "Harry Mudd", "mudd", false);
@@ -526,6 +417,39 @@ void StarTrekEngine::playBridgeSequence(int sequenceId) {
 		showTextboxBridge(kBridgeTalkerKirk, 5);	// Captain's log, Stardate 5097.3. Starfleet reports major military activity...
 		// TODO
 		break;
+	case kSeqUnk20:
+		// TODO
+		break;
+	case kSeqEndMissionFeather:
+		_resource->setTxtFileName("FEATHER");
+		_enterpriseState.underAttack = false;
+		orbitPlanet();	// 1,1
+		_gfx->fadeinScreen();
+		// orbitPlanet();	// 0,0
+		showTextboxBridge(kBridgeTalkerUhura, 21);
+		_sound->playSoundEffectIndex(kSfxHailing);
+		showTextboxBridge(kBridgeTalkerUhura, 22);
+		//addAction
+		showBridgeScreenTalkerWithMessage(23, "Admiral Kenka", "klg2", false);
+		// TODO: Show dialog options
+		showTextboxBridge(kBridgeTalkerAdmiralKenka, 24);
+		showTextboxBridge(kBridgeTalkerKirk, 25);
+		showTextboxBridge(kBridgeTalkerAdmiralKenka, 26);
+		// TODO: Show dialog options
+		showTextboxBridge(kBridgeTalkerAdmiralKenka, 27);
+		showTextboxBridge(kBridgeTalkerUhura, 28);
+		showTextboxBridge(kBridgeTalkerKirk, 29);
+		showTextboxBridge(kBridgeTalkerAdmiralKenka, 30);
+		showBridgeScreenTalkerWithMessage(31, "Admiral", "woman");
+		showTextboxBridge(kBridgeTalkerScotty, 32);
+		showTextboxBridge(kBridgeTalkerKirk, 33);
+		//showFullScreenStarMap
+		//mouseControllingShip = false
+		//sub_346C6()
+		_currentPlanet = _targetPlanet = kPlanetHrakkour;
+		_bridgeSequenceToLoad = kSeqStartMissionTrial;
+		// TODO: Battle with the K'lrta
+		break;
 	case kSeqStartMissionTrial:
 		_currentPlanet = _targetPlanet = kPlanetHrakkour;
 		_missionName = _missionToLoad = "TRIAL";
@@ -534,6 +458,55 @@ void StarTrekEngine::playBridgeSequence(int sequenceId) {
 		showTextboxBridge(kBridgeTalkerKirk, 0);	// Captain's Log. We have come to the ruined Klingon planet of Hrakkour...
 		// TODO
 		break;
+	case kSeqEndMissionTrial:
+		// In the original, this was in the same function as the start. It's a separate function in our implementation
+		_resource->setTxtFileName("TRIAL");
+		orbitPlanet();	// 0,0
+		// TODO: Also handle bad ending with inflammatory remarks
+		switch (_awayMission.trial.missionEndMethod) {
+		case 0:
+			// Bad ending, returned to enterprise in the middle of the trial
+			_sound->playSoundEffectIndex(kSfxHailing);
+			showTextboxBridge(kBridgeTalkerUhura, 1);
+			showBridgeScreenTalkerWithMessage(2, "Admiral Kenka", "klg2");
+			showTextboxBridge(kBridgeTalkerUhura, 3);
+			showTextboxBridge(kBridgeTalkerKirk, 4);
+			break;
+		case 1:
+		case 2:
+			// Bad ending, Queztecoatl died
+			showTextboxBridge(kBridgeTalkerKirk, 5);
+			showTextboxBridge(kBridgeTalkerSpock, 6);
+			showTextboxBridge(kBridgeTalkerKirk, 7);
+			showTextboxBridge(kBridgeTalkerSpock, 8);
+			showTextboxBridge(kBridgeTalkerKirk, 9);
+			break;
+		case 3:
+			// Bad ending, people died
+			showTextboxBridge(kBridgeTalkerSulu, 10);
+			showTextboxBridge(kBridgeTalkerKirk, 11);
+			showTextboxBridge(kBridgeTalkerSpock, 12);
+			showTextboxBridge(kBridgeTalkerKirk, 13);
+			break;
+		case 4:
+			// Good ending
+			_sound->playSoundEffectIndex(kSfxHailing);
+			showTextboxBridge(kBridgeTalkerUhura, 17);
+			showBridgeScreenTalkerWithMessage(18, "Kallarax", "klg1", false);
+			// TODO: dialog options
+			showTextboxBridge(kBridgeTalkerKallarax, 19);
+			removeActorFromScreen(_currentScreenTalker);
+			initStarfieldSprite(&_starfieldSprite, new StubBitmap(0, 0), _starfieldRect);
+			showTextboxBridge(kBridgeTalkerUhura, 20);	// Quetzecoatl is safely aboard, Captain, and wishes to return to his home world
+			showTextboxBridge(kBridgeTalkerKirk, 21);
+			break;
+		}
+
+		//showFullScreenStarfield();
+		//mouseControllingShip = false;
+		showMissionPerformance(_awayMission.trial.missionScore * 100 / 32, 26, 4);
+		_bridgeSequenceToLoad = kSeqStartMissionSins;
+		break;
 	case kSeqStartMissionSins:
 		_targetPlanet = kPlanetAlphaProxima; // We set it earlier for uniformity
 		_missionName = _missionToLoad = "SINS";
@@ -553,10 +526,57 @@ void StarTrekEngine::playBridgeSequence(int sequenceId) {
 		showTextboxBridge(kBridgeTalkerSpock, 9);
 		// TODO
 		break;
+	case kSeqEndMissionSins:
+		// TODO: The rest before the sequence - check for crew actions etc
+		updateStarfieldAndShips(0);
+		_resource->setTxtFileName("SINS");
+		loadActorAnim(1, ACTOR_STANDING_SPOCK, 0, 0, 1.0); // Standing Spock
+		loadActorAnim(2, ACTOR_STANDING_MCCOY, 0, 0, 1.0); // Standing McCoy
+		_sound->playSoundEffectIndex(kSfxHailing);
+		showTextboxBridge(kBridgeTalkerUhura, 22);
+		showTextboxBridge(kBridgeTalkerKirk, 23);
+		showMissionPerformance(_awayMission.sins.missionScore * 100 / 32, 24, 5);
+		showTextboxBridge(kBridgeTalkerMcCoy, 25);
+		showTextboxBridge(kBridgeTalkerSpock, 26);
+		showTextboxBridge(kBridgeTalkerMcCoy, 27);
+		showTextboxBridge(kBridgeTalkerKirk, 28);
+		showTextboxBridge(kBridgeTalkerKirk, 29);
+		showTextboxBridge(kBridgeTalkerMcCoy, 30);
+		showTextboxBridge(kBridgeTalkerKirk, 31);
+		loadActorAnim(1, ACTOR_SITTING_SPOCK, 0, 0, 1.0);
+		removeActorFromScreen(2);
+		_bridgeSequenceToLoad = kSeqStartMissionVeng;
+		break;
 	case kSeqStartMissionVeng:
+		_missionName = _missionToLoad = "VENG";
+		_resource->setTxtFileName(_missionName);
+		_sound->loadMusicFile("bridgew");
+		showMissionStartEnterpriseFlyby("VEN0\\FLYBY", "vengence");		// a typo in the original
+		showTextboxBridge(kBridgeTalkerKirk, 10);
+		showTextboxBridge(kBridgeTalkerSpock, 11);
+		showTextboxBridge(kBridgeTalkerKirk, 12);
+		showTextboxBridge(kBridgeTalkerUhura, 13);
 		// TODO
 		break;
-	// TODO: The rest
+	case kSeqEndMissionVengAndGame:
+		_resource->setTxtFileName("VENG");
+		if (_enterpriseState.underAttack) {
+			_sound->playSoundEffectIndex(kSfxRedAlert);
+			showTextboxBridge(kBridgeTalkerSpock, 34);
+			startBattle("3PIRATE");
+			startBattle("orion");
+		} else {
+			showTextboxBridge(kBridgeTalkerSpock, 37);
+			showTextboxBridge(kBridgeTalkerKirk, 38);
+			showTextboxBridge(kBridgeTalkerScotty, 39);
+			showTextboxBridge(kBridgeTalkerChekov, 40);
+			showTextboxBridge(kBridgeTalkerKirk, 41);
+			showTextboxBridge(kBridgeTalkerUhura, 42);
+			showTextboxBridge(kBridgeTalkerKirk, 43);
+			showMissionPerformance(_awayMission.veng.missionScore * 100 / 32, 44, 6);
+			// TODO: The rest
+		}
+		break;
 	default:
 		break;
 	}
@@ -1206,14 +1226,30 @@ void StarTrekEngine::showStarMap() {
 	// HACK: Move to the target planet and play its associated sequence, until the starmap code is implemented
 	_currentPlanet = _targetPlanet;
 
-	if (_targetPlanet == kPlanetPollux)
+	switch (_targetPlanet) {
+	case kPlanetPollux:
 		_bridgeSequenceToLoad = kSeqArrivedAtPolluxV;
-	else if (_targetPlanet == kPlanetBetaMyamid)
+		break;
+	case kPlanetBetaMyamid:
 		_bridgeSequenceToLoad = kSeqStartElasiPirateBattle;
-	else if (_targetPlanet == kPlanetArk7)
+		break;
+	case kPlanetArk7:
 		_bridgeSequenceToLoad = kSeqStartRomulanBattle;
-	else if (_targetPlanet == kPlanetHarlequin)
+		break;
+	case kPlanetHarlequin:
 		_bridgeSequenceToLoad = kSeqFightElasiShipsAndContactMudd;
+		break;
+	case kPlanetDigifal:
+		_bridgeSequenceToLoad = kSeqStartMissionFeather;
+		break;
+	case kPlanetHrakkour:
+		_bridgeSequenceToLoad = kSeqStartMissionTrial;
+		break;
+	case kPlanetAlphaProxima:
+		// This shouldn't be called for Mission 6 (sins)
+		break;
+	}
+
 	// TODO
 }
 
@@ -1297,7 +1333,7 @@ void StarTrekEngine::captainsLog() {
 			captainsLogMessage += missionNames[i] + Common::String::format(":   %d point", _missionPoints[i]);
 			if (_missionPoints[i] > 1)
 				captainsLogMessage += "s";
-			captainsLogMessage + ".\n\n";
+			captainsLogMessage += ".\n\n";
 		}
 	} else {
 		captainsLogMessage = "#BRID\\C_007#No recent missions have been completed.";
diff --git a/engines/startrek/bridge.h b/engines/startrek/bridge.h
new file mode 100644
index 0000000000..3cf7069eee
--- /dev/null
+++ b/engines/startrek/bridge.h
@@ -0,0 +1,148 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef STARTREK_BRIDGE_H
+#define STARTREK_BRIDGE_H
+
+namespace StarTrek {
+
+enum BridgeMenuEvent {
+	kBridgeNone = -1,
+	kBridgeKirkCommand = 0,
+	kBridgeUnk1 = 1,
+	kBridgeUnk2 = 2,
+	kBridgeStarfieldFullScreen = 3,
+	kBridgeKirkCaptainsLog = 16,
+	kBridgeKirkTransporter = 17,
+	kBridgeKirkOptions = 18,
+	kBridgeSpock = 32,
+	kBridgeSpockComputer = 33,
+	kBridgeScottyDamageControl = 48,
+	kBridgeScottyEmergencyPower = 49,
+	kBridgeUhura = 64,
+	kBridgeSuluOrbit = 80,
+	kBridgeSuluShields = 81,
+	kBridgeChekovNavigation = 96,
+	kBridgeChekovWeapons = 97,
+	kBridgeChekovRepairShields = 112,
+	kBridgeChekovRepairPhasers = 113,
+	kBridgeChekovRepairPhotonTorpedoes = 114,
+	kBridgeChekovRepairSensors = 115,
+	kBridgeChekovRepairBridge = 116,
+	kBridgeChekovRepairHull = 117,
+	kBridgeChekovRepairWarpDrives = 118,
+	kBridgeSuluTargetAnalysis = 119
+};
+
+enum Planet {
+	kPlanetNone = -1,
+	kPlanetCenturius = 0,
+	kPlanetCameronsStar = 1,
+	kPlanetArk7 = 2,      // Chapter 3: Love's Labor Jeopardized (love)
+	kPlanetHarlequin = 3, // Chapter 4: Another Fine Mess (mudd)
+	kPlanetHarrapa = 4,
+	kPlanetElasiPrime = 5,
+	kPlanetDigifal = 6, // Chapter 5A: The Feathered Serpent (feather)
+	kPlanetStrahkeer = 7,
+	kPlanetHrakkour = 8, // Chapter 5B: The Feathered Serpent (trial)
+	kPlanetTriRhoNautica = 9,
+	kPlanetShivaOmicron = 10,
+	kPlanetAlphaProxima = 11, // Chapter 6: The Old Devil Moon (sins)
+	kPlanetOmegaMaelstrom = 12,
+	kPlanetArgosIV = 13,
+	kPlanetBetaMyamid = 14, // Chapter 2: Hijacked (tug)
+	kPlanetSirius = 15,
+	kPlanetSigmaZhukova = 16,
+	kPlanetCastor = 17,
+	kPlanetPollux = 18, // Chapter 1: Demon world (demon)
+	kPlanetChristgen = 19
+};
+
+enum BridgeTalkers {
+	kBridgeTalkerNone = -1,
+	kBridgeTalkerKirk = 0,
+	kBridgeTalkerSpock,
+	kBridgeTalkerSulu,
+	kBridgeTalkerChekov,
+	kBridgeTalkerUhura,
+	kBridgeTalkerScotty,
+	kBridgeTalkerMcCoy,
+	kBridgeTalkerCaptainsLog,
+	kBridgeTalkerElasiCaptain,
+	kBridgeTalkerElasiCereth,
+	kBridgeTalkerAutobeacon,
+	kBridgeTalkerHarryMuddsVoice,
+	kBridgeTalkerHarryMudd,
+	kBridgeTalkerTaraz,
+	kBridgeTalkerAdmiralKenka,
+	kBridgeTalkerKallarax
+};
+
+enum RandomEncounterType {
+	kRandomEncounterNone = 0,
+	kRandomEncounterKlingon = 1,
+	kRandomEncounterRomulan = 2,
+	kRandomEncounterElasi = 3
+};
+
+enum BridgeSequence {
+	kSeqNone = -1,
+	// -- Chapter 1 ----
+	kSeqStartMissionDemon = 0,
+	kSeqEndMockBattle = 1,
+	kSeqShowDebriefDemon = 2,
+	kSeqArrivedAtPolluxV = 3,
+	kSeqEndMissionDemon = 4,
+	// -- Chapter 2 ----
+	kSeqStartMissionTug = 5,
+	kSeqStartElasiPirateBattle = 6,
+	kSeqArrivedAtBetaMyamid = 7,
+	kSeqApproachedTheMasada = 8,
+	kSeqEndMissionTug = 9,
+	// -- Chapter 3 ----
+	kSeqStartMissionLove = 10,
+	kSeqAfterLoveDebrief = 11,
+	kSeqStartRomulanBattle = 12,
+	kSeqAfterRomulanBattle = 13,
+	kSeqArrivedAtArk7 = 14,
+	kSeqEndMissionLove = 15,
+	// -- Chapter 4 ----
+	kSeqStartMissionMudd = 16,
+	kSeqFightElasiShipsAndContactMudd = 17,
+	kSeqEndMissionMudd = 18,
+	// -- Chapter 5 ----
+	kSeqStartMissionFeather = 19,
+	kSeqUnk20 = 20,
+	kSeqEndMissionFeather = 21,
+	kSeqStartMissionTrial = 22,
+	kSeqEndMissionTrial = 23,	// In the original, the same function was used for both start and end
+	// -- Chapter 6 ----
+	kSeqStartMissionSins = 24,
+	kSeqEndMissionSins = 25,
+	// -- Chapter 7 ----
+	kSeqStartMissionVeng = 26,
+	kSeqEndMissionVengAndGame = 27
+};
+
+} // End of namespace StarTrek
+
+#endif
diff --git a/engines/startrek/room.cpp b/engines/startrek/room.cpp
index bfcf978e73..0ff0c400e9 100644
--- a/engines/startrek/room.cpp
+++ b/engines/startrek/room.cpp
@@ -20,6 +20,7 @@
  *
  */
 
+#include "startrek/bridge.h"
 #include "startrek/iwfile.h"
 #include "startrek/resource.h"
 #include "startrek/room.h"
@@ -674,45 +675,23 @@ void Room::endMission(int16 score, int16 arg1, int16 arg2) {
 		_vm->handleAwayMissionEvents();
 
 	_vm->_awayMission.disableInput = false;
+	_vm->_roomIndexToLoad = 0;
+	_vm->_gameMode = GAMEMODE_BEAMUP;
 
 	if (_vm->_missionName == "DEMON") {
-		_vm->_gameMode = GAMEMODE_BEAMUP;
-		_vm->_roomIndexToLoad = 0;
-		_vm->_bridgeSequenceToLoad = 4; // kSeqEndMissionDemon
+		_vm->_bridgeSequenceToLoad = kSeqEndMissionDemon;
 	} else if (_vm->_missionName == "TUG") {
-		_vm->_gameMode = GAMEMODE_BEAMUP;
-		_vm->_roomIndexToLoad = 0;
-		_vm->_bridgeSequenceToLoad = 9; // kSeqEndMissionTug
+		_vm->_bridgeSequenceToLoad = kSeqEndMissionTug;
 	} else if (_vm->_missionName == "LOVE") {
-		_vm->_gameMode = GAMEMODE_BEAMUP;
-		_vm->_roomIndexToLoad = 0;
-		_vm->_bridgeSequenceToLoad = 15; // kSeqEndMissionLove
+		_vm->_bridgeSequenceToLoad = kSeqEndMissionLove;
 	} else if (_vm->_missionName == "MUDD") {
-		_vm->_gameMode = GAMEMODE_BEAMUP;
-		_vm->_roomIndexToLoad = 0;
-		_vm->_bridgeSequenceToLoad = 18; // kSeqEndMissionMudd
-	} else {
-		// TODO: This is a stopgap measure (loading the next away mission immediately).
-		// Replace this with the proper code later.
-		_vm->_gameMode = GAMEMODE_BEAMDOWN;
-		_vm->_roomIndexToLoad = 0;
-
-		const char *missionNames[] = {
-		    //"DEMON",
-		    //"TUG",
-		    //"LOVE",
-		    //"MUDD",
-		    "FEATHER",
-		    "TRIAL",
-		    "SINS",
-		    "VENG"};
-
-		for (int i = 0; i < ARRAYSIZE(missionNames) - 1; i++) {
-			if (_vm->_missionName == missionNames[i]) {
-				_vm->_missionToLoad = missionNames[i + 1];
-				break;
-			}
-		}
+		_vm->_bridgeSequenceToLoad = kSeqEndMissionMudd;
+	} else if (_vm->_missionName == "FEATHER") {
+		_vm->_bridgeSequenceToLoad = kSeqEndMissionFeather;
+	} else if (_vm->_missionName == "TRIAL") {
+		_vm->_bridgeSequenceToLoad = kSeqEndMissionTrial;
+	} else if (_vm->_missionName == "SINS") {
+		_vm->_bridgeSequenceToLoad = kSeqEndMissionSins;
 	}
 }
 




More information about the Scummvm-git-logs mailing list