<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.secondlife.com/w/index.php?action=history&amp;feed=atom&amp;title=MultiSoundWalker</id>
	<title>MultiSoundWalker - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.secondlife.com/w/index.php?action=history&amp;feed=atom&amp;title=MultiSoundWalker"/>
	<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MultiSoundWalker&amp;action=history"/>
	<updated>2026-04-06T05:02:34Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MultiSoundWalker&amp;diff=1196195&amp;oldid=prev</id>
		<title>Craftish Resident: Extended walker script</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MultiSoundWalker&amp;diff=1196195&amp;oldid=prev"/>
		<updated>2015-04-18T09:23:48Z</updated>

		<summary type="html">&lt;p&gt;Extended walker script&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{LSL Header}}&lt;br /&gt;
&lt;br /&gt;
Script to have multiple sounds strung together in a walker. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
list soundlengths=[7.000,6.716];	// lengths of all the sounds in seconds; leave empty for automatic 10 second sounds&lt;br /&gt;
float lastsoundlength=10.0;	// used for the last sound only if not all lengths are set&lt;br /&gt;
&lt;br /&gt;
integer smooth_looping=1;	// this will loop sounds smoothly, but the lengths must be perfect&lt;br /&gt;
integer preload_sounds=1;	// this will preload sounds when switching regions&lt;br /&gt;
&lt;br /&gt;
/* *** ------------------------------------------- *** */&lt;br /&gt;
/* ***   Copyright (c) 2015 by Craftish Resident   *** */&lt;br /&gt;
/* ***    Attribution 3.0 Unported (CC BY 3.0)     *** */&lt;br /&gt;
/* *** http://creativecommons.org/licenses/by/3.0/ *** */&lt;br /&gt;
/* *** ------------------------------------------- *** */&lt;br /&gt;
/* *** - - - - - -  Walker script 1.1  - - - - - - *** */&lt;br /&gt;
/* *** ------------------------------------------- *** */&lt;br /&gt;
&lt;br /&gt;
//	advanced settings&lt;br /&gt;
&lt;br /&gt;
list activate=[&amp;quot;Walking&amp;quot;,&amp;quot;Running&amp;quot;,&amp;quot;Turning Left&amp;quot;,&amp;quot;Turning Right&amp;quot;,&amp;quot;CrouchWalking&amp;quot;];&lt;br /&gt;
float interval=0.2;&lt;br /&gt;
float volume_decay=0.12;&lt;br /&gt;
float full_volume=1.0;&lt;br /&gt;
&lt;br /&gt;
//&lt;br /&gt;
&lt;br /&gt;
list sounds=[];&lt;br /&gt;
integer totalsounds;&lt;br /&gt;
integer at=0;&lt;br /&gt;
&lt;br /&gt;
integer playing=0;&lt;br /&gt;
integer walking=0;&lt;br /&gt;
integer wasplaying=0;&lt;br /&gt;
integer stopping=0;&lt;br /&gt;
float currentsoundlen;&lt;br /&gt;
float currentplayed;&lt;br /&gt;
float volume=1.0;&lt;br /&gt;
&lt;br /&gt;
integer hasanimation=0;&lt;br /&gt;
integer cananimate=0;&lt;br /&gt;
string animationname;&lt;br /&gt;
key animationkey;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
preload(){&lt;br /&gt;
	if(preload_sounds){&lt;br /&gt;
		integer i=0;&lt;br /&gt;
		for(;i&amp;lt;totalsounds;++i){&lt;br /&gt;
			llPreloadSound(llList2String(sounds,i));&lt;br /&gt;
		}&lt;br /&gt;
		llSleep(2.0);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
start_animation(){&lt;br /&gt;
	if(hasanimation &amp;amp;&amp;amp; cananimate){&lt;br /&gt;
		llStartAnimation(animationname);&lt;br /&gt;
		animationkey=llList2Key(llGetAnimationList(llGetPermissionsKey()), -1);&lt;br /&gt;
		fixanim();&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
start(){&lt;br /&gt;
	at=0;&lt;br /&gt;
	currentplayed=0.0;&lt;br /&gt;
	if(totalsounds&amp;gt;1){&lt;br /&gt;
		currentsoundlen=llList2Float(soundlengths,0);&lt;br /&gt;
		llPlaySound(llList2String(sounds,0),full_volume);&lt;br /&gt;
	}else{&lt;br /&gt;
		llLoopSound(llList2String(sounds,0),full_volume);&lt;br /&gt;
	}&lt;br /&gt;
	stopping=0;&lt;br /&gt;
	if(volume&amp;lt;full_volume){&lt;br /&gt;
		volume=full_volume;&lt;br /&gt;
		llAdjustSoundVolume(volume);&lt;br /&gt;
	}&lt;br /&gt;
	playing=1;&lt;br /&gt;
}&lt;br /&gt;
next(){&lt;br /&gt;
	at++;&lt;br /&gt;
	if(at==totalsounds)at=0;&lt;br /&gt;
	currentsoundlen=llList2Float(soundlengths,at);&lt;br /&gt;
	llPlaySound(llList2String(sounds,at),full_volume);&lt;br /&gt;
}&lt;br /&gt;
stop_animation(){&lt;br /&gt;
	if(hasanimation &amp;amp;&amp;amp; cananimate){&lt;br /&gt;
		llStopAnimation(animationname);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
stop(){&lt;br /&gt;
	llStopSound();&lt;br /&gt;
	currentplayed=0.0;&lt;br /&gt;
	stop_animation();&lt;br /&gt;
	playing=0;&lt;br /&gt;
}&lt;br /&gt;
fixanim(){&lt;br /&gt;
	if(hasanimation &amp;amp;&amp;amp; cananimate){&lt;br /&gt;
		list anims=llGetAnimationList(llGetPermissionsKey());&lt;br /&gt;
		integer len=llGetListLength(anims);&lt;br /&gt;
		integer i=0;&lt;br /&gt;
		for (;i&amp;lt;len;++i){&lt;br /&gt;
			if(llList2Key(anims,i)!=animationkey){&lt;br /&gt;
				llStopAnimation(llList2Key(anims,i));&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default {&lt;br /&gt;
	state_entry(){&lt;br /&gt;
		llStopSound();&lt;br /&gt;
		llSetSoundQueueing(smooth_looping);&lt;br /&gt;
		sounds=[];&lt;br /&gt;
		integer i=0;&lt;br /&gt;
		totalsounds=llGetInventoryNumber(INVENTORY_SOUND);&lt;br /&gt;
		for(i=0;i&amp;lt;totalsounds;++i){&lt;br /&gt;
			sounds+=[llGetInventoryName(INVENTORY_SOUND,i)];&lt;br /&gt;
		}&lt;br /&gt;
		for(i=llGetListLength(soundlengths)-1;i&amp;lt;totalsounds;++i){&lt;br /&gt;
			if(i==totalsounds-1){soundlengths+=[10.0];}else{soundlengths+=[lastsoundlength];}&lt;br /&gt;
		}&lt;br /&gt;
		if(llGetInventoryNumber(INVENTORY_ANIMATION)){&lt;br /&gt;
			hasanimation=1;&lt;br /&gt;
			animationname=llGetInventoryName(INVENTORY_ANIMATION,0);&lt;br /&gt;
			llRequestPermissions(llGetOwner(),PERMISSION_TRIGGER_ANIMATION);&lt;br /&gt;
		}&lt;br /&gt;
		volume=full_volume;&lt;br /&gt;
		preload();&lt;br /&gt;
		llSetTimerEvent(interval);&lt;br /&gt;
	}&lt;br /&gt;
	changed(integer x){&lt;br /&gt;
		if (x &amp;amp; CHANGED_INVENTORY){&lt;br /&gt;
			llSleep(3.0);&lt;br /&gt;
			llResetScript();&lt;br /&gt;
		}&lt;br /&gt;
		if(x &amp;amp; CHANGED_REGION){&lt;br /&gt;
			llSleep(1.5);&lt;br /&gt;
			preload();&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	run_time_permissions(integer x){&lt;br /&gt;
		if (x &amp;amp; PERMISSION_TRIGGER_ANIMATION){&lt;br /&gt;
			cananimate=1;&lt;br /&gt;
		}else{&lt;br /&gt;
			cananimate=0;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	attach(key id){&lt;br /&gt;
		if(id){&lt;br /&gt;
			cananimate=0;&lt;br /&gt;
			if(hasanimation){&lt;br /&gt;
				llRequestPermissions(llGetOwner(),PERMISSION_TRIGGER_ANIMATION);&lt;br /&gt;
				preload();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	timer(){&lt;br /&gt;
		currentplayed+=interval;&lt;br /&gt;
		//&lt;br /&gt;
		string anim=llGetAnimation(llGetOwner());&lt;br /&gt;
		walking=~llListFindList(activate,[anim]);&lt;br /&gt;
		//&lt;br /&gt;
		if(wasplaying!=walking){&lt;br /&gt;
			wasplaying=walking;&lt;br /&gt;
			if(walking){&lt;br /&gt;
				start_animation();&lt;br /&gt;
				if(playing){&lt;br /&gt;
					if(volume&amp;lt;full_volume){&lt;br /&gt;
						volume=full_volume;&lt;br /&gt;
						llAdjustSoundVolume(volume);&lt;br /&gt;
					}&lt;br /&gt;
					stopping=0;&lt;br /&gt;
				}else{&lt;br /&gt;
					start();&lt;br /&gt;
				}&lt;br /&gt;
			}else{&lt;br /&gt;
				stopping=1;&lt;br /&gt;
				stop_animation();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		if(playing){&lt;br /&gt;
			if(totalsounds&amp;gt;1){&lt;br /&gt;
				if(smooth_looping){&lt;br /&gt;
					if(currentplayed&amp;gt;currentsoundlen/2){&lt;br /&gt;
						currentplayed-=currentsoundlen;&lt;br /&gt;
						next();&lt;br /&gt;
					}&lt;br /&gt;
				}else{&lt;br /&gt;
					if(currentplayed&amp;gt;currentsoundlen-(interval/2)){&lt;br /&gt;
						currentplayed=0;&lt;br /&gt;
						next();&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			if(walking){&lt;br /&gt;
				fixanim();&lt;br /&gt;
			}else{&lt;br /&gt;
				if(stopping){&lt;br /&gt;
					volume-=volume_decay;&lt;br /&gt;
					llAdjustSoundVolume(volume);&lt;br /&gt;
					if(volume&amp;lt;0.0){&lt;br /&gt;
						stop();&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	on_rez(integer x){&lt;br /&gt;
		llResetScript();&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Craftish Resident</name></author>
	</entry>
</feed>