/drawdot can be given a <size>, which is it's radius, and draws a filled circle

You can do the same with /drawrect -ef <color> 1 <x> <y> <radius * 2> <radius * 2>

/drawline also has a <size> which is treated as a diameter, which draws a thick rounded line.

All these routines are inconsistent of one another. Take the below image:

On the left, is native /draw commands. On the right, is /drawdot and /drawline re-done in mSL to call /drawrect -ef instead, so all 3 use the same exact method for forming the desired output. The right is consistent, what you'd expect to get, the left has missing pixels in the floodfill (drawdot) and bleed over with /drawline.

ALL non-filled circles are /drawrect -ef, like the green circles outline, and the outline of the endpoints of the line drawn, showing the areas expected to be within.

NOTE: For "dots" I use a <size> value of 9 and for "lines" I use a <size> value of 18. You can use any size and see the effect, just remember the <size> is by radius for /drawdot, and the <size> is in diameter (radius * 2) for /drawline if you want to maintain a comparison of equal sized dots and thick lines.

Just for giggles: here's my source for the "mSL" variants for drawing. They're not pure drop-in replacements, just quickly thrown together concepts to to build a visual of what you get vs what you should get if /draw commands were consistent..

;=== dot @window <color> <size> <x> <y>
alias dot { drawrect -nef $1-2 1 $calc($4 - $3) $calc($5 - $3) $calc($3 * 2) $calc($3 * 2) }
;=== /bresenham @Window <color> <size> <x1> <y1> <x2> <y2>
alias bresenham {
var %m = $calc(2 * ($7 - $5)) , %e = $calc(%m - ($6 - $4))
;=== Sort! (make sure to start from left-to-right, AKA lowest x to highest x)
if ($6 < $4) { tokenize 32 $1-3 $6-7 $4-5 }
var %x = $4 , %y = $5 , %radius = $3 / 2
while (%x <= $6) {
drawrect -nef $1 $2 1 $calc(%x - %radius) $calc(%y - %radius) $3 $3
inc %e %m
if (%e >= 0) {
inc %y
var %e = $calc(%e - 2 * ($6 - $4))
}
inc %x
}
}