Add dialog options numbering

This commit is contained in:
Alexander Batalov 2022-12-08 10:58:54 +03:00
parent 9ade107e95
commit 897ff2bbd2
2 changed files with 37 additions and 6 deletions

View File

@ -622,6 +622,7 @@ static void gameDialogRedButtonsInit();
static void gameDialogRedButtonsExit(); static void gameDialogRedButtonsExit();
static bool gGameDialogFix; static bool gGameDialogFix;
static bool gNumberOptions;
// gdialog_init // gdialog_init
// 0x444D1C // 0x444D1C
@ -631,6 +632,10 @@ int gameDialogInit()
gGameDialogFix = true; gGameDialogFix = true;
configGetBool(&gSfallConfig, SFALL_CONFIG_MISC_KEY, SFALL_CONFIG_GAME_DIALOG_FIX_KEY, &gGameDialogFix); configGetBool(&gSfallConfig, SFALL_CONFIG_MISC_KEY, SFALL_CONFIG_GAME_DIALOG_FIX_KEY, &gGameDialogFix);
// SFALL: Use numbers for replies (instead of default knobs).
gNumberOptions = false;
configGetBool(&gSfallConfig, SFALL_CONFIG_MISC_KEY, SFALL_CONFIG_NUMBERS_IS_DIALOG_KEY, &gNumberOptions);
return 0; return 0;
} }
@ -1274,7 +1279,13 @@ int gameDialogAddTextOption(int messageListId, const char* text, int reaction)
optionEntry->messageId = -4; optionEntry->messageId = -4;
optionEntry->reaction = reaction; optionEntry->reaction = reaction;
optionEntry->btn = -1; optionEntry->btn = -1;
sprintf(optionEntry->text, "%c %s", '\x95', text);
// SFALL
if (gNumberOptions) {
snprintf(optionEntry->text, sizeof(optionEntry->text), "%d. %s", gGameDialogOptionEntriesLength + 1, text);
} else {
snprintf(optionEntry->text, sizeof(optionEntry->text), "%c %s", '\x95', text);
}
gGameDialogOptionEntriesLength++; gGameDialogOptionEntriesLength++;
@ -2270,15 +2281,24 @@ void _gdProcessUpdate()
exit(1); exit(1);
} }
sprintf(dialogOptionEntry->text, "%c ", '\x95'); // SFALL
strncat(dialogOptionEntry->text, text, 897); if (gNumberOptions) {
snprintf(dialogOptionEntry->text, sizeof(dialogOptionEntry->text), "%d. %s", index + 1, text);
} else {
snprintf(dialogOptionEntry->text, sizeof(dialogOptionEntry->text), "%c %s", '\x95', text);
}
} else if (dialogOptionEntry->messageListId == -1) { } else if (dialogOptionEntry->messageListId == -1) {
if (index == 0) { if (index == 0) {
// Go on // Go on
messageListItem.num = 655; messageListItem.num = 655;
if (critterGetStat(gDude, STAT_INTELLIGENCE) < 4) { if (critterGetStat(gDude, STAT_INTELLIGENCE) < 4) {
if (messageListGetItem(&gProtoMessageList, &messageListItem)) { if (messageListGetItem(&gProtoMessageList, &messageListItem)) {
strcpy(dialogOptionEntry->text, messageListItem.text); // SFALL
if (gNumberOptions) {
snprintf(dialogOptionEntry->text, sizeof(dialogOptionEntry->text), "%d. %s", index + 1, messageListItem.text);
} else {
snprintf(dialogOptionEntry->text, sizeof(dialogOptionEntry->text), "%s", messageListItem.text);
}
} else { } else {
debugPrint("\nError...can't find message!"); debugPrint("\nError...can't find message!");
return; return;
@ -2286,13 +2306,23 @@ void _gdProcessUpdate()
} }
} else { } else {
// TODO: Why only space? // TODO: Why only space?
strcpy(dialogOptionEntry->text, " "); // SFALL
if (gNumberOptions) {
snprintf(dialogOptionEntry->text, sizeof(dialogOptionEntry->text), "%d. %s", index + 1, " ");
} else {
strcpy(dialogOptionEntry->text, " ");
}
} }
} else if (dialogOptionEntry->messageListId == -2) { } else if (dialogOptionEntry->messageListId == -2) {
// [Done] // [Done]
messageListItem.num = 650; messageListItem.num = 650;
if (messageListGetItem(&gProtoMessageList, &messageListItem)) { if (messageListGetItem(&gProtoMessageList, &messageListItem)) {
sprintf(dialogOptionEntry->text, "%c %s", '\x95', messageListItem.text); // SFALL
if (gNumberOptions) {
snprintf(dialogOptionEntry->text, sizeof(dialogOptionEntry->text), "%d. %s", index + 1, messageListItem.text);
} else {
snprintf(dialogOptionEntry->text, sizeof(dialogOptionEntry->text), "%c %s", '\x95', messageListItem.text);
}
} else { } else {
debugPrint("\nError...can't find message!"); debugPrint("\nError...can't find message!");
return; return;

View File

@ -60,6 +60,7 @@ namespace fallout {
#define SFALL_CONFIG_GAME_DIALOG_GENDER_WORDS_KEY "DialogGenderWords" #define SFALL_CONFIG_GAME_DIALOG_GENDER_WORDS_KEY "DialogGenderWords"
#define SFALL_CONFIG_TOWN_MAP_HOTKEYS_FIX_KEY "TownMapHotkeysFix" #define SFALL_CONFIG_TOWN_MAP_HOTKEYS_FIX_KEY "TownMapHotkeysFix"
#define SFALL_CONFIG_EXTRA_MESSAGE_LISTS_KEY "ExtraGameMsgFileList" #define SFALL_CONFIG_EXTRA_MESSAGE_LISTS_KEY "ExtraGameMsgFileList"
#define SFALL_CONFIG_NUMBERS_IS_DIALOG_KEY "NumbersInDialogue"
#define SFALL_CONFIG_BURST_MOD_DEFAULT_CENTER_MULTIPLIER 1 #define SFALL_CONFIG_BURST_MOD_DEFAULT_CENTER_MULTIPLIER 1
#define SFALL_CONFIG_BURST_MOD_DEFAULT_CENTER_DIVISOR 3 #define SFALL_CONFIG_BURST_MOD_DEFAULT_CENTER_DIVISOR 3