Cómo hice amigos para PlayStation 2 y PlayStation Portable (spoiler - combinado en un emulador)

Hola lectores El año pasado publiqué mi proyecto de pasatiempo Red Omega PS2 emulator . La idea era adaptar el control del emulador PCSX2 original para juegos en Surface Pro a través de la pantalla táctil.

El código original del emulador PCSX2 se reescribió en forma de un módulo DLL, cargado en el código C # con una interfaz gráfica en WPF. El proyecto resultó ser viable y exitoso: Final Fantasy X y Final Fantasy XII se dispararon. Pero hace seis meses, encontré un enlace a Valkyria Chronicles 4 en Steam. Compré el primer Valkyria Chronicles en el disco y me "golpeó", pero hay una pregunta: ¿dónde está el segundo y el tercero? La respuesta se encontró rápidamente: estas secuelas salieron solo en consolas de juegos. Las versiones disponibles para PlayStation Portable resultaron ser las más accesibles, a través del emulador PPSSPP. El teléfono inteligente no está mal, pero en Surface Pro no me gustaron los controles a través de Touch. Sí, y cambiar de Omega Red a PPSSPP, y viceversa, no es una cacería. Y luego surgió una idea "loca": ¡reescribir el código PPSSPP original en forma de un módulo DLL! ¡Y convierte a Omega Red en una PLATAFORMA para PlayStation 2 y PlayStation Portable!


Fácil de decir, pero mucho más difícil de hacer. El emulador PPSSPP original se está desarrollando como un proyecto de código abierto y está disponible en forma de código completo para su estudio y modificación. El código es interesante y puede ejecutarse en una variedad de API gráficas: OpenGL, DirectX9, DirectX11, Vulkan. Además, tiene una GUI incorporada. Pero la arquitectura PPSSPP es más "clara" que PCSX2: se simplifican más la modularidad y las dependencias. La clave principal para realizar mi idea fue la capacidad de cargar un disco de juego y guardarlo como argumento para el programa. La solución básica es reescribir la función EXE de entrada en la función DLL EXPORTADA. Por supuesto, habrá problemas al crear una segunda "ventana", redirigir la salida del renderizador gráfico al contexto gráfico WPF, conectar el código táctil, etc. etc., pero ya decidí todo esto cuando reescribí el código para PCSX2: ya existen plantillas viables.

¿Cuál es el resultado? ¡La solución funciona! Fue posible combinar dos emuladores tan diferentes en una solución con un cambio continuo entre juegos para diferentes emuladores. El resultado se puede evaluar en el video:


Además, me gustaría mencionar los siguientes cambios, en comparación con la primera versión del emulador Red Omega PS2 :

1. Cambió la combinación de colores: los comentarios indicaron la inconveniencia de la combinación de colores de la interfaz: rojo. Un extraño inconveniente, pero decidí agregar un rango invertido de "Azul":

imagen

2. Tessellation: se ha agregado la función "Tessellation" de DirectX 11 para los juegos de PCSX2. Esta función le permite aumentar el número de polígonos para los modelos:

imagen

La teselación se selecciona de la opción "Esquema de representación":

imagen

PREDETERMINADO

imagen

Teselado

imagen

PREDETERMINADO

imagen

Teselado

imagen

3. FXAA: para juegos en PCSX2, se ha agregado la función "Habilitar FXAA" para eliminar los pasos a lo largo de los límites de los polígonos; la solución no funciona perfectamente, pero funciona:

imagen

4. Guardado rápido: guarde el estado del emulador con un comando:

imagen

5. Control de volumen:

imagen

Actualmente, el programa está disponible en: Omega Red y se presenta en GitHub: OmegaRed

Source: https://habr.com/ru/post/445022/


All Articles