[Scummvm-git-logs] scummvm master -> 7f09ab5868858efbf75b20ed6a4521c6e6ecc74e
bluegr
bluegr at gmail.com
Sun Dec 20 14:54:14 UTC 2020
This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
e46e7e022b STARTREK: Fix action type
1cd061fa00 STARTREK: Always return a value in leftClickEvent()
7f09ab5868 STARTREK: More bridge actions functionality
Commit: e46e7e022b1fc30f2ee44b433240b48c6f355b8e
https://github.com/scummvm/scummvm/commit/e46e7e022b1fc30f2ee44b433240b48c6f355b8e
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2020-12-20T16:53:53+02:00
Commit Message:
STARTREK: Fix action type
Changed paths:
engines/startrek/action.h
engines/startrek/awaymission.cpp
engines/startrek/room.cpp
engines/startrek/room.h
diff --git a/engines/startrek/action.h b/engines/startrek/action.h
index 628afd9d30..22098594e7 100644
--- a/engines/startrek/action.h
+++ b/engines/startrek/action.h
@@ -56,7 +56,7 @@ enum ActionTypes {
};
struct Action {
- signed char type;
+ int8 type;
byte b1;
byte b2;
byte b3;
diff --git a/engines/startrek/awaymission.cpp b/engines/startrek/awaymission.cpp
index 896fd3f9c9..340804b11a 100644
--- a/engines/startrek/awaymission.cpp
+++ b/engines/startrek/awaymission.cpp
@@ -535,7 +535,7 @@ void StarTrekEngine::addAction(const Action &action) {
_actionQueue.push(action);
}
-void StarTrekEngine::addAction(char type, byte b1, byte b2, byte b3) {
+void StarTrekEngine::addAction(int8 type, byte b1, byte b2, byte b3) {
const Action a = {type, b1, b2, b3};
addAction(a);
}
diff --git a/engines/startrek/room.cpp b/engines/startrek/room.cpp
index 06db3a7c09..2f2282c1a4 100644
--- a/engines/startrek/room.cpp
+++ b/engines/startrek/room.cpp
@@ -319,7 +319,7 @@ bool Room::actionHasCode(const Action &action) {
return false;
}
-bool Room::actionHasCode(char type, byte b1, byte b2, byte b3) {
+bool Room::actionHasCode(int8 type, byte b1, byte b2, byte b3) {
const Action a = {type, b1, b2, b3};
return actionHasCode(a);
}
@@ -339,7 +339,7 @@ bool Room::handleAction(const Action &action) {
return false;
}
-bool Room::handleAction(char type, byte b1, byte b2, byte b3) {
+bool Room::handleAction(int8 type, byte b1, byte b2, byte b3) {
const Action a = {type, b1, b2, b3};
return handleAction(a);
}
@@ -360,7 +360,7 @@ bool Room::handleActionWithBitmask(const Action &action) {
return false;
}
-bool Room::handleActionWithBitmask(char type, byte b1, byte b2, byte b3) {
+bool Room::handleActionWithBitmask(int8 type, byte b1, byte b2, byte b3) {
Action a = {type, b1, b2, b3};
return handleActionWithBitmask(a);
}
diff --git a/engines/startrek/room.h b/engines/startrek/room.h
index 824c03d93a..59067685b4 100644
--- a/engines/startrek/room.h
+++ b/engines/startrek/room.h
@@ -102,19 +102,19 @@ public:
* Check if a particular action is defined for this room.
*/
bool actionHasCode(const Action &action);
- bool actionHasCode(char type, byte b1, byte b2, byte b3);
+ bool actionHasCode(int8 type, byte b1, byte b2, byte b3);
/**
* Execute a particular action for this room, if defined.
*/
bool handleAction(const Action &action);
- bool handleAction(char type, byte b1, byte b2, byte b3);
+ bool handleAction(int8 type, byte b1, byte b2, byte b3);
/**
* Same as above, but if any byte in the action is -1 (0xff), it matches any value.
*/
bool handleActionWithBitmask(const Action &action);
- bool handleActionWithBitmask(char type, byte b1, byte b2, byte b3);
+ bool handleActionWithBitmask(int8 type, byte b1, byte b2, byte b3);
uint16 getFirstHotspot() {
return readRdfWord(0x12);
Commit: 1cd061fa00175c39dc4d3c595e28612b48eff8ea
https://github.com/scummvm/scummvm/commit/1cd061fa00175c39dc4d3c595e28612b48eff8ea
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2020-12-20T16:53:53+02:00
Commit Message:
STARTREK: Always return a value in leftClickEvent()
Changed paths:
engines/startrek/menu.cpp
diff --git a/engines/startrek/menu.cpp b/engines/startrek/menu.cpp
index 2d81b53304..0fffbd2c62 100644
--- a/engines/startrek/menu.cpp
+++ b/engines/startrek/menu.cpp
@@ -593,6 +593,8 @@ int StarTrekEngine::leftClickEvent() {
return MENUEVENT_LCLICK_OFFBUTTON;
}
}
+
+ return MENUEVENT_LCLICK_OFFBUTTON;
}
int StarTrekEngine::rightClickEvent() {
Commit: 7f09ab5868858efbf75b20ed6a4521c6e6ecc74e
https://github.com/scummvm/scummvm/commit/7f09ab5868858efbf75b20ed6a4521c6e6ecc74e
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2020-12-20T16:53:53+02:00
Commit Message:
STARTREK: More bridge actions functionality
Changed paths:
engines/startrek/bridge.cpp
engines/startrek/startrek.cpp
engines/startrek/startrek.h
diff --git a/engines/startrek/bridge.cpp b/engines/startrek/bridge.cpp
index d1325b5fd8..3e618476f5 100644
--- a/engines/startrek/bridge.cpp
+++ b/engines/startrek/bridge.cpp
@@ -45,6 +45,7 @@ BridgeActorAndMenu bridgeActorsAndMenus[] = {
};
enum BridgeMenuEvent {
+ kBridgeNone = -1,
kBridgeKirkCommand = 0,
kBridgeUnk1 = 1,
kBridgeUnk2 = 2,
@@ -52,11 +53,11 @@ enum BridgeMenuEvent {
kBridgeKirkCaptainsLog = 16,
kBridgeKirkTransporter = 17,
kBridgeKirkOptions = 18,
- kBridgeSpockConsult = 32,
+ kBridgeSpock = 32,
kBridgeSpockComputer = 33,
kBridgeScottyDamageControl = 48,
kBridgeScottyEmergencyPower = 49,
- kBridgeUhuraCommunications = 64,
+ kBridgeUhura = 64,
kBridgeSuluOrbit = 80,
kBridgeSuluShields = 81,
kBridgeChekovNavigation = 96,
@@ -73,25 +74,30 @@ enum BridgeMenuEvent {
enum BridgeSequence {
kSeqNone = -1,
+ // -- Chapter 1 ----
kSeqStartMissionDemon = 0,
kSeqEndMockBattle,
kSeqShowDebriefDemon,
kSeqArrivedAtPolluxV,
kSeqEndMissionDemon,
+ // -- Chapter 2 ----
kSeqStartMissionTug,
kSeqStartElasiPirateBattle,
- kSeqApproachMasada,
- kSeqTalkWithMasadaElasiCereth,
+ kSeqArrivedAtBetaMyamid,
+ kSeqApproachedTheMasada,
kSeqEndMissionTug,
+ // -- Chapter 3 ----
kSeqStartMissionLove,
kSeqUnk11,
kSeqUnk12,
kSeqUnk13,
kSeqUnk14,
kSeqUnk15,
+ // -- Chapter 4 ----
kSeqStartMissionMudd,
kSeqUnk17,
kSeqUnk18,
+ // -- Chapter 5 ----
kSeqStartMissionFeather,
kSeqUnk20,
kSeqUnk21,
@@ -101,13 +107,16 @@ enum BridgeSequence {
kSeqUnk25,
kSeqUnk26,
kSeqUnk27,
+ // -- Chapter 6 ----
kSeqStartMissionVeng,
kSeqUnk29,
+ // -- Chapter 7 ----
kSeqStartMissionSins,
kSeqUnk31
};
enum Planet {
+ kPlanetNone = -1,
kPlanetCenturius = 0,
kPlanetCameronsStar = 1,
kPlanetArk7 = 2, // Chapter 3: Love's Labor Jeopardized (love)
@@ -131,6 +140,7 @@ enum Planet {
};
enum BridgeTalkers {
+ kBridgeTalkerNone = -1,
kBridgeTalkerKirk = 0,
kBridgeTalkerSpock,
kBridgeTalkerSulu,
@@ -223,6 +233,7 @@ void StarTrekEngine::playBridgeSequence(int sequenceId) {
switch (sequenceId) {
case kSeqStartMissionDemon: // Chapter 1: Demon world (demon)
+ _targetPlanet = kPlanetPollux; // We set it earlier for uniformity
_missionName = _missionToLoad = "DEMON";
_resource->setTxtFileName(_missionName);
_sound->loadMusicFile("bridgew");
@@ -259,7 +270,6 @@ void StarTrekEngine::playBridgeSequence(int sequenceId) {
setBridgeMouseCursor(); // 0, 0
// TODO: Delete 3D object
showBridgeScreenTalkerWithMessage(12, "Admiral", "woman");
- _targetPlanet = kPlanetPollux;
break;
case kSeqArrivedAtPolluxV:
// In the original, this is actually a handler for Spock, Uhura and Chekov.
@@ -296,8 +306,6 @@ void StarTrekEngine::playBridgeSequence(int sequenceId) {
showTextboxBridge(kBridgeTalkerKirk, 1);
showBridgeScreenTalkerWithMessage(2, "Admiral", "woman");
showTextboxBridge(kBridgeTalkerChekov, 3);
- showTextboxBridge(kBridgeTalkerUhura, 4);
- showTextboxBridge(kBridgeTalkerSpock, 5);
break;
case kSeqStartElasiPirateBattle:
showTextboxBridge(kBridgeTalkerSpock, 6);
@@ -310,24 +318,18 @@ void StarTrekEngine::playBridgeSequence(int sequenceId) {
removeActorFromScreen(_currentScreenTalker);
initStarfieldSprite(&_starfieldSprite, new StubBitmap(0, 0), _starfieldRect);
_sound->playSoundEffectIndex(40);
- startBattle("orion"); // Elasi Pirate battle
_enterpriseState.underAttack = true;
_sound->playMidiMusicTracks(2, -1);
- showTextboxBridge(kBridgeTalkerUhura, 12);
- showTextboxBridge(kBridgeTalkerSpock, 13);
+ startBattle("orion"); // Elasi Pirate battle
_enterpriseState.underAttack = false;
_sound->playMidiMusicTracks(3, -1);
- showTextboxBridge(kBridgeTalkerChekov, 14);
- showTextboxBridge(kBridgeTalkerSpock, 15);
- _bridgeSequenceToLoad = kSeqApproachMasada;
+ showTextboxBridge(kBridgeTalkerChekov, 14); // Captain they are fleeing!
+ showTextboxBridge(kBridgeTalkerSpock, 15); // The enemy ship's initial intercept course...
+ _bridgeSequenceToLoad = kSeqArrivedAtBetaMyamid;
break;
- case kSeqApproachMasada:
- // TODO: 3D code to approach and show the Masada
- showTextboxBridge(kBridgeTalkerUhura, 16);
- showTextboxBridge(kBridgeTalkerSpock, 17);
- _bridgeSequenceToLoad = kSeqTalkWithMasadaElasiCereth;
+ case kSeqArrivedAtBetaMyamid:
break;
- case kSeqTalkWithMasadaElasiCereth:
+ case kSeqApproachedTheMasada:
showTextboxBridge(kBridgeTalkerSpock, 20);
// TODO: showText2
showTextboxBridge(kBridgeTalkerUhura, 21);
@@ -369,86 +371,66 @@ void StarTrekEngine::playBridgeSequence(int sequenceId) {
}
}
-// This is slightly different than the original: the original sets a pointer to a function that
-// handles actions for McCoy, Uhura and Chekov per chapter. We handle them separately.
-void StarTrekEngine::bridgeActionSpock() {
- const char *nothingToReportText = "#BRID\\B_155#Nothing to report, Captain.";
- if (_enterpriseState.underAttack)
- return;
+struct CrewTextsForChapter {
+ int targetPlanet;
+ int talker;
+ int underAttackTextId;
+ int notReachedPlanetTextId;
+ int notInOrbitTextId;
+ int inOrbitTextId;
+};
- //showTextboxBridge(kBridgeTalkerSpock, nothingToReportText);
+CrewTextsForChapter crewTexts[] = {
+ { kPlanetPollux, kBridgeTalkerSpock, 10, 20, 21, 22 },
+ { kPlanetPollux, kBridgeTalkerUhura, 9, 16, 19, 19 },
+ { kPlanetBetaMyamid, kBridgeTalkerSpock, 13, 5, 17, 27 },
+ { kPlanetBetaMyamid, kBridgeTalkerUhura, 12, 4, 16, -1 },
+ // TODO: The rest
+ { kPlanetNone, kBridgeTalkerNone, 0, 0, 0, 0 }
+};
- switch (_targetPlanet) {
- case kPlanetPollux: // Chapter 1: Demon world (demon)
- if (_currentPlanet != _targetPlanet) {
- showTextboxBridge(kBridgeTalkerSpock, 20); // I advise referring to the star map and setting a course for the Pollux system, Sir
- } else {
- if (!_enterpriseState.inOrbit)
- showTextboxBridge(kBridgeTalkerSpock, 21); // We are too far from the planet for a sensor probe, Captain
- else
- showTextboxBridge(kBridgeTalkerSpock, 22); // Pollux V has recently emerged from an ice age, Sir...
+void StarTrekEngine::bridgeCrewAction(int crewId) {
+ CrewTextsForChapter *curCrewTexts = crewTexts;
+ int textId = -1;
+
+ while (curCrewTexts->targetPlanet != kPlanetNone) {
+ if (_targetPlanet == curCrewTexts->targetPlanet && curCrewTexts->talker == crewId) {
+ if (_enterpriseState.underAttack) {
+ textId = curCrewTexts->underAttackTextId;
+ } else if (_currentPlanet != _targetPlanet) {
+ textId = curCrewTexts->notReachedPlanetTextId;
+ } else if (!_enterpriseState.inOrbit) {
+ textId = curCrewTexts->notInOrbitTextId;
+ } else {
+ textId = curCrewTexts->inOrbitTextId;
+ }
+ break;
}
- break;
- case kPlanetBetaMyamid: // Chapter 2: Hijacked (tug)
- // TODO
- break;
- case kPlanetArk7: // Chapter 3: Love's Labor Jeopardized (love)
- // TODO
- break;
- case kPlanetHarlequin: // Chapter 4: Another Fine Mess (mudd)
- // TODO
- break;
- case kPlanetDigifal: // Chapter 5A: The Feathered Serpent (feather)
- // TODO
- break;
- case kPlanetHrakkour: // Chapter 5B: The Feathered Serpent (trial)
- // TODO
- break;
- case kPlanetAlphaProxima: // Chapter 6: The Old Devil Moon (sins)
- // TODO
- break;
+
+ curCrewTexts++;
}
-}
-// This is slightly different than the original: the original sets a pointer to a function that
-// handles actions for McCoy, Uhura and Chekov per chapter. We handle them separately.
-void StarTrekEngine::bridgeActionUhura() {
- if (_enterpriseState.underAttack)
+ // Uhura's hailing sequences
+ if (crewId == kBridgeTalkerUhura && _currentPlanet == _targetPlanet && !_hailedTarget) {
+ contactTargetAction();
+ _hailedTarget = true;
return;
+ }
+ if (textId >= 0)
+ showTextboxBridge(crewId, textId);
+}
+
+void StarTrekEngine::contactTargetAction() {
switch (_targetPlanet) {
case kPlanetPollux: // Chapter 1: Demon world (demon)
- if (_currentPlanet != _targetPlanet) {
- showTextboxBridge(kBridgeTalkerUhura, 16); // Orders are to proceed to the Pollux system
- } else {
- if (!_hailedPollux) {
- _sound->playSoundEffectIndex(34);
- showTextboxBridge(kBridgeTalkerUhura, 17);
- showBridgeScreenTalkerWithMessage(18, "Priest", "prst");
- _hailedPollux = true;
- } else {
- showTextboxBridge(kBridgeTalkerUhura, 19); // The High Prelate is waiting for you to beam down, Sir
- }
- }
- break;
- case kPlanetBetaMyamid: // Chapter 2: Hijacked (tug)
- // TODO
- break;
- case kPlanetArk7: // Chapter 3: Love's Labor Jeopardized (love)
- // TODO
- break;
- case kPlanetHarlequin: // Chapter 4: Another Fine Mess (mudd)
- // TODO
- break;
- case kPlanetDigifal: // Chapter 5A: The Feathered Serpent (feather)
- // TODO
- break;
- case kPlanetHrakkour: // Chapter 5B: The Feathered Serpent (trial)
- // TODO
+ _sound->playSoundEffectIndex(34);
+ showTextboxBridge(kBridgeTalkerUhura, 17);
+ showBridgeScreenTalkerWithMessage(18, "Priest", "prst");
break;
- case kPlanetAlphaProxima: // Chapter 6: The Old Devil Moon (sins)
- // TODO
+ case kPlanetBetaMyamid: // Chapter 2: Hijacked (tug)
break;
+ // TODO: The rest
}
}
@@ -688,13 +670,13 @@ void StarTrekEngine::handleBridgeEvents() {
handleBridgeMenu(kBridgeKirkOptions);
break;
case Common::KEYCODE_t: // Ask Mr. Spock for advice
- handleBridgeMenu(kBridgeSpockConsult);
+ handleBridgeMenu(kBridgeSpock);
break;
case Common::KEYCODE_c: // Spock's library computer
handleBridgeMenu(kBridgeSpockComputer);
break;
case Common::KEYCODE_h: // Uhura's communication icon
- handleBridgeMenu(kBridgeUhuraCommunications);
+ handleBridgeMenu(kBridgeUhura);
break;
case Common::KEYCODE_p: // Pause game
_gameIsPaused = true;
@@ -796,8 +778,8 @@ void StarTrekEngine::handleBridgeMenu(int menuEvent) {
case kBridgeKirkOptions: // Kirk, options
showOptionsMenu(65, 60);
break;
- case kBridgeSpockConsult: // Spock, nothing to report
- bridgeActionSpock();
+ case kBridgeSpock: // Spock, consult
+ bridgeCrewAction(kBridgeTalkerSpock);
break;
case kBridgeSpockComputer: // Spock, consult computer
handleBridgeComputer();
@@ -809,8 +791,8 @@ void StarTrekEngine::handleBridgeMenu(int menuEvent) {
// TODO: check for emergency power
showTextboxBridge(kBridgeTalkerScotty, noEmergencyPowerText);
break;
- case kBridgeUhuraCommunications: // Uhura, communications
- bridgeActionUhura();
+ case kBridgeUhura: // Uhura, communications
+ bridgeCrewAction(kBridgeTalkerUhura);
break;
case kBridgeSuluOrbit: // Sulu, orbit
if (_enterpriseState.underAttack) {
diff --git a/engines/startrek/startrek.cpp b/engines/startrek/startrek.cpp
index 1f99c595a4..140df2cca1 100644
--- a/engines/startrek/startrek.cpp
+++ b/engines/startrek/startrek.cpp
@@ -114,7 +114,7 @@ StarTrekEngine::StarTrekEngine(OSystem *syst, const StarTrekGameDescription *gam
_targetPlanet = -1;
_currentPlanet = -1;
_gameIsPaused = false;
- _hailedPollux = false;
+ _hailedTarget = false;
const Common::FSNode gameDataDir(ConfMan.get("path"));
SearchMan.addSubDirectoryMatching(gameDataDir, "patches");
diff --git a/engines/startrek/startrek.h b/engines/startrek/startrek.h
index 524b6fce7d..1459cc282f 100644
--- a/engines/startrek/startrek.h
+++ b/engines/startrek/startrek.h
@@ -274,14 +274,14 @@ private:
void showMissionStartEnterpriseFlyby(Common::String sequence, Common::String name);
void startBattle(Common::String enemyShip);
void wrongDestinationRandomEncounter();
- void bridgeActionSpock();
- void bridgeActionUhura();
+ void bridgeCrewAction(int crewId);
+ void contactTargetAction();
int _targetPlanet;
int _currentPlanet;
int _currentScreenTalker;
bool _gameIsPaused;
- bool _hailedPollux;
+ bool _hailedTarget;
public:
void playMovie(Common::String filename);
@@ -312,7 +312,7 @@ public:
int loadActorAnimWithRoomScaling(int actorIndex, const Common::String &animName, int16 x, int16 y);
Fixed8 getActorScaleAtPosition(int16 y);
void addAction(const Action &action);
- void addAction(char type, byte b1, byte b2, byte b3);
+ void addAction(int8 type, byte b1, byte b2, byte b3);
void handleAwayMissionAction();
void checkTouchedLoadingZone(int16 x, int16 y);
More information about the Scummvm-git-logs
mailing list