Special K "Cariñosamente conocida como la navaja suiza de los juegos de PC, Special K hace un poco de todo. Es mejor conocido por arreglar y mejorar gráficos, sus numerosos análisis de rendimiento detallados y modificaciones de corrección, y una paleta de herramientas en constante crecimiento que resolver una amplia variedad de problemas que afectan a los juegos de PC."
Contenido del repositorio
Este repositorio contiene código fuente para la carga útil de inyección de código de Special K (
SpecialK(32|64).dll
).Las utilidades de soporte como SKIF ( S pecial K Injection F rontend) y el ahora obsoleto SKIM ( S pecial K I nstall M enger) se mantienen como proyectos separados. Además, algunas modificaciones más antiguas creadas con Special K existen como archivos DLL de complemento independientes; Los complementos y SKIM ya no se mantienen activamente, pero se puede acceder a ellos a través del perfil GitHub de Kaldaien.
Construir dependenciasTodas las dependencias de compilación de Special K se incluyen cuando clonas el repositorio a partir de 23.5.7. Las versiones anteriores tienen una dependencia adicional del SDK de DirectX de junio de 2010.
Special K requiere Visual C++ 2022 o posterior para compilarse debido a características del lenguaje que no están presentes en los compiladores más antiguos.
Dependencias de plataformaSpecial K no es compatible con sistemas anteriores a Windows 8.1, aunque (a partir de 23.5.7) aún se compila y ejecuta (con funciones enormemente reducidas) en Windows 7 (Actualización de plataforma).
Se ejecuta en WINE y es compatible con DXVK, pero debe configurarse con
UsingWINE=true
en su archivo INI por juego para funcionar en Linux.
MisceláneasExiste una buena posibilidad de que el proyecto no se compile correctamente si utiliza la configuración de compilación de depuración. Special K está diseñado para producir compilaciones de versión depurables.
Las DLL de Special K son capaces de inyectar su código de dos maneras:
Proxy de inyección local /DLL contenedora
SpecialK(32|64).dll
a (dxgi|d3d11|d3d9|d3d8|ddraw|dinput8|OpenGL32).dll
y obtenga un viaje a través de Static Imports o llamadas a LoadLibrary (...)
.Inyección global Win32 Cadena de gancho global
Esta es la técnica preferida, y la DLL es capaz de iniciar el enlace sin asistencia externa a través de
RunDLL_InjectionManager (...)
( rundll32.exe alojará la DLL como un proceso normal de interfaz de usuario de Win32).
Hay muchas más formas posibles de inyectar archivos DLL; las dos descritas anteriormente se pueden utilizar sin herramientas adicionales.
Special K se inyectará felizmente en un juego que ya se está ejecutando si desea crear su propia herramienta usando algo como CreateRemoteThread (...)
, pero tenga en cuenta que la inyección tardía impedirá algunas de las funciones de Special K (particularmente aquellas relacionadas con D3D). anulaciones y modificaciones de sombreado/textura) funcionen.
Se eligieron los ganchos CBT debido al orden de la cadena de ganchos. Dado que la mayoría de las API de gráficos en Windows necesitan una ventana antes de poder realizar una inicialización no trivial, un enlace CBT nos lleva de manera confiable a la aplicación antes de la creación de la cadena de intercambio D3D9/11/12.