state("I Wanna Escape Into My Mind") {}

startup {
    Assembly.Load(File.ReadAllBytes("Components/asl-help")).CreateInstance("Unity");
    vars.Helper.GameName = "I Wanna Escape Into My Mind";
    vars.Helper.LoadSceneManager = true;

    vars.sceneNames = new[] {
        "Level1_1", // -turret
        "Level1_6", // glitch
        "Level1_11", // throwback
        "Level1Boss_2", // -norton
        "Level1Boss_4", // cherry

        "Transition2", // post-cherry, pre-mode
        "Level2_7", // atari
        "Level2_14", // post void
        "Level2Boss", // post^2 void, nehema
        "Transition3", // post-nehema, pre-smiles
        
        "Level3_7", // steppies
        "Level3_13", // eyes
        "Level3_20", // wlfgrl
        "Transition4", // post-wlfgrl, pre-girl
        "Level4_7", // my first game :)
        
        "Level4_15", // heaven
        "Level4Boss_1", // queen
        "Level4Boss_3", // -queen core
        "Transition5", // post-queen, pre-final1
        "Level5_8", // throwback^2
        
        "Level5_15", // -cherry/wlf miniboss
        "Level5_16", // final2
        "Level5_22", // final3 (void/girl)
        "Level5_30", // -nehema/queen miniboss
        "Level5_31", // final4
        
        "Level5Boss_1", // final boss phase1
        "Level5Boss_3", // -final boss phase2
        "Level5Boss_6", // -final boss phase3
        "Level5Boss_8", // -final boss phase4
        "EndingPart1", // post-phase4
    };
    var settingDesc = new[] {
        "Stage 1-1", "Stage 1-2", "Stage 1-3", "Norton Antivirus", "Contrarian Cherry",
        "Stage 2-1", "Stage 2-2", "Stage 2-3", "Nehema",
        "Stage 3-1", "Stage 3-2", "Stage 3-3", "Wlfgrl",
        "Stage 4-1", "Stage 4-2", "Stage 4-3", "Queen", "Queen Core",
        "Stage 5-1", "Stage 5-Throwback", "Stage 5-Cherry/Wlfgrl",
        "Stage 5-2", "Stage 5-Post Void/The Girl", "Stage 5-Nehema/Queen",
        "Stage 5-3", "Final Boss-Phase 1", "Final Boss-Phase 2",
        "Final Boss-Phase 3", "Final Boss-Phase 4", "Ending",
    };
    var nonDefault = new[] {0, 3, 17, 20, 23, 26, 27, 28};
    for (int i = 0; i < vars.sceneNames.Length; i++)
    {
        settings.Add(vars.sceneNames[i], !nonDefault.Contains(i), settingDesc[i]);
    }
}

init {
    vars.Helper.TryLoad = (Func<dynamic, bool>)(mono => {
        return true;
    });
}

update
{
    current.Scene = vars.Helper.Scenes.Active.Name;
}

start
{
    if (current.Scene == "IntroCutscene")
        return true;
}

onStart
{
    vars.sceneVisited = new int[vars.sceneNames.Length];
}

split
{
    for (int i = 0; i < vars.sceneNames.Length; i++)
    {
        if (current.Scene == vars.sceneNames[i] && vars.sceneVisited[i] == 0 && settings[vars.sceneNames[i]])
        {
            vars.sceneVisited[i] = 1;
            return true;
        }
    }
}

reset
{
    if (current.Scene != old.Scene && (current.Scene == "Title" || current.Scene == "WarpRoom"))
        return true;
}