From 7646daef3d355eb0dec32de109303ed99b4593d2 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Thu, 21 May 2026 18:58:33 +0200 Subject: [PATCH] =?UTF-8?q?tune(stages):=20stage=201=20a=2050=20enemics=20?= =?UTF-8?q?i=20puja=20el=20cap=20de=20validaci=C3=B3=20a=20200?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/stages/stages.yaml | 6 +- source/game/stage_system/stage_config.hpp | 94 +++++++++++------------ 2 files changed, 50 insertions(+), 50 deletions(-) diff --git a/data/stages/stages.yaml b/data/stages/stages.yaml index d2eee4f..4b0b610 100644 --- a/data/stages/stages.yaml +++ b/data/stages/stages.yaml @@ -9,11 +9,11 @@ metadata: stages: # STAGE 1: Tutorial - Only pentagons, slow speed - stage_id: 1 - total_enemies: 5 + total_enemies: 50 spawn_config: mode: "progressive" - initial_delay: 2.0 - spawn_interval: 3.0 + initial_delay: 0.3 + spawn_interval: 0.4 enemy_distribution: pentagon: 100 cuadrado: 0 diff --git a/source/game/stage_system/stage_config.hpp b/source/game/stage_system/stage_config.hpp index 2227bf9..c8665db 100644 --- a/source/game/stage_system/stage_config.hpp +++ b/source/game/stage_system/stage_config.hpp @@ -10,46 +10,46 @@ namespace StageSystem { -// Tipo de mode de spawn -enum class ModeSpawn : std::uint8_t { - PROGRESSIVE, // Spawn progressiu con intervals - IMMEDIATE, // Todos los enemigos de cop - WAVE // Onades de 3-5 enemigos (futura extensió) -}; + // Tipo de mode de spawn + enum class ModeSpawn : std::uint8_t { + PROGRESSIVE, // Spawn progressiu con intervals + IMMEDIATE, // Todos los enemigos de cop + WAVE // Onades de 3-5 enemigos (futura extensió) + }; -// Configuración de spawn -struct ConfigSpawn { + // Configuración de spawn + struct ConfigSpawn { ModeSpawn mode; float delay_inicial; // Segons antes del primer spawn float interval_spawn; // Segons entre spawns consecutius -}; + }; -// Distribució de type de enemigos (percentatges) -struct DistribucioEnemics { + // Distribució de type de enemigos (percentatges) + struct DistribucioEnemics { uint8_t pentagon; // 0-100 - uint8_t cuadrado; // 0-100 + uint8_t cuadrado; // 0-100 uint8_t molinillo; // 0-100 // Suma ha de ser 100, validat en StageLoader -}; + }; -// Multiplicadors de dificultat -struct MultiplicadorsDificultat { - float velocity; // 0.5-2.0 típic - float rotation; // 0.5-2.0 típic + // Multiplicadors de dificultat + struct MultiplicadorsDificultat { + float velocity; // 0.5-2.0 típic + float rotation; // 0.5-2.0 típic float tracking_strength; // 0.0-1.5 (aplicat a Cuadrado) -}; + }; -// Metadades del file YAML -struct MetadataStages { + // Metadades del file YAML + struct MetadataStages { std::string version; uint8_t total_stages; std::string descripcio; -}; + }; -// Configuración completa de un stage -struct StageConfig { + // Configuración completa de un stage + struct StageConfig { uint8_t stage_id; // 1-10 - uint8_t total_enemies; // 5-15 + uint8_t total_enemies; // 1-200 (el cap simultani en pantalla el marca MAX_ORNIS) ConfigSpawn config_spawn; DistribucioEnemics distribucio; MultiplicadorsDificultat multiplicadors; @@ -59,13 +59,13 @@ struct StageConfig { // stage_id es uint8_t: el rango superior (<=255) está garantizado por // el tipo; basta con confirmar que no es 0 (sentinela "sin asignar"). return stage_id >= 1 && - total_enemies > 0 && total_enemies <= 15 && + total_enemies > 0 && total_enemies <= 200 && distribucio.pentagon + distribucio.cuadrado + distribucio.molinillo == 100; } -}; + }; -// Configuración completa del sistema (carregada desde YAML) -struct StageSystemConfig { + // Configuración completa del sistema (carregada desde YAML) + struct StageSystemConfig { MetadataStages metadata; std::vector stages; // Índex [0] = stage 1 @@ -76,26 +76,26 @@ struct StageSystemConfig { } return &stages[stage_id - 1]; } -}; + }; -// Constants per messages de transición -namespace Constants { -// Pool de messages per start de level (selecció aleatòria) -inline constexpr std::array MISSATGES_LEVEL_START = { - "ORNI ALERT!", - "INCOMING ORNIS!", - "ROLLING THREAT!", - "ENEMY WAVE!", - "WAVE OF ORNIS DETECTED!", - "NEXT SWARM APPROACHING!", - "BRACE FOR THE NEXT WAVE!", - "ANOTHER ATTACK INCOMING!", - "SENSORS DETECT HOSTILE ORNIS...", - "UNIDENTIFIED ROLLING OBJECTS INBOUND!", - "ENEMY FORCES MOBILIZING!", - "PREPARE FOR IMPACT!"}; + // Constants per messages de transición + namespace Constants { + // Pool de messages per start de level (selecció aleatòria) + inline constexpr std::array MISSATGES_LEVEL_START = { + "ORNI ALERT!", + "INCOMING ORNIS!", + "ROLLING THREAT!", + "ENEMY WAVE!", + "WAVE OF ORNIS DETECTED!", + "NEXT SWARM APPROACHING!", + "BRACE FOR THE NEXT WAVE!", + "ANOTHER ATTACK INCOMING!", + "SENSORS DETECT HOSTILE ORNIS...", + "UNIDENTIFIED ROLLING OBJECTS INBOUND!", + "ENEMY FORCES MOBILIZING!", + "PREPARE FOR IMPACT!"}; -constexpr const char* MISSATGE_LEVEL_COMPLETED = "GOOD JOB COMMANDER!"; -} // namespace Constants + constexpr const char* MISSATGE_LEVEL_COMPLETED = "GOOD JOB COMMANDER!"; + } // namespace Constants } // namespace StageSystem