#include maps\mp\_utility; /* ****************************************************************************** OneShotfx: Fires an effect once. maps\_fx::OneShotfx( effectname, (x y z), predelay); Example: maps\_fx::OneShotfx(level.medFire, (-701, -18361, 148), 5); ****************************************************************************** ****************************************************************************** Loopfx: Loops an effect with a waittime. maps\_fx::loopfx( effectname, (x y z), delay_between_shots); Example: maps\_fx::loopfx(level.medFire, (-701, -18361, 148), 0.3); ****************************************************************************** ****************************************************************************** GunFireLoopfx: Simulates bursts of fire. maps\_fx::gunfireloopfx(fxId, fxPos, shotsMin, shotsMax, shotdelayMin, shotdelayMax, betweenSetsMin, betweenSetsMax) Example: maps\_fx::gunfireloopfx (level.medFire, (-701, -18361, 148), 10, 15, 0.1, 0.3, 2.5, 9); ****************************************************************************** ****************************************************************************** GrenadeExplosionfx: Creates a grenade explosion with view jitter. maps\_fx::GrenadeExplosionfx((x y z)); Example: maps\_fx::GrenadeExplosionfx( (-701, -18361, 148) ); // origin ****************************************************************************** */ /* { "origin" "-451 -14930 26" "targetname" "auto1166" "classname" "script_origin" } */ print_org(fxcommand, fxId, fxPos, waittime) { if(getcvar("debug") == "1") { println("{"); println("\"origin\" \"" + fxPos[0] + " " + fxPos[1] + " " + fxPos[2] + "\""); println("\"classname\" \"script_model\""); println("\"model\" \"xmodel/fx\""); println("\"script_fxcommand\" \"" + fxcommand + "\""); println("\"script_fxid\" \"" + fxId + "\""); println("\"script_delay\" \"" + waittime + "\""); println("}"); } } OneShotfx(fxId, fxPos, waittime, fxPos2) { level thread print_org("OneShotfx", fxId, fxPos, waittime); level thread OneShotfxthread(fxId, fxPos, waittime, fxPos2); } OneShotfxthread(fxId, fxPos, waittime, fxPos2) { wait( [[level.ex_fpstime]](0.05) ); wait( [[level.ex_fpstime]](waittime) ); if(isDefined(fxPos2)) fxPos2 = vectornormalize(fxPos2 - fxPos); if(isDefined(level._effect[fxId])) { if(isDefined(fxPos2)) playfx( level._effect[fxId], fxPos, fxPos2 ); else playfx( level._effect[fxId], fxPos); } } exploderfx(num, fxId, fxPos, waittime, fxPos2, fireFx, fireFxDelay, fireFxSound, fxSound, fxQuake, fxDamage, soundalias) { fx = spawn("script_origin", (0,0,0)); println("total ", getentarray ("script_origin","classname").size); fx.origin = fxPos; fx.angles = vectortoangles (fxPos2 - fxPos); //fx.targetname = "exploder"; fx.script_exploder = num; fx.script_fxid = fxId; fx.script_delay = waittime; fx.script_firefx = fireFx; fx.script_firedelay = fireFxDelay; fx.script_firefxsound = fireFxSound; fx.script_sound = fxSound; fx.script_earthquake = fxQuake; fx.script_damage = fxDamage; fx.script_soundalias = soundalias; forward = anglestoforward (fx.angles); forward = vectorScale(forward, 150); fx.targetPos = fxPos + forward; if(!isDefined(level._script_exploders)) level._script_exploders = []; level._script_exploders[level._script_exploders.size] = fx; maps\mp\_createfx::createfx_showOrigin(fxid, fxPos, waittime, fxpos2, "exploderfx", fx); } loopfx(fxId, fxPos, waittime, fxPos2, fxStart, fxStop, timeout) { level thread print_org ("loopfx", fxId, fxPos, waittime); level thread loopfxthread (fxId, fxPos, waittime, fxPos2, fxStart, fxStop, timeout); } loopfxthread(fxId, fxPos, waittime, fxPos2, fxStart, fxStop, timeout) { ent = undefined; if(getcvar("createfx") != "") { ent = level thread maps\mp\_createfx::createfx_showOrigin( fxId, fxPos, waittime, fxPos2, "loopfx" ); ent endon("effect deleted"); } else { ent = spawnstruct(); ent.id = fxId; ent.org = fxPos; ent.delay = waittime; ent.org2 = fxPos2; } wait( [[level.ex_fpstime]](0.05) ); if((isDefined(level.scr_sound)) && (isDefined(level.scr_sound[fxId]))) loopSound(level.scr_sound[fxId], fxPos); dist = 0; if(isDefined(fxStart)) level waittill("start fx" + fxStart); while(1) { if(isDefined(ent.org)) { if(isDefined(ent.org2)) { fxAngle = vectorNormalize (ent.org2 - ent.org); looper = playLoopedFx( level._effect[fxId], ent.delay, ent.org, dist, fxAngle ); } else looper = playLoopedFx( level._effect[fxId], ent.delay, ent.org, dist ); } else return; if(getcvar("createfx") != "") { looper thread loopfxDeletion(ent); looper thread loopfxChangeID(ent); looper thread loopfxChangeOrg(ent); looper thread loopfxChangeDelay(ent); } if(isDefined(timeout)) looper thread loopfxStop(timeout); if(isDefined(fxStop)) level waittill("stop fx" + fxStop); else return; if(isDefined(looper)) looper delete(); if(isDefined(fxStart)) level waittill("start fx" + fxStart); else return; } } loopfxChangeID(ent) { self endon("death"); ent waittill("effect id changed", change); } loopfxChangeOrg(ent) { self endon("death"); for(;;) { ent waittill("effect org changed", change); self.origin = change; } } loopfxChangeDelay(ent) { self endon("death"); ent waittill("effect delay changed", change); } loopfxDeletion(ent) { self endon("death"); ent waittill("effect deleted"); self delete(); } loopfxStop(timeout) { self endon("death"); wait( [[level.ex_fpstime]](timeout) ); self delete(); } loopSound(sound, Pos, waittime) { level thread loopSoundthread(sound, Pos, waittime); } loopSoundthread( sound, pos, waittime ) { org = spawn("script_origin", (pos)); org.origin = pos; org playLoopSound( sound ); } gunfireloopfx(fxId, fxPos, shotsMin, shotsMax, shotdelayMin, shotdelayMax, betweenSetsMin, betweenSetsMax) { thread gunfireloopfxthread(fxId, fxPos, shotsMin, shotsMax, shotdelayMin, shotdelayMax, betweenSetsMin, betweenSetsMax); } gunfireloopfxthread(fxId, fxPos, shotsMin, shotsMax, shotdelayMin, shotdelayMax, betweenSetsMin, betweenSetsMax) { level endon("stop all gunfireloopfx"); wait( [[level.ex_fpstime]](0.05) ); if(betweenSetsMax < betweenSetsMin) { temp = betweenSetsMax; betweenSetsMax = betweenSetsMin; betweenSetsMin = temp; } betweenSetsBase = betweenSetsMin; betweenSetsRange = betweenSetsMax - betweenSetsMin; if(shotdelayMax < shotdelayMin) { temp = shotdelayMax; shotdelayMax = shotdelayMin; shotdelayMin = temp; } shotdelayBase = shotdelayMin; shotdelayRange = shotdelayMax - shotdelayMin; if(shotsMax < shotsMin) { temp = shotsMax; shotsMax = shotsMin; shotsMin = temp; } shotsBase = shotsMin; shotsRange = shotsMax - shotsMin; for(;;) { shotnum = shotsBase + randomint (shotsRange); for(i = 0; i < shotnum; i++) { playfx( level._effect[fxId], fxPos ); wait( [[level.ex_fpstime]](shotdelayBase + randomfloat (shotdelayRange)) ); } wait( [[level.ex_fpstime]](betweenSetsBase + randomfloat(betweenSetsRange)) ); } } gunfireloopfxVec(fxId, fxPos, fxPos2, shotsMin, shotsMax, shotdelayMin, shotdelayMax, betweenSetsMin, betweenSetsMax) { thread gunfireloopfxVecthread(fxId, fxPos, fxPos2, shotsMin, shotsMax, shotdelayMin, shotdelayMax, betweenSetsMin, betweenSetsMax); } gunfireloopfxVecthread(fxId, fxPos, fxPos2, shotsMin, shotsMax, shotdelayMin, shotdelayMax, betweenSetsMin, betweenSetsMax) { level endon("stop all gunfireloopfx"); wait( [[level.ex_fpstime]](0.05) ); if(betweenSetsMax < betweenSetsMin) { temp = betweenSetsMax; betweenSetsMax = betweenSetsMin; betweenSetsMin = temp; } betweenSetsBase = betweenSetsMin; betweenSetsRange = betweenSetsMax - betweenSetsMin; if(shotdelayMax < shotdelayMin) { temp = shotdelayMax; shotdelayMax = shotdelayMin; shotdelayMin = temp; } shotdelayBase = shotdelayMin; shotdelayRange = shotdelayMax - shotdelayMin; if(shotsMax < shotsMin) { temp = shotsMax; shotsMax = shotsMin; shotsMin = temp; } shotsBase = shotsMin; shotsRange = shotsMax - shotsMin; fxPos2 = vectornormalize (fxPos2 - fxPos); for(;;) { shotnum = shotsBase + randomint (shotsRange); for (i=0;i