diff --git a/docs/audit-game.md b/docs/audit-game.md index cd96512..be76286 100644 --- a/docs/audit-game.md +++ b/docs/audit-game.md @@ -75,7 +75,7 @@ Els IDs es mantenen estables una vegada assignats. Cada entrada apunta al fitxer | ID | Fitxer:línia | Troballa | Severitat | Estat | Notes | |----|--------------|----------|-----------|-------|-------| | INCONS-01 | `game/*` | 3 estils de mòdul: namespace+inline (Options), classe all-static (Map), OOP (Player/Tilemap), namespace+constexpr (UiColor/Notification) | Importante | PENDING | Decidir i uniformar | -| INCONS-02 | `options.cpp:372,477,530,579,607` | `std::cerr` en comptes de `std::cout` (convenció del projecte) | Importante | PENDING | Substituir per `std::cout` prefixat | +| INCONS-02 | `options.cpp:372,477,530,579,607` | `std::cerr` en comptes de `std::cout` (convenció del projecte) | Importante | DONE | Totes les ocurrències (10, incloent les afegides a PATCH-04) substituïdes per `std::cout`. Test manual: amb config.yaml trencat el missatge de backup va per stdout | | INCONS-03 | `options.cpp` vs `tilemap.cpp:77-78` | Diferent política en YAML absent: `contains()` vs accés directe que llança | Menor | PENDING | Uniformar (llançar sempre si és un fitxer obligatori) | | INCONS-04 | `options.cpp`, `player.cpp` | Locals ALL-CAPS (`CONTENT`, `IT`, `DT`, `OLD_X`) barrejats amb `snake_case` | Menor | PENDING | Uniformar estil | | INCONS-05 | `options.cpp:420-430` | `Screen::Config` s'omple camp a camp mentre que `Audio::Config` fa `designated initializers` | Menor | PENDING | Uniformar | @@ -96,5 +96,5 @@ Els IDs es mantenen estables una vegada assignats. Cada entrada apunta al fitxer |----|--------------|----------|-----------|-------|-------| | CONV-01 | `player.*`, `map.*`, `ui/*`, `game_scene.cpp` | Speed, caixa de col·lisió, geometria, índexs paleta, rutes d'assets, nom del track: tot cablejat | Crítico | PENDING | Tapat parcialment per HC-01/02/03/05/06 | | CONV-02 | `map.*`, `options.*` | Interfaces+callbacks: `Map` simulated class, `Options` globals sense observers | Importante | PENDING | Cobert per PATCH-07 + COUP-03 | -| CONV-03 | `options.cpp` | `std::cerr` viola la regla "std::cout only" | Importante | PENDING | Duplicat d'INCONS-02 | +| CONV-03 | `options.cpp` | `std::cerr` viola la regla "std::cout only" | Importante | DONE | Resolt amb INCONS-02 | | CONV-04 | `player.cpp:27` | `SDL_GetKeyboardState` directe en `Player::update` (fuga de SDL al gameplay) | Menor | PENDING | Anar per `GlobalInputs`/`EventBuffer` | diff --git a/source/game/options.cpp b/source/game/options.cpp index 9289e00..727e2fe 100644 --- a/source/game/options.cpp +++ b/source/game/options.cpp @@ -87,7 +87,7 @@ namespace { std::ofstream dst(path + ".bak", std::ios::binary); if (!dst) { return; } dst << src.rdbuf(); - std::cerr << "Options: còpia de seguretat a " << path << ".bak\n"; + std::cout << "Options: còpia de seguretat a " << path << ".bak\n"; } void parseWindow(const fkyaml::node& yaml) { @@ -372,7 +372,7 @@ namespace { try { auto yaml = fkyaml::node::deserialize(CONTENT); if (!yaml.contains("presets") || !yaml["presets"].is_sequence()) { - std::cerr << "Options: " << kind_label << " manca `presets:`; reescrivint amb defaults.\n"; + std::cout << "Options: " << kind_label << " manca `presets:`; reescrivint amb defaults.\n"; backupFile(path); presets = defaults_fn(); return save_fn(); @@ -384,15 +384,15 @@ namespace { presets.push_back(preset); } if (presets.empty()) { - std::cerr << "Options: " << kind_label << " sense presets; reescrivint amb defaults.\n"; + std::cout << "Options: " << kind_label << " sense presets; reescrivint amb defaults.\n"; backupFile(path); presets = defaults_fn(); return save_fn(); } return true; } catch (const std::exception& e) { - std::cerr << "Options: error parsejant " << kind_label << ": " << e.what() << '\n'; - std::cerr << "Options: reescrivint el fitxer amb presets per defecte.\n"; + std::cout << "Options: error parsejant " << kind_label << ": " << e.what() << '\n'; + std::cout << "Options: reescrivint el fitxer amb presets per defecte.\n"; backupFile(path); presets = defaults_fn(); return save_fn(); @@ -449,7 +449,7 @@ namespace Options { // amb els defaults de la versió nova. El fitxer original queda // a `.bak` per si l'usuari volia preservar tuning manual. if (file_version != Texts::VERSION) { - std::cerr << "Options: config.yaml versió \"" << file_version + std::cout << "Options: config.yaml versió \"" << file_version << "\" != \"" << Texts::VERSION << "\"; reescrivint amb defaults.\n"; backupFile(config_file_path); return saveToFile(); @@ -462,8 +462,8 @@ namespace Options { parseAudio(yaml); return true; } catch (const std::exception& e) { - std::cerr << "Options: error parsejant config.yaml: " << e.what() << '\n'; - std::cerr << "Options: reescrivint el fitxer amb defaults.\n"; + std::cout << "Options: error parsejant config.yaml: " << e.what() << '\n'; + std::cout << "Options: reescrivint el fitxer amb defaults.\n"; backupFile(config_file_path); return saveToFile(); } @@ -610,7 +610,7 @@ namespace Options { const auto IT = std::ranges::find_if(crtpi_presets, [](const CrtPiPreset& preset) { return preset.name == video.shader.current_crtpi_preset; }); if (IT == crtpi_presets.end()) { - std::cerr << "Options: preset CrtPi \"" << video.shader.current_crtpi_preset << "\" no trobat; aplicant defaults.\n"; + std::cout << "Options: preset CrtPi \"" << video.shader.current_crtpi_preset << "\" no trobat; aplicant defaults.\n"; return {}; } return { @@ -638,7 +638,7 @@ namespace Options { const auto IT = std::ranges::find_if(postfx_presets, [](const PostFXPreset& preset) { return preset.name == video.shader.current_postfx_preset; }); if (IT == postfx_presets.end()) { - std::cerr << "Options: preset PostFX \"" << video.shader.current_postfx_preset << "\" no trobat; aplicant passthrough.\n"; + std::cout << "Options: preset PostFX \"" << video.shader.current_postfx_preset << "\" no trobat; aplicant passthrough.\n"; return {}; } return {