Did you know you can create images in code? It is a technique called Scalable Vector Graphics (SVG) and is XML, just like Quest, and gets interpreted by the browser, just like Quest.
There is a tutorial on SVG here (I would advise getting familiar with XML first): https://www.w3schools.com/graphics/svg_intro.asp
This is the example on the first page; it draws a green circle.
<svg width="100" height="100">
<circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" />
</svg>
To convert that to Quest, just put backslashes before each double quote, and print it out!
msg("<svg width=\"100\" height=\"100\"><circle cx=\"50\" cy=\"50\" r=\"40\" stroke=\"green\" stroke-width=\"4\" fill=\"yellow\" /></svg>")
For more complex drawings, building up a string is a good idea:
// step 1, the svg element defines the drawing board
s = "<svg width=\"200\" height=\"100\">"
// step 2, draw a circle
s = s + "<circle cx=\"50\" cy=\"50\" r=\"40\" stroke=\"green\" stroke-width=\"4\" fill=\"yellow\" />"
// step 3 draw a transparent rectangle
s = s + "<rect x=\"50\" y=\"20\" width=\"150\" height=\"150\" style=\"fill:blue;stroke:pink;stroke-width:5 fill-opacity:0.3;stroke-opacity:0.9\" />"
// step 4 end the svg element
s = s + "</svg>"
// step 5 print it out
msg (s)
For really complicated shapes, you might want to look at using InkScape, a drawing program that will produce output in SVG format (disclaimer: while I have used InkScape, but never tried to convert the output to Quest).
You can even capture mouse events to make the image interactive. Here is the start of a strategy game, go to the Stars & Planets section, to see a galactic map. Click on the side arrows to move and the + and - to zoom in and out.
https://textadventures.co.uk/games/view/ohqyc_lfuuiqjsuwmvbkbw/star-empire-v0-1