Source Physics is Source's VPhysics default implementation which uses IVP/Havok engine.
As there are no sources, it was partially restored from the assembly by https://github.com/nillerusr,
https://github.com/er2off, https://github.com/steadyfield, https://github.com/exstrim401,
https://github.com/HappyDOGE, https://github.com/RaphaelIT7, https://github.com/PiMoNFeeD and others.
VPhysics is mostly feature complete!
Below is a feature table of Volt vs VPhysics and the Bullet VPhysics project from VPhysics Jolt.
| Feature | VPhysics | Volt (VPhysics Jolt) | Bullet VPhysics |
|---|---|---|---|
| Constraints (except Pulleys) | βοΈ | βοΈ | βοΈ |
| Pulleys | βοΈ | βοΈ | β |
| Breakable constraints | βοΈ | β | β |
| Motors (Motion Controllers) | βοΈ | βοΈ | βοΈ |
| Motors (Constraint) | βοΈ | βοΈ | β |
| Ragdolls | βοΈ | βοΈ | βοΈ |
| Triggers | βοΈ | βοΈ | β |
| Object touch callbacks | βοΈ | βοΈ | β |
| Prop damage/breaking | βοΈ | βοΈ | β |
| Fluid events | βοΈ | βοΈ | β |
| Prop splashing effects | βοΈ | βοΈ | β |
| Wheeled Vehicles | βοΈ | βοΈ | βοΈ |
| Raycast Vehicles (ie. Airboat) | βοΈ | β | γ°οΈ (janky) |
| NPCs/Doors (Shadow Controllers) | βοΈ | βοΈ | βοΈ |
| Save/Restore Support | βοΈ | βοΈ | β |
| Portal Support | βοΈ | βοΈ | β |
| Game per-object collide callback support eg. no-collide |
βοΈ | βοΈ | β |
| Crash-resistant solver | β | βοΈ | (no data) |
| Supports thousands of objects without lag | β | βοΈ | β |
| Multithreaded | β | βοΈ | βοΈ (partially) |
| Proper player controller | βοΈ | βοΈ | βοΈ (partially) |
VPhysics is not without its flaws, however. See the issue tracker for bugs that are known.
There are definitely going to be bugs that we don't know about or haven't encountered, or different quirks across engine branches.
The VPhysics code is provided as-is, it is up to you to build it for your SDK, etc.
VPhysics should build fine against Source SDK 2013 and Alien Swarm SDK on a MSVC, Clang or GCC compiler with at least C++17 support.
If you are building directly against the public SDK 2013 and Alien Swarm SDKs, you will need to do minor work to memoverride.cpp to make it compatible with the newer compilers and newer Windows SDKs.