func_breakable: ensure the 'break' sound is played when present. also ensure we precache the break sound ahead of time.

This commit is contained in:
Marco Cawthorne 2023-05-01 05:52:20 -07:00
parent d45d2f1dc4
commit 3419c0df31
Signed by: eukara
GPG key ID: CE2032F0A2882A22
3 changed files with 21 additions and 6 deletions

View file

@ -281,11 +281,16 @@ func_breakable::Respawn(void)
void void
func_breakable::Pain(void) func_breakable::Pain(void)
{ {
string painSound;
if (HasSpawnFlags(SF_TRIGGER)) { if (HasSpawnFlags(SF_TRIGGER)) {
return; return;
} }
Sound_Play(this, CHAN_VOICE, GetSurfaceData(SURFDATA_SND_BULLETIMPACT)); painSound = GetSurfaceData(SURFDATA_SND_BULLETIMPACT);
if (painSound)
StartSoundDef(painSound, CHAN_VOICE, true);
} }
@ -294,13 +299,14 @@ func_breakable::Explode(void)
{ {
vector rp = WorldSpaceCenter(); vector rp = WorldSpaceCenter();
vector vecDir = vectoangles(rp - g_dmg_vecLocation); vector vecDir = vectoangles(rp - g_dmg_vecLocation);
string breakModel = GetPropData(PROPINFO_BREAKMODEL);
BreakModel_Spawn(absmin, absmax, [0,0,0], m_flExplodeMag, vlen(size) / 10, GetPropData(PROPINFO_BREAKMODEL)); BreakModel_Spawn(absmin, absmax, [0,0,0], m_flExplodeMag, vlen(size) / 10, breakModel);
FX_Explosion(rp); FX_Explosion(rp);
Damage_Radius(rp, this, m_flExplodeMag, m_flExplodeRad, TRUE, 0); Damage_Radius(rp, this, m_flExplodeMag, m_flExplodeRad, TRUE, 0);
UseTargets(this, TRIG_TOGGLE, 0.0f); /* delay... ignored. */ UseTargets(this, TRIG_TOGGLE, 0.0f); /* delay... ignored. */
Disappear();
SetTakedamage(DAMAGE_NO); SetTakedamage(DAMAGE_NO);
Disappear();
} }
void void
@ -347,10 +353,15 @@ func_breakable::Death(void)
ScheduleThink(Explode, random(0.0f, 0.5f)); ScheduleThink(Explode, random(0.0f, 0.5f));
} else { } else {
vector vecDir = vectoangles(WorldSpaceCenter() - g_dmg_vecLocation); vector vecDir = vectoangles(WorldSpaceCenter() - g_dmg_vecLocation);
BreakModel_Spawn(absmin, absmax, vecDir, g_dmg_iDamage * 2.5, vlen(size) / 10, GetPropData(PROPINFO_BREAKMODEL)); string sndBreak = GetSurfaceData(SURFDATA_SND_BREAK);
string breakModel = GetPropData(PROPINFO_BREAKMODEL);
BreakModel_Spawn(absmin, absmax, vecDir, g_dmg_iDamage * 2.5, vlen(size) / 10, breakModel);
Disappear(); Disappear();
SetTakedamage(DAMAGE_NO); SetTakedamage(DAMAGE_NO);
UseTargets(eActivator, TRIG_TOGGLE, 0.0f); UseTargets(eActivator, TRIG_TOGGLE, 0.0f);
if (sndBreak)
StartSoundDef(sndBreak, CHAN_BODY, true);
} }
} }

View file

@ -50,6 +50,9 @@ NSClientPlayer::IsDead(void)
bool bool
NSClientPlayer::IsPlayer(void) NSClientPlayer::IsPlayer(void)
{ {
if (HasFlags(FL_FAKESPEC))
return (false);
return (true); return (true);
} }

View file

@ -74,11 +74,11 @@ SurfData_ParseField(int i, int a)
g_surfdata[i].m_sndStrain = argv(1); g_surfdata[i].m_sndStrain = argv(1);
break; break;
case "break": case "break":
g_surfdata[i].m_sndRoll = argv(1); g_surfdata[i].m_sndBreak = argv(1);
break; break;
case "roll": case "roll":
case "rolling": case "rolling":
g_surfdata[i].m_sndBreak = argv(1); g_surfdata[i].m_sndRoll = argv(1);
break; break;
case "fx_bulletimpact": case "fx_bulletimpact":
case "part_bulletimpact": case "part_bulletimpact":
@ -332,6 +332,7 @@ SurfData_Init(void)
Sound_Precache(g_surfdata[i].m_sndStepLeft); Sound_Precache(g_surfdata[i].m_sndStepLeft);
Sound_Precache(g_surfdata[i].m_sndStepRight); Sound_Precache(g_surfdata[i].m_sndStepRight);
Sound_Precache(g_surfdata[i].m_sndBulletImpact); Sound_Precache(g_surfdata[i].m_sndBulletImpact);
Sound_Precache(g_surfdata[i].m_sndBreak);
} }
print(sprintf("surface data initialized with %i entries.\n", g_surfdata_count)); print(sprintf("surface data initialized with %i entries.\n", g_surfdata_count));