Special K « Affectueusement surnommé le couteau suisse du jeu sur PC, Special K fait un peu de tout. Il est surtout connu pour la correction et l'amélioration des graphismes, ses nombreux modules d'analyse détaillée des performances et de correction, ainsi qu'une palette d'outils en constante évolution qui résoudre une grande variété de problèmes affectant les jeux PC.
Contenu du référentiel
Ce référentiel contient le code source de la charge utile d'injection de code de Special K (
SpecialK(32|64).dll
).Les utilitaires de support tels que SKIF ( Special K I njection Frontend ) et SKIM ( Special K I nstall Manger ), désormais obsolète, sont maintenus en tant que projets distincts. De plus, certains mods plus anciens construits à l'aide de Special K existent sous forme de DLL de plug-in autonomes ; les plug-ins et SKIM ne sont plus activement maintenus, mais sont accessibles via le profil GitHub de Kaldaien.
Construire des dépendancesToutes les dépendances de build de Special K sont incluses lorsque vous clonez le dépôt à partir de 23.5.7. Les anciennes versions ont une dépendance supplémentaire sur le SDK DirectX de juin 2010.
Special K nécessite Visual C++ 2022 ou une version plus récente pour être compilé en raison de fonctionnalités de langage non présentes dans les anciens compilateurs.
Dépendances de la plateformeSpecial K n'est pas pris en charge sur les versions antérieures à Windows 8.1, bien que (à partir de la version 23.5.7) il soit toujours construit et exécuté (avec des fonctionnalités considérablement réduites) sur Windows 7 (mise à jour de la plate-forme).
Il fonctionne dans WINE et est compatible avec DXVK, mais doit être configuré avec
UsingWINE=true
dans son fichier INI par jeu pour fonctionner sous Linux.
DiversIl y a de fortes chances que le projet ne se compile pas correctement si vous utilisez la configuration de build Debug, Special K est conçu pour produire des builds Release déboguables.
Les DLL de Special K sont capables d'injecter leur code de deux manières :
Proxy d'injection locale /DLL Wrapper
SpecialK(32|64).dll
en (dxgi|d3d11|d3d9|d3d8|ddraw|dinput8|OpenGL32).dll
et faites un tour via des importations statiques ou des appels à LoadLibrary (...)
.Chaîne de crochets mondiale Win32 par injection mondiale
Il s'agit de la technique préférée, et la DLL est capable d'amorcer le hook sans aucune aide extérieure via
RunDLL_InjectionManager (...)
( rundll32.exe hébergera la DLL comme un processus normal de l'interface utilisateur Win32).
Il existe de nombreuses autres façons possibles d'injecter les DLL, les deux décrites ci-dessus sont utilisables sans aucun outil supplémentaire.
Special K se fera un plaisir de s'injecter dans un jeu déjà en cours d'exécution si vous souhaitez créer votre propre outil en utilisant quelque chose comme CreateRemoteThread (...)
, mais gardez à l'esprit qu'une injection tardive empêchera certaines fonctionnalités de Special K (en particulier celles liées à D3D). les remplacements et les mods de shader/texture) ne fonctionnent pas.
Les crochets CBT ont été choisis en raison de la commande des chaînes de crochets. Étant donné que la plupart des API graphiques sous Windows ont besoin d'une fenêtre avant de pouvoir effectuer une initialisation non triviale, un hook CBT nous amène de manière fiable dans l'application avant la création de la swapchain D3D9/11/12.