nou: musiqueta i veu per al game over i timings ajustats

This commit is contained in:
2025-09-26 17:20:35 +02:00
parent 0c670fd344
commit a40f04a739
4 changed files with 30 additions and 9 deletions

View File

@@ -64,6 +64,7 @@ SOUND|${PREFIX}/data/sound/title.wav
SOUND|${PREFIX}/data/sound/voice_aw_aw_aw.wav SOUND|${PREFIX}/data/sound/voice_aw_aw_aw.wav
SOUND|${PREFIX}/data/sound/voice_coffee.wav SOUND|${PREFIX}/data/sound/voice_coffee.wav
SOUND|${PREFIX}/data/sound/voice_credit_thankyou.wav SOUND|${PREFIX}/data/sound/voice_credit_thankyou.wav
SOUND|${PREFIX}/data/sound/voice_game_over.wav
SOUND|${PREFIX}/data/sound/voice_get_ready.wav SOUND|${PREFIX}/data/sound/voice_get_ready.wav
SOUND|${PREFIX}/data/sound/voice_no.wav SOUND|${PREFIX}/data/sound/voice_no.wav
SOUND|${PREFIX}/data/sound/voice_power_up.wav SOUND|${PREFIX}/data/sound/voice_power_up.wav

Binary file not shown.

View File

@@ -1043,7 +1043,7 @@ void Game::initPaths() {
paths_.emplace_back(createPath(X1, X2, PathType::HORIZONTAL, Y, 80, easeInQuint), 0); paths_.emplace_back(createPath(X1, X2, PathType::HORIZONTAL, Y, 80, easeInQuint), 0);
} }
// Recorrido para el texto de "Last Stage!" o de "X stages left" o "Game Over" (2,3) // Recorrido para el texto de "Last Stage!" o de "X stages left" (2,3)
{ {
const auto &texture = Resource::get()->getTexture("game_text_last_stage"); const auto &texture = Resource::get()->getTexture("game_text_last_stage");
const auto H = texture->getHeight(); const auto H = texture->getHeight();
@@ -1093,6 +1093,18 @@ void Game::initPaths() {
paths_.emplace_back(createPath(X0, X1, PathType::HORIZONTAL, Y, 80, easeOutQuint), 1.0f); paths_.emplace_back(createPath(X0, X1, PathType::HORIZONTAL, Y, 80, easeOutQuint), 1.0f);
paths_.emplace_back(createPath(X1, X2, PathType::HORIZONTAL, Y, 80, easeInQuint), 0); paths_.emplace_back(createPath(X1, X2, PathType::HORIZONTAL, Y, 80, easeInQuint), 0);
} }
// Recorrido para el texto de "Game Over" (10,11)
{
const auto &texture = Resource::get()->getTexture("game_text_game_over");
const auto H = texture->getHeight();
const int Y0 = param.game.play_area.rect.h - H;
const int Y1 = param.game.play_area.center_y - (H / 2);
const int Y2 = -H;
const int X = param.game.play_area.center_x;
paths_.emplace_back(createPath(Y0, Y1, PathType::VERTICAL, X, 80, easeOutQuint), 2.0f);
paths_.emplace_back(createPath(Y1, Y2, PathType::VERTICAL, X, 80, easeInQuint), 0);
}
} }
// Actualiza las variables de ayuda // Actualiza las variables de ayuda
@@ -1979,19 +1991,27 @@ void Game::handleGameCompletedEvents() {
// Maneja eventos de game over usando flag para trigger único // Maneja eventos de game over usando flag para trigger único
void Game::handleGameOverEvents() { void Game::handleGameOverEvents() {
static bool game_over_triggered = false; static bool game_over_trigger1 = false;
static bool game_over_trigger2 = false;
// Resetear // Resetear
if (game_over_timer_ == 0.0f) { if (game_over_timer_ == 0.0f) {
game_over_triggered = false; game_over_trigger1 = false;
game_over_trigger2 = false;
} }
if (!game_over_triggered && game_over_timer_ == 0.0f) { if (!game_over_trigger1 && game_over_timer_ == 0.0f) {
createMessage({paths_.at(2), paths_.at(3)}, Resource::get()->getTexture("game_text_game_over"));
Audio::get()->fadeOutMusic(1000); Audio::get()->fadeOutMusic(1000);
balloon_manager_->setBouncingSounds(true); balloon_manager_->setBouncingSounds(true);
game_over_triggered = true; game_over_trigger1 = true;
} }
if (!game_over_trigger2 && game_over_timer_ >= 1.5f) {
createMessage({paths_.at(10), paths_.at(11)}, Resource::get()->getTexture("game_text_game_over"));
playSound("voice_game_over.wav");
game_over_trigger2 = true;
}
} }
#ifdef _DEBUG #ifdef _DEBUG

View File

@@ -77,9 +77,9 @@ class Game {
static constexpr float HELP_COUNTER_S = 16.667f; // Contador de ayuda (1000 frames a 60fps → segundos) static constexpr float HELP_COUNTER_S = 16.667f; // Contador de ayuda (1000 frames a 60fps → segundos)
static constexpr float GAME_COMPLETED_START_FADE_S = 8.333f; // Inicio del fade al completar (500 frames → segundos) static constexpr float GAME_COMPLETED_START_FADE_S = 8.333f; // Inicio del fade al completar (500 frames → segundos)
static constexpr float GAME_COMPLETED_END_S = 11.667f; // Fin del juego completado (700 frames → segundos) static constexpr float GAME_COMPLETED_END_S = 11.667f; // Fin del juego completado (700 frames → segundos)
static constexpr float GAME_OVER_DURATION_S = 7.0f; // Duración game over (350 frames → segundos) static constexpr float GAME_OVER_DURATION_S = 8.5f;
static constexpr float TIME_STOPPED_DURATION_S = 6.0f; // Duración del tiempo detenido (360 frames → segundos) static constexpr float TIME_STOPPED_DURATION_S = 6.0f;
static constexpr float DEMO_FADE_PRE_DURATION_S = 0.5f; // Pre-duración del fade en modo demo static constexpr float DEMO_FADE_PRE_DURATION_S = 0.5f;
static constexpr int ITEM_POINTS_1_DISK_ODDS = 10; static constexpr int ITEM_POINTS_1_DISK_ODDS = 10;
static constexpr int ITEM_POINTS_2_GAVINA_ODDS = 6; static constexpr int ITEM_POINTS_2_GAVINA_ODDS = 6;
static constexpr int ITEM_POINTS_3_PACMAR_ODDS = 3; static constexpr int ITEM_POINTS_3_PACMAR_ODDS = 3;