// Nancy Drew: The Haunting of Castle Malloy
// Written by Toasterberry, splits by Yandema
// https://linktr.ee/toasterberry

state("CastleMalloy") {
	string5 scene : 0x11FE2D, 0x92, 0x8, 0x10, 0x1A, 0x0;
}

startup {
	// Universal Splits
	var universal = new Dictionary<string, string>
	{
		{ "s1500", "Call Alan Paine" },
		{ "s3075", "Knock on Castle Door" },
		{ "s3022", "Break Window" },
		{ "s1001", "Meet Kyler" },
		{ "s1035", "Kyler 2" },
		{ "s2680", "Weights" },
		{ "s2632", "Hanoi Start" },
		{ "s2640", "Hanoi Done" },
		{ "s2053", "Get Weight on Table" },
		{ "s1100", "Meet Kit" },
		{ "s1138", "Kit 2" },
		{ "s1156", "Seating Chart Done" },
		{ "s2910", "At Garden" },
		{ "s2916", "Leprechauns Done" },
		{ "s3839", "In Nursery" },
		{ "s4099", "Otters Start" },
		{ "s3829", "Otters Done" },
		{ "s3855", "Left Nursery Passage" },
		{ "s2930", "At Bog" },
		{ "s3501", "At Hut" },
		{ "s3515", "Got Jetpack" },
		{ "s3521", "Got Glass Lens" },
		{ "s3011", "At Crosses" },
		{ "s3033", "At Big Wall" },
		{ "s3034", "Big Wall Opened" },
		{ "s3043", "At Sheep Pen" },
		{ "s2988", "Got Sketch" },
		{ "s2065", "Printing Press Start" },
		{ "s1055", "Printing Press Done" },
		{ "s1089", "Ask Kyler About Sketch" },
		{ "s2650", "Gears Start" },
		{ "s2702", "Gears Done" },
		{ "s3063", "Garden Flower" },
		{ "s2923", "Fairy Circle Flower" },
		{ "s3060", "Bog Flower" },
		{ "s3510", "See Sheep Doll" },
		{ "s3062", "Entry Arch Flower" },
		{ "s3061", "Left of Car Flower" },
		{ "s2974", "Pillars Flower" },
		{ "s2048", "Luggage" },
		{ "s1161", "Kit 3" },
		{ "s2311", "Entered Inn" },
		{ "s2322", "Darts Won" },
		{ "s2365", "Difference Detective Won" },
		{ "s1200", "Meet Donal" },
		{ "s2375", "Mix Maid Tutorial Start" },
		{ "s2376", "Mix Maid Start" },
		{ "s1206", "Mix Maid Done" },
		{ "s2313", "Drums Start" },
		{ "s2377", "Drums Done" },
		{ "s3101", "Sheep Hunt Done" },
		{ "s1266", "Ask Donal About Shearing" },
		{ "s3100", "Shearing Start" },
		{ "s3522", "Got Sheep Doll" },
		{ "s2054", "Got Fortune Weight" },
		{ "s2701", "Weights Done" },
		{ "s4095", "Dolls Start" },
		{ "s3845", "Dolls Done" },
		{ "s2995", "Archway Slider Start" },
		{ "s2999", "Archway Slider Done" },
		{ "s4103", "In Tower" },
		{ "s2927", "N5 Island" },
		{ "s2670", "Hydroponics Book" },
		{ "s2634", "Zoopraxiscope Book" },
		{ "s2671", "Ersatz Quidnuncs Book" },
		{ "s2635", "Nautical Cartography Book" },
		{ "s4111", "Desk Opened" },
		{ "s3524", "Fiona Cutscene" },
		{ "s1301", "Meet Matt" },
		{ "s3240", "Tanagram" },
		{ "s3236", "Rocket Nose" },
		{ "s3231", "Rocket Fin" },
		{ "s3250", "Chemicals Start" },
		{ "s3241", "Chemicals Done" },
		{ "s3270", "Rocket Wires" },
		{ "s3215", "Rocket Control Panel" },
		{ "s3217", "Rocket Launch" }
	};

	// Death% Splits
	var death = new Dictionary<string, string>
	{
		{ "s3199", "Cutscene Skip" },
		{ "s3074", "Knock" },
		{ "s3010", "Rocks" },
		{ "s3021", "Broken Window Noticed" },
		{ "s2042", "Broken Stairs" }
	};

	// 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");

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

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

onStart {
	vars.completedSplits.Clear();
}

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

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

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

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