I second Null1024's demand for 2 points sprites scaled support.
SGL has the slPutSprite function, which allows the usage of the current matrix to know where the position is and scale it.
It displays a 2 point sprite (I don't know if there is a better function than slPutSprite in SGL).
You only need to change one line in the current jo_sprite_draw to make it work, with maybe some small corrections to be made.
But I would suggest removing a couple of lines to speed things up might be nice since you are just using the current projection matrix and as it is you need the centered_style_coordinates always at true.
I would recommand having High Speed Shrink always ON as well (HSSon after ECdis) as it speeds up the drawing at the cost of some precision, but since we are using 2 points sprites only to display things like rings or small bullets and other things like that, it doesn't matter that much if it's very precise.
void jo_sprite_draw(const int sprite_id, const jo_pos3D * const pos, const bool centered_style_coordinates)
{
#if JO_COMPILE_USING_SGL
FIXED sgl_pos[XYZS];
SPR_ATTR attr = SPR_ATTRIBUTE(0, No_Palet, No_Gouraud, CL32KRGB | ECdis, sprNoflip | FUNC_Sprite);
sgl_pos[2] = JO_MULT_BY_65536(pos->z);
sgl_pos[3] = __jo_sprite_attributes.fixed_scale;
if (centered_style_coordinates)
{
sgl_pos[0] = JO_MULT_BY_65536(pos->x);
sgl_pos[1] = JO_MULT_BY_65536(pos->y);
}
else
{
sgl_pos[0] = JO_MULT_BY_65536(pos->x - JO_TV_WIDTH_2 + JO_DIV_BY_2(__jo_sprite_def[sprite_id].width));
sgl_pos[1] = JO_MULT_BY_65536(pos->y - JO_TV_HEIGHT_2 + JO_DIV_BY_2(__jo_sprite_def[sprite_id].height));
}
__jo_set_sprite_attributes(&attr, sprite_id);
slPutSprite(sgl_pos, &attr, 0); //was slDispSprite(sgl_pos, &attr, 0);
#endif
}