| Layer/mask matrix setup |
collisionbitmaskhelper.gd or collisionsetup.gd; matrix policy → collisionlayermatrixmanager.gd |
Swarm / CCD scripts |
| LOS / vision cones |
raycastvisionstack.gd (+ physicsdirectquery.gd for nodeless rays) |
shapecastaoe*.gd, physicsserver_swarm.gd |
| AOE / melee volume |
Prefer shapecastaoe.gd (faction mask); ground/volume sensing → shapecastaoe_detection.gd |
Area2D spam + lava DoT tutorials; do not load both shapecast scripts for the same feature |
| Hitscan / point pick / one-shot shape |
physicsqueries.gd (canonical). Specialists: physicsdirectspacequery.gd (LOS bool), raycasthitprediction.gd |
Re-load all three query helpers at once |
| Bullet hell / 1000+ bodies |
MANDATORY physicsserverswarm.gd (+ physicsserverdirect_body.gd for RID shapes) |
Per-bullet Area2D / RigidBody2D nodes |
| High-speed tunneling |
continuouscollisiondetection.gd + substepping_logic.gd |
CCD on slow props |
| RigidBody safe mutate |
saferigidbodystate.gd (integrateforces) |
Direct transform writes in _process |
| Custom CharacterBody forces |
customphysics2d.gd |
customphysics.gd (that file is RigidBody integrate_forces) |
| Gravity zones |
customgravityarea.gd (Area override) or customgravityoverride.gd (character weight/zones) |
Both unless you need Area + character paths |
| Overlap signal spam |
collision_debouncer.gd |
Polling getoverlappingbodies every frame |
| Compound multi-shape RID |
compoundbodysync.gd |
Multiple nodes for one logical body |
| Debug contact normals |
collisionvisualdebugger.gd |
Visible collision menu insufficient |
| High-refresh jitter |
Prefer jitterinterpolationfix.gd |
physicsinterpolationsmoothing.gd (legacy/manual; only if built-in interpolation is unavailable) |
| Precision bounce / slide |
moveandcollide_precision.gd |
— |
| Batch static movers |
performancebatchmover.gd |
— |
| Query result cache |
physicsquerycache.gd |
Duplicate space queries same frame |