diff --git a/config/assets.txt b/config/assets.txt index b65507f..d6bd06a 100644 --- a/config/assets.txt +++ b/config/assets.txt @@ -175,6 +175,7 @@ BITMAP|${PREFIX}/data/gfx/player/hit.png # Fuentes de texto BITMAP|${PREFIX}/data/font/04b_25_2x.png +BITMAP|${PREFIX}/data/font/04b_25_2x_white.png BITMAP|${PREFIX}/data/font/04b_25_flat_2x.png BITMAP|${PREFIX}/data/font/04b_25_flat.png BITMAP|${PREFIX}/data/font/04b_25_grey.png diff --git a/data/font/04b_25_2x_white.png b/data/font/04b_25_2x_white.png new file mode 100644 index 0000000..7003aee Binary files /dev/null and b/data/font/04b_25_2x_white.png differ diff --git a/source/enter_name.cpp b/source/enter_name.cpp index 8785056..f985245 100644 --- a/source/enter_name.cpp +++ b/source/enter_name.cpp @@ -45,7 +45,10 @@ void EnterName::incPosition() { } else if (position_ > 0) // No es necesario verificar position_ < MAX_NAME_LENGTH { // Copiamos el índice del carácter anterior si es posible. - character_index_[position_] = character_index_[position_ - 1]; + //character_index_[position_] = character_index_[position_ - 1]; + + // Ponemos el caracter "espacio" + character_index_[position_] = 0; } else { // Si position_ es 0, inicializamos el carácter actual. character_index_[position_] = 0; @@ -149,7 +152,7 @@ auto EnterName::getRandomName() -> std::string { } // Obtiene el nombre final introducido auto EnterName::getFinalName() -> std::string { - auto name = trim(name_.substr(0, position_)); + auto name = trim(name_.substr(0, position_ + 1)); // Devuelve el texto intruducido incluyendo el del selector if (name.empty()) { name = getRandomName(); } diff --git a/source/player.cpp b/source/player.cpp index 13a7a77..bd1f0d5 100644 --- a/source/player.cpp +++ b/source/player.cpp @@ -624,6 +624,9 @@ void Player::setPlayingState(State state) { switch (playing_state_) { case State::RECOVER: { + score_ = 0; // Pon los puntos a cero para que no se vea en el marcador + score_multiplier_ = 1.0F; + setScoreboardMode(Scoreboard::Mode::SCORE); break; } case State::RESPAWNING: { @@ -781,19 +784,19 @@ void Player::updateInvulnerable() { if (playing_state_ == State::PLAYING && invulnerable_) { if (invulnerable_counter_ > 0) { --invulnerable_counter_; - + // Frecuencia fija de parpadeo (como el original) constexpr int blink_speed = 8; - + // Calcula proporción decreciente: menos textura blanca hacia el final // Al inicio: 50-50, hacia el final: 70-30 (menos blanco) float progress = 1.0f - (static_cast(invulnerable_counter_) / INVULNERABLE_COUNTER); - int white_frames = static_cast((0.5f - progress * 0.2f) * blink_speed); - + int white_frames = static_cast((0.5f - progress * 0.2f) * blink_speed); + // Alterna entre texturas con proporción variable bool should_show_invulnerable = (invulnerable_counter_ % blink_speed) < white_frames; size_t target_texture = should_show_invulnerable ? INVULNERABLE_TEXTURE : coffees_; - + // Solo cambia textura si es diferente (optimización) if (player_sprite_->getActiveTexture() != target_texture) { player_sprite_->setActiveTexture(target_texture); diff --git a/source/resource.cpp b/source/resource.cpp index 6e5dd65..ce725a2 100644 --- a/source/resource.cpp +++ b/source/resource.cpp @@ -661,7 +661,8 @@ void Resource::createTextTextures() { {"game_text_5000_points", "5.000"}, {"game_text_powerup", Lang::getText("[GAME_TEXT] 4")}, {"game_text_one_hit", Lang::getText("[GAME_TEXT] 5")}, - {"game_text_stop", Lang::getText("[GAME_TEXT] 6")}}; + {"game_text_stop", Lang::getText("[GAME_TEXT] 6")}, + {"game_text_1000000_points", Lang::getText("[GAME_TEXT] 8")}}; auto text1 = getText("04b_25_enhanced"); for (const auto &s : strings1) { @@ -669,27 +670,17 @@ void Resource::createTextTextures() { printWithDots("Texture : ", s.name, "[ DONE ]"); } - // Texturas de tamaño normal - std::vector strings2 = { - {"game_text_1000000_points", Lang::getText("[GAME_TEXT] 8")}}; - - auto text2 = getText("04b_25"); - for (const auto &s : strings2) { - textures_.emplace_back(s.name, text2->writeDXToTexture(Text::STROKE, s.text, -2, Colors::NO_COLOR_MOD, 1, param.game.item_text_outline_color)); - printWithDots("Texture : ", s.name, "[ DONE ]"); - } - // Texturas de tamaño doble - std::vector strings3 = { + std::vector strings2 = { {"game_text_100000_points", "100.000"}, {"game_text_get_ready", Lang::getText("[GAME_TEXT] 7")}, {"game_text_last_stage", Lang::getText("[GAME_TEXT] 3")}, {"game_text_congratulations", Lang::getText("[GAME_TEXT] 1")}, {"game_text_game_over", "Game Over"}}; - auto text3 = getText("04b_25_2x"); - for (const auto &s : strings3) { - textures_.emplace_back(s.name, text3->writeToTexture(s.text, 1, -4)); + auto text2 = getText("04b_25_2x_enhanced"); + for (const auto &s : strings2) { + textures_.emplace_back(s.name, text2->writeDXToTexture(Text::STROKE, s.text, -4, Colors::NO_COLOR_MOD, 1, param.game.item_text_outline_color)); printWithDots("Texture : ", s.name, "[ DONE ]"); } } @@ -713,6 +704,7 @@ void Resource::createText() { {"04b_25_enhanced", "04b_25.png", "04b_25.txt", "04b_25_white.png"}, // Nueva fuente con textura blanca {"04b_25_white", "04b_25_white.png", "04b_25.txt"}, {"04b_25_2x", "04b_25_2x.png", "04b_25_2x.txt"}, + {"04b_25_2x_enhanced", "04b_25_2x.png", "04b_25_2x.txt", "04b_25_2x_white.png"},// Nueva fuente con textura blanca {"04b_25_metal", "04b_25_metal.png", "04b_25.txt"}, {"04b_25_grey", "04b_25_grey.png", "04b_25.txt"}, {"04b_25_flat", "04b_25_flat.png", "04b_25.txt"}, diff --git a/source/scoreboard.cpp b/source/scoreboard.cpp index f07e80e..62b239f 100644 --- a/source/scoreboard.cpp +++ b/source/scoreboard.cpp @@ -37,7 +37,7 @@ auto Scoreboard::get() -> Scoreboard * { // Constructor Scoreboard::Scoreboard() - : renderer_(Screen::get()->getRenderer()), game_power_meter_texture_(Resource::get()->getTexture("game_power_meter.png")), power_meter_sprite_(std::make_unique(game_power_meter_texture_)), text_scoreboard_(Resource::get()->getText("8bithud")) { + : renderer_(Screen::get()->getRenderer()), game_power_meter_texture_(Resource::get()->getTexture("game_power_meter.png")), power_meter_sprite_(std::make_unique(game_power_meter_texture_)), text_(Resource::get()->getText("8bithud")), enter_name_text_(Resource::get()->getText("smb2")) { // Inicializa variables for (size_t i = 0; i < static_cast(Id::SIZE); ++i) { name_.at(i).clear(); @@ -195,50 +195,50 @@ void Scoreboard::renderPanelContent(size_t panel_index) { void Scoreboard::renderScoreMode(size_t panel_index) { // SCORE - text_scoreboard_->writeDX(Text::COLOR | Text::CENTER, slot4_1_.x, slot4_1_.y, name_.at(panel_index), 1, text_color1_); - text_scoreboard_->writeDX(Text::COLOR | Text::CENTER, slot4_2_.x, slot4_2_.y, updateScoreText(score_.at(panel_index)), 1, text_color2_); + text_->writeDX(Text::COLOR | Text::CENTER, slot4_1_.x, slot4_1_.y, name_.at(panel_index), 1, text_color1_); + text_->writeDX(Text::COLOR | Text::CENTER, slot4_2_.x, slot4_2_.y, updateScoreText(score_.at(panel_index)), 1, text_color2_); // MULT - text_scoreboard_->writeDX(Text::COLOR | Text::CENTER, slot4_3_.x, slot4_3_.y, Lang::getText("[SCOREBOARD] 3"), 1, text_color1_); - text_scoreboard_->writeDX(Text::COLOR | Text::CENTER, slot4_4_.x, slot4_4_.y, "x" + std::to_string(mult_.at(panel_index)).substr(0, 3), 1, text_color2_); + text_->writeDX(Text::COLOR | Text::CENTER, slot4_3_.x, slot4_3_.y, Lang::getText("[SCOREBOARD] 3"), 1, text_color1_); + text_->writeDX(Text::COLOR | Text::CENTER, slot4_4_.x, slot4_4_.y, "x" + std::to_string(mult_.at(panel_index)).substr(0, 3), 1, text_color2_); } void Scoreboard::renderDemoMode() { // DEMO MODE - text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_1_.x, slot4_1_.y + 4, Lang::getText("[SCOREBOARD] 6"), 1, text_color1_); + text_->writeDX(Text::CENTER | Text::COLOR, slot4_1_.x, slot4_1_.y + 4, Lang::getText("[SCOREBOARD] 6"), 1, text_color1_); // PRESS START TO PLAY if (time_counter_ % 10 < 8) { - text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_3_.x, slot4_3_.y - 2, Lang::getText("[SCOREBOARD] 8"), 1, text_color1_); - text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_4_.x, slot4_4_.y - 2, Lang::getText("[SCOREBOARD] 9"), 1, text_color1_); + text_->writeDX(Text::CENTER | Text::COLOR, slot4_3_.x, slot4_3_.y - 2, Lang::getText("[SCOREBOARD] 8"), 1, text_color1_); + text_->writeDX(Text::CENTER | Text::COLOR, slot4_4_.x, slot4_4_.y - 2, Lang::getText("[SCOREBOARD] 9"), 1, text_color1_); } } void Scoreboard::renderWaitingMode() { // GAME OVER - text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_1_.x, slot4_1_.y + 4, Lang::getText("[SCOREBOARD] 7"), 1, text_color1_); + text_->writeDX(Text::CENTER | Text::COLOR, slot4_1_.x, slot4_1_.y + 4, Lang::getText("[SCOREBOARD] 7"), 1, text_color1_); // PRESS START TO PLAY if (time_counter_ % 10 < 8) { - text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_3_.x, slot4_3_.y - 2, Lang::getText("[SCOREBOARD] 8"), 1, text_color1_); - text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_4_.x, slot4_4_.y - 2, Lang::getText("[SCOREBOARD] 9"), 1, text_color1_); + text_->writeDX(Text::CENTER | Text::COLOR, slot4_3_.x, slot4_3_.y - 2, Lang::getText("[SCOREBOARD] 8"), 1, text_color1_); + text_->writeDX(Text::CENTER | Text::COLOR, slot4_4_.x, slot4_4_.y - 2, Lang::getText("[SCOREBOARD] 9"), 1, text_color1_); } } void Scoreboard::renderGameOverMode() { // GAME OVER - text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_1_.x, slot4_1_.y + 4, Lang::getText("[SCOREBOARD] 7"), 1, text_color1_); + text_->writeDX(Text::CENTER | Text::COLOR, slot4_1_.x, slot4_1_.y + 4, Lang::getText("[SCOREBOARD] 7"), 1, text_color1_); // PLEASE WAIT if (time_counter_ % 10 < 8) { - text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_3_.x, slot4_3_.y - 2, Lang::getText("[SCOREBOARD] 12"), 1, text_color1_); - text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_4_.x, slot4_4_.y - 2, Lang::getText("[SCOREBOARD] 13"), 1, text_color1_); + text_->writeDX(Text::CENTER | Text::COLOR, slot4_3_.x, slot4_3_.y - 2, Lang::getText("[SCOREBOARD] 12"), 1, text_color1_); + text_->writeDX(Text::CENTER | Text::COLOR, slot4_4_.x, slot4_4_.y - 2, Lang::getText("[SCOREBOARD] 13"), 1, text_color1_); } } void Scoreboard::renderStageInfoMode() { // STAGE - text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_1_.x, slot4_1_.y, Lang::getText("[SCOREBOARD] 5") + " " + std::to_string(stage_), 1, text_color1_); + text_->writeDX(Text::CENTER | Text::COLOR, slot4_1_.x, slot4_1_.y, Lang::getText("[SCOREBOARD] 5") + " " + std::to_string(stage_), 1, text_color1_); // POWERMETER power_meter_sprite_->setSpriteClip(0, 0, 40, 7); @@ -247,77 +247,75 @@ void Scoreboard::renderStageInfoMode() { power_meter_sprite_->render(); // HI-SCORE - text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_3_.x, slot4_3_.y, Lang::getText("[SCOREBOARD] 4"), 1, text_color1_); + text_->writeDX(Text::CENTER | Text::COLOR, slot4_3_.x, slot4_3_.y, Lang::getText("[SCOREBOARD] 4"), 1, text_color1_); const std::string NAME = hi_score_name_.empty() ? "" : hi_score_name_ + " - "; - text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_4_.x, slot4_4_.y, NAME + updateScoreText(hi_score_), 1, text_color2_); + text_->writeDX(Text::CENTER | Text::COLOR, slot4_4_.x, slot4_4_.y, NAME + updateScoreText(hi_score_), 1, text_color2_); } void Scoreboard::renderContinueMode(size_t panel_index) { // SCORE - text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_1_.x, slot4_1_.y, name_.at(panel_index), 1, text_color1_); - text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_2_.x, slot4_2_.y, updateScoreText(score_.at(panel_index)), 1, text_color2_); + text_->writeDX(Text::CENTER | Text::COLOR, slot4_1_.x, slot4_1_.y, name_.at(panel_index), 1, text_color1_); + text_->writeDX(Text::CENTER | Text::COLOR, slot4_2_.x, slot4_2_.y, updateScoreText(score_.at(panel_index)), 1, text_color2_); // CONTINUE - text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_3_.x, slot4_3_.y, Lang::getText("[SCOREBOARD] 10"), 1, text_color1_); - text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_4_.x, slot4_4_.y, std::to_string(continue_counter_.at(panel_index)), 1, text_color2_); + text_->writeDX(Text::CENTER | Text::COLOR, slot4_3_.x, slot4_3_.y, Lang::getText("[SCOREBOARD] 10"), 1, text_color1_); + text_->writeDX(Text::CENTER | Text::COLOR, slot4_4_.x, slot4_4_.y, std::to_string(continue_counter_.at(panel_index)), 1, text_color2_); } void Scoreboard::renderEnterNameMode(size_t panel_index) { // SCORE - text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_1_.x, slot4_1_.y, name_.at(panel_index), 1, text_color1_); - text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_2_.x, slot4_2_.y, updateScoreText(score_.at(panel_index)), 1, text_color2_); + text_->writeDX(Text::CENTER | Text::COLOR, slot4_1_.x, slot4_1_.y, name_.at(panel_index), 1, text_color1_); + text_->writeDX(Text::CENTER | Text::COLOR, slot4_2_.x, slot4_2_.y, updateScoreText(score_.at(panel_index)), 1, text_color2_); // ENTER NAME - text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_3_.x, slot4_3_.y, Lang::getText("[SCOREBOARD] 11"), 1, text_color1_); + text_->writeDX(Text::CENTER | Text::COLOR, slot4_3_.x, slot4_3_.y, Lang::getText("[SCOREBOARD] 11"), 1, text_color1_); renderNameInputField(panel_index); } void Scoreboard::renderNameInputField(size_t panel_index) { - SDL_FRect rect = {enter_name_pos_.x, enter_name_pos_.y, 5.0F, 7.0F}; + SDL_FRect rect = { + .x = enter_name_pos_.x, + .y = enter_name_pos_.y, + .w = static_cast(enter_name_text_->getCharacterSize() - 2), + .h = static_cast(enter_name_text_->getCharacterSize())}; // Recorre todos los slots de letras del nombre for (size_t j = 0; j < NAME_SIZE; ++j) { - // Selecciona el color - const Color COLOR = j < selector_pos_.at(panel_index) ? text_color2_ : text_color1_; - // Dibuja la linea. Si coincide con el selector solo se dibuja 2 de cada 4 veces if (j != selector_pos_.at(panel_index) || time_counter_ % 4 >= 2) { - // Si está a la derecha del selector, se dibuja siempre - if (j >= selector_pos_.at(panel_index)) { - SDL_SetRenderDrawColor(renderer_, COLOR.r, COLOR.g, COLOR.b, 255); - SDL_RenderLine(renderer_, rect.x, rect.y + rect.h, rect.x + rect.w, rect.y + rect.h); - } + SDL_SetRenderDrawColor(renderer_, text_color1_.r, text_color1_.g, text_color1_.b, 255); + SDL_RenderLine(renderer_, rect.x, rect.y + rect.h, rect.x + rect.w, rect.y + rect.h); } - + // Dibuja la letra if (j < record_name_.at(panel_index).size()) { - text_scoreboard_->writeColored(rect.x, rect.y, record_name_.at(panel_index).substr(j, 1), COLOR); + enter_name_text_->writeColored(rect.x, rect.y, record_name_.at(panel_index).substr(j, 1), text_color2_); } - rect.x += 7; + rect.x += enter_name_text_->getCharacterSize(); } } void Scoreboard::renderShowNameMode(size_t panel_index) { // SCORE - text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_1_.x, slot4_1_.y, name_.at(panel_index), 1, text_color1_); - text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_2_.x, slot4_2_.y, updateScoreText(score_.at(panel_index)), 1, text_color2_); + text_->writeDX(Text::CENTER | Text::COLOR, slot4_1_.x, slot4_1_.y, name_.at(panel_index), 1, text_color1_); + text_->writeDX(Text::CENTER | Text::COLOR, slot4_2_.x, slot4_2_.y, updateScoreText(score_.at(panel_index)), 1, text_color2_); // NAME - text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_3_.x, slot4_3_.y, Lang::getText("[SCOREBOARD] 11"), 1, text_color1_); + text_->writeDX(Text::CENTER | Text::COLOR, slot4_3_.x, slot4_3_.y, Lang::getText("[SCOREBOARD] 11"), 1, text_color1_); - /* TEXTO CENTRADO */ - text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_4_.x, slot4_4_.y, record_name_.at(panel_index), 1, Colors::getColorLikeKnightRider(name_colors_, loop_counter_ / 5)); + // NOMBRE INTRODUCIDO + enter_name_text_->writeDX(Text::CENTER | Text::COLOR, slot4_4_.x, slot4_4_.y, record_name_.at(panel_index), 1, Colors::getColorLikeKnightRider(name_colors_, loop_counter_ / 5)); } void Scoreboard::renderGameCompletedMode(size_t panel_index) { // GAME OVER - text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_1_.x, slot4_1_.y + 4, Lang::getText("[SCOREBOARD] 7"), 1, text_color1_); + text_->writeDX(Text::CENTER | Text::COLOR, slot4_1_.x, slot4_1_.y + 4, Lang::getText("[SCOREBOARD] 7"), 1, text_color1_); // SCORE if (time_counter_ % 10 < 8) { - text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_3_.x, slot4_3_.y - 2, Lang::getText("[SCOREBOARD] 14"), 1, text_color1_); - text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_4_.x, slot4_4_.y - 2, updateScoreText(score_.at(panel_index)), 1, text_color2_); + text_->writeDX(Text::CENTER | Text::COLOR, slot4_3_.x, slot4_3_.y - 2, Lang::getText("[SCOREBOARD] 14"), 1, text_color1_); + text_->writeDX(Text::CENTER | Text::COLOR, slot4_4_.x, slot4_4_.y - 2, updateScoreText(score_.at(panel_index)), 1, text_color2_); } } @@ -377,7 +375,7 @@ void Scoreboard::recalculateAnchors() { slot4_4_ = {.x = COL, .y = ROW4}; // Primer cuadrado para poner el nombre de record - const int ENTER_NAME_LENGTH = text_scoreboard_->length(std::string(NAME_SIZE, 'A')); + const int ENTER_NAME_LENGTH = enter_name_text_->length(std::string(NAME_SIZE, 'A')); enter_name_pos_.x = COL - (ENTER_NAME_LENGTH / 2); enter_name_pos_.y = ROW4; diff --git a/source/scoreboard.h b/source/scoreboard.h index dbd6ff5..fb1f5cb 100644 --- a/source/scoreboard.h +++ b/source/scoreboard.h @@ -73,7 +73,8 @@ class Scoreboard { SDL_Renderer *renderer_; // El renderizador de la ventana std::shared_ptr game_power_meter_texture_; // Textura con el marcador de poder de la fase std::unique_ptr power_meter_sprite_; // Sprite para el medidor de poder de la fase - std::shared_ptr text_scoreboard_; // Fuente para el marcador del juego + std::shared_ptr text_; // Fuente para el marcador del juego + std::shared_ptr enter_name_text_; // Fuente para la introducción de nombre del jugador SDL_Texture *background_ = nullptr; // Textura para dibujar el marcador std::vector panel_texture_; // Texturas para dibujar cada panel diff --git a/source/sections/game.cpp b/source/sections/game.cpp index 0e515d1..07a05dc 100644 --- a/source/sections/game.cpp +++ b/source/sections/game.cpp @@ -285,11 +285,11 @@ void Game::updateStage() { if (current_stage_index == total_stages - 1) { // Penúltima fase (será la última) createMessage(paths, Resource::get()->getTexture("game_text_last_stage")); } else { - auto text = Resource::get()->getText("04b_25_2x"); + auto text = Resource::get()->getText("04b_25_2x_enhanced"); const std::string CAPTION = Lang::getText("[GAME_TEXT] 2") + std::to_string(total_stages - current_stage_index) + Lang::getText("[GAME_TEXT] 2A"); - createMessage(paths, text->writeToTexture(CAPTION, 1, -4)); + createMessage(paths, text->writeDXToTexture(Text::STROKE, CAPTION, -4, Colors::NO_COLOR_MOD, 1, param.game.item_text_outline_color)); } } @@ -1440,10 +1440,10 @@ void Game::handleNameInput(const std::shared_ptr &player) { } } else if (input_->checkAction(Input::Action::UP, Input::DO_NOT_ALLOW_REPEAT, player->getUsesKeyboard(), player->getGamepad())) { player->setInput(Input::Action::UP); - playSound("service_menu_move.wav"); - } else if (input_->checkAction(Input::Action::DOWN, Input::DO_NOT_ALLOW_REPEAT, player->getUsesKeyboard(), player->getGamepad())) { - player->setInput(Input::Action::DOWN); - playSound("service_menu_move.wav"); + playSound("service_menu_move.wav"); + } else if (input_->checkAction(Input::Action::DOWN, Input::DO_NOT_ALLOW_REPEAT, player->getUsesKeyboard(), player->getGamepad())) { + player->setInput(Input::Action::DOWN); + playSound("service_menu_move.wav"); } else if (input_->checkAction(Input::Action::START, Input::DO_NOT_ALLOW_REPEAT, player->getUsesKeyboard(), player->getGamepad())) { if (player->isShowingName()) { player->setPlayingState(Player::State::CONTINUE);