v1.12.0

3 de septiembre de 2026

Esta versión añade una hoja de prueba de mando en vivo con visualizador del pad en pantalla, reasignación, zona muerta y calibración; incorpora las puntuaciones de OpenCritic a la vista de detalle del juego; refactoriza el selector de orden de la biblioteca con nuevos órdenes "Tiempo jugado" y "Más largo de terminar"; y pule el pipeline de efectos holo: la transparencia de la lámina inversa ahora se ve correctamente, se corrige la alineación de la carátula ajustada para carátulas no verticales, se eliminan ajustes Holo obsoletos, y el modo TV obtiene un efecto de pivote 3D en las filas de la lista además de un holo automático estilo asistente para el tile enfocado y el héroe seleccionado. Se elimina un encabezado mágico CD001 erróneo del PC Engine para que las imágenes DOS CD ya no se identifiquen erróneamente como PCE.

Destacados

  • Hoja de prueba de mando en vivo: Una hoja auto-presentada al conectar nuevos gamepads (y una entrada manual "Probar mando" en ajustes) muestra la asignación actual sobre un layout Xbox dibujado en SwiftUI, permite reasignar botones frontales/hombros/gatillos/sticks/dpad, ajustar zonas muertas de los sticks y ejecutar una sesión de calibración de sticks. Los conflictos se resaltan en amarillo.
  • Integración con OpenCritic: La vista de detalle del juego ahora muestra puntuación de la crítica, tier, porcentaje recomendado, número de reseñas y un enlace profundo. Los resultados se cachean en ROMMetadata; la clave de API y la prueba de conectividad están en Ajustes, y todo está localizado en en/es/ja/pt.
  • Refactor del orden de biblioteca + nuevos órdenes: El antiguo orden de dos booleanos se reemplaza por un único enum LibrarySortOrder, con "Tiempo jugado" (por totalPlaytimeSeconds) y "Más largo de terminar" (por hltbMainStoryHours) añadidos en el popover "Otros" de la barra de chips. Las pills ahora ciclan inactivo → descendente → ascendente con flechas direccionales.
  • Pulido de efectos Holo: La transparencia de la lámina inversa se ve correctamente en los tonos medios brillantes (nuevo shader Metal ReverseHoloMask con gating por luminancia), la carátula ajustada y la lámina Holo quedan centradas en la tarjeta difuminada de todos los juegos, se eliminan nueve ajustes Holo obsoletos, y el modo TV obtiene un efecto de pivote 3D en las filas de la lista más un holo automático en el tile enfocado y el héroe seleccionado.

Cambios detallados

  • Hoja de prueba de mando — nuevo enum PadButton que cubre todo el layout Xbox (frontales, hombros, gatillos, sticks, dpad, share, 8 direcciones de stick); ControllerInputObserver posee un único conjunto de cadenas valueChangedHandler (o callbacks de observador SDL) y sintetiza eventos de pulsación de dirección de stick desde ejes analógicos para que la captura de reasignación funcione con cualquier fuente de entrada; SDLInputManager obtiene startButtonObservation / startTriggerObservation replicando el patrón de eje de una sola ranura; se elimina la lógica de deduplicación de updateMapping (se permiten duplicados; la hoja de prueba resalta conflictos en amarillo); ControllerService.updateMapping / stopObserving ahora difunde la notificación controllerInputObserverStopped para que StickVisualizerView vuelva a enganchar sus handlers cuando se cierra la hoja de prueba; NewGamepadPresenter auto-presenta la hoja para nombres de proveedor no vistos tras un warm-up de 2s al arrancar y cuando no hay ningún juego en ejecución; el contexto de gamepad de NavBlocker absorbe las acciones de navegación de la biblioteca mientras la hoja está abierta para que A/Start no lancen juegos accidentalmente.
  • OpenCritic — nuevo OpenCriticService (RapidAPI) con búsqueda, detalles y prueba de conexión; UI de Ajustes para la clave de API con retroalimentación de conectividad y logging; nueva sección OpenCritic en la vista de detalle del juego con puntuación, tier, porcentaje recomendado, número de reseñas y enlace; resultados persistidos en ROMMetadata; el refresh reutiliza el game ID cacheado para reducir el uso de API de 2 hits a 1; localizado settings.openCritic.* y openCritic.* en en/es/ja/pt.
  • Refactor del orden de biblioteca — reemplaza las claves AppSettings sortByLastPlayed / sortByLastAdded con un único enum LibrarySortOrder más un flag sortAscending; nuevo LibrarySortPicker que renderiza tanto el menú Orden de macOS (filas NSMenu + submenú "Otros") como la barra de chips de filtro (chips tipo cápsula); nuevos órdenes "Tiempo jugado" y "Más largo de terminar" en el popover "Otros" (entradas sin jugar / sin HLTB se hunden al final); ciclo de clic de pill: inactivo → descendente → ascendente → inactivo; el orden "Nombre" por defecto es implícito (sin pill); FilterChipView obtiene un parámetro fillsWidth para filas "Otros" a ancho completo; las claves legacy se leen una sola vez en el primer arranque y se dejan en disco (inertes) para rollback seguro.
  • Alineación Holo — centrar la carátula ajustada y la lámina/brillo holo en la tarjeta difuminada de todos los juegos para que el arte no vertical ya no se amplíe/recorte para llenar y la máscara ya no se desplace fuera de centro; se documentan los invariantes de carátula Holo en AGENTS.md.
  • Lámina Holo inversa — nuevo shader Metal ReverseHoloMask: la lámina inversa es transparente en el máximo oscuro y en el máximo brillante, y más visible en los tonos medios brillantes, con el barrido claro/oscuro activado por la máscara de luminancia en cada modo para que la transparencia sea realmente visible.
  • Poda de ajustes Holo — eliminados nueve ajustes Holo consumidos solo por una rama de fallback muerta en HoloFoilLayers.body (intensidad y patrón de título/chrome/héroe/fondo, más maskDeviationChance); eliminados holofoilRareBeamStrength, randomFoilSize, los flags heroHolo / titleBackgroundHolo / chromeBackgroundHolo, el sidecar HoloMaskMeta, y el cableado de writeMeta / metaFileURL; Ajustes → Holo ahora expone solo el toggle "mostrar botón de play" en la sección Holo Levels (la intensidad y el patrón los dirige la tirada de variante por tarjeta de HoloCardRandomization).
  • Pivote 3D modo TV — las filas de la lista ahora cuentan con un efecto de pivote 3D sobre su carátula.
  • Holo automático modo TV — TVModeHoloBoxart: holo automático estilo asistente (luz autodirigida + movimiento de tarjeta, variante aleatoria ponderada por el usuario) aplicado al tile enfocado de la fila de juegos y al boxart del héroe del juego seleccionado.
  • Fix cold-start modo TV — se salta el initialEntryID por defecto .recent al reanudar desde cold-start y se difiere la restauración del filtro persistido hasta que cargue la biblioteca.
  • Fix de arte obsoleta modo TV — la descarga de arte de detalle obsoleta ya no sobrescribe el ROM héroe actual (la descarga la maneja únicamente la vista de detalle).
  • Fix MainActor modo TV — leer auto_generate_holo_masks en el main actor.
  • Identificador de ROM — eliminado el encabezado mágico CD001 erróneo del sistema pce (era el marcador genérico del Primary Volume Descriptor ISO 9660 presente en cualquier imagen CD cocinada, no solo en discos PC Engine); las HuCards verdaderas de PC Engine siguen casando por la firma "PC ENGINE" en el offset 0; los CD-ROM de PC Engine los maneja el sistema dedicado pcecd.
  • Assets de carátula — añadidos zelda_oot_usa_chrome.png y zelda_oot_usa_title.png para The Legend of Zelda: Ocarina of Time (USA).
  • Limpieza de proyecto — eliminadas las referencias a TestWrite.swift de la configuración del proyecto.
  • Versión de marketing subida a 1.12.0 y número de compilación a 35 en project.yml, ambos Info.plist y docs/_config.yml.