Como fiz amigos PlayStation 2 e PlayStation Portable (spoiler - combinados em um emulador)

Olá leitores. No ano passado, publiquei meu emulador Red Omega PS2 . A idéia era adaptar o controle do emulador PCSX2 original para jogos no Surface Pro via Touch Screen.

O código do emulador PCSX2 original foi reescrito na forma de um módulo DLL, carregado no código C # com uma interface gráfica no WPF. O projeto acabou sendo viável e bem-sucedido - Final Fantasy X e Final Fantasy XII foram um sucesso. Mas seis meses atrás, me deparei com um link para Valkyria Chronicles 4 no Steam. Comprei as primeiras Valkyria Chronicles no disco e me "bati", mas há uma pergunta - onde estão a segunda e a terceira! A resposta foi encontrada rapidamente - essas sequências foram lançadas apenas em consoles de jogos. As versões disponíveis para o PlayStation Portable acabaram sendo as mais acessíveis - através do emulador PPSSPP. O smartphone não é ruim, mas no Surface Pro não gostei dos controles via Touch. Sim, e mude de Omega Red para PPSSPP e vice-versa não é uma caçada. E então surgiu uma idéia "louca" - reescrever o código PPSSPP original na forma de um módulo DLL !!! E transforme o Omega Red em uma PLATAFORMA para os jogos PlayStation 2 e PlayStation Portable !!!


Fácil de dizer, mas muito mais difícil de fazer. O emulador PPSSPP original está sendo desenvolvido como um projeto de código aberto e está disponível na forma de código completo para estudo e modificação. O código é interessante e pode ser executado em uma variedade de APIs gráficas: OpenGL, DirectX9, DirectX11, Vulkan. Além disso, possui uma GUI integrada. Mas a arquitetura PPSSPP é mais "clara" que PCSX2 - mais modularidade e dependências são simplificadas. A chave principal para realizar minha ideia foi a capacidade de carregar um disco do jogo e salvá-lo como argumento para o programa. A solução elementar é reescrever a função EXE de entrada na função DLL EXPORTED. Obviamente, haverá problemas com a criação de uma segunda "janela", redirecionando a saída do renderizador gráfico para o contexto gráfico WPF, conectando o código Touch, etc. etc., mas eu já decidi tudo isso quando reescrevi o código para o PCSX2 - já existem modelos viáveis.

Qual é o resultado - a solução funciona! Foi possível combinar dois emuladores tão diferentes em uma solução com alternância contínua entre jogos para emuladores diferentes. O resultado pode ser avaliado no vídeo:


Além disso, gostaria de mencionar as seguintes alterações, em comparação com o primeiro lançamento do emulador Red Omega PS2 :

1. Alterou o esquema de cores - os comentários indicaram a inconveniência do esquema de cores da interface - vermelho. Um inconveniente estranho - mas eu decidi adicionar um intervalo invertido de "azul":

imagem

2. Mosaico - a função "Mosaico" do DirectX 11. foi adicionada para jogos PCSX2. Essa função permite aumentar o número de polígonos para os modelos:

imagem

O mosaico é selecionado na opção "Esquema de renderização":

imagem

PADRÃO

imagem

Em mosaico

imagem

PADRÃO

imagem

Em mosaico

imagem

3. FXAA - para jogos no PCSX2, a função “Ativar FXAA” foi adicionada para remover as etapas ao longo dos limites dos polígonos - a solução não funciona perfeitamente, mas funciona:

imagem

4. Quick save - salve o estado do emulador com um comando:

imagem

5. Controle de volume:

imagem

Atualmente, o programa está disponível em: Omega Red e apresentado no GitHub: OmegaRed

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


All Articles