Hello,
J'ai besoin d'aide SVP, si vous avez un peu de temps..
Il y a 10 ans environ j'ai créé une DLL pour afficher des données de télémétries dans un jeu vidéo D3D9.
Le principe que j'avais choisi était de nommer ma dll "D3D9.DLL" et de la mettre dans le répertoire du jeu pour le tromper, le jeu croyait charger la vraie.
Bref, une fois ma dll chargée et à l'aide du SDK Clootie DX9 pour Delphi et de GenCodeHook je parvenais via "Direct3DCreate9" à charger la vraie D3D9.DLL et à récupérer un pointeur sur la vraie fonction DirectX. Ensuite mon Loop d'affichage était basé sur un autre Hook de la fonction DX "Present".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 function Direct3DCreate9(SDKVersion: cardinal): Pointer; stdcall; begin Module := LoadLibrary(pchar(GetWinDir+'\system32\d3d9.dll')); @Direct3DCreate9original := GetProcAddress(Module, 'Direct3DCreate9'); Result := Direct3DCreate9original(SDKVersion); if not (Result = nil) and (@CreateDeviceNext = nil) then CreateGenericCodeHook(GetPtrMethod(Result, 16), @CreateDeviceCallback, @CreateDeviceNext); end;
Bon, aujourd'hui je travaille sur un autre jeu, très ancien (Grand Prix Legends), et ça se corse sévèrement.
Ce jeu gère l'affichage avec un rasteriser propriétaire, apparemment style DirectX 7.
Avec ma méthode classique je suis donc chocolat...
J'ai dans l'idée de déplacer le rasteriser dans un sous dossier du jeu (par exemple .\raster\rastD3D7.dll ) , et de créer ma DLL en utilisant le même nom, ça serait ma façon de forcer le jeu à la charger.
Sauf que, les SDK Clootie débutent à DX8, et donc évidemment ça ne sert a rien que j'essai de faire un hook dans Direct3DCreate8 ou 9 .... vu que je ne récupèrerais pas de pointeur sur la fonction du rasteriser propriétaire.
Et même si j'y parvenais, il faudrait qu'il y ait des fonctions communes entre les deux versions de DirectX pour que je puisse faire appeler mon Loop principal pour exécuter mon propre code graphique par dessus celui du jeu..
J'en suis là et franchement je n'arrive pas à avancer.
Ma question est donc, comment feriez-vous ? Quelle pistes pouvez-vous me conseiller ?
Ou même peut-être suis-je à coté de la plaque...
Je suis codeur amateur, très amateur même, mais même si je mets généralement 15 fois plus de temps qu'un pro, je vais au bout Sauf que là je galère.
Merci d'avance pour vos conseils,
Alekhine.
Partager