Last active
June 9, 2022 10:21
-
-
Save poacher2k/4655b01681705d67b277de8046397cce to your computer and use it in GitHub Desktop.
Autosplitter for "The Operative: No One Lives Forever"
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
//hipp0cat & poacher2k's version for lithfix | |
//original autosplitter made by poacher2k & TheTedder | |
state("lithtech") | |
{ | |
byte ingame: "CShellReal.dll", 0x131934; | |
byte mission : "CShellReal.dll", 0x1306F0, 0x49374; | |
byte scene : "CShellReal.dll", 0x1306F0, 0x063f0; | |
} | |
startup | |
{ | |
refreshRate = 60; | |
settings.Add("load_remove", true, "Enable load removal"); | |
settings.Add("mission0", true, "Mission 1: The Assignment"); | |
settings.Add("mission0scene0", false, "Scene 1", "mission0"); | |
settings.SetToolTip("mission0scene0", @"Just a cutscene"); | |
settings.Add("mission0scene1", true, "Scene 2", "mission0"); | |
settings.Add("mission1", true, "Mission 2: Misfortune in Morocco"); | |
settings.Add("mission1scene0", true, "Scene 1", "mission1"); | |
settings.Add("mission1scene1", true, "Scene 2", "mission1"); | |
settings.Add("mission1scene2", true, "Scene 3", "mission1"); | |
settings.Add("mission2", true, "Mission 3: Requiem for a Spy"); | |
settings.Add("mission3", true, "Mission 4: Berlin by Night"); | |
settings.Add("mission3scene0", true, "Scene 1", "mission3"); | |
settings.Add("mission3scene1", true, "Scene 2", "mission3"); | |
settings.Add("mission4", true, "Mission 5: Unexpected Turbulence"); | |
settings.Add("mission4scene0", true, "Scene 1", "mission4"); | |
settings.Add("mission5", true, "Mission 6: Care to Explain?"); | |
settings.Add("mission6", true, "Mission 7: Rendezvous in Hamburg"); | |
settings.Add("mission6scene0", true, "Scene 1", "mission6"); | |
settings.Add("mission7", true, "Mission 8: Visit to Santa's Workshop"); | |
settings.Add("mission8", true, "Mission 9: A Tenuous Lead"); | |
settings.Add("mission8scene0", true, "Scene 1", "mission8"); | |
settings.Add("mission8scene1", true, "Scene 2", "mission8"); | |
settings.Add("mission8scene2", true, "Scene 3", "mission8"); | |
settings.Add("mission8scene3", true, "Scene 4", "mission8"); | |
settings.Add("mission9", true, "Mission 10: H.A.R.M.'s Promise"); | |
settings.Add("mission10", true, "Mission 11: The Dive"); | |
settings.Add("mission10scene0", true, "Scene 1", "mission10"); | |
settings.Add("mission10scene1", true, "Scene 2", "mission10"); | |
settings.Add("mission11", true, "Mission 12: If Our Demands Are Not Met"); | |
settings.Add("mission12", true, "Mission 13: A Man of Influence"); | |
settings.Add("mission12scene0", true, "Scene 1", "mission12"); | |
settings.Add("mission12scene1", true, "Scene 2", "mission12"); | |
settings.Add("mission13", true, "Mission 14: Further Investigation Required"); | |
settings.Add("mission14", true, "Mission 15: Safecracker"); | |
settings.Add("mission14scene0", true, "Scene 1", "mission14"); | |
settings.Add("mission14scene1", true, "Scene 2", "mission14"); | |
settings.Add("mission14scene2", true, "Scene 3", "mission14"); | |
settings.Add("mission14scene3", true, "Scene 4", "mission14"); | |
settings.Add("mission14scene4", true, "Scene 5", "mission14"); | |
settings.Add("mission15", true, "Mission 16: An Ounce of Hope, a Pound of Despair"); | |
settings.Add("mission16", true, "Mission 17: Rescue Attempt"); | |
settings.Add("mission16scene0", true, "Scene 1", "mission16"); | |
settings.Add("mission16scene1", true, "Scene 2", "mission16"); | |
settings.Add("mission17", true, "Mission 18: A Stern Warning"); | |
settings.Add("mission18", true, "Mission 19: Trouble in the Tropics"); | |
settings.Add("mission18scene0", true, "Scene 1", "mission18"); | |
settings.Add("mission18scene1", true, "Scene 2", "mission18"); | |
settings.Add("mission18scene2", true, "Scene 3", "mission18"); | |
settings.Add("mission19", true, "Mission 20: Low Earth Orbit"); | |
settings.Add("mission19scene0", true, "Scene 1", "mission19"); | |
settings.Add("mission20", true, "Mission 21: Good Luck and God Speed"); | |
settings.Add("mission21", true, "Mission 22: Alpine Intrigue"); | |
settings.Add("mission21scene0", true, "Scene 1", "mission21"); | |
settings.Add("mission21scene1", true, "Scene 2", "mission21"); | |
settings.Add("mission21scene2", true, "Scene 3", "mission21"); | |
settings.Add("mission22", true, "Mission 23: The Indomitable Cate Archer"); | |
settings.Add("mission22scene0", true, "Scene 1", "mission22"); | |
settings.Add("mission22scene1", true, "Scene 2", "mission22"); | |
settings.Add("mission22scene2", true, "Scene 3", "mission22"); | |
settings.Add("mission23", true, "Mission 24: A Very Large Explosion"); | |
settings.Add("mission23scene0", true, "Scene 1", "mission23"); | |
settings.Add("mission24", true, "Mission 25: Such Is the Nature of Revenge"); | |
settings.Add("mission24scene0", true, "Scene 1", "mission24"); | |
settings.Add("mission25", false, "Bonus Mission: Rest and Relaxation"); | |
settings.SetToolTip("mission25", @"Not run in any%"); | |
settings.Add("mission25scene0", true, "Scene 1", "mission25"); | |
settings.Add("mission25scene1", true, "Scene 2", "mission25"); | |
settings.Add("mission25scene2", true, "Scene 3", "mission25"); | |
Action<string> DebugOutput = (text) => { | |
print("[The Operative: No One Lives Forever Autosplitter] "+text); | |
}; | |
vars.DebugOutput = DebugOutput; | |
List<string> hasSplitList = new List<string>(); | |
vars.hasSplitList = hasSplitList; | |
} | |
init | |
{ | |
} | |
exit | |
{ | |
timer.IsGameTimePaused = true; | |
} | |
update | |
{ | |
} | |
start | |
{ | |
bool gameStart = gameStart = current.mission == 0 && current.scene == 0; | |
if (gameStart) | |
{ | |
vars.DebugOutput("Timer started"); | |
vars.hasSplitList = new List<string>(); | |
return true; | |
} | |
} | |
reset | |
{ | |
bool runReset = old.mission != 0 && current.mission == 0; | |
bool isFirstSceneOfGame = current.mission == 0 && current.scene == 0; | |
bool firstMissionReset = isFirstSceneOfGame && old.scene != 0; | |
if (runReset || firstMissionReset) | |
{ | |
vars.DebugOutput("Timer reset"); | |
return true; | |
} | |
} | |
split | |
{ | |
bool gameStart = current.mission == 0 && current.scene == 0; | |
if (gameStart) | |
{ | |
return; | |
} | |
if (current.scene == old.scene + 1) | |
{ | |
// Check setting for previous mission value, because the split would | |
// be for the end of the previous scene | |
string settingsKey = "mission" + old.mission + "scene" + old.scene; | |
bool hasAlreadySplit = vars.hasSplitList.Contains(settingsKey); | |
if (settings[settingsKey] && !hasAlreadySplit) | |
{ | |
vars.hasSplitList.Add(settingsKey); | |
vars.DebugOutput("Split Start of Scene " + current.scene); | |
return true; | |
} | |
} | |
bool isNextMission = current.mission == old.mission + 1; | |
if (isNextMission) | |
{ | |
// Check setting for previous mission value, because the split would | |
// be for the end of the previous mission | |
string settingsKey = "mission" + old.mission; | |
bool hasAlreadySplit = vars.hasSplitList.Contains(settingsKey); | |
if (settings[settingsKey] && !hasAlreadySplit) | |
{ | |
vars.hasSplitList.Add(settingsKey); | |
vars.DebugOutput("Split Start of Mission " + current.mission); | |
return true; | |
} | |
} | |
} | |
isLoading | |
{ | |
return settings["load_remove"] && current.ingame == 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment