|
Releases, Installers, Docs & Coding Where the official development happens
|
|
Member
Status: Offline
Posts: 594
Join Date: Mar 2004
Location: Middle Earth (New Zealand)
|
Re: bot_sounds.cpp -
25-06-2004
will this work???
Code:
// ####################################
// # #
// # Ping of Death - Bot #
// # by #
// # Markus Klinge aka Count Floyd #
// # #
// ####################################
//
// Started from the HPB-Bot Alpha Source
// by Botman so Credits for a lot of the basic
// HL Server/Client Stuff goes to him
//
// bot_sounds.cpp
//
// Hooks to let Bots 'hear' otherwise unnoticed things. Base code & idea from killaruna/ParaBot
#include "bot_globals.h"
void SoundAttachToThreat (edict_t *pEdict, const char *pszSample, float fVolume)
{
// Called by the Sound Hooking Code (in EMIT_SOUND)
// Enters the played Sound into the Array associated with the Entity
Vector vecPosition;
int iIndex;
if (FNullEnt (pEdict))
return;
// Hit/Fall Sound ?
if ((strncmp ("player/bhit_flesh", pszSample, 17) == 0)
|| (strncmp ("player/headshot", pszSample, 15) == 0))
{
iIndex = ENTINDEX (pEdict) - 1;
// crash fix courtesy of Wei Mingzhi
if ((iIndex < 0) || (iIndex >= gpGlobals->maxClients))
iIndex = UTIL_GetNearestPlayerIndex (VecBModelOrigin (pEdict));
//clients[iIndex].fHearingDistance = 800.0 * fVolume;
//clients[iIndex].fTimeSoundLasting = gpGlobals->time + 0.5;
//clients[iIndex].vecSoundPosition = pEdict->v.origin;
SoundMethod(iIndex, false, 800.0, 0.5, false, true)
}
// Weapon Pickup ?
else if (strncmp ("items/gunpickup", pszSample, 15) == 0)
{
iIndex = ENTINDEX (pEdict) - 1;
// crash fix courtesy of Wei Mingzhi
if ((iIndex < 0) || (iIndex >= gpGlobals->maxClients))
iIndex = UTIL_GetNearestPlayerIndex (VecBModelOrigin (pEdict));
//clients[iIndex].fHearingDistance = 800.0 * fVolume;
//clients[iIndex].fTimeSoundLasting = gpGlobals->time + 0.5;
//clients[iIndex].vecSoundPosition = pEdict->v.origin;
SoundMethod(iIndex, false, 800.0, 0.5, false, true)
}
// Sniper zooming ?
else if (strncmp ("weapons/zoom", pszSample, 12) == 0)
{
iIndex = ENTINDEX (pEdict) - 1;
// crash fix courtesy of Wei Mingzhi
if ((iIndex < 0) || (iIndex >= gpGlobals->maxClients))
iIndex = UTIL_GetNearestPlayerIndex (VecBModelOrigin (pEdict));
//clients[iIndex].fHearingDistance = 500.0 * fVolume;
//clients[iIndex].fTimeSoundLasting = gpGlobals->time + 0.1;
//clients[iIndex].vecSoundPosition = pEdict->v.origin;
SoundMethod(iIndex, false, 500.0, 0.1, false, true)
}
// Reload ?
else if (strncmp ("weapons/reload", pszSample, 14) == 0)
{
iIndex = ENTINDEX (pEdict) - 1;
// crash fix courtesy of Wei Mingzhi
if ((iIndex < 0) || (iIndex >= gpGlobals->maxClients))
iIndex = UTIL_GetNearestPlayerIndex (VecBModelOrigin (pEdict));
//clients[iIndex].fHearingDistance = 500.0 * fVolume;
//clients[iIndex].fTimeSoundLasting = gpGlobals->time + 0.5;
//clients[iIndex].vecSoundPosition = pEdict->v.origin;
SoundMethod(iIndex, false, 1024.0, 3.0, false, true)
}
// The following Sounds don't have the Player Entity associated
// so we need to search the nearest Player
// Ammo Pickup ?
else if (strncmp ("items/9mmclip", pszSample, 13) == 0)
{
vecPosition = pEdict->v.origin;
iIndex = UTIL_GetNearestPlayerIndex (vecPosition);
//clients[iIndex].fHearingDistance = 500.0 * fVolume;
//clients[iIndex].fTimeSoundLasting = gpGlobals->time + 0.1;
//clients[iIndex].vecSoundPosition = pEdict->v.origin;
SoundMethod(iIndex, false, 500.0, 0.1, false, true)
}
// CT used Hostage ?
else if (strncmp ("hostage/hos", pszSample, 11) == 0)
{
vecPosition = VecBModelOrigin (pEdict);
iIndex = UTIL_GetNearestPlayerIndex (vecPosition);
//clients[iIndex].fHearingDistance = 1024.0 * fVolume;
//clients[iIndex].fTimeSoundLasting = gpGlobals->time + 5.0;
//clients[iIndex].vecSoundPosition = vecPosition;
SoundMethod(iIndex, false, 1024.0, 5.0, false, false)
}
// Broke something ?
else if ((strncmp ("debris/bustmetal", pszSample, 16) == 0)
|| (strncmp ("debris/bustglass", pszSample, 16) == 0))
{
vecPosition = VecBModelOrigin (pEdict);
iIndex = UTIL_GetNearestPlayerIndex (vecPosition);
//clients[iIndex].fHearingDistance = 1024.0 * fVolume;
//clients[iIndex].fTimeSoundLasting = gpGlobals->time + 2.0;
//clients[iIndex].vecSoundPosition = vecPosition;
SoundMethod(iIndex, false, 1024.0, 2.0, false, false)
}
// Someone opened a door
else if (strncmp ("doors/doormove", pszSample, 14) == 0)
{
vecPosition = VecBModelOrigin (pEdict);
iIndex = UTIL_GetNearestPlayerIndex (vecPosition);
//clients[iIndex].fHearingDistance = 1024.0 * fVolume;
//clients[iIndex].fTimeSoundLasting = gpGlobals->time + 3.0;
//clients[iIndex].vecSoundPosition = vecPosition;
SoundMethod(iIndex, false, 1024.0, 3.0, false, false)
}
}
void SoundSimulateUpdate (int iPlayerIndex)
{
// Tries to simulate playing of Sounds to let the Bots hear
// sounds which aren't captured through Server Sound hooking
edict_t *pPlayer = clients[iPlayerIndex].pEdict;
float fVelocity = pPlayer->v.velocity.Length2D ();
float fHearDistance = 0.0;
float fTimeSound;
// Pressed Attack Button ?
if (pPlayer->v.oldbuttons & IN_ATTACK)
{
fHearDistance = 4096.0;
fTimeSound = gpGlobals->time + 0.5;
}
// Pressed Used Button ?
else if (pPlayer->v.oldbuttons & IN_USE)
{
fHearDistance = 1024.0;
fTimeSound = gpGlobals->time + 0.5;
}
// Uses Ladder ?
else if (pPlayer->v.movetype == MOVETYPE_FLY)
{
if (fabs (pPlayer->v.velocity.z) > 50)
{
fHearDistance = 1024.0;
fTimeSound = gpGlobals->time + 0.3;
}
}
// Moves fast enough ?
else
{
static float fMaxSpeed = 0.0;
if (fMaxSpeed == 0.0)
fMaxSpeed = CVAR_GET_FLOAT ("sv_maxspeed");
fHearDistance = 1024.0 * (fVelocity / fMaxSpeed);
fTimeSound = gpGlobals->time + 0.3;
}
// Did issue Sound ?
if (fHearDistance > 0.0)
{
// Some sound already associated ?
if (clients[iPlayerIndex].fTimeSoundLasting > gpGlobals->time)
{
// New Sound louder (bigger range) than old sound ?
if (clients[iPlayerIndex].fHearingDistance <= fHearDistance)
{
// Override it with new
//clients[iPlayerIndex].fHearingDistance = fHearDistance;
//clients[iPlayerIndex].fTimeSoundLasting = fTimeSound;
//clients[iPlayerIndex].vecSoundPosition = pPlayer->v.origin;
SoundMethod(iPlayerIndex, true, 0, 0, true, true)
}
}
// New sound ?
else
{
// Just remember it
//clients[iPlayerIndex].fHearingDistance = fHearDistance;
//clients[iPlayerIndex].fTimeSoundLasting = fTimeSound;
//clients[iPlayerIndex].vecSoundPosition = pPlayer->v.origin;
SoundMethod(iPlayerIndex, true, 0, 0, true, true)
}
}
void SoundMethod(int i, boolean a,float b, float c, boolean d, boolean e)
{
if(a)
clients[i].fHearingDistance = fHearDistance;
else
clients[i].fHearingDistance = b * fVolume;
if(d){
clients[i].fTimeSoundLasting = fTimeSound;
else
clients[i].fTimeSoundLasting = gpGlobals->time + c;
if(e)
clients[i].vecSoundPosition = pEdict->v.origin;
else
clients[i].vecSoundPosition = vecPosition;
}
}
|
|
|
|
|
Roi de France
Status: Offline
Posts: 5,049
Join Date: Nov 2003
Location: 46°43'60N 0°43'0W 0.187A
|
Re: bot_sounds.cpp -
25-06-2004
I believe yes, but I'd have renamed that mysterious "SoundMethod" into something more explicit...
RACC home - Bots-United: beer, babies & bots (especially the latter)
"Learn to think by yourself, else others will do it for you."
|
|
|
|
|
Member
Status: Offline
Posts: 594
Join Date: Mar 2004
Location: Middle Earth (New Zealand)
|
Re: bot_sounds.cpp -
26-06-2004
Quote:
Originally Posted by Pierre-Marie Baty
I believe yes, but I'd have renamed that mysterious "SoundMethod" into something more explicit...
|
lol, okay ...therefore u can delete all the commented lines i made
and how would we be able to add more types of sounds that splorygon was talking about
|
|
|
|
|
Roi de France
Status: Offline
Posts: 5,049
Join Date: Nov 2003
Location: 46°43'60N 0°43'0W 0.187A
|
Re: bot_sounds.cpp -
26-06-2004
Constantly evaluating the players' actions each frame...
because currently, SoundAttachToThreat() is only called in pfnEmitSound and pfnEmitAmbientSound for SERVER-side sounds. You can't use this method for all the client-side sounds (gunshots, footsteps) that's why SoundSimulateUpdate() is used. All you need to do is to add more precise checks into this function to make the bot identify more sounds.
RACC home - Bots-United: beer, babies & bots (especially the latter)
"Learn to think by yourself, else others will do it for you."
|
|
|
Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
|
|
Posting Rules
|
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is Off
|
|
|
Powered by vBulletin® Version 3.8.2 Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
vBulletin Skin developed by: vBStyles.com
|
|