Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   DX5 Overlay (https://www.delphipraxis.net/136112-dx5-overlay.html)

RedShakal 23. Jun 2009 19:31


DX5 Overlay
 
Hallo, ich hab mal ne Frage zu der ich zwar viel Gegoogelt habe, jedoch keine zufriedenstellende antwort gefunden habe.

Ich habe ein altes DirectX 5 Spiel.
Ich möchte auf möglichst einfachste weise einen Code schreiben, der auf dem Screen von dem Spiel einen Text ausgibt.

Ich möchte eine Ingame Statistik schreiben.
Normalerweise sieht man die Statistik erst am ende des Spiels, jedoch will ich einen Overlay schreiben, der oben Links am Bildschirmrand 2 Werte im Speicher ausliest und diese ausgibt.

Das soll ungefähr so aussehen: K 0 | D 0
Diese würde ich über einen Timer aktuallisieren lassen.

Wie man Werte in den Speicher schreibt weiß ich bereits, jedoch leider nicht wie man die selbigen ausliest.


DLL's möchte ich am liebsten meiden, da ich noch nie mit ihnen gearbeitet habe.

Ich habe schon viele Tutorials zum Thema Overlay gesehen, jedoch will ich das ganze nicht so Ultra Kompliziert machen... leider gibt es keine Anfänger tutorials in dem bereich.

Kann mir jemand helfen?

Ein einfacher Text auf dem Bildschirm würde auch zum anfang reichen, den rest könnte ich mir ggf. selbst erarbeiten.

PS.

MadCollection
Indy 10
JCL
JVCL

sind installiert.


Grüße Patrick

Medium 23. Jun 2009 22:48

Re: DX5 Overlay
 
Zitat:

Zitat von RedShakal
auf möglichst einfachste weise [...]
will ich das ganze nicht so Ultra Kompliziert machen...

Das ist leider das Problem an dieser Stelle: Es gibt keinen einfachen kompakten Weg. Im Wesentlichen scheint es generell 2 Wege zu geben da ans Ziel zu kommen:
1) Unterjubeln eigener DirectX DLLs, die alle Funktionen an die original DLLs weiterreichen und dann an allen Stellen noch eigenen Code hinzufügen können
Problem: Die DLLs exportieren eine riesige Menge Zeug, und manches davon auch mal gern un- bzw. wenig dokumentiert.
2) DLL-injection, wobei ich dort nicht genau weiss was da wo wie genau passieren muss. Injection ist aber für sich genommen schon nicht so simpel, und zudem reagieren viele Spiele mit ihren Anti-Cheat-Maßnahmen etwas allergisch darauf.

Ich habe selbt länger mal nach einem nicht zu krassen Weg gesucht - auch schon mit höherer Schmerzgrenze bei Komplexität und Aufwand, habe aber trotzdem dann doch irgendwann aufgegeben. So arg wichtig war es letztlich nicht für mich, und da ich dann eine G15 Tastatur hatte, hab ich meine Infos einfach auf deren Display geworfen und das Thema war durch :)

Das soll dich nun nicht davon abhalten es zu versuchen, aber verabschiede dich schon mal von Attributen wie "einfach" und "unkompliziert", und stell dich darauf ein, dass das durchaus zu den deutlich fortgeschrittenen Dingen zählt die man so programmieren könnte, und schon einiges tiefer geht als mal nen VCL Button aufs Formular ziehen.

Aphton 23. Jun 2009 23:03

Re: DX5 Overlay
 
Das ganze ist relativ. Dem einen scheint es kompliziert, dem anderen logisch und einfach.

Die Punkte, die du für solch eine Arbeit abarbeiten müsstest, wären, grob gesagt, folgende:

Eine DLL vorbereiten,
- welche durch Dereferenzierung von Pointern,
- die die Speicheradresse der Werte beinhaltet (ermitteln durch reversing), ausliest (simple)
- die Routine, die zur Ausgabe des Gezeichnetten dient, "umbiegen"
- und vor dem Aufruf der orginalen Routine Code ausführt
- welches die zuvor ausgelesenen Werte auf dem Bildschirm zeichnet

Anschließend injecten

Zu all diesen Punkten befinden sich Sourcen im großen World Wide Web - klar nicht 1:1 aber in ähnlicher Form.

Nun liegt es an dir. Zeige "Eigeninitiative" :D

MfG

mleyen 23. Jun 2009 23:06

Re: DX5 Overlay
 
Zitat:

Zitat von Medium
Problem: Die DLLs exportieren eine riesige Menge Zeug, und manches davon auch mal gern un- bzw. wenig dokumentiert.
2) DLL-injection, wobei ich dort nicht genau weiss was da wo wie genau passieren muss. Injection ist aber für sich genommen schon nicht so simpel, und zudem reagieren viele Spiele mit ihren Anti-Cheat-Maßnahmen etwas allergisch darauf.

Kurzes Statement am späten abend noch dazu:
Ich hab letztens noch gelesen, dass wenn man es richtig macht nichts passieren kann.
Als Beispiel wurde XFire genannt und das es keine Whitelisten dafür gibt.

Aber bei einem DirectX 5-Spiel wird wahrscheinlich nichts passieren. ;)
hier mal was ich auf die schnelle gefunden habe.
Frag mich nicht, ob Hooks jetzt die richtige/saubere/sichere Variante ist, ich kenn mich da immer noch nicht aus ( :pale: ), aber dazu könntest du mal in "uallHook" reinschnuppern.

RedShakal 24. Jun 2009 11:16

Re: DX5 Overlay
 
Also Anti Cheat stellt kein Problem dar, es geht um ein Spiel das von 1996 ist und nichtmal einen Online Modus besitzt. Es wird ab und zu über Hamachi von einer Hand voll Spielern gespielt. Leider kann man die Statistik immer erst am ende des Spiels einsehen, was sich schonmal 2-3 Stunden hinziehen kann. Daher möchte ich den Text ausgeben lassen.

Die besagten Pointer und ähnliches besitze ich bereits, diese werden momentan in einem externen Form ausgeben, funktioniert soweit auch prima. Allerdings ist es nervig immer das Spiel zu minimieren, vor allem weil alle anderen Clients pausiert werden.

Kann man mit einer DirectX 9 SDK auf die DirectX 5 Schnittstelle zugreifen oder benötigt man dafür eigene Header?

RedShakal 2. Jul 2009 15:56

Re: DX5 Overlay
 
*push*


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz