If you're wanting to speed it up, here's what I'd suggest:
Sub drwChar
(char$
, c
As _Unsigned Long, midX
, midY
, xScale
, yScale
, Rotation
) 'what ever the present color is set at RotoZoom2 midX, midY, I&, xScale, yScale, Rotation
This routine here is very unoptimized and inefficient. You're drawing each letter every time you need it and then freeing the image that you drew it on over and over repeatedly. I can see why you're going this route -- you've got multiple colors to deal with -- but here's my suggestion:
Make a single sprite array once for processing and keep it for the length of the program's running.
STATIC I(3,255) AS LONG
IF I(0,0) = 0 THEN
FOR colors = 0 to 3 '4 rows of letters for the 4 colors possible in the program
FOR characters = 0 to 255 '256 columns for the letters.
I(colors, characters) = _newimage(8, 16, 32)
... stuff
END IF
Now, instead of passing a char$, you'd be passing the ASCII value of your character, and instead of passing c, you'd simply be passing d. The whole IF d = 0 ELSEIF , ELSEIF, ELSEIF, ELSE block could be removed, and you'd get rid of the slow Mid$(s$(i), j, 1) and replace it with a simple ASC(s$(i),j). There'd be no redrawing of each letter over and over, and no need to constantly allocate and free memory in the program.
I haven't tried it, but from what I can tell looking over the code, I imagine that your bottleneck in performance is in the above routine, and I think this could fix it. ;)