Last active
April 11, 2025 22:13
-
-
Save wRadion/aaf5f744b664b619b5c121e9fb760ccb to your computer and use it in GitHub Desktop.
Driving is Hard Autosplitter
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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