1
0
Fork 0
mirror of https://github.com/TerryCavanagh/VVVVVV.git synced 2024-11-16 16:09:42 +01:00

Make main game content use interface font instead of 8x8 font

If a custom level doesn't specify a font, it should be the 8x8 font.
But the main game can't specify a font, it's just the interface font
because that's for the language that the game is in.
This commit is contained in:
Dav999-v 2023-01-21 03:27:55 +01:00 committed by Misa Elizabeth Kai
parent 25feb9dbb5
commit b030ce568f
4 changed files with 51 additions and 24 deletions

View file

@ -70,8 +70,9 @@ static FontContainer fonts_custom = {};
static uint8_t font_idx_8x8 = 0; static uint8_t font_idx_8x8 = 0;
static bool font_idx_custom_is_custom = false; static bool font_level_is_interface = false;
static uint8_t font_idx_custom = 0; static bool font_idx_level_is_custom = false;
static uint8_t font_idx_level = 0;
static void codepoint_split( static void codepoint_split(
const uint32_t codepoint, const uint32_t codepoint,
@ -404,31 +405,40 @@ uint8_t get_font_idx_8x8(void)
return font_idx_8x8; return font_idx_8x8;
} }
void set_custom_font(const char* name) void set_level_font(const char* name)
{ {
/* Apply the choice for a certain level-specific font. */ /* Apply the choice for a certain level-specific font.
* This function is for custom levels. */
font_level_is_interface = false;
if (find_font_by_name(&fonts_custom, name, &font_idx_custom)) if (find_font_by_name(&fonts_custom, name, &font_idx_level))
{ {
font_idx_custom_is_custom = true; font_idx_level_is_custom = true;
} }
else else
{ {
font_idx_custom_is_custom = false; font_idx_level_is_custom = false;
if (!find_font_by_name(&fonts_main, name, &font_idx_custom)) if (!find_font_by_name(&fonts_main, name, &font_idx_level))
{ {
if (SDL_strcmp(name, "font") != 0) if (SDL_strcmp(name, "font") != 0)
{ {
set_custom_font("font"); set_level_font("font");
} }
else else
{ {
font_idx_custom = font_idx_8x8; font_idx_level = font_idx_8x8;
} }
} }
} }
} }
void set_level_font_interface(void)
{
/* Set the level font equal to the interface font.
* This function is for the main game. */
font_level_is_interface = true;
}
static void load_font_filename(bool is_custom, const char* filename) static void load_font_filename(bool is_custom, const char* filename)
{ {
// Load font.png, and everything that matches *.fontmeta (but not font.fontmeta) // Load font.png, and everything that matches *.fontmeta (but not font.fontmeta)
@ -467,6 +477,7 @@ void load_main(void)
load_font_filename(false, item); load_font_filename(false, item);
} }
FILESYSTEM_freeEnumerate(&handle); FILESYSTEM_freeEnumerate(&handle);
font_idx_level = font_idx_8x8;
} }
void load_custom(const char* name) void load_custom(const char* name)
@ -481,7 +492,7 @@ void load_custom(const char* name)
} }
FILESYSTEM_freeEnumerate(&handle); FILESYSTEM_freeEnumerate(&handle);
set_custom_font(name); set_level_font(name);
} }
void unload_font(Font* f) void unload_font(Font* f)
@ -559,17 +570,21 @@ static Font* fontsel_to_font(int sel)
switch (sel) switch (sel)
{ {
case 1:
if (!font_level_is_interface)
{
if (font_idx_level_is_custom)
{
return container_get(&fonts_custom, font_idx_level);
}
else
{
return container_get(&fonts_main, font_idx_level);
}
}
SDL_FALLTHROUGH;
case 0: case 0:
return container_get(&fonts_main, loc::get_langmeta()->font_idx); return container_get(&fonts_main, loc::get_langmeta()->font_idx);
case 1:
if (font_idx_custom_is_custom)
{
return container_get(&fonts_custom, font_idx_custom);
}
else
{
return container_get(&fonts_main, font_idx_custom);
}
case 2: case 2:
return container_get(&fonts_main, font_idx_8x8); return container_get(&fonts_main, font_idx_8x8);
} }

View file

@ -64,7 +64,8 @@ bool find_main_font_by_name(const char* name, uint8_t* idx);
const char* get_main_font_name(uint8_t idx); const char* get_main_font_name(uint8_t idx);
uint8_t get_font_idx_8x8(void); uint8_t get_font_idx_8x8(void);
void set_custom_font(const char* name); void set_level_font(const char* name);
void set_level_font_interface(void);
void load_main(void); void load_main(void);
void load_custom(const char* name); void load_custom(const char* name);
void unload_custom(void); void unload_custom(void);

View file

@ -7186,7 +7186,7 @@ void Game::returntoeditor(void)
ed.roomnamehide = 0; ed.roomnamehide = 0;
// Might've been changed in a script // Might've been changed in a script
font::set_custom_font(cl.level_font_name.c_str()); font::set_level_font(cl.level_font_name.c_str());
DEFER_CALLBACK(resetbg); DEFER_CALLBACK(resetbg);
music.fadeout(); music.fadeout();

View file

@ -2429,11 +2429,11 @@ void scriptclass::run(void)
#ifndef NO_CUSTOM_LEVELS #ifndef NO_CUSTOM_LEVELS
if (words[1] == "") if (words[1] == "")
{ {
font::set_custom_font(cl.level_font_name.c_str()); font::set_level_font(cl.level_font_name.c_str());
} }
else else
{ {
font::set_custom_font(words[1].c_str()); font::set_level_font(words[1].c_str());
} }
#endif #endif
} }
@ -2592,6 +2592,17 @@ void scriptclass::startgamemode(const enum StartMode mode)
game.gamestate = GAMEMODE; game.gamestate = GAMEMODE;
} }
switch (mode)
{
case Start_EDITOR:
case Start_EDITORPLAYTESTING:
case Start_CUSTOM:
case Start_CUSTOM_QUICKSAVE:
break;
default:
font::set_level_font_interface();
}
game.jumpheld = true; game.jumpheld = true;
switch (mode) switch (mode)