Compiler for ChannelMathController

This is a thing humans do, trust me (also sorry for the low effort webpage haha, I overdrafted my willingness to do ui and css stuff this summer)

Supported operations: 3-12 of C operations as well as ~!. The compiler also currently supports the max, min, clamp and take functions

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 use 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

Comming soon: interop interface for mods to add their own interop functions

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

It will run every nth frame where n is the polling rate. If n=0, it will run on its update loop whenever a channel it uses has been changed.

Execution is branchless - compilation loops and if blocks is a long term unfinished goal