// We Were Here Too - Autostart, Autosplit, Autoreset
// Made by Vocatis, Rouzard
// Version 1.0.0

state("We Were Here Too"){
    bool isVideoPlaying: "UnityPlayer.dll", 0x15BEF20;
}

startup
{
    settings.Add("safe_end", false, "Final split - Safe mode");
    settings.SetToolTip("safe_end", "Splits at appearance of final cutscene (Late)");

    settings.Add("ritual_start", false, "Starting at The Ritual (Be sure to use the according Splits file)");
    settings.SetToolTip("ritual_start", "Check if your starting at The Ritual");

    settings.Add("stair_start", false, "Starting at The Stairwell (Be sure to use the according Splits file)");
    settings.SetToolTip("stair_start", "Check if your starting at The Stairwell");

    settings.Add("weapons_start", false, "Starting at The Promenade (Be sure to use the according Splits file)");
    settings.SetToolTip("weapons_start", "Check if your starting at The Promenade");

    settings.Add("battlefield_start", false, "Starting at The Council or at The Battlefield (Be sure to use the according Splits file)");
    settings.SetToolTip("battlefield_start", "Check if your starting at The Council or at The Battlefield");

    settings.Add("arena_start", false, "Starting at The Arena (Be sure to use the according Splits file)");
    settings.SetToolTip("arena_start", "Check if your starting at The Arena");

    settings.Add("incinerator_start", false, "Starting at The Incinerator (Be sure to use the according Splits file)");
    settings.SetToolTip("incinerator_start", "Check if your starting at The Incinerator");

    settings.Add("elevator_start", false, "Starting at The Elevator (Be sure to use the according Splits file)");
    settings.SetToolTip("elevator_start", "Check if your starting at The Elevator");

    Assembly.Load(File.ReadAllBytes("Components/asl-help")).CreateInstance("Unity");
}

init
{
    vars.checkpoints = 0;

    //vars.splashScreen = 0;
    vars.loadingScene = 1;
    vars.mainMenu = 2;
    vars.gameOver = 3;
    vars.gameScene = 4;
    //vars.infoScreen = 5;
    vars.lordSlot = 11;
    //vars.peasantSlot = 15;
    vars.lordRitual = 10;
    vars.peasantRitual = 14;
    vars.peasantStairs = 16;
    vars.lordWeapons = 12;
    vars.peasantWeapons = 17;
    vars.lordBattleboard = 9;
    vars.peasantBattleboard = 13;
    vars.arena = 6;
    vars.incinerator = 8;
    vars.elevator = 7;

    vars.TimerModel = new TimerModel { CurrentState = timer };

    vars.Helper.TryLoad = (Func<dynamic, bool>)(mono =>
    {
        vars.Helper["gameSceneIndex"] = mono.Make<int>("GlobalNetworkSystem", "manager", "currentScene");
        return true;
    });

}


update
{
    if(current.gameSceneIndex == vars.mainMenu) {
        vars.checkpoints = 0;
    }

    if (!settings["safe_end"] && old.gameSceneIndex == vars.loadingScene && current.gameSceneIndex == vars.elevator && vars.checkpoints == 8) {
        vars.checkpoints--;
        vars.TimerModel.UndoSplit();
    }
}

reset
{

    if(old.gameSceneIndex == vars.loadingScene && current.gameSceneIndex == vars.mainMenu && vars.checkpoints < 8) {
        return true;
    }
}

split
{
    if ((current.gameSceneIndex == vars.lordRitual || current.gameSceneIndex == vars.peasantRitual) && vars.checkpoints == 0) {
        vars.checkpoints++;
        return true;
    }
    if (current.gameSceneIndex == vars.peasantStairs && vars.checkpoints == 1) {
        vars.checkpoints++;
        return true;
    }
    if ((current.gameSceneIndex == vars.lordWeapons && (vars.checkpoints == 1 || vars.checkpoints == 2)) || (current.gameSceneIndex == vars.peasantWeapons && vars.checkpoints == 2)) {
        vars.checkpoints++;
        if (current.gameSceneIndex == vars.lordWeapons && vars.checkpoints == 2) {
            vars.checkpoints++;
        }
        return true;
    }
    if ((current.gameSceneIndex == vars.lordBattleboard || current.gameSceneIndex == vars.peasantBattleboard) && vars.checkpoints == 3) {
        vars.checkpoints++;
        return true;
    }
    if (current.gameSceneIndex == vars.arena && vars.checkpoints == 4) {
        vars.checkpoints++;
        return true;
    }
    if (current.gameSceneIndex == vars.incinerator && vars.checkpoints == 5) {
        vars.checkpoints++;
        return true;
    }
    if (current.gameSceneIndex == vars.elevator && vars.checkpoints == 6) {
        vars.checkpoints++;
        return true;
    }
    if (!settings["safe_end"] && (old.gameSceneIndex == vars.gameScene || old.gameSceneIndex == vars.elevator) && current.gameSceneIndex == vars.loadingScene && vars.checkpoints == 7) {
        vars.checkpoints++;
        return true;
    }

    if (settings["safe_end"] && current.gameSceneIndex == vars.gameOver && current.isVideoPlaying && vars.checkpoints == 7) {
        vars.checkpoints++;
        return true;
    }

}

start
{
    if (current.gameSceneIndex == vars.gameScene && !current.isVideoPlaying && old.isVideoPlaying) {
        return true;
    }
    if (settings["ritual_start"] && (current.gameSceneIndex == vars.gameScene) && (old.gameSceneIndex == vars.lordRitual || old.gameSceneIndex == vars.peasantRitual)) {
        vars.checkpoints = 1;
        return true;
    }
    if (settings["stair_start"] && (current.gameSceneIndex == vars.gameScene) && (old.gameSceneIndex == vars.lordRitual || old.gameSceneIndex == vars.peasantStairs)) {
        vars.checkpoints = 2;
        return true;
    }
    if (settings["weapons_start"] && (current.gameSceneIndex == vars.gameScene) && (old.gameSceneIndex == vars.lordWeapons || old.gameSceneIndex == vars.peasantWeapons)) {
        vars.checkpoints = 3;
        return true;
    }
    if (settings["battlefield_start"] && (current.gameSceneIndex == vars.gameScene) && (old.gameSceneIndex == vars.lordBattleboard || old.gameSceneIndex == vars.peasantBattleboard)) {
        vars.checkpoints = 4;
        return true;
    }
    if (settings["arena_start"] && (current.gameSceneIndex == vars.gameScene) && old.gameSceneIndex == vars.arena) {
        vars.checkpoints = 5;
        return true;
    }
    if (settings["incinerator_start"] && (current.gameSceneIndex == vars.gameScene) && old.gameSceneIndex == vars.incinerator) {
        vars.checkpoints = 6;
        return true;
    }
    if (settings["elevator_start"] && (current.gameSceneIndex == vars.gameScene) && old.gameSceneIndex == vars.elevator) {
        vars.checkpoints = 7;
        return true;
    }
}