@Simon it looks like you're missing a loop or ELSE command, so the program runs beginning to end without stopping regardless of whether you are pressing up or not. One solution is to, at the end of line 8, add: ELSE END. The second solution is to, on line 9 write: GOTO @PART1.
A couple of fixes: before the IF B==#A lines write another line that is IF B==#A THEN GOSUB @FADE; or write GOSUB @FADE at the start of @BEGIN and @INSTRUCTION parts of the code.
Is the only option that fades the SET=25 option? If so, it's probably because the other two options have a GOTO command that moves to a different section of code before it gets to the GOSUB @FADE.
So I thought I might try building up my own thing that closely resembles your setup, testing the limits of some of the functions, thinking that I'd stumble across an answer, but I never encountered a problem. So then I tried just copying what you have word for word, and I still don't get a problem. No type mismatch. No error.
That could mean setting smaller goals, working on a different project, or even just setting aside programming to find cartharsis in other things. I think it's just about taking care of the mind.
I think a lot of motivation has to do with completion/success. If you're coding a game/learning to code, and you feel like you're getting nowhere, it can be easy to lose motivation. To get around this, I think sometimes it is as easy as finding something else to complete/accomplish.
Looking at this again, I feel like the use of "SPEED" in the autotext is a bit unintuitive. Not only does a higher number result in a lower speed, but attaching the calculation to the length of the text means each line would have to be tested individually to figure out the best setting.
Cool stuff! My only complaint is that the text color and text box color when talking with the trader are too similar, so it was challenging to read. Other than that pretty cool!