Huh. Dude deleted his post just when I resolved, if nobody else stepped up to explain the problem with "both" mode, I'd do it myself.
Guess Hobb won't see then if I were to explain that the reason you see only a single letter on screen in "both" mode is because Narrator::say and therefore also Talker::say only takes one buffer pointer, which will contain the text to display or a bunch of numbers to play the audio for, and that between SCI numbers being 16-bit and the first one being the module/script number, that means doing something like "look at room" will put something like 110 there, which is n in ASCII. If your script number were high enough you'd get two characters.
(if (& gMessageType $0001) (self startText: buffer))
(if (& gMessageType $0002) (self startAudio: buffer))
See? So in "both" mode, buffer will contain audio key numbers instead of text, which is then passed to startText.
First part of my fix was to take this line in Talker.sc, (method (say buffer theCaller), and replace it with (method (say theText theAudio whoCares). That way those two lines can have their own data simultaneously.
Then of course you gotta edit Messager::saynext. I would explain why that part messes up but I'm not sure if Hobb is still around to read it.