Hm, looks like I'm going to have to leave the alpha blending code the way it is in 1.4.1. It turns out Sphere 1.6 handles the BLEND mode like this:
inline void blendRGBA(RGBA& dest, RGBA src)
{
Blend3(dest, src, src.alpha);
dest.alpha = 255;
}
Which appears to be impossible to do in hardware--or at least with the blend modes Allegro provides. In most real-world cases the full RGBA blending works fine, for example the textboxes in Specs and... whatever the startup game does.
For what it's worth, the closest I could come to Sphere's actual behavior is this:
al_set_separate_blender(ALLEGRO_ADD, ALLEGRO_ALPHA, ALLEGRO_INVERSE_ALPHA,
ALLEGRO_ADD, ALLEGRO_ZERO, ALLEGRO_ONE);
This leaves the destination's alpha channel alone. That fixed agrapher, but broke everything else; fully-transparent surfaces stay fully transparent regardless of what you render. Not particularly useful.