From 25cd6b00ebf2611e508a831aeb29c8ca0ba7bcbe Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Fri, 28 Mar 2025 08:38:28 +0100 Subject: [PATCH] afegida tecla per activar o desactivar el vsync --- CMakeLists.txt | 3 +++ README.md | 7 ++++--- data/lang/ba_BA.txt | 5 ++++- data/lang/en_UK.txt | 5 ++++- data/lang/es_ES.txt | 5 ++++- source/director.cpp | 25 +++++++++++++------------ source/global_inputs.cpp | 36 ++++++++++++++++++++++++------------ source/input.cpp | 6 +++--- source/input.h | 9 +++++---- source/jail_audio.cpp | 8 +++++--- source/screen.cpp | 31 ++++++++++++++++++------------- source/screen.h | 8 +++++++- source/title.cpp | 28 +++++++++++++++------------- 13 files changed, 109 insertions(+), 67 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c971a04..4157075 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -29,6 +29,9 @@ add_executable(${PROJECT_NAME} ${SOURCES}) target_compile_options(${PROJECT_NAME} PRIVATE -Wall) target_compile_options(${PROJECT_NAME} PRIVATE $<$:-Os -ffunction-sections -fdata-sections>) +# Definir _DEBUG en modo Debug +target_compile_definitions(${PROJECT_NAME} PRIVATE $<$:DEBUG>) + # Enlazar la librería SDL3 target_link_libraries(${PROJECT_NAME} PRIVATE SDL3::SDL3) diff --git a/README.md b/README.md index 005b440..b7b779e 100644 --- a/README.md +++ b/README.md @@ -40,9 +40,10 @@ El joc està optimitzat per a ser jugat amb un mando de jocs, encara que un dels | **F3** | Alterna entre mode de pantalla completa i finestra | | **F4** | Activa o desactiva el filtre de pantalla | | **F5** | Activa o desactiva el mode d'escalat sencer | -| **F6** | Activa o desactiva l'àudio | -| **F7** | Activa o desactiva el dispar automàtic | -| **F8** | Canvia l'idioma del joc (Provoca el reinici) | +| **F6** | Activa o desactiva el sincronisme vertical | +| **F7** | Activa o desactiva l'àudio | +| **F8** | Activa o desactiva el dispar automàtic | +| **F9** | Canvia l'idioma del joc (Provoca el reinici) | | **F10** | Reinicia el joc |

diff --git a/data/lang/ba_BA.txt b/data/lang/ba_BA.txt index 5048a7a..f75d05d 100644 --- a/data/lang/ba_BA.txt +++ b/data/lang/ba_BA.txt @@ -404,4 +404,7 @@ Mode pantalla completa Mode d'escalat sencer ## 135 - VARIOS -Filtre \ No newline at end of file +Filtre + +## 136 - VARIOS +Sincronisme vertical \ No newline at end of file diff --git a/data/lang/en_UK.txt b/data/lang/en_UK.txt index 119098b..2756f84 100644 --- a/data/lang/en_UK.txt +++ b/data/lang/en_UK.txt @@ -404,4 +404,7 @@ Fullscreen mode Integer scale ## 135 - VARIOS -Filter \ No newline at end of file +Filter + +## 136 - VARIOS +Vertical Sync \ No newline at end of file diff --git a/data/lang/es_ES.txt b/data/lang/es_ES.txt index 4980bee..1cc726e 100644 --- a/data/lang/es_ES.txt +++ b/data/lang/es_ES.txt @@ -404,4 +404,7 @@ Modo pantalla completa Modo de escalado entero ## 135 - VARIOS -Filtro \ No newline at end of file +Filtro + +## 136 - VARIOS +Sincronismo vertical \ No newline at end of file diff --git a/source/director.cpp b/source/director.cpp index 832ade2..c539b06 100644 --- a/source/director.cpp +++ b/source/director.cpp @@ -4,7 +4,7 @@ #include // Para SDL_GetError #include // Para SDL_GamepadButton #include // Para SDL_Init, SDL_Quit, SDL_INIT_AUDIO -#include // Para SDL_Log, SDL_LogCategory, SDL_LogE... +#include // Para SDL_Log, SDL_LogCategory, SDL_LogE... #include // Para SDL_Scancode #include // Para errno, EEXIST, EACCES, ENAMETOOLONG #include // Para printf, perror @@ -49,12 +49,12 @@ Director::Director(int argc, const char *argv[]) section::name = section::Name::GAME; section::options = section::Options::GAME_PLAY_1P; #elif DEBUG - section::name = section::Name::LOGO; + section::name = section::Name::INTRO; #else // NORMAL GAME section::name = section::Name::LOGO; +#endif section::options = section::Options::NONE; section::attract_mode = section::AttractMode::TITLE_TO_DEMO; -#endif // Establece el nivel de prioridad de la categoría de registro SDL_SetLogPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); @@ -171,12 +171,13 @@ void Director::bindInputs() Input::get()->bindKey(InputAction::WINDOW_DEC_SIZE, SDL_SCANCODE_F1); Input::get()->bindKey(InputAction::WINDOW_INC_SIZE, SDL_SCANCODE_F2); Input::get()->bindKey(InputAction::WINDOW_FULLSCREEN, SDL_SCANCODE_F3); - Input::get()->bindKey(InputAction::VIDEO_SHADERS, SDL_SCANCODE_F4); - Input::get()->bindKey(InputAction::VIDEO_INTEGER_SCALE, SDL_SCANCODE_F5); + Input::get()->bindKey(InputAction::TOGGLE_VIDEO_SHADERS, SDL_SCANCODE_F4); + Input::get()->bindKey(InputAction::TOGGLE_VIDEO_INTEGER_SCALE, SDL_SCANCODE_F5); + Input::get()->bindKey(InputAction::TOGGLE_VIDEO_VSYNC, SDL_SCANCODE_F6); - Input::get()->bindKey(InputAction::MUTE, SDL_SCANCODE_F6); - Input::get()->bindKey(InputAction::AUTO_FIRE, SDL_SCANCODE_F7); - Input::get()->bindKey(InputAction::CHANGE_LANG, SDL_SCANCODE_F8); + Input::get()->bindKey(InputAction::TOGGLE_AUDIO, SDL_SCANCODE_F7); + Input::get()->bindKey(InputAction::TOGGLE_AUTO_FIRE, SDL_SCANCODE_F8); + Input::get()->bindKey(InputAction::CHANGE_LANG, SDL_SCANCODE_F9); Input::get()->bindKey(InputAction::RESET, SDL_SCANCODE_F10); @@ -224,8 +225,8 @@ void Director::bindInputs() Input::get()->bindGameControllerButton(i, InputAction::EXIT, InputAction::START); Input::get()->bindGameControllerButton(i, InputAction::RESET, InputAction::FIRE_CENTER); Input::get()->bindGameControllerButton(i, InputAction::PAUSE, InputAction::FIRE_RIGHT); - Input::get()->bindGameControllerButton(i, InputAction::VIDEO_SHADERS, InputAction::FIRE_LEFT); - Input::get()->bindGameControllerButton(i, InputAction::MUTE, InputAction::LEFT); + Input::get()->bindGameControllerButton(i, InputAction::TOGGLE_VIDEO_SHADERS, InputAction::FIRE_LEFT); + Input::get()->bindGameControllerButton(i, InputAction::TOGGLE_AUDIO, InputAction::LEFT); Input::get()->bindGameControllerButton(i, InputAction::SHOW_INFO, InputAction::RIGHT); Input::get()->bindGameControllerButton(i, InputAction::CONFIG, InputAction::DOWN); Input::get()->bindGameControllerButton(i, InputAction::SWAP_CONTROLLERS, InputAction::UP); @@ -262,7 +263,7 @@ void Director::initJailAudio() } else { - SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "\n** SDL_AUDIO: INITIALIZING\n"); + SDL_LogInfo(SDL_LOG_CATEGORY_TEST, "\n** SDL_AUDIO: INITIALIZING\n"); JA_Init(48000, SDL_AUDIO_S16LE, 2); if (options.audio.enabled) @@ -276,7 +277,7 @@ void Director::initJailAudio() JA_SetSoundVolume(0); } - SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "** SDL_AUDIO: INITIALIZATION COMPLETE\n"); + SDL_LogInfo(SDL_LOG_CATEGORY_TEST, "** SDL_AUDIO: INITIALIZATION COMPLETE\n"); } } diff --git a/source/global_inputs.cpp b/source/global_inputs.cpp index c611677..254c158 100644 --- a/source/global_inputs.cpp +++ b/source/global_inputs.cpp @@ -75,14 +75,19 @@ namespace globalInputs } // Cambia el modo de escalado entero - void toggleintegerScale() + void toggleIntegerScale() { - options.video.integer_scale = !options.video.integer_scale; - SDL_SetRenderLogicalPresentation(Screen::get()->getRenderer(), param.game.width, param.game.height, options.video.integer_scale ? SDL_LOGICAL_PRESENTATION_INTEGER_SCALE : SDL_LOGICAL_PRESENTATION_LETTERBOX); - Screen::get()->setFullscreenMode(); + Screen::get()->toggleIntegerScale(); Notifier::get()->show({lang::getText(134) + " " + boolToOnOff(options.video.integer_scale)}); } + // Activa / desactiva el vsync + void toggleVSync() + { + Screen::get()->toggleVSync(); + Notifier::get()->show({lang::getText(136) + " " + boolToOnOff(options.video.v_sync)}); + } + // Activa o desactiva los shaders void toggleShaders() { @@ -228,14 +233,14 @@ namespace globalInputs } // Audio - if (Input::get()->checkInput(InputAction::MUTE, INPUT_DO_NOT_ALLOW_REPEAT, InputDeviceToUse::KEYBOARD)) + if (Input::get()->checkInput(InputAction::TOGGLE_AUDIO, INPUT_DO_NOT_ALLOW_REPEAT, InputDeviceToUse::KEYBOARD)) { toggleAudio(); return; } // Autofire - if (Input::get()->checkInput(InputAction::AUTO_FIRE, INPUT_DO_NOT_ALLOW_REPEAT, InputDeviceToUse::KEYBOARD)) + if (Input::get()->checkInput(InputAction::TOGGLE_AUTO_FIRE, INPUT_DO_NOT_ALLOW_REPEAT, InputDeviceToUse::KEYBOARD)) { toggleFireMode(); return; @@ -249,20 +254,27 @@ namespace globalInputs } // Shaders - if (Input::get()->checkInput(InputAction::VIDEO_SHADERS, INPUT_DO_NOT_ALLOW_REPEAT, InputDeviceToUse::KEYBOARD)) + if (Input::get()->checkInput(InputAction::TOGGLE_VIDEO_SHADERS, INPUT_DO_NOT_ALLOW_REPEAT, InputDeviceToUse::KEYBOARD)) { toggleShaders(); return; } - if (Input::get()->checkInput(InputAction::VIDEO_INTEGER_SCALE, INPUT_DO_NOT_ALLOW_REPEAT, InputDeviceToUse::KEYBOARD)) + // Integer Scale + if (Input::get()->checkInput(InputAction::TOGGLE_VIDEO_INTEGER_SCALE, INPUT_DO_NOT_ALLOW_REPEAT, InputDeviceToUse::KEYBOARD)) { - toggleintegerScale(); + toggleIntegerScale(); return; } + // VSync + if (Input::get()->checkInput(InputAction::TOGGLE_VIDEO_VSYNC, INPUT_DO_NOT_ALLOW_REPEAT, InputDeviceToUse::KEYBOARD)) + { + toggleVSync(); + return; + } #ifdef DEBUG - // Comprueba el teclado para mostrar la información de debug + // Debug info if (Input::get()->checkInput(InputAction::SHOW_INFO, INPUT_DO_NOT_ALLOW_REPEAT, InputDeviceToUse::KEYBOARD)) { Screen::get()->toggleDebugInfo(); @@ -299,7 +311,7 @@ namespace globalInputs // Audio if (Input::get()->checkInput(InputAction::SERVICE, INPUT_ALLOW_REPEAT, InputDeviceToUse::CONTROLLER, i) && - Input::get()->checkInput(InputAction::MUTE, INPUT_DO_NOT_ALLOW_REPEAT, InputDeviceToUse::CONTROLLER, i)) + Input::get()->checkInput(InputAction::TOGGLE_AUDIO, INPUT_DO_NOT_ALLOW_REPEAT, InputDeviceToUse::CONTROLLER, i)) { toggleAudio(); return; @@ -307,7 +319,7 @@ namespace globalInputs // Shaders if (Input::get()->checkInput(InputAction::SERVICE, INPUT_ALLOW_REPEAT, InputDeviceToUse::CONTROLLER, i) && - Input::get()->checkInput(InputAction::VIDEO_SHADERS, INPUT_DO_NOT_ALLOW_REPEAT, InputDeviceToUse::CONTROLLER, i)) + Input::get()->checkInput(InputAction::TOGGLE_VIDEO_SHADERS, INPUT_DO_NOT_ALLOW_REPEAT, InputDeviceToUse::CONTROLLER, i)) { toggleShaders(); return; diff --git a/source/input.cpp b/source/input.cpp index b91d72a..855693b 100644 --- a/source/input.cpp +++ b/source/input.cpp @@ -276,7 +276,7 @@ bool Input::discoverGameControllers() SDL_SetGamepadEventsEnabled(true); } - SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, ">> FINISHED LOOKING FOR GAME CONTROLLERS"); + SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "\n>> FINISHED LOOKING FOR GAME CONTROLLERS"); return found; } @@ -437,9 +437,9 @@ void Input::initSDL() } else { - SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "\n** SDL_GAMEPAD: INITIALIZING"); + SDL_LogInfo(SDL_LOG_CATEGORY_TEST, "\n** SDL_GAMEPAD: INITIALIZING"); discoverGameControllers(); - SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "** SDL_GAMEPAD: INITIALIZATION COMPLETE\n"); + SDL_LogInfo(SDL_LOG_CATEGORY_TEST, "** SDL_GAMEPAD: INITIALIZATION COMPLETE\n"); } } } \ No newline at end of file diff --git a/source/input.h b/source/input.h index 62fb091..6ddeb69 100644 --- a/source/input.h +++ b/source/input.h @@ -37,15 +37,16 @@ enum class InputAction : int WINDOW_FULLSCREEN, WINDOW_INC_SIZE, WINDOW_DEC_SIZE, - VIDEO_SHADERS, - VIDEO_INTEGER_SCALE, + TOGGLE_VIDEO_SHADERS, + TOGGLE_VIDEO_INTEGER_SCALE, + TOGGLE_VIDEO_VSYNC, RESET, - MUTE, + TOGGLE_AUDIO, CHANGE_LANG, SHOW_INFO, CONFIG, SWAP_CONTROLLERS, - AUTO_FIRE, + TOGGLE_AUTO_FIRE, // Input obligatorio NONE, diff --git a/source/jail_audio.cpp b/source/jail_audio.cpp index bc4b894..be55a2f 100644 --- a/source/jail_audio.cpp +++ b/source/jail_audio.cpp @@ -144,8 +144,10 @@ Uint32 JA_UpdateCallback(void *userdata, SDL_TimerID timerID, Uint32 interval) } else { - if (SDL_GetAudioStreamAvailable(channels[i].stream) == 0) + if (channels[i].stream && SDL_GetAudioStreamAvailable(channels[i].stream) == 0) + { JA_StopChannel(i); + } } } @@ -158,12 +160,12 @@ void JA_Init(const int freq, const SDL_AudioFormat format, const int channels) SDL_SetLogPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_DEBUG); #endif - SDL_Log("Iniciant JailAudio..."); + SDL_LogInfo(SDL_LOG_CATEGORY_TEST, "Iniciant JailAudio..."); JA_audioSpec = {format, channels, freq}; if (!sdlAudioDevice) SDL_CloseAudioDevice(sdlAudioDevice); sdlAudioDevice = SDL_OpenAudioDevice(SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK, &JA_audioSpec); - SDL_Log((sdlAudioDevice == 0) ? "Failed to initialize SDL audio!\n" : "OK!\n"); + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, (sdlAudioDevice == 0) ? "Failed to initialize SDL audio!\n" : "OK!\n"); // SDL_PauseAudioDevice(sdlAudioDevice); JA_timerID = SDL_AddTimer(30, JA_UpdateCallback, nullptr); } diff --git a/source/screen.cpp b/source/screen.cpp index 89aab7c..50cc818 100644 --- a/source/screen.cpp +++ b/source/screen.cpp @@ -313,7 +313,7 @@ bool Screen::initSDL() } else { - SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "\n** SDL_VIDEO: INITIALIZING\n"); + SDL_LogInfo(SDL_LOG_CATEGORY_TEST, "\n** SDL_VIDEO: INITIALIZING\n"); getDisplayInfo(); @@ -331,16 +331,6 @@ bool Screen::initSDL() } else { - // Crea un renderizador para la ventana. El vsync se activa en función de las opciones - // Uint32 flags = 0; - if (options.video.v_sync) - { - // flags = SDL_RENDERER_PRESENTVSYNC; - } - - // La aceleración se activa según el define - // flags = flags | SDL_RENDERER_ACCELERATED | SDL_RENDERER_TARGETTEXTURE; - renderer_ = SDL_CreateRenderer(window_, nullptr); if (!renderer_) @@ -352,13 +342,14 @@ bool Screen::initSDL() { SDL_SetRenderDrawColor(renderer_, 0x00, 0x00, 0x00, 0xFF); SDL_SetRenderLogicalPresentation(renderer_, param.game.width, param.game.height, SDL_LOGICAL_PRESENTATION_INTEGER_SCALE); - SDL_SetWindowFullscreen(window_, static_cast(options.video.fullscreen)); + SDL_SetWindowFullscreen(window_, options.video.fullscreen); SDL_SetRenderDrawBlendMode(renderer_, SDL_BLENDMODE_BLEND); + SDL_SetRenderVSync(renderer_, options.video.v_sync ? 1 : SDL_RENDERER_VSYNC_DISABLED); } } } - SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "** SDL_VIDEO: INITIALIZATION COMPLETE\n"); + SDL_LogInfo(SDL_LOG_CATEGORY_TEST, "** SDL_VIDEO: INITIALIZATION COMPLETE\n"); return success; } @@ -402,4 +393,18 @@ void Screen::getDisplayInfo() SDL_free(displays); } +} + +// Activa / desactiva el escalado entero +void Screen::toggleIntegerScale() +{ + options.video.integer_scale = !options.video.integer_scale; + SDL_SetRenderLogicalPresentation(Screen::get()->getRenderer(), param.game.width, param.game.height, options.video.integer_scale ? SDL_LOGICAL_PRESENTATION_INTEGER_SCALE : SDL_LOGICAL_PRESENTATION_LETTERBOX); +} + +// Activa / desactiva el vsync +void Screen::toggleVSync() +{ + options.video.v_sync = !options.video.v_sync; + SDL_SetRenderVSync(renderer_, options.video.v_sync ? 1 : SDL_RENDERER_VSYNC_DISABLED); } \ No newline at end of file diff --git a/source/screen.h b/source/screen.h index 2c710e8..86dd11f 100644 --- a/source/screen.h +++ b/source/screen.h @@ -158,7 +158,7 @@ private: bool attenuate_effect_ = false; // Indica si la pantalla ha de estar atenuada #ifdef DEBUG - bool show_debug_info_ = false; // Indica si ha de mostrar/ocultar la información de la pantalla + bool show_debug_info_ = true; // Indica si ha de mostrar/ocultar la información de la pantalla #else bool show_debug_info_ = false; // Indica si ha de mostrar/ocultar la información de la pantalla #endif @@ -254,6 +254,12 @@ public: // Activa / desactiva la información de debug void toggleDebugInfo() { show_debug_info_ = !show_debug_info_; } + // Activa / desactiva el escalado entero + void toggleIntegerScale(); + + // Activa / desactiva el vsync + void toggleVSync(); + // Getters SDL_Renderer *getRenderer() { return renderer_; } diff --git a/source/title.cpp b/source/title.cpp index 08ec5f9..ba168cc 100644 --- a/source/title.cpp +++ b/source/title.cpp @@ -195,17 +195,17 @@ void Title::checkInput() if (!define_buttons_->isEnabled()) { // Comprueba todos los métodos de control - for (const auto &controller : options.controllers) + for (const auto &CONTROLLER : options.controllers) { // START - if (Input::get()->checkInput(InputAction::START, INPUT_DO_NOT_ALLOW_REPEAT, controller.type, controller.index) && - !Input::get()->checkInput(InputAction::SERVICE, INPUT_DO_NOT_ALLOW_REPEAT, controller.type, controller.index)) + if (Input::get()->checkInput(InputAction::START, INPUT_DO_NOT_ALLOW_REPEAT, CONTROLLER.type, CONTROLLER.index) && + !Input::get()->checkInput(InputAction::SERVICE, INPUT_DO_NOT_ALLOW_REPEAT, CONTROLLER.type, CONTROLLER.index)) { if ((state_ == TitleState::LOGO_FINISHED || ALLOW_TITLE_ANIMATION_SKIP) && !fade_->isEnabled()) { JA_PlaySound(Resource::get()->getSound("game_start.wav")); - /*JA_FadeOutMusic(1500);*/ - switch (controller.player_id) + JA_FadeOutMusic(1500); + switch (CONTROLLER.player_id) { case 1: selection_ = section::Options::GAME_PLAY_1P; @@ -224,18 +224,18 @@ void Title::checkInput() } // SWAP_CONTROLLERS - if (Input::get()->checkInput(InputAction::SERVICE, INPUT_ALLOW_REPEAT, controller.type, controller.index) && - Input::get()->checkInput(InputAction::SWAP_CONTROLLERS, INPUT_DO_NOT_ALLOW_REPEAT, controller.type, controller.index)) + if (Input::get()->checkInput(InputAction::SERVICE, INPUT_ALLOW_REPEAT, CONTROLLER.type, CONTROLLER.index) && + Input::get()->checkInput(InputAction::SWAP_CONTROLLERS, INPUT_DO_NOT_ALLOW_REPEAT, CONTROLLER.type, CONTROLLER.index)) { swapControllers(); return; } // CONFIG - if (Input::get()->checkInput(InputAction::SERVICE, INPUT_ALLOW_REPEAT, controller.type, controller.index) && - Input::get()->checkInput(InputAction::CONFIG, INPUT_DO_NOT_ALLOW_REPEAT, controller.type, controller.index)) + if (Input::get()->checkInput(InputAction::SERVICE, INPUT_ALLOW_REPEAT, CONTROLLER.type, CONTROLLER.index) && + Input::get()->checkInput(InputAction::CONFIG, INPUT_DO_NOT_ALLOW_REPEAT, CONTROLLER.type, CONTROLLER.index)) { - define_buttons_->enable(controller.index); + define_buttons_->enable(CONTROLLER.index); return; } } @@ -264,7 +264,9 @@ void Title::resetCounter() { counter_ = 0; } void Title::swapControllers() { if (Input::get()->getNumControllers() == 0) + { return; + } swapOptionsControllers(); showControllers(); @@ -284,19 +286,19 @@ void Title::showControllers() // Crea vectores de texto vacíos para un número máximo de mandos constexpr size_t NUM_CONTROLLERS = 2; std::vector text(NUM_CONTROLLERS); - std::vector playerControllerIndex(NUM_CONTROLLERS, -1); + std::vector player_controller_index(NUM_CONTROLLERS, -1); // Obtiene de cada jugador el índice del mando que tiene asignado for (size_t i = 0; i < NUM_CONTROLLERS; ++i) { // Ejemplo: el jugador 1 tiene el mando 2 - playerControllerIndex.at(options.controllers.at(i).player_id - 1) = i; + player_controller_index.at(options.controllers.at(i).player_id - 1) = i; } // Genera el texto correspondiente for (size_t i = 0; i < NUM_CONTROLLERS; ++i) { - const size_t index = playerControllerIndex.at(i); + const size_t index = player_controller_index.at(i); if (options.controllers.at(index).plugged) { text.at(i) = lang::getText(100) + std::to_string(i + 1) + ": " + options.controllers.at(index).name;