Sparky's is pretty darn fast.
For sparky's, the first thing to do is setup your object(s)
setupObjectDBC(<objNum>,<GroupNum>,<Collision Type>)
once that's done, In your loop, you cast rays in different directions and see if there is any collision with the object that you set up:
intersectObjectDBC(<obj/groupNum>,<GroupFlag>,<oldx>,<oldy>,<oldz>,<x>,<y>,<z>,<excludeObj>)
The oldx oldy oldz is the start of the ray position. The x y and z is the end of the ray. If an object falls between the start and end and it is set for detection, then a collision will be flagged.
That's basically it.
Enjoy your day.