We can't explain the universe, just describe it; and we don't know whether our theories are true, we just know they're not wrong. >Harald Lesch
- Arithmetic - addition, subtraction, multiplication, division
- Branching logic (if statements), loops (while loops)
- Expressions e.g. (foo * 3 + 14)
- Boolean operators (foo && bar)
- Local variables with block scope
- You can even call built-ins with expressions like spawn(TerranMarine, Player1, myMarineCount, MyLocation);
Oreo Triggers features all of this. Maybe you underestimate the power of the custom functions? A few comments on the less obvious ones. Most rely on knowing that sc checks all triggers every loop though: (Which is a given if you make triggers for sc*)
- loops: = just use "if" because sc does the loop
- expressions: The documentation doesn't say anything about it, but lets assume it doesn't work, then you need 3 operations (*, +, and whatever you use the expression for)
--> Comfort- Boolean: && = another condition, || = another trigger, but okay you got me with the other operators. Would have to use other functions for those: NOT: if then else
--> Higher abstraction- Scoped variables: Okay got me again, but I question the usefulness in the environment of a sc map project. Especially since whatever code you produce
has to use global variables because that's the only thing sc knows.
So there's 2 aspects I'd acknowledge LangUMS does a bit better. But both are not that revolutionary that you couldn't compare the two or that an update couldn't add to Oreo, if necessary.
*) unless, of course, when your goal is to let people make triggers that have no idea how sc's trigger engine works. That's what I included in the "error checking". You can be unaware of trigger order and some such.
Don't think because I said "in short" I want to sweep that under the rug. Quite the opposite, actually. If your trigger language is (becomes) that smart to know all of sc's quirks, oddities and mechanics it would indeed make a mappers life easier.
And maybe most importantly LangUMS code is sequential and lineariazable and prevents you from introducing race conditions. Why this is important is a Master's level course on programming so I'll spare you the details but it allows you to reason much more easily about what your code is doing unlike when working with the default parallel trigger machine.
Not exactly sure what you mean with this. Sc's engine checks triggers sequentially; there's never a problem with race condition because the triggers can access a dc variable, for example, only one after another.