For Grammer 3, yes, there can definitely be more rules and whatnot. It will have the ability to have a customisable command set, too. That way if there is need for more advanced commands, like calculus stuff, or really advanced GUI routines, users can install the given package and programs that use it will run properly.
The new commands... there are good number of them that may not be documented yet :[ Here are a few I can come up with for The_Warlord (modified a little)
-You can draw text to different buffers and particles
-You can use If...Then...Else...End
-You can display large numbers (32-bit) and signed numbers (signed requires setting a specific mode with Fix)
-You can do some really crazy new things with the error handler like create your own commands (if you try to run an unsupported command, an error is thrown that can be redirected to an error handler and you can use some commands to parse arguments of the token). This functions by using the ']' token to parse an argument at a given address and using the '?' token since it points to the next byte that would have been read if the error hadn't occured. So basically, ']?' reads the next argument (and you can do this several times for several arguments).
-You can use functions like prgm(ptr,Arg1,Arg2,... This uses the same ']?' syntax for passing arguments. I really keep forgetting about this snazzy tool.
-There is a pretty nice Menu( command that returns the number of the selected item. It only uses the fixed width font, though, but it can draw to pixel coordinates. Inputs are Menu(y,x,width,"Header","Item0","Item1"...
-Fix has more fine-tuned control, such as using the 'or ',' and ', and ' xor ' tokens to perform bitwise operations.
-There is 4-level grayscale and 3-level grayscale which can be controlled using 12 different saturation modes.
-There is rectangle clipping, now
-Input looks gorgeous now. Seriously. It starts the input after the last drawn text and allows you to append text to the end of your input. For example, you could do:
Code:
Text(0,0,"func(
Input ")→A
And then anything you input will be wrapped between the last text drawn and the ")" token. Also, the input is highlighted.
-You can now fine tune the particle effects. Particles also run even faster. With 2048 particles on the screen, you can now manage about 5.66FPS compared to 3.60FPS before. (You already knew this)
-Sprites and circles have some arguments that can be omitted, now
-Text( has a handful of new variations to control cursor movement and whatnot. For example, if you want to add 6 to the last Y coordinate and set the x coordinate to 0 (essentially moving down another line):
Code:
Text(+6,0,"Text
You can also just set the coordinates by omitting a third argument:
Code:
Text(0,0
And you can get the X and Y coordinate returned in two registers using just Text(:
Code:
Text(→XY
Also, if you do something like →XY, where you are using two pointer variables, the value of theta' gets stored to the first p-var and the normal result get stored to the second. This is useful for some 32-bit math.