[Client][Technik] Spielfenstergröße

Hier könnt ihr allgemeine themen behandel, die sich mit Ultima Online befassen.
Antworten
Nachricht
Autor
Sghirate
Newbie
Beiträge: 3
Registriert: 11 Mai 2010 19:03
Wohnort: RLP

[Client][Technik] Spielfenstergröße

#1 Beitrag von Sghirate » 11 Mai 2010 20:34

Hiho,

immer wieder hört man Unzufriedenheit über die Begrenzung des Spielfensters auf 1024x768 bzw 800x600. Irgendwann habe ich mal ein wenig mit na CheatEngine und einem Speicherdiagnosetool am Client rumgewerkelt und ein bisschen was herausgesucht.
Das alles mit dem Ziel, die Spielfenstergröße anzupassen. Zum einen poste ich das hier nun, um auch anderen die Möglichkeit zu geben, diese Funktion zu nutzen, zum anderen aber auch ein wenig als Hilfegesuch. Undzwar ist das Problem mit meinem Vorgehen, dass es zwar funktioniert, aber nur bei einem begrentzten Personenkreis. Aber hier mal zu den Einzelheiten:

Die Spielfenstergröße an sich anzupassen ist keine große Kunst, da die Werte für die Breite, sowie die Höhe im statischen Speicher des Clients liegen - will heißen, sie stehen bei jedem Start des Clients an haargenau derselben Position. Ebenso liegen die Werte für die Fensterposition im statischen Speicher. Diese beiden Fakten ermöglichen es nun, die Spielfenstergröße und -position ohne Probleme zu verändern (man rbaucht einfach ein seperates Tool, welches auf den Programmspeicher des Clients zugreift und neue Werte an die Stellen schreibt). Dann muss noch ein redraw folgen - bei Sphere etwa der update-Befehl . . wahlweise auch etwas herumirren in der Spielwelt.
Aber natürlich wäre es zu schön, wenn es damit getan wäre. Das Problem ist nun, dass bei einer Skalierung über das Setzen der Werte für Breite und Höhe immernoch der goldene Rahmen um den Viewport zurückbleibt. Leider liegen die Werte für die Positionen des rechten und des unteren Rahmens im dynamischen Programmspeicher - will heißen: sie liegen bei jedem Start des Clients an einer anderen Stelle. Um diese Werte nun im Programmspeicher des Clients zu finden sucht das Tool nun nach einem Schema . . im folgenden werde ich die Werte im statischen Speicher notieren, sowie den Algorithmus für die Suche des Schemas niederschreiben:

Breite: 0x5A3E4C
Höhe: 0x5A3E50
X Koordinate: 0xDDCAA8
Y Koordiante: 0xDDCAAC

Suche der Rahmenadressen (Es wird von der Fensterposition P=[0,0] ausgegangen):

Code: Alles auswählen

for(in i=0; i < client.Speicher.Length; i++)
	if(client.Speicher.leseInt(i) == fensterbreite)
		if(client.Speicher.leseInt(i - 12) == fensterhoehe)
			rechterRahmen = i;
	if(client.Speicher.leseInt(i) == fensterhoehe)
		if(client.Speicher.leseInt(i - 4) == -5)
			untererRahmen = i;
Da ich zugegebenermaßen zu faul war andere Fälle durchzutesten setze ich beim Beginn jeder Suche die Spielfensterposition auf P=[0,0] und durchsuche folgend den gesamten Programmspeicher nach folgenden Schemen (wichtig: die Werte für Fensterbreite und Fensterhöhe beziehen sich auf die Ausgangsgröße):
Schema breite = während an der gesuchte Adresse logischerweise den Wert der Fensterbreite steht, steht 12 Stellen vorher der Wert der Fensterhöhe. Falls beides der Fall ist, ist die Adresse für die Breite gefunden.
Schema höhe = während die gesuchte Adresse logischerweise den Wert der Fensterhöhe beinhaltet steht 4 Stellen vorher der Wert -5 (meine Annahme ist, dass es mit der Spielfensterposition zusammenhängt . .aber wie gesagt, war zu faul mehrere Fälle durchzutesten). Wieder gilt: ist das der Fall ist das Fenster gefunden.


Nun hatte ich bei einer Testgruppe von 10 Personen folgende Ergebnisse:
-bei sechs Leuten wird der Rahmen gefunden und das Spielfenster angepasst, wie es sollte
-bei einer Person wurde der Rahmen aufgrund der Benutzerrechte nicht gefunden (das Programm muss wegen dem Zugriff auf einen fremden Process als Administrator ausgeführt werden)
-bei drei Personen *schulterzuck* wird der Rahmen nicht gefunden. Bei einmaligen Durchlauf kein erfolg . . .bei mehrmaligem Durchlauf eine ABM für den Computer


Kurze Anmerkung, falls es jemand selbst umsetzen will: es gibt einige Nachteile . .diese wären wir folgt:
-Die Änderung der Größe ist nur begrentzt möglich . . bei größen, die den Clientarea von Windows überschreiten kommt es zum Crash (also am bestne diesen Abfragen)
-Es erfordert ein redraw (wie oben erwähnt:) bei spehre also beispielsweise einmal update, oder etwas herumlaufen
-Das Ergebnis ist nicht optimal. es werden nur dynamics dargestellt, die der Client schon hat . . vei der von mir getesteten Clientversion werden statics außerhalb des "eigentlichen" Sichtradius grau dargestellt. Zudem kann es beim schnellen Laufen dazu kommen, dass Teile des Bildes schwarz bleiben (blame GDI).



Insgesamt ist es also ein "dirty workaround", welches an und für sich die Fenstergröße ändern kann, aber eben ein seperates Tool erfordert und auch einige Nachteile birgt. Was auch der Hauptgrund ist, weshalb ich das hier poste - ich hoffe einfach, dass jemand einen Weg findet, um diese Nachteile zumindest teilweise auszumerzen.



Nachtrag:
Hier nochmal ein Screenshot des ganzen
Bild

rgds Sghirate
[align=center]Bild
http://www.arx-obscura.de/[/align]

Niemand

#2 Beitrag von Niemand » 03 Aug 2010 11:36

Sag Nitramtin mal er soll sich ne Unterbodenbeleuchtung für seinen Gaul zulegen. Ich habs ihm zwar schon tausendmal gesagt aber er hört ja nich auf mich. Vielleicht hörter ja auf dich.

IthronNorui
Senior Mitglied
Beiträge: 142
Registriert: 24 Jun 2005 17:00
Wohnort: NRW
Kontaktdaten:

#3 Beitrag von IthronNorui » 15 Dez 2010 23:06

Gibts hier eigentlich was neues? Hast dus geschafft Sghirate?

Antworten