Skip to content

Instantly share code, notes, and snippets.

@wRadion
Last active April 11, 2025 22:13
Show Gist options
  • Save wRadion/aaf5f744b664b619b5c121e9fb760ccb to your computer and use it in GitHub Desktop.
Save wRadion/aaf5f744b664b619b5c121e9fb760ccb to your computer and use it in GitHub Desktop.
Driving is Hard Autosplitter
/**
* Driving is Hard (v5.0.1) autosplitter
* 1.4 by wRadion
*/
state("Driving Is Hard")
{
bool IsGameFinished : "GameAssembly.dll", 0x03E93AB8, 0xB8, 0x0, 0x50;
bool IsMenuOpen : "GameAssembly.dll", 0x03E93AB8, 0xB8, 0x0, 0x52;
float PosX : "GameAssembly.dll", 0x03DB2648, 0xB8, 0x10, 0x10, 0x20, 0x10, 0xF0, 0x10;
float PosY : "GameAssembly.dll", 0x03DB2648, 0xB8, 0x10, 0x10, 0x20, 0x10, 0xF0, 0x14;
float PosZ : "GameAssembly.dll", 0x03DB2648, 0xB8, 0x10, 0x10, 0x20, 0x10, 0xF0, 0x18;
}
startup
{
vars.splitsCoords = new Dictionary<string, float[]> {
{ "Jeff's Tree House (Text appears)", new float[] { -24.366f, 364.596f, -54.273f, 18.8f } },
{ "Sandy Race Tracks (Text appears)", new float[] { 41.581f, 880.835f, -25.548f, 8.710f } },
{ "Bathtub Factory (Text appears)", new float[] { 68.020f, 1383.939f, -165.556f, 18.425f } },
{ "City Rooftops (Text appears)", new float[] { 67.660f, 1998.808f, 73.838f, 25.125f } },
{ "Icy Mountains (Text appears)", new float[] { 25.249f, 2672.349f, -159.984f, 20.435f } },
{ "Crystal Caves (Text appears)", new float[] { 32.930f, 3002.550f, -73.496f, 9.380f } },
{ "The End (Text appears)", new float[] { 92.241f, 3650.032f, -176.316f, 6.700f } },
{ "Cube", new float[] {} }
};
foreach (KeyValuePair<string, float[]> pos in vars.splitsCoords)
{
if (pos.Key != "Cube")
settings.Add(pos.Key, true, pos.Key);
}
Func<float, float, float, float[], double> GetDistance = (x1, y1, z1, pos2) => {
float dx = pos2[0] - x1;
float dy = pos2[1] - y1;
float dz = pos2[2] - z1;
return Math.Sqrt(dx * dx + dy * dy + dz * dz);
};
vars.GetDistance = GetDistance;
vars.splits = new List<string>();
vars.isStarting = false;
}
start
{
if (vars.isStarting && ((old.PosX != current.PosX && old.PosX != 0) || (old.PosY != current.PosY && old.PosY != 0) || (old.PosZ != current.PosZ && old.PosZ != 0))) {
vars.isStarting = false;
return true;
}
if (old.PosX == 0 && old.PosY == 0 && old.PosZ == 0 && current.PosX != 0 && current.PosY != 0 && current.PosZ != 0
&& !current.IsMenuOpen) {
vars.splits.Clear();
vars.isStarting = true;
}
}
reset
{
if (old.PosX == 0 && old.PosY == 0 && old.PosZ == 0 && current.PosX != 0 && current.PosY != 0 && current.PosZ != 0
&& !current.IsMenuOpen) {
vars.splits.Clear();
vars.isStarting = true;
return true;
}
}
isLoading
{
return current.IsMenuOpen;
}
split
{
foreach (KeyValuePair<string, float[]> pos in vars.splitsCoords)
{
if (pos.Key == "Cube")
return !old.IsGameFinished && current.IsGameFinished;
if (!settings[pos.Key])
continue;
float[] coords = pos.Value;
double dist = vars.GetDistance(current.PosX, current.PosY, current.PosZ, coords);
double radius = (double)coords[3];
if (dist <= radius && !vars.splits.Contains(pos.Key)) {
vars.splits.Add(pos.Key);
return true;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment