state("SaintsRowIV", "Current Steam")
{
	int isLoad : 0x12B2314; 
	bool zeroIfComplete : 0x12C0928;
	string32 currentDialogue : 0x3BDEC30;
	int zinyakDed : 0x375E4F8;
	string32 missionBank : 0x14101CD;
	int startCheck : 0x12A4920;
	int passCheck : 0x12F281C;
}

state("SaintsRowIV", "Pre-Workshop cracked")
{
	int isLoad : 0x51C3D6C;
	bool zeroIfComplete : 0x51D2200; // or 51BB044
	string32 currentDialogue : 0x7AE6F90;
	int zinyakDed : 0x76902B8;
	string32 missionBank : 0x532409D;
	int startCheck : 0x51BABA0;
	int passCheck : 0x5211798;
}

startup
{
    vars.aslName = "Saints Row IV Autosplitter";
    if(timer.CurrentTimingMethod == TimingMethod.RealTime)
        {
            var timingMessage = MessageBox.Show(
                "This game uses Game Time (time without loads) as the main timing method.\n"+
                "LiveSplit is currently set to show Real Time (time INCLUDING loads).\n"+
                "Would you like the timing method to be set to Game Time for you?",
                vars.aslName+" | LiveSplit",
                MessageBoxButtons.YesNo,MessageBoxIcon.Question
            );
            if (timingMessage == DialogResult.Yes) timer.CurrentTimingMethod = TimingMethod.GameTime;
	}
}

init
{
	if (modules.First().ModuleMemorySize == 133226496)
	{
		version = "Pre-Workshop cracked";
	}
	if (modules.First().ModuleMemorySize == 67198976)
	{
		version = "Current Steam";
	}
	
	vars.rewardCheck = false;
}

update
{
	if (!current.zeroIfComplete && old.zeroIfComplete)
	{vars.rewardCheck = true;}
}

split
{

	if
	(	
		vars.rewardCheck && current.passCheck == 4000
	)
	{
		vars.rewardCheck = false;
		return true;
	}
	
	if
	(
		(current.missionBank == "m15_3_media.bnk_pc" && old.missionBank == "m15_1_media.bnk_pc")
		||
		(current.missionBank == "m17_media.bnk_pc" && old.missionBank == "m16_media.bnk_pc")
		||
		(current.missionBank == "m22_2_media.bnk_pc" && old.missionBank == "m22_1_media.bnk_pc")
		||
		(current.missionBank == "m22_3_media.bnk_pc" && old.missionBank == "m22_2_media.bnk_pc")
		||
		(current.missionBank == "m23_media.bnk_pc" && old.missionBank == "m22_3_media.bnk_pc")
	)
	return true;
}

isLoading
{
	return current.isLoad == 101 && current.zeroIfComplete;
}

start
{
	return current.missionBank == "m00_media.bnk_pc" && current.startCheck != old.startCheck && old.startCheck == 1;
}

reset
{
	return current.missionBank == "m00_media.bnk_pc" && old.missionBank == "";
}