// Nancy Drew: Warnings at Waverly Academy
// Written by Toasterberry, some splits by Yandema
// https://linktr.ee/toasterberry

state("Waverly") {
	string20 scene : 0x17F618, 0x50, 0x8, 0xC, 0x0;
	string20 dscne : 0x17F618, 0x50, 0x48, 0xC, 0x0; // death% scene
}

startup {
	// Universal Splits
	var universal = new Dictionary<string, string>
	{
		{ "s1700", "Bump into Izzy" },
		{ "s1400", "Rachel Hubbard" },
		{ "s4128", "Pantry Key" },
		{ "s4899", "PC Password" },
		{ "s1300", "Izzy Romero" },
		{ "s1029A_SC", "Corine sus" },
		{ "s2002", "Orthographic Start" },
		{ "s1060", "Orthographic Accepted" },
		{ "s1060c_SC", "Library Cabinet Key" },
		{ "s3750", "Piano Lamp" },
		{ "s5024", "Grave Puzzle Done" },
		{ "s1100", "Mel" },
		{ "s1200", "Leela Yadav" },
		{ "s1219", "Air Hockey" },
		{ "s1222photo_SC", "Air Hockey Win" },
		{ "s1262", "2nd Game" },
		{ "s1222menu_SC", "2nd Game Win" },
		{ "s1227", "3rd Game" },
		{ "s1230photo_SC", "3rd Game Win" },
		{ "s1319", "DNA Puzzle Accepted" },
		{ "s3710picture_SC", "Trophy Photo" },
		{ "s4210", "Snack Shop" },
		{ "s4213", "Snack Key" },
		{ "s5298", "Tree Climbing" },
		{ "s5295", "Bug Medal" },
		{ "s3741", "Door Swiped" },
		{ "s4699", "States Puzzle Start" },
		{ "s4601", "States Done" },
		{ "s3100", "Rachel Door Puzzle" },
		{ "s1710", "Rachel Caught" },
		{ "s4895", "Student Pic Puzzle Start" },
		{ "s5022", "Bow Get" },
		{ "s1177", "Mel's DoorDash" },
		{ "s2609", "Purple Trunk" },
		{ "s3709", "Piano Compartment" },
		{ "s3729", "Spoons Open" },
		{ "s5530", "Medal Display" },
		{ "s1457", "Rachel's Last Request" },
		{ "s1067", "Corine's DoorDash" },
		{ "s2018", "CELLAR" },
		{ "s5516", "Corine Caught" },
	};

	// Settings
	settings.Add("reset",true,"Auto reset at difficulty select");
	settings.Add("award",false,"All Awards");
	settings.Add("death", false, "Death%");
	settings.Add("universal", true, "Universal Splits");

	foreach (var entry in universal)
		settings.Add(entry.Key, false, entry.Value, "universal");

	vars.completedSplits = new HashSet<string>();
}

onStart {
	vars.completedSplits.Clear();
}

start {
	if (current.scene == "s6430") {
		vars.death = !settings["death"];
		vars.reset = !settings["reset"];
		vars.award = !settings["award"];
		return true;
	}
}

split {
	if (old.scene == current.scene)
		return false;

	return current.dscne == "SecondChance_Type_SC" && !vars.death // Death% end
		|| current.scene == "s6400" && !vars.award // All Awards end
		|| current.scene == "s6415" && vars.award // Universal end
		|| settings[current.scene] && vars.completedSplits.Add(current.scene); // All other splits
}

reset {
	return !vars.reset
		&& old.scene != current.scene
		&& current.scene == "s6499";
}