Online il nuovo report sui progressi raggiunti dall’emulatore Dolphin durante i mesi di febbraio, marzo e aprile, mentre il progetto si prepara a sbarcare anche sulla piattaforma Steam.
Due le modifiche più importanti attuate sui dispositivi Android, tra cui una riscrittura completa della gestione dell’input Android di Dolphin, che consentirà al software di corrispondere alle funzionalità delle versioni desktop.
The Feb, March, and April 2023 Dolphin Progress Report is up! This time, we provide documents, are Infinity based, kill renderer, let bosses mock us, add Sharp Bilinear, rebuild Android input, and see the return of the Ascii Art Shader!https://t.co/N4XfpIoy2N
— Dolphin Emulator (@dolphin@dolphin-emu.org) (@Dolphin_Emu) May 21, 2023
Inoltre, Dolphin ora supporta il provider di documenti su Android, consentendo agli utenti di copiare i file all’interno e all’esterno della directory dell’app.
Alcune modifiche includono anche miglioramenti alla gestione del controller, come la possibilità di modificare le impostazioni durante l’emulazione, salvare e caricare profili di input e supportare nuovi sensori del dispositivo.
Corretto inoltre un problema con la disconnessione del telecomando Wii e apportate una serie di migliorie al renderer e all’emulazione del Portale del Potere con supporto audio.
Cambiamenti
Oltre dieci anni fa, Sonicadvance1 ha dato inizio allo sviluppo del nuovo Dolphin JIT che potesse essere eseguito su processori ARM, una mossa audace considerando che all’epoca non c’erano dispositivi ARM in grado di far funzionare Dolphin a velocità elevate.
Inizialmente, il JIT ARM è stato sviluppato per schede di sviluppo e Chromebook con Linux, poiché i telefoni non avevano ancora le caratteristiche necessarie.
Tuttavia, una volta che i telefoni raggiunsero le specifiche richieste, Sonicadvance1 iniziò a portare Dolphin sui dispositivi Android utilizzando il nuovo ARM JIT.
Purtroppo, uno dei principali problemi con Dolphin su Android era la differenza tra le interfacce di Android scritte in Java e quelle di Dolphin scritte in C++.
Per collegare i due linguaggi, è stato necessario utilizzare JNI (Java Native Interface). Per semplificare le cose, Sonicadvance1 ha deciso di creare una rapida reimplementazione in Java, risparmiando tempo sull’input per potersi concentrare su altre parti del progetto.
Purtroppo, questa rapida implementazione è rimasta invariata nel corso degli anni, con nuove funzionalità aggiunte su di essa, e l’input di Android di Dolphin è diventato problematico.
Inoltre, essendo separato dall’implementazione di input C++ di Dolphin, qualsiasi miglioramento doveva essere trasferito manualmente, il che ha portato a un ritardo nell’aggiornamento delle funzionalità di input su Dolphin Android.
Per risolvere questa situazione, è stato necessario ripensare e riprogettare l’intero sistema di input di Android da zero.
Controller Android
Negli ultimi due anni, sempre più utenti hanno richiesto miglioramenti per i controlli touch e il supporto del controller Android in Dolphin. Inizialmente, queste richieste sono state respinte con la promessa che si stava lavorando su di esse.
Tuttavia, si è riconosciuto che le correzioni temporanee implementate in Java non erano una soluzione adeguata e sarebbero state eliminate in favore di una soluzione più completa.
JosJuice ha lavorato dietro le quinte per rimuovere gradualmente le reimplementazioni Java delle parti di Dolphin su Android e spostarle su JNI. La gestione dell’input è stata una delle parti più complesse da affrontare.
Dolphin offre una vasta gamma di opzioni per gestire i controlli di movimento, gli infrarossi, l’orientamento del controller, lo scambio di allegati e altro ancora.
A seconda del tipo di controller utilizzato e del gioco giocato, sono necessarie configurazioni diverse. Questa complessità ha reso il processo di spostamento su JNI molto più impegnativo rispetto ad altre sezioni del progetto.
Il progetto di portare la gestione dell’input su JNI, consentendo l’utilizzo diretto dell’implementazione C++, è stato un impegno pluriennale. Sebbene il lavoro iniziale sia stato unito, non tutti gli aspetti sono ancora completamente completi.
JosJuice ha dovuto suddividere alcune parti del lavoro per consentire revisioni e prevenire regressioni che richiedono ulteriori lavori. Tuttavia, il porting JNI della gestione dell’input di Dolphin già include molte delle funzionalità richieste da tempo dagli utenti.
- Ora è possibile modificare le impostazioni del controller mentre l’emulazione è in esecuzione.
- Ora è possibile salvare e caricare i profili di input. (La vecchia funzionalità delle mappature per gioco è sostituita dai profili di input per gioco.)
- Espressioni di input avanzate.
- Ora è possibile mappare l’accelerometro e il giroscopio del dispositivo in base a ciò che si desidera, non solo ai movimenti del telecomando Wii.
- Supporto per molti nuovi sensori del dispositivo. (Che ne dici del livello di luce ambientale o dell’angolo di cerniera di un telefono pieghevole?)
- Se un dispositivo o un gamepad ha più motori, ora è possibile scegliere tra di loro per rumble. (Richiede Android 12 o successivo.)
- Ora è possibile configurare molte impostazioni del controller booleano e numerico che prima non erano disponibili su Android, come Input relativo.
- L’impostazione del telecomando Wii laterale, le impostazioni numeriche per il puntamento del telecomando Wii e l’impostazione per disabilitare il puntamento dell’accelerometro/giroscopio sono state spostate dalle impostazioni di emulazione alle impostazioni normali.
- L’impostazione del tipo di controller touchscreen è stata revisionata. Gli utenti possono ora scegliere tra tutti i controller 1-4, ma la selezione di un’estensione del telecomando Wii ora viene eseguita nelle impostazioni normali.
- I gamepad separati non vengono più trattati come un singolo gamepad.
- Dolphin non confonde più pulsanti e assi con lo stesso ID.
- Possibili correzioni per vari problemi con il rilevamento degli assi.
Con l’integrazione del core di input delle build desktop in Android, le nuove funzionalità di input saranno disponibili più velocemente e in modo più coerente per le build di Dolphin su Android.
Tuttavia, è importante notare che ciò comporterà una discontinuità con le configurazioni precedenti del vecchio sistema di input di Android. Gli utenti dovranno quindi riconfigurare i controller utilizzando il nuovo sistema.
Android: Implementazione del supporto del provider di documenti
Con l’introduzione di Scoped Storage e le directory per app nelle versioni più recenti di Android, la modifica dei contenuti dell’utente in Dolphin è diventata più complessa.
L’accesso diretto alla directory utente convenzionale non è più possibile, poiché siamo limitati all’uso di directory protette per-app a cui solo Dolphin può accedere.
Questo crea difficoltà quando si desidera modificare i file per aggiungere Texture Pack o mod Riivolution, poiché è necessario utilizzare un computer o un metodo che aggiri le restrizioni di Android.
Per risolvere questo problema, JosJuice ha introdotto la funzionalità di importazione/esportazione dell’intera directory utente tramite file zip.
Tuttavia, si è scoperto che molte distribuzioni Android utilizzano formati zip non standard che la nostra implementazione di base non è in grado di gestire. Quindi era necessaria una soluzione migliore a lungo termine.
Fortunatamente, altri emulatori hanno affrontato gli stessi problemi e hanno trovato soluzioni valide. K0bin ha implementato il supporto del provider di documenti, consentendo ai gestori di file che supportano questa funzionalità di accedere alle directory per-app di Dolphin.
Corretto il deadlock di disconnessione del telecomando Wii
Una lamentela comune riguardante l’utilizzo di veri telecomandi Wii come controller emulati in Dolphin era che se il telecomando Wii veniva disconnesso improvvisamente, l’emulatore poteva bloccarsi.
Tuttavia, il problema non si manifestava in modo coerente, rendendo difficile identificarne la causa. Dopo vari tentativi, è stato finalmente scoperto un metodo affidabile per riprodurre l’incidente.
Una volta individuata la causa del blocco, è emerso che era legato al popolamento del dispositivo durante la fase di debug. Per risolvere il problema, sono state implementate misure di sicurezza per evitare il blocco, rendendo la disconnessione dei telecomandi Wii un po’ più sicura nell’emulatore.
Kill Renderer
Kill Renderer è un cambiamento significativo all’interno del nucleo di Dolphin, l’emulatore del GameCube e della Wii. Originariamente basato su un sistema di plugin, Dolphin ha mantenuto il componente chiamato “renderer” nonostante l’abbandono dei plugin.
Tuttavia, questo design ha comportato alcune limitazioni e il lavoro dedicato al renderer avrebbe potuto essere impiegato altrove nell’emulatore.
Il cambiamento noto come Kill Renderer rappresenta un passo verso una funzionalità chiamata presentazione asincrona, che separa l’output di Dolphin dal framerate del gioco.
Ciò risolve problemi come sovrapposizioni “mosse” durante giochi a bassa frequenza di fotogrammi e blocchi dell’output durante periodi in cui il gioco non emette fotogrammi.
La presentazione asincrona aprirà la strada a ulteriori miglioramenti, come il framepacing, che consente una migliore sincronizzazione dei fotogrammi.
Sebbene Kill Renderer non sia direttamente la presentazione asincrona, è un passo importante verso tale obiettivo. Non dovrebbe comportare modifiche evidenti per gli utenti, ma sono stati individuati e risolti alcuni bug principali e minori correlati a questo cambiamento.
Portale del potere – Supporto per l’audio di TrapTeam
Un aggiornamento recente riguarda l’emulazione del Portale del Potere utilizzato nel gioco Skylanders: Trap Team. Il Portale del Potere include un altoparlante che riproduce clip audio durante il gioco.
Inizialmente, l’emulazione del portale ignorava questa funzione a causa della complessità nel comprendere i pacchetti audio.
Tuttavia, deReeperJosh ha dedicato più tempo a studiarne il funzionamento e ha utilizzato del codice dal supporto di Dolphin per l’output dell’altoparlante del telecomando Wii. Questo gli ha permesso di riprodurre le clip audio dell’altoparlante del portale emulato sugli altoparlanti del sistema dell’utente.
Implementazione Infinity Base
DeReeperJosh ha esteso il suo lavoro di emulazione dei portali USB su Wii prendendo in considerazione un altro accessorio chiamato Disney Infinity Base.
Disney Infinity è un gioco di figurine collezionabili sviluppato dalla Disney e offre diverse campagne basate su proprietà Disney specifiche. Una parte interessante del gioco è la “scatola dei giocattoli” che consente agli utenti di combinare gli elementi sbloccati dalle campagne per creare i propri livelli.
Nonostante le limitazioni e le sfide legate all’emulazione di Disney Infinity con Dolphin, deReeperJosh decise di decodificare la base del gioco. Hanno applicato le conoscenze acquisite durante il lavoro sul Portale del Potere di Skylanders, poiché le due basi funzionano in modo simile.
Le statuette di Disney Infinity contengono dati simili a quelle di Skylanders, e gran parte del contenuto principale è già presente sul disco. La base legge i chip NFC presenti nelle figure o nei dischi per identificarli, e il gioco carica il contenuto appropriato dal disco corrispondente.
DeReeperJosh è riuscito a decodificare la comunicazione tra la base e la Wii, utilizzando la stessa interfaccia grafica (GUI) implementata per il Portale del Potere.
Sebbene l’emulazione della Disney Infinity Base sia stata resa possibile in Dolphin, il gioco stesso presenta ancora problemi di prestazioni significativi, anche su computer desktop di fascia alta.
Tuttavia, questo progresso rappresenta un ulteriore passo avanti verso l’obiettivo di una migliore emulazione del gioco. Si noti che la funzione non è ancora disponibile su Dolphin Android a causa della mancanza di supporto completo dell’interfaccia grafica.
Nuovo Post Processing Shaders
Negli ultimi due mesi, l’emulatore Dolphin ha introdotto alcuni shader Post Processing interessanti, anche se il suo supporto per gli shader non è il più robusto. Questi shader possono essere utili in casi specifici e potrebbero essere apprezzati da alcuni utenti.
Le console più vecchie non producevano immagini con pixel quadrati a causa dei display CRT per cui erano progettate. Questi display potevano ridimensionare orizzontalmente il segnale in modo arbitrario, quindi ogni console aveva proporzioni pixel diverse, anche diverse per ogni gioco.
Tuttavia, i display moderni utilizzano una griglia di pixel fissi che non può riprodurre in modo accurato questi pixel non quadrati. In emulazione, le soluzioni comuni per gestire questo problema sono l’uso del filtraggio Nearest Neighbor e del filtraggio Bilinear. Entrambi hanno i loro compromessi.
Il leggendario ASCII Art Shader è tornato in Dolphin grazie all’impegno del suo creatore originale e collaboratore di lunga data, degasus.
Nonostante non sia più attivamente coinvolto nel progetto, degasus non ha potuto lasciare che lo shader venisse eliminato ed è tornato allo sviluppo attivo per riparare questa ingiustizia.
Questa nuova versione non è solo un porting diretto dell’originale, ma degasus ha anche ottimizzato lo shader per funzionare su schede grafiche moderne che supportano il sottogruppo.
Ciò significa che se si dispone di una GPU compatibile, lo shader ora offre prestazioni migliorate, rendendo possibile l’utilizzo dell’ASCII Art Shader anche a risoluzioni elevate come 8k e 60fps (su una RTX 4090).
Con questa modifica, è probabile che degasus ritorni a essere meno attivo nel progetto, almeno fino alla prossima volta in cui si cercherà di rimuovere l’ASCII Art Shader.
Un settimo gioco in Bounding Box
La scoperta dell’uso del Bounding Box da parte di Ultimate Spider-Man sembrava essere l’ultimo caso conosciuto di un gioco con tale caratteristica. Tuttavia, recentemente sono stati identificati altri due giochi, Solitaire e Mahjong, che utilizzano il Bounding Box ma erano rimasti anonimi per molto tempo.
Grazie alla segnalazione di un utente e all’analisi degli sviluppatori, è stato scoperto che entrambi i giochi presentavano un problema con il Bounding Box.
Inizialmente, si pensava che il problema potesse essere correlato ad altre cause, come l’utilizzo di XFB o problemi con i file di salvataggio.
Tuttavia, si è scoperto che entrambi i giochi erano influenzati dalle impostazioni del Bounding Box. Un messaggio di registro iniziale aveva segnalato questo problema, ma era passato inosservato durante i test precedenti.
Questi giochi erano stati interrotti per anni a causa di un’impostazione predefinita errata del Bounding Box, che era disabilitato.
Inoltre, alcuni utenti avevano segnalato una regressione delle prestazioni, ma si è scoperto che era un falso positivo causato da un cambiamento nei valori predefiniti assegnati al gioco quando il bounding box era disabilitato.
L’attivazione del bounding box ha risolto completamente il problema delle prestazioni.
Con l’aggiunta di Solitaire e Mahjong, ora ci sono sette giochi noti che utilizzano il Bounding Box: Paper Mario: The Thousand Year Door, Super Paper Mario, Magical Mirror Starring Mickey Mouse, Disney’s Hide and Sneak, Ultimate Spider-Man, Solitaire e Mahjong.
Per evitare che altri giochi sfuggano all’attenzione, è stata aggiunta la “lettura del bounding box” alle statistiche di utilizzo di Dolphin. In questo modo, se gli utenti incontrano problemi legati al Bounding Box in futuro e hanno abilitato le statistiche di utilizzo, sarà possibile rilevarli e affrontarli tempestivamente.
Fonte: twitter.com