v1.12.0

3 de setembro de 2026

Esta versão adiciona uma folha de teste de controle ao vivo com visualizador do pad na tela, remapeamento, deadzone e calibração; traz as notas do OpenCritic para a visualização de detalhes do jogo; refatora o seletor de ordenação da biblioteca com novas ordens "Tempo jogado" e "Mais longo para terminar"; e dá polimento ao pipeline de efeitos holo: a transparência do foil reverso agora é visível corretamente, o alinhamento da arte ajustada é corrigido para capas não verticais, ajustes Holo obsoletos são removidos, e o modo TV ganha um efeito de pivô 3D nas linhas da lista além de um holo automático estilo assistente para o tile em foco e o herói selecionado. Um cabeçalho mágico CD001 espúrio do PC Engine é removido para que imagens DOS CD não sejam mais identificadas incorretamente como PCE.

Destaques

  • Folha de teste de controle ao vivo: Uma folha auto-apresentada ao conectar novos gamepads (e uma entrada manual "Testar controle" em configurações) mostra o mapeamento atual em um layout Xbox desenhado em SwiftUI, permite remapear botões frontais/ombros/gatilhos/sticks/dpad, ajustar deadzones dos sticks e executar uma sessão de calibração dos sticks. Conflitos são destacados em amarelo.
  • Integração com OpenCritic: A visualização de detalhes do jogo agora mostra nota da crítica, tier, percentual recomendado, contagem de análises e um link direto. Os resultados são cacheados em ROMMetadata; a chave de API e o teste de conectividade ficam em Configurações, e tudo está localizado em en/es/ja/pt.
  • Refatoração da ordenação da biblioteca + novas ordens: A antiga ordenação de dois booleanos é substituída por um único enum LibrarySortOrder, com "Tempo jogado" (por totalPlaytimeSeconds) e "Mais longo para terminar" (por hltbMainStoryHours) adicionados no popover "Outros" da barra de chips. As pills agora ciclam inativo → descendente → ascendente com setas direcionais.
  • Polimento dos efeitos Holo: A transparência do foil reverso fica visível corretamente nos tons médios brilhantes (novo shader Metal ReverseHoloMask com gating por luminância), a capa ajustada e o foil Holo ficam centralizados no card desfocado de todos os jogos, nove ajustes Holo obsoletos são removidos, e o modo TV ganha um efeito de pivô 3D nas linhas da lista mais um holo automático no tile em foco e no herói selecionado.

Mudanças detalhadas

  • Folha de teste de controle — novo enum PadButton cobrindo todo o layout Xbox (frontais, ombros, gatilhos, sticks, dpad, share, 8 direções de stick); ControllerInputObserver possui um único conjunto de cadeias valueChangedHandler (ou callbacks de observer SDL) e sintetiza eventos de pressionamento de direção de stick a partir de eixos analógicos para que a captura de remapeamento funcione para qualquer fonte de entrada; SDLInputManager ganha startButtonObservation / startTriggerObservation espelhando o padrão de eixo de slot único existente; lógica de deduplicação de updateMapping removida (duplicatas são permitidas; a folha de teste destaca conflitos em amarelo); ControllerService.updateMapping / stopObserving agora transmitem uma notificação controllerInputObserverStopped para que StickVisualizerView reanexe seus handlers quando a folha de teste fecha; NewGamepadPresenter auto-apresenta a folha para nomes de vendor não vistos após um warm-up de 2s na inicialização e quando nenhum jogo está rodando; o contexto de gamepad de NavBlocker engole ações de navegação da biblioteca enquanto a folha está aberta para que A/Start não iniciem jogos acidentalmente.
  • OpenCritic — novo OpenCriticService (RapidAPI) com busca, detalhes e teste de conexão; UI de Configurações para a chave de API com feedback de conectividade e logging; nova seção OpenCritic na visualização de detalhes do jogo mostrando nota, tier, percentual recomendado, contagem de análises e link; resultados persistidos em ROMMetadata; refresh reutiliza o game ID em cache para cortar o uso de API de 2 hits para 1 no refresh; localizado settings.openCritic.* e openCritic.* em en/es/ja/pt.
  • Refatoração da ordenação da biblioteca — substitui as chaves AppSettings sortByLastPlayed / sortByLastAdded por um único enum LibrarySortOrder mais um flag sortAscending; novo LibrarySortPicker renderiza tanto o menu Ordenar do macOS (linhas NSMenu + submenu "Outros") quanto a barra de chips de filtro (chips em cápsula); novas ordens "Tempo jogado" e "Mais longo para terminar" no popover "Outros" (entradas não jogadas / sem HLTB afundam para o final); ciclo de clique da pill: inativo → descendente → ascendente → inativo; a ordenação "Nome" padrão é implícita (sem pill); FilterChipView ganhou um parâmetro fillsWidth para linhas "Outros" em largura cheia; as chaves legadas são lidas uma vez na primeira execução e deixadas no disco (inertes) para rollback seguro.
  • Alinhamento Holo — centraliza a capa ajustada e o foil/brilho holo no card desfocado de todos os jogos para que a arte não vertical não fique mais ampliada/cortada para preencher e a máscara não desvie mais do centro; invariantes de capa Holo documentados em AGENTS.md.
  • Foil Holo reverso — novo shader Metal ReverseHoloMask: o foil reverso é transparente no escuro máximo e no brilho máximo, e mais visível nos tons médios brilhantes, com a varredura claro/escuro gatilhada pela máscara de luminância em cada modo para que a transparência seja de fato visível.
  • Poda de ajustes Holo — removidos nove ajustes Holo consumidos apenas por um ramo de fallback morto em HoloFoilLayers.body (intensidade e padrão de título/chrome/herói/fundo, mais maskDeviationChance); removidos holofoilRareBeamStrength, randomFoilSize, os flags heroHolo / titleBackgroundHolo / chromeBackgroundHolo, o sidecar HoloMaskMeta, e a fiação de writeMeta / metaFileURL; Configurações → Holo agora expõe apenas o toggle de mostrar botão de play na seção Holo Levels (intensidade e padrão são dirigidos pela rolagem de variante por cartão de HoloCardRandomization).
  • Pivô 3D modo TV — as linhas da lista agora apresentam um efeito de pivô 3D sobre sua capa.
  • Holo automático modo TV — TVModeHoloBoxart: holo automático estilo assistente (luz autodirigida + movimento do card, variante aleatória ponderada do usuário) aplicado ao tile em foco da linha de jogos e ao boxart do herói do jogo selecionado.
  • Fix cold-start modo TV — pula o initialEntryID padrão .recent ao retomar do cold-start e adia a restauração do filtro persistido até a biblioteca carregar.
  • Fix de arte obsoleta modo TV — o download obsoleto de arte de detalhe não sobrescreve mais o ROM herói atual (o download é tratado apenas pela visualização de detalhe).
  • Fix MainActor modo TV — ler auto_generate_holo_masks no main actor.
  • Identificador de ROM — removido o cabeçalho mágico CD001 espúrio do sistema pce (era o marcador genérico do Primary Volume Descriptor ISO 9660 presente em qualquer imagem de CD cozinhada, não só em discos PC Engine); HuCards verdadeiros de PC Engine ainda casam pela assinatura "PC ENGINE" no offset 0; CD-ROMs de PC Engine são tratados pelo sistema dedicado pcecd.
  • Assets de capa — adicionados zelda_oot_usa_chrome.png e zelda_oot_usa_title.png para The Legend of Zelda: Ocarina of Time (USA).
  • Limpeza do projeto — removidas as referências a TestWrite.swift da configuração do projeto.
  • Versão de marketing atualizada para 1.12.0 e número de build para 35 em project.yml, ambos os Info.plist e docs/_config.yml.