However, working on a tool that (may) allow procedural circles.
Hokay... done, I think.
It works much the same as DrawPoly(), but requires a little more work to use. Whereas DrawPoly() required the points to be setup before running the level, this can calculate them at runtime, though it can only produce regular polygons.
To use it, call RegPolyTemplate(). The paramenters are fairly self-explanatory, but...
name --> The name of the template.
numsides --> The number of sides
radius --> The distance from the center of the shape to the top corner. This should be the same for every corner, but rounding errors may creep in.
To draw a shape, call DrawRegPolyTemplate().
name --> The name of the template.
r,g,b,a --> Colour and alpha values of the shape.
thick --> line thickness
centerX, centerY --> The coordinates of the shape's center.
To change a template, simply call RegPolyTemplate() and supply the name of the template to edit and what you want to change it to. To delete a template run polyplates[name] = nil
I think that's it. More sides to a shape will make it seem rounder, and should only be processor-heavy when running RegPolyTemplate(), and even then if you want a massively high-sided shape.