state("GoriCuddlyCarnage-Win64-Shipping"){} startup { Assembly.Load(File.ReadAllBytes("Components/asl-help")).CreateInstance("Basic"); vars.Helper.GameName = "Gori: Cuddly Carnage"; if (timer.CurrentTimingMethod == TimingMethod.RealTime) { var timingMessage = MessageBox.Show ( "This game uses Time without Loads (Game Time) as the main timing method.\n"+ "\n" + "LiveSplit is currently set to show Real Time (RTA).\n" + "\n" + "Would you like to set the timing method to Game Time?", "LiveSplit | Gori: Cuddly Carnage", MessageBoxButtons.YesNo, MessageBoxIcon.Question ); if (timingMessage == DialogResult.Yes) timer.CurrentTimingMethod = TimingMethod.GameTime; } settings.Add("levels", false, "Individual Level Timer"); settings.Add("Chapters", true, "Chapter Splits"); settings.Add("ch_01", true, "Chapter 1", "Chapters"); settings.Add("ch_02", true, "Chapter 2", "Chapters"); settings.Add("ch_03", true, "Chapter 3", "Chapters"); settings.Add("ch_04", true, "Chapter 4", "Chapters"); settings.Add("ch_05", true, "Chapter 5", "Chapters"); settings.Add("ch_06", true, "Chapter 6", "Chapters"); settings.Add("ch_07", true, "Chapter 7", "Chapters"); settings.Add("ch_08", true, "Chapter 8", "Chapters"); settings.Add("reset", false, "Auto-Reset on Main Menu"); } init { var gWorld = vars.Helper.ScanRel(3, "48 8B 05 ???????? 48 3B C? 48 0F 44 C? 48 89 05 ???????? E8"); if (gWorld == IntPtr.Zero) throw new InvalidOperationException("GWorld not yet found."); vars.Helper["LevelID"] = vars.Helper.Make<int>(gWorld, 0x1B8, 0x1E8); vars.Helper["LevelTime"] = vars.Helper.Make<float>(gWorld, 0x1B8, 0x1e0, 0x298, 0x14c); vars.Helper["IsInIntro"] = vars.Helper.Make<bool>(gWorld, 0x1B8, 0x274); vars.Helper["IsInMenu"] = vars.Helper.Make<bool>(gWorld, 0x1B8, 0x273); vars.Helper["IsLoading"] = vars.Helper.Make<byte>(gWorld, 0x1B8, 0x298, 0xE1); vars.Helper["InCutscene"] = vars.Helper.Make<bool>(gWorld, 0x1b8, 0x38, 0x0, 0x30, 0x338, 0x20B0); vars.Helper["ch1Time"] = vars.Helper.Make<float>(gWorld, 0x1B8, 0x1E0, 0x2A0, 0xE0, 0x4); vars.Helper["ch2Time"] = vars.Helper.Make<float>(gWorld, 0x1B8, 0x1E0, 0x2A0, 0xE0, 0x34); vars.Helper["ch3Time"] = vars.Helper.Make<float>(gWorld, 0x1B8, 0x1E0, 0x2A0, 0xE0, 0x64); vars.Helper["ch4Time"] = vars.Helper.Make<float>(gWorld, 0x1B8, 0x1E0, 0x2A0, 0xE0, 0x94); vars.Helper["ch5Time"] = vars.Helper.Make<float>(gWorld, 0x1B8, 0x1E0, 0x2A0, 0xE0, 0xc4); vars.Helper["ch6Time"] = vars.Helper.Make<float>(gWorld, 0x1B8, 0x1E0, 0x2A0, 0xE0, 0xf4); vars.Helper["ch7Time"] = vars.Helper.Make<float>(gWorld, 0x1B8, 0x1E0, 0x2A0, 0xE0, 0x124); vars.Helper["ch8Time"] = vars.Helper.Make<float>(gWorld, 0x1B8, 0x1E0, 0x2A0, 0xE0, 0x154); vars.Helper["LoactionX"] = vars.Helper.Make<double>(gWorld, 0x1b8, 0x38, 0x0 , 0x30, 0x338, 0x328, 0x128); vars.Helper["LoactionY"] = vars.Helper.Make<double>(gWorld, 0x1b8, 0x38, 0x0 , 0x30, 0x338, 0x328, 0x130); vars.Helper["LoactionZ"] = vars.Helper.Make<double>(gWorld, 0x1b8, 0x38, 0x0 , 0x30, 0x338, 0x328, 0x138); } update{ vars.Helper.Update(); vars.Helper.MapPointers(); } start { if(settings["levels"]) { return (current.LevelID != 1 && current.IsLoading < 32 && old.IsLoading >= 32); } return (current.LevelTime != 0 && current.ch1Time < 1 && current.LevelID == 3); } split { if (old.ch1Time != current.ch1Time && settings["ch_01"] && current.LevelID != 26 && current.LevelID != 0) return true; if (old.ch2Time != current.ch2Time && settings["ch_02"] && current.LevelID != 26 && current.LevelID != 0) return true; if (old.ch3Time != current.ch3Time && settings["ch_03"] && current.LevelID != 26 && current.LevelID != 0) return true; if (old.ch4Time != current.ch4Time && settings["ch_04"] && current.LevelID != 26 && current.LevelID != 0) return true; if (old.ch5Time != current.ch5Time && settings["ch_05"] && current.LevelID != 26 && current.LevelID != 0) return true; if (old.ch6Time != current.ch6Time && settings["ch_06"] && current.LevelID != 26 && current.LevelID != 0) return true; if (old.ch7Time != current.ch7Time && settings["ch_07"] && current.LevelID != 26 && current.LevelID != 0) return true; //final split dumb dumb split, make better please somehow if (current.ch8Time == 0 && (current.InCutscene) && (current.LevelID == 10) && (settings["ch_08"]) && (current.LoactionX > 11000 && current.LoactionX < 300000) && (current.LoactionY > -11000 && current.LoactionY < -5000) && (current.LoactionZ > 2000 && current.LoactionZ < 6000)) return true; } gameTime{ if(settings["levels"]) return TimeSpan.FromSeconds(current.LevelTime); } isLoading { //set is loading all the time if levels is enabled, otherwise do normal load removal return (current.IsLoading >= 32) || settings["levels"] || current.LevelID == 0 || current.IsInMenu; } reset { return (current.LevelTime < 0.006061 && settings["levels"]) || (current.IsInMenu && settings["reset"]); } exit { timer.IsGameTimePaused = true; }