Skip to content

physenv registers as Compatible: true under VPhysics Jolt while all its detours fail #196

Description

@Sycatle

Summary

On a Linux x86-64 dedicated server running VPhysics Jolt instead of the stock solver, every detour the physenv module installs fails to resolve — yet the module still registers as Enabled: true, Compatible: true.

The failures themselves are expected: physenv hooks IVP internals, and under Jolt those symbols do not exist. The reportable part is the status line, which tells an operator the module is fine when it has hooked nothing.

Filing this here rather than on VPhysics-Jolt since you maintain both, and the fix — if any — belongs on the HolyLib side.

Environment

GMod branch x86-64, build 260722
OS Linux, dedicated server
HolyLib CI build of 2026-07-18 (Workflow: 5607, branch main), reported in-game as V0.9 DEV
Physics VPhysics-Jolt 0.23, vphysics_jolt_gmod_dedicated_linux64 (this org's fork)

What happens

19 lines at boot, none of which prevent startup:

holylib: Failed to get function CPhysicsEnvironment::CPhysicsEnvironment!
holylib: Failed to get function CPhysicsEnvironment::~CPhysicsEnvironment!
holylib: Failed to get function CPhysicsEnvironment::CreatePolyObject!
holylib: Failed to get function CPhysicsEnvironment::CreatePolyObjectStatic!
holylib: Failed to get function CPhysicsEnvironment::CreateSphereObject!
holylib: Failed to get function CPhysicsEnvironment::DestroyObject!
holylib: Failed to get function CPhysicsEnvironment::Restore!
holylib: Failed to get function CPhysicsEnvironment::TransferObject!
holylib: Failed to get function CPhysicsEnvironment::UnserializeObjectFromBuffer!
holylib: Failed to get function IVP_Event_Manager_Standard::simulate_time_events!
holylib: Failed to get function IVP_Mindist::do_impact!
holylib: Failed to get function IVP_Mindist::simulate_time_event!
holylib: Failed to get function IVP_Mindist::update_exact_mindist_events!
holylib: Failed to get function IVP_Mindist_Base::get_objects!
holylib: Failed to get function IVP_Mindist_Manager::recheck_ov_element!
holylib: Failed to get function IVP_Mindist_Minimize_Solver::p_minimize_PK!
holylib: Failed to get function IVP_Mindist_Minimize_Solver::p_minimize_PP!
holylib: Failed to get function IVP_OV_Element::add_oo_collision!
holylib: Failed to get function IVP_OV_Element::remove_oo_collision!

Immediately followed by:

holylib: Registered module physenv  (26 Enabled: true,  Compatible: true,  MultiLua: true )

Controlled

Same server, same HolyLib binary, only the physics module swapped:

vphysics.so CPhysicsEnvironment::* failures IVP_* failures
stock (IVP) 0 0
VPhysics Jolt 0.23 9 10

Measured across boots by comparing either side of a known offset in garrysmod/console.log, so previous runs could not contribute.

Expected

Compatible: false when the detours fail, the way the ten genuinely incompatible modules already report on this branch. Failing that, any signal that survives past the boot scroll — the current status line is the thing an operator checks, and it is the one that is wrong.

Whether physenv could be ported to Jolt is a separate and much larger question; I am not asking for that here. HolyLib:OnPhysicsLag guards a pathology specific to IVP's event loop, which Jolt's fixed-substep stepping does not have, so the feature may simply not be meaningful there.

Workaround

-holylib_enable_physenv 0 as a launch parameter. Worth noting for anyone finding this issue: holylib_enable_physenv 0 in server.cfg does not work — the plugin loads before the cfgs run, and the module registers and fails anyway.

Happy to help

I can run any diagnostic build or extra logging on this setup — the swap between solvers is scripted and takes about a minute either way.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions