Version 29.10.2006 - Zielkreuz jetzt kleiner (-40%) - wenn sich die Bilddateien 'crosshair', 'target', 'wall1', 'ceil', 'floor' als entweder .jpg or .bmp im reaction.exe Verzeichnis befinden werden diese geladen und benutzt. Die Bilder müssen 2^n pixel Auflösung haben, zum Beispiel 256x256. Schwarz wird als transparent gedeutet. Version 03/2005: - präziseres timing - Keine Abhängigkeit mehr von 'wait for VSynch'. Es ist dafür Sorge getragen, dass deine Reaktion verglichen wird mit dem was wirklich gerade auf dem Schirm zu sehen ist (ausgenommen Verzögerungen durch den Monitor). Dies ist ein Programm um die eigene Reaktionszeit zu testen, besser gesagt die Auge-zu-Hand Verzögerungszeit, und das unter "realistischen" Bedingungen. Man könnte diese Verzögerungszeit auch den "persönlichen Ping" nennen, denn auch sie wird als Ergebnis in Millisekunden (ms) angezeigt. Das Program ist in Delphi geschrieben und nutzt OpenGl. Auch nicht mehr taufrische Grafikkarten sollten kein Problem damit haben, die paar Polygone mit voller Refreshrate darzustellen. Nach Belieben kannst du das Warten auf den VSynch im Grafikkarten-Setup ein- oder ausschalten. Wo wir gerade dabei sind - Während ich an diesem Programm gearbeitet habe ist mir aufgefallen, dass ich um etwa 20ms unterschiedliche Ergebnisse erziele, je nachdem, ob ich das an meinem Notebook oder an meinem ausgewachsenen PC probiere. Nachdem ich alle Timing-Probleme ausschließen konnte hat sich gezeigt, dass mein großer TFT-Monitor die Bildausgabe auf den Schirm nicht unerheblich verzögert! Der Monitor scheint mindestens einen vollen Frame zwischenzuspeichern bevor er ihn darstellt! Diese Verzögerungszeit ist nicht mit in der üblichen Angabe der Reaktionszeit eines Monitors berücksichtigt. Für einen professionellen Spieler müssten 20ms zusätzlicher Ping einen gewaltigen Nachteil darstellen. Solche Verzögerungen sollten beim Monitorkauf und in Hardware-Tests Beachtung finden. Um den Ganzen Nachzugehen habe ich eine Funktion in das Programm eingebaut mit der man die Verzögerungszeit der gesamten Schleife: gezeichnete Grafik -> Darstellung auf dem Schirm -> optische Maus -> Maustreiber messen und vergleichen kann. Mehr zu Experimenten mit dem screen-mouse loop-back. Zurück zur menschlichen Reaktionsgeschwindigkeit. | |
Du musst versuchen dem sich unvorhersagbar bewegenden Ziel zu folgen, wie man in einem Ego-Shooter einem wild umherspringenden Gegner folgen muss. Ich habe das Programm geschrieben,
weil es mich interessierte, um wieviel schneller ein geübter Spieler ist als ich, der untrainierte Gelegenheitsspieler. (Solange ich meine Zeit mit OpenGl-Programmierung verbringe
werde ich auch nicht besser werden.) Ich gebe zu, nicht viel weniger als etwa 195ms zu erreichen. Die meisten Leute erreichen Werte in dieser Gegend, nicht-Spieler etwa 50ms mehr und Profi-
Spieler etwa 20 ms weniger. Um ein besseres Bild von den erreichbaren Werten zu erhalten kannst du mir dein Ergebnis an die untenstehende email-Adresse schicken und auf Wunsch
veröffentliche ich es in der Tabelle unten. Das Ziel folgt einem sogenannten "random walk". Während du versuchst auf die Scheibe zu zielen, werden die Positionen von Scheibe und Fadenkreuz aufgezeichnet und hinterher ausgewertet um die Verzögerung zu ermitteln. |
|
Der einfachste Weg den Test zu starten ist, einfach den 'quick start>>!' button zu drücken. Das Programm geht daraufhin in den Vollbildschirm-Mode und gibt dir 3 Sekunden Zeit zur mentalen Vorbereitung. Dann beginnt das Ziel seinen Tanz und du musst versuchen so nah wie möglich am Zentrum des Ziels zu bleiben. Schiessen musst du nicht auf das ziel, das ist ein pazifistisches Programm! Der Test dauert etwa 16 Sekunden. Wenn du das Programm im Fenster-Modus benutzen möchtest, ('F' schaltet um), musst du die rechte Maustaste zum Umherschauen gedrückt halten. | |
Nach der Jagd schaltet das Programm zurück in den Fenstermodus und berechnet die Verzögerung zwischen 'Anregungssignal' und deiner Reaktion. Das wird gemacht, indem Anregung und Reaktion zueinander verschoben werden und der mittlere Abstand (RMS) zwischen Fadenkreuz und Ziel für jede Verschiebung berechnet wird. Die Kurve all der RMS-Abstände über der Zeitverschiebung hat dort ein Minimum, wo deine gesuchte Verzögerungszeit ist. Der Wert in der zweiten Zeile ist dein mittlerer Abstand (wieder RMS) zum Zentrum des Ziels in Grad. Zum Vergleich: das ganze Ziel hat einen Durchmesser von 12Grad. Mehr info über die Datenverarbeitung bekommst du zu sehen, wenn du auf den 'more info' button drückst. | |
Teschnisch gesehen ist der ganze Prozess eine 'Netzwerkanalyse'. Ein System (du) wird mit einem bestimmten Signal angeregt und die Reaktion wird gemessen. Das Ergebnis könnte
auch ein Phasen- und Amplituden-Frequenzgang sein (kommt vielleicht später).
In diesem Fall ist das Anregungssignal ein 'random walk' (das ist eine Art von Rauschen) da er einem sich unvorhersagbar bewegenden Gegner ähnelt. Ein random Walk hat einen 1/f-Frequenzgang, das heisst das tiefe Frequenzen einen höheren Anteil an der Bewegung haben als hohe. Dieser random walk ist symmetrisch, nach der Hälfte der Zeit geht es den gleichen Weg zurück. Das ist nicht notwendig für die gegenwärtige Art der Berechnung aber günstig für eine Auswertung mittels Kreuzkorrelation (derzeit nicht benutzt). Da wahrscheinlich niemand Bewegungen mit mehr als 5 Hz Frquenz folgen kann, schneide ich alle höheren Frequenzen weg. Dadurch wird die Bewegung des Ziels angenehm glatt. Im Prinzip könnten auch weitere für den Geek interessante Größen wie Phasen- und Amplituden-Antwort und die Frequenzabhängigkeit der Verzögerungszeit bestimmt werden. Beachte die kleinen sich bewegenden Quadrate in der linken unteren Grafik, wenn du die Maus in der oberen linken Grafik bewegst. Mit der unten liegenden checkbox kann man zwischen einem authentischen Replay und einer Animation mit kompensierter Verzögerung wählen. | |
Die Settings für Auflösung, Farbtiefe und Frequenz brauchen normalerweise keine Änderung oder sind selbsterklärend. Ebenso sind die Renderer-Einstellungen eher
der Vollständigkeit halber vorhanden.
Du kannst die 'mouse sensitivity' weiter nach links schieben, wenn dir großräumigere Bewegungen der Maus lieber sind. Die checkbox 'restrict to horizontal movement' beschränkt die Bewegung auf die Horizontale Richtung, wenn das der Realität in deinem Lieblings-Game näher kommt. Manche Leute bevorzugen eine in der vertikalen Richtung umgekehrte Mausbewegung, das ist wofür die andere Checkbox gut ist. Die Editbox für den 'excitation frequency lowpass' akzeptiert Werte zwischen 2 und 20 Hz. Je kleiner der Wert wird, desto geschmeidiger wird die Bewegung des Ziels. Die Bewegung enthält dann weniger hohe Frequenzkomponenten. In der Nähe zu 2 Hz wird die Bewegung aber vorhersagbarer und die erreichte Verzögerungszeit wird kürzer. Derzeit speichert das Programm die Konfigurationsdaten nicht ab, deswegen muß man alle evtl. Einstellungen nach jedem Start wieder machen. | |
Nur aus Spaß habe ich einen aimbot, ein automatisches Zielverfolgungssystem, in das Prog eingebaut. Der aimbot sieht auch nur, wo das Target im letzten Bild war und versucht dem Ziel mit den gleichen Controls zu folgen wie sie der Benutzer hat. Er hat keinen unfairen Vorteil - außer purer Rechengeschwindigkeit. Die PID-Parameter der Regelschleife bestimmen, wie schnell der aimbot reagiert. Aimbotparameter probiert man besser im Fenstermodus aus. Betrüge dich nicht selbst! :-) |
Hier habe ich einige Resultate zusammengestellt die mir per mail geschickt wurden oder im usenet veröffentlicht wurden.
Name/nick | Bereich | Typisches Ergebnis | Mittlerer Abstand zum Ziel Grad |
Adam Balogh | - | 80 | 3.7 |
med1xza | - | 89 | 1.9 |
Alexander G. sonyfreak | - | 154 | 4.8 |
Paul Brocklehurst | 156 | 156 | 4.1 |
Benjamin Stanka age 30 | 163 | 163 | 4.5 |
bryan keleman Team1hp_jetset | 165 | 165 | 3.8 |
Sami "some" Jokela age 24 | 165 - 170 | 167 | - |
Matvey "TBAPb" Smolovich age 21 | 165 - 175 | 170 | 3.5 |
Nicholas Borelli | 162 - 180 | 170 | 4.0 |
Nikk Lovekin Kinematix age 17 | 167 - 170 | 170 | 4.5 |
Apox77 | 169 - 191 | 170 | 4.5 |
Torben Maurer miez | - | 170 | 4.9 |
Jean Bibeau Wrebb | 172 | 172 | 3.8 |
John "F474L" Burrell | 172 - 185 | 175 | 4.8 |
Federico Nose | 177 | 177 | - |
William "R34c710N" Register | 174 - 185 | 180 | 4.4 |
Tanter Ralf Richter | 179 - 188 | 182 | 5.0 |
Kevin Lin | 180 | 180 | 3.9 |
Nathan Moye | 186 | 186 | 4.3 |
Pjotr K. Presley | - | 195 | 4.3 |
Peter Hill | 194 - 209 | 200 | 4.4 |
Greason Maddox | - | 200 | 4.5 |
myself EMwave in Steam | 195 - 210 | 205 | 4.8 |
Terrance Schultz | 207 | 207 | 4.0 |
matt hydes | 211 | 211 | 4.6 |
Name/nick | Bereich | typisch |
fungus | 190 | 190 |
-=[SFS]=-[Zaknafein] | 197 | 197 |
Allan Bruce | 200-210 | 205 |
FaMiNe | 202, 226, 218, 197 | 211 |
Cookie McCrumble | 218, 218, 218 | 218 |
Poison64 | 230 | 230 |
Lief | 235 | 235 |
myself EMwave in Steam | 220..245 | 235 |
Andrew Lovern | 260 | 260 |
Jethro | 270 | 270 |
Cannon Fodder (67 years old) | 285, 255, 273 | 271 |
Jordi Xucla | 278 | 278 |