it kinda breaks the immersion with that "break" in there.
If you're referring to the "break" in "DESCEND AND MAINTAIN FLIGHT LEVEL [0..9] [0..9] break [0..9]", you can omit that. For me at least, recognition works just as well without it.
If you need the flight level as a numeric value, you can use this:
Set Text [CMD] to '{CMD}'
Set small int (condition) [FlightLevel] value to the converted value of {TXTNUM:CMD}
are you telling me something?
I'll check out the derived commands section too for something I might have missed.
The point is that many permutations will eventually bog down recognition to the point it becomes unusable.
I checked, the command count totals 1100 for just those two. Separating the callsign and the instruction does lower the amount of combinations significantly, as you'd expect.
You can experiment, but eventually recognition performance will degrade as the amount of phrases it needs to process increases. Every 3 digit phrase adds 1000 permutations, every 2 digit phrase adds 100.
In addition, you'll need to pause between phrases(E.G. "SOUTHWEST 11" pause "CLIMB AND MAINTAIN FLIGHT LEVEL 1 1 break 1" pause "DIRECT TO SAX"), which is better than having to do so every digit, but still unnatural for an ATC.
yxpoh, as an aside, and as you can see in the OP, there's no need to specify all the numbers in a a consecutive sequence; You can use "[0..9]" instead, in this case.
You can also use these ranges as part of a permutation, as long as they're in brackets: "SOUTHWEST [0..8;Niner] [0..8;Niner]"
In which case you need to use
Set Text [CMD] to '{CMD}'
Set Text [CMD] to '{TXTREPLACE:CMD:niner:9}'
Set small int (condition) [FlightLevel] value to the converted value of {TXTNUM:CMD}
To get the numeric value.
Note that "{TXTREPLACE:}" is deprecated, so if you want to play it by the book that'd be
Set Text [CMD] to '{CMD}'
Set Text [niner] to 'niner'
Set Text [9] to '9'
Set Text [CMD] to '{TXTREPLACEVAR:CMD:niner:9}'
Set small int (condition) [TargetAltitude] value to the converted value of {TXTNUM:CMD}