mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-10 23:01:50 +00:00
- Added PlaySound and StopSound functions for ACS. They are mostly analogous to their DECORATE
counterparts except that (1) PlaySound requires you to specify a sound instead of defaulting to "weapons/pistol", and (2) StopSound defaults to CHAN_BODY instead of CHAN_VOICE. SVN r4306 (trunk)
This commit is contained in:
parent
2d13a45773
commit
1a67e6fa5d
1 changed files with 58 additions and 0 deletions
|
@ -4116,6 +4116,8 @@ enum EACSFunctions
|
||||||
ACSF_GetUserCVarString,
|
ACSF_GetUserCVarString,
|
||||||
ACSF_SetUserCVarString,
|
ACSF_SetUserCVarString,
|
||||||
ACSF_LineAttack,
|
ACSF_LineAttack,
|
||||||
|
ACSF_PlaySound,
|
||||||
|
ACSF_StopSound,
|
||||||
|
|
||||||
// ZDaemon
|
// ZDaemon
|
||||||
ACSF_GetTeamScore = 19620, // (int team)
|
ACSF_GetTeamScore = 19620, // (int team)
|
||||||
|
@ -4884,6 +4886,62 @@ int DLevelScript::CallFunction(int argCount, int funcIndex, SDWORD *args)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case ACSF_PlaySound:
|
||||||
|
// PlaySound(tid, "SoundName", channel, volume, looping, attenuation)
|
||||||
|
{
|
||||||
|
const char *lookup = FBehavior::StaticLookupString(args[1]);
|
||||||
|
if (lookup != NULL)
|
||||||
|
{
|
||||||
|
FActorIterator it(args[0]);
|
||||||
|
AActor *spot;
|
||||||
|
|
||||||
|
FSoundID sid(lookup);
|
||||||
|
int chan = argCount > 2 ? args[2] : CHAN_BODY;
|
||||||
|
float vol = argCount > 3 ? FIXED2FLOAT(args[3]) : 1.f;
|
||||||
|
INTBOOL looping = argCount > 4 ? args[4] : false;
|
||||||
|
float atten = argCount > 5 ? FIXED2FLOAT(args[5]) : ATTN_NORM;
|
||||||
|
|
||||||
|
if (args[0] == 0)
|
||||||
|
{
|
||||||
|
spot = activator;
|
||||||
|
goto doplaysound;
|
||||||
|
}
|
||||||
|
while ((spot = it.Next()) != NULL)
|
||||||
|
{
|
||||||
|
doplaysound: if (!looping)
|
||||||
|
{
|
||||||
|
S_Sound(spot, chan, sid, vol, atten);
|
||||||
|
}
|
||||||
|
else if (!S_IsActorPlayingSomething(spot, chan, sid))
|
||||||
|
{
|
||||||
|
S_Sound(spot, chan | CHAN_LOOP, sid, vol, atten);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ACSF_StopSound:
|
||||||
|
{
|
||||||
|
int chan = argCount > 1 ? args[1] : CHAN_BODY;
|
||||||
|
|
||||||
|
if (args[0] == 0)
|
||||||
|
{
|
||||||
|
S_StopSound(activator, chan);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FActorIterator it(args[0]);
|
||||||
|
AActor *spot;
|
||||||
|
|
||||||
|
while ((spot = it.Next()) != NULL)
|
||||||
|
{
|
||||||
|
S_StopSound(spot, chan);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue