I've uploaded (and temporarily attached here) a demo game of this solution. It display/hides a dozen ego images, created by using font resources. No cursor flicker at all. Heap impact is small, it only costs roughly 2000 bytes to display a dozen ego images.
I consider this solution to be an improvement on the 'dropped view' technique, but with the added functionality of being able to remove the view from the scene & restore the original background pixels.
It's a bit slow in drawing, noticeable when you attempt to do an animation loop in a doit() method - the image itself flickers pretty badly. If you don't need 'view-like' animation (walking, etc), and more of just say 'picking up and putting down' inventory objects or something similar, this should work just fine. The other limitation is that currently the images are always displayed in the background.
If this proves to be useful, I may create a utility that will convert a view into font resource appropriate for leveraging this solution. This by far was the most painful part of this solution, having to split a view out by color. There is a workaround that I was able to find: when you copy/paste a view into a font resource it will only preserve the black pixels. So you can modify your view, making the target color for the font black, copy/paste, then move on to the next color, removing all the previously black pixels from the view.
I created a new class called TextView to handle all the dirty work. To use it, include it in your room script, create an instance...
(instance ego1 of TextView
(properties
xPos 40
yPos 40
fontNum 10
silhouetteChar "H"
silhouetteColor clBLACK
frame1char "A" frame1color clBLACK
frame2char "B" frame2color clSILVER
frame3char "C" frame3color clGREY
frame4char "D" frame4color clRED
frame5char "E" frame5color clMAROON
frame6char "F" frame6color clNAVY
frame7char "G" frame7color clBLUE
)
)
Then just call the show/hide methods in your room script:
(if(Said('hello'))
(ego1:show)
)
(if(Said('goodbye'))
(ego1:hide)
)