... hm.
"local maxops = 2000;"
What is an operation? Is it any command? If so, how can this possibly be enforced? There is
no strict unit of meaurement, unless you actually want to claim that it can only perform 2000 unique commands? (For example, if you count "if" statements, my Pinball Lua bot runs at about ~50-300 operations per frame. Consider it only does immediate hitbox checking with a tiny bit of prediction.)
What is stopping a bot from counting, say, progressing a frame as an operation, meaning it can run 33sec ahead of the rest?
Or even just flat-out ignoring the maximum operations counter?
...
My specific problem with allowing look-ahead is that it turns from a game of "be smarter than the opponent" to "have decent intelligence and make sure no gameover is coming in the next
x frames."
To demonstrate this point, Bomberman. A poorly written bot would wait several seconds and see if it is killed within that time period, and if it is, try moving somewhere else and then wait more. Repeat ad nauseam.
Compare to a bot that cannot implement seeing into the future, where it would actually have to figure out if it was in immediate danger.
Case in point, I added "operations = operations + 1;" after almost every line of code in my script. "if" statements with mulitple conditions got more assigned depending on how many, and multiple if-then-then statements were cumulative (e.g. 1, 1 + 3, 1 + 3 + 2, etc).
You need to choose a value wisely, or else you might as well be choking complex bots or just simply disregarding it.