Is II counter? or do you want to count just 200 times?
If so, please try II>199(or II>=200) instead of II>200.
I guess that initial value in II is zero.
I'm sorry for lack of my previous explanations. As everyone has already said, GOTO and GOSUB are completely different and the GOSUB without RETURN wastes stacks.
I recommend you not to use deep nest subroutine call. A subroutine should be called after another subroutine has returned over. SmileBASIC's stack must not be so deep.
Actually, I'm looking forward to the completion of this game. I'd like to support you as much as I could in order to fix the problem.
Is it possible to show us line 349 of your code?
The size of available area for scroll is nine times as large as previous one instead. (128x128 to 384x384)
And new one is a little bit customizable. "MD7B" command has three arguments. 1st and 2nd arguments are coordinates on the scroll map (0 to 383) and 3rd argument is direction angle (0 to 359).
Choppiness and distortion will be clarified on the new algorithm, because it has only sixteen directions. (previous one had forty-eight directions) I'm looking for methods to reduce choppiness and distortion.
Please check the following points.
Don't you escape from a subroutine without "RETURN" after you have jumped to the subroutine with "GOSUB"?
Isn't the nest of recursive function call too deep?