[Scummvm-git-logs] scummvm master -> a333cf4490015f6fa2f3d216113064b91ef45470
bluegr
bluegr at gmail.com
Tue Dec 22 19:09:12 UTC 2020
This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
5ce0e00b7d STARTREK: Add a console command to play bridge sequences
a333cf4490 STARTREK: More bridge sequences functionality
Commit: 5ce0e00b7dbbfac88d6b7e1cc55e3895273712f9
https://github.com/scummvm/scummvm/commit/5ce0e00b7dbbfac88d6b7e1cc55e3895273712f9
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2020-12-22T21:08:50+02:00
Commit Message:
STARTREK: Add a console command to play bridge sequences
Changed paths:
engines/startrek/console.cpp
engines/startrek/console.h
diff --git a/engines/startrek/console.cpp b/engines/startrek/console.cpp
index 1b0de5c595..140150d440 100644
--- a/engines/startrek/console.cpp
+++ b/engines/startrek/console.cpp
@@ -37,6 +37,7 @@ Console::Console(StarTrekEngine *vm) : GUI::Debugger(), _vm(vm) {
registerCmd("filedump", WRAP_METHOD(Console, Cmd_DumpFile));
registerCmd("filesearch", WRAP_METHOD(Console, Cmd_SearchFile));
registerCmd("score", WRAP_METHOD(Console, Cmd_Score));
+ registerCmd("bridgeseq", WRAP_METHOD(Console, Cmd_BridgeSequence));
}
Console::~Console() {
@@ -201,6 +202,16 @@ bool Console::Cmd_Score(int argc, const char **argv) {
return true;
}
+bool Console::Cmd_BridgeSequence(int argc, const char **argv) {
+ if (argc < 2) {
+ debugPrintf("Usage: %s <sequence ID> to start a bridge sequence\n", argv[0]);
+ return true;
+ } else {
+ _vm->_bridgeSequenceToLoad = atoi(argv[1]);
+ return false;
+ }
+}
+
Common::String Console::EventToString(uint32 action) {
const char *actions[] = {
"Tick",
diff --git a/engines/startrek/console.h b/engines/startrek/console.h
index 0ca529cb4d..a5068bc6ee 100644
--- a/engines/startrek/console.h
+++ b/engines/startrek/console.h
@@ -44,6 +44,7 @@ private:
bool Cmd_DumpFile(int argc, const char **argv);
bool Cmd_SearchFile(int argc, const char **argv);
bool Cmd_Score(int argc, const char **argv);
+ bool Cmd_BridgeSequence(int argc, const char **argv);
Common::String EventToString(uint32 action);
Common::String ItemToString(byte index);
Commit: a333cf4490015f6fa2f3d216113064b91ef45470
https://github.com/scummvm/scummvm/commit/a333cf4490015f6fa2f3d216113064b91ef45470
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2020-12-22T21:08:50+02:00
Commit Message:
STARTREK: More bridge sequences functionality
Changed paths:
engines/startrek/bridge.cpp
engines/startrek/room.cpp
engines/startrek/startrek.cpp
engines/startrek/startrek.h
diff --git a/engines/startrek/bridge.cpp b/engines/startrek/bridge.cpp
index c276bb93bd..4c5299dd98 100644
--- a/engines/startrek/bridge.cpp
+++ b/engines/startrek/bridge.cpp
@@ -27,6 +27,10 @@
namespace StarTrek {
+#define ACTOR_STANDING_SPOCK "xstndsp"
+#define ACTOR_STANDING_MCCOY "xstndmc"
+#define ACTOR_SITTING_SPOCK "bstndsp"
+
struct BridgeActorAndMenu {
int id;
const char *anim;
@@ -76,43 +80,43 @@ enum BridgeSequence {
kSeqNone = -1,
// -- Chapter 1 ----
kSeqStartMissionDemon = 0,
- kSeqEndMockBattle,
- kSeqShowDebriefDemon,
- kSeqArrivedAtPolluxV,
- kSeqEndMissionDemon,
+ kSeqEndMockBattle = 1,
+ kSeqShowDebriefDemon = 2,
+ kSeqArrivedAtPolluxV = 3,
+ kSeqEndMissionDemon = 4,
// -- Chapter 2 ----
- kSeqStartMissionTug,
- kSeqStartElasiPirateBattle,
- kSeqArrivedAtBetaMyamid,
- kSeqApproachedTheMasada,
- kSeqEndMissionTug,
+ kSeqStartMissionTug = 5,
+ kSeqStartElasiPirateBattle = 6,
+ kSeqArrivedAtBetaMyamid = 7,
+ kSeqApproachedTheMasada = 8,
+ kSeqEndMissionTug = 9,
// -- Chapter 3 ----
- kSeqStartMissionLove,
- kSeqAfterLoveDebrief,
- kSeqStartRomulanBattle,
- kSeqAfterRomulanBattle,
- kSeqArrivedAtArk7,
- kSeqEndMissionLove,
+ kSeqStartMissionLove = 10,
+ kSeqAfterLoveDebrief = 11,
+ kSeqStartRomulanBattle = 12,
+ kSeqAfterRomulanBattle = 13,
+ kSeqArrivedAtArk7 = 14,
+ kSeqEndMissionLove = 15,
// -- Chapter 4 ----
- kSeqStartMissionMudd,
- kSeqUnk17,
- kSeqUnk18,
+ kSeqStartMissionMudd = 16,
+ kSeqFightElasiShipsAndContactMudd = 17,
+ kSeqEndMissionMudd = 18,
// -- Chapter 5 ----
- kSeqStartMissionFeather,
- kSeqUnk20,
- kSeqUnk21,
- kSeqStartMissionTrial,
- kSeqUnk23,
- kSeqUnk24,
- kSeqUnk25,
- kSeqUnk26,
- kSeqUnk27,
+ kSeqStartMissionFeather = 19,
+ kSeqUnk20 = 20,
+ kSeqUnk21 = 21,
+ kSeqStartMissionTrial = 22,
+ kSeqUnk23 = 23,
+ kSeqUnk24 = 24,
+ kSeqUnk25 = 25,
+ kSeqUnk26 = 26,
+ kSeqUnk27 = 27,
// -- Chapter 6 ----
- kSeqStartMissionVeng,
- kSeqUnk29,
+ kSeqStartMissionVeng = 28,
+ kSeqUnk29 = 29,
// -- Chapter 7 ----
- kSeqStartMissionSins,
- kSeqUnk31
+ kSeqStartMissionSins = 30,
+ kSeqUnk31 = 31
};
enum Planet {
@@ -150,7 +154,8 @@ enum BridgeTalkers {
kBridgeTalkerMcCoy,
kBridgeTalkerCaptainsLog,
kBridgeTalkerElasiCaptain,
- kBridgeTalkerElasiCereth
+ kBridgeTalkerElasiCereth,
+ kBridgeTalkerAutobeacon
};
void StarTrekEngine::initBridge(bool b) {
@@ -165,7 +170,7 @@ void StarTrekEngine::initBridge(bool b) {
void StarTrekEngine::loadBridge() {
// TODO: Check why the +1 is needed here
- initStarfield(72 + 1, 30 + 1, 247 + 1, 102 + 1, 0);
+ initStarfield(72 + 1, 30, 247 + 1, 102, 0);
_gfx->setBackgroundImage("bridge");
_gfx->loadPri("bridge");
@@ -232,6 +237,9 @@ void StarTrekEngine::showTextboxBridge(int talker, Common::String text) {
case kBridgeTalkerElasiCereth:
showTextbox("Elasi Cereth", text, 160, 190, 44, 0);
break;
+ case kBridgeTalkerAutobeacon:
+ showTextbox("Autobeacon", text, 160, 130, 161, 0);
+ break;
}
}
@@ -280,13 +288,14 @@ void StarTrekEngine::playBridgeSequence(int sequenceId) {
break;
case kSeqArrivedAtPolluxV:
showTextboxBridge(kBridgeTalkerSpock, 15); // We have arrived at Pollux V
+ _hailedTarget = false;
// In the original, this is actually a handler for Spock, Uhura and Chekov.
// We moved their actions in separate functions instead.
break;
case kSeqEndMissionDemon:
_resource->setTxtFileName("DEMON");
- loadActorAnim(1, "xstndsp", 0, 0, 1.0); // Standing Spock
- loadActorAnim(2, "xstndmc", 0, 0, 1.0); // Standing McCoy
+ loadActorAnim(1, ACTOR_STANDING_SPOCK, 0, 0, 1.0);
+ loadActorAnim(2, ACTOR_STANDING_MCCOY, 0, 0, 1.0);
_sound->playSoundEffectIndex(34);
showTextboxBridge(kBridgeTalkerUhura, 23); // Message from Starfleet
showTextboxBridge(kBridgeTalkerKirk, 24);
@@ -295,7 +304,7 @@ void StarTrekEngine::playBridgeSequence(int sequenceId) {
showTextboxBridge(kBridgeTalkerKirk, 26);
showTextboxBridge(kBridgeTalkerSpock, 27);
showTextboxBridge(kBridgeTalkerMcCoy, 28);
- loadActorAnim(1, "bstndsp", 0, 0, 1.0); // Sitting Spock
+ loadActorAnim(1, ACTOR_SITTING_SPOCK, 0, 0, 1.0);
removeActorFromScreen(2);
_bridgeSequenceToLoad = kSeqStartMissionTug;
break;
@@ -339,24 +348,38 @@ void StarTrekEngine::playBridgeSequence(int sequenceId) {
case kSeqApproachedTheMasada:
// TODO: approach the Masada 3D animation
showTextboxBridge(kBridgeTalkerSpock, 20); // There she is, Captain. She does not appear to be seriously damaged
+ _hailedTarget = false;
_beamDownAllowed = false;
break;
case kSeqEndMissionTug:
_resource->setTxtFileName("TUG");
- loadActorAnim(1, "xstndsp", 0, 0, 1.0); // Standing Spock
- loadActorAnim(2, "xstndmc", 0, 0, 1.0); // Standing McCoy
- // TODO: 3 possible outcomes depending on mission actions
- _sound->playSoundEffectIndex(34);
- showTextboxBridge(kBridgeTalkerUhura, 29); // Message from Starfleet
- showTextboxBridge(kBridgeTalkerKirk, 30);
- showMissionPerformance(_awayMission.tug.missionScore * 100 / 32, 31);
- showTextboxBridge(kBridgeTalkerMcCoy, 32);
- showTextboxBridge(kBridgeTalkerSpock, 33);
- showTextboxBridge(kBridgeTalkerMcCoy, 34);
- showTextboxBridge(kBridgeTalkerKirk, 35);
- showTextboxBridge(kBridgeTalkerSpock, 36);
- showTextboxBridge(kBridgeTalkerKirk, 37);
- loadActorAnim(1, "bstndsp", 0, 0, 1.0); // Sitting Spock
+ loadActorAnim(1, ACTOR_STANDING_SPOCK, 0, 0, 1.0); // Standing Spock
+ loadActorAnim(2, ACTOR_STANDING_MCCOY, 0, 0, 1.0); // Standing McCoy
+ if (_missionEndFlag == 0) {
+ // Good ending
+ _sound->playSoundEffectIndex(34);
+ showTextboxBridge(kBridgeTalkerUhura, 29);
+ showTextboxBridge(kBridgeTalkerKirk, 30);
+ showMissionPerformance(_awayMission.tug.missionScore * 100 / 32, 31);
+ showTextboxBridge(kBridgeTalkerMcCoy, 32); // Trying to hold a Federation starship captive. Can you believe it?
+ showTextboxBridge(kBridgeTalkerSpock, 33); // Since we just witnessed that very event, Doctor, I'm surprised you ask.
+ showTextboxBridge(kBridgeTalkerMcCoy, 34);
+ showTextboxBridge(kBridgeTalkerKirk, 35);
+ showTextboxBridge(kBridgeTalkerSpock, 36);
+ showTextboxBridge(kBridgeTalkerKirk, 37);
+ } else if (_missionEndFlag == 1) {
+ // Bad ending 1 (0 score): the Masada got destroyed, everyone died
+ _sound->playSoundEffectIndex(34);
+ showTextboxBridge(kBridgeTalkerUhura, 39);
+ showTextboxBridge(kBridgeTalkerKirk, 40);
+ showMissionPerformance(0, 41);
+ } else if (_missionEndFlag == 2) {
+ // Bad ending 2 (0 score): bad handling of the situation, some prisoners died
+ _sound->playSoundEffectIndex(34);
+ showTextboxBridge(kBridgeTalkerUhura, 42);
+ showMissionPerformance(0, 43);
+ }
+ loadActorAnim(1, ACTOR_SITTING_SPOCK, 0, 0, 1.0);
removeActorFromScreen(2);
_bridgeSequenceToLoad = kSeqStartMissionLove;
break;
@@ -373,22 +396,98 @@ void StarTrekEngine::playBridgeSequence(int sequenceId) {
_mouseControllingShip = true;
break;
case kSeqAfterLoveDebrief:
- // TODO
+ // In the original, this is actually a handler for Spock, Uhura and Chekov.
+ // We moved their actions in separate functions instead.
break;
case kSeqStartRomulanBattle:
- // TODO
+ showTextboxBridge(kBridgeTalkerSpock, "#BRID\\B_160#Romulan ship decloaking, Captain.");
+ _sound->playSoundEffectIndex(34);
+ showTextboxBridge(kBridgeTalkerUhura, 6); // Message from the Romulan ship, Sir
+ showBridgeScreenTalkerWithMessage(9, "Romulan Captain", "romula");
+ showTextboxBridge(kBridgeTalkerSpock, 10);
+ _sound->playMidiMusicTracks(2, -1);
+ _enterpriseState.underAttack = true;
+ // HACK: Play the end of the Romulan battle sequence, until the 3D code is implemented
+ _bridgeSequenceToLoad = kSeqAfterRomulanBattle;
break;
case kSeqAfterRomulanBattle:
- // TODO
+ _enterpriseState.underAttack = false;
+ showTextboxBridge(kBridgeTalkerSpock, 11); // They activated a self-destruct device...
+ showTextboxBridge(kBridgeTalkerSulu, 12); // Resuming course to ARK7, Captain
+ orbitPlanetSequence();
+ _bridgeSequenceToLoad = kSeqArrivedAtArk7;
break;
case kSeqArrivedAtArk7:
- // TODO
+ _hailedTarget = false;
+ _sound->playSoundEffectIndex(34);
+ showTextboxBridge(kBridgeTalkerUhura, 17);
+ showTextboxBridge(kBridgeTalkerAutobeacon, 16);
break;
case kSeqEndMissionLove:
- // TODO
+ _resource->setTxtFileName("LOVE");
+ loadActorAnim(1, ACTOR_STANDING_SPOCK, 0, 0, 1.0); // Standing Spock
+ loadActorAnim(2, ACTOR_STANDING_MCCOY, 0, 0, 1.0); // Standing McCoy
+ _sound->playSoundEffectIndex(34);
+ showTextboxBridge(kBridgeTalkerUhura, 18);
+ showTextboxBridge(kBridgeTalkerKirk, 19);
+ showMissionPerformance(_awayMission.love.missionScore * 100 / 32, 26);
+ showTextboxBridge(kBridgeTalkerKirk, 20);
+ showTextboxBridge(kBridgeTalkerMcCoy, 21);
+ showTextboxBridge(kBridgeTalkerKirk, 22);
+ showTextboxBridge(kBridgeTalkerMcCoy, 23);
+ showTextboxBridge(kBridgeTalkerScotty, 24);
+ showTextboxBridge(kBridgeTalkerKirk, 25);
+ loadActorAnim(1, ACTOR_SITTING_SPOCK, 0, 0, 1.0);
+ removeActorFromScreen(2);
+ _bridgeSequenceToLoad = kSeqStartMissionMudd;
break;
case kSeqStartMissionMudd: // Chapter 4: Another Fine Mess (mudd)
- _targetPlanet = kPlanetHarlequin;
+ _targetPlanet = kPlanetHarlequin; // We set it earlier for uniformity
+ _missionName = _missionToLoad = "MUDD";
+ _resource->setTxtFileName(_missionName);
+ _sound->loadMusicFile("bridge");
+ // TODO: sub_321F9()
+ showMissionStartEnterpriseFlyby("MUD0\\FLYBY", "another");
+ _sound->playSoundEffectIndex(34);
+ showTextboxBridge(kBridgeTalkerUhura, 0);
+ showTextboxBridge(kBridgeTalkerKirk, 1);
+ showBridgeScreenTalkerWithMessage(2, "Admiral", "woman");
+ // TODO: changeBridgeMode 1
+ // Spock's planet arrival quote has been moved to kSeqFightElasiShipsAndContactMudd
+ break;
+ case kSeqFightElasiShipsAndContactMudd:
+ showTextboxBridge(kBridgeTalkerSpock, 5); // We have arrived at Harlequin
+ // TODO
+ break;
+ case kSeqEndMissionMudd:
+ _resource->setTxtFileName("MUDD");
+ loadActorAnim(1, ACTOR_STANDING_SPOCK, 0, 0, 1.0); // Standing Spock
+ loadActorAnim(2, ACTOR_STANDING_MCCOY, 0, 0, 1.0); // Standing McCoy
+ showMissionPerformance(_awayMission.mudd.missionScore * 100 / 32, 35);
+ if (_missionEndFlag != 0) {
+ // Obtained alien contraption
+ showTextboxBridge(kBridgeTalkerScotty, 36);
+ showTextboxBridge(kBridgeTalkerKirk, 37);
+ } else {
+ // Did not obtain alien contraption
+ showTextboxBridge(kBridgeTalkerKirk, 38);
+ }
+ showTextboxBridge(kBridgeTalkerUhura, 41);
+ showTextboxBridge(kBridgeTalkerKirk, 42);
+ showTextboxBridge(kBridgeTalkerUhura, 43);
+ showTextboxBridge(kBridgeTalkerKirk, 44);
+ loadActorAnim(1, ACTOR_SITTING_SPOCK, 0, 0, 1.0);
+ removeActorFromScreen(2);
+ _bridgeSequenceToLoad = kSeqStartMissionFeather;
+ break;
+ case kSeqStartMissionFeather:
+ _targetPlanet = kPlanetDigifal; // We set it earlier for uniformity
+ _missionName = _missionToLoad = "FEATHER";
+ _resource->setTxtFileName(_missionName);
+ _sound->loadMusicFile("bridgeb");
+ // TODO: sub_321F9()
+ showMissionStartEnterpriseFlyby("FEA0\\FLYBY", "feather");
+ showTextboxBridge(kBridgeTalkerKirk, 5);
// TODO
break;
// TODO: The rest
@@ -411,6 +510,10 @@ CrewTextsForChapter crewTexts[] = {
{ kPlanetPollux, kBridgeTalkerUhura, 9, 16, 19, 19},
{ kPlanetBetaMyamid, kBridgeTalkerSpock, 13, 5, 17, 27 },
{ kPlanetBetaMyamid, kBridgeTalkerUhura, 12, 4, 16, -1 },
+ { kPlanetArk7, kBridgeTalkerSpock, 8, 4, -1, 13 },
+ { kPlanetArk7, kBridgeTalkerUhura, 7, 5, -1, -1 },
+ { kPlanetHarlequin, kBridgeTalkerSpock, -1, 4, -1, -1 },
+ { kPlanetHarlequin, kBridgeTalkerUhura, -1, 3, -1, -1 },
// TODO: The rest
{ kPlanetNone, kBridgeTalkerNone, 0, 0, 0, 0 }
};
@@ -450,6 +553,10 @@ void StarTrekEngine::bridgeCrewAction(int crewId) {
if (textId >= 0) {
showTextboxBridge(crewId, textId);
+ } else if (crewId == kBridgeTalkerSpock) {
+ showTextboxBridge(crewId, "#BRID\\B_155 #Nothing to report, Captain.");
+ } else if (crewId == kBridgeTalkerUhura) {
+ showTextboxBridge(crewId, "#BRID\\BRIDU016#Hailing frequencies open.");
}
}
@@ -471,6 +578,11 @@ void StarTrekEngine::contactTargetAction() {
hailTheMasada();
}
break;
+ case kPlanetArk7: // Chapter 3: Love's Labor Jeopardized (love)
+ _sound->playSoundEffectIndex(34);
+ showTextboxBridge(kBridgeTalkerUhura, 14);
+ showBridgeScreenTalkerWithMessage(15, "Centurion Preax", "romula");
+ break;
// TODO: The rest
}
}
@@ -484,16 +596,64 @@ void StarTrekEngine::negotiateWithElasiCereth() {
""
};
- /*int choice = */showText(&StarTrekEngine::readTextFromArrayWithChoices, (uintptr)options1, 160, 130, 176, true, false, false);
- // TODO: The rest
+ const char *options2[] = {
+ "Captain Kirk",
+ "#BRID\\C_026#Freeing the prisoners you requested will take time. We have to track down their current locations, and Starfleet will have to grant permission to move them here. I will get that started - you should tender a show of good faith on your part. Will you beam over so we can discuss negotiations face to face?",
+ "#BRID\\C_091#We can work together on this, Elasi. How about beaming some of the hostages over as a show of good faith?",
+ ""
+ };
+
+ const char *options3[] = {
+ "Captain Kirk",
+ "#BRID\\C_077#Very well, we'll do it your way. I will put together the data packet. Kirk out.",
+ "#BRID\\C_102#Your fellow Elasi have been tried in Federation courts of law, and found guilty of their crimes. We'll listen to your complaints if you discuss them reasonably.",
+ "#BRID\\C_014#Forget it. Elasi Cereth, you'll be the next one languishing on a Federation penal planet unless you drop your shields and surrender to me immediately.",
+ ""
+ };
+
+ int choice = showText(&StarTrekEngine::readTextFromArrayWithChoices, (uintptr)options1, 160, 130, 176, true, false, false);
+ if (choice == 0) {
+ showTextboxBridge(kBridgeTalkerElasiCereth, 44); // Ah, the infamous captain Kirk...
+ showTextboxBridge(kBridgeTalkerUhura, 45);
+ } else if (choice == 1) {
+ showTextboxBridge(kBridgeTalkerElasiCereth, 46); // Well, Kirk, someone is about to pay the price for your insolence
+ showTextboxBridge(kBridgeTalkerSpock, 60);
+ _deadMasadaPrisoners++;
+ } else if (choice == 2) {
+ showTextboxBridge(kBridgeTalkerElasiCereth, 47);
+ showTextboxBridge(kBridgeTalkerElasiCereth, 44); // Ah, the infamous captain Kirk...
+ showTextboxBridge(kBridgeTalkerUhura, 45);
+ }
+
+ showText(&StarTrekEngine::readTextFromArrayWithChoices, (uintptr)options2, 160, 130, 176, true, false, false);
+ // The choice here makes no difference
+ showTextboxBridge(kBridgeTalkerElasiCereth, 51);
+ showTextboxBridge(kBridgeTalkerScotty, 52);
+ showTextboxBridge(kBridgeTalkerSulu, 53);
+ showTextboxBridge(kBridgeTalkerElasiCereth, 54);
+
+ choice = showText(&StarTrekEngine::readTextFromArrayWithChoices, (uintptr)options3, 160, 130, 176, true, false, false);
+ if (choice == 0) {
+ // End of dialog
+ } else if (choice == 1) {
+ showTextboxBridge(kBridgeTalkerElasiCereth, 69);
+ } else if (choice == 2) {
+ showTextboxBridge(kBridgeTalkerElasiCereth, 70);
+ showTextboxBridge(kBridgeTalkerSpock, 60);
+ _deadMasadaPrisoners++;
+ showTextboxBridge(kBridgeTalkerElasiCereth, 71);
+ // The original checks for 4 dead prisoners here, but that is impossible at this point
+ }
+
+ // There are some more checks for dialog choices here, but all seem to be dead code
}
void StarTrekEngine::hailTheMasada() {
const char *options[] = {
- "Captain Kirk",
- "Hail the masada.",
+ "Captain Kirk",
+ "Hail the Masada.",
"Send prefix code.",
- ""
+ ""
};
int choice = showText(&StarTrekEngine::readTextFromArrayWithChoices, (uintptr)options, 160, 130, 176, true, false, false);
@@ -503,7 +663,12 @@ void StarTrekEngine::hailTheMasada() {
showTextboxBridge(kBridgeTalkerKirk, 23);
removeActorFromScreen(_currentScreenTalker);
initStarfieldSprite(&_starfieldSprite, new StubBitmap(0, 0), _starfieldRect);
- // TODO: Kill 1 crew member
+ showTextboxBridge(kBridgeTalkerSpock, 60);
+ _deadMasadaPrisoners++;
+ if (_deadMasadaPrisoners > 4) {
+ _missionEndFlag = 2;
+ _bridgeSequenceToLoad = kSeqEndMissionTug;
+ }
} else {
Common::String code = showCodeInputBox();
if (code == "293391-197736-3829") {
@@ -596,8 +761,7 @@ void StarTrekEngine::showBridgeScreenTalkerWithMessages(Common::String texts[],
initStarfieldSprite(&_starfieldSprite, new Bitmap(_resource->loadBitmapFile(talkerId)), _starfieldRect);
_starfieldSprite.drawMode = 0;
- // TODO: Check why we need the coord adjustments below
- _currentScreenTalker = loadActorAnim(-1, talkerId, 72 - 2, 30 + 1, 1.0);
+ _currentScreenTalker = loadActorAnim(-1, talkerId, 72 + _starfieldSprite.bitmap->xoffset - 2, 30 + _starfieldSprite.bitmap->yoffset, 1.0);
int i = 0;
Common::String text = texts[i];
while (text != "") {
@@ -883,15 +1047,15 @@ void StarTrekEngine::handleBridgeMenu(int menuEvent) {
case kBridgeSuluOrbit: // Sulu, orbit
if (_enterpriseState.underAttack) {
showTextboxBridge(kBridgeTalkerSulu, underAttackText);
- //} else if (false) {
- // // TODO: Check if mission is over
- // showTextboxBridge(kBridgeTalkerSulu, missionNotOverText);
+ } else if (_currentPlanet == _targetPlanet && _enterpriseState.inOrbit) {
+ showTextboxBridge(kBridgeTalkerSulu, missionNotOverText);
} else {
- orbitPlanet();
-
if (_targetPlanet == kPlanetBetaMyamid) {
+ orbitPlanetSequence();
_bridgeSequenceToLoad = kSeqApproachedTheMasada;
}
+
+ orbitPlanet();
}
break;
case kBridgeSuluShields: // Sulu, shields
@@ -901,9 +1065,8 @@ void StarTrekEngine::handleBridgeMenu(int menuEvent) {
case kBridgeChekovNavigation: // Chekov, navigation
if (_enterpriseState.underAttack) {
showTextboxBridge(kBridgeTalkerSulu, underAttackText);
- //} else if (false) {
- // // TODO: Check if mission is over
- // showTextboxBridge(kBridgeTalkerSulu, missionNotOverText);
+ } else if (_currentPlanet == _targetPlanet) {
+ showTextboxBridge(kBridgeTalkerSulu, missionNotOverText);
} else if (_enterpriseState.inOrbit) {
showTextboxBridge(kBridgeTalkerSulu, leaveOrbitText);
} else {
@@ -947,7 +1110,10 @@ void StarTrekEngine::showStarMap() {
_bridgeSequenceToLoad = kSeqArrivedAtPolluxV;
else if (_targetPlanet == kPlanetBetaMyamid)
_bridgeSequenceToLoad = kSeqStartElasiPirateBattle;
-
+ else if (_targetPlanet == kPlanetArk7)
+ _bridgeSequenceToLoad = kSeqStartRomulanBattle;
+ else if (_targetPlanet == kPlanetHarlequin)
+ _bridgeSequenceToLoad = kSeqFightElasiShipsAndContactMudd;
// TODO
}
@@ -963,6 +1129,11 @@ void StarTrekEngine::wrongDestinationRandomEncounter() {
// TODO
}
+// Used when approaching Beta Myamid / Masada in chapter 2, and Ark 7 in chapter 3
+void StarTrekEngine::orbitPlanetSequence() {
+ // TODO
+}
+
void StarTrekEngine::orbitPlanet() {
const char *enteringOrbitText = "#BRID\\B_333#Entering standard orbit.";
const char *leavingOrbitText = "#BRID\\B_335#Leaving orbit.";
diff --git a/engines/startrek/room.cpp b/engines/startrek/room.cpp
index 2f2282c1a4..20bc784539 100644
--- a/engines/startrek/room.cpp
+++ b/engines/startrek/room.cpp
@@ -671,7 +671,19 @@ void Room::endMission(int16 score, int16 arg1, int16 arg2) {
if (_vm->_missionName == "DEMON") {
_vm->_gameMode = GAMEMODE_BEAMUP;
_vm->_roomIndexToLoad = 0;
- _vm->_bridgeSequenceToLoad = 4; // kSeqEndMissionDemon
+ _vm->_bridgeSequenceToLoad = 4; // kSeqEndMissionDemon
+ } else if (_vm->_missionName == "TUG") {
+ _vm->_gameMode = GAMEMODE_BEAMUP;
+ _vm->_roomIndexToLoad = 0;
+ _vm->_bridgeSequenceToLoad = 9; // kSeqEndMissionTug
+ } else if (_vm->_missionName == "LOVE") {
+ _vm->_gameMode = GAMEMODE_BEAMUP;
+ _vm->_roomIndexToLoad = 0;
+ _vm->_bridgeSequenceToLoad = 15; // 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.
@@ -680,9 +692,9 @@ void Room::endMission(int16 score, int16 arg1, int16 arg2) {
const char *missionNames[] = {
//"DEMON",
- "TUG",
- "LOVE",
- "MUDD",
+ //"TUG",
+ //"LOVE",
+ //"MUDD",
"FEATHER",
"TRIAL",
"SINS",
diff --git a/engines/startrek/startrek.cpp b/engines/startrek/startrek.cpp
index 9c03ba06f2..817fd82f94 100644
--- a/engines/startrek/startrek.cpp
+++ b/engines/startrek/startrek.cpp
@@ -115,7 +115,18 @@ StarTrekEngine::StarTrekEngine(OSystem *syst, const StarTrekGameDescription *gam
_currentPlanet = -1;
_gameIsPaused = false;
_hailedTarget = false;
+ _deadMasadaPrisoners = 0;
_beamDownAllowed = true;
+ _missionEndFlag = 0;
+
+ _awayMission.demon.missionScore = 0;
+ _awayMission.tug.missionScore = 0;
+ _awayMission.love.missionScore = 0;
+ _awayMission.mudd.missionScore = 0;
+ _awayMission.feather.missionScore = 0;
+ _awayMission.trial.missionScore = 0;
+ _awayMission.sins.missionScore = 0;
+ _awayMission.veng.missionScore = 0;
const Common::FSNode gameDataDir(ConfMan.get("path"));
SearchMan.addSubDirectoryMatching(gameDataDir, "patches");
@@ -301,12 +312,9 @@ void StarTrekEngine::runTransportSequence(const Common::String &name) {
} else if (_missionToLoad.equalsIgnoreCase("trial")) {
if (name[4] == 'd') {
loadActorAnim(9, "qteled", 0x61, 0x79, 1.0);
- }
- /* TODO
- else if (word_51156 >= 3) {
+ } else if (_missionEndFlag >= 3) {
loadActorAnim(9, "qteleb", 0x61, 0x79, 1.0);
}
- */
}
loadActorAnim(8, "transc", 0, 0, 1.0);
diff --git a/engines/startrek/startrek.h b/engines/startrek/startrek.h
index ac552f8977..8c9d7a7213 100644
--- a/engines/startrek/startrek.h
+++ b/engines/startrek/startrek.h
@@ -276,6 +276,7 @@ private:
void wrongDestinationRandomEncounter();
void bridgeCrewAction(int crewId);
void contactTargetAction();
+ void orbitPlanetSequence();
void negotiateWithElasiCereth();
void hailTheMasada();
@@ -284,7 +285,9 @@ private:
int _currentScreenTalker;
bool _gameIsPaused;
bool _hailedTarget;
+ int _deadMasadaPrisoners;
bool _beamDownAllowed;
+ int _missionEndFlag;
public:
void playMovie(Common::String filename);
More information about the Scummvm-git-logs
mailing list