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
func_breakable::Pain(void)
{
string painSound;
if (HasSpawnFlags(SF_TRIGGER)) {
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 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);
Damage_Radius(rp, this, m_flExplodeMag, m_flExplodeRad, TRUE, 0);
UseTargets(this, TRIG_TOGGLE, 0.0f); /* delay... ignored. */
Disappear();
SetTakedamage(DAMAGE_NO);
Disappear();
}
void
@ -347,10 +353,15 @@ func_breakable::Death(void)
ScheduleThink(Explode, random(0.0f, 0.5f));
} else {
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();
SetTakedamage(DAMAGE_NO);
UseTargets(eActivator, TRIG_TOGGLE, 0.0f);
if (sndBreak)
StartSoundDef(sndBreak, CHAN_BODY, true);
}
}

View File

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

View File

@ -74,11 +74,11 @@ SurfData_ParseField(int i, int a)
g_surfdata[i].m_sndStrain = argv(1);
break;
case "break":
g_surfdata[i].m_sndRoll = argv(1);
g_surfdata[i].m_sndBreak = argv(1);
break;
case "roll":
case "rolling":
g_surfdata[i].m_sndBreak = argv(1);
g_surfdata[i].m_sndRoll = argv(1);
break;
case "fx_bulletimpact":
case "part_bulletimpact":
@ -332,6 +332,7 @@ SurfData_Init(void)
Sound_Precache(g_surfdata[i].m_sndStepLeft);
Sound_Precache(g_surfdata[i].m_sndStepRight);
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));