option_graphics: add contextual arrows, split into columns (#464)

Resolves #462.
This commit is contained in:
walkawayy 2022-03-07 11:18:39 -05:00 committed by GitHub
parent e7587a0f78
commit f590666142
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 272 additions and 135 deletions

View file

@ -4,7 +4,8 @@
- added ability to turn off detailed end of the level stats (#447)
- added contextual arrows to passport navigation (#420)
- added contextual arrows to sound option navigation (#459)
- added contextual arrows to controls option navigation (#462)
- added contextual arrows to controls option navigation (#461)
- added contextual arrows to graphics option navigation (#462)
- fixed exploded mutant pods sometimes appearing unhatched on reload (#423)
## [2.6.4](https://github.com/rr-/Tomb1Main/compare/2.6.3...2.6.4) - 2022-02-20

View file

@ -257,6 +257,7 @@ Not all options are turned on by default. Refer to `Tomb1Main.json5` for details
- added a vsync option
- added total pickups and kills per level to the stats screen
- added restart level to passport menu on death
- added contextual arrows to menu options
- changed internal game memory limit from 3.5 MB to 16 MB
- changed moveable limit from 256 to 10240
- changed maximum textures from 2048 to 8192

View file

@ -505,13 +505,15 @@
"DETAIL_LEVEL_HIGH": "High",
"DETAIL_LEVEL_MEDIUM": "Medium",
"DETAIL_LEVEL_LOW": "Low",
"DETAIL_PERSPECTIVE_FMT": "Perspective %s",
"DETAIL_BILINEAR_FMT": "Bilinear %s",
"DETAIL_VSYNC_FMT": "VSync %s",
"DETAIL_BRIGHTNESS_FMT": "Brightness %.1f",
"DETAIL_UI_TEXT_SCALE_FMT": "UI text scale %.1f",
"DETAIL_UI_BAR_SCALE_FMT": "UI bar scale %.1f",
"DETAIL_VIDEO_MODE_FMT": "Game Video Mode %s",
"DETAIL_PERSPECTIVE": "Perspective",
"DETAIL_BILINEAR": "Bilinear",
"DETAIL_VSYNC": "VSync",
"DETAIL_BRIGHTNESS": "Brightness",
"DETAIL_UI_TEXT_SCALE": "UI text scale",
"DETAIL_UI_BAR_SCALE": "UI bar scale",
"DETAIL_RESOLUTION": "Resolution",
"DETAIL_FLOAT_FMT": "%.1f",
"DETAIL_RESOLUTION_FMT": "%dx%d",
"SOUND_SET_VOLUMES": "Set Volumes",
"CONTROL_DEFAULT_KEYS": "Default Keys",
"CONTROL_USER_KEYS": "User Keys",

View file

@ -133,13 +133,15 @@
"DETAIL_LEVEL_HIGH": "High",
"DETAIL_LEVEL_MEDIUM": "Medium",
"DETAIL_LEVEL_LOW": "Low",
"DETAIL_PERSPECTIVE_FMT": "Perspective %s",
"DETAIL_BILINEAR_FMT": "Bilinear %s",
"DETAIL_VSYNC_FMT": "VSync %s",
"DETAIL_BRIGHTNESS_FMT": "Brightness %.1f",
"DETAIL_UI_TEXT_SCALE_FMT": "UI text scale %.1f",
"DETAIL_UI_BAR_SCALE_FMT": "UI bar scale %.1f",
"DETAIL_VIDEO_MODE_FMT": "Game Video Mode %s",
"DETAIL_PERSPECTIVE": "Perspective",
"DETAIL_BILINEAR": "Bilinear",
"DETAIL_VSYNC": "VSync",
"DETAIL_BRIGHTNESS": "Brightness",
"DETAIL_UI_TEXT_SCALE": "UI text scale",
"DETAIL_UI_BAR_SCALE": "UI bar scale",
"DETAIL_RESOLUTION": "Resolution",
"DETAIL_FLOAT_FMT": "%.1f",
"DETAIL_RESOLUTION_FMT": "%dx%d",
"SOUND_SET_VOLUMES": "Set Volumes",
"CONTROL_DEFAULT_KEYS": "Default Keys",
"CONTROL_USER_KEYS": "User Keys",

View file

@ -70,13 +70,15 @@ static GAME_STRING_ID GameFlow_StringToGameStringID(const char *str)
{ "DETAIL_LEVEL_HIGH", GS_DETAIL_LEVEL_HIGH },
{ "DETAIL_LEVEL_MEDIUM", GS_DETAIL_LEVEL_MEDIUM },
{ "DETAIL_LEVEL_LOW", GS_DETAIL_LEVEL_LOW },
{ "DETAIL_PERSPECTIVE_FMT", GS_DETAIL_PERSPECTIVE_FMT },
{ "DETAIL_BILINEAR_FMT", GS_DETAIL_BILINEAR_FMT },
{ "DETAIL_VSYNC_FMT", GS_DETAIL_VSYNC_FMT },
{ "DETAIL_BRIGHTNESS_FMT", GS_DETAIL_BRIGHTNESS_FMT },
{ "DETAIL_UI_TEXT_SCALE_FMT", GS_DETAIL_UI_TEXT_SCALE_FMT },
{ "DETAIL_UI_BAR_SCALE_FMT", GS_DETAIL_UI_BAR_SCALE_FMT },
{ "DETAIL_VIDEO_MODE_FMT", GS_DETAIL_VIDEO_MODE_FMT },
{ "DETAIL_PERSPECTIVE_FMT", GS_DETAIL_PERSPECTIVE },
{ "DETAIL_BILINEAR_FMT", GS_DETAIL_BILINEAR },
{ "DETAIL_VSYNC_FMT", GS_DETAIL_VSYNC },
{ "DETAIL_BRIGHTNESS_FMT", GS_DETAIL_BRIGHTNESS },
{ "DETAIL_UI_TEXT_SCALE_FMT", GS_DETAIL_UI_TEXT_SCALE },
{ "DETAIL_UI_BAR_SCALE_FMT", GS_DETAIL_UI_BAR_SCALE },
{ "DETAIL_RESOLUTION", GS_DETAIL_RESOLUTION },
{ "DETAIL_FLOAT_FMT", GS_DETAIL_FLOAT_FMT },
{ "DETAIL_RESOLUTION_FMT", GS_DETAIL_RESOLUTION_FMT },
{ "SOUND_SET_VOLUMES", GS_SOUND_SET_VOLUMES },
{ "CONTROL_DEFAULT_KEYS", GS_CONTROL_DEFAULT_KEYS },
{ "CONTROL_USER_KEYS", GS_CONTROL_USER_KEYS },

View file

@ -12,9 +12,12 @@
#include <stdio.h>
#define TOP_Y -55
#define ROW_HEIGHT 25
#define ROW_WIDTH 280
#define BORDER 4
#define ROW_HEIGHT 17
#define ROW_WIDTH 300
#define OPTION_LENGTH 256
#define LEFT_ARROW_OFFSET 20
#define RIGHT_ARROW_OFFSET 35
typedef enum GRAPHICS_TEXT {
TEXT_PERSPECTIVE = 0,
@ -26,74 +29,74 @@ typedef enum GRAPHICS_TEXT {
TEXT_RESOLUTION = 6,
TEXT_TITLE = 7,
TEXT_TITLE_BORDER = 8,
TEXT_NUMBER_OF = 9,
TEXT_PERSPECTIVE_TOGGLE = 9,
TEXT_BILINEAR_TOGGLE = 10,
TEXT_VSYNC_TOGGLE = 11,
TEXT_BRIGHTNESS_TOGGLE = 12,
TEXT_UI_TEXT_SCALE_TOGGLE = 13,
TEXT_UI_BAR_SCALE_TOGGLE = 14,
TEXT_RESOLUTION_TOGGLE = 15,
TEXT_LEFT_ARROW = 16,
TEXT_RIGHT_ARROW = 17,
TEXT_ROW_SELECT = 18,
TEXT_NUMBER_OF = 19,
TEXT_EMPTY_ENTRY = -1,
TEXT_OPTION_MIN = TEXT_PERSPECTIVE,
TEXT_OPTION_MAX = TEXT_RESOLUTION,
} GRAPHICS_TEXT;
typedef struct TEXT_COLUMN_PLACEMENT {
GRAPHICS_TEXT option;
int col_num;
GAME_STRING_ID text;
} TEXT_COLUMN_PLACEMENT;
static const TEXT_COLUMN_PLACEMENT m_GfxTextPlacement[] = {
// left column
{ TEXT_PERSPECTIVE, 0, GS_DETAIL_PERSPECTIVE },
{ TEXT_BILINEAR, 0, GS_DETAIL_BILINEAR },
{ TEXT_VSYNC, 0, GS_DETAIL_VSYNC },
{ TEXT_BRIGHTNESS, 0, GS_DETAIL_BRIGHTNESS },
{ TEXT_UI_TEXT_SCALE, 0, GS_DETAIL_UI_TEXT_SCALE },
{ TEXT_UI_BAR_SCALE, 0, GS_DETAIL_UI_BAR_SCALE },
{ TEXT_RESOLUTION, 0, GS_DETAIL_RESOLUTION },
// right column
{ TEXT_PERSPECTIVE_TOGGLE, 1, GS_MISC_ON },
{ TEXT_BILINEAR_TOGGLE, 1, GS_MISC_ON },
{ TEXT_VSYNC_TOGGLE, 1, GS_MISC_ON },
{ TEXT_BRIGHTNESS_TOGGLE, 1, GS_DETAIL_FLOAT_FMT },
{ TEXT_UI_TEXT_SCALE_TOGGLE, 1, GS_DETAIL_FLOAT_FMT },
{ TEXT_UI_BAR_SCALE_TOGGLE, 1, GS_DETAIL_FLOAT_FMT },
{ TEXT_RESOLUTION_TOGGLE, 1, GS_DETAIL_RESOLUTION_FMT },
// end
{ TEXT_EMPTY_ENTRY, -1, -1 },
};
static bool m_IsTextInit = false;
static TEXTSTRING *m_Text[TEXT_NUMBER_OF] = { 0 };
static bool m_HideArrowLeft = false;
static bool m_HideArrowRight = false;
static void Option_GraphicsInitText();
static void Option_GraphicsShutdownText();
static void Option_GraphicsUpdateArrows();
static void Option_GraphicsChangeTextOption(int32_t option_num);
static int16_t Option_GraphicsPlaceColumns(bool create);
static void Option_GraphicsInitText()
{
char buf[OPTION_LENGTH];
int32_t y = TOP_Y;
m_Text[TEXT_TITLE_BORDER] = Text_Create(0, y - 2, " ");
m_Text[TEXT_TITLE_BORDER] = Text_Create(0, TOP_Y, " ");
Text_CentreH(m_Text[TEXT_TITLE_BORDER], 1);
Text_CentreV(m_Text[TEXT_TITLE_BORDER], 1);
m_Text[TEXT_TITLE] =
Text_Create(0, y, g_GameFlow.strings[GS_DETAIL_SELECT_DETAIL]);
y += ROW_HEIGHT;
sprintf(
buf, g_GameFlow.strings[GS_DETAIL_PERSPECTIVE_FMT],
g_GameFlow.strings
[g_Config.rendering.enable_perspective_filter ? GS_MISC_ON
: GS_MISC_OFF]);
m_Text[TEXT_PERSPECTIVE] = Text_Create(0, y, buf);
y += ROW_HEIGHT;
sprintf(
buf, g_GameFlow.strings[GS_DETAIL_BILINEAR_FMT],
g_GameFlow.strings
[g_Config.rendering.enable_bilinear_filter ? GS_MISC_ON
: GS_MISC_OFF]);
m_Text[TEXT_BILINEAR] = Text_Create(0, y, buf);
y += ROW_HEIGHT;
sprintf(
buf, g_GameFlow.strings[GS_DETAIL_VSYNC_FMT],
g_GameFlow.strings
[g_Config.rendering.enable_vsync ? GS_MISC_ON : GS_MISC_OFF]);
m_Text[TEXT_VSYNC] = Text_Create(0, y, buf);
y += ROW_HEIGHT;
sprintf(
buf, g_GameFlow.strings[GS_DETAIL_BRIGHTNESS_FMT], g_Config.brightness);
m_Text[TEXT_BRIGHTNESS] = Text_Create(0, y, buf);
y += ROW_HEIGHT;
sprintf(
buf, g_GameFlow.strings[GS_DETAIL_UI_TEXT_SCALE_FMT],
g_Config.ui.text_scale);
m_Text[TEXT_UI_TEXT_SCALE] = Text_Create(0, y, buf);
y += ROW_HEIGHT;
sprintf(
buf, g_GameFlow.strings[GS_DETAIL_UI_BAR_SCALE_FMT],
g_Config.ui.bar_scale);
m_Text[TEXT_UI_BAR_SCALE] = Text_Create(0, y, buf);
y += ROW_HEIGHT;
char tmp[10];
sprintf(
tmp, "%dx%d", Screen_GetPendingResWidth(),
Screen_GetPendingResHeight());
sprintf(buf, g_GameFlow.strings[GS_DETAIL_VIDEO_MODE_FMT], tmp);
m_Text[TEXT_RESOLUTION] = Text_Create(0, y, buf);
y += ROW_HEIGHT;
Text_Create(0, TOP_Y, g_GameFlow.strings[GS_DETAIL_SELECT_DETAIL]);
Text_CentreH(m_Text[TEXT_TITLE], 1);
Text_CentreV(m_Text[TEXT_TITLE], 1);
Text_AddBackground(m_Text[TEXT_TITLE], ROW_WIDTH, 0, 0, 0);
Text_AddOutline(m_Text[TEXT_TITLE], 1);
if (g_OptionSelected < TEXT_OPTION_MIN) {
g_OptionSelected = TEXT_OPTION_MIN;
@ -102,80 +105,199 @@ static void Option_GraphicsInitText()
g_OptionSelected = TEXT_OPTION_MAX;
}
Text_AddBackground(m_Text[TEXT_TITLE_BORDER], ROW_WIDTH, y - TOP_Y, 0, 0);
int16_t max_y = Option_GraphicsPlaceColumns(true);
sprintf(buf, g_GameFlow.strings[GS_DETAIL_FLOAT_FMT], g_Config.brightness);
Text_ChangeText(m_Text[TEXT_BRIGHTNESS_TOGGLE], buf);
sprintf(
buf, g_GameFlow.strings[GS_DETAIL_FLOAT_FMT], g_Config.ui.text_scale);
Text_ChangeText(m_Text[TEXT_UI_TEXT_SCALE_TOGGLE], buf);
sprintf(
buf, g_GameFlow.strings[GS_DETAIL_FLOAT_FMT], g_Config.ui.bar_scale);
Text_ChangeText(m_Text[TEXT_UI_BAR_SCALE_TOGGLE], buf);
sprintf(
buf, g_GameFlow.strings[GS_DETAIL_RESOLUTION_FMT],
Screen_GetPendingResWidth(), Screen_GetPendingResHeight());
Text_ChangeText(m_Text[TEXT_RESOLUTION_TOGGLE], buf);
int16_t width = ROW_WIDTH;
int16_t height = max_y + BORDER * 2 - TOP_Y;
Text_AddBackground(m_Text[TEXT_TITLE_BORDER], width, height, 0, 0);
Text_AddOutline(m_Text[TEXT_TITLE_BORDER], 1);
Text_AddBackground(m_Text[TEXT_TITLE], ROW_WIDTH - 4, 0, 0, 0);
Text_AddOutline(m_Text[TEXT_TITLE], 1);
m_Text[TEXT_LEFT_ARROW] = Text_Create(0, 0, "@");
Text_CentreV(m_Text[TEXT_LEFT_ARROW], 1);
Text_SetPos(
m_Text[TEXT_LEFT_ARROW], m_Text[TEXT_PERSPECTIVE_TOGGLE]->pos.x - 20,
m_Text[TEXT_PERSPECTIVE_TOGGLE]->pos.y);
m_HideArrowLeft =
g_Config.rendering.enable_perspective_filter ? false : true;
Text_AddBackground(m_Text[g_OptionSelected], ROW_WIDTH - 12, 0, 0, 0);
Text_AddOutline(m_Text[g_OptionSelected], 1);
m_Text[TEXT_RIGHT_ARROW] = Text_Create(0, 0, "\t");
Text_CentreV(m_Text[TEXT_RIGHT_ARROW], 1);
Text_SetPos(
m_Text[TEXT_RIGHT_ARROW], m_Text[TEXT_PERSPECTIVE_TOGGLE]->pos.x + 40,
m_Text[TEXT_PERSPECTIVE_TOGGLE]->pos.y);
m_HideArrowRight =
g_Config.rendering.enable_perspective_filter ? true : false;
const int16_t centre = Screen_GetResWidthDownscaled() / 2;
m_Text[TEXT_ROW_SELECT] =
Text_Create(centre - 3, TOP_Y + ROW_HEIGHT + BORDER * 2, " ");
Text_CentreV(m_Text[TEXT_ROW_SELECT], 1);
Text_AddBackground(m_Text[TEXT_ROW_SELECT], ROW_WIDTH - 7, 0, 0, 0);
Text_AddOutline(m_Text[TEXT_ROW_SELECT], 1);
}
static void Option_GraphicsShutdownText()
{
for (int i = 0; i < TEXT_NUMBER_OF; i++) {
Text_CentreH(m_Text[i], 1);
Text_CentreV(m_Text[i], 1);
Text_Remove(m_Text[i]);
m_Text[i] = NULL;
}
}
static void Option_GraphicsUpdateArrows()
{
int16_t resolution_offset = 0;
switch (g_OptionSelected) {
case TEXT_PERSPECTIVE:
m_HideArrowLeft = !g_Config.rendering.enable_perspective_filter;
m_HideArrowRight = g_Config.rendering.enable_perspective_filter;
break;
case TEXT_BILINEAR:
m_HideArrowLeft = !g_Config.rendering.enable_bilinear_filter;
m_HideArrowRight = g_Config.rendering.enable_bilinear_filter;
break;
case TEXT_VSYNC:
m_HideArrowLeft = !g_Config.rendering.enable_vsync;
m_HideArrowRight = g_Config.rendering.enable_vsync;
break;
case TEXT_BRIGHTNESS:
m_HideArrowLeft = g_Config.brightness <= MIN_BRIGHTNESS;
m_HideArrowRight = g_Config.brightness >= MAX_BRIGHTNESS;
break;
case TEXT_UI_TEXT_SCALE:
m_HideArrowLeft = g_Config.ui.text_scale <= MIN_UI_SCALE;
m_HideArrowRight = g_Config.ui.text_scale >= MAX_UI_SCALE;
break;
case TEXT_UI_BAR_SCALE:
m_HideArrowLeft = g_Config.ui.bar_scale <= MIN_UI_SCALE;
m_HideArrowRight = g_Config.ui.bar_scale >= MAX_UI_SCALE;
break;
case TEXT_RESOLUTION:
resolution_offset = 70;
m_HideArrowLeft = Screen_GetPendingResIdx() == 0;
m_HideArrowRight = Screen_GetPendingResIdx() == (RESOLUTIONS_SIZE - 1);
break;
}
Text_SetPos(
m_Text[TEXT_LEFT_ARROW],
m_Text[g_OptionSelected + TEXT_PERSPECTIVE_TOGGLE]->pos.x
- LEFT_ARROW_OFFSET,
m_Text[g_OptionSelected + TEXT_PERSPECTIVE_TOGGLE]->pos.y);
Text_SetPos(
m_Text[TEXT_RIGHT_ARROW],
m_Text[g_OptionSelected + TEXT_PERSPECTIVE_TOGGLE]->pos.x
+ RIGHT_ARROW_OFFSET + resolution_offset,
m_Text[g_OptionSelected + TEXT_PERSPECTIVE_TOGGLE]->pos.y);
Text_Hide(m_Text[TEXT_LEFT_ARROW], m_HideArrowLeft);
Text_Hide(m_Text[TEXT_RIGHT_ARROW], m_HideArrowRight);
}
static int16_t Option_GraphicsPlaceColumns(bool create)
{
const int16_t centre = Screen_GetResWidthDownscaled() / 2;
int16_t max_y = 0;
int16_t xs[2] = { centre - 142, centre + 30 };
int16_t ys[2] = { TOP_Y + ROW_HEIGHT + BORDER * 2,
TOP_Y + ROW_HEIGHT + BORDER * 2 };
for (const TEXT_COLUMN_PLACEMENT *col = m_GfxTextPlacement;
col->col_num >= 0 && col->col_num <= 1; col++) {
int16_t x = xs[col->col_num];
int16_t y = ys[col->col_num];
if (col->option != TEXT_EMPTY_ENTRY) {
if (create) {
m_Text[col->option] =
Text_Create(x, y, g_GameFlow.strings[col->text]);
} else {
Text_SetPos(m_Text[col->option], x, y);
}
Text_CentreV(m_Text[col->option], 1);
}
ys[col->col_num] += ROW_HEIGHT;
max_y = MAX(max_y, ys[col->col_num]);
}
return max_y;
}
static void Option_GraphicsChangeTextOption(int32_t option_num)
{
char buf[OPTION_LENGTH];
char tmp[10];
switch (option_num) {
case TEXT_PERSPECTIVE:
sprintf(
buf, g_GameFlow.strings[GS_DETAIL_PERSPECTIVE_FMT],
Text_ChangeText(
m_Text[TEXT_PERSPECTIVE_TOGGLE],
g_GameFlow.strings
[g_Config.rendering.enable_perspective_filter ? GS_MISC_ON
: GS_MISC_OFF]);
Text_ChangeText(m_Text[TEXT_PERSPECTIVE], buf);
break;
case TEXT_BILINEAR:
sprintf(
buf, g_GameFlow.strings[GS_DETAIL_BILINEAR_FMT],
Text_ChangeText(
m_Text[TEXT_BILINEAR_TOGGLE],
g_GameFlow.strings
[g_Config.rendering.enable_bilinear_filter ? GS_MISC_ON
: GS_MISC_OFF]);
Text_ChangeText(m_Text[TEXT_BILINEAR], buf);
break;
case TEXT_VSYNC:
sprintf(
buf, g_GameFlow.strings[GS_DETAIL_VSYNC_FMT],
Text_ChangeText(
m_Text[TEXT_VSYNC_TOGGLE],
g_GameFlow.strings
[g_Config.rendering.enable_vsync ? GS_MISC_ON : GS_MISC_OFF]);
Text_ChangeText(m_Text[TEXT_VSYNC], buf);
break;
case TEXT_BRIGHTNESS:
sprintf(
buf, g_GameFlow.strings[GS_DETAIL_BRIGHTNESS_FMT],
g_Config.brightness);
Text_ChangeText(m_Text[TEXT_BRIGHTNESS], buf);
buf, g_GameFlow.strings[GS_DETAIL_FLOAT_FMT], g_Config.brightness);
Text_ChangeText(m_Text[TEXT_BRIGHTNESS_TOGGLE], buf);
break;
case TEXT_UI_TEXT_SCALE:
sprintf(
buf, g_GameFlow.strings[GS_DETAIL_UI_TEXT_SCALE_FMT],
buf, g_GameFlow.strings[GS_DETAIL_FLOAT_FMT],
g_Config.ui.text_scale);
Text_ChangeText(m_Text[TEXT_UI_TEXT_SCALE], buf);
Text_ChangeText(m_Text[TEXT_UI_TEXT_SCALE_TOGGLE], buf);
Option_GraphicsPlaceColumns(false);
Text_SetPos(
m_Text[TEXT_ROW_SELECT], Screen_GetResWidthDownscaled() / 2 - 3,
TOP_Y + ROW_HEIGHT + BORDER * 2);
break;
case TEXT_UI_BAR_SCALE:
sprintf(
buf, g_GameFlow.strings[GS_DETAIL_UI_BAR_SCALE_FMT],
buf, g_GameFlow.strings[GS_DETAIL_FLOAT_FMT],
g_Config.ui.bar_scale);
Text_ChangeText(m_Text[TEXT_UI_BAR_SCALE], buf);
Text_ChangeText(m_Text[TEXT_UI_BAR_SCALE_TOGGLE], buf);
break;
case TEXT_RESOLUTION:
sprintf(
tmp, "%dx%d", Screen_GetPendingResWidth(),
Screen_GetPendingResHeight());
sprintf(buf, g_GameFlow.strings[GS_DETAIL_VIDEO_MODE_FMT], tmp);
Text_ChangeText(m_Text[TEXT_RESOLUTION], buf);
buf, g_GameFlow.strings[GS_DETAIL_RESOLUTION_FMT],
Screen_GetPendingResWidth(), Screen_GetPendingResHeight());
Text_ChangeText(m_Text[TEXT_RESOLUTION_TOGGLE], buf);
break;
}
}
@ -188,19 +310,19 @@ void Option_Graphics(INVENTORY_ITEM *inv_item)
}
if (g_InputDB.forward && g_OptionSelected > TEXT_OPTION_MIN) {
Text_RemoveOutline(m_Text[g_OptionSelected]);
Text_RemoveBackground(m_Text[g_OptionSelected]);
g_OptionSelected--;
Text_AddOutline(m_Text[g_OptionSelected], 1);
Text_AddBackground(m_Text[g_OptionSelected], ROW_WIDTH - 12, 0, 0, 0);
Text_AddBackground(
m_Text[TEXT_ROW_SELECT], ROW_WIDTH - 7, 0, 0,
ROW_HEIGHT * g_OptionSelected);
Text_AddOutline(m_Text[TEXT_ROW_SELECT], 1);
}
if (g_InputDB.back && g_OptionSelected < TEXT_OPTION_MAX) {
Text_RemoveOutline(m_Text[g_OptionSelected]);
Text_RemoveBackground(m_Text[g_OptionSelected]);
g_OptionSelected++;
Text_AddOutline(m_Text[g_OptionSelected], 1);
Text_AddBackground(m_Text[g_OptionSelected], ROW_WIDTH - 12, 0, 0, 0);
Text_AddBackground(
m_Text[TEXT_ROW_SELECT], ROW_WIDTH - 7, 0, 0,
ROW_HEIGHT * g_OptionSelected);
Text_AddOutline(m_Text[TEXT_ROW_SELECT], 1);
}
int32_t reset = -1;
@ -315,15 +437,18 @@ void Option_Graphics(INVENTORY_ITEM *inv_item)
reset = TEXT_NUMBER_OF;
}
if (reset == TEXT_NUMBER_OF) {
for (int i = 0; i < TEXT_NUMBER_OF; i++) {
Text_Remove(m_Text[i]);
m_Text[i] = NULL;
}
m_IsTextInit = false;
Settings_Write();
} else if (reset > -1) {
if (reset > -1) {
Option_GraphicsChangeTextOption(reset);
Settings_Write();
}
Option_GraphicsUpdateArrows();
if (reset == TEXT_NUMBER_OF) {
Option_GraphicsShutdownText();
m_IsTextInit = false;
m_HideArrowLeft = false;
m_HideArrowRight = false;
Settings_Write();
}
}

View file

@ -1041,13 +1041,15 @@ typedef enum GAME_STRING_ID {
GS_DETAIL_LEVEL_HIGH,
GS_DETAIL_LEVEL_MEDIUM,
GS_DETAIL_LEVEL_LOW,
GS_DETAIL_PERSPECTIVE_FMT,
GS_DETAIL_BILINEAR_FMT,
GS_DETAIL_VSYNC_FMT,
GS_DETAIL_BRIGHTNESS_FMT,
GS_DETAIL_UI_TEXT_SCALE_FMT,
GS_DETAIL_UI_BAR_SCALE_FMT,
GS_DETAIL_VIDEO_MODE_FMT,
GS_DETAIL_PERSPECTIVE,
GS_DETAIL_BILINEAR,
GS_DETAIL_VSYNC,
GS_DETAIL_BRIGHTNESS,
GS_DETAIL_UI_TEXT_SCALE,
GS_DETAIL_UI_BAR_SCALE,
GS_DETAIL_RESOLUTION,
GS_DETAIL_FLOAT_FMT,
GS_DETAIL_RESOLUTION_FMT,
GS_SOUND_SET_VOLUMES,

View file

@ -32,13 +32,15 @@ GAMEFLOW_DEFAULT_STRING g_GameFlowDefaultStrings[] = {
{ GS_DETAIL_LEVEL_HIGH, "High" },
{ GS_DETAIL_LEVEL_MEDIUM, "Medium" },
{ GS_DETAIL_LEVEL_LOW, "Low" },
{ GS_DETAIL_PERSPECTIVE_FMT, "Perspective %s" },
{ GS_DETAIL_BILINEAR_FMT, "Bilinear %s" },
{ GS_DETAIL_VSYNC_FMT, "VSync %s" },
{ GS_DETAIL_BRIGHTNESS_FMT, "Brightness %.1f" },
{ GS_DETAIL_UI_TEXT_SCALE_FMT, "UI text scale %.1f" },
{ GS_DETAIL_UI_BAR_SCALE_FMT, "UI bar scale %.1f" },
{ GS_DETAIL_VIDEO_MODE_FMT, "Game Video Mode %s" },
{ GS_DETAIL_PERSPECTIVE, "Perspective" },
{ GS_DETAIL_BILINEAR, "Bilinear" },
{ GS_DETAIL_VSYNC, "VSync" },
{ GS_DETAIL_BRIGHTNESS, "Brightness" },
{ GS_DETAIL_UI_TEXT_SCALE, "UI text scale" },
{ GS_DETAIL_UI_BAR_SCALE, "UI bar scale" },
{ GS_DETAIL_RESOLUTION, "Resolution" },
{ GS_DETAIL_FLOAT_FMT, "%.1f" },
{ GS_DETAIL_RESOLUTION_FMT, "%dx%d" },
{ GS_SOUND_SET_VOLUMES, "Set Volumes" },
{ GS_CONTROL_DEFAULT_KEYS, "Default Keys" },
{ GS_CONTROL_USER_KEYS, "User Keys" },