state("Parkourror-Win64-Shipping"){} startup { Assembly.Load(File.ReadAllBytes("Components/asl-help")).CreateInstance("Basic"); vars.Helper.GameName = "Urban Nightmare"; } init { IntPtr gWorld = vars.Helper.ScanRel(3, "48 8B 1D ???????? 48 85 DB 74 ?? 41 B0 01"); IntPtr fNames = vars.Helper.ScanRel(3, "48 8d 05 ???????? eb ?? 48 8d 0d ???????? e8 ???????? c6 05"); if (gWorld == IntPtr.Zero || fNames == IntPtr.Zero) { const string Msg = "Not all required addresses could be found by scanning."; throw new Exception(Msg); } vars.Helper["GWorld"] = vars.Helper.Make(gWorld, 0x18); vars.FNameToString = (Func)(fName => { var nameIdx = (fName & 0x000000000000FFFF) >> 0x00; var chunkIdx = (fName & 0x00000000FFFF0000) >> 0x10; var number = (fName & 0xFFFFFFFF00000000) >> 0x20; IntPtr chunk = vars.Helper.Read(fNames + 0x10 + (int)chunkIdx * 0x8); IntPtr entry = chunk + (int)nameIdx * sizeof(short); int length = vars.Helper.Read(entry) >> 6; string name = vars.Helper.ReadString(length, ReadStringType.UTF8, entry + sizeof(short)); return number == 0 ? name : name + "_" + number; }); current.Area = ""; } start { return current.Area == "LF_JumpingAndClimbing" || current.Area == "Tutorial_JumpingAndClimbing"; } split { return current.Area != old.Area; } isLoading { return current.Area == "Level_MainMenu"; } update { { vars.Helper.Update(); vars.Helper.MapPointers(); var world = vars.FNameToString(current.GWorld); if (!string.IsNullOrEmpty(world) && world != "None") current.Area = world; if (old.Area != current.Area) vars.Log("Area: " + current.Area); } }