It has just the basic triangle raster (done by iterating trough aabb and checking the barycentric coords, scanline would be better and faster but harder to code) with color interpolation and texture mapping (perspective correct one.. I think.. I don't remember now), some crappy shading (I don't remember which kind of shading and it was a little rushed too) and Z buffer and winding based culling.

It has no alpha, but alpha is no magic either, you just need to define the formula (or few) for computing the resulting pixel color based on alpha and destination current color instead of just overwriting it with the new one.

Of course then you get the usual issues of drawing back to front and so on, like in real 3D.

And I'd advise against doing it, just use a 3D API instead unless you want to learn for the sake of knowing.