- eliminats accents en titols d'habitacions

- corregits fitxers .fnt (falta aseprite)
- corregint font_gent.py
- revisades algunes traduccions
This commit is contained in:
2026-03-29 09:48:58 +02:00
parent 754ad2de49
commit 145bab037f
32 changed files with 167 additions and 153 deletions

View File

@@ -105,24 +105,24 @@ columns 15
193 6 # Á 193 6 # Á
200 6 # È 200 6 # È
201 6 # É 201 6 # É
204 6 # Ì
205 6 # Í 205 6 # Í
207 6 # Ï
210 6 # Ò 210 6 # Ò
211 6 # Ó 211 6 # Ó
219 6 # Ù
218 6 # Ú 218 6 # Ú
220 6 # Ü
209 6 # Ñ 209 6 # Ñ
199 6 # Ç 199 6 # Ç
224 5 # à 224 5 # à
225 5 # á 225 5 # á
232 5 # è 232 5 # è
233 5 # é 233 5 # é
236 4 # ì
237 4 # í 237 4 # í
239 4 # ï
242 5 # ò 242 5 # ò
243 5 # ó 243 5 # ó
249 5 # ù
250 5 # ú 250 5 # ú
252 5 # ü
241 5 # ñ 241 5 # ñ
231 5 # ç 231 5 # ç
161 2 # ¡ 161 2 # ¡

View File

@@ -101,24 +101,24 @@ columns 15
193 6 # Á 193 6 # Á
200 7 # È 200 7 # È
201 7 # É 201 7 # É
204 6 # Ì
205 6 # Í 205 6 # Í
207 6 # Ï
210 7 # Ò 210 7 # Ò
211 7 # Ó 211 7 # Ó
217 6 # Ù
218 6 # Ú 218 6 # Ú
220 6 # Ü
209 7 # Ñ 209 7 # Ñ
199 7 # Ç 199 7 # Ç
224 6 # à 224 6 # à
225 6 # á 225 6 # á
232 7 # è 232 7 # è
233 7 # é 233 7 # é
236 6 # ì
237 6 # í 237 6 # í
239 6 # ï
242 7 # ò 242 7 # ò
243 7 # ó 243 7 # ó
249 6 # ù
250 6 # ú 250 6 # ú
252 6 # ü
241 7 # ñ 241 7 # ñ
231 7 # ç 231 7 # ç
161 2 # ¡ 161 2 # ¡

View File

@@ -105,24 +105,24 @@ columns 15
193 7 # Á 193 7 # Á
200 7 # È 200 7 # È
201 7 # É 201 7 # É
204 7 # Ì
205 7 # Í 205 7 # Í
207 7 # Ï
210 7 # Ò 210 7 # Ò
211 7 # Ó 211 7 # Ó
217 7 # Ù
218 7 # Ú 218 7 # Ú
220 7 # Ü
209 7 # Ñ 209 7 # Ñ
199 7 # Ç 199 7 # Ç
224 7 # à 224 7 # à
225 7 # á 225 7 # á
232 7 # è 232 7 # è
233 7 # é 233 7 # é
236 7 # ì
237 7 # í 237 7 # í
239 7 # ï
242 7 # ò 242 7 # ò
243 7 # ó 243 7 # ó
249 7 # ù
250 7 # ú 250 7 # ú
252 7 # ü
241 7 # ñ 241 7 # ñ
231 7 # ç 231 7 # ç
161 7 # ¡ 161 7 # ¡

View File

@@ -105,24 +105,24 @@ columns 15
193 5 # Á 193 5 # Á
200 4 # È 200 4 # È
201 4 # É 201 4 # É
204 1 # Ì
205 1 # Í 205 1 # Í
207 1 # Ï
210 5 # Ò 210 5 # Ò
211 5 # Ó 211 5 # Ó
217 5 # Ù
218 5 # Ú 218 5 # Ú
220 5 # Ü
209 5 # Ñ 209 5 # Ñ
199 5 # Ç 199 5 # Ç
224 4 # à 224 4 # à
225 4 # á 225 4 # á
232 4 # è 232 4 # è
233 4 # é 233 4 # é
236 1 # ì
237 1 # í 237 1 # í
239 1 # ï
242 4 # ò 242 4 # ò
243 4 # ó 243 4 # ó
249 4 # ù
250 4 # ú 250 4 # ú
252 4 # ü
241 4 # ñ 241 4 # ñ
231 3 # ç 231 3 # ç
161 1 # ¡ 161 1 # ¡

View File

@@ -2,7 +2,7 @@
# lang: ca # lang: ca
title: title:
marquee: "EI JAILERS!! ESTEM EN 2022 I ENCARA HO PETEM COM EN 1998!! QUÉ, HO HEU SENTIT O NO? ELS JAILGAMES HAN TORNAT!! SÍ, COLLONS, HAN TORNAT!! MÉS DE 10 TÍTOLS QUE EL JAILDOC TÉ A FOC LENT!! AIXÒ ÉS UNA BARBARITAT, PERÒ... QUIN EIXIRÀ PRIMER? I ATENCIÓ, QUE HI HA UN APARELLET NOU QUE VOS FARÀ VOLAR EL CAP: EL P.A.C.O.! PERÒ UN MOMENT... QUÈ ÉS AQUELLA COSETA QUE VE PER ALLÀ? OOOH, AQUELLA MINIASCII ÉS AMOR DEL BO!! LI PEGARIA UNA LLEPAETA A CADA BYTE! OSTRES! I NO VOS OBLIDEU DE PUJAR AQUELLS JAILGAMES VELLS I PANXUTS DE MS-DOS A GITHUB, QUE SI NO ES PERDRAN!! QUIN SERÀ EL PRÒXIM PROJECTE DE JAILDOC? SERÀ UN PROJECTE DE MERDA? AI MARE... NI IDEA, PERÒ ACÍ PODEU SABER-HO SI RESOLEU EL DILEMA DEL JAILDOCTOR... VOS ATREVIU O QUÈ? VAAAAA!!!" marquee: "EI JAILERS!! ESTEM EN 2022 I ENCARA HO PETEM COM EN 1998!! QUÉ, HO HEU SENTIT O NO? ELS JAILGAMES HAN TORNAT!! SÍ, COLLONS, HAN TORNAT!! MÉS DE 10 TÍTOLS QUE EL JAILDOC TÉ EN LA CUINA A FOC LENT!! MOLT LENT!! AIXÒ ÉS UNA BARBARITAT, PERÒ... QUIN EIXIRÀ PRIMER? I ATENCIÓ, QUE HI HA UN APARELLET NOU QUE VOS FARÀ VOLAR EL CAP: EL P.A.C.O.! PERÒ UN MOMENT... QUÈ ÉS AQUELLA COSETA QUE VE PER ALLÀ? OOOH, AQUELLA MINIASCII ÉS AMOR DEL BO!! LI PEGARIA UNA LLEPAETA A CADA BYTE! OSTRES! I NO VOS OBLIDEU DE PUJAR AQUELLS JAILGAMES VELLS I PANXUTS DE MS-DOS A GITHUB, QUE SI NO ES PERDRAN!! QUIN SERÀ EL PRÒXIM PROJECTE DE JAILDOC? SERÀ UN PROJECTE DE MERDA? AI MARE... NI IDEA, PERÒ ACÍ PODEU SABER-HO SI RESOLEU EL DILEMA DEL JAILDOCTOR... VOS ATREVIU O QUÈ? VAAAAA!!!"
menu: menu:
play: "1. JUGAR" play: "1. JUGAR"
keyboard: "2. REDEFINIR TECLES" keyboard: "2. REDEFINIR TECLES"

View File

@@ -1,7 +1,7 @@
# ROAD TO THE JAIL # ROAD TO THE JAIL
room: room:
name_en: "ROAD TO THE JAIL" name_en: "ROAD TO THE JAIL"
name_ca: "CAMÍ A LA JAIL" name_ca: "CAMI A LA JAIL"
bgColor: black bgColor: black
border: blue border: blue
tileSetFile: standard.gif tileSetFile: standard.gif

View File

@@ -1,7 +1,7 @@
# JUMP THROUGH # JUMP THROUGH
room: room:
name_en: "JUMP THROUGH" name_en: "JUMP THROUGH"
name_ca: "SALTA A TRAVÉS" name_ca: "SALTA A TRAVES"
bgColor: black bgColor: black
border: cyan border: cyan
tileSetFile: standard.gif tileSetFile: standard.gif

View File

@@ -1,7 +1,7 @@
# THE GARDEN # THE GARDEN
room: room:
name_en: "THE GARDEN" name_en: "THE GARDEN"
name_ca: "EL JARDÍ" name_ca: "EL JARDI"
bgColor: black bgColor: black
border: cyan border: cyan
tileSetFile: standard.gif tileSetFile: standard.gif

View File

@@ -1,7 +1,7 @@
# YOU SHALL NOT PASS # YOU SHALL NOT PASS
room: room:
name_en: "YOU SHALL NOT PASS" name_en: "YOU SHALL NOT PASS"
name_ca: "NO PASSARÀS" name_ca: "NO PASSARAS"
bgColor: bright_black bgColor: bright_black
border: black border: black
tileSetFile: standard.gif tileSetFile: standard.gif

View File

@@ -1,7 +1,7 @@
# QVOID IS A JAILGAME! # QVOID IS A JAILGAME!
room: room:
name_en: "QVOID IS A JAILGAME!" name_en: "QVOID IS A JAILGAME!"
name_ca: "QVOID ÉS UN JAILGAME!" name_ca: "QVOID ES UN JAILGAME!"
bgColor: blue bgColor: blue
border: bright_black border: bright_black
tileSetFile: standard.gif tileSetFile: standard.gif

View File

@@ -1,7 +1,7 @@
# YOU'LL BELIEVE AROUNDER CAN FLY # YOU'LL BELIEVE AROUNDER CAN FLY
room: room:
name_en: "YOU'LL BELIEVE AROUNDER CAN FLY" name_en: "YOU'LL BELIEVE AROUNDER CAN FLY"
name_ca: "CREURÀS QUE ELS AROUNDERS VOLEN" name_ca: "CREURAS QUE ELS AROUNDERS VOLEN"
bgColor: black bgColor: black
border: cyan border: cyan
tileSetFile: standard.gif tileSetFile: standard.gif

View File

@@ -1,7 +1,7 @@
# PREVENT THE CRISIS # PREVENT THE CRISIS
room: room:
name_en: "PREVENT THE CRISIS" name_en: "PREVENT THE CRISIS"
name_ca: "PREVÉ LA CRISI" name_ca: "EVITA LA CRISI"
bgColor: black bgColor: black
border: bright_magenta border: bright_magenta
tileSetFile: standard.gif tileSetFile: standard.gif

View File

@@ -1,7 +1,7 @@
# SANDWITCH AND COUNTER # SANDWITCH AND COUNTER
room: room:
name_en: "SANDWITCH AND COUNTER" name_en: "SANDWITCH AND COUNTER"
name_ca: "SANDVITX I COUNTER S." name_ca: "SANDVITX I COUNTER STRIKE"
bgColor: black bgColor: black
border: cyan border: cyan
tileSetFile: standard.gif tileSetFile: standard.gif

View File

@@ -1,7 +1,7 @@
# FEEL THE PRESSURE # FEEL THE PRESSURE
room: room:
name_en: "FEEL THE PRESSURE" name_en: "FEEL THE PRESSURE"
name_ca: "NOTA LA PRESSIÓ" name_ca: "NOTA LA PRESSIO"
bgColor: bright_black bgColor: bright_black
border: bright_yellow border: bright_yellow
tileSetFile: standard.gif tileSetFile: standard.gif

View File

@@ -1,7 +1,7 @@
# P.A.C.O. WORKSHOP # P.A.C.O. WORKSHOP
room: room:
name_en: "P.A.C.O. WORKSHOP" name_en: "P.A.C.O. WORKSHOP"
name_ca: "TALLER DE P.A.C.O." name_ca: "EL TALLER DE P.A.C.O."
bgColor: black bgColor: black
border: yellow border: yellow
tileSetFile: standard.gif tileSetFile: standard.gif

View File

@@ -1,7 +1,7 @@
# THAT'S A GUITAR # THAT'S A GUITAR
room: room:
name_en: "THAT'S A GUITAR" name_en: "THAT'S A GUITAR"
name_ca: "AIXÒ ÉS UNA GUITARRA" name_ca: "AIXO ES UNA GUITARRA"
bgColor: black bgColor: black
border: black border: black
tileSetFile: standard.gif tileSetFile: standard.gif

View File

@@ -1,7 +1,7 @@
# STATIC # STATIC
room: room:
name_en: "STATIC" name_en: "STATIC"
name_ca: "ESTÀTICA" name_ca: "ESTATICA"
bgColor: black bgColor: black
border: bright_magenta border: bright_magenta
tileSetFile: standard.gif tileSetFile: standard.gif

View File

@@ -1,7 +1,7 @@
# MAGNETIC FIELDS # MAGNETIC FIELDS
room: room:
name_en: "MAGNETIC FIELDS" name_en: "MAGNETIC FIELDS"
name_ca: "CAMPS MAGNÈTICS" name_ca: "CAMPS MAGNETICS"
bgColor: black bgColor: black
border: bright_red border: bright_red
tileSetFile: standard.gif tileSetFile: standard.gif

View File

@@ -573,20 +573,20 @@ void Screen::applyCurrentCrtPiPreset() { // NOLINT(readability-convert-member-f
if (shader_backend_ && !Options::crtpi_presets.empty()) { if (shader_backend_ && !Options::crtpi_presets.empty()) {
const auto& p = Options::crtpi_presets[static_cast<size_t>(Options::current_crtpi_preset)]; const auto& p = Options::crtpi_presets[static_cast<size_t>(Options::current_crtpi_preset)];
Rendering::CrtPiParams params{ Rendering::CrtPiParams params{
.scanline_weight = p.scanline_weight, .scanline_weight = p.scanline_weight,
.scanline_gap_brightness = p.scanline_gap_brightness, .scanline_gap_brightness = p.scanline_gap_brightness,
.bloom_factor = p.bloom_factor, .bloom_factor = p.bloom_factor,
.input_gamma = p.input_gamma, .input_gamma = p.input_gamma,
.output_gamma = p.output_gamma, .output_gamma = p.output_gamma,
.mask_brightness = p.mask_brightness, .mask_brightness = p.mask_brightness,
.curvature_x = p.curvature_x, .curvature_x = p.curvature_x,
.curvature_y = p.curvature_y, .curvature_y = p.curvature_y,
.mask_type = p.mask_type, .mask_type = p.mask_type,
.enable_scanlines = p.enable_scanlines, .enable_scanlines = p.enable_scanlines,
.enable_multisample = p.enable_multisample, .enable_multisample = p.enable_multisample,
.enable_gamma = p.enable_gamma, .enable_gamma = p.enable_gamma,
.enable_curvature = p.enable_curvature, .enable_curvature = p.enable_curvature,
.enable_sharper = p.enable_sharper, .enable_sharper = p.enable_sharper,
}; };
shader_backend_->setCrtPiParams(params); shader_backend_->setCrtPiParams(params);
} }

View File

@@ -10,7 +10,7 @@
#include <vector> // Para vector #include <vector> // Para vector
#include "core/rendering/shader_backend.hpp" // Para Rendering::ShaderType, ShaderBackend #include "core/rendering/shader_backend.hpp" // Para Rendering::ShaderType, ShaderBackend
#include "utils/utils.hpp" // Para Color #include "utils/utils.hpp" // Para Color
class Surface; class Surface;
class Text; class Text;
@@ -52,17 +52,17 @@ class Screen {
void toggleBorder(); // Cambia entre borde visible y no visible void toggleBorder(); // Cambia entre borde visible y no visible
// Paletas y PostFX // Paletas y PostFX
void nextPalette(); // Cambia a la siguiente paleta void nextPalette(); // Cambia a la siguiente paleta
void previousPalette(); // Cambia a la paleta anterior void previousPalette(); // Cambia a la paleta anterior
void setPalete(); // Establece la paleta actual void setPalete(); // Establece la paleta actual
void toggleShaders(); // Activa/desactiva todos los shaders respetando current_shader void toggleShaders(); // Activa/desactiva todos los shaders respetando current_shader
void toggleSupersampling(); // Activa/desactiva el supersampling global void toggleSupersampling(); // Activa/desactiva el supersampling global
void reloadPostFX(); // Recarga el shader del preset actual sin toggle void reloadPostFX(); // Recarga el shader del preset actual sin toggle
void reloadCrtPi(); // Recarga el shader CrtPi del preset actual sin toggle void reloadCrtPi(); // Recarga el shader CrtPi del preset actual sin toggle
void setLinearUpscale(bool linear); // Upscale NEAREST (false) o LINEAR (true) en el paso SS void setLinearUpscale(bool linear); // Upscale NEAREST (false) o LINEAR (true) en el paso SS
void setDownscaleAlgo(int algo); // 0=bilinear legacy, 1=Lanczos2, 2=Lanczos3 void setDownscaleAlgo(int algo); // 0=bilinear legacy, 1=Lanczos2, 2=Lanczos3
void setActiveShader(Rendering::ShaderType type); // Cambia el shader de post-procesado activo void setActiveShader(Rendering::ShaderType type); // Cambia el shader de post-procesado activo
void nextShader(); // Cicla al siguiente shader disponible (para futura UI) void nextShader(); // Cicla al siguiente shader disponible (para futura UI)
// Surfaces y notificaciones // Surfaces y notificaciones
void setRendererSurface(const std::shared_ptr<Surface>& surface = nullptr); // Establece el renderizador para las surfaces void setRendererSurface(const std::shared_ptr<Surface>& surface = nullptr); // Establece el renderizador para las surfaces

View File

@@ -1123,20 +1123,20 @@ namespace Rendering {
} }
void SDL3GPUShader::setCrtPiParams(const CrtPiParams& p) { void SDL3GPUShader::setCrtPiParams(const CrtPiParams& p) {
crtpi_uniforms_.scanline_weight = p.scanline_weight; crtpi_uniforms_.scanline_weight = p.scanline_weight;
crtpi_uniforms_.scanline_gap_brightness = p.scanline_gap_brightness; crtpi_uniforms_.scanline_gap_brightness = p.scanline_gap_brightness;
crtpi_uniforms_.bloom_factor = p.bloom_factor; crtpi_uniforms_.bloom_factor = p.bloom_factor;
crtpi_uniforms_.input_gamma = p.input_gamma; crtpi_uniforms_.input_gamma = p.input_gamma;
crtpi_uniforms_.output_gamma = p.output_gamma; crtpi_uniforms_.output_gamma = p.output_gamma;
crtpi_uniforms_.mask_brightness = p.mask_brightness; crtpi_uniforms_.mask_brightness = p.mask_brightness;
crtpi_uniforms_.curvature_x = p.curvature_x; crtpi_uniforms_.curvature_x = p.curvature_x;
crtpi_uniforms_.curvature_y = p.curvature_y; crtpi_uniforms_.curvature_y = p.curvature_y;
crtpi_uniforms_.mask_type = p.mask_type; crtpi_uniforms_.mask_type = p.mask_type;
crtpi_uniforms_.enable_scanlines = p.enable_scanlines ? 1 : 0; crtpi_uniforms_.enable_scanlines = p.enable_scanlines ? 1 : 0;
crtpi_uniforms_.enable_multisample = p.enable_multisample ? 1 : 0; crtpi_uniforms_.enable_multisample = p.enable_multisample ? 1 : 0;
crtpi_uniforms_.enable_gamma = p.enable_gamma ? 1 : 0; crtpi_uniforms_.enable_gamma = p.enable_gamma ? 1 : 0;
crtpi_uniforms_.enable_curvature = p.enable_curvature ? 1 : 0; crtpi_uniforms_.enable_curvature = p.enable_curvature ? 1 : 0;
crtpi_uniforms_.enable_sharper = p.enable_sharper ? 1 : 0; crtpi_uniforms_.enable_sharper = p.enable_sharper ? 1 : 0;
// texture_width/height se inyectan en render() cada frame // texture_width/height se inyectan en render() cada frame
} }

View File

@@ -33,20 +33,20 @@ struct CrtPiUniforms {
float bloom_factor; // Factor brillo zonas iluminadas (default 3.5) float bloom_factor; // Factor brillo zonas iluminadas (default 3.5)
float input_gamma; // Gamma de entrada (default 2.4) float input_gamma; // Gamma de entrada (default 2.4)
// vec4 #1 // vec4 #1
float output_gamma; // Gamma de salida (default 2.2) float output_gamma; // Gamma de salida (default 2.2)
float mask_brightness; // Brillo sub-píxeles máscara (default 0.80) float mask_brightness; // Brillo sub-píxeles máscara (default 0.80)
float curvature_x; // Distorsión barrel X (default 0.05) float curvature_x; // Distorsión barrel X (default 0.05)
float curvature_y; // Distorsión barrel Y (default 0.10) float curvature_y; // Distorsión barrel Y (default 0.10)
// vec4 #2 // vec4 #2
int mask_type; // 0=ninguna, 1=verde/magenta, 2=RGB fósforo int mask_type; // 0=ninguna, 1=verde/magenta, 2=RGB fósforo
int enable_scanlines; // 0 = off, 1 = on int enable_scanlines; // 0 = off, 1 = on
int enable_multisample; // 0 = off, 1 = on (antialiasing analítico) int enable_multisample; // 0 = off, 1 = on (antialiasing analítico)
int enable_gamma; // 0 = off, 1 = on int enable_gamma; // 0 = off, 1 = on
// vec4 #3 // vec4 #3
int enable_curvature; // 0 = off, 1 = on int enable_curvature; // 0 = off, 1 = on
int enable_sharper; // 0 = off, 1 = on int enable_sharper; // 0 = off, 1 = on
float texture_width; // Ancho del canvas en píxeles (inyectado en render) float texture_width; // Ancho del canvas en píxeles (inyectado en render)
float texture_height; // Alto del canvas en píxeles (inyectado en render) float texture_height; // Alto del canvas en píxeles (inyectado en render)
}; };
// Downscale uniforms pushed to the Lanczos downscale fragment stage. // Downscale uniforms pushed to the Lanczos downscale fragment stage.

View File

@@ -8,7 +8,8 @@
namespace Rendering { namespace Rendering {
/** @brief Identificador del shader de post-procesado activo */ /** @brief Identificador del shader de post-procesado activo */
enum class ShaderType { POSTFX, CRTPI }; enum class ShaderType { POSTFX,
CRTPI };
/** /**
* @brief Parámetros de intensidad de los efectos PostFX * @brief Parámetros de intensidad de los efectos PostFX
@@ -38,12 +39,12 @@ namespace Rendering {
float mask_brightness{0.80F}; // Sub-píxeles tenues en la máscara de fósforo float mask_brightness{0.80F}; // Sub-píxeles tenues en la máscara de fósforo
float curvature_x{0.05F}; // Distorsión barrel eje X float curvature_x{0.05F}; // Distorsión barrel eje X
float curvature_y{0.10F}; // Distorsión barrel eje Y float curvature_y{0.10F}; // Distorsión barrel eje Y
int mask_type{2}; // 0=ninguna, 1=verde/magenta, 2=RGB fósforo int mask_type{2}; // 0=ninguna, 1=verde/magenta, 2=RGB fósforo
bool enable_scanlines{true}; // Activar efecto de scanlines bool enable_scanlines{true}; // Activar efecto de scanlines
bool enable_multisample{true}; // Antialiasing analítico de scanlines bool enable_multisample{true}; // Antialiasing analítico de scanlines
bool enable_gamma{true}; // Corrección gamma bool enable_gamma{true}; // Corrección gamma
bool enable_curvature{false}; // Distorsión barrel CRT bool enable_curvature{false}; // Distorsión barrel CRT
bool enable_sharper{false}; // Submuestreo más nítido (modo SHARPER) bool enable_sharper{false}; // Submuestreo más nítido (modo SHARPER)
}; };
/** /**

View File

@@ -95,10 +95,10 @@ void Debug::setDebugFile(const std::string& path) {
// Carga la configuración de debug desde debug.yaml // Carga la configuración de debug desde debug.yaml
void Debug::loadFromFile() { void Debug::loadFromFile() {
// Inicializar con valores de release por defecto // Inicializar con valores de release por defecto
spawn_settings_.room = Defaults::Game::Room::INITIAL; spawn_settings_.room = Defaults::Game::Room::INITIAL;
spawn_settings_.spawn_x = Defaults::Game::Player::SPAWN_X; spawn_settings_.spawn_x = Defaults::Game::Player::SPAWN_X;
spawn_settings_.spawn_y = Defaults::Game::Player::SPAWN_Y; spawn_settings_.spawn_y = Defaults::Game::Player::SPAWN_Y;
spawn_settings_.flip = Defaults::Game::Player::SPAWN_FLIP; spawn_settings_.flip = Defaults::Game::Player::SPAWN_FLIP;
std::ifstream file(debug_file_path_); std::ifstream file(debug_file_path_);
if (!file.good()) { if (!file.good()) {
@@ -126,10 +126,10 @@ void Debug::loadFromFile() {
} }
} catch (...) { } catch (...) {
// YAML inválido: resetear a defaults y sobreescribir // YAML inválido: resetear a defaults y sobreescribir
spawn_settings_.room = Defaults::Game::Room::INITIAL; spawn_settings_.room = Defaults::Game::Room::INITIAL;
spawn_settings_.spawn_x = Defaults::Game::Player::SPAWN_X; spawn_settings_.spawn_x = Defaults::Game::Player::SPAWN_X;
spawn_settings_.spawn_y = Defaults::Game::Player::SPAWN_Y; spawn_settings_.spawn_y = Defaults::Game::Player::SPAWN_Y;
spawn_settings_.flip = Defaults::Game::Player::SPAWN_FLIP; spawn_settings_.flip = Defaults::Game::Player::SPAWN_FLIP;
saveToFile(); saveToFile();
} }
} }

View File

@@ -28,21 +28,21 @@ class Debug {
[[nodiscard]] auto isEnabled() const -> bool { return enabled_; } // Obtiene si el debug está activo [[nodiscard]] auto isEnabled() const -> bool { return enabled_; } // Obtiene si el debug está activo
void add(const std::string& text) { slot_.push_back(text); } // Añade texto one-shot al slot (se limpia cada frame) void add(const std::string& text) { slot_.push_back(text); } // Añade texto one-shot al slot (se limpia cada frame)
void clear() { slot_.clear(); } // Limpia el slot one-shot (no afecta a watches) void clear() { slot_.clear(); } // Limpia el slot one-shot (no afecta a watches)
void addToLog(const std::string& text) { log_.push_back(text); } // Añade texto al log void addToLog(const std::string& text) { log_.push_back(text); } // Añade texto al log
void clearLog() { log_.clear(); } // Limpia el log void clearLog() { log_.clear(); } // Limpia el log
void set(const std::string& key, const std::string& value); // Establece/actualiza un valor persistente en el watch window void set(const std::string& key, const std::string& value); // Establece/actualiza un valor persistente en el watch window
void unset(const std::string& key); // Elimina un valor del watch window void unset(const std::string& key); // Elimina un valor del watch window
void clearWatches() { watches_.clear(); } // Limpia todos los watches void clearWatches() { watches_.clear(); } // Limpia todos los watches
void setEnabled(bool value) { enabled_ = value; } // Establece si el debug está activo void setEnabled(bool value) { enabled_ = value; } // Establece si el debug está activo
void toggleEnabled() { enabled_ = !enabled_; } // Alterna el estado del debug void toggleEnabled() { enabled_ = !enabled_; } // Alterna el estado del debug
void setDebugFile(const std::string& path); // Establece la ruta del archivo debug.yaml void setDebugFile(const std::string& path); // Establece la ruta del archivo debug.yaml
void loadFromFile(); // Carga la configuración de debug desde debug.yaml void loadFromFile(); // Carga la configuración de debug desde debug.yaml
void saveToFile() const; // Guarda la configuración de debug en debug.yaml void saveToFile() const; // Guarda la configuración de debug en debug.yaml
[[nodiscard]] auto getSpawnSettings() const -> const SpawnSettings& { return spawn_settings_; } // Obtiene los valores de spawn [[nodiscard]] auto getSpawnSettings() const -> const SpawnSettings& { return spawn_settings_; } // Obtiene los valores de spawn
void setSpawnSettings(const SpawnSettings& s) { spawn_settings_ = s; } // Establece los valores de spawn void setSpawnSettings(const SpawnSettings& s) { spawn_settings_ = s; } // Establece los valores de spawn
private: private:
static Debug* debug; // [SINGLETON] Objeto privado static Debug* debug; // [SINGLETON] Objeto privado
@@ -54,11 +54,11 @@ class Debug {
std::map<std::string, std::string> watches_; // Watch window: valores persistentes (key→value) std::map<std::string, std::string> watches_; // Watch window: valores persistentes (key→value)
std::vector<std::string> slot_; // One-shot: textos que se limpian cada frame std::vector<std::string> slot_; // One-shot: textos que se limpian cada frame
std::vector<std::string> log_; // Log persistente std::vector<std::string> log_; // Log persistente
int x_ = 0; // Posicion donde escribir el texto de debug int x_ = 0; // Posicion donde escribir el texto de debug
int y_ = 0; // Posición donde escribir el texto de debug int y_ = 0; // Posición donde escribir el texto de debug
bool enabled_ = false; // Indica si esta activo el modo debug bool enabled_ = false; // Indica si esta activo el modo debug
std::string debug_file_path_; // Ruta del archivo debug.yaml std::string debug_file_path_; // Ruta del archivo debug.yaml
SpawnSettings spawn_settings_; // Configuración de spawn para debug SpawnSettings spawn_settings_; // Configuración de spawn para debug
}; };
#endif // _DEBUG #endif // _DEBUG

View File

@@ -84,8 +84,8 @@ void Player::move(float delta_time) {
} }
syncSpriteAndCollider(); // Actualiza la posición del sprite y las colisiones syncSpriteAndCollider(); // Actualiza la posición del sprite y las colisiones
#ifdef _DEBUG #ifdef _DEBUG
Debug::get()->set("P.X", std::to_string(static_cast<int>(x_))); Debug::get()->set("P.X", std::to_string(static_cast<int>(x_)));
Debug::get()->set("P.Y", std::to_string(static_cast<int>(y_))); Debug::get()->set("P.Y", std::to_string(static_cast<int>(y_)));
Debug::get()->set("P.LGP", std::to_string(last_grounded_position_)); Debug::get()->set("P.LGP", std::to_string(last_grounded_position_));
switch (state_) { switch (state_) {
case State::ON_GROUND: case State::ON_GROUND:
@@ -288,9 +288,9 @@ void Player::moveOnSlope(float delta_time) {
const bool OUT_OF_BOUNDS = (X < MIN_X) || (X > MAX_X); const bool OUT_OF_BOUNDS = (X < MIN_X) || (X > MAX_X);
#ifdef _DEBUG #ifdef _DEBUG
Debug::get()->set("sl.foot", std::to_string(X)); Debug::get()->set("sl.foot", std::to_string(X));
Debug::get()->set("sl.y_c", std::to_string(static_cast<int>(y_))); Debug::get()->set("sl.y_c", std::to_string(static_cast<int>(y_)));
Debug::get()->set("sl.oob", OUT_OF_BOUNDS ? "YES" : "ok"); Debug::get()->set("sl.oob", OUT_OF_BOUNDS ? "YES" : "ok");
#endif #endif
if (OUT_OF_BOUNDS) { if (OUT_OF_BOUNDS) {
@@ -593,7 +593,6 @@ void Player::updateCurrentSlope() {
} }
} }
#ifdef _DEBUG #ifdef _DEBUG
if (current_slope_ != nullptr) { if (current_slope_ != nullptr) {
Debug::get()->set("sl.type", isLeftSlope() ? "L\\" : "R/"); Debug::get()->set("sl.type", isLeftSlope() ? "L\\" : "R/");

View File

@@ -14,5 +14,5 @@ namespace GameControl {
inline std::function<std::string()> set_initial_room; inline std::function<std::string()> set_initial_room;
// Registrada por Game::Game() — guarda la posición/flip actuales del jugador como posición de inicio en debug.yaml // Registrada por Game::Game() — guarda la posición/flip actuales del jugador como posición de inicio en debug.yaml
inline std::function<std::string()> set_initial_pos; inline std::function<std::string()> set_initial_pos;
} } // namespace GameControl
#endif #endif

View File

@@ -998,9 +998,9 @@ namespace Options {
} }
// Cargar defaults en memoria aunque no se pueda escribir // Cargar defaults en memoria aunque no se pueda escribir
crtpi_presets.push_back({"DEFAULT", 6.0F, 0.12F, 3.5F, 2.4F, 2.2F, 0.80F, 0.05F, 0.10F, 2, true, true, true, false, false}); crtpi_presets.push_back({"DEFAULT", 6.0F, 0.12F, 3.5F, 2.4F, 2.2F, 0.80F, 0.05F, 0.10F, 2, true, true, true, false, false});
crtpi_presets.push_back({"CURVED", 6.0F, 0.12F, 3.5F, 2.4F, 2.2F, 0.80F, 0.05F, 0.10F, 2, true, true, true, true, false}); crtpi_presets.push_back({"CURVED", 6.0F, 0.12F, 3.5F, 2.4F, 2.2F, 0.80F, 0.05F, 0.10F, 2, true, true, true, true, false});
crtpi_presets.push_back({"SHARP", 6.0F, 0.12F, 3.5F, 2.4F, 2.2F, 0.80F, 0.05F, 0.10F, 2, true, false, true, false, true}); crtpi_presets.push_back({"SHARP", 6.0F, 0.12F, 3.5F, 2.4F, 2.2F, 0.80F, 0.05F, 0.10F, 2, true, false, true, false, true});
crtpi_presets.push_back({"MINIMAL", 8.0F, 0.05F, 2.0F, 2.4F, 2.2F, 1.00F, 0.0F, 0.0F, 0, true, false, false, false, false}); crtpi_presets.push_back({"MINIMAL", 8.0F, 0.05F, 2.0F, 2.4F, 2.2F, 1.00F, 0.0F, 0.0F, 0, true, false, false, false, false});
current_crtpi_preset = 0; current_crtpi_preset = 0;
return true; return true;
} }
@@ -1081,9 +1081,9 @@ namespace Options {
std::cout << "CrtPi file created with defaults: " << crtpi_file_path << '\n'; std::cout << "CrtPi file created with defaults: " << crtpi_file_path << '\n';
} }
crtpi_presets.push_back({"DEFAULT", 6.0F, 0.12F, 3.5F, 2.4F, 2.2F, 0.80F, 0.05F, 0.10F, 2, true, true, true, false, false}); crtpi_presets.push_back({"DEFAULT", 6.0F, 0.12F, 3.5F, 2.4F, 2.2F, 0.80F, 0.05F, 0.10F, 2, true, true, true, false, false});
crtpi_presets.push_back({"CURVED", 6.0F, 0.12F, 3.5F, 2.4F, 2.2F, 0.80F, 0.05F, 0.10F, 2, true, true, true, true, false}); crtpi_presets.push_back({"CURVED", 6.0F, 0.12F, 3.5F, 2.4F, 2.2F, 0.80F, 0.05F, 0.10F, 2, true, true, true, true, false});
crtpi_presets.push_back({"SHARP", 6.0F, 0.12F, 3.5F, 2.4F, 2.2F, 0.80F, 0.05F, 0.10F, 2, true, false, true, false, true}); crtpi_presets.push_back({"SHARP", 6.0F, 0.12F, 3.5F, 2.4F, 2.2F, 0.80F, 0.05F, 0.10F, 2, true, false, true, false, true});
crtpi_presets.push_back({"MINIMAL", 8.0F, 0.05F, 2.0F, 2.4F, 2.2F, 1.00F, 0.0F, 0.0F, 0, true, false, false, false, false}); crtpi_presets.push_back({"MINIMAL", 8.0F, 0.05F, 2.0F, 2.4F, 2.2F, 1.00F, 0.0F, 0.0F, 0, true, false, false, false, false});
current_crtpi_preset = 0; current_crtpi_preset = 0;
return true; return true;
} }
@@ -1110,22 +1110,34 @@ namespace Options {
parseFloatField(p, "curvature_x", preset.curvature_x); parseFloatField(p, "curvature_x", preset.curvature_x);
parseFloatField(p, "curvature_y", preset.curvature_y); parseFloatField(p, "curvature_y", preset.curvature_y);
if (p.contains("mask_type")) { if (p.contains("mask_type")) {
try { preset.mask_type = p["mask_type"].get_value<int>(); } catch (...) {} try {
preset.mask_type = p["mask_type"].get_value<int>();
} catch (...) {}
} }
if (p.contains("enable_scanlines")) { if (p.contains("enable_scanlines")) {
try { preset.enable_scanlines = p["enable_scanlines"].get_value<bool>(); } catch (...) {} try {
preset.enable_scanlines = p["enable_scanlines"].get_value<bool>();
} catch (...) {}
} }
if (p.contains("enable_multisample")) { if (p.contains("enable_multisample")) {
try { preset.enable_multisample = p["enable_multisample"].get_value<bool>(); } catch (...) {} try {
preset.enable_multisample = p["enable_multisample"].get_value<bool>();
} catch (...) {}
} }
if (p.contains("enable_gamma")) { if (p.contains("enable_gamma")) {
try { preset.enable_gamma = p["enable_gamma"].get_value<bool>(); } catch (...) {} try {
preset.enable_gamma = p["enable_gamma"].get_value<bool>();
} catch (...) {}
} }
if (p.contains("enable_curvature")) { if (p.contains("enable_curvature")) {
try { preset.enable_curvature = p["enable_curvature"].get_value<bool>(); } catch (...) {} try {
preset.enable_curvature = p["enable_curvature"].get_value<bool>();
} catch (...) {}
} }
if (p.contains("enable_sharper")) { if (p.contains("enable_sharper")) {
try { preset.enable_sharper = p["enable_sharper"].get_value<bool>(); } catch (...) {} try {
preset.enable_sharper = p["enable_sharper"].get_value<bool>();
} catch (...) {}
} }
crtpi_presets.push_back(preset); crtpi_presets.push_back(preset);
} }
@@ -1133,7 +1145,9 @@ namespace Options {
if (!crtpi_presets.empty()) { if (!crtpi_presets.empty()) {
current_crtpi_preset = std::clamp( current_crtpi_preset = std::clamp(
current_crtpi_preset, 0, static_cast<int>(crtpi_presets.size()) - 1); current_crtpi_preset,
0,
static_cast<int>(crtpi_presets.size()) - 1);
} else { } else {
current_crtpi_preset = 0; current_crtpi_preset = 0;
} }

View File

@@ -7,7 +7,7 @@
#include <utility> #include <utility>
#include <vector> // Para vector #include <vector> // Para vector
#include "core/rendering/screen.hpp" // Para Screen::Filter #include "core/rendering/screen.hpp" // Para Screen::Filter
#include "core/rendering/shader_backend.hpp" // Para Rendering::ShaderType #include "core/rendering/shader_backend.hpp" // Para Rendering::ShaderType
#include "game/defaults.hpp" #include "game/defaults.hpp"
#include "utils/defines.hpp" // Para WINDOW_CAPTION #include "utils/defines.hpp" // Para WINDOW_CAPTION
@@ -143,12 +143,12 @@ namespace Options {
float mask_brightness{0.80F}; // Brillo sub-píxeles en la máscara de fósforo float mask_brightness{0.80F}; // Brillo sub-píxeles en la máscara de fósforo
float curvature_x{0.05F}; // Distorsión barrel eje X float curvature_x{0.05F}; // Distorsión barrel eje X
float curvature_y{0.10F}; // Distorsión barrel eje Y float curvature_y{0.10F}; // Distorsión barrel eje Y
int mask_type{2}; // 0=ninguna, 1=verde/magenta, 2=RGB fósforo int mask_type{2}; // 0=ninguna, 1=verde/magenta, 2=RGB fósforo
bool enable_scanlines{true}; // Activar efecto de scanlines bool enable_scanlines{true}; // Activar efecto de scanlines
bool enable_multisample{true}; // Antialiasing analítico de scanlines bool enable_multisample{true}; // Antialiasing analítico de scanlines
bool enable_gamma{true}; // Corrección gamma bool enable_gamma{true}; // Corrección gamma
bool enable_curvature{false}; // Distorsión barrel CRT bool enable_curvature{false}; // Distorsión barrel CRT
bool enable_sharper{false}; // Submuestreo más nítido (modo SHARPER) bool enable_sharper{false}; // Submuestreo más nítido (modo SHARPER)
}; };
// --- Variables globales --- // --- Variables globales ---
@@ -176,9 +176,9 @@ namespace Options {
inline std::string postfx_file_path{}; // Ruta del fichero postfx.yaml inline std::string postfx_file_path{}; // Ruta del fichero postfx.yaml
// --- Variables CrtPi --- // --- Variables CrtPi ---
inline std::vector<CrtPiPreset> crtpi_presets{}; // Lista de presets del shader CRT-Pi inline std::vector<CrtPiPreset> crtpi_presets{}; // Lista de presets del shader CRT-Pi
inline int current_crtpi_preset{0}; // Índice del preset CRT-Pi actual inline int current_crtpi_preset{0}; // Índice del preset CRT-Pi actual
inline std::string crtpi_file_path{}; // Ruta del fichero crtpi.yaml inline std::string crtpi_file_path{}; // Ruta del fichero crtpi.yaml
// --- Shader activo --- // --- Shader activo ---
inline Rendering::ShaderType current_shader{Rendering::ShaderType::POSTFX}; // Shader de post-procesado activo inline Rendering::ShaderType current_shader{Rendering::ShaderType::POSTFX}; // Shader de post-procesado activo
@@ -188,10 +188,10 @@ namespace Options {
void setConfigFile(const std::string& path); // Establece la ruta del fichero de configuración void setConfigFile(const std::string& path); // Establece la ruta del fichero de configuración
auto loadFromFile() -> bool; // Carga las opciones desde el fichero configurado auto loadFromFile() -> bool; // Carga las opciones desde el fichero configurado
auto saveToFile() -> bool; // Guarda las opciones al fichero configurado auto saveToFile() -> bool; // Guarda las opciones al fichero configurado
void setPostFXFile(const std::string& path); // Establece la ruta del fichero de PostFX void setPostFXFile(const std::string& path); // Establece la ruta del fichero de PostFX
auto loadPostFXFromFile() -> bool; // Carga los presets de PostFX desde el fichero auto loadPostFXFromFile() -> bool; // Carga los presets de PostFX desde el fichero
auto savePostFXToFile() -> bool; // Guarda los presets de PostFX por defecto auto savePostFXToFile() -> bool; // Guarda los presets de PostFX por defecto
void setCrtPiFile(const std::string& path); // Establece la ruta del fichero de CrtPi void setCrtPiFile(const std::string& path); // Establece la ruta del fichero de CrtPi
auto loadCrtPiFromFile() -> bool; // Carga los presets de CrtPi desde el fichero (crea defaults si no existe) auto loadCrtPiFromFile() -> bool; // Carga los presets de CrtPi desde el fichero (crea defaults si no existe)
} // namespace Options } // namespace Options

View File

@@ -39,7 +39,7 @@ class Logo {
static constexpr float SINCE_1998_FADE_DURATION = 0.5F; // Duración del fade-in de "Since 1998" static constexpr float SINCE_1998_FADE_DURATION = 0.5F; // Duración del fade-in de "Since 1998"
static constexpr float DISPLAY_DURATION = 3.5F; // Tiempo que el logo permanece visible static constexpr float DISPLAY_DURATION = 3.5F; // Tiempo que el logo permanece visible
static constexpr float FADE_OUT_DURATION = 0.5F; // Duración del fade-out final static constexpr float FADE_OUT_DURATION = 0.5F; // Duración del fade-out final
static constexpr float BLACK_SCREEN_DURATION = 1.0F; // Duración de la pantalla negra final static constexpr float BLACK_SCREEN_DURATION = 1.0F; // Duración de la pantalla negra final
// --- Constantes de animación --- // --- Constantes de animación ---
static constexpr float JAILGAMES_SLIDE_DURATION = 0.8F; // Duración de la animación de slide-in (segundos) static constexpr float JAILGAMES_SLIDE_DURATION = 0.8F; // Duración de la animación de slide-in (segundos)

View File

@@ -490,7 +490,7 @@ static const std::vector<ConsoleCommand> COMMANDS = {
if (args.empty() || args[0] != "INITIAL") { return "Usage: SET INITIAL [ROOM|POS] | SET SHADER [POSTFX|CRTPI]"; } if (args.empty() || args[0] != "INITIAL") { return "Usage: SET INITIAL [ROOM|POS] | SET SHADER [POSTFX|CRTPI]"; }
const bool DO_ROOM = args.size() == 1 || (args.size() >= 2 && args[1] == "ROOM"); const bool DO_ROOM = args.size() == 1 || (args.size() >= 2 && args[1] == "ROOM");
const bool DO_POS = args.size() == 1 || (args.size() >= 2 && args[1] == "POS"); const bool DO_POS = args.size() == 1 || (args.size() >= 2 && args[1] == "POS");
if (!DO_ROOM && !DO_POS) { return "Usage: SET INITIAL [ROOM|POS]"; } if (!DO_ROOM && !DO_POS) { return "Usage: SET INITIAL [ROOM|POS]"; }
if (!GameControl::set_initial_room || !GameControl::set_initial_pos) { return "Game not initialized"; } if (!GameControl::set_initial_room || !GameControl::set_initial_pos) { return "Game not initialized"; }

View File

@@ -36,20 +36,20 @@ except ImportError:
# Conjunto de caracteres en el mismo orden que los ficheros .fnt del juego. # Conjunto de caracteres en el mismo orden que los ficheros .fnt del juego.
# ASCII 32-126 primero, luego extensiones para castellano, catalán y valenciano. # ASCII 32-126 primero, luego extensiones para castellano, catalán y valenciano.
_ASCII_CHARS = [chr(i) for i in range(32, 127)] # 95 chars: espacio … ~ _ASCII_CHARS = [chr(i) for i in range(32, 127)] # 95 chars: espacio … ~
_EXTENDED_CHARS = list("ÀÁÈÉÍÏÒÓÚÜÑÇàáèéíïòóúüñç¡¿«»·") # 29 chars ES/CA/VA _EXTENDED_CHARS = list("ÀÁÈÉÌÍÒÓÙÚÑÇàáèéìíòóùúñç¡¿«»·") # 29 chars ES/CA/VA
ALL_CHARS = _ASCII_CHARS + _EXTENDED_CHARS # 124 total ALL_CHARS = _ASCII_CHARS + _EXTENDED_CHARS # 124 total
# Caracteres de fallback para TTFs sin soporte de acentos/especiales. # Caracteres de fallback para TTFs sin soporte de acentos/especiales.
# Si el TTF no tiene el char, se dibuja el fallback en su celda del bitmap. # Si el TTF no tiene el char, se dibuja el fallback en su celda del bitmap.
# El .fnt sigue registrando el codepoint original → texto localizado funciona. # El .fnt sigue registrando el codepoint original → texto localizado funciona.
CHAR_FALLBACKS: dict[str, str] = { CHAR_FALLBACKS: dict[str, str] = {
"À": "A", "Á": "A", "È": "E", "É": "E", "À": "A", "Á": "A", "È": "E", "É": "E",
"Í": "I", "Ï": "I", "Ò": "O", "Ó": "O", "Ì": "I", "Í": "I", "Ò": "O", "Ó": "O",
"Ú": "U", "Ü": "U", "Ñ": "N", "Ç": "C", "Ù": "U", "Ú": "U", "Ñ": "N", "Ç": "C",
"à": "a", "á": "a", "è": "e", "é": "e", "à": "a", "á": "a", "è": "e", "é": "e",
"í": "i", "ï": "i", "ò": "o", "ó": "o", "ì": "i", "í": "i", "ò": "o", "ó": "o",
"ú": "u", "ü": "u", "ñ": "n", "ç": "c", "ù": "u", "ú": "u", "ñ": "n", "ç": "c",
"¡": "!", "¿": "?", "«": "<", "»": ">", "·": ".", "¡": "!", "¿": "?", "«": "<", "»": ">", "·": ".",
} }