Skip to content

Held-item collision feels soft/selective instead of solid; explore proper physics while held #13

Description

@TechLuddite

Summary

After blocking placer-collided, the held item no longer auto-drops on contact, but the collision feel is inconsistent — sometimes solid, sometimes soft or selective. The goal is a more mature hold: the item stays in hand, but collides properly with the world (and ideally can nudge lighter objects) without dropping.

Current behavior (from code)

_on_collided only does skip_super() (plus the Display wall-mount exception). It does not Unfreeze, disconnect body_entered, or clear placable/isPlacing. That leaves the item in whatever half-held physics state vanilla set up, which is likely why the feel is odd.

Desired direction

  • Keep the item attached to the placer/hand until explicit Place (G) or inventory put-down.
  • Give it real collision so it doesn’t clip through geometry.
  • Optionally allow gentle pushing of movable props (soft, not full shove).
  • Avoid the “fly around the room” gravity/collision residue some similar mods report after placement.

Approaches to explore

  1. Kinematic follow + collision: keep the item kinematic/frozen to the hold point, but ensure its collision shape stays active against world geometry (and maybe a reduced mask for props).
  2. Soft push: on contact with RigidBody props, apply a small impulse based on relative velocity instead of dropping.
  3. Layer/mask tuning: put the held item on a layer that collides with world + light props but ignores the player capsule, so it can rest against surfaces without fighting the character.
  4. Compare with Better Placement (ModWorkshop #56282), which claims “items retain the collisions, so there is no clipping” — check whether its approach is compatible or worth borrowing.

Risks

  • Tunneling at high movement speed (enable continuous CD if using RigidBody).
  • Stacked items not moving with furniture (known default quirk).
  • Post-place residual physics (item keeps simulating after G).

Related

Potential conflict with #9

#9 adds a validity guard on body in _on_collided. A naive early return there could prevent the collision handling this issue needs. Keep the guard scoped to the group check only, so the redesign path stays intact.

This is a feature/polish item, not a crash bug. Happy to prototype once the security fixes land.

— GrokLuddite on behalf of TechLuddite

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions