about summary refs log tree commit diff stats
path: root/Manifold Garden.asl
diff options
context:
space:
mode:
Diffstat (limited to 'Manifold Garden.asl')
-rw-r--r--Manifold Garden.asl37
1 files changed, 20 insertions, 17 deletions
diff --git a/Manifold Garden.asl b/Manifold Garden.asl index a7d7778..a632f98 100644 --- a/Manifold Garden.asl +++ b/Manifold Garden.asl
@@ -34,15 +34,18 @@ state("ManifoldGarden") {
34} 34}
35 35
36startup { 36startup {
37 settings.Add("every",true,"Split on every level change");
38 settings.Add("fall",false,"Including all ending falling scenes","every");
37 settings.Add("allGodCubes", false, "All God Cubes waypoints"); 39 settings.Add("allGodCubes", false, "All God Cubes waypoints");
38 settings.Add("zero", false, "Zero% waypoints"); 40 settings.Add("zero", false, "Zero% waypoints");
41 settings.Add("raymarchitecture", true, "Split on Raymarchitecture (ending cutsence)");
39 settings.Add("norepeats",false,"Split only on the first encounter of each level"); 42 settings.Add("norepeats",false,"Split only on the first encounter of each level");
40 vars.waypoints = null; 43 vars.waypoints = null;
41 vars.prevLevel = 0; 44 vars.prevLevel = 0;
42 vars.seqIndex = 0;
43 vars.stopwatch = null; // Used for the final split 45 vars.stopwatch = null; // Used for the final split
44 vars.prev = new List<int>(); 46 vars.prev = new List<int>();
45 vars.firstRoom = false; 47 vars.firstRoom = false;
48 vars.fall = new List<int>{97, 98, 99, 101, 102, 103, 104};
46} 49}
47 50
48init { 51init {
@@ -68,11 +71,12 @@ start {
68 print(String.Format("Level changed from {0} to {1}: START", old.level, current.level)); 71 print(String.Format("Level changed from {0} to {1}: START", old.level, current.level));
69 if (settings["zero"]) { 72 if (settings["zero"]) {
70 vars.waypoints = new List<int>{106, 17, 110, 115, 111, 36, 44}; 73 vars.waypoints = new List<int>{106, 17, 110, 115, 111, 36, 44};
74 } else if (settings["allGodCubes"]) {
75 vars.waypoints = new List<int>{82, 83, 84, 85, 86, 87, 88};
71 } else { 76 } else {
72 vars.waypoints = null; 77 vars.waypoints = null;
73 } 78 }
74 vars.prevLevel = current.level; 79 vars.prevLevel = current.level;
75 vars.seqIndex = 0;
76 vars.stopwatch = Stopwatch.StartNew(); 80 vars.stopwatch = Stopwatch.StartNew();
77 vars.prev.Clear(); 81 vars.prev.Clear();
78 vars.firstRoom = false; 82 vars.firstRoom = false;
@@ -84,13 +88,20 @@ split {
84 // Split when level index changes. We don't split for the first room change in a run, 88 // Split when level index changes. We don't split for the first room change in a run,
85 // because that is always going to be changing from -1 to 9, and it happens a couple of 89 // because that is always going to be changing from -1 to 9, and it happens a couple of
86 // seconds after the timer starts. 90 // seconds after the timer starts.
87 if (vars.firstRoom && current.level != vars.prevLevel && current.level >= 0) { 91 if (vars.firstRoom && current.level != vars.prevLevel && current.level > 0) {
88 string action = "NO SPLIT"; 92 string action = "NO SPLIT";
89 93
90 // Ignore the split rules when script is reloaded mid-game: 94 // Ignore the split rules when script is reloaded mid-game:
91 if (vars.prevLevel != 0) { 95 if (vars.prevLevel != 0) {
92 // Split rules: 96 // Split rules:
93 if (vars.waypoints == null) { 97 if (settings["every"]) {
98 if (settings["fall"] || !vars.fall.Contains(current.level)) {
99 action = "SPLIT";
100 }
101 } else if (vars.waypoints != null) {
102 if (vars.waypoints.Contains(current.level)) {
103 action = "SPLIT";
104 }
94 if (settings["allGodCubes"]) { 105 if (settings["allGodCubes"]) {
95 if (current.level >= 82 && current.level <= 88) { 106 if (current.level >= 82 && current.level <= 88) {
96 action = "SPLIT"; 107 action = "SPLIT";
@@ -98,26 +109,16 @@ split {
98 } else { 109 } else {
99 action = "SPLIT"; 110 action = "SPLIT";
100 } 111 }
101 } else if (vars.seqIndex < vars.waypoints.Count) {
102 if (current.level == vars.waypoints[vars.seqIndex]) {
103 vars.seqIndex++;
104 action = String.Format("SPLIT (new seqIndex = {0})", vars.seqIndex);
105 } else {
106 action = String.Format("NO SPLIT (seqIndex = {0}, {1} expected)",
107 vars.seqIndex, vars.waypoints[vars.seqIndex]);
108 }
109 } else {
110 action = String.Format("NO SPLIT (seqIndex = {0}, end of waypoint sequence)", vars.seqIndex);
111 } 112 }
112 113
113 print(String.Format("Level changed from {0} to {1}: {2}", vars.prevLevel, current.level, action));
114
115 if (settings["norepeats"]) { 114 if (settings["norepeats"]) {
116 if (vars.prev.Contains(current.level)) { 115 if (vars.prev.Contains(current.level)) {
117 action = "NO SPLIT"; 116 action = "NO SPLIT";
118 } 117 }
119 vars.prev.Add(current.level); 118 vars.prev.Add(current.level);
120 } 119 }
120
121 print(String.Format("Level changed from {0} to {1}: {2}", vars.prevLevel, current.level, action));
121 } 122 }
122 123
123 vars.prevLevel = current.level; 124 vars.prevLevel = current.level;
@@ -130,9 +131,11 @@ split {
130 131
131 // Final split of the game: 132 // Final split of the game:
132 // Split after being in one of the ending cutscenes for 1.1 seconds. 133 // Split after being in one of the ending cutscenes for 1.1 seconds.
133 if ((current.level == 99 || current.level == 103 || current.level == 104) 134 if (settings["raymarchitecture"]
135 && (current.level == 99 || current.level == 103 || current.level == 104)
134 && vars.stopwatch != null 136 && vars.stopwatch != null
135 && vars.stopwatch.ElapsedMilliseconds >= 1100) { 137 && vars.stopwatch.ElapsedMilliseconds >= 1100) {
138 print("SPLIT on Raymarchitecture");
136 vars.stopwatch = null; 139 vars.stopwatch = null;
137 return true; 140 return true;
138 } 141 }