# collision_start

*LSL event*

```lsl
collision_start(integer num_detected)
```

- `integer num_detected`: Total number of detected colliders (usable with llDetected* functions).

Triggered when an avatar or another object first begins colliding with the object containing the script. Passes num_detected, representing the number of detected collisions.

Triggered when task starts colliding with another task

```lsl title="How to use" frame="terminal"
collision_start(integer num_detected)
{

}
```

## Caveats

- Will not detect collisions with ground. Use [land_collision_start](/events/land_collision_start/) instead.
- Phantom objects can never receive trigger collision events.
- `llVolumeDetect(TRUE)` objects get trigger [collision_start](/events/collision_start/) and [collision_end](/events/collision_end/) but not [collision](/events/collision/)() events.
- A collision with a hovering avatar does not trigger collisions, unless the avatar turns or moves.
- Only a physical object will get collision events from colliding with a non-physical object.

## Examples

<details open>
<summary>Example 1</summary>

```lsl
default
{
    collision_start(integer num)
    {
        llSay(0,"No pushing.");
    }
}
```

</details>

<details>
<summary>Example 2</summary>

```lsl collapse={1-5}
list DetectedAvatars = [];
default
{
    state_entry()
    {
        llVolumeDetect(TRUE); // Enable detection of people colliding with object....
    }
    collision_start(integer detected)
    {
        integer index = llListFindList(DetectedAvatars, [llDetectedKey(0)]);
        if (index == -1)
        {
            llInstantMessage(llDetectedKey(0), " Welcome to the Community");
            DetectedAvatars = llListInsertList(DetectedAvatars, [llDetectedKey(0)], -1);

            if (llGetListLength(DetectedAvatars) == 2)
            {
                DetectedAvatars = llDeleteSubList(DetectedAvatars, 1, 2);
            }
        }
    }
}
```

</details>

## Known issues

- [SVC-3306](https://jira.secondlife.com/browse/SVC-3306): Add enumeration to [llPassCollisions](/functions/llPassCollisions/)() to provide [PASS_ALWAYS](/constants/PASS_ALWAYS/), [PASS_IF_NOT_HANDLED](/constants/PASS_IF_NOT_HANDLED/), and [PASS_NEVER](/constants/PASS_NEVER/) as explicit options.

  (Was: [Collision](https://wiki.secondlife.com/wiki/Category:LSL_Collision)s passed to parent REGARDLESS [llPassCollisions](/functions/llPassCollisions/)([FALSE](/constants/FALSE/)) in child)

## See also

### Functions

- [llPassCollisions](/functions/llPassCollisions/)
- [llCollisionFilter](/functions/llCollisionFilter/)
- [llCollisionSound](/functions/llCollisionSound/)
- [llVolumeDetect](/functions/llVolumeDetect/)

### Events

- [collision](/events/collision/)
- [collision_end](/events/collision_end/)

---

*Source: [Collision start](https://wiki.secondlife.com/wiki/Collision_start) on the Second Life Wiki. Content from the Second Life Wiki article Collision start (revision 1218613, 2026-02-03), CC BY-SA 3.0.*

---

From lsl.dev: https://lsl.dev/events/collision_start/
