state("Ghostrunner-Win64-Shipping", "steam1") { float preciseTime : 0x042E1678, 0x1A8, 0x284; float levelTime : 0x0455C860, 0x128, 0x38C; float xVel : 0x042E16B8, 0x30, 0x288, 0xC4; float yVel : 0x042E16B8, 0x30, 0x288, 0xC8; bool loading : 0x04417978, 0x1E8; string250 map : 0x042E1678, 0x30, 0xF8, 0x0; bool leaderboardShown : 0x042E1AC8, 0x80; int deaths : 0x042E1678, 0x1A8, 0x28C; int killpercp : 0x042E16B8, 0x30, 0xA44; } state("Ghostrunner-Win64-Shipping", "steam3") { float preciseTime : 0x042E78D0, 0x1A8, 0x284; float levelTime : 0x04562C20, 0x128, 0x38C; float xVel : 0x042E78F8, 0x30, 0x288, 0xC4; float yVel : 0x042E78F8, 0x30, 0x288, 0xC8; bool loading : 0x0441DD38, 0x1E8; string250 map : 0x042E78D0, 0x30, 0xF8, 0x0; bool leaderboardShown : 0x042E7D08, 0x80; int deaths : 0x042E78D0, 0x1A8, 0x28C; int killpercp : 0x042E78F8, 0x30, 0xA4C; } state("Ghostrunner-Win64-Shipping", "steam5") { float preciseTime : 0x04328548, 0x1A8, 0x284; float levelTime : 0x045A3C20, 0x128, 0x38C; float xVel : 0x04328538, 0x30, 0x288, 0xC4; float yVel : 0x04328538, 0x30, 0x288, 0xC8; bool loading : 0x0445ED38, 0x1E8; string250 map : 0x04328548, 0x30, 0xF8, 0x0; bool leaderboardShown : 0x04328580, 0x80; int deaths : 0x04328548, 0x1A8, 0x28C; int killpercp : 0x04328538, 0x30, 0xA4C; } state("Ghostrunner-Win64-Shipping", "steam6") { float preciseTime : 0x0438BB40, 0x1A8, 0x284; float levelTime : 0x04609420, 0x128, 0x38C; float xVel : 0x0438BB50, 0x30, 0x288, 0xC4; float yVel : 0x0438BB50, 0x30, 0x288, 0xC8; bool loading : 0x044C4478, 0x1E8; string250 map : 0x0438BB40, 0x30, 0xF8, 0x0; bool leaderboardShown : 0x0438D120, 0x80; int deaths : 0x0438BB40, 0x1A8, 0x28C; int killpercp : 0x0438BB50, 0x30, 0xA6C; } state("Ghostrunner-Win64-Shipping", "steam9") { float preciseTime : 0x048EA4D0, 0x128, 0x3c0; float levelTime : 0x048EA4D0, 0x128, 0x3b4; bool bcantick : 0x048EA4D0, 0x128, 0x3c4; float xVel : 0x04669B48, 0x30, 0x288, 0xC4; float yVel : 0x04669B48, 0x30, 0x288, 0xC8; bool loading : 0x047A5538, 0x1E8; string250 map : 0x04669B08, 0x30, 0xF8, 0x0; bool leaderboardShown : 0x0466B4F8, 0x80; int deaths : 0x048EA4D0, 0x128, 0x3B0; int killpercp : 0x04669B48, 0x30, 0xA78; } state("Ghostrunner-Win64-Shipping", "steam10") { float preciseTime : 0x048F7350, 0x128, 0x3c0; float levelTime : 0x048F7350, 0x128, 0x3b4; bool bcantick : 0x048F7350, 0x128, 0x3c4; float xVel : 0x046767E0, 0x30, 0x288, 0xC4; float yVel : 0x046767E0, 0x30, 0x288, 0xC8; bool loading : 0x047B23B8, 0x1E8; string250 map : 0x046767F0, 0x30, 0xF8, 0x0; bool leaderboardShown : 0x04678480, 0x80; int deaths : 0x048F7350, 0x128, 0x3B0; int killpercp : 0x046767E0, 0x30, 0xA78; } state("Ghostrunner-Win64-Shipping", "steam11") { float preciseTime : 0x0491DB20, 0x128, 0x3c0; float levelTime : 0x0491DB20, 0x128, 0x3b4; bool bcantick : 0x0491DB20, 0x128, 0x3c4; float xVel : 0x0469B9F0, 0x30, 0x288, 0xC4; float yVel : 0x0469B9F0, 0x30, 0x288, 0xC8; bool loading : 0x047D7978, 0x1E8; string250 map : 0x469B9F8, 0x30, 0xF8, 0x0; bool leaderboardShown : 0x0469D680, 0x80; int deaths : 0x0491DB20, 0x128, 0x3B0; int killpercp : 0x0469B9F0, 0x30, 0xA80; } state("Ghostrunner-Win64-Shipping", "steam12") { float preciseTime : 0x05196A60, 0x118, 0x3c0; float levelTime : 0x05196A60, 0x118, 0x3b4; bool bcantick : 0x05196A60, 0x118, 0x3c4; float xVel : 0x04F9D358, 0x30, 0x288, 0xC4; float yVel : 0x04F9D358, 0x30, 0x288, 0xC8; bool loading : 0x05059AE0, 0x1E8; string250 map : 0x04F9D308, 0x30, 0xF8, 0x0; bool leaderboardShown : 0x04F9F080, 0x80; int deaths : 0x05196A60, 0x118, 0x3B0; int killpercp : 0x04F9D358, 0x30, 0xA80; } state("Ghostrunner-Win64-Shipping", "gog12") { float preciseTime : 0x05196A70, 0x118, 0x3c0; float levelTime : 0x05196A70, 0x118, 0x3b4; bool bcantick : 0x05196A70, 0x118, 0x3c4; float xVel : 0x04F9D358, 0x30, 0x288, 0xC4; float yVel : 0x04F9D358, 0x30, 0x288, 0xC8; bool loading : 0x05059AE0, 0x1E8; string250 map : 0x04F9D308, 0x30, 0xF8, 0x0; bool leaderboardShown : 0x04F9F080, 0x80; int deaths : 0x05196A70, 0x118, 0x3B0; int killpercp : 0x04F9D358, 0x30, 0xA80; } state("Ghostrunner-Win64-Shipping", "steam13") { float preciseTime : 0x051992F0, 0x118, 0x3c0; float levelTime : 0x051992F0, 0x118, 0x3b4; bool bcantick : 0x051992F0, 0x118, 0x3c4; float xVel : 0x04F9FB38, 0x30, 0x288, 0xC4; float yVel : 0x04F9FB38, 0x30, 0x288, 0xC8; bool loading : 0x0505C360, 0x1E8; string250 map : 0x04F9FAE8, 0x30, 0xF8, 0x0; bool leaderboardShown : 0x04FA1410, 0x80; int deaths : 0x051992F0, 0x118, 0x3B0; int killpercp : 0x04F9FB38, 0x30, 0xA80; } state("Ghostrunner-Win64-Shipping", "gog1") { float preciseTime : 0x0430CC10, 0x1A8, 0x284; float levelTime : 0x04587F20, 0x128, 0x38C; float xVel : 0x0430CC48, 0x30, 0x288, 0xC4; float yVel : 0x0430CC48, 0x30, 0x288, 0xC8; bool loading : 0x04443038, 0x1E8; string250 map : 0x0430CC10, 0x30, 0xF8, 0x0; bool leaderboardShown : 0x0430D058, 0x80; int deaths : 0x0430CC10, 0x1A8, 0x28C; int killpercp : 0x0430CC48, 0x30, 0xA44; } state("Ghostrunner-Win64-Shipping", "gog3") { float preciseTime : 0x04312E70, 0x1A8, 0x284; float levelTime : 0x0458E2E0, 0x128, 0x38C; float xVel : 0x04312E98, 0x30, 0x288, 0xC4; float yVel : 0x04312E98, 0x30, 0x288, 0xC8; bool loading : 0x044493F8, 0x1E8; string250 map : 0x04312E70, 0x30, 0xF8, 0x0; bool leaderboardShown : 0x043132A8, 0x80; int deaths : 0x04312E70, 0x1A8, 0x28C; int killpercp : 0x04312E98, 0x30, 0xA4C; } state("Ghostrunner-Win64-Shipping", "gog5") { float preciseTime : 0x04328548, 0x1A8, 0x284; float levelTime : 0x045A3C20, 0x128, 0x38C; float xVel : 0x04328538, 0x30, 0x288, 0xC4; float yVel : 0x04328538, 0x30, 0x288, 0xC8; bool loading : 0x0445ED38, 0x1E8; string250 map : 0x04328548, 0x30, 0xF8, 0x0; bool leaderboardShown : 0x04328580, 0x80; int deaths : 0x04328548, 0x1A8, 0x28C; int killpercp : 0x04328538, 0x30, 0xA4C; } state("Ghostrunner-Win64-Shipping", "gog6") { float preciseTime : 0x0438BB40, 0x1A8, 0x284; float levelTime : 0x04609420, 0x128, 0x38C; float xVel : 0x0438BB50, 0x30, 0x288, 0xC4; float yVel : 0x0438BB50, 0x30, 0x288, 0xC8; bool loading : 0x044C4478, 0x1E8; string250 map : 0x0438BB40, 0x30, 0xF8, 0x0; bool leaderboardShown : 0x0438D120, 0x80; int deaths : 0x0438BB40, 0x1A8, 0x28C; int killpercp : 0x0438BB50, 0x30, 0xA6C; float global : 0x04609420, 0x52C; } state("Ghostrunner-Win64-Shipping", "egs1") { float preciseTime : 0x042EA098, 0x1A8, 0x284; float levelTime : 0x04565320, 0x128, 0x38C; float xVel : 0x042EA0D0, 0x30, 0x288, 0xC4; float yVel : 0x042EA0D0, 0x30, 0x288, 0xC8; bool loading : 0x04420438, 0x1E8; string250 map : 0x042EA098, 0x30, 0xF8, 0x0; bool leaderboardShown : 0x042EA108, 0x80; int deaths : 0x042EA098, 0x1A8, 0x28C; } state("Ghostrunner-Win64-Shipping", "egs2") { float preciseTime : 0x042E9098, 0x1A8, 0x284; float levelTime : 0x04564320, 0x128, 0x38C; float xVel : 0x042E90D0, 0x30, 0x288, 0xC4; float yVel : 0x042E90D0, 0x30, 0x288, 0xC8; bool loading : 0x0441F438, 0x1E8; string250 map : 0x042E9098, 0x30, 0xF8, 0x0; bool leaderboardShown : 0x042E9108, 0x80; int deaths : 0x042E9098, 0x1A8, 0x28C; } state("Ghostrunner-Win64-Shipping", "egs3") { float preciseTime : 0x042F02E8, 0x1A8, 0x284; float levelTime : 0x0456B6A0, 0x128, 0x38C; float xVel : 0x042F0310, 0x30, 0x288, 0xC4; float yVel : 0x042F0310, 0x30, 0x288, 0xC8; bool loading : 0x044267B8, 0x1E8; string250 map : 0x042F02E8, 0x30, 0xF8, 0x0; bool leaderboardShown : 0x042F0720, 0x80; int deaths : 0x042F02E8, 0x1A8, 0x28C; } state("Ghostrunner-Win64-Shipping", "egs6") { float preciseTime : 0x0438BC80, 0x1A8, 0x284; float levelTime : 0x04609560, 0x128, 0x38C; float xVel : 0x0438BC90, 0x30, 0x288, 0xC4; float yVel : 0x0438BC90, 0x30, 0x288, 0xC8; bool loading : 0x044C45B8, 0x1E8; string250 map : 0x0438BC80, 0x30, 0xF8, 0x0; bool leaderboardShown : 0x0438D260, 0x80; int deaths : 0x0438BC80, 0x1A8, 0x28C; int killpercp : 0x0438BC90, 0x30, 0xA6C; float global : 0x04609560, 0x52C; } startup { vars.tryreset = false; vars.gameversion = 0; vars.offsets = new List() {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; vars.endLevelPause = false; vars.deathCount = 0; vars.defaultcounter = false; vars.bosskilled = false; vars.killsoffset = 0; vars.section = 0; vars.cpx=0.0; vars.cpy=0.0; vars.reachEOL = false; vars.lstart = false; vars.fulllvlkills = 0; vars.lvlkills = 0; vars.killCount = 0; vars.killsave = 0; vars.watchers = new MemoryWatcherList(); vars.enemies = new DeepPointer(0x0); vars.tempestblocks = new DeepPointer(0x0); vars.surgeblocks = new DeepPointer(0x0); vars.sections = new int[32, 3] { {0, 505, 0}, {0, 13, 0}, {0, 9, 0}, {0, 0, 0}, {0, 27, 0}, {0, 0, 0}, {0, 10, 0}, {0, 22, 0}, {0, 21, 0}, {0, 50, 0}, {0, 0, 0}, {0, 2, 0}, {0, 38, 0}, {0, 0, 0}, {0, 7, 0}, {0, 20, 0}, {0, 1, 0}, {0, 34, 0}, {0, 60, 0}, {0, 0, 0}, {0, 17, 0}, {0, 1, 0}, {0, 6, 0}, {0, 0, 0}, {0, 39, 0}, {0, 36, 0}, {0, 0, 0}, {0, 0, 0}, {0, 30, 0}, {0, 61, 0}, {0, 1, 0}, {0, 0, 0}}; vars.sectionshard = new int[19, 3] { {0, 717, 0}, {0, 26, 0}, {0, 13, 0}, {0, 60, 0}, {0, 38, 0}, {0, 65, 0}, {0, 67, 0}, {0, 40, 0}, {0, 5, 0}, {0, 48, 0}, {0, 87, 0}, {0, 31, 0}, {0, 6, 0}, {0, 0, 0}, {0, 58, 0}, {0, 65, 0}, {0, 91, 0}, {0, 17, 0}, {0, 0, 0}}; vars.ILsections = new int[17] {1,2,4,8,9,12,15,16,17,18,20,21,24,25,29,30,31}; vars.ILsectionshard = new int[17] {1,2,3,4,5,6,7,8,9,10,11,12,14,15,16,17,18}; settings.Add("lvlSplit", true, "Split after completing a level"); settings.Add("deathcounter", false, "Show Death Counter"); settings.Add("speedometer", false, "Show Speedometer"); settings.Add("speedround", false, "Round to whole number", "speedometer"); settings.Add("killscounter", false, "Show Kills Counter"); settings.Add("ILKC", false, "IL Kills Counter", "killscounter"); settings.Add("hardcore", false, "Check for a hardcore run"); if (timer.CurrentTimingMethod == TimingMethod.RealTime) { var timingMessage = MessageBox.Show( "This game uses RTA w/o Loads as the main timing method.\n" + "LiveSplit is currently set to show Real Time (RTA).\n" + "Would you like to set the timing method to RTA w/o Loads?", "Ghostrunner | LiveSplit", MessageBoxButtons.YesNo, MessageBoxIcon.Question ); if (timingMessage == DialogResult.Yes) { timer.CurrentTimingMethod = TimingMethod.GameTime; } } vars.SetTextComponent = (Action)((id, text) => { var textSettings = timer.Layout.Components.Where(x => x.GetType().Name == "TextComponent").Select(x => x.GetType().GetProperty("Settings").GetValue(x, null)); var textSetting = textSettings.FirstOrDefault(x => (x.GetType().GetProperty("Text1").GetValue(x, null) as string) == id); if (textSetting == null) { var textComponentAssembly = Assembly.LoadFrom("Components\\LiveSplit.Text.dll"); var textComponent = Activator.CreateInstance(textComponentAssembly.GetType("LiveSplit.UI.Components.TextComponent"), timer); timer.Layout.LayoutComponents.Add(new LiveSplit.UI.Components.LayoutComponent("LiveSplit.Text.dll", textComponent as LiveSplit.UI.Components.IComponent)); textSetting = textComponent.GetType().GetProperty("Settings", BindingFlags.Instance | BindingFlags.Public).GetValue(textComponent, null); textSetting.GetType().GetProperty("Text1").SetValue(textSetting, id); } if (textSetting != null) textSetting.GetType().GetProperty("Text2").SetValue(textSetting, text); }); vars.UpdateSpeedometer = (Action)((x, y, round) => { double hvel = Math.Floor(Math.Sqrt(x*x + y*y)+0.5); if(round) vars.SetTextComponent("Speed", Math.Floor(hvel/100).ToString("") + " m/s"); else vars.SetTextComponent("Speed", (hvel/100).ToString("0.00") + " m/s"); }); } init { string MD5Hash; using (var md5 = System.Security.Cryptography.MD5.Create()) using (var s = File.Open(modules.First().FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) MD5Hash = md5.ComputeHash(s).Select(x => x.ToString("X2")).Aggregate((a, b) => a + b); int moduleSize = modules.First().ModuleMemorySize; switch (moduleSize) { case 78057472: version = "steam1"; vars.gameversion = 1; vars.offsets =new List() {0x0455C860,0x042E16B8,0x042DFEB8,0x044260F8,0x044F6200,0x0455C860,0x0448AD10,0x042E1400,0x2B0,0x2B0,0x80}; break; case 78086144: version = "steam3"; vars.gameversion = 3; vars.offsets =new List() {0x04562C20,0x042E78F8,0x042E60F8,0x04423298,0x044FC5C0,0x04562C20,0x044910D0,0x042E7648,0x2B0,0x2B0,0x80}; break; case 78376960: version = "steam5"; vars.gameversion = 5; vars.offsets =new List() {0x045A3C20,0x04328538,0x04326CF8,0x04464298,0x0453D5C0,0x045A3C20,0x044D20D0,0x043282B8,0x2B0,0x2B0,0x80}; break; case 78622720: if (MD5Hash == "F00658762E6E5991E16CEF1A1AF5BBCD") {version = "egs6"; vars.gameversion = 6; vars.offsets =new List() {0x04609560,0x0438BC90,0x0438BC58,0x044C9B18,0x045A2E50,0x04609560,0x04537960,0x0438D700,0x2C0,0x2B0,0x80}; } else { version = "gog6"; vars.gameversion = 6; vars.offsets =new List() {0x04609420,0x0438BB50,0x0438BB18,0x044C99D8,0x045A2D10,0x04609420,0x04537820,0x0438D5C0,0x2C0,0x2B0,0x80}; } break; case 78856192: version = "steam6"; vars.gameversion = 6; vars.offsets =new List() {0x04609420,0x0438BB50,0x0438BB18,0x044C99D8,0x045A2D10,0x04609420,0x04537820,0x0438D5C0,0x2C0,0x2B0,0x80}; break; case 82083840: case 81846272: version = "steam9"; vars.gameversion = 9; vars.offsets =new List() {0x048EA4D0,0x04669B48,0x04669B18,0x047AAA98,0x04883DD0,0x048EA4D0,0x048188E0,0x0466B0F8,0x2C0,0x2C0,0xB0}; break; case 82141184: case 81903616: version = "steam10"; vars.gameversion = 10; vars.offsets =new List() {0x048F7350,0x046767E0,0x04676800,0x047B7918,0x04890C50,0x048F7350,0x04825760,0x046781C8,0x2C0,0x2C0,0xB0}; break; case 82309120: case 82071552: version = "steam11"; vars.gameversion = 11; vars.offsets =new List() {0x0491DB20,0x0469B9F0,0x0469B9B8,0x047DCED8,0x048B73F0,0x0491DB20,0x0484AD20,0x0,0x0,0x0,0xB0}; break; case 91336704: version = "gog12"; vars.gameversion = 12; vars.offsets =new List() {0x05196A70,0x04F9D358,0x04F9D328,0x05068E48,0x0512BAD0,0x05196A70,0x050BF2F0,0x0,0x0,0x0,0x80}; break; case 91574272: version = "steam12"; vars.gameversion = 12; vars.offsets =new List() {0x05196A60,0x04F9D358,0x04F9D328,0x05068E48,0x0512BAC0,0x05196A60,0x050BF2E0,0x0,0x0,0x0,0x80}; break; case 91348992: version = "steam13"; vars.gameversion = 13; vars.offsets =new List() {0x051992F0,0x04F9FB38,0x04F9FB08,0x0506B6C8,0x0512E350,0x051992F0,0x050C1B70,0x0,0x0,0x0,0x80}; break; case 78036992: version = "gog1"; vars.gameversion = 1; vars.offsets =new List() {0x04587F20,0x0430CC48,0x0430B3D0,0x04448598,0x045218C0,0x04587F20,0x044B63D0,0x0430C9A0,0x2B0,0x2B0,0x80}; break; case 78065664: version = "gog3"; vars.gameversion = 3; vars.offsets =new List() {0x0458E2E0,0x04312E98,0x04311610,0x0444E958,0x04527C80,0x0458E2E0,0x044BC790,0x04312BE8,0x2B0,0x2B0,0x80}; break; case 78168064: version = "gog5"; vars.gameversion = 5; vars.offsets =new List() {0x045A3C20,0x04328538,0x04326CF8,0x04464298,0x0453D5C0,0x045A3C20,0x044D20D0,0x043282B8,0x2B0,0x2B0,0x80}; break; case 77885440: version = "egs1"; vars.gameversion = -1; vars.offsets =new List() {0x04565320,0x042EA0D0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; break; case 77881344: version = "egs2"; vars.gameversion = -1; vars.offsets =new List() {0x04564320,0x042E90D0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; break; case 77910016: version = "egs3"; vars.gameversion = -1; vars.offsets =new List() {0x0456B6A0,0x042F0310,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; break; default: version = "Unsupported - " + moduleSize.ToString(); MessageBox.Show("This game version is currently not supported."+version, "LiveSplit Auto Splitter - Unsupported Game Version"); break; } if (vars.gameversion < 12) { vars.enemies = new DeepPointer(vars.offsets[3], 0xB8, vars.offsets[10], 0x8, 0x10, 0x80, 0x2C0); vars.tempestblocks = new DeepPointer(vars.offsets[5], 0x1F8, 0x15c); vars.surgeblocks = new DeepPointer(vars.offsets[6], 0xCB0); } else if (vars.gameversion == 12) { vars.enemies = new DeepPointer(vars.offsets[3], 0xB8, vars.offsets[10], 0x8, 0x10, 0x80, 0x2C8); vars.tempestblocks = new DeepPointer(vars.offsets[5], 0x1F0, 0x15c); vars.surgeblocks = new DeepPointer(vars.offsets[6], 0xBF8); } else { //13 vars.enemies = new DeepPointer(vars.offsets[3], 0xB8, vars.offsets[10], 0x18, 0x10, 0x80, 0x2C8); vars.tempestblocks = new DeepPointer(vars.offsets[5], 0x1F0, 0x15c); vars.surgeblocks = new DeepPointer(vars.offsets[6], 0xBF8); } } isLoading { return (current.loading || vars.endLevelPause || current.map == "/Game/Levels/MainMenu/MainMenu" || String.IsNullOrEmpty(current.map)); } update { if (version.Contains("Unsupported")) return false; if(timer.CurrentPhase != TimerPhase.Running || current.loading || current.map == "/Game/Levels/MainMenu/MainMenu") vars.endLevelPause = false; if (current.leaderboardShown && !old.leaderboardShown && current.map != "/Game/Levels/MainMenu/MainMenu") vars.endLevelPause = true; string mapn=current.map; if (current.map == "/Game/Levels/MainMenu/MainMenu") vars.lstart = false; vars.tryreset = false; if (settings["ILKC"] && old.loading && !current.loading){ if (timer.CurrentPhase == TimerPhase.Ended) { timer.CurrentPhase = TimerPhase.Running; } vars.lstart = false; vars.tryreset = true; } if (old.loading && !current.loading && !vars.lstart && current.map != "/Game/Levels/MainMenu/MainMenu") { vars.watchers = new MemoryWatcherList(); if (vars.gameversion < 12){ vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[0], 0x52C)) { Name = "globaltimer" }); } else {vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[0], 0x598)) { Name = "globaltimer" });} vars.watchers.UpdateAll(game); if (vars.watchers["globaltimer"].Current > 0.0f) { vars.reachEOL = false; vars.lstart = true; vars.killsoffset = 0; vars.bosskilled = false; vars.watchers = new MemoryWatcherList(); vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[1], 0x30, 0x130, 0x1D0)) { Name = "xpos" }); vars.watchers.UpdateAll(game); if (!settings["hardcore"]) { switch (mapn) { case "/Game/Levels/MainMenu/MainMenu": vars.cpx=0.0; vars.cpy=0.0; vars.section = 0; break; case "/Game/Levels/Tutorial/L_Tutorial_Persistant": if (vars.watchers["xpos"].Current > 10000.0f) { vars.section = 2; }else { vars.section = 1;} break; case "/Game/Maps/damian_vr4": vars.section = 3; break; case "/Game/Levels/01_INDUSTRIAL/01_01/01_01_World": if (vars.watchers["xpos"].Current > 50000.0f) { vars.section = 4; }else { vars.section = 7; vars.killsoffset = vars.sections[4,0]-27;} break; case "/Game/Maps/ragis_lvl_vr9_2J": vars.section = 5; break; case "/Game/Levels/Cyberspace/Furrashu_Tutorial/furasshu_tutorial": vars.section = 6; break; case "/Game/Levels/Industrial/L_Industrial_Persistant": vars.section = 8; vars.killsoffset = -3; break; case "/Game/Levels/01_INDUSTRIAL/01_03/01_03_world": if (vars.watchers["xpos"].Current > 150000.0f) { vars.section = 9; vars.killsoffset = -2; }else { vars.section = 11;} break; case "/Game/Maps/ragis_lvl_vr10_6": vars.section = 10; break; case "/Game/Levels/01_INDUSTRIAL/01_04/01_04_World": vars.section = 12; break; case "/Game/Levels/Test_Levels/Ld_test/01_04_Cyberspace": vars.section = 13; break; case "/Game/Maps/Force_Push_Tutorial": vars.section = 14; break; case "/Game/Levels/01_INDUSTRIAL/01_05/01_05_World": if (vars.watchers["xpos"].Current > 50000.0f) { vars.section = 16; }else { vars.section = 15;} break; case "/Game/Levels/02_CYBERCITY/02_01/02_01_world": vars.section = 17; break; case "/Game/Levels/02_CYBERCITY/02_02/02_02_world": vars.section = 18; break; case "/Game/Maps/ragis_lvl_vr5": vars.section = 19; break; case "/Game/Levels/02_CYBERCITY/02_03/02_03_World": if (vars.watchers["xpos"].Current > 200000.0f) { vars.section = 23; } else if (vars.watchers["xpos"].Current > 20000.0f) { vars.section = 20; vars.killsoffset = 1; } else { vars.section = 21; } break; case "/Game/Levels/Cyberspace/Nami_Tutorial": vars.section = 22; break; case "/Game/Levels/03_HIGHTECH/03_01/03_01_World": vars.section = 24; break; case "/Game/Levels/03_HIGHTECH/03_02/03_02_world": if (vars.watchers["xpos"].Current > 20000.0f) { vars.section = 28; vars.killsoffset = vars.sections[25,0]-36; }else { vars.section = 25; vars.killsoffset = -30;} break; case "/Game/Levels/Test_Levels/Ld_test/Cyberspace_Bramki": vars.section = 26; break; case "/Game/Levels/Test_Levels/Ld_test/Mindhacking_Tutorial": vars.section = 27; break; case "/Game/Levels/03_HIGHTECH/03_03/03_03_World": vars.section= 29; break; case "/Game/Levels/03_HIGHTECH/03_04/03_04_world": if (vars.watchers["xpos"].Current > 0.0f) { vars.section = 31; }else { vars.section = 30;} break; case "/Game/Levels/03_HIGHTECH/03_04/Cyberspace_Architect": vars.section = 31; break; } } else { switch (mapn) { case "/Game/Levels/MainMenu/MainMenu": vars.cpx=0.0; vars.cpy=0.0; vars.section = 0; break; case "/Game/Levels/Tutorial/L_Tutorial_Persistant": if (vars.watchers["xpos"].Current > 10000.0f) { vars.section = 2; if (vars.gameversion == 9 ) {vars.killsoffset = 22;} else {vars.killsoffset = 26;} }else { vars.section = 1; vars.killsoffset = 13;} break; case "/Game/Levels/01_INDUSTRIAL/01_01/01_01_World": vars.section = 3; break; case "/Game/Levels/Industrial/L_Industrial_Persistant": vars.section = 4; break; case "/Game/Levels/01_INDUSTRIAL/01_03/01_03_world": vars.section = 5; break; case "/Game/Levels/01_INDUSTRIAL/01_04/01_04_World": vars.section = 6; break; case "/Game/Levels/01_INDUSTRIAL/01_05/01_05_World": if (vars.watchers["xpos"].Current > 50000.0f) { vars.section = 8; vars.killsoffset = 16; }else { vars.section = 7; vars.killsoffset = 4;} break; case "/Game/Levels/02_CYBERCITY/02_01/02_01_world": vars.section = 9; break; case "/Game/Levels/02_CYBERCITY/02_02/02_02_world": vars.section = 10; break; case "/Game/Levels/02_CYBERCITY/02_03/02_03_World": if (vars.watchers["xpos"].Current > 200000.0f) { vars.section = 13; } else if (vars.watchers["xpos"].Current > 20000.0f) { vars.section = 11; vars.killsoffset = 6; } else { vars.section = 12; vars.killsoffset = 31;} break; case "/Game/Levels/03_HIGHTECH/03_01/03_01_World": vars.section = 14; break; case "/Game/Levels/03_HIGHTECH/03_02/03_02_world": vars.section = 15; break; case "/Game/Levels/03_HIGHTECH/03_03/03_03_World": vars.section = 16; break; case "/Game/Levels/03_HIGHTECH/03_04/03_04_world": vars.section = 17; break; case "/Game/Levels/03_HIGHTECH/03_04/Cyberspace_Architect": vars.section = 18; break; } } if(settings["killscounter"] && vars.gameversion != -1) { vars.lvlkills = 0; vars.killsave = 0; if (!settings["hardcore"]) { vars.fulllvlkills = vars.sections[vars.section,1]; vars.killCount = vars.sections[0, 0]; } else { vars.fulllvlkills = vars.sectionshard[vars.section,1]; vars.killCount = vars.sectionshard[0, 0]; } vars.watchers = new MemoryWatcherList(); vars.defaultcounter = false; int section = vars.section; if (!settings["hardcore"]) {switch (section) { case 0: vars.fulllvlkills = 0; break; case 1: if (vars.gameversion >= 5) { vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[2], 0x28, 0x28, 0x48)) { Name = "cpx" }); vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[2], 0x28, 0x28, 0x4C)) { Name = "cpy" }); } else { vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[2], 0x28, 0x20, 0x48)) { Name = "cpx" }); vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[2], 0x28, 0x20, 0x4C)) { Name = "cpy" });} vars.watchers.UpdateAll(game); break; case 4: vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[2], 0x28, 0xA8, 0x48)) { Name = "cpx" }); vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[2], 0x28, 0xA8, 0x4C)) { Name = "cpy" }); vars.watchers.UpdateAll(game); break; case 8: vars.defaultcounter = true; vars.watchers.Add(new MemoryWatcher(vars.enemies) { Name = "enemies" }); vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[2], 0x28, 0x48, 0x48)) { Name = "cpx" }); vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[2], 0x28, 0x48, 0x4C)) { Name = "cpy" }); vars.watchers.UpdateAll(game); break; case 11: vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[2], 0x28, 0x80, 0x48)) { Name = "cpx" }); vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[2], 0x28, 0x80, 0x4C)) { Name = "cpy" }); vars.watchers.UpdateAll(game); break; case 14: vars.tempestkills = 0; vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[2], 0x28, 0x0, 0x48)) { Name = "cpx" }); vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[2], 0x28, 0x0, 0x4C)) { Name = "cpy" }); vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[4], 0x8, 0x0, 0x298, 0x790, 0x2A0)) { Name = "tempestkills" }); vars.watchers.Add(new MemoryWatcher(vars.tempestblocks) { Name = "tempestblocks" }); vars.watchers.UpdateAll(game); break; case 16: if (vars.gameversion >= 5) { vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[2], 0x28, 0x60, 0x48)) { Name = "cpx" }); vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[2], 0x28, 0x60, 0x4C)) { Name = "cpy" }); vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[2], 0x28, 0x60, 0x50)) { Name = "cpz" }); } else { vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[2], 0x28, 0x28, 0x48)) { Name = "cpx" }); vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[2], 0x28, 0x28, 0x4C)) { Name = "cpy" }); vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[2], 0x28, 0x28, 0x50)) { Name = "cpz" });} if (vars.gameversion >= 12){ vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[0], 0x128, 0xB0, 0xB0, 0x2C0, 0x609)) { Name = "bossisalive" }); } else if (vars.gameversion >= 9) { vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[0], 0x138, 0xB0, 0xB0, 0x2C0, 0x609)) { Name = "bossisalive" }); } else if (vars.gameversion >= 6) { vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[0], 0x138, 0xB0, 0xB0, 0x2C0, 0x5e1)) { Name = "bossisalive" }); } else { vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[7], 0x28, 0x28, vars.offsets[8], vars.offsets[9], 0xE0, 0x10)) { Name = "bosshealth" }); } vars.watchers.UpdateAll(game); break; case 18: if (vars.gameversion >= 5) { vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[2], 0x28, 0x138, 0x48)) { Name = "cpx" }); vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[2], 0x28, 0x138, 0x4C)) { Name = "cpy" }); } else { vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[2], 0x28, 0xA0, 0x48)) { Name = "cpx" }); vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[2], 0x28, 0xA0, 0x4C)) { Name = "cpy" });} vars.watchers.UpdateAll(game); break; case 21: if (vars.gameversion >= 5) { vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[2], 0x28, 0x28, 0x48)) { Name = "cpx" }); vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[2], 0x28, 0x28, 0x4C)) { Name = "cpy" }); } else { vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[2], 0x28, 0x20, 0x48)) { Name = "cpx" }); vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[2], 0x28, 0x20, 0x4C)) { Name = "cpy" });} if (vars.gameversion >= 12){ vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[0], 0x128, 0xB0, 0xB0, 0x280, 0x609)) { Name = "bossisalive" }); } else if (vars.gameversion >= 9) { vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[0], 0x138, 0xB0, 0xB0, 0x280, 0x609)) { Name = "bossisalive" }); } else if (vars.gameversion >= 6) { vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[0], 0x138, 0xB0, 0xB0, 0x280, 0x5e1)) { Name = "bossisalive" }); } else { vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[7], 0x28, 0x28, vars.offsets[8], vars.offsets[9], 0xE0, 0x10)) { Name = "bosshealth" }); } vars.watchers.UpdateAll(game); break; case 22: vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[2], 0x28, 0x0, 0x48)) { Name = "cpx" }); vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[2], 0x28, 0x0, 0x4C)) { Name = "cpy" }); vars.watchers.Add(new MemoryWatcher(vars.surgeblocks) { Name = "surgeblocks" }); vars.watchers.UpdateAll(game); break; case 30: vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[2], 0x28, 0x8, 0x48)) { Name = "cpx" }); vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[2], 0x28, 0x8, 0x4C)) { Name = "cpy" }); if (vars.gameversion >= 12){ vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[0], 0x128, 0xB0, 0xB0, 0x20, 0x609)) { Name = "bossisalive" }); } else if (vars.gameversion >= 9){ vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[0], 0x138, 0xB0, 0xB0, 0x20, 0x609)) { Name = "bossisalive" }); } else if (vars.gameversion >= 6){ vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[0], 0x138, 0xB0, 0xB0, 0x20, 0x5e1)) { Name = "bossisalive" }); } else { vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[7], 0x28, 0x28, vars.offsets[8], vars.offsets[9], 0xE0, 0x10)) { Name = "bosshealth" }); } vars.watchers.UpdateAll(game); break; default: vars.watchers.Add(new MemoryWatcher(vars.enemies) { Name = "enemies" }); vars.defaultcounter = true; break; } switch (section) { case 4: vars.fulllvlkills += vars.sections[7,1]; break; case 7: vars.fulllvlkills += vars.sections[4,1]; vars.lvlkills = vars.sections[4,0]; break; case 9: vars.fulllvlkills += vars.sections[11,1]; break; case 11: vars.fulllvlkills += vars.sections[9,1]; vars.lvlkills = vars.sections[9,0]; break; case 25: vars.fulllvlkills += vars.sections[28,1]; break; case 28: vars.fulllvlkills += vars.sections[25,1]; vars.lvlkills = vars.sections[25,0]; break; } } else { vars.watchers.Add(new MemoryWatcher(vars.enemies) { Name = "enemies" }); if (vars.section == 8 || vars.section == 12 || vars.section == 17) { vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[2], 0x28, 0x60, 0x48)) { Name = "cpx" }); vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[2], 0x28, 0x60, 0x4C)) { Name = "cpy" }); vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[2], 0x28, 0x60, 0x50)) { Name = "cpz" }); if (vars.gameversion < 6) { vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[7], 0x28, 0x28, vars.offsets[8], vars.offsets[9], 0xE0, 0x10)) { Name = "bosshealth" }); } else if (vars.gameversion <9){ if (vars.section == 8) {vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[0], 0x128, 0xB0, 0xB0, 0x5E0, 0x5e1)) { Name = "bossisalive" });} if (vars.section == 12) {vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[0], 0x128, 0xB0, 0xB0, 0x4C0, 0x5e1)) { Name = "bossisalive" });} if (vars.section == 17) {vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[0], 0x128, 0xB0, 0xB0, 0x220, 0x5e1)) { Name = "bossisalive" });} } else if (vars.gameversion == 9){ if (vars.section == 8) {vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[0], 0x138, 0xB0, 0xB0, 0x5E0, 0x609)) { Name = "bossisalive" });} if (vars.section == 12) {vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[0], 0x138, 0xB0, 0xB0, 0x4C0, 0x609)) { Name = "bossisalive" });} if (vars.section == 17) {vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[0], 0x138, 0xB0, 0xB0, 0x220, 0x609)) { Name = "bossisalive" });} } else if (vars.gameversion >= 12){ if (vars.section == 8) {vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[0], 0x128, 0xB0, 0xB0, 0x5E0, 0x609)) { Name = "bossisalive" }); } if (vars.section == 12) {vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[0], 0x128, 0xB0, 0xB0, 0x4C0, 0x609)) { Name = "bossisalive" });} if (vars.section == 17) {vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[0], 0x128, 0xB0, 0xB0, 0x220, 0x609)) { Name = "bossisalive" });} } else { if (vars.section == 8) { if(vars.gameversion==11){vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[0], 0x138, 0xB0, 0xB0, 0x5e0, 0x609)) { Name = "bossisalive" });} else{vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[0], 0x138, 0xB0, 0xB0, 0x2C0, 0x609)) { Name = "bossisalive" });} } if (vars.section == 12) {vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[0], 0x138, 0xB0, 0xB0, 0x4C0, 0x609)) { Name = "bossisalive" });} if (vars.section == 17) {vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[0], 0x138, 0xB0, 0xB0, 0x220, 0x609)) { Name = "bossisalive" });} } } else if (vars.section == 0) { vars.fulllvlkills = 0; } } } } } if(settings["killscounter"] && vars.gameversion != -1) { if (vars.lstart) { vars.watchers.UpdateAll(game); if (!settings["hardcore"]) { if (!vars.defaultcounter) { if(current.killpercp > old.killpercp && vars.lstart) vars.lvlkills += current.killpercp-old.killpercp; if(current.killpercp > 0 && (vars.watchers["cpx"].Current != vars.watchers["cpx"].Old || vars.watchers["cpy"].Current != vars.watchers["cpy"].Old)) vars.killsave = current.killpercp; if(current.killpercp > 0 && (current.levelTime == current.preciseTime && current.preciseTime != old.preciseTime && current.preciseTime > 0.0f) && ((vars.gameversion >= 9 && !current.bcantick) || vars.gameversion < 9)) vars.killsave = current.killpercp; if(current.killpercp == 0 && old.killpercp > 0 && vars.lstart) { vars.lvlkills += vars.killsave-old.killpercp; vars.killsave = 0;} if (vars.section == 14) { if (vars.watchers["tempestblocks"].Current >= vars.watchers["tempestkills"].Current) { vars.lvlkills = vars.watchers["tempestblocks"].Current; } else { vars.lvlkills = vars.watchers["tempestkills"].Current;} } if (vars.section == 16) { if (vars.gameversion < 6 && vars.watchers["cpx"].Current == 55920.62891f && vars.watchers["cpy"].Current == 25733.92188f && vars.watchers["cpz"].Current == -20644.0f && vars.watchers["bosshealth"].Current <= 0.112f && vars.lvlkills == 0) { vars.lvlkills += 1;} if (vars.gameversion >= 6 && !vars.watchers["bossisalive"].Current && vars.lvlkills == 0) { vars.lvlkills += 1;} } if (vars.section == 21) { if (vars.gameversion < 6 && vars.watchers["bosshealth"].Current == 0.0f && vars.watchers["bosshealth"].Old == 0.25f && vars.lvlkills == 0) { vars.lvlkills += 1;} if (vars.gameversion >= 6 && !vars.watchers["bossisalive"].Current && vars.lvlkills == 0) { vars.lvlkills += 1;} } if (vars.section == 22) { if (vars.watchers["surgeblocks"].Current == 2 && vars.lvlkills == 0) { vars.lvlkills += 1;} if (vars.watchers["surgeblocks"].Current > 2 && vars.watchers["surgeblocks"].Old == 2 && vars.lvlkills == 1) { vars.lvlkills += 2;} if (vars.watchers["surgeblocks"].Current > 4 && vars.watchers["surgeblocks"].Old == 4 && vars.lvlkills == 3) { vars.lvlkills += 3;} } if (vars.section == 30) { if (vars.gameversion < 6 && vars.watchers["bosshealth"].Current == 0.0f && vars.watchers["bosshealth"].Old > 0.32f && vars.watchers["bosshealth"].Old < 0.34f && vars.lvlkills == 0) { vars.lvlkills += 1;} if (vars.gameversion >= 6 && !vars.watchers["bossisalive"].Current && vars.lvlkills == 0) { vars.lvlkills += 1;} } } else { vars.lvlkills = vars.fulllvlkills - vars.watchers["enemies"].Current + vars.killsoffset; if (vars.section == 19 || vars.section == 27) vars.lvlkills = 0; if (vars.section == 8) { if (vars.watchers["cpx"].Current == -52000.0f && vars.watchers["cpy"].Current == 1550.021973f && vars.killsoffset == -3) vars.killsoffset = 0; } if (vars.section == 23) { if (vars.watchers["enemies"].Current == 1 && vars.fulllvlkills == 0) { vars.fulllvlkills = 1;} } } }else { if (vars.section != 1 && vars.section != 8 && vars.section != 12 && vars.section != 17 ) {vars.lvlkills = vars.fulllvlkills - vars.watchers["enemies"].Current + vars.killsoffset;} if (vars.section == 1) { if (current.levelTime != 0.0f) { vars.lvlkills = vars.fulllvlkills - vars.watchers["enemies"].Current + vars.killsoffset;} else{vars.lvlkills = 0;} } if (vars.section == 8) { if (vars.watchers["enemies"].Current > 21) { vars.killsoffset =39;} else{ vars.killsoffset = 16;} if (vars.bosskilled) { vars.lvlkills = vars.fulllvlkills - vars.watchers["enemies"].Current + vars.killsoffset+1;} else{ vars.lvlkills = vars.fulllvlkills - vars.watchers["enemies"].Current + vars.killsoffset;} if (vars.gameversion < 6 && vars.watchers["cpx"].Current == 55920.62891f && vars.watchers["cpx"].Current != vars.watchers["cpx"].Old && vars.watchers["cpy"].Current == 25733.92188f && vars.watchers["cpz"].Current == -20644.0f && vars.watchers["bosshealth"].Current <= 0.112f && !vars.bosskilled) { vars.bosskilled = true;} if (vars.gameversion >= 6 && !vars.watchers["bossisalive"].Current && !vars.bosskilled) { vars.bosskilled = true;} } if (vars.section == 12) { if (!vars.bosskilled) { vars.lvlkills = vars.fulllvlkills - vars.watchers["enemies"].Current + vars.killsoffset;} if (vars.gameversion < 6 && vars.watchers["bosshealth"].Current == 0.0f && vars.watchers["bosshealth"].Old == 0.25f && !vars.bosskilled) { vars.bosskilled = true; vars.lvlkills += 1;} if (vars.gameversion >= 6 && !vars.watchers["bossisalive"].Current && !vars.bosskilled) { vars.bosskilled = true; } } if (vars.section == 13) { vars.lvlkills = 0;} if (vars.section == 17) { if (vars.bosskilled) { vars.lvlkills = vars.fulllvlkills - vars.watchers["enemies"].Current + vars.killsoffset+1;} else{ vars.lvlkills = vars.fulllvlkills - vars.watchers["enemies"].Current + vars.killsoffset;} if (vars.gameversion < 6 && vars.watchers["bosshealth"].Current == 0.0f && vars.watchers["bosshealth"].Old > 0.32f && vars.watchers["bosshealth"].Old < 0.34f && !vars.bosskilled) { vars.bosskilled = true; vars.lvlkills = vars.fulllvlkills - vars.watchers["enemies"].Current + vars.killsoffset+1; } if (vars.gameversion >= 6 && !vars.watchers["bossisalive"].Current && !vars.bosskilled) { vars.bosskilled = true; if (vars.gameversion == 12) vars.killsoffset -=1; vars.lvlkills = vars.fulllvlkills - vars.watchers["enemies"].Current + vars.killsoffset+1; } } } } } if (current.levelTime == current.preciseTime && current.preciseTime == old.preciseTime && current.preciseTime > 0.0f && vars.lstart && ((vars.gameversion >= 9 && !current.bcantick) || vars.gameversion < 9)) { vars.lstart = false; if (!settings["hardcore"]) { vars.sections[vars.section, 2] = 1; if(settings["killscounter"] && vars.gameversion != -1) { if (vars.sections[vars.section, 0] == 0) { vars.sections[vars.section, 0] = vars.lvlkills; if (vars.section == 7) { vars.killCount += vars.lvlkills - vars.sections[4,0]; } else if (vars.section == 11) { vars.killCount += vars.lvlkills - vars.sections[9,0]; } else if (vars.section == 28) { vars.killCount += vars.lvlkills - vars.sections[25,0]; } else {vars.killCount += vars.lvlkills;} vars.sections[0, 0] = vars.killCount; } else { if (vars.sections[vars.section, 0] < vars.lvlkills) { vars.killCount += vars.lvlkills - vars.sections[vars.section, 0]; vars.sections[vars.section, 0] = vars.lvlkills; vars.sections[0, 0] = vars.killCount; } } } if((vars.section == 1 || vars.section == 7 || vars.section == 8 || vars.section == 11) && settings["lvlSplit"]) vars.reachEOL = true; if((vars.section == 15 || vars.section == 16 || vars.section == 17 || vars.section == 23) && settings["lvlSplit"] ) vars.reachEOL = true; if((vars.section == 24 || vars.section == 28 || vars.section == 29 || vars.section == 30 || vars.section == 31) && settings["lvlSplit"]) vars.reachEOL = true; if(vars.section == 31) vars.reachEOL = true; vars.watchers.Add(new MemoryWatcher(new DeepPointer(vars.offsets[1], 0x30, 0x130, 0x1D4)) { Name = "ypos" }); vars.watchers.UpdateAll(game); if(vars.section == 4 && vars.watchers["ypos"].Current > -50000.0f && settings["lvlSplit"]) { vars.reachEOL = true;} if(vars.section == 9 && vars.watchers["ypos"].Current > -75000.0f && settings["lvlSplit"]) { vars.reachEOL = true;} if(vars.section == 21 && vars.watchers["ypos"].Current < 200000.0f && settings["lvlSplit"]) { vars.reachEOL = true;} if(vars.section == 25 && vars.watchers["ypos"].Current < 0.0f && settings["lvlSplit"]) { vars.reachEOL = true;} } else { vars.sectionshard[vars.section, 2] = 1; if(settings["killscounter"] && (version != "egs" )) { if (vars.sectionshard[vars.section, 0] == 0) { vars.sectionshard[vars.section, 0] = vars.lvlkills; vars.killCount += vars.lvlkills; vars.sectionshard[0, 0] = vars.killCount; } else { if (vars.sectionshard[vars.section, 0] < vars.lvlkills) { vars.killCount += vars.lvlkills - vars.sectionshard[vars.section, 0]; vars.sectionshard[vars.section, 0] = vars.lvlkills; vars.sectionshard[0, 0] = vars.killCount;} } } if (vars.section != 18 && settings["lvlSplit"]) vars.reachEOL=true; if (vars.section == 18) vars.reachEOL=true; } } if(current.deaths == old.deaths + 1 && current.preciseTime > 0.0f) vars.deathCount += 1; if(timer.CurrentPhase == TimerPhase.NotRunning) vars.deathCount = 0; if(settings["speedometer"]) vars.UpdateSpeedometer(current.xVel, current.yVel, settings["speedround"]); if(settings["deathcounter"]) vars.SetTextComponent("Deaths", (vars.deathCount).ToString()); if(settings["killscounter"] && vars.gameversion != -1) { if (!settings["hardcore"]) { vars.SetTextComponent("Kills", (vars.lvlkills).ToString()+"/"+(vars.fulllvlkills).ToString()+" "+(vars.killCount).ToString()+"/"+(vars.sections[0,1]).ToString()); } else { vars.SetTextComponent("Kills", (vars.lvlkills).ToString()+"/"+(vars.fulllvlkills).ToString()+" "+(vars.killCount).ToString()+"/"+(vars.sectionshard[0,1]).ToString());} } } start { vars.reachEOL = false; vars.endLevelPause = false; vars.deathCount = 0; vars.killCount = 0; vars.killsave = 0; vars.lvlkills = 0; vars.sections = new int[32, 3] { {0, 505, 0}, {0, 13, 0}, {0, 9, 0}, {0, 0, 0}, {0, 27, 0}, {0, 0, 0}, {0, 10, 0}, {0, 22, 0}, {0, 21, 0}, {0, 50, 0}, {0, 0, 0}, {0, 2, 0}, {0, 38, 0}, {0, 0, 0}, {0, 7, 0}, {0, 20, 0}, {0, 1, 0}, {0, 34, 0}, {0, 60, 0}, {0, 0, 0}, {0, 17, 0}, {0, 1, 0}, {0, 6, 0}, {0, 0, 0}, {0, 39, 0}, {0, 36, 0}, {0, 0, 0}, {0, 0, 0}, {0, 30, 0}, {0, 61, 0}, {0, 1, 0}, {0, 0, 0}}; vars.sectionshard = new int[19, 3] { {0, 717, 0}, {0, 26, 0}, {0, 13, 0}, {0, 60, 0}, {0, 38, 0}, {0, 65, 0}, {0, 67, 0}, {0, 40, 0}, {0, 5, 0}, {0, 48, 0}, {0, 87, 0}, {0, 31, 0}, {0, 6, 0}, {0, 0, 0}, {0, 58, 0}, {0, 65, 0}, {0, 91, 0}, {0, 17, 0}, {0, 0, 0}}; if (settings["ILKC"]){ return (old.preciseTime == 0 && current.preciseTime > 0 && vars.section >= 1 && current.map != "/Game/Levels/MainMenu/MainMenu"); } return (old.preciseTime == 0 && current.preciseTime > 0 && vars.section == 1 && current.map != "/Game/Levels/MainMenu/MainMenu"); } split { if (current.leaderboardShown && !old.leaderboardShown && current.map != "/Game/Levels/MainMenu/MainMenu" && settings["lvlSplit"]) { vars.reachEOL = false; return true; } if (vars.reachEOL && (current.loading || vars.endLevelPause || current.map == "/Game/Levels/MainMenu/MainMenu") && current.map == "/Game/Levels/MainMenu/MainMenu" && old.map == "/Game/Levels/MainMenu/MainMenu" && settings["lvlSplit"]) { vars.reachEOL = false; return true; } if (current.map == "/Game/Levels/03_HIGHTECH/03_04/Cyberspace_Architect" && vars.reachEOL) { vars.reachEOL = false; return true; } } reset { if (settings["ILKC"] && vars.tryreset){ vars.tryreset = false; int index = -1; if (!settings["hardcore"]){ index = Array.IndexOf(vars.ILsections,vars.section); } else { index = Array.IndexOf(vars.ILsectionshard,vars.section); } if (index !=-1) { return true; } } } exit { timer.IsGameTimePaused = true; vars.endLevelPause = true; vars.lstart = false; vars.reachEOL = false; }