aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/bladerunner/dialogue_menu.cpp17
-rw-r--r--engines/bladerunner/script/ai/sebastian.cpp5
-rw-r--r--engines/bladerunner/script/scene/ct04.cpp8
-rw-r--r--engines/bladerunner/script/scene/ps09.cpp4
-rw-r--r--engines/bladerunner/script/script.cpp2
5 files changed, 30 insertions, 6 deletions
diff --git a/engines/bladerunner/dialogue_menu.cpp b/engines/bladerunner/dialogue_menu.cpp
index fb777d958d..94d24dc38b 100644
--- a/engines/bladerunner/dialogue_menu.cpp
+++ b/engines/bladerunner/dialogue_menu.cpp
@@ -135,7 +135,7 @@ bool DialogueMenu::addToList(int answer, bool done, int priorityPolite, int prio
_items[index].isDone = done;
_items[index].priorityPolite = priorityPolite;
_items[index].priorityNormal = priorityNormal;
- _items[index].prioritySurly = prioritySurly;
+ _items[index].prioritySurly = prioritySurly;
// CHECK(madmoose): BLADE.EXE calls this needlessly
// calculatePosition();
@@ -193,6 +193,7 @@ int DialogueMenu::queryInput() {
_selectedItemIndex = 0;
answer = _items[_selectedItemIndex].answerValue;
} else if (_listSize == 2) {
+#if BLADERUNNER_ORIGINAL_BUGS
if (_items[0].isDone) {
_selectedItemIndex = 1;
answer = _items[_selectedItemIndex].answerValue;
@@ -200,6 +201,20 @@ int DialogueMenu::queryInput() {
_selectedItemIndex = 0;
answer = _items[_selectedItemIndex].answerValue;
}
+#else
+ // In User Choice mode, avoid auto-select of last option
+ // In this mode, player should still have agency to skip the last (non- "DONE")
+ // question instead of automatically asking it because the other remaining option is "DONE"
+ if (_vm->_settings->getPlayerAgenda() != kPlayerAgendaUserChoice) {
+ if (_items[0].isDone) {
+ _selectedItemIndex = 1;
+ answer = _items[_selectedItemIndex].answerValue;
+ } else if (_items[1].isDone) {
+ _selectedItemIndex = 0;
+ answer = _items[_selectedItemIndex].answerValue;
+ }
+ }
+#endif // BLADERUNNER_ORIGINAL_BUGS
}
if (answer == -1) {
diff --git a/engines/bladerunner/script/ai/sebastian.cpp b/engines/bladerunner/script/ai/sebastian.cpp
index 4f2cc0ab80..d5032ebec4 100644
--- a/engines/bladerunner/script/ai/sebastian.cpp
+++ b/engines/bladerunner/script/ai/sebastian.cpp
@@ -395,6 +395,11 @@ void AIScriptSebastian::dialogue() {
DM_Add_To_List_Never_Repeat_Once_Selected(990, 7, 3, -1); // NEXUS-6
if (Dialogue_Menu_Query_List_Size()) {
+ // This condition clause for non-empty dialogue menu options before adding the DONE option
+ // only occurs in Sebastian's AI script.
+ // Probably because, selecting "DONE" here, McCoy has nothing to say
+ // so there's no point to add it as a "auto-selected" last option
+ // if no other options exist in the list
Dialogue_Menu_Add_DONE_To_List(1000); // DONE
Dialogue_Menu_Appear(320, 240);
int answer = Dialogue_Menu_Query_Input();
diff --git a/engines/bladerunner/script/scene/ct04.cpp b/engines/bladerunner/script/scene/ct04.cpp
index 94c585da0b..1028fb72ce 100644
--- a/engines/bladerunner/script/scene/ct04.cpp
+++ b/engines/bladerunner/script/scene/ct04.cpp
@@ -157,8 +157,8 @@ void SceneScriptCT04::dialogueWithHomeless() {
switch (answer) {
case 410: // YES
- Actor_Says(kActorTransient, 10, 14);
- Actor_Says(kActorTransient, 20, 14);
+ Actor_Says(kActorTransient, 10, 14); // Thanks. The big man. He kind of limping.
+ Actor_Says(kActorTransient, 20, 14); // That way.
Actor_Modify_Friendliness_To_Other(kActorTransient, kActorMcCoy, 5);
if (Query_Difficulty_Level() != kGameDifficultyEasy) {
Global_Variable_Decrement(kVariableChinyen, 10);
@@ -167,7 +167,7 @@ void SceneScriptCT04::dialogueWithHomeless() {
case 420: // NO
Actor_Says(kActorMcCoy, 430, 3);
- Actor_Says(kActorTransient, 30, 14);
+ Actor_Says(kActorTransient, 30, 14); // Hey, that'd work.
Actor_Modify_Friendliness_To_Other(kActorTransient, kActorMcCoy, -5);
break;
}
@@ -192,7 +192,7 @@ bool SceneScriptCT04::ClickedOnActor(int actorId) {
} else {
Music_Stop(3);
Actor_Says(kActorMcCoy, 425, kAnimationModeTalk);
- Actor_Says(kActorTransient, 0, 13);
+ Actor_Says(kActorTransient, 0, 13); // Hey, maybe spare some chinyen?
dialogueWithHomeless();
Actor_Set_Goal_Number(kActorTransient, kGoalTransientCT04Leave);
}
diff --git a/engines/bladerunner/script/scene/ps09.cpp b/engines/bladerunner/script/scene/ps09.cpp
index a0a1c25713..1da9201268 100644
--- a/engines/bladerunner/script/scene/ps09.cpp
+++ b/engines/bladerunner/script/scene/ps09.cpp
@@ -308,7 +308,11 @@ void SceneScriptPS09::dialogueWithGrigorian() {
) {
DM_Add_To_List_Never_Repeat_Once_Selected(190, 5, 6, -1); // NOTE
}
+#if BLADERUNNER_ORIGINAL_BUGS
Dialogue_Menu_Add_To_List(210); // DONE // A bug? why not Dialogue_Menu_Add_DONE_To_List?
+#else
+ Dialogue_Menu_Add_DONE_To_List(210); // DONE
+#endif // BLADERUNNER_ORIGINAL_BUGS
Dialogue_Menu_Appear(320, 240);
int answer = Dialogue_Menu_Query_Input();
diff --git a/engines/bladerunner/script/script.cpp b/engines/bladerunner/script/script.cpp
index f67f480361..1b52d659ca 100644
--- a/engines/bladerunner/script/script.cpp
+++ b/engines/bladerunner/script/script.cpp
@@ -1180,7 +1180,7 @@ bool ScriptBase::Dialogue_Menu_Add_To_List(int answer) {
bool ScriptBase::Dialogue_Menu_Add_DONE_To_List(int answer) {
debugC(kDebugScript, "Dialogue_Menu_Add_DONE_To_List(%d)", answer);
- _vm->_dialogueMenu->addToList(answer, 1, 0, 0, 0);
+ _vm->_dialogueMenu->addToList(answer, true, 0, 0, 0);
return false;
}