state("Rally") { int stageTime : 0x1FF9FC; int isDone : 0x14FC40; bool runStart : 0xEE84C; bool inMain : 0x9905E0; } init { vars.raceTime = 0; vars.runBegin = false; } update { if (vars.runBegin) { vars.raceTime = 0; } else if (current.stageTime == 0 && old.stageTime > 0) { vars.raceTime = vars.raceTime; } else { vars.raceTime = vars.raceTime + current.stageTime - old.stageTime; } if (current.stageTime == 0) { vars.runBegin = false; } } isLoading { return true; } gameTime { return TimeSpan.FromMilliseconds(vars.raceTime*10); } split { return (current.isDone == 1 && old.isDone == 11); } start { if (current.runStart && !old.runStart) { vars.runBegin = true; return true; } } reset { return !current.inMain; }