diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/bladerunner/dialogue_menu.cpp | 17 | ||||
-rw-r--r-- | engines/bladerunner/script/ai/sebastian.cpp | 5 | ||||
-rw-r--r-- | engines/bladerunner/script/scene/ct04.cpp | 8 | ||||
-rw-r--r-- | engines/bladerunner/script/scene/ps09.cpp | 4 | ||||
-rw-r--r-- | engines/bladerunner/script/script.cpp | 2 |
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; } |