v1.9.0
Esta versión añade la calibración del stick del control y una amplia mejora interna de calidad. Controles: calibra el rango del stick analógico de cada control con retroalimentación visual en vivo, guardada por control, más arreglos para controles SDL — el L2/R2 digital ahora activa los gatillos analógicos para núcleos como Flycast, y los controles duplicados tras una reconexión se reconcilian. Mientras un juego se ejecuta, la pantalla y el sistema permanecen despiertos. El Apply del editor de shaders en vivo ahora sobrevive al relanzar el mismo juego, y el Modo TV mantiene el sistema que seleccionaste después de salir de un juego. Bajo el capó, el estado de pausa se consolidó en un solo enum (arreglando bugs de scrub y grabación), las opciones de núcleo siguen un único recorrido de precedencia de cinco capas, las asignaciones de controles comparten una sola fuente de verdad, y un nuevo harness de smoke tests automatizado arranca 11 ROMs a través del pipeline de lanzamiento real para verificar la estabilidad.
Destacados
- Calibración del stick: Calibra el rango del stick analógico de cada control por dirección con una sesión de calibración en vivo y retroalimentación visual, aplicada a todos tus juegos y guardada por control.
- Sin suspensión mientras juegas: La pantalla y el sistema se mantienen despiertos mientras un juego se ejecuta, así las sesiones de juego nunca se interrumpen porque tu Mac se suspenda.
- El Apply de shaders en vivo persiste: Los cambios de shader aplicados con el editor de shaders en juego sobreviven al relanzar el mismo juego en lugar de revertirse al snapshot obsoleto.
- El Modo TV mantiene su sistema: Después de salir de un juego, el Modo TV permanece en el sistema que seleccionaste en lugar de volver a Recientes.
- Arreglos de controles SDL: Los botones digitales L2/R2 ahora activan el estado analógico de los gatillos (arreglando los controles de Dreamcast en Flycast), y los controles duplicados se reconcilian cuando GameControllerKit reconecta un dispositivo que SDL ya había aceptado.
- Estado de pausa consolidado: Rewind, scrub y pausa ahora comparten una sola máquina de estados — scrubbing sobre un juego pausado lo mantiene pausado al salir, y la navegación de gamepad restaura el estado de pausa anterior.
- Smoke tests automatizados: Un nuevo harness de boot-smoke lanza 11 ROMs (de NES a MAME) a través del pipeline de lanzamiento real y verifica que el primer frame se renderice, con la auditoría de shaders slang aún saludable.
Cambios detallados
- feat: implementar la calibración del stick para controles — modelos
StickCalibrationyControllerCalibrationpara el rango del stick analógico por dirección,StickCalibrationSessionpara captura en vivo, SDLInputManager aplica la calibración, los runners (DOSRunner, ScummVMRunner) la consumen, UI de calibración en ControllerSettingsViewGroup, traducciones en/es/ja/pt, además de un refactor de refresco masivoROMLibrary.refreshAll - fix: evitar el duplicado de SDL cuando GameControllerKit registra un control tras una reconexión — reconciliar en las notificaciones de conexión GC/SDL cerrando el handle SDL duplicado; eliminar el contador
acceptedSDLCountByNameque nunca se decrementaba y hacía fallar permanentemente la guardia por nombre - fix: preservar el Apply de shaders en vivo al relanzar el juego — fusionar la contabilidad de tiempo de juego en la entrada actual de la biblioteca en lugar del snapshot obsoleto del lanzamiento; añadir la clave
shader.applyAndSaveque faltaba a todos los archivos de traducción - fix: evitar que la pantalla y el sistema duerman mientras un juego se ejecuta
- refactor: aplicar los slices D, E y F-sl de la auditoría — deduplicación del trabajo en el lanzamiento (
CoreCapabilitiescacheadas, snapshot de listas de guardado, helper XPC genérico, índice de extensiones normalizado), consolidación de estado y precedencia (recorrido de 5 capas de opciones de núcleo, mapa único de asignaciones de controles, ShaderManager como única fuente del preset slang, estado RA canónico, cluster de tema pendiente, ManualStatusController) y herramientas (matriz de boot-smoke de 11 ROMs víaTRUCHI_SMOKE_ROM, auditoría slang, scripts MAME obsoletos retirados) - refactor: eliminar campos muertos de LaunchConfig y un flag de wizard — se eliminan
slotToLoad/coreOptions/bezelFileName/hardcoreMode;hasCompletedWizardse sustituye porhas_completed_onboarding - refactor: consolidar el estado de pausa en un solo enum
PauseState— reemplaza el triple isPaused/isRewinding sincronizado a mano; scrub sobre pausado mantiene pausado al salir, la barra de herramientas de gamepad restaura el estado anterior, setPaused no-op durante el scrub - refactor: aplicar los slices A+C de la auditoría — enum único
AuthState, reset de sesión de grabación en todas las rutas de teardown, respetar el expiry del caché negativo 404, eliminar el motor SequenceRunner muerto y flags de solo escritura; arreglar bugs de scrub/grabación vacía - fix: enviar el estado analógico de los gatillos para los botones digitales L2/R2 de SDL — los controles SDL puros solo establecían el estado digital de teclas; núcleos como Flycast leen los gatillos de Dreamcast del estado analógico; añadir l2/r2 a los overrides y etiquetas de botones del núcleo flycast
- fix: mantener el Modo TV en el sistema seleccionado tras salir de un juego — hacer
initialEntryIDuna semilla de un solo uso para que los rebuilds ya no devuelvan la selección de la fila 1 a la entrada donde se abrió el Modo TV - Subir la versión de marketing a 1.9.0 y el número de build a 32 en
project.yml, los dosInfo.plistydocs/_config.yml