BLADERUNNER: User choice mode should not autoselect last option

This commit is contained in:
Thanasis Antoniou 2019-04-30 15:16:17 +03:00
parent 31c79b6064
commit fd9cfd9604
5 changed files with 30 additions and 6 deletions

View File

@ -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) {

View File

@ -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();

View File

@ -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);
}

View File

@ -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();

View File

@ -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;
}