Special K "Carinhosamente conhecido como o canivete suíço dos jogos para PC, o Special K faz um pouco de tudo. É mais conhecido por corrigir e aprimorar gráficos, seus muitos mods detalhados de análise e correção de desempenho e uma paleta de ferramentas em constante crescimento que resolver uma ampla variedade de problemas que afetam os jogos de PC."
Conteúdo do Repositório
Este repositório contém o código-fonte para a carga útil de injeção de código do Special K (
SpecialK(32|64).dll
).Utilitários de suporte como SKIF ( S pecial K I njection F rontend) e o agora obsoleto SKIM ( S pecial K I nstall M anger) são mantidos como projetos separados. Além disso, alguns mods mais antigos criados com Special K existem como plug-ins DLLs independentes; plug-ins e SKIM não são mais mantidos ativamente, mas podem ser acessados através do perfil GitHub de Kaldaien.
Construir dependênciasTodas as dependências de construção do Special K são incluídas quando você clona o repositório começando com 23.5.7. Versões mais antigas têm uma dependência adicional do DirectX SDK de junho de 2010.
Special K requer Visual C++ 2022 ou mais recente para compilar devido a recursos de linguagem não presentes em compiladores mais antigos.
Dependências de plataformaSpecial K não é compatível com nada anterior ao Windows 8.1, embora (a partir de 23.5.7) ainda seja compilado e executado (com recursos massivamente reduzidos) no Windows 7 (atualização da plataforma).
Ele roda em WINE e é compatível com DXVK, mas deve ser configurado com
UsingWINE=true
em seu arquivo INI por jogo para funcionar no Linux.
VariadoHá uma boa chance de o projeto não ser compilado corretamente se você usar a configuração de compilação Debug. Special K foi projetado para produzir compilações de versão depuráveis.
As DLLs do Special K são capazes de injetar seu código de duas maneiras:
Proxy de injeção local /DLL wrapper
SpecialK(32|64).dll
para (dxgi|d3d11|d3d9|d3d8|ddraw|dinput8|OpenGL32).dll
e pegue uma carona por meio de importações estáticas ou chamadas para LoadLibrary (...)
.Cadeia de gancho global Win32 de injeção global
Esta é a técnica preferida, e a DLL é capaz de inicializar o gancho sem qualquer assistência externa via
RunDLL_InjectionManager (...)
( rundll32.exe hospedará a DLL como um processo normal da interface do usuário do Win32).
Existem muitas outras maneiras possíveis de injetar DLLs; as duas descritas acima podem ser usadas sem nenhuma ferramenta adicional.
O Special K terá prazer em injetar em um jogo que já está em execução se você quiser construir sua própria ferramenta usando algo como CreateRemoteThread (...)
, mas tenha em mente que a injeção tardia impedirá alguns dos recursos do Special K (particularmente aqueles relacionados ao D3D substituições e mods de shader/textura) funcionem.
Os ganchos CBT foram escolhidos devido ao pedido da corrente. Como a maioria das APIs gráficas no Windows precisa de uma janela antes de poder fazer uma inicialização não trivial, um gancho CBT nos leva ao aplicativo de maneira confiável antes da criação da cadeia de troca D3D9/11/12.