Tracking in AC Explorer Pro is accomplished via a remote server. AC Explorer Pro (ACX) contacts a server running on a particular IP address and port. When that server receives the request from ACX, it then starts sending ACX the player's location data at regular intervals.
The provided ACX Server program can be used to extract the player location data from the running AC client and send it to ACX via the above protocol. However, any program that adheres to the required protocol can be used in place of ACX Server to supply tracking location data to ACX.
ACX Server is set up to automatically locate the player location data in the AC client memory. Monthly updates to the AC Client can change this location. There are two modes of operation: Direct and InDirect
In Direct operation, the Location memory address points directly to a Loc memory structure in the AC Client. In older versions of the AC Client, the Loc structure looked like this:
LocRec = record Block: DWord; X: Single; Y: Single; Z: Single; end;
Starting with the April 2004 patch, Turbine changed the internal structure of this record, adding a bunch of new data whose purpose has not been determined. The new memory structure, used by ACX v1.30 and later, looks like this:
LocRec = record Block: DWord; Unused1, Unused2, Unused3, Unused4, Unused5, Unused6, Unused7, Unused8, Unused9, Unused10, Unused11, Unused12, Unused13: Single; X: Single; Y: Single; Z: Single; end;
The 13 "unused" values look like sin and cos values since they are always between -1 and 1.
In Indirect operation, the memory location of the Loc structure is determine by an address and two offsets. This is a complex indirect pointer structure that was used in versions of AC prior to the April 2004 patch and should no longer be used.
The Heading is stored in the AC Client as an integer of the Angle*10. So, a Heading of 210.1 is stored as the integer 2101. The Heading location in ACX Server points directly to this memory location.
When the AC Explorer client contacts the ACX Server, it sends data in the following format:
Cmd-Byte Data
There are only 2 commands recognized by the server:
The data sent from the ACX Server back to the client is a modified location record with the following structure:
LocDataRec = record Block: DWord; X: Single; Y: Single; Z: Single; H: Single; end;
where H is the floating point value of the heading angle in degrees, and Block,X,Y,Z are the same values captured from the AC client memory.
So, the flow of control is this:
Any program that used the Cmd=0 to enable itself and the Cmd=1 to disable itself and sends the required LocDataRec data structure back to the client will work to provide tracking data to AC Explorer. This is a very simply protocol and should be easy to implement.
If for some reason the calibration of the ACX Server no longer works, an external program can modify the ACXSERV.INI file to override the calibration addresses. In this INI file is a section called [Memory] that contains the following strings:
Other values may be calculated from the above values and stored in this file, but the above parameters are the main values used to calibrate the ACX Server program.
Because Turbine can change the AC Client at any time, the algorithms used for tracking and calibration can be rendered invalid at any time. There is no support from Zugg Software for changes to the AC Client. This information has been provided to allow 3rd parties to control the tracking in AC Explorer in case Zugg Software can no longer update this free server program.
Also, keep in mind that using a program such as ACX Server which captures data directly from the memory image of the running AC client may be considered a breach of the End-User-License-Agreement from Turbine. Use this program at your own risk.