// SPDX-License-Identifier: MIT // Copyright (c) 2026 Incoprea // Linked audio ducking receiver // Not compiled or tested in-world // Setup: Add bed. Put in child; root named narrator sends code 8050 with duck or release. Owner-touch arms/stops. // Stop / restore: Owner-touch the script prim to stop an active session before removing or resetting it. Loop state can survive script removal; use Stop sound in this prim if necessary. // Notes: Use licensed sounds in this prim. Audio is nearby, not private. Timer timing and asset loading are approximate; no sample synchronization is promised. Ducking automatically releases after ten seconds, preventing a lost release message from leaving permanent low volume. // License: see LICENSE in this distribution. // Original Incoprea. MIT. Not compiled or tested in-world. integer active; integer ducked; default { touch_start(integer n) { if(llDetectedKey(0)!=llGetOwner())return; active=!active; if(active) { if(llGetInventoryType("bed")!=INVENTORY_SOUND) { active=FALSE; return; } llLoopSound("bed",0.25); } else { llSetTimerEvent(0.0); llStopSound(); ducked=FALSE; } } link_message(integer sender,integer code,string s,key data) { if(!active||sender!=1||llGetLinkName(1)!="narrator"||code!=8050)return; if(s=="duck") { ducked=TRUE; llAdjustSoundVolume(0.04); llSetTimerEvent(10.0); } else if(s=="release") { ducked=FALSE; llAdjustSoundVolume(0.25); llSetTimerEvent(0.0); } } timer() { if(active&&ducked) { ducked=FALSE; llAdjustSoundVolume(0.25); } llSetTimerEvent(0.0); } }