Loading...

E. NINTENDO 3DS


EmuCR: Citra




Citra es un emulador / depurador de código abierto experimental de Nintendo 3DS escrito en C ++. En este momento, solo emula un subconjunto muy pequeño de hardware 3DS y, por lo tanto, solo es útil para arrancar / depurar demos homebrew muy simples. Citra tiene licencia bajo GPLv2. Consulte el archivo license.txt incluido.


Citra (2018/09/15)

2018-09-15

Informe del progreso de Citra

Ha pasado un tiempo, desde el último informe, hemos tenido muchas nuevas características para Citra. Algunos de los más notables incluyen mejoras de varios jugadores, mejoras de sombreado de hardware (publicar GLvtx), una reescritura del sistema de registro y el soporte de cámara altamente codiciado. Nuestros sistemas de integración continua (CI) también se optimizaron. Además de estos, hemos tenido muchas más características menores, mejoras y correcciones de errores. Entonces, sin más preámbulos, vamos directo a ello:

Citra ha podido ejecutar muchos juegos a velocidades jugables desde hace un tiempo. Sin embargo, siempre ha faltado algo que el 3DS tiene: la capacidad de jugar con amigos. Para hacerlo realidad, nuestros desarrolladores jroweboy , B3n30 , Subv y JayFoxRox trabajaron incansablemente durante meses para realizar trabajos de ingeniería inversa del sistema inalámbrico local 3DS. Gracias a sus esfuerzos, Citra ahora emula el modo multijugador inalámbrico local a través de Internet. Esto le permite jugar sus juegos favoritos con sus amigos virtuales de todo el mundo. Más tarde , jroweboy , B3n30 y algunos otros trabajaron en varias mejoras de funciones y correcciones de errores.

Caracteristicas

Actualmente, las características multijugador incluyen:

  • Ahora tenemos varios servidores, mantenidos por nuestro propio FlameSage y muchos otros miembros de la comunidad en varios lugares del mundo, para que pueda conocer a otros en línea.
  • Ahora puede crear salas con capacidad para hasta 16 jugadores e incluso protegerlas con una contraseña.
  • Ahora puede establecer un juego preferido para su habitación.
  • También puede filtrar los servidores según sus necesidades.

¡Demasiados servidores para elegir!

Desde su lanzamiento inicial en Canary, los desarrolladores han escuchado a la comunidad y se han esforzado mucho por solucionar los errores que causan que los juegos sean incompatibles. También han agregado otras características para enriquecer la experiencia multijugador.

Títulos compatibles

Estamos orgullosos de anunciar que el modo multijugador actualmente funciona en la siguiente lista de títulos:

  • Dragon Quest Monsters: Joker 3 Profesional
  • Mansión de Luigi: Dark Moon
  • Mario Party: Los 100 mejores
  • Monster Hunter 3G y 3 Ultimate
  • Monster Hunter 4, 4G y 4 Ultimate
  • Monster Hunter X
  • Monster Hunter XX
  • Nuevo Super Mario Bros. 2
  • Pokémon Omega Ruby / Alpha Sapphire
  • Pokémon Sol / Luna
  • Pokémon Ultra Sol / Ultra Luna
  • Consola virtual Pokémon
  • Super Smash Bros.
  • La Leyenda de Zelda: Tri Force Heroes
  • Y muchos más.

Títulos incompatibles

Por diversas razones, los siguientes juegos fueron probados y no funcionan:

  • Asfalto Asalto 3D
  • Code of Princess ( una solución está en trabajos )
  • Dragon Quest Monsters: Terry's Wonderland 3D
  • F1 2011
  • Kirby Fighters Deluxe
  • Kirby Triple Deluxe
  • Visita a la isla Mario Party
  • Mario Party Star Rush
  • Mario Kart 7
  • Planet Crashers
  • Resident Evil: The Mercenaries 3D
  • Ridge Racer 3D
  • Generaciones sónicas
  • Street Fighter IV
  • Tetris Ultimate

Tenga en cuenta que esta lista no es absoluta, y que el modo multijugador puede funcionar o no en juegos que no se enumeran aquí.
También tenga en cuenta que los títulos Download Play y Spotpass no funcionan ya que están más allá del alcance del multijugador local actual .

Aunque se admite el modo multijugador, es posible que algunos juegos sigan teniendo problemas. Dado que los servidores están ubicados en varias ubicaciones, la latencia jugará un papel importante en su experiencia de juego, por lo que siempre elija un servidor que esté cerca (geográficamente). Utilice nuestros foros de soporte , IRC o Discord para obtener ayuda con respecto a problemas con el modo multijugador.

Citra ha recorrido un largo camino desde el simple hecho de poder representar gráficos en 2015, hasta poder ejecutar juegos en un estado jugable. Aun así, Citra solo fue rápido para los usuarios que tenían un mejor hardware. Los usuarios con procesadores más lentos sufrieron retraso y tartamudeo durante el juego.

Ahora, gracias a los esfuerzos combinados de phantom , jroweboy , wwylele , MerryMage y muchos más, ahora tenemos un procesador de hardware casi completo con enormes mejoras. Citra ahora usa la GPU host al máximo para representar gráficos. wwylele y MerryMage se encargaron de simplificar el enorme montón de código en partes más pequeñas, arreglando y probando.

Gracias a degasus de la comunidad Dolphin, que impartió su valioso conocimiento y comprensión de las GPU y OpenGL, pudimos optimizar el respaldo del almacenamiento en tiempo real agregado por fantasma . Esto fue hecho completamente por el mismo Degasus ( aquí , allí y eso ). La antigua forma de cargar los datos (tanto en el vértice como en las constantes) era una simple llamada glBufferData . Tenga en cuenta, sin embargo, que la GPU tiene una gran latencia de ejecución, por lo que no puede simplemente copiar el nuevo contenido sobre el búfer existente. El conductor tiene que elegir entre diferentes formas de tratar este problema, con diferentes inconvenientes:

  1. Espere a que la GPU termine y copie en el búfer de destino. Por lo general, este método es el más rápido para grandes cargas, bien en juegos comunes, pero terrible para emuladores.
  2. Asigne un nuevo buffer e indique a la GPU qué nuevo buffer debe usarse ahora. También debe preocuparse de liberar el búfer antiguo una vez que ya no esté en uso. Esto tiende a tener una sobrecarga de CPU enorme y no está disponible en actualizaciones de búfer parciales, como LUT de iluminación.
  3. Copie los datos en un búfer de transición interno y solicite a la GPU que los copie nuevamente en el destino cuando esté listo. Esto utiliza el doble del ancho de banda de la memoria, y cambiar entre renderizado y copiado también lleva un tiempo para la GPU. Esto demuestra ser un cuello de botella significativo si se hace para cada llamada de sorteo.

Al final, todos estos son malos en términos de rendimiento. Es una simple carga, pero requiere muchas copias e interruptores de contexto, o la GPU está estancada ( más sobre eso aquí ). En cambio, Citra asigna un gran búfer de etapas, copia los datos a la posición actual dentro del búfer y le dice a la GPU que acceda directamente a los datos desde allí. El conductor no tiene el alcance de interpretar lo que le pedimos que haga.

Esto tiene un inconveniente también . La GPU ahora accede a la memoria principal a través de PCIe. Entonces, si vamos a reutilizar los mismos datos en el siguiente cuadro, tiene que volver a pasar por el cuello de botella PCIe. Pero nunca utilizamos los mismos datos nuevamente y, por lo tanto, obtenemos un gran impulso en el rendimiento.

wwylele modificó la interfaz de usuario de configuración y cambió el nombre de algunas partes de ella. Sin embargo, esto causó cierta confusión sobre la ventana de configuración y las características de la GPU.

¿Qué ha cambiado en la interfaz de usuario?

Con el lanzamiento inicial de GLvtx, agregamos soporte para ejecutar sombreadores en la GPU host. Entonces, teníamos un menú desplegable llamado Shader Emulation para seleccionar CPU o GPU, para ejecutar los sombreadores. La opción ahora se ha renombrado como Habilitar Shader de hardware . Cuando está habilitado, hace uso de la GPU host, y cuando está deshabilitado, usa solo la CPU.

Debido a que muchos de los usuarios tienen hardware antiguo, presentamos una opción llamada Shader de hardware preciso . Más tarde se cambió el nombre a Multiplicación precisa , porque técnicamente eso es lo que estaba haciendo. Cuando esté habilitado, representará juegos con mayor precisión a costa de un rendimiento más lento . Lo mismo ocurre con el Shader de geometría precisa . Anteriormente esto era configurable a través del archivo INI, pero ahora se puede configurar en la interfaz de usuario.

Pestaña Gráficos antiguos

Pestaña Gráficos antiguos

Nueva pestaña de gráficos

Nueva pestaña de gráficos

Durante el tiempo en Canarias, nuestros contribuyentes hicieron muchas pruebas. Probaron muchos juegos, bajo variadas condiciones de hardware y enviaron valiosos datos de telemetría, registros de fallos, etc., que nos ayudaron a solucionar problemas con el soporte del sombreador de hardware.

Nota : Desafortunadamente, debido a problemas con los controladores de las GPU de AMD y al soporte inadecuado de OpenGL en macOS, es posible que el sombreador de hardware no funcione mejor que el procesador de software en estas condiciones. Sin embargo, no se preocupe, ya que se están realizando investigaciones sobre posibles soluciones que podrían surgir antes de lo que cree.

Una de las partes del proyecto que más tiempo y recursos consumía eran nuestros entornos de generación de compilación. Usamos Travis y Appveyor para lanzar versiones completamente funcionales para descargar. Sin embargo, el tiempo que se tardó en crear las compilaciones fue demasiado largo y si se detuvo abruptamente, tardó aún más tiempo en crear las compilaciones nuevamente. Gracias a las contribuciones de liushuyu , pudimos optimizar todo este proceso y hacer que sea muy eficiente crear y publicar los últimos cambios en nuestro sitio.

Nuestro viejo sistema de registro tenía varios inconvenientes y debía actualizarse. Por lo tanto, jroweboy y daniellimws diseñaron e implementaron un sistema de registro más nuevo y eficiente basado en fmtlib. Esto elimina la ventana de la consola fea e hizo muchas mejoras bajo el capó para el sistema de registro. Esto hará que identificar y solucionar problemas sea mucho más rápido. Una vez realizada la implementación, la migración de nuestra base de código al nuevo sistema fue un gran esfuerzo compartido por daniellimws y muchos otros.

Una de las características más solicitadas de Citra ha sido el soporte para usar la cámara del sistema para escanear códigos QR y otros tipos de imágenes. zhaowenlan1779 se encargó de proporcionar a Citra esta característica. Al hacer uso de las bibliotecas Qt disponibles, trabajó en la implementación durante semanas y finalmente pudo finalizar la función. Citra ahora cuenta con la capacidad de escanear imágenes directamente y usar la cámara del sistema de una manera similar a la cámara 3DS.

Soporte de la cámara del sistema

Desde hace mucho tiempo, la interfaz de usuario de Citra ha estado en inglés y no ha tenido absolutamente ningún soporte para otros idiomas. wwylele discutió esto extensamente con otros colaboradores y finalmente trajo las traducciones de UI a Citra. Citra ahora se puede usar en muchos otros idiomas. Tenga en cuenta que estas traducciones son mantenidas por nuestros propios miembros de la comunidad y las traducciones se alojan en Transifex . Ahora, usted también puede enviar una traducción para su idioma (si aún no existe) o revisar las traducciones existentes para que sean precisas.

Citra: ahora disponible en tu idioma

Con los años, Citra ha mejorado a pasos agigantados. Sin embargo, siempre ha habido una falta de información coherente sobre la compatibilidad del juego. Presentamos la lista de compatibilidad del juego para solucionarlo. Tener una lista fue útil, pero mantenerlo resultó ser una tarea tediosa. Después de mucha lluvia de ideas, BreadFish64 agregó la opción en la interfaz de usuario para enviar casos de prueba a través de telemetría. Estos resultados son enviados por los propios usuarios y, a su vez, se utilizan para actualizar la lista de compatibilidad de juegos.

Pasos para enviar casos de prueba a través de telemetría

Paso 1

Paso 1

Paso 2

Paso 2

Paso 3

Paso 3

Etapa 4

Etapa 4

Nota : Para poder informar la compatibilidad, primero debe iniciar sesión en el servicio web de Citra, utilizando su nombre de usuario y token.
(Ver Emulación -> Configurar -> Web)

Servicio web Citra

Diverso

Varias otras contribuciones a las dependencias externas han sido hechas por Lioncash , MerryMage y muchos otros. Varios servicios se convirtieron al nuevo marco de servicio. Los colaboradores contribuyeron con muchas correcciones de errores menores y mejoras de funciones bajo el capó. Creemos que incluso la contribución más pequeña es valiosa y sin estos colaboradores , estas nuevas características no hubieran sido posibles.

 

Calle Los Nogales 251 Torre 3 Oficina 709 El Agustino Lima
(+51) 984 763 626