Il Team Citra pubblica online un nuovo report sui progressi raggiunti dall’emulatore del Nintendo 3DS per PC Windows, Mac OS e Linux a 64 bit.
Il team ci tiene a precisare come non siano state apportate molte modifiche al programma, mentre sono state diverse le correzioni che si sono concentrate per lo più sui miglioramenti di accuratezza e sull’implementazione di alcune funzionalità.
Aggiunti pause, tasti di scelta rapida e limite di velocità by valentinvanelslande
Ora è possibile assegnare tasti di scelta rapida per mettere il gioco in pausa e attivare la limitazione della velocità. Per impostazione predefinita, è possibile mettere in pausa il gioco premendo il pulsante F4 e attivare la limitazione della velocità con Ctrl + Z.
Se si vuole cambiare la combinazione dei tasti o associare i pulsanti con altre azioni, basta modificare il file di configurazione Citra qt-config.ini
.
La proprietà per la messa in pausa è Shortcuts\Main%20Window\Continue\Pause\KeySeq
mentre per attivare la limitazione della velocità, Shortcuts\Main%20Window\Toggle%20Speed%20Limit\KeySeq
.
Aggiunto il supporto per directory di gioco multiple by BreadFish64
Ora puoi configurare Citra per cercare directory multiple per giochi e app! Questo ci permette di mantenere i titoli su diverse cartelle e, se all’interno della scheda SD virtuale o NAND sono installati dei titoli pubblicabili, questi verranno visualizzati nella loro sezione in modo da poterli avviare dall’elenco dei giochi.
Aggiungi supporto per 3D stereoscopico by N00byKing
Se sei uno dei pochi fortunati con una TV 3D o un monitor collegato al tuo computer, il supporto 3D stereoscopico è stato appena aggiunto in Citra! Puoi abilitarlo andando su Emulation → Configure… → Graphics → Layout, spuntando la casella di controllo Enable Stereoscopic 3D e modificando il layout dello schermo su Side by Side.
Anche se non puoi vederlo in 3D, prova ad incrociare gli occhi o ad usare uno specchio!
Implementazione della tastiera software by zhaowenlan1779 e jroweboy
Per molto tempo, molti giochi non sono stati riproducibili o hanno avuto bisogno di soluzioni alternative su Citra a causa della necessità di utilizzare l’applet della tastiera software.
Il motivo è che, ogni volta che tentavano di aprirlo, Citra non lo implementava, e quindi diceva semplicemente al gioco che l’utente inseriva “Citra” e toccava OK, senza chiedere realmente la conferma.
Ma ora, grazie a zhaowenlan1779 e jroweboy, l’emulatore Citra ha finalmente ottenuto la corretta emulazione della tastiera software!
Ogni volta che un gioco lo richiede, Citra interromperà il gioco e aprirà una casella di testo che potrete compilare come qualsiasi altro prompt.
Ora puoi cambiare il tuo nome in qualsiasi cosa!
Archivi di sistema Open Source (#3977, #3881) by B3n30
Molti giochi Nintendo 3DS richiedono l’uso di archivi di sistema, che contengono cose come caratteri, un elenco di parolacce e risorse per Mii.
Poiché questi sono protetti da copyright, Citra non ha potuto includerli e gli utenti dovevano scaricare una copia dalle loro console, il che era un processo generalmente noioso e soggetto a errori.
Ora, B3n30 ha creato font alternativi open source e una lista di parolacce che può essere usata nei giochi invece che negli archivi ufficiali.
Implementata la mappa delle ombre by wwylele
Shadow mapping è un modo per applicare rapidamente le ombre alle scene 3D. Per prima cosa rende la scena senza informazioni su illuminazione, texture o colore, con una telecamera virtuale da cui inizia la fonte di luce.
Quindi, da quel rendering viene estratta la mappa di profondità. Viene quindi applicato come una texture alla scena oscurata, rendendo le aree di esso direttamente visibili dalla sorgente luminosa appaiono più luminose.
PICA200 (la GPU all’interno del 3DS) e OpenGL lo implementano in modi diversi, in particolare in due aree importanti:
- Il primo è che PICA200 supporta una variante chiamata “soft shadows”, in cui la mappa della profondità è sfocata prima di essere applicata alla scena. Ciò si traduce in ombre che sembrano meno frastagliate e nitide, rendendo la fonte di luce più diffusa e uniformemente diffusa in tutta la scena. OpenGL non supporta affatto questo.
- Il secondo è che PICA200 memorizza le mappe di profondità destinate alla mappatura delle ombre come texture semplici nel formato RGBA8. Un sacco di giochi lo sfruttano per convertire rapidamente altri tipi di texture da un formato interno a RGBA8. Ma OpenGL memorizza queste mappe in un formato interno a quella scheda grafica, come qualsiasi altra mappa. (RGBA8 o 8 bit RGBA è un formato di texture, che è la combinazione di un modello di colore RGB (rosso verde blu) con un quarto canale alfa in più).
Il primo punto non è poi così significativo, dal momento che la morbidezza può essere ignorata su OpenGL, risultando in una mappatura shadow molto veloce (ma inaccurata). Poiché i giochi utilizzano raramente ombre morbide, questo può essere ignorato in modo relativamente sicuro.
Il secondo punto però, perché i giochi lo usano molto spesso, deve essere implementato con precisione. Il modo ingenuo sarebbe quello di convertire manualmente le texture interne in RGBA8 manualmente, ma ciò rallenterebbe il rendering fino alla ricerca per indicizzazione.
Il modo più intelligente sarebbe quello di provare a ingannare il driver della scheda grafica per eseguire una conversione simile, ma un tale tentativo ha esposto un sacco di problemi, portando instabilità.
Dopo un duro lavoro di wwylele, entrambi i problemi sono stati risolti con un’unica soluzione. OpenGL supporta un’estensione chiamata Image Load/Store, che consente agli shader di leggere e scrivere direttamente su qualsiasi texture.
Usando questo, ha creato uno shader in grado di implementare con precisione entrambe le ombre morbide e convertire la mappa di profondità dal suo formato interno a RGBA8 molto rapidamente.
Sfortunatamente, poiché Image Load/Store è un’estensione opzionale, non tutte le schede grafiche OpenGL 3.3 lo supporteranno.
In questi casi, Citra ignorerà semplicemente le mappe shadow, rendendo il rendering inaccurato ma utilizzabile.
Image Load/Store è diventato una parte obbligatoria di OpenGL nella versione 4.2, quindi ogni scheda grafica conforme a OpenGL 4.2 è garantita per funzionare correttamente.
Citra richiede solo una conformità minima a OpenGL 3.3, ma la conformità a OpenGL 4.2 può portare a un rendering più accurato.
Implementato il backend audio cubeb by darkf
cubeb
è una libreria audio (sviluppata da Mozilla Foundation) che è multipiattaforma e, soprattutto, veloce. Rapporti dal blog di Dolphin hanno dimostrato che funzionava a un terzo della latenza del loro back-end OpenAL.
Ora, grazie al lavoro svolto da Darkf e alcune correzioni di MerryMage, l’emulatore Citra può beneficiare dello stesso audio a bassa latenza di Dolphin e Mozilla Firefox.
Ciò porterà a una distorsione e una balbuzie significativamente inferiore nei giochi. Basta ricordarsi di abilitarlo nel menu di configurazione impostando Output Engine
come cubeb
.
Volume Slider by Fearlesstobi
Ora puoi configurare il livello del volume di Citra direttamente dalla finestra di configurazione. Questo ci permette di impostare un livello di volume individuale per Citra senza doverlo impostare manualmente nelle impostazioni del sistema operativo.
Discord Rich Presence by CaptV0rt3x
Rich Presence ti permette di sfruttare la sezione “Now Playing” completamente noiosa nel profilo di un utente Discord. Questa funzione consente agli utenti di mostrare quando stanno giocando i loro giochi preferiti su Citra.
Questa è stata una richiesta di funzionalità comune da parte di molti utenti e, poiché molti altri emulatori hanno già implementato questa caratteristica, ha avuto senso implementarlo anche qui.
Discord Rich Presence funziona creando una connessione locale con Citra e l’App Discord. Non si connette a (o) invia alcun dato ai server Discord.
Questa opzione è configurabile dall’utente, quindi puoi scegliere di mostrare o non mostrare una presenza ricca nello stato di Discord.
Basta andare su Emulation → Configure… → Web → Discord Presence e selezionare/deselezionare “Show current game in your Discord status”.
Imposta i valori predefiniti per le impostazioni by zhaowenlan1779
La maggior parte delle richieste di supporto che riceviamo sono principalmente dovute agli utenti che abilitano o disabilitano accidentalmente alcune impostazioni. Ma ora con questa funzione, abbiamo valori predefiniti per tutte le nostre impostazioni.
Ciò garantisce che in caso di eventuali modifiche alle nuove impostazioni, la maggior parte degli utenti (che non ha personalizzato tali impostazioni) ora avrà automaticamente il nuovo valore predefinito.
Aggiunto il supporto per giochi crittografati by wwylele
Ora puoi usare direttamente i tuoi dump di gioco criptati in Citra, senza doverli decifrare. Ciò richiede che l’utente fornisca le proprie chiavi tramite un file di testo in sysdata/aes_keys.txt
.
Attualmente tutti i metodi di crittografia conosciuti sono implementati eccetto che per la crittografia Seed. Il crypto dei semi viene utilizzato nei nuovi giochi di eshop, che essenzialmente utilizza una chiave univoca del titolo, che è memorizzata al di fuori della ROM.
Supporto per script by EverOddish
Lo scripting è una funzionalità estremamente utile che ci permette di fare cose come il debug di emulatori interni, il reverse engineering di giochi 3DS interni, Tool-Assisted-Speedrunning (TAS) e la capacità di manipolare la memoria nei giochi.
Attraverso questa interfaccia è possibile implementare un’interfaccia simile a un cheat (anche se non specificamente i codici Gameshark/AR).
Gli utenti possono creare i propri script o utilizzare script disponibili pubblicamente per ottenere potere su cose come visualizzazione, input e memoria dello schermo di gioco.
Gli script possono anche essere utilizzati per leggere o modificare lo stato del gioco interno. EverOddish ha scritto alcuni script che possono leggere le statistiche interne dei Pokémon e aggiornare automaticamente i file di immagine per la tua festa attuale.
Questa funzione è molto utile per gli streamer che potrebbero voler visualizzare le informazioni di gioco sui propri stream.
Film – Registrazione e riproduzione di input di giochi (#2882, #3922) by danzel e zhaowenlan1779
Questa funzione, da non confondere con la registrazione video/audio, implementa un modo per registrare gli input di gioco e riprodurli.
Ogni volta che l’hardware legge un dispositivo di input (pulsanti, touch screen, accelerometro, giroscopio, c-stick) l’emulatore copia (durante la registrazione) o sostituisce (durante la riproduzione) i valori. Al termine della riproduzione, rilasciamo il controllo degli input in modo che l’utente possa assumere il controllo.
Per questo, danzel si è fortemente ispirato al sistema su Dolphin e zhaowenlan1779 ha scritto l’interfaccia utente per questa funzione. Questo metodo si traduce in file .ctm
(film Citra TAS) che sono riproducibili in Citra.
Per riprodurre il file .ctm
di un gioco è necessario avere il gioco e anche impostare manualmente il tempo di sistema di Citra sullo stesso valore iniziale del file .ctm
.
Questa funzione rende molto più facile il debugging dei bug nei giochi, in quanto non ci richiede di ripetere l’intero processo.
Aggiunta la configurazione dell’ora di sistema by B3N30
Ogni volta che un gioco richiedeva informazioni sull’ora, Citra utilizzava sempre l’orario di sistema del PC. Questo metodo aveva un paio di problemi, ad esempio, se giocavi a una velocità del 200% per 2 ore.
Dato che funziona al doppio della velocità massima, la riproduzione per 2 ore in tempo reale dovrebbe riflettere 4 ore di tempo simulato. Ma, a causa di Citra che inviava il tempo del PC ai giochi, non stava succedendo.
Inoltre, i giocatori potrebbero voler impostare il tempo di Citra su un valore specifico per garantire coerenza con TAS o con RNG (generatore di numeri casuali) o per ottenere eventi specifici del gioco nel tempo.
Prima dovevi modificare il tempo di sistema del PC per raggiungere questo obiettivo, ma grazie a B3N30, ora puoi semplicemente impostarlo nella finestra di configurazione di Citra.
Joystick Hot-plugging by B3N30
Per molto tempo, Citra non ha supportato il controller hot plugging. Ciò significava che se per caso il tuo controller si disconnetteva, Citra non sarebbe stato in grado di rilevarlo dopo la riconnessione, a meno che tu non riavviavi l’emulatore.
Questo ha causato molta frustrazione tra gli utenti che preferivano giocare con i controller.
L’hot plugging (chiamato anche hot swap) è la possibilità di aggiungere e rimuovere dispositivi su un computer mentre il computer è in esecuzione e il sistema operativo riconosce automaticamente la modifica.
Grazie agli sforzi di B3N30 e di jroweboy (che ha ricercato la configurazione del controller SDL), Citra ora non riesce a rilevare i controller in caso di disconnessione.
Tuttavia, a causa della pesante rielaborazione del codice di configurazione di ingresso esistente, questo richiede agli utenti di riconfigurare i loro controller dopo aver aggiornato Citra.
Client UDP per fornire controlli motion & touch (#4049, #4059) by jroweboy e zhaowenlan1779
I precedenti controlli di movimento di Citra erano un po’ scomodi da usare. Dovevi usare il tasto destro del mouse e trascinare per inclinare lo schermo, ma spesso era difficile capire dove spostare il cursore per ottenere il tipo di inclinazione che vogliamo.
L’uso di un dispositivo reale per i controlli di movimento è semplicemente molto più intuitivo e sarà un’esperienza migliore per gli utenti.
Come tale, jroweboy ha deciso di implementare il protocollo cemuhook motion/touch che aggiunge la possibilità per gli utenti di collegare diversi dispositivi a citra per inviare il movimento diretto e toccare i dati in citra.
Cemuhook è un plugin molto popolare sviluppato da rajkosto per Cemu – l’emulatore della Wii U. Questo protocollo è stato scelto semplicemente perché non ci sono molte alternative e questo ha già un buon supporto per i dispositivi.
Inoltre, poiché utilizza UDP, funziona praticamente su qualsiasi cosa con uno stack di rete e consente al server di essere anche un dispositivo di rete remoto (utile per il supporto di movimento Android).
zhaowenlan1779 ha scritto l’interfaccia utente per questa funzione, per renderla facilmente accessibile e configurabile da tutti gli utenti.
Oltre a quelli sopra citati, abbiamo avuto anche un sacco di ottimizzazioni minori e correzioni di bug portati da yuzu.
Abbiamo apportato modifiche al nostro sistema di autenticazione per utilizzare JWT (token web JSON), aggiunto un selettore del colore di sfondo, apportato miglioramenti allo stub GDB e molto altro ancora.
Download: Citra 3DS emu per Windows 64x, Mac 64x e Linux 64x