Skip to content

4c - Ladders on XRI: climbing, top exit, IsClimbing - #434

Open
JaXt0r wants to merge 10 commits into
engine/hvr-replacementfrom
engine/hvr-replacement-4c
Open

JaXt0r wants to merge 10 commits into
engine/hvr-replacementfrom
engine/hvr-replacement-4c

Conversation

@JaXt0r

@JaXt0r JaXt0r commented Oct 23, 2026

Copy link
Copy Markdown
Contributor

Merge order: 1a → 1b → 1c → 1d → 2a → 2b → 3a → 3b → 3c → 4a → 4b → 4c, all into engine/hvr-replacement (no stacking). Each branch still contains the commits of the earlier steps, so after the earlier PR is merged the diff of this one shrinks to its own step. Plan: Docs/HVR-replacement/.

Description

Phase 4c: ladders on the Xri backend (needs 4b). Completes Phase 4.

  • oCMobLadder.prefab (UnityMCP), BIP01 LADDER: XRI ClimbInteractable (saved disabled, enabled by XriInteractableBridge on Xri) + XriInteractableBridge + new VrLadderExit. ClimbInteractable adds a kinematic Rigidbody; HVR treats "no body" and "kinematic body" the same (stationary grabbable), so the Hvr ladder is unchanged.
  • XriInteractableBridge: for ladders the grab distance is measured to the collider bounds (XRI's modes use the base or ClosestPoint, which concave mesh colliders don't support → climbing only worked near the bottom).
  • VR - Player XRI.prefab: ClimbProvider, wired to XriRig. XriRig.IsClimbing while a hand holds a ladder (KeepPlayerWithin already used it); move + jump providers off while climbing, the game's MovementEnabled/CanJump values are kept and restored; Teleport() releases the ladder first (else the climb pulls the rig back).
  • VrLadderExit (backend-neutral): head 0.15 m above the top edge → floor probe 0.5 / 0.8 m in front, within 0.5 m of the edge, room for the CharacterController → let go + teleport onto it keeping the facing. HVR had no auto-mantle (documented in the phase doc); without a stick axis in IVrInput the head rising over the edge is the trigger.
  • No HVR code copied.

To test

  • - Hvr: climb a ladder; unchanged.
  • - Xri: G1, grab a ladder (e.g. LADDER_4.ASC near the start) anywhere along it, climb hand over hand → follows the hand, no sinking; let go mid-way → fall.
  • - Xri: old camp watchtower: climb to the top → placed onto the platform; climb down again.
  • - Xri: dialog at a ladder (KeepPlayerWithin), teleport (Marvin) while climbing → ladder released.
  • Tested (Xri + simulator, scripted hand, LADDER_4.ASC at (34.7, 60.3, 323.1)): hover, climb 1:1 with IsClimbing and no gravity, let go → fell 63.0 → 60.2 m with move/jump restored, exit onto a runtime test platform (grounded, IsClimbing false).
  • Not tested: real top exit on a world ledge (the ladders near the start have no floor at the top; the 0.5/0.8 m and 0.5 m values are guesses), two hands, climbing down, Hvr ladder in play, headset, teleport while climbing (ReleaseClimb), dialog at a ladder.
  • Known: the player steps onto the top floor automatically (HVR didn't); the grab range is a box around the ladder, so leaning ladders can be grabbed slightly off the rungs; with two hands, releasing the first hand doesn't re-anchor the climb (XRI behaviour); the floor probe hits all layers (could place the player onto an item/NPC); two Scrollbar values in the XRI rig prefab were recomputed on save.

Test on (delete if irrelevant)

  • PCVR
  • Mobile VR (Quest/Pico)

🤖 Generated with Claude Code

JaXt0r and others added 10 commits October 22, 2026 16:59
…er hand (direct grab, distance grab pulled to the hand with line-of-sight check, UI pointing on the same ray), GothicGrabInteractable (velocity tracking, two hands, throw) and XriInteractableBridge on oCItem raising the VrInteractable events (inventory, ghost layer, hover label); swimming disables grabbing and hovering; small sphere as interim hand visual (HVR phase 2a). No player-visible change on the default Hvr backend.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…talks to it or skips a line, a dead NPC opens the loot panel, beds/fires/wheels/switches/seats are used, hovering shows the name label or the NPC's health bar (XRSimpleInteractable + XriInteractableBridge on the mob and oCNpc prefabs, IsSelectOnly keeps the HVR release workaround in VRNpc for HVR only); eating at the mouth works on the XRI rig (VRMouth on its camera); no more ClosestPoint warnings while pointing at mobs (HVR phase 2b). No player-visible change on the default Hvr backend.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…(re-parents the item's VobLoader, rotates by item category, scales it to fit and centers it, kinematic while inside, restores everything on removal, socket sounds, placed/removed events), VrSocketContainer (TryFindFree/TryPlace/SetSilent), ring hover feedback (valid/invalid material, grows while hovered) and VrContainerDropZone; XriSocketBridge takes only items a hand holds or just released, without XRI moving the grabbable child; "VR Socket Slot.prefab" with own ring mesh and materials; PlayMode test for the VobLoader hierarchy (HVR phase 3a). Not used by the backpack, holsters, chests or loot yet (3b/3c). No player-visible change on the default Hvr backend.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…all on the left shoulder, a hand grabs it off (InvOpen), slots show the current category/page, items go in/out with inventory count and save-game vob list, letting go returns it to the shoulder (InvClose) and its slots can't be used there; two hip holsters and a right shoulder holster keep items (rings show only while hovered) and stay in place while teleporting. New "BackPack XRI.prefab" (copy without HVR parts, VR Socket Slots, VrSocketLink, one-hand-only GothicGrabInteractable) and Shoulders/Waist anchors on the XRI rig (VrBodyAnchor: head position and yaw, not pitch - replaces HeadRelativeInventory/HVRPlayerWaist); VrSocketSlot can hold one linked interactable without VobLoader; socketed items get no Rigidbody interpolation (they stayed behind moving slots); VRBackpack ignores only the slot events of the items it re-stacks itself (instead of _tempIgnoreSocketing) and refills silently (HVR phase 3b). No player-visible change on the default Hvr backend.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…gs it open, the content spawns silently into slots laid out to the chest mesh, items can be taken out and dropped back into the open chest (VrContainerDropZone), closing hides the slots and reopening shows the same items; looting an NPC shows its items in XRI "VR Socket Slot"s, equipped weapons with [E], taking one removes it from the NPC (inventory, equipped list, weapon mesh). VRVobContainerPhysicsChest split: backend-neutral VrChestSlots (layout, content, silent spawn, one slot inventory per backend in oCMobContainer.prefab) and HvrPhysicsChest as HVR lid only; interim Xri lid VrChestLidToggle (IVrHinge, lock picking and open/close sounds) until VrHinge in Phase 4; IVrHinge.IsActive + VrHinges.FindActive, IVrBackend.Kind, IVrSocketContainer.IsActive/IsSilent; slots keep their items while deactivated (XRI let go of them when a chest closed); no weapon draw sounds while a chest spawns its content (also on HVR) (HVR phase 3c). Otherwise no player-visible change on the default Hvr backend.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ch-to-text without microphone, eating a held item, culling list error) are documented in found-bugs.md instead of tickets.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… turns it around its hinge with the hand (kinematic angle solving, clamped to 0-90°), after letting go it swings on and stops at the limits without bouncing, below 5° it closes softly; Gothic open/close sounds play once per transition; locked doors don't move and unlocking by lock picking pushes them open a bit; a hand further than 1 m away (e.g. teleporting) lets go. New backend-neutral VrHinge (IVrHinge, Opened/Closed events, Lock/Unlock) with GothicGrabInteractable + XriInteractableBridge on oCMobDoor.prefab's leaf; HvrHingeBridge disables HVRPhysicsDoor on other backends; the lock picking push force only applies to non-kinematic (HVR) doors (HVR phase 4a). No player-visible change on the default Hvr backend.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ulls it open around its hinge up to 110°, the content spawns into the slots on the first open, closing it by hand hides the slots and reopening shows the same items; locked chests stay shut and unlocking by lock picking pushes the lid open a bit. The interim VrChestLidToggle (use = open/close) is replaced by VrHinge on oCMobContainer.prefab's lid (+ GothicGrabInteractable); IVrHinge gets Opened/Closed events (VrHinge, and HvrHingeBridge from HVRPhysicsDoor's state), so VrChestSlots subscribes to the active hinge on both backends and HvrPhysicsChest no longer drives the slots (HVR phase 4b). No player-visible change on the default Hvr backend.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nywhere moves the player with the hand (hand over hand), gravity, walking and jumping pause while holding on and come back after letting go (falling mid-way works); when the head rises above the ladder's top edge and there is floor in front, the player is placed onto it. ClimbInteractable + XriInteractableBridge (grab distance measured to the ladder's bounds, concave mesh colliders have no ClosestPoint) and new backend-neutral VrLadderExit on oCMobLadder.prefab, ClimbProvider on the XRI rig; XriRig.IsClimbing while a hand holds a ladder (used by KeepPlayerWithin), keeps the game's MovementEnabled/CanJump while climbing and releases the ladder before a code teleport (HVR phase 4c). Completes Phase 4. No player-visible change on the default Hvr backend.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant