Gah - a solution with more questions. – EntropicLqd

Legacy talk:TriggeredAmbientSound

From Unreal Wiki, The Unreal Engine Documentation Site
Jump to: navigation, search

TrigAmbSound[edit]

YoMammy: (04/11/2002)

Advanced -> bStatic IS the problem with the TriggeredAmbientSound. On and above that, the TAS was likely coded up rather quickly for a specific purpose and therefor leaves lots to be desired.

For you sounding pleasure, however, I coded up a much better (if I do say so myself :) ) TAS. Here's a list of its new properties and one other parent property setting worth mentioning:

TrigAmbSound properties:

  • var() sound StartSound;
  • var() sound AmbSound;
  • var() sound StopSound;
  • var() bool bInitiallyOn;
  • var() float AmbDuration;
  • Object/InitialState TriggerToggle or TriggerControl (latter is default)

"StartSound" is where you can optionally place a one-shot sound. This will play when the TAS is triggered. Thereafter, if you specified an "AmbSound" (preferrably a looping sound), it will then play until you untrigger. Once untriggered, if you specified a "StopSound", that will play to finish things up.

"bInitially" should only be set to True if you set Object/InitialState = TriggleToggle. When doing this, the "StartSound" is bypassed and the process proceeds to the "AmbSound"...if any was specified.

If you set "AmbDuration" to anything other than it's default 0.0, the looping ambient sound specified in "AmbSound" will only play for the duration specified. Thereafter, things will work as normal...i.e. you'll still get the "StopSound" when untriggering.

If you want the script, get it here: http://www.gentekcom.com/~diinc/UTMaps/TrigAmbSound.u

In UEd, You'll find it under KeyPoint (where you'd expect). Open up the script and look at it...its ridiculously simple. Now, forgive me for being a smartass, but isn't THIS what you'd expect a TriggeredAmbientSound to do in the first place?

CoolDude: Too bad, the link above seems to be broken. If anybody has a working one, please add it.

2001[edit]

Tarquin: I tried a search of my UT folder for anything with the name "TrigAmbSound" and found this in both a map called DM-2001][ by Wayne Young (AKA Slartybartfast) and wdy_mods.U (whatever that is!) The 'OnWhileTriggered' state sounds like it corresponds to 'TriggerControl' described above. I don't know if it's coincidence that it uses the same name, or if it's an earlier version. If anyone feels like contacting this guy and asking him if we can alter his script & improve it, his website is http://www.ganimede.demon.co.uk/ (and he works for nVidia).

//=============================================================================
// TrigAmbSound.
//=============================================================================
class TrigAmbSound extends Keypoint;
 
// Re-plays a sound effect if triggered.  If in state TriggerToggled,
// the sound is turned off if triggered, and turned on, etc..
// when triggered again.  In the OnWhileTriggered state, the instigator
// must stay within the trigger's radius for the sound effect to continue
// playing.  bInitiallyOn determines if the sound is playing from the 
// start, and does not apply in the OnWhileTriggered state.
 
var() sound StartSound; // Hmmm. This doesn't do anything yet :(
var() sound LoopSound;
var() sound EndSound;
var() bool  bInitiallyOn;
 
var	  bool  bIsOn;
 
function BeginPlay ()
{	
  if (bInitiallyOn) {
//    if (StartSound != None) {
//	  PlaySound (StartSound, , Float(SoundVolume)/128, , Float(SoundRadius)*25);
//	  }
    if (LoopSound != None) {
	  PlaySound (LoopSound, , Float(SoundVolume)/128, , Float(SoundRadius)*25);
	  }
    bIsOn = true;
    }
}
 
state() TriggerToggled
{
  function Trigger( actor Other, pawn EventInstigator )
	{
	bIsOn = !bIsOn;
	if (bIsOn) {
//      if (StartSound != None) {
//	    PlaySound (StartSound, , Float(SoundVolume)/128, , Float(SoundRadius)*25);
//	    }
      if (LoopSound != None) {
        PlaySound (LoopSound, , Float(SoundVolume)/128, , Float(SoundRadius)*25);
        }
	  }
	else {
      if (EndSound != None) {
        PlaySound (EndSound, , Float(SoundVolume)/128, , Float(SoundRadius)*25);
        }
	  }
	}
}
 
state() OnWhileTriggered
{
  function Trigger( actor Other, pawn EventInstigator )	{
    bIsOn = true;
//    if (StartSound != None) {
//	  PlaySound (StartSound, , Float(SoundVolume)/128, , Float(SoundRadius)*25);
//	  }
    if (LoopSound != None) {
      PlaySound (LoopSound, , Float(SoundVolume)/128, , Float(SoundRadius)*25);
      }
	}
 
  function UnTrigger( actor Other, pawn EventInstigator ) {
    bIsOn = false;
    if (EndSound != None) {
      PlaySound (EndSound, , Float(SoundVolume)/128, , Float(SoundRadius)*25);
      }
    }
 
Begin:
	bIsOn = false;
}


GTD-Carthage: Hey, has there been any update here? :o Looks like this is one unsolved problem...

SuperApe: The bStatic problem? I have a thought about this, although I'm not a UT person. The bStatic problem could be solved with a special Trigger, like the VolumeTrigger is able to toggle bStatic Volumes. The custom Trigger function can simply search for TrigAmbSound actors with the matching Tag and call the TrigAmbSound's Trigger function.

Simple triggerable AmbientSound[edit]

A very simple version is this:

class AmbientSoundEx expands AmbientSound;
 
var() bool bInitiallyOn;
 
var sound MyAmbientSound;
 
function BeginPlay () {
	MyAmbientSound = AmbientSound;
	if ( ! bInitiallyOn) AmbientSound = None;
}
 
 
function Trigger( actor Other, pawn EventInstigator ) {
	if (AmbientSound == None)
		AmbientSound = MyAmbientSound;
	else
		AmbientSound = None;
}
 
DefaultProperties {
	bStatic=False
}

Each time this Actor is triggered, it switches its AmbientSound between on and off. If bInitiallyOn is set to True, it switches between off and on. --SeriousBarbie (talk) 00:54, 24 September 2016 (EDT)