v1.8.6
Versão de recursos: slots de save state renomeáveis, gravação sincronizada entre rebobinamentos do Time Machine, seleção de tela no Modo TV, atalho para conectar/desconectar o controle de Wii, API de sessão/ping do RetroAchievements e gerenciamento de permissões TCC para pastas que interrompe o pedido repetido de acesso a Downloads na inicialização.
Destaques
- Slots de save renomeáveis: Passe o mouse sobre um slot para revelar um botão de lápis e renomeie inline, ou use a opção Renomear no menu de contexto do slot/miniatura. Os nomes persistem em um
.meta.jsonau lado de cada.statee voltam a "Slot N" quando esvaziados. O slot automático (-1) não é renomeável de propósito. - A gravação permanece sincronizada entre rebobinamentos (#30): Os acréscimos de frames de vídeo e a captura de áudio são suspensos durante o modo rebobinamento/scrub, e a duração do rebobinamento é subtraída das âncoras PTS para que a gravação pule o rebobinamento em ambas as pistas (sem frame congelado, sem silêncio). Um ajuste opt-in "Cortar rebobinamentos da gravação" e um toggle "Permitir rebobinamento durante a gravação" expõem ambos os comportamentos; o writer é parado de forma síncrona ao fechar a janela antes de
runner.stop()para evitar um travamento na captura de áudio ao desmapear a memória compartilhada XPC. - Seleção de tela no Modo TV: Um novo
TVModeMainSettingsViewcentraliza as configurações do Modo TV (comportamento, tema, opções de tela, coleções visíveis, remapeamento de botões do gamepad), eTVModeScreenPickerViewpermite escolher qual tela conectada usar ao entrar no Modo TV por meio de um novoScreenCatalog. - Atalho para conectar/desconectar o controle de Wii: Conecte/desconecte o controle de Wii em tempo de execução por um novo atalho. As opções de IR do Wii agora usam inteiros como texto para as opções de núcleo, com defaults ajustados em
dolphin_libretro_default.json, e o rastreamento sintético de ponteiro é suportado durante a captura de entrada. - API de sessão/ping do RetroAchievements: Adiciona
rcheevos_api_init_ping/rcheevos_api_init_start_sessionpara presença enriquecida e início de sessão, maisrcheevos_api_init_login_with_tokenpara renovação de token. A view de configurações expõe uma ação de atualização para as estatísticas do usuário e notificações de re-login. O tratamento de erros agora usa um tipo estruturadoRAErrorcom mensagens localizadas. - Gerenciamento de permissões TCC de pastas: A ROMLibrary agora gerencia concessões TCC para escopos de pasta. Combinado com a correção do bookmark de pasta no
LogManager/LoggerService(resolver com.withSecurityScope, parearstartAccessingSecurityScopedResource/stopAccessingSecurityScopedResourceem torno do handle de log aberto), o app não pede acesso a Downloads novamente a cada inicialização. - Reforma das configurações de atalhos: Redefine atalhos individuais ou vários de uma vez para seus bindings padrão. Um novo enum
HotkeyTaborganiza atalhos de App, No jogo e Especiais, com novas seções para controle de Wii e Velocidade & Rebobinamento. As configurações de Navegação por gamepad agora são reutilizadas sob Atalhos em vez de ficar numa página separada. - Integração do BoxArtService:
GameCardVieweGameDetailViewusam o BoxArtService compartilhado, com um novo parâmetroforceReplaceemdownloadAndCache. - Override de auto-carregamento por lançamento:
launchGameganha um parâmetrodisableAutoLoadOnStartpara pular o auto-carregamento em um único lançamento sem mudar a preferência global.
Mudanças detalhadas
- feat: adicionar nome de exibição para slots de save (#31) — slots renomeáveis pelo usuário, persistidos em um
.meta.jsonauxiliar, limpos quando o slot é totalmente esvaziado;SlotInfoganhacustomNamee seuEquatableo compara para que o SwiftUI refaça o render ao recarregar - fix: manter a gravação A/V sincronizada entre rebobinamentos do Time Machine (#30) — flag
isRewindPaused+ acumuladorrewindPtsOffset, marcas d'água estritas monotônicas de PTS, reset da posição de leitura de áudio ao soltar o rebobinamento, parada síncrona do writer emwindowWillClose - feat: ajuste opt-in para cortar rebobinamentos do Time Machine das gravações —
recording_seamlessRewindCutetimeMachine_rewindDuringRecording(padrão ON para preservar o comportamento) com dica OSD localizada quando o rebobinamento é bloqueado - refactor: reverter o código de rotação de chunks sem emenda (#30) — problemas de inflação de chunks e de cálculo de cortes forçaram a reversão para a abordagem de escritor único com cut-PTS-skip; o fix do snapshot do MetalCoordinator é preservado para que os frames de scrub fiquem de fora da gravação
- feat: expor entradas despejadas do TimeMachineBuffer + adicionar scaffold do toggle
bufferBasedRecording—TimeMachineBuffer.pushretorna entradas despejadas; o pipeline baseado em buffer ainda não está conectado, o serviço de gravação segue com cut-PTS-skip - chore: deixar o serviço de gravação no comportamento cut-PTS-skip verificado — o conteúdo pré-rebobinamento é preservado entre fronteiras de rebobinamento; a duração do arquivo é apenas o tempo de jogo
- feat(tvmode): implementar seleção de tela e gerenciamento de configurações —
TVModeMainSettingsView,ScreenCatalog,ScreenDescriptor,TVModeScreenPickerViewcom novas chaves de localização (en/es/pt) - feat: adicionar parâmetro
disableAutoLoadOnStartà funçãolaunchGame - feat(BoxArtService): adicionar parâmetro
forceReplaceao métododownloadAndCache - feat: integrar BoxArtService em
GameCardVieweGameDetailViewpara um melhor tratamento de capas - Implementar as camadas de ping e início de sessão da API para a integração do RetroAchievements —
rcheevos_api_init_ping,rcheevos_api_init_start_session,rcheevos_api_init_login_with_token;RetroAchievementsServicegerencia a renovação de token e o tratamento de sessão com notificações ao usuário e interface de atualização - feat: aprimorar o tratamento de erros do RetroAchievements com tipo estruturado
RAErrore mensagens localizadas - feat: implementar o gerenciamento de permissões TCC e o tratamento de escopos de pasta na ROMLibrary
- fix: parar de pedir acesso a Downloads a cada inicialização — resolver o bookmark de pasta de log personalizada com
.withSecurityScopee parearstartAccessingSecurityScopedResource/stopAccessingSecurityScopedResourceao redor do handle de log aberto - feat: aprimorar a configuração de atalhos — redefinir por ação e em lote os atalhos padrão, novo enum
HotkeyTab(App/No jogo/Especiais), seções de controle de Wii e Velocidade & Rebobinamento, Navegação por gamepad reutilizada sob Atalhos - Refatorar níveis de logging e aprimorar a funcionalidade do controle de Wii — INFO alterado para DEBUG em CoreOverrideBridge/LibretroBridgeImpl/LibretroCallbacks/LibretroGlobals; atalho de conectar/desconectar controle de Wii; opções de IR do Wii com inteiros como texto e defaults ajustados; rastreamento sintético de ponteiro durante a captura de entrada
- Subir a versão de marketing para 1.8.6 e o número de build para 29 em
project.yml, nos doisInfo.pliste emdocs/_config.yml