yes the hits on the models is approximated by spheres. Sphere/ray intersection is simple and fast. Each ship is a little sphere, and its the same size regardless of model. All models are much the same size but there is variation, and none are spherical. This means a head-on shot might look like it misses the model but actually there's a whole sphere of vulnerability.
Additionally, I picked the number at random and calibrated it by openning two browser windows and firing at ships from point blank range. I could easily have set it too generous.
This is the (C++, but still) code for sphere/ray intersection; the only intersection simpler is sphere/sphere:
https://github.com/williame/GlestNG/blob/master/3d.cpp#L271And here's the code for a triangle:
https://github.com/williame/GlestNG/blob/master/3d.cpp#L393There's a lot more ops like dot-product in the triangle code and its just massively slower. Additionally you have to test every triangle (until hit) in the model, and there are at least a few hundred of them.
The normal way you'd do things is to do sphere-sphere intersection of the ray/sphere, then if it hits its ray/sphere intersection properly, and then if that hits you check the individual triangles. There are actually people who use simplified mesh hierarchies and spatial indices before checking the full mesh too.
I say all this because I find it an interesting subject.
It would be interesting to imagine what this game *could* be, with some polish...