about summary refs log tree commit diff stats
path: root/Lingo 2.asl
diff options
context:
space:
mode:
Diffstat (limited to 'Lingo 2.asl')
-rw-r--r--Lingo 2.asl124
1 files changed, 118 insertions, 6 deletions
diff --git a/Lingo 2.asl b/Lingo 2.asl index 2b8be1a..6a9e22a 100644 --- a/Lingo 2.asl +++ b/Lingo 2.asl
@@ -33,6 +33,48 @@ startup
33 vars.visitedMaps = new HashSet<string>(); 33 vars.visitedMaps = new HashSet<string>();
34 vars.collectedKeys = new HashSet<string>(); 34 vars.collectedKeys = new HashSet<string>();
35 vars.latestKeyKey = null; 35 vars.latestKeyKey = null;
36 vars.importantPanels = new HashSet<string>();
37 vars.importantMultiPanels = new HashSet<string>();
38 vars.importantMaps = new HashSet<string>();
39 vars.importantMultiMaps = new HashSet<string>();
40 vars.importantKeys = new HashSet<string>();
41 vars.importantCollectibles = new HashSet<string>();
42
43 vars.configFiles = null;
44 vars.settings = settings;
45 var findConfigFiles = (Action<string>)((string folder) => {
46 var files = new List<string>();
47 if (folder != null)
48 {
49 vars.log("Searching for config files in '" + folder + "'");
50 files.AddRange(System.IO.Directory.GetFiles(folder, "*.lingo2_config"));
51 files.AddRange(System.IO.Directory.GetFiles(folder, "*.lingo2_config.txt"));
52 files.AddRange(System.IO.Directory.GetFiles(folder, "*.lingo2_conf"));
53 files.AddRange(System.IO.Directory.GetFiles(folder, "*.lingo2_confi"));
54 vars.log("Found " + files.Count + " config files");
55 }
56
57 // Only add the parent setting the first time we call this function
58 if (vars.configFiles == null)
59 {
60 vars.configFiles = new Dictionary<string, string>();
61 vars.settings.Add("configs", (files.Count > 0), "Split based on configuration file:");
62 }
63
64 foreach (var file in files)
65 {
66 string fileName = file.Split('\\').Last();
67 if (vars.configFiles.ContainsKey(fileName)) continue;
68 vars.configFiles[fileName] = file;
69 vars.settings.Add(fileName, false, null, "configs");
70 }
71 });
72 // Search for config files relative to LiveSplit.exe
73 findConfigFiles(Directory.GetCurrentDirectory());
74 // Search for config files relative to the current layout
75 findConfigFiles(System.IO.Path.GetDirectoryName(timer.Layout.FilePath));
76 // Search for config files relative to the current splits
77 findConfigFiles(System.IO.Path.GetDirectoryName(timer.Run.FilePath));
36 78
37 vars.log("Autosplitter loaded"); 79 vars.log("Autosplitter loaded");
38} 80}
@@ -73,6 +115,71 @@ init
73 vars.lastPanelPath = new StringWatcher(ptr + 135, 101); 115 vars.lastPanelPath = new StringWatcher(ptr + 135, 101);
74 116
75 vars.log(String.Format("Magic autosplitter array: {0}", ptr.ToString("X"))); 117 vars.log(String.Format("Magic autosplitter array: {0}", ptr.ToString("X")));
118
119 if (settings["configs"])
120 {
121 string[] lines = {""};
122 foreach (var configFile in vars.configFiles.Keys)
123 {
124 if (settings[configFile])
125 {
126 // Full path is saved in the dictionary.
127 lines = System.IO.File.ReadAllLines(vars.configFiles[configFile]);
128 vars.log("Selected config file: " + configFile);
129 break;
130 }
131 }
132 if (lines.Length == 0)
133 {
134 vars.log("Config file empty or no config file selected!");
135 }
136 else
137 {
138 string mode = "";
139 for (int i=0; i<lines.Length; i++)
140 {
141 var line = lines[i].Split('#')[0]; // Strip comments
142 line = line.Trim(); // Strip whitespace
143 if (line == "")
144 {
145 // No reason to process empty lines
146 continue;
147 }
148
149 if (line.Contains(':'))
150 {
151 var parts = line.Split(':');
152 mode = parts[0];
153 continue;
154 }
155
156 if (mode == "panels")
157 {
158 vars.importantPanels.Add(line);
159 }
160 else if (mode == "multipanels")
161 {
162 vars.importantMultiPanels.Add(line);
163 }
164 else if (mode == "maps")
165 {
166 vars.importantMaps.Add(line);
167 }
168 else if (mode == "multimaps")
169 {
170 vars.importantMultiMaps.Add(line);
171 }
172 else if (mode == "keys")
173 {
174 vars.importantKeys.Add(line);
175 }
176 else if (mode == "collectibles")
177 {
178 vars.importantCollectibles.Add(line);
179 }
180 }
181 }
182 }
76} 183}
77 184
78update 185update
@@ -130,12 +237,12 @@ split
130 237
131 if (vars.lastPanel != vars.prevPanel) 238 if (vars.lastPanel != vars.prevPanel)
132 { 239 {
133 if (settings["panels"]) 240 if (settings["panels"] || vars.importantPanels.Contains(vars.lastPanel) || vars.importantMultiPanels.Contains(vars.lastPanel))
134 { 241 {
135 should_split = true; 242 should_split = true;
136 } 243 }
137 244
138 if (settings["panels_first"]) 245 if (settings["panels_first"] || vars.importantPanels.Contains(vars.lastPanel))
139 { 246 {
140 if (vars.solvedPanels.Contains(vars.lastPanel)) 247 if (vars.solvedPanels.Contains(vars.lastPanel))
141 { 248 {
@@ -157,12 +264,12 @@ split
157 } 264 }
158 else if (vars.currentMap.Current != vars.prevMap) 265 else if (vars.currentMap.Current != vars.prevMap)
159 { 266 {
160 if (settings["maps"]) 267 if (settings["maps"] || vars.importantMaps.Contains(vars.currentMap.Current) || vars.importantMultiMaps.Contains(vars.currentMap.Current))
161 { 268 {
162 should_split = true; 269 should_split = true;
163 } 270 }
164 271
165 if (settings["maps_first"]) 272 if (settings["maps_first"] || vars.importantMaps.Contains(vars.currentMap.Current))
166 { 273 {
167 if (vars.visitedMaps.Contains(vars.currentMap.Current)) 274 if (vars.visitedMaps.Contains(vars.currentMap.Current))
168 { 275 {
@@ -189,7 +296,7 @@ split
189 } 296 }
190 else if (vars.latestKeyKey != null && !vars.collectedKeys.Contains(vars.latestKeyKey)) 297 else if (vars.latestKeyKey != null && !vars.collectedKeys.Contains(vars.latestKeyKey))
191 { 298 {
192 if (settings["keys"]) 299 if (settings["keys"] || vars.importantKeys.Contains(vars.latestKeyKey))
193 { 300 {
194 should_split = true; 301 should_split = true;
195 vars.log("Split on collected key: " + vars.latestKeyKey); 302 vars.log("Split on collected key: " + vars.latestKeyKey);
@@ -199,7 +306,12 @@ split
199 } 306 }
200 else if (vars.latestCollectible.Current != vars.latestCollectible.Old) 307 else if (vars.latestCollectible.Current != vars.latestCollectible.Old)
201 { 308 {
202 if (vars.latestCollectible.Current.EndsWith("Painting")) 309 if (vars.importantCollectibles.Contains(vars.latestCollectible.Current))
310 {
311 should_split = true;
312 vars.log("Split on configured collectible: " + vars.latestCollectible.Current);
313 }
314 else if (vars.latestCollectible.Current.EndsWith("Painting"))
203 { 315 {
204 if (settings["paintings"]) 316 if (settings["paintings"])
205 { 317 {