Compiler for ChannelMathController

Check out the visual compiler by kyfex and I here

! Feel free to play around with it to get a feel for the syntax

Supported operations: 3-12 of C operations and ~!. Can use if/else and while.

Channels should be marked with @[channelname]. Start temporary variables with $. Supports max, min, clamp and take in addition to the interop functions below.

output:

so the way to interop functions these is to put any string arguments in <here> and numerical ones in (there)
A generic one would be methodKey<str1, str2>(int1, int2, int3). This should return an int.

print(args...) prints stuff to the auspicioushelper debug console. Open in modsettings.

reflectGet<marker identifier, pathfield1, pathfield2,...>(args...)
For use with Entity ID Markers - mark an entity then perform reflection.
returns the final element of the path rounded values for primatives, 0/1 if nonnull for objects

hasBerry<Levelname>(id) Checks if the given berry EntityID is collected (Levelname+id)

getFlag<flagname>() gets the specified flag
setFlag<flagname>(nval) sets the specified flag (nonzero is true)
getCounter<countername>()/ setCounter<countername>(nval) follow from above
getCoreMode()/ setCoreMode(nval) 1 is icy

getPlayer<param>() shortcut support for speedx, speedy, posx, posy; reflection for other paths (rounded)
killPlayer(choice) kills player if choice is nonzero

Mods can add their own interop functions that use the same syntax!

More information:

RunImmediately will run the code as soon as a channel is updated. It is very easy to cause an infinite loop with this.

Using __index__ in a reflectGet for the nth time will use the nth integer argument to try to index an enumerable