[Scummvm-git-logs] scummvm master -> 691f460d9f18534bab1aafd7a40268458ce4b815

bluegr bluegr at gmail.com
Tue Dec 8 09:21:03 UTC 2020


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:
691f460d9f STARTREK: Add more functionality related to bridge actions


Commit: 691f460d9f18534bab1aafd7a40268458ce4b815
    https://github.com/scummvm/scummvm/commit/691f460d9f18534bab1aafd7a40268458ce4b815
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2020-12-08T11:20:37+02:00

Commit Message:
STARTREK: Add more functionality related to bridge actions

Changed paths:
    engines/startrek/bridge.cpp
    engines/startrek/menu.cpp
    engines/startrek/startrek.h


diff --git a/engines/startrek/bridge.cpp b/engines/startrek/bridge.cpp
index 0d680aed49..b23647b156 100644
--- a/engines/startrek/bridge.cpp
+++ b/engines/startrek/bridge.cpp
@@ -44,6 +44,33 @@ BridgeActorAndMenu bridgeActorsAndMenus[] = {
 	{ 7, "bstndsc", "eng",      30,   30 },	// Scotty
 };
 
+enum BridgeMenuEvent {
+	kBridgeSpockTalk = 0,
+	kBridgeUnk1 = 1,
+	kBridgeUnk2 = 2,
+	kBridgeUnk3 = 3,
+	kBridgeKirkCaptainsLog = 16,
+	kBridgeKirkTransporter = 17,
+	kBridgeKirkOptions = 18,
+	kBridgeSpockNothingToReport = 32,
+	kBridgeSpockConsultComputer = 33,
+	kBridgeScottyDamageControl = 48,
+	kBridgeScottyEmergencyPower = 49,
+	kBridgeUhuraCommunications = 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
+};
+
 void StarTrekEngine::initBridge(bool b) {
 	_gfx->loadPalette("bridge");
 	_sound->loadMusicFile("bridge");
@@ -168,21 +195,17 @@ void StarTrekEngine::handleBridgeEvents() {
 
 		case TREKEVENT_KEYDOWN:
 			switch (event.kbd.keycode) {
-			case Common::KEYCODE_w:
-				// Toggle weapons on/off
-				// TODO
+			case Common::KEYCODE_w:	// Toggle weapons on/off
+				handleBridgeMenu(kBridgeChekovWeapons);
 				break;
-			case Common::KEYCODE_s:
-				// Toggle shields on/off
-				// TODO
+			case Common::KEYCODE_s:	// Toggle shields on/off
+				handleBridgeMenu(kBridgeSuluShields);
 				break;
-			case Common::KEYCODE_a:
-				// Target analysis
-				// TODO
+			case Common::KEYCODE_a:	// Target analysis
+				handleBridgeMenu(kBridgeSuluTargetAnalysis);
 				break;
-			case Common::KEYCODE_d:
-				// Damage control
-				// TODO
+			case Common::KEYCODE_d:	// Damage control
+				handleBridgeMenu(kBridgeScottyDamageControl);
 				break;
 			case Common::KEYCODE_RETURN:
 			case Common::KEYCODE_KP_ENTER:
@@ -190,85 +213,64 @@ void StarTrekEngine::handleBridgeEvents() {
 				// Fire phasers
 				// TODO
 				break;
-			case Common::KEYCODE_SPACE:
-				// Fire photon torpedoes
+			case Common::KEYCODE_SPACE:	// Fire photon torpedoes
 				// TODO
 				break;
-			case Common::KEYCODE_v:
-				// Toggle between the normal bridge view and full screen view
+			case Common::KEYCODE_v:	// Toggle between the normal bridge view and full screen view
 				// TODO
 				break;
-			case Common::KEYCODE_TAB:
-				// Toggle between movement/fire mode and crew selection mode
+			case Common::KEYCODE_TAB:	// Toggle between movement/fire mode and crew selection mode
 				// TODO
 				break;
-			case Common::KEYCODE_COMMA:
-				// Reduce the main view screen magnification
+			case Common::KEYCODE_COMMA:	// Reduce the main view screen magnification
 				// TODO
 				break;
-			case Common::KEYCODE_PERIOD:
-				// Enlarge the main view screen magnification
+			case Common::KEYCODE_PERIOD:	// Enlarge the main view screen magnification
 				// TODO
 				break;
-			case Common::KEYCODE_o:
-				// Enter/exit orbit
-				// TODO
+			case Common::KEYCODE_o:	// Enter/exit orbit
+				handleBridgeMenu(kBridgeSuluOrbit);
 				break;
-			case Common::KEYCODE_KP5:
-				// Center controls
+			case Common::KEYCODE_KP5:	// Center controls
 				// TODO
 				break;
-			case Common::KEYCODE_n:
-				// Main star navigational map
+			case Common::KEYCODE_n:	// Main star navigational map
 				// TODO
 				break;
-			case Common::KEYCODE_k:
-				// Kirk's options
-				// TODO
+			case Common::KEYCODE_k:	// Kirk's options
+				handleBridgeMenu(kBridgeKirkOptions);
 				break;
-			case Common::KEYCODE_t:
-				// Ask Mr. Spock for advice
+			case Common::KEYCODE_t:	// Ask Mr. Spock for advice
 				// TODO
+				handleBridgeMenu(kBridgeSpockNothingToReport);
 				break;
-			case Common::KEYCODE_c:
-				// Spock's library computer
-				handleBridgeComputer();
+			case Common::KEYCODE_c:	// Spock's library computer
+				handleBridgeMenu(kBridgeSpockConsultComputer);
 				break;
-			case Common::KEYCODE_h:
-				// Uhura's communication icon
-				// TODO
+			case Common::KEYCODE_h:	// Uhura's communication icon
+				handleBridgeMenu(kBridgeUhuraCommunications);
 				break;
-			case Common::KEYCODE_p:
-				// Pause game
+			case Common::KEYCODE_p:	// Pause game
 				// TODO
 				break;
-
-			case Common::KEYCODE_e:
-				if (event.kbd.flags && Common::KBD_CTRL) {
+			case Common::KEYCODE_e:	// Toggle SFX / emergency power
+				if (event.kbd.flags && Common::KBD_CTRL)
 					_sound->toggleSfx();
-				} else {
-					// Emergency power
-					// TODO
-				}
+				else
+					handleBridgeMenu(kBridgeScottyEmergencyPower);
 				break;
-
 			case Common::KEYCODE_m:
-				if (event.kbd.flags && Common::KBD_CTRL) {
+				if (event.kbd.flags && Common::KBD_CTRL)
 					_sound->toggleMusic();
-				}
 				break;
-
 			case Common::KEYCODE_q:
-				if (event.kbd.flags && Common::KBD_CTRL) {
+				if (event.kbd.flags && Common::KBD_CTRL)
 					showQuitGamePrompt(20, 20);
-				}
 				break;
-			case Common::KEYCODE_TILDE:
-				// Ship speed: reverse
+			case Common::KEYCODE_TILDE:	// Ship speed: reverse
 				// TODO
 				break;
-			case Common::KEYCODE_1:
-				// Ship speed: stop
+			case Common::KEYCODE_1:	// Ship speed: stop
 				// TODO
 				break;
 			case Common::KEYCODE_2:
@@ -294,6 +296,135 @@ void StarTrekEngine::handleBridgeEvents() {
 	}
 }
 
+void StarTrekEngine::handleBridgeMenu(int menuEvent) {
+	// TODO: Move these
+	const char *kirkHeader = "KIRK";
+	const char *spockHeader = "MR. SPOCK";
+	const char *scottyHeader = "MR. SCOTT";
+	const char *uhuraHeader = "LIEUTENANT UHURA";
+	const char *suluHeader = "MR. SULU";
+	const char *chekovHeader = "MR. CHEKOV";
+	const char *shieldsUpText = "#BRID\\B_332#Captain, the shields are up.";
+	const char *notInOrbitText = "#BRID\\B_350#We're not in orbit, Captain.";
+	const char *transporterText = "#BRID\\C_060#Spock, come with me. Mr Scott, you have the conn.";
+	const char *nothingToReportText = "#BRID\\B_155#Nothing to report, Captain.";
+	const char *raiseShieldsText = "#BRID\\B_340#Raising shields.";
+	const char *lowerShieldsText = "#BRID\\B_337#Lowering shields, Captain.";
+	const char *armWeaponsText = "#BRID\\B_351#Arming weapons.";
+	const char *disarmWeaponsText = "#BRID\\B_354#Disarming weapons.";
+	const char *emergencyPowerText = "#BRID\\BRID_S32#I don't know how long she can take it, Captain.";
+	const char *noEmergencyPowerText = "#BRID\\BRID_S41#She can't take it, Captain.";
+	const char *underAttackText = "#BRID\\B_348#Unable to comply, Captain.  We're under attack.";
+	const char *missionNotOverText = "#BRID\\B_338#May I respectfully remind the Captain that we haven't accomplished our mission, Sir.";
+	const char *leaveOrbitText = "#BRID\\B_349#We must first leave orbit, Sir.";
+	const char *targetAnalysisOnText = "#BRID\\B_344#Target Analysis On.";
+	const char *targetAnalysisOffText = "#BRID\\B_343#Target Analysis Off.";
+	const char *ayeSirText = "#BRID\\BRID_S22#Aye Sir.";
+
+	switch (menuEvent) {
+	case kBridgeSpockTalk:
+		// TODO
+		break;
+	case kBridgeUnk1:
+		// TODO
+		break;
+	case kBridgeUnk2:
+		// TODO
+		break;
+	case kBridgeUnk3:
+		// TODO
+		break;
+	case kBridgeKirkCaptainsLog: // Kirk, captain's log
+		captainsLog();
+		break;
+	case kBridgeKirkTransporter: // Kirk, transporter
+		if (_enterpriseState.shields) {
+			showTextbox(suluHeader, shieldsUpText, 122, 116, 161, 0);
+		} else {
+			if (!_enterpriseState.inOrbit) {
+				showTextbox(suluHeader, notInOrbitText, 122, 116, 161, 0);
+			} else {
+				// TODO: Check if the destination is correct
+				// TODO: Check for veng or feather missions and show extra text
+				showTextbox(kirkHeader, transporterText, 160, 130, 176, 0);
+				runGameMode(GAMEMODE_BEAMDOWN, false);
+			}
+		}
+		break;
+	case kBridgeKirkOptions: // Kirk, options
+		showOptionsMenu(65, 60);
+		break;
+	case kBridgeSpockNothingToReport: // Spock, nothing to report
+		showTextbox(spockHeader, nothingToReportText, 294, 106, 44, 0);
+		break;
+	case kBridgeSpockConsultComputer: // Spock, consult computer
+		handleBridgeComputer();
+		break;
+	case kBridgeScottyDamageControl: // Scotty, damage control
+		showBridgeMenu("repair", 30, 30);
+		break;
+	case kBridgeScottyEmergencyPower: // Scotty, emergency power
+		// TODO: check for emergency power
+		showTextbox(scottyHeader, noEmergencyPowerText, 64, 100, 161, 0);
+		break;
+	case kBridgeUhuraCommunications: // Uhura, communications
+		// TODO: text
+		showTextbox(uhuraHeader, _resource->getLoadedText(16), 298, 150, 161, 0);
+		break;
+	case kBridgeSuluOrbit: // Sulu, orbit
+		if (_enterpriseState.underAttack) {
+			showTextbox(suluHeader, underAttackText, 122, 116, 176, 0);
+		} else {
+			// TODO: Check if mission is over
+			//showTextbox(suluHeader, missionNotOverText, 122, 116, 44, 0);
+
+			if (_enterpriseState.inOrbit) {
+				showTextbox(suluHeader, leaveOrbitText, 122, 116, 176, 0);
+			} else {
+				// TODO: Finish this
+				_enterpriseState.inOrbit = true;
+			}
+		}
+		break;
+	case kBridgeSuluShields: // Sulu, shields
+		_enterpriseState.shields = !_enterpriseState.shields;
+		showTextbox(suluHeader, _enterpriseState.shields ? raiseShieldsText : lowerShieldsText, 122, 116, 176, 0);
+		break;
+	case kBridgeChekovNavigation: // Chekov, navigation
+		// TODO
+		break;
+	case kBridgeChekovWeapons: // Chekov, weapons
+		_enterpriseState.weapons = !_enterpriseState.weapons;
+		showTextbox(chekovHeader, _enterpriseState.weapons ? armWeaponsText : disarmWeaponsText, 196, 116, 176, 0);
+		// TODO: weapons
+		break;
+	case kBridgeChekovRepairShields:
+	case kBridgeChekovRepairPhasers:
+	case kBridgeChekovRepairPhotonTorpedoes:
+	case kBridgeChekovRepairSensors:
+	case kBridgeChekovRepairBridge:
+	case kBridgeChekovRepairHull:
+	case kBridgeChekovRepairWarpDrives:
+		// TODO: Repair ship part (-1, 4, 2, 6, 1, 0, 7)
+		showTextbox(scottyHeader, ayeSirText, 64, 100, 161, 0);
+		break;
+	case kBridgeSuluTargetAnalysis: // Chekov, target analysis
+		_enterpriseState.targetAnalysis = !_enterpriseState.targetAnalysis;
+		showTextbox(suluHeader, _enterpriseState.targetAnalysis ? targetAnalysisOnText : targetAnalysisOffText, 122, 116, 176, 0);
+		// TODO: Target analysis
+		break;
+	default:
+		break;
+	}
+}
+
+void StarTrekEngine::captainsLog() {
+	// TODO: Show points for recently completed missions
+	const char *captainsLogHeader = "Captain's Log";
+	const char *noRecentMissions = "#BRID\\C_007#No recent missions have been completed.";
+	showTextbox(captainsLogHeader, noRecentMissions, 160, 130, 176, 0);
+}
+
 void StarTrekEngine::loadBridgeComputerTopics() {
 	Common::MemoryReadStreamEndian *indexFile = _resource->loadFile("db.key");
 	Common::String line;
diff --git a/engines/startrek/menu.cpp b/engines/startrek/menu.cpp
index 3b3d1480f4..585992626b 100644
--- a/engines/startrek/menu.cpp
+++ b/engines/startrek/menu.cpp
@@ -270,87 +270,7 @@ void StarTrekEngine::showBridgeMenu(Common::String menu, int x, int y) {
 	if (event != MENUEVENT_LCLICK_OFFBUTTON && event != MENUEVENT_RCLICK_OFFBUTTON)
 		_gfx->warpMouse(oldMousePos.x, oldMousePos.y);
 
-	switch (event) {
-	case 0:	// Spock, talk
-		// TODO
-		break;
-	case 1:
-		// TODO
-		break;
-	case 2:
-		// TODO
-		break;
-	case 3:
-		// TODO
-		break;
-	case 16:	// Kirk, captain's log
-		// TODO
-		break;
-	case 17:	// Kirk, transporter
-		// TODO: Check if Enterprise is in orbit
-		// TODO: header and text
-		showTextbox("KIRK", "#BRID\\C_060#Spock, come with me. Mr Scott, you have the conn.", 160, 130, 176, 0);
-		runGameMode(GAMEMODE_BEAMDOWN, false);
-		// TODO
-		break;
-	case 18:	// Kirk, options
-		showOptionsMenu(65, 60);
-		break;
-	case 32:
-		// TODO
-		break;
-	case 33: // Spock, consult computer
-		handleBridgeComputer();
-		break;
-	case 48:	// Scotty, damage control
-		// TODO
-		break;
-	case 49:	// Scotty, emergency power
-		// TODO
-		break;
-	case 64:	// Uhura, communications
-		// TODO: header and text
-		showTextbox("LIEUTENANT UHURA", _resource->getLoadedText(16), 298, 150, 161, 0);
-		break;
-	case 80:	// Sulu, orbit
-		// TODO
-		break;
-	case 81:	// Sulu, shields
-		// TODO
-		break;
-	case 96:	// Chekov, navigation
-		// TODO
-		break;
-	case 97:	// Chekov, weapons
-		// TODO
-		break;
-	case 112:
-		// TODO
-		break;
-	case 113:
-		// TODO
-		break;
-	case 114:
-		// TODO
-		break;
-	case 115:
-		// TODO
-		break;
-	case 116:
-		// TODO
-		break;
-	case 117:
-		// TODO
-		break;
-	case 118:
-		// TODO
-		break;
-	case 119:
-		// TODO
-		break;
-	default:
-		break;
-	}
+	handleBridgeMenu(event);
 }
 
 int StarTrekEngine::showActionMenu() {
diff --git a/engines/startrek/startrek.h b/engines/startrek/startrek.h
index 25a983c8b0..e70ff64190 100644
--- a/engines/startrek/startrek.h
+++ b/engines/startrek/startrek.h
@@ -216,6 +216,22 @@ struct ComputerTopic {
 	Common::String topic;
 };
 
+struct EnterpriseState {
+	bool shields;
+	bool weapons;
+	bool underAttack;
+	bool inOrbit;
+	bool targetAnalysis;
+
+	EnterpriseState() {
+		shields = false;
+		weapons = false;
+		underAttack = false;
+		inOrbit = false;
+		targetAnalysis = false;
+	}
+};
+
 class Graphics;
 class IWFile;
 class Sound;
@@ -548,6 +564,9 @@ public:
 	void drawMenuButtonOutline(Bitmap *bitmap, byte color);
 	void showOptionsMenu(int x, int y);
 	void showBridgeMenu(Common::String menu, int x, int y);
+	void handleBridgeMenu(int menuEvent);
+	void captainsLog();
+
 	/**
 	 * Show the "action selection" menu, ie. look, talk, etc.
 	 */
@@ -739,6 +758,8 @@ public:
 	IWFile *_iwFile;
 	Resource *_resource;
 
+	EnterpriseState _enterpriseState;
+
 private:
 	int leftClickEvent();
 	int rightClickEvent();




More information about the Scummvm-git-logs mailing list