v1.9.0
Esta versão adiciona a calibração do analógico do controle e uma ampla melhoria interna de qualidade. Controles: calibre a faixa do analógico de cada controle com feedback visual ao vivo, salva por controle, além de correções para controles SDL — o L2/R2 digital agora aciona os gatilhos analógicos para núcleos como Flycast, e controles duplicados após uma reconexão são reconciliados. Enquanto um jogo roda, a tela e o sistema permanecem acordados. O Apply do editor de shaders ao vivo agora sobrevive ao relançar o mesmo jogo, e o Modo TV mantém o sistema que você selecionou depois de sair de um jogo. Sob o capô, o estado de pausa foi consolidado em um único enum (corrigindo bugs de scrub e gravação), as opções de núcleo seguem um único percurso de precedência de cinco camadas, os mapeamentos de controles compartilham uma única fonte de verdade, e um novo harness de smoke tests automatizado inicia 11 ROMs pelo pipeline de lançamento real para verificar a estabilidade.
Destaques
- Calibração do analógico: Calibre a faixa do analógico de cada controle por direção com uma sessão de calibração ao vivo e feedback visual, aplicada a todos os seus jogos e salva por controle.
- Sem suspensão durante o jogo: A tela e o sistema são mantidos acordados enquanto um jogo roda, para que as sessões de jogo nunca sejam interrompidas pelo Mac entrar em suspensão.
- Apply de shaders ao vivo persiste: Mudanças de shader aplicadas com o editor de shaders em jogo sobrevivem ao relançar o mesmo jogo em vez de reverter para o snapshot desatualizado.
- Modo TV mantém seu sistema: Depois de sair de um jogo, o Modo TV permanece no sistema que você selecionou em vez de voltar para Recentes.
- Correções de controles SDL: Os botões digitais L2/R2 agora acionam o estado analógico dos gatilhos (corrigindo os controles de Dreamcast no Flycast), e controles duplicados são reconciliados quando o GameControllerKit reconecta um dispositivo que o SDL já havia aceitado.
- Estado de pausa consolidado: Rewind, scrub e pausa agora compartilham uma única máquina de estados — scrub sobre um jogo pausado o mantém pausado ao sair, e a navegação de gamepad restaura o estado de pausa anterior.
- Smoke tests automatizados: Um novo harness de boot-smoke inicia 11 ROMs (de NES a MAME) pelo pipeline de lançamento real e verifica se o primeiro frame renderiza, com a auditoria de shaders slang ainda saudável.
Mudanças detalhadas
- feat: implementar a calibração do analógico para controles — modelos
StickCalibrationeControllerCalibrationpara a faixa do analógico por direção,StickCalibrationSessionpara captura ao vivo, SDLInputManager aplica a calibração, os runners (DOSRunner, ScummVMRunner) a consomem, UI de calibração no ControllerSettingsViewGroup, traduções en/es/ja/pt, além de um refactor de atualização em massaROMLibrary.refreshAll - fix: evitar duplicata de SDL quando o GCController registra um controle após reconexão — reconciliar nas notificações de conexão GC/SDL fechando o handle SDL duplicado; remover o contador
acceptedSDLCountByNameque nunca era decrementado e fazia a guarda por nome falhar permanentemente - fix: preservar o Apply de shaders ao vivo ao relançar o jogo — mesclar a contabilidade de tempo de jogo na entrada atual da biblioteca em vez do snapshot desatualizado do lançamento; adicionar a chave
shader.applyAndSaveque faltava a todos os arquivos de tradução - fix: evitar que a tela e o sistema entrem em suspensão enquanto um jogo roda
- refactor: aplicar os slices D, E e F-sl da auditoria — deduplicação do trabalho no lançamento (
CoreCapabilitiesem cache, snapshot de listas de save, helper XPC genérico, índice de extensões normalizado), consolidação de estado e precedência (percurso de 5 camadas de opções de núcleo, mapa único de mapeamentos de controles, ShaderManager como única fonte do preset slang, status RA canônico, cluster de tema pendente, ManualStatusController) e ferramentas (matriz de boot-smoke de 11 ROMs viaTRUCHI_SMOKE_ROM, auditoria slang, scripts MAME obsoletos aposentados) - refactor: remover campos mortos de LaunchConfig e um flag de wizard —
slotToLoad/coreOptions/bezelFileName/hardcoreModeexcluídos;hasCompletedWizardsubstituído porhas_completed_onboarding - refactor: consolidar o estado de pausa em um único enum
PauseState— substitui o triplo isPaused/isRewinding sincronizado à mão; scrub sobre pausado mantém pausado ao sair, a barra de ferramentas de gamepad restaura o estado anterior, setPaused é no-op durante o scrub - refactor: aplicar os slices A+C da auditoria — enum único
AuthState, reset de sessão de gravação em todos os caminhos de teardown, respeitar a expiração do cache negativo 404, remover o motor SequenceRunner morto e flags de só-escrita; corrigir bugs de scrub/gravação vazia - fix: enviar o estado analógico dos gatilhos para os botões digitais L2/R2 do SDL — controles SDL puros só definiam o estado digital da tecla; núcleos como Flycast leem os gatilhos de Dreamcast do estado analógico; adicionar l2/r2 aos overrides e rótulos de botões do núcleo flycast
- fix: manter o Modo TV no sistema selecionado após sair de um jogo — tornar
initialEntryIDuma semente de uso único para que os rebuilds não voltem a seleção da linha 1 para a entrada onde o Modo TV foi aberto - Subir a versão de marketing para 1.9.0 e o número de build para 32 em
project.yml, nos doisInfo.pliste emdocs/_config.yml