If anyone's looking for a big project, there are a number of things I would like to have done but didn't get around to. I haven't worked out details for any of these...
Implement a proper hash function instead of that stupid *7 /10000 thing. I wanted one by which consecutive names produce consecutive hashes so that things like d0, d1, d2, etc. could be checked as a range rather than individually. From a few quick tests,
FNV seems to work, but I never really made certain. It would need to be
adapted to 17 bits, of course.
Add a jump instruction, i.e. a number that would make __Tango_Process() jump to a specific index rather than advancing by 1. This would simplfy function processing. Currently, a function is overwritten with filler after it runs, and __Tango_Process() just iterates over it. If instead there were a run function instruction followed by a jump past the end, that would be unnecessary. This could also eliminate the need to reserve space for text functions and remove the length limit on @string(). You'd just append the inserted text to the end of the string after the '\0', jump to and print from there, then jump back to just after the function.
Macros. If, for instance, you want to use this a lot:
@set(@speed 10)...@delay(30)@set(@speed @default)
You could define a macro @DOTS that would expand to that so you don't have to type it all out every time. I'm not sure how arguments should be handled...
An @include() function, which would insert a message at that point in the text. This is one way macros might be implemented, and it would itself make a workable substitute in the meantime. Making this work properly would require the jump instruction, as the included message would have to be added after the loaded text. Handling it during loading wouldn't allow a message to be included conditionally or in a loop.
Allow @{ } for more complex bits of code. For instance, instead of
@if(@eq(@choice 1) @goto(47))@else(@goto(48))
you could write
@{ if choice==1 { goto(47); } else { goto(48); }}
That would mean doing much more sophisticated parsing in the loading functions, though. And I
really haven't thought through the specifics here.