mirror of
https://github.com/LostArtefacts/TRX.git
synced 2025-04-28 20:58:07 +03:00
option_graphics: add contextual arrows, split into columns (#464)
Resolves #462.
This commit is contained in:
parent
e7587a0f78
commit
f590666142
8 changed files with 272 additions and 135 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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 },
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
||||
|
|
16
src/init.c
16
src/init.c
|
@ -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" },
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue