Why bother downloading the whole game?
(Print "Stand at the edge of this message." #font 0 #dispose #time 5)
If it's Ego or other another view shouldn't matter. The point is that they
aren't stopUpd:-ed, and thus are redrawn every frame even if "nothing" has changed¹. They stop being redrawn every frame while a blocking window is on screen
despite being in their
startUpd state, because the
cast isn't being redrawn during the inner loop driving the print dialog. The window being drawn knocks off part of any sprites within so many pixels from its sides, and since the
cast isn't redrawn until the print's loop ends, the gaps stay on screen². Then we're back in the game's loop, which
does redraw the
cast.
If you
#dispose a
Print, that inner loop is skipped entirely. It's not
Print that handles closing the window again when those five seconds in my example are over, that's handled elsewhere through a pointer and time limit
left behind by
Print.
But note that even making the window non-blocking like that
does not properly solve the issue this thread started with, since there's a single frame wherein the views underneath
do have the gap.
Does calling (ego startUpd:) just before the printing the message or adding it to the room's ego init make any difference? I realize you mentioned the ego's update bit should already be set, so probably not.
Blocking:
Frame 1: draw the cast, run room scripts, catch a said or whatever.
(ego startUpd:),
no change since it's already in that state.
(Print "testing!"), open a window, cut Ego in two, enter dialog processing loop waiting for a key, exit loop, close window, restore underbits.
Frame ...whenever you pressed enter: draw the cast, run room scripts...
With
#dispose:
Frame 1: draw the cast, run room scripts, catch a said or whatever.
(ego startUpd:), no change since it's already in that state.
(Print "testing!" #dispose #timer 5), open a window, cut Ego in two, immediately exit the
Print function we done here.
Frame 2: draw the cast, which fixes Ego's back problems. The window's shape is cut into the priority screen so it all works out.
Frame whenever: notice there's a modeless dialog timer that just ran out, close that window, restore its underbits.
¹: On a low detail setting one might
stopUpd a waterfall, save some effort.
²: A talker portrait or DCIcon is not part of the cast, they are animated by the talker class and print routine respectively.