diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 0f9c8e4af..c32d08390 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -15,6 +15,9 @@ Version 1.5.0 (TBD): Not yet released [@GooberRF](https://github.com/GooberRF) - Fix phantom visual flag mesh being visible after Salvage flag is picked up on rare occasions +[@is-this-c](https://github.com/is-this-c) +- Let `Caps Lock` capitalize + Version 1.4.0 (Lupin): Released Aug-25-2026 -------------------------------- ### Major features diff --git a/game_patch/CMakeLists.txt b/game_patch/CMakeLists.txt index 1997655bc..4dbe623a0 100644 --- a/game_patch/CMakeLists.txt +++ b/game_patch/CMakeLists.txt @@ -1,4 +1,4 @@ -file(GLOB EXPERIMENTAL_SRCS experimental/*.cpp experimental/*.h) +file(GLOB_RECURSE EXPERIMENTAL_SRCS experimental/*.cpp experimental/*.h) set(SRCS main/main.cpp diff --git a/game_patch/graphics/gr_font.cpp b/game_patch/graphics/gr_font.cpp index c5cde2382..9c3822546 100644 --- a/game_patch/graphics/gr_font.cpp +++ b/game_patch/graphics/gr_font.cpp @@ -623,7 +623,7 @@ int gr_fit_string( return text_w; } - while (text_w + suffix_w > max_width && !text.empty()) { + while (!text.empty() && (text_w + suffix_w > max_width || text.back() == ' ')) { const auto [last_w, last_h] = rf::gr::get_char_size(text.back(), font_id); text_w -= last_w; text.pop_back(); diff --git a/game_patch/input/key.cpp b/game_patch/input/key.cpp index 108b333c8..0e4a5b6f3 100644 --- a/game_patch/input/key.cpp +++ b/game_patch/input/key.cpp @@ -94,6 +94,8 @@ FunHook key_to_ascii_hook{ if (key & rf::KEY_CTRLED) { key_state[VK_CONTROL] = 0x80; } + // HACKFIX. Must be set for `ToUnicode` to produce capitalized letters. + key_state[VK_CAPITAL] = GetKeyState(VK_CAPITAL) & 1; int scan_code = key & 0x7F; auto vk = MapVirtualKeyA(scan_code, MAPVK_VSC_TO_VK); WCHAR unicode_chars[3]; diff --git a/game_patch/multi/dedi_cfg.cpp b/game_patch/multi/dedi_cfg.cpp index 41e0547e1..203b3e1e8 100644 --- a/game_patch/multi/dedi_cfg.cpp +++ b/game_patch/multi/dedi_cfg.cpp @@ -2137,12 +2137,15 @@ void print_alpine_dedicated_server_config_info(std::string& output, bool verbose std::format_to(iter, " Max players: {}\n", netgame.max_players); std::format_to(iter, " Levels in rotation: {}\n", cfg.levels.size()); std::format_to(iter, " Dynamic rotation: {}\n", cfg.dynamic_rotation); - std::format_to(iter, " Demo auto record: {}\n", cfg.demo_auto_record); - std::format_to(iter, " Demo chat record: {}\n", cfg.demo_chat_record); - std::format_to(iter, " FactionFiles demo upload: {}\n", cfg.fflink_demo_upload); - std::format_to(iter, " FactionFiles demo max MB: {}\n", cfg.fflink_demo_max_mb); - std::format_to(iter, " FactionFiles demo queue max: {}\n", cfg.fflink_demo_queue_max); - std::format_to(iter, " FactionFiles demo delete after send: {}\n", cfg.fflink_demo_delete_after_send); + std::format_to(iter, " Demos:\n"); + std::format_to(iter, " Include chat: {}\n", cfg.demo_chat_record); + std::format_to(iter, " Auto-record: {}\n", cfg.demo_auto_record); + std::format_to(iter, " Upload to FactionFiles: {}\n", cfg.fflink_demo_upload); + if (cfg.fflink_demo_upload) { + std::format_to(iter, " Max size: {} MiB\n", cfg.fflink_demo_max_mb); + std::format_to(iter, " Max queue: {}\n", cfg.fflink_demo_queue_max); + std::format_to(iter, " Delete after send: {}\n", cfg.fflink_demo_delete_after_send); + } if (rf::mod_param.found()) { std::format_to(iter, " TC mod loaded: {}\n", rf::mod_param.get_arg()); diff --git a/game_patch/os/commands.cpp b/game_patch/os/commands.cpp index 540762d75..b958dec88 100644 --- a/game_patch/os/commands.cpp +++ b/game_patch/os/commands.cpp @@ -29,9 +29,9 @@ ConsoleCommand2 dot_cmd{ if (string_icontains(cmd->name, pattern) || (cmd->help && string_icontains(cmd->help, pattern))) { if (cmd->help) { - rf::console::print("{} - {}", cmd->name, cmd->help); + rf::console::print(" {} - {}", cmd->name, cmd->help); } else { - rf::console::print("{}", cmd->name); + rf::console::print(" {}", cmd->name); } } } diff --git a/game_patch/rf/os/console.h b/game_patch/rf/os/console.h index 2677862ec..796add61e 100644 --- a/game_patch/rf/os/console.h +++ b/game_patch/rf/os/console.h @@ -65,6 +65,16 @@ namespace rf::console output(s.c_str(), nullptr); } + template + inline void print( + const rf::gr::Color& color, + const std::format_string fmt, + Args&&... args + ) { + const std::string s = std::format(fmt, std::forward(args)...); + output(s.c_str(), &color); + } + //static auto& commands = addr_as_ref(0x01775530); static auto& num_commands = addr_as_ref(0x0177567C);