# CyberM.sfx — client runtime

Runs inside the game process. Reads and presentation are local; anything that changes shared state has to go through the server.

4 functions.

## clear

```lua
CyberM.sfx.clear()
```

`GAME` — Requires a live game instance.

Stops every SFX owned by the calling resource.

Requires `world.effects`; VFX and other resource owners are unaffected.

Returns: `true on success, otherwise false`, `reason`

Registered in `ResourceHost.cpp` (line 6821) as `LuaEffectClear`.

## list

```lua
CyberM.sfx.list()
```

`GAME` — Requires a live game instance.

Lists active SFX owned by the calling resource.

Requires `world.effects`.

Returns: `array of { id, kind, name, entity, remaining }, or nil`, `reason`

Registered in `ResourceHost.cpp` (line 6824) as `LuaEffectList`.

## play

```lua
CyberM.sfx.play(event, [options])
```

`GAME` — Requires a live game instance.

Starts resource-owned spatial audio on an entity.

Requires `world.effects`. Options accept `entity`, `emitter`, `tag`, `seekTime`, `duration`, and `unique`; omitting `entity` uses the local player.

| Parameter | Type | Required | Default |
|---|---|---|---|
| `event` | `string` | required | — |
| `options` | `table` | optional | — |

Returns: `effect handle string, or nil`, `reason`

Registered in `ResourceHost.cpp` (line 6818) as `LuaSfxPlay`.

## stop

```lua
CyberM.sfx.stop(id)
```

`GAME` — Requires a live game instance.

Stops one SFX handle owned by the calling resource.

Requires `world.effects`. REDengine stops audio by event name, so identical simultaneous events on one entity may share stop behavior.

| Parameter | Type | Required | Default |
|---|---|---|---|
| `id` | `string` | required | — |

Returns: `true on success, otherwise false`, `reason`

Registered in `ResourceHost.cpp` (line 6819) as `LuaEffectStop`.

