From: terencehill Date: Sat, 3 Oct 2015 20:47:15 +0000 (+0200) Subject: Merge branch 'master' into terencehill/tooltips_cleanup X-Git-Tag: xonotic-v0.8.2~1824^2~4 X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=commitdiff_plain;h=32ca966802c45c4c231210c2d8776bc3f4135dc2;hp=d666ce9b927add9e9c0b4751ca8ac7a9780ea478 Merge branch 'master' into terencehill/tooltips_cleanup --- diff --git a/effectinfo.txt b/effectinfo.txt index 2ba9a413b0..cad4b11bcf 100644 --- a/effectinfo.txt +++ b/effectinfo.txt @@ -1,9746 +1,8163 @@ -// item respawn effect -// flare particle and light -// used in qcsrc/server/bots.qc: //te_wizspike(e.origin) -// used in qcsrc/server/bots.qc: //te_wizspike(e.nearestwaypoint.wpnearestpoint) -// used in qcsrc/server/havocbot.qc: // te_wizspike(newgoal.origin) +// ********************************************** // +// ** WARNING - DO NOT MANUALLY EDIT THIS FILE ** // +// ** ** // +// ** This file is automatically generated by ** // +// ** code with the command 'dumpeffectinfo'. ** // +// ** ** // +// ** If you modify an effect, please ** // +// ** regenerate this file with that command. ** // +// ** ** // +// ********************************************** // + effect TE_WIZSPIKE -countabsolute 1 -type static -color 0x63F2EA 0x63f2EA -size 20 20 -alpha 128 128 128 -lightradius 200 -lightradiusfade 200 -lightcolor 0.4 0.9 0.9 -// cloud of particles which expand rapidly and then slow to form a ball + alpha 128 128 128 + color 0x63F2EA 0x63f2EA + countabsolute 1 + lightcolor 0.4 0.9 0.9 + lightradiusfade 200 + lightradius 200 + size 20 20 + type static effect TE_WIZSPIKE -count 50 -type static -color 0x63F2EA 0x63f2EA -size 2 2 -alpha 64 64 64 -airfriction 2 -liquidfriction 2 -originjitter 16 16 16 -velocityjitter 32 32 32 - -// laser impact -// decal -// used in qcsrc/server/w_seeker.qc: te_knightspike(org2) + airfriction 2 + alpha 64 64 64 + color 0x63F2EA 0x63f2EA + count 50 + liquidfriction 2 + originjitter 16 16 16 + size 2 2 + type static + velocityjitter 32 32 32 effect TE_KNIGHTSPIKE -countabsolute 1 -type decal -tex 47 47 -size 24 24 -alpha 256 256 0 -originjitter 16 16 16 -lightradius 200 -lightradiusfade 1000 -lightcolor 4 0.2 0.2 -// flare effect + alpha 256 256 0 + countabsolute 1 + lightcolor 4 0.2 0.2 + lightradiusfade 1000 + lightradius 200 + originjitter 16 16 16 + size 24 24 + tex 47 47 + type decal effect TE_KNIGHTSPIKE -countabsolute 1 -type static -tex 39 39 -color 0xFF2010 0xFF2010 -alpha 256 256 1024 -size 24 24 -// sparks that rapidly expand and rapidly slow down to form an interesting spherical effect + alpha 256 256 1024 + color 0xFF2010 0xFF2010 + countabsolute 1 + size 24 24 + tex 39 39 + type static effect TE_KNIGHTSPIKE -count 128 -type spark -color 0x800000 0xFF8020 -alpha 256 256 1024 -size 4 4 -//bounce 1.5 -airfriction 6 -liquidfriction 6 -//originjitter 32 32 32 -velocityjitter 256 256 256 - -// machinegun bullet impact -// bullet impact decal -// used nowhere in code + airfriction 6 + alpha 256 256 1024 + color 0x800000 0xFF8020 + count 128 + liquidfriction 6 + size 4 4 + type spark + velocityjitter 256 256 256 effect TE_SPIKE -countabsolute 1 -type decal -tex 56 59 -size 5 5 -alpha 256 256 0 -originjitter 6 6 6 -// dust/smoke drifting away from the impact + alpha 256 256 0 + countabsolute 1 + originjitter 6 6 6 + size 5 5 + tex 56 59 + type decal effect TE_SPIKE -count 4 -type smoke -tex 0 8 -color 0x101010 0x101010 -size 3 3 -sizeincrease 3 -alpha 255 255 256 -originjitter 0 0 0 -velocityjitter 8 8 8 -// dust/smoke staying at the impact + alpha 255 255 256 + color 0x101010 0x101010 + count 4 + sizeincrease 3 + size 3 3 + tex 0 8 + type smoke + velocityjitter 8 8 8 effect TE_SPIKE -count 0.5 -type smoke -tex 0 8 -color 0x505050 0x505050 -size 4 4 -sizeincrease 4 -alpha 255 255 128 -originjitter 0 0 0 -velocityjitter 0 0 0 -// bouncing sparks + alpha 255 255 128 + color 0x505050 0x505050 + count 0.500000 + sizeincrease 4 + size 4 4 + tex 0 8 + type smoke effect TE_SPIKE -count 10 -type spark -color 0x8f4333 0xfff31b -size 0.4 0.4 -alpha 0 256 256 -gravity 1 -bounce 1.5 -velocityoffset 0 0 80 -velocityjitter 64 64 64 - -// electro combo explosion -// decal -// used nowhere in code + alpha 0 256 256 + bounce 1.500000 + color 0x8f4333 0xfff31b + count 10 + gravity 1 + size 0.400000 0.400000 + type spark + velocityjitter 64 64 64 + velocityoffset 0 0 80 effect TE_SPIKEQUAD -countabsolute 1 -type decal -tex 59 59 -size 64 64 -alpha 256 256 0 -originjitter 34 34 34 -lightradius 400 -lightradiusfade 200 -lightcolor 2 2.5 3 -// flare effect + alpha 256 256 0 + countabsolute 1 + lightcolor 2 2.5 3 + lightradiusfade 200 + lightradius 400 + originjitter 34 34 34 + size 64 64 + tex 59 59 + type decal effect TE_SPIKEQUAD -countabsolute 1 -type static -tex 38 38 -color 0x80C0FF 0x80C0FF -size 48 48 -alpha 256 256 128 -// large sparks + alpha 256 256 128 + color 0x80C0FF 0x80C0FF + countabsolute 1 + size 48 48 + tex 38 38 + type static effect TE_SPIKEQUAD -count 10 -type static -color 0x2030FF 0x80C0FF -size 32 32 -alpha 256 256 256 -//gravity 1 -bounce 1.5 -airfriction 4 -liquidfriction 16 -//velocityoffset 0 0 120 -velocityjitter 512 512 512 - -// quake effect -// decal -// used nowhere in code + airfriction 4 + alpha 256 256 256 + bounce 1.500000 + color 0x2030FF 0x80C0FF + count 10 + liquidfriction 16 + size 32 32 + type static + velocityjitter 512 512 512 effect TE_SUPERSPIKE -countabsolute 1 -type decal -tex 56 59 -size 3 3 -alpha 256 256 0 -originjitter 6 6 6 -// dust/smoke drifting away from the impact + alpha 256 256 0 + countabsolute 1 + originjitter 6 6 6 + size 3 3 + tex 56 59 + type decal effect TE_SUPERSPIKE -count 4 -type smoke -tex 0 8 -color 0x101010 0x101010 -size 3 3 -sizeincrease 3 -alpha 255 255 256 -originjitter 0 0 0 -velocityjitter 8 8 8 -// dust/smoke staying at the impact + alpha 255 255 256 + color 0x101010 0x101010 + count 4 + sizeincrease 3 + size 3 3 + tex 0 8 + type smoke + velocityjitter 8 8 8 effect TE_SUPERSPIKE -count 0.5 -type smoke -tex 0 8 -color 0x505050 0x505050 -size 4 4 -sizeincrease 4 -alpha 255 255 128 -originjitter 0 0 0 -velocityjitter 0 0 0 -// sparks that disappear on impact + alpha 255 255 128 + color 0x505050 0x505050 + count 0.500000 + sizeincrease 4 + size 4 4 + tex 0 8 + type smoke effect TE_SUPERSPIKE -count 15 -type spark -color 0x8f4333 0xfff31b -size 0.4 0.4 -alpha 0 256 768 -gravity 1 -bounce -1 -velocityoffset 0 0 80 -velocityjitter 64 64 64 - -// quake effect -// decal -// used nowhere in code + alpha 0 256 768 + bounce -1 + color 0x8f4333 0xfff31b + count 15 + gravity 1 + size 0.400000 0.400000 + type spark + velocityjitter 64 64 64 + velocityoffset 0 0 80 effect TE_SUPERSPIKEQUAD -countabsolute 1 -type decal -tex 56 59 -size 3 3 -alpha 256 256 0 -originjitter 6 6 6 -lightradius 100 -lightradiusfade 500 -lightcolor 0.15 0.15 1.5 -// dust/smoke drifting away from the impact + alpha 256 256 0 + countabsolute 1 + lightcolor 0.2 0.2 1.5 + lightradiusfade 500 + lightradius 100 + originjitter 6 6 6 + size 3 3 + tex 56 59 + type decal effect TE_SUPERSPIKEQUAD -count 4 -type smoke -tex 0 8 -color 0x101010 0x101010 -size 3 3 -sizeincrease 3 -alpha 255 255 256 -originjitter 0 0 0 -velocityjitter 8 8 8 -// dust/smoke staying at the impact + alpha 255 255 256 + color 0x101010 0x101010 + count 4 + sizeincrease 3 + size 3 3 + tex 0 8 + type smoke + velocityjitter 8 8 8 effect TE_SUPERSPIKEQUAD -count 0.5 -type smoke -tex 0 8 -color 0x505050 0x505050 -size 4 4 -sizeincrease 4 -alpha 255 255 128 -originjitter 0 0 0 -velocityjitter 0 0 0 -// sparks that disappear on impact + alpha 255 255 128 + color 0x505050 0x505050 + count 0.500000 + sizeincrease 4 + size 4 4 + tex 0 8 + type smoke effect TE_SUPERSPIKEQUAD -count 15 -type spark -color 0x8f4333 0xfff31b -size 0.4 0.4 -alpha 0 256 768 -gravity 1 -bounce -1 -velocityoffset 0 0 80 -velocityjitter 64 64 64 - -// shotgun pellet impact -// decal -// used nowhere in code + alpha 0 256 768 + bounce -1 + color 0x8f4333 0xfff31b + count 15 + gravity 1 + size 0.400000 0.400000 + type spark + velocityjitter 64 64 64 + velocityoffset 0 0 80 effect TE_GUNSHOT -countabsolute 1 -type decal -tex 56 59 -size 3 3 -alpha 256 256 0 -originjitter 6 6 6 -// dust/smoke drifting away from the impact + alpha 256 256 0 + countabsolute 1 + originjitter 6 6 6 + size 3 3 + tex 56 59 + type decal effect TE_GUNSHOT -count 0.8 -type smoke -tex 0 8 -color 0x101010 0x101010 -size 3 3 -sizeincrease 3 -alpha 128 128 64 -originjitter 0 0 0 -velocityjitter 8 8 8 -// dust/smoke staying at the impact + alpha 128 128 64 + color 0x101010 0x101010 + count 0.800000 + sizeincrease 3 + size 3 3 + tex 0 8 + type smoke + velocityjitter 8 8 8 effect TE_GUNSHOT -count 0.2 -type smoke -tex 0 8 -color 0x505050 0x505050 -size 4 4 -sizeincrease 4 -alpha 128 128 64 -originjitter 0 0 0 -velocityjitter 0 0 0 -// bouncing sparks + alpha 128 128 64 + color 0x505050 0x505050 + count 0.200000 + sizeincrease 4 + size 4 4 + tex 0 8 + type smoke effect TE_GUNSHOT -count 2.5 -type spark -color 0x8f4333 0xfff31b -size 0.4 0.4 -alpha 0 64 64 -gravity 1 -bounce 1.5 -velocityoffset 0 0 80 -velocityjitter 64 64 64 - -// crylink impact effect -// decal -// used nowhere in code + alpha 0 64 64 + bounce 1.500000 + color 0x8f4333 0xfff31b + count 2.500000 + gravity 1 + size 0.400000 0.400000 + type spark + velocityjitter 64 64 64 + velocityoffset 0 0 80 effect TE_GUNSHOTQUAD -countabsolute 1 -type decal -tex 47 47 -size 8 8 -alpha 256 256 0 -originjitter 12 12 12 -//lightradius 100 -//lightradiusfade 300 -//lightcolor 0.5 0.5 0.5 -// purple flare effect + alpha 256 256 0 + countabsolute 1 + originjitter 12 12 12 + size 8 8 + tex 47 47 + type decal effect TE_GUNSHOTQUAD -countabsolute 1 -type static -tex 39 39 -color 0x504060 0x504060 -size 8 8 -alpha 256 256 512 -// purple sparks + alpha 256 256 512 + color 0x504060 0x504060 + countabsolute 1 + size 8 8 + tex 39 39 + type static effect TE_GUNSHOTQUAD -count 6 -type spark -color 0xA040C0 0xFFFFFF -size 1 1 -alpha 128 128 384 -gravity 1 -bounce 1.5 -velocityoffset 0 0 80 -velocityjitter 128 128 128 - -// mortar/hagar explosion (smaller than rocket) -// decal -// used in qcsrc/server/cl_client.qc: te_explosion(org) + alpha 128 128 384 + bounce 1.500000 + color 0xA040C0 0xFFFFFF + count 6 + gravity 1 + size 1 1 + type spark + velocityjitter 128 128 128 + velocityoffset 0 0 80 effect TE_EXPLOSION -countabsolute 1 -type decal -tex 8 16 -size 48 48 -alpha 256 256 0 -originjitter 40 40 40 -lightradius 150 -lightradiusfade 300 -lightcolor 4 2 0.5 -// flare effect + alpha 256 256 0 + countabsolute 1 + lightcolor 4 2 0.5 + lightradiusfade 300 + lightradius 150 + originjitter 40 40 40 + size 48 48 + tex 8 16 + type decal effect TE_EXPLOSION -countabsolute 1 -type static -tex 35 37 -color 0x404040 0x404040 -size 48 48 -alpha 192 192 64 -// fire effect which expands then slows + alpha 192 192 64 + color 0x404040 0x404040 + countabsolute 1 + size 48 48 + tex 35 37 + type static effect TE_EXPLOSION -notunderwater -count 64 -type static -tex 48 55 -color 0x902010 0xFFD080 -size 16 16 -alpha 128 128 256 -bounce 1.5 -airfriction 4 -liquidfriction 4 -originjitter 8 8 8 -velocityjitter 256 256 256 -// underwater bubbles + airfriction 4 + alpha 128 128 256 + bounce 1.500000 + color 0x902010 0xFFD080 + count 64 + liquidfriction 4 + notunderwater + originjitter 8 8 8 + size 16 16 + tex 48 55 + type static + velocityjitter 256 256 256 effect TE_EXPLOSION -underwater -count 16 -type bubble -tex 62 62 -color 0x404040 0x808080 -size 3 3 -alpha 128 256 64 -gravity -0.125 -bounce 1.5 -liquidfriction 0.25 -originjitter 16 16 16 -velocityjitter 96 96 96 -// bouncing sparks + alpha 128 256 64 + bounce 1.500000 + color 0x404040 0x808080 + count 16 + gravity -0.125000 + liquidfriction 0.250000 + originjitter 16 16 16 + size 3 3 + tex 62 62 + type bubble + underwater + velocityjitter 96 96 96 effect TE_EXPLOSION -notunderwater -count 16 -type spark -color 0x903010 0xFFD030 -size 2 2 -alpha 256 256 384 -gravity 1 -airfriction 0.2 -bounce 1.5 -liquidfriction 0.8 -velocityoffset 0 0 80 -velocityjitter 256 256 256 - -// quake effect -// decal -// used nowhere in code + airfriction 0.200000 + alpha 256 256 384 + bounce 1.500000 + color 0x903010 0xFFD030 + count 16 + gravity 1 + liquidfriction 0.800000 + notunderwater + size 2 2 + type spark + velocityjitter 256 256 256 + velocityoffset 0 0 80 effect TE_EXPLOSIONQUAD -countabsolute 1 -type decal -tex 8 16 -size 48 48 -alpha 256 256 0 -originjitter 40 40 40 -lightradius 350 -lightradiusfade 700 -lightcolor 4 2 8 -// smoke cloud + alpha 256 256 0 + countabsolute 1 + lightcolor 4 2 8 + lightradiusfade 700 + lightradius 350 + originjitter 40 40 40 + size 48 48 + tex 8 16 + type decal effect TE_EXPLOSIONQUAD -notunderwater -count 16 -type smoke -color 0x202020 0x404040 -tex 0 8 -size 12 12 -alpha 32 32 64 -velocityjitter 48 48 48 -// underwater bubbles + alpha 32 32 64 + color 0x202020 0x404040 + count 16 + notunderwater + size 12 12 + tex 0 8 + type smoke + velocityjitter 48 48 48 effect TE_EXPLOSIONQUAD -underwater -count 16 -type bubble -tex 62 62 -color 0x404040 0x808080 -size 3 3 -alpha 128 256 64 -gravity -0.125 -bounce 1.5 -liquidfriction 0.25 -originjitter 16 16 16 -velocityjitter 96 96 96 -// sparks which go through walls + alpha 128 256 64 + bounce 1.500000 + color 0x404040 0x808080 + count 16 + gravity -0.125000 + liquidfriction 0.250000 + originjitter 16 16 16 + size 3 3 + tex 62 62 + type bubble + underwater + velocityjitter 96 96 96 effect TE_EXPLOSIONQUAD -notunderwater -count 64 -type spark -color 0x903010 0xFFD030 -size 1 1 -alpha 0 256 512 -gravity 1 -airfriction 0.2 -liquidfriction 0.8 -velocityoffset 0 0 80 -velocityjitter 256 256 256 - -// quake effect -// decal -// used in qcsrc/server/keyhunt.qc: te_tarexplosion(lostkey.origin) + airfriction 0.200000 + alpha 0 256 512 + color 0x903010 0xFFD030 + count 64 + gravity 1 + liquidfriction 0.800000 + notunderwater + size 1 1 + type spark + velocityjitter 256 256 256 + velocityoffset 0 0 80 effect TE_TAREXPLOSION -countabsolute 1 -type decal -tex 8 16 -size 48 48 -alpha 256 256 0 -originjitter 40 40 40 -lightradius 600 -lightradiusfade 1200 -lightcolor 1.6 0.8 2 -// smoke cloud + alpha 256 256 0 + countabsolute 1 + lightcolor 1.6 0.8 2 + lightradiusfade 1200 + lightradius 600 + originjitter 40 40 40 + size 48 48 + tex 8 16 + type decal effect TE_TAREXPLOSION -notunderwater -count 16 -type smoke -color 0x202020 0x404040 -tex 0 8 -size 12 12 -alpha 32 32 64 -velocityjitter 48 48 48 -// underwater bubbles + alpha 32 32 64 + color 0x202020 0x404040 + count 16 + notunderwater + size 12 12 + tex 0 8 + type smoke + velocityjitter 48 48 48 effect TE_TAREXPLOSION -underwater -count 16 -type bubble -tex 62 62 -color 0x404040 0x808080 -size 3 3 -alpha 128 256 64 -gravity -0.125 -bounce 1.5 -liquidfriction 0.25 -originjitter 16 16 16 -velocityjitter 96 96 96 -// sparks which go through walls + alpha 128 256 64 + bounce 1.500000 + color 0x404040 0x808080 + count 16 + gravity -0.125000 + liquidfriction 0.250000 + originjitter 16 16 16 + size 3 3 + tex 62 62 + type bubble + underwater + velocityjitter 96 96 96 effect TE_TAREXPLOSION -notunderwater -count 64 -type spark -color 0x903010 0xFFD030 -size 1 1 -alpha 0 256 512 -gravity 1 -airfriction 0.2 -liquidfriction 0.8 -velocityoffset 0 0 80 -velocityjitter 256 256 256 - -// bloody impact effect indicating damage -// used nowhere in code + airfriction 0.200000 + alpha 0 256 512 + color 0x903010 0xFFD030 + count 64 + gravity 1 + liquidfriction 0.800000 + notunderwater + size 1 1 + type spark + velocityjitter 256 256 256 + velocityoffset 0 0 80 effect TE_BLOOD -count 0.167 -type blood -tex 24 32 -size 8 8 -alpha 256 256 64 -bounce -1 -airfriction 1 -liquidfriction 4 -velocityjitter 64 64 64 -velocitymultiplier 1 -staincolor 0x808080 0x808080 -staintex 16 24 - - - -// sparks (quake effect) -// used in qcsrc/server/antilag.qc: te_spark(antilag_takebackorigin(e, time - e.antilag_debug), '0 0 0', 32) -// used in qcsrc/server/g_triggers.qc: self.mdl = "TE_SPARK" + airfriction 1 + alpha 256 256 64 + bounce -1 + count 0.167000 + liquidfriction 4 + size 8 8 + staincolor 0x808080 0x808080 + staintex 16 24 + tex 24 32 + type blood + velocityjitter 64 64 64 + velocitymultiplier 1 effect TE_SPARK -count 0.5 -type spark -tex 40 40 -color 0x8f4333 0xfff31b -size 0.4 0.6 -alpha 64 256 768 -gravity 1 -bounce -1 -velocityoffset 0 0 80 -velocityjitter 64 64 64 -velocitymultiplier 1 - -// nex impact -// decal -// used in qcsrc/server/bots.qc: te_plasmaburn(org) + alpha 64 256 768 + bounce -1 + color 0x8f4333 0xfff31b + count 0.500000 + gravity 1 + size 0.400000 0.600000 + tex 40 40 + type spark + velocityjitter 64 64 64 + velocitymultiplier 1 + velocityoffset 0 0 80 effect TE_PLASMABURN -countabsolute 1 -type decal -tex 47 47 -size 24 24 -alpha 256 256 0 -originjitter 16 16 16 -lightradius 200 -lightradiusfade 400 -lightcolor 1 1 1 -// flare effect + alpha 256 256 0 + countabsolute 1 + lightcolor 1 1 1 + lightradiusfade 400 + lightradius 200 + originjitter 16 16 16 + size 24 24 + tex 47 47 + type decal effect TE_PLASMABURN -countabsolute 1 -type static -tex 37 37 -color 0x80C0FF 0x80C0FF -size 8 8 -alpha 256 256 512 -// small sparks which form a sphere as they slow down + alpha 256 256 512 + color 0x80C0FF 0x80C0FF + countabsolute 1 + size 8 8 + tex 37 37 + type static effect TE_PLASMABURN -count 128 -type spark -color 0x2030FF 0x80C0FF -size 1 2 -alpha 256 256 1024 -bounce 2 -airfriction 8 -liquidfriction 8 -velocityjitter 128 128 128 - -// quake effect -// used in qcsrc/server/bots.qc: //te_smallflash((e.absmin + e.absmax) * 0.5) -// used in qcsrc/server/bots.qc: //te_smallflash((e.absmin + e.absmax) * 0.5) + airfriction 8 + alpha 256 256 1024 + bounce 2 + color 0x2030FF 0x80C0FF + count 128 + liquidfriction 8 + size 1 2 + type spark + velocityjitter 128 128 128 effect TE_SMALLFLASH -lightradius 200 -lightradiusfade 1000 -lightcolor 2 2 2 - -// quake effect -// used nowhere in code + lightcolor 2 2 2 + lightradiusfade 1000 + lightradius 200 effect TE_FLAMEJET -count 0.5 -type smoke -color 0x6f0f00 0xe3974f -size 4 4 -alpha 64 128 384 -gravity -1 -bounce 1.1 -airfriction 1 -liquidfriction 4 -velocityjitter 128 128 128 -velocitymultiplier 1 - -// quake effect -// used nowhere in code + airfriction 1 + alpha 64 128 384 + bounce 1.100000 + color 0x6f0f00 0xe3974f + count 0.500000 + gravity -1 + liquidfriction 4 + size 4 4 + type smoke + velocityjitter 128 128 128 + velocitymultiplier 1 effect TE_LAVASPLASH -count 32 -type alphastatic -color 0x6f0f00 0xe3974f -size 12 12 -alpha 256 256 256 -gravity 0.05 -originoffset 0 0 32 -originjitter 128 128 32 -velocityoffset 0 0 256 -velocityjitter 128 128 0 - -// player teleport effect -// used nowhere in code + alpha 256 256 256 + color 0x6f0f00 0xe3974f + count 32 + gravity 0.050000 + originjitter 128 128 32 + originoffset 0 0 32 + size 12 12 + type alphastatic + velocityjitter 128 128 0 + velocityoffset 0 0 256 effect TE_TELEPORT -count 56 -type static -color 0xA0A0A0 0xFFFFFF -size 10 10 -alpha 64 128 256 -airfriction 1 -liquidfriction 4 -originoffset 0 0 28 -originjitter 16 16 28 -velocityjitter 0 0 256 - -// nex beam -// used in qcsrc/server/w_minstanex.qc: trailparticles(world, particleeffectnum("TE_TEI_G3"), w_shotorg, trace_endpos) -// used in qcsrc/client/particles.qc: trailparticles(world, particleeffectnum("TE_TEI_G3"), shotorg, endpos) + airfriction 1 + alpha 64 128 256 + color 0xA0A0A0 0xFFFFFF + count 56 + liquidfriction 4 + originjitter 16 16 28 + originoffset 0 0 28 + size 10 10 + type static + velocityjitter 0 0 256 effect TE_TEI_G3 -countabsolute 1 -type beam -tex 200 200 -color 0xFFFFFF 0xFFFFFF -size 4 4 -alpha 128 128 256 -// experimental + alpha 128 128 256 + color 0xFFFFFF 0xFFFFFF + countabsolute 1 + size 4 4 + tex 200 200 + type beam effect TE_TEI_G3 -trailspacing 4 -type static -color 0x202020 0x404040 -size 1 1 -alpha 256 256 512 -airfriction -4 -//liquidfriction -4 -velocityjitter 8 8 8 -type smoke - -// smoke effect -// used nowhere in code + airfriction -4 + alpha 256 256 512 + color 0x202020 0x404040 + size 1 1 + trailspacing 4 + type smoke + velocityjitter 8 8 8 effect TE_TEI_SMOKE -count 0.167 -type smoke -color 0x202020 0x404040 -tex 0 8 -size 5 5 -alpha 256 256 512 -originjitter 1.5 1.5 1.5 -velocityjitter 6 6 6 -velocitymultiplier 1 - -// rocket explosion (bigger than mortar and hagar) -// decal -// used nowhere in code + alpha 256 256 512 + color 0x202020 0x404040 + count 0.167000 + originjitter 1.5 1.5 1.5 + size 5 5 + tex 0 8 + type smoke + velocityjitter 6 6 6 + velocitymultiplier 1 effect TE_TEI_BIGEXPLOSION -countabsolute 1 -type decal -tex 8 16 -size 72 72 -alpha 256 256 0 -originjitter 40 40 40 -lightradius 500 -lightradiusfade 500 -lightcolor 4 2 0.5 -// flare effect + alpha 256 256 0 + countabsolute 1 + lightcolor 4 2 0.5 + lightradiusfade 500 + lightradius 500 + originjitter 40 40 40 + size 72 72 + tex 8 16 + type decal effect TE_TEI_BIGEXPLOSION -countabsolute 1 -type static -tex 35 37 -color 0x404040 0x404040 -size 72 72 -alpha 192 192 64 -// fire effect + alpha 192 192 64 + color 0x404040 0x404040 + countabsolute 1 + size 72 72 + tex 35 37 + type static effect TE_TEI_BIGEXPLOSION -notunderwater -count 128 -type static -tex 48 55 -color 0x902010 0xFFD080 -size 16 16 -alpha 128 128 256 -bounce 1.5 -airfriction 4 -liquidfriction 4 -originjitter 8 8 8 -velocityjitter 512 512 512 -// underwater bubbles + airfriction 4 + alpha 128 128 256 + bounce 1.500000 + color 0x902010 0xFFD080 + count 128 + liquidfriction 4 + notunderwater + originjitter 8 8 8 + size 16 16 + tex 48 55 + type static + velocityjitter 512 512 512 effect TE_TEI_BIGEXPLOSION -underwater -count 32 -type bubble -tex 62 62 -color 0x404040 0x808080 -size 3 3 -alpha 128 256 64 -gravity -0.125 -bounce 1.5 -liquidfriction 0.25 -originjitter 16 16 16 -velocityjitter 144 144 144 -// bouncing sparks + alpha 128 256 64 + bounce 1.500000 + color 0x404040 0x808080 + count 32 + gravity -0.125000 + liquidfriction 0.250000 + originjitter 16 16 16 + size 3 3 + tex 62 62 + type bubble + underwater + velocityjitter 144 144 144 effect TE_TEI_BIGEXPLOSION -notunderwater -count 64 -type spark -color 0x903010 0xFFD030 -size 2 2 -alpha 256 256 384 -gravity 1 -airfriction 0.2 -bounce 1.5 -liquidfriction 0.8 -velocityoffset 0 0 80 -velocityjitter 384 384 384 - -// electro explosion -// decal -// used nowhere in code + airfriction 0.200000 + alpha 256 256 384 + bounce 1.500000 + color 0x903010 0xFFD030 + count 64 + gravity 1 + liquidfriction 0.800000 + notunderwater + size 2 2 + type spark + velocityjitter 384 384 384 + velocityoffset 0 0 80 effect TE_TEI_PLASMAHIT -countabsolute 1 -type decal -tex 59 59 -size 32 32 -alpha 256 256 0 -originjitter 20 20 20 -lightradius 200 -lightradiusfade 600 -lightcolor 2.4 4.8 8 -// flare effect + alpha 256 256 0 + countabsolute 1 + lightcolor 2.4 4.8 8 + lightradiusfade 600 + lightradius 200 + originjitter 20 20 20 + size 32 32 + tex 59 59 + type decal effect TE_TEI_PLASMAHIT -countabsolute 1 -type static -tex 38 38 -color 0x80C0FF 0x80C0FF -size 32 32 -alpha 256 256 512 -// cloud of bouncing sparks + alpha 256 256 512 + color 0x80C0FF 0x80C0FF + countabsolute 1 + size 32 32 + tex 38 38 + type static effect TE_TEI_PLASMAHIT -count 0.5 -type spark -color 0x2030FF 0x80C0FF -size 2 4 -alpha 256 256 1024 -//gravity 1 -bounce 1.5 -//velocityoffset 0 0 120 -velocityjitter 512 512 512 - - - - - - - - - -////////////////////////////////////////////////// -// New effects in 2.4 -////////////////////////////////////////////////// - - - -// bloody impact effect indicating damage -// used in qcsrc/client/gibs.qc: pointparticles(particleeffectnum("blood"), self.origin + '0 0 1', '0 0 30', 10) -// used in qcsrc/client/gibs.qc: pointparticles(particleeffectnum("blood"), org, vel, amount * 16) + alpha 256 256 1024 + bounce 1.500000 + color 0x2030FF 0x80C0FF + count 0.500000 + size 2 4 + type spark + velocityjitter 512 512 512 effect blood -count 0.4 -type spark -blend invmod -tex 24 32 -size 5 11 -alpha 1560 2560 7000 -color 0xA8FFFF 0xA8FFFFF -bounce -1 -airfriction 0.4 -velocityjitter 99 99 55 -//velocitymultiplier 2 -staincolor 0x808080 0x808080 -staintex 16 24 -stainsize 1 2 -stretchfactor 20 -sizeincrease 20 -//blood mist + airfriction 0.400000 + alpha 1560 2560 7000 + blend invmod + bounce -1 + color 0xA8FFFF 0xA8FFFFF + count 0.400000 + sizeincrease 20 + size 5 11 + staincolor 0x808080 0x808080 + stainsize 1 2 + staintex 16 24 + stretchfactor 20 + tex 24 32 + type spark + velocityjitter 99 99 55 effect blood -countabsolute 1 -type alphastatic -blend invmod -tex 24 32 -size 25 30 -sizeincrease 20 -alpha 100 256 400 -color 0x000000 0x420000 -originjitter 11 11 11 - - -// player teleport effect -// used in qcsrc/server/t_teleporters.qc: pointparticles(particleeffectnum("teleport"), player.origin, '0 0 0', 1) -// used in qcsrc/server/t_teleporters.qc: pointparticles(particleeffectnum("teleport"), to + v_forward * 32, '0 0 0', 1) + alpha 100 256 400 + blend invmod + color 0x000000 0x420000 + countabsolute 1 + originjitter 11 11 11 + sizeincrease 20 + size 25 30 + tex 24 32 + type alphastatic effect teleport -count 500 -type spark -tex 64 64 -color 0x807aff 0x4463d5 -size 1 1 -alpha 0 256 100 -stretchfactor 2 -//gravity 1 -bounce 1.5 -originjitter 1 1 1 -velocityjitter 1000 1000 1500 -velocitymultiplier 0.5 -airfriction 2 -stretchfactor 0.6 + airfriction 2 + alpha 0 256 100 + bounce 1.500000 + color 0x807aff 0x4463d5 + count 500 + originjitter 1 1 1 + size 1 1 + stretchfactor 0.600000 + tex 64 64 + type spark + velocityjitter 1000 1000 1500 + velocitymultiplier 0.500000 effect teleport -countabsolute 1 -type smoke -tex 65 65 -size 150 150 -alpha 190 190 180 -sizeincrease -80 -color 0x807aff 0x4463d5 - - - -// normal super gory blood trail (used by gibs) -// used in qcsrc/client/gibs.qc: trailparticles(self, particleeffectnum("TR_BLOOD"), oldorg, self.origin) + alpha 190 190 180 + color 0x807aff 0x4463d5 + countabsolute 1 + sizeincrease -80 + size 150 150 + tex 65 65 + type smoke effect TR_BLOOD -trailspacing 20 -type spark -blend invmod -color 0xA8FFFF 0xA8FFFF -tex 24 32 -size 4 19 -alpha 384 984 1492 -bounce -1 -gravity 0.4 -airfriction -2 -liquidfriction 1 -velocityjitter 64 64 64 -velocitymultiplier -0.1 -staincolor 0x808080 0x808080 -staintex 16 24 -stainsize 1 2 -stretchfactor 7 -sizeincrease -5 -// splash around gib + airfriction -2 + alpha 384 984 1492 + blend invmod + bounce -1 + color 0xA8FFFF 0xA8FFFF + gravity 0.400000 + liquidfriction 1 + sizeincrease -5 + size 4 19 + staincolor 0x808080 0x808080 + stainsize 1 2 + staintex 16 24 + stretchfactor 7 + tex 24 32 + trailspacing 20 + type spark + velocityjitter 64 64 64 + velocitymultiplier -0.100000 effect TR_BLOOD -trailspacing 42 -type blood -color 0xA8FFFF 0xA8FFFF -tex 24 32 -size 4 6 -alpha 684 684 7492 -sizeincrease 500 - -// thinner blood trail (used by quake zombies) -// used in qcsrc/client/gibs.qc: trailparticles(self, particleeffectnum("TR_SLIGHTBLOOD"), oldorg, self.origin) + alpha 684 684 7492 + color 0xA8FFFF 0xA8FFFF + sizeincrease 500 + size 4 6 + tex 24 32 + trailspacing 42 + type blood effect TR_SLIGHTBLOOD -trailspacing 64 -type blood -color 0xA8FFFF 0xA8FFFF -tex 24 32 -size 8 8 -alpha 384 384 192 -bounce -1 -airfriction 1 -liquidfriction 4 -velocityjitter 64 64 64 -velocitymultiplier 0.5 -staincolor 0x808080 0x808080 -staintex 16 24 - - - -// func_stardust effect, used in some maps to indicate teleporters -// used in qcsrc/server/g_triggers.qc: self.effects = EF_STARDUST -// used in qcsrc/server/portals.qc: portal.effects = EF_STARDUST | EF_BLUE + airfriction 1 + alpha 384 384 192 + bounce -1 + color 0xA8FFFF 0xA8FFFF + liquidfriction 4 + size 8 8 + staincolor 0x808080 0x808080 + staintex 16 24 + tex 24 32 + trailspacing 64 + type blood + velocityjitter 64 64 64 + velocitymultiplier 0.500000 effect EF_STARDUST -count 37.5 -type static -color 0xfff368 0xfff368 -size 1.0 2.0 -alpha 64 128 128 -gravity -0.1 -airfriction 0.2 -liquidfriction 0.8 -originjitter 16 16 64 -velocityjitter 32 32 0 -//lightradius 200 -//lighttime 0 -//lightcolor 0.4 0.9 0.9 - -// flare particle and light -// used in qcsrc/server/t_items.qc: //pointparticles(particleeffectnum("item_respawn"), self.origin + self.mins_z * '0 0 1' + '0 0 48', '0 0 0', 1) -// used in qcsrc/server/t_items.qc: pointparticles(particleeffectnum("item_respawn"), self.origin + 0.5 * (self.mins + self.maxs), '0 0 0', 1) + airfriction 0.200000 + alpha 64 128 128 + color 0xfff368 0xfff368 + count 37.500000 + gravity -0.100000 + liquidfriction 0.800000 + originjitter 16 16 64 + size 1 2 + type static + velocityjitter 32 32 0 effect item_respawn -countabsolute 1 -type static -color 0x63F2EA 0x63f2EA -size 32 32 -alpha 128 128 128 -// cloud of particles which expand rapidly and then slow to form a ball + alpha 128 128 128 + color 0x63F2EA 0x63f2EA + countabsolute 1 + size 32 32 + type static effect item_respawn -count 128 -type spark -tex 41 41 -color 0x63F2EA 0x63f2EA -size 2 2 -alpha 256 256 1280 -//originjitter 24 24 24 -velocityjitter 256 256 256 - - - -// used in qcsrc/server/t_jumppads.qc: pointparticles(particleeffectnum("jumppad_activate"), other.origin, other.velocity, 1) + alpha 256 256 1280 + color 0x63F2EA 0x63f2EA + count 128 + size 2 2 + tex 41 41 + type spark + velocityjitter 256 256 256 effect jumppad_activate -lightradius 200 -lightradiusfade 2000 -lightcolor 2 2 2 - - - -// used in qcsrc/server/w_hlac.qc: pointparticles(particleeffectnum("laser_muzzleflash"), w_shotorg, w_shotdir * 1000, 1) -// used in qcsrc/server/w_hlac.qc: pointparticles(particleeffectnum("laser_muzzleflash"), w_shotorg, w_shotdir * 1000, 1) -// used in qcsrc/server/w_laser.qc: pointparticles(particleeffectnum("laser_muzzleflash"), w_shotorg, w_shotdir * 1000, 1) + lightcolor 2 2 2 + lightradiusfade 2000 + lightradius 200 effect laser_muzzleflash -// glow and light -countabsolute 1 -type smoke -color 0xcc0000 0xff0000 -tex 65 65 -size 10 15 -alpha 256 512 6280 -airfriction 10 -sizeincrease -100 -stretchfactor 2 -lightradius 200 -lightradiusfade 2000 -lightcolor 3 0.1 0.1 -// electricity + airfriction 10 + alpha 256 512 6280 + color 0xcc0000 0xff0000 + countabsolute 1 + lightcolor 3 0.1 0.1 + lightradiusfade 2000 + lightradius 200 + sizeincrease -100 + size 10 15 + stretchfactor 2 + tex 65 65 + type smoke effect laser_muzzleflash -count 3 -type spark -color 0xb44215 0xff0000 -tex 43 43 -size 5 7 -alpha 256 512 6280 -airfriction 10 -originjitter 2 2 2 -velocityjitter 150 150 150 -velocitymultiplier 0.2 -sizeincrease -100 -stretchfactor 2.3 -rotate -180 180 4000 -4000 -// fire + airfriction 10 + alpha 256 512 6280 + color 0xb44215 0xff0000 + count 3 + originjitter 2 2 2 + rotate -180 180 4000 -4000 + sizeincrease -100 + size 5 7 + stretchfactor 2.300000 + tex 43 43 + type spark + velocityjitter 150 150 150 + velocitymultiplier 0.200000 effect laser_muzzleflash -count 6 -type spark -color 0xff4200 0xff0000 -tex 8 15 -size 7 9 -alpha 256 512 6280 -airfriction 12 -originjitter 2 2 2 -velocityjitter 100 100 100 -velocitymultiplier 0.2 -sizeincrease -100 -stretchfactor 2 - - -// decal -// used in qcsrc/client/damage.qc: pointparticles(particleeffectnum("laser_impact"), org2, backoff * 1000, 1) -// used in qcsrc/client/damage.qc: pointparticles(particleeffectnum("laser_impact"), org2, backoff * 1000, 1) + airfriction 12 + alpha 256 512 6280 + color 0xff4200 0xff0000 + count 6 + originjitter 2 2 2 + sizeincrease -100 + size 7 9 + stretchfactor 2 + tex 8 15 + type spark + velocityjitter 100 100 100 + velocitymultiplier 0.200000 effect laser_impact -countabsolute 1 -type decal -tex 47 47 -size 24 24 -alpha 256 256 0 -originjitter 14 14 14 -lightradius 200 -lightradiusfade 500 -lightcolor 8 0.4 0.4 -// flare effect + alpha 256 256 0 + countabsolute 1 + lightcolor 8 0.4 0.4 + lightradiusfade 500 + lightradius 200 + originjitter 14 14 14 + size 24 24 + tex 47 47 + type decal effect laser_impact -countabsolute 1 -type static -tex 39 39 -color 0xFF2010 0xFF2010 -alpha 256 256 1024 -size 24 24 -// sparks that rapidly expand and rapidly slow down to form an interesting spherical effect + alpha 256 256 1024 + color 0xFF2010 0xFF2010 + countabsolute 1 + size 24 24 + tex 39 39 + type static effect laser_impact -count 128 -type spark -color 0x800000 0xFF8020 -alpha 256 256 1024 -size 4 4 -//bounce 1.5 -airfriction 6 -liquidfriction 6 -//originjitter 32 32 32 -velocityjitter 256 256 256 + airfriction 6 + alpha 256 256 1024 + color 0x800000 0xFF8020 + count 128 + liquidfriction 6 + size 4 4 + type spark + velocityjitter 256 256 256 effect laser_impact -count 4 -type smoke -tex 48 55 -color 0x800000 0xFF8020 -size 12 12 -alpha 128 256 256 -originjitter 1 1 1 -velocitymultiplier 0.01 -velocityjitter 16 16 16 -sizeincrease 6 - - - -// used in qcsrc/server/w_campingrifle.qc: pointparticles(particleeffectnum("shotgun_muzzleflash"), w_shotorg, w_shotdir * 2000, 1) -// used in qcsrc/server/w_shotgun.qc: pointparticles(particleeffectnum("shotgun_muzzleflash"), w_shotorg, w_shotdir * 1000, cvar("g_balance_shotgun_primary_ammo")) -// used in qcsrc/server/w_shotgun.qc: pointparticles(particleeffectnum("shotgun_muzzleflash"), w_shotorg, w_shotdir * 1000, cvar("g_balance_shotgun_secondary_ammo")) -effect shotgun_muzzleflash -count 1.5 -type smoke -color 0x202020 0x404040 -tex 0 8 -size 5 5 -alpha 256 256 512 -originjitter 1.5 1.5 1.5 -velocityjitter 6 6 6 -velocitymultiplier 0.01 -lightradius 200 -lightradiusfade 2000 -lightcolor 2 1.5 0.2 -sizeincrease 12 -velocitymultiplier 0.05 + alpha 128 256 256 + color 0x800000 0xFF8020 + count 4 + originjitter 1 1 1 + sizeincrease 6 + size 12 12 + tex 48 55 + type smoke + velocityjitter 16 16 16 + velocitymultiplier 0.010000 effect shotgun_muzzleflash -count 16 -type spark -tex 48 55 -color 0xffdb96 0xff5400 -size 10 20 -alpha 0 128 1024 -originjitter 1 1 1 -velocityjitter 100 100 100 -airfriction 5 -stretchfactor 2.5 -velocitymultiplier 0.5 - -// shotgun pellet impact -// decal -// used in qcsrc/client/damage.qc: pointparticles(particleeffectnum("shotgun_impact"), org2, backoff * 1000, 1) + alpha 256 256 512 + color 0x202020 0x404040 + count 1.500000 + lightcolor 2 1.5 0.2 + lightradiusfade 2000 + lightradius 200 + originjitter 1.5 1.5 1.5 + sizeincrease 12 + size 5 5 + tex 0 8 + type smoke + velocityjitter 6 6 6 + velocitymultiplier 0.050000 +effect shotgun_muzzleflash + airfriction 5 + alpha 0 128 1024 + color 0xffdb96 0xff5400 + count 16 + originjitter 1 1 1 + size 10 20 + stretchfactor 2.500000 + tex 48 55 + type spark + velocityjitter 100 100 100 + velocitymultiplier 0.500000 effect shotgun_impact -countabsolute 1 -type decal -tex 56 59 -size 5 8 -alpha 256 256 0 -originjitter 10 10 10 -//lightradius 30 -//lightradiusfade 90 -//lightcolor 1 1 1 -// dust/smoke drifting away from the impact + alpha 256 256 0 + countabsolute 1 + originjitter 10 10 10 + size 5 8 + tex 56 59 + type decal effect shotgun_impact -type alphastatic -notunderwater -tex 0 8 -count 1 -size 10 20 -sizeincrease 25 -alpha 300 550 756 -velocityjitter 150 150 150 -velocitymultiplier 0.2 -airfriction 5 -color 0x473a37 0x0b0a07 -rotate 0 360 -50 50 -// dust/smoke staying at the impact + airfriction 5 + alpha 300 550 756 + color 0x473a37 0x0b0a07 + count 1 + notunderwater + rotate 0 360 -50 50 + sizeincrease 25 + size 10 20 + tex 0 8 + type alphastatic + velocityjitter 150 150 150 + velocitymultiplier 0.200000 effect shotgun_impact -type alphastatic -notunderwater -tex 36 36 -count 0.2 -size 10 11 -sizeincrease 74 -alpha 200 350 500 -velocityjitter 11 11 11 -airfriction 5 -color 0x201d1a 0x000000 -bounce 6 -velocitymultiplier 0.03 -rotate 0 360 -50 50 -// sparks + airfriction 5 + alpha 200 350 500 + bounce 6 + color 0x201d1a 0x000000 + count 0.200000 + notunderwater + rotate 0 360 -50 50 + sizeincrease 74 + size 10 11 + tex 36 36 + type alphastatic + velocityjitter 11 11 11 + velocitymultiplier 0.030000 effect shotgun_impact -notunderwater -count 0.5 -type spark -tex 40 40 -color 0xFDFFD9 0xFDFFD9 -size 0.6 0.6 -alpha 0 356 268 -gravity 1 -bounce 1.5 -airfriction 1.1 -originjitter 1 1 1 -velocityjitter 200 200 200 -velocitymultiplier 0.2 - - -// used in qcsrc/server/w_uzi.qc: pointparticles(particleeffectnum("uzi_muzzleflash"), w_shotorg, w_shotdir * 1000, 1) + airfriction 1.100000 + alpha 0 356 268 + bounce 1.500000 + color 0xFDFFD9 0xFDFFD9 + count 0.500000 + gravity 1 + notunderwater + originjitter 1 1 1 + size 0.600000 0.600000 + tex 40 40 + type spark + velocityjitter 200 200 200 + velocitymultiplier 0.200000 effect uzi_muzzleflash -count 1 -type static -color 0x202020 0x404040 -tex 0 8 -size 5 5 -alpha 256 256 512 -originjitter 1.5 1.5 1.5 -velocityjitter 1 1 1 -velocitymultiplier 0.03 -lightradius 200 -lightradiusfade 2000 -lightcolor 2 1.5 0.2 -gravity -0.1 + alpha 256 256 512 + color 0x202020 0x404040 + count 1 + gravity -0.100000 + lightcolor 2 1.5 0.2 + lightradiusfade 2000 + lightradius 200 + originjitter 1.5 1.5 1.5 + size 5 5 + tex 0 8 + type static + velocityjitter 1 1 1 + velocitymultiplier 0.030000 effect uzi_muzzleflash -count 3 -type spark -tex 40 40 -color 0xff9c00 0xffd200 -size 0.3 0.4 -alpha 0 256 6000 -originjitter 1 1 1 -velocityjitter 555 555 555 -velocitymultiplier 3 -stretchfactor 0.15 -airfriction 12 - - -// used in qcsrc/server/cl_client.qc: //pointparticles(particleeffectnum("machinegun_impact"), self.origin + self.view_ofs + '0 0 7', '0 0 0', 1) -// used in qcsrc/client/damage.qc: pointparticles(particleeffectnum("machinegun_impact"), org2, backoff * 1000, 1) -// used in qcsrc/client/damage.qc: pointparticles(particleeffectnum("machinegun_impact"), org2, backoff * 1000, 1) -// decal + airfriction 12 + alpha 0 256 6000 + color 0xff9c00 0xffd200 + count 3 + originjitter 1 1 1 + size 0.300000 0.400000 + stretchfactor 0.150000 + tex 40 40 + type spark + velocityjitter 555 555 555 + velocitymultiplier 3 effect machinegun_impact -countabsolute 1 -type decal -tex 56 59 -size 5 5 -alpha 256 256 0 -originjitter 10 10 10 -lightradius 80 -lightradiusfade 800 -lightcolor 6 3.6 0.6 -// dust/smoke drifting away from the impact + alpha 256 256 0 + countabsolute 1 + lightcolor 6 3.6 0.6 + lightradiusfade 800 + lightradius 80 + originjitter 10 10 10 + size 5 5 + tex 56 59 + type decal effect machinegun_impact -type alphastatic -notunderwater -tex 0 8 -count 1.5 -size 10 20 -sizeincrease 15 -alpha 300 550 456 -velocityjitter 150 150 150 -velocitymultiplier 0.1 -airfriction 5 -color 0x473a37 0x0b0a07 -rotate 0 360 -50 50 -// dust/smoke staying at the impact + airfriction 5 + alpha 300 550 456 + color 0x473a37 0x0b0a07 + count 1.500000 + notunderwater + rotate 0 360 -50 50 + sizeincrease 15 + size 10 20 + tex 0 8 + type alphastatic + velocityjitter 150 150 150 + velocitymultiplier 0.100000 effect machinegun_impact -type alphastatic -notunderwater -tex 36 36 -count 0.5 -size 10 11 -sizeincrease 74 -alpha 200 350 500 -velocityjitter 11 11 11 -airfriction 5 -color 0x201d1a 0x000000 -bounce 6 -velocitymultiplier 0.03 -rotate 0 360 -50 50 -//debris + airfriction 5 + alpha 200 350 500 + bounce 6 + color 0x201d1a 0x000000 + count 0.500000 + notunderwater + rotate 0 360 -50 50 + sizeincrease 74 + size 10 11 + tex 36 36 + type alphastatic + velocityjitter 11 11 11 + velocitymultiplier 0.030000 effect machinegun_impact -type alphastatic -notunderwater -tex 66 68 -count 1 -size 1 5 -airfriction 1 -gravity 1.4 -alpha 300 550 256 -velocityjitter 350 350 350 -velocitymultiplier 0.2 -bounce 1.7 -color 0x63493e 0xffffff -rotate 0 360 -500 500 -// sparks + airfriction 1 + alpha 300 550 256 + bounce 1.700000 + color 0x63493e 0xffffff + count 1 + gravity 1.400000 + notunderwater + rotate 0 360 -500 500 + size 1 5 + tex 66 68 + type alphastatic + velocityjitter 350 350 350 + velocitymultiplier 0.200000 effect machinegun_impact -notunderwater -count 1 -type spark -tex 40 40 -color 0xFDFFD9 0xFDFFD9 -size 0.3 0.3 -alpha 256 256 168 -gravity 1 -bounce 1 -airfriction 2 -originjitter 1 1 1 -velocityjitter 300 300 300 -velocitymultiplier 0.2 - - - - -// used in qcsrc/server/nexball.qc: pointparticles(particleeffectnum("grenadelauncher_muzzleflash"), w_shotorg, w_shotdir * 1000, 1) -// used in qcsrc/server/w_grenadelauncher.qc: pointparticles(particleeffectnum("grenadelauncher_muzzleflash"), w_shotorg, w_shotdir * 1000, 1) -// used in qcsrc/server/w_grenadelauncher.qc: pointparticles(particleeffectnum("grenadelauncher_muzzleflash"), w_shotorg, w_shotdir * 1000, 1) -// used in qcsrc/server/w_porto.qc: //pointparticles(particleeffectnum("grenadelauncher_muzzleflash"), w_shotorg, w_shotdir * 1000, 1) + airfriction 2 + alpha 256 256 168 + bounce 1 + color 0xFDFFD9 0xFDFFD9 + count 1 + gravity 1 + notunderwater + originjitter 1 1 1 + size 0.300000 0.300000 + tex 40 40 + type spark + velocityjitter 300 300 300 + velocitymultiplier 0.200000 effect grenadelauncher_muzzleflash -count 1.5 -type smoke -color 0x202020 0x404040 -tex 0 8 -size 5 5 -alpha 256 256 512 -originjitter 1.5 1.5 1.5 -airfriction 12 -velocityjitter 20 20 20 -velocitymultiplier 0.03 -lightradius 200 -lightradiusfade 2000 -lightcolor 2 1.5 0.2 + airfriction 12 + alpha 256 256 512 + color 0x202020 0x404040 + count 1.500000 + lightcolor 2 1.5 0.2 + lightradiusfade 2000 + lightradius 200 + originjitter 1.5 1.5 1.5 + size 5 5 + tex 0 8 + type smoke + velocityjitter 20 20 20 + velocitymultiplier 0.030000 effect grenadelauncher_muzzleflash -count 16 -type spark -tex 48 55 -color 0xffdb96 0xff5400 -size 10 20 -alpha 0 128 1024 -originjitter 1 1 1 -velocityjitter 100 100 100 -velocitymultiplier 0.5 -airfriction 5 -stretchfactor 2.5 - - - -// mortar trail -// smoke -// used in qcsrc/client/projectile.qc: trailparticles(self, particleeffectnum("TR_GRENADE"), from, to) -// used in qcsrc/client/projectile.qc: trailparticles(self, particleeffectnum("TR_GRENADE"), from, to) + airfriction 5 + alpha 0 128 1024 + color 0xffdb96 0xff5400 + count 16 + originjitter 1 1 1 + size 10 20 + stretchfactor 2.500000 + tex 48 55 + type spark + velocityjitter 100 100 100 + velocitymultiplier 0.500000 effect TR_GRENADE -trailspacing 4 -type smoke -color 0x101010 0x000000 -tex 0 8 -size 3 2 -bounce 1 -sizeincrease 10 -alpha 300 400 780 -originjitter 1 1 1 -velocityjitter 1 1 1 -velocitymultiplier -0.02 -//gravity -0.11 -// fire + alpha 300 400 780 + bounce 1 + color 0x101010 0x000000 + originjitter 1 1 1 + sizeincrease 10 + size 3 2 + tex 0 8 + trailspacing 4 + type smoke + velocityjitter 1 1 1 + velocitymultiplier -0.020000 effect TR_GRENADE -notunderwater -trailspacing 4 -type static -color 0xffdf72 0x811200 -tex 48 55 -size 5 2 -sizeincrease -15 -alpha 100 144 988 -airfriction 8 -velocityjitter 32 32 32 -velocitymultiplier -1.0 -// bubbles + airfriction 8 + alpha 100 144 988 + color 0xffdf72 0x811200 + notunderwater + sizeincrease -15 + size 5 2 + tex 48 55 + trailspacing 4 + type static + velocityjitter 32 32 32 + velocitymultiplier -1 effect TR_GRENADE -underwater -trailspacing 16 -type bubble -tex 62 62 -color 0x404040 0x808080 -size 1 1 -alpha 256 256 256 -gravity -0.125 -bounce 1.5 -liquidfriction 4 -velocityjitter 16 16 16 - - - -// hookbomb trail -// smoke -// used in qcsrc/client/projectile.qc: trailparticles(self, particleeffectnum("TR_KNIGHTSPIKE"), from, to) -// used in qcsrc/client/projectile.qc: trailparticles(self, particleeffectnum("TR_KNIGHTSPIKE"), from, to) -// used in qcsrc/client/projectile.qc: trailparticles(self, particleeffectnum("TR_KNIGHTSPIKE"), from, to) -effect TR_KNIGHTSPIKE // used for MF_TRACER2 -notunderwater -trailspacing 6 -type smoke -color 0x303030 0x000000 -tex 0 8 -size 3 3 -bounce 1 -sizeincrease 11 -alpha 300 400 600 -originjitter 2 2 2 -velocityjitter 3 3 3 -velocitymultiplier -0.02 -gravity -0.11 -//marker -effect TR_KNIGHTSPIKE // used for MF_TRACER2 -type alphastatic -color 0x666666 0x000000 -tex 62 62 -size 1 1 -sizeincrease -0.1 -trailspacing 2 -alpha 256 256 720 -// bubbles -effect TR_KNIGHTSPIKE // used for MF_TRACER2 -underwater -trailspacing 32 -type bubble -tex 62 62 -color 0x404040 0x808080 -size 1 1 -alpha 256 256 256 -gravity -0.125 -bounce 1.5 -liquidfriction 4 -velocityjitter 16 16 16 - - - -// decal -// used in qcsrc/client/damage.qc: pointparticles(particleeffectnum("grenade_explode"), org2, '0 0 0', 1) + alpha 256 256 256 + bounce 1.500000 + color 0x404040 0x808080 + gravity -0.125000 + liquidfriction 4 + size 1 1 + tex 62 62 + trailspacing 16 + type bubble + underwater + velocityjitter 16 16 16 +effect TR_KNIGHTSPIKE + alpha 300 400 600 + bounce 1 + color 0x303030 0x000000 + gravity -0.110000 + notunderwater + originjitter 2 2 2 + sizeincrease 11 + size 3 3 + tex 0 8 + trailspacing 6 + type smoke + velocityjitter 3 3 3 + velocitymultiplier -0.020000 +effect TR_KNIGHTSPIKE + alpha 256 256 720 + color 0x666666 0x000000 + sizeincrease -0.100000 + size 1 1 + tex 62 62 + trailspacing 2 + type alphastatic +effect TR_KNIGHTSPIKE + alpha 256 256 256 + bounce 1.500000 + color 0x404040 0x808080 + gravity -0.125000 + liquidfriction 4 + size 1 1 + tex 62 62 + trailspacing 32 + type bubble + underwater + velocityjitter 16 16 16 effect grenade_explode -countabsolute 1 -type decal -tex 8 16 -size 48 48 -alpha 256 256 0 -originjitter 26 26 26 -lightradius 250 -lightradiusfade 400 -lightcolor 8 4 1 -// fire effect which expands then slows + alpha 256 256 0 + countabsolute 1 + lightcolor 8 4 1 + lightradiusfade 400 + lightradius 250 + originjitter 26 26 26 + size 48 48 + tex 8 16 + type decal effect grenade_explode -notunderwater -count 40 -type static -tex 48 55 -color 0xe03f00 0x5e0000 -size 16 26 -sizeincrease 20 -alpha 128 228 356 -bounce 4.5 -airfriction 8 -liquidfriction 8 -originjitter 8 8 8 -velocityjitter 256 256 256 -// fire effect which make brigt dot inside + airfriction 8 + alpha 128 228 356 + bounce 4.500000 + color 0xe03f00 0x5e0000 + count 40 + liquidfriction 8 + notunderwater + originjitter 8 8 8 + sizeincrease 20 + size 16 26 + tex 48 55 + type static + velocityjitter 256 256 256 effect grenade_explode -notunderwater -count 15 -type static -tex 48 55 -color 0xe03f00 0xffdf92 -size 6 16 -sizeincrease 40 -alpha 228 328 756 -bounce 1 -airfriction 8 -liquidfriction 8 -originjitter 8 8 8 -velocityjitter 256 256 256 -// smoke + airfriction 8 + alpha 228 328 756 + bounce 1 + color 0xe03f00 0xffdf92 + count 15 + liquidfriction 8 + notunderwater + originjitter 8 8 8 + sizeincrease 40 + size 6 16 + tex 48 55 + type static + velocityjitter 256 256 256 effect grenade_explode -type alphastatic -notunderwater -tex 0 8 -count 10 -size 20 40 -sizeincrease 34 -alpha 300 550 556 -velocityjitter 256 256 256 -airfriction 5 -color 0x000000 0x111111 -bounce 6 -// underwater bubbles + airfriction 5 + alpha 300 550 556 + bounce 6 + color 0x000000 0x111111 + count 10 + notunderwater + sizeincrease 34 + size 20 40 + tex 0 8 + type alphastatic + velocityjitter 256 256 256 effect grenade_explode -underwater -count 32 -type bubble -tex 62 62 -color 0x404040 0x808080 -size 3 6 -alpha 128 256 64 -gravity -0.125 -bounce 1.5 -liquidfriction 0.25 -originjitter 16 16 16 -velocityjitter 196 196 196 -rotate 0 0 0 0 -// underwatershockwave + alpha 128 256 64 + bounce 1.500000 + color 0x404040 0x808080 + count 32 + gravity -0.125000 + liquidfriction 0.250000 + originjitter 16 16 16 + size 3 6 + tex 62 62 + type bubble + underwater + velocityjitter 196 196 196 effect grenade_explode -underwater -type smoke -countabsolute 1 -tex 33 33 -size 5 5 -sizeincrease 1500 -alpha 40 40 300 -velocitymultiplier 0.3 -// bouncing sparks + alpha 40 40 300 + countabsolute 1 + sizeincrease 1500 + size 5 5 + tex 33 33 + type smoke + underwater + velocitymultiplier 0.300000 effect grenade_explode -notunderwater -count 16 -type spark -tex 40 40 -color 0xffa35b 0xfff2be -size 1 0.1 -alpha 644 956 484 -gravity 1 -airfriction 1 -bounce 1.6 -liquidfriction 0.8 -velocityoffset 0 0 80 -originjitter 16 16 16 -velocityjitter 424 424 624 -// debris + airfriction 1 + alpha 644 956 484 + bounce 1.600000 + color 0xffa35b 0xfff2be + count 16 + gravity 1 + liquidfriction 0.800000 + notunderwater + originjitter 16 16 16 + size 1 0.100000 + tex 40 40 + type spark + velocityjitter 424 424 624 + velocityoffset 0 0 80 effect grenade_explode -notunderwater -count 12 -type alphastatic -tex 66 68 -color 0x6a3d25 0xcac5b4 -size 2 6 -alpha 644 956 684 -gravity 1.3 -airfriction 0.5 -bounce 1.6 -velocityjitter 324 324 524 -rotate -180 180 -1000 1000 - - - -// used in qcsrc/server/w_electro.qc: pointparticles(particleeffectnum("electro_muzzleflash"), w_shotorg, w_shotdir * 1000, 1) -// used in qcsrc/server/w_electro.qc: pointparticles(particleeffectnum("electro_muzzleflash"), w_shotorg, w_shotdir * 1000, 1) + airfriction 0.500000 + alpha 644 956 684 + bounce 1.600000 + color 0x6a3d25 0xcac5b4 + count 12 + gravity 1.300000 + notunderwater + rotate -180 180 -1000 1000 + size 2 6 + tex 66 68 + type alphastatic + velocityjitter 324 324 524 effect electro_muzzleflash -countabsolute 1 -type smoke -color 0x283880 0x283880 // 0x202020 0x404040 -tex 65 65 -size 15 15 -alpha 256 256 512 -originjitter 1.5 1.5 1.5 -velocityjitter 6 6 6 -sizeincrease -10 -velocitymultiplier 0.01 -lightradius 200 -lightradiusfade 2000 -lightcolor 1.5 3 6 - + alpha 256 256 512 + color 0x283880 0x283880 + countabsolute 1 + lightcolor 1.5 3 6 + lightradiusfade 2000 + lightradius 200 + originjitter 1.5 1.5 1.5 + sizeincrease -10 + size 15 15 + tex 65 65 + type smoke + velocityjitter 6 6 6 + velocitymultiplier 0.010000 effect electro_muzzleflash -count 7 -type spark -tex 8 15 -color 0xD9FDFF 0xD9FDFF -size 5 15 -alpha 110 228 2024 -originjitter 1 1 1 -velocityjitter 150 150 150 -velocitymultiplier 0.5 -airfriction 2 -stretchfactor 1.5 - + airfriction 2 + alpha 110 228 2024 + color 0xD9FDFF 0xD9FDFF + count 7 + originjitter 1 1 1 + size 5 15 + stretchfactor 1.500000 + tex 8 15 + type spark + velocityjitter 150 150 150 + velocitymultiplier 0.500000 effect electro_muzzleflash -count 5 -type spark -tex 41 41 -color 0xD9FDFF 0xD9FDFF -size 7 6 -alpha 110 228 1024 -originjitter 1 1 1 -velocityjitter 350 350 350 -velocitymultiplier 2.5 -airfriction 8 -gravity 1.3 -stretchfactor 0.1 - - -// electro trail -// glowing vapor trail -// used in qcsrc/client/projectile.qc: trailparticles(self, particleeffectnum("TR_NEXUIZPLASMA"), from, to) + airfriction 8 + alpha 110 228 1024 + color 0xD9FDFF 0xD9FDFF + count 5 + gravity 1.300000 + originjitter 1 1 1 + size 7 6 + stretchfactor 0.100000 + tex 41 41 + type spark + velocityjitter 350 350 350 + velocitymultiplier 2.500000 effect TR_NEXUIZPLASMA -trailspacing 2 -type static -color 0x283880 0x283880 -size 3 3 -tex 38 38 -alpha 256 256 968 -//velocityjitter 16 16 16 -lightradius 90 -lighttime 0 -lightcolor 1.5 3 6 -velocitymultiplier -0.1 -// bright sparks + alpha 256 256 968 + color 0x283880 0x283880 + lightcolor 1.5 3 6 + lightradius 90 + size 3 3 + tex 38 38 + trailspacing 2 + type static + velocitymultiplier -0.100000 effect TR_NEXUIZPLASMA -trailspacing 12 -count 1.5 -type snow -tex 42 42 -color 0x629dff 0x0018ff -size 2 4 -sizeincrease -20 -alpha 444 512 1866 -bounce 1 -velocityoffset 0 0 15 -airfriction 12 -originjitter 1 1 1 -velocityjitter 50 50 50 - - - -// decal -// used in qcsrc/client/damage.qc: pointparticles(particleeffectnum("electro_impact"), org2, '0 0 0', 1) + airfriction 12 + alpha 444 512 1866 + bounce 1 + color 0x629dff 0x0018ff + count 1.500000 + originjitter 1 1 1 + sizeincrease -20 + size 2 4 + tex 42 42 + trailspacing 12 + type snow + velocityjitter 50 50 50 + velocityoffset 0 0 15 effect electro_impact -countabsolute 1 -type decal -tex 59 59 -size 32 32 -alpha 256 256 0 -originjitter 17 17 17 -lightradius 250 -lightradiusfade 250 -lightcolor 3.125 4.375 10 -// shockwave + alpha 256 256 0 + countabsolute 1 + lightcolor 3.1 4.4 10 + lightradiusfade 250 + lightradius 250 + originjitter 17 17 17 + size 32 32 + tex 59 59 + type decal effect electro_impact -type smoke -countabsolute 1 -tex 33 33 -size 32 32 -sizeincrease 1000 -color 0x80C0FF 0x80C0FF -alpha 40 40 350 -velocitymultiplier 44 -// flare effect + alpha 40 40 350 + color 0x80C0FF 0x80C0FF + countabsolute 1 + sizeincrease 1000 + size 32 32 + tex 33 33 + type smoke + velocitymultiplier 44 effect electro_impact -countabsolute 1 -type static -tex 38 38 -color 0x80C0FF 0x80C0FF -size 12 32 -alpha 256 256 512 -// cloud of bouncing sparks + alpha 256 256 512 + color 0x80C0FF 0x80C0FF + countabsolute 1 + size 12 32 + tex 38 38 + type static effect electro_impact -count 30 -type smoke -tex 42 42 -color 0x629dff 0x0018ff -size 36 36 -sizeincrease -50 -alpha 256 256 1024 -bounce 2 -gravity -0.3 -airfriction 6 -originjitter 1 1 1 -velocityjitter 512 512 512 -rotate -180 180 -9999 9999 -// inner cloud of smoke + airfriction 6 + alpha 256 256 1024 + bounce 2 + color 0x629dff 0x0018ff + count 30 + gravity -0.300000 + originjitter 1 1 1 + rotate -180 180 -9999 9999 + sizeincrease -50 + size 36 36 + tex 42 42 + type smoke + velocityjitter 512 512 512 effect electro_impact -count 30 -type smoke -color 0x629dff 0x0018ff -tex 0 8 -size 20 24 -sizeincrease 50 -alpha 200 256 512 -airfriction 30 -originjitter 20 20 20 -velocityjitter 320 320 320 - -// decal -// used in qcsrc/client/damage.qc: pointparticles(particleeffectnum("electro_ballexplode"), org2, '0 0 0', 1) + airfriction 30 + alpha 200 256 512 + color 0x629dff 0x0018ff + count 30 + originjitter 20 20 20 + sizeincrease 50 + size 20 24 + tex 0 8 + type smoke + velocityjitter 320 320 320 effect electro_ballexplode -countabsolute 1 -type decal -tex 59 59 -size 32 32 -alpha 256 256 0 -originjitter 17 17 17 -lightradius 250 -lightradiusfade 250 -lightcolor 3.125 4.375 10 -// flare effect + alpha 256 256 0 + countabsolute 1 + lightcolor 3.1 4.4 10 + lightradiusfade 250 + lightradius 250 + originjitter 17 17 17 + size 32 32 + tex 59 59 + type decal effect electro_ballexplode -countabsolute 1 -type static -tex 38 38 -color 0x80C0FF 0x80C0FF -size 32 32 -alpha 256 256 512 -// cloud of bouncing sparks + alpha 256 256 512 + color 0x80C0FF 0x80C0FF + countabsolute 1 + size 32 32 + tex 38 38 + type static effect electro_ballexplode -count 64 -type spark -tex 41 41 -color 0xFDFFD9 0xFDFFD9 -size 1 2 -alpha 256 256 1024 -bounce 2 -stretchfactor 0.4 -//airfriction 2 -originjitter 1 1 1 -velocityjitter 512 512 512 -// inner cloud of smoke + alpha 256 256 1024 + bounce 2 + color 0xFDFFD9 0xFDFFD9 + count 64 + originjitter 1 1 1 + size 1 2 + stretchfactor 0.400000 + tex 41 41 + type spark + velocityjitter 512 512 512 effect electro_ballexplode -count 8 -type smoke -color 0x202020 0x404040 -tex 0 8 -size 24 24 -alpha 256 256 512 -originjitter 20 20 20 -velocityjitter 32 32 32 - - - -// decal -// used in qcsrc/client/damage.qc: pointparticles(particleeffectnum("electro_combo"), org2, '0 0 0', 1) + alpha 256 256 512 + color 0x202020 0x404040 + count 8 + originjitter 20 20 20 + size 24 24 + tex 0 8 + type smoke + velocityjitter 32 32 32 effect electro_combo -countabsolute 1 -type decal -tex 59 59 -size 64 64 -alpha 256 256 0 -originjitter 17 17 17 -lightradius 400 -lightradiusfade 300 -lightcolor 4 5 6 -// flare effect + alpha 256 256 0 + countabsolute 1 + lightcolor 4 5 6 + lightradiusfade 300 + lightradius 400 + originjitter 17 17 17 + size 64 64 + tex 59 59 + type decal effect electro_combo -countabsolute 1 -type static -tex 38 38 -color 0x80C0FF 0x80C0FF -size 48 48 -alpha 128 128 64 -// large sparks + alpha 128 128 64 + color 0x80C0FF 0x80C0FF + countabsolute 1 + size 48 48 + tex 38 38 + type static effect electro_combo -count 5 -type static -color 0x2030FF 0x80C0FF -size 32 32 -sizeincrease 50 -tex 0 7 -alpha 156 156 156 -bounce 2 -airfriction 6 -liquidfriction 16 -//velocityoffset 0 0 120 -velocityjitter 512 512 512 + airfriction 6 + alpha 156 156 156 + bounce 2 + color 0x2030FF 0x80C0FF + count 5 + liquidfriction 16 + sizeincrease 50 + size 32 32 + tex 0 7 + type static + velocityjitter 512 512 512 effect electro_combo -count 32 -type spark -tex 41 41 -color 0xa9cacf 0x0054ff -size 2 4 -stretchfactor 2 -gravity 0.3 -alpha 444 512 700 -velocitymultiplier 3 -bounce 1.6 -//airfriction 2 -originjitter 1 1 1 -velocityjitter 312 312 312 -// inner cloud of smoke + alpha 444 512 700 + bounce 1.600000 + color 0xa9cacf 0x0054ff + count 32 + gravity 0.300000 + originjitter 1 1 1 + size 2 4 + stretchfactor 2 + tex 41 41 + type spark + velocityjitter 312 312 312 + velocitymultiplier 3 effect electro_combo -count 0.125 -type smoke -color 0x202020 0x404040 -tex 0 8 -size 24 24 -alpha 256 256 256 -originjitter 20 20 20 -velocityjitter 32 32 32 -// shockwave + alpha 256 256 256 + color 0x202020 0x404040 + count 0.125000 + originjitter 20 20 20 + size 24 24 + tex 0 8 + type smoke + velocityjitter 32 32 32 effect electro_combo -type smoke -countabsolute 1 -color 0xa9cacf 0x0054ff -tex 33 33 -size 30 30 -sizeincrease 600 -alpha 40 40 100 -velocitymultiplier 0.3 - - - -// used in qcsrc/server/w_crylink.qc: pointparticles(particleeffectnum("crylink_muzzleflash"), w_shotorg, w_shotdir * 1000, shots) -// used in qcsrc/server/w_crylink.qc: pointparticles(particleeffectnum("crylink_muzzleflash"), w_shotorg, w_shotdir * 1000, shots) + alpha 40 40 100 + color 0xa9cacf 0x0054ff + countabsolute 1 + sizeincrease 600 + size 30 30 + tex 33 33 + type smoke + velocitymultiplier 0.300000 effect crylink_muzzleflash -count 0.5 -type smoke -color 0xdd9cff 0xff0090 -tex 65 65 -size 15 20 -alpha 128 128 2024 -velocitymultiplier 0.01 -lightradius 200 -lightradiusfade 2000 -lightcolor 1.6 0.2 2 + alpha 128 128 2024 + color 0xdd9cff 0xff0090 + count 0.500000 + lightcolor 1.6 0.2 2 + lightradiusfade 2000 + lightradius 200 + size 15 20 + tex 65 65 + type smoke + velocitymultiplier 0.010000 effect crylink_muzzleflash -count 5 -type spark -tex 35 36 -color 0xA080C0 0xA080C0 -size 5 10 -alpha 0 128 1024 -originjitter 1 1 1 -velocityjitter 200 200 200 -velocitymultiplier 0.3 -airfriction 12 -stretchfactor 1.5 - - -// crylink impact effect -// decal -// used in qcsrc/client/damage.qc: pointparticles(particleeffectnum("crylink_impact"), org2, '0 0 0', 1) + airfriction 12 + alpha 0 128 1024 + color 0xA080C0 0xA080C0 + count 5 + originjitter 1 1 1 + size 5 10 + stretchfactor 1.500000 + tex 35 36 + type spark + velocityjitter 200 200 200 + velocitymultiplier 0.300000 effect crylink_impact -countabsolute 1 -type decal -tex 47 47 -size 24 24 -alpha 256 256 0 -originjitter 12 12 12 -//lightradius 200 -//lightradiusfade 800 -//lightcolor 3.2 0.4 4 -// purple flare effect + alpha 256 256 0 + countabsolute 1 + originjitter 12 12 12 + size 24 24 + tex 47 47 + type decal effect crylink_impact -countabsolute 1 -type static -tex 39 39 -color 0x504060 0x504060 -size 24 24 -alpha 256 256 512 -// purple sparks + alpha 256 256 512 + color 0x504060 0x504060 + countabsolute 1 + size 24 24 + tex 39 39 + type static effect crylink_impact -count 40 -type spark -tex 41 41 -color 0xA040C0 0xA040C0 -bounce 2 -size 6 6 -alpha 256 256 1024 -velocityjitter 512 512 512 -// purple splash + alpha 256 256 1024 + bounce 2 + color 0xA040C0 0xA040C0 + count 40 + size 6 6 + tex 41 41 + type spark + velocityjitter 512 512 512 effect crylink_impact -count 1.5 -type static -color 0xE070FF 0xE070FF -size 16 16 -alpha 256 256 512 -velocityjitter 32 32 32 -// purple splash + alpha 256 256 512 + color 0xE070FF 0xE070FF + count 1.500000 + size 16 16 + type static + velocityjitter 32 32 32 effect crylink_impact -count 3 -type static -color 0xE070FF 0xE070FF -size 16 16 -alpha 256 256 1024 -velocityjitter 256 256 256 - - - -// used in qcsrc/server/w_minstanex.qc: pointparticles(particleeffectnum("nex_muzzleflash"), w_shotorg, w_shotdir * 1000, 1) -// used in qcsrc/client/particles.qc: pointparticles(particleeffectnum("nex_muzzleflash"), shotorg, normalize(endpos - shotorg) * 1000, 1) + alpha 256 256 1024 + color 0xE070FF 0xE070FF + count 3 + size 16 16 + type static + velocityjitter 256 256 256 effect nex_muzzleflash -count 12 -type spark -color 0x202020 0x0072ff -tex 48 55 -size 16 16 -alpha 328 328 4000 -originjitter 4 4 4 -velocityjitter 180 180 180 -velocitymultiplier 1.4 -stretchfactor 2 -sizeincrease -100 -airfriction 9 -lightradius 200 -lightradiusfade 200 -lightcolor 2 2.5 3 + airfriction 9 + alpha 328 328 4000 + color 0x202020 0x0072ff + count 12 + lightcolor 2 2.5 3 + lightradiusfade 200 + lightradius 200 + originjitter 4 4 4 + sizeincrease -100 + size 16 16 + stretchfactor 2 + tex 48 55 + type spark + velocityjitter 180 180 180 + velocitymultiplier 1.400000 effect nex_muzzleflash -count 50 -type spark -tex 41 41 -color 0xD9FDFF 0xD9FDFF -size 1 1 -alpha 0 128 1024 -originjitter 1 1 1 -velocityjitter 600 600 600 -velocitymultiplier 1.5 -airfriction 9 - - - -//// nex beam -//effect nex_beam -//countabsolute 1 -//type beam -//tex 200 200 -//color 0xFFFFFF 0xFFFFFF -//size 6 6 -//alpha 128 128 192 -// nex beam: ring smoke -// used in qcsrc/client/particles.qc: trailparticles(world, particleeffectnum("nex_beam"), shotorg, endpos) + airfriction 9 + alpha 0 128 1024 + color 0xD9FDFF 0xD9FDFF + count 50 + originjitter 1 1 1 + size 1 1 + tex 41 41 + type spark + velocityjitter 600 600 600 + velocitymultiplier 1.500000 effect nex_beam -trailspacing 64 -color 0x1680A0 0x1680A0 -size 4 4 -tex 32 32 -alpha 64 128 64 -airfriction 5 -sizeincrease 2 -type static -// nex beam: drifting smoke + airfriction 5 + alpha 64 128 64 + color 0x1680A0 0x1680A0 + sizeincrease 2 + size 4 4 + tex 32 32 + trailspacing 64 + type static effect nex_beam -trailspacing 12 -color 0x5080A0 0x5080A0 -size 1 1 -tex 0 8 -alpha 32 64 32 -airfriction 9 -sizeincrease 8 -velocityjitter 64 64 64 -type static -// nex beam: bright core + airfriction 9 + alpha 32 64 32 + color 0x5080A0 0x5080A0 + sizeincrease 8 + size 1 1 + tex 0 8 + trailspacing 12 + type static + velocityjitter 64 64 64 effect nex_beam -trailspacing 12 -color 0x80CDFF 0x80CDFF -size 4 4 -//tex 48 55 -alpha 256 256 1280 -type static -//sparks + alpha 256 256 1280 + color 0x80CDFF 0x80CDFF + size 4 4 + trailspacing 12 + type static effect nex_beam -trailspacing 16 -color 0x1680A0 0x1680A0 -size 1 1 -tex 63 63 -alpha 64 128 80 -airfriction 5 -gravity -0.01 -type snow - -// nex impact -// decal -// used in qcsrc/client/damage.qc: pointparticles(particleeffectnum("nex_impact"), org2, '0 0 0', 1) -// used in qcsrc/client/damage.qc: pointparticles(particleeffectnum("nex_impact"), org2, '0 0 0', 1) + airfriction 5 + alpha 64 128 80 + color 0x1680A0 0x1680A0 + gravity -0.010000 + size 1 1 + tex 63 63 + trailspacing 16 + type snow effect nex_impact -countabsolute 1 -type decal -tex 47 47 -size 24 24 -alpha 256 256 0 -originjitter 14 14 14 -lightradius 200 -lightradiusfade 250 -lightcolor 4 6 8 -rotate -180 180 0 0 -// rotating something + alpha 256 256 0 + countabsolute 1 + lightcolor 4 6 8 + lightradiusfade 250 + lightradius 200 + originjitter 14 14 14 + rotate -180 180 0 0 + size 24 24 + tex 47 47 + type decal effect nex_impact -count 5 -type smoke -tex 46 46 -color 0x1680A0 0x1680A0 -size 25 28 -sizeincrease 20 -alpha 55 55 50 -rotate 180 -180 500 -500 -// shockwave + alpha 55 55 50 + color 0x1680A0 0x1680A0 + count 5 + rotate 180 -180 500 -500 + sizeincrease 20 + size 25 28 + tex 46 46 + type smoke effect nex_impact -countabsolute 1 -type static -tex 33 33 -color 0x1680A0 0x1680A0 -size 16 16 -alpha 50 50 400 -sizeincrease 900 -// shockwave2 + alpha 50 50 400 + color 0x1680A0 0x1680A0 + countabsolute 1 + sizeincrease 900 + size 16 16 + tex 33 33 + type static effect nex_impact -countabsolute 1 -type static -tex 65 65 -color 0x1680A0 0x1680A0 -size 5 5 -alpha 50 50 100 -sizeincrease 500 - -// flare effect + alpha 50 50 100 + color 0x1680A0 0x1680A0 + countabsolute 1 + sizeincrease 500 + size 5 5 + tex 65 65 + type static effect nex_impact -countabsolute 1 -type static -tex 37 37 -color 0x80C0FF 0x80C0FF -size 8 8 -alpha 256 256 256 -// small sparks which form a sphere as they slow down -//effect nex_impact -//count 256 -//type spark -//color 0x2030FF 0x80C0FF -//size 1 2 -//alpha 256 256 512 -//bounce 2 -//airfriction 8 -//liquidfriction 8 -//velocityjitter 384 384 384 -// small sparks which glow brightly but live briefly + alpha 256 256 256 + color 0x80C0FF 0x80C0FF + countabsolute 1 + size 8 8 + tex 37 37 + type static effect nex_impact -count 64 -type spark -tex 41 41 -color 0xD9FDFF 0xD9FDFF -size 4 4 -alpha 0 128 512 -bounce 2 -stretchfactor 3 -velocityjitter 600 600 600 -velocitymultiplier 0.5 -airfriction 9 -// small sparks that live longer + airfriction 9 + alpha 0 128 512 + bounce 2 + color 0xD9FDFF 0xD9FDFF + count 64 + size 4 4 + stretchfactor 3 + tex 41 41 + type spark + velocityjitter 600 600 600 + velocitymultiplier 0.500000 effect nex_impact -count 16 -type spark -tex 41 41 -color 0xD9FDFF 0xD9FDFF -size 2 2 -alpha 255 255 112 -bounce 1.6 -stretchfactor 0.7 -velocityjitter 300 300 600 -velocitymultiplier 2.5 -airfriction 2 -gravity 1 - -// used in qcsrc/server/w_hagar.qc: pointparticles(particleeffectnum("hagar_muzzleflash"), w_shotorg, w_shotdir * 1000, 1) -// used in qcsrc/server/w_hagar.qc: pointparticles(particleeffectnum("hagar_muzzleflash"), w_shotorg, w_shotdir * 1000, 1) -// used in qcsrc/server/w_seeker.qc: pointparticles(particleeffectnum("hagar_muzzleflash"), w_shotorg, w_shotdir * 1000, 1) + airfriction 2 + alpha 255 255 112 + bounce 1.600000 + color 0xD9FDFF 0xD9FDFF + count 16 + gravity 1 + size 2 2 + stretchfactor 0.700000 + tex 41 41 + type spark + velocityjitter 300 300 600 + velocitymultiplier 2.500000 effect hagar_muzzleflash -count 2 -type smoke -color 0x202020 0x404040 -tex 0 8 -size 5 5 -alpha 256 256 512 -originjitter 1.5 1.5 1.5 -velocityjitter 6 6 6 -velocitymultiplier 0.01 -lightradius 200 -lightradiusfade 2000 -lightcolor 2 1.5 0.2 + alpha 256 256 512 + color 0x202020 0x404040 + count 2 + lightcolor 2 1.5 0.2 + lightradiusfade 2000 + lightradius 200 + originjitter 1.5 1.5 1.5 + size 5 5 + tex 0 8 + type smoke + velocityjitter 6 6 6 + velocitymultiplier 0.010000 effect hagar_muzzleflash -count 15 -type spark -tex 48 55 -color 0xff8400 0xff4200 -size 5 10 -alpha 0 128 1024 -originjitter 1 1 1 -velocityjitter 200 200 200 -velocitymultiplier 0.5 -airfriction 12 -stretchfactor 2 -rotate -180 180 -400 400 - - - -// used in qcsrc/server/w_hagar.qc: pointparticles(particleeffectnum("hagar_bounce"), self.origin, self.velocity, 1) + airfriction 12 + alpha 0 128 1024 + color 0xff8400 0xff4200 + count 15 + originjitter 1 1 1 + rotate -180 180 -400 400 + size 5 10 + stretchfactor 2 + tex 48 55 + type spark + velocityjitter 200 200 200 + velocitymultiplier 0.500000 effect hagar_bounce -count 2 -type smoke -color 0x202020 0x404040 -tex 0 8 -size 5 5 -alpha 256 256 256 -originjitter 1.5 1.5 1.5 -velocityjitter 6 6 6 -velocitymultiplier 0.01 -lightradius 60 -lightradiusfade 300 -lightcolor 2 1.5 0.2 + alpha 256 256 256 + color 0x202020 0x404040 + count 2 + lightcolor 2 1.5 0.2 + lightradiusfade 300 + lightradius 60 + originjitter 1.5 1.5 1.5 + size 5 5 + tex 0 8 + type smoke + velocityjitter 6 6 6 + velocitymultiplier 0.010000 effect hagar_bounce -count 15 -type spark -tex 40 40 -color 0xFFFDD9 0xFFFDD9 -size 3 3 -alpha 0 256 256 -gravity 1 -bounce 1.5 -originjitter 1 1 1 -velocityjitter 600 600 600 -velocitymultiplier 0.5 -airfriction 12 - - - -// decal -// used in qcsrc/client/damage.qc: pointparticles(particleeffectnum("hagar_explode"), org2, '0 0 0', 1) -// used in qcsrc/client/damage.qc: pointparticles(particleeffectnum("hagar_explode"), org2, '0 0 0', 1) -// used in qcsrc/client/damage.qc: pointparticles(particleeffectnum("hagar_explode"), org2, '0 0 0', 1) + airfriction 12 + alpha 0 256 256 + bounce 1.500000 + color 0xFFFDD9 0xFFFDD9 + count 15 + gravity 1 + originjitter 1 1 1 + size 3 3 + tex 40 40 + type spark + velocityjitter 600 600 600 + velocitymultiplier 0.500000 effect hagar_explode -countabsolute 1 -type decal -tex 8 16 -size 28 38 -alpha 256 256 0 -originjitter 14 14 14 -lightradius 120 -lightradiusfade 400 -lightcolor 8 4 1 -// fire effect which make bright dot inside + alpha 256 256 0 + countabsolute 1 + lightcolor 8 4 1 + lightradiusfade 400 + lightradius 120 + originjitter 14 14 14 + size 28 38 + tex 8 16 + type decal effect hagar_explode -notunderwater -count 3.5 -type smoke -tex 48 55 -color 0xffe955 0xff5a00 -size 16 26 -sizeincrease 5 -alpha 80 200 356 -bounce 1.5 -airfriction 8 -liquidfriction 8 -originjitter 8 8 8 -velocityjitter 156 156 156 -// fire effect which expands then slows + airfriction 8 + alpha 80 200 356 + bounce 1.500000 + color 0xffe955 0xff5a00 + count 3.500000 + liquidfriction 8 + notunderwater + originjitter 8 8 8 + sizeincrease 5 + size 16 26 + tex 48 55 + type smoke + velocityjitter 156 156 156 effect hagar_explode -notunderwater -count 12 -type static -tex 48 55 -color 0x8f0d00 0xff5a00 -size 20 26 -sizeincrease 15 -alpha 128 256 456 -bounce 1.5 -airfriction 12 -liquidfriction 8 -originjitter 8 8 8 -velocityjitter 286 286 286 - -// smoke + airfriction 12 + alpha 128 256 456 + bounce 1.500000 + color 0x8f0d00 0xff5a00 + count 12 + liquidfriction 8 + notunderwater + originjitter 8 8 8 + sizeincrease 15 + size 20 26 + tex 48 55 + type static + velocityjitter 286 286 286 effect hagar_explode -type alphastatic -notunderwater -tex 0 8 -count 7 -size 20 40 -sizeincrease 20 -alpha 200 500 600 -velocityjitter 244 244 244 -airfriction 5 -color 0x000000 0x111111 -bounce 2 - -// underwater bubbles + airfriction 5 + alpha 200 500 600 + bounce 2 + color 0x000000 0x111111 + count 7 + notunderwater + sizeincrease 20 + size 20 40 + tex 0 8 + type alphastatic + velocityjitter 244 244 244 effect hagar_explode -underwater -count 16 -type bubble -tex 62 62 -color 0x404040 0x808080 -size 3 3 -alpha 128 256 64 -gravity -0.125 -bounce 1.5 -liquidfriction 0.25 -originjitter 16 16 16 -velocityjitter 96 96 96 -// bouncing sparks + alpha 128 256 64 + bounce 1.500000 + color 0x404040 0x808080 + count 16 + gravity -0.125000 + liquidfriction 0.250000 + originjitter 16 16 16 + size 3 3 + tex 62 62 + type bubble + underwater + velocityjitter 96 96 96 effect hagar_explode -notunderwater -count 4 -type spark -tex 40 40 -color 0xffa35b 0xfff2be -size 1 0.1 -alpha 644 956 684 -gravity 1 -airfriction 1 -bounce 1.6 -liquidfriction 0.8 -velocityoffset 0 0 80 -originjitter 16 16 16 -velocityjitter 224 224 224 - - - -// used in qcsrc/server/w_rocketlauncher.qc: pointparticles(particleeffectnum("rocketlauncher_muzzleflash"), w_shotorg, w_shotdir * 1000, 1) + airfriction 1 + alpha 644 956 684 + bounce 1.600000 + color 0xffa35b 0xfff2be + count 4 + gravity 1 + liquidfriction 0.800000 + notunderwater + originjitter 16 16 16 + size 1 0.100000 + tex 40 40 + type spark + velocityjitter 224 224 224 + velocityoffset 0 0 80 effect rocketlauncher_muzzleflash -count 10 -type smoke -color 0x202020 0x404040 -tex 0 8 -size 1 1 -sizeincrease 20 -alpha 256 256 256 -airfriction 2 -originjitter 1.5 1.5 1.5 -velocityjitter 40 40 40 -velocitymultiplier -0.13 -//lightradius 200 -//lightradiusfade 2000 -//lightcolor 2 1.5 0.2 + airfriction 2 + alpha 256 256 256 + color 0x202020 0x404040 + count 10 + originjitter 1.5 1.5 1.5 + sizeincrease 20 + size 1 1 + tex 0 8 + type smoke + velocityjitter 40 40 40 + velocitymultiplier -0.130000 effect rocketlauncher_muzzleflash -count 6 -type smoke -tex 35 36 -color 0xFFFDD9 0xFFFDD9 -size 5 10 -sizeincrease 20 -alpha 10 25 20 -originjitter 3 3 3 -velocityjitter 100 100 100 -velocitymultiplier 0.3 -airfriction 9 -rotate -180 180 -30 30 - - - -// rocket trail -// smoke -// used in qcsrc/server/cl_client.qc: self.modelflags |= MF_ROCKET -// used in qcsrc/server/cl_client.qc: self.modelflags &~= MF_ROCKET -// used in qcsrc/client/projectile.qc: trailparticles(self, particleeffectnum("TR_ROCKET"), from, to) -// used in qcsrc/client/projectile.qc: trailparticles(self, particleeffectnum("TR_ROCKET"), from, to) + airfriction 9 + alpha 10 25 20 + color 0xFFFDD9 0xFFFDD9 + count 6 + originjitter 3 3 3 + rotate -180 180 -30 30 + sizeincrease 20 + size 5 10 + tex 35 36 + type smoke + velocityjitter 100 100 100 + velocitymultiplier 0.300000 effect TR_ROCKET -trailspacing 10 -type smoke -notunderwater -color 0x000000 0x666666 -tex 0 8 -size 3 4 -bounce 1 -sizeincrease 11 -alpha 200 300 200 -lightradius 150 -lighttime 0 -lightcolor 6 3 1 -originjitter 2 2 2 -velocityjitter 3 3 3 -velocitymultiplier -0.02 -rotate -180 180 -30 30 -//gravity -0.11 -// fire + alpha 200 300 200 + bounce 1 + color 0x000000 0x666666 + lightcolor 6 3 1 + lightradius 150 + notunderwater + originjitter 2 2 2 + rotate -180 180 -30 30 + sizeincrease 11 + size 3 4 + tex 0 8 + trailspacing 10 + type smoke + velocityjitter 3 3 3 + velocitymultiplier -0.020000 effect TR_ROCKET -trailspacing 4 -type static -color 0xffdf72 0x811200 -tex 48 55 -size 7 7 -sizeincrease -30 -alpha 100 144 588 -airfriction 8 -velocityjitter 32 32 32 -velocitymultiplier -1.5 -// bubbles + airfriction 8 + alpha 100 144 588 + color 0xffdf72 0x811200 + sizeincrease -30 + size 7 7 + tex 48 55 + trailspacing 4 + type static + velocityjitter 32 32 32 + velocitymultiplier -1.500000 effect TR_ROCKET -type bubble -underwater -trailspacing 16 -tex 62 62 -size 1 2 -alpha 256 256 256 -gravity -0.125 -bounce 1.5 -liquidfriction 4 -velocityjitter 16 16 16 -velocitymultiplier -0.31 -rotate 0 0 0 0 -// sparks + alpha 256 256 256 + bounce 1.500000 + gravity -0.125000 + liquidfriction 4 + size 1 2 + tex 62 62 + trailspacing 16 + type bubble + underwater + velocityjitter 16 16 16 + velocitymultiplier -0.310000 effect TR_ROCKET -notunderwater -trailspacing 20 -type spark -tex 40 40 -color 0xFFFDD9 0xFFFDD9 -size 0.5 0.5 -alpha 444 512 1866 -stretchfactor 0.3 -//gravity 1 -bounce 1 -//velocityoffset 0 0 15 -airfriction 5 -originjitter 1 1 1 -velocityjitter 100 100 100 -velocitymultiplier -0.31 - -// rocket explosion (bigger than mortar and hagar) + airfriction 5 + alpha 444 512 1866 + bounce 1 + color 0xFFFDD9 0xFFFDD9 + notunderwater + originjitter 1 1 1 + size 0.500000 0.500000 + stretchfactor 0.300000 + tex 40 40 + trailspacing 20 + type spark + velocityjitter 100 100 100 + velocitymultiplier -0.310000 effect rocket_explode -countabsolute 1 -type decal -tex 8 16 -size 72 72 -alpha 256 256 0 -originjitter 23 23 23 -lightradius 400 -lightradiusfade 750 -lightcolor 8 4 1 -// fire effect + alpha 256 256 0 + countabsolute 1 + lightcolor 8 4 1 + lightradiusfade 750 + lightradius 400 + originjitter 23 23 23 + size 72 72 + tex 8 16 + type decal effect rocket_explode -notunderwater -count 32 -type static -tex 48 55 -color 0x8f0d00 0xff5a00 -size 33 44 -sizeincrease 45 -alpha 200 256 512 -bounce 1.5 -airfriction 8 -liquidfriction 8 -originjitter 8 8 8 -velocityjitter 512 512 512 -// fire effect 2 + airfriction 8 + alpha 200 256 512 + bounce 1.500000 + color 0x8f0d00 0xff5a00 + count 32 + liquidfriction 8 + notunderwater + originjitter 8 8 8 + sizeincrease 45 + size 33 44 + tex 48 55 + type static + velocityjitter 512 512 512 effect rocket_explode -notunderwater -count 14 -type smoke -tex 48 55 -color 0xea691b 0xeed05a -size 33 44 -sizeincrease 55 -alpha 200 256 612 -bounce 2.5 -airfriction 19 -liquidfriction 19 -originjitter 8 8 8 -velocityjitter 912 912 912 -// smoke + airfriction 19 + alpha 200 256 612 + bounce 2.500000 + color 0xea691b 0xeed05a + count 14 + liquidfriction 19 + notunderwater + originjitter 8 8 8 + sizeincrease 55 + size 33 44 + tex 48 55 + type smoke + velocityjitter 912 912 912 effect rocket_explode -type alphastatic -notunderwater -tex 0 8 -count 32 -size 20 40 -sizeincrease 44 -alpha 200 450 456 -velocityjitter 444 444 444 -airfriction 5 -color 0x000000 0x111111 -bounce 2 -// underwater bubbles + airfriction 5 + alpha 200 450 456 + bounce 2 + color 0x000000 0x111111 + count 32 + notunderwater + sizeincrease 44 + size 20 40 + tex 0 8 + type alphastatic + velocityjitter 444 444 444 effect rocket_explode -underwater -count 32 -type bubble -tex 62 62 -color 0x404040 0x808080 -size 3 3 -alpha 128 256 64 -gravity -0.125 -bounce 1.5 -liquidfriction 0.25 -originjitter 16 16 16 -velocityjitter 144 144 144 -// underwatershockwave + alpha 128 256 64 + bounce 1.500000 + color 0x404040 0x808080 + count 32 + gravity -0.125000 + liquidfriction 0.250000 + originjitter 16 16 16 + size 3 3 + tex 62 62 + type bubble + underwater + velocityjitter 144 144 144 effect rocket_explode -underwater -type smoke -countabsolute 1 -tex 33 33 -size 30 30 -sizeincrease 1900 -alpha 40 40 300 -velocitymultiplier 0.3 -// bouncing sparks + alpha 40 40 300 + countabsolute 1 + sizeincrease 1900 + size 30 30 + tex 33 33 + type smoke + underwater + velocitymultiplier 0.300000 effect rocket_explode -notunderwater -count 16 -type spark -tex 40 40 -color 0xffa35b 0xfff2be -size 1 0.1 -alpha 644 956 484 -gravity 1 -airfriction 1 -bounce 1.6 -liquidfriction 0.8 -velocityoffset 0 0 80 -originjitter 16 16 16 -velocityjitter 424 424 624 -// debris + airfriction 1 + alpha 644 956 484 + bounce 1.600000 + color 0xffa35b 0xfff2be + count 16 + gravity 1 + liquidfriction 0.800000 + notunderwater + originjitter 16 16 16 + size 1 0.100000 + tex 40 40 + type spark + velocityjitter 424 424 624 + velocityoffset 0 0 80 effect rocket_explode -notunderwater -count 12 -type alphastatic -tex 66 68 -color 0x6a3d25 0xcac5b4 -size 2 6 -alpha 644 956 684 -gravity 1.3 -airfriction 0.5 -bounce 1.6 -velocityjitter 324 324 524 -rotate -180 180 -1000 1000 - -// used in qcsrc/server/g_hook.qc: pointparticles(particleeffectnum("grapple_muzzleflash"), org, '0 0 0', 1) + airfriction 0.500000 + alpha 644 956 684 + bounce 1.600000 + color 0x6a3d25 0xcac5b4 + count 12 + gravity 1.300000 + notunderwater + rotate -180 180 -1000 1000 + size 2 6 + tex 66 68 + type alphastatic + velocityjitter 324 324 524 effect grapple_muzzleflash -lightradius 160 -lightradiusfade 800 -lightcolor 1 0 0 - - - -// used in qcsrc/server/g_hook.qc: pointparticles(particleeffectnum("grapple_impact"), self.origin, '0 0 0', 1) + lightcolor 1 0 0 + lightradiusfade 800 + lightradius 160 effect grapple_impact -lightradius 160 -lightradiusfade 800 -lightcolor 1 0 0 - - - -// used nowhere in code + lightcolor 1 0 0 + lightradiusfade 800 + lightradius 160 effect nex242_misc_laser_beam -countabsolute 1 -type beam -tex 200 200 -size 1 1 -alpha 256 256 64 -color 0xff0000 0xff0000 -sizeincrease 1 - -// used nowhere in code + alpha 256 256 64 + color 0xff0000 0xff0000 + countabsolute 1 + sizeincrease 1 + size 1 1 + tex 200 200 + type beam effect nex242_misc_laser_beam_end -count 0.5 -type spark -color 0x8f4333 0xfff31b -size 0.4 0.4 -alpha 128 256 768 -gravity 1 -bounce -1 -velocityjitter 64 64 64 -velocitymultiplier 100 - - - -// used nowhere in code + alpha 128 256 768 + bounce -1 + color 0x8f4333 0xfff31b + count 0.500000 + gravity 1 + size 0.400000 0.400000 + type spark + velocityjitter 64 64 64 + velocitymultiplier 100 effect nex242_misc_laser_beam_fast -countabsolute 1 -type beam -tex 200 200 -size 1 1 -alpha 256 256 640 -color 0xff0000 0xff0000 -sizeincrease 0.1 - -// used nowhere in code + alpha 256 256 640 + color 0xff0000 0xff0000 + countabsolute 1 + sizeincrease 0.100000 + size 1 1 + tex 200 200 + type beam effect nex242_misc_laser_beam_fast_end -count 0.5 -type spark -color 0x8f4333 0xfff31b -size 0.4 0.4 -alpha 128 256 768 -gravity 1 -bounce -1 -velocityjitter 64 64 64 -velocitymultiplier 100 - -// additional laser colors (mike) -// used nowhere in code + alpha 128 256 768 + bounce -1 + color 0x8f4333 0xfff31b + count 0.500000 + gravity 1 + size 0.400000 0.400000 + type spark + velocityjitter 64 64 64 + velocitymultiplier 100 effect nex242_misc_laser_green_beam -countabsolute 1 -type beam -tex 200 200 -size 1 1 -alpha 256 256 64 -color 0x00ff00 0x00ff00 -sizeincrease 1 - -// used nowhere in code + alpha 256 256 64 + color 0x00ff00 0x00ff00 + countabsolute 1 + sizeincrease 1 + size 1 1 + tex 200 200 + type beam effect nex242_misc_laser_green_beam_end -count 0.5 -type spark -color 0x8f4333 0xfff31b -size 0.4 0.4 -alpha 128 256 768 -gravity 1 -bounce -1 -velocityjitter 64 64 64 -velocitymultiplier 100 - -// used nowhere in code + alpha 128 256 768 + bounce -1 + color 0x8f4333 0xfff31b + count 0.500000 + gravity 1 + size 0.400000 0.400000 + type spark + velocityjitter 64 64 64 + velocitymultiplier 100 effect nex242_misc_laser_blue_beam -countabsolute 1 -type beam -tex 200 200 -size 1 1 -alpha 256 256 64 -color 0x0000ff 0x0000ff -sizeincrease 1 - -// used nowhere in code + alpha 256 256 64 + color 0x0000ff 0x0000ff + countabsolute 1 + sizeincrease 1 + size 1 1 + tex 200 200 + type beam effect nex242_misc_laser_blue_beam_end -count 0.5 -type spark -color 0x8f4333 0xfff31b -size 0.4 0.4 -alpha 128 256 768 -gravity 1 -bounce -1 -velocityjitter 64 64 64 -velocitymultiplier 100 - -// used nowhere in code + alpha 128 256 768 + bounce -1 + color 0x8f4333 0xfff31b + count 0.500000 + gravity 1 + size 0.400000 0.400000 + type spark + velocityjitter 64 64 64 + velocitymultiplier 100 effect nex242_misc_laser_yellow_beam -countabsolute 1 -type beam -tex 200 200 -size 1 1 -alpha 256 256 64 -color 0xffff00 0xffff00 -sizeincrease 1 - -// used nowhere in code + alpha 256 256 64 + color 0xffff00 0xffff00 + countabsolute 1 + sizeincrease 1 + size 1 1 + tex 200 200 + type beam effect nex242_misc_laser_yellow_beam_end -count 0.5 -type spark -color 0x8f4333 0xfff31b -size 0.4 0.4 -alpha 128 256 768 -gravity 1 -bounce -1 -velocityjitter 64 64 64 -velocitymultiplier 100 - -// used nowhere in code + alpha 128 256 768 + bounce -1 + color 0x8f4333 0xfff31b + count 0.500000 + gravity 1 + size 0.400000 0.400000 + type spark + velocityjitter 64 64 64 + velocitymultiplier 100 effect nex242_misc_laser_cyan_beam -countabsolute 1 -type beam -tex 200 200 -size 1 1 -alpha 256 256 64 -color 0x00ffff 0x00ffff -sizeincrease 1 - -// used nowhere in code + alpha 256 256 64 + color 0x00ffff 0x00ffff + countabsolute 1 + sizeincrease 1 + size 1 1 + tex 200 200 + type beam effect nex242_misc_laser_cyan_beam_end -count 0.5 -type spark -color 0x8f4333 0xfff31b -size 0.4 0.4 -alpha 128 256 768 -gravity 1 -bounce -1 -velocityjitter 64 64 64 -velocitymultiplier 100 - -// used nowhere in code + alpha 128 256 768 + bounce -1 + color 0x8f4333 0xfff31b + count 0.500000 + gravity 1 + size 0.400000 0.400000 + type spark + velocityjitter 64 64 64 + velocitymultiplier 100 effect nex242_misc_laser_magenta_beam -countabsolute 1 -type beam -tex 200 200 -size 1 1 -alpha 256 256 64 -color 0xff00ff 0xff00ff -sizeincrease 1 - -// used nowhere in code + alpha 256 256 64 + color 0xff00ff 0xff00ff + countabsolute 1 + sizeincrease 1 + size 1 1 + tex 200 200 + type beam effect nex242_misc_laser_magenta_beam_end -count 0.5 -type spark -color 0x8f4333 0xfff31b -size 0.4 0.4 -alpha 128 256 768 -gravity 1 -bounce -1 -velocityjitter 64 64 64 -velocitymultiplier 100 - -// used nowhere in code + alpha 128 256 768 + bounce -1 + color 0x8f4333 0xfff31b + count 0.500000 + gravity 1 + size 0.400000 0.400000 + type spark + velocityjitter 64 64 64 + velocitymultiplier 100 effect nex242_misc_laser_white_beam -countabsolute 1 -type beam -tex 200 200 -size 1 1 -alpha 256 256 64 -color 0xffffff 0xffffff -sizeincrease 1 - -// used nowhere in code + alpha 256 256 64 + color 0xffffff 0xffffff + countabsolute 1 + sizeincrease 1 + size 1 1 + tex 200 200 + type beam effect nex242_misc_laser_white_beam_end -count 0.5 -type spark -color 0x8f4333 0xfff31b -size 0.4 0.4 -alpha 128 256 768 -gravity 1 -bounce -1 -velocityjitter 64 64 64 -velocitymultiplier 100 - -// used nowhere in code + alpha 128 256 768 + bounce -1 + color 0x8f4333 0xfff31b + count 0.500000 + gravity 1 + size 0.400000 0.400000 + type spark + velocityjitter 64 64 64 + velocitymultiplier 100 effect nex242_misc_laser_black_beam -countabsolute 1 -type beam -tex 200 200 -size 1 1 -alpha 256 256 64 -color 0x000000 0x000000 -sizeincrease 1 - -// used nowhere in code + alpha 256 256 64 + color 0x000000 0x000000 + countabsolute 1 + sizeincrease 1 + size 1 1 + tex 200 200 + type beam effect nex242_misc_laser_black_beam_end -count 0.5 -type spark -color 0x8f4333 0xfff31b -size 0.4 0.4 -alpha 128 256 768 -gravity 1 -bounce -1 -velocityjitter 64 64 64 -velocitymultiplier 100 - -// used nowhere in code + alpha 128 256 768 + bounce -1 + color 0x8f4333 0xfff31b + count 0.500000 + gravity 1 + size 0.400000 0.400000 + type spark + velocityjitter 64 64 64 + velocitymultiplier 100 effect nex242_misc_laser_orange_beam -countabsolute 1 -type beam -tex 200 200 -size 1 1 -alpha 256 256 64 -color 0xff6600 0xff6600 -sizeincrease 1 - -// used nowhere in code + alpha 256 256 64 + color 0xff6600 0xff6600 + countabsolute 1 + sizeincrease 1 + size 1 1 + tex 200 200 + type beam effect nex242_misc_laser_orange_beam_end -count 0.5 -type spark -color 0x8f4333 0xfff31b -size 0.4 0.4 -alpha 128 256 768 -gravity 1 -bounce -1 -velocityjitter 64 64 64 -velocitymultiplier 100 - - - - -// bigger crylink impact effect -// decal -// used in qcsrc/client/damage.qc: pointparticles(particleeffectnum("crylink_impactbig"), org2, '0 0 0', 1) + alpha 128 256 768 + bounce -1 + color 0x8f4333 0xfff31b + count 0.500000 + gravity 1 + size 0.400000 0.400000 + type spark + velocityjitter 64 64 64 + velocitymultiplier 100 effect crylink_impactbig -countabsolute 1 -type decal -tex 47 47 -size 24 24 -alpha 256 256 0 -originjitter 12 12 12 -//lightradius 200 -//lightradiusfade 800 -//lightcolor 3.2 0.4 4 -// purple flare effect + alpha 256 256 0 + countabsolute 1 + originjitter 12 12 12 + size 24 24 + tex 47 47 + type decal effect crylink_impactbig -countabsolute 1 -type static -tex 39 39 -color 0x504060 0x504060 -size 24 24 -alpha 256 256 512 -// purple sparks + alpha 256 256 512 + color 0x504060 0x504060 + countabsolute 1 + size 24 24 + tex 39 39 + type static effect crylink_impactbig -count 40 -type spark -tex 41 41 -color 0xA040C0 0xA040C0 -bounce 2 -size 6 6 -alpha 256 256 1024 -velocityjitter 512 512 512 -// purple splash + alpha 256 256 1024 + bounce 2 + color 0xA040C0 0xA040C0 + count 40 + size 6 6 + tex 41 41 + type spark + velocityjitter 512 512 512 effect crylink_impactbig -count 1.5 -type static -color 0xE070FF 0xE070FF -size 16 16 -alpha 256 256 512 -velocityjitter 32 32 32 -// purple splash + alpha 256 256 512 + color 0xE070FF 0xE070FF + count 1.500000 + size 16 16 + type static + velocityjitter 32 32 32 effect crylink_impactbig -count 3 -type static -color 0xE070FF 0xE070FF -size 16 16 -alpha 256 256 1024 -velocityjitter 256 256 256 - -// Zero-violence effects - -// impact effect indicating damage -// used in qcsrc/client/gibs.qc: pointparticles(particleeffectnum("damage_hit"), org, vel, amount * 16) + alpha 256 256 1024 + color 0xE070FF 0xE070FF + count 3 + size 16 16 + type static + velocityjitter 256 256 256 effect damage_hit -tex 48 55 -count 0.5 -type alphastatic -color 0x00FFFF 0xFF00FF -size 16 16 -sizeincrease -24 -alpha 128 128 192 -gravity -0.4 -bounce 1.5 -airfriction 5 -liquidfriction 10 -velocityjitter 256 256 256 + airfriction 5 + alpha 128 128 192 + bounce 1.500000 + color 0x00FFFF 0xFF00FF + count 0.500000 + gravity -0.400000 + liquidfriction 10 + sizeincrease -24 + size 16 16 + tex 48 55 + type alphastatic + velocityjitter 256 256 256 effect damage_hit -tex 48 55 -count 0.5 -type alphastatic -color 0xFF00FF 0xFFFF00 -size 16 16 -sizeincrease -24 -alpha 128 128 192 -gravity -0.4 -bounce 1.5 -airfriction 5 -liquidfriction 10 -velocityjitter 256 256 256 + airfriction 5 + alpha 128 128 192 + bounce 1.500000 + color 0xFF00FF 0xFFFF00 + count 0.500000 + gravity -0.400000 + liquidfriction 10 + sizeincrease -24 + size 16 16 + tex 48 55 + type alphastatic + velocityjitter 256 256 256 effect damage_hit -tex 48 55 -count 0.5 -type alphastatic -color 0xFFFF00 0x00FFFF -size 16 16 -sizeincrease -24 -alpha 128 128 192 -gravity -0.4 -bounce 1.5 -airfriction 5 -liquidfriction 10 -velocityjitter 256 256 256 - -// effect for removing player model -// "teleport" -// NOTE: maintained by div0, make your own new effect instead of changing this one without asking! -// large sparks -// used in qcsrc/client/gibs.qc: pointparticles(particleeffectnum("damage_dissolve"), org, vel, amount) + airfriction 5 + alpha 128 128 192 + bounce 1.500000 + color 0xFFFF00 0x00FFFF + count 0.500000 + gravity -0.400000 + liquidfriction 10 + sizeincrease -24 + size 16 16 + tex 48 55 + type alphastatic + velocityjitter 256 256 256 effect damage_dissolve -tex 48 55 -count 15 -type alphastatic -color 0x00FFFF 0xFF00FF -size 32 32 -sizeincrease -16 -alpha 256 256 128 -gravity -0.4 -bounce 1.5 -airfriction 3 -liquidfriction 6 -velocityjitter 512 512 512 + airfriction 3 + alpha 256 256 128 + bounce 1.500000 + color 0x00FFFF 0xFF00FF + count 15 + gravity -0.400000 + liquidfriction 6 + sizeincrease -16 + size 32 32 + tex 48 55 + type alphastatic + velocityjitter 512 512 512 effect damage_dissolve -tex 48 55 -count 15 -type alphastatic -color 0xFF00FF 0xFFFF00 -size 32 32 -sizeincrease -16 -alpha 256 256 128 -gravity -0.4 -bounce 1.5 -airfriction 3 -liquidfriction 6 -velocityjitter 512 512 512 + airfriction 3 + alpha 256 256 128 + bounce 1.500000 + color 0xFF00FF 0xFFFF00 + count 15 + gravity -0.400000 + liquidfriction 6 + sizeincrease -16 + size 32 32 + tex 48 55 + type alphastatic + velocityjitter 512 512 512 effect damage_dissolve -tex 48 55 -count 15 -type alphastatic -color 0xFFFF00 0x00FFFF -size 32 32 -sizeincrease -16 -alpha 256 256 128 -gravity -0.4 -bounce 1.5 -airfriction 3 -liquidfriction 6 -velocityjitter 512 512 512 - - -// decal -// used in qcsrc/server/g_triggers.qc: self.cnt = particleeffectnum("laser_deadly") -// used in qcsrc/server/g_triggers.qc: self.cnt = particleeffectnum("laser_deadly") + airfriction 3 + alpha 256 256 128 + bounce 1.500000 + color 0xFFFF00 0x00FFFF + count 15 + gravity -0.400000 + liquidfriction 6 + sizeincrease -16 + size 32 32 + tex 48 55 + type alphastatic + velocityjitter 512 512 512 effect laser_deadly -countabsolute 1 -type decal -tex 56 59 -size 5 5 -alpha 256 256 0 -originjitter 6 6 6 -// dust/smoke drifting away from the impact + alpha 256 256 0 + countabsolute 1 + originjitter 6 6 6 + size 5 5 + tex 56 59 + type decal effect laser_deadly -count 0.025 -type smoke -tex 48 55 -color 0xFFFFFF 0xFFFFFF -size 3 3 -alpha 0 64 64 -originjitter 1 1 1 -airfriction 7 -liquidfriction 16 -velocityjitter 15 15 15 -sizeincrease 2 -velocitymultiplier 20 -// sparks + airfriction 7 + alpha 0 64 64 + color 0xFFFFFF 0xFFFFFF + count 0.025000 + liquidfriction 16 + originjitter 1 1 1 + sizeincrease 2 + size 3 3 + tex 48 55 + type smoke + velocityjitter 15 15 15 + velocitymultiplier 20 effect laser_deadly -notunderwater -count 0.025 -type spark -tex 40 40 -color 0xFDFFD9 0xFDFFD9 -size 0.6 0.6 -alpha 256 256 768 -gravity 1 -bounce 1 -airfriction 5 -originjitter 1 1 1 -velocityjitter 100 100 100 -velocitymultiplier 100 - - -//torch -//fire -// used nowhere in code + airfriction 5 + alpha 256 256 768 + bounce 1 + color 0xFDFFD9 0xFDFFD9 + count 0.025000 + gravity 1 + notunderwater + originjitter 1 1 1 + size 0.600000 0.600000 + tex 40 40 + type spark + velocityjitter 100 100 100 + velocitymultiplier 100 effect torch_small -//notunderwater -count 8 -type smoke -tex 48 55 -size 1 11 -alpha 200 256 512 -gravity -0.5 -color 0x8f0d00 0xff5a00 -//bounce 1 -sizeincrease -1 -originjitter 5 5 5 -velocityjitter 1 1 50 -// smoke + alpha 200 256 512 + color 0x8f0d00 0xff5a00 + count 8 + gravity -0.500000 + originjitter 5 5 5 + sizeincrease -1 + size 1 11 + tex 48 55 + type smoke + velocityjitter 1 1 50 effect torch_small -type alphastatic -count 4 -tex 0 8 -size 5 10 -sizeincrease 5 -alpha 200 256 200 -color 0x000000 0x111111 -gravity -0.3 -originjitter 3 3 3 -velocityjitter 11 11 50 -//bounce 1 - -//fountain01 -// used nowhere in code + alpha 200 256 200 + color 0x000000 0x111111 + count 4 + gravity -0.300000 + originjitter 3 3 3 + sizeincrease 5 + size 5 10 + tex 0 8 + type alphastatic + velocityjitter 11 11 50 effect fountain01 -count 16 -tex 0 8 -size 10 15 -alpha 0 100 100 -gravity 0.6 -bounce 1 -sizeincrease 20 -type snow -bounce 1 -originjitter 5 5 5 -velocityjitter 81 81 150 -color 0x7cbaff 0xcfd1ff -velocitymultiplier 2 - -// decal -// used in qcsrc/client/damage.qc: pointparticles(particleeffectnum("hookbomb_explode"), org2, '0 0 0', 1) + alpha 0 100 100 + bounce 1 + color 0x7cbaff 0xcfd1ff + count 16 + gravity 0.600000 + originjitter 5 5 5 + sizeincrease 20 + size 10 15 + tex 0 8 + type snow + velocityjitter 81 81 150 + velocitymultiplier 2 effect hookbomb_explode -count 25 -type static -tex 38 38 -color 0x807aff 0x4463d5 -size 150 200 -sizeincrease -160 -alpha 0 256 200 -//gravity 1 -bounce 1.5 -originjitter 10 10 10 -velocityjitter 550 550 550 -//velocitymultiplier -20 -airfriction 10 -// decal in the air + airfriction 10 + alpha 0 256 200 + bounce 1.500000 + color 0x807aff 0x4463d5 + count 25 + originjitter 10 10 10 + sizeincrease -160 + size 150 200 + tex 38 38 + type static + velocityjitter 550 550 550 effect hookbomb_explode -countabsolute 3 -type static -tex 38 38 -color 0x807aff 0x4463d5 -size 160 200 -alpha 256 265 100 -sizeincrease -60 -originoffset 0 0 6 -// decal on the ground + alpha 256 265 100 + color 0x807aff 0x4463d5 + countabsolute 3 + originoffset 0 0 6 + sizeincrease -60 + size 160 200 + tex 38 38 + type static effect hookbomb_explode -countabsolute 1 -type decal -tex 39 39 -size 80 100 -alpha 256 256 0 -originjitter 6 6 6 -// some sparks + alpha 256 256 0 + countabsolute 1 + originjitter 6 6 6 + size 80 100 + tex 39 39 + type decal effect hookbomb_explode -count 30 -type spark -tex 38 38 -color 0x807aff 0x4463d5 -size 20 30 -alpha 256 256 456 -sizeincrease -60 -gravity 1 -bounce 1.5 -originjitter 1 1 1 -velocityjitter 1900 1900 1300 -velocitymultiplier 0.5 -airfriction 2 - - -// smoke + airfriction 2 + alpha 256 256 456 + bounce 1.500000 + color 0x807aff 0x4463d5 + count 30 + gravity 1 + originjitter 1 1 1 + sizeincrease -60 + size 20 30 + tex 38 38 + type spark + velocityjitter 1900 1900 1300 + velocitymultiplier 0.500000 effect EF_MGTURRETTRAIL -notunderwater -trailspacing 10 -type smoke -color 0xd0d0a0 0xffffff -tex 0 8 -size 5 4 -alpha 128 196 768 -sizeincrease -8 -gravity -0.01 -// bubbles + alpha 128 196 768 + color 0xd0d0a0 0xffffff + gravity -0.010000 + notunderwater + sizeincrease -8 + size 5 4 + tex 0 8 + trailspacing 10 + type smoke effect EF_MGTURRETTRAIL -underwater -trailspacing 32 -type bubble -tex 62 62 -color 0x404040 0x808080 -size 1 1 -alpha 256 256 256 -gravity -0.125 -bounce 1.5 -liquidfriction 4 -velocityjitter 16 16 16 - -//fire_big -//fire -// used nowhere in code + alpha 256 256 256 + bounce 1.500000 + color 0x404040 0x808080 + gravity -0.125000 + liquidfriction 4 + size 1 1 + tex 62 62 + trailspacing 32 + type bubble + underwater + velocityjitter 16 16 16 effect fire_big -//notunderwater -count 26 -type smoke -tex 48 55 -size 11 31 -alpha 200 356 512 -gravity -0.5 -color 0x8f0d00 0xff5a00 -bounce 2 -sizeincrease -3 -originjitter 33 33 33 -velocityjitter 22 22 50 -// smoke + alpha 200 356 512 + bounce 2 + color 0x8f0d00 0xff5a00 + count 26 + gravity -0.500000 + originjitter 33 33 33 + sizeincrease -3 + size 11 31 + tex 48 55 + type smoke + velocityjitter 22 22 50 effect fire_big -type alphastatic -count 11 -tex 0 8 -size 22 33 -sizeincrease 11 -alpha 200 256 200 -color 0x000000 0x111111 -gravity -0.3 -originjitter 44 44 44 -velocityjitter 11 11 50 -bounce 2 - -//red_flare -//smoke -// used nowhere in code + alpha 200 256 200 + bounce 2 + color 0x000000 0x111111 + count 11 + gravity -0.300000 + originjitter 44 44 44 + sizeincrease 11 + size 22 33 + tex 0 8 + type alphastatic + velocityjitter 11 11 50 effect red_flare -type alphastatic -count 10.5 -tex 0 8 -size 1 11 -sizeincrease 11 -alpha 200 256 160 -color 0xff0000 0xdc7171 -gravity -0.24 -originjitter 2 2 0 -velocityjitter 15 15 30 -bounce 1 - -//blue_flare -//smoke -// used nowhere in code + alpha 200 256 160 + bounce 1 + color 0xff0000 0xdc7171 + count 10.500000 + gravity -0.240000 + originjitter 2 2 0 + sizeincrease 11 + size 1 11 + tex 0 8 + type alphastatic + velocityjitter 15 15 30 effect blue_flare -type alphastatic -count 10.5 -tex 0 8 -size 1 11 -sizeincrease 11 -alpha 200 256 160 -color 0x0000ff 0x7194dc -gravity -0.24 -originjitter 2 2 0 -velocityjitter 15 15 30 -bounce 1 - -//smoke_ring -//smoke -// used in qcsrc/server/ctf.qc: pointparticles(particleeffectnum("smoke_ring"), 0.5 * (self.absmin + self.absmax), '0 0 0', 1); + alpha 200 256 160 + bounce 1 + color 0x0000ff 0x7194dc + count 10.500000 + gravity -0.240000 + originjitter 2 2 0 + sizeincrease 11 + size 1 11 + tex 0 8 + type alphastatic + velocityjitter 15 15 30 effect smoke_ring -type smoke -count 45 -tex 0 8 -size 1 11 -sizeincrease 21 -gravity 0.1 -airfriction 3 -alpha 100 156 200 -color 0x111111 0x979797 -//originjitter 2 2 0 -velocityjitter 190 190 50 -bounce 1.1 -notunderwater - -//smoke_large -//smoke -// used nowhere in code + airfriction 3 + alpha 100 156 200 + bounce 1.100000 + color 0x111111 0x979797 + count 45 + gravity 0.100000 + notunderwater + sizeincrease 21 + size 1 11 + tex 0 8 + type smoke + velocityjitter 190 190 50 effect smoke_large -type alphastatic -count 25 -tex 0 8 -size 11 21 -sizeincrease 21 -gravity -0.15 -airfriction 7 -alpha 140 256 190 -color 0x9e895f 0xffd39b -//originjitter 2 2 0 -velocityjitter 390 390 390 -bounce 1.1 -notunderwater - -//sparks -// used nowhere in code + airfriction 7 + alpha 140 256 190 + bounce 1.100000 + color 0x9e895f 0xffd39b + count 25 + gravity -0.150000 + notunderwater + sizeincrease 21 + size 11 21 + tex 0 8 + type alphastatic + velocityjitter 390 390 390 effect sparks -count 15 -type spark -tex 40 40 -color 0xFFFDD9 0xFFFDD9 -size 1 3 -alpha 0 256 256 -gravity 1 -bounce 1.5 -originjitter 1 1 1 -velocityjitter 300 300 200 -velocitymultiplier 1.5 -airfriction 3 - -//sparks -// used nowhere in code + airfriction 3 + alpha 0 256 256 + bounce 1.500000 + color 0xFFFDD9 0xFFFDD9 + count 15 + gravity 1 + originjitter 1 1 1 + size 1 3 + tex 40 40 + type spark + velocityjitter 300 300 200 + velocitymultiplier 1.500000 effect electricity_sparks -count 35 -type spark -tex 40 40 -color 0x807aff 0x4463d5 -size 1 3 -alpha 0 256 556 -gravity 1 -bounce 1.5 -originjitter 1 1 1 -velocityjitter 300 300 300 -velocitymultiplier 0.5 -airfriction 3 - -//steam, it needs direction -// used nowhere in code + airfriction 3 + alpha 0 256 556 + bounce 1.500000 + color 0x807aff 0x4463d5 + count 35 + gravity 1 + originjitter 1 1 1 + size 1 3 + tex 40 40 + type spark + velocityjitter 300 300 300 + velocitymultiplier 0.500000 effect steam -type smoke -count 1 -tex 0 8 -size 1 3 -sizeincrease 7 -gravity -0.25 -velocitymultiplier 14 -airfriction 5 -alpha 140 256 190 -color 0xfffbdf 0xffffff -//originjitter 2 2 0 -velocityjitter 19 19 19 -bounce 1.1 -notunderwater - -// smoke emiter -// used nowhere in code + airfriction 5 + alpha 140 256 190 + bounce 1.100000 + color 0xfffbdf 0xffffff + count 1 + gravity -0.250000 + notunderwater + sizeincrease 7 + size 1 3 + tex 0 8 + type smoke + velocityjitter 19 19 19 + velocitymultiplier 14 effect smoking -count 10 -type alphastatic -tex 0 8 -color 0x292929 0x000000 -size 10 40 -sizeincrease 5 -alpha 100 256 100 -gravity -0.1 -bounce 1.5 -originjitter 10 10 10 -velocityjitter 5 5 20 -//velocitymultiplier -20 -airfriction -1 - -//golden dust (create it once per second to cover large area in small yellow particles) -// used nowhere in code + airfriction -1 + alpha 100 256 100 + bounce 1.500000 + color 0x292929 0x000000 + count 10 + gravity -0.100000 + originjitter 10 10 10 + sizeincrease 5 + size 10 40 + tex 0 8 + type alphastatic + velocityjitter 5 5 20 effect goldendust -count 25 -type snow -tex 38 38 -color 0xff9600 0xffefb8 -size 2 3 -sizeincrease -0.3 -alpha 256 256 70 -//gravity -0.1 -bounce 1.5 -originjitter 500 500 500 -velocityjitter 0.1 0.1 0.1 -//velocitymultiplier -20 -//airfriction -0.1 - -// used nowhere in code + alpha 256 256 70 + bounce 1.500000 + color 0xff9600 0xffefb8 + count 25 + originjitter 500 500 500 + sizeincrease -0.300000 + size 2 3 + tex 38 38 + type snow + velocityjitter 0.1 0.1 0.1 effect healing_fx -count 25 -type spark -tex 40 40 -color 0xff0000 0xff0000 -size 1 3 -sizeincrease -0.05 -alpha 256 256 170 -gravity -0.1 -bounce 1.5 -originjitter 5 5 100 -velocityjitter 50 50 0 -//velocitymultiplier 20 -airfriction -0.5 - -// used nowhere in code + airfriction -0.500000 + alpha 256 256 170 + bounce 1.500000 + color 0xff0000 0xff0000 + count 25 + gravity -0.100000 + originjitter 5 5 100 + sizeincrease -0.050000 + size 1 3 + tex 40 40 + type spark + velocityjitter 50 50 0 effect armorrepair_fx -count 25 -type spark -tex 40 40 -color 0x00ff00 0x00ff00 -size 1 3 -sizeincrease -0.05 -alpha 256 256 170 -gravity -0.1 -bounce 1.5 -originjitter 5 5 50 -velocityjitter 50 50 0 -//velocitymultiplier 20 -airfriction -0.5 - -// used nowhere in code + airfriction -0.500000 + alpha 256 256 170 + bounce 1.500000 + color 0x00ff00 0x00ff00 + count 25 + gravity -0.100000 + originjitter 5 5 50 + sizeincrease -0.050000 + size 1 3 + tex 40 40 + type spark + velocityjitter 50 50 0 effect ammoregen_fx -count 25 -type spark -tex 40 40 -color 0x0000ff 0x0000ff -size 1 3 -sizeincrease -0.05 -alpha 256 256 170 -gravity -0.1 -bounce 1.5 -originjitter 5 5 50 -velocityjitter 50 50 0 -//velocitymultiplier 20 -airfriction -0.5 - -// red-yellow flame like fx -// used nowhere in code + airfriction -0.500000 + alpha 256 256 170 + bounce 1.500000 + color 0x0000ff 0x0000ff + count 25 + gravity -0.100000 + originjitter 5 5 50 + sizeincrease -0.050000 + size 1 3 + tex 40 40 + type spark + velocityjitter 50 50 0 effect rage -count 2.5 -type smoke -tex 35 36 -color 0xff0000 0xff7800 -size 1 3 -sizeincrease 10 -gravity -0.06 -alpha 256 256 190 -originjitter 5 5 5 -velocityjitter 25 25 25 -airfriction 2 - -// pieces of glass or ice falling on the floor -// used nowhere in code + airfriction 2 + alpha 256 256 190 + color 0xff0000 0xff7800 + count 2.500000 + gravity -0.060000 + originjitter 5 5 5 + sizeincrease 10 + size 1 3 + tex 35 36 + type smoke + velocityjitter 25 25 25 effect iceorglass -count 15 -type alphastatic -tex 44 44 -color 0xffffff 0xb2d3e6 -size 3 7 -//sizeincrease 10 -gravity 1.3 -alpha 256 256 0 -time 1 3 -bounce 2 -originjitter 30 30 30 -velocityjitter 100 100 100 -airfriction 3 - -// cover small area in poison gas, spawn it once per second -// used nowhere in code + airfriction 3 + alpha 256 256 0 + bounce 2 + color 0xffffff 0xb2d3e6 + count 15 + gravity 1.300000 + originjitter 30 30 30 + size 3 7 + tex 44 44 + time 1 3 + type alphastatic + velocityjitter 100 100 100 effect poisonfield -count 15 -type smoke -tex 0 8 -color 0x00ff00 0x7db843 -size 1 1 -sizeincrease 30 - gravity -0.01 -alpha 256 256 50 -bounce 1.5 -originjitter 333 333 50 -velocityjitter 5 5 5 -airfriction 1 - -// cover small area in icy mist, spawn it once per second -// used nowhere in code + airfriction 1 + alpha 256 256 50 + bounce 1.500000 + color 0x00ff00 0x7db843 + count 15 + gravity -0.010000 + originjitter 333 333 50 + sizeincrease 30 + size 1 1 + tex 0 8 + type smoke + velocityjitter 5 5 5 effect icefield -count 10 -type smoke -tex 0 8 -color 0x008aff 0x75e7ff -size 1 1 -sizeincrease 10 - gravity -0.01 -alpha 256 256 50 -bounce 1.5 -originjitter 333 333 0 -velocityjitter 5 5 30 -airfriction 1 + airfriction 1 + alpha 256 256 50 + bounce 1.500000 + color 0x008aff 0x75e7ff + count 10 + gravity -0.010000 + originjitter 333 333 0 + sizeincrease 10 + size 1 1 + tex 0 8 + type smoke + velocityjitter 5 5 30 effect icefield -count 5 -type smoke -tex 48 55 -size 1 1 -sizeincrease 10 -color 0x008aff 0x75e7ff -alpha 256 256 50 -gravity -0.001 -originjitter 333 333 0 - - -// cover very small area in flames, spawn it 3 times per second (or more often to get better looking fire at cost of fps hit ) -// flames that go up -// used nowhere in code + alpha 256 256 50 + color 0x008aff 0x75e7ff + count 5 + gravity -0.001000 + originjitter 333 333 0 + sizeincrease 10 + size 1 1 + tex 48 55 + type smoke effect firefield -count 100 -type smoke -tex 48 55 -color 0x8f0d00 0xff5a00 -size 1 1 -sizeincrease 20 - gravity -0.06 -alpha 50 256 200 -bounce 1.5 -originjitter 180 180 0 -velocityjitter 5 5 30 -airfriction 1 -//flames that stay on the ground + airfriction 1 + alpha 50 256 200 + bounce 1.500000 + color 0x8f0d00 0xff5a00 + count 100 + gravity -0.060000 + originjitter 180 180 0 + sizeincrease 20 + size 1 1 + tex 48 55 + type smoke + velocityjitter 5 5 30 effect firefield -count 50 -type smoke -tex 48 55 -color 0x8f0d00 0xff5a00 -size 1 1 -sizeincrease 40 -alpha 50 256 200 -originjitter 180 180 0 -// smoke + alpha 50 256 200 + color 0x8f0d00 0xff5a00 + count 50 + originjitter 180 180 0 + sizeincrease 40 + size 1 1 + tex 48 55 + type smoke effect firefield -count 20 -type alphastatic -tex 0 8 -size 1 1 -sizeincrease 7 -color 0x000000 0x111111 -alpha 256 256 70 -gravity -0.02 -originjitter 180 180 0 - -//flamethrower, spawn it as fast as you can 20 times per second or more, it needs direction -//fast fire -// used nowhere in code + alpha 256 256 70 + color 0x000000 0x111111 + count 20 + gravity -0.020000 + originjitter 180 180 0 + sizeincrease 7 + size 1 1 + tex 0 8 + type alphastatic effect flamethrower -count 3 -type smoke -tex 48 55 -color 0x8f0d00 0xff5a00 -size 5 5 -sizeincrease 20 - gravity -0.06 -alpha 50 256 250 -bounce 1.5 -velocityjitter 40 40 11 -velocitymultiplier 30 -airfriction 1.2 -//slowfire + airfriction 1.200000 + alpha 50 256 250 + bounce 1.500000 + color 0x8f0d00 0xff5a00 + count 3 + gravity -0.060000 + sizeincrease 20 + size 5 5 + tex 48 55 + type smoke + velocityjitter 40 40 11 + velocitymultiplier 30 effect flamethrower -count 2.5 -type smoke -tex 48 55 -color 0x8f0d00 0xff5a00 -size 5 5 -sizeincrease 20 - gravity -0.06 -alpha 50 256 200 -bounce 1.5 -velocityjitter 40 40 40 -velocitymultiplier 20 -airfriction 1.2 -// very slow and small fire + airfriction 1.200000 + alpha 50 256 200 + bounce 1.500000 + color 0x8f0d00 0xff5a00 + count 2.500000 + gravity -0.060000 + sizeincrease 20 + size 5 5 + tex 48 55 + type smoke + velocityjitter 40 40 40 + velocitymultiplier 20 effect flamethrower -count 1.5 -type smoke -tex 48 55 -color 0x8f0d00 0xff5a00 -size 5 5 -sizeincrease 10 - gravity -0.06 -alpha 50 256 200 -bounce 1.5 -velocityjitter 30 30 30 -velocitymultiplier 10 -airfriction 0.3 -//decreasing fire + airfriction 0.300000 + alpha 50 256 200 + bounce 1.500000 + color 0x8f0d00 0xff5a00 + count 1.500000 + gravity -0.060000 + sizeincrease 10 + size 5 5 + tex 48 55 + type smoke + velocityjitter 30 30 30 + velocitymultiplier 10 effect flamethrower -count 2 -type smoke -tex 48 55 -color 0x8f0d00 0xff5a00 -size 20 30 -sizeincrease -10 - gravity -0.06 -alpha 50 256 200 -bounce 1.5 -velocityjitter 10 10 10 -velocitymultiplier 15 -airfriction 0.3 -//smoke + airfriction 0.300000 + alpha 50 256 200 + bounce 1.500000 + color 0x8f0d00 0xff5a00 + count 2 + gravity -0.060000 + sizeincrease -10 + size 20 30 + tex 48 55 + type smoke + velocityjitter 10 10 10 + velocitymultiplier 15 effect flamethrower -count 0.5 -type alphastatic -tex 0 8 -size 5 15 -sizeincrease 7 -color 0x000000 0x111111 -alpha 256 256 90 -//gravity -0.2 -originjitter 10 10 10 -velocitymultiplier 20 -velocityoffset 0 0 10 -airfriction 1 - -// port-o-launch trail -// glowing vapor trail -// used in qcsrc/client/projectile.qc: trailparticles(self, particleeffectnum("TR_WIZSPIKE"), from, to) -// used in qcsrc/client/projectile.qc: trailparticles(self, particleeffectnum("TR_WIZSPIKE"), from, to) + airfriction 1 + alpha 256 256 90 + color 0x000000 0x111111 + count 0.500000 + originjitter 10 10 10 + sizeincrease 7 + size 5 15 + tex 0 8 + type alphastatic + velocitymultiplier 20 + velocityoffset 0 0 10 effect TR_WIZSPIKE -trailspacing 4 -type static -color 0x404040 0x404040 -size 3 3 -tex 62 62 -alpha 256 256 968 -//velocityjitter 16 16 16 -lightradius 90 -lighttime 0 -lightcolor 1.5 3 6 -velocitymultiplier -0.1 -// bright sparks + alpha 256 256 968 + color 0x404040 0x404040 + lightcolor 1.5 3 6 + lightradius 90 + size 3 3 + tex 62 62 + trailspacing 4 + type static + velocitymultiplier -0.100000 effect TR_WIZSPIKE -trailspacing 12 -count 1.5 -type snow -tex 42 42 -color 0x404040 0x404040 -size 2 4 -sizeincrease -20 -alpha 444 512 1866 -bounce 1 -velocityoffset 0 0 15 -airfriction 12 -originjitter 1 1 1 -velocityjitter 50 50 50 - -// TAG trail -// glowing vapor trail -// used in qcsrc/client/projectile.qc: trailparticles(self, particleeffectnum("TR_VORESPIKE"), from, to) -// used in qcsrc/client/projectile.qc: trailparticles(self, particleeffectnum("TR_VORESPIKE"), from, to) + airfriction 12 + alpha 444 512 1866 + bounce 1 + color 0x404040 0x404040 + count 1.500000 + originjitter 1 1 1 + sizeincrease -20 + size 2 4 + tex 42 42 + trailspacing 12 + type snow + velocityjitter 50 50 50 + velocityoffset 0 0 15 effect TR_VORESPIKE -trailspacing 4 -type static -color 0x804000 0x804000 -size 3 3 -tex 62 62 -alpha 256 256 968 -//velocityjitter 16 16 16 -lightradius 90 -lighttime 0 -lightcolor 1.5 3 6 -velocitymultiplier -0.1 -// bright sparks + alpha 256 256 968 + color 0x804000 0x804000 + lightcolor 1.5 3 6 + lightradius 90 + size 3 3 + tex 62 62 + trailspacing 4 + type static + velocitymultiplier -0.100000 effect TR_VORESPIKE -trailspacing 12 -count 1.5 -type snow -tex 42 42 -color 0xff8000 0xff8000 -size 2 4 -sizeincrease -20 -alpha 444 512 1866 -bounce 1 -velocityoffset 0 0 15 -airfriction 12 -originjitter 1 1 1 -velocityjitter 50 50 50 - -// used in qcsrc/client/damage.qc: pointparticles(particleeffectnum("flac_explode"), org2, '0 0 0', 1) + airfriction 12 + alpha 444 512 1866 + bounce 1 + color 0xff8000 0xff8000 + count 1.500000 + originjitter 1 1 1 + sizeincrease -20 + size 2 4 + tex 42 42 + trailspacing 12 + type snow + velocityjitter 50 50 50 + velocityoffset 0 0 15 effect flac_explode -countabsolute 1 -type decal -tex 8 16 -size 18 28 -alpha 256 256 0 -originjitter 40 40 40 -lightradius 150 -lightradiusfade 400 -lightcolor 8 4 1 -// fire effect which make bright dot inside + alpha 256 256 0 + countabsolute 1 + lightcolor 8 4 1 + lightradiusfade 400 + lightradius 150 + originjitter 40 40 40 + size 18 28 + tex 8 16 + type decal effect flac_explode -notunderwater -count 3 -type smoke -tex 48 55 -color 0xffe955 0xff5a00 -size 6 16 -sizeincrease 5 -alpha 128 256 456 -bounce 1.5 -airfriction 8 -liquidfriction 8 -originjitter 8 8 8 -velocityjitter 156 156 156 -// fire effect which expands then slows + airfriction 8 + alpha 128 256 456 + bounce 1.500000 + color 0xffe955 0xff5a00 + count 3 + liquidfriction 8 + notunderwater + originjitter 8 8 8 + sizeincrease 5 + size 6 16 + tex 48 55 + type smoke + velocityjitter 156 156 156 effect flac_explode -notunderwater -count 6 -type static -tex 48 55 -color 0x8f0d00 0xff5a00 -size 10 16 -sizeincrease 15 -alpha 128 256 456 -bounce 1.5 -airfriction 12 -liquidfriction 8 -originjitter 8 8 8 -velocityjitter 256 256 256 - -// smoke + airfriction 12 + alpha 128 256 456 + bounce 1.500000 + color 0x8f0d00 0xff5a00 + count 6 + liquidfriction 8 + notunderwater + originjitter 8 8 8 + sizeincrease 15 + size 10 16 + tex 48 55 + type static + velocityjitter 256 256 256 effect flac_explode -type alphastatic -notunderwater -tex 0 8 -count 5 -size 10 20 -sizeincrease 20 -alpha 500 600 556 -velocityjitter 244 244 244 -airfriction 5 -color 0x000000 0x111111 -bounce 2 - -// underwater bubbles + airfriction 5 + alpha 500 600 556 + bounce 2 + color 0x000000 0x111111 + count 5 + notunderwater + sizeincrease 20 + size 10 20 + tex 0 8 + type alphastatic + velocityjitter 244 244 244 effect flac_explode -underwater -count 8 -type bubble -tex 62 62 -color 0x404040 0x808080 -size 1 2 -alpha 128 256 64 -gravity -0.125 -bounce 1.5 -liquidfriction 0.25 -originjitter 16 16 16 -velocityjitter 96 96 96 -// bouncing sparks + alpha 128 256 64 + bounce 1.500000 + color 0x404040 0x808080 + count 8 + gravity -0.125000 + liquidfriction 0.250000 + originjitter 16 16 16 + size 1 2 + tex 62 62 + type bubble + underwater + velocityjitter 96 96 96 effect flac_explode -notunderwater -count 4 -type spark -color 0x903010 0xFFD030 -size 2 2 -tex 40 40 -alpha 256 256 384 -gravity 1 -airfriction 0.2 -bounce 1.5 -liquidfriction 0.8 -velocityoffset 0 0 80 -velocityjitter 256 256 256 - - -// bullet trail (somewhat like a tracer) -// used in qcsrc/server/w_common.qc: zcurveparticles_from_tracetoss(particleeffectnum("tr_bullet"), self.origin, trace_endpos, self.velocity) -// used in qcsrc/client/projectile.qc: trailparticles(self, particleeffectnum("tr_bullet"), from, to) + airfriction 0.200000 + alpha 256 256 384 + bounce 1.500000 + color 0x903010 0xFFD030 + count 4 + gravity 1 + liquidfriction 0.800000 + notunderwater + size 2 2 + tex 40 40 + type spark + velocityjitter 256 256 256 + velocityoffset 0 0 80 effect tr_bullet -trailspacing 750 -type spark -tex 70 70 -color 0xff8960 0xff8533 -alpha 256 256 2560 -size 4 4 -stretchfactor 0.2 -velocitymultiplier 3 - -// smoke emitter for small pipes -// used nowhere in code + alpha 256 256 2560 + color 0xff8960 0xff8533 + size 4 4 + stretchfactor 0.200000 + tex 70 70 + trailspacing 750 + type spark + velocitymultiplier 3 effect smoking_smallemitter -count 10 -type alphastatic -tex 0 8 -color 0x292929 0x000000 -size 6 15 -sizeincrease 20 -alpha 200 256 100 -gravity -0.1 -bounce 0 -originjitter 10 10 10 -velocityjitter 5 5 20 -//velocitymultiplier -20 -airfriction -1 - -// crylink trail -// plasma smoke -// used in qcsrc/client/projectile.qc: trailparticles(self, particleeffectnum("TR_CRYLINKPLASMA"), from, to) -// used in qcsrc/client/projectile.qc: trailparticles(self, particleeffectnum("TR_CRYLINKPLASMA"), from, to) + airfriction -1 + alpha 200 256 100 + color 0x292929 0x000000 + count 10 + gravity -0.100000 + originjitter 10 10 10 + sizeincrease 20 + size 6 15 + tex 0 8 + type alphastatic + velocityjitter 5 5 20 effect TR_CRYLINKPLASMA -trailspacing 128 -type static -color 0x5522aa 0x6622ff -size 2 2 -sizeincrease 8 -tex 32 32 -alpha 256 256 1024 -velocityjitter 8 8 8 -//lightradius 90 -//lighttime 0 -//lightcolor 1 0 1 -velocitymultiplier -0.01 -// crylink main trail + alpha 256 256 1024 + color 0x5522aa 0x6622ff + sizeincrease 8 + size 2 2 + tex 32 32 + trailspacing 128 + type static + velocityjitter 8 8 8 + velocitymultiplier -0.010000 effect TR_CRYLINKPLASMA -trailspacing 16 -type static -color 0x5522aa 0x6622ff -size 3 3 -sizeincrease 15 -tex 3 3 -alpha 256 256 2600 -velocityjitter 2 2 2 -velocitymultiplier 0.01 - + alpha 256 256 2600 + color 0x5522aa 0x6622ff + sizeincrease 15 + size 3 3 + tex 3 3 + trailspacing 16 + type static + velocityjitter 2 2 2 + velocitymultiplier 0.010000 effect cherryblossom -count 1.5 -type static -color 0xb123ff 0xb183ff -size 1.5 2 -alpha 128 256 32 -gravity 0.05 -bounce 1.5 -airfriction 1 -liquidfriction 1 -originjitter 16 16 16 -velocityjitter 32 32 0 -tex 40 40 -//lightradius 200 -//lighttime 0 - + airfriction 1 + alpha 128 256 32 + bounce 1.500000 + color 0xb123ff 0xb183ff + count 1.500000 + gravity 0.050000 + liquidfriction 1 + originjitter 16 16 16 + size 1.500000 2 + tex 40 40 + type static + velocityjitter 32 32 0 effect alien_blood -count 0.4 -type spark -blend invmod -tex 24 32 -size 5 11 -alpha 1560 2560 7000 -color 0xDC9BCD 0xDC9BCD -bounce -1 -airfriction 0.4 -velocityjitter 99 99 55 -//velocitymultiplier 2 -staincolor 0xDC9BCD 0xDC9BCD -staintex 16 24 -stainsize 1 2 -stretchfactor 25 -sizeincrease 20 -//blood mist + airfriction 0.400000 + alpha 1560 2560 7000 + blend invmod + bounce -1 + color 0xDC9BCD 0xDC9BCD + count 0.400000 + sizeincrease 20 + size 5 11 + staincolor 0xDC9BCD 0xDC9BCD + stainsize 1 2 + staintex 16 24 + stretchfactor 25 + tex 24 32 + type spark + velocityjitter 99 99 55 effect alien_blood -countabsolute 1 -type smoke -blend invmod -tex 24 32 -size 25 30 -sizeincrease 20 -alpha 3000 5560 12000 -color 0xDC9BCD 0xDC9BCD -originjitter 11 11 11 - + alpha 3000 5560 12000 + blend invmod + color 0xDC9BCD 0xDC9BCD + countabsolute 1 + originjitter 11 11 11 + sizeincrease 20 + size 25 30 + tex 24 32 + type smoke effect robot_blood -count 0.167 -type spark -tex 70 70 -size 1 2 -alpha 256 256 64 -color 0xff3000 0xff7373 -bounce -1 -gravity 1 -airfriction 1 -liquidfriction 4 -velocityjitter 264 264 264 -velocityoffset 0 0 100 -//shockwave + airfriction 1 + alpha 256 256 64 + bounce -1 + color 0xff3000 0xff7373 + count 0.167000 + gravity 1 + liquidfriction 4 + size 1 2 + tex 70 70 + type spark + velocityjitter 264 264 264 + velocityoffset 0 0 100 effect robot_blood -countabsolute 1 -type smoke -tex 74 74 -size 2 2 -alpha 0 90 1000 -color 0xff8400 0xffbb72 -originjitter 11 11 11 -sizeincrease 800 -// electo sparcks + alpha 0 90 1000 + color 0xff8400 0xffbb72 + countabsolute 1 + originjitter 11 11 11 + sizeincrease 800 + size 2 2 + tex 74 74 + type smoke effect robot_blood -count 0.1 -type smoke -tex 71 73 -size 20 40 -alpha 256 256 5120 -color 0xff3000 0xff8585 -originjitter 41 41 21 -rotate -180 180 4000 -4000 - - - + alpha 256 256 5120 + color 0xff3000 0xff8585 + count 0.100000 + originjitter 41 41 21 + rotate -180 180 4000 -4000 + size 20 40 + tex 71 73 + type smoke effect alien_TR_BLOOD -trailspacing 20 -type spark -blend invmod -color 0xC080B0 0xC080B0 -tex 24 32 -size 4 19 -alpha 384 984 1492 -bounce -1 -gravity 0.4 -airfriction -2 -liquidfriction 1 -velocityjitter 64 64 64 -velocitymultiplier -0.1 -staincolor 0xC080B0 0xC080B0 -staintex 16 24 -stainsize 1 2 -stretchfactor 7 -sizeincrease -5 -// splash around gib -effect TR_BLOOD -trailspacing 42 -type blood -color 0xA8FFFF 0xA8FFFF -tex 24 32 -size 4 6 -alpha 684 684 7492 -sizeincrease 500 - + airfriction -2 + alpha 384 984 1492 + blend invmod + bounce -1 + color 0xC080B0 0xC080B0 + gravity 0.400000 + liquidfriction 1 + sizeincrease -5 + size 4 19 + staincolor 0xC080B0 0xC080B0 + stainsize 1 2 + staintex 16 24 + stretchfactor 7 + tex 24 32 + trailspacing 20 + type spark + velocityjitter 64 64 64 + velocitymultiplier -0.100000 +effect alien_TR_BLOOD + alpha 684 684 7492 + color 0xA8FFFF 0xA8FFFF + sizeincrease 500 + size 4 6 + tex 24 32 + trailspacing 42 + type blood effect robot_TR_BLOOD -trailspacing 16 -type spark -blend invmod -color 0xC0D890 0xC0D890 -tex 24 32 -size 4 13 -alpha 384 984 1892 -bounce -1 -gravity 0.4 -airfriction -2 -liquidfriction 1 -velocityjitter 64 64 64 -velocitymultiplier -0.3 -staincolor 0x808080 0x808080 -staintex 16 24 -stainsize 1 3 -stretchfactor 6 -sizeincrease -6 -// fire + airfriction -2 + alpha 384 984 1892 + blend invmod + bounce -1 + color 0xC0D890 0xC0D890 + gravity 0.400000 + liquidfriction 1 + sizeincrease -6 + size 4 13 + staincolor 0x808080 0x808080 + stainsize 1 3 + staintex 16 24 + stretchfactor 6 + tex 24 32 + trailspacing 16 + type spark + velocityjitter 64 64 64 + velocitymultiplier -0.300000 effect robot_TR_BLOOD -notunderwater -trailspacing 16 -type spark -tex 48 55 -color 0x902010 0xff3600 -size 5 20 -alpha 128 256 900 -gravity -1 -airfriction 4 -liquidfriction 4 -stretchfactor 5 -sizeincrease 10 -velocityjitter 44 44 44 -// arcs + airfriction 4 + alpha 128 256 900 + color 0x902010 0xff3600 + gravity -1 + liquidfriction 4 + notunderwater + sizeincrease 10 + size 5 20 + stretchfactor 5 + tex 48 55 + trailspacing 16 + type spark + velocityjitter 44 44 44 effect robot_TR_BLOOD -trailspacing 128 -type smoke -tex 71 73 -color 0xff3000 0xff8585 -size 25 30 -alpha 1128 1256 44900 -rotate -180 180 4000 -4000 -velocityjitter 44 44 44 - - + alpha 1128 1256 44900 + color 0xff3000 0xff8585 + rotate -180 180 4000 -4000 + size 25 30 + tex 71 73 + trailspacing 128 + type smoke + velocityjitter 44 44 44 effect alien_TR_SLIGHTBLOOD -trailspacing 64 -type blood -color 0xC080B0 0xC080B0 -tex 24 32 -size 80 80 -alpha 384 384 192 -bounce -1 -airfriction 1 -liquidfriction 4 -velocityjitter 64 64 64 -velocitymultiplier 0.5 -staincolor 0x808080 0x808080 -staintex 16 24 - + airfriction 1 + alpha 384 384 192 + bounce -1 + color 0xC080B0 0xC080B0 + liquidfriction 4 + size 80 80 + staincolor 0x808080 0x808080 + staintex 16 24 + tex 24 32 + trailspacing 64 + type blood + velocityjitter 64 64 64 + velocitymultiplier 0.500000 effect robot_TR_SLIGHTBLOOD -trailspacing 64 -type blood -color 0xC0D890 0xC0D890 -tex 24 32 -size 8 8 -alpha 384 384 192 -bounce -1 -airfriction 1 -liquidfriction 4 -velocityjitter 64 64 64 -velocitymultiplier 0.5 -staincolor 0x808080 0x808080 -staintex 16 24 - -// flare particle and light -// used in qcsrc/server/t_items.qc: pointparticles(particleeffectnum("item_pickup"), self.origin, '0 0 0', 1) + airfriction 1 + alpha 384 384 192 + bounce -1 + color 0xC0D890 0xC0D890 + liquidfriction 4 + size 8 8 + staincolor 0x808080 0x808080 + staintex 16 24 + tex 24 32 + trailspacing 64 + type blood + velocityjitter 64 64 64 + velocitymultiplier 0.500000 effect item_pickup -countabsolute 1 -type static -color 0x63F2EA 0xB0C5C4 -size 8 16 -alpha 128 64 64 -// cloud of particles which expand rapidly and then slow to form a ball + alpha 128 64 64 + color 0x63F2EA 0xB0C5C4 + countabsolute 1 + size 8 16 + type static effect item_pickup -count 32 -type spark -tex 41 41 -color 0x63F2EA 0xB0C5C4 -size 1 1 -alpha 256 256 1280 -//originjitter 24 24 24 -velocityjitter 256 256 256 - + alpha 256 256 1280 + color 0x63F2EA 0xB0C5C4 + count 32 + size 1 1 + tex 41 41 + type spark + velocityjitter 256 256 256 effect bloodshower -count 125 -type spark -blend invmod -tex 24 32 -size 8 28 -color 0xA8FFFF 0xA8FFFFF -alpha 156 656 1664 -bounce -1 -gravity 1 -stretchfactor 3 -liquidfriction 4 -velocityjitter 764 764 764 -// velocitymultiplier 1 -staincolor 0x808080 0x808080 -staintex 16 24 -stainsize 1 2 -// center blood + alpha 156 656 1664 + blend invmod + bounce -1 + color 0xA8FFFF 0xA8FFFFF + count 125 + gravity 1 + liquidfriction 4 + size 8 28 + staincolor 0x808080 0x808080 + stainsize 1 2 + staintex 16 24 + stretchfactor 3 + tex 24 32 + type spark + velocityjitter 764 764 764 effect bloodshower -countabsolute 0.1 -type smoke -blend invmod -tex 24 32 -size 1 28 -sizeincrease 300 -originjitter 50 50 50 -color 0xA8FFFF 0xA8FFFFF -alpha 156 656 1664 - + alpha 156 656 1664 + blend invmod + color 0xA8FFFF 0xA8FFFFF + countabsolute 0.100000 + originjitter 50 50 50 + sizeincrease 300 + size 1 28 + tex 24 32 + type smoke effect alien_bloodshower -count 125 -type spark -blend invmod -tex 24 32 -size 8 28 -color 0xC080B0 0xC080B0 -alpha 156 656 1664 -bounce -1 -gravity 1 -stretchfactor 3 -liquidfriction 4 -velocityjitter 764 764 764 -// velocitymultiplier 1 -staincolor 0xC080B0 0xC080B0 -staintex 16 24 -stainsize 1 2 -// center blood -effect bloodshower -countabsolute 0.1 -type smoke -blend invmod -tex 24 32 -size 1 28 -sizeincrease 300 -originjitter 50 50 50 -color 0xA8FFFF 0xA8FFFFF -alpha 156 656 1664 - - + alpha 156 656 1664 + blend invmod + bounce -1 + color 0xC080B0 0xC080B0 + count 125 + gravity 1 + liquidfriction 4 + size 8 28 + staincolor 0xC080B0 0xC080B0 + stainsize 1 2 + staintex 16 24 + stretchfactor 3 + tex 24 32 + type spark + velocityjitter 764 764 764 +effect alien_bloodshower + alpha 156 656 1664 + blend invmod + color 0xA8FFFF 0xA8FFFFF + countabsolute 0.100000 + originjitter 50 50 50 + sizeincrease 300 + size 1 28 + tex 24 32 + type smoke effect robot_bloodshower -count 100 -type spark -blend invmod -tex 24 32 -size 8 28 -color 0xC0D890 0xC0D890 -alpha 156 656 1664 -bounce -1 -gravity 1 -stretchfactor 3 -liquidfriction 4 -velocityjitter 764 764 764 -// velocitymultiplier 1 -staincolor 0xC0D890 0xC0D890 -staintex 16 24 -stainsize 1 2 -// arc + alpha 156 656 1664 + blend invmod + bounce -1 + color 0xC0D890 0xC0D890 + count 100 + gravity 1 + liquidfriction 4 + size 8 28 + staincolor 0xC0D890 0xC0D890 + stainsize 1 2 + staintex 16 24 + stretchfactor 3 + tex 24 32 + type spark + velocityjitter 764 764 764 effect robot_bloodshower -count 2.5 -type smoke -tex 71 73 -color 0xff3000 0xff8585 -size 25 40 -alpha 1128 1256 4200 -rotate -180 180 99 -99 -velocityjitter 44 44 44 -originjitter 150 150 150 -// shockwave + alpha 1128 1256 4200 + color 0xff3000 0xff8585 + count 2.500000 + originjitter 150 150 150 + rotate -180 180 99 -99 + size 25 40 + tex 71 73 + type smoke + velocityjitter 44 44 44 effect robot_bloodshower -count 2.5 -type smoke -tex 74 74 -color 0xff3000 0xff8585 -size 5 50 -sizeincrease 3000 -alpha 11 125 990 - -//red_ground_quake -//smoke -// used in qsrc/server/ctf.qc: pointparticles(particleeffectnum("red_ground_quake"), self.origin, '0 0 0', 1); + alpha 11 125 990 + color 0xff3000 0xff8585 + count 2.500000 + sizeincrease 3000 + size 5 50 + tex 74 74 + type smoke effect red_ground_quake -type smoke -count 90 -tex 0 8 -size 20 50 -sizeincrease 100 -gravity 0.5 -time 5 10 -airfriction 3 -alpha 100 126 200 -color 0x111111 0xbbbbbb -//originjitter 2 2 0 -velocityjitter 190 190 50 -bounce 1.1 -notunderwater + airfriction 3 + alpha 100 126 200 + bounce 1.100000 + color 0x111111 0xbbbbbb + count 90 + gravity 0.500000 + notunderwater + sizeincrease 100 + size 20 50 + tex 0 8 + time 5 10 + type smoke + velocityjitter 190 190 50 effect red_ground_quake -type smoke -count 40 -tex 0 8 -size 10 30 -sizeincrease 60 -gravity 0.2 -time 10 15 -airfriction 4 -alpha 100 126 200 -color 0x111111 0x979797 -//originjitter 2 2 0 -velocityjitter 190 190 50 -bounce 1.2 -notunderwater + airfriction 4 + alpha 100 126 200 + bounce 1.200000 + color 0x111111 0x979797 + count 40 + gravity 0.200000 + notunderwater + sizeincrease 60 + size 10 30 + tex 0 8 + time 10 15 + type smoke + velocityjitter 190 190 50 effect red_ground_quake -//notunderwater -count 16 -type smoke -tex 48 55 -size 4 20 -time 15 25 -alpha 200 356 512 -gravity -0.5 -color 0x9E6A64 0x91302D -bounce 6 -sizeincrease 5 -originjitter 33 33 33 -velocityjitter 22 22 50 -// smoke + alpha 200 356 512 + bounce 6 + color 0x9E6A64 0x91302D + count 16 + gravity -0.500000 + originjitter 33 33 33 + sizeincrease 5 + size 4 20 + tex 48 55 + time 15 25 + type smoke + velocityjitter 22 22 50 effect red_ground_quake -type alphastatic -count 11 -tex 0 8 -size 22 33 -sizeincrease 11 -time 25 35 -alpha 200 256 200 -color 0x000000 0xffffff -gravity -0.3 -originjitter 44 44 44 -velocityjitter 11 11 50 -bounce 2 - -//blue_ground_quake -//smoke -// used in qsrc/server/ctf.qc: pointparticles(particleeffectnum("blue_ground_quake"), self.origin, '0 0 0', 1); + alpha 200 256 200 + bounce 2 + color 0x000000 0xffffff + count 11 + gravity -0.300000 + originjitter 44 44 44 + sizeincrease 11 + size 22 33 + tex 0 8 + time 25 35 + type alphastatic + velocityjitter 11 11 50 effect blue_ground_quake -type smoke -count 90 -tex 0 8 -size 20 50 -sizeincrease 100 -gravity 0.5 -time 5 10 -airfriction 3 -alpha 100 126 200 -color 0x111111 0xbbbbbb -//originjitter 2 2 0 -velocityjitter 190 190 50 -bounce 1.1 -notunderwater + airfriction 3 + alpha 100 126 200 + bounce 1.100000 + color 0x111111 0xbbbbbb + count 90 + gravity 0.500000 + notunderwater + sizeincrease 100 + size 20 50 + tex 0 8 + time 5 10 + type smoke + velocityjitter 190 190 50 effect blue_ground_quake -type smoke -count 40 -tex 0 8 -size 10 30 -sizeincrease 60 -gravity 0.2 -time 10 15 -airfriction 4 -alpha 100 126 200 -color 0x111111 0x979797 -//originjitter 2 2 0 -velocityjitter 190 190 50 -bounce 1.2 -notunderwater + airfriction 4 + alpha 100 126 200 + bounce 1.200000 + color 0x111111 0x979797 + count 40 + gravity 0.200000 + notunderwater + sizeincrease 60 + size 10 30 + tex 0 8 + time 10 15 + type smoke + velocityjitter 190 190 50 effect blue_ground_quake -//notunderwater -count 16 -type smoke -tex 48 55 -size 4 20 -time 15 25 -alpha 200 356 512 -gravity -0.5 -color 0x64679E 0x2D4C91 -bounce 6 -sizeincrease 5 -originjitter 33 33 33 -velocityjitter 22 22 50 -// smoke + alpha 200 356 512 + bounce 6 + color 0x64679E 0x2D4C91 + count 16 + gravity -0.500000 + originjitter 33 33 33 + sizeincrease 5 + size 4 20 + tex 48 55 + time 15 25 + type smoke + velocityjitter 22 22 50 effect blue_ground_quake -type alphastatic -count 11 -tex 0 8 -size 22 33 -sizeincrease 11 -time 25 35 -alpha 200 256 200 -color 0x000000 0xffffff -gravity -0.3 -originjitter 44 44 44 -velocityjitter 11 11 50 -bounce 2 - - - -// cl_gentle impact effect indicating damage -// maintained by morphed -// used in qcsrc/client/gibs.qc: pointparticles(particleeffectnum("damage_hit"), org, vel, amount * 16) + alpha 200 256 200 + bounce 2 + color 0x000000 0xffffff + count 11 + gravity -0.300000 + originjitter 44 44 44 + sizeincrease 11 + size 22 33 + tex 0 8 + time 25 35 + type alphastatic + velocityjitter 11 11 50 effect morphed_damage_hit -tex 43 43 -count 0.5 -type spark -color 0xffffff 0x9271fb -size 14 24 -sizeincrease -24 -alpha 128 128 292 -gravity -0.4 -airfriction 5 -liquidfriction 10 -velocityjitter 356 356 456 - + airfriction 5 + alpha 128 128 292 + color 0xffffff 0x9271fb + count 0.500000 + gravity -0.400000 + liquidfriction 10 + sizeincrease -24 + size 14 24 + tex 43 43 + type spark + velocityjitter 356 356 456 effect morphed_damage_hit -tex 0 8 -count 0.5 -type smoke -color 0xffffff 0x9271fb -size 24 24 -sizeincrease -24 -alpha 128 128 292 -airfriction 5 -liquidfriction 10 -originjitter 10 10 10 - - -// effect for removing player model -// "teleport" - -// cl_gentle deathfx -// used in qcsrc/client/gibs.qc: pointparticles(particleeffectnum("damage_dissolve"), org, vel, amount) + airfriction 5 + alpha 128 128 292 + color 0xffffff 0x9271fb + count 0.500000 + liquidfriction 10 + originjitter 10 10 10 + sizeincrease -24 + size 24 24 + tex 0 8 + type smoke effect morphed_damage_dissolve -tex 43 43 -count 10 -type smoke -color 0xffffff 0x9271fb -size 40 40 -sizeincrease -16 -alpha 456 456 1828 -gravity -1.9 -airfriction 8 -liquidfriction 6 -velocityjitter 256 256 512 -rotate -180 180 -399 -99 - + airfriction 8 + alpha 456 456 1828 + color 0xffffff 0x9271fb + count 10 + gravity -1.900000 + liquidfriction 6 + rotate -180 180 -399 -99 + sizeincrease -16 + size 40 40 + tex 43 43 + type smoke + velocityjitter 256 256 512 effect morphed_damage_dissolve -tex 43 43 -count 2.5 -type smoke -color 0x7bdbff 0xbed2ff -size 40 40 -sizeincrease -16 -alpha 256 256 628 -gravity -0.8 -airfriction 9 -liquidfriction 6 -velocityjitter 256 256 512 -rotate -180 180 0 0 - + airfriction 9 + alpha 256 256 628 + color 0x7bdbff 0xbed2ff + count 2.500000 + gravity -0.800000 + liquidfriction 6 + rotate -180 180 0 0 + sizeincrease -16 + size 40 40 + tex 43 43 + type smoke + velocityjitter 256 256 512 effect morphed_damage_dissolve -tex 65 65 -count 5 -type smoke -color 0xffffff 0x9271fb -size 44 44 -sizeincrease -16 -alpha 156 156 128 -airfriction 3 -liquidfriction 6 -originjitter 22 22 76 - + airfriction 3 + alpha 156 156 128 + color 0xffffff 0x9271fb + count 5 + liquidfriction 6 + originjitter 22 22 76 + sizeincrease -16 + size 44 44 + tex 65 65 + type smoke effect morphed_damage_dissolve -tex 46 46 -count 15 -type smoke -color 0xffffff 0x9271fb -size 32 32 -sizeincrease -16 -alpha 56 56 128 -gravity 1 -bounce 1.5 -airfriction 3 -liquidfriction 6 -velocityjitter 400 400 0 -rotate -180 180 999 -999 - -// Team / hit minsta effects + airfriction 3 + alpha 56 56 128 + bounce 1.500000 + color 0xffffff 0x9271fb + count 15 + gravity 1 + liquidfriction 6 + rotate -180 180 999 -999 + sizeincrease -16 + size 32 32 + tex 46 46 + type smoke + velocityjitter 400 400 0 effect TE_TEI_G3RED -countabsolute 1 -type beam -tex 200 200 -color 0xFF0000 0xFF0000 -size 4 4 -alpha 128 128 256 -// experimental + alpha 128 128 256 + color 0xFF0000 0xFF0011 + countabsolute 1 + size 4 4 + tex 200 200 + type beam effect TE_TEI_G3RED -trailspacing 8 -type static -color 0x200000 0x400000 -size 0.3 0.3 -sizeincrease 3 -tex 46 46 -alpha 256 256 512 -airfriction -4 -//liquidfriction -4 -velocityjitter 3 3 3 -type smoke - + airfriction -4 + alpha 256 256 512 + color 0x200000 0x400000 + sizeincrease 3 + size 0.300000 0.300000 + tex 46 46 + trailspacing 8 + type smoke + velocityjitter 3 3 3 effect TE_TEI_G3RED_HIT -countabsolute 1 -type beam -tex 200 200 -color 0xFF0000 0xFF0000 -size 8 8 -alpha 128 128 256 -// experimental + alpha 128 128 256 + color 0xFF0000 0xFF0011 + countabsolute 1 + size 8 8 + tex 200 200 + type beam effect TE_TEI_G3RED_HIT -trailspacing 20 -type static -color 0xFFFFFF 0xFF0011 -size 2 2 -sizeincrease -2 -alpha 256 256 512 -airfriction -4 -//liquidfriction -4 -velocityjitter 2 2 2 -type smoke -// rings + airfriction -4 + alpha 256 256 512 + color 0xFFFFFF 0xFF0011 + sizeincrease -2 + size 2 2 + trailspacing 20 + type smoke + velocityjitter 2 2 2 effect TE_TEI_G3RED_HIT -trailspacing 40 -type static -color 0xFF0000 0xFF0011 -size 10 10 -sizeincrease -6 -alpha 256 256 512 -airfriction -4 -//liquidfriction -4 -type smoke - + airfriction -4 + alpha 256 256 512 + color 0xFF0000 0xFF0011 + sizeincrease -6 + size 10 10 + trailspacing 40 + type smoke effect TE_TEI_G3BLUE -countabsolute 1 -type beam -tex 200 200 -color 0x0000FF 0x1100FF -size 4 4 -alpha 128 128 256 -// experimental + alpha 128 128 256 + color 0x0000FF 0x1100FF + countabsolute 1 + size 4 4 + tex 200 200 + type beam effect TE_TEI_G3BLUE -trailspacing 8 -type static -color 0x000020 0x000040 -size 0.3 0.3 -sizeincrease 3 -tex 46 46 -alpha 256 256 512 -airfriction -4 -//liquidfriction -4 -velocityjitter 3 3 3 -type smoke - + airfriction -4 + alpha 256 256 512 + color 0x000020 0x000040 + sizeincrease 3 + size 0.300000 0.300000 + tex 46 46 + trailspacing 8 + type smoke + velocityjitter 3 3 3 effect TE_TEI_G3BLUE_HIT -countabsolute 1 -type beam -tex 200 200 -color 0x0000FF 0x1100FF -size 8 8 -alpha 128 128 256 -// experimental + alpha 128 128 256 + color 0x0000FF 0x1100FF + countabsolute 1 + size 8 8 + tex 200 200 + type beam effect TE_TEI_G3BLUE_HIT -trailspacing 20 -type static -color 0xFFFFFF 0x100FF -size 2 2 -sizeincrease -2 -alpha 256 256 512 -airfriction -4 -//liquidfriction -4 -velocityjitter 2 2 2 -type smoke -// rings + airfriction -4 + alpha 256 256 512 + color 0xFFFFFF 0x1100FF + sizeincrease -2 + size 2 2 + trailspacing 20 + type smoke + velocityjitter 2 2 2 effect TE_TEI_G3BLUE_HIT -trailspacing 40 -type static -color 0x0000FF 0x1100FF -size 10 10 -sizeincrease -6 -alpha 256 256 512 -airfriction -4 -//liquidfriction -4 -type smoke - -// Yellow + airfriction -4 + alpha 256 256 512 + color 0x0000FF 0x1100FF + sizeincrease -6 + size 10 10 + trailspacing 40 + type smoke effect TE_TEI_G3YELLOW -countabsolute 1 -type beam -tex 200 200 -color 0xffff00 0xffff11 -size 4 4 -alpha 128 128 256 + alpha 128 128 256 + color 0xffff00 0xffff11 + countabsolute 1 + size 4 4 + tex 200 200 + type beam effect TE_TEI_G3YELLOW -trailspacing 8 -type static -color 0x202000 0x404000 -size 0.3 0.3 -sizeincrease 3 -tex 46 46 -alpha 256 256 512 -airfriction -4 -velocityjitter 3 3 3 -type smoke - + airfriction -4 + alpha 256 256 512 + color 0x202000 0x404000 + sizeincrease 3 + size 0.300000 0.300000 + tex 46 46 + trailspacing 8 + type smoke + velocityjitter 3 3 3 effect TE_TEI_G3YELLOW_HIT -countabsolute 1 -type beam -tex 200 200 -color 0xffff00 0xffff11 -size 8 8 -alpha 128 128 256 + alpha 128 128 256 + color 0xffff00 0xffff11 + countabsolute 1 + size 8 8 + tex 200 200 + type beam effect TE_TEI_G3YELLOW_HIT -trailspacing 20 -type static -color 0xFFFFFF 0xffff10 -size 2 2 -sizeincrease -2 -alpha 256 256 512 -airfriction -4 -velocityjitter 2 2 2 -type smoke -// rings + airfriction -4 + alpha 256 256 512 + color 0xFFFFFF 0xffff11 + sizeincrease -2 + size 2 2 + trailspacing 20 + type smoke + velocityjitter 2 2 2 effect TE_TEI_G3YELLOW_HIT -trailspacing 40 -type static -color 0xffff00 0xffff11 -size 10 10 -sizeincrease -6 -alpha 256 256 512 -airfriction -4 -//liquidfriction -4 -type smoke - - -// Pink -effect TE_TEI_G3PINK -countabsolute 1 -type beam -tex 200 200 -color 0xFF00FF 0xFF11FF -size 4 4 -alpha 128 128 256 -// experimental + airfriction -4 + alpha 256 256 512 + color 0xffff00 0xffff11 + sizeincrease -6 + size 10 10 + trailspacing 40 + type smoke effect TE_TEI_G3PINK -trailspacing 8 -type static -color 0x200020 0x400040 -size 0.3 0.3 -sizeincrease 3 -tex 46 46 -alpha 256 256 512 -airfriction -4 -//liquidfriction -4 -velocityjitter 3 3 3 -type smoke - + alpha 128 128 256 + color 0xFF00FF 0xFF11FF + countabsolute 1 + size 4 4 + tex 200 200 + type beam +effect TE_TEI_G3PINK + airfriction -4 + alpha 256 256 512 + color 0x200020 0x400040 + sizeincrease 3 + size 0.300000 0.300000 + tex 46 46 + trailspacing 8 + type smoke + velocityjitter 3 3 3 effect TE_TEI_G3PINK_HIT -countabsolute 1 -type beam -tex 200 200 -color 0xFF00FF 0xFF11FF -size 8 8 -alpha 128 128 256 -// experimental + alpha 128 128 256 + color 0xFF00FF 0xFF11FF + countabsolute 1 + size 8 8 + tex 200 200 + type beam effect TE_TEI_G3PINK_HIT -trailspacing 20 -type static -color 0xFFFFFF 0xFF10FF -size 2 2 -sizeincrease -2 -alpha 256 256 512 -airfriction -4 -//liquidfriction -4 -velocityjitter 2 2 2 -type smoke -// rings + airfriction -4 + alpha 256 256 512 + color 0xFFFFFF 0xFF11FF + sizeincrease -2 + size 2 2 + trailspacing 20 + type smoke + velocityjitter 2 2 2 effect TE_TEI_G3PINK_HIT -trailspacing 40 -type static -color 0xFF00FF 0xFF11FF -size 10 10 -sizeincrease -6 -alpha 256 256 512 -airfriction -4 -//liquidfriction -4 -type smoke - - - - -// cl_gentle impact effect indicating damage -// maintained by particlegibs -// used in qcsrc/client/gibs.qc: pointparticles(particleeffectnum("damage_hit"), org, vel, amount * 16) -// core decal + airfriction -4 + alpha 256 256 512 + color 0xFF00FF 0xFF11FF + sizeincrease -6 + size 10 10 + trailspacing 40 + type smoke effect particlegibs_damage_hit -type blood -count 0.5 -tex 0 8 -size 5 10 -color 0xA8FFFF 0xA8FFFFF -alpha 256 256 428 -gravity 1 -bounce -1 -airfriction 3 -liquidfriction 6 -velocityjitter 156 156 212 -staincolor 0x808080 0x808080 -staintex 16 24 -// front blood + airfriction 3 + alpha 256 256 428 + bounce -1 + color 0xA8FFFF 0xA8FFFFF + count 0.500000 + gravity 1 + liquidfriction 6 + size 5 10 + staincolor 0x808080 0x808080 + staintex 16 24 + tex 0 8 + type blood + velocityjitter 156 156 212 effect particlegibs_damage_hit -type blood -count 0.1 -tex 24 32 -size 10 20 -color 0xA8FFFF 0xA8FFFFF -sizeincrease -15 -alpha 256 256 328 -bounce -1 -gravity 0.5 -airfriction 1 -liquidfriction 3 -velocityjitter 6 6 30 -velocitymultiplier -1 -staincolor 0x808080 0x808080 -staintex 16 24 -// back blood + airfriction 1 + alpha 256 256 328 + bounce -1 + color 0xA8FFFF 0xA8FFFFF + count 0.100000 + gravity 0.500000 + liquidfriction 3 + sizeincrease -15 + size 10 20 + staincolor 0x808080 0x808080 + staintex 16 24 + tex 24 32 + type blood + velocityjitter 6 6 30 + velocitymultiplier -1 effect particlegibs_damage_hit -type blood -count 0.1 -tex 24 32 -size 5 15 -color 0xA8FFFF 0xA8FFFFF -sizeincrease 10 -alpha 256 256 328 -bounce -1 -gravity 1 -airfriction 1 -liquidfriction 3 -velocityjitter 26 26 112 -originjitter 3 3 3 -velocitymultiplier 2 -staincolor 0x808080 0x808080 -staintex 16 24 - -// effect for removing player model -// "teleport" - -// cl_gentle deathfx -// used in qcsrc/client/gibs.qc: pointparticles(particleeffectnum("damage_dissolve"), org, vel, amount) -// small core blood no decals + airfriction 1 + alpha 256 256 328 + bounce -1 + color 0xA8FFFF 0xA8FFFFF + count 0.100000 + gravity 1 + liquidfriction 3 + originjitter 3 3 3 + sizeincrease 10 + size 5 15 + staincolor 0x808080 0x808080 + staintex 16 24 + tex 24 32 + type blood + velocityjitter 26 26 112 + velocitymultiplier 2 effect particlegibs_damage_dissolve -type blood -count 32 -tex 0 8 -size 15 20 -color 0x00ffff 0x82ffff -alpha 256 256 328 -gravity 1 -airfriction 3 -liquidfriction 6 -originjitter 10 10 25 -velocityjitter 256 256 312 -staincolor 0x808080 0x808080 -staintex 16 24 -// core decal + airfriction 3 + alpha 256 256 328 + color 0x00ffff 0x82ffff + count 32 + gravity 1 + liquidfriction 6 + originjitter 10 10 25 + size 15 20 + staincolor 0x808080 0x808080 + staintex 16 24 + tex 0 8 + type blood + velocityjitter 256 256 312 effect particlegibs_damage_dissolve -type blood -count 12 -tex 0 8 -size 20 40 -color 0xA8FFFF 0xA8FFFFF -alpha 256 256 528 -gravity 2 -bounce -1 -airfriction 2 -liquidfriction 6 -originjitter 10 10 25 -velocityjitter 356 356 412 -staincolor 0x808080 0x808080 -staintex 16 24 -// front blood + airfriction 2 + alpha 256 256 528 + bounce -1 + color 0xA8FFFF 0xA8FFFFF + count 12 + gravity 2 + liquidfriction 6 + originjitter 10 10 25 + size 20 40 + staincolor 0x808080 0x808080 + staintex 16 24 + tex 0 8 + type blood + velocityjitter 356 356 412 effect particlegibs_damage_dissolve -type blood -count 32 -tex 24 32 -size 10 20 -color 0xA8FFFF 0xA8FFFFF -sizeincrease -15 -alpha 256 256 328 -bounce -1 -gravity 0.5 -airfriction 1 -liquidfriction 3 -velocityjitter 56 56 212 -originjitter 5 5 10 -velocitymultiplier -0.3 -staincolor 0x808080 0x808080 -staintex 16 24 -// back blood + airfriction 1 + alpha 256 256 328 + bounce -1 + color 0xA8FFFF 0xA8FFFFF + count 32 + gravity 0.500000 + liquidfriction 3 + originjitter 5 5 10 + sizeincrease -15 + size 10 20 + staincolor 0x808080 0x808080 + staintex 16 24 + tex 24 32 + type blood + velocityjitter 56 56 212 + velocitymultiplier -0.300000 effect particlegibs_damage_dissolve -type blood -count 32 -tex 24 32 -size 5 15 -color 0xA8FFFF 0xA8FFFFF -sizeincrease 10 -alpha 256 256 328 -bounce -1 -gravity 1 -airfriction 1 -liquidfriction 3 -velocityjitter 56 56 212 -originjitter 5 5 10 -velocitymultiplier 0.5 -staincolor 0x808080 0x808080 -staintex 16 24 -// small bits + airfriction 1 + alpha 256 256 328 + bounce -1 + color 0xA8FFFF 0xA8FFFFF + count 32 + gravity 1 + liquidfriction 3 + originjitter 5 5 10 + sizeincrease 10 + size 5 15 + staincolor 0x808080 0x808080 + staintex 16 24 + tex 24 32 + type blood + velocityjitter 56 56 212 + velocitymultiplier 0.500000 effect particlegibs_damage_dissolve -type blood -count 75 -tex 24 32 -size 1 1 -color 0xA8FFFF 0xA8FFFFF -sizeincrease 10 -alpha 256 256 328 -gravity 1 -airfriction 1.5 -liquidfriction 3 -originjitter 10 10 25 -velocityjitter 656 656 912 -staincolor 0x808080 0x808080 -staintex 16 24 - -// fire effect which expands then slows + airfriction 1.500000 + alpha 256 256 328 + color 0xA8FFFF 0xA8FFFFF + count 75 + gravity 1 + liquidfriction 3 + originjitter 10 10 25 + sizeincrease 10 + size 1 1 + staincolor 0x808080 0x808080 + staintex 16 24 + tex 24 32 + type blood + velocityjitter 656 656 912 effect onslaught_generator_gib_explode -notunderwater -count 17 -type static -tex 48 55 -color 0x8f0d00 0xff5a00 -size 20 26 -sizeincrease 45 -alpha 128 256 356 -bounce 1.5 -airfriction 5 -liquidfriction 8 -originjitter 8 8 8 -velocityjitter 286 286 286 - -// smoke + airfriction 5 + alpha 128 256 356 + bounce 1.500000 + color 0x8f0d00 0xff5a00 + count 17 + liquidfriction 8 + notunderwater + originjitter 8 8 8 + sizeincrease 45 + size 20 26 + tex 48 55 + type static + velocityjitter 286 286 286 effect onslaught_generator_gib_explode -type alphastatic -notunderwater -tex 0 8 -count 6 -size 1 10 -sizeincrease 90 -gravity -0.3 -alpha 200 500 600 -velocityjitter 244 244 244 -airfriction 5 -color 0x000000 0x111111 -bounce 2 - -// underwater bubbles + airfriction 5 + alpha 200 500 600 + bounce 2 + color 0x000000 0x111111 + count 6 + gravity -0.300000 + notunderwater + sizeincrease 90 + size 1 10 + tex 0 8 + type alphastatic + velocityjitter 244 244 244 effect onslaught_generator_gib_explode -underwater -count 16 -type bubble -tex 62 62 -color 0x404040 0x808080 -size 3 3 -alpha 128 256 64 -gravity -0.125 -bounce 1.5 -liquidfriction 0.25 -originjitter 16 16 16 -velocityjitter 96 96 96 - -// fire effect which expands then slows + alpha 128 256 64 + bounce 1.500000 + color 0x404040 0x808080 + count 16 + gravity -0.125000 + liquidfriction 0.250000 + originjitter 16 16 16 + size 3 3 + tex 62 62 + type bubble + underwater + velocityjitter 96 96 96 effect onslaught_generator_gib_flame -notunderwater -count 15 -type static -tex 48 55 -color 0x8f0d00 0xff5a00 -size 5 10 -sizeincrease 25 -alpha 128 256 356 -gravity -0.5 -airfriction 5 -liquidfriction 8 -originjitter 3 3 3 -velocityjitter 86 86 86 -// smoke + airfriction 5 + alpha 128 256 356 + color 0x8f0d00 0xff5a00 + count 15 + gravity -0.500000 + liquidfriction 8 + notunderwater + originjitter 3 3 3 + sizeincrease 25 + size 5 10 + tex 48 55 + type static + velocityjitter 86 86 86 effect onslaught_generator_gib_flame -type alphastatic -notunderwater -tex 0 8 -count 1 -size 10 20 -sizeincrease 30 -gravity -0.8 -alpha 200 500 600 -velocityjitter 44 44 44 -airfriction 5 -color 0x000000 0x111111 -bounce 2 - -// underwater bubbles + airfriction 5 + alpha 200 500 600 + bounce 2 + color 0x000000 0x111111 + count 1 + gravity -0.800000 + notunderwater + sizeincrease 30 + size 10 20 + tex 0 8 + type alphastatic + velocityjitter 44 44 44 effect onslaught_generator_gib_flame -underwater -count 16 -type bubble -tex 62 62 -color 0x404040 0x808080 -size 3 3 -alpha 128 256 64 -gravity -0.125 -bounce 1.5 -liquidfriction 0.25 -originjitter 16 16 16 -velocityjitter 96 96 96 - - -// used nowhere in code + alpha 128 256 64 + bounce 1.500000 + color 0x404040 0x808080 + count 16 + gravity -0.125000 + liquidfriction 0.250000 + originjitter 16 16 16 + size 3 3 + tex 62 62 + type bubble + underwater + velocityjitter 96 96 96 effect firemine -trailspacing 2 -count 0.5 -type smoke -tex 48 55 -color 0x8f0d00 0xff5a00 -size 1 1 -sizeincrease 5 -gravity -0.06 -alpha 50 256 250 -bounce 1.5 -velocityjitter 10 10 2 -airfriction 1.2 -//slowfire + airfriction 1.200000 + alpha 50 256 250 + bounce 1.500000 + color 0x8f0d00 0xff5a00 + count 0.500000 + gravity -0.060000 + sizeincrease 5 + size 1 1 + tex 48 55 + trailspacing 2 + type smoke + velocityjitter 10 10 2 effect firemine -trailspacing 2 -count 0.5 -type smoke -tex 48 55 -color 0x8f0d00 0xff5a00 -size 1 1 -sizeincrease 5 -gravity -0.06 -alpha 50 256 200 -bounce 1.5 -velocityjitter 10 10 10 -airfriction 1.2 -// very slow and small fire + airfriction 1.200000 + alpha 50 256 200 + bounce 1.500000 + color 0x8f0d00 0xff5a00 + count 0.500000 + gravity -0.060000 + sizeincrease 5 + size 1 1 + tex 48 55 + trailspacing 2 + type smoke + velocityjitter 10 10 10 effect firemine -trailspacing 4 -count 0.5 -type smoke -tex 48 55 -color 0x8f0d00 0xff5a00 -size 1 1 -sizeincrease 2 -gravity -0.06 -alpha 50 256 200 -bounce 1.5 -velocityjitter 8 8 8 -airfriction 0.3 -//decreasing fire + airfriction 0.300000 + alpha 50 256 200 + bounce 1.500000 + color 0x8f0d00 0xff5a00 + count 0.500000 + gravity -0.060000 + sizeincrease 2 + size 1 1 + tex 48 55 + trailspacing 4 + type smoke + velocityjitter 8 8 8 effect firemine -trailspacing 4 -count 0.5 -type smoke -tex 48 55 -color 0x8f0d00 0xff5a00 -size 5 7 -sizeincrease -3 -gravity -0.06 -alpha 50 256 200 -bounce 1.5 -velocityjitter 3 3 3 -airfriction 0.3 -//smoke + airfriction 0.300000 + alpha 50 256 200 + bounce 1.500000 + color 0x8f0d00 0xff5a00 + count 0.500000 + gravity -0.060000 + sizeincrease -3 + size 5 7 + tex 48 55 + trailspacing 4 + type smoke + velocityjitter 3 3 3 effect firemine -trailspacing 8 -count 0.5 -type alphastatic -tex 0 8 -size 1 4 -sizeincrease 1 -color 0x000000 0x111111 -alpha 256 256 90 -//gravity -0.2 -originjitter 2 2 2 -velocityoffset 0 0 3 -airfriction 1 -//fastfire + airfriction 1 + alpha 256 256 90 + color 0x000000 0x111111 + count 0.500000 + originjitter 2 2 2 + sizeincrease 1 + size 1 4 + tex 0 8 + trailspacing 8 + type alphastatic + velocityoffset 0 0 3 effect firemine -trailspacing 1 -count 0.5 -type smoke -tex 48 55 -color 0x8f0d00 0xff5a00 -size 12 12 -sizeincrease 0 -gravity 0 -alpha 50 256 1600 -bounce 1.5 -velocityjitter 0 0 0 -airfriction 1.2 -// light only + airfriction 1.200000 + alpha 50 256 1600 + bounce 1.500000 + color 0x8f0d00 0xff5a00 + count 0.500000 + size 12 12 + tex 48 55 + trailspacing 1 + type smoke effect firemine -trailspacing 16 -lightradius 50 -lightradiusfade 50000 -lightcolor 2.7 2.7 0.6 - -// used nowhere in code + lightcolor 2.7 2.7 0.6 + lightradiusfade 50000 + lightradius 50 + trailspacing 16 effect fireball -trailspacing 2 -count 0.5 -type smoke -tex 48 55 -color 0x8f0d00 0xff5a00 -size 5 5 -sizeincrease 20 -gravity -0.06 -alpha 50 256 250 -bounce 1.5 -velocityjitter 40 40 11 -airfriction 1.2 -//slowfire + airfriction 1.200000 + alpha 50 256 250 + bounce 1.500000 + color 0x8f0d00 0xff5a00 + count 0.500000 + gravity -0.060000 + sizeincrease 20 + size 5 5 + tex 48 55 + trailspacing 2 + type smoke + velocityjitter 40 40 11 effect fireball -trailspacing 2 -count 0.5 -type smoke -tex 48 55 -color 0x8f0d00 0xff5a00 -size 5 5 -sizeincrease 20 -gravity -0.06 -alpha 50 256 200 -bounce 1.5 -velocityjitter 40 40 40 -airfriction 1.2 -// very slow and small fire + airfriction 1.200000 + alpha 50 256 200 + bounce 1.500000 + color 0x8f0d00 0xff5a00 + count 0.500000 + gravity -0.060000 + sizeincrease 20 + size 5 5 + tex 48 55 + trailspacing 2 + type smoke + velocityjitter 40 40 40 effect fireball -trailspacing 4 -count 0.5 -type smoke -tex 48 55 -color 0x8f0d00 0xff5a00 -size 5 5 -sizeincrease 10 -gravity -0.06 -alpha 50 256 200 -bounce 1.5 -velocityjitter 30 30 30 -airfriction 0.3 -//decreasing fire + airfriction 0.300000 + alpha 50 256 200 + bounce 1.500000 + color 0x8f0d00 0xff5a00 + count 0.500000 + gravity -0.060000 + sizeincrease 10 + size 5 5 + tex 48 55 + trailspacing 4 + type smoke + velocityjitter 30 30 30 effect fireball -trailspacing 4 -count 0.5 -type smoke -tex 48 55 -color 0x8f0d00 0xff5a00 -size 20 30 -sizeincrease -10 -gravity -0.06 -alpha 50 256 200 -bounce 1.5 -velocityjitter 10 10 10 -airfriction 0.3 -//smoke + airfriction 0.300000 + alpha 50 256 200 + bounce 1.500000 + color 0x8f0d00 0xff5a00 + count 0.500000 + gravity -0.060000 + sizeincrease -10 + size 20 30 + tex 48 55 + trailspacing 4 + type smoke + velocityjitter 10 10 10 effect fireball -trailspacing 8 -count 0.5 -type alphastatic -tex 0 8 -size 5 15 -sizeincrease 7 -color 0x000000 0x111111 -alpha 256 256 90 -//gravity -0.2 -originjitter 10 10 10 -velocityoffset 0 0 10 -airfriction 1 -//fastfire + airfriction 1 + alpha 256 256 90 + color 0x000000 0x111111 + count 0.500000 + originjitter 10 10 10 + sizeincrease 7 + size 5 15 + tex 0 8 + trailspacing 8 + type alphastatic + velocityoffset 0 0 10 effect fireball -trailspacing 1 -count 0.5 -type smoke -tex 48 55 -color 0x8f0d00 0xff5a00 -size 48 48 -sizeincrease 0 -gravity 0 -alpha 50 256 1600 -bounce 1.5 -velocityjitter 0 0 0 -airfriction 1.2 -// light only + airfriction 1.200000 + alpha 50 256 1600 + bounce 1.500000 + color 0x8f0d00 0xff5a00 + count 0.500000 + size 48 48 + tex 48 55 + trailspacing 1 + type smoke effect fireball -trailspacing 16 -lightradius 300 -lightradiusfade 3000 -lightcolor 2.7 2.7 0.6 - -// fireball + lightcolor 2.7 2.7 0.6 + lightradiusfade 3000 + lightradius 300 + trailspacing 16 effect fireball_laser -count 10 -type spark -color 0x800000 0xFF8020 -alpha 192 256 2560 -size 1 1 -velocityjitter 1 1 1 -velocitymultiplier 10 -stretchfactor 0.7 - -// rocket explosion (bigger than mortar and hagar) -// decal -// used nowhere in code + alpha 192 256 2560 + color 0x800000 0xFF8020 + count 10 + size 1 1 + stretchfactor 0.700000 + type spark + velocityjitter 1 1 1 + velocitymultiplier 10 effect fireball_explode -countabsolute 1 -type decal -tex 8 16 -size 72 72 -alpha 256 256 0 -originjitter 56 56 56 -lightradius 500 -lightradiusfade 500 -lightcolor 4 2 0.5 -// flare effect + alpha 256 256 0 + countabsolute 1 + lightcolor 4 2 0.5 + lightradiusfade 500 + lightradius 500 + originjitter 56 56 56 + size 72 72 + tex 8 16 + type decal effect fireball_explode -countabsolute 1 -type static -tex 35 37 -color 0x404040 0x404040 -size 72 72 -alpha 192 192 64 -// fire effect + alpha 192 192 64 + color 0x404040 0x404040 + countabsolute 1 + size 72 72 + tex 35 37 + type static effect fireball_explode -notunderwater -count 128 -type static -tex 48 55 -color 0x902010 0xFFD080 -size 16 16 -alpha 128 128 256 -bounce 1.5 -airfriction 4 -liquidfriction 4 -originjitter 8 8 8 -velocityjitter 512 512 512 -// underwater bubbles + airfriction 4 + alpha 128 128 256 + bounce 1.500000 + color 0x902010 0xFFD080 + count 128 + liquidfriction 4 + notunderwater + originjitter 8 8 8 + size 16 16 + tex 48 55 + type static + velocityjitter 512 512 512 effect fireball_explode -underwater -count 32 -type bubble -tex 62 62 -color 0x404040 0x808080 -size 3 3 -alpha 128 256 64 -gravity -0.125 -bounce 1.5 -liquidfriction 0.25 -originjitter 16 16 16 -velocityjitter 144 144 144 -// bouncing sparks + alpha 128 256 64 + bounce 1.500000 + color 0x404040 0x808080 + count 32 + gravity -0.125000 + liquidfriction 0.250000 + originjitter 16 16 16 + size 3 3 + tex 62 62 + type bubble + underwater + velocityjitter 144 144 144 effect fireball_explode -notunderwater -count 64 -type spark -color 0x903010 0xFFD030 -size 2 2 -alpha 256 256 384 -gravity 1 -airfriction 0.2 -bounce 1.5 -liquidfriction 0.8 -velocityoffset 0 0 80 -velocityjitter 384 384 384 - + airfriction 0.200000 + alpha 256 256 384 + bounce 1.500000 + color 0x903010 0xFFD030 + count 64 + gravity 1 + liquidfriction 0.800000 + notunderwater + size 2 2 + type spark + velocityjitter 384 384 384 + velocityoffset 0 0 80 effect fireball_muzzleflash -count 2 -type smoke -color 0x202020 0x404040 -tex 0 8 -size 5 5 -alpha 256 256 512 -originjitter 1.5 1.5 1.5 -velocityjitter 6 6 6 -velocitymultiplier 0.01 -lightradius 200 -lightradiusfade 2000 -lightcolor 2 1.5 0.2 + alpha 256 256 512 + color 0x202020 0x404040 + count 2 + lightcolor 2 1.5 0.2 + lightradiusfade 2000 + lightradius 200 + originjitter 1.5 1.5 1.5 + size 5 5 + tex 0 8 + type smoke + velocityjitter 6 6 6 + velocitymultiplier 0.010000 effect fireball_muzzleflash -count 15 -type spark -tex 40 40 -color 0xFFFDD9 0xFFFDD9 -size 3 3 -alpha 0 128 1024 -originjitter 1 1 1 -velocityjitter 300 300 300 -velocitymultiplier 0.5 -airfriction 12 - + airfriction 12 + alpha 0 128 1024 + color 0xFFFDD9 0xFFFDD9 + count 15 + originjitter 1 1 1 + size 3 3 + tex 40 40 + type spark + velocityjitter 300 300 300 + velocitymultiplier 0.500000 effect fireball_preattack_muzzleflash -count 2 -type smoke -color 0x202020 0x404040 -tex 0 8 -size 5 5 -alpha 256 256 512 -originjitter 1.5 1.5 1.5 -velocityjitter 6 6 6 -velocitymultiplier 0.01 -lightradius 200 -lightradiusfade 2000 -lightcolor 2 1.5 0.2 + alpha 256 256 512 + color 0x202020 0x404040 + count 2 + lightcolor 2 1.5 0.2 + lightradiusfade 2000 + lightradius 200 + originjitter 1.5 1.5 1.5 + size 5 5 + tex 0 8 + type smoke + velocityjitter 6 6 6 + velocitymultiplier 0.010000 effect fireball_preattack_muzzleflash -count 15 -type spark -tex 40 40 -color 0xFFFDD9 0xFFFDD9 -size 3 3 -alpha 0 128 1024 -originjitter 1 1 1 -velocityjitter 300 300 300 -velocitymultiplier 0.5 -airfriction 12 - + airfriction 12 + alpha 0 128 1024 + color 0xFFFDD9 0xFFFDD9 + count 15 + originjitter 1 1 1 + size 3 3 + tex 40 40 + type spark + velocityjitter 300 300 300 + velocitymultiplier 0.500000 effect fireball_bfgdamage -count 2 -type smoke -color 0x202020 0x404040 -tex 0 8 -size 5 5 -alpha 256 256 512 -originjitter 1.5 1.5 1.5 -velocityjitter 6 6 6 -velocitymultiplier 0.01 -lightradius 200 -lightradiusfade 2000 -lightcolor 2 1.5 0.2 + alpha 256 256 512 + color 0x202020 0x404040 + count 2 + lightcolor 2 1.5 0.2 + lightradiusfade 2000 + lightradius 200 + originjitter 1.5 1.5 1.5 + size 5 5 + tex 0 8 + type smoke + velocityjitter 6 6 6 + velocitymultiplier 0.010000 effect fireball_bfgdamage -count 15 -type spark -tex 40 40 -color 0xFFFDD9 0xFFFDD9 -size 3 3 -alpha 0 128 1024 -originjitter 1 1 1 -velocityjitter 300 300 300 -velocitymultiplier 0.5 -airfriction 12 - -//EF_FLAME -//fire -// used nowhere in code + airfriction 12 + alpha 0 128 1024 + color 0xFFFDD9 0xFFFDD9 + count 15 + originjitter 1 1 1 + size 3 3 + tex 40 40 + type spark + velocityjitter 300 300 300 + velocitymultiplier 0.500000 effect EF_FLAME -//notunderwater -count 100 -type smoke -tex 48 55 -size 5 21 -alpha 200 356 512 -gravity -0.5 -color 0x8f0d00 0xff5a00 -bounce 2 -sizeincrease -1 -originoffset 0 0 10 -originjitter 12 12 34 -velocityjitter 22 22 50 -// smoke + alpha 200 356 512 + bounce 2 + color 0x8f0d00 0xff5a00 + count 100 + gravity -0.500000 + originjitter 12 12 34 + originoffset 0 0 10 + sizeincrease -1 + size 5 21 + tex 48 55 + type smoke + velocityjitter 22 22 50 effect EF_FLAME -type alphastatic -count 50 -tex 0 8 -size 11 15 -sizeincrease 6 -alpha 200 256 200 -color 0x000000 0x111111 -gravity -0.3 -originoffset 0 0 10 -originjitter 12 12 34 -velocityjitter 11 11 50 -bounce 2 + alpha 200 256 200 + bounce 2 + color 0x000000 0x111111 + count 50 + gravity -0.300000 + originjitter 12 12 34 + originoffset 0 0 10 + sizeincrease 6 + size 11 15 + tex 0 8 + type alphastatic + velocityjitter 11 11 50 effect EF_FLAME -count 0.5 -lightradius 200 -lightradiusfade 10000 -lightcolor 0.9 0.9 0.2 - -// rifle bullet trail (somewhat like a tracer) -// used in qcsrc/server/w_common.qc: zcurveparticles_from_tracetoss(particleeffectnum("tr_bullet"), self.origin, trace_endpos, self.velocity) -// used in qcsrc/client/projectile.qc: trailparticles(self, particleeffectnum("tr_bullet"), from, to) + count 0.500000 + lightcolor 0.9 0.9 0.2 + lightradiusfade 10000 + lightradius 200 effect tr_rifle -trailspacing 128 -type spark -color 0x800000 0xFF8020 -alpha 256 256 2560 -size 1.5 1.5 -stretchfactor 1 -velocitymultiplier 0.7 + alpha 256 256 2560 + color 0x800000 0xFF8020 + size 1.500000 1.500000 + stretchfactor 1 + trailspacing 128 + type spark + velocitymultiplier 0.700000 effect tr_rifle -notunderwater -tex 0 8 -trailspacing 8 -type static -color 0x202020 0x404040 -size 4 4 -sizeincrease 0.4 -alpha 256 256 256 -airfriction -4 -velocityjitter 4 4 4 -type smoke + airfriction -4 + alpha 256 256 256 + color 0x202020 0x404040 + notunderwater + sizeincrease 0.400000 + size 4 4 + tex 0 8 + trailspacing 8 + type smoke + velocityjitter 4 4 4 effect tr_rifle -underwater -trailspacing 32 -type bubble -tex 62 62 -color 0x404040 0x808080 -size 2 2 -alpha 256 256 128 -gravity -0.125 -bounce 1.5 -liquidfriction 4 -velocityjitter 16 16 16 - -// rocket guiding start -// underwater bubbles + alpha 256 256 128 + bounce 1.500000 + color 0x404040 0x808080 + gravity -0.125000 + liquidfriction 4 + size 2 2 + tex 62 62 + trailspacing 32 + type bubble + underwater + velocityjitter 16 16 16 effect rocket_guide -underwater -count 2 -type bubble -tex 62 62 -color 0x404040 0x808080 -size 1.5 1.5 -alpha 128 256 64 -gravity -0.125 -bounce 1.5 -liquidfriction 0.25 -originjitter 8 8 8 -velocityjitter 48 48 48 -velocitymultiplier -0.1 -// bouncing sparks + alpha 128 256 64 + bounce 1.500000 + color 0x404040 0x808080 + count 2 + gravity -0.125000 + liquidfriction 0.250000 + originjitter 8 8 8 + size 1.500000 1.500000 + tex 62 62 + type bubble + underwater + velocityjitter 48 48 48 + velocitymultiplier -0.100000 effect rocket_guide -notunderwater -count 8 -type spark -color 0x903010 0xFFD030 -size 0.3 0.7 -tex 40 40 -alpha 256 256 984 -gravity 1 -airfriction 0.2 -bounce 1.5 -liquidfriction 0.8 -velocityoffset 0 0 80 -velocityjitter 156 156 156 -velocitymultiplier -0.3 -stretchfactor 0.4 + airfriction 0.200000 + alpha 256 256 984 + bounce 1.500000 + color 0x903010 0xFFD030 + count 8 + gravity 1 + liquidfriction 0.800000 + notunderwater + size 0.300000 0.700000 + stretchfactor 0.400000 + tex 40 40 + type spark + velocityjitter 156 156 156 + velocitymultiplier -0.300000 + velocityoffset 0 0 80 effect rocket_guide -countabsolute 1 -type smoke -tex 65 65 -color 0x903010 0xFFD030 -size 10 10 -sizeincrease 300 -alpha 100 100 500 - - -// gauntlet laser -// based off morphed's cl_gentle -// used in qcsrc/server/w_laser.qc + alpha 100 100 500 + color 0x903010 0xFFD030 + countabsolute 1 + sizeincrease 300 + size 10 10 + tex 65 65 + type smoke effect laser_gauntlet -count 3 -type spark -color 0xb44215 0x880000 -tex 43 43 -size 7 10 -alpha 128 512 6280 -airfriction 10 -originjitter 2 2 2 -velocityjitter 150 150 150 -velocitymultiplier 0.2 -sizeincrease -100 -stretchfactor 2.3 -rotate -180 180 4000 -4000 - + airfriction 10 + alpha 128 512 6280 + color 0xb44215 0x880000 + count 3 + originjitter 2 2 2 + rotate -180 180 4000 -4000 + sizeincrease -100 + size 7 10 + stretchfactor 2.300000 + tex 43 43 + type spark + velocityjitter 150 150 150 + velocitymultiplier 0.200000 effect laser_gauntlet -count 6 -type spark -color 0xff4200 0xff0000 -tex 8 15 -size 7 9 -alpha 256 512 6280 -airfriction 12 -originjitter 2 2 2 -velocityjitter 100 100 100 -velocitymultiplier 0.2 -sizeincrease -100 -stretchfactor 2 - - -// muzzle flash + airfriction 12 + alpha 256 512 6280 + color 0xff4200 0xff0000 + count 6 + originjitter 2 2 2 + sizeincrease -100 + size 7 9 + stretchfactor 2 + tex 8 15 + type spark + velocityjitter 100 100 100 + velocitymultiplier 0.200000 effect laser_gauntletmuzzleflash -// glow and light -countabsolute 1 -type smoke -color 0x220000 0x880000 -tex 65 65 -size 10 15 -alpha 256 512 6280 -airfriction 10 -sizeincrease -100 -stretchfactor 2 -lightradius 150 -lightradiusfade 500 -lightcolor 3 0.1 0.1 -// electricity + airfriction 10 + alpha 256 512 6280 + color 0x220000 0x880000 + countabsolute 1 + lightcolor 3 0.1 0.1 + lightradiusfade 500 + lightradius 150 + sizeincrease -100 + size 10 15 + stretchfactor 2 + tex 65 65 + type smoke effect laser_gauntletmuzzleflash -count 3 -type spark -color 0xb44215 0x880000 -tex 43 43 -size 7 10 -alpha 128 512 6280 -airfriction 10 -originjitter 2 2 2 -velocityjitter 150 150 150 -velocitymultiplier 0.2 -sizeincrease -100 -stretchfactor 2.3 -rotate -180 180 4000 -4000 - - -// fire + airfriction 10 + alpha 128 512 6280 + color 0xb44215 0x880000 + count 3 + originjitter 2 2 2 + rotate -180 180 4000 -4000 + sizeincrease -100 + size 7 10 + stretchfactor 2.300000 + tex 43 43 + type spark + velocityjitter 150 150 150 + velocitymultiplier 0.200000 effect laser_gauntletmuzzleflash -count 6 -type spark -color 0xff4200 0xff0000 -tex 8 15 -size 7 9 -alpha 256 512 6280 -airfriction 12 -originjitter 2 2 2 -velocityjitter 100 100 100 -velocitymultiplier 0.2 -sizeincrease -100 -stretchfactor 2 - -//torch flame, spawn it as fast as you can 20 times per second or more, supports direction but not required -//fast fire -// used nowhere in code, meant for maps + airfriction 12 + alpha 256 512 6280 + color 0xff4200 0xff0000 + count 6 + originjitter 2 2 2 + sizeincrease -100 + size 7 9 + stretchfactor 2 + tex 8 15 + type spark + velocityjitter 100 100 100 + velocitymultiplier 0.200000 effect torchflame -count 3 -type smoke -tex 48 55 -color 0x8f0d00 0xff5a00 -size 5 5 -sizeincrease 20 - gravity -0.06 -alpha 50 256 250 -velocityjitter 40 40 11 -velocitymultiplier 30 -airfriction 1.2 -//slowfire + airfriction 1.200000 + alpha 50 256 250 + color 0x8f0d00 0xff5a00 + count 3 + gravity -0.060000 + sizeincrease 20 + size 5 5 + tex 48 55 + type smoke + velocityjitter 40 40 11 + velocitymultiplier 30 effect torchflame -count 2.5 -type smoke -tex 48 55 -color 0x8f0d00 0xff5a00 -size 5 5 -sizeincrease 20 - gravity -0.06 -alpha 50 256 200 -velocityjitter 40 40 40 -velocitymultiplier 20 -airfriction 1.2 -// very slow and small fire + airfriction 1.200000 + alpha 50 256 200 + color 0x8f0d00 0xff5a00 + count 2.500000 + gravity -0.060000 + sizeincrease 20 + size 5 5 + tex 48 55 + type smoke + velocityjitter 40 40 40 + velocitymultiplier 20 effect torchflame -count 1.5 -type smoke -tex 48 55 -color 0x8f0d00 0xff5a00 -size 5 5 -sizeincrease 10 - gravity -0.06 -alpha 50 256 200 -velocityjitter 30 30 30 -velocitymultiplier 10 -airfriction 0.3 -//decreasing fire + airfriction 0.300000 + alpha 50 256 200 + color 0x8f0d00 0xff5a00 + count 1.500000 + gravity -0.060000 + sizeincrease 10 + size 5 5 + tex 48 55 + type smoke + velocityjitter 30 30 30 + velocitymultiplier 10 effect torchflame -count 2 -type smoke -tex 48 55 -color 0x8f0d00 0xff5a00 -size 20 30 -sizeincrease -10 - gravity -0.06 -alpha 50 256 200 -velocityjitter 10 10 10 -velocitymultiplier 15 -airfriction 0.3 -//smoke + airfriction 0.300000 + alpha 50 256 200 + color 0x8f0d00 0xff5a00 + count 2 + gravity -0.060000 + sizeincrease -10 + size 20 30 + tex 48 55 + type smoke + velocityjitter 10 10 10 + velocitymultiplier 15 effect torchflame -count 0.5 -type alphastatic -tex 0 8 -size 5 15 -sizeincrease 7 -color 0x000000 0x111111 -alpha 256 256 90 -//gravity -0.2 -originjitter 10 10 10 -velocitymultiplier 20 -velocityoffset 0 0 10 -airfriction 1 - -//happy death fx for cl_gentle + airfriction 1 + alpha 256 256 90 + color 0x000000 0x111111 + count 0.500000 + originjitter 10 10 10 + sizeincrease 7 + size 5 15 + tex 0 8 + type alphastatic + velocitymultiplier 20 + velocityoffset 0 0 10 effect happy_damage_dissolve -tex 69 69 -count 15 -type alphastatic -color 0x00FFFF 0xFF00FF -size 32 32 -sizeincrease -10 -alpha 256 256 228 -gravity -0.4 -bounce 1.5 -airfriction 3 -liquidfriction 6 -velocityjitter 312 312 312 + airfriction 3 + alpha 256 256 228 + bounce 1.500000 + color 0x00FFFF 0xFF00FF + count 15 + gravity -0.400000 + liquidfriction 6 + sizeincrease -10 + size 32 32 + tex 69 69 + type alphastatic + velocityjitter 312 312 312 effect happy_damage_dissolve -tex 69 69 -count 15 -type alphastatic -color 0xFF00FF 0xFFFF00 -size 32 32 -sizeincrease -10 -alpha 256 256 228 -gravity -0.4 -bounce 1.5 -airfriction 3 -liquidfriction 6 -velocityjitter 312 312 312 + airfriction 3 + alpha 256 256 228 + bounce 1.500000 + color 0xFF00FF 0xFFFF00 + count 15 + gravity -0.400000 + liquidfriction 6 + sizeincrease -10 + size 32 32 + tex 69 69 + type alphastatic + velocityjitter 312 312 312 effect happy_damage_dissolve -tex 69 69 -count 15 -type alphastatic -color 0xFFFF00 0x00FFFF -size 32 32 -sizeincrease -10 -alpha 256 256 228 -gravity -0.4 -bounce 1.5 -airfriction 3 -liquidfriction 6 -velocityjitter 312 312 312 - - -//happy damage fx for cl_gentle + airfriction 3 + alpha 256 256 228 + bounce 1.500000 + color 0xFFFF00 0x00FFFF + count 15 + gravity -0.400000 + liquidfriction 6 + sizeincrease -10 + size 32 32 + tex 69 69 + type alphastatic + velocityjitter 312 312 312 effect happy_damage_hit -tex 69 69 -count 0.1 -type alphastatic -color 0x00FFFF 0xFF00FF -size 26 26 -sizeincrease -28 -alpha 128 128 192 -gravity -0.4 -bounce 1.5 -airfriction 5 -liquidfriction 10 -velocityjitter 156 156 156 + airfriction 5 + alpha 128 128 192 + bounce 1.500000 + color 0x00FFFF 0xFF00FF + count 0.100000 + gravity -0.400000 + liquidfriction 10 + sizeincrease -28 + size 26 26 + tex 69 69 + type alphastatic + velocityjitter 156 156 156 effect happy_damage_hit -tex 69 69 -count 0.1 -type alphastatic -color 0xFF00FF 0xFFFF00 -size 26 26 -sizeincrease -28 -alpha 128 128 192 -gravity -0.4 -bounce 1.5 -airfriction 5 -liquidfriction 10 -velocityjitter 156 156 156 + airfriction 5 + alpha 128 128 192 + bounce 1.500000 + color 0xFF00FF 0xFFFF00 + count 0.100000 + gravity -0.400000 + liquidfriction 10 + sizeincrease -28 + size 26 26 + tex 69 69 + type alphastatic + velocityjitter 156 156 156 effect happy_damage_hit -tex 69 69 -count 0.1 -type alphastatic -color 0xFFFF00 0x00FFFF -size 26 26 -sizeincrease -28 -alpha 128 128 192 -gravity -0.4 -bounce 1.5 -airfriction 5 -liquidfriction 10 -velocityjitter 156 156 156 - - - -// used in qcsrc/server/w_electro.qc: pointparticles(particleeffectnum("electro_muzzleflash"), w_shotorg, w_shotdir * 1000, 1) -// used in qcsrc/server/w_electro.qc: pointparticles(particleeffectnum("electro_muzzleflash"), w_shotorg, w_shotdir * 1000, 1) + airfriction 5 + alpha 128 128 192 + bounce 1.500000 + color 0xFFFF00 0x00FFFF + count 0.100000 + gravity -0.400000 + liquidfriction 10 + sizeincrease -28 + size 26 26 + tex 69 69 + type alphastatic + velocityjitter 156 156 156 effect electro_lightning -countabsolute 1 -type decal -tex 59 59 -size 16 16 -alpha 256 256 0 -originjitter 2 2 2 -lightradius 50 -lightradiusfade 500 -lightcolor 3.125 4.375 10 + alpha 256 256 0 + countabsolute 1 + lightcolor 3.1 4.4 10 + lightradiusfade 500 + lightradius 50 + originjitter 2 2 2 + size 16 16 + tex 59 59 + type decal effect electro_lightning -count 300 -type spark -// color 0x501860 0x501860 // 0x202020 0x404040 -color 0x2030FF 0x80C0FF -tex 65 65 -size 6 6 -alpha 100 206 1724 -originjitter 1.5 1.5 1.5 -velocityjitter 6 6 6 -sizeincrease 10 -velocitymultiplier 2000 + alpha 100 206 1724 + color 0x2030FF 0x80C0FF + count 300 + originjitter 1.5 1.5 1.5 + sizeincrease 10 + size 6 6 + tex 65 65 + type spark + velocityjitter 6 6 6 + velocitymultiplier 2000 effect electro_lightning -count 30 -type spark -tex 8 15 -color 0xDDFDFF 0xFDFDFF -size 2 5 -alpha 110 170 1500 -originjitter 1 1 1 -velocityjitter 150 150 150 -velocitymultiplier 0.5 -airfriction 2 -stretchfactor 1.5 + airfriction 2 + alpha 110 170 1500 + color 0xDDFDFF 0xFDFDFF + count 30 + originjitter 1 1 1 + size 2 5 + stretchfactor 1.500000 + tex 8 15 + type spark + velocityjitter 150 150 150 + velocitymultiplier 0.500000 effect electro_lightning -count 50 -type spark -tex 41 41 -color 0xFDFDFF 0xF9FDFF -size 2 3 -alpha 110 170 1500 -originjitter 1 1 1 -velocityjitter 350 350 350 -velocitymultiplier 2.5 -airfriction 8 -gravity 1.3 -stretchfactor 0.1 - -// used in qcsrc/server/w_gauntlet.qc: pointparticles(particleeffectnum("electro_muzzleflash"), w_shotorg, w_shotdir * 1000, 1) + airfriction 8 + alpha 110 170 1500 + color 0xFDFDFF 0xF9FDFF + count 50 + gravity 1.300000 + originjitter 1 1 1 + size 2 3 + stretchfactor 0.100000 + tex 41 41 + type spark + velocityjitter 350 350 350 + velocitymultiplier 2.500000 effect gauntlet_lightning -count 300 -type spark -color 0x280000 0x280000 // 0x202020 0x404040 -tex 65 65 -size 3 3 -alpha 256 256 1024 -originjitter 1.5 1.5 1.5 -velocityjitter 6 6 6 -sizeincrease 15 -velocitymultiplier 2000 + alpha 256 256 1024 + color 0x280000 0x280000 + count 300 + originjitter 1.5 1.5 1.5 + sizeincrease 15 + size 3 3 + tex 65 65 + type spark + velocityjitter 6 6 6 + velocitymultiplier 2000 effect gauntlet_lightning -count 30 -type spark -tex 8 15 -color 0xDD0000 0xFD0000 -size 2 5 -alpha 110 228 1024 -originjitter 1 1 1 -velocityjitter 150 150 150 -velocitymultiplier 0.5 -airfriction 2 -stretchfactor 1.5 + airfriction 2 + alpha 110 228 1024 + color 0xDD0000 0xFD0000 + count 30 + originjitter 1 1 1 + size 2 5 + stretchfactor 1.500000 + tex 8 15 + type spark + velocityjitter 150 150 150 + velocitymultiplier 0.500000 effect gauntlet_lightning -count 50 -type spark -tex 41 41 -color 0xFD0000 0xF90000 -size 2 3 -alpha 110 228 600 -originjitter 1 1 1 -velocityjitter 350 350 350 -velocitymultiplier 2.5 -airfriction 8 -gravity 1.3 -stretchfactor 0.1 - - -// crylink joinexplode effect -// decal -// used in qcsrc/client/damage.qc: pointparticles(particleeffectnum("crylink_joinexplode"), org2, '0 0 0', 1) + airfriction 8 + alpha 110 228 600 + color 0xFD0000 0xF90000 + count 50 + gravity 1.300000 + originjitter 1 1 1 + size 2 3 + stretchfactor 0.100000 + tex 41 41 + type spark + velocityjitter 350 350 350 + velocitymultiplier 2.500000 effect crylink_joinexplode -countabsolute 1 -type decal -tex 47 47 -size 24 24 -alpha 256 256 0 -originjitter 12 12 12 -//lightradius 200 -//lightradiusfade 800 -//lightcolor 3.2 0.4 4 -// purple flare effect + alpha 256 256 0 + countabsolute 1 + originjitter 12 12 12 + size 24 24 + tex 47 47 + type decal effect crylink_joinexplode -countabsolute 1 -type static -tex 39 39 -color 0x504060 0x504060 -size 24 24 -alpha 256 256 512 -// purple sparks + alpha 256 256 512 + color 0x504060 0x504060 + countabsolute 1 + size 24 24 + tex 39 39 + type static effect crylink_joinexplode -count 40 -type spark -tex 41 41 -color 0xA040C0 0xA040C0 -bounce 2 -size 6 6 -alpha 256 256 1024 -velocityjitter 512 512 512 -// purple splash + alpha 256 256 1024 + bounce 2 + color 0xA040C0 0xA040C0 + count 40 + size 6 6 + tex 41 41 + type spark + velocityjitter 512 512 512 effect crylink_joinexplode -count 1.5 -type static -color 0xE070FF 0xE070FF -size 16 16 -alpha 256 256 512 -velocityjitter 32 32 32 -// purple splash + alpha 256 256 512 + color 0xE070FF 0xE070FF + count 1.500000 + size 16 16 + type static + velocityjitter 32 32 32 effect crylink_joinexplode -count 3 -type static -color 0xE070FF 0xE070FF -size 16 16 -alpha 256 256 1024 -velocityjitter 256 256 256 - -//sparks for keepaway ball touch -// used nowhere in code + alpha 256 256 1024 + color 0xE070FF 0xE070FF + count 3 + size 16 16 + type static + velocityjitter 256 256 256 effect kaball_sparks -count 35 -type spark -tex 40 40 -color 0xa9cacf 0x0054ff -size 1 3 -alpha 0 256 556 -gravity 1 -bounce 1.5 -originjitter 1 1 1 -velocityjitter 300 300 300 -velocitymultiplier 0.5 -airfriction 3 - - -// weak rifle bullet trail (somewhat like a tracer) -// used in qcsrc/server/w_common.qc: zcurveparticles_from_tracetoss(particleeffectnum("tr_bullet"), self.origin, trace_endpos, self.velocity) -// used in qcsrc/client/projectile.qc: trailparticles(self, particleeffectnum("tr_bullet"), from, to) + airfriction 3 + alpha 0 256 556 + bounce 1.500000 + color 0xa9cacf 0x0054ff + count 35 + gravity 1 + originjitter 1 1 1 + size 1 3 + tex 40 40 + type spark + velocityjitter 300 300 300 + velocitymultiplier 0.500000 effect tr_rifle_weak -trailspacing 128 -type spark -color 0x800000 0xFF8020 -alpha 256 256 2560 -size 1.5 1.5 -stretchfactor 1 -velocitymultiplier 0.7 + alpha 256 256 2560 + color 0x800000 0xFF8020 + size 1.500000 1.500000 + stretchfactor 1 + trailspacing 128 + type spark + velocitymultiplier 0.700000 effect tr_rifle_weak -notunderwater -tex 0 8 -trailspacing 48 -type static -color 0x202020 0x404040 -size 4 4 -sizeincrease 0.4 -alpha 256 256 256 -airfriction -4 -velocityjitter 4 4 4 -type smoke + airfriction -4 + alpha 256 256 256 + color 0x202020 0x404040 + notunderwater + sizeincrease 0.400000 + size 4 4 + tex 0 8 + trailspacing 48 + type smoke + velocityjitter 4 4 4 effect tr_rifle_weak -underwater -trailspacing 192 -type bubble -tex 62 62 -color 0x404040 0x808080 -size 2 2 -alpha 256 256 128 -gravity -0.125 -bounce 1.5 -liquidfriction 4 -velocityjitter 16 16 16 - -// red smoke emiter -// used nowhere in code + alpha 256 256 128 + bounce 1.500000 + color 0x404040 0x808080 + gravity -0.125000 + liquidfriction 4 + size 2 2 + tex 62 62 + trailspacing 192 + type bubble + underwater + velocityjitter 16 16 16 effect red_smoke -count 2 -type smoke -tex 0 8 -color 0xff8866 0x331100 -size 60 120 -sizeincrease 0 -alpha 32 64 32 -gravity -0.007 -originjitter 0 0 0 -velocityjitter 0 0 0 -velocitymultiplier 5 -airfriction -1 -rotate 0 360 -30 30 - -// pipe smoke emiter -// used nowhere in code + airfriction -1 + alpha 32 64 32 + color 0xff8866 0x331100 + count 2 + gravity -0.007000 + rotate 0 360 -30 30 + size 60 120 + tex 0 8 + type smoke + velocitymultiplier 5 effect pipe_smoke -count 2 -type smoke -tex 0 8 -color 0x999999 0x555555 -size 5 10 -sizeincrease 35 -alpha 32 64 48 -gravity -0.015 -originjitter 0 0 0 -velocityjitter 0 0 5 -velocitymultiplier 15 -airfriction -1 -rotate 0 360 -180 180 - -// seeker missile trail + airfriction -1 + alpha 32 64 48 + color 0x999999 0x555555 + count 2 + gravity -0.015000 + rotate 0 360 -180 180 + sizeincrease 35 + size 5 10 + tex 0 8 + type smoke + velocityjitter 0 0 5 + velocitymultiplier 15 effect TR_SEEKER -trailspacing 10 -type smoke -notunderwater -color 0x000000 0x666666 -tex 0 8 -size 2 2 -bounce 1 -sizeincrease 11 -alpha 200 300 200 -lightradius 100 -lighttime 0 -lightcolor 6 3 1 -originjitter 2 2 2 -velocityjitter 3 3 3 -velocitymultiplier -0.02 -rotate -180 180 -30 30 -//gravity -0.11 -// fire + alpha 200 300 200 + bounce 1 + color 0x000000 0x666666 + lightcolor 6 3 1 + lightradius 100 + notunderwater + originjitter 2 2 2 + rotate -180 180 -30 30 + sizeincrease 11 + size 2 2 + tex 0 8 + trailspacing 10 + type smoke + velocityjitter 3 3 3 + velocitymultiplier -0.020000 effect TR_SEEKER -trailspacing 4 -type static -color 0xffdf72 0x811200 -tex 48 55 -size 5 5 -sizeincrease -30 -alpha 100 144 588 -airfriction 8 -velocityjitter 32 32 32 -velocitymultiplier -1.5 -// bubbles + airfriction 8 + alpha 100 144 588 + color 0xffdf72 0x811200 + sizeincrease -30 + size 5 5 + tex 48 55 + trailspacing 4 + type static + velocityjitter 32 32 32 + velocitymultiplier -1.500000 effect TR_SEEKER -type bubble -underwater -trailspacing 16 -tex 62 62 -size 1 2 -alpha 256 256 256 -gravity -0.125 -bounce 1.5 -liquidfriction 4 -velocityjitter 16 16 16 -velocitymultiplier -0.31 -rotate 0 0 0 0 -// sparks + alpha 256 256 256 + bounce 1.500000 + gravity -0.125000 + liquidfriction 4 + size 1 2 + tex 62 62 + trailspacing 16 + type bubble + underwater + velocityjitter 16 16 16 + velocitymultiplier -0.310000 effect TR_SEEKER -notunderwater -trailspacing 20 -type spark -tex 40 40 -color 0xFFFDD9 0xFFFDD9 -size 0.5 0.5 -alpha 444 512 1866 -stretchfactor 0.3 -//gravity 1 -bounce 1 -//velocityoffset 0 0 15 -airfriction 5 -originjitter 1 1 1 -velocityjitter 100 100 100 -velocitymultiplier -0.31 - -// --------------- vehicles - + airfriction 5 + alpha 444 512 1866 + bounce 1 + color 0xFFFDD9 0xFFFDD9 + notunderwater + originjitter 1 1 1 + size 0.500000 0.500000 + stretchfactor 0.300000 + tex 40 40 + trailspacing 20 + type spark + velocityjitter 100 100 100 + velocitymultiplier -0.310000 effect spiderbot_minigun_trail -notunderwater -trailspacing 10 -type smoke -color 0xd0d0a0 0xffffff -tex 0 8 -size 1 2 -alpha 20 50 100 -sizeincrease 2 -velocityjitter 5 5 5 -gravity -0.03 -airfriction 1 - + airfriction 1 + alpha 20 50 100 + color 0xd0d0a0 0xffffff + gravity -0.030000 + notunderwater + sizeincrease 2 + size 1 2 + tex 0 8 + trailspacing 10 + type smoke + velocityjitter 5 5 5 effect spiderbot_minigun_muzzleflash -count 3 -type spark -color 0xff9c00 0xff8400 -tex 48 55 -size 10 15 -alpha 256 512 6280 -airfriction 10 -originjitter 2 2 2 -velocityjitter 150 150 150 -velocitymultiplier 0.35 -sizeincrease -100 -stretchfactor 1.3 -rotate -180 180 4000 -4000 -// fire + airfriction 10 + alpha 256 512 6280 + color 0xff9c00 0xff8400 + count 3 + originjitter 2 2 2 + rotate -180 180 4000 -4000 + sizeincrease -100 + size 10 15 + stretchfactor 1.300000 + tex 48 55 + type spark + velocityjitter 150 150 150 + velocitymultiplier 0.350000 effect spiderbot_minigun_muzzleflash -count 6 -type spark -color 0xff9c00 0xff8400 -tex 8 15 -size 5 7 -alpha 256 512 6280 -airfriction 12 -originjitter 2 2 2 -velocityjitter 200 200 200 -velocitymultiplier 0.2 -sizeincrease -10 -stretchfactor 0.8 + airfriction 12 + alpha 256 512 6280 + color 0xff9c00 0xff8400 + count 6 + originjitter 2 2 2 + sizeincrease -10 + size 5 7 + stretchfactor 0.800000 + tex 8 15 + type spark + velocityjitter 200 200 200 + velocitymultiplier 0.200000 effect spiderbot_minigun_muzzleflash -countabsolute 2 -type static -tex 48 55 -color 0xff9c00 0xff8400 -size 32 32 -alpha 256 512 6680 -sizeincrease -100 -stretchfactor 0.1 -rotate -180 180 4000 -4000 -lightradius 120 -lightradiusfade 8000 -lightcolor 3 3 0 - + alpha 256 512 6680 + color 0xff9c00 0xff8400 + countabsolute 2 + lightcolor 3 3 0 + lightradiusfade 8000 + lightradius 120 + rotate -180 180 4000 -4000 + sizeincrease -100 + size 32 32 + stretchfactor 0.100000 + tex 48 55 + type static effect spiderbot_minigun_impact -countabsolute 1 -type static -tex 65 65 -color 0xff9c00 0xf6ff00 -size 52 52 -alpha 50 100 1680 -sizeincrease -100 -stretchfactor 0.1 -rotate -180 180 4000 -4000 -// fire + alpha 50 100 1680 + color 0xff9c00 0xf6ff00 + countabsolute 1 + rotate -180 180 4000 -4000 + sizeincrease -100 + size 52 52 + stretchfactor 0.100000 + tex 65 65 + type static effect spiderbot_minigun_impact -count 7 -type spark -color 0xff9c00 0xff8400 -tex 48 55 -size 9 15 -alpha 256 512 6280 -airfriction 10 -originjitter 2 2 2 -velocityjitter 250 250 150 -velocitymultiplier 0.2 -sizeincrease 100 -stretchfactor 3 -airfriction 6 -rotate -180 180 4000 -4000 -// smoke + airfriction 6 + alpha 256 512 6280 + color 0xff9c00 0xff8400 + count 7 + originjitter 2 2 2 + rotate -180 180 4000 -4000 + sizeincrease 100 + size 9 15 + stretchfactor 3 + tex 48 55 + type spark + velocityjitter 250 250 150 + velocitymultiplier 0.200000 effect spiderbot_minigun_impact -count 6 -type smoke -color 0xd0d0a0 0xffffff -tex 0 8 -size 10 20 -alpha 50 50 190 -sizeincrease 80 -velocityjitter 100 100 250 -velocitymultiplier 0.49 -gravity 1.3 -airfriction 10 -rotate -180 180 0 0 -// smoke 2 + airfriction 10 + alpha 50 50 190 + color 0xd0d0a0 0xffffff + count 6 + gravity 1.300000 + rotate -180 180 0 0 + sizeincrease 80 + size 10 20 + tex 0 8 + type smoke + velocityjitter 100 100 250 + velocitymultiplier 0.490000 effect spiderbot_minigun_impact -count 7 -type spark -color 0xd0d0a0 0xffffff -tex 0 8 -size 15 19 -alpha 25 51 128 -airfriction 6 -originjitter 2 2 2 -velocityjitter 250 250 150 -velocitymultiplier 0.2 -sizeincrease 100 -stretchfactor 7.6 -// debris + airfriction 6 + alpha 25 51 128 + color 0xd0d0a0 0xffffff + count 7 + originjitter 2 2 2 + sizeincrease 100 + size 15 19 + stretchfactor 7.600000 + tex 0 8 + type spark + velocityjitter 250 250 150 + velocitymultiplier 0.200000 effect spiderbot_minigun_impact -notunderwater -count 3 -type alphastatic -tex 66 68 -color 0x99977D 0xFFFFFF -size 6 8 -alpha 644 756 1484 -gravity 1.1 -airfriction 0.4 -sizeincrease -10 -velocitymultiplier 0.15 -originjitter 16 16 16 -velocityjitter 124 124 224 -rotate -180 180 -1000 1000 -// decal + airfriction 0.400000 + alpha 644 756 1484 + color 0x99977D 0xFFFFFF + count 3 + gravity 1.100000 + notunderwater + originjitter 16 16 16 + rotate -180 180 -1000 1000 + sizeincrease -10 + size 6 8 + tex 66 68 + type alphastatic + velocityjitter 124 124 224 + velocitymultiplier 0.150000 effect spiderbot_minigun_impact -countabsolute 1 -type decal -tex 56 59 -size 20 25 -alpha 256 256 0 -originjitter 16 16 16 -rotate -180 180 0 0 - + alpha 256 256 0 + countabsolute 1 + originjitter 16 16 16 + rotate -180 180 0 0 + size 20 25 + tex 56 59 + type decal effect spiderbot_rocket_explode -countabsolute 1 -type decal -tex 8 16 -size 72 72 -alpha 256 256 0 -originjitter 23 23 23 -lightradius 300 -lightradiusfade 1750 -lightcolor 8 4 0 -// shockwave + alpha 256 256 0 + countabsolute 1 + lightcolor 8 4 0 + lightradiusfade 1750 + lightradius 300 + originjitter 23 23 23 + size 72 72 + tex 8 16 + type decal effect spiderbot_rocket_explode -countabsolute 1 -type static -tex 33 33 -size 22 22 -alpha 56 56 230 -color 0x8f0d00 0xff5a00 -sizeincrease 2400 -// glow + alpha 56 56 230 + color 0x8f0d00 0xff5a00 + countabsolute 1 + sizeincrease 2400 + size 22 22 + tex 33 33 + type static effect spiderbot_rocket_explode -countabsolute 1 -type static -tex 64 64 -size 120 120 -alpha 156 156 830 -color 0x8f0d00 0xff5a00 -sizeincrease 240 -// fire effect + alpha 156 156 830 + color 0x8f0d00 0xff5a00 + countabsolute 1 + sizeincrease 240 + size 120 120 + tex 64 64 + type static effect spiderbot_rocket_explode -notunderwater -count 32 -type static -tex 48 55 -color 0x8f0d00 0xff5a00 -size 12 21 -sizeincrease 495 -alpha 200 256 812 -airfriction 8 -liquidfriction 8 -originjitter 100 100 100 -velocityjitter 512 512 512 -rotate -180 180 -50 50 -// fire effect 2 + airfriction 8 + alpha 200 256 812 + color 0x8f0d00 0xff5a00 + count 32 + liquidfriction 8 + notunderwater + originjitter 100 100 100 + rotate -180 180 -50 50 + sizeincrease 495 + size 12 21 + tex 48 55 + type static + velocityjitter 512 512 512 effect spiderbot_rocket_explode -notunderwater -count 16 -type spark -tex 48 55 -color 0x8f0d00 0xff5a00 -size 3 3 -sizeincrease 120 -alpha 200 256 912 -airfriction -2 -liquidfriction 8 -velocityjitter 412 412 412 -rotate -180 180 -150 150 -stretchfactor 10 -// fire rays + airfriction -2 + alpha 200 256 912 + color 0x8f0d00 0xff5a00 + count 16 + liquidfriction 8 + notunderwater + rotate -180 180 -150 150 + sizeincrease 120 + size 3 3 + stretchfactor 10 + tex 48 55 + type spark + velocityjitter 412 412 412 effect spiderbot_rocket_explode -notunderwater -count 10 -type spark -tex 48 55 -color 0x8f0d00 0xff5a00 -size 13 54 -sizeincrease 120 -alpha 200 256 1600 -airfriction -3 -liquidfriction 8 -originjitter 40 40 40 -velocityjitter 712 712 712 -stretchfactor 10 -// smoke + airfriction -3 + alpha 200 256 1600 + color 0x8f0d00 0xff5a00 + count 10 + liquidfriction 8 + notunderwater + originjitter 40 40 40 + sizeincrease 120 + size 13 54 + stretchfactor 10 + tex 48 55 + type spark + velocityjitter 712 712 712 effect spiderbot_rocket_explode -type alphastatic -notunderwater -tex 0 8 -count 10 -size 10 15 -sizeincrease 280 -alpha 300 650 756 -originjitter 100 100 100 -velocityjitter 200 200 200 -airfriction 3 -color 0x4F4B46 0x000000 -rotate -180 180 -20 20 -// smoke2 + airfriction 3 + alpha 300 650 756 + color 0x4F4B46 0x000000 + count 10 + notunderwater + originjitter 100 100 100 + rotate -180 180 -20 20 + sizeincrease 280 + size 10 15 + tex 0 8 + type alphastatic + velocityjitter 200 200 200 effect spiderbot_rocket_explode -type alphastatic -notunderwater -tex 0 8 -count 3 -size 100 150 -sizeincrease 30 -alpha 300 650 556 -originjitter 10 10 10 -velocityjitter 200 200 200 -airfriction 2 -gravity -0.5 -color 0x4F4B46 0x000000 -rotate -180 180 -20 20 -// underwater bubbles + airfriction 2 + alpha 300 650 556 + color 0x4F4B46 0x000000 + count 3 + gravity -0.500000 + notunderwater + originjitter 10 10 10 + rotate -180 180 -20 20 + sizeincrease 30 + size 100 150 + tex 0 8 + type alphastatic + velocityjitter 200 200 200 effect spiderbot_rocket_explode -underwater -count 32 -type bubble -tex 62 62 -color 0x404040 0x808080 -size 1 3 -alpha 128 256 64 -gravity -0.125 -bounce 1.5 -liquidfriction 0.25 -originjitter 160 160 160 -velocityjitter 144 144 144 -// underwatershockwave + alpha 128 256 64 + bounce 1.500000 + color 0x404040 0x808080 + count 32 + gravity -0.125000 + liquidfriction 0.250000 + originjitter 160 160 160 + size 1 3 + tex 62 62 + type bubble + underwater + velocityjitter 144 144 144 effect spiderbot_rocket_explode -underwater -type smoke -countabsolute 1 -tex 33 33 -size 30 30 -sizeincrease 1200 -alpha 40 40 300 - - + alpha 40 40 300 + countabsolute 1 + sizeincrease 1200 + size 30 30 + tex 33 33 + type smoke + underwater effect spiderbot_rocket_thrust -notunderwater -count 3 -type spark -tex 48 55 -color 0x8f0d00 0xff5a00 -size 5 10 -sizeincrease -40 -alpha 200 256 1600 -velocityjitter 20 20 20 -velocitymultiplier -1.4 -stretchfactor 0.9 + alpha 200 256 1600 + color 0x8f0d00 0xff5a00 + count 3 + notunderwater + sizeincrease -40 + size 5 10 + stretchfactor 0.900000 + tex 48 55 + type spark + velocityjitter 20 20 20 + velocitymultiplier -1.400000 effect spiderbot_rocket_thrust -notunderwater -count 4 -type static -tex 48 55 -color 0x8f0d00 0xff5a00 -size 25 25 -sizeincrease -3000 -alpha 200 200 9000 -velocityjitter 60 60 60 -velocitymultiplier -1.4 -stretchfactor 1 -rotate -180 180 -500 500 - - - -// long lasting smoke + alpha 200 200 9000 + color 0x8f0d00 0xff5a00 + count 4 + notunderwater + rotate -180 180 -500 500 + sizeincrease -3000 + size 25 25 + stretchfactor 1 + tex 48 55 + type static + velocityjitter 60 60 60 + velocitymultiplier -1.400000 effect spiderbot_rocket_launch -notunderwater -count 8 -type smoke -tex 0 8 -color 0xFFFFFF 0xD9C4B0 -size 30 30 -sizeincrease 20 -alpha 100 156 60 -velocityjitter 60 60 60 -velocitymultiplier -0.1 -airfriction 0.3 -gravity -0.01 -// fast smoke + airfriction 0.300000 + alpha 100 156 60 + color 0xFFFFFF 0xD9C4B0 + count 8 + gravity -0.010000 + notunderwater + sizeincrease 20 + size 30 30 + tex 0 8 + type smoke + velocityjitter 60 60 60 + velocitymultiplier -0.100000 effect spiderbot_rocket_launch -notunderwater -count 14 -type smoke -tex 0 8 -color 0xFFFFFF 0xD9C4B0 -size 30 30 -sizeincrease 20 -alpha 100 156 260 -gravity -0.3 -velocityjitter 160 160 60 -airfriction 0.3 -// fire + airfriction 0.300000 + alpha 100 156 260 + color 0xFFFFFF 0xD9C4B0 + count 14 + gravity -0.300000 + notunderwater + sizeincrease 20 + size 30 30 + tex 0 8 + type smoke + velocityjitter 160 160 60 effect spiderbot_rocket_launch -notunderwater -count 14 -type spark -tex 48 55 -color 0x8f0d00 0xff5a00 -size 30 30 -sizeincrease 40 -velocitymultiplier 0.5 -alpha 200 256 1960 -velocityjitter 60 60 60 -airfriction 0.3 -stretchfactor 3 -airfriction 0.3 -//sparks + airfriction 0.300000 + alpha 200 256 1960 + color 0x8f0d00 0xff5a00 + count 14 + notunderwater + sizeincrease 40 + size 30 30 + stretchfactor 3 + tex 48 55 + type spark + velocityjitter 60 60 60 + velocitymultiplier 0.500000 effect spiderbot_rocket_launch -notunderwater -count 10 -type spark -tex 40 40 -color 0xFFFFFF 0xD9C4B0 -size 1 4 -alpha 200 256 1000 -velocityjitter 160 160 160 -velocitymultiplier -0.5 - + alpha 200 256 1000 + color 0xFFFFFF 0xD9C4B0 + count 10 + notunderwater + size 1 4 + tex 40 40 + type spark + velocityjitter 160 160 160 + velocitymultiplier -0.500000 effect wakizashi_gun_impact -count 15 -type spark -color 0xff0000 0xc03535 -tex 41 41 -size 4 7 -alpha 256 512 1180 -airfriction 4 -gravity 3 -originjitter 40 40 10 -velocityjitter 350 350 550 -velocityoffset 0 0 700 -stretchfactor 0.9 + airfriction 4 + alpha 256 512 1180 + color 0xff0000 0xc03535 + count 15 + gravity 3 + originjitter 40 40 10 + size 4 7 + stretchfactor 0.900000 + tex 41 41 + type spark + velocityjitter 350 350 550 + velocityoffset 0 0 700 effect wakizashi_gun_impact -type smoke -count 24 -color 0xd0d0a0 0xc03535 -tex 0 8 -size 10 20 -alpha 50 90 150 -sizeincrease 80 -velocityjitter 250 250 450 -velocityoffset 0 0 600 -originjitter 40 40 10 -airfriction 4 -sizeincrease 80 -rotate -180 180 0 0 + airfriction 4 + alpha 50 90 150 + color 0xd0d0a0 0xc03535 + count 24 + originjitter 40 40 10 + rotate -180 180 0 0 + sizeincrease 80 + size 10 20 + tex 0 8 + type smoke + velocityjitter 250 250 450 + velocityoffset 0 0 600 effect wakizashi_gun_impact -countabsolute 1 -type smoke -tex 65 65 -color 0xff0000 0xc03535 -size 82 82 -alpha 250 300 680 -sizeincrease -180 + alpha 250 300 680 + color 0xff0000 0xc03535 + countabsolute 1 + sizeincrease -180 + size 82 82 + tex 65 65 + type smoke effect wakizashi_gun_impact -countabsolute 1 -type smoke -tex 33 33 -color 0xff0000 0xc03535 -size 40 40 -alpha 50 100 620 -sizeincrease 900 -rotate -180 180 400 -400 + alpha 50 100 620 + color 0xff0000 0xc03535 + countabsolute 1 + rotate -180 180 400 -400 + sizeincrease 900 + size 40 40 + tex 33 33 + type smoke effect wakizashi_gun_impact -countabsolute 1 -type decal -tex 59 59 -size 14 14 -alpha 256 256 0 -originjitter 16 16 16 -rotate -180 180 0 0 - + alpha 256 256 0 + countabsolute 1 + originjitter 16 16 16 + rotate -180 180 0 0 + size 14 14 + tex 59 59 + type decal effect wakizashi_gun_muzzleflash -count 16 -type spark -color 0xff0000 0xc03535 -tex 8 15 -size 5 7 -alpha 256 512 6280 -airfriction 12 -originjitter 2 2 2 -velocityjitter 200 200 200 -velocitymultiplier 0.2 -sizeincrease -10 -stretchfactor 0.7 - + airfriction 12 + alpha 256 512 6280 + color 0xff0000 0xc03535 + count 16 + originjitter 2 2 2 + sizeincrease -10 + size 5 7 + stretchfactor 0.700000 + tex 8 15 + type spark + velocityjitter 200 200 200 + velocitymultiplier 0.200000 effect wakizashi_rocket_explode -countabsolute 1 -type decal -tex 8 16 -size 72 72 -alpha 256 256 0 -originjitter 23 23 23 -lightradius 300 -lightradiusfade 1750 -lightcolor 8 4 0 -// shockwave + alpha 256 256 0 + countabsolute 1 + lightcolor 8 4 0 + lightradiusfade 1750 + lightradius 300 + originjitter 23 23 23 + size 72 72 + tex 8 16 + type decal effect wakizashi_rocket_explode -countabsolute 1 -type static -tex 33 33 -size 22 22 -alpha 56 56 230 -color 0x8f0d00 0xff5a00 -sizeincrease 2400 -// glow + alpha 56 56 230 + color 0x8f0d00 0xff5a00 + countabsolute 1 + sizeincrease 2400 + size 22 22 + tex 33 33 + type static effect wakizashi_rocket_explode -countabsolute 1 -type static -tex 64 64 -size 120 120 -alpha 156 156 830 -color 0x8f0d00 0xff5a00 -sizeincrease 240 -// fire effect + alpha 156 156 830 + color 0x8f0d00 0xff5a00 + countabsolute 1 + sizeincrease 240 + size 120 120 + tex 64 64 + type static effect wakizashi_rocket_explode -notunderwater -count 64 -type static -tex 48 55 -color 0xFFAE00 0xff5a00 -size 12 21 -sizeincrease 195 -alpha 200 256 512 -airfriction 2 -liquidfriction 8 -originjitter 10 10 10 -velocityjitter 512 512 512 -rotate -180 180 -50 50 -// fire rays + airfriction 2 + alpha 200 256 512 + color 0xFFAE00 0xff5a00 + count 64 + liquidfriction 8 + notunderwater + originjitter 10 10 10 + rotate -180 180 -50 50 + sizeincrease 195 + size 12 21 + tex 48 55 + type static + velocityjitter 512 512 512 effect wakizashi_rocket_explode -notunderwater -count 10 -type spark -tex 48 55 -color 0xFFEA00 0xff5a00 -size 43 54 -sizeincrease 120 -alpha 200 256 1600 -airfriction -3 -liquidfriction 8 -originjitter 40 40 40 -velocityjitter 512 512 512 -stretchfactor 10 -// smoke + airfriction -3 + alpha 200 256 1600 + color 0xFFEA00 0xff5a00 + count 10 + liquidfriction 8 + notunderwater + originjitter 40 40 40 + sizeincrease 120 + size 43 54 + stretchfactor 10 + tex 48 55 + type spark + velocityjitter 512 512 512 effect wakizashi_rocket_explode -type alphastatic -notunderwater -tex 0 8 -count 32 -size 10 15 -sizeincrease 230 -alpha 300 450 556 -originjitter 100 100 100 -velocityjitter 200 200 200 -airfriction 3 -color 0x4F4B46 0x000000 -rotate -180 180 -20 20 -// bouncing sparks + airfriction 3 + alpha 300 450 556 + color 0x4F4B46 0x000000 + count 32 + notunderwater + originjitter 100 100 100 + rotate -180 180 -20 20 + sizeincrease 230 + size 10 15 + tex 0 8 + type alphastatic + velocityjitter 200 200 200 effect wakizashi_rocket_explode -notunderwater -count 14 -type spark -tex 40 40 -color 0xffa35b 0xfff2be -size 1 2 -alpha 644 956 884 -gravity 1 -airfriction 1 -liquidfriction 0.8 -velocityoffset 0 0 170 -originjitter 60 60 60 -velocityjitter 524 524 524 -// underwater bubbles + airfriction 1 + alpha 644 956 884 + color 0xffa35b 0xfff2be + count 14 + gravity 1 + liquidfriction 0.800000 + notunderwater + originjitter 60 60 60 + size 1 2 + tex 40 40 + type spark + velocityjitter 524 524 524 + velocityoffset 0 0 170 effect wakizashi_rocket_explode -underwater -count 32 -type bubble -tex 62 62 -color 0x404040 0x808080 -size 1 3 -alpha 128 256 64 -gravity -0.125 -bounce 1.5 -liquidfriction 0.25 -originjitter 160 160 160 -velocityjitter 144 144 144 -// underwatershockwave + alpha 128 256 64 + bounce 1.500000 + color 0x404040 0x808080 + count 32 + gravity -0.125000 + liquidfriction 0.250000 + originjitter 160 160 160 + size 1 3 + tex 62 62 + type bubble + underwater + velocityjitter 144 144 144 effect wakizashi_rocket_explode -underwater -type smoke -countabsolute 1 -tex 33 33 -size 30 30 -sizeincrease 1200 -alpha 40 40 300 - + alpha 40 40 300 + countabsolute 1 + sizeincrease 1200 + size 30 30 + tex 33 33 + type smoke + underwater effect wakizashi_rocket_thrust -notunderwater -countabsolute 3 -type spark -tex 48 55 -color 0x00FFDD 0x6200FF -size 14 19 -sizeincrease -2 -alpha 200 256 1600 -velocityjitter 60 60 60 -velocitymultiplier -1.1 -stretchfactor 1 + alpha 200 256 1600 + color 0x00FFDD 0x6200FF + countabsolute 3 + notunderwater + sizeincrease -2 + size 14 19 + stretchfactor 1 + tex 48 55 + type spark + velocityjitter 60 60 60 + velocitymultiplier -1.100000 effect wakizashi_rocket_thrust -notunderwater -countabsolute 2 -type spark -tex 48 55 -color 0xFFFF33 0xFFEE00 -size 5 10 -sizeincrease -2 -alpha 200 256 1900 -velocityjitter 60 60 60 -velocitymultiplier -0.3 -stretchfactor 3 - -// long lasting smoke + alpha 200 256 1900 + color 0xFFFF33 0xFFEE00 + countabsolute 2 + notunderwater + sizeincrease -2 + size 5 10 + stretchfactor 3 + tex 48 55 + type spark + velocityjitter 60 60 60 + velocitymultiplier -0.300000 effect wakizashi_rocket_launch -notunderwater -count 8 -type smoke -tex 0 8 -color 0xFFFFFF 0xD9C4B0 -size 3 30 -sizeincrease 20 -alpha 100 156 60 -velocityjitter 160 160 60 -velocitymultiplier -0.1 -airfriction 0.3 -// fast smoke + airfriction 0.300000 + alpha 100 156 60 + color 0xFFFFFF 0xD9C4B0 + count 8 + notunderwater + sizeincrease 20 + size 3 30 + tex 0 8 + type smoke + velocityjitter 160 160 60 + velocitymultiplier -0.100000 effect wakizashi_rocket_launch -notunderwater -count 14 -type smoke -tex 0 8 -color 0xFFFFFF 0xD9C4B0 -size 30 30 -sizeincrease 20 -alpha 100 156 260 -velocityjitter 160 160 60 -velocitymultiplier 0.4 -airfriction 0.3 -//sparks + airfriction 0.300000 + alpha 100 156 260 + color 0xFFFFFF 0xD9C4B0 + count 14 + notunderwater + sizeincrease 20 + size 30 30 + tex 0 8 + type smoke + velocityjitter 160 160 60 + velocitymultiplier 0.400000 effect wakizashi_rocket_launch -notunderwater -count 10 -type spark -tex 40 40 -color 0xFFFFFF 0xD9C4B0 -size 1 4 -alpha 200 256 1000 -velocityjitter 60 60 60 -velocitymultiplier -1.5 - + alpha 200 256 1000 + color 0xFFFFFF 0xD9C4B0 + count 10 + notunderwater + size 1 4 + tex 40 40 + type spark + velocityjitter 60 60 60 + velocitymultiplier -1.500000 effect wakizashi_booster_smoke -type alphastatic -notunderwater -tex 0 8 -count 3 -size 60 100 -sizeincrease 10 -gravity -0.1 -alpha 200 750 200 -velocityjitter 40 40 40 -originjitter 60 60 60 -airfriction 2 -color 0xA69A80 0xB3B39F -rotate -180 180 -20 20 - -// decal + airfriction 2 + alpha 200 750 200 + color 0xA69A80 0xB3B39F + count 3 + gravity -0.100000 + notunderwater + originjitter 60 60 60 + rotate -180 180 -20 20 + sizeincrease 10 + size 60 100 + tex 0 8 + type alphastatic + velocityjitter 40 40 40 effect raptor_cannon_impact -countabsolute 1 -type decal -tex 47 47 -size 24 24 -alpha 256 256 0 -originjitter 16 16 16 -rotate -180 180 0 0 -//spark + alpha 256 256 0 + countabsolute 1 + originjitter 16 16 16 + rotate -180 180 0 0 + size 24 24 + tex 47 47 + type decal effect raptor_cannon_impact -notunderwater -count 6 -type spark -tex 40 40 -color 0xD400FF 0x571863 -size 1 1 -alpha 644 956 784 -gravity 1 -airfriction 0.2 -velocityoffset 0 0 150 -originjitter 16 16 16 -velocityjitter 124 124 524 -// smoke + airfriction 0.200000 + alpha 644 956 784 + color 0xD400FF 0x571863 + count 6 + gravity 1 + notunderwater + originjitter 16 16 16 + size 1 1 + tex 40 40 + type spark + velocityjitter 124 124 524 + velocityoffset 0 0 150 effect raptor_cannon_impact -count 4 -type alphastatic -tex 0 7 -size 50 50 -color 0x646364 0x151515 -alpha 428 428 600 -rotate -180 180 0 0 -velocityjitter 200 200 300 -velocityoffset 0 0 340 -gravity 0.7 -airfriction 2 -// fire + airfriction 2 + alpha 428 428 600 + color 0x646364 0x151515 + count 4 + gravity 0.700000 + rotate -180 180 0 0 + size 50 50 + tex 0 7 + type alphastatic + velocityjitter 200 200 300 + velocityoffset 0 0 340 effect raptor_cannon_impact -notunderwater -count 10 -type static -tex 48 55 -color 0xD400FF 0x571863 -size 33 44 -sizeincrease 25 -alpha 200 256 812 -bounce 1.5 -airfriction 8 -liquidfriction 8 -originjitter 8 8 8 -velocityjitter 312 312 312 - - + airfriction 8 + alpha 200 256 812 + bounce 1.500000 + color 0xD400FF 0x571863 + count 10 + liquidfriction 8 + notunderwater + originjitter 8 8 8 + sizeincrease 25 + size 33 44 + tex 48 55 + type static + velocityjitter 312 312 312 effect raptor_cannon_muzzleflash -count 16 -type spark -color 0xD400FF 0x571863 -tex 8 15 -size 10 17 -alpha 1256 1512 56280 -airfriction 12 -originjitter 2 2 2 -velocityjitter 200 200 200 -velocitymultiplier 0.2 -sizeincrease -10 -stretchfactor 0.6 + airfriction 12 + alpha 1256 1512 56280 + color 0xD400FF 0x571863 + count 16 + originjitter 2 2 2 + sizeincrease -10 + size 10 17 + stretchfactor 0.600000 + tex 8 15 + type spark + velocityjitter 200 200 200 + velocitymultiplier 0.200000 effect raptor_cannon_muzzleflash -countabsolute 1 -type static -tex 48 55 -color 0xD400FF 0x571863 -size 32 32 -alpha 6056 20112 406280 -sizeincrease -100 -stretchfactor 0.1 -rotate -180 180 4000 -4000 -lightradius 150 -lightradiusfade 6000 -lightcolor 3 0 6 - -// decal + alpha 6056 20112 406280 + color 0xD400FF 0x571863 + countabsolute 1 + lightcolor 3 0 6 + lightradiusfade 6000 + lightradius 150 + rotate -180 180 4000 -4000 + sizeincrease -100 + size 32 32 + stretchfactor 0.100000 + tex 48 55 + type static effect raptor_bomb_impact -countabsolute 1 -type decal -tex 8 16 -size 84 84 -alpha 256 256 0 -originjitter 16 16 16 -rotate -180 180 0 0 - -//spark vertical + alpha 256 256 0 + countabsolute 1 + originjitter 16 16 16 + rotate -180 180 0 0 + size 84 84 + tex 8 16 + type decal effect raptor_bomb_impact -count 3 -type spark -color 0xff9c00 0xff3c00 -tex 48 55 -size 20 40 -alpha 300 300 600 -originjitter 10 10 10 -velocityjitter 40 40 120 -stretchfactor 210 -sizeincrease 50 - -//fire + alpha 300 300 600 + color 0xff9c00 0xff3c00 + count 3 + originjitter 10 10 10 + sizeincrease 50 + size 20 40 + stretchfactor 210 + tex 48 55 + type spark + velocityjitter 40 40 120 effect raptor_bomb_impact -count 4 -type static -color 0xff9c00 0xff3c00 -tex 48 55 -size 30 120 -alpha 300 300 500 -originjitter 10 10 10 -velocityjitter 950 950 0 -sizeincrease 230 -airfriction 2 - -//smoke + airfriction 2 + alpha 300 300 500 + color 0xff9c00 0xff3c00 + count 4 + originjitter 10 10 10 + sizeincrease 230 + size 30 120 + tex 48 55 + type static + velocityjitter 950 950 0 effect raptor_bomb_impact -count 4 -type spark -blend alpha -tex 0 7 -size 120 180 -color 0x646364 0x151515 -alpha 428 428 600 -rotate -180 180 0 0 -velocityjitter 200 200 280 -velocityoffset 0 0 280 -originjitter 30 30 10 -stretchfactor 10 - -//smoke 2 + alpha 428 428 600 + blend alpha + color 0x646364 0x151515 + count 4 + originjitter 30 30 10 + rotate -180 180 0 0 + size 120 180 + stretchfactor 10 + tex 0 7 + type spark + velocityjitter 200 200 280 + velocityoffset 0 0 280 effect raptor_bomb_impact -count 4 -//type alphastatic -type spark -blend alpha -tex 0 7 -size 40 100 -color 0x646364 0x151515 -alpha 328 328 350 -rotate -180 180 0 0 -velocityjitter 200 200 300 -velocityoffset 0 0 580 -originjitter 30 30 10 -sizeincrease 60 -airfriction 0.6 -gravity 2 - -// sparks + airfriction 0.600000 + alpha 328 328 350 + blend alpha + color 0x646364 0x151515 + count 4 + gravity 2 + originjitter 30 30 10 + rotate -180 180 0 0 + sizeincrease 60 + size 40 100 + tex 0 7 + type spark + velocityjitter 200 200 300 + velocityoffset 0 0 580 effect raptor_bomb_impact -notunderwater -count 5 -type spark -tex 40 40 -color 0xffa35b 0xfff2be -size 3 5 -alpha 644 956 984 -gravity 1 -airfriction 0.3 -velocityoffset 0 0 350 -originjitter 16 16 16 -velocityjitter 174 174 924 -stretchfactor 2 - + airfriction 0.300000 + alpha 644 956 984 + color 0xffa35b 0xfff2be + count 5 + gravity 1 + notunderwater + originjitter 16 16 16 + size 3 5 + stretchfactor 2 + tex 40 40 + type spark + velocityjitter 174 174 924 + velocityoffset 0 0 350 effect raptor_bomb_spread -notunderwater -count 34 -type spark -tex 40 40 -color 0xffa35b 0xfff2be -size 1 2 -alpha 644 956 1284 -gravity 1 -airfriction 1 -liquidfriction 0.8 -originjitter 110 110 110 -velocityjitter 324 324 324 - - -// generic explosion size:big (biggest explosion ever) + airfriction 1 + alpha 644 956 1284 + color 0xffa35b 0xfff2be + count 34 + gravity 1 + liquidfriction 0.800000 + notunderwater + originjitter 110 110 110 + size 1 2 + tex 40 40 + type spark + velocityjitter 324 324 324 effect explosion_big -countabsolute 1 -type decal -tex 8 16 -size 172 172 -alpha 256 256 0 -originjitter 23 23 23 -lightradius 600 -lightradiusfade 1750 -lightcolor 8 4 0 -// shockwave + alpha 256 256 0 + countabsolute 1 + lightcolor 8 4 0 + lightradiusfade 1750 + lightradius 600 + originjitter 23 23 23 + size 172 172 + tex 8 16 + type decal effect explosion_big -countabsolute 1 -type static -tex 33 33 -size 72 72 -alpha 56 56 330 -color 0x8f0d00 0xff5a00 -sizeincrease 4400 -// fire effect + alpha 56 56 330 + color 0x8f0d00 0xff5a00 + countabsolute 1 + sizeincrease 4400 + size 72 72 + tex 33 33 + type static effect explosion_big -notunderwater -count 64 -type static -tex 48 55 -color 0x8f0d00 0xff5a00 -size 133 144 -sizeincrease 45 -alpha 200 256 712 -airfriction 8 -liquidfriction 8 -originjitter 80 80 80 -velocityjitter 2512 2512 2512 -// fire rays + airfriction 8 + alpha 200 256 712 + color 0x8f0d00 0xff5a00 + count 64 + liquidfriction 8 + notunderwater + originjitter 80 80 80 + sizeincrease 45 + size 133 144 + tex 48 55 + type static + velocityjitter 2512 2512 2512 effect explosion_big -notunderwater -count 64 -type spark -tex 48 55 -color 0x8f0d00 0xff5a00 -size 133 144 -sizeincrease 45 -alpha 200 256 800 -airfriction -5 -liquidfriction 8 -originjitter 40 40 40 -velocityjitter 512 512 512 -stretchfactor 10 -// smoke + airfriction -5 + alpha 200 256 800 + color 0x8f0d00 0xff5a00 + count 64 + liquidfriction 8 + notunderwater + originjitter 40 40 40 + sizeincrease 45 + size 133 144 + stretchfactor 10 + tex 48 55 + type spark + velocityjitter 512 512 512 effect explosion_big -type alphastatic -notunderwater -tex 0 8 -count 32 -size 50 100 -sizeincrease 244 -alpha 300 650 456 -velocityjitter 3444 3444 3444 -airfriction 8 -color 0x4F4B46 0x000000 -// bouncing sparks + airfriction 8 + alpha 300 650 456 + color 0x4F4B46 0x000000 + count 32 + notunderwater + sizeincrease 244 + size 50 100 + tex 0 8 + type alphastatic + velocityjitter 3444 3444 3444 effect explosion_big -notunderwater -count 34 -type spark -tex 40 40 -color 0xffa35b 0xfff2be -size 3 4 -alpha 644 956 1284 -gravity 1 -airfriction 1 -liquidfriction 0.8 -velocityoffset 0 0 370 -originjitter 160 160 160 -velocityjitter 924 924 924 -stretchfactor 0.7 -// debris + airfriction 1 + alpha 644 956 1284 + color 0xffa35b 0xfff2be + count 34 + gravity 1 + liquidfriction 0.800000 + notunderwater + originjitter 160 160 160 + size 3 4 + stretchfactor 0.700000 + tex 40 40 + type spark + velocityjitter 924 924 924 + velocityoffset 0 0 370 effect explosion_big -notunderwater -count 16 -type alphastatic -tex 66 68 -color 0xFFFFFF 0xcac5b4 -size 10 16 -alpha 444 1356 1184 -gravity 2.3 -airfriction 0.5 -velocityjitter 1800 1800 1800 -velocityoffset 0 0 970 -sizeincrease -5 -rotate -180 180 -1000 1000 -// underwater bubbles + airfriction 0.500000 + alpha 444 1356 1184 + color 0xFFFFFF 0xcac5b4 + count 16 + gravity 2.300000 + notunderwater + rotate -180 180 -1000 1000 + sizeincrease -5 + size 10 16 + tex 66 68 + type alphastatic + velocityjitter 1800 1800 1800 + velocityoffset 0 0 970 effect explosion_big -underwater -count 32 -type bubble -tex 62 62 -color 0x404040 0x808080 -size 3 3 -alpha 128 256 64 -gravity -0.125 -bounce 1.5 -liquidfriction 0.25 -originjitter 160 160 160 -velocityjitter 444 444 444 -// underwatershockwave + alpha 128 256 64 + bounce 1.500000 + color 0x404040 0x808080 + count 32 + gravity -0.125000 + liquidfriction 0.250000 + originjitter 160 160 160 + size 3 3 + tex 62 62 + type bubble + underwater + velocityjitter 444 444 444 effect explosion_big -underwater -type smoke -countabsolute 1 -tex 33 33 -size 30 30 -sizeincrease 2900 -alpha 40 40 300 -velocitymultiplier 0.3 - - -// generic explosion size:medium (it leaves rising smoke for a longer time) -// shockwave + alpha 40 40 300 + countabsolute 1 + sizeincrease 2900 + size 30 30 + tex 33 33 + type smoke + underwater + velocitymultiplier 0.300000 effect explosion_medium -countabsolute 1 -type static -tex 33 33 -size 72 72 -alpha 56 56 330 -color 0x8f0d00 0xff5a00 -sizeincrease 2400 -// fire effect + alpha 56 56 330 + color 0x8f0d00 0xff5a00 + countabsolute 1 + sizeincrease 2400 + size 72 72 + tex 33 33 + type static effect explosion_medium -notunderwater -count 32 -type static -tex 48 55 -color 0x8f0d00 0xff5a00 -size 133 144 -sizeincrease 45 -alpha 200 256 712 -airfriction 8 -liquidfriction 8 -originjitter 30 30 30 -velocityjitter 1512 1512 1512 -rotate -180 180 -500 500 -// fire effect 2 + airfriction 8 + alpha 200 256 712 + color 0x8f0d00 0xff5a00 + count 32 + liquidfriction 8 + notunderwater + originjitter 30 30 30 + rotate -180 180 -500 500 + sizeincrease 45 + size 133 144 + tex 48 55 + type static + velocityjitter 1512 1512 1512 effect explosion_medium -notunderwater -count 32 -type static -tex 48 55 -color 0x8f0d00 0xff5a00 -size 73 94 -sizeincrease 40 -gravity -2 -alpha 200 256 612 -airfriction 8 -liquidfriction 8 -originjitter 30 30 30 -velocityjitter 1512 1512 1512 -rotate -180 180 -150 150 -// fire rays + airfriction 8 + alpha 200 256 612 + color 0x8f0d00 0xff5a00 + count 32 + gravity -2 + liquidfriction 8 + notunderwater + originjitter 30 30 30 + rotate -180 180 -150 150 + sizeincrease 40 + size 73 94 + tex 48 55 + type static + velocityjitter 1512 1512 1512 effect explosion_medium -notunderwater -count 14 -type spark -tex 48 55 -color 0x8f0d00 0xff5a00 -size 43 74 -sizeincrease 40 -alpha 200 256 800 -airfriction -3 -liquidfriction 8 -originjitter 40 40 40 -velocityjitter 512 512 512 -stretchfactor 8 -// smoke + airfriction -3 + alpha 200 256 800 + color 0x8f0d00 0xff5a00 + count 14 + liquidfriction 8 + notunderwater + originjitter 40 40 40 + sizeincrease 40 + size 43 74 + stretchfactor 8 + tex 48 55 + type spark + velocityjitter 512 512 512 effect explosion_medium -type alphastatic -notunderwater -tex 0 8 -count 5 -size 250 300 -sizeincrease -30 -alpha 300 650 756 -originjitter 100 100 100 -velocityjitter 200 200 200 -airfriction 3 -color 0x4F4B46 0x000000 -rotate -180 180 -20 20 -// smoke 2 + airfriction 3 + alpha 300 650 756 + color 0x4F4B46 0x000000 + count 5 + notunderwater + originjitter 100 100 100 + rotate -180 180 -20 20 + sizeincrease -30 + size 250 300 + tex 0 8 + type alphastatic + velocityjitter 200 200 200 effect explosion_medium -type alphastatic -notunderwater -tex 0 8 -count 10 -size 50 100 -sizeincrease 50 -gravity -0.3 -alpha 300 650 256 -originjitter 100 100 100 -velocityjitter 500 500 500 -velocityoffset 0 0 200 -airfriction 3 -color 0x4F4B46 0x000000 -rotate -180 180 -20 20 -// smoke rays + airfriction 3 + alpha 300 650 256 + color 0x4F4B46 0x000000 + count 10 + gravity -0.300000 + notunderwater + originjitter 100 100 100 + rotate -180 180 -20 20 + sizeincrease 50 + size 50 100 + tex 0 8 + type alphastatic + velocityjitter 500 500 500 + velocityoffset 0 0 200 effect explosion_medium -type spark -notunderwater -tex 0 8 -count 13 -size 150 200 -sizeincrease 100 -alpha 140 255 350 -velocityjitter 250 250 250 -originjitter 40 40 40 -color 0x4F4B46 0x000000 -stretchfactor 50 -// bouncing sparks + alpha 140 255 350 + color 0x4F4B46 0x000000 + count 13 + notunderwater + originjitter 40 40 40 + sizeincrease 100 + size 150 200 + stretchfactor 50 + tex 0 8 + type spark + velocityjitter 250 250 250 effect explosion_medium -notunderwater -count 14 -type spark -tex 40 40 -color 0xffa35b 0xfff2be -size 2 3 -alpha 644 956 984 -gravity 1 -airfriction 1 -liquidfriction 0.8 -velocityoffset 0 0 370 -originjitter 100 100 100 -velocityjitter 624 624 624 -stretchfactor 0.7 -// underwater bubbles + airfriction 1 + alpha 644 956 984 + color 0xffa35b 0xfff2be + count 14 + gravity 1 + liquidfriction 0.800000 + notunderwater + originjitter 100 100 100 + size 2 3 + stretchfactor 0.700000 + tex 40 40 + type spark + velocityjitter 624 624 624 + velocityoffset 0 0 370 effect explosion_medium -underwater -count 32 -type bubble -tex 62 62 -color 0x404040 0x808080 -size 3 3 -alpha 128 256 64 -gravity -0.125 -bounce 1.5 -liquidfriction 0.25 -originjitter 160 160 160 -velocityjitter 444 444 444 -// underwatershockwave + alpha 128 256 64 + bounce 1.500000 + color 0x404040 0x808080 + count 32 + gravity -0.125000 + liquidfriction 0.250000 + originjitter 160 160 160 + size 3 3 + tex 62 62 + type bubble + underwater + velocityjitter 444 444 444 effect explosion_medium -underwater -type smoke -countabsolute 1 -tex 33 33 -size 30 30 -sizeincrease 2900 -alpha 40 40 300 -velocitymultiplier 0.3 - -// generic explosion size:small (its fire only, made to support other explosions) -// shockwave + alpha 40 40 300 + countabsolute 1 + sizeincrease 2900 + size 30 30 + tex 33 33 + type smoke + underwater + velocitymultiplier 0.300000 effect explosion_small -countabsolute 1 -type static -tex 33 33 -size 22 22 -alpha 56 56 330 -color 0x8f0d00 0xff5a00 -sizeincrease 2400 -// fire effect + alpha 56 56 330 + color 0x8f0d00 0xff5a00 + countabsolute 1 + sizeincrease 2400 + size 22 22 + tex 33 33 + type static effect explosion_small -notunderwater -count 16 -type static -tex 48 55 -color 0x8f0d00 0xff5a00 -size 1 44 -sizeincrease 45 -alpha 200 256 1212 -airfriction 5 -liquidfriction 8 -velocityjitter 512 512 512 -rotate -180 180 -500 500 -// fire effect 2 + airfriction 5 + alpha 200 256 1212 + color 0x8f0d00 0xff5a00 + count 16 + liquidfriction 8 + notunderwater + rotate -180 180 -500 500 + sizeincrease 45 + size 1 44 + tex 48 55 + type static + velocityjitter 512 512 512 effect explosion_small -notunderwater -count 16 -type static -tex 48 55 -color 0x8f0d00 0xff5a00 -size 73 94 -sizeincrease 40 -alpha 200 256 812 -airfriction 8 -liquidfriction 8 -velocityjitter 912 912 912 -rotate -180 180 -150 150 -// fire rays + airfriction 8 + alpha 200 256 812 + color 0x8f0d00 0xff5a00 + count 16 + liquidfriction 8 + notunderwater + rotate -180 180 -150 150 + sizeincrease 40 + size 73 94 + tex 48 55 + type static + velocityjitter 912 912 912 effect explosion_small -notunderwater -count 14 -type spark -tex 48 55 -color 0x8f0d00 0xff5a00 -size 13 54 -sizeincrease 30 -alpha 200 256 1300 -airfriction -3 -liquidfriction 8 -originjitter 40 40 40 -velocityjitter 512 512 512 -stretchfactor 8 -// underwater bubbles + airfriction -3 + alpha 200 256 1300 + color 0x8f0d00 0xff5a00 + count 14 + liquidfriction 8 + notunderwater + originjitter 40 40 40 + sizeincrease 30 + size 13 54 + stretchfactor 8 + tex 48 55 + type spark + velocityjitter 512 512 512 effect explosion_small -underwater -count 32 -type bubble -tex 62 62 -color 0x404040 0x808080 -size 1 3 -alpha 128 256 64 -gravity -0.125 -bounce 1.5 -liquidfriction 0.25 -originjitter 160 160 160 -velocityjitter 144 144 144 -// underwatershockwave + alpha 128 256 64 + bounce 1.500000 + color 0x404040 0x808080 + count 32 + gravity -0.125000 + liquidfriction 0.250000 + originjitter 160 160 160 + size 1 3 + tex 62 62 + type bubble + underwater + velocityjitter 144 144 144 effect explosion_small -underwater -type smoke -countabsolute 1 -tex 33 33 -size 30 30 -sizeincrease 1200 -alpha 40 40 300 - -// big smoke ( for spamming on damaged stuff ) + alpha 40 40 300 + countabsolute 1 + sizeincrease 1200 + size 30 30 + tex 33 33 + type smoke + underwater effect smoke_big -type alphastatic -notunderwater -tex 0 8 -count 3 -size 30 60 -sizeincrease 15 -gravity -0.5 -alpha 200 750 200 -originjitter 55 55 55 -velocityjitter 140 140 200 -velocityoffset 0 0 200 -airfriction 4 -color 0x4F4B46 0x000000 -rotate -180 180 -20 20 - -// small smoke ( more precise than big one, for spamming on damaged parts like raptors spinner ) + airfriction 4 + alpha 200 750 200 + color 0x4F4B46 0x000000 + count 3 + gravity -0.500000 + notunderwater + originjitter 55 55 55 + rotate -180 180 -20 20 + sizeincrease 15 + size 30 60 + tex 0 8 + type alphastatic + velocityjitter 140 140 200 + velocityoffset 0 0 200 effect smoke_small -type alphastatic -notunderwater -tex 0 8 -count 3 -size 60 100 -sizeincrease -10 -gravity -0.5 -alpha 200 750 200 -velocityjitter 40 40 400 -velocityoffset 0 0 200 -airfriction 4 -color 0x4F4B46 0x000000 -rotate -180 180 -20 20 - -// metal impact effect -// used in qcsrc/server/mutators/sandbox.qc: pointparticles(particleeffectnum("impact_metal"), self.origin, '0 0 0', 1); + airfriction 4 + alpha 200 750 200 + color 0x4F4B46 0x000000 + count 3 + gravity -0.500000 + notunderwater + rotate -180 180 -20 20 + sizeincrease -10 + size 60 100 + tex 0 8 + type alphastatic + velocityjitter 40 40 400 + velocityoffset 0 0 200 effect impact_metal -count 1 -type alphastatic -tex 0 8 -size 3 6 -sizeincrease 10 -alpha 25 64 50 -gravity -0.01 -color 0x000000 0x886666 -originjitter 20 20 5 -// sparks + alpha 25 64 50 + color 0x000000 0x886666 + count 1 + gravity -0.010000 + originjitter 20 20 5 + sizeincrease 10 + size 3 6 + tex 0 8 + type alphastatic effect impact_metal -count 2 -type spark -tex 41 41 -color 0xFFCC22 0xFF4422 -size 2 2 -alpha 255 255 112 -bounce 1.8 -stretchfactor 0.5 -velocityjitter 200 200 300 -velocitymultiplier 2 -airfriction 2 -gravity 1 - -// stone impact effect -// used in qcsrc/server/mutators/sandbox.qc: pointparticles(particleeffectnum("impact_stone"), self.origin, '0 0 0', 1); + airfriction 2 + alpha 255 255 112 + bounce 1.800000 + color 0xFFCC22 0xFF4422 + count 2 + gravity 1 + size 2 2 + stretchfactor 0.500000 + tex 41 41 + type spark + velocityjitter 200 200 300 + velocitymultiplier 2 effect impact_stone -count 1 -type alphastatic -tex 0 8 -size 3 6 -sizeincrease 15 -alpha 50 128 75 -gravity -0.01 -color 0x000000 0xcc9966 -originjitter 20 20 5 -// debris + alpha 50 128 75 + color 0x000000 0xcc9966 + count 1 + gravity -0.010000 + originjitter 20 20 5 + sizeincrease 15 + size 3 6 + tex 0 8 + type alphastatic effect impact_stone -notunderwater -count 1 -type alphastatic -tex 66 68 -color 0x000000 0x886644 -size 1 2 -alpha 450 750 300 -gravity 1.3 -airfriction 0.5 -bounce 1.2 -velocityjitter 124 124 324 -rotate -180 180 -1000 1000 - -// wood impact effect -// used in qcsrc/server/mutators/sandbox.qc: pointparticles(particleeffectnum("impact_wood"), self.origin, '0 0 0', 1); + airfriction 0.500000 + alpha 450 750 300 + bounce 1.200000 + color 0x000000 0x886644 + count 1 + gravity 1.300000 + notunderwater + rotate -180 180 -1000 1000 + size 1 2 + tex 66 68 + type alphastatic + velocityjitter 124 124 324 effect impact_wood -count 1 -type alphastatic -tex 0 8 -size 3 6 -sizeincrease 10 -alpha 50 128 75 -gravity -0.01 -color 0x000000 0xcc9966 -originjitter 20 20 5 -// sparks + alpha 50 128 75 + color 0x000000 0xcc9966 + count 1 + gravity -0.010000 + originjitter 20 20 5 + sizeincrease 10 + size 3 6 + tex 0 8 + type alphastatic effect impact_wood -count 2 -type spark -tex 41 41 -color 0x221100 0x221100 -size 1 8 -alpha 255 255 75 -bounce 1.5 -velocityjitter 180 180 260 -velocitymultiplier 2 -airfriction 2 -gravity 1 - -// flesh impact effect -// used in qcsrc/server/mutators/sandbox.qc: pointparticles(particleeffectnum("impact_flesh"), self.origin, '0 0 0', 1); + airfriction 2 + alpha 255 255 75 + bounce 1.500000 + color 0x221100 0x221100 + count 2 + gravity 1 + size 1 8 + tex 41 41 + type spark + velocityjitter 180 180 260 + velocitymultiplier 2 effect impact_flesh -count 0.5 -type alphastatic -tex 0 8 -size 8 12 -alpha 100 256 400 -color 0x000000 0x420000 -originjitter 11 11 11 -// blood splash + alpha 100 256 400 + color 0x000000 0x420000 + count 0.500000 + originjitter 11 11 11 + size 8 12 + tex 0 8 + type alphastatic effect impact_flesh -count 0.3 -type blood -tex 24 32 -size 2 6 -alpha 256 256 64 -color 0xA8FFFF 0xA8FFFFF -bounce -1 -airfriction 1 -liquidfriction 4 -velocityjitter 96 96 96 -velocitymultiplier 5 -staincolor 0x808080 0x808080 -staintex 16 24 - -// hagar trail -// smoke + airfriction 1 + alpha 256 256 64 + bounce -1 + color 0xA8FFFF 0xA8FFFFF + count 0.300000 + liquidfriction 4 + size 2 6 + staincolor 0x808080 0x808080 + staintex 16 24 + tex 24 32 + type blood + velocityjitter 96 96 96 + velocitymultiplier 5 effect tr_hagar -trailspacing 4 -type smoke -color 0x101010 0x000000 -tex 0 8 -size 3 2 -bounce 1 -sizeincrease 10 -alpha 300 400 780 -originjitter 1 1 1 -velocityjitter 1 1 1 -velocitymultiplier -0.02 -//gravity -0.11 -// fire + alpha 300 400 780 + bounce 1 + color 0x101010 0x000000 + originjitter 1 1 1 + sizeincrease 10 + size 3 2 + tex 0 8 + trailspacing 4 + type smoke + velocityjitter 1 1 1 + velocitymultiplier -0.020000 effect tr_hagar -notunderwater -trailspacing 4 -type static -color 0xffdf72 0x811200 -tex 48 55 -size 5 2 -sizeincrease -15 -alpha 100 144 988 -airfriction 8 -velocityjitter 32 32 32 -velocitymultiplier -1.0 -// bubbles + airfriction 8 + alpha 100 144 988 + color 0xffdf72 0x811200 + notunderwater + sizeincrease -15 + size 5 2 + tex 48 55 + trailspacing 4 + type static + velocityjitter 32 32 32 + velocitymultiplier -1 effect tr_hagar -underwater -trailspacing 16 -type bubble -tex 62 62 -color 0x404040 0x808080 -size 1 1 -alpha 256 256 256 -gravity -0.125 -bounce 1.5 -liquidfriction 4 -velocityjitter 16 16 16 - -// laser damage effect -// used in qcsrc/client/damage.qc: pointparticles(self.team, org, '0 0 0', 1); + alpha 256 256 256 + bounce 1.500000 + color 0x404040 0x808080 + gravity -0.125000 + liquidfriction 4 + size 1 1 + tex 62 62 + trailspacing 16 + type bubble + underwater + velocityjitter 16 16 16 effect damage_laser -notunderwater -count 3 -type smoke -tex 0 8 -color 0x880000 0xff4400 -size 2 4 -sizeincrease 8 -alpha 128 16 128 -gravity 0 -originjitter 2 2 2 -velocityjitter 0.4 0.4 0.6 -velocitymultiplier 0 -airfriction -0.35 -rotate 0 180 -30 30 - -// shotgun damage effect, normal blood -// used in qcsrc/client/damage.qc: pointparticles(self.team, org, '0 0 0', 1); + airfriction -0.350000 + alpha 128 16 128 + color 0x880000 0xff4400 + count 3 + notunderwater + originjitter 2 2 2 + rotate 0 180 -30 30 + sizeincrease 8 + size 2 4 + tex 0 8 + type smoke + velocityjitter 0.4 0.4 0.6 effect damage_shotgun -count 0.6 -type blood -tex 24 32 -size 2 4 -alpha 256 256 64 -color 0xA8FFFF 0xA8FFFFF -bounce -1 -airfriction 1 -liquidfriction 4 -velocityjitter 64 64 64 -velocitymultiplier 5 -staincolor 0x808080 0x808080 -staintex 16 24 -//blood mist + airfriction 1 + alpha 256 256 64 + bounce -1 + color 0xA8FFFF 0xA8FFFFF + count 0.600000 + liquidfriction 4 + size 2 4 + staincolor 0x808080 0x808080 + staintex 16 24 + tex 24 32 + type blood + velocityjitter 64 64 64 + velocitymultiplier 5 effect damage_shotgun -count 1 -type alphastatic -tex 0 8 -size 8 16 -alpha 100 256 400 -color 0x000000 0x420000 -originjitter 1 1 1 - -// shotgun damage effect, alien blood -// used in qcsrc/client/damage.qc: pointparticles(self.team, org, '0 0 0', 1); + alpha 100 256 400 + color 0x000000 0x420000 + count 1 + originjitter 1 1 1 + size 8 16 + tex 0 8 + type alphastatic effect damage_shotgun_alien -count 0.6 -type blood -tex 24 32 -size 2 4 -alpha 256 256 64 -color 0xDC9BCD 0xDC9BCD -bounce -1 -airfriction 1 -liquidfriction 4 -velocityjitter 64 64 64 -velocitymultiplier 5 -staincolor 0x808080 0x808080 -staintex 16 24 -//blood mist + airfriction 1 + alpha 256 256 64 + bounce -1 + color 0xDC9BCD 0xDC9BCD + count 0.600000 + liquidfriction 4 + size 2 4 + staincolor 0x808080 0x808080 + staintex 16 24 + tex 24 32 + type blood + velocityjitter 64 64 64 + velocitymultiplier 5 effect damage_shotgun_alien -count 1 -type alphastatic -tex 0 8 -size 8 16 -alpha 100 256 400 -color 0x000000 0x204010 -originjitter 1 1 1 - -// shotgun damage effect, robot blood -// used in qcsrc/client/damage.qc: pointparticles(self.team, org, '0 0 0', 1); + alpha 100 256 400 + color 0x000000 0x204010 + count 1 + originjitter 1 1 1 + size 8 16 + tex 0 8 + type alphastatic effect damage_shotgun_robot -count 0.6 -type blood -tex 24 32 -size 2 4 -alpha 256 256 64 -color 0xC0D890 0xC0D890 -bounce -1 -airfriction 1 -liquidfriction 4 -velocityjitter 64 64 64 -velocitymultiplier 5 -staincolor 0x808080 0x808080 -staintex 16 24 -//blood mist + airfriction 1 + alpha 256 256 64 + bounce -1 + color 0xC0D890 0xC0D890 + count 0.600000 + liquidfriction 4 + size 2 4 + staincolor 0x808080 0x808080 + staintex 16 24 + tex 24 32 + type blood + velocityjitter 64 64 64 + velocitymultiplier 5 effect damage_shotgun_robot -count 1 -type alphastatic -tex 0 8 -size 8 16 -alpha 100 256 400 -color 0x000000 0x301860 -originjitter 1 1 1 - -// uzi damage effect, normal blood -// used in qcsrc/client/damage.qc: pointparticles(self.team, org, '0 0 0', 1); + alpha 100 256 400 + color 0x000000 0x301860 + count 1 + originjitter 1 1 1 + size 8 16 + tex 0 8 + type alphastatic effect damage_uzi -count 0.3 -type blood -tex 24 32 -size 2 4 -alpha 256 256 64 -color 0xA8FFFF 0xA8FFFFF -bounce -1 -airfriction 1 -liquidfriction 4 -velocityjitter 32 32 32 -velocitymultiplier 5 -staincolor 0x808080 0x808080 -staintex 16 24 -//blood mist + airfriction 1 + alpha 256 256 64 + bounce -1 + color 0xA8FFFF 0xA8FFFFF + count 0.300000 + liquidfriction 4 + size 2 4 + staincolor 0x808080 0x808080 + staintex 16 24 + tex 24 32 + type blood + velocityjitter 32 32 32 + velocitymultiplier 5 effect damage_uzi -count 1 -type alphastatic -tex 0 8 -size 6 12 -alpha 100 256 400 -color 0x000000 0x420000 -originjitter 0 0 0 - -// uzi damage effect, alien blood -// used in qcsrc/client/damage.qc: pointparticles(self.team, org, '0 0 0', 1); + alpha 100 256 400 + color 0x000000 0x420000 + count 1 + size 6 12 + tex 0 8 + type alphastatic effect damage_uzi_alien -count 0.3 -type blood -tex 24 32 -size 2 4 -alpha 256 256 64 -color 0xDC9BCD 0xDC9BCD -bounce -1 -airfriction 1 -liquidfriction 4 -velocityjitter 32 32 32 -velocitymultiplier 5 -staincolor 0x808080 0x808080 -staintex 16 24 -//blood mist + airfriction 1 + alpha 256 256 64 + bounce -1 + color 0xDC9BCD 0xDC9BCD + count 0.300000 + liquidfriction 4 + size 2 4 + staincolor 0x808080 0x808080 + staintex 16 24 + tex 24 32 + type blood + velocityjitter 32 32 32 + velocitymultiplier 5 effect damage_uzi_alien -count 1 -type alphastatic -tex 0 8 -size 6 12 -alpha 100 256 400 -color 0x000000 0x204010 -originjitter 0 0 0 - -// uzi damage effect, robot blood -// used in qcsrc/client/damage.qc: pointparticles(self.team, org, '0 0 0', 1); + alpha 100 256 400 + color 0x000000 0x204010 + count 1 + size 6 12 + tex 0 8 + type alphastatic effect damage_uzi_robot -count 0.3 -type blood -tex 24 32 -size 2 4 -alpha 256 256 64 -color 0xC0D890 0xC0D890 -bounce -1 -airfriction 1 -liquidfriction 4 -velocityjitter 32 32 32 -velocitymultiplier 5 -staincolor 0x808080 0x808080 -staintex 16 24 -//blood mist + airfriction 1 + alpha 256 256 64 + bounce -1 + color 0xC0D890 0xC0D890 + count 0.300000 + liquidfriction 4 + size 2 4 + staincolor 0x808080 0x808080 + staintex 16 24 + tex 24 32 + type blood + velocityjitter 32 32 32 + velocitymultiplier 5 effect damage_uzi_robot -count 1 -type alphastatic -tex 0 8 -size 6 12 -alpha 100 256 400 -color 0x000000 0x301860 -originjitter 0 0 0 - -// minelayer damage effect -// used in qcsrc/client/damage.qc: pointparticles(self.team, org, '0 0 0', 1); + alpha 100 256 400 + color 0x000000 0x301860 + count 1 + size 6 12 + tex 0 8 + type alphastatic effect damage_minelayer -notunderwater -count 3 -type smoke -tex 48 55 -size 4 8 -alpha 512 64 1024 -gravity -0.5 -color 0x8f0d00 0xff5a00 -sizeincrease -15 -originjitter 2 2 2 -velocityjitter 22 22 50 -// smoke + alpha 512 64 1024 + color 0x8f0d00 0xff5a00 + count 3 + gravity -0.500000 + notunderwater + originjitter 2 2 2 + sizeincrease -15 + size 4 8 + tex 48 55 + type smoke + velocityjitter 22 22 50 effect damage_minelayer -notunderwater -type alphastatic -count 2 -tex 0 8 -size 4 8 -sizeincrease 5 -alpha 128 32 128 -color 0x000000 0x111111 -gravity -0.3 -originjitter 4 4 4 -velocityjitter 11 11 50 -// light -/*effect damage_minelayer -notunderwater -trailspacing 8 -lightradius 60 -lightradiusfade 280 -lightcolor 0.7 0.4 0.2*/ - -// grenadelauncher damage effect -// used in qcsrc/client/damage.qc: pointparticles(self.team, org, '0 0 0', 1); + alpha 128 32 128 + color 0x000000 0x111111 + count 2 + gravity -0.300000 + notunderwater + originjitter 4 4 4 + sizeincrease 5 + size 4 8 + tex 0 8 + type alphastatic + velocityjitter 11 11 50 effect damage_grenadelauncher -notunderwater -count 3 -type smoke -tex 48 55 -size 4 8 -alpha 512 64 1024 -gravity -0.5 -color 0x8f0d00 0xff5a00 -sizeincrease -15 -originjitter 2 2 2 -velocityjitter 22 22 50 -// smoke + alpha 512 64 1024 + color 0x8f0d00 0xff5a00 + count 3 + gravity -0.500000 + notunderwater + originjitter 2 2 2 + sizeincrease -15 + size 4 8 + tex 48 55 + type smoke + velocityjitter 22 22 50 effect damage_grenadelauncher -notunderwater -type alphastatic -count 2 -tex 0 8 -size 4 8 -sizeincrease 5 -alpha 128 32 128 -color 0x000000 0x111111 -gravity -0.3 -originjitter 4 4 4 -velocityjitter 11 11 50 -// light -/*effect damage_grenadelauncher -notunderwater -trailspacing 8 -lightradius 60 -lightradiusfade 280 -lightcolor 0.7 0.4 0.2*/ - -// electro damage effect -// used in qcsrc/client/damage.qc: pointparticles(self.team, org, '0 0 0', 1); + alpha 128 32 128 + color 0x000000 0x111111 + count 2 + gravity -0.300000 + notunderwater + originjitter 4 4 4 + sizeincrease 5 + size 4 8 + tex 0 8 + type alphastatic + velocityjitter 11 11 50 effect damage_electro -notunderwater -count 2 -type static -tex 47 47 -color 0x66ffff 0x2288ff -size 6 10 -sizeincrease -14 -alpha 48 8 48 -gravity -0.0001 -airfriction 0.2 -liquidfriction 0.8 -originjitter 3 3 3 -velocityjitter 8 8 16 -velocitymultiplier 0 -airfriction -0.5 -rotate 180 360 -30 30 -// plasma smoke + airfriction -0.500000 + alpha 48 8 48 + color 0x66ffff 0x2288ff + count 2 + gravity -0.000100 + liquidfriction 0.800000 + notunderwater + originjitter 3 3 3 + rotate 180 360 -30 30 + sizeincrease -14 + size 6 10 + tex 47 47 + type static + velocityjitter 8 8 16 effect damage_electro -notunderwater -count 4 -type smoke -tex 0 8 -color 0x2244ff 0x002266 -size 4 8 -sizeincrease 10 -alpha 64 16 64 -gravity 0 -originjitter 4 4 4 -velocityjitter 0.4 0.4 0.6 -velocitymultiplier 0 -airfriction -0.35 -rotate 0 180 -30 30 -// bouncing sparks + airfriction -0.350000 + alpha 64 16 64 + color 0x2244ff 0x002266 + count 4 + notunderwater + originjitter 4 4 4 + rotate 0 180 -30 30 + sizeincrease 10 + size 4 8 + tex 0 8 + type smoke + velocityjitter 0.4 0.4 0.6 effect damage_electro -count 0.5 -type spark -tex 66 68 -color 0x003090 0x00CCFF -size 1 1 -alpha 768 64 256 -gravity 0.2 -airfriction 1 -bounce 1.5 -liquidfriction 0.8 -velocityoffset 0 0 0 -velocityjitter 32 32 32 -// light -/*effect damage_electro -notunderwater -trailspacing 8 -lightradius 50 -lightradiusfade 220 -lightcolor 0.2 0.6 0.8*/ - -// crylink damage effect -// used in qcsrc/client/damage.qc: pointparticles(self.team, org, '0 0 0', 1); + airfriction 1 + alpha 768 64 256 + bounce 1.500000 + color 0x003090 0x00CCFF + count 0.500000 + gravity 0.200000 + liquidfriction 0.800000 + size 1 1 + tex 66 68 + type spark + velocityjitter 32 32 32 effect damage_crylink -notunderwater -count 2 -type static -tex 38 38 -color 0xff44ff 0x9966ff -size 0.5 1 -sizeincrease -8 -alpha 48 16 48 -gravity -0.0001 -airfriction 0.6 -liquidfriction 0.8 -originjitter 3 3 3 -velocityjitter 10 10 20 -velocitymultiplier 0 -airfriction -0.5 -rotate 180 360 -30 30 -// plasma smoke + airfriction -0.500000 + alpha 48 16 48 + color 0xff44ff 0x9966ff + count 2 + gravity -0.000100 + liquidfriction 0.800000 + notunderwater + originjitter 3 3 3 + rotate 180 360 -30 30 + sizeincrease -8 + size 0.500000 1 + tex 38 38 + type static + velocityjitter 10 10 20 effect damage_crylink -notunderwater -count 4 -type smoke -tex 0 8 -color 0x8844ff 0x662244 -size 5 10 -sizeincrease 6 -alpha 64 16 64 -gravity 0.001 -originjitter 4 4 4 -velocityjitter 0.4 0.4 0.6 -velocitymultiplier 0 -airfriction -0.35 -rotate 0 180 -30 30 -// floating sparks + airfriction -0.350000 + alpha 64 16 64 + color 0x8844ff 0x662244 + count 4 + gravity 0.001000 + notunderwater + originjitter 4 4 4 + rotate 0 180 -30 30 + sizeincrease 6 + size 5 10 + tex 0 8 + type smoke + velocityjitter 0.4 0.4 0.6 effect damage_crylink -count 0.3 -type spark -color 0x903090 0xFFD0FF -size 0.5 0.5 -sizeincrease -5 -alpha 192 192 128 -gravity 0 -airfriction 0.2 -liquidfriction 0.8 -velocityoffset 0 0 0 -velocityjitter 12 12 12 -// light -/*effect damage_crylink -notunderwater -trailspacing 8 -lightradius 50 -lightradiusfade 240 -lightcolor 0.6 0.2 0.8*/ - -// hlac damage effect -// used in qcsrc/client/damage.qc: pointparticles(self.team, org, '0 0 0', 1); + airfriction 0.200000 + alpha 192 192 128 + color 0x903090 0xFFD0FF + count 0.300000 + liquidfriction 0.800000 + sizeincrease -5 + size 0.500000 0.500000 + type spark + velocityjitter 12 12 12 effect damage_hlac -notunderwater -count 3 -type smoke -tex 0 8 -color 0x880000 0xff4400 -size 2 4 -sizeincrease 10 -alpha 128 16 128 -gravity 0 -originjitter 4 4 4 -velocityjitter 0.4 0.4 0.6 -velocitymultiplier 0 -airfriction -0.35 -rotate 0 180 -30 30 - -// nex damage effect -// used in qcsrc/client/damage.qc: pointparticles(self.team, org, '0 0 0', 1); + airfriction -0.350000 + alpha 128 16 128 + color 0x880000 0xff4400 + count 3 + notunderwater + originjitter 4 4 4 + rotate 0 180 -30 30 + sizeincrease 10 + size 2 4 + tex 0 8 + type smoke + velocityjitter 0.4 0.4 0.6 effect damage_nex -count 1 -type static -tex 47 47 -color 0xffffff 0x88ffff -size 5 10 -sizeincrease -14 -alpha 64 8 64 -gravity -0.0001 -airfriction 0.1 -liquidfriction 0.6 -originjitter 4 4 4 -velocityjitter 8 8 16 -velocitymultiplier 0 -airfriction -0.5 -rotate 180 360 -30 30 -// plasma smoke + airfriction -0.500000 + alpha 64 8 64 + color 0xffffff 0x88ffff + count 1 + gravity -0.000100 + liquidfriction 0.600000 + originjitter 4 4 4 + rotate 180 360 -30 30 + sizeincrease -14 + size 5 10 + tex 47 47 + type static + velocityjitter 8 8 16 effect damage_nex -count 2 -type smoke -tex 0 8 -color 0x6688ff 0x226688 -size 4 8 -sizeincrease 8 -alpha 64 16 64 -gravity 0 -originjitter 2 2 2 -velocityjitter 0.5 0.5 0.8 -velocitymultiplier 0 -airfriction -0.35 -rotate 0 180 -30 30 -// bouncing sparks + airfriction -0.350000 + alpha 64 16 64 + color 0x6688ff 0x226688 + count 2 + originjitter 2 2 2 + rotate 0 180 -30 30 + sizeincrease 8 + size 4 8 + tex 0 8 + type smoke + velocityjitter 0.5 0.5 0.8 effect damage_nex -count 0.2 -type spark -tex 41 41 -color 0xD9FDFF 0xD9FDFF -size 1 1 -alpha 255 255 112 -bounce 1.6 -stretchfactor 0.7 -velocityjitter 100 100 300 -velocitymultiplier 3 -airfriction 2 -gravity 1 -// light -/*effect damage_nex -trailspacing 8 -lightradius 60 -lightradiusfade 280 -lightcolor 0.6 0.8 0.8*/ - -// minstanex damage effect -// used in qcsrc/client/damage.qc: pointparticles(self.team, org, '0 0 0', 1); + airfriction 2 + alpha 255 255 112 + bounce 1.600000 + color 0xD9FDFF 0xD9FDFF + count 0.200000 + gravity 1 + size 1 1 + stretchfactor 0.700000 + tex 41 41 + type spark + velocityjitter 100 100 300 + velocitymultiplier 3 effect damage_minstanex -count 2 -type static -tex 47 47 -color 0xffffff 0x88ffff -size 5 10 -sizeincrease -14 -alpha 64 8 64 -gravity -0.0001 -airfriction 0.1 -liquidfriction 0.6 -originjitter 4 4 4 -velocityjitter 8 8 16 -velocitymultiplier 0 -airfriction -0.5 -rotate 180 360 -30 30 -// plasma smoke + airfriction -0.500000 + alpha 64 8 64 + color 0xffffff 0x88ffff + count 2 + gravity -0.000100 + liquidfriction 0.600000 + originjitter 4 4 4 + rotate 180 360 -30 30 + sizeincrease -14 + size 5 10 + tex 47 47 + type static + velocityjitter 8 8 16 effect damage_minstanex -count 4 -type smoke -tex 0 8 -color 0x6688ff 0x226688 -size 4 8 -sizeincrease 8 -alpha 64 16 64 -gravity 0 -originjitter 2 2 2 -velocityjitter 0.5 0.5 0.8 -velocitymultiplier 0 -airfriction -0.35 -rotate 0 180 -30 30 -// bouncing sparks + airfriction -0.350000 + alpha 64 16 64 + color 0x6688ff 0x226688 + count 4 + originjitter 2 2 2 + rotate 0 180 -30 30 + sizeincrease 8 + size 4 8 + tex 0 8 + type smoke + velocityjitter 0.5 0.5 0.8 effect damage_minstanex -count 0.2 -type spark -tex 41 41 -color 0xD9FDFF 0xD9FDFF -size 1 1 -alpha 255 255 112 -bounce 1.6 -stretchfactor 0.7 -velocityjitter 100 100 300 -velocitymultiplier 3 -airfriction 2 -gravity 1 -// light -/*effect damage_minstanex -trailspacing 8 -lightradius 60 -lightradiusfade 240 -lightcolor 0.6 0.8 0.8*/ - -// sniperrifle damage effect, normal blood -// used in qcsrc/client/damage.qc: pointparticles(self.team, org, '0 0 0', 1); + airfriction 2 + alpha 255 255 112 + bounce 1.600000 + color 0xD9FDFF 0xD9FDFF + count 0.200000 + gravity 1 + size 1 1 + stretchfactor 0.700000 + tex 41 41 + type spark + velocityjitter 100 100 300 + velocitymultiplier 3 effect damage_rifle -count 0.3 -type blood -tex 24 32 -size 2 4 -alpha 256 256 64 -color 0xA8FFFF 0xA8FFFFF -bounce -1 -airfriction 1 -liquidfriction 4 -velocityjitter 32 32 32 -velocitymultiplier 5 -staincolor 0x808080 0x808080 -staintex 16 24 -//blood mist + airfriction 1 + alpha 256 256 64 + bounce -1 + color 0xA8FFFF 0xA8FFFFF + count 0.300000 + liquidfriction 4 + size 2 4 + staincolor 0x808080 0x808080 + staintex 16 24 + tex 24 32 + type blood + velocityjitter 32 32 32 + velocitymultiplier 5 effect damage_rifle -count 1 -type alphastatic -tex 0 8 -size 6 12 -alpha 100 256 400 -color 0x000000 0x420000 -originjitter 0 0 0 - -// sniperrifle damage effect, alien blood -// used in qcsrc/client/damage.qc: pointparticles(self.team, org, '0 0 0', 1); + alpha 100 256 400 + color 0x000000 0x420000 + count 1 + size 6 12 + tex 0 8 + type alphastatic effect damage_rifle_alien -count 0.3 -type blood -tex 24 32 -size 2 4 -alpha 256 256 64 -color 0xDC9BCD 0xDC9BCD -bounce -1 -airfriction 1 -liquidfriction 4 -velocityjitter 32 32 32 -velocitymultiplier 5 -staincolor 0x808080 0x808080 -staintex 16 24 -//blood mist + airfriction 1 + alpha 256 256 64 + bounce -1 + color 0xDC9BCD 0xDC9BCD + count 0.300000 + liquidfriction 4 + size 2 4 + staincolor 0x808080 0x808080 + staintex 16 24 + tex 24 32 + type blood + velocityjitter 32 32 32 + velocitymultiplier 5 effect damage_rifle_alien -count 1 -type alphastatic -tex 0 8 -size 6 12 -alpha 100 256 400 -color 0x000000 0x204010 -originjitter 0 0 0 - -// sniperrifle damage effect, robot blood -// used in qcsrc/client/damage.qc: pointparticles(self.team, org, '0 0 0', 1); + alpha 100 256 400 + color 0x000000 0x204010 + count 1 + size 6 12 + tex 0 8 + type alphastatic effect damage_rifle_robot -count 0.3 -type blood -tex 24 32 -size 2 4 -alpha 256 256 64 -color 0xC0D890 0xC0D890 -bounce -1 -airfriction 1 -liquidfriction 4 -velocityjitter 32 32 32 -velocitymultiplier 5 -staincolor 0x808080 0x808080 -staintex 16 24 -//blood mist + airfriction 1 + alpha 256 256 64 + bounce -1 + color 0xC0D890 0xC0D890 + count 0.300000 + liquidfriction 4 + size 2 4 + staincolor 0x808080 0x808080 + staintex 16 24 + tex 24 32 + type blood + velocityjitter 32 32 32 + velocitymultiplier 5 effect damage_rifle_robot -count 1 -type alphastatic -tex 0 8 -size 6 12 -alpha 100 256 400 -color 0x000000 0x301860 -originjitter 0 0 0 - -// seeker damage effect -// used in qcsrc/client/damage.qc: pointparticles(self.team, org, '0 0 0', 1); + alpha 100 256 400 + color 0x000000 0x301860 + count 1 + size 6 12 + tex 0 8 + type alphastatic effect damage_seeker -notunderwater -count 3 -type smoke -tex 48 55 -size 4 8 -alpha 512 32 1024 -gravity -0.3 -color 0x8f0c00 0xff2200 -sizeincrease -10 -originjitter 2 2 2 -velocityjitter 22 22 50 -// smoke + alpha 512 32 1024 + color 0x8f0c00 0xff2200 + count 3 + gravity -0.300000 + notunderwater + originjitter 2 2 2 + sizeincrease -10 + size 4 8 + tex 48 55 + type smoke + velocityjitter 22 22 50 effect damage_seeker -notunderwater -type alphastatic -count 2 -tex 0 8 -size 2 4 -sizeincrease 10 -alpha 128 32 128 -color 0x000000 0x111111 -gravity -0.3 -originjitter 4 4 4 -velocityjitter 11 11 50 -// light -/*effect damage_seeker -notunderwater -trailspacing 8 -lightradius 65 -lightradiusfade 280 -lightcolor 0.7 0.5 0.1*/ - -// hagar damage effect -// used in qcsrc/client/damage.qc: pointparticles(self.team, org, '0 0 0', 1); + alpha 128 32 128 + color 0x000000 0x111111 + count 2 + gravity -0.300000 + notunderwater + originjitter 4 4 4 + sizeincrease 10 + size 2 4 + tex 0 8 + type alphastatic + velocityjitter 11 11 50 effect damage_hagar -notunderwater -count 3 -type smoke -tex 48 55 -size 4 8 -alpha 512 32 1024 -gravity -0.3 -color 0x8f0c00 0xff3a00 -sizeincrease -10 -originjitter 2 2 2 -velocityjitter 22 22 50 -// smoke + alpha 512 32 1024 + color 0x8f0c00 0xff3a00 + count 3 + gravity -0.300000 + notunderwater + originjitter 2 2 2 + sizeincrease -10 + size 4 8 + tex 48 55 + type smoke + velocityjitter 22 22 50 effect damage_hagar -notunderwater -type alphastatic -count 2 -tex 0 8 -size 2 4 -sizeincrease 10 -alpha 128 32 128 -color 0x000000 0x111111 -gravity -0.3 -originjitter 4 4 4 -velocityjitter 11 11 50 -// light -/*effect damage_hagar -notunderwater -trailspacing 8 -lightradius 65 -lightradiusfade 280 -lightcolor 0.7 0.5 0.1*/ - -// fireball damage effect -// used in qcsrc/client/damage.qc: pointparticles(self.team, org, '0 0 0', 1); + alpha 128 32 128 + color 0x000000 0x111111 + count 2 + gravity -0.300000 + notunderwater + originjitter 4 4 4 + sizeincrease 10 + size 2 4 + tex 0 8 + type alphastatic + velocityjitter 11 11 50 effect damage_fireball -notunderwater -count 4 -type smoke -tex 48 55 -size 5 10 -alpha 256 16 512 -gravity -0.5 -color 0x8f0d00 0xff5a00 -sizeincrease -10 -originjitter 8 8 8 -velocityjitter 22 22 50 -// smoke + alpha 256 16 512 + color 0x8f0d00 0xff5a00 + count 4 + gravity -0.500000 + notunderwater + originjitter 8 8 8 + sizeincrease -10 + size 5 10 + tex 48 55 + type smoke + velocityjitter 22 22 50 effect damage_fireball -notunderwater -type alphastatic -count 4 -tex 0 8 -size 4 8 -sizeincrease 10 -alpha 128 32 128 -color 0x000000 0x111111 -gravity -0.3 -originjitter 6 6 6 -velocityjitter 11 11 50 -// light -/*effect damage_fireball -notunderwater -trailspacing 8 -lightradius 65 -lightradiusfade 280 -lightcolor 1.0 0.8 0.4*/ - -// rocketlauncher damage effect -// used in qcsrc/client/damage.qc: pointparticles(self.team, org, '0 0 0', 1); + alpha 128 32 128 + color 0x000000 0x111111 + count 4 + gravity -0.300000 + notunderwater + originjitter 6 6 6 + sizeincrease 10 + size 4 8 + tex 0 8 + type alphastatic + velocityjitter 11 11 50 effect damage_rocketlauncher -notunderwater -count 3 -type smoke -tex 48 55 -size 5 10 -alpha 512 64 1024 -gravity -0.7 -color 0x8f0c00 0xff2a00 -sizeincrease -10 -originjitter 4 4 4 -velocityjitter 22 22 30 -// smoke + alpha 512 64 1024 + color 0x8f0c00 0xff2a00 + count 3 + gravity -0.700000 + notunderwater + originjitter 4 4 4 + sizeincrease -10 + size 5 10 + tex 48 55 + type smoke + velocityjitter 22 22 30 effect damage_rocketlauncher -notunderwater -type alphastatic -count 3 -tex 0 8 -size 4 8 -sizeincrease 10 -alpha 128 32 128 -color 0x000000 0x111111 -gravity -0.3 -originjitter 4 4 4 -velocityjitter 11 11 50 -// light -/*effect damage_rocketlauncher -notunderwater -trailspacing 8 -lightradius 60 -lightradiusfade 280 -lightcolor 0.8 0.6 0.2*/ - -// fireflies -// used nowhere in code + alpha 128 32 128 + color 0x000000 0x111111 + count 3 + gravity -0.300000 + notunderwater + originjitter 4 4 4 + sizeincrease 10 + size 4 8 + tex 0 8 + type alphastatic + velocityjitter 11 11 50 effect fireflies -count 1 -bounce -1 -airfriction 5 -time 1 2 -type static -tex 38 38 -color 0xff9600 0xffefb8 -size 2 3 -sizeincrease -0.3 -alpha 256 256 70 -gravity 0 -originoffset 8 8 8 -originjitter 32 32 32 -velocityoffset 2 2 2 -velocityjitter 64 64 64 -//lightradius 50 -//lightradiusfade 50 -//lightcolor 1 0.9 0.7 -//lightshadow 1 - -// heal ray muzzleflash + airfriction 5 + alpha 256 256 70 + bounce -1 + color 0xff9600 0xffefb8 + count 1 + originjitter 32 32 32 + originoffset 8 8 8 + sizeincrease -0.300000 + size 2 3 + tex 38 38 + time 1 2 + type static + velocityjitter 64 64 64 + velocityoffset 2 2 2 effect healray_muzzleflash -countabsolute 1 -type smoke -color 0x283880 0x283880 // 0x202020 0x404040 -tex 65 65 -size 20 20 -alpha 256 256 512 -originjitter 1.5 1.5 1.5 -velocityjitter 6 6 6 -sizeincrease -10 -velocitymultiplier 0.01 -lightradius 200 -lightradiusfade 2000 -lightcolor 1.5 3 6 - + alpha 256 256 512 + color 0x283880 0x283880 + countabsolute 1 + lightcolor 1.5 3 6 + lightradiusfade 2000 + lightradius 200 + originjitter 1.5 1.5 1.5 + sizeincrease -10 + size 20 20 + tex 65 65 + type smoke + velocityjitter 6 6 6 + velocitymultiplier 0.010000 effect healray_muzzleflash -count 22 -type spark -tex 71 73 -color 0xD9FDFF 0x00f0ff -size 1 15 -sizeincrease 3 -alpha 50 150 1924 -originjitter 1 1 1 -velocityjitter 150 150 150 -velocitymultiplier 0.4 -airfriction 5 -stretchfactor 3.9 - + airfriction 5 + alpha 50 150 1924 + color 0xD9FDFF 0x00f0ff + count 22 + originjitter 1 1 1 + sizeincrease 3 + size 1 15 + stretchfactor 3.900000 + tex 71 73 + type spark + velocityjitter 150 150 150 + velocitymultiplier 0.400000 effect healray_muzzleflash -count 4 -type spark -tex 70 70 -color 0xD9FDFF 0x00f0ff -size 1 1 -alpha 110 228 4024 -originjitter 1 1 1 -velocityjitter 650 650 650 -velocitymultiplier 1.1 -stretchfactor 0.2 - - - -//healray impact - + alpha 110 228 4024 + color 0xD9FDFF 0x00f0ff + count 4 + originjitter 1 1 1 + size 1 1 + stretchfactor 0.200000 + tex 70 70 + type spark + velocityjitter 650 650 650 + velocitymultiplier 1.100000 effect healray_impact -countabsolute 1 -type decal -tex 59 59 -size 32 32 -alpha 256 256 0 -color 0xd800ff 0xd800ff -originjitter 17 17 17 -lightradius 125 -lightradiusfade 450 -lightcolor 0 4.375 0 -// shockwave + alpha 256 256 0 + color 0xd800ff 0xd800ff + countabsolute 1 + lightcolor 0 4.4 0 + lightradiusfade 450 + lightradius 125 + originjitter 17 17 17 + size 32 32 + tex 59 59 + type decal effect healray_impact -type smoke -countabsolute 1 -tex 33 33 -size 32 32 -sizeincrease 1400 -color 0x00ff00 0x84c52f -alpha 40 40 350 -velocitymultiplier 44 -// cloud of bouncing sparks + alpha 40 40 350 + color 0x00ff00 0x84c52f + countabsolute 1 + sizeincrease 1400 + size 32 32 + tex 33 33 + type smoke + velocitymultiplier 44 effect healray_impact -count 30 -type spark -tex 70 70 -color 0x00ff00 0x84c52f -size 1 2 -alpha 156 300 1024 -gravity 2 -airfriction 6 -originjitter 1 1 1 -velocityjitter 1112 1112 1112 -// inner cloud of smoke + airfriction 6 + alpha 156 300 1024 + color 0x00ff00 0x84c52f + count 30 + gravity 2 + originjitter 1 1 1 + size 1 2 + tex 70 70 + type spark + velocityjitter 1112 1112 1112 effect healray_impact -count 15 -type smoke -color 0x00ff00 0x84c52f -tex 40 40 -size 2 3 -alpha 200 456 512 -airfriction 3 -gravity -2 -velocityjitter 120 120 420 -rotate -180 180 -90 90 - - - - -// big plasma muzzle flash - + airfriction 3 + alpha 200 456 512 + color 0x00ff00 0x84c52f + count 15 + gravity -2 + rotate -180 180 -90 90 + size 2 3 + tex 40 40 + type smoke + velocityjitter 120 120 420 effect bigplasma_muzzleflash -countabsolute 1 -type smoke -color 0x283880 0x283880 // 0x202020 0x404040 -tex 65 65 -size 50 50 -alpha 256 256 812 -originjitter 1.5 1.5 1.5 -velocityjitter 6 6 6 -sizeincrease -10 -velocitymultiplier 0.01 -lightradius 200 -lightradiusfade 2000 -lightcolor 1.5 3 6 - + alpha 256 256 812 + color 0x283880 0x283880 + countabsolute 1 + lightcolor 1.5 3 6 + lightradiusfade 2000 + lightradius 200 + originjitter 1.5 1.5 1.5 + sizeincrease -10 + size 50 50 + tex 65 65 + type smoke + velocityjitter 6 6 6 + velocitymultiplier 0.010000 effect bigplasma_muzzleflash -countabsolute 1 -type smoke -color 0x00f0ff 0x00f0ff -tex 74 74 -size 20 20 -alpha 56 56 1112 -sizeincrease 300 - + alpha 56 56 1112 + color 0x00f0ff 0x00f0ff + countabsolute 1 + sizeincrease 300 + size 20 20 + tex 74 74 + type smoke effect bigplasma_muzzleflash -count 14 -type spark -tex 51 55 -color 0xD9FDFF 0x00f0ff -size 5 10 -sizeincrease 135 -alpha 50 150 1924 -originjitter 1 1 1 -velocityjitter 350 350 350 -velocitymultiplier 0.4 -airfriction 5 -stretchfactor 1.9 - + airfriction 5 + alpha 50 150 1924 + color 0xD9FDFF 0x00f0ff + count 14 + originjitter 1 1 1 + sizeincrease 135 + size 5 10 + stretchfactor 1.900000 + tex 51 55 + type spark + velocityjitter 350 350 350 + velocitymultiplier 0.400000 effect bigplasma_muzzleflash -count 4 -type spark -tex 70 70 -color 0xD9FDFF 0x00f0ff -size 20 20 -alpha 110 228 4024 -originjitter 1 1 1 -velocityjitter 650 650 650 -velocitymultiplier 1.1 -stretchfactor 0.2 - - -// big plasma impact - + alpha 110 228 4024 + color 0xD9FDFF 0x00f0ff + count 4 + originjitter 1 1 1 + size 20 20 + stretchfactor 0.200000 + tex 70 70 + type spark + velocityjitter 650 650 650 + velocitymultiplier 1.100000 effect bigplasma_impact -countabsolute 1 -type decal -tex 59 59 -size 32 32 -alpha 256 256 0 -originjitter 17 17 17 -lightradius 125 -lightradiusfade 450 -lightcolor 3.125 4.375 10 -// shockwave + alpha 256 256 0 + countabsolute 1 + lightcolor 3.1 4.4 10 + lightradiusfade 450 + lightradius 125 + originjitter 17 17 17 + size 32 32 + tex 59 59 + type decal effect bigplasma_impact -type smoke -countabsolute 1 -tex 33 33 -size 32 32 -sizeincrease 1400 -color 0x80C0FF 0x80C0FF -alpha 40 40 350 -velocitymultiplier 44 -// cloud of bouncing sparks + alpha 40 40 350 + color 0x80C0FF 0x80C0FF + countabsolute 1 + sizeincrease 1400 + size 32 32 + tex 33 33 + type smoke + velocitymultiplier 44 effect bigplasma_impact -count 30 -type spark -tex 70 70 -color 0x629dff 0x0018ff -size 1 2 -alpha 156 300 1024 -gravity 2 -airfriction 6 -originjitter 1 1 1 -velocityjitter 1512 1512 1512 -// inner cloud of smoke + airfriction 6 + alpha 156 300 1024 + color 0x629dff 0x0018ff + count 30 + gravity 2 + originjitter 1 1 1 + size 1 2 + tex 70 70 + type spark + velocityjitter 1512 1512 1512 effect bigplasma_impact -count 15 -type smoke -color 0x629dff 0x0018ff -tex 48 55 -size 20 24 -sizeincrease 555 -alpha 200 456 1512 -airfriction 30 -originjitter 20 20 20 -velocityjitter 320 320 320 -rotate -180 180 -9 9 -// smoke + airfriction 30 + alpha 200 456 1512 + color 0x629dff 0x0018ff + count 15 + originjitter 20 20 20 + rotate -180 180 -9 9 + sizeincrease 555 + size 20 24 + tex 48 55 + type smoke + velocityjitter 320 320 320 effect bigplasma_impact -type smoke -count 16 -blend alpha -tex 0 7 -size 60 30 -color 0x222222 0x000000 -alpha 128 328 390 -rotate -180 180 2 -2 -velocityjitter 100 100 200 -velocityoffset 0 0 180 -originjitter 80 80 10 -sizeincrease 30 -airfriction 0.04 -gravity 0.4 -// smoke in the middle + airfriction 0.040000 + alpha 128 328 390 + blend alpha + color 0x222222 0x000000 + count 16 + gravity 0.400000 + originjitter 80 80 10 + rotate -180 180 2 -2 + sizeincrease 30 + size 60 30 + tex 0 7 + type smoke + velocityjitter 100 100 200 + velocityoffset 0 0 180 effect bigplasma_impact -type alphastatic -count 10 -tex 0 7 -size 60 70 -color 0x222222 0x000000 -alpha 128 328 310 -rotate -180 180 20 -20 -velocityjitter 10 10 10 -originjitter 80 80 80 -sizeincrease -10 -airfriction 0.04 -gravity -0.2 - -// redflag_touch -- effects for touching the red flag -// used nowhere in code + airfriction 0.040000 + alpha 128 328 310 + color 0x222222 0x000000 + count 10 + gravity -0.200000 + originjitter 80 80 80 + rotate -180 180 20 -20 + sizeincrease -10 + size 60 70 + tex 0 7 + type alphastatic + velocityjitter 10 10 10 effect redflag_touch -count 35 -type spark -tex 40 40 -color 0xFF0000 0x970000 -size 1 3 -alpha 0 256 556 -gravity 1 -bounce 1.5 -originjitter 1 1 1 -velocityjitter 300 300 300 -velocitymultiplier 0.5 -airfriction 3 - -// blueflag_touch -- effects for touching the blue flag -// used nowhere in code + airfriction 3 + alpha 0 256 556 + bounce 1.500000 + color 0xFF0000 0x970000 + count 35 + gravity 1 + originjitter 1 1 1 + size 1 3 + tex 40 40 + type spark + velocityjitter 300 300 300 + velocitymultiplier 0.500000 effect blueflag_touch -count 35 -type spark -tex 40 40 -color 0x0000FF 0x000097 -size 1 3 -alpha 0 256 556 -gravity 1 -bounce 1.5 -originjitter 1 1 1 -velocityjitter 300 300 300 -velocitymultiplier 0.5 -airfriction 3 - -// red_pass -// used nowhere in code + airfriction 3 + alpha 0 256 556 + bounce 1.500000 + color 0x0000FF 0x000097 + count 35 + gravity 1 + originjitter 1 1 1 + size 1 3 + tex 40 40 + type spark + velocityjitter 300 300 300 + velocitymultiplier 0.500000 +effect yellowflag_touch + airfriction 3 + alpha 0 256 556 + bounce 1.500000 + color 0xFFFF0F 0xFFFF0F + count 35 + gravity 1 + originjitter 1 1 1 + size 1 3 + tex 40 40 + type spark + velocityjitter 300 300 300 + velocitymultiplier 0.500000 +effect pinkflag_touch + airfriction 3 + alpha 0 256 556 + bounce 1.500000 + color 0xFF0FFF 0xFF0FFF + count 35 + gravity 1 + originjitter 1 1 1 + size 1 3 + tex 40 40 + type spark + velocityjitter 300 300 300 + velocitymultiplier 0.500000 +effect neutralflag_touch + airfriction 3 + alpha 0 256 556 + bounce 1.500000 + color 0xFFFFFF 0xFFFFFF + count 35 + gravity 1 + originjitter 1 1 1 + size 1 3 + tex 40 40 + type spark + velocityjitter 300 300 300 + velocitymultiplier 0.500000 effect red_pass -trailspacing 64 -color 0xFF0000 0x970000 -size 2 2 -tex 32 32 -alpha 64 128 64 -airfriction 5 -sizeincrease 2 -type static + airfriction 5 + alpha 64 128 64 + color 0xFF0000 0x970000 + sizeincrease 2 + size 2 2 + tex 32 32 + trailspacing 64 + type static effect red_pass -trailspacing 12 -color 0xFF0000 0x970000 -size 1 1 -tex 0 8 -alpha 32 64 32 -airfriction 9 -sizeincrease 8 -velocityjitter 64 64 64 -type static + airfriction 9 + alpha 32 64 32 + color 0xFF0000 0x970000 + sizeincrease 8 + size 1 1 + tex 0 8 + trailspacing 12 + type static + velocityjitter 64 64 64 effect red_pass -trailspacing 12 -color 0xFF0000 0x970000 -size 4 4 -//tex 48 55 -alpha 256 256 1280 -type static - -// blue_pass -// used nowhere in code + alpha 256 256 1280 + color 0xFF0000 0x970000 + size 4 4 + trailspacing 12 + type static effect blue_pass -trailspacing 64 -color 0x0000FF 0x000097 -size 2 2 -tex 32 32 -alpha 64 128 64 -airfriction 5 -sizeincrease 2 -type static + airfriction 5 + alpha 64 128 64 + color 0x0000FF 0x000097 + sizeincrease 2 + size 2 2 + tex 32 32 + trailspacing 64 + type static effect blue_pass -trailspacing 12 -color 0x0000FF 0x000097 -size 1 1 -tex 0 8 -alpha 32 64 32 -airfriction 9 -sizeincrease 8 -velocityjitter 64 64 64 -type static + airfriction 9 + alpha 32 64 32 + color 0x0000FF 0x000097 + sizeincrease 8 + size 1 1 + tex 0 8 + trailspacing 12 + type static + velocityjitter 64 64 64 effect blue_pass -trailspacing 12 -color 0x0000FF 0x000097 -size 4 4 -//tex 48 55 -alpha 256 256 1280 -type static - -// red_cap -- red team capture effect + alpha 256 256 1280 + color 0x0000FF 0x000097 + size 4 4 + trailspacing 12 + type static +effect yellow_pass + airfriction 5 + alpha 64 128 64 + color 0xFFFF0F 0xFFFF0F + sizeincrease 2 + size 2 2 + tex 32 32 + trailspacing 64 + type static +effect yellow_pass + airfriction 9 + alpha 32 64 32 + color 0xFFFF0F 0xFFFF0F + sizeincrease 8 + size 1 1 + tex 0 8 + trailspacing 12 + type static + velocityjitter 64 64 64 +effect yellow_pass + alpha 256 256 1280 + color 0xFFFF0F 0xFFFF0F + size 4 4 + trailspacing 12 + type static +effect pink_pass + airfriction 5 + alpha 64 128 64 + color 0xFFFFFF 0xFFFFFF + sizeincrease 2 + size 2 2 + tex 32 32 + trailspacing 64 + type static +effect pink_pass + airfriction 9 + alpha 32 64 32 + color 0xFFFFFF 0xFFFFFF + sizeincrease 8 + size 1 1 + tex 0 8 + trailspacing 12 + type static + velocityjitter 64 64 64 +effect pink_pass + alpha 256 256 1280 + color 0xFFFFFF 0xFFFFFF + size 4 4 + trailspacing 12 + type static +effect neutral_pass + airfriction 5 + alpha 64 128 64 + color 0xFFFFFF 0xFFFFFF + sizeincrease 2 + size 2 2 + tex 32 32 + trailspacing 64 + type static +effect neutral_pass + airfriction 9 + alpha 32 64 32 + color 0xFFFFFF 0xFFFFFF + sizeincrease 8 + size 1 1 + tex 0 8 + trailspacing 12 + type static + velocityjitter 64 64 64 +effect neutral_pass + alpha 256 256 1280 + color 0xFFFFFF 0xFFFFFF + size 4 4 + trailspacing 12 + type static effect red_cap -count 500 -type spark -tex 64 64 -color 0xFF0000 0x970000 -size 1 1 -alpha 0 256 100 -stretchfactor 2 -//gravity 1 -bounce 1.5 -originjitter 1 1 1 -velocityjitter 1000 1000 1500 -velocitymultiplier 0.5 -airfriction 2 -stretchfactor 0.6 + airfriction 2 + alpha 0 256 100 + bounce 1.500000 + color 0xFF0000 0x970000 + count 500 + originjitter 1 1 1 + size 1 1 + stretchfactor 0.600000 + tex 64 64 + type spark + velocityjitter 1000 1000 1500 + velocitymultiplier 0.500000 effect red_cap -countabsolute 1 -type smoke -tex 65 65 -size 150 150 -alpha 190 190 180 -sizeincrease -80 -color 0xFF0000 0x970000 - -// blue_cap -- blue team capture effect + alpha 190 190 180 + color 0xFF0000 0x970000 + countabsolute 1 + sizeincrease -80 + size 150 150 + tex 65 65 + type smoke effect blue_cap -count 500 -type spark -tex 64 64 -color 0x0000FF 0x000097 -size 1 1 -alpha 0 256 100 -stretchfactor 2 -//gravity 1 -bounce 1.5 -originjitter 1 1 1 -velocityjitter 1000 1000 1500 -velocitymultiplier 0.5 -airfriction 2 -stretchfactor 0.6 + airfriction 2 + alpha 0 256 100 + bounce 1.500000 + color 0x0000FF 0x000097 + count 500 + originjitter 1 1 1 + size 1 1 + stretchfactor 0.600000 + tex 64 64 + type spark + velocityjitter 1000 1000 1500 + velocitymultiplier 0.500000 effect blue_cap -countabsolute 1 -type smoke -tex 65 65 -size 150 150 -alpha 190 190 180 -sizeincrease -80 -color 0x0000FF 0x000097 - -// spawn_point_red -- red team idle spawn point effect + alpha 190 190 180 + color 0x0000FF 0x000097 + countabsolute 1 + sizeincrease -80 + size 150 150 + tex 65 65 + type smoke +effect yellow_cap + airfriction 2 + alpha 0 256 100 + bounce 1.500000 + color 0xFFFF0F 0xFFFF0F + count 500 + originjitter 1 1 1 + size 1 1 + stretchfactor 0.600000 + tex 64 64 + type spark + velocityjitter 1000 1000 1500 + velocitymultiplier 0.500000 +effect yellow_cap + alpha 190 190 180 + color 0xFFFF0F 0xFFFF0F + countabsolute 1 + sizeincrease -80 + size 150 150 + tex 65 65 + type smoke +effect pink_cap + airfriction 2 + alpha 0 256 100 + bounce 1.500000 + color 0xFF0FFF 0xFF0FFF + count 500 + originjitter 1 1 1 + size 1 1 + stretchfactor 0.600000 + tex 64 64 + type spark + velocityjitter 1000 1000 1500 + velocitymultiplier 0.500000 +effect pink_cap + alpha 190 190 180 + color 0xFF0FFF 0xFF0FFF + countabsolute 1 + sizeincrease -80 + size 150 150 + tex 65 65 + type smoke effect spawn_point_red -count 37.5 -type static -color 0xFF0F0F 0xFF0F0F -size 1.0 2.0 -alpha 64 128 128 -gravity -0.1 -airfriction 0.2 -liquidfriction 0.8 -originjitter 16 16 64 -velocityjitter 32 32 0 -//lightradius 200 -//lighttime 0 -//lightcolor 0.4 0.9 0.9 - -// spawn_point_blue -- blue team idle spawn point effect + airfriction 0.200000 + alpha 64 128 128 + color 0xFF0F0F 0xFF0F0F + count 37.500000 + gravity -0.100000 + liquidfriction 0.800000 + originjitter 16 16 64 + size 1 2 + type static + velocityjitter 32 32 0 effect spawn_point_blue -count 37.5 -type static -color 0x0F0FFF 0x0F0FFF -size 1.0 2.0 -alpha 64 128 128 -gravity -0.1 -airfriction 0.2 -liquidfriction 0.8 -originjitter 16 16 64 -velocityjitter 32 32 0 -//lightradius 200 -//lighttime 0 -//lightcolor 0.4 0.9 0.9 - -// spawn_point_yellow -- yellow team idle spawn point effect + airfriction 0.200000 + alpha 64 128 128 + color 0x0F0FFF 0x0F0FFF + count 37.500000 + gravity -0.100000 + liquidfriction 0.800000 + originjitter 16 16 64 + size 1 2 + type static + velocityjitter 32 32 0 effect spawn_point_yellow -count 37.5 -type static -color 0xFFFF0F 0xFFFF0F -size 1.0 2.0 -alpha 64 128 128 -gravity -0.1 -airfriction 0.2 -liquidfriction 0.8 -originjitter 16 16 64 -velocityjitter 32 32 0 -//lightradius 200 -//lighttime 0 -//lightcolor 0.4 0.9 0.9 - -// spawn_point_pink -- pink team idle spawn point effect + airfriction 0.200000 + alpha 64 128 128 + color 0xFFFF0F 0xFFFF0F + count 37.500000 + gravity -0.100000 + liquidfriction 0.800000 + originjitter 16 16 64 + size 1 2 + type static + velocityjitter 32 32 0 effect spawn_point_pink -count 37.5 -type static -color 0xFF0FFF 0xFF0FFF -size 1.0 2.0 -alpha 64 128 128 -gravity -0.1 -airfriction 0.2 -liquidfriction 0.8 -originjitter 16 16 64 -velocityjitter 32 32 0 -//lightradius 200 -//lighttime 0 -//lightcolor 0.4 0.9 0.9 - -// spawn_point_neutral -- neutral idle spawn point effect + airfriction 0.200000 + alpha 64 128 128 + color 0xFF0FFF 0xFF0FFF + count 37.500000 + gravity -0.100000 + liquidfriction 0.800000 + originjitter 16 16 64 + size 1 2 + type static + velocityjitter 32 32 0 effect spawn_point_neutral -count 37.5 -type static -color 0xFFFFFF 0xFFFFFF -size 1.0 2.0 -alpha 64 128 128 -gravity -0.1 -airfriction 0.2 -liquidfriction 0.8 -originjitter 16 16 64 -velocityjitter 32 32 0 -//lightradius 200 -//lighttime 0 -//lightcolor 0.4 0.9 0.9 - -// spawn_event_red -- red team spawning effect + airfriction 0.200000 + alpha 64 128 128 + color 0xFFFFFF 0xFFFFFF + count 37.500000 + gravity -0.100000 + liquidfriction 0.800000 + originjitter 16 16 64 + size 1 2 + type static + velocityjitter 32 32 0 effect spawn_event_red -count 100 -type spark -tex 64 64 -color 0xFF0F0F 0xFF0F0F -size 1 1 -alpha 0 256 256 -stretchfactor 0.6 -//gravity 1 -bounce 1 -originjitter 1 1 1 -velocityjitter 500 500 500 -velocitymultiplier 0.1 -airfriction 2 + airfriction 2 + alpha 0 256 256 + bounce 1 + color 0xFF0F0F 0xFF0F0F + count 100 + originjitter 1 1 1 + size 1 1 + stretchfactor 0.600000 + tex 64 64 + type spark + velocityjitter 500 500 500 + velocitymultiplier 0.100000 effect spawn_event_red -countabsolute 1 -type smoke -tex 65 65 -size 100 100 -alpha 190 190 180 -sizeincrease -80 -color 0xFF0F0F 0xFF0F0F - -// spawn_event_blue -- blue team spawning effect + alpha 190 190 180 + color 0xFF0F0F 0xFF0F0F + countabsolute 1 + sizeincrease -80 + size 100 100 + tex 65 65 + type smoke effect spawn_event_blue -count 100 -type spark -tex 64 64 -color 0x0F0FFF 0x0F0FFF -size 1 1 -alpha 0 256 256 -stretchfactor 0.6 -//gravity 1 -bounce 1 -originjitter 1 1 1 -velocityjitter 500 500 500 -velocitymultiplier 0.1 -airfriction 2 + airfriction 2 + alpha 0 256 256 + bounce 1 + color 0x0F0FFF 0x0F0FFF + count 100 + originjitter 1 1 1 + size 1 1 + stretchfactor 0.600000 + tex 64 64 + type spark + velocityjitter 500 500 500 + velocitymultiplier 0.100000 effect spawn_event_blue -countabsolute 1 -type smoke -tex 65 65 -size 100 100 -alpha 190 190 180 -sizeincrease -80 -color 0x0F0FFF 0x0F0FFF - -// spawn_event_yellow -- yellow team spawning effect + alpha 190 190 180 + color 0x0F0FFF 0x0F0FFF + countabsolute 1 + sizeincrease -80 + size 100 100 + tex 65 65 + type smoke effect spawn_event_yellow -count 100 -type spark -tex 64 64 -color 0xFFFF0F 0xFFFF0F -size 1 1 -alpha 0 256 256 -stretchfactor 0.6 -//gravity 1 -bounce 1 -originjitter 1 1 1 -velocityjitter 500 500 500 -velocitymultiplier 0.1 -airfriction 2 + airfriction 2 + alpha 0 256 256 + bounce 1 + color 0xFFFF0F 0xFFFF0F + count 100 + originjitter 1 1 1 + size 1 1 + stretchfactor 0.600000 + tex 64 64 + type spark + velocityjitter 500 500 500 + velocitymultiplier 0.100000 effect spawn_event_yellow -countabsolute 1 -type smoke -tex 65 65 -size 100 100 -alpha 190 190 180 -sizeincrease -80 -color 0xFFFF0F 0xFFFF0F - -// spawn_event_pink -- pink team spawning effect + alpha 190 190 180 + color 0xFFFF0F 0xFFFF0F + countabsolute 1 + sizeincrease -80 + size 100 100 + tex 65 65 + type smoke effect spawn_event_pink -count 100 -type spark -tex 64 64 -color 0xFF0FFF 0xFF0FFF -size 1 1 -alpha 0 256 256 -stretchfactor 0.6 -//gravity 1 -bounce 1 -originjitter 1 1 1 -velocityjitter 500 500 500 -velocitymultiplier 0.1 -airfriction 2 + airfriction 2 + alpha 0 256 256 + bounce 1 + color 0xFF0FFF 0xFF0FFF + count 100 + originjitter 1 1 1 + size 1 1 + stretchfactor 0.600000 + tex 64 64 + type spark + velocityjitter 500 500 500 + velocitymultiplier 0.100000 effect spawn_event_pink -countabsolute 1 -type smoke -tex 65 65 -size 100 100 -alpha 190 190 180 -sizeincrease -80 -color 0xFF0FFF 0xFF0FFF - -// spawn_event_neutral -- neutral spawning effect + alpha 190 190 180 + color 0xFF0FFF 0xFF0FFF + countabsolute 1 + sizeincrease -80 + size 100 100 + tex 65 65 + type smoke effect spawn_event_neutral -count 100 -type spark -tex 64 64 -color 0xFFFFFF 0xFFFFFF -size 1 1 -alpha 0 256 256 -stretchfactor 0.6 -//gravity 1 -bounce 1 -originjitter 1 1 1 -velocityjitter 500 500 500 -velocitymultiplier 0.1 -airfriction 2 + airfriction 2 + alpha 0 256 256 + bounce 1 + color 0xFFFFFF 0xFFFFFF + count 100 + originjitter 1 1 1 + size 1 1 + stretchfactor 0.600000 + tex 64 64 + type spark + velocityjitter 500 500 500 + velocitymultiplier 0.100000 effect spawn_event_neutral -countabsolute 1 -type smoke -tex 65 65 -size 100 100 -alpha 190 190 180 -sizeincrease -80 -color 0xFFFFFF 0xFFFFFF - -// nade effects + alpha 190 190 180 + color 0xFFFFFF 0xFFFFFF + countabsolute 1 + sizeincrease -80 + size 100 100 + tex 65 65 + type smoke effect nade_blue -trailspacing 1 -type smoke -color 0x006cff 0x0600ff -tex 65 65 -size 3 3 -sizeincrease -1 -alpha 100 100 250 -//gravity -0.11 -// fire + alpha 100 100 250 + color 0x006cff 0x0600ff + sizeincrease -1 + size 3 3 + tex 65 65 + trailspacing 1 + type smoke effect nade_blue -notunderwater -trailspacing 8 -type smoke -color 0x0600ff 0x9794ff -tex 65 65 -size 15 25 -sizeincrease -10 -alpha 30 30 150 -// bubbles + alpha 30 30 150 + color 0x0600ff 0x9794ff + notunderwater + sizeincrease -10 + size 15 25 + tex 65 65 + trailspacing 8 + type smoke effect nade_blue -underwater -trailspacing 16 -type bubble -tex 62 62 -color 0x006cff 0x0600ff -size 1 1 -alpha 256 256 256 -gravity -0.125 -bounce 1.5 -liquidfriction 4 -velocityjitter 16 16 16 - + alpha 256 256 256 + bounce 1.500000 + color 0x006cff 0x0600ff + gravity -0.125000 + liquidfriction 4 + size 1 1 + tex 62 62 + trailspacing 16 + type bubble + underwater + velocityjitter 16 16 16 effect nade_red -trailspacing 1 -type smoke -color 0xff0000 0xff3c00 -tex 65 65 -size 3 3 -sizeincrease -1 -alpha 100 100 250 -//gravity -0.11 -// fire + alpha 100 100 250 + color 0xff0000 0xff3c00 + sizeincrease -1 + size 3 3 + tex 65 65 + trailspacing 1 + type smoke effect nade_red -notunderwater -trailspacing 8 -type smoke -color 0xff0000 0xffa2a2 -tex 65 65 -size 15 25 -sizeincrease -10 -alpha 30 30 150 -// bubbles + alpha 30 30 150 + color 0xff0000 0xffa2a2 + notunderwater + sizeincrease -10 + size 15 25 + tex 65 65 + trailspacing 8 + type smoke effect nade_red -underwater -trailspacing 16 -type bubble -tex 62 62 -color 0xff0000 0xff3c00 -size 1 1 -alpha 256 256 256 -gravity -0.125 -bounce 1.5 -liquidfriction 4 -velocityjitter 16 16 16 - + alpha 256 256 256 + bounce 1.500000 + color 0xff0000 0xff3c00 + gravity -0.125000 + liquidfriction 4 + size 1 1 + tex 62 62 + trailspacing 16 + type bubble + underwater + velocityjitter 16 16 16 effect nade_yellow -trailspacing 1 -type smoke -color 0xFFFF0F 0xFFFF0F -tex 65 65 -size 3 3 -sizeincrease -1 -alpha 100 100 250 -//gravity -0.11 -// fire + alpha 100 100 250 + color 0xFFFF0F 0xFFFF0F + sizeincrease -1 + size 3 3 + tex 65 65 + trailspacing 1 + type smoke effect nade_yellow -notunderwater -trailspacing 8 -type smoke -color 0xFFFF0F 0xFFFF0F -tex 65 65 -size 15 25 -sizeincrease -10 -alpha 30 30 150 -// bubbles + alpha 30 30 150 + color 0xFFFF0F 0xFFFF0F + notunderwater + sizeincrease -10 + size 15 25 + tex 65 65 + trailspacing 8 + type smoke effect nade_yellow -underwater -trailspacing 16 -type bubble -tex 62 62 -color 0xFFFF0F 0xFFFF0F -size 1 1 -alpha 256 256 256 -gravity -0.125 -bounce 1.5 -liquidfriction 4 -velocityjitter 16 16 16 - + alpha 256 256 256 + bounce 1.500000 + color 0xFFFF0F 0xFFFF0F + gravity -0.125000 + liquidfriction 4 + size 1 1 + tex 62 62 + trailspacing 16 + type bubble + underwater + velocityjitter 16 16 16 effect nade_pink -trailspacing 1 -type smoke -color 0xFF0FFF 0xFF0FFF -tex 65 65 -size 3 3 -sizeincrease -1 -alpha 100 100 250 -//gravity -0.11 -// fire + alpha 100 100 250 + color 0xFF0FFF 0xFF0FFF + sizeincrease -1 + size 3 3 + tex 65 65 + trailspacing 1 + type smoke effect nade_pink -notunderwater -trailspacing 8 -type smoke -color 0xFF0FFF 0xFF0FFF -tex 65 65 -size 15 25 -sizeincrease -10 -alpha 30 30 150 -// bubbles + alpha 30 30 150 + color 0xFF0FFF 0xFF0FFF + notunderwater + sizeincrease -10 + size 15 25 + tex 65 65 + trailspacing 8 + type smoke effect nade_pink -underwater -trailspacing 16 -type bubble -tex 62 62 -color 0xFF0FFF 0xFF0FFF -size 1 1 -alpha 256 256 256 -gravity -0.125 -bounce 1.5 -liquidfriction 4 -velocityjitter 16 16 16 - + alpha 256 256 256 + bounce 1.500000 + color 0xFF0FFF 0xFF0FFF + gravity -0.125000 + liquidfriction 4 + size 1 1 + tex 62 62 + trailspacing 16 + type bubble + underwater + velocityjitter 16 16 16 effect nade_neutral -trailspacing 1 -type smoke -color 0xFFFFFF 0xFFFFFF -tex 65 65 -size 3 3 -sizeincrease -1 -alpha 100 100 250 -//gravity -0.11 -// fire + alpha 100 100 250 + color 0xFFFFFF 0xFFFFFF + sizeincrease -1 + size 3 3 + tex 65 65 + trailspacing 1 + type smoke effect nade_neutral -notunderwater -trailspacing 8 -type smoke -color 0xFFFFFF 0xFFFFFF -tex 65 65 -size 15 25 -sizeincrease -10 -alpha 30 30 150 -// bubbles + alpha 30 30 150 + color 0xFFFFFF 0xFFFFFF + notunderwater + sizeincrease -10 + size 15 25 + tex 65 65 + trailspacing 8 + type smoke effect nade_neutral -underwater -trailspacing 16 -type bubble -tex 62 62 -color 0xFFFFFF 0xFFFFFF -size 1 1 -alpha 256 256 256 -gravity -0.125 -bounce 1.5 -liquidfriction 4 -velocityjitter 16 16 16 - + alpha 256 256 256 + bounce 1.500000 + color 0xFFFFFF 0xFFFFFF + gravity -0.125000 + liquidfriction 4 + size 1 1 + tex 62 62 + trailspacing 16 + type bubble + underwater + velocityjitter 16 16 16 effect nade_red_burn -trailspacing 1 -type smoke -color 0xff0000 0xff3c00 -tex 65 65 -size 5 5 -sizeincrease -1 -alpha 100 100 250 -//gravity -0.11 -// fire + alpha 100 100 250 + color 0xff0000 0xff3c00 + sizeincrease -1 + size 5 5 + tex 65 65 + trailspacing 1 + type smoke effect nade_red_burn -notunderwater -trailspacing 64 -type smoke -color 0xff0000 0xffa2a2 -tex 65 65 -size 45 25 -sizeincrease -30 -alpha 200 200 1000 -// bubbles + alpha 200 200 1000 + color 0xff0000 0xffa2a2 + notunderwater + sizeincrease -30 + size 45 25 + tex 65 65 + trailspacing 64 + type smoke effect nade_red_burn -underwater -trailspacing 16 -type bubble -tex 62 62 -color 0xff0000 0xff3c00 -size 1 1 -alpha 256 256 256 -gravity -0.125 -bounce 1.5 -liquidfriction 4 -velocityjitter 16 16 16 + alpha 256 256 256 + bounce 1.500000 + color 0xff0000 0xff3c00 + gravity -0.125000 + liquidfriction 4 + size 1 1 + tex 62 62 + trailspacing 16 + type bubble + underwater + velocityjitter 16 16 16 effect nade_red_burn -trailspacing 16 -type smoke -color 0xff0000 0xff3c00 -tex 71 73 -size 15 25 -sizeincrease -40 -rotate -180 180 20 -20 -originjitter 2 2 2 -velocityjitter 10 10 10 -alpha 300 900 1500 - + alpha 300 900 1500 + color 0xff0000 0xff3c00 + originjitter 2 2 2 + rotate -180 180 20 -20 + sizeincrease -40 + size 15 25 + tex 71 73 + trailspacing 16 + type smoke + velocityjitter 10 10 10 effect nade_blue_burn -trailspacing 1 -type smoke -color 0x006cff 0x0600ff -tex 65 65 -size 5 5 -sizeincrease -1 -alpha 100 100 250 -//gravity -0.11 -// fire + alpha 100 100 250 + color 0x006cff 0x0600ff + sizeincrease -1 + size 5 5 + tex 65 65 + trailspacing 1 + type smoke effect nade_blue_burn -notunderwater -trailspacing 64 -type smoke -color 0x0600ff 0x9794ff -tex 65 65 -size 45 25 -sizeincrease -30 -alpha 200 200 1000 -// bubbles + alpha 200 200 1000 + color 0x0600ff 0x9794ff + notunderwater + sizeincrease -30 + size 45 25 + tex 65 65 + trailspacing 64 + type smoke effect nade_blue_burn -underwater -trailspacing 16 -type bubble -tex 62 62 -color 0x006cff 0x0600ff -size 1 1 -alpha 256 256 256 -gravity -0.125 -bounce 1.5 -liquidfriction 4 -velocityjitter 16 16 16 + alpha 256 256 256 + bounce 1.500000 + color 0x006cff 0x0600ff + gravity -0.125000 + liquidfriction 4 + size 1 1 + tex 62 62 + trailspacing 16 + type bubble + underwater + velocityjitter 16 16 16 effect nade_blue_burn -trailspacing 16 -type smoke -color 0x006cff 0x0600ff -tex 33 33 -size 25 25 -sizeincrease -30 - + alpha 300 900 1500 + color 0x006cff 0x0600ff + originjitter 2 2 2 + rotate -180 180 20 -20 + sizeincrease -40 + size 15 25 + tex 71 73 + trailspacing 16 + type smoke + velocityjitter 10 10 10 effect nade_yellow_burn -trailspacing 1 -type smoke -color 0xFFFF0F 0xFFFF0F -tex 65 65 -size 5 5 -sizeincrease -1 -alpha 100 100 250 -//gravity -0.11 -// fire + alpha 100 100 250 + color 0xFFFF0F 0xFFFF0F + sizeincrease -1 + size 5 5 + tex 65 65 + trailspacing 1 + type smoke effect nade_yellow_burn -notunderwater -trailspacing 64 -type smoke -color 0xFFFF0F 0xFFFF0F -tex 65 65 -size 45 25 -sizeincrease -30 -alpha 200 200 1000 -// bubbles + alpha 200 200 1000 + color 0xFFFF0F 0xFFFF0F + notunderwater + sizeincrease -30 + size 45 25 + tex 65 65 + trailspacing 64 + type smoke effect nade_yellow_burn -underwater -trailspacing 16 -type bubble -tex 62 62 -color 0xFFFF0F 0xFFFF0F -size 1 1 -alpha 256 256 256 -gravity -0.125 -bounce 1.5 -liquidfriction 4 -velocityjitter 16 16 16 + alpha 256 256 256 + bounce 1.500000 + color 0xFFFF0F 0xFFFF0F + gravity -0.125000 + liquidfriction 4 + size 1 1 + tex 62 62 + trailspacing 16 + type bubble + underwater + velocityjitter 16 16 16 effect nade_yellow_burn -trailspacing 16 -type smoke -color 0xFFFF0F 0xFFFF0F -tex 33 33 -size 25 25 -sizeincrease -30 - + alpha 300 900 1500 + color 0xFFFF0F 0xFFFF0F + originjitter 2 2 2 + rotate -180 180 20 -20 + sizeincrease -40 + size 15 25 + tex 71 73 + trailspacing 16 + type smoke + velocityjitter 10 10 10 effect nade_pink_burn -trailspacing 1 -type smoke -color 0xFF0FFF 0xFF0FFF -tex 65 65 -size 5 5 -sizeincrease -1 -alpha 100 100 250 -//gravity -0.11 -// fire + alpha 100 100 250 + color 0xFF0FFF 0xFF0FFF + sizeincrease -1 + size 5 5 + tex 65 65 + trailspacing 1 + type smoke effect nade_pink_burn -notunderwater -trailspacing 64 -type smoke -color 0xFF0FFF 0xFF0FFF -tex 65 65 -size 45 25 -sizeincrease -30 -alpha 200 200 1000 -// bubbles + alpha 200 200 1000 + color 0xFF0FFF 0xFF0FFF + notunderwater + sizeincrease -30 + size 45 25 + tex 65 65 + trailspacing 64 + type smoke effect nade_pink_burn -underwater -trailspacing 16 -type bubble -tex 62 62 -color 0xFF0FFF 0xFF0FFF -size 1 1 -alpha 256 256 256 -gravity -0.125 -bounce 1.5 -liquidfriction 4 -velocityjitter 16 16 16 + alpha 256 256 256 + bounce 1.500000 + color 0xFF0FFF 0xFF0FFF + gravity -0.125000 + liquidfriction 4 + size 1 1 + tex 62 62 + trailspacing 16 + type bubble + underwater + velocityjitter 16 16 16 effect nade_pink_burn -trailspacing 16 -type smoke -color 0xFF0FFF 0xFF0FFF -tex 33 33 -size 25 25 -sizeincrease -30 - + alpha 300 900 1500 + color 0xFF0FFF 0xFF0FFF + originjitter 2 2 2 + rotate -180 180 20 -20 + sizeincrease -40 + size 15 25 + tex 71 73 + trailspacing 16 + type smoke + velocityjitter 10 10 10 effect nade_neutral_burn -trailspacing 1 -type smoke -color 0xFFFFFF 0xFFFFFF -tex 65 65 -size 5 5 -sizeincrease -1 -alpha 100 100 250 -//gravity -0.11 -// fire + alpha 100 100 250 + color 0xFFFFFF 0xFFFFFF + sizeincrease -1 + size 5 5 + tex 65 65 + trailspacing 1 + type smoke effect nade_neutral_burn -notunderwater -trailspacing 64 -type smoke -color 0xFFFFFF 0xFFFFFF -tex 65 65 -size 45 25 -sizeincrease -30 -alpha 200 200 1000 -// bubbles + alpha 200 200 1000 + color 0xFFFFFF 0xFFFFFF + notunderwater + sizeincrease -30 + size 45 25 + tex 65 65 + trailspacing 64 + type smoke effect nade_neutral_burn -underwater -trailspacing 16 -type bubble -tex 62 62 -color 0xFFFFFF 0xFFFFFF -size 1 1 -alpha 256 256 256 -gravity -0.125 -bounce 1.5 -liquidfriction 4 -velocityjitter 16 16 16 + alpha 256 256 256 + bounce 1.500000 + color 0xFFFFFF 0xFFFFFF + gravity -0.125000 + liquidfriction 4 + size 1 1 + tex 62 62 + trailspacing 16 + type bubble + underwater + velocityjitter 16 16 16 effect nade_neutral_burn -trailspacing 16 -type smoke -color 0xFFFFFF 0xFFFFFF -tex 33 33 -size 25 25 -sizeincrease -30 - + alpha 300 900 1500 + color 0xFFFFFF 0xFFFFFF + originjitter 2 2 2 + rotate -180 180 20 -20 + sizeincrease -40 + size 15 25 + tex 71 73 + trailspacing 16 + type smoke + velocityjitter 10 10 10 effect nade_blue_explode -countabsolute 1 -type decal -tex 8 16 -size 88 88 -alpha 256 256 0 -originjitter 26 26 26 -lightradius 300 -lightradiusfade 1500 -lightcolor 20 20 100 -// shockwave + alpha 256 256 0 + countabsolute 1 + lightcolor 20 20 100 + lightradiusfade 1500 + lightradius 300 + originjitter 26 26 26 + size 88 88 + tex 8 16 + type decal effect nade_blue_explode -type smoke -countabsolute 1 -tex 33 33 -size 32 32 -sizeincrease 1800 -color 0x80C0FF 0x80C0FF -alpha 80 80 650 -velocitymultiplier 44 -// fire + alpha 80 80 650 + color 0x80C0FF 0x80C0FF + countabsolute 1 + sizeincrease 1800 + size 32 32 + tex 33 33 + type smoke + velocitymultiplier 44 effect nade_blue_explode -notunderwater -count 16 -type smoke -color 0x629dff 0x0018ff -tex 48 55 -size 20 24 -sizeincrease 555 -alpha 400 656 2000 -airfriction 30 -originjitter 50 50 50 -velocityjitter 320 320 320 -rotate -180 180 -9 9 -// fire stretched + airfriction 30 + alpha 400 656 2000 + color 0x629dff 0x0018ff + count 16 + notunderwater + originjitter 50 50 50 + rotate -180 180 -9 9 + sizeincrease 555 + size 20 24 + tex 48 55 + type smoke + velocityjitter 320 320 320 effect nade_blue_explode -count 8 -type spark -tex 48 55 -color 0x629dff 0x0018ff -size 60 90 -alpha 1500 3000 13000 -stretchfactor 80 -sizeincrease 40 -velocityjitter 30 30 30 -airfriction -9 -//smoke + airfriction -9 + alpha 1500 3000 13000 + color 0x629dff 0x0018ff + count 8 + sizeincrease 40 + size 60 90 + stretchfactor 80 + tex 48 55 + type spark + velocityjitter 30 30 30 effect nade_blue_explode -type smoke -count 32 -blend alpha -tex 0 7 -size 60 30 -color 0x222222 0x000000 -alpha 128 328 390 -rotate -180 180 2 -2 -velocityjitter 200 200 200 -velocityoffset 0 0 180 -originjitter 50 50 10 -sizeincrease 50 -airfriction 0.04 -gravity 0.4 -// underwater bubbles + airfriction 0.040000 + alpha 128 328 390 + blend alpha + color 0x222222 0x000000 + count 32 + gravity 0.400000 + originjitter 50 50 10 + rotate -180 180 2 -2 + sizeincrease 50 + size 60 30 + tex 0 7 + type smoke + velocityjitter 200 200 200 + velocityoffset 0 0 180 effect nade_blue_explode -underwater -count 32 -type bubble -tex 62 62 -color 0x404040 0x808080 -size 3 6 -alpha 128 256 64 -gravity -0.125 -bounce 1.5 -liquidfriction 0.25 -originjitter 16 16 16 -velocityjitter 196 196 196 -rotate 0 0 0 0 -// bouncing sparks + alpha 128 256 64 + bounce 1.500000 + color 0x404040 0x808080 + count 32 + gravity -0.125000 + liquidfriction 0.250000 + originjitter 16 16 16 + size 3 6 + tex 62 62 + type bubble + underwater + velocityjitter 196 196 196 effect nade_blue_explode -notunderwater -count 8 -type spark -tex 40 40 -color 0x006cff 0x0600ff -size 1 2 -alpha 644 956 484 -gravity 1 -airfriction 1 -bounce 1.6 -liquidfriction 0.8 -velocityoffset 0 0 80 -originjitter 16 16 16 -velocityjitter 424 424 624 -// notbouncing sparks + airfriction 1 + alpha 644 956 484 + bounce 1.600000 + color 0x006cff 0x0600ff + count 8 + gravity 1 + liquidfriction 0.800000 + notunderwater + originjitter 16 16 16 + size 1 2 + tex 40 40 + type spark + velocityjitter 424 424 624 + velocityoffset 0 0 80 effect nade_blue_explode -count 16 -type spark -tex 40 40 -color 0x006cff 0x0600ff -size 1 2 -alpha 644 956 684 -gravity 0.5 -airfriction 0.7 -liquidfriction 0.8 -velocityoffset 0 0 80 -originjitter 16 16 16 -velocityjitter 424 424 624 -// debris + airfriction 0.700000 + alpha 644 956 684 + color 0x006cff 0x0600ff + count 16 + gravity 0.500000 + liquidfriction 0.800000 + originjitter 16 16 16 + size 1 2 + tex 40 40 + type spark + velocityjitter 424 424 624 + velocityoffset 0 0 80 effect nade_blue_explode -notunderwater -count 12 -type alphastatic -tex 66 68 -color 0x6a3d25 0xcac5b4 -size 2 6 -alpha 644 956 684 -gravity 1.3 -airfriction 0.5 -bounce 1.6 -velocityjitter 324 324 524 -rotate -180 180 -1000 1000 - + alpha 644 956 2500 + color 0x006cff 0x0600ff + count 8 + notunderwater + originjitter 64 64 64 + rotate -180 180 -100 100 + size 20 40 + tex 71 73 + type smoke + velocityjitter 324 324 324 effect nade_red_explode -countabsolute 1 -type decal -tex 8 16 -size 88 88 -alpha 256 256 0 -originjitter 26 26 26 -lightradius 300 -lightradiusfade 1500 -lightcolor 100 20 20 -// shockwave + alpha 256 256 0 + countabsolute 1 + lightcolor 100 20 20 + lightradiusfade 1500 + lightradius 300 + originjitter 26 26 26 + size 88 88 + tex 8 16 + type decal effect nade_red_explode -type smoke -countabsolute 1 -tex 33 33 -size 32 32 -sizeincrease 2200 -color 0xff0000 0xffa2a2 -alpha 80 80 650 -velocitymultiplier 44 -// fire + alpha 80 80 650 + color 0xff0000 0xffa2a2 + countabsolute 1 + sizeincrease 1800 + size 32 32 + tex 33 33 + type smoke + velocitymultiplier 44 effect nade_red_explode -notunderwater -count 16 -type smoke -color 0xff0000 0xff4200 -tex 48 55 -size 20 24 -sizeincrease 555 -alpha 400 656 2000 -airfriction 30 -originjitter 50 50 50 -velocityjitter 320 320 320 -rotate -180 180 -9 9 -// fire stretched + airfriction 30 + alpha 400 656 2000 + color 0xff0000 0xff4200 + count 16 + notunderwater + originjitter 50 50 50 + rotate -180 180 -9 9 + sizeincrease 555 + size 20 24 + tex 48 55 + type smoke + velocityjitter 320 320 320 effect nade_red_explode -count 8 -type spark -tex 48 55 -color 0xff0000 0xff4200 -size 60 90 -alpha 1500 3000 13000 -stretchfactor 80 -sizeincrease 40 -velocityjitter 30 30 30 -airfriction -9 -//smoke + airfriction -9 + alpha 1500 3000 13000 + color 0xff0000 0xff4200 + count 8 + sizeincrease 40 + size 60 90 + stretchfactor 80 + tex 48 55 + type spark + velocityjitter 30 30 30 effect nade_red_explode -type smoke -count 32 -blend alpha -tex 0 7 -size 60 30 -color 0x222222 0x000000 -alpha 128 328 390 -rotate -180 180 2 -2 -velocityjitter 200 200 200 -velocityoffset 0 0 180 -originjitter 50 50 10 -sizeincrease 50 -airfriction 0.04 -gravity 0.4 -// underwater bubbles + airfriction 0.040000 + alpha 128 328 390 + blend alpha + color 0x222222 0x000000 + count 32 + gravity 0.400000 + originjitter 50 50 10 + rotate -180 180 2 -2 + sizeincrease 50 + size 60 30 + tex 0 7 + type smoke + velocityjitter 200 200 200 + velocityoffset 0 0 180 effect nade_red_explode -underwater -count 32 -type bubble -tex 62 62 -color 0x404040 0x808080 -size 3 6 -alpha 128 256 64 -gravity -0.125 -bounce 1.5 -liquidfriction 0.25 -originjitter 16 16 16 -velocityjitter 196 196 196 -rotate 0 0 0 0 -// bouncing sparks + alpha 128 256 64 + bounce 1.500000 + color 0x404040 0x808080 + count 32 + gravity -0.125000 + liquidfriction 0.250000 + originjitter 16 16 16 + size 3 6 + tex 62 62 + type bubble + underwater + velocityjitter 196 196 196 effect nade_red_explode -notunderwater -count 8 -type spark -tex 40 40 -color 0xff0000 0xffa2a2 -size 1 2 -alpha 644 956 484 -gravity 1 -airfriction 1 -bounce 1.6 -liquidfriction 0.8 -velocityoffset 0 0 80 -originjitter 16 16 16 -velocityjitter 424 424 624 -// notbouncing sparks + airfriction 1 + alpha 644 956 484 + bounce 1.600000 + color 0xff0000 0xffa2a2 + count 8 + gravity 1 + liquidfriction 0.800000 + notunderwater + originjitter 16 16 16 + size 1 2 + tex 40 40 + type spark + velocityjitter 424 424 624 + velocityoffset 0 0 80 effect nade_red_explode -count 16 -type spark -tex 40 40 -color 0xff0000 0xffa2a2 -size 1 2 -alpha 644 956 684 -gravity 0.5 -airfriction 0.7 -liquidfriction 0.8 -velocityoffset 0 0 80 -originjitter 16 16 16 -velocityjitter 424 424 624 -// debris + airfriction 0.700000 + alpha 644 956 684 + color 0xff0000 0xffa2a2 + count 16 + gravity 0.500000 + liquidfriction 0.800000 + originjitter 16 16 16 + size 1 2 + tex 40 40 + type spark + velocityjitter 424 424 624 + velocityoffset 0 0 80 effect nade_red_explode -notunderwater -count 8 -type smoke -tex 71 73 -color 0xff0000 0xffa2a2 -size 20 40 -alpha 644 956 2500 -originjitter 64 64 64 -velocityjitter 324 324 324 -rotate -180 180 -100 100 - + alpha 644 956 2500 + color 0xff0000 0xffa2a2 + count 8 + notunderwater + originjitter 64 64 64 + rotate -180 180 -100 100 + size 20 40 + tex 71 73 + type smoke + velocityjitter 324 324 324 effect nade_yellow_explode -countabsolute 1 -type decal -tex 8 16 -size 88 88 -alpha 256 256 0 -originjitter 26 26 26 -lightradius 300 -lightradiusfade 1500 -lightcolor 100 20 20 -// shockwave + alpha 256 256 0 + countabsolute 1 + lightcolor 100 20 20 + lightradiusfade 1500 + lightradius 300 + originjitter 26 26 26 + size 88 88 + tex 8 16 + type decal effect nade_yellow_explode -type smoke -countabsolute 1 -tex 33 33 -size 32 32 -sizeincrease 2200 -color 0xff0000 0xffa2a2 -alpha 80 80 650 -velocitymultiplier 44 -// fire + alpha 80 80 650 + color 0xff0000 0xffa2a2 + countabsolute 1 + sizeincrease 1800 + size 32 32 + tex 33 33 + type smoke + velocitymultiplier 44 effect nade_yellow_explode -notunderwater -count 16 -type smoke -color 0xFFFF0F 0xFFFF0F -tex 48 55 -size 20 24 -sizeincrease 555 -alpha 400 656 2000 -airfriction 30 -originjitter 50 50 50 -velocityjitter 320 320 320 -rotate -180 180 -9 9 -// fire stretched + airfriction 30 + alpha 400 656 2000 + color 0xFFFF0F 0xFFFF0F + count 16 + notunderwater + originjitter 50 50 50 + rotate -180 180 -9 9 + sizeincrease 555 + size 20 24 + tex 48 55 + type smoke + velocityjitter 320 320 320 effect nade_yellow_explode -count 8 -type spark -tex 48 55 -color 0xFFFF0F 0xFFFF0F -size 60 90 -alpha 1500 3000 13000 -stretchfactor 80 -sizeincrease 40 -velocityjitter 30 30 30 -airfriction -9 -//smoke + airfriction -9 + alpha 1500 3000 13000 + color 0xFFFF0F 0xFFFF0F + count 8 + sizeincrease 40 + size 60 90 + stretchfactor 80 + tex 48 55 + type spark + velocityjitter 30 30 30 effect nade_yellow_explode -type smoke -count 32 -blend alpha -tex 0 7 -size 60 30 -color 0x222222 0x000000 -alpha 128 328 390 -rotate -180 180 2 -2 -velocityjitter 200 200 200 -velocityoffset 0 0 180 -originjitter 50 50 10 -sizeincrease 50 -airfriction 0.04 -gravity 0.4 -// underwater bubbles + airfriction 0.040000 + alpha 128 328 390 + blend alpha + color 0x222222 0x000000 + count 32 + gravity 0.400000 + originjitter 50 50 10 + rotate -180 180 2 -2 + sizeincrease 50 + size 60 30 + tex 0 7 + type smoke + velocityjitter 200 200 200 + velocityoffset 0 0 180 effect nade_yellow_explode -underwater -count 32 -type bubble -tex 62 62 -color 0x404040 0x808080 -size 3 6 -alpha 128 256 64 -gravity -0.125 -bounce 1.5 -liquidfriction 0.25 -originjitter 16 16 16 -velocityjitter 196 196 196 -rotate 0 0 0 0 -// bouncing sparks + alpha 128 256 64 + bounce 1.500000 + color 0x404040 0x808080 + count 32 + gravity -0.125000 + liquidfriction 0.250000 + originjitter 16 16 16 + size 3 6 + tex 62 62 + type bubble + underwater + velocityjitter 196 196 196 effect nade_yellow_explode -notunderwater -count 8 -type spark -tex 40 40 -color 0xff0000 0xffa2a2 -size 1 2 -alpha 644 956 484 -gravity 1 -airfriction 1 -bounce 1.6 -liquidfriction 0.8 -velocityoffset 0 0 80 -originjitter 16 16 16 -velocityjitter 424 424 624 -// notbouncing sparks + airfriction 1 + alpha 644 956 484 + bounce 1.600000 + color 0xff0000 0xffa2a2 + count 8 + gravity 1 + liquidfriction 0.800000 + notunderwater + originjitter 16 16 16 + size 1 2 + tex 40 40 + type spark + velocityjitter 424 424 624 + velocityoffset 0 0 80 effect nade_yellow_explode -count 16 -type spark -tex 40 40 -color 0xff0000 0xffa2a2 -size 1 2 -alpha 644 956 684 -gravity 0.5 -airfriction 0.7 -liquidfriction 0.8 -velocityoffset 0 0 80 -originjitter 16 16 16 -velocityjitter 424 424 624 -// debris + airfriction 0.700000 + alpha 644 956 684 + color 0xff0000 0xffa2a2 + count 16 + gravity 0.500000 + liquidfriction 0.800000 + originjitter 16 16 16 + size 1 2 + tex 40 40 + type spark + velocityjitter 424 424 624 + velocityoffset 0 0 80 effect nade_yellow_explode -notunderwater -count 8 -type smoke -tex 71 73 -color 0xff0000 0xffa2a2 -size 20 40 -alpha 644 956 2500 -originjitter 64 64 64 -velocityjitter 324 324 324 -rotate -180 180 -100 100 - + alpha 644 956 2500 + color 0xff0000 0xffa2a2 + count 8 + notunderwater + originjitter 64 64 64 + rotate -180 180 -100 100 + size 20 40 + tex 71 73 + type smoke + velocityjitter 324 324 324 effect nade_pink_explode -countabsolute 1 -type decal -tex 8 16 -size 88 88 -alpha 256 256 0 -originjitter 26 26 26 -lightradius 300 -lightradiusfade 1500 -lightcolor 100 20 20 -// shockwave + alpha 256 256 0 + countabsolute 1 + lightcolor 100 20 20 + lightradiusfade 1500 + lightradius 300 + originjitter 26 26 26 + size 88 88 + tex 8 16 + type decal effect nade_pink_explode -type smoke -countabsolute 1 -tex 33 33 -size 32 32 -sizeincrease 2200 -color 0xff0000 0xffa2a2 -alpha 80 80 650 -velocitymultiplier 44 -// fire + alpha 80 80 650 + color 0xff0000 0xffa2a2 + countabsolute 1 + sizeincrease 1800 + size 32 32 + tex 33 33 + type smoke + velocitymultiplier 44 effect nade_pink_explode -notunderwater -count 16 -type smoke -color 0xFF0FFF 0xFF0FFF -tex 48 55 -size 20 24 -sizeincrease 555 -alpha 400 656 2000 -airfriction 30 -originjitter 50 50 50 -velocityjitter 320 320 320 -rotate -180 180 -9 9 -// fire stretched + airfriction 30 + alpha 400 656 2000 + color 0xFF0FFF 0xFF0FFF + count 16 + notunderwater + originjitter 50 50 50 + rotate -180 180 -9 9 + sizeincrease 555 + size 20 24 + tex 48 55 + type smoke + velocityjitter 320 320 320 effect nade_pink_explode -count 8 -type spark -tex 48 55 -color 0xFF0FFF 0xFF0FFF -size 60 90 -alpha 1500 3000 13000 -stretchfactor 80 -sizeincrease 40 -velocityjitter 30 30 30 -airfriction -9 -//smoke + airfriction -9 + alpha 1500 3000 13000 + color 0xFF0FFF 0xFF0FFF + count 8 + sizeincrease 40 + size 60 90 + stretchfactor 80 + tex 48 55 + type spark + velocityjitter 30 30 30 effect nade_pink_explode -type smoke -count 32 -blend alpha -tex 0 7 -size 60 30 -color 0x222222 0x000000 -alpha 128 328 390 -rotate -180 180 2 -2 -velocityjitter 200 200 200 -velocityoffset 0 0 180 -originjitter 50 50 10 -sizeincrease 50 -airfriction 0.04 -gravity 0.4 -// underwater bubbles + airfriction 0.040000 + alpha 128 328 390 + blend alpha + color 0x222222 0x000000 + count 32 + gravity 0.400000 + originjitter 50 50 10 + rotate -180 180 2 -2 + sizeincrease 50 + size 60 30 + tex 0 7 + type smoke + velocityjitter 200 200 200 + velocityoffset 0 0 180 effect nade_pink_explode -underwater -count 32 -type bubble -tex 62 62 -color 0x404040 0x808080 -size 3 6 -alpha 128 256 64 -gravity -0.125 -bounce 1.5 -liquidfriction 0.25 -originjitter 16 16 16 -velocityjitter 196 196 196 -rotate 0 0 0 0 -// bouncing sparks + alpha 128 256 64 + bounce 1.500000 + color 0x404040 0x808080 + count 32 + gravity -0.125000 + liquidfriction 0.250000 + originjitter 16 16 16 + size 3 6 + tex 62 62 + type bubble + underwater + velocityjitter 196 196 196 effect nade_pink_explode -notunderwater -count 8 -type spark -tex 40 40 -color 0xff0000 0xffa2a2 -size 1 2 -alpha 644 956 484 -gravity 1 -airfriction 1 -bounce 1.6 -liquidfriction 0.8 -velocityoffset 0 0 80 -originjitter 16 16 16 -velocityjitter 424 424 624 -// notbouncing sparks + airfriction 1 + alpha 644 956 484 + bounce 1.600000 + color 0xff0000 0xffa2a2 + count 8 + gravity 1 + liquidfriction 0.800000 + notunderwater + originjitter 16 16 16 + size 1 2 + tex 40 40 + type spark + velocityjitter 424 424 624 + velocityoffset 0 0 80 effect nade_pink_explode -count 16 -type spark -tex 40 40 -color 0xff0000 0xffa2a2 -size 1 2 -alpha 644 956 684 -gravity 0.5 -airfriction 0.7 -liquidfriction 0.8 -velocityoffset 0 0 80 -originjitter 16 16 16 -velocityjitter 424 424 624 -// debris + airfriction 0.700000 + alpha 644 956 684 + color 0xff0000 0xffa2a2 + count 16 + gravity 0.500000 + liquidfriction 0.800000 + originjitter 16 16 16 + size 1 2 + tex 40 40 + type spark + velocityjitter 424 424 624 + velocityoffset 0 0 80 effect nade_pink_explode -notunderwater -count 8 -type smoke -tex 71 73 -color 0xff0000 0xffa2a2 -size 20 40 -alpha 644 956 2500 -originjitter 64 64 64 -velocityjitter 324 324 324 -rotate -180 180 -100 100 - -effect nade_neutral_explode -countabsolute 1 -type decal -tex 8 16 -size 88 88 -alpha 256 256 0 -originjitter 26 26 26 -lightradius 300 -lightradiusfade 1500 -lightcolor 100 20 20 -// shockwave + alpha 644 956 2500 + color 0xff0000 0xffa2a2 + count 8 + notunderwater + originjitter 64 64 64 + rotate -180 180 -100 100 + size 20 40 + tex 71 73 + type smoke + velocityjitter 324 324 324 effect nade_neutral_explode -type smoke -countabsolute 1 -tex 33 33 -size 32 32 -sizeincrease 2200 -color 0xff0000 0xffa2a2 -alpha 80 80 650 -velocitymultiplier 44 -// fire + alpha 256 256 0 + countabsolute 1 + lightcolor 100 20 20 + lightradiusfade 1500 + lightradius 300 + originjitter 26 26 26 + size 88 88 + tex 8 16 + type decal effect nade_neutral_explode -notunderwater -count 16 -type smoke -color 0xFFFFFF 0xFFFFFF -tex 48 55 -size 20 24 -sizeincrease 555 -alpha 400 656 2000 -airfriction 30 -originjitter 50 50 50 -velocityjitter 320 320 320 -rotate -180 180 -9 9 -// fire stretched + alpha 80 80 650 + color 0xff0000 0xffa2a2 + countabsolute 1 + sizeincrease 1800 + size 32 32 + tex 33 33 + type smoke + velocitymultiplier 44 effect nade_neutral_explode -count 8 -type spark -tex 48 55 -color 0xFFFFFF 0xFFFFFF -size 60 90 -alpha 1500 3000 13000 -stretchfactor 80 -sizeincrease 40 -velocityjitter 30 30 30 -airfriction -9 -//smoke + airfriction 30 + alpha 400 656 2000 + color 0xFFFFFF 0xFFFFFF + count 16 + notunderwater + originjitter 50 50 50 + rotate -180 180 -9 9 + sizeincrease 555 + size 20 24 + tex 48 55 + type smoke + velocityjitter 320 320 320 effect nade_neutral_explode -type smoke -count 32 -blend alpha -tex 0 7 -size 60 30 -color 0x222222 0x000000 -alpha 128 328 390 -rotate -180 180 2 -2 -velocityjitter 200 200 200 -velocityoffset 0 0 180 -originjitter 50 50 10 -sizeincrease 50 -airfriction 0.04 -gravity 0.4 -// underwater bubbles + airfriction -9 + alpha 1500 3000 13000 + color 0xFFFFFF 0xFFFFFF + count 8 + sizeincrease 40 + size 60 90 + stretchfactor 80 + tex 48 55 + type spark + velocityjitter 30 30 30 effect nade_neutral_explode -underwater -count 32 -type bubble -tex 62 62 -color 0x404040 0x808080 -size 3 6 -alpha 128 256 64 -gravity -0.125 -bounce 1.5 -liquidfriction 0.25 -originjitter 16 16 16 -velocityjitter 196 196 196 -rotate 0 0 0 0 -// bouncing sparks + airfriction 0.040000 + alpha 128 328 390 + blend alpha + color 0x222222 0x000000 + count 32 + gravity 0.400000 + originjitter 50 50 10 + rotate -180 180 2 -2 + sizeincrease 50 + size 60 30 + tex 0 7 + type smoke + velocityjitter 200 200 200 + velocityoffset 0 0 180 effect nade_neutral_explode -notunderwater -count 8 -type spark -tex 40 40 -color 0xff0000 0xffa2a2 -size 1 2 -alpha 644 956 484 -gravity 1 -airfriction 1 -bounce 1.6 -liquidfriction 0.8 -velocityoffset 0 0 80 -originjitter 16 16 16 -velocityjitter 424 424 624 -// notbouncing sparks + alpha 128 256 64 + bounce 1.500000 + color 0x404040 0x808080 + count 32 + gravity -0.125000 + liquidfriction 0.250000 + originjitter 16 16 16 + size 3 6 + tex 62 62 + type bubble + underwater + velocityjitter 196 196 196 effect nade_neutral_explode -count 16 -type spark -tex 40 40 -color 0xff0000 0xffa2a2 -size 1 2 -alpha 644 956 684 -gravity 0.5 -airfriction 0.7 -liquidfriction 0.8 -velocityoffset 0 0 80 -originjitter 16 16 16 -velocityjitter 424 424 624 -// debris + airfriction 1 + alpha 644 956 484 + bounce 1.600000 + color 0xff0000 0xffa2a2 + count 8 + gravity 1 + liquidfriction 0.800000 + notunderwater + originjitter 16 16 16 + size 1 2 + tex 40 40 + type spark + velocityjitter 424 424 624 + velocityoffset 0 0 80 effect nade_neutral_explode -notunderwater -count 8 -type smoke -tex 71 73 -color 0xff0000 0xffa2a2 -size 20 40 -alpha 644 956 2500 -originjitter 64 64 64 -velocityjitter 324 324 324 -rotate -180 180 -100 100 - -// shockwave_attack -// used nowhere in code -effect shockwave_attack // glow and light - //countabsolute 1 - //type smoke - //color 0xcc0000 0xff0000 - //tex 65 65 - //size 10 15 - //alpha 256 512 6280 - //airfriction 10 - //sizeincrease 1.5 - //stretchfactor 2 - //lightradius 200 - //lightradiusfade 2000 - //lightcolor 3 0.1 0.1 -effect shockwave_attack // electricity - count 1 + airfriction 0.700000 + alpha 644 956 684 + color 0xff0000 0xffa2a2 + count 16 + gravity 0.500000 + liquidfriction 0.800000 + originjitter 16 16 16 + size 1 2 + tex 40 40 type spark - color 0xb44215 0xff0000 - tex 43 43 - size 5 7 - bounce 0 - alpha 4096 4096 20000 + velocityjitter 424 424 624 + velocityoffset 0 0 80 +effect nade_neutral_explode + alpha 644 956 2500 + color 0xff0000 0xffa2a2 + count 8 + notunderwater + originjitter 64 64 64 + rotate -180 180 -100 100 + size 20 40 + tex 71 73 + type smoke + velocityjitter 324 324 324 +effect shockwave_attack airfriction 1 + alpha 4096 4096 20000 + color 0xb44215 0xff0000 + count 1 originjitter 2 2 2 - velocityjitter 10 10 10 - velocitymultiplier 10 - sizeincrease 1.5 - stretchfactor 2.3 rotate -180 180 4000 -4000 -effect shockwave_attack // fire - count 1 + sizeincrease 1.500000 + size 5 7 + stretchfactor 2.300000 + tex 43 43 type spark - color 0xff4200 0xff0000 - tex 8 15 - size 7 9 - bounce 0 - alpha 4096 4096 20000 + velocityjitter 10 10 10 + velocitymultiplier 10 +effect shockwave_attack airfriction 1 + alpha 4096 4096 20000 + color 0xff4200 0xff0000 + count 1 originjitter 2 2 2 + sizeincrease 1.500000 + size 7 9 + stretchfactor 2 + tex 8 15 + type spark velocityjitter 10 10 10 velocitymultiplier 10 - sizeincrease 1.5 - stretchfactor 2 - -// ARC -// used in qcsrc/server/w_arc.qc -effect arc_lightning // impact decal - countabsolute 1 - type decal - tex 16 32 // fps killer, spamming decals like that - size 16 16 +effect arc_lightning alpha 32 32 0 - originjitter 2 2 2 - lightradius 50 + countabsolute 1 + lightcolor 3.1 4.4 10 lightradiusfade 200 - lightcolor 3.125 4.375 10 - -effect arc_lightning // impact sparks - type static + lightradius 50 + originjitter 2 2 2 + size 16 16 + tex 16 32 + type decal +effect arc_lightning + airfriction 110 + alpha 256 256 512 + color 0xDDFDFF 0xFDFDFF count 100 - tex 71 74 + originjitter 20 20 20 rotate 0 360 -36000 36000 - stretchfactor 1 - size 0 5 sizeincrease -5 - color 0xDDFDFF 0xFDFDFF - alpha 256 256 512 - originjitter 20 20 20 + size 0 5 + stretchfactor 1 + tex 71 74 + type static velocityjitter 250 250 250 velocitymultiplier 100 - airfriction 110 - -effect arc_lightning // impact sparks (underwater) - type static - underwater +effect arc_lightning + airfriction 5 + alpha 256 256 512 + color 0xDDFDFF 0xFDFDFF count 100 - tex 71 74 + liquidfriction 5 + orientation spark + originjitter 20 20 20 rotate 0 360 -36000 36000 - stretchfactor 1 - size 0 5 sizeincrease -5 - color 0xDDFDFF 0xFDFDFF - alpha 256 256 512 - originjitter 20 20 20 + size 0 5 + stretchfactor 1 + tex 71 74 + type static + underwater velocityjitter 250 250 250 - // underwater - orientation spark velocitymultiplier 20 - airfriction 5 - liquidfriction 5 - -effect arc_beam // sparks on beam - type spark - stretchfactor 1 - rotate 0 360 360 1000 - time 0.05 0.05 - color 0xfafad2 0xffffff - alpha 256 256 16384 +effect arc_beam airfriction -10 - originoffset 0 0 0 - relativeoriginoffset 10 0 0 + alpha 256 256 16384 + color 0xfafad2 0xffffff originjitter 3 3 3 - velocityoffset 0 0 0 - velocityjitter 100 100 100 - velocitymultiplier 200 - //lightcolor 0 0 0 - trailspacing 10 + relativeoriginoffset 10 0 0 + rotate 0 360 360 1000 + stretchfactor 1 tex 71 74 - -effect arc_beam // sparks on beam (underwater) + time 0.050000 0.050000 + trailspacing 10 type spark - underwater - stretchfactor 1 - rotate 0 360 360 1000 - time 0.001 0.001 - color 0xfafad2 0xffffff + velocityjitter 100 100 100 + velocitymultiplier 200 +effect arc_beam alpha 256 256 16384 + color 0xfafad2 0xffffff liquidfriction -10 - originoffset 0 0 0 - relativeoriginoffset 10 0 0 originjitter 30 30 30 - velocityoffset 0 0 0 + relativeoriginoffset 10 0 0 + rotate 0 360 360 1000 + stretchfactor 1 + tex 71 74 + time 0.001000 0.001000 + trailspacing 10 + type spark + underwater velocityjitter 100 100 100 velocitymultiplier 200 - //lightcolor 0 0 0 - trailspacing 10 - tex 71 74 - -// ARC healing effect -effect arc_beam_heal // bubble this... - type static - trailspacing 1500 - tex 74 74 - color 0x20FF20 0x40FF40 - size 0.1 0.1 - sizeincrease 20 - alpha 2048 2048 256 - //time 0.8 0.8 +effect arc_beam_heal airfriction -20 - type smoke + alpha 2048 2048 256 + color 0x20FF20 0x40FF40 relativeoriginoffset 5 0 0 relativevelocityoffset 100 0 0 + sizeincrease 20 + size 0.100000 0.100000 + tex 74 74 + trailspacing 1500 + type smoke velocityjitter 3 3 3 velocitymultiplier 200 - -effect arc_beam_healimpact // healing "aura" - type smoke - countabsolute 1 - tex 33 33 - size 32 32 - sizeincrease -1000 - color 0x00ff00 0x84c52f +effect arc_beam_healimpact alpha 40 40 350 - velocitymultiplier 44 - lightradius 20 + color 0x00ff00 0x84c52f + countabsolute 1 + lightcolor 0 4.4 0 lightradiusfade 150 - lightcolor 0 4.375 0 - -effect arc_beam_healimpact // rising "smoke" + lightradius 20 + sizeincrease -1000 + size 32 32 + tex 33 33 type smoke - count 15 - color 0x00ff00 0x84c52f - tex 40 40 - size 0.5 1 - alpha 200 456 512 + velocitymultiplier 44 +effect arc_beam_healimpact airfriction 3 + alpha 200 456 512 + color 0x00ff00 0x84c52f + count 15 gravity -2 - velocityjitter 120 120 420 rotate -180 180 -90 90 - -effect arc_smoke // arc heat smoke (notunderwater) - notunderwater - count 2 + size 0.500000 1 + tex 40 40 type smoke - tex 0 8 + velocityjitter 120 120 420 +effect arc_smoke + airfriction 1 + alpha 32 64 48 color 0x4c453f 0x2a241f - size 5 10 + count 2 + gravity -0.125000 + notunderwater + rotate 0 360 -180 180 sizeincrease 10 - alpha 32 64 48 - gravity -0.125 - originjitter 0 0 0 + size 5 10 + tex 0 8 + type smoke velocityjitter 0 0 16 - airfriction 1 - rotate 0 360 -180 180 - -effect arc_smoke // arc heat bubbles (underwater) - underwater - count 2 - type bubble - tex 62 62 - color 0x404040 0x808080 - size 0.1 1 +effect arc_smoke alpha 170 256 64 - gravity -0.125 - bounce 1.5 - liquidfriction 0.25 + bounce 1.500000 + color 0x404040 0x808080 + count 2 + gravity -0.125000 + liquidfriction 0.250000 originjitter 6 6 6 + size 0.100000 1 + tex 62 62 + type bubble + underwater velocityjitter 16 16 16 - -effect arc_overheat // arc overheat electric bolts - tex 43 43 - count 24 - type spark - color 0xffffff 0x9271fb - size 6 12 - sizeincrease -24 - alpha 128 128 292 - gravity -0.4 +effect arc_overheat airfriction 5 + alpha 128 128 292 + color 0xffffff 0x9271fb + count 24 + gravity -0.400000 liquidfriction 10 - velocityjitter 256 256 256 originjitter 10 10 10 - -effect arc_overheat_fire // arc overheat bouncing sparks - count 1 + sizeincrease -24 + size 6 12 + tex 43 43 type spark - color 0x4444ff 0xeeeeff - size 0.4 1 + velocityjitter 256 256 256 +effect arc_overheat_fire alpha 0 256 640 + bounce 1.500000 + color 0x4444ff 0xeeeeff + count 1 gravity 1 - bounce 1.5 - velocityoffset 0 0 80 - velocityjitter 92 92 92 - originjitter 6 6 6 liquidfriction 5 + originjitter 6 6 6 + size 0.400000 1 + type spark + velocityjitter 92 92 92 velocitymultiplier 80 - -// yellowflag_touch -- effects for touching the yellow flag -// used nowhere in code -effect yellowflag_touch -count 35 -type spark -tex 40 40 -color 0xFFFF0F 0xFFFF0F -size 1 3 -alpha 0 256 556 -gravity 1 -bounce 1.5 -originjitter 1 1 1 -velocityjitter 300 300 300 -velocitymultiplier 0.5 -airfriction 3 - -// pinkflag_touch -- effects for touching the pink flag -// used nowhere in code -effect pinkflag_touch -count 35 -type spark -tex 40 40 -color 0xFF0FFF 0xFF0FFF -size 1 3 -alpha 0 256 556 -gravity 1 -bounce 1.5 -originjitter 1 1 1 -velocityjitter 300 300 300 -velocitymultiplier 0.5 -airfriction 3 - -// neutralflag_touch -- effects for touching the neutral flag -// used nowhere in code -effect neutralflag_touch -count 35 -type spark -tex 40 40 -color 0xFFFFFF 0xFFFFFF -size 1 3 -alpha 0 256 556 -gravity 1 -bounce 1.5 -originjitter 1 1 1 -velocityjitter 300 300 300 -velocitymultiplier 0.5 -airfriction 3 - -// yellow_pass -// used nowhere in code -effect yellow_pass -trailspacing 64 -color 0xFFFF0F 0xFFFF0F -size 2 2 -tex 32 32 -alpha 64 128 64 -airfriction 5 -sizeincrease 2 -type static -effect yellow_pass -trailspacing 12 -color 0xFFFF0F 0xFFFF0F -size 1 1 -tex 0 8 -alpha 32 64 32 -airfriction 9 -sizeincrease 8 -velocityjitter 64 64 64 -type static -effect yellow_pass -trailspacing 12 -color 0xFFFF0F 0xFFFF0F -size 4 4 -//tex 48 55 -alpha 256 256 1280 -type static - -// pink_pass -// used nowhere in code -effect pink_pass -trailspacing 64 -color 0xFFFFFF 0xFFFFFF -size 2 2 -tex 32 32 -alpha 64 128 64 -airfriction 5 -sizeincrease 2 -type static -effect pink_pass -trailspacing 12 -color 0xFFFFFF 0xFFFFFF -size 1 1 -tex 0 8 -alpha 32 64 32 -airfriction 9 -sizeincrease 8 -velocityjitter 64 64 64 -type static -effect pink_pass -trailspacing 12 -color 0xFFFFFF 0xFFFFFF -size 4 4 -//tex 48 55 -alpha 256 256 1280 -type static - -// neutral_pass -// used nowhere in code -effect neutral_pass -trailspacing 64 -color 0xFFFFFF 0xFFFFFF -size 2 2 -tex 32 32 -alpha 64 128 64 -airfriction 5 -sizeincrease 2 -type static -effect neutral_pass -trailspacing 12 -color 0xFFFFFF 0xFFFFFF -size 1 1 -tex 0 8 -alpha 32 64 32 -airfriction 9 -sizeincrease 8 -velocityjitter 64 64 64 -type static -effect neutral_pass -trailspacing 12 -color 0xFFFFFF 0xFFFFFF -size 4 4 -//tex 48 55 -alpha 256 256 1280 -type static - -// yellow_cap -- yellow team capture effect -effect yellow_cap -count 500 -type spark -tex 64 64 -color 0xFFFF0F 0xFFFF0F -size 1 1 -alpha 0 256 100 -stretchfactor 2 -//gravity 1 -bounce 1.5 -originjitter 1 1 1 -velocityjitter 1000 1000 1500 -velocitymultiplier 0.5 -airfriction 2 -stretchfactor 0.6 -effect yellow_cap -countabsolute 1 -type smoke -tex 65 65 -size 150 150 -alpha 190 190 180 -sizeincrease -80 -color 0xFFFF0F 0xFFFF0F - -// pink_cap -- pink team capture effect -effect pink_cap -count 500 -type spark -tex 64 64 -color 0xFF0FFF 0xFF0FFF -size 1 1 -alpha 0 256 100 -stretchfactor 2 -//gravity 1 -bounce 1.5 -originjitter 1 1 1 -velocityjitter 1000 1000 1500 -velocitymultiplier 0.5 -airfriction 2 -stretchfactor 0.6 -effect pink_cap -countabsolute 1 -type smoke -tex 65 65 -size 150 150 -alpha 190 190 180 -sizeincrease -80 -color 0xFF0FFF 0xFF0FFF - -// relic_resistance effect, used by the relics mutator -// used in qcsrc/server/mutators/relics.qc: pointparticles(particleeffectnum(mdl), e.origin, '0 0 0', 1); + velocityoffset 0 0 80 effect relic_resistance -count 20 -type static -color 0x00ff80 0x00ff80 -size 1.5 1.5 -alpha 128 256 256 -gravity -0.1 -airfriction 0.2 -liquidfriction 0.8 -originjitter 8 8 32 -velocityjitter 64 64 32 - -// relic_regeneration effect, used by the relics mutator -// used in qcsrc/server/mutators/relics.qc: pointparticles(particleeffectnum(mdl), e.origin, '0 0 0', 1); + airfriction 0.200000 + alpha 128 256 256 + color 0x00ff80 0x00ff80 + count 20 + gravity -0.100000 + liquidfriction 0.800000 + originjitter 8 8 32 + size 1.500000 1.500000 + type static + velocityjitter 64 64 32 effect relic_regeneration -count 1 -type static -color 0x00ffff 0x00ffff -size 1.5 1.5 -alpha 128 256 256 -gravity -0.1 -airfriction 0.2 -liquidfriction 0.8 -originjitter 8 8 32 -velocityjitter 64 64 32 - -// relic_vempire effect, used by the relics mutator -// used in qcsrc/server/mutators/relics.qc: pointparticles(particleeffectnum(mdl), e.origin, '0 0 0', 1); + airfriction 0.200000 + alpha 128 256 256 + color 0x00ffff 0x00ffff + count 1 + gravity -0.100000 + liquidfriction 0.800000 + originjitter 8 8 32 + size 1.500000 1.500000 + type static + velocityjitter 64 64 32 effect relic_vampire -count 20 -type static -color 0xff00ff 0xff00ff -size 1.5 1.5 -alpha 128 256 256 -gravity -0.1 -airfriction 0.2 -liquidfriction 0.8 -originjitter 8 8 32 -velocityjitter 64 64 32 - -// relic_ammo effect, used by the relics mutator -// used in qcsrc/server/mutators/relics.qc: pointparticles(particleeffectnum(mdl), e.origin, '0 0 0', 1); + airfriction 0.200000 + alpha 128 256 256 + color 0xff00ff 0xff00ff + count 20 + gravity -0.100000 + liquidfriction 0.800000 + originjitter 8 8 32 + size 1.500000 1.500000 + type static + velocityjitter 64 64 32 effect relic_ammo -count 1 -type static -color 0x80ff00 0x80ff00 -size 1.5 1.5 -alpha 128 256 256 -gravity -0.1 -airfriction 0.2 -liquidfriction 0.8 -originjitter 8 8 32 -velocityjitter 64 64 32 - -// relic_damage effect, used by the relics mutator -// used in qcsrc/server/mutators/relics.qc: pointparticles(particleeffectnum(mdl), e.origin, '0 0 0', 1); + airfriction 0.200000 + alpha 128 256 256 + color 0x80ff00 0x80ff00 + count 1 + gravity -0.100000 + liquidfriction 0.800000 + originjitter 8 8 32 + size 1.500000 1.500000 + type static + velocityjitter 64 64 32 effect relic_damage -count 20 -type static -color 0xff0000 0xff0000 -size 1.5 1.5 -alpha 128 256 256 -gravity -0.1 -airfriction 0.2 -liquidfriction 0.8 -originjitter 8 8 32 -velocityjitter 64 64 32 - -// relic_splashdamage effect, used by the relics mutator -// used in qcsrc/server/mutators/relics.qc: pointparticles(particleeffectnum(mdl), e.origin, '0 0 0', 1); + airfriction 0.200000 + alpha 128 256 256 + color 0xff0000 0xff0000 + count 20 + gravity -0.100000 + liquidfriction 0.800000 + originjitter 8 8 32 + size 1.500000 1.500000 + type static + velocityjitter 64 64 32 effect relic_ssplashdamage -count 20 -type static -color 0xff8000 0xff8000 -size 1.5 1.5 -alpha 128 256 256 -gravity -0.1 -airfriction 0.2 -liquidfriction 0.8 -originjitter 8 8 32 -velocityjitter 64 64 32 - -// relic_firingspeed effect, used by the relics mutator -// used in qcsrc/server/mutators/relics.qc: pointparticles(particleeffectnum(mdl), e.origin, '0 0 0', 1); + airfriction 0.200000 + alpha 128 256 256 + color 0xff8000 0xff8000 + count 20 + gravity -0.100000 + liquidfriction 0.800000 + originjitter 8 8 32 + size 1.500000 1.500000 + type static + velocityjitter 64 64 32 effect relic_firingspeed -count 20 -type static -color 0xffff00 0xffff00 -size 1.5 1.5 -alpha 128 256 256 -gravity -0.1 -airfriction 0.2 -liquidfriction 0.8 -originjitter 8 8 32 -velocityjitter 64 64 32 - -// relic_disability effect, used by the relics mutator -// used in qcsrc/server/mutators/relics.qc: pointparticles(particleeffectnum(mdl), e.origin, '0 0 0', 1); + airfriction 0.200000 + alpha 128 256 256 + color 0xffff00 0xffff00 + count 20 + gravity -0.100000 + liquidfriction 0.800000 + originjitter 8 8 32 + size 1.500000 1.500000 + type static + velocityjitter 64 64 32 effect relic_disability -count 20 -type static -color 0x0000ff 0x0000ff -size 1.5 1.5 -alpha 128 256 256 -gravity -0.1 -airfriction 0.2 -liquidfriction 0.8 -originjitter 8 8 32 -velocityjitter 64 64 32 - -// relic_disability_curse effect, used by the relics mutator -// used in qcsrc/server/mutators/relics.qc: pointparticles(particleeffectnum(mdl), e.origin, '0 0 0', 1); + airfriction 0.200000 + alpha 128 256 256 + color 0x0000ff 0x0000ff + count 20 + gravity -0.100000 + liquidfriction 0.800000 + originjitter 8 8 32 + size 1.500000 1.500000 + type static + velocityjitter 64 64 32 effect relic_disability_curse -count 1 -type static -color 0x000080 0x000080 -size 1.5 1.5 -alpha 128 256 256 -gravity -0.1 -airfriction 0.2 -liquidfriction 0.8 -originjitter 8 8 32 -velocityjitter 64 64 32 - -// relic_teamboost effect, used by the relics mutator -// used in qcsrc/server/mutators/relics.qc: pointparticles(particleeffectnum(mdl), e.origin, '0 0 0', 1); + airfriction 0.200000 + alpha 128 256 256 + color 0x000080 0x000080 + count 1 + gravity -0.100000 + liquidfriction 0.800000 + originjitter 8 8 32 + size 1.500000 1.500000 + type static + velocityjitter 64 64 32 effect relic_teamboost -count 20 -type static -color 0xffffff 0xffffff -size 1.5 1.5 -alpha 128 256 256 -gravity -0.1 -airfriction 0.2 -liquidfriction 0.8 -originjitter 8 8 32 -velocityjitter 64 64 32 - -// relic_teamboost_boost effect, used by the relics mutator -// used in qcsrc/server/mutators/relics.qc: pointparticles(particleeffectnum(mdl), e.origin, '0 0 0', 1); + airfriction 0.200000 + alpha 128 256 256 + color 0xffffff 0xffffff + count 20 + gravity -0.100000 + liquidfriction 0.800000 + originjitter 8 8 32 + size 1.500000 1.500000 + type static + velocityjitter 64 64 32 effect relic_teamboost_boost -count 1 -type static -color 0x808080 0x808080 -size 1.5 1.5 -alpha 128 256 256 -gravity -0.1 -airfriction 0.2 -liquidfriction 0.8 -originjitter 8 8 32 -velocityjitter 64 64 32 - -// relic_speed effect, used by the relics mutator -// used in qcsrc/server/mutators/relics.qc: pointparticles(particleeffectnum(mdl), e.origin, '0 0 0', 1); + airfriction 0.200000 + alpha 128 256 256 + color 0x808080 0x808080 + count 1 + gravity -0.100000 + liquidfriction 0.800000 + originjitter 8 8 32 + size 1.500000 1.500000 + type static + velocityjitter 64 64 32 effect relic_speed -count 1 -type static -color 0x80ffff 0x80ffff -size 1.5 1.5 -alpha 128 256 256 -gravity -0.1 -airfriction 0.2 -liquidfriction 0.8 -originjitter 8 8 32 -velocityjitter 64 64 32 - -// relic_jump effect, used by the relics mutator -// used in qcsrc/server/mutators/relics.qc: pointparticles(particleeffectnum(mdl), e.origin, '0 0 0', 1); + airfriction 0.200000 + alpha 128 256 256 + color 0x80ffff 0x80ffff + count 1 + gravity -0.100000 + liquidfriction 0.800000 + originjitter 8 8 32 + size 1.500000 1.500000 + type static + velocityjitter 64 64 32 effect relic_jump -count 20 -type static -color 0xffff80 0xffff80 -size 1.5 1.5 -alpha 128 256 256 -gravity -0.1 -airfriction 0.2 -liquidfriction 0.8 -originjitter 8 8 32 -velocityjitter 64 64 32 - -// relic_flight effect, used by the relics mutator -// used in qcsrc/server/mutators/relics.qc: pointparticles(particleeffectnum(mdl), e.origin, '0 0 0', 1); + airfriction 0.200000 + alpha 128 256 256 + color 0xffff80 0xffff80 + count 20 + gravity -0.100000 + liquidfriction 0.800000 + originjitter 8 8 32 + size 1.500000 1.500000 + type static + velocityjitter 64 64 32 effect relic_flight -count 1 -type static -color 0x8080ff 0x8080ff -size 1.5 1.5 -alpha 128 256 256 -gravity -0.1 -airfriction 0.2 -liquidfriction 0.8 -originjitter 8 8 32 -velocityjitter 64 64 32 - -// relic_radioactive effect, used by the relics mutator -// used in qcsrc/server/mutators/relics.qc: pointparticles(particleeffectnum(mdl), e.origin, '0 0 0', 1); + airfriction 0.200000 + alpha 128 256 256 + color 0x8080ff 0x8080ff + count 1 + gravity -0.100000 + liquidfriction 0.800000 + originjitter 8 8 32 + size 1.500000 1.500000 + type static + velocityjitter 64 64 32 effect relic_radioactive -count 20 -type static -color 0x00ff00 0x00ff00 -size 1.5 1.5 -alpha 128 256 256 -gravity -0.1 -airfriction 0.2 -liquidfriction 0.8 -originjitter 8 8 32 -velocityjitter 64 64 32 - -// relic_resurrection effect, used by the relics mutator -// used in qcsrc/server/mutators/relics.qc: pointparticles(particleeffectnum(mdl), e.origin, '0 0 0', 1); + airfriction 0.200000 + alpha 128 256 256 + color 0x00ff00 0x00ff00 + count 20 + gravity -0.100000 + liquidfriction 0.800000 + originjitter 8 8 32 + size 1.500000 1.500000 + type static + velocityjitter 64 64 32 effect relic_resurrection -count 20 -type static -color 0xff0080 0xff0080 -size 1.5 1.5 -alpha 128 256 256 -gravity -0.1 -airfriction 0.2 -liquidfriction 0.8 -originjitter 8 8 32 -velocityjitter 64 64 32 - -// relic_vengeance effect, used by the relics mutator -// used in qcsrc/server/mutators/relics.qc: pointparticles(particleeffectnum(mdl), e.origin, '0 0 0', 1); + airfriction 0.200000 + alpha 128 256 256 + color 0xff0080 0xff0080 + count 20 + gravity -0.100000 + liquidfriction 0.800000 + originjitter 8 8 32 + size 1.500000 1.500000 + type static + velocityjitter 64 64 32 effect relic_vengeance -count 20 -type static -color 0xff8080 0xff8080 -size 1.5 1.5 -alpha 128 256 256 -gravity -0.1 -airfriction 0.2 -liquidfriction 0.8 -originjitter 8 8 32 -velocityjitter 64 64 32 - -// rocketminsta laser trail - red + airfriction 0.200000 + alpha 128 256 256 + color 0xff8080 0xff8080 + count 20 + gravity -0.100000 + liquidfriction 0.800000 + originjitter 8 8 32 + size 1.500000 1.500000 + type static + velocityjitter 64 64 32 effect rocketminsta_laser_red -trailspacing 2 -type static -color 0xFF0F0F 0xFF0F0F -size 3 3 -tex 38 38 -alpha 256 256 968 -//velocityjitter 16 16 16 -lightradius 90 -lighttime 0 -lightcolor 1.5 3 6 -velocitymultiplier -0.1 -// bright sparks + alpha 256 256 968 + color 0xFF0F0F 0xFF0F0F + lightcolor 1.5 3 6 + lightradius 90 + size 3 3 + tex 38 38 + trailspacing 2 + type static + velocitymultiplier -0.100000 effect rocketminsta_laser_red -trailspacing 12 -count 1.5 -type snow -tex 42 42 -color 0xFF0F0F 0xFF0F0F -size 2 4 -sizeincrease -20 -alpha 444 512 1866 -bounce 1 -velocityoffset 0 0 15 -airfriction 12 -originjitter 1 1 1 -velocityjitter 50 50 50 - -// rocketminsta laser trail - blue + airfriction 12 + alpha 444 512 1866 + bounce 1 + color 0xFF0F0F 0xFF0F0F + count 1.500000 + originjitter 1 1 1 + sizeincrease -20 + size 2 4 + tex 42 42 + trailspacing 12 + type snow + velocityjitter 50 50 50 + velocityoffset 0 0 15 effect rocketminsta_laser_blue -trailspacing 2 -type static -color 0x0F0FFF 0x0F0FFF -size 3 3 -tex 38 38 -alpha 256 256 968 -//velocityjitter 16 16 16 -lightradius 90 -lighttime 0 -lightcolor 1.5 3 6 -velocitymultiplier -0.1 -// bright sparks + alpha 256 256 968 + color 0x0F0FFF 0x0F0FFF + lightcolor 1.5 3 6 + lightradius 90 + size 3 3 + tex 38 38 + trailspacing 2 + type static + velocitymultiplier -0.100000 effect rocketminsta_laser_blue -trailspacing 12 -count 1.5 -type snow -tex 42 42 -color 0x0F0FFF 0x0F0FFF -size 2 4 -sizeincrease -20 -alpha 444 512 1866 -bounce 1 -velocityoffset 0 0 15 -airfriction 12 -originjitter 1 1 1 -velocityjitter 50 50 50 - -// rocketminsta laser trail - yellow + airfriction 12 + alpha 444 512 1866 + bounce 1 + color 0x0F0FFF 0x0F0FFF + count 1.500000 + originjitter 1 1 1 + sizeincrease -20 + size 2 4 + tex 42 42 + trailspacing 12 + type snow + velocityjitter 50 50 50 + velocityoffset 0 0 15 effect rocketminsta_laser_yellow -trailspacing 2 -type static -color 0xFFFF0F 0xFFFF0F -size 3 3 -tex 38 38 -alpha 256 256 968 -//velocityjitter 16 16 16 -lightradius 90 -lighttime 0 -lightcolor 1.5 3 6 -velocitymultiplier -0.1 -// bright sparks + alpha 256 256 968 + color 0xFFFF0F 0xFFFF0F + lightcolor 1.5 3 6 + lightradius 90 + size 3 3 + tex 38 38 + trailspacing 2 + type static + velocitymultiplier -0.100000 effect rocketminsta_laser_yellow -trailspacing 12 -count 1.5 -type snow -tex 42 42 -color 0xFFFF0F 0xFFFF0F -size 2 4 -sizeincrease -20 -alpha 444 512 1866 -bounce 1 -velocityoffset 0 0 15 -airfriction 12 -originjitter 1 1 1 -velocityjitter 50 50 50 - -// rocketminsta laser trail - pink + airfriction 12 + alpha 444 512 1866 + bounce 1 + color 0xFFFF0F 0xFFFF0F + count 1.500000 + originjitter 1 1 1 + sizeincrease -20 + size 2 4 + tex 42 42 + trailspacing 12 + type snow + velocityjitter 50 50 50 + velocityoffset 0 0 15 effect rocketminsta_laser_pink -trailspacing 2 -type static -color 0xFF0FFF 0xFF0FFF -size 3 3 -tex 38 38 -alpha 256 256 968 -//velocityjitter 16 16 16 -lightradius 90 -lighttime 0 -lightcolor 1.5 3 6 -velocitymultiplier -0.1 -// bright sparks + alpha 256 256 968 + color 0xFF0FFF 0xFF0FFF + lightcolor 1.5 3 6 + lightradius 90 + size 3 3 + tex 38 38 + trailspacing 2 + type static + velocitymultiplier -0.100000 effect rocketminsta_laser_pink -trailspacing 12 -count 1.5 -type snow -tex 42 42 -color 0xFF0FFF 0xFF0FFF -size 2 4 -sizeincrease -20 -alpha 444 512 1866 -bounce 1 -velocityoffset 0 0 15 -airfriction 12 -originjitter 1 1 1 -velocityjitter 50 50 50 - -// rocketminsta laser trail - neutral + airfriction 12 + alpha 444 512 1866 + bounce 1 + color 0xFF0FFF 0xFF0FFF + count 1.500000 + originjitter 1 1 1 + sizeincrease -20 + size 2 4 + tex 42 42 + trailspacing 12 + type snow + velocityjitter 50 50 50 + velocityoffset 0 0 15 effect rocketminsta_laser_neutral -trailspacing 2 -type static -color 0xFFFFFF 0xFFFFFF -size 3 3 -tex 38 38 -alpha 256 256 968 -//velocityjitter 16 16 16 -lightradius 90 -lighttime 0 -lightcolor 1.5 3 6 -velocitymultiplier -0.1 -// bright sparks + alpha 256 256 968 + color 0xFFFFFF 0xFFFFFF + lightcolor 1.5 3 6 + lightradius 90 + size 3 3 + tex 38 38 + trailspacing 2 + type static + velocitymultiplier -0.100000 effect rocketminsta_laser_neutral -trailspacing 12 -count 1.5 -type snow -tex 42 42 -color 0xFFFFFF 0xFFFFFF -size 2 4 -sizeincrease -20 -alpha 444 512 1866 -bounce 1 -velocityoffset 0 0 15 -airfriction 12 -originjitter 1 1 1 -velocityjitter 50 50 50 + airfriction 12 + alpha 444 512 1866 + bounce 1 + color 0xFFFFFF 0xFFFFFF + count 1.500000 + originjitter 1 1 1 + sizeincrease -20 + size 2 4 + tex 42 42 + trailspacing 12 + type snow + velocityjitter 50 50 50 + velocityoffset 0 0 15 diff --git a/gfx/hud/default/checkmark.tga b/gfx/hud/default/checkmark.tga new file mode 100644 index 0000000000..71cbd68a71 Binary files /dev/null and b/gfx/hud/default/checkmark.tga differ diff --git a/gfx/hud/default/minigames/qto/board.jpg b/gfx/hud/default/minigames/qto/board.jpg deleted file mode 100644 index cf8fe0a778..0000000000 Binary files a/gfx/hud/default/minigames/qto/board.jpg and /dev/null differ diff --git a/gfx/hud/default/minigames/qto/board_alpha.jpg b/gfx/hud/default/minigames/qto/board_alpha.jpg deleted file mode 100644 index 44a87081f0..0000000000 Binary files a/gfx/hud/default/minigames/qto/board_alpha.jpg and /dev/null differ diff --git a/gfx/hud/default/minigames/qto/icon.jpg b/gfx/hud/default/minigames/qto/icon.jpg deleted file mode 100644 index a534f488cf..0000000000 Binary files a/gfx/hud/default/minigames/qto/icon.jpg and /dev/null differ diff --git a/gfx/hud/default/minigames/qto/icon_notif.jpg b/gfx/hud/default/minigames/qto/icon_notif.jpg deleted file mode 100644 index 90e0e2ee75..0000000000 Binary files a/gfx/hud/default/minigames/qto/icon_notif.jpg and /dev/null differ diff --git a/gfx/hud/default/minigames/qto/icon_notif_alpha.jpg b/gfx/hud/default/minigames/qto/icon_notif_alpha.jpg deleted file mode 100644 index 040990f6d5..0000000000 Binary files a/gfx/hud/default/minigames/qto/icon_notif_alpha.jpg and /dev/null differ diff --git a/gfx/hud/default/minigames/qto/piece0.tga b/gfx/hud/default/minigames/qto/piece0.tga deleted file mode 100644 index fad7dbdb29..0000000000 Binary files a/gfx/hud/default/minigames/qto/piece0.tga and /dev/null differ diff --git a/gfx/hud/default/minigames/qto/piece1.tga b/gfx/hud/default/minigames/qto/piece1.tga deleted file mode 100644 index 80a34c21d9..0000000000 Binary files a/gfx/hud/default/minigames/qto/piece1.tga and /dev/null differ diff --git a/gfx/hud/default/minigames/snake/board.jpg b/gfx/hud/default/minigames/snake/board.jpg new file mode 100644 index 0000000000..dfc5c3cfac Binary files /dev/null and b/gfx/hud/default/minigames/snake/board.jpg differ diff --git a/gfx/hud/default/minigames/snake/board_alpha.jpg b/gfx/hud/default/minigames/snake/board_alpha.jpg new file mode 100644 index 0000000000..44a87081f0 Binary files /dev/null and b/gfx/hud/default/minigames/snake/board_alpha.jpg differ diff --git a/gfx/hud/default/minigames/snake/body.tga b/gfx/hud/default/minigames/snake/body.tga new file mode 100644 index 0000000000..b8064cc40c Binary files /dev/null and b/gfx/hud/default/minigames/snake/body.tga differ diff --git a/gfx/hud/default/minigames/snake/head.tga b/gfx/hud/default/minigames/snake/head.tga new file mode 100644 index 0000000000..0679f84e63 Binary files /dev/null and b/gfx/hud/default/minigames/snake/head.tga differ diff --git a/gfx/hud/default/minigames/snake/icon.jpg b/gfx/hud/default/minigames/snake/icon.jpg new file mode 100644 index 0000000000..14252ae109 Binary files /dev/null and b/gfx/hud/default/minigames/snake/icon.jpg differ diff --git a/gfx/hud/default/minigames/snake/icon_notif.jpg b/gfx/hud/default/minigames/snake/icon_notif.jpg new file mode 100644 index 0000000000..988b6db680 Binary files /dev/null and b/gfx/hud/default/minigames/snake/icon_notif.jpg differ diff --git a/gfx/hud/default/minigames/snake/icon_notif_alpha.jpg b/gfx/hud/default/minigames/snake/icon_notif_alpha.jpg new file mode 100644 index 0000000000..040990f6d5 Binary files /dev/null and b/gfx/hud/default/minigames/snake/icon_notif_alpha.jpg differ diff --git a/gfx/hud/default/minigames/snake/mouse.tga b/gfx/hud/default/minigames/snake/mouse.tga new file mode 100644 index 0000000000..eda8ef7de3 Binary files /dev/null and b/gfx/hud/default/minigames/snake/mouse.tga differ diff --git a/gfx/hud/default/minigames/snake/tail.tga b/gfx/hud/default/minigames/snake/tail.tga new file mode 100644 index 0000000000..71a790152f Binary files /dev/null and b/gfx/hud/default/minigames/snake/tail.tga differ diff --git a/gfx/hud/default/minigames/snake/tongue.tga b/gfx/hud/default/minigames/snake/tongue.tga new file mode 100644 index 0000000000..9818d4efbd Binary files /dev/null and b/gfx/hud/default/minigames/snake/tongue.tga differ diff --git a/minigames.cfg b/minigames.cfg index 9922d7e567..6dfec5088f 100644 --- a/minigames.cfg +++ b/minigames.cfg @@ -11,4 +11,11 @@ set sv_minigames_pong_ball_radius 0.03125 "Ball radius relative to the board s set sv_minigames_pong_ball_number 1 "Number of balls to be played at once" set sv_minigames_pong_ai_thinkspeed 0.1 "Seconds between AI actions" -set sv_minigames_pong_ai_tolerance 0.33 "Distance of the ball relative to the paddle size" \ No newline at end of file +set sv_minigames_pong_ai_tolerance 0.33 "Distance of the ball relative to the paddle size" + + +// Snake? Snake! SNAAAAKE!! +set sv_minigames_snake_wrap 0 "Wrap around the edges of the screen instead of dying on touch" +set sv_minigames_snake_delay_initial 0.7 "Initial delay between snake movement" +set sv_minigames_snake_delay_multiplier 50 "Multiplier of incremental of movement speed (player_score / cvar)" +set sv_minigames_snake_delay_min 0.1 "Minimum delay between snake movement (at fastest rate)" diff --git a/monsters.cfg b/monsters.cfg index 9d961c0ad6..2cb6c3e7d9 100644 --- a/monsters.cfg +++ b/monsters.cfg @@ -102,6 +102,7 @@ set g_monsters_spawnshieldtime 2 set g_monsters_typefrag 1 set g_monsters_target_range 2000 set g_monsters_target_infront 0 +set g_monsters_target_infront_range 0.3 set g_monsters_attack_range 120 set g_monsters_respawn 1 set g_monsters_respawn_delay 20 diff --git a/qcsrc/Makefile b/qcsrc/Makefile index 6dd476c2d3..51440d4a3c 100644 --- a/qcsrc/Makefile +++ b/qcsrc/Makefile @@ -9,32 +9,34 @@ QCCVERSIONFILE := qccversion.$(shell (cd server && $(QCC) --version) > qccversio QCCFLAGS_WTFS ?= \ -Wno-field-redeclared -QCCFLAGS ?= \ - -std=gmqcc \ - -O3 -flno \ - -Werror -fno-bail-on-werror -Wall \ - -fftepp -fftepp-predefs -Wcpp -futf8 -frelaxed-switch -freturn-assignments \ - $(QCCFLAGS_WTFS) \ - $(QCCFLAGS_FEATURES) \ - $(QCCFLAGS_EXTRA) $(QCCFLAGS_WATERMARK) - QCCFLAGS_FEATURES ?= \ -DVEHICLES_ENABLED=1 \ -DVEHICLES_USE_ODE=0 \ -DBUILD_MOD=$(BUILD_MOD) +QCCFLAGS ?= \ + -std=gmqcc \ + -O3 \ + -Werror -Wall -Wcpp \ + $(QCCFLAGS_WTFS) \ + -fftepp -flno -futf8 -fno-bail-on-werror -fftepp-predefs \ + -frelaxed-switch -freturn-assignments \ + $(QCCFLAGS_WATERMARK) \ + $(QCCFLAGS_FEATURES) \ + $(QCCFLAGS_EXTRA) + # xonotic build system overrides this by command line argument to turn off the update-cvarcount step XON_BUILDSYSTEM = -all: qc .PHONY: all +all: qc .PHONY: qc qc: ../menu.dat ../progs.dat ../csprogs.dat .PHONY: clean clean: - rm -f ../progs.dat ../menu.dat ../csprogs.dat server/precache-for-csqc.inc + rm -f ../progs.dat ../menu.dat ../csprogs.dat $(QCCVERSIONFILE): $(RM) qccversion.* @@ -45,11 +47,8 @@ FILES_CSPROGS = $(shell find client lib common warpzonelib csqcmodellib -type f @echo make[1]: Entering directory \`$(PWD)/client\' cd client && $(QCC) $(QCCFLAGS) -DCSQC -server/precache-for-csqc.inc: $(FILES_CSPROGS) - sh collect-precache.sh - FILES_PROGS = $(shell find server lib common warpzonelib csqcmodellib -type f -not -name fteqcc.log -not -name qc.asm) -../progs.dat: $(FILES_PROGS) $(QCCVERSIONFILE) server/precache-for-csqc.inc +../progs.dat: $(FILES_PROGS) $(QCCVERSIONFILE) @echo make[1]: Entering directory \`$(PWD)/server\' cd server && $(QCC) $(QCCFLAGS) -DSVQC diff --git a/qcsrc/client/_all.qh b/qcsrc/client/_all.qh index 66fd813143..12dc1b4a3a 100644 --- a/qcsrc/client/_all.qh +++ b/qcsrc/client/_all.qh @@ -9,5 +9,6 @@ #include "../dpdefs/csprogsdefs.qh" #include "../common/models/models.qh" +#include "../common/sounds/sounds.qh" #endif diff --git a/qcsrc/client/controlpoint.qc b/qcsrc/client/controlpoint.qc index aec000d64c..a83260b104 100644 --- a/qcsrc/client/controlpoint.qc +++ b/qcsrc/client/controlpoint.qc @@ -4,7 +4,6 @@ #include "../common/movetypes/movetypes.qh" .float alpha; -bool cpicon_precached; .int count; .float pain_finished; @@ -21,14 +20,6 @@ bool cpicon_precached; .entity icon_realmodel; -void cpicon_precache() -{ - if(cpicon_precached) - return; // already precached - - cpicon_precached = true; -} - void cpicon_draw() {SELFPARAM(); if(time < self.move_time) { return; } @@ -186,7 +177,6 @@ void ent_cpicon() self.count = (self.health - self.max_health) * frametime; cpicon_changeteam(); - cpicon_precache(); cpicon_construct(); } diff --git a/qcsrc/client/controlpoint.qh b/qcsrc/client/controlpoint.qh index 8469b5226f..a2ce395917 100644 --- a/qcsrc/client/controlpoint.qh +++ b/qcsrc/client/controlpoint.qh @@ -8,6 +8,5 @@ const int CPSF_STATUS = 4; const int CPSF_SETUP = 8; void ent_cpicon(); -void cpicon_precache(); #endif diff --git a/qcsrc/client/csqcmodel_hooks.qc b/qcsrc/client/csqcmodel_hooks.qc index 022afd9d11..0c25e60064 100644 --- a/qcsrc/client/csqcmodel_hooks.qc +++ b/qcsrc/client/csqcmodel_hooks.qc @@ -1,4 +1,3 @@ -#include "csqcmodel_hooks.qh" #include "_all.qh" #include "gibs.qh" @@ -591,7 +590,7 @@ void CSQCModel_Effects_Apply(void) { if(!self.snd_looping) { - sound(self, CH_TRIGGER_SINGLE, "misc/jetpack_fly.wav", VOL_BASE, autocvar_g_jetpack_attenuation); + sound(self, CH_TRIGGER_SINGLE, SND_JETPACK_FLY, VOL_BASE, autocvar_g_jetpack_attenuation); self.snd_looping = CH_TRIGGER_SINGLE; } } @@ -599,17 +598,12 @@ void CSQCModel_Effects_Apply(void) { if(self.snd_looping) { - sound(self, self.snd_looping, "misc/null.wav", VOL_BASE, autocvar_g_jetpack_attenuation); + sound(self, self.snd_looping, SND_Null, VOL_BASE, autocvar_g_jetpack_attenuation); self.snd_looping = 0; } } } -void CSQCPlayer_Precache() -{ - precache_sound("misc/jetpack_fly.wav"); -} - // general functions .int csqcmodel_predraw_run; .int anim_frame; diff --git a/qcsrc/client/csqcmodel_hooks.qh b/qcsrc/client/csqcmodel_hooks.qh deleted file mode 100644 index 8995880593..0000000000 --- a/qcsrc/client/csqcmodel_hooks.qh +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef CSQCMODEL_HOOKS -#define CSQCMODEL_HOOKS - -void CSQCPlayer_Precache(); - -#endif diff --git a/qcsrc/client/damage.qc b/qcsrc/client/damage.qc index ec6da98428..4f25aef13e 100644 --- a/qcsrc/client/damage.qc +++ b/qcsrc/client/damage.qc @@ -228,35 +228,33 @@ void Ent_DamageInfo(float isNew) // spiderbot case DEATH_VH_SPID_MINIGUN: - string _snd; - _snd = W_Sound(strcat("ric", ftos(1 + rint(random() * 2)))); - sound(self, CH_SHOTS, _snd, VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS, SND_RIC_RANDOM(), VOL_BASE, ATTEN_NORM); pointparticles(particleeffectnum(EFFECT_SPIDERBOT_MINIGUN_IMPACT), self.origin, w_backoff * 1000, 1); break; case DEATH_VH_SPID_ROCKET: - sound(self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM); pointparticles(particleeffectnum(EFFECT_SPIDERBOT_ROCKET_EXPLODE), self.origin, w_backoff * 1000, 1); break; case DEATH_VH_SPID_DEATH: - sound(self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_MIN); + sound(self, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_MIN); pointparticles(particleeffectnum(EFFECT_EXPLOSION_BIG), self.origin, w_backoff * 1000, 1); break; case DEATH_VH_WAKI_GUN: - sound(self, CH_SHOTS, W_Sound("laserimpact"), VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS, SND_LASERIMPACT, VOL_BASE, ATTEN_NORM); pointparticles(particleeffectnum(EFFECT_RACER_IMPACT), self.origin, w_backoff * 1000, 1); break; case DEATH_VH_WAKI_ROCKET: - sound(self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM); pointparticles(particleeffectnum(EFFECT_RACER_ROCKET_EXPLODE), self.origin, w_backoff * 1000, 1); break; case DEATH_VH_WAKI_DEATH: - sound(self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_MIN); + sound(self, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_MIN); pointparticles(particleeffectnum(EFFECT_EXPLOSION_BIG), self.origin, w_backoff * 1000, 1); break; case DEATH_VH_RAPT_CANNON: - sound(self, CH_SHOTS, W_Sound("laserimpact"), VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS, SND_LASERIMPACT, VOL_BASE, ATTEN_NORM); pointparticles(particleeffectnum(EFFECT_RAPTOR_CANNON_IMPACT), self.origin, w_backoff * 1000, 1); break; case DEATH_VH_RAPT_FRAGMENT: @@ -268,19 +266,19 @@ void Ent_DamageInfo(float isNew) ang = vectoangles(vel); RaptorCBShellfragToss(w_org, vel, ang + '0 0 1' * (120 * i)); } - sound(self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM); pointparticles(particleeffectnum(EFFECT_RAPTOR_BOMB_SPREAD), self.origin, w_backoff * 1000, 1); break; case DEATH_VH_RAPT_BOMB: - sound(self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM); pointparticles(particleeffectnum(EFFECT_RAPTOR_BOMB_IMPACT), self.origin, w_backoff * 1000, 1); break; case DEATH_VH_RAPT_DEATH: - sound(self, CH_SHOTS, W_Sound("laserimpact"), VOL_BASE, ATTEN_MIN); + sound(self, CH_SHOTS, SND_LASERIMPACT, VOL_BASE, ATTEN_MIN); pointparticles(particleeffectnum(EFFECT_EXPLOSION_BIG), self.origin, w_backoff * 1000, 1); break; case DEATH_VH_BUMB_GUN: - sound(self, CH_SHOTS, W_Sound("fireball_impact2"), VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS, SND_FIREBALL_IMPACT2, VOL_BASE, ATTEN_NORM); pointparticles(particleeffectnum(EFFECT_BIGPLASMA_IMPACT), self.origin, w_backoff * 1000, 1); break; } @@ -289,7 +287,6 @@ void Ent_DamageInfo(float isNew) if(DEATH_ISTURRET(w_deathtype)) { - string _snd; traceline(w_org - normalize(force) * 16, w_org + normalize(force) * 16, MOVE_NOMONSTERS, world); if(trace_plane_normal != '0 0 0') w_backoff = trace_plane_normal; @@ -301,38 +298,36 @@ void Ent_DamageInfo(float isNew) switch(w_deathtype) { case DEATH_TURRET_EWHEEL: - sound(self, CH_SHOTS, W_Sound("laserimpact"), VOL_BASE, ATTEN_MIN); + sound(self, CH_SHOTS, SND_LASERIMPACT, VOL_BASE, ATTEN_MIN); pointparticles(particleeffectnum(EFFECT_BLASTER_IMPACT), self.origin, w_backoff * 1000, 1); break; case DEATH_TURRET_FLAC: pointparticles(particleeffectnum(EFFECT_HAGAR_EXPLODE), w_org, '0 0 0', 1); - _snd = W_Sound(strcat("hagexp", ftos(1 + rint(random() * 2)))); - sound(self, CH_SHOTS, _snd, VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS, SND_HAGEXP_RANDOM(), VOL_BASE, ATTEN_NORM); break; case DEATH_TURRET_MLRS: case DEATH_TURRET_HK: case DEATH_TURRET_WALK_ROCKET: case DEATH_TURRET_HELLION: - sound(self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_MIN); + sound(self, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_MIN); pointparticles(particleeffectnum(EFFECT_ROCKET_EXPLODE), self.origin, w_backoff * 1000, 1); break; case DEATH_TURRET_MACHINEGUN: case DEATH_TURRET_WALK_GUN: - _snd = W_Sound(strcat("ric", ftos(1 + rint(random() * 2)))); - sound(self, CH_SHOTS, _snd, VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS, SND_RIC_RANDOM(), VOL_BASE, ATTEN_NORM); pointparticles(particleeffectnum(EFFECT_MACHINEGUN_IMPACT), self.origin, w_backoff * 1000, 1); break; case DEATH_TURRET_PLASMA: - sound(self, CH_SHOTS, W_Sound("electro_impact"), VOL_BASE, ATTEN_MIN); + sound(self, CH_SHOTS, SND_ELECTRO_IMPACT, VOL_BASE, ATTEN_MIN); pointparticles(particleeffectnum(EFFECT_ELECTRO_IMPACT), self.origin, w_backoff * 1000, 1); break; case DEATH_TURRET_WALK_MELEE: - sound(self, CH_SHOTS, W_Sound("ric1"), VOL_BASE, ATTEN_MIN); + sound(self, CH_SHOTS, SND_RIC1, VOL_BASE, ATTEN_MIN); pointparticles(particleeffectnum(EFFECT_TE_SPARK), self.origin, w_backoff * 1000, 1); break; diff --git a/qcsrc/client/generator.qc b/qcsrc/client/generator.qc index c9358b6795..148a8f521b 100644 --- a/qcsrc/client/generator.qc +++ b/qcsrc/client/generator.qc @@ -1,22 +1,8 @@ #include "generator.qh" -bool generator_precached; .int count; .float max_health; -void generator_precache() -{ - if(generator_precached) - return; // already precached - - precache_sound("onslaught/shockwave.wav"); - precache_sound(W_Sound("grenade_impact")); - precache_sound(W_Sound("rocket_impact")); - precache_sound("onslaught/electricity_explode.wav"); - - generator_precached = true; -} - void ons_generator_ray_draw() {SELFPARAM(); if(time < self.move_time) @@ -68,7 +54,7 @@ void generator_draw() if(random() < 0.01) { pointparticles(particleeffectnum(EFFECT_ELECTRO_BALLEXPLODE), self.origin + randompos('-50 -50 -20', '50 50 50'), '0 0 0', 1); - sound(self, CH_TRIGGER, "onslaught/electricity_explode.wav", VOL_BASE, ATTEN_NORM); + sound(self, CH_TRIGGER, SND_ONS_ELECTRICITY_EXPLODE, VOL_BASE, ATTEN_NORM); } else pointparticles(particleeffectnum(EFFECT_ONS_GENERATOR_DAMAGED), self.origin + randompos('-60 -60 -20', '60 60 60'), '0 0 0', 1); @@ -87,7 +73,7 @@ void generator_draw() // White shockwave if(self.count==40||self.count==20) { - sound(self, CH_TRIGGER, "onslaught/shockwave.wav", VOL_BASE, ATTEN_NORM); + sound(self, CH_TRIGGER, SND_ONS_SHOCKWAVE, VOL_BASE, ATTEN_NORM); pointparticles(particleeffectnum(EFFECT_ELECTRO_COMBO), self.origin, '0 0 0', 6); } @@ -108,7 +94,7 @@ void generator_draw() if(random() < 0.25) { te_explosion(self.origin); - sound(self, CH_TRIGGER, W_Sound("grenade_impact"), VOL_BASE, ATTEN_NORM); + sound(self, CH_TRIGGER, SND_GRENADE_IMPACT, VOL_BASE, ATTEN_NORM); } // Particles @@ -121,7 +107,7 @@ void generator_draw() org = self.origin; te_explosion(org); pointparticles(particleeffectnum(EFFECT_ONS_GENERATOR_EXPLODE2), org, '0 0 0', 1); - sound(self, CH_TRIGGER, W_Sound("rocket_impact"), VOL_BASE, ATTEN_NORM); + sound(self, CH_TRIGGER, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM); } self.move_time = time + 0.05; @@ -213,7 +199,6 @@ void ent_generator() self.count = 40; generator_changeteam(); - generator_precache(); generator_construct(); } diff --git a/qcsrc/client/generator.qh b/qcsrc/client/generator.qh index e4e1611f31..744bc5589f 100644 --- a/qcsrc/client/generator.qh +++ b/qcsrc/client/generator.qh @@ -7,5 +7,4 @@ const int GSF_STATUS = 4; const int GSF_SETUP = 8; void ent_generator(); -void generator_precache(); #endif diff --git a/qcsrc/client/gibs.qc b/qcsrc/client/gibs.qc index 0302f18415..5c4c338f15 100644 --- a/qcsrc/client/gibs.qc +++ b/qcsrc/client/gibs.qc @@ -85,7 +85,7 @@ void Gib_Touch() } if(!self.silent) - sound(self, CH_PAIN, strcat("misc/gib_splat0", ftos(floor(prandom() * 4 + 1)), ".wav"), VOL_BASE, ATTEN_NORM); + sound(self, CH_PAIN, SND_GIB_SPLAT_RANDOM(), VOL_BASE, ATTEN_NORM); pointparticles(_particleeffectnum(strcat(species_prefix(self.cnt), "blood")), self.origin + '0 0 1', '0 0 30', 10); Gib_Delete(); @@ -218,7 +218,7 @@ void Ent_GibSplash(bool isNew) { case 0x01: if(!issilent) - sound (self, CH_PAIN, "misc/gib.wav", VOL_BASE, ATTEN_NORM); + sound (self, CH_PAIN, SND_GIB, VOL_BASE, ATTEN_NORM); if(prandom() < amount) TossGib ("models/gibs/eye.md3", org, org, vel, prandomvec() * 150, specnum, 0, issilent); @@ -272,12 +272,3 @@ void Ent_GibSplash(bool isNew) break; } } - -void GibSplash_Precache() -{ - precache_sound ("misc/gib.wav"); - precache_sound ("misc/gib_splat01.wav"); - precache_sound ("misc/gib_splat02.wav"); - precache_sound ("misc/gib_splat03.wav"); - precache_sound ("misc/gib_splat04.wav"); -} diff --git a/qcsrc/client/gibs.qh b/qcsrc/client/gibs.qh index b33a1a5e06..5b8b16bfd8 100644 --- a/qcsrc/client/gibs.qh +++ b/qcsrc/client/gibs.qh @@ -23,5 +23,4 @@ void TossGib (string mdlname, vector safeorg, vector org, vector vconst, vector void Ent_GibSplash(bool isNew); -void GibSplash_Precache(); #endif diff --git a/qcsrc/client/hook.qc b/qcsrc/client/hook.qc index 528646979e..dd70c760c3 100644 --- a/qcsrc/client/hook.qc +++ b/qcsrc/client/hook.qc @@ -44,7 +44,7 @@ void Draw_GrapplingHook() if(self.teleport_time) if(time > self.teleport_time) { - sound (self, CH_SHOTS_SINGLE, "misc/null.wav", VOL_BASE, ATTEN_NORM); // safeguard + sound (self, CH_SHOTS_SINGLE, SND_Null, VOL_BASE, ATTEN_NORM); // safeguard self.teleport_time = 0; } @@ -168,7 +168,7 @@ void Draw_GrapplingHook() void Remove_GrapplingHook() {SELFPARAM(); - sound (self, CH_SHOTS_SINGLE, "misc/null.wav", VOL_BASE, ATTEN_NORM); + sound (self, CH_SHOTS_SINGLE, SND_Null, VOL_BASE, ATTEN_NORM); } void Ent_ReadHook(float bIsNew, float type) @@ -228,7 +228,7 @@ void Ent_ReadHook(float bIsNew, float type) self.drawmask = MASK_NORMAL; break; case ENT_CLIENT_ARC_BEAM: - sound (self, CH_SHOTS_SINGLE, W_Sound("lgbeam_fly"), VOL_BASE, ATTEN_NORM); + sound (self, CH_SHOTS_SINGLE, SND_LGBEAM_FLY, VOL_BASE, ATTEN_NORM); break; } } @@ -236,9 +236,4 @@ void Ent_ReadHook(float bIsNew, float type) self.teleport_time = time + 10; } -void Hook_Precache() -{ - precache_sound(W_Sound("lgbeam_fly")); -} - // TODO: hook: temporarily transform self.origin for drawing the model along warpzones! diff --git a/qcsrc/client/hook.qh b/qcsrc/client/hook.qh index 8401dce049..e513ed6afa 100644 --- a/qcsrc/client/hook.qh +++ b/qcsrc/client/hook.qh @@ -2,7 +2,6 @@ #define HOOK_H void Draw_CylindricLine(vector from, vector to, float thickness, string texture, float aspect, float shift, vector rgb, float theAlpha, float drawflag, vector vieworg); -void Hook_Precache(); void Ent_ReadHook(float bIsNew, float type); diff --git a/qcsrc/client/main.qc b/qcsrc/client/main.qc index c534cc7a5d..ca31f32f71 100644 --- a/qcsrc/client/main.qc +++ b/qcsrc/client/main.qc @@ -2,7 +2,6 @@ #include "_all.qh" #include "controlpoint.qh" -#include "csqcmodel_hooks.qh" #include "damage.qh" #include "effects.qh" #include "generator.qh" @@ -49,7 +48,6 @@ #include "../common/triggers/include.qh" #include "../common/turrets/cl_turrets.qh" -#include "../common/turrets/turrets.qh" #include "../warpzonelib/client.qh" @@ -153,18 +151,10 @@ void CSQC_Init(void) CALL_ACCUMULATED_FUNCTION(RegisterDeathtypes); CALL_ACCUMULATED_FUNCTION(RegisterHUD_Panels); - initialize_minigames(); - // precaches - precache_sound("misc/hit.wav"); - precache_sound("misc/typehit.wav"); - generator_precache(); Projectile_Precache(); - Hook_Precache(); - GibSplash_Precache(); Tuba_Precache(); - CSQCPlayer_Precache(); if(autocvar_cl_reticle) { @@ -778,7 +768,7 @@ void Ent_ReadSpawnEvent(float is_new) } if(autocvar_cl_spawn_event_sound) { - sound(self, CH_TRIGGER, "misc/spawn.wav", VOL_BASE, ATTEN_NORM); + sound(self, CH_TRIGGER, SND_SPAWN, VOL_BASE, ATTEN_NORM); } } } @@ -935,7 +925,7 @@ void Ent_Remove() if(self.snd_looping > 0) { - sound(self, self.snd_looping, "misc/null.wav", VOL_BASE, autocvar_g_jetpack_attenuation); + sound(self, self.snd_looping, SND_Null, VOL_BASE, autocvar_g_jetpack_attenuation); self.snd_looping = 0; } diff --git a/qcsrc/client/mapvoting.qc b/qcsrc/client/mapvoting.qc index 3511c743f0..945f312ab2 100644 --- a/qcsrc/client/mapvoting.qc +++ b/qcsrc/client/mapvoting.qc @@ -630,8 +630,6 @@ void GameTypeVote_ReadOption(int i) void MapVote_Init() { - precache_sound ("misc/invshot.wav"); - mv_active = 1; if(autocvar_hud_cursormode) { setcursormode(1); } else { mv_mousepos = '0.5 0 0' * vid_conwidth + '0 0.5 0' * vid_conheight; } diff --git a/qcsrc/client/progs.inc b/qcsrc/client/progs.inc index b985e36f67..3d742a6245 100644 --- a/qcsrc/client/progs.inc +++ b/qcsrc/client/progs.inc @@ -38,6 +38,7 @@ #include "../common/animdecide.qc" #include "../common/buffs.qc" #include "../common/effects/effects.qc" +#include "../common/effects/effectinfo.qc" #include "../common/mapinfo.qc" #include "../common/movetypes/include.qc" #include "../common/nades.qc" @@ -59,7 +60,7 @@ #include "../common/weapons/all.qc" #include "../common/turrets/cl_turrets.qc" -#include "../common/turrets/turrets.qc" +#include "../common/turrets/all.qc" #include "../common/triggers/include.qc" diff --git a/qcsrc/client/tuba.qc b/qcsrc/client/tuba.qc index 1acfbd7eb7..91ccbba5c8 100644 --- a/qcsrc/client/tuba.qc +++ b/qcsrc/client/tuba.qc @@ -65,7 +65,7 @@ void tubasound(entity e, bool restart) if (restart) { snd1 = TUBA_STARTNOTE(e.tuba_instrument, e.note); } - sound(e, CH_TUBA_SINGLE, snd1, e.tuba_volume, e.tuba_attenuate * autocvar_g_balance_tuba_attenuation); + _sound(e, CH_TUBA_SINGLE, snd1, e.tuba_volume, e.tuba_attenuate * autocvar_g_balance_tuba_attenuation); } } @@ -79,9 +79,9 @@ void Ent_TubaNote_Think() } self.nextthink = time; if (self.tuba_volume <= 0) { - sound(self, CH_TUBA_SINGLE, "misc/null.wav", 0, 0); + sound(self, CH_TUBA_SINGLE, SND_Null, 0, 0); if (self.enemy) { - sound(self.enemy, CH_TUBA_SINGLE, "misc/null.wav", 0, 0); + sound(self.enemy, CH_TUBA_SINGLE, SND_Null, 0, 0); remove(self.enemy); } remove(self); diff --git a/qcsrc/client/view.qc b/qcsrc/client/view.qc index 146d322fcc..26089f9158 100644 --- a/qcsrc/client/view.qc +++ b/qcsrc/client/view.qc @@ -517,7 +517,7 @@ void UpdateHitsound() // todo: avoid very long and very short sounds from wave stretching using different sound files? seems unnecessary // todo: normalize sound pressure levels? seems unnecessary - sound7(world, CH_INFO, "misc/hit.wav", VOL_BASE, ATTN_NONE, pitch_shift * 100, 0); + sound7(world, CH_INFO, SND(HIT), VOL_BASE, ATTN_NONE, pitch_shift * 100, 0); } unaccounted_damage = 0; hitsound_time_prev = time; @@ -527,7 +527,7 @@ void UpdateHitsound() float typehit_time = getstatf(STAT_TYPEHIT_TIME); if (COMPARE_INCREASING(typehit_time, typehit_time_prev) > autocvar_cl_hitsound_antispam_time) { - sound(world, CH_INFO, "misc/typehit.wav", VOL_BASE, ATTN_NONE); + sound(world, CH_INFO, SND_TYPEHIT, VOL_BASE, ATTN_NONE); typehit_time_prev = typehit_time; } } diff --git a/qcsrc/client/weapons/projectile.qc b/qcsrc/client/weapons/projectile.qc index 1be6f8974b..07228885db 100644 --- a/qcsrc/client/weapons/projectile.qc +++ b/qcsrc/client/weapons/projectile.qc @@ -170,7 +170,7 @@ void loopsound(entity e, int ch, string samp, float vol, float attn) if(self.silent) return; - sound(e, ch, samp, vol, attn); + _sound(e, ch, samp, vol, attn); e.snd_looping = ch; } @@ -270,9 +270,6 @@ void Ent_Projectile() if(f & 2) { - string rm_suffix = strcat("rocketminsta_laser_", Static_Team_ColorName_Lower(self.team)); - if(_particleeffectnum(rm_suffix) < 0 || Team_TeamToNumber(self.team) == -1) { rm_suffix = "TR_NEXUIZPLASMA"; } - self.cnt = ReadByte(); self.silent = (self.cnt & 0x80); @@ -320,7 +317,7 @@ void Ent_Projectile() CASE(RPC) self.traileffect = particleeffectnum(EFFECT_TR_ROCKET); break; - CASE(ROCKETMINSTA_LASER) self.traileffect = _particleeffectnum(rm_suffix); break; + CASE(ROCKETMINSTA_LASER) self.traileffect = particleeffectnum(EFFECT_ROCKETMINSTA_LASER(self.team)); break; #undef CASE default: if(MUTATOR_CALLHOOK(Ent_Projectile, self)) @@ -347,7 +344,7 @@ void Ent_Projectile() { case PROJECTILE_ELECTRO: // only new engines support sound moving with object - loopsound(self, CH_SHOTS_SINGLE, W_Sound("electro_fly"), VOL_BASE, ATTEN_NORM); + loopsound(self, CH_SHOTS_SINGLE, SND(ELECTRO_FLY), VOL_BASE, ATTEN_NORM); self.mins = '0 0 -4'; self.maxs = '0 0 -4'; self.move_movetype = MOVETYPE_BOUNCE; @@ -357,7 +354,7 @@ void Ent_Projectile() break; case PROJECTILE_RPC: case PROJECTILE_ROCKET: - loopsound(self, CH_SHOTS_SINGLE, W_Sound("rocket_fly"), VOL_BASE, ATTEN_NORM); + loopsound(self, CH_SHOTS_SINGLE, SND(ROCKET_FLY), VOL_BASE, ATTEN_NORM); self.mins = '-3 -3 -3'; self.maxs = '3 3 3'; break; @@ -405,12 +402,12 @@ void Ent_Projectile() break; case PROJECTILE_NAPALM_FOUNTAIN: case PROJECTILE_FIREBALL: - loopsound(self, CH_SHOTS_SINGLE, W_Sound("fireball_fly2"), VOL_BASE, ATTEN_NORM); + loopsound(self, CH_SHOTS_SINGLE, SND(FIREBALL_FLY2), VOL_BASE, ATTEN_NORM); self.mins = '-16 -16 -16'; self.maxs = '16 16 16'; break; case PROJECTILE_FIREMINE: - loopsound(self, CH_SHOTS_SINGLE, W_Sound("fireball_fly"), VOL_BASE, ATTEN_NORM); + loopsound(self, CH_SHOTS_SINGLE, SND(FIREBALL_FLY), VOL_BASE, ATTEN_NORM); self.move_movetype = MOVETYPE_BOUNCE; self.move_touch = func_null; self.mins = '-4 -4 -4'; @@ -425,7 +422,7 @@ void Ent_Projectile() self.maxs = '2 2 2'; break; case PROJECTILE_SEEKER: - loopsound(self, CH_SHOTS_SINGLE, W_Sound("tag_rocket_fly"), VOL_BASE, ATTEN_NORM); + loopsound(self, CH_SHOTS_SINGLE, SND(TAG_ROCKET_FLY), VOL_BASE, ATTEN_NORM); self.mins = '-4 -4 -4'; self.maxs = '4 4 4'; break; @@ -438,17 +435,17 @@ void Ent_Projectile() case PROJECTILE_RAPTORCANNON: break; case PROJECTILE_SPIDERROCKET: - loopsound(self, CH_SHOTS_SINGLE, W_Sound("tag_rocket_fly"), VOL_BASE, ATTEN_NORM); + loopsound(self, CH_SHOTS_SINGLE, SND(TAG_ROCKET_FLY), VOL_BASE, ATTEN_NORM); break; case PROJECTILE_WAKIROCKET: - loopsound(self, CH_SHOTS_SINGLE, W_Sound("tag_rocket_fly"), VOL_BASE, ATTEN_NORM); + loopsound(self, CH_SHOTS_SINGLE, SND(TAG_ROCKET_FLY), VOL_BASE, ATTEN_NORM); break; /* case PROJECTILE_WAKICANNON: break; case PROJECTILE_BUMBLE_GUN: // only new engines support sound moving with object - loopsound(self, CH_SHOTS_SINGLE, W_Sound("electro_fly"), VOL_BASE, ATTEN_NORM); + loopsound(self, CH_SHOTS_SINGLE, SND(ELECTRO_FLY), VOL_BASE, ATTEN_NORM); self.mins = '0 0 -4'; self.maxs = '0 0 -4'; self.move_movetype = MOVETYPE_BOUNCE; @@ -508,11 +505,5 @@ void Ent_Projectile() void Projectile_Precache() { - precache_sound(W_Sound("electro_fly")); - precache_sound(W_Sound("rocket_fly")); - precache_sound(W_Sound("fireball_fly")); - precache_sound(W_Sound("fireball_fly2")); - precache_sound(W_Sound("tag_rocket_fly")); - MUTATOR_CALLHOOK(PrecacheProjectiles); } diff --git a/qcsrc/collect-precache.sh b/qcsrc/collect-precache.sh deleted file mode 100755 index 302220c096..0000000000 --- a/qcsrc/collect-precache.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh - -{ - grep -h '\ server/precache-for-csqc.inc - diff --git a/qcsrc/common/buffs.qh b/qcsrc/common/buffs.qh index 3eff9e26b8..31654ebf80 100644 --- a/qcsrc/common/buffs.qh +++ b/qcsrc/common/buffs.qh @@ -145,8 +145,7 @@ REGISTER_BUFF(MAGNET) { void buff_Init(entity ent); void buff_Init_Compat(entity ent, entity replacement); -#define BUFF_SPAWNFUNC(e, b, t) void spawnfunc_item_buff_##e() { \ - SELFPARAM(); \ +#define BUFF_SPAWNFUNC(e, b, t) spawnfunc(item_buff_##e) { \ self.buffs = b.m_itemid; \ self.team = t; \ buff_Init(self); \ @@ -157,7 +156,7 @@ void buff_Init_Compat(entity ent, entity replacement); BUFF_SPAWNFUNC(e##_team2, b, NUM_TEAM_2) \ BUFF_SPAWNFUNC(e##_team3, b, NUM_TEAM_3) \ BUFF_SPAWNFUNC(e##_team4, b, NUM_TEAM_4) -#define BUFF_SPAWNFUNC_Q3TA_COMPAT(o, r) void spawnfunc_item_##o() { SELFPARAM(); buff_Init_Compat(self, r); } +#define BUFF_SPAWNFUNC_Q3TA_COMPAT(o, r) spawnfunc(item_##o) { buff_Init_Compat(self, r); } BUFF_SPAWNFUNCS(resistance, BUFF_RESISTANCE) BUFF_SPAWNFUNCS(ammo, BUFF_AMMO) diff --git a/qcsrc/common/command/generic.qc b/qcsrc/common/command/generic.qc index 0c8f85816f..20826f64e2 100644 --- a/qcsrc/common/command/generic.qc +++ b/qcsrc/common/command/generic.qc @@ -240,6 +240,49 @@ void GenericCommand_dumpcommands(float request) } } +#ifndef MENUQC +void effectinfo_dump(int fh, bool alsoprint); +#endif +void GenericCommand_dumpeffectinfo(float request) +{ + switch (request) { + case CMD_REQUEST_COMMAND: { + #ifndef MENUQC + string filename = argv(1); + bool alsoprint = false; + if (filename == "") { + filename = "effectinfo_dump.txt"; + alsoprint = false; + } else if (filename == "-") { + filename = "effectinfo_dump.txt"; + alsoprint = true; + } + int fh = fopen(filename, FILE_WRITE); + if (fh >= 0) { + effectinfo_dump(fh, alsoprint); + LOG_INFOF("Dumping effectinfo... File located at ^2data/data/%s^7.\n", filename); + LOG_INFOF("Reload with ^2cl_particles_reloadeffects data/%s^7.\n", filename); + fclose(fh); + } else { + LOG_WARNINGF("Could not open file '%s'!\n", filename); + } + #else + LOG_INFO(_("Effectinfo dump command only works with cl_cmd and sv_cmd.\n")); + #endif + return; + } + default: + case CMD_REQUEST_USAGE: { + LOG_INFO(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " dumpeffectinfo [filename]")); + LOG_INFO(" Where 'filename' is the file to write (default is effectinfo_dump.txt),\n"); + LOG_INFO(" if supplied with '-' output to console as well as default,\n"); + LOG_INFO(" if left blank, it will only write to default.\n"); + return; + } + } +} +STATIC_INIT(dumpeffectinfo) { localcmd("alias dumpeffectinfo \"qc_cmd_svcl dumpeffectinfo ${* ?}\"\n"); } + void GenericCommand_dumpitems(float request) { switch(request) @@ -722,6 +765,7 @@ void GenericCommand_(float request) #define GENERIC_COMMANDS(request,arguments,command) \ GENERIC_COMMAND("addtolist", GenericCommand_addtolist(request, arguments), "Add a string to a cvar") \ GENERIC_COMMAND("dumpcommands", GenericCommand_dumpcommands(request), "Dump all commands on the program to *_cmd_dump.txt") \ + GENERIC_COMMAND("dumpeffectinfo", GenericCommand_dumpeffectinfo(request), "Dump all effectinfo to effectinfo_dump.txt") \ GENERIC_COMMAND("dumpitems", GenericCommand_dumpitems(request), "Dump all items to the console") \ GENERIC_COMMAND("dumpnotifs", GenericCommand_dumpnotifs(request), "Dump all notifications into notifications_dump.txt") \ GENERIC_COMMAND("dumpturrets", GenericCommand_dumpturrets(request), "Dump all turrets into turrets_dump.txt") \ diff --git a/qcsrc/common/effects/effectinfo.inc b/qcsrc/common/effects/effectinfo.inc new file mode 100644 index 0000000000..adac07b776 --- /dev/null +++ b/qcsrc/common/effects/effectinfo.inc @@ -0,0 +1,8733 @@ +// item respawn effect +DEF(TE_WIZSPIKE); +// flare particle and light +SUB(TE_WIZSPIKE) { + MY(alpha_min) = 128; + MY(alpha_max) = 128; + MY(alpha_fade) = 128; + MY(color_min) = "0x63F2EA"; + MY(color_max) = "0x63f2EA"; + MY(countabsolute) = 1; + MY(lightcolor) = '0.4 0.9 0.9'; + MY(lightradiusfade) = 200; + MY(lightradius) = 200; + MY(size_min) = 20; + MY(size_max) = 20; + MY(type) = "static"; +} +// cloud of particles which expand rapidly and then slow to form a ball +SUB(TE_WIZSPIKE) { + MY(airfriction) = 2; + MY(alpha_min) = 64; + MY(alpha_max) = 64; + MY(alpha_fade) = 64; + MY(color_min) = "0x63F2EA"; + MY(color_max) = "0x63f2EA"; + MY(count) = 50; + MY(liquidfriction) = 2; + MY(originjitter) = '16.0 16.0 16.0'; + MY(size_min) = 2; + MY(size_max) = 2; + MY(type) = "static"; + MY(velocityjitter) = '32.0 32.0 32.0'; +} + +// laser impact +DEF(TE_KNIGHTSPIKE); +// decal +SUB(TE_KNIGHTSPIKE) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(countabsolute) = 1; + MY(lightcolor) = '4.0 0.2 0.2'; + MY(lightradiusfade) = 1000; + MY(lightradius) = 200; + MY(originjitter) = '16.0 16.0 16.0'; + MY(size_min) = 24; + MY(size_max) = 24; + MY(tex_min) = 47; + MY(tex_max) = 47; + MY(type) = "decal"; +} +// flare effect +SUB(TE_KNIGHTSPIKE) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 1024; + MY(color_min) = "0xFF2010"; + MY(color_max) = "0xFF2010"; + MY(countabsolute) = 1; + MY(size_min) = 24; + MY(size_max) = 24; + MY(tex_min) = 39; + MY(tex_max) = 39; + MY(type) = "static"; +} +// sparks that rapidly expand and rapidly slow down to form an interesting spherical effect +SUB(TE_KNIGHTSPIKE) { + MY(airfriction) = 6; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 1024; + MY(color_min) = "0x800000"; + MY(color_max) = "0xFF8020"; + MY(count) = 128; + MY(liquidfriction) = 6; + MY(size_min) = 4; + MY(size_max) = 4; + MY(type) = "spark"; + MY(velocityjitter) = '256.0 256.0 256.0'; +} + +// machinegun bullet impact +DEF(TE_SPIKE); +// bullet impact decal +SUB(TE_SPIKE) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(countabsolute) = 1; + MY(originjitter) = '6.0 6.0 6.0'; + MY(size_min) = 5; + MY(size_max) = 5; + MY(tex_min) = 56; + MY(tex_max) = 59; + MY(type) = "decal"; +} +// dust/smoke drifting away from the impact +SUB(TE_SPIKE) { + MY(alpha_min) = 255; + MY(alpha_max) = 255; + MY(alpha_fade) = 256; + MY(color_min) = "0x101010"; + MY(color_max) = "0x101010"; + MY(count) = 4; + MY(sizeincrease) = 3; + MY(size_min) = 3; + MY(size_max) = 3; + MY(tex_max) = 8; + MY(type) = "smoke"; + MY(velocityjitter) = '8.0 8.0 8.0'; +} +// dust/smoke staying at the impact +SUB(TE_SPIKE) { + MY(alpha_min) = 255; + MY(alpha_max) = 255; + MY(alpha_fade) = 128; + MY(color_min) = "0x505050"; + MY(color_max) = "0x505050"; + MY(count) = 0.500000; + MY(sizeincrease) = 4; + MY(size_min) = 4; + MY(size_max) = 4; + MY(tex_max) = 8; + MY(type) = "smoke"; +} +// bouncing sparks +SUB(TE_SPIKE) { + MY(alpha_max) = 256; + MY(alpha_fade) = 256; + MY(bounce) = 1.500000; + MY(color_min) = "0x8f4333"; + MY(color_max) = "0xfff31b"; + MY(count) = 10; + MY(gravity) = 1; + MY(size_min) = 0.400000; + MY(size_max) = 0.400000; + MY(type) = "spark"; + MY(velocityjitter) = '64.0 64.0 64.0'; + MY(velocityoffset) = '0.0 0.0 80.0'; +} + +// electro combo explosion +DEF(TE_SPIKEQUAD); +// decal +SUB(TE_SPIKEQUAD) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(countabsolute) = 1; + MY(lightcolor) = '2.0 2.5 3.0'; + MY(lightradiusfade) = 200; + MY(lightradius) = 400; + MY(originjitter) = '34.0 34.0 34.0'; + MY(size_min) = 64; + MY(size_max) = 64; + MY(tex_min) = 59; + MY(tex_max) = 59; + MY(type) = "decal"; +} +// flare effect +SUB(TE_SPIKEQUAD) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 128; + MY(color_min) = "0x80C0FF"; + MY(color_max) = "0x80C0FF"; + MY(countabsolute) = 1; + MY(size_min) = 48; + MY(size_max) = 48; + MY(tex_min) = 38; + MY(tex_max) = 38; + MY(type) = "static"; +} +// large sparks +SUB(TE_SPIKEQUAD) { + MY(airfriction) = 4; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 256; + MY(bounce) = 1.500000; + MY(color_min) = "0x2030FF"; + MY(color_max) = "0x80C0FF"; + MY(count) = 10; + MY(liquidfriction) = 16; + MY(size_min) = 32; + MY(size_max) = 32; + MY(type) = "static"; + MY(velocityjitter) = '512.0 512.0 512.0'; +} + +// quake effect +DEF(TE_SUPERSPIKE); +// decal +SUB(TE_SUPERSPIKE) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(countabsolute) = 1; + MY(originjitter) = '6.0 6.0 6.0'; + MY(size_min) = 3; + MY(size_max) = 3; + MY(tex_min) = 56; + MY(tex_max) = 59; + MY(type) = "decal"; +} +// dust/smoke drifting away from the impact +SUB(TE_SUPERSPIKE) { + MY(alpha_min) = 255; + MY(alpha_max) = 255; + MY(alpha_fade) = 256; + MY(color_min) = "0x101010"; + MY(color_max) = "0x101010"; + MY(count) = 4; + MY(sizeincrease) = 3; + MY(size_min) = 3; + MY(size_max) = 3; + MY(tex_max) = 8; + MY(type) = "smoke"; + MY(velocityjitter) = '8.0 8.0 8.0'; +} +// dust/smoke staying at the impact +SUB(TE_SUPERSPIKE) { + MY(alpha_min) = 255; + MY(alpha_max) = 255; + MY(alpha_fade) = 128; + MY(color_min) = "0x505050"; + MY(color_max) = "0x505050"; + MY(count) = 0.500000; + MY(sizeincrease) = 4; + MY(size_min) = 4; + MY(size_max) = 4; + MY(tex_max) = 8; + MY(type) = "smoke"; +} +// sparks that disappear on impact +SUB(TE_SUPERSPIKE) { + MY(alpha_max) = 256; + MY(alpha_fade) = 768; + MY(bounce) = -1; + MY(color_min) = "0x8f4333"; + MY(color_max) = "0xfff31b"; + MY(count) = 15; + MY(gravity) = 1; + MY(size_min) = 0.400000; + MY(size_max) = 0.400000; + MY(type) = "spark"; + MY(velocityjitter) = '64.0 64.0 64.0'; + MY(velocityoffset) = '0.0 0.0 80.0'; +} + +// quake effect +DEF(TE_SUPERSPIKEQUAD); +// decal +SUB(TE_SUPERSPIKEQUAD) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(countabsolute) = 1; + MY(lightcolor) = '0.2 0.2 1.5'; + MY(lightradiusfade) = 500; + MY(lightradius) = 100; + MY(originjitter) = '6.0 6.0 6.0'; + MY(size_min) = 3; + MY(size_max) = 3; + MY(tex_min) = 56; + MY(tex_max) = 59; + MY(type) = "decal"; +} +// dust/smoke drifting away from the impact +SUB(TE_SUPERSPIKEQUAD) { + MY(alpha_min) = 255; + MY(alpha_max) = 255; + MY(alpha_fade) = 256; + MY(color_min) = "0x101010"; + MY(color_max) = "0x101010"; + MY(count) = 4; + MY(sizeincrease) = 3; + MY(size_min) = 3; + MY(size_max) = 3; + MY(tex_max) = 8; + MY(type) = "smoke"; + MY(velocityjitter) = '8.0 8.0 8.0'; +} +// dust/smoke staying at the impact +SUB(TE_SUPERSPIKEQUAD) { + MY(alpha_min) = 255; + MY(alpha_max) = 255; + MY(alpha_fade) = 128; + MY(color_min) = "0x505050"; + MY(color_max) = "0x505050"; + MY(count) = 0.500000; + MY(sizeincrease) = 4; + MY(size_min) = 4; + MY(size_max) = 4; + MY(tex_max) = 8; + MY(type) = "smoke"; +} +// sparks that disappear on impact +SUB(TE_SUPERSPIKEQUAD) { + MY(alpha_max) = 256; + MY(alpha_fade) = 768; + MY(bounce) = -1; + MY(color_min) = "0x8f4333"; + MY(color_max) = "0xfff31b"; + MY(count) = 15; + MY(gravity) = 1; + MY(size_min) = 0.400000; + MY(size_max) = 0.400000; + MY(type) = "spark"; + MY(velocityjitter) = '64.0 64.0 64.0'; + MY(velocityoffset) = '0.0 0.0 80.0'; +} + +// shotgun pellet impact +DEF(TE_GUNSHOT); +// decal +SUB(TE_GUNSHOT) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(countabsolute) = 1; + MY(originjitter) = '6.0 6.0 6.0'; + MY(size_min) = 3; + MY(size_max) = 3; + MY(tex_min) = 56; + MY(tex_max) = 59; + MY(type) = "decal"; +} +// dust/smoke drifting away from the impact +SUB(TE_GUNSHOT) { + MY(alpha_min) = 128; + MY(alpha_max) = 128; + MY(alpha_fade) = 64; + MY(color_min) = "0x101010"; + MY(color_max) = "0x101010"; + MY(count) = 0.800000; + MY(sizeincrease) = 3; + MY(size_min) = 3; + MY(size_max) = 3; + MY(tex_max) = 8; + MY(type) = "smoke"; + MY(velocityjitter) = '8.0 8.0 8.0'; +} +// dust/smoke staying at the impact +SUB(TE_GUNSHOT) { + MY(alpha_min) = 128; + MY(alpha_max) = 128; + MY(alpha_fade) = 64; + MY(color_min) = "0x505050"; + MY(color_max) = "0x505050"; + MY(count) = 0.200000; + MY(sizeincrease) = 4; + MY(size_min) = 4; + MY(size_max) = 4; + MY(tex_max) = 8; + MY(type) = "smoke"; +} +// bouncing sparks +SUB(TE_GUNSHOT) { + MY(alpha_max) = 64; + MY(alpha_fade) = 64; + MY(bounce) = 1.500000; + MY(color_min) = "0x8f4333"; + MY(color_max) = "0xfff31b"; + MY(count) = 2.500000; + MY(gravity) = 1; + MY(size_min) = 0.400000; + MY(size_max) = 0.400000; + MY(type) = "spark"; + MY(velocityjitter) = '64.0 64.0 64.0'; + MY(velocityoffset) = '0.0 0.0 80.0'; +} + +// crylink impact effect +DEF(TE_GUNSHOTQUAD); +// decal +SUB(TE_GUNSHOTQUAD) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(countabsolute) = 1; + MY(originjitter) = '12.0 12.0 12.0'; + MY(size_min) = 8; + MY(size_max) = 8; + MY(tex_min) = 47; + MY(tex_max) = 47; + MY(type) = "decal"; +} +// purple flare effect +SUB(TE_GUNSHOTQUAD) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 512; + MY(color_min) = "0x504060"; + MY(color_max) = "0x504060"; + MY(countabsolute) = 1; + MY(size_min) = 8; + MY(size_max) = 8; + MY(tex_min) = 39; + MY(tex_max) = 39; + MY(type) = "static"; +} +// purple sparks +SUB(TE_GUNSHOTQUAD) { + MY(alpha_min) = 128; + MY(alpha_max) = 128; + MY(alpha_fade) = 384; + MY(bounce) = 1.500000; + MY(color_min) = "0xA040C0"; + MY(color_max) = "0xFFFFFF"; + MY(count) = 6; + MY(gravity) = 1; + MY(size_min) = 1; + MY(size_max) = 1; + MY(type) = "spark"; + MY(velocityjitter) = '128.0 128.0 128.0'; + MY(velocityoffset) = '0.0 0.0 80.0'; +} + +// mortar/hagar explosion (smaller than rocket) +DEF(TE_EXPLOSION); +// decal +SUB(TE_EXPLOSION) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(countabsolute) = 1; + MY(lightcolor) = '4.0 2.0 0.5'; + MY(lightradiusfade) = 300; + MY(lightradius) = 150; + MY(originjitter) = '40.0 40.0 40.0'; + MY(size_min) = 48; + MY(size_max) = 48; + MY(tex_min) = 8; + MY(tex_max) = 16; + MY(type) = "decal"; +} +// flare effect +SUB(TE_EXPLOSION) { + MY(alpha_min) = 192; + MY(alpha_max) = 192; + MY(alpha_fade) = 64; + MY(color_min) = "0x404040"; + MY(color_max) = "0x404040"; + MY(countabsolute) = 1; + MY(size_min) = 48; + MY(size_max) = 48; + MY(tex_min) = 35; + MY(tex_max) = 37; + MY(type) = "static"; +} +// fire effect which expands then slows +SUB(TE_EXPLOSION) { + MY(airfriction) = 4; + MY(alpha_min) = 128; + MY(alpha_max) = 128; + MY(alpha_fade) = 256; + MY(bounce) = 1.500000; + MY(color_min) = "0x902010"; + MY(color_max) = "0xFFD080"; + MY(count) = 64; + MY(liquidfriction) = 4; + MY(notunderwater) = true; + MY(originjitter) = '8.0 8.0 8.0'; + MY(size_min) = 16; + MY(size_max) = 16; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "static"; + MY(velocityjitter) = '256.0 256.0 256.0'; +} +// underwater bubbles +SUB(TE_EXPLOSION) { + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 64; + MY(bounce) = 1.500000; + MY(color_min) = "0x404040"; + MY(color_max) = "0x808080"; + MY(count) = 16; + MY(gravity) = -0.125000; + MY(liquidfriction) = 0.250000; + MY(originjitter) = '16.0 16.0 16.0'; + MY(size_min) = 3; + MY(size_max) = 3; + MY(tex_min) = 62; + MY(tex_max) = 62; + MY(type) = "bubble"; + MY(underwater) = true; + MY(velocityjitter) = '96.0 96.0 96.0'; +} +// bouncing sparks +SUB(TE_EXPLOSION) { + MY(airfriction) = 0.200000; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 384; + MY(bounce) = 1.500000; + MY(color_min) = "0x903010"; + MY(color_max) = "0xFFD030"; + MY(count) = 16; + MY(gravity) = 1; + MY(liquidfriction) = 0.800000; + MY(notunderwater) = true; + MY(size_min) = 2; + MY(size_max) = 2; + MY(type) = "spark"; + MY(velocityjitter) = '256.0 256.0 256.0'; + MY(velocityoffset) = '0.0 0.0 80.0'; +} + +// quake effect +DEF(TE_EXPLOSIONQUAD); +// decal +SUB(TE_EXPLOSIONQUAD) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(countabsolute) = 1; + MY(lightcolor) = '4.0 2.0 8.0'; + MY(lightradiusfade) = 700; + MY(lightradius) = 350; + MY(originjitter) = '40.0 40.0 40.0'; + MY(size_min) = 48; + MY(size_max) = 48; + MY(tex_min) = 8; + MY(tex_max) = 16; + MY(type) = "decal"; +} +// smoke cloud +SUB(TE_EXPLOSIONQUAD) { + MY(alpha_min) = 32; + MY(alpha_max) = 32; + MY(alpha_fade) = 64; + MY(color_min) = "0x202020"; + MY(color_max) = "0x404040"; + MY(count) = 16; + MY(notunderwater) = true; + MY(size_min) = 12; + MY(size_max) = 12; + MY(tex_max) = 8; + MY(type) = "smoke"; + MY(velocityjitter) = '48.0 48.0 48.0'; +} +// underwater bubbles +SUB(TE_EXPLOSIONQUAD) { + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 64; + MY(bounce) = 1.500000; + MY(color_min) = "0x404040"; + MY(color_max) = "0x808080"; + MY(count) = 16; + MY(gravity) = -0.125000; + MY(liquidfriction) = 0.250000; + MY(originjitter) = '16.0 16.0 16.0'; + MY(size_min) = 3; + MY(size_max) = 3; + MY(tex_min) = 62; + MY(tex_max) = 62; + MY(type) = "bubble"; + MY(underwater) = true; + MY(velocityjitter) = '96.0 96.0 96.0'; +} +// sparks which go through walls +SUB(TE_EXPLOSIONQUAD) { + MY(airfriction) = 0.200000; + MY(alpha_max) = 256; + MY(alpha_fade) = 512; + MY(color_min) = "0x903010"; + MY(color_max) = "0xFFD030"; + MY(count) = 64; + MY(gravity) = 1; + MY(liquidfriction) = 0.800000; + MY(notunderwater) = true; + MY(size_min) = 1; + MY(size_max) = 1; + MY(type) = "spark"; + MY(velocityjitter) = '256.0 256.0 256.0'; + MY(velocityoffset) = '0.0 0.0 80.0'; +} + +// quake effect +DEF(TE_TAREXPLOSION); +// decal +SUB(TE_TAREXPLOSION) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(countabsolute) = 1; + MY(lightcolor) = '1.6 0.8 2.0'; + MY(lightradiusfade) = 1200; + MY(lightradius) = 600; + MY(originjitter) = '40.0 40.0 40.0'; + MY(size_min) = 48; + MY(size_max) = 48; + MY(tex_min) = 8; + MY(tex_max) = 16; + MY(type) = "decal"; +} +// smoke cloud +SUB(TE_TAREXPLOSION) { + MY(alpha_min) = 32; + MY(alpha_max) = 32; + MY(alpha_fade) = 64; + MY(color_min) = "0x202020"; + MY(color_max) = "0x404040"; + MY(count) = 16; + MY(notunderwater) = true; + MY(size_min) = 12; + MY(size_max) = 12; + MY(tex_max) = 8; + MY(type) = "smoke"; + MY(velocityjitter) = '48.0 48.0 48.0'; +} +// underwater bubbles +SUB(TE_TAREXPLOSION) { + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 64; + MY(bounce) = 1.500000; + MY(color_min) = "0x404040"; + MY(color_max) = "0x808080"; + MY(count) = 16; + MY(gravity) = -0.125000; + MY(liquidfriction) = 0.250000; + MY(originjitter) = '16.0 16.0 16.0'; + MY(size_min) = 3; + MY(size_max) = 3; + MY(tex_min) = 62; + MY(tex_max) = 62; + MY(type) = "bubble"; + MY(underwater) = true; + MY(velocityjitter) = '96.0 96.0 96.0'; +} +// sparks which go through walls +SUB(TE_TAREXPLOSION) { + MY(airfriction) = 0.200000; + MY(alpha_max) = 256; + MY(alpha_fade) = 512; + MY(color_min) = "0x903010"; + MY(color_max) = "0xFFD030"; + MY(count) = 64; + MY(gravity) = 1; + MY(liquidfriction) = 0.800000; + MY(notunderwater) = true; + MY(size_min) = 1; + MY(size_max) = 1; + MY(type) = "spark"; + MY(velocityjitter) = '256.0 256.0 256.0'; + MY(velocityoffset) = '0.0 0.0 80.0'; +} + +// bloody impact effect indicating damage +DEF(TE_BLOOD); +SUB(TE_BLOOD) { + MY(airfriction) = 1; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 64; + MY(bounce) = -1; + MY(count) = 0.167000; + MY(liquidfriction) = 4; + MY(size_min) = 8; + MY(size_max) = 8; + MY(staincolor_min) = "0x808080"; + MY(staincolor_max) = "0x808080"; + MY(staintex_min) = 16; + MY(staintex_max) = 24; + MY(tex_min) = 24; + MY(tex_max) = 32; + MY(type) = "blood"; + MY(velocityjitter) = '64.0 64.0 64.0'; + MY(velocitymultiplier) = 1; +} + +// sparks (quake effect) +DEF(TE_SPARK); +SUB(TE_SPARK) { + MY(alpha_min) = 64; + MY(alpha_max) = 256; + MY(alpha_fade) = 768; + MY(bounce) = -1; + MY(color_min) = "0x8f4333"; + MY(color_max) = "0xfff31b"; + MY(count) = 0.500000; + MY(gravity) = 1; + MY(size_min) = 0.400000; + MY(size_max) = 0.600000; + MY(tex_min) = 40; + MY(tex_max) = 40; + MY(type) = "spark"; + MY(velocityjitter) = '64.0 64.0 64.0'; + MY(velocitymultiplier) = 1; + MY(velocityoffset) = '0.0 0.0 80.0'; +} + +// vortex impact +DEF(TE_PLASMABURN); +// decal +SUB(TE_PLASMABURN) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(countabsolute) = 1; + MY(lightcolor) = '1.0 1.0 1.0'; + MY(lightradiusfade) = 400; + MY(lightradius) = 200; + MY(originjitter) = '16.0 16.0 16.0'; + MY(size_min) = 24; + MY(size_max) = 24; + MY(tex_min) = 47; + MY(tex_max) = 47; + MY(type) = "decal"; +} +// flare effect +SUB(TE_PLASMABURN) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 512; + MY(color_min) = "0x80C0FF"; + MY(color_max) = "0x80C0FF"; + MY(countabsolute) = 1; + MY(size_min) = 8; + MY(size_max) = 8; + MY(tex_min) = 37; + MY(tex_max) = 37; + MY(type) = "static"; +} +// small sparks which form a sphere as they slow down +SUB(TE_PLASMABURN) { + MY(airfriction) = 8; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 1024; + MY(bounce) = 2; + MY(color_min) = "0x2030FF"; + MY(color_max) = "0x80C0FF"; + MY(count) = 128; + MY(liquidfriction) = 8; + MY(size_min) = 1; + MY(size_max) = 2; + MY(type) = "spark"; + MY(velocityjitter) = '128.0 128.0 128.0'; +} + +// quake effect +DEF(TE_SMALLFLASH); +SUB(TE_SMALLFLASH) { + MY(lightcolor) = '2.0 2.0 2.0'; + MY(lightradiusfade) = 1000; + MY(lightradius) = 200; +} + +// quake effect +DEF(TE_FLAMEJET); +SUB(TE_FLAMEJET) { + MY(airfriction) = 1; + MY(alpha_min) = 64; + MY(alpha_max) = 128; + MY(alpha_fade) = 384; + MY(bounce) = 1.100000; + MY(color_min) = "0x6f0f00"; + MY(color_max) = "0xe3974f"; + MY(count) = 0.500000; + MY(gravity) = -1; + MY(liquidfriction) = 4; + MY(size_min) = 4; + MY(size_max) = 4; + MY(type) = "smoke"; + MY(velocityjitter) = '128.0 128.0 128.0'; + MY(velocitymultiplier) = 1; +} + +// quake effect +DEF(TE_LAVASPLASH); +SUB(TE_LAVASPLASH) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 256; + MY(color_min) = "0x6f0f00"; + MY(color_max) = "0xe3974f"; + MY(count) = 32; + MY(gravity) = 0.050000; + MY(originjitter) = '128.0 128.0 32.0'; + MY(originoffset) = '0.0 0.0 32.0'; + MY(size_min) = 12; + MY(size_max) = 12; + MY(type) = "alphastatic"; + MY(velocityjitter) = '128.0 128.0 0.0'; + MY(velocityoffset) = '0.0 0.0 256.0'; +} + +// player teleport effect +DEF(TE_TELEPORT); +SUB(TE_TELEPORT) { + MY(airfriction) = 1; + MY(alpha_min) = 64; + MY(alpha_max) = 128; + MY(alpha_fade) = 256; + MY(color_min) = "0xA0A0A0"; + MY(color_max) = "0xFFFFFF"; + MY(count) = 56; + MY(liquidfriction) = 4; + MY(originjitter) = '16.0 16.0 28.0'; + MY(originoffset) = '0.0 0.0 28.0'; + MY(size_min) = 10; + MY(size_max) = 10; + MY(type) = "static"; + MY(velocityjitter) = '0.0 0.0 256.0'; +} + +// vortex beam +DEF(TE_TEI_G3); +SUB(TE_TEI_G3) { + MY(alpha_min) = 128; + MY(alpha_max) = 128; + MY(alpha_fade) = 256; + MY(color_min) = "0xFFFFFF"; + MY(color_max) = "0xFFFFFF"; + MY(countabsolute) = 1; + MY(size_min) = 4; + MY(size_max) = 4; + MY(tex_min) = 200; + MY(tex_max) = 200; + MY(type) = "beam"; +} +SUB(TE_TEI_G3) { + MY(airfriction) = -4; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 512; + MY(color_min) = "0x202020"; + MY(color_max) = "0x404040"; + MY(size_min) = 1; + MY(size_max) = 1; + MY(trailspacing) = 4; + MY(type) = "smoke"; + MY(velocityjitter) = '8.0 8.0 8.0'; +} + +// smoke effect +DEF(TE_TEI_SMOKE); +SUB(TE_TEI_SMOKE) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 512; + MY(color_min) = "0x202020"; + MY(color_max) = "0x404040"; + MY(count) = 0.167000; + MY(originjitter) = '1.5 1.5 1.5'; + MY(size_min) = 5; + MY(size_max) = 5; + MY(tex_max) = 8; + MY(type) = "smoke"; + MY(velocityjitter) = '6.0 6.0 6.0'; + MY(velocitymultiplier) = 1; +} + +// rocket explosion (bigger than mortar and hagar) +DEF(TE_TEI_BIGEXPLOSION); +// decal +SUB(TE_TEI_BIGEXPLOSION) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(countabsolute) = 1; + MY(lightcolor) = '4.0 2.0 0.5'; + MY(lightradiusfade) = 500; + MY(lightradius) = 500; + MY(originjitter) = '40.0 40.0 40.0'; + MY(size_min) = 72; + MY(size_max) = 72; + MY(tex_min) = 8; + MY(tex_max) = 16; + MY(type) = "decal"; +} +// flare effect +SUB(TE_TEI_BIGEXPLOSION) { + MY(alpha_min) = 192; + MY(alpha_max) = 192; + MY(alpha_fade) = 64; + MY(color_min) = "0x404040"; + MY(color_max) = "0x404040"; + MY(countabsolute) = 1; + MY(size_min) = 72; + MY(size_max) = 72; + MY(tex_min) = 35; + MY(tex_max) = 37; + MY(type) = "static"; +} +// fire effect +SUB(TE_TEI_BIGEXPLOSION) { + MY(airfriction) = 4; + MY(alpha_min) = 128; + MY(alpha_max) = 128; + MY(alpha_fade) = 256; + MY(bounce) = 1.500000; + MY(color_min) = "0x902010"; + MY(color_max) = "0xFFD080"; + MY(count) = 128; + MY(liquidfriction) = 4; + MY(notunderwater) = true; + MY(originjitter) = '8.0 8.0 8.0'; + MY(size_min) = 16; + MY(size_max) = 16; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "static"; + MY(velocityjitter) = '512.0 512.0 512.0'; +} +// underwater bubbles +SUB(TE_TEI_BIGEXPLOSION) { + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 64; + MY(bounce) = 1.500000; + MY(color_min) = "0x404040"; + MY(color_max) = "0x808080"; + MY(count) = 32; + MY(gravity) = -0.125000; + MY(liquidfriction) = 0.250000; + MY(originjitter) = '16.0 16.0 16.0'; + MY(size_min) = 3; + MY(size_max) = 3; + MY(tex_min) = 62; + MY(tex_max) = 62; + MY(type) = "bubble"; + MY(underwater) = true; + MY(velocityjitter) = '144.0 144.0 144.0'; +} +// bouncing sparks +SUB(TE_TEI_BIGEXPLOSION) { + MY(airfriction) = 0.200000; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 384; + MY(bounce) = 1.500000; + MY(color_min) = "0x903010"; + MY(color_max) = "0xFFD030"; + MY(count) = 64; + MY(gravity) = 1; + MY(liquidfriction) = 0.800000; + MY(notunderwater) = true; + MY(size_min) = 2; + MY(size_max) = 2; + MY(type) = "spark"; + MY(velocityjitter) = '384.0 384.0 384.0'; + MY(velocityoffset) = '0.0 0.0 80.0'; +} + +// electro explosion +DEF(TE_TEI_PLASMAHIT); +// decal +SUB(TE_TEI_PLASMAHIT) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(countabsolute) = 1; + MY(lightcolor) = '2.4 4.8 8.0'; + MY(lightradiusfade) = 600; + MY(lightradius) = 200; + MY(originjitter) = '20.0 20.0 20.0'; + MY(size_min) = 32; + MY(size_max) = 32; + MY(tex_min) = 59; + MY(tex_max) = 59; + MY(type) = "decal"; +} +// flare effect +SUB(TE_TEI_PLASMAHIT) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 512; + MY(color_min) = "0x80C0FF"; + MY(color_max) = "0x80C0FF"; + MY(countabsolute) = 1; + MY(size_min) = 32; + MY(size_max) = 32; + MY(tex_min) = 38; + MY(tex_max) = 38; + MY(type) = "static"; +} +// cloud of bouncing sparks +SUB(TE_TEI_PLASMAHIT) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 1024; + MY(bounce) = 1.500000; + MY(color_min) = "0x2030FF"; + MY(color_max) = "0x80C0FF"; + MY(count) = 0.500000; + MY(size_min) = 2; + MY(size_max) = 4; + MY(type) = "spark"; + MY(velocityjitter) = '512.0 512.0 512.0'; +} + +// bloody impact effect indicating damage +DEF(blood); +SUB(blood) { + MY(airfriction) = 0.400000; + MY(alpha_min) = 1560; + MY(alpha_max) = 2560; + MY(alpha_fade) = 7000; + MY(blend) = "invmod"; + MY(bounce) = -1; + MY(color_min) = "0xA8FFFF"; + MY(color_max) = "0xA8FFFFF"; + MY(count) = 0.400000; + MY(sizeincrease) = 20; + MY(size_min) = 5; + MY(size_max) = 11; + MY(staincolor_min) = "0x808080"; + MY(staincolor_max) = "0x808080"; + MY(stainsize_min) = 1; + MY(stainsize_max) = 2; + MY(staintex_min) = 16; + MY(staintex_max) = 24; + MY(stretchfactor) = 20; + MY(tex_min) = 24; + MY(tex_max) = 32; + MY(type) = "spark"; + MY(velocityjitter) = '99.0 99.0 55.0'; +} +//blood mist +SUB(blood) { + MY(alpha_min) = 100; + MY(alpha_max) = 256; + MY(alpha_fade) = 400; + MY(blend) = "invmod"; + MY(color_min) = "0x000000"; + MY(color_max) = "0x420000"; + MY(countabsolute) = 1; + MY(originjitter) = '11.0 11.0 11.0'; + MY(sizeincrease) = 20; + MY(size_min) = 25; + MY(size_max) = 30; + MY(tex_min) = 24; + MY(tex_max) = 32; + MY(type) = "alphastatic"; +} + +// player teleport effect +DEF(teleport); +SUB(teleport) { + MY(airfriction) = 2; + MY(alpha_max) = 256; + MY(alpha_fade) = 100; + MY(bounce) = 1.500000; + MY(color_min) = "0x807aff"; + MY(color_max) = "0x4463d5"; + MY(count) = 500; + MY(originjitter) = '1.0 1.0 1.0'; + MY(size_min) = 1; + MY(size_max) = 1; + MY(stretchfactor) = 0.600000; + MY(tex_min) = 64; + MY(tex_max) = 64; + MY(type) = "spark"; + MY(velocityjitter) = '1000.0 1000.0 1500.0'; + MY(velocitymultiplier) = 0.500000; +} +SUB(teleport) { + MY(alpha_min) = 190; + MY(alpha_max) = 190; + MY(alpha_fade) = 180; + MY(color_min) = "0x807aff"; + MY(color_max) = "0x4463d5"; + MY(countabsolute) = 1; + MY(sizeincrease) = -80; + MY(size_min) = 150; + MY(size_max) = 150; + MY(tex_min) = 65; + MY(tex_max) = 65; + MY(type) = "smoke"; +} + +// normal super gory blood trail (used by gibs) +DEF(TR_BLOOD); +SUB(TR_BLOOD) { + MY(airfriction) = -2; + MY(alpha_min) = 384; + MY(alpha_max) = 984; + MY(alpha_fade) = 1492; + MY(blend) = "invmod"; + MY(bounce) = -1; + MY(color_min) = "0xA8FFFF"; + MY(color_max) = "0xA8FFFF"; + MY(gravity) = 0.400000; + MY(liquidfriction) = 1; + MY(sizeincrease) = -5; + MY(size_min) = 4; + MY(size_max) = 19; + MY(staincolor_min) = "0x808080"; + MY(staincolor_max) = "0x808080"; + MY(stainsize_min) = 1; + MY(stainsize_max) = 2; + MY(staintex_min) = 16; + MY(staintex_max) = 24; + MY(stretchfactor) = 7; + MY(tex_min) = 24; + MY(tex_max) = 32; + MY(trailspacing) = 20; + MY(type) = "spark"; + MY(velocityjitter) = '64.0 64.0 64.0'; + MY(velocitymultiplier) = -0.100000; +} +// splash around gib +SUB(TR_BLOOD) { + MY(alpha_min) = 684; + MY(alpha_max) = 684; + MY(alpha_fade) = 7492; + MY(color_min) = "0xA8FFFF"; + MY(color_max) = "0xA8FFFF"; + MY(sizeincrease) = 500; + MY(size_min) = 4; + MY(size_max) = 6; + MY(tex_min) = 24; + MY(tex_max) = 32; + MY(trailspacing) = 42; + MY(type) = "blood"; +} + +// thinner blood trail (used by quake zombies) +DEF(TR_SLIGHTBLOOD); +SUB(TR_SLIGHTBLOOD) { + MY(airfriction) = 1; + MY(alpha_min) = 384; + MY(alpha_max) = 384; + MY(alpha_fade) = 192; + MY(bounce) = -1; + MY(color_min) = "0xA8FFFF"; + MY(color_max) = "0xA8FFFF"; + MY(liquidfriction) = 4; + MY(size_min) = 8; + MY(size_max) = 8; + MY(staincolor_min) = "0x808080"; + MY(staincolor_max) = "0x808080"; + MY(staintex_min) = 16; + MY(staintex_max) = 24; + MY(tex_min) = 24; + MY(tex_max) = 32; + MY(trailspacing) = 64; + MY(type) = "blood"; + MY(velocityjitter) = '64.0 64.0 64.0'; + MY(velocitymultiplier) = 0.500000; +} + +// func_stardust effect, used in some maps to indicate teleporters +DEF(EF_STARDUST); +SUB(EF_STARDUST) { + MY(airfriction) = 0.200000; + MY(alpha_min) = 64; + MY(alpha_max) = 128; + MY(alpha_fade) = 128; + MY(color_min) = "0xfff368"; + MY(color_max) = "0xfff368"; + MY(count) = 37.500000; + MY(gravity) = -0.100000; + MY(liquidfriction) = 0.800000; + MY(originjitter) = '16.0 16.0 64.0'; + MY(size_min) = 1; + MY(size_max) = 2; + MY(type) = "static"; + MY(velocityjitter) = '32.0 32.0 0.0'; +} + +// flare particle and light +DEF(item_respawn); +SUB(item_respawn) { + MY(alpha_min) = 128; + MY(alpha_max) = 128; + MY(alpha_fade) = 128; + MY(color_min) = "0x63F2EA"; + MY(color_max) = "0x63f2EA"; + MY(countabsolute) = 1; + MY(size_min) = 32; + MY(size_max) = 32; + MY(type) = "static"; +} +// cloud of particles which expand rapidly and then slow to form a ball +SUB(item_respawn) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 1280; + MY(color_min) = "0x63F2EA"; + MY(color_max) = "0x63f2EA"; + MY(count) = 128; + MY(size_min) = 2; + MY(size_max) = 2; + MY(tex_min) = 41; + MY(tex_max) = 41; + MY(type) = "spark"; + MY(velocityjitter) = '256.0 256.0 256.0'; +} + +DEF(jumppad_activate); +SUB(jumppad_activate) { + MY(lightcolor) = '2.0 2.0 2.0'; + MY(lightradiusfade) = 2000; + MY(lightradius) = 200; +} + +DEF(laser_muzzleflash); +// glow and light +SUB(laser_muzzleflash) { + MY(airfriction) = 10; + MY(alpha_min) = 256; + MY(alpha_max) = 512; + MY(alpha_fade) = 6280; + MY(color_min) = "0xcc0000"; + MY(color_max) = "0xff0000"; + MY(countabsolute) = 1; + MY(lightcolor) = '3.0 0.1 0.1'; + MY(lightradiusfade) = 2000; + MY(lightradius) = 200; + MY(sizeincrease) = -100; + MY(size_min) = 10; + MY(size_max) = 15; + MY(stretchfactor) = 2; + MY(tex_min) = 65; + MY(tex_max) = 65; + MY(type) = "smoke"; +} +// electricity +SUB(laser_muzzleflash) { + MY(airfriction) = 10; + MY(alpha_min) = 256; + MY(alpha_max) = 512; + MY(alpha_fade) = 6280; + MY(color_min) = "0xb44215"; + MY(color_max) = "0xff0000"; + MY(count) = 3; + MY(originjitter) = '2.0 2.0 2.0'; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = 4000; + MY(spin_max) = -4000; + MY(sizeincrease) = -100; + MY(size_min) = 5; + MY(size_max) = 7; + MY(stretchfactor) = 2.300000; + MY(tex_min) = 43; + MY(tex_max) = 43; + MY(type) = "spark"; + MY(velocityjitter) = '150.0 150.0 150.0'; + MY(velocitymultiplier) = 0.200000; +} +// fire +SUB(laser_muzzleflash) { + MY(airfriction) = 12; + MY(alpha_min) = 256; + MY(alpha_max) = 512; + MY(alpha_fade) = 6280; + MY(color_min) = "0xff4200"; + MY(color_max) = "0xff0000"; + MY(count) = 6; + MY(originjitter) = '2.0 2.0 2.0'; + MY(sizeincrease) = -100; + MY(size_min) = 7; + MY(size_max) = 9; + MY(stretchfactor) = 2; + MY(tex_min) = 8; + MY(tex_max) = 15; + MY(type) = "spark"; + MY(velocityjitter) = '100.0 100.0 100.0'; + MY(velocitymultiplier) = 0.200000; +} + +DEF(laser_impact); +// decal +SUB(laser_impact) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(countabsolute) = 1; + MY(lightcolor) = '8.0 0.4 0.4'; + MY(lightradiusfade) = 500; + MY(lightradius) = 200; + MY(originjitter) = '14.0 14.0 14.0'; + MY(size_min) = 24; + MY(size_max) = 24; + MY(tex_min) = 47; + MY(tex_max) = 47; + MY(type) = "decal"; +} +// flare effect +SUB(laser_impact) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 1024; + MY(color_min) = "0xFF2010"; + MY(color_max) = "0xFF2010"; + MY(countabsolute) = 1; + MY(size_min) = 24; + MY(size_max) = 24; + MY(tex_min) = 39; + MY(tex_max) = 39; + MY(type) = "static"; +} +// sparks that rapidly expand and rapidly slow down to form an interesting spherical effect +SUB(laser_impact) { + MY(airfriction) = 6; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 1024; + MY(color_min) = "0x800000"; + MY(color_max) = "0xFF8020"; + MY(count) = 128; + MY(liquidfriction) = 6; + MY(size_min) = 4; + MY(size_max) = 4; + MY(type) = "spark"; + MY(velocityjitter) = '256.0 256.0 256.0'; +} +SUB(laser_impact) { + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 256; + MY(color_min) = "0x800000"; + MY(color_max) = "0xFF8020"; + MY(count) = 4; + MY(originjitter) = '1.0 1.0 1.0'; + MY(sizeincrease) = 6; + MY(size_min) = 12; + MY(size_max) = 12; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "smoke"; + MY(velocityjitter) = '16.0 16.0 16.0'; + MY(velocitymultiplier) = 0.010000; +} + +DEF(shotgun_muzzleflash); +SUB(shotgun_muzzleflash) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 512; + MY(color_min) = "0x202020"; + MY(color_max) = "0x404040"; + MY(count) = 1.500000; + MY(lightcolor) = '2.0 1.5 0.2'; + MY(lightradiusfade) = 2000; + MY(lightradius) = 200; + MY(originjitter) = '1.5 1.5 1.5'; + MY(sizeincrease) = 12; + MY(size_min) = 5; + MY(size_max) = 5; + MY(tex_max) = 8; + MY(type) = "smoke"; + MY(velocityjitter) = '6.0 6.0 6.0'; + MY(velocitymultiplier) = 0.050000; +} +SUB(shotgun_muzzleflash) { + MY(airfriction) = 5; + MY(alpha_max) = 128; + MY(alpha_fade) = 1024; + MY(color_min) = "0xffdb96"; + MY(color_max) = "0xff5400"; + MY(count) = 16; + MY(originjitter) = '1.0 1.0 1.0'; + MY(size_min) = 10; + MY(size_max) = 20; + MY(stretchfactor) = 2.500000; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "spark"; + MY(velocityjitter) = '100.0 100.0 100.0'; + MY(velocitymultiplier) = 0.500000; +} + +// shotgun pellet impact +DEF(shotgun_impact); +// decal +SUB(shotgun_impact) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(countabsolute) = 1; + MY(originjitter) = '10.0 10.0 10.0'; + MY(size_min) = 5; + MY(size_max) = 8; + MY(tex_min) = 56; + MY(tex_max) = 59; + MY(type) = "decal"; +} +// dust/smoke drifting away from the impact +SUB(shotgun_impact) { + MY(airfriction) = 5; + MY(alpha_min) = 300; + MY(alpha_max) = 550; + MY(alpha_fade) = 756; + MY(color_min) = "0x473a37"; + MY(color_max) = "0x0b0a07"; + MY(count) = 1; + MY(notunderwater) = true; + MY(startangle_max) = 360; + MY(spin_min) = -50; + MY(spin_max) = 50; + MY(sizeincrease) = 25; + MY(size_min) = 10; + MY(size_max) = 20; + MY(tex_max) = 8; + MY(type) = "alphastatic"; + MY(velocityjitter) = '150.0 150.0 150.0'; + MY(velocitymultiplier) = 0.200000; +} +// dust/smoke staying at the impact +SUB(shotgun_impact) { + MY(airfriction) = 5; + MY(alpha_min) = 200; + MY(alpha_max) = 350; + MY(alpha_fade) = 500; + MY(bounce) = 6; + MY(color_min) = "0x201d1a"; + MY(color_max) = "0x000000"; + MY(count) = 0.200000; + MY(notunderwater) = true; + MY(startangle_max) = 360; + MY(spin_min) = -50; + MY(spin_max) = 50; + MY(sizeincrease) = 74; + MY(size_min) = 10; + MY(size_max) = 11; + MY(tex_min) = 36; + MY(tex_max) = 36; + MY(type) = "alphastatic"; + MY(velocityjitter) = '11.0 11.0 11.0'; + MY(velocitymultiplier) = 0.030000; +} +// sparks +SUB(shotgun_impact) { + MY(airfriction) = 1.100000; + MY(alpha_max) = 356; + MY(alpha_fade) = 268; + MY(bounce) = 1.500000; + MY(color_min) = "0xFDFFD9"; + MY(color_max) = "0xFDFFD9"; + MY(count) = 0.500000; + MY(gravity) = 1; + MY(notunderwater) = true; + MY(originjitter) = '1.0 1.0 1.0'; + MY(size_min) = 0.600000; + MY(size_max) = 0.600000; + MY(tex_min) = 40; + MY(tex_max) = 40; + MY(type) = "spark"; + MY(velocityjitter) = '200.0 200.0 200.0'; + MY(velocitymultiplier) = 0.200000; +} + +DEF(uzi_muzzleflash); +SUB(uzi_muzzleflash) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 512; + MY(color_min) = "0x202020"; + MY(color_max) = "0x404040"; + MY(count) = 1; + MY(gravity) = -0.100000; + MY(lightcolor) = '2.0 1.5 0.2'; + MY(lightradiusfade) = 2000; + MY(lightradius) = 200; + MY(originjitter) = '1.5 1.5 1.5'; + MY(size_min) = 5; + MY(size_max) = 5; + MY(tex_max) = 8; + MY(type) = "static"; + MY(velocityjitter) = '1.0 1.0 1.0'; + MY(velocitymultiplier) = 0.030000; +} +SUB(uzi_muzzleflash) { + MY(airfriction) = 12; + MY(alpha_max) = 256; + MY(alpha_fade) = 6000; + MY(color_min) = "0xff9c00"; + MY(color_max) = "0xffd200"; + MY(count) = 3; + MY(originjitter) = '1.0 1.0 1.0'; + MY(size_min) = 0.300000; + MY(size_max) = 0.400000; + MY(stretchfactor) = 0.150000; + MY(tex_min) = 40; + MY(tex_max) = 40; + MY(type) = "spark"; + MY(velocityjitter) = '555.0 555.0 555.0'; + MY(velocitymultiplier) = 3; +} + +DEF(machinegun_impact); +// decal +SUB(machinegun_impact) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(countabsolute) = 1; + MY(lightcolor) = '6.0 3.6 0.6'; + MY(lightradiusfade) = 800; + MY(lightradius) = 80; + MY(originjitter) = '10.0 10.0 10.0'; + MY(size_min) = 5; + MY(size_max) = 5; + MY(tex_min) = 56; + MY(tex_max) = 59; + MY(type) = "decal"; +} +// dust/smoke drifting away from the impact +SUB(machinegun_impact) { + MY(airfriction) = 5; + MY(alpha_min) = 300; + MY(alpha_max) = 550; + MY(alpha_fade) = 456; + MY(color_min) = "0x473a37"; + MY(color_max) = "0x0b0a07"; + MY(count) = 1.500000; + MY(notunderwater) = true; + MY(startangle_max) = 360; + MY(spin_min) = -50; + MY(spin_max) = 50; + MY(sizeincrease) = 15; + MY(size_min) = 10; + MY(size_max) = 20; + MY(tex_max) = 8; + MY(type) = "alphastatic"; + MY(velocityjitter) = '150.0 150.0 150.0'; + MY(velocitymultiplier) = 0.100000; +} +// dust/smoke staying at the impact +SUB(machinegun_impact) { + MY(airfriction) = 5; + MY(alpha_min) = 200; + MY(alpha_max) = 350; + MY(alpha_fade) = 500; + MY(bounce) = 6; + MY(color_min) = "0x201d1a"; + MY(color_max) = "0x000000"; + MY(count) = 0.500000; + MY(notunderwater) = true; + MY(startangle_max) = 360; + MY(spin_min) = -50; + MY(spin_max) = 50; + MY(sizeincrease) = 74; + MY(size_min) = 10; + MY(size_max) = 11; + MY(tex_min) = 36; + MY(tex_max) = 36; + MY(type) = "alphastatic"; + MY(velocityjitter) = '11.0 11.0 11.0'; + MY(velocitymultiplier) = 0.030000; +} +// debris +SUB(machinegun_impact) { + MY(airfriction) = 1; + MY(alpha_min) = 300; + MY(alpha_max) = 550; + MY(alpha_fade) = 256; + MY(bounce) = 1.700000; + MY(color_min) = "0x63493e"; + MY(color_max) = "0xffffff"; + MY(count) = 1; + MY(gravity) = 1.400000; + MY(notunderwater) = true; + MY(startangle_max) = 360; + MY(spin_min) = -500; + MY(spin_max) = 500; + MY(size_min) = 1; + MY(size_max) = 5; + MY(tex_min) = 66; + MY(tex_max) = 68; + MY(type) = "alphastatic"; + MY(velocityjitter) = '350.0 350.0 350.0'; + MY(velocitymultiplier) = 0.200000; +} +// sparks +SUB(machinegun_impact) { + MY(airfriction) = 2; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 168; + MY(bounce) = 1; + MY(color_min) = "0xFDFFD9"; + MY(color_max) = "0xFDFFD9"; + MY(count) = 1; + MY(gravity) = 1; + MY(notunderwater) = true; + MY(originjitter) = '1.0 1.0 1.0'; + MY(size_min) = 0.300000; + MY(size_max) = 0.300000; + MY(tex_min) = 40; + MY(tex_max) = 40; + MY(type) = "spark"; + MY(velocityjitter) = '300.0 300.0 300.0'; + MY(velocitymultiplier) = 0.200000; +} + +DEF(grenadelauncher_muzzleflash); +SUB(grenadelauncher_muzzleflash) { + MY(airfriction) = 12; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 512; + MY(color_min) = "0x202020"; + MY(color_max) = "0x404040"; + MY(count) = 1.500000; + MY(lightcolor) = '2.0 1.5 0.2'; + MY(lightradiusfade) = 2000; + MY(lightradius) = 200; + MY(originjitter) = '1.5 1.5 1.5'; + MY(size_min) = 5; + MY(size_max) = 5; + MY(tex_max) = 8; + MY(type) = "smoke"; + MY(velocityjitter) = '20.0 20.0 20.0'; + MY(velocitymultiplier) = 0.030000; +} +SUB(grenadelauncher_muzzleflash) { + MY(airfriction) = 5; + MY(alpha_max) = 128; + MY(alpha_fade) = 1024; + MY(color_min) = "0xffdb96"; + MY(color_max) = "0xff5400"; + MY(count) = 16; + MY(originjitter) = '1.0 1.0 1.0'; + MY(size_min) = 10; + MY(size_max) = 20; + MY(stretchfactor) = 2.500000; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "spark"; + MY(velocityjitter) = '100.0 100.0 100.0'; + MY(velocitymultiplier) = 0.500000; +} + +// mortar trail +DEF(TR_GRENADE); +// smoke +SUB(TR_GRENADE) { + MY(alpha_min) = 300; + MY(alpha_max) = 400; + MY(alpha_fade) = 780; + MY(bounce) = 1; + MY(color_min) = "0x101010"; + MY(color_max) = "0x000000"; + MY(originjitter) = '1.0 1.0 1.0'; + MY(sizeincrease) = 10; + MY(size_min) = 3; + MY(size_max) = 2; + MY(tex_max) = 8; + MY(trailspacing) = 4; + MY(type) = "smoke"; + MY(velocityjitter) = '1.0 1.0 1.0'; + MY(velocitymultiplier) = -0.020000; +} +// fire +SUB(TR_GRENADE) { + MY(airfriction) = 8; + MY(alpha_min) = 100; + MY(alpha_max) = 144; + MY(alpha_fade) = 988; + MY(color_min) = "0xffdf72"; + MY(color_max) = "0x811200"; + MY(notunderwater) = true; + MY(sizeincrease) = -15; + MY(size_min) = 5; + MY(size_max) = 2; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(trailspacing) = 4; + MY(type) = "static"; + MY(velocityjitter) = '32.0 32.0 32.0'; + MY(velocitymultiplier) = -1; +} +// bubbles +SUB(TR_GRENADE) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 256; + MY(bounce) = 1.500000; + MY(color_min) = "0x404040"; + MY(color_max) = "0x808080"; + MY(gravity) = -0.125000; + MY(liquidfriction) = 4; + MY(size_min) = 1; + MY(size_max) = 1; + MY(tex_min) = 62; + MY(tex_max) = 62; + MY(trailspacing) = 16; + MY(type) = "bubble"; + MY(underwater) = true; + MY(velocityjitter) = '16.0 16.0 16.0'; +} + +// hookbomb trail +DEF(TR_KNIGHTSPIKE); +// smoke +SUB(TR_KNIGHTSPIKE) { + MY(alpha_min) = 300; + MY(alpha_max) = 400; + MY(alpha_fade) = 600; + MY(bounce) = 1; + MY(color_min) = "0x303030"; + MY(color_max) = "0x000000"; + MY(gravity) = -0.110000; + MY(notunderwater) = true; + MY(originjitter) = '2.0 2.0 2.0'; + MY(sizeincrease) = 11; + MY(size_min) = 3; + MY(size_max) = 3; + MY(tex_max) = 8; + MY(trailspacing) = 6; + MY(type) = "smoke"; + MY(velocityjitter) = '3.0 3.0 3.0'; + MY(velocitymultiplier) = -0.020000; +} +// marker +SUB(TR_KNIGHTSPIKE) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 720; + MY(color_min) = "0x666666"; + MY(color_max) = "0x000000"; + MY(sizeincrease) = -0.100000; + MY(size_min) = 1; + MY(size_max) = 1; + MY(tex_min) = 62; + MY(tex_max) = 62; + MY(trailspacing) = 2; + MY(type) = "alphastatic"; +} +// bubbles +SUB(TR_KNIGHTSPIKE) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 256; + MY(bounce) = 1.500000; + MY(color_min) = "0x404040"; + MY(color_max) = "0x808080"; + MY(gravity) = -0.125000; + MY(liquidfriction) = 4; + MY(size_min) = 1; + MY(size_max) = 1; + MY(tex_min) = 62; + MY(tex_max) = 62; + MY(trailspacing) = 32; + MY(type) = "bubble"; + MY(underwater) = true; + MY(velocityjitter) = '16.0 16.0 16.0'; +} + +DEF(grenade_explode); +// decal +SUB(grenade_explode) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(countabsolute) = 1; + MY(lightcolor) = '8.0 4.0 1.0'; + MY(lightradiusfade) = 400; + MY(lightradius) = 250; + MY(originjitter) = '26.0 26.0 26.0'; + MY(size_min) = 48; + MY(size_max) = 48; + MY(tex_min) = 8; + MY(tex_max) = 16; + MY(type) = "decal"; +} +// fire effect which expands then slows +SUB(grenade_explode) { + MY(airfriction) = 8; + MY(alpha_min) = 128; + MY(alpha_max) = 228; + MY(alpha_fade) = 356; + MY(bounce) = 4.500000; + MY(color_min) = "0xe03f00"; + MY(color_max) = "0x5e0000"; + MY(count) = 40; + MY(liquidfriction) = 8; + MY(notunderwater) = true; + MY(originjitter) = '8.0 8.0 8.0'; + MY(sizeincrease) = 20; + MY(size_min) = 16; + MY(size_max) = 26; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "static"; + MY(velocityjitter) = '256.0 256.0 256.0'; +} +// fire effect which make bright dot inside +SUB(grenade_explode) { + MY(airfriction) = 8; + MY(alpha_min) = 228; + MY(alpha_max) = 328; + MY(alpha_fade) = 756; + MY(bounce) = 1; + MY(color_min) = "0xe03f00"; + MY(color_max) = "0xffdf92"; + MY(count) = 15; + MY(liquidfriction) = 8; + MY(notunderwater) = true; + MY(originjitter) = '8.0 8.0 8.0'; + MY(sizeincrease) = 40; + MY(size_min) = 6; + MY(size_max) = 16; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "static"; + MY(velocityjitter) = '256.0 256.0 256.0'; +} +// smoke +SUB(grenade_explode) { + MY(airfriction) = 5; + MY(alpha_min) = 300; + MY(alpha_max) = 550; + MY(alpha_fade) = 556; + MY(bounce) = 6; + MY(color_min) = "0x000000"; + MY(color_max) = "0x111111"; + MY(count) = 10; + MY(notunderwater) = true; + MY(sizeincrease) = 34; + MY(size_min) = 20; + MY(size_max) = 40; + MY(tex_max) = 8; + MY(type) = "alphastatic"; + MY(velocityjitter) = '256.0 256.0 256.0'; +} +// underwater bubbles +SUB(grenade_explode) { + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 64; + MY(bounce) = 1.500000; + MY(color_min) = "0x404040"; + MY(color_max) = "0x808080"; + MY(count) = 32; + MY(gravity) = -0.125000; + MY(liquidfriction) = 0.250000; + MY(originjitter) = '16.0 16.0 16.0'; + MY(size_min) = 3; + MY(size_max) = 6; + MY(tex_min) = 62; + MY(tex_max) = 62; + MY(type) = "bubble"; + MY(underwater) = true; + MY(velocityjitter) = '196.0 196.0 196.0'; +} +// underwatershockwave +SUB(grenade_explode) { + MY(alpha_min) = 40; + MY(alpha_max) = 40; + MY(alpha_fade) = 300; + MY(countabsolute) = 1; + MY(sizeincrease) = 1500; + MY(size_min) = 5; + MY(size_max) = 5; + MY(tex_min) = 33; + MY(tex_max) = 33; + MY(type) = "smoke"; + MY(underwater) = true; + MY(velocitymultiplier) = 0.300000; +} +// bouncing sparks +SUB(grenade_explode) { + MY(airfriction) = 1; + MY(alpha_min) = 644; + MY(alpha_max) = 956; + MY(alpha_fade) = 484; + MY(bounce) = 1.600000; + MY(color_min) = "0xffa35b"; + MY(color_max) = "0xfff2be"; + MY(count) = 16; + MY(gravity) = 1; + MY(liquidfriction) = 0.800000; + MY(notunderwater) = true; + MY(originjitter) = '16.0 16.0 16.0'; + MY(size_min) = 1; + MY(size_max) = 0.100000; + MY(tex_min) = 40; + MY(tex_max) = 40; + MY(type) = "spark"; + MY(velocityjitter) = '424.0 424.0 624.0'; + MY(velocityoffset) = '0.0 0.0 80.0'; +} +// debris +SUB(grenade_explode) { + MY(airfriction) = 0.500000; + MY(alpha_min) = 644; + MY(alpha_max) = 956; + MY(alpha_fade) = 684; + MY(bounce) = 1.600000; + MY(color_min) = "0x6a3d25"; + MY(color_max) = "0xcac5b4"; + MY(count) = 12; + MY(gravity) = 1.300000; + MY(notunderwater) = true; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = -1000; + MY(spin_max) = 1000; + MY(size_min) = 2; + MY(size_max) = 6; + MY(tex_min) = 66; + MY(tex_max) = 68; + MY(type) = "alphastatic"; + MY(velocityjitter) = '324.0 324.0 524.0'; +} + +DEF(electro_muzzleflash); +SUB(electro_muzzleflash) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 512; + MY(color_min) = "0x283880"; + MY(color_max) = "0x283880"; + MY(countabsolute) = 1; + MY(lightcolor) = '1.5 3.0 6.0'; + MY(lightradiusfade) = 2000; + MY(lightradius) = 200; + MY(originjitter) = '1.5 1.5 1.5'; + MY(sizeincrease) = -10; + MY(size_min) = 15; + MY(size_max) = 15; + MY(tex_min) = 65; + MY(tex_max) = 65; + MY(type) = "smoke"; + MY(velocityjitter) = '6.0 6.0 6.0'; + MY(velocitymultiplier) = 0.010000; +} +SUB(electro_muzzleflash) { + MY(airfriction) = 2; + MY(alpha_min) = 110; + MY(alpha_max) = 228; + MY(alpha_fade) = 2024; + MY(color_min) = "0xD9FDFF"; + MY(color_max) = "0xD9FDFF"; + MY(count) = 7; + MY(originjitter) = '1.0 1.0 1.0'; + MY(size_min) = 5; + MY(size_max) = 15; + MY(stretchfactor) = 1.500000; + MY(tex_min) = 8; + MY(tex_max) = 15; + MY(type) = "spark"; + MY(velocityjitter) = '150.0 150.0 150.0'; + MY(velocitymultiplier) = 0.500000; +} +SUB(electro_muzzleflash) { + MY(airfriction) = 8; + MY(alpha_min) = 110; + MY(alpha_max) = 228; + MY(alpha_fade) = 1024; + MY(color_min) = "0xD9FDFF"; + MY(color_max) = "0xD9FDFF"; + MY(count) = 5; + MY(gravity) = 1.300000; + MY(originjitter) = '1.0 1.0 1.0'; + MY(size_min) = 7; + MY(size_max) = 6; + MY(stretchfactor) = 0.100000; + MY(tex_min) = 41; + MY(tex_max) = 41; + MY(type) = "spark"; + MY(velocityjitter) = '350.0 350.0 350.0'; + MY(velocitymultiplier) = 2.500000; +} + +// electro trail +DEF(TR_NEXUIZPLASMA); +// glowing vapor trail +SUB(TR_NEXUIZPLASMA) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 968; + MY(color_min) = "0x283880"; + MY(color_max) = "0x283880"; + MY(lightcolor) = '1.5 3.0 6.0'; + MY(lightradius) = 90; + MY(size_min) = 3; + MY(size_max) = 3; + MY(tex_min) = 38; + MY(tex_max) = 38; + MY(trailspacing) = 2; + MY(type) = "static"; + MY(velocitymultiplier) = -0.100000; +} +// bright sparks +SUB(TR_NEXUIZPLASMA) { + MY(airfriction) = 12; + MY(alpha_min) = 444; + MY(alpha_max) = 512; + MY(alpha_fade) = 1866; + MY(bounce) = 1; + MY(color_min) = "0x629dff"; + MY(color_max) = "0x0018ff"; + MY(count) = 1.500000; + MY(originjitter) = '1.0 1.0 1.0'; + MY(sizeincrease) = -20; + MY(size_min) = 2; + MY(size_max) = 4; + MY(tex_min) = 42; + MY(tex_max) = 42; + MY(trailspacing) = 12; + MY(type) = "snow"; + MY(velocityjitter) = '50.0 50.0 50.0'; + MY(velocityoffset) = '0.0 0.0 15.0'; +} + +DEF(electro_impact); +// decal +SUB(electro_impact) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(countabsolute) = 1; + MY(lightcolor) = '3.1 4.4 10.0'; + MY(lightradiusfade) = 250; + MY(lightradius) = 250; + MY(originjitter) = '17.0 17.0 17.0'; + MY(size_min) = 32; + MY(size_max) = 32; + MY(tex_min) = 59; + MY(tex_max) = 59; + MY(type) = "decal"; +} +// shockwave +SUB(electro_impact) { + MY(alpha_min) = 40; + MY(alpha_max) = 40; + MY(alpha_fade) = 350; + MY(color_min) = "0x80C0FF"; + MY(color_max) = "0x80C0FF"; + MY(countabsolute) = 1; + MY(sizeincrease) = 1000; + MY(size_min) = 32; + MY(size_max) = 32; + MY(tex_min) = 33; + MY(tex_max) = 33; + MY(type) = "smoke"; + MY(velocitymultiplier) = 44; +} +// flare effect +SUB(electro_impact) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 512; + MY(color_min) = "0x80C0FF"; + MY(color_max) = "0x80C0FF"; + MY(countabsolute) = 1; + MY(size_min) = 12; + MY(size_max) = 32; + MY(tex_min) = 38; + MY(tex_max) = 38; + MY(type) = "static"; +} +// cloud of bouncing sparks +SUB(electro_impact) { + MY(airfriction) = 6; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 1024; + MY(bounce) = 2; + MY(color_min) = "0x629dff"; + MY(color_max) = "0x0018ff"; + MY(count) = 30; + MY(gravity) = -0.300000; + MY(originjitter) = '1.0 1.0 1.0'; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = -9999; + MY(spin_max) = 9999; + MY(sizeincrease) = -50; + MY(size_min) = 36; + MY(size_max) = 36; + MY(tex_min) = 42; + MY(tex_max) = 42; + MY(type) = "smoke"; + MY(velocityjitter) = '512.0 512.0 512.0'; +} +// inner cloud of smoke +SUB(electro_impact) { + MY(airfriction) = 30; + MY(alpha_min) = 200; + MY(alpha_max) = 256; + MY(alpha_fade) = 512; + MY(color_min) = "0x629dff"; + MY(color_max) = "0x0018ff"; + MY(count) = 30; + MY(originjitter) = '20.0 20.0 20.0'; + MY(sizeincrease) = 50; + MY(size_min) = 20; + MY(size_max) = 24; + MY(tex_max) = 8; + MY(type) = "smoke"; + MY(velocityjitter) = '320.0 320.0 320.0'; +} + +DEF(electro_ballexplode); +// decal +SUB(electro_ballexplode) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(countabsolute) = 1; + MY(lightcolor) = '3.1 4.4 10.0'; + MY(lightradiusfade) = 250; + MY(lightradius) = 250; + MY(originjitter) = '17.0 17.0 17.0'; + MY(size_min) = 32; + MY(size_max) = 32; + MY(tex_min) = 59; + MY(tex_max) = 59; + MY(type) = "decal"; +} +// flare effect +SUB(electro_ballexplode) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 512; + MY(color_min) = "0x80C0FF"; + MY(color_max) = "0x80C0FF"; + MY(countabsolute) = 1; + MY(size_min) = 32; + MY(size_max) = 32; + MY(tex_min) = 38; + MY(tex_max) = 38; + MY(type) = "static"; +} +// cloud of bouncing sparks +SUB(electro_ballexplode) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 1024; + MY(bounce) = 2; + MY(color_min) = "0xFDFFD9"; + MY(color_max) = "0xFDFFD9"; + MY(count) = 64; + MY(originjitter) = '1.0 1.0 1.0'; + MY(size_min) = 1; + MY(size_max) = 2; + MY(stretchfactor) = 0.400000; + MY(tex_min) = 41; + MY(tex_max) = 41; + MY(type) = "spark"; + MY(velocityjitter) = '512.0 512.0 512.0'; +} +// inner cloud of smoke +SUB(electro_ballexplode) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 512; + MY(color_min) = "0x202020"; + MY(color_max) = "0x404040"; + MY(count) = 8; + MY(originjitter) = '20.0 20.0 20.0'; + MY(size_min) = 24; + MY(size_max) = 24; + MY(tex_max) = 8; + MY(type) = "smoke"; + MY(velocityjitter) = '32.0 32.0 32.0'; +} + +DEF(electro_combo); +// decal +SUB(electro_combo) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(countabsolute) = 1; + MY(lightcolor) = '4.0 5.0 6.0'; + MY(lightradiusfade) = 300; + MY(lightradius) = 400; + MY(originjitter) = '17.0 17.0 17.0'; + MY(size_min) = 64; + MY(size_max) = 64; + MY(tex_min) = 59; + MY(tex_max) = 59; + MY(type) = "decal"; +} +// flare effect +SUB(electro_combo) { + MY(alpha_min) = 128; + MY(alpha_max) = 128; + MY(alpha_fade) = 64; + MY(color_min) = "0x80C0FF"; + MY(color_max) = "0x80C0FF"; + MY(countabsolute) = 1; + MY(size_min) = 48; + MY(size_max) = 48; + MY(tex_min) = 38; + MY(tex_max) = 38; + MY(type) = "static"; +} +// large sparks +SUB(electro_combo) { + MY(airfriction) = 6; + MY(alpha_min) = 156; + MY(alpha_max) = 156; + MY(alpha_fade) = 156; + MY(bounce) = 2; + MY(color_min) = "0x2030FF"; + MY(color_max) = "0x80C0FF"; + MY(count) = 5; + MY(liquidfriction) = 16; + MY(sizeincrease) = 50; + MY(size_min) = 32; + MY(size_max) = 32; + MY(tex_max) = 7; + MY(type) = "static"; + MY(velocityjitter) = '512.0 512.0 512.0'; +} +SUB(electro_combo) { + MY(alpha_min) = 444; + MY(alpha_max) = 512; + MY(alpha_fade) = 700; + MY(bounce) = 1.600000; + MY(color_min) = "0xa9cacf"; + MY(color_max) = "0x0054ff"; + MY(count) = 32; + MY(gravity) = 0.300000; + MY(originjitter) = '1.0 1.0 1.0'; + MY(size_min) = 2; + MY(size_max) = 4; + MY(stretchfactor) = 2; + MY(tex_min) = 41; + MY(tex_max) = 41; + MY(type) = "spark"; + MY(velocityjitter) = '312.0 312.0 312.0'; + MY(velocitymultiplier) = 3; +} +// inner cloud of smoke +SUB(electro_combo) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 256; + MY(color_min) = "0x202020"; + MY(color_max) = "0x404040"; + MY(count) = 0.125000; + MY(originjitter) = '20.0 20.0 20.0'; + MY(size_min) = 24; + MY(size_max) = 24; + MY(tex_max) = 8; + MY(type) = "smoke"; + MY(velocityjitter) = '32.0 32.0 32.0'; +} +// shockwave +SUB(electro_combo) { + MY(alpha_min) = 40; + MY(alpha_max) = 40; + MY(alpha_fade) = 100; + MY(color_min) = "0xa9cacf"; + MY(color_max) = "0x0054ff"; + MY(countabsolute) = 1; + MY(sizeincrease) = 600; + MY(size_min) = 30; + MY(size_max) = 30; + MY(tex_min) = 33; + MY(tex_max) = 33; + MY(type) = "smoke"; + MY(velocitymultiplier) = 0.300000; +} + +DEF(crylink_muzzleflash); +SUB(crylink_muzzleflash) { + MY(alpha_min) = 128; + MY(alpha_max) = 128; + MY(alpha_fade) = 2024; + MY(color_min) = "0xdd9cff"; + MY(color_max) = "0xff0090"; + MY(count) = 0.500000; + MY(lightcolor) = '1.6 0.2 2.0'; + MY(lightradiusfade) = 2000; + MY(lightradius) = 200; + MY(size_min) = 15; + MY(size_max) = 20; + MY(tex_min) = 65; + MY(tex_max) = 65; + MY(type) = "smoke"; + MY(velocitymultiplier) = 0.010000; +} +SUB(crylink_muzzleflash) { + MY(airfriction) = 12; + MY(alpha_max) = 128; + MY(alpha_fade) = 1024; + MY(color_min) = "0xA080C0"; + MY(color_max) = "0xA080C0"; + MY(count) = 5; + MY(originjitter) = '1.0 1.0 1.0'; + MY(size_min) = 5; + MY(size_max) = 10; + MY(stretchfactor) = 1.500000; + MY(tex_min) = 35; + MY(tex_max) = 36; + MY(type) = "spark"; + MY(velocityjitter) = '200.0 200.0 200.0'; + MY(velocitymultiplier) = 0.300000; +} + +DEF(crylink_impact); +// decal +SUB(crylink_impact) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(countabsolute) = 1; + MY(originjitter) = '12.0 12.0 12.0'; + MY(size_min) = 24; + MY(size_max) = 24; + MY(tex_min) = 47; + MY(tex_max) = 47; + MY(type) = "decal"; +} +// purple flare effect +SUB(crylink_impact) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 512; + MY(color_min) = "0x504060"; + MY(color_max) = "0x504060"; + MY(countabsolute) = 1; + MY(size_min) = 24; + MY(size_max) = 24; + MY(tex_min) = 39; + MY(tex_max) = 39; + MY(type) = "static"; +} +// purple sparks +SUB(crylink_impact) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 1024; + MY(bounce) = 2; + MY(color_min) = "0xA040C0"; + MY(color_max) = "0xA040C0"; + MY(count) = 40; + MY(size_min) = 6; + MY(size_max) = 6; + MY(tex_min) = 41; + MY(tex_max) = 41; + MY(type) = "spark"; + MY(velocityjitter) = '512.0 512.0 512.0'; +} +// purple splash +SUB(crylink_impact) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 512; + MY(color_min) = "0xE070FF"; + MY(color_max) = "0xE070FF"; + MY(count) = 1.500000; + MY(size_min) = 16; + MY(size_max) = 16; + MY(type) = "static"; + MY(velocityjitter) = '32.0 32.0 32.0'; +} +// purple splash +SUB(crylink_impact) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 1024; + MY(color_min) = "0xE070FF"; + MY(color_max) = "0xE070FF"; + MY(count) = 3; + MY(size_min) = 16; + MY(size_max) = 16; + MY(type) = "static"; + MY(velocityjitter) = '256.0 256.0 256.0'; +} + +DEF(nex_muzzleflash); +SUB(nex_muzzleflash) { + MY(airfriction) = 9; + MY(alpha_min) = 328; + MY(alpha_max) = 328; + MY(alpha_fade) = 4000; + MY(color_min) = "0x202020"; + MY(color_max) = "0x0072ff"; + MY(count) = 12; + MY(lightcolor) = '2.0 2.5 3.0'; + MY(lightradiusfade) = 200; + MY(lightradius) = 200; + MY(originjitter) = '4.0 4.0 4.0'; + MY(sizeincrease) = -100; + MY(size_min) = 16; + MY(size_max) = 16; + MY(stretchfactor) = 2; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "spark"; + MY(velocityjitter) = '180.0 180.0 180.0'; + MY(velocitymultiplier) = 1.400000; +} +SUB(nex_muzzleflash) { + MY(airfriction) = 9; + MY(alpha_max) = 128; + MY(alpha_fade) = 1024; + MY(color_min) = "0xD9FDFF"; + MY(color_max) = "0xD9FDFF"; + MY(count) = 50; + MY(originjitter) = '1.0 1.0 1.0'; + MY(size_min) = 1; + MY(size_max) = 1; + MY(tex_min) = 41; + MY(tex_max) = 41; + MY(type) = "spark"; + MY(velocityjitter) = '600.0 600.0 600.0'; + MY(velocitymultiplier) = 1.500000; +} + +// vortex beam +DEF(nex_beam); +SUB(nex_beam) { + MY(airfriction) = 5; + MY(alpha_min) = 64; + MY(alpha_max) = 128; + MY(alpha_fade) = 64; + MY(color_min) = "0x1680A0"; + MY(color_max) = "0x1680A0"; + MY(sizeincrease) = 2; + MY(size_min) = 4; + MY(size_max) = 4; + MY(tex_min) = 32; + MY(tex_max) = 32; + MY(trailspacing) = 64; + MY(type) = "static"; +} +// drifting smoke +SUB(nex_beam) { + MY(airfriction) = 9; + MY(alpha_min) = 32; + MY(alpha_max) = 64; + MY(alpha_fade) = 32; + MY(color_min) = "0x5080A0"; + MY(color_max) = "0x5080A0"; + MY(sizeincrease) = 8; + MY(size_min) = 1; + MY(size_max) = 1; + MY(tex_max) = 8; + MY(trailspacing) = 12; + MY(type) = "static"; + MY(velocityjitter) = '64.0 64.0 64.0'; +} +// bright core +SUB(nex_beam) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 1280; + MY(color_min) = "0x80CDFF"; + MY(color_max) = "0x80CDFF"; + MY(size_min) = 4; + MY(size_max) = 4; + MY(trailspacing) = 12; + MY(type) = "static"; +} +// sparks +SUB(nex_beam) { + MY(airfriction) = 5; + MY(alpha_min) = 64; + MY(alpha_max) = 128; + MY(alpha_fade) = 80; + MY(color_min) = "0x1680A0"; + MY(color_max) = "0x1680A0"; + MY(gravity) = -0.010000; + MY(size_min) = 1; + MY(size_max) = 1; + MY(tex_min) = 63; + MY(tex_max) = 63; + MY(trailspacing) = 16; + MY(type) = "snow"; +} + +DEF(nex_impact); +// decal +SUB(nex_impact) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(countabsolute) = 1; + MY(lightcolor) = '4.0 6.0 8.0'; + MY(lightradiusfade) = 250; + MY(lightradius) = 200; + MY(originjitter) = '14.0 14.0 14.0'; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(size_min) = 24; + MY(size_max) = 24; + MY(tex_min) = 47; + MY(tex_max) = 47; + MY(type) = "decal"; +} +// rotating something +SUB(nex_impact) { + MY(alpha_min) = 55; + MY(alpha_max) = 55; + MY(alpha_fade) = 50; + MY(color_min) = "0x1680A0"; + MY(color_max) = "0x1680A0"; + MY(count) = 5; + MY(startangle_min) = 180; + MY(startangle_max) = -180; + MY(spin_min) = 500; + MY(spin_max) = -500; + MY(sizeincrease) = 20; + MY(size_min) = 25; + MY(size_max) = 28; + MY(tex_min) = 46; + MY(tex_max) = 46; + MY(type) = "smoke"; +} +// shockwave +SUB(nex_impact) { + MY(alpha_min) = 50; + MY(alpha_max) = 50; + MY(alpha_fade) = 400; + MY(color_min) = "0x1680A0"; + MY(color_max) = "0x1680A0"; + MY(countabsolute) = 1; + MY(sizeincrease) = 900; + MY(size_min) = 16; + MY(size_max) = 16; + MY(tex_min) = 33; + MY(tex_max) = 33; + MY(type) = "static"; +} +// shockwave2 +SUB(nex_impact) { + MY(alpha_min) = 50; + MY(alpha_max) = 50; + MY(alpha_fade) = 100; + MY(color_min) = "0x1680A0"; + MY(color_max) = "0x1680A0"; + MY(countabsolute) = 1; + MY(sizeincrease) = 500; + MY(size_min) = 5; + MY(size_max) = 5; + MY(tex_min) = 65; + MY(tex_max) = 65; + MY(type) = "static"; +} +// flare effect +SUB(nex_impact) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 256; + MY(color_min) = "0x80C0FF"; + MY(color_max) = "0x80C0FF"; + MY(countabsolute) = 1; + MY(size_min) = 8; + MY(size_max) = 8; + MY(tex_min) = 37; + MY(tex_max) = 37; + MY(type) = "static"; +} +// small sparks which glow brightly but live briefly +SUB(nex_impact) { + MY(airfriction) = 9; + MY(alpha_max) = 128; + MY(alpha_fade) = 512; + MY(bounce) = 2; + MY(color_min) = "0xD9FDFF"; + MY(color_max) = "0xD9FDFF"; + MY(count) = 64; + MY(size_min) = 4; + MY(size_max) = 4; + MY(stretchfactor) = 3; + MY(tex_min) = 41; + MY(tex_max) = 41; + MY(type) = "spark"; + MY(velocityjitter) = '600.0 600.0 600.0'; + MY(velocitymultiplier) = 0.500000; +} +// small sparks that live longer +SUB(nex_impact) { + MY(airfriction) = 2; + MY(alpha_min) = 255; + MY(alpha_max) = 255; + MY(alpha_fade) = 112; + MY(bounce) = 1.600000; + MY(color_min) = "0xD9FDFF"; + MY(color_max) = "0xD9FDFF"; + MY(count) = 16; + MY(gravity) = 1; + MY(size_min) = 2; + MY(size_max) = 2; + MY(stretchfactor) = 0.700000; + MY(tex_min) = 41; + MY(tex_max) = 41; + MY(type) = "spark"; + MY(velocityjitter) = '300.0 300.0 600.0'; + MY(velocitymultiplier) = 2.500000; +} + +DEF(hagar_muzzleflash); +SUB(hagar_muzzleflash) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 512; + MY(color_min) = "0x202020"; + MY(color_max) = "0x404040"; + MY(count) = 2; + MY(lightcolor) = '2.0 1.5 0.2'; + MY(lightradiusfade) = 2000; + MY(lightradius) = 200; + MY(originjitter) = '1.5 1.5 1.5'; + MY(size_min) = 5; + MY(size_max) = 5; + MY(tex_max) = 8; + MY(type) = "smoke"; + MY(velocityjitter) = '6.0 6.0 6.0'; + MY(velocitymultiplier) = 0.010000; +} +SUB(hagar_muzzleflash) { + MY(airfriction) = 12; + MY(alpha_max) = 128; + MY(alpha_fade) = 1024; + MY(color_min) = "0xff8400"; + MY(color_max) = "0xff4200"; + MY(count) = 15; + MY(originjitter) = '1.0 1.0 1.0'; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = -400; + MY(spin_max) = 400; + MY(size_min) = 5; + MY(size_max) = 10; + MY(stretchfactor) = 2; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "spark"; + MY(velocityjitter) = '200.0 200.0 200.0'; + MY(velocitymultiplier) = 0.500000; +} + +DEF(hagar_bounce); +SUB(hagar_bounce) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 256; + MY(color_min) = "0x202020"; + MY(color_max) = "0x404040"; + MY(count) = 2; + MY(lightcolor) = '2.0 1.5 0.2'; + MY(lightradiusfade) = 300; + MY(lightradius) = 60; + MY(originjitter) = '1.5 1.5 1.5'; + MY(size_min) = 5; + MY(size_max) = 5; + MY(tex_max) = 8; + MY(type) = "smoke"; + MY(velocityjitter) = '6.0 6.0 6.0'; + MY(velocitymultiplier) = 0.010000; +} +SUB(hagar_bounce) { + MY(airfriction) = 12; + MY(alpha_max) = 256; + MY(alpha_fade) = 256; + MY(bounce) = 1.500000; + MY(color_min) = "0xFFFDD9"; + MY(color_max) = "0xFFFDD9"; + MY(count) = 15; + MY(gravity) = 1; + MY(originjitter) = '1.0 1.0 1.0'; + MY(size_min) = 3; + MY(size_max) = 3; + MY(tex_min) = 40; + MY(tex_max) = 40; + MY(type) = "spark"; + MY(velocityjitter) = '600.0 600.0 600.0'; + MY(velocitymultiplier) = 0.500000; +} + +DEF(hagar_explode); +// decal +SUB(hagar_explode) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(countabsolute) = 1; + MY(lightcolor) = '8.0 4.0 1.0'; + MY(lightradiusfade) = 400; + MY(lightradius) = 120; + MY(originjitter) = '14.0 14.0 14.0'; + MY(size_min) = 28; + MY(size_max) = 38; + MY(tex_min) = 8; + MY(tex_max) = 16; + MY(type) = "decal"; +} +// fire effect which make bright dot inside +SUB(hagar_explode) { + MY(airfriction) = 8; + MY(alpha_min) = 80; + MY(alpha_max) = 200; + MY(alpha_fade) = 356; + MY(bounce) = 1.500000; + MY(color_min) = "0xffe955"; + MY(color_max) = "0xff5a00"; + MY(count) = 3.500000; + MY(liquidfriction) = 8; + MY(notunderwater) = true; + MY(originjitter) = '8.0 8.0 8.0'; + MY(sizeincrease) = 5; + MY(size_min) = 16; + MY(size_max) = 26; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "smoke"; + MY(velocityjitter) = '156.0 156.0 156.0'; +} +// fire effect which expands then slows +SUB(hagar_explode) { + MY(airfriction) = 12; + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 456; + MY(bounce) = 1.500000; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 12; + MY(liquidfriction) = 8; + MY(notunderwater) = true; + MY(originjitter) = '8.0 8.0 8.0'; + MY(sizeincrease) = 15; + MY(size_min) = 20; + MY(size_max) = 26; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "static"; + MY(velocityjitter) = '286.0 286.0 286.0'; +} +// smoke +SUB(hagar_explode) { + MY(airfriction) = 5; + MY(alpha_min) = 200; + MY(alpha_max) = 500; + MY(alpha_fade) = 600; + MY(bounce) = 2; + MY(color_min) = "0x000000"; + MY(color_max) = "0x111111"; + MY(count) = 7; + MY(notunderwater) = true; + MY(sizeincrease) = 20; + MY(size_min) = 20; + MY(size_max) = 40; + MY(tex_max) = 8; + MY(type) = "alphastatic"; + MY(velocityjitter) = '244.0 244.0 244.0'; +} +// underwater bubbles +SUB(hagar_explode) { + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 64; + MY(bounce) = 1.500000; + MY(color_min) = "0x404040"; + MY(color_max) = "0x808080"; + MY(count) = 16; + MY(gravity) = -0.125000; + MY(liquidfriction) = 0.250000; + MY(originjitter) = '16.0 16.0 16.0'; + MY(size_min) = 3; + MY(size_max) = 3; + MY(tex_min) = 62; + MY(tex_max) = 62; + MY(type) = "bubble"; + MY(underwater) = true; + MY(velocityjitter) = '96.0 96.0 96.0'; +} +// bouncing sparks +SUB(hagar_explode) { + MY(airfriction) = 1; + MY(alpha_min) = 644; + MY(alpha_max) = 956; + MY(alpha_fade) = 684; + MY(bounce) = 1.600000; + MY(color_min) = "0xffa35b"; + MY(color_max) = "0xfff2be"; + MY(count) = 4; + MY(gravity) = 1; + MY(liquidfriction) = 0.800000; + MY(notunderwater) = true; + MY(originjitter) = '16.0 16.0 16.0'; + MY(size_min) = 1; + MY(size_max) = 0.100000; + MY(tex_min) = 40; + MY(tex_max) = 40; + MY(type) = "spark"; + MY(velocityjitter) = '224.0 224.0 224.0'; + MY(velocityoffset) = '0.0 0.0 80.0'; +} + +DEF(rocketlauncher_muzzleflash); +SUB(rocketlauncher_muzzleflash) { + MY(airfriction) = 2; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 256; + MY(color_min) = "0x202020"; + MY(color_max) = "0x404040"; + MY(count) = 10; + MY(originjitter) = '1.5 1.5 1.5'; + MY(sizeincrease) = 20; + MY(size_min) = 1; + MY(size_max) = 1; + MY(tex_max) = 8; + MY(type) = "smoke"; + MY(velocityjitter) = '40.0 40.0 40.0'; + MY(velocitymultiplier) = -0.130000; +} +SUB(rocketlauncher_muzzleflash) { + MY(airfriction) = 9; + MY(alpha_min) = 10; + MY(alpha_max) = 25; + MY(alpha_fade) = 20; + MY(color_min) = "0xFFFDD9"; + MY(color_max) = "0xFFFDD9"; + MY(count) = 6; + MY(originjitter) = '3.0 3.0 3.0'; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = -30; + MY(spin_max) = 30; + MY(sizeincrease) = 20; + MY(size_min) = 5; + MY(size_max) = 10; + MY(tex_min) = 35; + MY(tex_max) = 36; + MY(type) = "smoke"; + MY(velocityjitter) = '100.0 100.0 100.0'; + MY(velocitymultiplier) = 0.300000; +} + +// rocket trail +DEF(TR_ROCKET); +// smoke +SUB(TR_ROCKET) { + MY(alpha_min) = 200; + MY(alpha_max) = 300; + MY(alpha_fade) = 200; + MY(bounce) = 1; + MY(color_min) = "0x000000"; + MY(color_max) = "0x666666"; + MY(lightcolor) = '6.0 3.0 1.0'; + MY(lightradius) = 150; + MY(notunderwater) = true; + MY(originjitter) = '2.0 2.0 2.0'; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = -30; + MY(spin_max) = 30; + MY(sizeincrease) = 11; + MY(size_min) = 3; + MY(size_max) = 4; + MY(tex_max) = 8; + MY(trailspacing) = 10; + MY(type) = "smoke"; + MY(velocityjitter) = '3.0 3.0 3.0'; + MY(velocitymultiplier) = -0.020000; +} +// fire +SUB(TR_ROCKET) { + MY(airfriction) = 8; + MY(alpha_min) = 100; + MY(alpha_max) = 144; + MY(alpha_fade) = 588; + MY(color_min) = "0xffdf72"; + MY(color_max) = "0x811200"; + MY(sizeincrease) = -30; + MY(size_min) = 7; + MY(size_max) = 7; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(trailspacing) = 4; + MY(type) = "static"; + MY(velocityjitter) = '32.0 32.0 32.0'; + MY(velocitymultiplier) = -1.500000; +} +// bubbles +SUB(TR_ROCKET) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 256; + MY(bounce) = 1.500000; + MY(gravity) = -0.125000; + MY(liquidfriction) = 4; + MY(size_min) = 1; + MY(size_max) = 2; + MY(tex_min) = 62; + MY(tex_max) = 62; + MY(trailspacing) = 16; + MY(type) = "bubble"; + MY(underwater) = true; + MY(velocityjitter) = '16.0 16.0 16.0'; + MY(velocitymultiplier) = -0.310000; +} +// sparks +SUB(TR_ROCKET) { + MY(airfriction) = 5; + MY(alpha_min) = 444; + MY(alpha_max) = 512; + MY(alpha_fade) = 1866; + MY(bounce) = 1; + MY(color_min) = "0xFFFDD9"; + MY(color_max) = "0xFFFDD9"; + MY(notunderwater) = true; + MY(originjitter) = '1.0 1.0 1.0'; + MY(size_min) = 0.500000; + MY(size_max) = 0.500000; + MY(stretchfactor) = 0.300000; + MY(tex_min) = 40; + MY(tex_max) = 40; + MY(trailspacing) = 20; + MY(type) = "spark"; + MY(velocityjitter) = '100.0 100.0 100.0'; + MY(velocitymultiplier) = -0.310000; +} + +// rocket explosion (bigger than mortar and hagar) +DEF(rocket_explode); +SUB(rocket_explode) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(countabsolute) = 1; + MY(lightcolor) = '8.0 4.0 1.0'; + MY(lightradiusfade) = 750; + MY(lightradius) = 400; + MY(originjitter) = '23.0 23.0 23.0'; + MY(size_min) = 72; + MY(size_max) = 72; + MY(tex_min) = 8; + MY(tex_max) = 16; + MY(type) = "decal"; +} +// fire effect +SUB(rocket_explode) { + MY(airfriction) = 8; + MY(alpha_min) = 200; + MY(alpha_max) = 256; + MY(alpha_fade) = 512; + MY(bounce) = 1.500000; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 32; + MY(liquidfriction) = 8; + MY(notunderwater) = true; + MY(originjitter) = '8.0 8.0 8.0'; + MY(sizeincrease) = 45; + MY(size_min) = 33; + MY(size_max) = 44; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "static"; + MY(velocityjitter) = '512.0 512.0 512.0'; +} +// fire effect 2 +SUB(rocket_explode) { + MY(airfriction) = 19; + MY(alpha_min) = 200; + MY(alpha_max) = 256; + MY(alpha_fade) = 612; + MY(bounce) = 2.500000; + MY(color_min) = "0xea691b"; + MY(color_max) = "0xeed05a"; + MY(count) = 14; + MY(liquidfriction) = 19; + MY(notunderwater) = true; + MY(originjitter) = '8.0 8.0 8.0'; + MY(sizeincrease) = 55; + MY(size_min) = 33; + MY(size_max) = 44; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "smoke"; + MY(velocityjitter) = '912.0 912.0 912.0'; +} +// smoke +SUB(rocket_explode) { + MY(airfriction) = 5; + MY(alpha_min) = 200; + MY(alpha_max) = 450; + MY(alpha_fade) = 456; + MY(bounce) = 2; + MY(color_min) = "0x000000"; + MY(color_max) = "0x111111"; + MY(count) = 32; + MY(notunderwater) = true; + MY(sizeincrease) = 44; + MY(size_min) = 20; + MY(size_max) = 40; + MY(tex_max) = 8; + MY(type) = "alphastatic"; + MY(velocityjitter) = '444.0 444.0 444.0'; +} +// underwater bubbles +SUB(rocket_explode) { + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 64; + MY(bounce) = 1.500000; + MY(color_min) = "0x404040"; + MY(color_max) = "0x808080"; + MY(count) = 32; + MY(gravity) = -0.125000; + MY(liquidfriction) = 0.250000; + MY(originjitter) = '16.0 16.0 16.0'; + MY(size_min) = 3; + MY(size_max) = 3; + MY(tex_min) = 62; + MY(tex_max) = 62; + MY(type) = "bubble"; + MY(underwater) = true; + MY(velocityjitter) = '144.0 144.0 144.0'; +} +// underwatershockwave +SUB(rocket_explode) { + MY(alpha_min) = 40; + MY(alpha_max) = 40; + MY(alpha_fade) = 300; + MY(countabsolute) = 1; + MY(sizeincrease) = 1900; + MY(size_min) = 30; + MY(size_max) = 30; + MY(tex_min) = 33; + MY(tex_max) = 33; + MY(type) = "smoke"; + MY(underwater) = true; + MY(velocitymultiplier) = 0.300000; +} +// bouncing sparks +SUB(rocket_explode) { + MY(airfriction) = 1; + MY(alpha_min) = 644; + MY(alpha_max) = 956; + MY(alpha_fade) = 484; + MY(bounce) = 1.600000; + MY(color_min) = "0xffa35b"; + MY(color_max) = "0xfff2be"; + MY(count) = 16; + MY(gravity) = 1; + MY(liquidfriction) = 0.800000; + MY(notunderwater) = true; + MY(originjitter) = '16.0 16.0 16.0'; + MY(size_min) = 1; + MY(size_max) = 0.100000; + MY(tex_min) = 40; + MY(tex_max) = 40; + MY(type) = "spark"; + MY(velocityjitter) = '424.0 424.0 624.0'; + MY(velocityoffset) = '0.0 0.0 80.0'; +} +// debris +SUB(rocket_explode) { + MY(airfriction) = 0.500000; + MY(alpha_min) = 644; + MY(alpha_max) = 956; + MY(alpha_fade) = 684; + MY(bounce) = 1.600000; + MY(color_min) = "0x6a3d25"; + MY(color_max) = "0xcac5b4"; + MY(count) = 12; + MY(gravity) = 1.300000; + MY(notunderwater) = true; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = -1000; + MY(spin_max) = 1000; + MY(size_min) = 2; + MY(size_max) = 6; + MY(tex_min) = 66; + MY(tex_max) = 68; + MY(type) = "alphastatic"; + MY(velocityjitter) = '324.0 324.0 524.0'; +} + +DEF(grapple_muzzleflash); +SUB(grapple_muzzleflash) { + MY(lightcolor) = '1.0 0.0 0.0'; + MY(lightradiusfade) = 800; + MY(lightradius) = 160; +} + +DEF(grapple_impact); +SUB(grapple_impact) { + MY(lightcolor) = '1.0 0.0 0.0'; + MY(lightradiusfade) = 800; + MY(lightradius) = 160; +} + +DEF(nex242_misc_laser_beam); +SUB(nex242_misc_laser_beam) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 64; + MY(color_min) = "0xff0000"; + MY(color_max) = "0xff0000"; + MY(countabsolute) = 1; + MY(sizeincrease) = 1; + MY(size_min) = 1; + MY(size_max) = 1; + MY(tex_min) = 200; + MY(tex_max) = 200; + MY(type) = "beam"; +} + +DEF(nex242_misc_laser_beam_end); +SUB(nex242_misc_laser_beam_end) { + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 768; + MY(bounce) = -1; + MY(color_min) = "0x8f4333"; + MY(color_max) = "0xfff31b"; + MY(count) = 0.500000; + MY(gravity) = 1; + MY(size_min) = 0.400000; + MY(size_max) = 0.400000; + MY(type) = "spark"; + MY(velocityjitter) = '64.0 64.0 64.0'; + MY(velocitymultiplier) = 100; +} + +DEF(nex242_misc_laser_beam_fast); +SUB(nex242_misc_laser_beam_fast) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 640; + MY(color_min) = "0xff0000"; + MY(color_max) = "0xff0000"; + MY(countabsolute) = 1; + MY(sizeincrease) = 0.100000; + MY(size_min) = 1; + MY(size_max) = 1; + MY(tex_min) = 200; + MY(tex_max) = 200; + MY(type) = "beam"; +} + +DEF(nex242_misc_laser_beam_fast_end); +SUB(nex242_misc_laser_beam_fast_end) { + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 768; + MY(bounce) = -1; + MY(color_min) = "0x8f4333"; + MY(color_max) = "0xfff31b"; + MY(count) = 0.500000; + MY(gravity) = 1; + MY(size_min) = 0.400000; + MY(size_max) = 0.400000; + MY(type) = "spark"; + MY(velocityjitter) = '64.0 64.0 64.0'; + MY(velocitymultiplier) = 100; +} + +DEF(nex242_misc_laser_green_beam); +SUB(nex242_misc_laser_green_beam) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 64; + MY(color_min) = "0x00ff00"; + MY(color_max) = "0x00ff00"; + MY(countabsolute) = 1; + MY(sizeincrease) = 1; + MY(size_min) = 1; + MY(size_max) = 1; + MY(tex_min) = 200; + MY(tex_max) = 200; + MY(type) = "beam"; +} + +DEF(nex242_misc_laser_green_beam_end); +SUB(nex242_misc_laser_green_beam_end) { + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 768; + MY(bounce) = -1; + MY(color_min) = "0x8f4333"; + MY(color_max) = "0xfff31b"; + MY(count) = 0.500000; + MY(gravity) = 1; + MY(size_min) = 0.400000; + MY(size_max) = 0.400000; + MY(type) = "spark"; + MY(velocityjitter) = '64.0 64.0 64.0'; + MY(velocitymultiplier) = 100; +} + +DEF(nex242_misc_laser_blue_beam); +SUB(nex242_misc_laser_blue_beam) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 64; + MY(color_min) = "0x0000ff"; + MY(color_max) = "0x0000ff"; + MY(countabsolute) = 1; + MY(sizeincrease) = 1; + MY(size_min) = 1; + MY(size_max) = 1; + MY(tex_min) = 200; + MY(tex_max) = 200; + MY(type) = "beam"; +} + +DEF(nex242_misc_laser_blue_beam_end); +SUB(nex242_misc_laser_blue_beam_end) { + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 768; + MY(bounce) = -1; + MY(color_min) = "0x8f4333"; + MY(color_max) = "0xfff31b"; + MY(count) = 0.500000; + MY(gravity) = 1; + MY(size_min) = 0.400000; + MY(size_max) = 0.400000; + MY(type) = "spark"; + MY(velocityjitter) = '64.0 64.0 64.0'; + MY(velocitymultiplier) = 100; +} + +DEF(nex242_misc_laser_yellow_beam); +SUB(nex242_misc_laser_yellow_beam) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 64; + MY(color_min) = "0xffff00"; + MY(color_max) = "0xffff00"; + MY(countabsolute) = 1; + MY(sizeincrease) = 1; + MY(size_min) = 1; + MY(size_max) = 1; + MY(tex_min) = 200; + MY(tex_max) = 200; + MY(type) = "beam"; +} + +DEF(nex242_misc_laser_yellow_beam_end); +SUB(nex242_misc_laser_yellow_beam_end) { + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 768; + MY(bounce) = -1; + MY(color_min) = "0x8f4333"; + MY(color_max) = "0xfff31b"; + MY(count) = 0.500000; + MY(gravity) = 1; + MY(size_min) = 0.400000; + MY(size_max) = 0.400000; + MY(type) = "spark"; + MY(velocityjitter) = '64.0 64.0 64.0'; + MY(velocitymultiplier) = 100; +} + +DEF(nex242_misc_laser_cyan_beam); +SUB(nex242_misc_laser_cyan_beam) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 64; + MY(color_min) = "0x00ffff"; + MY(color_max) = "0x00ffff"; + MY(countabsolute) = 1; + MY(sizeincrease) = 1; + MY(size_min) = 1; + MY(size_max) = 1; + MY(tex_min) = 200; + MY(tex_max) = 200; + MY(type) = "beam"; +} + +DEF(nex242_misc_laser_cyan_beam_end); +SUB(nex242_misc_laser_cyan_beam_end) { + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 768; + MY(bounce) = -1; + MY(color_min) = "0x8f4333"; + MY(color_max) = "0xfff31b"; + MY(count) = 0.500000; + MY(gravity) = 1; + MY(size_min) = 0.400000; + MY(size_max) = 0.400000; + MY(type) = "spark"; + MY(velocityjitter) = '64.0 64.0 64.0'; + MY(velocitymultiplier) = 100; +} + +DEF(nex242_misc_laser_magenta_beam); +SUB(nex242_misc_laser_magenta_beam) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 64; + MY(color_min) = "0xff00ff"; + MY(color_max) = "0xff00ff"; + MY(countabsolute) = 1; + MY(sizeincrease) = 1; + MY(size_min) = 1; + MY(size_max) = 1; + MY(tex_min) = 200; + MY(tex_max) = 200; + MY(type) = "beam"; +} + +DEF(nex242_misc_laser_magenta_beam_end); +SUB(nex242_misc_laser_magenta_beam_end) { + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 768; + MY(bounce) = -1; + MY(color_min) = "0x8f4333"; + MY(color_max) = "0xfff31b"; + MY(count) = 0.500000; + MY(gravity) = 1; + MY(size_min) = 0.400000; + MY(size_max) = 0.400000; + MY(type) = "spark"; + MY(velocityjitter) = '64.0 64.0 64.0'; + MY(velocitymultiplier) = 100; +} + +DEF(nex242_misc_laser_white_beam); +SUB(nex242_misc_laser_white_beam) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 64; + MY(color_min) = "0xffffff"; + MY(color_max) = "0xffffff"; + MY(countabsolute) = 1; + MY(sizeincrease) = 1; + MY(size_min) = 1; + MY(size_max) = 1; + MY(tex_min) = 200; + MY(tex_max) = 200; + MY(type) = "beam"; +} + +DEF(nex242_misc_laser_white_beam_end); +SUB(nex242_misc_laser_white_beam_end) { + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 768; + MY(bounce) = -1; + MY(color_min) = "0x8f4333"; + MY(color_max) = "0xfff31b"; + MY(count) = 0.500000; + MY(gravity) = 1; + MY(size_min) = 0.400000; + MY(size_max) = 0.400000; + MY(type) = "spark"; + MY(velocityjitter) = '64.0 64.0 64.0'; + MY(velocitymultiplier) = 100; +} + +DEF(nex242_misc_laser_black_beam); +SUB(nex242_misc_laser_black_beam) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 64; + MY(color_min) = "0x000000"; + MY(color_max) = "0x000000"; + MY(countabsolute) = 1; + MY(sizeincrease) = 1; + MY(size_min) = 1; + MY(size_max) = 1; + MY(tex_min) = 200; + MY(tex_max) = 200; + MY(type) = "beam"; +} + +DEF(nex242_misc_laser_black_beam_end); +SUB(nex242_misc_laser_black_beam_end) { + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 768; + MY(bounce) = -1; + MY(color_min) = "0x8f4333"; + MY(color_max) = "0xfff31b"; + MY(count) = 0.500000; + MY(gravity) = 1; + MY(size_min) = 0.400000; + MY(size_max) = 0.400000; + MY(type) = "spark"; + MY(velocityjitter) = '64.0 64.0 64.0'; + MY(velocitymultiplier) = 100; +} + +DEF(nex242_misc_laser_orange_beam); +SUB(nex242_misc_laser_orange_beam) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 64; + MY(color_min) = "0xff6600"; + MY(color_max) = "0xff6600"; + MY(countabsolute) = 1; + MY(sizeincrease) = 1; + MY(size_min) = 1; + MY(size_max) = 1; + MY(tex_min) = 200; + MY(tex_max) = 200; + MY(type) = "beam"; +} + +DEF(nex242_misc_laser_orange_beam_end); +SUB(nex242_misc_laser_orange_beam_end) { + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 768; + MY(bounce) = -1; + MY(color_min) = "0x8f4333"; + MY(color_max) = "0xfff31b"; + MY(count) = 0.500000; + MY(gravity) = 1; + MY(size_min) = 0.400000; + MY(size_max) = 0.400000; + MY(type) = "spark"; + MY(velocityjitter) = '64.0 64.0 64.0'; + MY(velocitymultiplier) = 100; +} + +// bigger crylink impact effect +DEF(crylink_impactbig); +// decal +SUB(crylink_impactbig) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(countabsolute) = 1; + MY(originjitter) = '12.0 12.0 12.0'; + MY(size_min) = 24; + MY(size_max) = 24; + MY(tex_min) = 47; + MY(tex_max) = 47; + MY(type) = "decal"; +} +// purple flare effect +SUB(crylink_impactbig) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 512; + MY(color_min) = "0x504060"; + MY(color_max) = "0x504060"; + MY(countabsolute) = 1; + MY(size_min) = 24; + MY(size_max) = 24; + MY(tex_min) = 39; + MY(tex_max) = 39; + MY(type) = "static"; +} +// purple sparks +SUB(crylink_impactbig) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 1024; + MY(bounce) = 2; + MY(color_min) = "0xA040C0"; + MY(color_max) = "0xA040C0"; + MY(count) = 40; + MY(size_min) = 6; + MY(size_max) = 6; + MY(tex_min) = 41; + MY(tex_max) = 41; + MY(type) = "spark"; + MY(velocityjitter) = '512.0 512.0 512.0'; +} +// purple splash +SUB(crylink_impactbig) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 512; + MY(color_min) = "0xE070FF"; + MY(color_max) = "0xE070FF"; + MY(count) = 1.500000; + MY(size_min) = 16; + MY(size_max) = 16; + MY(type) = "static"; + MY(velocityjitter) = '32.0 32.0 32.0'; +} +// purple splash +SUB(crylink_impactbig) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 1024; + MY(color_min) = "0xE070FF"; + MY(color_max) = "0xE070FF"; + MY(count) = 3; + MY(size_min) = 16; + MY(size_max) = 16; + MY(type) = "static"; + MY(velocityjitter) = '256.0 256.0 256.0'; +} + +#include "effectinfo_gentle.inc" + +DEF(laser_deadly); +// decal +SUB(laser_deadly) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(countabsolute) = 1; + MY(originjitter) = '6.0 6.0 6.0'; + MY(size_min) = 5; + MY(size_max) = 5; + MY(tex_min) = 56; + MY(tex_max) = 59; + MY(type) = "decal"; +} +// dust/smoke drifting away from the impact +SUB(laser_deadly) { + MY(airfriction) = 7; + MY(alpha_max) = 64; + MY(alpha_fade) = 64; + MY(color_min) = "0xFFFFFF"; + MY(color_max) = "0xFFFFFF"; + MY(count) = 0.025000; + MY(liquidfriction) = 16; + MY(originjitter) = '1.0 1.0 1.0'; + MY(sizeincrease) = 2; + MY(size_min) = 3; + MY(size_max) = 3; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "smoke"; + MY(velocityjitter) = '15.0 15.0 15.0'; + MY(velocitymultiplier) = 20; +} +// sparks +SUB(laser_deadly) { + MY(airfriction) = 5; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 768; + MY(bounce) = 1; + MY(color_min) = "0xFDFFD9"; + MY(color_max) = "0xFDFFD9"; + MY(count) = 0.025000; + MY(gravity) = 1; + MY(notunderwater) = true; + MY(originjitter) = '1.0 1.0 1.0'; + MY(size_min) = 0.600000; + MY(size_max) = 0.600000; + MY(tex_min) = 40; + MY(tex_max) = 40; + MY(type) = "spark"; + MY(velocityjitter) = '100.0 100.0 100.0'; + MY(velocitymultiplier) = 100; +} + +DEF(torch_small); +// fire +SUB(torch_small) { + MY(alpha_min) = 200; + MY(alpha_max) = 256; + MY(alpha_fade) = 512; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 8; + MY(gravity) = -0.500000; + MY(originjitter) = '5.0 5.0 5.0'; + MY(sizeincrease) = -1; + MY(size_min) = 1; + MY(size_max) = 11; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "smoke"; + MY(velocityjitter) = '1.0 1.0 50.0'; +} +// smoke +SUB(torch_small) { + MY(alpha_min) = 200; + MY(alpha_max) = 256; + MY(alpha_fade) = 200; + MY(color_min) = "0x000000"; + MY(color_max) = "0x111111"; + MY(count) = 4; + MY(gravity) = -0.300000; + MY(originjitter) = '3.0 3.0 3.0'; + MY(sizeincrease) = 5; + MY(size_min) = 5; + MY(size_max) = 10; + MY(tex_max) = 8; + MY(type) = "alphastatic"; + MY(velocityjitter) = '11.0 11.0 50.0'; +} + +DEF(fountain01); +SUB(fountain01) { + MY(alpha_max) = 100; + MY(alpha_fade) = 100; + MY(bounce) = 1; + MY(color_min) = "0x7cbaff"; + MY(color_max) = "0xcfd1ff"; + MY(count) = 16; + MY(gravity) = 0.600000; + MY(originjitter) = '5.0 5.0 5.0'; + MY(sizeincrease) = 20; + MY(size_min) = 10; + MY(size_max) = 15; + MY(tex_max) = 8; + MY(type) = "snow"; + MY(velocityjitter) = '81.0 81.0 150.0'; + MY(velocitymultiplier) = 2; +} + +DEF(hookbomb_explode); +// decal +SUB(hookbomb_explode) { + MY(airfriction) = 10; + MY(alpha_max) = 256; + MY(alpha_fade) = 200; + MY(bounce) = 1.500000; + MY(color_min) = "0x807aff"; + MY(color_max) = "0x4463d5"; + MY(count) = 25; + MY(originjitter) = '10.0 10.0 10.0'; + MY(sizeincrease) = -160; + MY(size_min) = 150; + MY(size_max) = 200; + MY(tex_min) = 38; + MY(tex_max) = 38; + MY(type) = "static"; + MY(velocityjitter) = '550.0 550.0 550.0'; +} +// decal in the air +SUB(hookbomb_explode) { + MY(alpha_min) = 256; + MY(alpha_max) = 265; + MY(alpha_fade) = 100; + MY(color_min) = "0x807aff"; + MY(color_max) = "0x4463d5"; + MY(countabsolute) = 3; + MY(originoffset) = '0.0 0.0 6.0'; + MY(sizeincrease) = -60; + MY(size_min) = 160; + MY(size_max) = 200; + MY(tex_min) = 38; + MY(tex_max) = 38; + MY(type) = "static"; +} +// decal on the ground +SUB(hookbomb_explode) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(countabsolute) = 1; + MY(originjitter) = '6.0 6.0 6.0'; + MY(size_min) = 80; + MY(size_max) = 100; + MY(tex_min) = 39; + MY(tex_max) = 39; + MY(type) = "decal"; +} +// some sparks +SUB(hookbomb_explode) { + MY(airfriction) = 2; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 456; + MY(bounce) = 1.500000; + MY(color_min) = "0x807aff"; + MY(color_max) = "0x4463d5"; + MY(count) = 30; + MY(gravity) = 1; + MY(originjitter) = '1.0 1.0 1.0'; + MY(sizeincrease) = -60; + MY(size_min) = 20; + MY(size_max) = 30; + MY(tex_min) = 38; + MY(tex_max) = 38; + MY(type) = "spark"; + MY(velocityjitter) = '1900.0 1900.0 1300.0'; + MY(velocitymultiplier) = 0.500000; +} + +DEF(EF_MGTURRETTRAIL); +// smoke +SUB(EF_MGTURRETTRAIL) { + MY(alpha_min) = 128; + MY(alpha_max) = 196; + MY(alpha_fade) = 768; + MY(color_min) = "0xd0d0a0"; + MY(color_max) = "0xffffff"; + MY(gravity) = -0.010000; + MY(notunderwater) = true; + MY(sizeincrease) = -8; + MY(size_min) = 5; + MY(size_max) = 4; + MY(tex_max) = 8; + MY(trailspacing) = 10; + MY(type) = "smoke"; +} +// bubbles +SUB(EF_MGTURRETTRAIL) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 256; + MY(bounce) = 1.500000; + MY(color_min) = "0x404040"; + MY(color_max) = "0x808080"; + MY(gravity) = -0.125000; + MY(liquidfriction) = 4; + MY(size_min) = 1; + MY(size_max) = 1; + MY(tex_min) = 62; + MY(tex_max) = 62; + MY(trailspacing) = 32; + MY(type) = "bubble"; + MY(underwater) = true; + MY(velocityjitter) = '16.0 16.0 16.0'; +} + +DEF(fire_big); +// fire +SUB(fire_big) { + MY(alpha_min) = 200; + MY(alpha_max) = 356; + MY(alpha_fade) = 512; + MY(bounce) = 2; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 26; + MY(gravity) = -0.500000; + MY(originjitter) = '33.0 33.0 33.0'; + MY(sizeincrease) = -3; + MY(size_min) = 11; + MY(size_max) = 31; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "smoke"; + MY(velocityjitter) = '22.0 22.0 50.0'; +} +// smoke +SUB(fire_big) { + MY(alpha_min) = 200; + MY(alpha_max) = 256; + MY(alpha_fade) = 200; + MY(bounce) = 2; + MY(color_min) = "0x000000"; + MY(color_max) = "0x111111"; + MY(count) = 11; + MY(gravity) = -0.300000; + MY(originjitter) = '44.0 44.0 44.0'; + MY(sizeincrease) = 11; + MY(size_min) = 22; + MY(size_max) = 33; + MY(tex_max) = 8; + MY(type) = "alphastatic"; + MY(velocityjitter) = '11.0 11.0 50.0'; +} + +#define flare(name, colormin, colormax) \ + DEF(name##_flare); \ + SUB(name##_flare) /* smoke */ { \ + MY(alpha_min) = 200; \ + MY(alpha_max) = 256; \ + MY(alpha_fade) = 160; \ + MY(bounce) = 1; \ + MY(color_min) = colormin; \ + MY(color_max) = colormax; \ + MY(count) = 10.500000; \ + MY(gravity) = -0.240000; \ + MY(originjitter) = '2.0 2.0 0.0'; \ + MY(sizeincrease) = 11; \ + MY(size_min) = 1; \ + MY(size_max) = 11; \ + MY(tex_max) = 8; \ + MY(type) = "alphastatic"; \ + MY(velocityjitter) = '15.0 15.0 30.0'; \ + } + +flare(red, "0xff0000", "0xdc7171") +flare(blue, "0x0000ff", "0x7194dc") +#undef flare + +DEF(smoke_ring); +// smoke +SUB(smoke_ring) { + MY(airfriction) = 3; + MY(alpha_min) = 100; + MY(alpha_max) = 156; + MY(alpha_fade) = 200; + MY(bounce) = 1.100000; + MY(color_min) = "0x111111"; + MY(color_max) = "0x979797"; + MY(count) = 45; + MY(gravity) = 0.100000; + MY(notunderwater) = true; + MY(sizeincrease) = 21; + MY(size_min) = 1; + MY(size_max) = 11; + MY(tex_max) = 8; + MY(type) = "smoke"; + MY(velocityjitter) = '190.0 190.0 50.0'; +} + +DEF(smoke_large); +// smoke +SUB(smoke_large) { + MY(airfriction) = 7; + MY(alpha_min) = 140; + MY(alpha_max) = 256; + MY(alpha_fade) = 190; + MY(bounce) = 1.100000; + MY(color_min) = "0x9e895f"; + MY(color_max) = "0xffd39b"; + MY(count) = 25; + MY(gravity) = -0.150000; + MY(notunderwater) = true; + MY(sizeincrease) = 21; + MY(size_min) = 11; + MY(size_max) = 21; + MY(tex_max) = 8; + MY(type) = "alphastatic"; + MY(velocityjitter) = '390.0 390.0 390.0'; +} + +DEF(sparks); +SUB(sparks) { + MY(airfriction) = 3; + MY(alpha_max) = 256; + MY(alpha_fade) = 256; + MY(bounce) = 1.500000; + MY(color_min) = "0xFFFDD9"; + MY(color_max) = "0xFFFDD9"; + MY(count) = 15; + MY(gravity) = 1; + MY(originjitter) = '1.0 1.0 1.0'; + MY(size_min) = 1; + MY(size_max) = 3; + MY(tex_min) = 40; + MY(tex_max) = 40; + MY(type) = "spark"; + MY(velocityjitter) = '300.0 300.0 200.0'; + MY(velocitymultiplier) = 1.500000; +} + +DEF(electricity_sparks); +SUB(electricity_sparks) { + MY(airfriction) = 3; + MY(alpha_max) = 256; + MY(alpha_fade) = 556; + MY(bounce) = 1.500000; + MY(color_min) = "0x807aff"; + MY(color_max) = "0x4463d5"; + MY(count) = 35; + MY(gravity) = 1; + MY(originjitter) = '1.0 1.0 1.0'; + MY(size_min) = 1; + MY(size_max) = 3; + MY(tex_min) = 40; + MY(tex_max) = 40; + MY(type) = "spark"; + MY(velocityjitter) = '300.0 300.0 300.0'; + MY(velocitymultiplier) = 0.500000; +} + +DEF(steam); +SUB(steam) { + MY(airfriction) = 5; + MY(alpha_min) = 140; + MY(alpha_max) = 256; + MY(alpha_fade) = 190; + MY(bounce) = 1.100000; + MY(color_min) = "0xfffbdf"; + MY(color_max) = "0xffffff"; + MY(count) = 1; + MY(gravity) = -0.250000; + MY(notunderwater) = true; + MY(sizeincrease) = 7; + MY(size_min) = 1; + MY(size_max) = 3; + MY(tex_max) = 8; + MY(type) = "smoke"; + MY(velocityjitter) = '19.0 19.0 19.0'; + MY(velocitymultiplier) = 14; +} + +DEF(smoking); +SUB(smoking) { + MY(airfriction) = -1; + MY(alpha_min) = 100; + MY(alpha_max) = 256; + MY(alpha_fade) = 100; + MY(bounce) = 1.500000; + MY(color_min) = "0x292929"; + MY(color_max) = "0x000000"; + MY(count) = 10; + MY(gravity) = -0.100000; + MY(originjitter) = '10.0 10.0 10.0'; + MY(sizeincrease) = 5; + MY(size_min) = 10; + MY(size_max) = 40; + MY(tex_max) = 8; + MY(type) = "alphastatic"; + MY(velocityjitter) = '5.0 5.0 20.0'; +} + +// golden dust (create it once per second to cover large area in small yellow particles) +DEF(goldendust); +SUB(goldendust) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 70; + MY(bounce) = 1.500000; + MY(color_min) = "0xff9600"; + MY(color_max) = "0xffefb8"; + MY(count) = 25; + MY(originjitter) = '500.0 500.0 500.0'; + MY(sizeincrease) = -0.300000; + MY(size_min) = 2; + MY(size_max) = 3; + MY(tex_min) = 38; + MY(tex_max) = 38; + MY(type) = "snow"; + MY(velocityjitter) = '0.1 0.1 0.1'; +} + +DEF(healing_fx); +SUB(healing_fx) { + MY(airfriction) = -0.500000; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 170; + MY(bounce) = 1.500000; + MY(color_min) = "0xff0000"; + MY(color_max) = "0xff0000"; + MY(count) = 25; + MY(gravity) = -0.100000; + MY(originjitter) = '5.0 5.0 100.0'; + MY(sizeincrease) = -0.050000; + MY(size_min) = 1; + MY(size_max) = 3; + MY(tex_min) = 40; + MY(tex_max) = 40; + MY(type) = "spark"; + MY(velocityjitter) = '50.0 50.0 0.0'; +} + +DEF(armorrepair_fx); +SUB(armorrepair_fx) { + MY(airfriction) = -0.500000; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 170; + MY(bounce) = 1.500000; + MY(color_min) = "0x00ff00"; + MY(color_max) = "0x00ff00"; + MY(count) = 25; + MY(gravity) = -0.100000; + MY(originjitter) = '5.0 5.0 50.0'; + MY(sizeincrease) = -0.050000; + MY(size_min) = 1; + MY(size_max) = 3; + MY(tex_min) = 40; + MY(tex_max) = 40; + MY(type) = "spark"; + MY(velocityjitter) = '50.0 50.0 0.0'; +} + +DEF(ammoregen_fx); +SUB(ammoregen_fx) { + MY(airfriction) = -0.500000; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 170; + MY(bounce) = 1.500000; + MY(color_min) = "0x0000ff"; + MY(color_max) = "0x0000ff"; + MY(count) = 25; + MY(gravity) = -0.100000; + MY(originjitter) = '5.0 5.0 50.0'; + MY(sizeincrease) = -0.050000; + MY(size_min) = 1; + MY(size_max) = 3; + MY(tex_min) = 40; + MY(tex_max) = 40; + MY(type) = "spark"; + MY(velocityjitter) = '50.0 50.0 0.0'; +} + +// red-yellow flame like fx +DEF(rage); +SUB(rage) { + MY(airfriction) = 2; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 190; + MY(color_min) = "0xff0000"; + MY(color_max) = "0xff7800"; + MY(count) = 2.500000; + MY(gravity) = -0.060000; + MY(originjitter) = '5.0 5.0 5.0'; + MY(sizeincrease) = 10; + MY(size_min) = 1; + MY(size_max) = 3; + MY(tex_min) = 35; + MY(tex_max) = 36; + MY(type) = "smoke"; + MY(velocityjitter) = '25.0 25.0 25.0'; +} + +// pieces of glass or ice falling on the floor +DEF(iceorglass); +SUB(iceorglass) { + MY(airfriction) = 3; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(bounce) = 2; + MY(color_min) = "0xffffff"; + MY(color_max) = "0xb2d3e6"; + MY(count) = 15; + MY(gravity) = 1.300000; + MY(originjitter) = '30.0 30.0 30.0'; + MY(size_min) = 3; + MY(size_max) = 7; + MY(tex_min) = 44; + MY(tex_max) = 44; + MY(time_min) = 1; + MY(time_max) = 3; + MY(type) = "alphastatic"; + MY(velocityjitter) = '100.0 100.0 100.0'; +} + +// cover small area in poison gas, spawn it once per second +DEF(poisonfield); +SUB(poisonfield) { + MY(airfriction) = 1; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 50; + MY(bounce) = 1.500000; + MY(color_min) = "0x00ff00"; + MY(color_max) = "0x7db843"; + MY(count) = 15; + MY(gravity) = -0.010000; + MY(originjitter) = '333.0 333.0 50.0'; + MY(sizeincrease) = 30; + MY(size_min) = 1; + MY(size_max) = 1; + MY(tex_max) = 8; + MY(type) = "smoke"; + MY(velocityjitter) = '5.0 5.0 5.0'; +} + +// cover small area in icy mist, spawn it once per second +DEF(icefield); +SUB(icefield) { + MY(airfriction) = 1; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 50; + MY(bounce) = 1.500000; + MY(color_min) = "0x008aff"; + MY(color_max) = "0x75e7ff"; + MY(count) = 10; + MY(gravity) = -0.010000; + MY(originjitter) = '333.0 333.0 0.0'; + MY(sizeincrease) = 10; + MY(size_min) = 1; + MY(size_max) = 1; + MY(tex_max) = 8; + MY(type) = "smoke"; + MY(velocityjitter) = '5.0 5.0 30.0'; +} +SUB(icefield) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 50; + MY(color_min) = "0x008aff"; + MY(color_max) = "0x75e7ff"; + MY(count) = 5; + MY(gravity) = -0.001000; + MY(originjitter) = '333.0 333.0 0.0'; + MY(sizeincrease) = 10; + MY(size_min) = 1; + MY(size_max) = 1; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "smoke"; +} + +// cover very small area in flames, spawn it 3 times per second (or more often to get better looking fire at cost of fps hit ) +DEF(firefield); +// flames that go up +SUB(firefield) { + MY(airfriction) = 1; + MY(alpha_min) = 50; + MY(alpha_max) = 256; + MY(alpha_fade) = 200; + MY(bounce) = 1.500000; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 100; + MY(gravity) = -0.060000; + MY(originjitter) = '180.0 180.0 0.0'; + MY(sizeincrease) = 20; + MY(size_min) = 1; + MY(size_max) = 1; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "smoke"; + MY(velocityjitter) = '5.0 5.0 30.0'; +} +// flames that stay on the ground +SUB(firefield) { + MY(alpha_min) = 50; + MY(alpha_max) = 256; + MY(alpha_fade) = 200; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 50; + MY(originjitter) = '180.0 180.0 0.0'; + MY(sizeincrease) = 40; + MY(size_min) = 1; + MY(size_max) = 1; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "smoke"; +} +// smoke +SUB(firefield) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 70; + MY(color_min) = "0x000000"; + MY(color_max) = "0x111111"; + MY(count) = 20; + MY(gravity) = -0.020000; + MY(originjitter) = '180.0 180.0 0.0'; + MY(sizeincrease) = 7; + MY(size_min) = 1; + MY(size_max) = 1; + MY(tex_max) = 8; + MY(type) = "alphastatic"; +} + +// flamethrower, spawn it as fast as you can 20 times per second or more, it needs direction +DEF(flamethrower); +// fast fire +SUB(flamethrower) { + MY(airfriction) = 1.200000; + MY(alpha_min) = 50; + MY(alpha_max) = 256; + MY(alpha_fade) = 250; + MY(bounce) = 1.500000; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 3; + MY(gravity) = -0.060000; + MY(sizeincrease) = 20; + MY(size_min) = 5; + MY(size_max) = 5; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "smoke"; + MY(velocityjitter) = '40.0 40.0 11.0'; + MY(velocitymultiplier) = 30; +} +// slow fire +SUB(flamethrower) { + MY(airfriction) = 1.200000; + MY(alpha_min) = 50; + MY(alpha_max) = 256; + MY(alpha_fade) = 200; + MY(bounce) = 1.500000; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 2.500000; + MY(gravity) = -0.060000; + MY(sizeincrease) = 20; + MY(size_min) = 5; + MY(size_max) = 5; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "smoke"; + MY(velocityjitter) = '40.0 40.0 40.0'; + MY(velocitymultiplier) = 20; +} +// very slow and small fire +SUB(flamethrower) { + MY(airfriction) = 0.300000; + MY(alpha_min) = 50; + MY(alpha_max) = 256; + MY(alpha_fade) = 200; + MY(bounce) = 1.500000; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 1.500000; + MY(gravity) = -0.060000; + MY(sizeincrease) = 10; + MY(size_min) = 5; + MY(size_max) = 5; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "smoke"; + MY(velocityjitter) = '30.0 30.0 30.0'; + MY(velocitymultiplier) = 10; +} +// decreasing fire +SUB(flamethrower) { + MY(airfriction) = 0.300000; + MY(alpha_min) = 50; + MY(alpha_max) = 256; + MY(alpha_fade) = 200; + MY(bounce) = 1.500000; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 2; + MY(gravity) = -0.060000; + MY(sizeincrease) = -10; + MY(size_min) = 20; + MY(size_max) = 30; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "smoke"; + MY(velocityjitter) = '10.0 10.0 10.0'; + MY(velocitymultiplier) = 15; +} +// smoke +SUB(flamethrower) { + MY(airfriction) = 1; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 90; + MY(color_min) = "0x000000"; + MY(color_max) = "0x111111"; + MY(count) = 0.500000; + MY(originjitter) = '10.0 10.0 10.0'; + MY(sizeincrease) = 7; + MY(size_min) = 5; + MY(size_max) = 15; + MY(tex_max) = 8; + MY(type) = "alphastatic"; + MY(velocitymultiplier) = 20; + MY(velocityoffset) = '0.0 0.0 10.0'; +} + +// port-o-launch trail +DEF(TR_WIZSPIKE); +// glowing vapor trail +SUB(TR_WIZSPIKE) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 968; + MY(color_min) = "0x404040"; + MY(color_max) = "0x404040"; + MY(lightcolor) = '1.5 3.0 6.0'; + MY(lightradius) = 90; + MY(size_min) = 3; + MY(size_max) = 3; + MY(tex_min) = 62; + MY(tex_max) = 62; + MY(trailspacing) = 4; + MY(type) = "static"; + MY(velocitymultiplier) = -0.100000; +} +// bright sparks +SUB(TR_WIZSPIKE) { + MY(airfriction) = 12; + MY(alpha_min) = 444; + MY(alpha_max) = 512; + MY(alpha_fade) = 1866; + MY(bounce) = 1; + MY(color_min) = "0x404040"; + MY(color_max) = "0x404040"; + MY(count) = 1.500000; + MY(originjitter) = '1.0 1.0 1.0'; + MY(sizeincrease) = -20; + MY(size_min) = 2; + MY(size_max) = 4; + MY(tex_min) = 42; + MY(tex_max) = 42; + MY(trailspacing) = 12; + MY(type) = "snow"; + MY(velocityjitter) = '50.0 50.0 50.0'; + MY(velocityoffset) = '0.0 0.0 15.0'; +} + +// TAG trail +DEF(TR_VORESPIKE); +// glowing vapor trail +SUB(TR_VORESPIKE) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 968; + MY(color_min) = "0x804000"; + MY(color_max) = "0x804000"; + MY(lightcolor) = '1.5 3.0 6.0'; + MY(lightradius) = 90; + MY(size_min) = 3; + MY(size_max) = 3; + MY(tex_min) = 62; + MY(tex_max) = 62; + MY(trailspacing) = 4; + MY(type) = "static"; + MY(velocitymultiplier) = -0.100000; +} +// bright sparks +SUB(TR_VORESPIKE) { + MY(airfriction) = 12; + MY(alpha_min) = 444; + MY(alpha_max) = 512; + MY(alpha_fade) = 1866; + MY(bounce) = 1; + MY(color_min) = "0xff8000"; + MY(color_max) = "0xff8000"; + MY(count) = 1.500000; + MY(originjitter) = '1.0 1.0 1.0'; + MY(sizeincrease) = -20; + MY(size_min) = 2; + MY(size_max) = 4; + MY(tex_min) = 42; + MY(tex_max) = 42; + MY(trailspacing) = 12; + MY(type) = "snow"; + MY(velocityjitter) = '50.0 50.0 50.0'; + MY(velocityoffset) = '0.0 0.0 15.0'; +} + +DEF(flac_explode); +SUB(flac_explode) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(countabsolute) = 1; + MY(lightcolor) = '8.0 4.0 1.0'; + MY(lightradiusfade) = 400; + MY(lightradius) = 150; + MY(originjitter) = '40.0 40.0 40.0'; + MY(size_min) = 18; + MY(size_max) = 28; + MY(tex_min) = 8; + MY(tex_max) = 16; + MY(type) = "decal"; +} +// fire effect which make bright dot inside +SUB(flac_explode) { + MY(airfriction) = 8; + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 456; + MY(bounce) = 1.500000; + MY(color_min) = "0xffe955"; + MY(color_max) = "0xff5a00"; + MY(count) = 3; + MY(liquidfriction) = 8; + MY(notunderwater) = true; + MY(originjitter) = '8.0 8.0 8.0'; + MY(sizeincrease) = 5; + MY(size_min) = 6; + MY(size_max) = 16; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "smoke"; + MY(velocityjitter) = '156.0 156.0 156.0'; +} +// fire effect which expands then slows +SUB(flac_explode) { + MY(airfriction) = 12; + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 456; + MY(bounce) = 1.500000; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 6; + MY(liquidfriction) = 8; + MY(notunderwater) = true; + MY(originjitter) = '8.0 8.0 8.0'; + MY(sizeincrease) = 15; + MY(size_min) = 10; + MY(size_max) = 16; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "static"; + MY(velocityjitter) = '256.0 256.0 256.0'; +} +// smoke +SUB(flac_explode) { + MY(airfriction) = 5; + MY(alpha_min) = 500; + MY(alpha_max) = 600; + MY(alpha_fade) = 556; + MY(bounce) = 2; + MY(color_min) = "0x000000"; + MY(color_max) = "0x111111"; + MY(count) = 5; + MY(notunderwater) = true; + MY(sizeincrease) = 20; + MY(size_min) = 10; + MY(size_max) = 20; + MY(tex_max) = 8; + MY(type) = "alphastatic"; + MY(velocityjitter) = '244.0 244.0 244.0'; +} +// underwater bubbles +SUB(flac_explode) { + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 64; + MY(bounce) = 1.500000; + MY(color_min) = "0x404040"; + MY(color_max) = "0x808080"; + MY(count) = 8; + MY(gravity) = -0.125000; + MY(liquidfriction) = 0.250000; + MY(originjitter) = '16.0 16.0 16.0'; + MY(size_min) = 1; + MY(size_max) = 2; + MY(tex_min) = 62; + MY(tex_max) = 62; + MY(type) = "bubble"; + MY(underwater) = true; + MY(velocityjitter) = '96.0 96.0 96.0'; +} +// bouncing sparks +SUB(flac_explode) { + MY(airfriction) = 0.200000; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 384; + MY(bounce) = 1.500000; + MY(color_min) = "0x903010"; + MY(color_max) = "0xFFD030"; + MY(count) = 4; + MY(gravity) = 1; + MY(liquidfriction) = 0.800000; + MY(notunderwater) = true; + MY(size_min) = 2; + MY(size_max) = 2; + MY(tex_min) = 40; + MY(tex_max) = 40; + MY(type) = "spark"; + MY(velocityjitter) = '256.0 256.0 256.0'; + MY(velocityoffset) = '0.0 0.0 80.0'; +} + +// bullet trail (somewhat like a tracer) +DEF(tr_bullet); +SUB(tr_bullet) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 2560; + MY(color_min) = "0xff8960"; + MY(color_max) = "0xff8533"; + MY(size_min) = 4; + MY(size_max) = 4; + MY(stretchfactor) = 0.200000; + MY(tex_min) = 70; + MY(tex_max) = 70; + MY(trailspacing) = 750; + MY(type) = "spark"; + MY(velocitymultiplier) = 3; +} + +// smoke emitter for small pipes +DEF(smoking_smallemitter); +SUB(smoking_smallemitter) { + MY(airfriction) = -1; + MY(alpha_min) = 200; + MY(alpha_max) = 256; + MY(alpha_fade) = 100; + MY(color_min) = "0x292929"; + MY(color_max) = "0x000000"; + MY(count) = 10; + MY(gravity) = -0.100000; + MY(originjitter) = '10.0 10.0 10.0'; + MY(sizeincrease) = 20; + MY(size_min) = 6; + MY(size_max) = 15; + MY(tex_max) = 8; + MY(type) = "alphastatic"; + MY(velocityjitter) = '5.0 5.0 20.0'; +} + +// crylink trail +DEF(TR_CRYLINKPLASMA); +// plasma smoke +SUB(TR_CRYLINKPLASMA) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 1024; + MY(color_min) = "0x5522aa"; + MY(color_max) = "0x6622ff"; + MY(sizeincrease) = 8; + MY(size_min) = 2; + MY(size_max) = 2; + MY(tex_min) = 32; + MY(tex_max) = 32; + MY(trailspacing) = 128; + MY(type) = "static"; + MY(velocityjitter) = '8.0 8.0 8.0'; + MY(velocitymultiplier) = -0.010000; +} +// crylink main trail +SUB(TR_CRYLINKPLASMA) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 2600; + MY(color_min) = "0x5522aa"; + MY(color_max) = "0x6622ff"; + MY(sizeincrease) = 15; + MY(size_min) = 3; + MY(size_max) = 3; + MY(tex_min) = 3; + MY(tex_max) = 3; + MY(trailspacing) = 16; + MY(type) = "static"; + MY(velocityjitter) = '2.0 2.0 2.0'; + MY(velocitymultiplier) = 0.010000; +} + +DEF(cherryblossom); +SUB(cherryblossom) { + MY(airfriction) = 1; + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 32; + MY(bounce) = 1.500000; + MY(color_min) = "0xb123ff"; + MY(color_max) = "0xb183ff"; + MY(count) = 1.500000; + MY(gravity) = 0.050000; + MY(liquidfriction) = 1; + MY(originjitter) = '16.0 16.0 16.0'; + MY(size_min) = 1.500000; + MY(size_max) = 2; + MY(tex_min) = 40; + MY(tex_max) = 40; + MY(type) = "static"; + MY(velocityjitter) = '32.0 32.0 0.0'; +} + +DEF(alien_blood); +SUB(alien_blood) { + MY(airfriction) = 0.400000; + MY(alpha_min) = 1560; + MY(alpha_max) = 2560; + MY(alpha_fade) = 7000; + MY(blend) = "invmod"; + MY(bounce) = -1; + MY(color_min) = "0xDC9BCD"; + MY(color_max) = "0xDC9BCD"; + MY(count) = 0.400000; + MY(sizeincrease) = 20; + MY(size_min) = 5; + MY(size_max) = 11; + MY(staincolor_min) = "0xDC9BCD"; + MY(staincolor_max) = "0xDC9BCD"; + MY(stainsize_min) = 1; + MY(stainsize_max) = 2; + MY(staintex_min) = 16; + MY(staintex_max) = 24; + MY(stretchfactor) = 25; + MY(tex_min) = 24; + MY(tex_max) = 32; + MY(type) = "spark"; + MY(velocityjitter) = '99.0 99.0 55.0'; +} +// blood mist +SUB(alien_blood) { + MY(alpha_min) = 3000; + MY(alpha_max) = 5560; + MY(alpha_fade) = 12000; + MY(blend) = "invmod"; + MY(color_min) = "0xDC9BCD"; + MY(color_max) = "0xDC9BCD"; + MY(countabsolute) = 1; + MY(originjitter) = '11.0 11.0 11.0'; + MY(sizeincrease) = 20; + MY(size_min) = 25; + MY(size_max) = 30; + MY(tex_min) = 24; + MY(tex_max) = 32; + MY(type) = "smoke"; +} + +DEF(robot_blood); +SUB(robot_blood) { + MY(airfriction) = 1; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 64; + MY(bounce) = -1; + MY(color_min) = "0xff3000"; + MY(color_max) = "0xff7373"; + MY(count) = 0.167000; + MY(gravity) = 1; + MY(liquidfriction) = 4; + MY(size_min) = 1; + MY(size_max) = 2; + MY(tex_min) = 70; + MY(tex_max) = 70; + MY(type) = "spark"; + MY(velocityjitter) = '264.0 264.0 264.0'; + MY(velocityoffset) = '0.0 0.0 100.0'; +} +// shockwave +SUB(robot_blood) { + MY(alpha_max) = 90; + MY(alpha_fade) = 1000; + MY(color_min) = "0xff8400"; + MY(color_max) = "0xffbb72"; + MY(countabsolute) = 1; + MY(originjitter) = '11.0 11.0 11.0'; + MY(sizeincrease) = 800; + MY(size_min) = 2; + MY(size_max) = 2; + MY(tex_min) = 74; + MY(tex_max) = 74; + MY(type) = "smoke"; +} +// electo sparks +SUB(robot_blood) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 5120; + MY(color_min) = "0xff3000"; + MY(color_max) = "0xff8585"; + MY(count) = 0.100000; + MY(originjitter) = '41.0 41.0 21.0'; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = 4000; + MY(spin_max) = -4000; + MY(size_min) = 20; + MY(size_max) = 40; + MY(tex_min) = 71; + MY(tex_max) = 73; + MY(type) = "smoke"; +} + +DEF(alien_TR_BLOOD); +SUB(alien_TR_BLOOD) { + MY(airfriction) = -2; + MY(alpha_min) = 384; + MY(alpha_max) = 984; + MY(alpha_fade) = 1492; + MY(blend) = "invmod"; + MY(bounce) = -1; + MY(color_min) = "0xC080B0"; + MY(color_max) = "0xC080B0"; + MY(gravity) = 0.400000; + MY(liquidfriction) = 1; + MY(sizeincrease) = -5; + MY(size_min) = 4; + MY(size_max) = 19; + MY(staincolor_min) = "0xC080B0"; + MY(staincolor_max) = "0xC080B0"; + MY(stainsize_min) = 1; + MY(stainsize_max) = 2; + MY(staintex_min) = 16; + MY(staintex_max) = 24; + MY(stretchfactor) = 7; + MY(tex_min) = 24; + MY(tex_max) = 32; + MY(trailspacing) = 20; + MY(type) = "spark"; + MY(velocityjitter) = '64.0 64.0 64.0'; + MY(velocitymultiplier) = -0.100000; +} + +// splash around gib +SUB(alien_TR_BLOOD) { + MY(alpha_min) = 684; + MY(alpha_max) = 684; + MY(alpha_fade) = 7492; + MY(color_min) = "0xA8FFFF"; + MY(color_max) = "0xA8FFFF"; + MY(sizeincrease) = 500; + MY(size_min) = 4; + MY(size_max) = 6; + MY(tex_min) = 24; + MY(tex_max) = 32; + MY(trailspacing) = 42; + MY(type) = "blood"; +} + +DEF(robot_TR_BLOOD); +SUB(robot_TR_BLOOD) { + MY(airfriction) = -2; + MY(alpha_min) = 384; + MY(alpha_max) = 984; + MY(alpha_fade) = 1892; + MY(blend) = "invmod"; + MY(bounce) = -1; + MY(color_min) = "0xC0D890"; + MY(color_max) = "0xC0D890"; + MY(gravity) = 0.400000; + MY(liquidfriction) = 1; + MY(sizeincrease) = -6; + MY(size_min) = 4; + MY(size_max) = 13; + MY(staincolor_min) = "0x808080"; + MY(staincolor_max) = "0x808080"; + MY(stainsize_min) = 1; + MY(stainsize_max) = 3; + MY(staintex_min) = 16; + MY(staintex_max) = 24; + MY(stretchfactor) = 6; + MY(tex_min) = 24; + MY(tex_max) = 32; + MY(trailspacing) = 16; + MY(type) = "spark"; + MY(velocityjitter) = '64.0 64.0 64.0'; + MY(velocitymultiplier) = -0.300000; +} +// fire +SUB(robot_TR_BLOOD) { + MY(airfriction) = 4; + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 900; + MY(color_min) = "0x902010"; + MY(color_max) = "0xff3600"; + MY(gravity) = -1; + MY(liquidfriction) = 4; + MY(notunderwater) = true; + MY(sizeincrease) = 10; + MY(size_min) = 5; + MY(size_max) = 20; + MY(stretchfactor) = 5; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(trailspacing) = 16; + MY(type) = "spark"; + MY(velocityjitter) = '44.0 44.0 44.0'; +} +// arcs +SUB(robot_TR_BLOOD) { + MY(alpha_min) = 1128; + MY(alpha_max) = 1256; + MY(alpha_fade) = 44900; + MY(color_min) = "0xff3000"; + MY(color_max) = "0xff8585"; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = 4000; + MY(spin_max) = -4000; + MY(size_min) = 25; + MY(size_max) = 30; + MY(tex_min) = 71; + MY(tex_max) = 73; + MY(trailspacing) = 128; + MY(type) = "smoke"; + MY(velocityjitter) = '44.0 44.0 44.0'; +} + +DEF(alien_TR_SLIGHTBLOOD); +SUB(alien_TR_SLIGHTBLOOD) { + MY(airfriction) = 1; + MY(alpha_min) = 384; + MY(alpha_max) = 384; + MY(alpha_fade) = 192; + MY(bounce) = -1; + MY(color_min) = "0xC080B0"; + MY(color_max) = "0xC080B0"; + MY(liquidfriction) = 4; + MY(size_min) = 80; + MY(size_max) = 80; + MY(staincolor_min) = "0x808080"; + MY(staincolor_max) = "0x808080"; + MY(staintex_min) = 16; + MY(staintex_max) = 24; + MY(tex_min) = 24; + MY(tex_max) = 32; + MY(trailspacing) = 64; + MY(type) = "blood"; + MY(velocityjitter) = '64.0 64.0 64.0'; + MY(velocitymultiplier) = 0.500000; +} + +DEF(robot_TR_SLIGHTBLOOD); +SUB(robot_TR_SLIGHTBLOOD) { + MY(airfriction) = 1; + MY(alpha_min) = 384; + MY(alpha_max) = 384; + MY(alpha_fade) = 192; + MY(bounce) = -1; + MY(color_min) = "0xC0D890"; + MY(color_max) = "0xC0D890"; + MY(liquidfriction) = 4; + MY(size_min) = 8; + MY(size_max) = 8; + MY(staincolor_min) = "0x808080"; + MY(staincolor_max) = "0x808080"; + MY(staintex_min) = 16; + MY(staintex_max) = 24; + MY(tex_min) = 24; + MY(tex_max) = 32; + MY(trailspacing) = 64; + MY(type) = "blood"; + MY(velocityjitter) = '64.0 64.0 64.0'; + MY(velocitymultiplier) = 0.500000; +} + +DEF(item_pickup); +// flare particle and light +SUB(item_pickup) { + MY(alpha_min) = 128; + MY(alpha_max) = 64; + MY(alpha_fade) = 64; + MY(color_min) = "0x63F2EA"; + MY(color_max) = "0xB0C5C4"; + MY(countabsolute) = 1; + MY(size_min) = 8; + MY(size_max) = 16; + MY(type) = "static"; +} +// cloud of particles which expand rapidly and then slow to form a ball +SUB(item_pickup) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 1280; + MY(color_min) = "0x63F2EA"; + MY(color_max) = "0xB0C5C4"; + MY(count) = 32; + MY(size_min) = 1; + MY(size_max) = 1; + MY(tex_min) = 41; + MY(tex_max) = 41; + MY(type) = "spark"; + MY(velocityjitter) = '256.0 256.0 256.0'; +} + +DEF(bloodshower); +SUB(bloodshower) { + MY(alpha_min) = 156; + MY(alpha_max) = 656; + MY(alpha_fade) = 1664; + MY(blend) = "invmod"; + MY(bounce) = -1; + MY(color_min) = "0xA8FFFF"; + MY(color_max) = "0xA8FFFFF"; + MY(count) = 125; + MY(gravity) = 1; + MY(liquidfriction) = 4; + MY(size_min) = 8; + MY(size_max) = 28; + MY(staincolor_min) = "0x808080"; + MY(staincolor_max) = "0x808080"; + MY(stainsize_min) = 1; + MY(stainsize_max) = 2; + MY(staintex_min) = 16; + MY(staintex_max) = 24; + MY(stretchfactor) = 3; + MY(tex_min) = 24; + MY(tex_max) = 32; + MY(type) = "spark"; + MY(velocityjitter) = '764.0 764.0 764.0'; +} +// center blood +SUB(bloodshower) { + MY(alpha_min) = 156; + MY(alpha_max) = 656; + MY(alpha_fade) = 1664; + MY(blend) = "invmod"; + MY(color_min) = "0xA8FFFF"; + MY(color_max) = "0xA8FFFFF"; + MY(countabsolute) = 0.100000; + MY(originjitter) = '50.0 50.0 50.0'; + MY(sizeincrease) = 300; + MY(size_min) = 1; + MY(size_max) = 28; + MY(tex_min) = 24; + MY(tex_max) = 32; + MY(type) = "smoke"; +} + +DEF(alien_bloodshower); +SUB(alien_bloodshower) { + MY(alpha_min) = 156; + MY(alpha_max) = 656; + MY(alpha_fade) = 1664; + MY(blend) = "invmod"; + MY(bounce) = -1; + MY(color_min) = "0xC080B0"; + MY(color_max) = "0xC080B0"; + MY(count) = 125; + MY(gravity) = 1; + MY(liquidfriction) = 4; + MY(size_min) = 8; + MY(size_max) = 28; + MY(staincolor_min) = "0xC080B0"; + MY(staincolor_max) = "0xC080B0"; + MY(stainsize_min) = 1; + MY(stainsize_max) = 2; + MY(staintex_min) = 16; + MY(staintex_max) = 24; + MY(stretchfactor) = 3; + MY(tex_min) = 24; + MY(tex_max) = 32; + MY(type) = "spark"; + MY(velocityjitter) = '764.0 764.0 764.0'; +} +// center blood +SUB(alien_bloodshower) { + MY(alpha_min) = 156; + MY(alpha_max) = 656; + MY(alpha_fade) = 1664; + MY(blend) = "invmod"; + MY(color_min) = "0xA8FFFF"; + MY(color_max) = "0xA8FFFFF"; + MY(countabsolute) = 0.100000; + MY(originjitter) = '50.0 50.0 50.0'; + MY(sizeincrease) = 300; + MY(size_min) = 1; + MY(size_max) = 28; + MY(tex_min) = 24; + MY(tex_max) = 32; + MY(type) = "smoke"; +} + +DEF(robot_bloodshower); +SUB(robot_bloodshower) { + MY(alpha_min) = 156; + MY(alpha_max) = 656; + MY(alpha_fade) = 1664; + MY(blend) = "invmod"; + MY(bounce) = -1; + MY(color_min) = "0xC0D890"; + MY(color_max) = "0xC0D890"; + MY(count) = 100; + MY(gravity) = 1; + MY(liquidfriction) = 4; + MY(size_min) = 8; + MY(size_max) = 28; + MY(staincolor_min) = "0xC0D890"; + MY(staincolor_max) = "0xC0D890"; + MY(stainsize_min) = 1; + MY(stainsize_max) = 2; + MY(staintex_min) = 16; + MY(staintex_max) = 24; + MY(stretchfactor) = 3; + MY(tex_min) = 24; + MY(tex_max) = 32; + MY(type) = "spark"; + MY(velocityjitter) = '764.0 764.0 764.0'; +} +// arc +SUB(robot_bloodshower) { + MY(alpha_min) = 1128; + MY(alpha_max) = 1256; + MY(alpha_fade) = 4200; + MY(color_min) = "0xff3000"; + MY(color_max) = "0xff8585"; + MY(count) = 2.500000; + MY(originjitter) = '150.0 150.0 150.0'; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = 99; + MY(spin_max) = -99; + MY(size_min) = 25; + MY(size_max) = 40; + MY(tex_min) = 71; + MY(tex_max) = 73; + MY(type) = "smoke"; + MY(velocityjitter) = '44.0 44.0 44.0'; +} +// shockwave +SUB(robot_bloodshower) { + MY(alpha_min) = 11; + MY(alpha_max) = 125; + MY(alpha_fade) = 990; + MY(color_min) = "0xff3000"; + MY(color_max) = "0xff8585"; + MY(count) = 2.500000; + MY(sizeincrease) = 3000; + MY(size_min) = 5; + MY(size_max) = 50; + MY(tex_min) = 74; + MY(tex_max) = 74; + MY(type) = "smoke"; +} + +#define ground_quake(name, colormin, colormax) \ + DEF(name##_ground_quake); \ + SUB(name##_ground_quake) /* smoke */ { \ + MY(airfriction) = 3; \ + MY(alpha_min) = 100; \ + MY(alpha_max) = 126; \ + MY(alpha_fade) = 200; \ + MY(bounce) = 1.100000; \ + MY(color_min) = "0x111111"; \ + MY(color_max) = "0xbbbbbb"; \ + MY(count) = 90; \ + MY(gravity) = 0.500000; \ + MY(notunderwater) = true; \ + MY(sizeincrease) = 100; \ + MY(size_min) = 20; \ + MY(size_max) = 50; \ + MY(tex_max) = 8; \ + MY(time_min) = 5; \ + MY(time_max) = 10; \ + MY(type) = "smoke"; \ + MY(velocityjitter) = '190.0 190.0 50.0'; \ + } \ + SUB(name##_ground_quake) { \ + MY(airfriction) = 4; \ + MY(alpha_min) = 100; \ + MY(alpha_max) = 126; \ + MY(alpha_fade) = 200; \ + MY(bounce) = 1.200000; \ + MY(color_min) = "0x111111"; \ + MY(color_max) = "0x979797"; \ + MY(count) = 40; \ + MY(gravity) = 0.200000; \ + MY(notunderwater) = true; \ + MY(sizeincrease) = 60; \ + MY(size_min) = 10; \ + MY(size_max) = 30; \ + MY(tex_max) = 8; \ + MY(time_min) = 10; \ + MY(time_max) = 15; \ + MY(type) = "smoke"; \ + MY(velocityjitter) = '190.0 190.0 50.0'; \ + } \ + SUB(name##_ground_quake) { \ + MY(alpha_min) = 200; \ + MY(alpha_max) = 356; \ + MY(alpha_fade) = 512; \ + MY(bounce) = 6; \ + MY(color_min) = colormin; \ + MY(color_max) = colormax; \ + MY(count) = 16; \ + MY(gravity) = -0.500000; \ + MY(originjitter) = '33.0 33.0 33.0'; \ + MY(sizeincrease) = 5; \ + MY(size_min) = 4; \ + MY(size_max) = 20; \ + MY(tex_min) = 48; \ + MY(tex_max) = 55; \ + MY(time_min) = 15; \ + MY(time_max) = 25; \ + MY(type) = "smoke"; \ + MY(velocityjitter) = '22.0 22.0 50.0'; \ + } \ + SUB(name##_ground_quake) /* smoke */ { \ + MY(alpha_min) = 200; \ + MY(alpha_max) = 256; \ + MY(alpha_fade) = 200; \ + MY(bounce) = 2; \ + MY(color_min) = "0x000000"; \ + MY(color_max) = "0xffffff"; \ + MY(count) = 11; \ + MY(gravity) = -0.300000; \ + MY(originjitter) = '44.0 44.0 44.0'; \ + MY(sizeincrease) = 11; \ + MY(size_min) = 22; \ + MY(size_max) = 33; \ + MY(tex_max) = 8; \ + MY(time_min) = 25; \ + MY(time_max) = 35; \ + MY(type) = "alphastatic"; \ + MY(velocityjitter) = '11.0 11.0 50.0'; \ + } \ + /**/ + +ground_quake(red, "0x9E6A64", "0x91302D") +ground_quake(blue, "0x64679E", "0x2D4C91") +#undef ground_quake + +#include "effectinfo_gentle_morphed.inc" + +// Team / hit vaporizer effects +#define TE_TEI_G3(name, colormin1, colormax1, colormin2, colormax2) \ + DEF(TE_TEI_G3##name); \ + SUB(TE_TEI_G3##name) { \ + MY(alpha_min) = 128; \ + MY(alpha_max) = 128; \ + MY(alpha_fade) = 256; \ + MY(color_min) = colormin1; \ + MY(color_max) = colormax1; \ + MY(countabsolute) = 1; \ + MY(size_min) = 4; \ + MY(size_max) = 4; \ + MY(tex_min) = 200; \ + MY(tex_max) = 200; \ + MY(type) = "beam"; \ + } \ + SUB(TE_TEI_G3##name) { \ + MY(airfriction) = -4; \ + MY(alpha_min) = 256; \ + MY(alpha_max) = 256; \ + MY(alpha_fade) = 512; \ + MY(color_min) = colormin2; \ + MY(color_max) = colormax2; \ + MY(sizeincrease) = 3; \ + MY(size_min) = 0.300000; \ + MY(size_max) = 0.300000; \ + MY(tex_min) = 46; \ + MY(tex_max) = 46; \ + MY(trailspacing) = 8; \ + MY(type) = "smoke"; \ + MY(velocityjitter) = '3.0 3.0 3.0'; \ + } \ + DEF(TE_TEI_G3##name##_HIT); \ + SUB(TE_TEI_G3##name##_HIT) { \ + MY(alpha_min) = 128; \ + MY(alpha_max) = 128; \ + MY(alpha_fade) = 256; \ + MY(color_min) = colormin1; \ + MY(color_max) = colormax1; \ + MY(countabsolute) = 1; \ + MY(size_min) = 8; \ + MY(size_max) = 8; \ + MY(tex_min) = 200; \ + MY(tex_max) = 200; \ + MY(type) = "beam"; \ + } \ + SUB(TE_TEI_G3##name##_HIT) /* rings */ { \ + MY(airfriction) = -4; \ + MY(alpha_min) = 256; \ + MY(alpha_max) = 256; \ + MY(alpha_fade) = 512; \ + MY(color_min) = "0xFFFFFF"; \ + MY(color_max) = colormax1; \ + MY(sizeincrease) = -2; \ + MY(size_min) = 2; \ + MY(size_max) = 2; \ + MY(trailspacing) = 20; \ + MY(type) = "smoke"; \ + MY(velocityjitter) = '2.0 2.0 2.0'; \ + } \ + SUB(TE_TEI_G3##name##_HIT) { \ + MY(airfriction) = -4; \ + MY(alpha_min) = 256; \ + MY(alpha_max) = 256; \ + MY(alpha_fade) = 512; \ + MY(color_min) = colormin1; \ + MY(color_max) = colormax1; \ + MY(sizeincrease) = -6; \ + MY(size_min) = 10; \ + MY(size_max) = 10; \ + MY(trailspacing) = 40; \ + MY(type) = "smoke"; \ + } \ + /**/ +TE_TEI_G3(RED, "0xFF0000", "0xFF0011", "0x200000", "0x400000") +TE_TEI_G3(BLUE, "0x0000FF", "0x1100FF", "0x000020", "0x000040") +TE_TEI_G3(YELLOW, "0xffff00", "0xffff11", "0x202000", "0x404000") +TE_TEI_G3(PINK, "0xFF00FF", "0xFF11FF", "0x200020", "0x400040") +#undef TE_TEI_G3 + +#include "effectinfo_gentle_particlegibs.inc" + +#include "effectinfo_onslaught.inc" + +DEF(firemine); +SUB(firemine) { + MY(airfriction) = 1.200000; + MY(alpha_min) = 50; + MY(alpha_max) = 256; + MY(alpha_fade) = 250; + MY(bounce) = 1.500000; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 0.500000; + MY(gravity) = -0.060000; + MY(sizeincrease) = 5; + MY(size_min) = 1; + MY(size_max) = 1; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(trailspacing) = 2; + MY(type) = "smoke"; + MY(velocityjitter) = '10.0 10.0 2.0'; +} +// slowfire +SUB(firemine) { + MY(airfriction) = 1.200000; + MY(alpha_min) = 50; + MY(alpha_max) = 256; + MY(alpha_fade) = 200; + MY(bounce) = 1.500000; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 0.500000; + MY(gravity) = -0.060000; + MY(sizeincrease) = 5; + MY(size_min) = 1; + MY(size_max) = 1; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(trailspacing) = 2; + MY(type) = "smoke"; + MY(velocityjitter) = '10.0 10.0 10.0'; +} +// very slow and small fire +SUB(firemine) { + MY(airfriction) = 0.300000; + MY(alpha_min) = 50; + MY(alpha_max) = 256; + MY(alpha_fade) = 200; + MY(bounce) = 1.500000; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 0.500000; + MY(gravity) = -0.060000; + MY(sizeincrease) = 2; + MY(size_min) = 1; + MY(size_max) = 1; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(trailspacing) = 4; + MY(type) = "smoke"; + MY(velocityjitter) = '8.0 8.0 8.0'; +} +// decreasing fire +SUB(firemine) { + MY(airfriction) = 0.300000; + MY(alpha_min) = 50; + MY(alpha_max) = 256; + MY(alpha_fade) = 200; + MY(bounce) = 1.500000; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 0.500000; + MY(gravity) = -0.060000; + MY(sizeincrease) = -3; + MY(size_min) = 5; + MY(size_max) = 7; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(trailspacing) = 4; + MY(type) = "smoke"; + MY(velocityjitter) = '3.0 3.0 3.0'; +} +// smoke +SUB(firemine) { + MY(airfriction) = 1; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 90; + MY(color_min) = "0x000000"; + MY(color_max) = "0x111111"; + MY(count) = 0.500000; + MY(originjitter) = '2.0 2.0 2.0'; + MY(sizeincrease) = 1; + MY(size_min) = 1; + MY(size_max) = 4; + MY(tex_max) = 8; + MY(trailspacing) = 8; + MY(type) = "alphastatic"; + MY(velocityoffset) = '0.0 0.0 3.0'; +} +// fastfire +SUB(firemine) { + MY(airfriction) = 1.200000; + MY(alpha_min) = 50; + MY(alpha_max) = 256; + MY(alpha_fade) = 1600; + MY(bounce) = 1.500000; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 0.500000; + MY(size_min) = 12; + MY(size_max) = 12; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(trailspacing) = 1; + MY(type) = "smoke"; +} +// light only +SUB(firemine) { + MY(lightcolor) = '2.7 2.7 0.6'; + MY(lightradiusfade) = 50000; + MY(lightradius) = 50; + MY(trailspacing) = 16; +} + +DEF(fireball); +SUB(fireball) { + MY(airfriction) = 1.200000; + MY(alpha_min) = 50; + MY(alpha_max) = 256; + MY(alpha_fade) = 250; + MY(bounce) = 1.500000; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 0.500000; + MY(gravity) = -0.060000; + MY(sizeincrease) = 20; + MY(size_min) = 5; + MY(size_max) = 5; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(trailspacing) = 2; + MY(type) = "smoke"; + MY(velocityjitter) = '40.0 40.0 11.0'; +} +// slow fire +SUB(fireball) { + MY(airfriction) = 1.200000; + MY(alpha_min) = 50; + MY(alpha_max) = 256; + MY(alpha_fade) = 200; + MY(bounce) = 1.500000; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 0.500000; + MY(gravity) = -0.060000; + MY(sizeincrease) = 20; + MY(size_min) = 5; + MY(size_max) = 5; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(trailspacing) = 2; + MY(type) = "smoke"; + MY(velocityjitter) = '40.0 40.0 40.0'; +} +// very slow and small fire +SUB(fireball) { + MY(airfriction) = 0.300000; + MY(alpha_min) = 50; + MY(alpha_max) = 256; + MY(alpha_fade) = 200; + MY(bounce) = 1.500000; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 0.500000; + MY(gravity) = -0.060000; + MY(sizeincrease) = 10; + MY(size_min) = 5; + MY(size_max) = 5; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(trailspacing) = 4; + MY(type) = "smoke"; + MY(velocityjitter) = '30.0 30.0 30.0'; +} +// decreasing fire +SUB(fireball) { + MY(airfriction) = 0.300000; + MY(alpha_min) = 50; + MY(alpha_max) = 256; + MY(alpha_fade) = 200; + MY(bounce) = 1.500000; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 0.500000; + MY(gravity) = -0.060000; + MY(sizeincrease) = -10; + MY(size_min) = 20; + MY(size_max) = 30; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(trailspacing) = 4; + MY(type) = "smoke"; + MY(velocityjitter) = '10.0 10.0 10.0'; +} +// smoke +SUB(fireball) { + MY(airfriction) = 1; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 90; + MY(color_min) = "0x000000"; + MY(color_max) = "0x111111"; + MY(count) = 0.500000; + MY(originjitter) = '10.0 10.0 10.0'; + MY(sizeincrease) = 7; + MY(size_min) = 5; + MY(size_max) = 15; + MY(tex_max) = 8; + MY(trailspacing) = 8; + MY(type) = "alphastatic"; + MY(velocityoffset) = '0.0 0.0 10.0'; +} +// fast fire +SUB(fireball) { + MY(airfriction) = 1.200000; + MY(alpha_min) = 50; + MY(alpha_max) = 256; + MY(alpha_fade) = 1600; + MY(bounce) = 1.500000; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 0.500000; + MY(size_min) = 48; + MY(size_max) = 48; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(trailspacing) = 1; + MY(type) = "smoke"; +} +// light only +SUB(fireball) { + MY(lightcolor) = '2.7 2.7 0.6'; + MY(lightradiusfade) = 3000; + MY(lightradius) = 300; + MY(trailspacing) = 16; +} + +DEF(fireball_laser); +SUB(fireball_laser) { + MY(alpha_min) = 192; + MY(alpha_max) = 256; + MY(alpha_fade) = 2560; + MY(color_min) = "0x800000"; + MY(color_max) = "0xFF8020"; + MY(count) = 10; + MY(size_min) = 1; + MY(size_max) = 1; + MY(stretchfactor) = 0.700000; + MY(type) = "spark"; + MY(velocityjitter) = '1.0 1.0 1.0'; + MY(velocitymultiplier) = 10; +} + +// rocket explosion (bigger than mortar and hagar) +DEF(fireball_explode); +// decal +SUB(fireball_explode) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(countabsolute) = 1; + MY(lightcolor) = '4.0 2.0 0.5'; + MY(lightradiusfade) = 500; + MY(lightradius) = 500; + MY(originjitter) = '56.0 56.0 56.0'; + MY(size_min) = 72; + MY(size_max) = 72; + MY(tex_min) = 8; + MY(tex_max) = 16; + MY(type) = "decal"; +} +// flare effect +SUB(fireball_explode) { + MY(alpha_min) = 192; + MY(alpha_max) = 192; + MY(alpha_fade) = 64; + MY(color_min) = "0x404040"; + MY(color_max) = "0x404040"; + MY(countabsolute) = 1; + MY(size_min) = 72; + MY(size_max) = 72; + MY(tex_min) = 35; + MY(tex_max) = 37; + MY(type) = "static"; +} +// fire effect +SUB(fireball_explode) { + MY(airfriction) = 4; + MY(alpha_min) = 128; + MY(alpha_max) = 128; + MY(alpha_fade) = 256; + MY(bounce) = 1.500000; + MY(color_min) = "0x902010"; + MY(color_max) = "0xFFD080"; + MY(count) = 128; + MY(liquidfriction) = 4; + MY(notunderwater) = true; + MY(originjitter) = '8.0 8.0 8.0'; + MY(size_min) = 16; + MY(size_max) = 16; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "static"; + MY(velocityjitter) = '512.0 512.0 512.0'; +} +// underwater bubbles +SUB(fireball_explode) { + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 64; + MY(bounce) = 1.500000; + MY(color_min) = "0x404040"; + MY(color_max) = "0x808080"; + MY(count) = 32; + MY(gravity) = -0.125000; + MY(liquidfriction) = 0.250000; + MY(originjitter) = '16.0 16.0 16.0'; + MY(size_min) = 3; + MY(size_max) = 3; + MY(tex_min) = 62; + MY(tex_max) = 62; + MY(type) = "bubble"; + MY(underwater) = true; + MY(velocityjitter) = '144.0 144.0 144.0'; +} +// bouncing sparks +SUB(fireball_explode) { + MY(airfriction) = 0.200000; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 384; + MY(bounce) = 1.500000; + MY(color_min) = "0x903010"; + MY(color_max) = "0xFFD030"; + MY(count) = 64; + MY(gravity) = 1; + MY(liquidfriction) = 0.800000; + MY(notunderwater) = true; + MY(size_min) = 2; + MY(size_max) = 2; + MY(type) = "spark"; + MY(velocityjitter) = '384.0 384.0 384.0'; + MY(velocityoffset) = '0.0 0.0 80.0'; +} + +DEF(fireball_muzzleflash); +SUB(fireball_muzzleflash) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 512; + MY(color_min) = "0x202020"; + MY(color_max) = "0x404040"; + MY(count) = 2; + MY(lightcolor) = '2.0 1.5 0.2'; + MY(lightradiusfade) = 2000; + MY(lightradius) = 200; + MY(originjitter) = '1.5 1.5 1.5'; + MY(size_min) = 5; + MY(size_max) = 5; + MY(tex_max) = 8; + MY(type) = "smoke"; + MY(velocityjitter) = '6.0 6.0 6.0'; + MY(velocitymultiplier) = 0.010000; +} +SUB(fireball_muzzleflash) { + MY(airfriction) = 12; + MY(alpha_max) = 128; + MY(alpha_fade) = 1024; + MY(color_min) = "0xFFFDD9"; + MY(color_max) = "0xFFFDD9"; + MY(count) = 15; + MY(originjitter) = '1.0 1.0 1.0'; + MY(size_min) = 3; + MY(size_max) = 3; + MY(tex_min) = 40; + MY(tex_max) = 40; + MY(type) = "spark"; + MY(velocityjitter) = '300.0 300.0 300.0'; + MY(velocitymultiplier) = 0.500000; +} + +DEF(fireball_preattack_muzzleflash); +SUB(fireball_preattack_muzzleflash) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 512; + MY(color_min) = "0x202020"; + MY(color_max) = "0x404040"; + MY(count) = 2; + MY(lightcolor) = '2.0 1.5 0.2'; + MY(lightradiusfade) = 2000; + MY(lightradius) = 200; + MY(originjitter) = '1.5 1.5 1.5'; + MY(size_min) = 5; + MY(size_max) = 5; + MY(tex_max) = 8; + MY(type) = "smoke"; + MY(velocityjitter) = '6.0 6.0 6.0'; + MY(velocitymultiplier) = 0.010000; +} +SUB(fireball_preattack_muzzleflash) { + MY(airfriction) = 12; + MY(alpha_max) = 128; + MY(alpha_fade) = 1024; + MY(color_min) = "0xFFFDD9"; + MY(color_max) = "0xFFFDD9"; + MY(count) = 15; + MY(originjitter) = '1.0 1.0 1.0'; + MY(size_min) = 3; + MY(size_max) = 3; + MY(tex_min) = 40; + MY(tex_max) = 40; + MY(type) = "spark"; + MY(velocityjitter) = '300.0 300.0 300.0'; + MY(velocitymultiplier) = 0.500000; +} + +DEF(fireball_bfgdamage); +SUB(fireball_bfgdamage) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 512; + MY(color_min) = "0x202020"; + MY(color_max) = "0x404040"; + MY(count) = 2; + MY(lightcolor) = '2.0 1.5 0.2'; + MY(lightradiusfade) = 2000; + MY(lightradius) = 200; + MY(originjitter) = '1.5 1.5 1.5'; + MY(size_min) = 5; + MY(size_max) = 5; + MY(tex_max) = 8; + MY(type) = "smoke"; + MY(velocityjitter) = '6.0 6.0 6.0'; + MY(velocitymultiplier) = 0.010000; +} +SUB(fireball_bfgdamage) { + MY(airfriction) = 12; + MY(alpha_max) = 128; + MY(alpha_fade) = 1024; + MY(color_min) = "0xFFFDD9"; + MY(color_max) = "0xFFFDD9"; + MY(count) = 15; + MY(originjitter) = '1.0 1.0 1.0'; + MY(size_min) = 3; + MY(size_max) = 3; + MY(tex_min) = 40; + MY(tex_max) = 40; + MY(type) = "spark"; + MY(velocityjitter) = '300.0 300.0 300.0'; + MY(velocitymultiplier) = 0.500000; +} + +DEF(EF_FLAME); +// fire +SUB(EF_FLAME) { + MY(alpha_min) = 200; + MY(alpha_max) = 356; + MY(alpha_fade) = 512; + MY(bounce) = 2; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 100; + MY(gravity) = -0.500000; + MY(originjitter) = '12.0 12.0 34.0'; + MY(originoffset) = '0.0 0.0 10.0'; + MY(sizeincrease) = -1; + MY(size_min) = 5; + MY(size_max) = 21; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "smoke"; + MY(velocityjitter) = '22.0 22.0 50.0'; +} +// smoke +SUB(EF_FLAME) { + MY(alpha_min) = 200; + MY(alpha_max) = 256; + MY(alpha_fade) = 200; + MY(bounce) = 2; + MY(color_min) = "0x000000"; + MY(color_max) = "0x111111"; + MY(count) = 50; + MY(gravity) = -0.300000; + MY(originjitter) = '12.0 12.0 34.0'; + MY(originoffset) = '0.0 0.0 10.0'; + MY(sizeincrease) = 6; + MY(size_min) = 11; + MY(size_max) = 15; + MY(tex_max) = 8; + MY(type) = "alphastatic"; + MY(velocityjitter) = '11.0 11.0 50.0'; +} +SUB(EF_FLAME) { + MY(count) = 0.500000; + MY(lightcolor) = '0.9 0.9 0.2'; + MY(lightradiusfade) = 10000; + MY(lightradius) = 200; +} + +// rifle bullet trail (somewhat like a tracer) +DEF(tr_rifle); +SUB(tr_rifle) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 2560; + MY(color_min) = "0x800000"; + MY(color_max) = "0xFF8020"; + MY(size_min) = 1.500000; + MY(size_max) = 1.500000; + MY(stretchfactor) = 1; + MY(trailspacing) = 128; + MY(type) = "spark"; + MY(velocitymultiplier) = 0.700000; +} +SUB(tr_rifle) { + MY(airfriction) = -4; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 256; + MY(color_min) = "0x202020"; + MY(color_max) = "0x404040"; + MY(notunderwater) = true; + MY(sizeincrease) = 0.400000; + MY(size_min) = 4; + MY(size_max) = 4; + MY(tex_max) = 8; + MY(trailspacing) = 8; + MY(type) = "smoke"; + MY(velocityjitter) = '4.0 4.0 4.0'; +} +SUB(tr_rifle) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 128; + MY(bounce) = 1.500000; + MY(color_min) = "0x404040"; + MY(color_max) = "0x808080"; + MY(gravity) = -0.125000; + MY(liquidfriction) = 4; + MY(size_min) = 2; + MY(size_max) = 2; + MY(tex_min) = 62; + MY(tex_max) = 62; + MY(trailspacing) = 32; + MY(type) = "bubble"; + MY(underwater) = true; + MY(velocityjitter) = '16.0 16.0 16.0'; +} + +// rocket guiding start +DEF(rocket_guide); +// underwater bubbles +SUB(rocket_guide) { + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 64; + MY(bounce) = 1.500000; + MY(color_min) = "0x404040"; + MY(color_max) = "0x808080"; + MY(count) = 2; + MY(gravity) = -0.125000; + MY(liquidfriction) = 0.250000; + MY(originjitter) = '8.0 8.0 8.0'; + MY(size_min) = 1.500000; + MY(size_max) = 1.500000; + MY(tex_min) = 62; + MY(tex_max) = 62; + MY(type) = "bubble"; + MY(underwater) = true; + MY(velocityjitter) = '48.0 48.0 48.0'; + MY(velocitymultiplier) = -0.100000; +} +// bouncing sparks +SUB(rocket_guide) { + MY(airfriction) = 0.200000; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 984; + MY(bounce) = 1.500000; + MY(color_min) = "0x903010"; + MY(color_max) = "0xFFD030"; + MY(count) = 8; + MY(gravity) = 1; + MY(liquidfriction) = 0.800000; + MY(notunderwater) = true; + MY(size_min) = 0.300000; + MY(size_max) = 0.700000; + MY(stretchfactor) = 0.400000; + MY(tex_min) = 40; + MY(tex_max) = 40; + MY(type) = "spark"; + MY(velocityjitter) = '156.0 156.0 156.0'; + MY(velocitymultiplier) = -0.300000; + MY(velocityoffset) = '0.0 0.0 80.0'; +} +SUB(rocket_guide) { + MY(alpha_min) = 100; + MY(alpha_max) = 100; + MY(alpha_fade) = 500; + MY(color_min) = "0x903010"; + MY(color_max) = "0xFFD030"; + MY(countabsolute) = 1; + MY(sizeincrease) = 300; + MY(size_min) = 10; + MY(size_max) = 10; + MY(tex_min) = 65; + MY(tex_max) = 65; + MY(type) = "smoke"; +} + +// gauntlet laser +DEF(laser_gauntlet); +SUB(laser_gauntlet) { + MY(airfriction) = 10; + MY(alpha_min) = 128; + MY(alpha_max) = 512; + MY(alpha_fade) = 6280; + MY(color_min) = "0xb44215"; + MY(color_max) = "0x880000"; + MY(count) = 3; + MY(originjitter) = '2.0 2.0 2.0'; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = 4000; + MY(spin_max) = -4000; + MY(sizeincrease) = -100; + MY(size_min) = 7; + MY(size_max) = 10; + MY(stretchfactor) = 2.300000; + MY(tex_min) = 43; + MY(tex_max) = 43; + MY(type) = "spark"; + MY(velocityjitter) = '150.0 150.0 150.0'; + MY(velocitymultiplier) = 0.200000; +} +SUB(laser_gauntlet) { + MY(airfriction) = 12; + MY(alpha_min) = 256; + MY(alpha_max) = 512; + MY(alpha_fade) = 6280; + MY(color_min) = "0xff4200"; + MY(color_max) = "0xff0000"; + MY(count) = 6; + MY(originjitter) = '2.0 2.0 2.0'; + MY(sizeincrease) = -100; + MY(size_min) = 7; + MY(size_max) = 9; + MY(stretchfactor) = 2; + MY(tex_min) = 8; + MY(tex_max) = 15; + MY(type) = "spark"; + MY(velocityjitter) = '100.0 100.0 100.0'; + MY(velocitymultiplier) = 0.200000; +} + +DEF(laser_gauntletmuzzleflash); +// glow and light +SUB(laser_gauntletmuzzleflash) { + MY(airfriction) = 10; + MY(alpha_min) = 256; + MY(alpha_max) = 512; + MY(alpha_fade) = 6280; + MY(color_min) = "0x220000"; + MY(color_max) = "0x880000"; + MY(countabsolute) = 1; + MY(lightcolor) = '3.0 0.1 0.1'; + MY(lightradiusfade) = 500; + MY(lightradius) = 150; + MY(sizeincrease) = -100; + MY(size_min) = 10; + MY(size_max) = 15; + MY(stretchfactor) = 2; + MY(tex_min) = 65; + MY(tex_max) = 65; + MY(type) = "smoke"; +} +// electricity +SUB(laser_gauntletmuzzleflash) { + MY(airfriction) = 10; + MY(alpha_min) = 128; + MY(alpha_max) = 512; + MY(alpha_fade) = 6280; + MY(color_min) = "0xb44215"; + MY(color_max) = "0x880000"; + MY(count) = 3; + MY(originjitter) = '2.0 2.0 2.0'; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = 4000; + MY(spin_max) = -4000; + MY(sizeincrease) = -100; + MY(size_min) = 7; + MY(size_max) = 10; + MY(stretchfactor) = 2.300000; + MY(tex_min) = 43; + MY(tex_max) = 43; + MY(type) = "spark"; + MY(velocityjitter) = '150.0 150.0 150.0'; + MY(velocitymultiplier) = 0.200000; +} +// fire +SUB(laser_gauntletmuzzleflash) { + MY(airfriction) = 12; + MY(alpha_min) = 256; + MY(alpha_max) = 512; + MY(alpha_fade) = 6280; + MY(color_min) = "0xff4200"; + MY(color_max) = "0xff0000"; + MY(count) = 6; + MY(originjitter) = '2.0 2.0 2.0'; + MY(sizeincrease) = -100; + MY(size_min) = 7; + MY(size_max) = 9; + MY(stretchfactor) = 2; + MY(tex_min) = 8; + MY(tex_max) = 15; + MY(type) = "spark"; + MY(velocityjitter) = '100.0 100.0 100.0'; + MY(velocitymultiplier) = 0.200000; +} + +// torch flame, spawn it as fast as you can 20 times per second or more, supports direction but not required +DEF(torchflame); +// fast fire +SUB(torchflame) { + MY(airfriction) = 1.200000; + MY(alpha_min) = 50; + MY(alpha_max) = 256; + MY(alpha_fade) = 250; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 3; + MY(gravity) = -0.060000; + MY(sizeincrease) = 20; + MY(size_min) = 5; + MY(size_max) = 5; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "smoke"; + MY(velocityjitter) = '40.0 40.0 11.0'; + MY(velocitymultiplier) = 30; +} +// slow fire +SUB(torchflame) { + MY(airfriction) = 1.200000; + MY(alpha_min) = 50; + MY(alpha_max) = 256; + MY(alpha_fade) = 200; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 2.500000; + MY(gravity) = -0.060000; + MY(sizeincrease) = 20; + MY(size_min) = 5; + MY(size_max) = 5; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "smoke"; + MY(velocityjitter) = '40.0 40.0 40.0'; + MY(velocitymultiplier) = 20; +} +// very slow and small fire +SUB(torchflame) { + MY(airfriction) = 0.300000; + MY(alpha_min) = 50; + MY(alpha_max) = 256; + MY(alpha_fade) = 200; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 1.500000; + MY(gravity) = -0.060000; + MY(sizeincrease) = 10; + MY(size_min) = 5; + MY(size_max) = 5; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "smoke"; + MY(velocityjitter) = '30.0 30.0 30.0'; + MY(velocitymultiplier) = 10; +} +// decreasing fire +SUB(torchflame) { + MY(airfriction) = 0.300000; + MY(alpha_min) = 50; + MY(alpha_max) = 256; + MY(alpha_fade) = 200; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 2; + MY(gravity) = -0.060000; + MY(sizeincrease) = -10; + MY(size_min) = 20; + MY(size_max) = 30; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "smoke"; + MY(velocityjitter) = '10.0 10.0 10.0'; + MY(velocitymultiplier) = 15; +} +// smoke +SUB(torchflame) { + MY(airfriction) = 1; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 90; + MY(color_min) = "0x000000"; + MY(color_max) = "0x111111"; + MY(count) = 0.500000; + MY(originjitter) = '10.0 10.0 10.0'; + MY(sizeincrease) = 7; + MY(size_min) = 5; + MY(size_max) = 15; + MY(tex_max) = 8; + MY(type) = "alphastatic"; + MY(velocitymultiplier) = 20; + MY(velocityoffset) = '0.0 0.0 10.0'; +} + +#include "effectinfo_gentle_happy.inc" + +DEF(electro_lightning); +SUB(electro_lightning) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(countabsolute) = 1; + MY(lightcolor) = '3.1 4.4 10.0'; + MY(lightradiusfade) = 500; + MY(lightradius) = 50; + MY(originjitter) = '2.0 2.0 2.0'; + MY(size_min) = 16; + MY(size_max) = 16; + MY(tex_min) = 59; + MY(tex_max) = 59; + MY(type) = "decal"; +} +SUB(electro_lightning) { + MY(alpha_min) = 100; + MY(alpha_max) = 206; + MY(alpha_fade) = 1724; + MY(color_min) = "0x2030FF"; + MY(color_max) = "0x80C0FF"; + MY(count) = 300; + MY(originjitter) = '1.5 1.5 1.5'; + MY(sizeincrease) = 10; + MY(size_min) = 6; + MY(size_max) = 6; + MY(tex_min) = 65; + MY(tex_max) = 65; + MY(type) = "spark"; + MY(velocityjitter) = '6.0 6.0 6.0'; + MY(velocitymultiplier) = 2000; +} +SUB(electro_lightning) { + MY(airfriction) = 2; + MY(alpha_min) = 110; + MY(alpha_max) = 170; + MY(alpha_fade) = 1500; + MY(color_min) = "0xDDFDFF"; + MY(color_max) = "0xFDFDFF"; + MY(count) = 30; + MY(originjitter) = '1.0 1.0 1.0'; + MY(size_min) = 2; + MY(size_max) = 5; + MY(stretchfactor) = 1.500000; + MY(tex_min) = 8; + MY(tex_max) = 15; + MY(type) = "spark"; + MY(velocityjitter) = '150.0 150.0 150.0'; + MY(velocitymultiplier) = 0.500000; +} +SUB(electro_lightning) { + MY(airfriction) = 8; + MY(alpha_min) = 110; + MY(alpha_max) = 170; + MY(alpha_fade) = 1500; + MY(color_min) = "0xFDFDFF"; + MY(color_max) = "0xF9FDFF"; + MY(count) = 50; + MY(gravity) = 1.300000; + MY(originjitter) = '1.0 1.0 1.0'; + MY(size_min) = 2; + MY(size_max) = 3; + MY(stretchfactor) = 0.100000; + MY(tex_min) = 41; + MY(tex_max) = 41; + MY(type) = "spark"; + MY(velocityjitter) = '350.0 350.0 350.0'; + MY(velocitymultiplier) = 2.500000; +} + +DEF(gauntlet_lightning); +SUB(gauntlet_lightning) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 1024; + MY(color_min) = "0x280000"; + MY(color_max) = "0x280000"; + MY(count) = 300; + MY(originjitter) = '1.5 1.5 1.5'; + MY(sizeincrease) = 15; + MY(size_min) = 3; + MY(size_max) = 3; + MY(tex_min) = 65; + MY(tex_max) = 65; + MY(type) = "spark"; + MY(velocityjitter) = '6.0 6.0 6.0'; + MY(velocitymultiplier) = 2000; +} +SUB(gauntlet_lightning) { + MY(airfriction) = 2; + MY(alpha_min) = 110; + MY(alpha_max) = 228; + MY(alpha_fade) = 1024; + MY(color_min) = "0xDD0000"; + MY(color_max) = "0xFD0000"; + MY(count) = 30; + MY(originjitter) = '1.0 1.0 1.0'; + MY(size_min) = 2; + MY(size_max) = 5; + MY(stretchfactor) = 1.500000; + MY(tex_min) = 8; + MY(tex_max) = 15; + MY(type) = "spark"; + MY(velocityjitter) = '150.0 150.0 150.0'; + MY(velocitymultiplier) = 0.500000; +} +SUB(gauntlet_lightning) { + MY(airfriction) = 8; + MY(alpha_min) = 110; + MY(alpha_max) = 228; + MY(alpha_fade) = 600; + MY(color_min) = "0xFD0000"; + MY(color_max) = "0xF90000"; + MY(count) = 50; + MY(gravity) = 1.300000; + MY(originjitter) = '1.0 1.0 1.0'; + MY(size_min) = 2; + MY(size_max) = 3; + MY(stretchfactor) = 0.100000; + MY(tex_min) = 41; + MY(tex_max) = 41; + MY(type) = "spark"; + MY(velocityjitter) = '350.0 350.0 350.0'; + MY(velocitymultiplier) = 2.500000; +} + +DEF(crylink_joinexplode); +// decal +SUB(crylink_joinexplode) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(countabsolute) = 1; + MY(originjitter) = '12.0 12.0 12.0'; + MY(size_min) = 24; + MY(size_max) = 24; + MY(tex_min) = 47; + MY(tex_max) = 47; + MY(type) = "decal"; +} +// purple flare effect +SUB(crylink_joinexplode) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 512; + MY(color_min) = "0x504060"; + MY(color_max) = "0x504060"; + MY(countabsolute) = 1; + MY(size_min) = 24; + MY(size_max) = 24; + MY(tex_min) = 39; + MY(tex_max) = 39; + MY(type) = "static"; +} +// purple sparks +SUB(crylink_joinexplode) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 1024; + MY(bounce) = 2; + MY(color_min) = "0xA040C0"; + MY(color_max) = "0xA040C0"; + MY(count) = 40; + MY(size_min) = 6; + MY(size_max) = 6; + MY(tex_min) = 41; + MY(tex_max) = 41; + MY(type) = "spark"; + MY(velocityjitter) = '512.0 512.0 512.0'; +} +// purple splash +SUB(crylink_joinexplode) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 512; + MY(color_min) = "0xE070FF"; + MY(color_max) = "0xE070FF"; + MY(count) = 1.500000; + MY(size_min) = 16; + MY(size_max) = 16; + MY(type) = "static"; + MY(velocityjitter) = '32.0 32.0 32.0'; +} +// purple splash +SUB(crylink_joinexplode) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 1024; + MY(color_min) = "0xE070FF"; + MY(color_max) = "0xE070FF"; + MY(count) = 3; + MY(size_min) = 16; + MY(size_max) = 16; + MY(type) = "static"; + MY(velocityjitter) = '256.0 256.0 256.0'; +} + +// sparks for keepaway ball touch +DEF(kaball_sparks); +SUB(kaball_sparks) { + MY(airfriction) = 3; + MY(alpha_max) = 256; + MY(alpha_fade) = 556; + MY(bounce) = 1.500000; + MY(color_min) = "0xa9cacf"; + MY(color_max) = "0x0054ff"; + MY(count) = 35; + MY(gravity) = 1; + MY(originjitter) = '1.0 1.0 1.0'; + MY(size_min) = 1; + MY(size_max) = 3; + MY(tex_min) = 40; + MY(tex_max) = 40; + MY(type) = "spark"; + MY(velocityjitter) = '300.0 300.0 300.0'; + MY(velocitymultiplier) = 0.500000; +} + +// weak rifle bullet trail (somewhat like a tracer) +DEF(tr_rifle_weak); +SUB(tr_rifle_weak) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 2560; + MY(color_min) = "0x800000"; + MY(color_max) = "0xFF8020"; + MY(size_min) = 1.500000; + MY(size_max) = 1.500000; + MY(stretchfactor) = 1; + MY(trailspacing) = 128; + MY(type) = "spark"; + MY(velocitymultiplier) = 0.700000; +} +SUB(tr_rifle_weak) { + MY(airfriction) = -4; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 256; + MY(color_min) = "0x202020"; + MY(color_max) = "0x404040"; + MY(notunderwater) = true; + MY(sizeincrease) = 0.400000; + MY(size_min) = 4; + MY(size_max) = 4; + MY(tex_max) = 8; + MY(trailspacing) = 48; + MY(type) = "smoke"; + MY(velocityjitter) = '4.0 4.0 4.0'; +} +SUB(tr_rifle_weak) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 128; + MY(bounce) = 1.500000; + MY(color_min) = "0x404040"; + MY(color_max) = "0x808080"; + MY(gravity) = -0.125000; + MY(liquidfriction) = 4; + MY(size_min) = 2; + MY(size_max) = 2; + MY(tex_min) = 62; + MY(tex_max) = 62; + MY(trailspacing) = 192; + MY(type) = "bubble"; + MY(underwater) = true; + MY(velocityjitter) = '16.0 16.0 16.0'; +} + +// red smoke emiter +DEF(red_smoke); +SUB(red_smoke) { + MY(airfriction) = -1; + MY(alpha_min) = 32; + MY(alpha_max) = 64; + MY(alpha_fade) = 32; + MY(color_min) = "0xff8866"; + MY(color_max) = "0x331100"; + MY(count) = 2; + MY(gravity) = -0.007000; + MY(startangle_max) = 360; + MY(spin_min) = -30; + MY(spin_max) = 30; + MY(size_min) = 60; + MY(size_max) = 120; + MY(tex_max) = 8; + MY(type) = "smoke"; + MY(velocitymultiplier) = 5; +} + +// pipe smoke emiter +DEF(pipe_smoke); +SUB(pipe_smoke) { + MY(airfriction) = -1; + MY(alpha_min) = 32; + MY(alpha_max) = 64; + MY(alpha_fade) = 48; + MY(color_min) = "0x999999"; + MY(color_max) = "0x555555"; + MY(count) = 2; + MY(gravity) = -0.015000; + MY(startangle_max) = 360; + MY(spin_min) = -180; + MY(spin_max) = 180; + MY(sizeincrease) = 35; + MY(size_min) = 5; + MY(size_max) = 10; + MY(tex_max) = 8; + MY(type) = "smoke"; + MY(velocityjitter) = '0.0 0.0 5.0'; + MY(velocitymultiplier) = 15; +} + +// seeker missile trail +DEF(TR_SEEKER); +SUB(TR_SEEKER) { + MY(alpha_min) = 200; + MY(alpha_max) = 300; + MY(alpha_fade) = 200; + MY(bounce) = 1; + MY(color_min) = "0x000000"; + MY(color_max) = "0x666666"; + MY(lightcolor) = '6.0 3.0 1.0'; + MY(lightradius) = 100; + MY(notunderwater) = true; + MY(originjitter) = '2.0 2.0 2.0'; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = -30; + MY(spin_max) = 30; + MY(sizeincrease) = 11; + MY(size_min) = 2; + MY(size_max) = 2; + MY(tex_max) = 8; + MY(trailspacing) = 10; + MY(type) = "smoke"; + MY(velocityjitter) = '3.0 3.0 3.0'; + MY(velocitymultiplier) = -0.020000; +} +// fire +SUB(TR_SEEKER) { + MY(airfriction) = 8; + MY(alpha_min) = 100; + MY(alpha_max) = 144; + MY(alpha_fade) = 588; + MY(color_min) = "0xffdf72"; + MY(color_max) = "0x811200"; + MY(sizeincrease) = -30; + MY(size_min) = 5; + MY(size_max) = 5; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(trailspacing) = 4; + MY(type) = "static"; + MY(velocityjitter) = '32.0 32.0 32.0'; + MY(velocitymultiplier) = -1.500000; +} +// bubbles +SUB(TR_SEEKER) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 256; + MY(bounce) = 1.500000; + MY(gravity) = -0.125000; + MY(liquidfriction) = 4; + MY(size_min) = 1; + MY(size_max) = 2; + MY(tex_min) = 62; + MY(tex_max) = 62; + MY(trailspacing) = 16; + MY(type) = "bubble"; + MY(underwater) = true; + MY(velocityjitter) = '16.0 16.0 16.0'; + MY(velocitymultiplier) = -0.310000; +} +// sparks +SUB(TR_SEEKER) { + MY(airfriction) = 5; + MY(alpha_min) = 444; + MY(alpha_max) = 512; + MY(alpha_fade) = 1866; + MY(bounce) = 1; + MY(color_min) = "0xFFFDD9"; + MY(color_max) = "0xFFFDD9"; + MY(notunderwater) = true; + MY(originjitter) = '1.0 1.0 1.0'; + MY(size_min) = 0.500000; + MY(size_max) = 0.500000; + MY(stretchfactor) = 0.300000; + MY(tex_min) = 40; + MY(tex_max) = 40; + MY(trailspacing) = 20; + MY(type) = "spark"; + MY(velocityjitter) = '100.0 100.0 100.0'; + MY(velocitymultiplier) = -0.310000; +} + +#include "effectinfo_vehicles.inc" + +// generic explosion size:big (biggest explosion ever) +DEF(explosion_big); +// decal +SUB(explosion_big) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(countabsolute) = 1; + MY(lightcolor) = '8.0 4.0 0.0'; + MY(lightradiusfade) = 1750; + MY(lightradius) = 600; + MY(originjitter) = '23.0 23.0 23.0'; + MY(size_min) = 172; + MY(size_max) = 172; + MY(tex_min) = 8; + MY(tex_max) = 16; + MY(type) = "decal"; +} +// shockwave +SUB(explosion_big) { + MY(alpha_min) = 56; + MY(alpha_max) = 56; + MY(alpha_fade) = 330; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(countabsolute) = 1; + MY(sizeincrease) = 4400; + MY(size_min) = 72; + MY(size_max) = 72; + MY(tex_min) = 33; + MY(tex_max) = 33; + MY(type) = "static"; +} +// fire effect +SUB(explosion_big) { + MY(airfriction) = 8; + MY(alpha_min) = 200; + MY(alpha_max) = 256; + MY(alpha_fade) = 712; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 64; + MY(liquidfriction) = 8; + MY(notunderwater) = true; + MY(originjitter) = '80.0 80.0 80.0'; + MY(sizeincrease) = 45; + MY(size_min) = 133; + MY(size_max) = 144; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "static"; + MY(velocityjitter) = '2512.0 2512.0 2512.0'; +} +// fire rays +SUB(explosion_big) { + MY(airfriction) = -5; + MY(alpha_min) = 200; + MY(alpha_max) = 256; + MY(alpha_fade) = 800; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 64; + MY(liquidfriction) = 8; + MY(notunderwater) = true; + MY(originjitter) = '40.0 40.0 40.0'; + MY(sizeincrease) = 45; + MY(size_min) = 133; + MY(size_max) = 144; + MY(stretchfactor) = 10; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "spark"; + MY(velocityjitter) = '512.0 512.0 512.0'; +} +// smoke +SUB(explosion_big) { + MY(airfriction) = 8; + MY(alpha_min) = 300; + MY(alpha_max) = 650; + MY(alpha_fade) = 456; + MY(color_min) = "0x4F4B46"; + MY(color_max) = "0x000000"; + MY(count) = 32; + MY(notunderwater) = true; + MY(sizeincrease) = 244; + MY(size_min) = 50; + MY(size_max) = 100; + MY(tex_max) = 8; + MY(type) = "alphastatic"; + MY(velocityjitter) = '3444.0 3444.0 3444.0'; +} +// bouncing sparks +SUB(explosion_big) { + MY(airfriction) = 1; + MY(alpha_min) = 644; + MY(alpha_max) = 956; + MY(alpha_fade) = 1284; + MY(color_min) = "0xffa35b"; + MY(color_max) = "0xfff2be"; + MY(count) = 34; + MY(gravity) = 1; + MY(liquidfriction) = 0.800000; + MY(notunderwater) = true; + MY(originjitter) = '160.0 160.0 160.0'; + MY(size_min) = 3; + MY(size_max) = 4; + MY(stretchfactor) = 0.700000; + MY(tex_min) = 40; + MY(tex_max) = 40; + MY(type) = "spark"; + MY(velocityjitter) = '924.0 924.0 924.0'; + MY(velocityoffset) = '0.0 0.0 370.0'; +} +// debris +SUB(explosion_big) { + MY(airfriction) = 0.500000; + MY(alpha_min) = 444; + MY(alpha_max) = 1356; + MY(alpha_fade) = 1184; + MY(color_min) = "0xFFFFFF"; + MY(color_max) = "0xcac5b4"; + MY(count) = 16; + MY(gravity) = 2.300000; + MY(notunderwater) = true; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = -1000; + MY(spin_max) = 1000; + MY(sizeincrease) = -5; + MY(size_min) = 10; + MY(size_max) = 16; + MY(tex_min) = 66; + MY(tex_max) = 68; + MY(type) = "alphastatic"; + MY(velocityjitter) = '1800.0 1800.0 1800.0'; + MY(velocityoffset) = '0.0 0.0 970.0'; +} +// underwater bubbles +SUB(explosion_big) { + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 64; + MY(bounce) = 1.500000; + MY(color_min) = "0x404040"; + MY(color_max) = "0x808080"; + MY(count) = 32; + MY(gravity) = -0.125000; + MY(liquidfriction) = 0.250000; + MY(originjitter) = '160.0 160.0 160.0'; + MY(size_min) = 3; + MY(size_max) = 3; + MY(tex_min) = 62; + MY(tex_max) = 62; + MY(type) = "bubble"; + MY(underwater) = true; + MY(velocityjitter) = '444.0 444.0 444.0'; +} +// underwatershockwave +SUB(explosion_big) { + MY(alpha_min) = 40; + MY(alpha_max) = 40; + MY(alpha_fade) = 300; + MY(countabsolute) = 1; + MY(sizeincrease) = 2900; + MY(size_min) = 30; + MY(size_max) = 30; + MY(tex_min) = 33; + MY(tex_max) = 33; + MY(type) = "smoke"; + MY(underwater) = true; + MY(velocitymultiplier) = 0.300000; +} + +// generic explosion size:medium (it leaves rising smoke for a longer time) +DEF(explosion_medium); +// shockwave +SUB(explosion_medium) { + MY(alpha_min) = 56; + MY(alpha_max) = 56; + MY(alpha_fade) = 330; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(countabsolute) = 1; + MY(sizeincrease) = 2400; + MY(size_min) = 72; + MY(size_max) = 72; + MY(tex_min) = 33; + MY(tex_max) = 33; + MY(type) = "static"; +} +// fire effect +SUB(explosion_medium) { + MY(airfriction) = 8; + MY(alpha_min) = 200; + MY(alpha_max) = 256; + MY(alpha_fade) = 712; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 32; + MY(liquidfriction) = 8; + MY(notunderwater) = true; + MY(originjitter) = '30.0 30.0 30.0'; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = -500; + MY(spin_max) = 500; + MY(sizeincrease) = 45; + MY(size_min) = 133; + MY(size_max) = 144; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "static"; + MY(velocityjitter) = '1512.0 1512.0 1512.0'; +} +// fire effect 2 +SUB(explosion_medium) { + MY(airfriction) = 8; + MY(alpha_min) = 200; + MY(alpha_max) = 256; + MY(alpha_fade) = 612; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 32; + MY(gravity) = -2; + MY(liquidfriction) = 8; + MY(notunderwater) = true; + MY(originjitter) = '30.0 30.0 30.0'; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = -150; + MY(spin_max) = 150; + MY(sizeincrease) = 40; + MY(size_min) = 73; + MY(size_max) = 94; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "static"; + MY(velocityjitter) = '1512.0 1512.0 1512.0'; +} +// fire rays +SUB(explosion_medium) { + MY(airfriction) = -3; + MY(alpha_min) = 200; + MY(alpha_max) = 256; + MY(alpha_fade) = 800; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 14; + MY(liquidfriction) = 8; + MY(notunderwater) = true; + MY(originjitter) = '40.0 40.0 40.0'; + MY(sizeincrease) = 40; + MY(size_min) = 43; + MY(size_max) = 74; + MY(stretchfactor) = 8; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "spark"; + MY(velocityjitter) = '512.0 512.0 512.0'; +} +// smoke +SUB(explosion_medium) { + MY(airfriction) = 3; + MY(alpha_min) = 300; + MY(alpha_max) = 650; + MY(alpha_fade) = 756; + MY(color_min) = "0x4F4B46"; + MY(color_max) = "0x000000"; + MY(count) = 5; + MY(notunderwater) = true; + MY(originjitter) = '100.0 100.0 100.0'; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = -20; + MY(spin_max) = 20; + MY(sizeincrease) = -30; + MY(size_min) = 250; + MY(size_max) = 300; + MY(tex_max) = 8; + MY(type) = "alphastatic"; + MY(velocityjitter) = '200.0 200.0 200.0'; +} +// smoke 2 +SUB(explosion_medium) { + MY(airfriction) = 3; + MY(alpha_min) = 300; + MY(alpha_max) = 650; + MY(alpha_fade) = 256; + MY(color_min) = "0x4F4B46"; + MY(color_max) = "0x000000"; + MY(count) = 10; + MY(gravity) = -0.300000; + MY(notunderwater) = true; + MY(originjitter) = '100.0 100.0 100.0'; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = -20; + MY(spin_max) = 20; + MY(sizeincrease) = 50; + MY(size_min) = 50; + MY(size_max) = 100; + MY(tex_max) = 8; + MY(type) = "alphastatic"; + MY(velocityjitter) = '500.0 500.0 500.0'; + MY(velocityoffset) = '0.0 0.0 200.0'; +} +// smoke rays +SUB(explosion_medium) { + MY(alpha_min) = 140; + MY(alpha_max) = 255; + MY(alpha_fade) = 350; + MY(color_min) = "0x4F4B46"; + MY(color_max) = "0x000000"; + MY(count) = 13; + MY(notunderwater) = true; + MY(originjitter) = '40.0 40.0 40.0'; + MY(sizeincrease) = 100; + MY(size_min) = 150; + MY(size_max) = 200; + MY(stretchfactor) = 50; + MY(tex_max) = 8; + MY(type) = "spark"; + MY(velocityjitter) = '250.0 250.0 250.0'; +} +// bouncing sparks +SUB(explosion_medium) { + MY(airfriction) = 1; + MY(alpha_min) = 644; + MY(alpha_max) = 956; + MY(alpha_fade) = 984; + MY(color_min) = "0xffa35b"; + MY(color_max) = "0xfff2be"; + MY(count) = 14; + MY(gravity) = 1; + MY(liquidfriction) = 0.800000; + MY(notunderwater) = true; + MY(originjitter) = '100.0 100.0 100.0'; + MY(size_min) = 2; + MY(size_max) = 3; + MY(stretchfactor) = 0.700000; + MY(tex_min) = 40; + MY(tex_max) = 40; + MY(type) = "spark"; + MY(velocityjitter) = '624.0 624.0 624.0'; + MY(velocityoffset) = '0.0 0.0 370.0'; +} +// underwater bubbles +SUB(explosion_medium) { + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 64; + MY(bounce) = 1.500000; + MY(color_min) = "0x404040"; + MY(color_max) = "0x808080"; + MY(count) = 32; + MY(gravity) = -0.125000; + MY(liquidfriction) = 0.250000; + MY(originjitter) = '160.0 160.0 160.0'; + MY(size_min) = 3; + MY(size_max) = 3; + MY(tex_min) = 62; + MY(tex_max) = 62; + MY(type) = "bubble"; + MY(underwater) = true; + MY(velocityjitter) = '444.0 444.0 444.0'; +} +// underwatershockwave +SUB(explosion_medium) { + MY(alpha_min) = 40; + MY(alpha_max) = 40; + MY(alpha_fade) = 300; + MY(countabsolute) = 1; + MY(sizeincrease) = 2900; + MY(size_min) = 30; + MY(size_max) = 30; + MY(tex_min) = 33; + MY(tex_max) = 33; + MY(type) = "smoke"; + MY(underwater) = true; + MY(velocitymultiplier) = 0.300000; +} + +// generic explosion size:small (its fire only, made to support other explosions) +DEF(explosion_small); +// shockwave +SUB(explosion_small) { + MY(alpha_min) = 56; + MY(alpha_max) = 56; + MY(alpha_fade) = 330; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(countabsolute) = 1; + MY(sizeincrease) = 2400; + MY(size_min) = 22; + MY(size_max) = 22; + MY(tex_min) = 33; + MY(tex_max) = 33; + MY(type) = "static"; +} +// fire effect +SUB(explosion_small) { + MY(airfriction) = 5; + MY(alpha_min) = 200; + MY(alpha_max) = 256; + MY(alpha_fade) = 1212; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 16; + MY(liquidfriction) = 8; + MY(notunderwater) = true; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = -500; + MY(spin_max) = 500; + MY(sizeincrease) = 45; + MY(size_min) = 1; + MY(size_max) = 44; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "static"; + MY(velocityjitter) = '512.0 512.0 512.0'; +} +// fire effect 2 +SUB(explosion_small) { + MY(airfriction) = 8; + MY(alpha_min) = 200; + MY(alpha_max) = 256; + MY(alpha_fade) = 812; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 16; + MY(liquidfriction) = 8; + MY(notunderwater) = true; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = -150; + MY(spin_max) = 150; + MY(sizeincrease) = 40; + MY(size_min) = 73; + MY(size_max) = 94; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "static"; + MY(velocityjitter) = '912.0 912.0 912.0'; +} +// fire rays +SUB(explosion_small) { + MY(airfriction) = -3; + MY(alpha_min) = 200; + MY(alpha_max) = 256; + MY(alpha_fade) = 1300; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 14; + MY(liquidfriction) = 8; + MY(notunderwater) = true; + MY(originjitter) = '40.0 40.0 40.0'; + MY(sizeincrease) = 30; + MY(size_min) = 13; + MY(size_max) = 54; + MY(stretchfactor) = 8; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "spark"; + MY(velocityjitter) = '512.0 512.0 512.0'; +} +// underwater bubbles +SUB(explosion_small) { + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 64; + MY(bounce) = 1.500000; + MY(color_min) = "0x404040"; + MY(color_max) = "0x808080"; + MY(count) = 32; + MY(gravity) = -0.125000; + MY(liquidfriction) = 0.250000; + MY(originjitter) = '160.0 160.0 160.0'; + MY(size_min) = 1; + MY(size_max) = 3; + MY(tex_min) = 62; + MY(tex_max) = 62; + MY(type) = "bubble"; + MY(underwater) = true; + MY(velocityjitter) = '144.0 144.0 144.0'; +} +// underwatershockwave +SUB(explosion_small) { + MY(alpha_min) = 40; + MY(alpha_max) = 40; + MY(alpha_fade) = 300; + MY(countabsolute) = 1; + MY(sizeincrease) = 1200; + MY(size_min) = 30; + MY(size_max) = 30; + MY(tex_min) = 33; + MY(tex_max) = 33; + MY(type) = "smoke"; + MY(underwater) = true; +} + +// big smoke ( for spamming on damaged stuff ) +DEF(smoke_big); +SUB(smoke_big) { + MY(airfriction) = 4; + MY(alpha_min) = 200; + MY(alpha_max) = 750; + MY(alpha_fade) = 200; + MY(color_min) = "0x4F4B46"; + MY(color_max) = "0x000000"; + MY(count) = 3; + MY(gravity) = -0.500000; + MY(notunderwater) = true; + MY(originjitter) = '55.0 55.0 55.0'; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = -20; + MY(spin_max) = 20; + MY(sizeincrease) = 15; + MY(size_min) = 30; + MY(size_max) = 60; + MY(tex_max) = 8; + MY(type) = "alphastatic"; + MY(velocityjitter) = '140.0 140.0 200.0'; + MY(velocityoffset) = '0.0 0.0 200.0'; +} + +// small smoke ( more precise than big one, for spamming on damaged parts like raptors spinner ) +DEF(smoke_small); +SUB(smoke_small) { + MY(airfriction) = 4; + MY(alpha_min) = 200; + MY(alpha_max) = 750; + MY(alpha_fade) = 200; + MY(color_min) = "0x4F4B46"; + MY(color_max) = "0x000000"; + MY(count) = 3; + MY(gravity) = -0.500000; + MY(notunderwater) = true; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = -20; + MY(spin_max) = 20; + MY(sizeincrease) = -10; + MY(size_min) = 60; + MY(size_max) = 100; + MY(tex_max) = 8; + MY(type) = "alphastatic"; + MY(velocityjitter) = '40.0 40.0 400.0'; + MY(velocityoffset) = '0.0 0.0 200.0'; +} + +// metal impact effect +DEF(impact_metal); +SUB(impact_metal) { + MY(alpha_min) = 25; + MY(alpha_max) = 64; + MY(alpha_fade) = 50; + MY(color_min) = "0x000000"; + MY(color_max) = "0x886666"; + MY(count) = 1; + MY(gravity) = -0.010000; + MY(originjitter) = '20.0 20.0 5.0'; + MY(sizeincrease) = 10; + MY(size_min) = 3; + MY(size_max) = 6; + MY(tex_max) = 8; + MY(type) = "alphastatic"; +} +// sparks +SUB(impact_metal) { + MY(airfriction) = 2; + MY(alpha_min) = 255; + MY(alpha_max) = 255; + MY(alpha_fade) = 112; + MY(bounce) = 1.800000; + MY(color_min) = "0xFFCC22"; + MY(color_max) = "0xFF4422"; + MY(count) = 2; + MY(gravity) = 1; + MY(size_min) = 2; + MY(size_max) = 2; + MY(stretchfactor) = 0.500000; + MY(tex_min) = 41; + MY(tex_max) = 41; + MY(type) = "spark"; + MY(velocityjitter) = '200.0 200.0 300.0'; + MY(velocitymultiplier) = 2; +} + +// stone impact effect +DEF(impact_stone); +SUB(impact_stone) { + MY(alpha_min) = 50; + MY(alpha_max) = 128; + MY(alpha_fade) = 75; + MY(color_min) = "0x000000"; + MY(color_max) = "0xcc9966"; + MY(count) = 1; + MY(gravity) = -0.010000; + MY(originjitter) = '20.0 20.0 5.0'; + MY(sizeincrease) = 15; + MY(size_min) = 3; + MY(size_max) = 6; + MY(tex_max) = 8; + MY(type) = "alphastatic"; +} +// debris +SUB(impact_stone) { + MY(airfriction) = 0.500000; + MY(alpha_min) = 450; + MY(alpha_max) = 750; + MY(alpha_fade) = 300; + MY(bounce) = 1.200000; + MY(color_min) = "0x000000"; + MY(color_max) = "0x886644"; + MY(count) = 1; + MY(gravity) = 1.300000; + MY(notunderwater) = true; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = -1000; + MY(spin_max) = 1000; + MY(size_min) = 1; + MY(size_max) = 2; + MY(tex_min) = 66; + MY(tex_max) = 68; + MY(type) = "alphastatic"; + MY(velocityjitter) = '124.0 124.0 324.0'; +} + +// wood impact effect +DEF(impact_wood); +SUB(impact_wood) { + MY(alpha_min) = 50; + MY(alpha_max) = 128; + MY(alpha_fade) = 75; + MY(color_min) = "0x000000"; + MY(color_max) = "0xcc9966"; + MY(count) = 1; + MY(gravity) = -0.010000; + MY(originjitter) = '20.0 20.0 5.0'; + MY(sizeincrease) = 10; + MY(size_min) = 3; + MY(size_max) = 6; + MY(tex_max) = 8; + MY(type) = "alphastatic"; +} +// sparks +SUB(impact_wood) { + MY(airfriction) = 2; + MY(alpha_min) = 255; + MY(alpha_max) = 255; + MY(alpha_fade) = 75; + MY(bounce) = 1.500000; + MY(color_min) = "0x221100"; + MY(color_max) = "0x221100"; + MY(count) = 2; + MY(gravity) = 1; + MY(size_min) = 1; + MY(size_max) = 8; + MY(tex_min) = 41; + MY(tex_max) = 41; + MY(type) = "spark"; + MY(velocityjitter) = '180.0 180.0 260.0'; + MY(velocitymultiplier) = 2; +} + +// flesh impact effect +DEF(impact_flesh); +SUB(impact_flesh) { + MY(alpha_min) = 100; + MY(alpha_max) = 256; + MY(alpha_fade) = 400; + MY(color_min) = "0x000000"; + MY(color_max) = "0x420000"; + MY(count) = 0.500000; + MY(originjitter) = '11.0 11.0 11.0'; + MY(size_min) = 8; + MY(size_max) = 12; + MY(tex_max) = 8; + MY(type) = "alphastatic"; +} +// blood splash +SUB(impact_flesh) { + MY(airfriction) = 1; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 64; + MY(bounce) = -1; + MY(color_min) = "0xA8FFFF"; + MY(color_max) = "0xA8FFFFF"; + MY(count) = 0.300000; + MY(liquidfriction) = 4; + MY(size_min) = 2; + MY(size_max) = 6; + MY(staincolor_min) = "0x808080"; + MY(staincolor_max) = "0x808080"; + MY(staintex_min) = 16; + MY(staintex_max) = 24; + MY(tex_min) = 24; + MY(tex_max) = 32; + MY(type) = "blood"; + MY(velocityjitter) = '96.0 96.0 96.0'; + MY(velocitymultiplier) = 5; +} + +// hagar trail +DEF(tr_hagar); +// smoke +SUB(tr_hagar) { + MY(alpha_min) = 300; + MY(alpha_max) = 400; + MY(alpha_fade) = 780; + MY(bounce) = 1; + MY(color_min) = "0x101010"; + MY(color_max) = "0x000000"; + MY(originjitter) = '1.0 1.0 1.0'; + MY(sizeincrease) = 10; + MY(size_min) = 3; + MY(size_max) = 2; + MY(tex_max) = 8; + MY(trailspacing) = 4; + MY(type) = "smoke"; + MY(velocityjitter) = '1.0 1.0 1.0'; + MY(velocitymultiplier) = -0.020000; +} +// fire +SUB(tr_hagar) { + MY(airfriction) = 8; + MY(alpha_min) = 100; + MY(alpha_max) = 144; + MY(alpha_fade) = 988; + MY(color_min) = "0xffdf72"; + MY(color_max) = "0x811200"; + MY(notunderwater) = true; + MY(sizeincrease) = -15; + MY(size_min) = 5; + MY(size_max) = 2; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(trailspacing) = 4; + MY(type) = "static"; + MY(velocityjitter) = '32.0 32.0 32.0'; + MY(velocitymultiplier) = -1; +} +// bubbles +SUB(tr_hagar) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 256; + MY(bounce) = 1.500000; + MY(color_min) = "0x404040"; + MY(color_max) = "0x808080"; + MY(gravity) = -0.125000; + MY(liquidfriction) = 4; + MY(size_min) = 1; + MY(size_max) = 1; + MY(tex_min) = 62; + MY(tex_max) = 62; + MY(trailspacing) = 16; + MY(type) = "bubble"; + MY(underwater) = true; + MY(velocityjitter) = '16.0 16.0 16.0'; +} + +// laser damage effect +DEF(damage_laser); +SUB(damage_laser) { + MY(airfriction) = -0.350000; + MY(alpha_min) = 128; + MY(alpha_max) = 16; + MY(alpha_fade) = 128; + MY(color_min) = "0x880000"; + MY(color_max) = "0xff4400"; + MY(count) = 3; + MY(notunderwater) = true; + MY(originjitter) = '2.0 2.0 2.0'; + MY(startangle_max) = 180; + MY(spin_min) = -30; + MY(spin_max) = 30; + MY(sizeincrease) = 8; + MY(size_min) = 2; + MY(size_max) = 4; + MY(tex_max) = 8; + MY(type) = "smoke"; + MY(velocityjitter) = '0.4 0.4 0.6'; +} + +// shotgun damage effect, normal blood +DEF(damage_shotgun); +SUB(damage_shotgun) { + MY(airfriction) = 1; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 64; + MY(bounce) = -1; + MY(color_min) = "0xA8FFFF"; + MY(color_max) = "0xA8FFFFF"; + MY(count) = 0.600000; + MY(liquidfriction) = 4; + MY(size_min) = 2; + MY(size_max) = 4; + MY(staincolor_min) = "0x808080"; + MY(staincolor_max) = "0x808080"; + MY(staintex_min) = 16; + MY(staintex_max) = 24; + MY(tex_min) = 24; + MY(tex_max) = 32; + MY(type) = "blood"; + MY(velocityjitter) = '64.0 64.0 64.0'; + MY(velocitymultiplier) = 5; +} +// blood mist +SUB(damage_shotgun) { + MY(alpha_min) = 100; + MY(alpha_max) = 256; + MY(alpha_fade) = 400; + MY(color_min) = "0x000000"; + MY(color_max) = "0x420000"; + MY(count) = 1; + MY(originjitter) = '1.0 1.0 1.0'; + MY(size_min) = 8; + MY(size_max) = 16; + MY(tex_max) = 8; + MY(type) = "alphastatic"; +} + +// shotgun damage effect, alien blood +DEF(damage_shotgun_alien); +SUB(damage_shotgun_alien) { + MY(airfriction) = 1; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 64; + MY(bounce) = -1; + MY(color_min) = "0xDC9BCD"; + MY(color_max) = "0xDC9BCD"; + MY(count) = 0.600000; + MY(liquidfriction) = 4; + MY(size_min) = 2; + MY(size_max) = 4; + MY(staincolor_min) = "0x808080"; + MY(staincolor_max) = "0x808080"; + MY(staintex_min) = 16; + MY(staintex_max) = 24; + MY(tex_min) = 24; + MY(tex_max) = 32; + MY(type) = "blood"; + MY(velocityjitter) = '64.0 64.0 64.0'; + MY(velocitymultiplier) = 5; +} +// blood mist +SUB(damage_shotgun_alien) { + MY(alpha_min) = 100; + MY(alpha_max) = 256; + MY(alpha_fade) = 400; + MY(color_min) = "0x000000"; + MY(color_max) = "0x204010"; + MY(count) = 1; + MY(originjitter) = '1.0 1.0 1.0'; + MY(size_min) = 8; + MY(size_max) = 16; + MY(tex_max) = 8; + MY(type) = "alphastatic"; +} + +// shotgun damage effect, robot blood +DEF(damage_shotgun_robot); +SUB(damage_shotgun_robot) { + MY(airfriction) = 1; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 64; + MY(bounce) = -1; + MY(color_min) = "0xC0D890"; + MY(color_max) = "0xC0D890"; + MY(count) = 0.600000; + MY(liquidfriction) = 4; + MY(size_min) = 2; + MY(size_max) = 4; + MY(staincolor_min) = "0x808080"; + MY(staincolor_max) = "0x808080"; + MY(staintex_min) = 16; + MY(staintex_max) = 24; + MY(tex_min) = 24; + MY(tex_max) = 32; + MY(type) = "blood"; + MY(velocityjitter) = '64.0 64.0 64.0'; + MY(velocitymultiplier) = 5; +} +// blood mist +SUB(damage_shotgun_robot) { + MY(alpha_min) = 100; + MY(alpha_max) = 256; + MY(alpha_fade) = 400; + MY(color_min) = "0x000000"; + MY(color_max) = "0x301860"; + MY(count) = 1; + MY(originjitter) = '1.0 1.0 1.0'; + MY(size_min) = 8; + MY(size_max) = 16; + MY(tex_max) = 8; + MY(type) = "alphastatic"; +} + +// machinegun damage effect, normal blood +DEF(damage_uzi); +SUB(damage_uzi) { + MY(airfriction) = 1; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 64; + MY(bounce) = -1; + MY(color_min) = "0xA8FFFF"; + MY(color_max) = "0xA8FFFFF"; + MY(count) = 0.300000; + MY(liquidfriction) = 4; + MY(size_min) = 2; + MY(size_max) = 4; + MY(staincolor_min) = "0x808080"; + MY(staincolor_max) = "0x808080"; + MY(staintex_min) = 16; + MY(staintex_max) = 24; + MY(tex_min) = 24; + MY(tex_max) = 32; + MY(type) = "blood"; + MY(velocityjitter) = '32.0 32.0 32.0'; + MY(velocitymultiplier) = 5; +} +// blood mist +SUB(damage_uzi) { + MY(alpha_min) = 100; + MY(alpha_max) = 256; + MY(alpha_fade) = 400; + MY(color_min) = "0x000000"; + MY(color_max) = "0x420000"; + MY(count) = 1; + MY(size_min) = 6; + MY(size_max) = 12; + MY(tex_max) = 8; + MY(type) = "alphastatic"; +} + +// machinegun damage effect, alien blood +DEF(damage_uzi_alien); +SUB(damage_uzi_alien) { + MY(airfriction) = 1; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 64; + MY(bounce) = -1; + MY(color_min) = "0xDC9BCD"; + MY(color_max) = "0xDC9BCD"; + MY(count) = 0.300000; + MY(liquidfriction) = 4; + MY(size_min) = 2; + MY(size_max) = 4; + MY(staincolor_min) = "0x808080"; + MY(staincolor_max) = "0x808080"; + MY(staintex_min) = 16; + MY(staintex_max) = 24; + MY(tex_min) = 24; + MY(tex_max) = 32; + MY(type) = "blood"; + MY(velocityjitter) = '32.0 32.0 32.0'; + MY(velocitymultiplier) = 5; +} +// blood mist +SUB(damage_uzi_alien) { + MY(alpha_min) = 100; + MY(alpha_max) = 256; + MY(alpha_fade) = 400; + MY(color_min) = "0x000000"; + MY(color_max) = "0x204010"; + MY(count) = 1; + MY(size_min) = 6; + MY(size_max) = 12; + MY(tex_max) = 8; + MY(type) = "alphastatic"; +} + +// machinegun damage effect, robot blood +DEF(damage_uzi_robot); +SUB(damage_uzi_robot) { + MY(airfriction) = 1; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 64; + MY(bounce) = -1; + MY(color_min) = "0xC0D890"; + MY(color_max) = "0xC0D890"; + MY(count) = 0.300000; + MY(liquidfriction) = 4; + MY(size_min) = 2; + MY(size_max) = 4; + MY(staincolor_min) = "0x808080"; + MY(staincolor_max) = "0x808080"; + MY(staintex_min) = 16; + MY(staintex_max) = 24; + MY(tex_min) = 24; + MY(tex_max) = 32; + MY(type) = "blood"; + MY(velocityjitter) = '32.0 32.0 32.0'; + MY(velocitymultiplier) = 5; +} +// blood mist +SUB(damage_uzi_robot) { + MY(alpha_min) = 100; + MY(alpha_max) = 256; + MY(alpha_fade) = 400; + MY(color_min) = "0x000000"; + MY(color_max) = "0x301860"; + MY(count) = 1; + MY(size_min) = 6; + MY(size_max) = 12; + MY(tex_max) = 8; + MY(type) = "alphastatic"; +} + +// minelayer damage effect +DEF(damage_minelayer); +SUB(damage_minelayer) { + MY(alpha_min) = 512; + MY(alpha_max) = 64; + MY(alpha_fade) = 1024; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 3; + MY(gravity) = -0.500000; + MY(notunderwater) = true; + MY(originjitter) = '2.0 2.0 2.0'; + MY(sizeincrease) = -15; + MY(size_min) = 4; + MY(size_max) = 8; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "smoke"; + MY(velocityjitter) = '22.0 22.0 50.0'; +} +// smoke +SUB(damage_minelayer) { + MY(alpha_min) = 128; + MY(alpha_max) = 32; + MY(alpha_fade) = 128; + MY(color_min) = "0x000000"; + MY(color_max) = "0x111111"; + MY(count) = 2; + MY(gravity) = -0.300000; + MY(notunderwater) = true; + MY(originjitter) = '4.0 4.0 4.0'; + MY(sizeincrease) = 5; + MY(size_min) = 4; + MY(size_max) = 8; + MY(tex_max) = 8; + MY(type) = "alphastatic"; + MY(velocityjitter) = '11.0 11.0 50.0'; +} + +// mortar damage effect +DEF(damage_grenadelauncher); +SUB(damage_grenadelauncher) { + MY(alpha_min) = 512; + MY(alpha_max) = 64; + MY(alpha_fade) = 1024; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 3; + MY(gravity) = -0.500000; + MY(notunderwater) = true; + MY(originjitter) = '2.0 2.0 2.0'; + MY(sizeincrease) = -15; + MY(size_min) = 4; + MY(size_max) = 8; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "smoke"; + MY(velocityjitter) = '22.0 22.0 50.0'; +} +// smoke +SUB(damage_grenadelauncher) { + MY(alpha_min) = 128; + MY(alpha_max) = 32; + MY(alpha_fade) = 128; + MY(color_min) = "0x000000"; + MY(color_max) = "0x111111"; + MY(count) = 2; + MY(gravity) = -0.300000; + MY(notunderwater) = true; + MY(originjitter) = '4.0 4.0 4.0'; + MY(sizeincrease) = 5; + MY(size_min) = 4; + MY(size_max) = 8; + MY(tex_max) = 8; + MY(type) = "alphastatic"; + MY(velocityjitter) = '11.0 11.0 50.0'; +} + +// electro damage effect +DEF(damage_electro); +SUB(damage_electro) { + MY(airfriction) = -0.500000; + MY(alpha_min) = 48; + MY(alpha_max) = 8; + MY(alpha_fade) = 48; + MY(color_min) = "0x66ffff"; + MY(color_max) = "0x2288ff"; + MY(count) = 2; + MY(gravity) = -0.000100; + MY(liquidfriction) = 0.800000; + MY(notunderwater) = true; + MY(originjitter) = '3.0 3.0 3.0'; + MY(startangle_min) = 180; + MY(startangle_max) = 360; + MY(spin_min) = -30; + MY(spin_max) = 30; + MY(sizeincrease) = -14; + MY(size_min) = 6; + MY(size_max) = 10; + MY(tex_min) = 47; + MY(tex_max) = 47; + MY(type) = "static"; + MY(velocityjitter) = '8.0 8.0 16.0'; +} +// plasma smoke +SUB(damage_electro) { + MY(airfriction) = -0.350000; + MY(alpha_min) = 64; + MY(alpha_max) = 16; + MY(alpha_fade) = 64; + MY(color_min) = "0x2244ff"; + MY(color_max) = "0x002266"; + MY(count) = 4; + MY(notunderwater) = true; + MY(originjitter) = '4.0 4.0 4.0'; + MY(startangle_max) = 180; + MY(spin_min) = -30; + MY(spin_max) = 30; + MY(sizeincrease) = 10; + MY(size_min) = 4; + MY(size_max) = 8; + MY(tex_max) = 8; + MY(type) = "smoke"; + MY(velocityjitter) = '0.4 0.4 0.6'; +} +// bouncing sparks +SUB(damage_electro) { + MY(airfriction) = 1; + MY(alpha_min) = 768; + MY(alpha_max) = 64; + MY(alpha_fade) = 256; + MY(bounce) = 1.500000; + MY(color_min) = "0x003090"; + MY(color_max) = "0x00CCFF"; + MY(count) = 0.500000; + MY(gravity) = 0.200000; + MY(liquidfriction) = 0.800000; + MY(size_min) = 1; + MY(size_max) = 1; + MY(tex_min) = 66; + MY(tex_max) = 68; + MY(type) = "spark"; + MY(velocityjitter) = '32.0 32.0 32.0'; +} + +// crylink damage effect +DEF(damage_crylink); +SUB(damage_crylink) { + MY(airfriction) = -0.500000; + MY(alpha_min) = 48; + MY(alpha_max) = 16; + MY(alpha_fade) = 48; + MY(color_min) = "0xff44ff"; + MY(color_max) = "0x9966ff"; + MY(count) = 2; + MY(gravity) = -0.000100; + MY(liquidfriction) = 0.800000; + MY(notunderwater) = true; + MY(originjitter) = '3.0 3.0 3.0'; + MY(startangle_min) = 180; + MY(startangle_max) = 360; + MY(spin_min) = -30; + MY(spin_max) = 30; + MY(sizeincrease) = -8; + MY(size_min) = 0.500000; + MY(size_max) = 1; + MY(tex_min) = 38; + MY(tex_max) = 38; + MY(type) = "static"; + MY(velocityjitter) = '10.0 10.0 20.0'; +} +// plasma smoke +SUB(damage_crylink) { + MY(airfriction) = -0.350000; + MY(alpha_min) = 64; + MY(alpha_max) = 16; + MY(alpha_fade) = 64; + MY(color_min) = "0x8844ff"; + MY(color_max) = "0x662244"; + MY(count) = 4; + MY(gravity) = 0.001000; + MY(notunderwater) = true; + MY(originjitter) = '4.0 4.0 4.0'; + MY(startangle_max) = 180; + MY(spin_min) = -30; + MY(spin_max) = 30; + MY(sizeincrease) = 6; + MY(size_min) = 5; + MY(size_max) = 10; + MY(tex_max) = 8; + MY(type) = "smoke"; + MY(velocityjitter) = '0.4 0.4 0.6'; +} +// floating sparks +SUB(damage_crylink) { + MY(airfriction) = 0.200000; + MY(alpha_min) = 192; + MY(alpha_max) = 192; + MY(alpha_fade) = 128; + MY(color_min) = "0x903090"; + MY(color_max) = "0xFFD0FF"; + MY(count) = 0.300000; + MY(liquidfriction) = 0.800000; + MY(sizeincrease) = -5; + MY(size_min) = 0.500000; + MY(size_max) = 0.500000; + MY(type) = "spark"; + MY(velocityjitter) = '12.0 12.0 12.0'; +} + +// hlac damage effect +DEF(damage_hlac); +SUB(damage_hlac) { + MY(airfriction) = -0.350000; + MY(alpha_min) = 128; + MY(alpha_max) = 16; + MY(alpha_fade) = 128; + MY(color_min) = "0x880000"; + MY(color_max) = "0xff4400"; + MY(count) = 3; + MY(notunderwater) = true; + MY(originjitter) = '4.0 4.0 4.0'; + MY(startangle_max) = 180; + MY(spin_min) = -30; + MY(spin_max) = 30; + MY(sizeincrease) = 10; + MY(size_min) = 2; + MY(size_max) = 4; + MY(tex_max) = 8; + MY(type) = "smoke"; + MY(velocityjitter) = '0.4 0.4 0.6'; +} + +// vortex damage effect +DEF(damage_nex); +SUB(damage_nex) { + MY(airfriction) = -0.500000; + MY(alpha_min) = 64; + MY(alpha_max) = 8; + MY(alpha_fade) = 64; + MY(color_min) = "0xffffff"; + MY(color_max) = "0x88ffff"; + MY(count) = 1; + MY(gravity) = -0.000100; + MY(liquidfriction) = 0.600000; + MY(originjitter) = '4.0 4.0 4.0'; + MY(startangle_min) = 180; + MY(startangle_max) = 360; + MY(spin_min) = -30; + MY(spin_max) = 30; + MY(sizeincrease) = -14; + MY(size_min) = 5; + MY(size_max) = 10; + MY(tex_min) = 47; + MY(tex_max) = 47; + MY(type) = "static"; + MY(velocityjitter) = '8.0 8.0 16.0'; +} +// plasma smoke +SUB(damage_nex) { + MY(airfriction) = -0.350000; + MY(alpha_min) = 64; + MY(alpha_max) = 16; + MY(alpha_fade) = 64; + MY(color_min) = "0x6688ff"; + MY(color_max) = "0x226688"; + MY(count) = 2; + MY(originjitter) = '2.0 2.0 2.0'; + MY(startangle_max) = 180; + MY(spin_min) = -30; + MY(spin_max) = 30; + MY(sizeincrease) = 8; + MY(size_min) = 4; + MY(size_max) = 8; + MY(tex_max) = 8; + MY(type) = "smoke"; + MY(velocityjitter) = '0.5 0.5 0.8'; +} +// bouncing sparks +SUB(damage_nex) { + MY(airfriction) = 2; + MY(alpha_min) = 255; + MY(alpha_max) = 255; + MY(alpha_fade) = 112; + MY(bounce) = 1.600000; + MY(color_min) = "0xD9FDFF"; + MY(color_max) = "0xD9FDFF"; + MY(count) = 0.200000; + MY(gravity) = 1; + MY(size_min) = 1; + MY(size_max) = 1; + MY(stretchfactor) = 0.700000; + MY(tex_min) = 41; + MY(tex_max) = 41; + MY(type) = "spark"; + MY(velocityjitter) = '100.0 100.0 300.0'; + MY(velocitymultiplier) = 3; +} + +// vaporizer damage effect +DEF(damage_minstanex); +SUB(damage_minstanex) { + MY(airfriction) = -0.500000; + MY(alpha_min) = 64; + MY(alpha_max) = 8; + MY(alpha_fade) = 64; + MY(color_min) = "0xffffff"; + MY(color_max) = "0x88ffff"; + MY(count) = 2; + MY(gravity) = -0.000100; + MY(liquidfriction) = 0.600000; + MY(originjitter) = '4.0 4.0 4.0'; + MY(startangle_min) = 180; + MY(startangle_max) = 360; + MY(spin_min) = -30; + MY(spin_max) = 30; + MY(sizeincrease) = -14; + MY(size_min) = 5; + MY(size_max) = 10; + MY(tex_min) = 47; + MY(tex_max) = 47; + MY(type) = "static"; + MY(velocityjitter) = '8.0 8.0 16.0'; +} +// plasma smoke +SUB(damage_minstanex) { + MY(airfriction) = -0.350000; + MY(alpha_min) = 64; + MY(alpha_max) = 16; + MY(alpha_fade) = 64; + MY(color_min) = "0x6688ff"; + MY(color_max) = "0x226688"; + MY(count) = 4; + MY(originjitter) = '2.0 2.0 2.0'; + MY(startangle_max) = 180; + MY(spin_min) = -30; + MY(spin_max) = 30; + MY(sizeincrease) = 8; + MY(size_min) = 4; + MY(size_max) = 8; + MY(tex_max) = 8; + MY(type) = "smoke"; + MY(velocityjitter) = '0.5 0.5 0.8'; +} +// bouncing sparks +SUB(damage_minstanex) { + MY(airfriction) = 2; + MY(alpha_min) = 255; + MY(alpha_max) = 255; + MY(alpha_fade) = 112; + MY(bounce) = 1.600000; + MY(color_min) = "0xD9FDFF"; + MY(color_max) = "0xD9FDFF"; + MY(count) = 0.200000; + MY(gravity) = 1; + MY(size_min) = 1; + MY(size_max) = 1; + MY(stretchfactor) = 0.700000; + MY(tex_min) = 41; + MY(tex_max) = 41; + MY(type) = "spark"; + MY(velocityjitter) = '100.0 100.0 300.0'; + MY(velocitymultiplier) = 3; +} + +// rifle damage effect, normal blood +DEF(damage_rifle); +SUB(damage_rifle) { + MY(airfriction) = 1; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 64; + MY(bounce) = -1; + MY(color_min) = "0xA8FFFF"; + MY(color_max) = "0xA8FFFFF"; + MY(count) = 0.300000; + MY(liquidfriction) = 4; + MY(size_min) = 2; + MY(size_max) = 4; + MY(staincolor_min) = "0x808080"; + MY(staincolor_max) = "0x808080"; + MY(staintex_min) = 16; + MY(staintex_max) = 24; + MY(tex_min) = 24; + MY(tex_max) = 32; + MY(type) = "blood"; + MY(velocityjitter) = '32.0 32.0 32.0'; + MY(velocitymultiplier) = 5; +} +// blood mist +SUB(damage_rifle) { + MY(alpha_min) = 100; + MY(alpha_max) = 256; + MY(alpha_fade) = 400; + MY(color_min) = "0x000000"; + MY(color_max) = "0x420000"; + MY(count) = 1; + MY(size_min) = 6; + MY(size_max) = 12; + MY(tex_max) = 8; + MY(type) = "alphastatic"; +} + +// rifle damage effect, alien blood +DEF(damage_rifle_alien); +SUB(damage_rifle_alien) { + MY(airfriction) = 1; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 64; + MY(bounce) = -1; + MY(color_min) = "0xDC9BCD"; + MY(color_max) = "0xDC9BCD"; + MY(count) = 0.300000; + MY(liquidfriction) = 4; + MY(size_min) = 2; + MY(size_max) = 4; + MY(staincolor_min) = "0x808080"; + MY(staincolor_max) = "0x808080"; + MY(staintex_min) = 16; + MY(staintex_max) = 24; + MY(tex_min) = 24; + MY(tex_max) = 32; + MY(type) = "blood"; + MY(velocityjitter) = '32.0 32.0 32.0'; + MY(velocitymultiplier) = 5; +} +// blood mist +SUB(damage_rifle_alien) { + MY(alpha_min) = 100; + MY(alpha_max) = 256; + MY(alpha_fade) = 400; + MY(color_min) = "0x000000"; + MY(color_max) = "0x204010"; + MY(count) = 1; + MY(size_min) = 6; + MY(size_max) = 12; + MY(tex_max) = 8; + MY(type) = "alphastatic"; +} + +// rifle damage effect, robot blood +DEF(damage_rifle_robot); +SUB(damage_rifle_robot) { + MY(airfriction) = 1; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 64; + MY(bounce) = -1; + MY(color_min) = "0xC0D890"; + MY(color_max) = "0xC0D890"; + MY(count) = 0.300000; + MY(liquidfriction) = 4; + MY(size_min) = 2; + MY(size_max) = 4; + MY(staincolor_min) = "0x808080"; + MY(staincolor_max) = "0x808080"; + MY(staintex_min) = 16; + MY(staintex_max) = 24; + MY(tex_min) = 24; + MY(tex_max) = 32; + MY(type) = "blood"; + MY(velocityjitter) = '32.0 32.0 32.0'; + MY(velocitymultiplier) = 5; +} +// blood mist +SUB(damage_rifle_robot) { + MY(alpha_min) = 100; + MY(alpha_max) = 256; + MY(alpha_fade) = 400; + MY(color_min) = "0x000000"; + MY(color_max) = "0x301860"; + MY(count) = 1; + MY(size_min) = 6; + MY(size_max) = 12; + MY(tex_max) = 8; + MY(type) = "alphastatic"; +} + +// seeker damage effect +DEF(damage_seeker); +SUB(damage_seeker) { + MY(alpha_min) = 512; + MY(alpha_max) = 32; + MY(alpha_fade) = 1024; + MY(color_min) = "0x8f0c00"; + MY(color_max) = "0xff2200"; + MY(count) = 3; + MY(gravity) = -0.300000; + MY(notunderwater) = true; + MY(originjitter) = '2.0 2.0 2.0'; + MY(sizeincrease) = -10; + MY(size_min) = 4; + MY(size_max) = 8; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "smoke"; + MY(velocityjitter) = '22.0 22.0 50.0'; +} +// smoke +SUB(damage_seeker) { + MY(alpha_min) = 128; + MY(alpha_max) = 32; + MY(alpha_fade) = 128; + MY(color_min) = "0x000000"; + MY(color_max) = "0x111111"; + MY(count) = 2; + MY(gravity) = -0.300000; + MY(notunderwater) = true; + MY(originjitter) = '4.0 4.0 4.0'; + MY(sizeincrease) = 10; + MY(size_min) = 2; + MY(size_max) = 4; + MY(tex_max) = 8; + MY(type) = "alphastatic"; + MY(velocityjitter) = '11.0 11.0 50.0'; +} + +// hagar damage effect +DEF(damage_hagar); +SUB(damage_hagar) { + MY(alpha_min) = 512; + MY(alpha_max) = 32; + MY(alpha_fade) = 1024; + MY(color_min) = "0x8f0c00"; + MY(color_max) = "0xff3a00"; + MY(count) = 3; + MY(gravity) = -0.300000; + MY(notunderwater) = true; + MY(originjitter) = '2.0 2.0 2.0'; + MY(sizeincrease) = -10; + MY(size_min) = 4; + MY(size_max) = 8; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "smoke"; + MY(velocityjitter) = '22.0 22.0 50.0'; +} +// smoke +SUB(damage_hagar) { + MY(alpha_min) = 128; + MY(alpha_max) = 32; + MY(alpha_fade) = 128; + MY(color_min) = "0x000000"; + MY(color_max) = "0x111111"; + MY(count) = 2; + MY(gravity) = -0.300000; + MY(notunderwater) = true; + MY(originjitter) = '4.0 4.0 4.0'; + MY(sizeincrease) = 10; + MY(size_min) = 2; + MY(size_max) = 4; + MY(tex_max) = 8; + MY(type) = "alphastatic"; + MY(velocityjitter) = '11.0 11.0 50.0'; +} + +// fireball damage effect +DEF(damage_fireball); +SUB(damage_fireball) { + MY(alpha_min) = 256; + MY(alpha_max) = 16; + MY(alpha_fade) = 512; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 4; + MY(gravity) = -0.500000; + MY(notunderwater) = true; + MY(originjitter) = '8.0 8.0 8.0'; + MY(sizeincrease) = -10; + MY(size_min) = 5; + MY(size_max) = 10; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "smoke"; + MY(velocityjitter) = '22.0 22.0 50.0'; +} +// smoke +SUB(damage_fireball) { + MY(alpha_min) = 128; + MY(alpha_max) = 32; + MY(alpha_fade) = 128; + MY(color_min) = "0x000000"; + MY(color_max) = "0x111111"; + MY(count) = 4; + MY(gravity) = -0.300000; + MY(notunderwater) = true; + MY(originjitter) = '6.0 6.0 6.0'; + MY(sizeincrease) = 10; + MY(size_min) = 4; + MY(size_max) = 8; + MY(tex_max) = 8; + MY(type) = "alphastatic"; + MY(velocityjitter) = '11.0 11.0 50.0'; +} + +// rocketlauncher damage effect +DEF(damage_rocketlauncher); +SUB(damage_rocketlauncher) { + MY(alpha_min) = 512; + MY(alpha_max) = 64; + MY(alpha_fade) = 1024; + MY(color_min) = "0x8f0c00"; + MY(color_max) = "0xff2a00"; + MY(count) = 3; + MY(gravity) = -0.700000; + MY(notunderwater) = true; + MY(originjitter) = '4.0 4.0 4.0'; + MY(sizeincrease) = -10; + MY(size_min) = 5; + MY(size_max) = 10; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "smoke"; + MY(velocityjitter) = '22.0 22.0 30.0'; +} +// smoke +SUB(damage_rocketlauncher) { + MY(alpha_min) = 128; + MY(alpha_max) = 32; + MY(alpha_fade) = 128; + MY(color_min) = "0x000000"; + MY(color_max) = "0x111111"; + MY(count) = 3; + MY(gravity) = -0.300000; + MY(notunderwater) = true; + MY(originjitter) = '4.0 4.0 4.0'; + MY(sizeincrease) = 10; + MY(size_min) = 4; + MY(size_max) = 8; + MY(tex_max) = 8; + MY(type) = "alphastatic"; + MY(velocityjitter) = '11.0 11.0 50.0'; +} + +// fireflies +DEF(fireflies); +SUB(fireflies) { + MY(airfriction) = 5; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 70; + MY(bounce) = -1; + MY(color_min) = "0xff9600"; + MY(color_max) = "0xffefb8"; + MY(count) = 1; + MY(originjitter) = '32.0 32.0 32.0'; + MY(originoffset) = '8.0 8.0 8.0'; + MY(sizeincrease) = -0.300000; + MY(size_min) = 2; + MY(size_max) = 3; + MY(tex_min) = 38; + MY(tex_max) = 38; + MY(time_min) = 1; + MY(time_max) = 2; + MY(type) = "static"; + MY(velocityjitter) = '64.0 64.0 64.0'; + MY(velocityoffset) = '2.0 2.0 2.0'; +} + +DEF(healray_muzzleflash); +SUB(healray_muzzleflash) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 512; + MY(color_min) = "0x283880"; + MY(color_max) = "0x283880"; + MY(countabsolute) = 1; + MY(lightcolor) = '1.5 3.0 6.0'; + MY(lightradiusfade) = 2000; + MY(lightradius) = 200; + MY(originjitter) = '1.5 1.5 1.5'; + MY(sizeincrease) = -10; + MY(size_min) = 20; + MY(size_max) = 20; + MY(tex_min) = 65; + MY(tex_max) = 65; + MY(type) = "smoke"; + MY(velocityjitter) = '6.0 6.0 6.0'; + MY(velocitymultiplier) = 0.010000; +} +SUB(healray_muzzleflash) { + MY(airfriction) = 5; + MY(alpha_min) = 50; + MY(alpha_max) = 150; + MY(alpha_fade) = 1924; + MY(color_min) = "0xD9FDFF"; + MY(color_max) = "0x00f0ff"; + MY(count) = 22; + MY(originjitter) = '1.0 1.0 1.0'; + MY(sizeincrease) = 3; + MY(size_min) = 1; + MY(size_max) = 15; + MY(stretchfactor) = 3.900000; + MY(tex_min) = 71; + MY(tex_max) = 73; + MY(type) = "spark"; + MY(velocityjitter) = '150.0 150.0 150.0'; + MY(velocitymultiplier) = 0.400000; +} +SUB(healray_muzzleflash) { + MY(alpha_min) = 110; + MY(alpha_max) = 228; + MY(alpha_fade) = 4024; + MY(color_min) = "0xD9FDFF"; + MY(color_max) = "0x00f0ff"; + MY(count) = 4; + MY(originjitter) = '1.0 1.0 1.0'; + MY(size_min) = 1; + MY(size_max) = 1; + MY(stretchfactor) = 0.200000; + MY(tex_min) = 70; + MY(tex_max) = 70; + MY(type) = "spark"; + MY(velocityjitter) = '650.0 650.0 650.0'; + MY(velocitymultiplier) = 1.100000; +} + +DEF(healray_impact); +SUB(healray_impact) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(color_min) = "0xd800ff"; + MY(color_max) = "0xd800ff"; + MY(countabsolute) = 1; + MY(lightcolor) = '0.0 4.4 0.0'; + MY(lightradiusfade) = 450; + MY(lightradius) = 125; + MY(originjitter) = '17.0 17.0 17.0'; + MY(size_min) = 32; + MY(size_max) = 32; + MY(tex_min) = 59; + MY(tex_max) = 59; + MY(type) = "decal"; +} +// shockwave +SUB(healray_impact) { + MY(alpha_min) = 40; + MY(alpha_max) = 40; + MY(alpha_fade) = 350; + MY(color_min) = "0x00ff00"; + MY(color_max) = "0x84c52f"; + MY(countabsolute) = 1; + MY(sizeincrease) = 1400; + MY(size_min) = 32; + MY(size_max) = 32; + MY(tex_min) = 33; + MY(tex_max) = 33; + MY(type) = "smoke"; + MY(velocitymultiplier) = 44; +} +// cloud of bouncing sparks +SUB(healray_impact) { + MY(airfriction) = 6; + MY(alpha_min) = 156; + MY(alpha_max) = 300; + MY(alpha_fade) = 1024; + MY(color_min) = "0x00ff00"; + MY(color_max) = "0x84c52f"; + MY(count) = 30; + MY(gravity) = 2; + MY(originjitter) = '1.0 1.0 1.0'; + MY(size_min) = 1; + MY(size_max) = 2; + MY(tex_min) = 70; + MY(tex_max) = 70; + MY(type) = "spark"; + MY(velocityjitter) = '1112.0 1112.0 1112.0'; +} +// inner cloud of smoke +SUB(healray_impact) { + MY(airfriction) = 3; + MY(alpha_min) = 200; + MY(alpha_max) = 456; + MY(alpha_fade) = 512; + MY(color_min) = "0x00ff00"; + MY(color_max) = "0x84c52f"; + MY(count) = 15; + MY(gravity) = -2; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = -90; + MY(spin_max) = 90; + MY(size_min) = 2; + MY(size_max) = 3; + MY(tex_min) = 40; + MY(tex_max) = 40; + MY(type) = "smoke"; + MY(velocityjitter) = '120.0 120.0 420.0'; +} + +DEF(bigplasma_muzzleflash); +SUB(bigplasma_muzzleflash) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 812; + MY(color_min) = "0x283880"; + MY(color_max) = "0x283880"; + MY(countabsolute) = 1; + MY(lightcolor) = '1.5 3.0 6.0'; + MY(lightradiusfade) = 2000; + MY(lightradius) = 200; + MY(originjitter) = '1.5 1.5 1.5'; + MY(sizeincrease) = -10; + MY(size_min) = 50; + MY(size_max) = 50; + MY(tex_min) = 65; + MY(tex_max) = 65; + MY(type) = "smoke"; + MY(velocityjitter) = '6.0 6.0 6.0'; + MY(velocitymultiplier) = 0.010000; +} +SUB(bigplasma_muzzleflash) { + MY(alpha_min) = 56; + MY(alpha_max) = 56; + MY(alpha_fade) = 1112; + MY(color_min) = "0x00f0ff"; + MY(color_max) = "0x00f0ff"; + MY(countabsolute) = 1; + MY(sizeincrease) = 300; + MY(size_min) = 20; + MY(size_max) = 20; + MY(tex_min) = 74; + MY(tex_max) = 74; + MY(type) = "smoke"; +} +SUB(bigplasma_muzzleflash) { + MY(airfriction) = 5; + MY(alpha_min) = 50; + MY(alpha_max) = 150; + MY(alpha_fade) = 1924; + MY(color_min) = "0xD9FDFF"; + MY(color_max) = "0x00f0ff"; + MY(count) = 14; + MY(originjitter) = '1.0 1.0 1.0'; + MY(sizeincrease) = 135; + MY(size_min) = 5; + MY(size_max) = 10; + MY(stretchfactor) = 1.900000; + MY(tex_min) = 51; + MY(tex_max) = 55; + MY(type) = "spark"; + MY(velocityjitter) = '350.0 350.0 350.0'; + MY(velocitymultiplier) = 0.400000; +} +SUB(bigplasma_muzzleflash) { + MY(alpha_min) = 110; + MY(alpha_max) = 228; + MY(alpha_fade) = 4024; + MY(color_min) = "0xD9FDFF"; + MY(color_max) = "0x00f0ff"; + MY(count) = 4; + MY(originjitter) = '1.0 1.0 1.0'; + MY(size_min) = 20; + MY(size_max) = 20; + MY(stretchfactor) = 0.200000; + MY(tex_min) = 70; + MY(tex_max) = 70; + MY(type) = "spark"; + MY(velocityjitter) = '650.0 650.0 650.0'; + MY(velocitymultiplier) = 1.100000; +} + +DEF(bigplasma_impact); +SUB(bigplasma_impact) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(countabsolute) = 1; + MY(lightcolor) = '3.1 4.4 10.0'; + MY(lightradiusfade) = 450; + MY(lightradius) = 125; + MY(originjitter) = '17.0 17.0 17.0'; + MY(size_min) = 32; + MY(size_max) = 32; + MY(tex_min) = 59; + MY(tex_max) = 59; + MY(type) = "decal"; +} +// shockwave +SUB(bigplasma_impact) { + MY(alpha_min) = 40; + MY(alpha_max) = 40; + MY(alpha_fade) = 350; + MY(color_min) = "0x80C0FF"; + MY(color_max) = "0x80C0FF"; + MY(countabsolute) = 1; + MY(sizeincrease) = 1400; + MY(size_min) = 32; + MY(size_max) = 32; + MY(tex_min) = 33; + MY(tex_max) = 33; + MY(type) = "smoke"; + MY(velocitymultiplier) = 44; +} +// cloud of bouncing sparks +SUB(bigplasma_impact) { + MY(airfriction) = 6; + MY(alpha_min) = 156; + MY(alpha_max) = 300; + MY(alpha_fade) = 1024; + MY(color_min) = "0x629dff"; + MY(color_max) = "0x0018ff"; + MY(count) = 30; + MY(gravity) = 2; + MY(originjitter) = '1.0 1.0 1.0'; + MY(size_min) = 1; + MY(size_max) = 2; + MY(tex_min) = 70; + MY(tex_max) = 70; + MY(type) = "spark"; + MY(velocityjitter) = '1512.0 1512.0 1512.0'; +} +// inner cloud of smoke +SUB(bigplasma_impact) { + MY(airfriction) = 30; + MY(alpha_min) = 200; + MY(alpha_max) = 456; + MY(alpha_fade) = 1512; + MY(color_min) = "0x629dff"; + MY(color_max) = "0x0018ff"; + MY(count) = 15; + MY(originjitter) = '20.0 20.0 20.0'; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = -9; + MY(spin_max) = 9; + MY(sizeincrease) = 555; + MY(size_min) = 20; + MY(size_max) = 24; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "smoke"; + MY(velocityjitter) = '320.0 320.0 320.0'; +} +// smoke +SUB(bigplasma_impact) { + MY(airfriction) = 0.040000; + MY(alpha_min) = 128; + MY(alpha_max) = 328; + MY(alpha_fade) = 390; + MY(blend) = "alpha"; + MY(color_min) = "0x222222"; + MY(color_max) = "0x000000"; + MY(count) = 16; + MY(gravity) = 0.400000; + MY(originjitter) = '80.0 80.0 10.0'; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = 2; + MY(spin_max) = -2; + MY(sizeincrease) = 30; + MY(size_min) = 60; + MY(size_max) = 30; + MY(tex_max) = 7; + MY(type) = "smoke"; + MY(velocityjitter) = '100.0 100.0 200.0'; + MY(velocityoffset) = '0.0 0.0 180.0'; +} +// smoke in the middle +SUB(bigplasma_impact) { + MY(airfriction) = 0.040000; + MY(alpha_min) = 128; + MY(alpha_max) = 328; + MY(alpha_fade) = 310; + MY(color_min) = "0x222222"; + MY(color_max) = "0x000000"; + MY(count) = 10; + MY(gravity) = -0.200000; + MY(originjitter) = '80.0 80.0 80.0'; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = 20; + MY(spin_max) = -20; + MY(sizeincrease) = -10; + MY(size_min) = 60; + MY(size_max) = 70; + MY(tex_max) = 7; + MY(type) = "alphastatic"; + MY(velocityjitter) = '10.0 10.0 10.0'; +} + +#include "effectinfo_ctf.inc" + +// spawn_point -- team idle spawn point effect +#define spawn_point(name, color) \ + DEF(spawn_point_##name); \ + SUB(spawn_point_##name) { \ + MY(airfriction) = 0.200000; \ + MY(alpha_min) = 64; \ + MY(alpha_max) = 128; \ + MY(alpha_fade) = 128; \ + MY(color_min) = color; \ + MY(color_max) = color; \ + MY(count) = 37.500000; \ + MY(gravity) = -0.100000; \ + MY(liquidfriction) = 0.800000; \ + MY(originjitter) = '16.0 16.0 64.0'; \ + MY(size_min) = 1; \ + MY(size_max) = 2; \ + MY(type) = "static"; \ + MY(velocityjitter) = '32.0 32.0 0.0'; \ + } + +spawn_point(red, "0xFF0F0F") +spawn_point(blue, "0x0F0FFF") +spawn_point(yellow, "0xFFFF0F") +spawn_point(pink, "0xFF0FFF") +spawn_point(neutral, "0xFFFFFF") +#undef spawn_point + +// spawn_event -- team spawning effect +#define spawn_event(name, color) \ + DEF(spawn_event_##name); \ + SUB(spawn_event_##name) { \ + MY(airfriction) = 2; \ + MY(alpha_max) = 256; \ + MY(alpha_fade) = 256; \ + MY(bounce) = 1; \ + MY(color_min) = color; \ + MY(color_max) = color; \ + MY(count) = 100; \ + MY(originjitter) = '1.0 1.0 1.0'; \ + MY(size_min) = 1; \ + MY(size_max) = 1; \ + MY(stretchfactor) = 0.600000; \ + MY(tex_min) = 64; \ + MY(tex_max) = 64; \ + MY(type) = "spark"; \ + MY(velocityjitter) = '500.0 500.0 500.0'; \ + MY(velocitymultiplier) = 0.100000; \ + } \ + SUB(spawn_event_##name) { \ + MY(alpha_min) = 190; \ + MY(alpha_max) = 190; \ + MY(alpha_fade) = 180; \ + MY(color_min) = color; \ + MY(color_max) = color; \ + MY(countabsolute) = 1; \ + MY(sizeincrease) = -80; \ + MY(size_min) = 100; \ + MY(size_max) = 100; \ + MY(tex_min) = 65; \ + MY(tex_max) = 65; \ + MY(type) = "smoke"; \ + } \ + /**/ + +spawn_event(red, "0xFF0F0F") +spawn_event(blue, "0x0F0FFF") +spawn_event(yellow, "0xFFFF0F") +spawn_event(pink, "0xFF0FFF") +spawn_event(neutral, "0xFFFFFF") +#undef spawn_event + +#include "effectinfo_nades.inc" + +DEF(shockwave_attack); +// electricity +SUB(shockwave_attack) { + MY(airfriction) = 1; + MY(alpha_min) = 4096; + MY(alpha_max) = 4096; + MY(alpha_fade) = 20000; + MY(color_min) = "0xb44215"; + MY(color_max) = "0xff0000"; + MY(count) = 1; + MY(originjitter) = '2.0 2.0 2.0'; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = 4000; + MY(spin_max) = -4000; + MY(sizeincrease) = 1.500000; + MY(size_min) = 5; + MY(size_max) = 7; + MY(stretchfactor) = 2.300000; + MY(tex_min) = 43; + MY(tex_max) = 43; + MY(type) = "spark"; + MY(velocityjitter) = '10.0 10.0 10.0'; + MY(velocitymultiplier) = 10; +} +// fire +SUB(shockwave_attack) { + MY(airfriction) = 1; + MY(alpha_min) = 4096; + MY(alpha_max) = 4096; + MY(alpha_fade) = 20000; + MY(color_min) = "0xff4200"; + MY(color_max) = "0xff0000"; + MY(count) = 1; + MY(originjitter) = '2.0 2.0 2.0'; + MY(sizeincrease) = 1.500000; + MY(size_min) = 7; + MY(size_max) = 9; + MY(stretchfactor) = 2; + MY(tex_min) = 8; + MY(tex_max) = 15; + MY(type) = "spark"; + MY(velocityjitter) = '10.0 10.0 10.0'; + MY(velocitymultiplier) = 10; +} + +DEF(arc_lightning); +// impact decal +SUB(arc_lightning) { + MY(alpha_min) = 32; + MY(alpha_max) = 32; + MY(countabsolute) = 1; + MY(lightcolor) = '3.1 4.4 10.0'; + MY(lightradiusfade) = 200; + MY(lightradius) = 50; + MY(originjitter) = '2.0 2.0 2.0'; + MY(size_min) = 16; + MY(size_max) = 16; + MY(tex_min) = 16; + MY(tex_max) = 32; + MY(type) = "decal"; +} +// impact sparks +SUB(arc_lightning) { + MY(airfriction) = 110; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 512; + MY(color_min) = "0xDDFDFF"; + MY(color_max) = "0xFDFDFF"; + MY(count) = 100; + MY(originjitter) = '20.0 20.0 20.0'; + MY(startangle_max) = 360; + MY(spin_min) = -36000; + MY(spin_max) = 36000; + MY(sizeincrease) = -5; + MY(size_max) = 5; + MY(stretchfactor) = 1; + MY(tex_min) = 71; + MY(tex_max) = 74; + MY(type) = "static"; + MY(velocityjitter) = '250.0 250.0 250.0'; + MY(velocitymultiplier) = 100; +} +// impact sparks (underwater) +SUB(arc_lightning) { + MY(airfriction) = 5; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 512; + MY(color_min) = "0xDDFDFF"; + MY(color_max) = "0xFDFDFF"; + MY(count) = 100; + MY(liquidfriction) = 5; + MY(orientation) = "spark"; + MY(originjitter) = '20.0 20.0 20.0'; + MY(startangle_max) = 360; + MY(spin_min) = -36000; + MY(spin_max) = 36000; + MY(sizeincrease) = -5; + MY(size_max) = 5; + MY(stretchfactor) = 1; + MY(tex_min) = 71; + MY(tex_max) = 74; + MY(type) = "static"; + MY(underwater) = true; + MY(velocityjitter) = '250.0 250.0 250.0'; + MY(velocitymultiplier) = 20; +} + +DEF(arc_beam); +// sparks on beam +SUB(arc_beam) { + MY(airfriction) = -10; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 16384; + MY(color_min) = "0xfafad2"; + MY(color_max) = "0xffffff"; + MY(originjitter) = '3.0 3.0 3.0'; + MY(relativeoriginoffset) = '10.0 0.0 0.0'; + MY(startangle_max) = 360; + MY(spin_min) = 360; + MY(spin_max) = 1000; + MY(stretchfactor) = 1; + MY(tex_min) = 71; + MY(tex_max) = 74; + MY(time_min) = 0.050000; + MY(time_max) = 0.050000; + MY(trailspacing) = 10; + MY(type) = "spark"; + MY(velocityjitter) = '100.0 100.0 100.0'; + MY(velocitymultiplier) = 200; +} +// sparks on beam (underwater) +SUB(arc_beam) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 16384; + MY(color_min) = "0xfafad2"; + MY(color_max) = "0xffffff"; + MY(liquidfriction) = -10; + MY(originjitter) = '30.0 30.0 30.0'; + MY(relativeoriginoffset) = '10.0 0.0 0.0'; + MY(startangle_max) = 360; + MY(spin_min) = 360; + MY(spin_max) = 1000; + MY(stretchfactor) = 1; + MY(tex_min) = 71; + MY(tex_max) = 74; + MY(time_min) = 0.001000; + MY(time_max) = 0.001000; + MY(trailspacing) = 10; + MY(type) = "spark"; + MY(underwater) = true; + MY(velocityjitter) = '100.0 100.0 100.0'; + MY(velocitymultiplier) = 200; +} + +DEF(arc_beam_heal); +// bubble this... +SUB(arc_beam_heal) { + MY(airfriction) = -20; + MY(alpha_min) = 2048; + MY(alpha_max) = 2048; + MY(alpha_fade) = 256; + MY(color_min) = "0x20FF20"; + MY(color_max) = "0x40FF40"; + MY(relativeoriginoffset) = '5.0 0.0 0.0'; + MY(relativevelocityoffset) = '100.0 0.0 0.0'; + MY(sizeincrease) = 20; + MY(size_min) = 0.100000; + MY(size_max) = 0.100000; + MY(tex_min) = 74; + MY(tex_max) = 74; + MY(trailspacing) = 1500; + MY(type) = "smoke"; + MY(velocityjitter) = '3.0 3.0 3.0'; + MY(velocitymultiplier) = 200; +} + +DEF(arc_beam_healimpact); +// healing "aura" +SUB(arc_beam_healimpact) { + MY(alpha_min) = 40; + MY(alpha_max) = 40; + MY(alpha_fade) = 350; + MY(color_min) = "0x00ff00"; + MY(color_max) = "0x84c52f"; + MY(countabsolute) = 1; + MY(lightcolor) = '0.0 4.4 0.0'; + MY(lightradiusfade) = 150; + MY(lightradius) = 20; + MY(sizeincrease) = -1000; + MY(size_min) = 32; + MY(size_max) = 32; + MY(tex_min) = 33; + MY(tex_max) = 33; + MY(type) = "smoke"; + MY(velocitymultiplier) = 44; +} +// rising "smoke" +SUB(arc_beam_healimpact) { + MY(airfriction) = 3; + MY(alpha_min) = 200; + MY(alpha_max) = 456; + MY(alpha_fade) = 512; + MY(color_min) = "0x00ff00"; + MY(color_max) = "0x84c52f"; + MY(count) = 15; + MY(gravity) = -2; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = -90; + MY(spin_max) = 90; + MY(size_min) = 0.500000; + MY(size_max) = 1; + MY(tex_min) = 40; + MY(tex_max) = 40; + MY(type) = "smoke"; + MY(velocityjitter) = '120.0 120.0 420.0'; +} + +DEF(arc_smoke); +// arc heat smoke (notunderwater) +SUB(arc_smoke) { + MY(airfriction) = 1; + MY(alpha_min) = 32; + MY(alpha_max) = 64; + MY(alpha_fade) = 48; + MY(color_min) = "0x4c453f"; + MY(color_max) = "0x2a241f"; + MY(count) = 2; + MY(gravity) = -0.125000; + MY(notunderwater) = true; + MY(startangle_max) = 360; + MY(spin_min) = -180; + MY(spin_max) = 180; + MY(sizeincrease) = 10; + MY(size_min) = 5; + MY(size_max) = 10; + MY(tex_max) = 8; + MY(type) = "smoke"; + MY(velocityjitter) = '0.0 0.0 16.0'; +} +// arc heat bubbles (underwater) +SUB(arc_smoke) { + MY(alpha_min) = 170; + MY(alpha_max) = 256; + MY(alpha_fade) = 64; + MY(bounce) = 1.500000; + MY(color_min) = "0x404040"; + MY(color_max) = "0x808080"; + MY(count) = 2; + MY(gravity) = -0.125000; + MY(liquidfriction) = 0.250000; + MY(originjitter) = '6.0 6.0 6.0'; + MY(size_min) = 0.100000; + MY(size_max) = 1; + MY(tex_min) = 62; + MY(tex_max) = 62; + MY(type) = "bubble"; + MY(underwater) = true; + MY(velocityjitter) = '16.0 16.0 16.0'; +} + +DEF(arc_overheat); +// arc overheat electric bolts +SUB(arc_overheat) { + MY(airfriction) = 5; + MY(alpha_min) = 128; + MY(alpha_max) = 128; + MY(alpha_fade) = 292; + MY(color_min) = "0xffffff"; + MY(color_max) = "0x9271fb"; + MY(count) = 24; + MY(gravity) = -0.400000; + MY(liquidfriction) = 10; + MY(originjitter) = '10.0 10.0 10.0'; + MY(sizeincrease) = -24; + MY(size_min) = 6; + MY(size_max) = 12; + MY(tex_min) = 43; + MY(tex_max) = 43; + MY(type) = "spark"; + MY(velocityjitter) = '256.0 256.0 256.0'; +} + +DEF(arc_overheat_fire); +// arc overheat bouncing sparks +SUB(arc_overheat_fire) { + MY(alpha_max) = 256; + MY(alpha_fade) = 640; + MY(bounce) = 1.500000; + MY(color_min) = "0x4444ff"; + MY(color_max) = "0xeeeeff"; + MY(count) = 1; + MY(gravity) = 1; + MY(liquidfriction) = 5; + MY(originjitter) = '6.0 6.0 6.0'; + MY(size_min) = 0.400000; + MY(size_max) = 1; + MY(type) = "spark"; + MY(velocityjitter) = '92.0 92.0 92.0'; + MY(velocitymultiplier) = 80; + MY(velocityoffset) = '0.0 0.0 80.0'; +} + +#include "effectinfo_buffs.inc" + +#include "effectinfo_instagib.inc" diff --git a/qcsrc/common/effects/effectinfo.qc b/qcsrc/common/effects/effectinfo.qc new file mode 100644 index 0000000000..e27d2c9ffa --- /dev/null +++ b/qcsrc/common/effects/effectinfo.qc @@ -0,0 +1,310 @@ +#define EFFECTINFO_PARSER(on) \ + on(airfriction, MY(airfriction) \ + ,{ ASSERT(n == 1 && "airfriction"); MY(airfriction) = stof(argv(1)); \ + }, sprintf(" %s", ftos(MY(airfriction)) \ + )) \ + on(alpha, MY(alpha_min) || MY(alpha_max) || MY(alpha_fade) \ + ,{ ASSERT(n == 3 && "alpha"); MY(alpha_min) = stof(argv(1)); MY(alpha_max) = stof(argv(2)); MY(alpha_fade) = stof(argv(3)); \ + }, sprintf(" %s %s %s", ftos(MY(alpha_min)), ftos(MY(alpha_max)), ftos(MY(alpha_fade)) \ + )) \ + on(blend, MY(blend) \ + ,{ ASSERT(n == 1 && "blend"); MY(blend) = argv(1); \ + }, sprintf(" %s", (MY(blend)) \ + )) \ + on(bounce, MY(bounce) \ + ,{ ASSERT(n == 1 && "bounce"); MY(bounce) = stof(argv(1)); \ + }, sprintf(" %s", ftos(MY(bounce)) \ + )) \ + on(color, MY(color_min) || MY(color_max) \ + ,{ ASSERT(n == 2 && "color"); MY(color_min) = argv(1); MY(color_max) = argv(2); \ + }, sprintf(" %s %s", (MY(color_min)), (MY(color_max)) \ + )) \ + on(countabsolute, MY(countabsolute) \ + ,{ ASSERT(n == 1 && "countabsolute"); MY(countabsolute) = stof(argv(1)); \ + }, sprintf(" %s", ftos(MY(countabsolute)) \ + )) \ + on(count, MY(count) \ + ,{ ASSERT(n == 1 && "count"); MY(count) = stof(argv(1)); \ + }, sprintf(" %s", ftos(MY(count)) \ + )) \ + on(gravity, MY(gravity) \ + ,{ ASSERT(n == 1 && "gravity"); MY(gravity) = stof(argv(1)); \ + }, sprintf(" %s", ftos(MY(gravity)) \ + )) \ + on(lightcolor, MY(lightcolor) \ + ,{ ASSERT(n == 3 && "lightcolor"); MY(lightcolor) = vec3(stof(argv(1)), stof(argv(2)), stof(argv(3))); \ + }, sprintf(" %v", (MY(lightcolor)) \ + )) \ + on(lightradiusfade, MY(lightradiusfade) \ + ,{ ASSERT(n == 1 && "lightradiusfade"); MY(lightradiusfade) = stof(argv(1)); \ + }, sprintf(" %s", ftos(MY(lightradiusfade)) \ + )) \ + on(lightradius, MY(lightradius) \ + ,{ ASSERT(n == 1 && "lightradius"); MY(lightradius) = stof(argv(1)); \ + }, sprintf(" %s", ftos(MY(lightradius)) \ + )) \ + on(lighttime, MY(lighttime) \ + ,{ ASSERT(n == 1 && "lighttime"); MY(lighttime) = stof(argv(1)); \ + }, sprintf(" %s", ftos(MY(lighttime)) \ + )) \ + on(liquidfriction, MY(liquidfriction) \ + ,{ ASSERT(n == 1 && "liquidfriction"); MY(liquidfriction) = stof(argv(1)); \ + }, sprintf(" %s", ftos(MY(liquidfriction)) \ + )) \ + on(notunderwater, MY(notunderwater) \ + ,{ ASSERT(n == 0 && "notunderwater"); MY(notunderwater) = true; \ + }, "" \ + ) \ + on(orientation, MY(orientation) \ + ,{ ASSERT(n == 1 && "orientation"); MY(orientation) = argv(1); \ + }, sprintf(" %s", (MY(orientation)) \ + )) \ + on(originjitter, MY(originjitter) \ + ,{ ASSERT(n == 3 && "originjitter"); MY(originjitter) = vec3(stof(argv(1)), stof(argv(2)), stof(argv(3))); \ + }, sprintf(" %v", (MY(originjitter)) \ + )) \ + on(originoffset, MY(originoffset) \ + ,{ ASSERT(n == 3 && "originoffset"); MY(originoffset) = vec3(stof(argv(1)), stof(argv(2)), stof(argv(3))); \ + }, sprintf(" %v", (MY(originoffset)) \ + )) \ + on(relativeoriginoffset, MY(relativeoriginoffset) \ + ,{ ASSERT(n == 3 && "relativeoriginoffset"); MY(relativeoriginoffset) = vec3(stof(argv(1)), stof(argv(2)), stof(argv(3))); \ + }, sprintf(" %v", (MY(relativeoriginoffset)) \ + )) \ + on(relativevelocityoffset, MY(relativevelocityoffset) \ + ,{ ASSERT(n == 3 && "relativevelocityoffset"); MY(relativevelocityoffset) = vec3(stof(argv(1)), stof(argv(2)), stof(argv(3))); \ + }, sprintf(" %v", (MY(relativevelocityoffset)) \ + )) \ + on(rotate, MY(startangle_min) || MY(startangle_max) || MY(spin_min) || MY(spin_max) \ + ,{ ASSERT(n == 4 && "rotate"); MY(startangle_min) = stof(argv(1)); MY(startangle_max) = stof(argv(2)); MY(spin_min) = stof(argv(3)); MY(spin_max) = stof(argv(4)); \ + }, sprintf(" %s %s %s %s", ftos(MY(startangle_min)), ftos(MY(startangle_max)), ftos(MY(spin_min)), ftos(MY(spin_max)) \ + )) \ + on(sizeincrease, MY(sizeincrease) \ + ,{ ASSERT(n == 1 && "sizeincrease"); MY(sizeincrease) = stof(argv(1)); \ + }, sprintf(" %s", ftos(MY(sizeincrease)) \ + )) \ + on(size, MY(size_min) || MY(size_max) \ + ,{ ASSERT(n == 2 && "size"); MY(size_min) = stof(argv(1)); MY(size_max) = stof(argv(2)); \ + }, sprintf(" %s %s", ftos(MY(size_min)), ftos(MY(size_max)) \ + )) \ + on(staincolor, MY(staincolor_min) || MY(staincolor_max) \ + ,{ ASSERT(n == 2 && "staincolor"); MY(staincolor_min) = argv(1); MY(staincolor_max) = argv(2); \ + }, sprintf(" %s %s", (MY(staincolor_min)), (MY(staincolor_max)) \ + )) \ + on(stainsize, MY(stainsize_min) || MY(stainsize_max) \ + ,{ ASSERT(n == 2 && "stainsize"); MY(stainsize_min) = stof(argv(1)); MY(stainsize_max) = stof(argv(2)); \ + }, sprintf(" %s %s", ftos(MY(stainsize_min)), ftos(MY(stainsize_max)) \ + )) \ + on(staintex, MY(staintex_min) || MY(staintex_max) \ + ,{ ASSERT(n == 2 && "staintex"); MY(staintex_min) = stof(argv(1)); MY(staintex_max) = stof(argv(2)); \ + }, sprintf(" %s %s", ftos(MY(staintex_min)), ftos(MY(staintex_max)) \ + )) \ + on(stretchfactor, MY(stretchfactor) \ + ,{ ASSERT(n == 1 && "stretchfactor"); MY(stretchfactor) = stof(argv(1)); \ + }, sprintf(" %s", ftos(MY(stretchfactor)) \ + )) \ + on(tex, MY(tex_min) || MY(tex_max) \ + ,{ ASSERT(n == 2 && "tex"); MY(tex_min) = stof(argv(1)); MY(tex_max) = stof(argv(2)); \ + }, sprintf(" %s %s", ftos(MY(tex_min)), ftos(MY(tex_max)) \ + )) \ + on(time, MY(time_min) || MY(time_max) \ + ,{ ASSERT(n == 2 && "time"); MY(time_min) = stof(argv(1)); MY(time_max) = stof(argv(2)); \ + }, sprintf(" %s %s", ftos(MY(time_min)), ftos(MY(time_max)) \ + )) \ + on(trailspacing, MY(trailspacing) \ + ,{ ASSERT(n == 1 && "trailspacing"); MY(trailspacing) = stof(argv(1)); \ + }, sprintf(" %s", ftos(MY(trailspacing)) \ + )) \ + on(type, MY(type) \ + ,{ ASSERT(n == 1 && "type"); MY(type) = argv(1); \ + }, sprintf(" %s", (MY(type)) \ + )) \ + on(underwater, MY(underwater) \ + ,{ ASSERT(n == 0 && "underwater"); MY(underwater) = true; \ + }, "" \ + ) \ + on(velocityjitter, MY(velocityjitter) \ + ,{ ASSERT(n == 3 && "velocityjitter"); MY(velocityjitter) = vec3(stof(argv(1)), stof(argv(2)), stof(argv(3))); \ + }, sprintf(" %v", (MY(velocityjitter)) \ + )) \ + on(velocitymultiplier, MY(velocitymultiplier) \ + ,{ ASSERT(n == 1 && "velocitymultiplier"); MY(velocitymultiplier) = stof(argv(1)); \ + }, sprintf(" %s", ftos(MY(velocitymultiplier)) \ + )) \ + on(velocityoffset, MY(velocityoffset) \ + ,{ ASSERT(n == 3 && "velocityoffset"); MY(velocityoffset) = vec3(stof(argv(1)), stof(argv(2)), stof(argv(3))); \ + }, sprintf(" %v", (MY(velocityoffset)) \ + )) \ + /**/ + +CLASS(EffectInfo, Object) + ATTRIB(EffectInfo, effectinfo_name, string, string_null) + CONSTRUCTOR(EffectInfo, string s) { + CONSTRUCT(EffectInfo); + this.effectinfo_name = s; + } + + #define FIELDS(MY) \ + MY(airfriction, float, 0) \ + MY(alpha_min, float, 0) \ + MY(alpha_max, float, 0) \ + MY(alpha_fade, float, 0) \ + MY(blend, string, string_null) \ + MY(bounce, float, 0) \ + MY(color_min, string, string_null) \ + MY(color_max, string, string_null) \ + MY(countabsolute, float, 0) \ + MY(count, float, 0) \ + MY(gravity, float, 0) \ + MY(lightcolor, vector, '0 0 0') \ + MY(lightradiusfade, float, 0) \ + MY(lightradius, float, 0) \ + MY(lighttime, float, 0) \ + MY(liquidfriction, float, 0) \ + MY(notunderwater, bool, false) \ + MY(orientation, string, string_null) \ + MY(originjitter, vector, '0 0 0') \ + MY(originoffset, vector, '0 0 0') \ + MY(relativeoriginoffset, vector, '0 0 0') \ + MY(relativevelocityoffset, vector, '0 0 0') \ + MY(startangle_min, float, 0) \ + MY(startangle_max, float, 0) \ + MY(spin_min, float, 0) \ + MY(spin_max, float, 0) \ + MY(sizeincrease, float, 0) \ + MY(size_min, float, 0) \ + MY(size_max, float, 0) \ + MY(staincolor_min, string, string_null) \ + MY(staincolor_max, string, string_null) \ + MY(stainsize_min, float, 0) \ + MY(stainsize_max, float, 0) \ + MY(staintex_min, float, 0) \ + MY(staintex_max, float, 0) \ + MY(stretchfactor, float, 0) \ + MY(tex_min, float, 0) \ + MY(tex_max, float, 0) \ + MY(time_min, float, 0) \ + MY(time_max, float, 0) \ + MY(trailspacing, float, 0) \ + MY(type, string, string_null) \ + MY(underwater, bool, false) \ + MY(velocityjitter, vector, '0 0 0') \ + MY(velocitymultiplier, float, 0) \ + MY(velocityoffset, vector, '0 0 0') \ + /**/ + + #define MY(f, type, val) ATTRIB(EffectInfo, effectinfo_##f, type, val) + FIELDS(MY) + #undef MY + + METHOD(EffectInfo, describe, string(EffectInfo this)) { + string s = sprintf("SUB(%s) {\n", this.effectinfo_name); + #define str_bool(it) (it ? "true" : "false") + #define str_float(it) ftos(it) + #define str_vector(it) vtos(it) + #define str_string(it) strcat("\"", it, "\"") + #define p(f, type, default) if (this.effectinfo_##f) { s = strcat(s, "\t", "MY("#f") = ", str_##type(this.effectinfo_##f), ";\n"); } + FIELDS(p) + #undef p + #undef MY + return strcat(s, "}\n"); + } + + METHOD(EffectInfo, dump, string(EffectInfo this)) { + string s = sprintf("effect %s\n", this.effectinfo_name); + #define MY(f) this.effectinfo_##f + #define p(k, isset, parse, unparse) if (isset) { s = strcat(s, "\t", #k, unparse, "\n"); } + EFFECTINFO_PARSER(p) + #undef p + #undef MY + return s; + } + + #undef FIELDS +ENDCLASS(EffectInfo) + +CLASS(EffectInfoGroup, Object) + ATTRIBARRAY(EffectInfoGroup, children, EffectInfo, 16) + ATTRIB(EffectInfoGroup, children_count, int, 0) +ENDCLASS(EffectInfoGroup) + +void effectinfo_read() +{ + int fh = fopen("effectinfo.txt", FILE_READ); + EffectInfo info = NULL; + for (string line; (line = fgets(fh)); ) { + int n = tokenize_console(line); + if (n == 0) continue; + n--; + string k = argv(0); + if (k == "effect") { + ASSERT(n == 1); + info = NEW(EffectInfo, argv(1)); + continue; + } + ASSERT(info != NULL); + switch (k) { + #define MY(f) info.effectinfo_##f + #define p(k, isset, parse, unparse) case #k: parse break; + EFFECTINFO_PARSER(p) + #undef p + #undef MY + default: + LOG_WARNINGF("Unknown property '%s'\n", k); + break; + } + } + fclose(fh); +} + +void effectinfo_dump(int fh, bool alsoprint) +{ + #define WRITE(s) do { \ + fputs(fh, s); \ + if (alsoprint) LOG_INFO(s); \ + } while (0) + WRITE("// ********************************************** //\n"); + WRITE("// ** WARNING - DO NOT MANUALLY EDIT THIS FILE ** //\n"); + WRITE("// ** ** //\n"); + WRITE("// ** This file is automatically generated by ** //\n"); + WRITE("// ** code with the command 'dumpeffectinfo'. ** //\n"); + WRITE("// ** ** //\n"); + WRITE("// ** If you modify an effect, please ** //\n"); + WRITE("// ** regenerate this file with that command. ** //\n"); + WRITE("// ** ** //\n"); + WRITE("// ********************************************** //\n"); + WRITE("\n"); + + for (EffectInfo it = NULL; (it = findfloat(it, instanceOfEffectInfo, true)); ) { + if (it.classname == "vtbl") continue; + string s = it.dump(it); + WRITE(s); + } + #undef WRITE +} + + +void RegisterEffectInfo(); +const int MAX_EFFECTINFOS = 512; +entity EFFECTINFOS[MAX_EFFECTINFOS], EFFECTINFOS_first, EFFECTINFOS_last; +int EFFECTINFOS_COUNT; + +#define EFFECTINFO(name) \ + [[accumulate]] void effectinfo_##name(EffectInfoGroup parent, EffectInfo this) { } \ + REGISTER(RegisterEffectInfo, EFFECTINFO, EFFECTINFOS, EFFECTINFOS_COUNT, name, m_id, NEW(EffectInfoGroup)) { \ + effectinfo_##name(this, NULL); \ + } +REGISTER_REGISTRY(RegisterEffectInfo) + + +#define REGISTER_EFFECTINFO(id) var void effectinfo_##id(EffectInfoGroup parent) + +#define MY(f) this.effectinfo_##f +#define DEF(name) EFFECTINFO(name) +#define SUB(name) \ + [[accumulate]] void effectinfo_##name(EffectInfoGroup parent, EffectInfo this) { parent = EFFECTINFO_##name; parent.children[parent.children_count++] = this = NEW(EffectInfo, #name); } \ + [[accumulate]] void effectinfo_##name(EffectInfoGroup parent, EffectInfo this) +#include "effectinfo.inc" +#undef MY +#undef DEF +#undef SUB diff --git a/qcsrc/common/effects/effectinfo_buffs.inc b/qcsrc/common/effects/effectinfo_buffs.inc new file mode 100644 index 0000000000..8ac9041300 --- /dev/null +++ b/qcsrc/common/effects/effectinfo_buffs.inc @@ -0,0 +1,305 @@ +DEF(relic_resistance); +SUB(relic_resistance) { + MY(airfriction) = 0.200000; + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 256; + MY(color_min) = "0x00ff80"; + MY(color_max) = "0x00ff80"; + MY(count) = 20; + MY(gravity) = -0.100000; + MY(liquidfriction) = 0.800000; + MY(originjitter) = '8.0 8.0 32.0'; + MY(size_min) = 1.500000; + MY(size_max) = 1.500000; + MY(type) = "static"; + MY(velocityjitter) = '64.0 64.0 32.0'; +} + +DEF(relic_regeneration); +SUB(relic_regeneration) { + MY(airfriction) = 0.200000; + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 256; + MY(color_min) = "0x00ffff"; + MY(color_max) = "0x00ffff"; + MY(count) = 1; + MY(gravity) = -0.100000; + MY(liquidfriction) = 0.800000; + MY(originjitter) = '8.0 8.0 32.0'; + MY(size_min) = 1.500000; + MY(size_max) = 1.500000; + MY(type) = "static"; + MY(velocityjitter) = '64.0 64.0 32.0'; +} + +DEF(relic_vampire); +SUB(relic_vampire) { + MY(airfriction) = 0.200000; + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 256; + MY(color_min) = "0xff00ff"; + MY(color_max) = "0xff00ff"; + MY(count) = 20; + MY(gravity) = -0.100000; + MY(liquidfriction) = 0.800000; + MY(originjitter) = '8.0 8.0 32.0'; + MY(size_min) = 1.500000; + MY(size_max) = 1.500000; + MY(type) = "static"; + MY(velocityjitter) = '64.0 64.0 32.0'; +} + +DEF(relic_ammo); +SUB(relic_ammo) { + MY(airfriction) = 0.200000; + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 256; + MY(color_min) = "0x80ff00"; + MY(color_max) = "0x80ff00"; + MY(count) = 1; + MY(gravity) = -0.100000; + MY(liquidfriction) = 0.800000; + MY(originjitter) = '8.0 8.0 32.0'; + MY(size_min) = 1.500000; + MY(size_max) = 1.500000; + MY(type) = "static"; + MY(velocityjitter) = '64.0 64.0 32.0'; +} + +DEF(relic_damage); +SUB(relic_damage) { + MY(airfriction) = 0.200000; + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 256; + MY(color_min) = "0xff0000"; + MY(color_max) = "0xff0000"; + MY(count) = 20; + MY(gravity) = -0.100000; + MY(liquidfriction) = 0.800000; + MY(originjitter) = '8.0 8.0 32.0'; + MY(size_min) = 1.500000; + MY(size_max) = 1.500000; + MY(type) = "static"; + MY(velocityjitter) = '64.0 64.0 32.0'; +} + +DEF(relic_ssplashdamage); +SUB(relic_ssplashdamage) { + MY(airfriction) = 0.200000; + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 256; + MY(color_min) = "0xff8000"; + MY(color_max) = "0xff8000"; + MY(count) = 20; + MY(gravity) = -0.100000; + MY(liquidfriction) = 0.800000; + MY(originjitter) = '8.0 8.0 32.0'; + MY(size_min) = 1.500000; + MY(size_max) = 1.500000; + MY(type) = "static"; + MY(velocityjitter) = '64.0 64.0 32.0'; +} + +DEF(relic_firingspeed); +SUB(relic_firingspeed) { + MY(airfriction) = 0.200000; + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 256; + MY(color_min) = "0xffff00"; + MY(color_max) = "0xffff00"; + MY(count) = 20; + MY(gravity) = -0.100000; + MY(liquidfriction) = 0.800000; + MY(originjitter) = '8.0 8.0 32.0'; + MY(size_min) = 1.500000; + MY(size_max) = 1.500000; + MY(type) = "static"; + MY(velocityjitter) = '64.0 64.0 32.0'; +} + +DEF(relic_disability); +SUB(relic_disability) { + MY(airfriction) = 0.200000; + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 256; + MY(color_min) = "0x0000ff"; + MY(color_max) = "0x0000ff"; + MY(count) = 20; + MY(gravity) = -0.100000; + MY(liquidfriction) = 0.800000; + MY(originjitter) = '8.0 8.0 32.0'; + MY(size_min) = 1.500000; + MY(size_max) = 1.500000; + MY(type) = "static"; + MY(velocityjitter) = '64.0 64.0 32.0'; +} + +DEF(relic_disability_curse); +SUB(relic_disability_curse) { + MY(airfriction) = 0.200000; + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 256; + MY(color_min) = "0x000080"; + MY(color_max) = "0x000080"; + MY(count) = 1; + MY(gravity) = -0.100000; + MY(liquidfriction) = 0.800000; + MY(originjitter) = '8.0 8.0 32.0'; + MY(size_min) = 1.500000; + MY(size_max) = 1.500000; + MY(type) = "static"; + MY(velocityjitter) = '64.0 64.0 32.0'; +} + +DEF(relic_teamboost); +SUB(relic_teamboost) { + MY(airfriction) = 0.200000; + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 256; + MY(color_min) = "0xffffff"; + MY(color_max) = "0xffffff"; + MY(count) = 20; + MY(gravity) = -0.100000; + MY(liquidfriction) = 0.800000; + MY(originjitter) = '8.0 8.0 32.0'; + MY(size_min) = 1.500000; + MY(size_max) = 1.500000; + MY(type) = "static"; + MY(velocityjitter) = '64.0 64.0 32.0'; +} + +DEF(relic_teamboost_boost); +SUB(relic_teamboost_boost) { + MY(airfriction) = 0.200000; + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 256; + MY(color_min) = "0x808080"; + MY(color_max) = "0x808080"; + MY(count) = 1; + MY(gravity) = -0.100000; + MY(liquidfriction) = 0.800000; + MY(originjitter) = '8.0 8.0 32.0'; + MY(size_min) = 1.500000; + MY(size_max) = 1.500000; + MY(type) = "static"; + MY(velocityjitter) = '64.0 64.0 32.0'; +} + +DEF(relic_speed); +SUB(relic_speed) { + MY(airfriction) = 0.200000; + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 256; + MY(color_min) = "0x80ffff"; + MY(color_max) = "0x80ffff"; + MY(count) = 1; + MY(gravity) = -0.100000; + MY(liquidfriction) = 0.800000; + MY(originjitter) = '8.0 8.0 32.0'; + MY(size_min) = 1.500000; + MY(size_max) = 1.500000; + MY(type) = "static"; + MY(velocityjitter) = '64.0 64.0 32.0'; +} + +DEF(relic_jump); +SUB(relic_jump) { + MY(airfriction) = 0.200000; + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 256; + MY(color_min) = "0xffff80"; + MY(color_max) = "0xffff80"; + MY(count) = 20; + MY(gravity) = -0.100000; + MY(liquidfriction) = 0.800000; + MY(originjitter) = '8.0 8.0 32.0'; + MY(size_min) = 1.500000; + MY(size_max) = 1.500000; + MY(type) = "static"; + MY(velocityjitter) = '64.0 64.0 32.0'; +} + +DEF(relic_flight); +SUB(relic_flight) { + MY(airfriction) = 0.200000; + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 256; + MY(color_min) = "0x8080ff"; + MY(color_max) = "0x8080ff"; + MY(count) = 1; + MY(gravity) = -0.100000; + MY(liquidfriction) = 0.800000; + MY(originjitter) = '8.0 8.0 32.0'; + MY(size_min) = 1.500000; + MY(size_max) = 1.500000; + MY(type) = "static"; + MY(velocityjitter) = '64.0 64.0 32.0'; +} + +DEF(relic_radioactive); +SUB(relic_radioactive) { + MY(airfriction) = 0.200000; + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 256; + MY(color_min) = "0x00ff00"; + MY(color_max) = "0x00ff00"; + MY(count) = 20; + MY(gravity) = -0.100000; + MY(liquidfriction) = 0.800000; + MY(originjitter) = '8.0 8.0 32.0'; + MY(size_min) = 1.500000; + MY(size_max) = 1.500000; + MY(type) = "static"; + MY(velocityjitter) = '64.0 64.0 32.0'; +} + +DEF(relic_resurrection); +SUB(relic_resurrection) { + MY(airfriction) = 0.200000; + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 256; + MY(color_min) = "0xff0080"; + MY(color_max) = "0xff0080"; + MY(count) = 20; + MY(gravity) = -0.100000; + MY(liquidfriction) = 0.800000; + MY(originjitter) = '8.0 8.0 32.0'; + MY(size_min) = 1.500000; + MY(size_max) = 1.500000; + MY(type) = "static"; + MY(velocityjitter) = '64.0 64.0 32.0'; +} + +DEF(relic_vengeance); +SUB(relic_vengeance) { + MY(airfriction) = 0.200000; + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 256; + MY(color_min) = "0xff8080"; + MY(color_max) = "0xff8080"; + MY(count) = 20; + MY(gravity) = -0.100000; + MY(liquidfriction) = 0.800000; + MY(originjitter) = '8.0 8.0 32.0'; + MY(size_min) = 1.500000; + MY(size_max) = 1.500000; + MY(type) = "static"; + MY(velocityjitter) = '64.0 64.0 32.0'; +} diff --git a/qcsrc/common/effects/effectinfo_ctf.inc b/qcsrc/common/effects/effectinfo_ctf.inc new file mode 100644 index 0000000000..5794ad4773 --- /dev/null +++ b/qcsrc/common/effects/effectinfo_ctf.inc @@ -0,0 +1,123 @@ +// flag_touch -- effects for touching the flag +#define flag_touch(name, colormin, colormax) \ + DEF(name##flag_touch); \ + SUB(name##flag_touch) { \ + MY(airfriction) = 3; \ + MY(alpha_max) = 256; \ + MY(alpha_fade) = 556; \ + MY(bounce) = 1.500000; \ + MY(color_min) = colormin; \ + MY(color_max) = colormax; \ + MY(count) = 35; \ + MY(gravity) = 1; \ + MY(originjitter) = '1.0 1.0 1.0'; \ + MY(size_min) = 1; \ + MY(size_max) = 3; \ + MY(tex_min) = 40; \ + MY(tex_max) = 40; \ + MY(type) = "spark"; \ + MY(velocityjitter) = '300.0 300.0 300.0'; \ + MY(velocitymultiplier) = 0.500000; \ + } + +flag_touch(red, "0xFF0000", "0x970000") +flag_touch(blue, "0x0000FF", "0x000097") +flag_touch(yellow, "0xFFFF0F", "0xFFFF0F") +flag_touch(pink, "0xFF0FFF", "0xFF0FFF") +flag_touch(neutral, "0xFFFFFF", "0xFFFFFF") +#undef flag_touch + +#define pass(name, colormin, colormax) \ + DEF(name##_pass); \ + SUB(name##_pass) { \ + MY(airfriction) = 5; \ + MY(alpha_min) = 64; \ + MY(alpha_max) = 128; \ + MY(alpha_fade) = 64; \ + MY(color_min) = colormin; \ + MY(color_max) = colormax; \ + MY(sizeincrease) = 2; \ + MY(size_min) = 2; \ + MY(size_max) = 2; \ + MY(tex_min) = 32; \ + MY(tex_max) = 32; \ + MY(trailspacing) = 64; \ + MY(type) = "static"; \ + } \ + SUB(name##_pass) { \ + MY(airfriction) = 9; \ + MY(alpha_min) = 32; \ + MY(alpha_max) = 64; \ + MY(alpha_fade) = 32; \ + MY(color_min) = colormin; \ + MY(color_max) = colormax; \ + MY(sizeincrease) = 8; \ + MY(size_min) = 1; \ + MY(size_max) = 1; \ + MY(tex_max) = 8; \ + MY(trailspacing) = 12; \ + MY(type) = "static"; \ + MY(velocityjitter) = '64.0 64.0 64.0'; \ + } \ + SUB(name##_pass) { \ + MY(alpha_min) = 256; \ + MY(alpha_max) = 256; \ + MY(alpha_fade) = 1280; \ + MY(color_min) = colormin; \ + MY(color_max) = colormax; \ + MY(size_min) = 4; \ + MY(size_max) = 4; \ + MY(trailspacing) = 12; \ + MY(type) = "static"; \ + } \ + /**/ + +pass(red, "0xFF0000", "0x970000") +pass(blue, "0x0000FF", "0x000097") +pass(yellow, "0xFFFF0F", "0xFFFF0F") +pass(pink, "0xFFFFFF", "0xFFFFFF") +pass(neutral, "0xFFFFFF", "0xFFFFFF") +#undef pass + +// cap -- team capture effect +#define cap(name, colormin, colormax) \ + DEF(name##_cap); \ + SUB(name##_cap) { \ + MY(airfriction) = 2; \ + MY(alpha_max) = 256; \ + MY(alpha_fade) = 100; \ + MY(bounce) = 1.500000; \ + MY(color_min) = colormin; \ + MY(color_max) = colormax; \ + MY(count) = 500; \ + MY(originjitter) = '1.0 1.0 1.0'; \ + MY(size_min) = 1; \ + MY(size_max) = 1; \ + MY(stretchfactor) = 0.600000; \ + MY(tex_min) = 64; \ + MY(tex_max) = 64; \ + MY(type) = "spark"; \ + MY(velocityjitter) = '1000.0 1000.0 1500.0'; \ + MY(velocitymultiplier) = 0.500000; \ + } \ + SUB(name##_cap) { \ + MY(alpha_min) = 190; \ + MY(alpha_max) = 190; \ + MY(alpha_fade) = 180; \ + MY(color_min) = colormin; \ + MY(color_max) = colormax; \ + MY(countabsolute) = 1; \ + MY(sizeincrease) = -80; \ + MY(size_min) = 150; \ + MY(size_max) = 150; \ + MY(tex_min) = 65; \ + MY(tex_max) = 65; \ + MY(type) = "smoke"; \ + } \ + /**/ + +cap(red, "0xFF0000", "0x970000") +cap(blue, "0x0000FF", "0x000097") +cap(yellow, "0xFFFF0F", "0xFFFF0F") +cap(pink, "0xFF0FFF", "0xFF0FFF") +#undef cap diff --git a/qcsrc/common/effects/effectinfo_gentle.inc b/qcsrc/common/effects/effectinfo_gentle.inc new file mode 100644 index 0000000000..aef166427b --- /dev/null +++ b/qcsrc/common/effects/effectinfo_gentle.inc @@ -0,0 +1,121 @@ +// cl_gentle impact effect indicating damage +// NOTE: maintained by div0, make your own new effect instead of changing this one without asking! +DEF(damage_hit); +SUB(damage_hit) { + MY(airfriction) = 5; + MY(alpha_min) = 128; + MY(alpha_max) = 128; + MY(alpha_fade) = 192; + MY(bounce) = 1.500000; + MY(color_min) = "0x00FFFF"; + MY(color_max) = "0xFF00FF"; + MY(count) = 0.500000; + MY(gravity) = -0.400000; + MY(liquidfriction) = 10; + MY(sizeincrease) = -24; + MY(size_min) = 16; + MY(size_max) = 16; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "alphastatic"; + MY(velocityjitter) = '256.0 256.0 256.0'; +} +SUB(damage_hit) { + MY(airfriction) = 5; + MY(alpha_min) = 128; + MY(alpha_max) = 128; + MY(alpha_fade) = 192; + MY(bounce) = 1.500000; + MY(color_min) = "0xFF00FF"; + MY(color_max) = "0xFFFF00"; + MY(count) = 0.500000; + MY(gravity) = -0.400000; + MY(liquidfriction) = 10; + MY(sizeincrease) = -24; + MY(size_min) = 16; + MY(size_max) = 16; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "alphastatic"; + MY(velocityjitter) = '256.0 256.0 256.0'; +} +SUB(damage_hit) { + MY(airfriction) = 5; + MY(alpha_min) = 128; + MY(alpha_max) = 128; + MY(alpha_fade) = 192; + MY(bounce) = 1.500000; + MY(color_min) = "0xFFFF00"; + MY(color_max) = "0x00FFFF"; + MY(count) = 0.500000; + MY(gravity) = -0.400000; + MY(liquidfriction) = 10; + MY(sizeincrease) = -24; + MY(size_min) = 16; + MY(size_max) = 16; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "alphastatic"; + MY(velocityjitter) = '256.0 256.0 256.0'; +} + +// effect for removing player model +DEF(damage_dissolve); +// large sparks +SUB(damage_dissolve) { + MY(airfriction) = 3; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 128; + MY(bounce) = 1.500000; + MY(color_min) = "0x00FFFF"; + MY(color_max) = "0xFF00FF"; + MY(count) = 15; + MY(gravity) = -0.400000; + MY(liquidfriction) = 6; + MY(sizeincrease) = -16; + MY(size_min) = 32; + MY(size_max) = 32; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "alphastatic"; + MY(velocityjitter) = '512.0 512.0 512.0'; +} +SUB(damage_dissolve) { + MY(airfriction) = 3; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 128; + MY(bounce) = 1.500000; + MY(color_min) = "0xFF00FF"; + MY(color_max) = "0xFFFF00"; + MY(count) = 15; + MY(gravity) = -0.400000; + MY(liquidfriction) = 6; + MY(sizeincrease) = -16; + MY(size_min) = 32; + MY(size_max) = 32; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "alphastatic"; + MY(velocityjitter) = '512.0 512.0 512.0'; +} +SUB(damage_dissolve) { + MY(airfriction) = 3; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 128; + MY(bounce) = 1.500000; + MY(color_min) = "0xFFFF00"; + MY(color_max) = "0x00FFFF"; + MY(count) = 15; + MY(gravity) = -0.400000; + MY(liquidfriction) = 6; + MY(sizeincrease) = -16; + MY(size_min) = 32; + MY(size_max) = 32; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "alphastatic"; + MY(velocityjitter) = '512.0 512.0 512.0'; +} diff --git a/qcsrc/common/effects/effectinfo_gentle_happy.inc b/qcsrc/common/effects/effectinfo_gentle_happy.inc new file mode 100644 index 0000000000..4afbe00420 --- /dev/null +++ b/qcsrc/common/effects/effectinfo_gentle_happy.inc @@ -0,0 +1,119 @@ +// happy death fx for cl_gentle +DEF(happy_damage_dissolve); +SUB(happy_damage_dissolve) { + MY(airfriction) = 3; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 228; + MY(bounce) = 1.500000; + MY(color_min) = "0x00FFFF"; + MY(color_max) = "0xFF00FF"; + MY(count) = 15; + MY(gravity) = -0.400000; + MY(liquidfriction) = 6; + MY(sizeincrease) = -10; + MY(size_min) = 32; + MY(size_max) = 32; + MY(tex_min) = 69; + MY(tex_max) = 69; + MY(type) = "alphastatic"; + MY(velocityjitter) = '312.0 312.0 312.0'; +} +SUB(happy_damage_dissolve) { + MY(airfriction) = 3; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 228; + MY(bounce) = 1.500000; + MY(color_min) = "0xFF00FF"; + MY(color_max) = "0xFFFF00"; + MY(count) = 15; + MY(gravity) = -0.400000; + MY(liquidfriction) = 6; + MY(sizeincrease) = -10; + MY(size_min) = 32; + MY(size_max) = 32; + MY(tex_min) = 69; + MY(tex_max) = 69; + MY(type) = "alphastatic"; + MY(velocityjitter) = '312.0 312.0 312.0'; +} +SUB(happy_damage_dissolve) { + MY(airfriction) = 3; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 228; + MY(bounce) = 1.500000; + MY(color_min) = "0xFFFF00"; + MY(color_max) = "0x00FFFF"; + MY(count) = 15; + MY(gravity) = -0.400000; + MY(liquidfriction) = 6; + MY(sizeincrease) = -10; + MY(size_min) = 32; + MY(size_max) = 32; + MY(tex_min) = 69; + MY(tex_max) = 69; + MY(type) = "alphastatic"; + MY(velocityjitter) = '312.0 312.0 312.0'; +} + +// happy damage fx for cl_gentle +DEF(happy_damage_hit); +SUB(happy_damage_hit) { + MY(airfriction) = 5; + MY(alpha_min) = 128; + MY(alpha_max) = 128; + MY(alpha_fade) = 192; + MY(bounce) = 1.500000; + MY(color_min) = "0x00FFFF"; + MY(color_max) = "0xFF00FF"; + MY(count) = 0.100000; + MY(gravity) = -0.400000; + MY(liquidfriction) = 10; + MY(sizeincrease) = -28; + MY(size_min) = 26; + MY(size_max) = 26; + MY(tex_min) = 69; + MY(tex_max) = 69; + MY(type) = "alphastatic"; + MY(velocityjitter) = '156.0 156.0 156.0'; +} +SUB(happy_damage_hit) { + MY(airfriction) = 5; + MY(alpha_min) = 128; + MY(alpha_max) = 128; + MY(alpha_fade) = 192; + MY(bounce) = 1.500000; + MY(color_min) = "0xFF00FF"; + MY(color_max) = "0xFFFF00"; + MY(count) = 0.100000; + MY(gravity) = -0.400000; + MY(liquidfriction) = 10; + MY(sizeincrease) = -28; + MY(size_min) = 26; + MY(size_max) = 26; + MY(tex_min) = 69; + MY(tex_max) = 69; + MY(type) = "alphastatic"; + MY(velocityjitter) = '156.0 156.0 156.0'; +} +SUB(happy_damage_hit) { + MY(airfriction) = 5; + MY(alpha_min) = 128; + MY(alpha_max) = 128; + MY(alpha_fade) = 192; + MY(bounce) = 1.500000; + MY(color_min) = "0xFFFF00"; + MY(color_max) = "0x00FFFF"; + MY(count) = 0.100000; + MY(gravity) = -0.400000; + MY(liquidfriction) = 10; + MY(sizeincrease) = -28; + MY(size_min) = 26; + MY(size_max) = 26; + MY(tex_min) = 69; + MY(tex_max) = 69; + MY(type) = "alphastatic"; + MY(velocityjitter) = '156.0 156.0 156.0'; +} diff --git a/qcsrc/common/effects/effectinfo_gentle_morphed.inc b/qcsrc/common/effects/effectinfo_gentle_morphed.inc new file mode 100644 index 0000000000..c334912fd1 --- /dev/null +++ b/qcsrc/common/effects/effectinfo_gentle_morphed.inc @@ -0,0 +1,121 @@ +// cl_gentle impact effect indicating damage +DEF(morphed_damage_hit); +SUB(morphed_damage_hit) { + MY(airfriction) = 5; + MY(alpha_min) = 128; + MY(alpha_max) = 128; + MY(alpha_fade) = 292; + MY(color_min) = "0xffffff"; + MY(color_max) = "0x9271fb"; + MY(count) = 0.500000; + MY(gravity) = -0.400000; + MY(liquidfriction) = 10; + MY(sizeincrease) = -24; + MY(size_min) = 14; + MY(size_max) = 24; + MY(tex_min) = 43; + MY(tex_max) = 43; + MY(type) = "spark"; + MY(velocityjitter) = '356.0 356.0 456.0'; +} +SUB(morphed_damage_hit) { + MY(airfriction) = 5; + MY(alpha_min) = 128; + MY(alpha_max) = 128; + MY(alpha_fade) = 292; + MY(color_min) = "0xffffff"; + MY(color_max) = "0x9271fb"; + MY(count) = 0.500000; + MY(liquidfriction) = 10; + MY(originjitter) = '10.0 10.0 10.0'; + MY(sizeincrease) = -24; + MY(size_min) = 24; + MY(size_max) = 24; + MY(tex_max) = 8; + MY(type) = "smoke"; +} + +// effect for removing player model +DEF(morphed_damage_dissolve); +SUB(morphed_damage_dissolve) { + MY(airfriction) = 8; + MY(alpha_min) = 456; + MY(alpha_max) = 456; + MY(alpha_fade) = 1828; + MY(color_min) = "0xffffff"; + MY(color_max) = "0x9271fb"; + MY(count) = 10; + MY(gravity) = -1.900000; + MY(liquidfriction) = 6; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = -399; + MY(spin_max) = -99; + MY(sizeincrease) = -16; + MY(size_min) = 40; + MY(size_max) = 40; + MY(tex_min) = 43; + MY(tex_max) = 43; + MY(type) = "smoke"; + MY(velocityjitter) = '256.0 256.0 512.0'; +} +SUB(morphed_damage_dissolve) { + MY(airfriction) = 9; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 628; + MY(color_min) = "0x7bdbff"; + MY(color_max) = "0xbed2ff"; + MY(count) = 2.500000; + MY(gravity) = -0.800000; + MY(liquidfriction) = 6; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(sizeincrease) = -16; + MY(size_min) = 40; + MY(size_max) = 40; + MY(tex_min) = 43; + MY(tex_max) = 43; + MY(type) = "smoke"; + MY(velocityjitter) = '256.0 256.0 512.0'; +} +SUB(morphed_damage_dissolve) { + MY(airfriction) = 3; + MY(alpha_min) = 156; + MY(alpha_max) = 156; + MY(alpha_fade) = 128; + MY(color_min) = "0xffffff"; + MY(color_max) = "0x9271fb"; + MY(count) = 5; + MY(liquidfriction) = 6; + MY(originjitter) = '22.0 22.0 76.0'; + MY(sizeincrease) = -16; + MY(size_min) = 44; + MY(size_max) = 44; + MY(tex_min) = 65; + MY(tex_max) = 65; + MY(type) = "smoke"; +} +SUB(morphed_damage_dissolve) { + MY(airfriction) = 3; + MY(alpha_min) = 56; + MY(alpha_max) = 56; + MY(alpha_fade) = 128; + MY(bounce) = 1.500000; + MY(color_min) = "0xffffff"; + MY(color_max) = "0x9271fb"; + MY(count) = 15; + MY(gravity) = 1; + MY(liquidfriction) = 6; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = 999; + MY(spin_max) = -999; + MY(sizeincrease) = -16; + MY(size_min) = 32; + MY(size_max) = 32; + MY(tex_min) = 46; + MY(tex_max) = 46; + MY(type) = "smoke"; + MY(velocityjitter) = '400.0 400.0 0.0'; +} diff --git a/qcsrc/common/effects/effectinfo_gentle_particlegibs.inc b/qcsrc/common/effects/effectinfo_gentle_particlegibs.inc new file mode 100644 index 0000000000..f01c175140 --- /dev/null +++ b/qcsrc/common/effects/effectinfo_gentle_particlegibs.inc @@ -0,0 +1,199 @@ +// cl_gentle impact effect indicating damage +DEF(particlegibs_damage_hit); +// core decal +SUB(particlegibs_damage_hit) { + MY(airfriction) = 3; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 428; + MY(bounce) = -1; + MY(color_min) = "0xA8FFFF"; + MY(color_max) = "0xA8FFFFF"; + MY(count) = 0.500000; + MY(gravity) = 1; + MY(liquidfriction) = 6; + MY(size_min) = 5; + MY(size_max) = 10; + MY(staincolor_min) = "0x808080"; + MY(staincolor_max) = "0x808080"; + MY(staintex_min) = 16; + MY(staintex_max) = 24; + MY(tex_max) = 8; + MY(type) = "blood"; + MY(velocityjitter) = '156.0 156.0 212.0'; +} +// front blood +SUB(particlegibs_damage_hit) { + MY(airfriction) = 1; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 328; + MY(bounce) = -1; + MY(color_min) = "0xA8FFFF"; + MY(color_max) = "0xA8FFFFF"; + MY(count) = 0.100000; + MY(gravity) = 0.500000; + MY(liquidfriction) = 3; + MY(sizeincrease) = -15; + MY(size_min) = 10; + MY(size_max) = 20; + MY(staincolor_min) = "0x808080"; + MY(staincolor_max) = "0x808080"; + MY(staintex_min) = 16; + MY(staintex_max) = 24; + MY(tex_min) = 24; + MY(tex_max) = 32; + MY(type) = "blood"; + MY(velocityjitter) = '6.0 6.0 30.0'; + MY(velocitymultiplier) = -1; +} +// back blood +SUB(particlegibs_damage_hit) { + MY(airfriction) = 1; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 328; + MY(bounce) = -1; + MY(color_min) = "0xA8FFFF"; + MY(color_max) = "0xA8FFFFF"; + MY(count) = 0.100000; + MY(gravity) = 1; + MY(liquidfriction) = 3; + MY(originjitter) = '3.0 3.0 3.0'; + MY(sizeincrease) = 10; + MY(size_min) = 5; + MY(size_max) = 15; + MY(staincolor_min) = "0x808080"; + MY(staincolor_max) = "0x808080"; + MY(staintex_min) = 16; + MY(staintex_max) = 24; + MY(tex_min) = 24; + MY(tex_max) = 32; + MY(type) = "blood"; + MY(velocityjitter) = '26.0 26.0 112.0'; + MY(velocitymultiplier) = 2; +} + +// effect for removing player model +DEF(particlegibs_damage_dissolve); +// small core blood no decals +SUB(particlegibs_damage_dissolve) { + MY(airfriction) = 3; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 328; + MY(color_min) = "0x00ffff"; + MY(color_max) = "0x82ffff"; + MY(count) = 32; + MY(gravity) = 1; + MY(liquidfriction) = 6; + MY(originjitter) = '10.0 10.0 25.0'; + MY(size_min) = 15; + MY(size_max) = 20; + MY(staincolor_min) = "0x808080"; + MY(staincolor_max) = "0x808080"; + MY(staintex_min) = 16; + MY(staintex_max) = 24; + MY(tex_max) = 8; + MY(type) = "blood"; + MY(velocityjitter) = '256.0 256.0 312.0'; +} +// core decal +SUB(particlegibs_damage_dissolve) { + MY(airfriction) = 2; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 528; + MY(bounce) = -1; + MY(color_min) = "0xA8FFFF"; + MY(color_max) = "0xA8FFFFF"; + MY(count) = 12; + MY(gravity) = 2; + MY(liquidfriction) = 6; + MY(originjitter) = '10.0 10.0 25.0'; + MY(size_min) = 20; + MY(size_max) = 40; + MY(staincolor_min) = "0x808080"; + MY(staincolor_max) = "0x808080"; + MY(staintex_min) = 16; + MY(staintex_max) = 24; + MY(tex_max) = 8; + MY(type) = "blood"; + MY(velocityjitter) = '356.0 356.0 412.0'; +} +// front blood +SUB(particlegibs_damage_dissolve) { + MY(airfriction) = 1; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 328; + MY(bounce) = -1; + MY(color_min) = "0xA8FFFF"; + MY(color_max) = "0xA8FFFFF"; + MY(count) = 32; + MY(gravity) = 0.500000; + MY(liquidfriction) = 3; + MY(originjitter) = '5.0 5.0 10.0'; + MY(sizeincrease) = -15; + MY(size_min) = 10; + MY(size_max) = 20; + MY(staincolor_min) = "0x808080"; + MY(staincolor_max) = "0x808080"; + MY(staintex_min) = 16; + MY(staintex_max) = 24; + MY(tex_min) = 24; + MY(tex_max) = 32; + MY(type) = "blood"; + MY(velocityjitter) = '56.0 56.0 212.0'; + MY(velocitymultiplier) = -0.300000; +} +// back blood +SUB(particlegibs_damage_dissolve) { + MY(airfriction) = 1; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 328; + MY(bounce) = -1; + MY(color_min) = "0xA8FFFF"; + MY(color_max) = "0xA8FFFFF"; + MY(count) = 32; + MY(gravity) = 1; + MY(liquidfriction) = 3; + MY(originjitter) = '5.0 5.0 10.0'; + MY(sizeincrease) = 10; + MY(size_min) = 5; + MY(size_max) = 15; + MY(staincolor_min) = "0x808080"; + MY(staincolor_max) = "0x808080"; + MY(staintex_min) = 16; + MY(staintex_max) = 24; + MY(tex_min) = 24; + MY(tex_max) = 32; + MY(type) = "blood"; + MY(velocityjitter) = '56.0 56.0 212.0'; + MY(velocitymultiplier) = 0.500000; +} +// small bits +SUB(particlegibs_damage_dissolve) { + MY(airfriction) = 1.500000; + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(alpha_fade) = 328; + MY(color_min) = "0xA8FFFF"; + MY(color_max) = "0xA8FFFFF"; + MY(count) = 75; + MY(gravity) = 1; + MY(liquidfriction) = 3; + MY(originjitter) = '10.0 10.0 25.0'; + MY(sizeincrease) = 10; + MY(size_min) = 1; + MY(size_max) = 1; + MY(staincolor_min) = "0x808080"; + MY(staincolor_max) = "0x808080"; + MY(staintex_min) = 16; + MY(staintex_max) = 24; + MY(tex_min) = 24; + MY(tex_max) = 32; + MY(type) = "blood"; + MY(velocityjitter) = '656.0 656.0 912.0'; +} diff --git a/qcsrc/common/effects/effectinfo_instagib.inc b/qcsrc/common/effects/effectinfo_instagib.inc new file mode 100644 index 0000000000..044f252c8b --- /dev/null +++ b/qcsrc/common/effects/effectinfo_instagib.inc @@ -0,0 +1,46 @@ +#define rocketminsta_laser(name, color) \ + DEF(rocketminsta_laser_##name); \ + SUB(rocketminsta_laser_##name) { \ + MY(alpha_min) = 256; \ + MY(alpha_max) = 256; \ + MY(alpha_fade) = 968; \ + MY(color_min) = color; \ + MY(color_max) = color; \ + MY(lightcolor) = '1.5 3.0 6.0'; \ + MY(lightradius) = 90; \ + MY(size_min) = 3; \ + MY(size_max) = 3; \ + MY(tex_min) = 38; \ + MY(tex_max) = 38; \ + MY(trailspacing) = 2; \ + MY(type) = "static"; \ + MY(velocitymultiplier) = -0.100000; \ + } \ + SUB(rocketminsta_laser_##name) /* bright sparks */ { \ + MY(airfriction) = 12; \ + MY(alpha_min) = 444; \ + MY(alpha_max) = 512; \ + MY(alpha_fade) = 1866; \ + MY(bounce) = 1; \ + MY(color_min) = color; \ + MY(color_max) = color; \ + MY(count) = 1.500000; \ + MY(originjitter) = '1.0 1.0 1.0'; \ + MY(sizeincrease) = -20; \ + MY(size_min) = 2; \ + MY(size_max) = 4; \ + MY(tex_min) = 42; \ + MY(tex_max) = 42; \ + MY(trailspacing) = 12; \ + MY(type) = "snow"; \ + MY(velocityjitter) = '50.0 50.0 50.0'; \ + MY(velocityoffset) = '0.0 0.0 15.0'; \ + } \ + /**/ + +rocketminsta_laser(red, "0xFF0F0F") +rocketminsta_laser(blue, "0x0F0FFF") +rocketminsta_laser(yellow, "0xFFFF0F") +rocketminsta_laser(pink, "0xFF0FFF") +rocketminsta_laser(neutral, "0xFFFFFF") +#undef rocketminsta_laser diff --git a/qcsrc/common/effects/effectinfo_nades.inc b/qcsrc/common/effects/effectinfo_nades.inc new file mode 100644 index 0000000000..9c655579a4 --- /dev/null +++ b/qcsrc/common/effects/effectinfo_nades.inc @@ -0,0 +1,316 @@ +#define nade(name, colormin1, colormax1, colormin2, colormax2) \ + DEF(nade_##name); \ + SUB(nade_##name) { \ + MY(alpha_min) = 100; \ + MY(alpha_max) = 100; \ + MY(alpha_fade) = 250; \ + MY(color_min) = colormin1; \ + MY(color_max) = colormax1; \ + MY(sizeincrease) = -1; \ + MY(size_min) = 3; \ + MY(size_max) = 3; \ + MY(tex_min) = 65; \ + MY(tex_max) = 65; \ + MY(trailspacing) = 1; \ + MY(type) = "smoke"; \ + } \ + SUB(nade_##name) /* fire */ { \ + MY(alpha_min) = 30; \ + MY(alpha_max) = 30; \ + MY(alpha_fade) = 150; \ + MY(color_min) = colormin2; \ + MY(color_max) = colormax2; \ + MY(notunderwater) = true; \ + MY(sizeincrease) = -10; \ + MY(size_min) = 15; \ + MY(size_max) = 25; \ + MY(tex_min) = 65; \ + MY(tex_max) = 65; \ + MY(trailspacing) = 8; \ + MY(type) = "smoke"; \ + } \ + SUB(nade_##name) /* bubbles */ { \ + MY(alpha_min) = 256; \ + MY(alpha_max) = 256; \ + MY(alpha_fade) = 256; \ + MY(bounce) = 1.500000; \ + MY(color_min) = colormin1; \ + MY(color_max) = colormax1; \ + MY(gravity) = -0.125000; \ + MY(liquidfriction) = 4; \ + MY(size_min) = 1; \ + MY(size_max) = 1; \ + MY(tex_min) = 62; \ + MY(tex_max) = 62; \ + MY(trailspacing) = 16; \ + MY(type) = "bubble"; \ + MY(underwater) = true; \ + MY(velocityjitter) = '16.0 16.0 16.0'; \ + } \ + /**/ + +nade(blue, "0x006cff", "0x0600ff", "0x0600ff", "0x9794ff") +nade(red, "0xff0000", "0xff3c00", "0xff0000", "0xffa2a2") +nade(yellow, "0xFFFF0F", "0xFFFF0F", "0xFFFF0F", "0xFFFF0F") +nade(pink, "0xFF0FFF", "0xFF0FFF", "0xFF0FFF", "0xFF0FFF") +nade(neutral, "0xFFFFFF", "0xFFFFFF", "0xFFFFFF", "0xFFFFFF") +#undef nade + +#define nade_burn(name, colormin1, colormax1, colormin2, colormax2) \ + DEF(nade_##name##_burn); \ + SUB(nade_##name##_burn) { \ + MY(alpha_min) = 100; \ + MY(alpha_max) = 100; \ + MY(alpha_fade) = 250; \ + MY(color_min) = colormin1; \ + MY(color_max) = colormax1; \ + MY(sizeincrease) = -1; \ + MY(size_min) = 5; \ + MY(size_max) = 5; \ + MY(tex_min) = 65; \ + MY(tex_max) = 65; \ + MY(trailspacing) = 1; \ + MY(type) = "smoke"; \ + } \ + SUB(nade_##name##_burn) /* fire */ { \ + MY(alpha_min) = 200; \ + MY(alpha_max) = 200; \ + MY(alpha_fade) = 1000; \ + MY(color_min) = colormin2; \ + MY(color_max) = colormax2; \ + MY(notunderwater) = true; \ + MY(sizeincrease) = -30; \ + MY(size_min) = 45; \ + MY(size_max) = 25; \ + MY(tex_min) = 65; \ + MY(tex_max) = 65; \ + MY(trailspacing) = 64; \ + MY(type) = "smoke"; \ + } \ + SUB(nade_##name##_burn) /* bubbles */ { \ + MY(alpha_min) = 256; \ + MY(alpha_max) = 256; \ + MY(alpha_fade) = 256; \ + MY(bounce) = 1.500000; \ + MY(color_min) = colormin1; \ + MY(color_max) = colormax1; \ + MY(gravity) = -0.125000; \ + MY(liquidfriction) = 4; \ + MY(size_min) = 1; \ + MY(size_max) = 1; \ + MY(tex_min) = 62; \ + MY(tex_max) = 62; \ + MY(trailspacing) = 16; \ + MY(type) = "bubble"; \ + MY(underwater) = true; \ + MY(velocityjitter) = '16.0 16.0 16.0'; \ + } \ + SUB(nade_##name##_burn) { \ + MY(alpha_min) = 300; \ + MY(alpha_max) = 900; \ + MY(alpha_fade) = 1500; \ + MY(color_min) = colormin1; \ + MY(color_max) = colormax1; \ + MY(originjitter) = '2.0 2.0 2.0'; \ + MY(startangle_min) = -180; \ + MY(startangle_max) = 180; \ + MY(spin_min) = 20; \ + MY(spin_max) = -20; \ + MY(sizeincrease) = -40; \ + MY(size_min) = 15; \ + MY(size_max) = 25; \ + MY(tex_min) = 71; \ + MY(tex_max) = 73; \ + MY(trailspacing) = 16; \ + MY(type) = "smoke"; \ + MY(velocityjitter) = '10.0 10.0 10.0'; \ + } \ + /**/ + +nade_burn(red, "0xff0000", "0xff3c00", "0xff0000", "0xffa2a2") +nade_burn(blue, "0x006cff", "0x0600ff", "0x0600ff", "0x9794ff") +nade_burn(yellow, "0xFFFF0F", "0xFFFF0F", "0xFFFF0F", "0xFFFF0F") +nade_burn(pink, "0xFF0FFF", "0xFF0FFF", "0xFF0FFF", "0xFF0FFF") +nade_burn(neutral, "0xFFFFFF", "0xFFFFFF", "0xFFFFFF", "0xFFFFFF") +#undef nade_burn + +#define nade_explode(name, colorlight, colormin1, colormax1, colormin2, colormax2, colormin3, colormax3) \ + DEF(nade_##name##_explode); \ + SUB(nade_##name##_explode) { \ + MY(alpha_min) = 256; \ + MY(alpha_max) = 256; \ + MY(countabsolute) = 1; \ + MY(lightcolor) = colorlight; \ + MY(lightradiusfade) = 1500; \ + MY(lightradius) = 300; \ + MY(originjitter) = '26.0 26.0 26.0'; \ + MY(size_min) = 88; \ + MY(size_max) = 88; \ + MY(tex_min) = 8; \ + MY(tex_max) = 16; \ + MY(type) = "decal"; \ + } \ + SUB(nade_##name##_explode) /* shockwave */ { \ + MY(alpha_min) = 80; \ + MY(alpha_max) = 80; \ + MY(alpha_fade) = 650; \ + MY(color_min) = colormin1; \ + MY(color_max) = colormax1; \ + MY(countabsolute) = 1; \ + MY(sizeincrease) = 1800; \ + MY(size_min) = 32; \ + MY(size_max) = 32; \ + MY(tex_min) = 33; \ + MY(tex_max) = 33; \ + MY(type) = "smoke"; \ + MY(velocitymultiplier) = 44; \ + } \ + SUB(nade_##name##_explode) /* fire */ { \ + MY(airfriction) = 30; \ + MY(alpha_min) = 400; \ + MY(alpha_max) = 656; \ + MY(alpha_fade) = 2000; \ + MY(color_min) = colormin2; \ + MY(color_max) = colormax2; \ + MY(count) = 16; \ + MY(notunderwater) = true; \ + MY(originjitter) = '50.0 50.0 50.0'; \ + MY(startangle_min) = -180; \ + MY(startangle_max) = 180; \ + MY(spin_min) = -9; \ + MY(spin_max) = 9; \ + MY(sizeincrease) = 555; \ + MY(size_min) = 20; \ + MY(size_max) = 24; \ + MY(tex_min) = 48; \ + MY(tex_max) = 55; \ + MY(type) = "smoke"; \ + MY(velocityjitter) = '320.0 320.0 320.0'; \ + } \ + SUB(nade_##name##_explode) /* fire stretched */ { \ + MY(airfriction) = -9; \ + MY(alpha_min) = 1500; \ + MY(alpha_max) = 3000; \ + MY(alpha_fade) = 13000; \ + MY(color_min) = colormin2; \ + MY(color_max) = colormax2; \ + MY(count) = 8; \ + MY(sizeincrease) = 40; \ + MY(size_min) = 60; \ + MY(size_max) = 90; \ + MY(stretchfactor) = 80; \ + MY(tex_min) = 48; \ + MY(tex_max) = 55; \ + MY(type) = "spark"; \ + MY(velocityjitter) = '30.0 30.0 30.0'; \ + } \ + SUB(nade_##name##_explode) /* smoke */ { \ + MY(airfriction) = 0.040000; \ + MY(alpha_min) = 128; \ + MY(alpha_max) = 328; \ + MY(alpha_fade) = 390; \ + MY(blend) = "alpha"; \ + MY(color_min) = "0x222222"; \ + MY(color_max) = "0x000000"; \ + MY(count) = 32; \ + MY(gravity) = 0.400000; \ + MY(originjitter) = '50.0 50.0 10.0'; \ + MY(startangle_min) = -180; \ + MY(startangle_max) = 180; \ + MY(spin_min) = 2; \ + MY(spin_max) = -2; \ + MY(sizeincrease) = 50; \ + MY(size_min) = 60; \ + MY(size_max) = 30; \ + MY(tex_max) = 7; \ + MY(type) = "smoke"; \ + MY(velocityjitter) = '200.0 200.0 200.0'; \ + MY(velocityoffset) = '0.0 0.0 180.0'; \ + } \ + SUB(nade_##name##_explode) /* underwater bubbles */ { \ + MY(alpha_min) = 128; \ + MY(alpha_max) = 256; \ + MY(alpha_fade) = 64; \ + MY(bounce) = 1.500000; \ + MY(color_min) = "0x404040"; \ + MY(color_max) = "0x808080"; \ + MY(count) = 32; \ + MY(gravity) = -0.125000; \ + MY(liquidfriction) = 0.250000; \ + MY(originjitter) = '16.0 16.0 16.0'; \ + MY(size_min) = 3; \ + MY(size_max) = 6; \ + MY(tex_min) = 62; \ + MY(tex_max) = 62; \ + MY(type) = "bubble"; \ + MY(underwater) = true; \ + MY(velocityjitter) = '196.0 196.0 196.0'; \ + } \ + SUB(nade_##name##_explode) /* bouncing sparks */ { \ + MY(airfriction) = 1; \ + MY(alpha_min) = 644; \ + MY(alpha_max) = 956; \ + MY(alpha_fade) = 484; \ + MY(bounce) = 1.600000; \ + MY(color_min) = colormin3; \ + MY(color_max) = colormax3; \ + MY(count) = 8; \ + MY(gravity) = 1; \ + MY(liquidfriction) = 0.800000; \ + MY(notunderwater) = true; \ + MY(originjitter) = '16.0 16.0 16.0'; \ + MY(size_min) = 1; \ + MY(size_max) = 2; \ + MY(tex_min) = 40; \ + MY(tex_max) = 40; \ + MY(type) = "spark"; \ + MY(velocityjitter) = '424.0 424.0 624.0'; \ + MY(velocityoffset) = '0.0 0.0 80.0'; \ + } \ + SUB(nade_##name##_explode) /* notbouncing sparks */ { \ + MY(airfriction) = 0.700000; \ + MY(alpha_min) = 644; \ + MY(alpha_max) = 956; \ + MY(alpha_fade) = 684; \ + MY(color_min) = colormin3; \ + MY(color_max) = colormax3; \ + MY(count) = 16; \ + MY(gravity) = 0.500000; \ + MY(liquidfriction) = 0.800000; \ + MY(originjitter) = '16.0 16.0 16.0'; \ + MY(size_min) = 1; \ + MY(size_max) = 2; \ + MY(tex_min) = 40; \ + MY(tex_max) = 40; \ + MY(type) = "spark"; \ + MY(velocityjitter) = '424.0 424.0 624.0'; \ + MY(velocityoffset) = '0.0 0.0 80.0'; \ + } \ + SUB(nade_##name##_explode) /* debris */ { \ + MY(alpha_min) = 644; \ + MY(alpha_max) = 956; \ + MY(alpha_fade) = 2500; \ + MY(color_min) = colormin3; \ + MY(color_max) = colormax3; \ + MY(count) = 8; \ + MY(notunderwater) = true; \ + MY(originjitter) = '64.0 64.0 64.0'; \ + MY(startangle_min) = -180; \ + MY(startangle_max) = 180; \ + MY(spin_min) = -100; \ + MY(spin_max) = 100; \ + MY(size_min) = 20; \ + MY(size_max) = 40; \ + MY(tex_min) = 71; \ + MY(tex_max) = 73; \ + MY(type) = "smoke"; \ + MY(velocityjitter) = '324.0 324.0 324.0'; \ + } \ + /**/ + +nade_explode(blue, '20.0 20.0 100.0', "0x80C0FF", "0x80C0FF", "0x629dff", "0x0018ff", "0x006cff", "0x0600ff") +nade_explode(red, '100.0 20.0 20.0', "0xff0000", "0xffa2a2", "0xff0000", "0xff4200", "0xff0000", "0xffa2a2") +nade_explode(yellow, '100.0 20.0 20.0', "0xff0000", "0xffa2a2", "0xFFFF0F", "0xFFFF0F", "0xff0000", "0xffa2a2") +nade_explode(pink, '100.0 20.0 20.0', "0xff0000", "0xffa2a2", "0xFF0FFF", "0xFF0FFF", "0xff0000", "0xffa2a2") +nade_explode(neutral, '100.0 20.0 20.0', "0xff0000", "0xffa2a2", "0xFFFFFF", "0xFFFFFF", "0xff0000", "0xffa2a2") +#undef nade_explode diff --git a/qcsrc/common/effects/effectinfo_onslaught.inc b/qcsrc/common/effects/effectinfo_onslaught.inc new file mode 100644 index 0000000000..af330c7c62 --- /dev/null +++ b/qcsrc/common/effects/effectinfo_onslaught.inc @@ -0,0 +1,123 @@ +DEF(onslaught_generator_gib_explode); +// fire effect which expands then slows +SUB(onslaught_generator_gib_explode) { + MY(airfriction) = 5; + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 356; + MY(bounce) = 1.500000; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 17; + MY(liquidfriction) = 8; + MY(notunderwater) = true; + MY(originjitter) = '8.0 8.0 8.0'; + MY(sizeincrease) = 45; + MY(size_min) = 20; + MY(size_max) = 26; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "static"; + MY(velocityjitter) = '286.0 286.0 286.0'; +} +// smoke +SUB(onslaught_generator_gib_explode) { + MY(airfriction) = 5; + MY(alpha_min) = 200; + MY(alpha_max) = 500; + MY(alpha_fade) = 600; + MY(bounce) = 2; + MY(color_min) = "0x000000"; + MY(color_max) = "0x111111"; + MY(count) = 6; + MY(gravity) = -0.300000; + MY(notunderwater) = true; + MY(sizeincrease) = 90; + MY(size_min) = 1; + MY(size_max) = 10; + MY(tex_max) = 8; + MY(type) = "alphastatic"; + MY(velocityjitter) = '244.0 244.0 244.0'; +} +// underwater bubbles +SUB(onslaught_generator_gib_explode) { + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 64; + MY(bounce) = 1.500000; + MY(color_min) = "0x404040"; + MY(color_max) = "0x808080"; + MY(count) = 16; + MY(gravity) = -0.125000; + MY(liquidfriction) = 0.250000; + MY(originjitter) = '16.0 16.0 16.0'; + MY(size_min) = 3; + MY(size_max) = 3; + MY(tex_min) = 62; + MY(tex_max) = 62; + MY(type) = "bubble"; + MY(underwater) = true; + MY(velocityjitter) = '96.0 96.0 96.0'; +} + +DEF(onslaught_generator_gib_flame); +// fire effect which expands then slows +SUB(onslaught_generator_gib_flame) { + MY(airfriction) = 5; + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 356; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 15; + MY(gravity) = -0.500000; + MY(liquidfriction) = 8; + MY(notunderwater) = true; + MY(originjitter) = '3.0 3.0 3.0'; + MY(sizeincrease) = 25; + MY(size_min) = 5; + MY(size_max) = 10; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "static"; + MY(velocityjitter) = '86.0 86.0 86.0'; +} +// smoke +SUB(onslaught_generator_gib_flame) { + MY(airfriction) = 5; + MY(alpha_min) = 200; + MY(alpha_max) = 500; + MY(alpha_fade) = 600; + MY(bounce) = 2; + MY(color_min) = "0x000000"; + MY(color_max) = "0x111111"; + MY(count) = 1; + MY(gravity) = -0.800000; + MY(notunderwater) = true; + MY(sizeincrease) = 30; + MY(size_min) = 10; + MY(size_max) = 20; + MY(tex_max) = 8; + MY(type) = "alphastatic"; + MY(velocityjitter) = '44.0 44.0 44.0'; +} +// underwater bubbles +SUB(onslaught_generator_gib_flame) { + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 64; + MY(bounce) = 1.500000; + MY(color_min) = "0x404040"; + MY(color_max) = "0x808080"; + MY(count) = 16; + MY(gravity) = -0.125000; + MY(liquidfriction) = 0.250000; + MY(originjitter) = '16.0 16.0 16.0'; + MY(size_min) = 3; + MY(size_max) = 3; + MY(tex_min) = 62; + MY(tex_max) = 62; + MY(type) = "bubble"; + MY(underwater) = true; + MY(velocityjitter) = '96.0 96.0 96.0'; +} diff --git a/qcsrc/common/effects/effectinfo_vehicles.inc b/qcsrc/common/effects/effectinfo_vehicles.inc new file mode 100644 index 0000000000..31fed7fc54 --- /dev/null +++ b/qcsrc/common/effects/effectinfo_vehicles.inc @@ -0,0 +1,1166 @@ +DEF(spiderbot_minigun_trail); +SUB(spiderbot_minigun_trail) { + MY(airfriction) = 1; + MY(alpha_min) = 20; + MY(alpha_max) = 50; + MY(alpha_fade) = 100; + MY(color_min) = "0xd0d0a0"; + MY(color_max) = "0xffffff"; + MY(gravity) = -0.030000; + MY(notunderwater) = true; + MY(sizeincrease) = 2; + MY(size_min) = 1; + MY(size_max) = 2; + MY(tex_max) = 8; + MY(trailspacing) = 10; + MY(type) = "smoke"; + MY(velocityjitter) = '5.0 5.0 5.0'; +} + +DEF(spiderbot_minigun_muzzleflash); +SUB(spiderbot_minigun_muzzleflash) { + MY(airfriction) = 10; + MY(alpha_min) = 256; + MY(alpha_max) = 512; + MY(alpha_fade) = 6280; + MY(color_min) = "0xff9c00"; + MY(color_max) = "0xff8400"; + MY(count) = 3; + MY(originjitter) = '2.0 2.0 2.0'; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = 4000; + MY(spin_max) = -4000; + MY(sizeincrease) = -100; + MY(size_min) = 10; + MY(size_max) = 15; + MY(stretchfactor) = 1.300000; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "spark"; + MY(velocityjitter) = '150.0 150.0 150.0'; + MY(velocitymultiplier) = 0.350000; +} +// fire +SUB(spiderbot_minigun_muzzleflash) { + MY(airfriction) = 12; + MY(alpha_min) = 256; + MY(alpha_max) = 512; + MY(alpha_fade) = 6280; + MY(color_min) = "0xff9c00"; + MY(color_max) = "0xff8400"; + MY(count) = 6; + MY(originjitter) = '2.0 2.0 2.0'; + MY(sizeincrease) = -10; + MY(size_min) = 5; + MY(size_max) = 7; + MY(stretchfactor) = 0.800000; + MY(tex_min) = 8; + MY(tex_max) = 15; + MY(type) = "spark"; + MY(velocityjitter) = '200.0 200.0 200.0'; + MY(velocitymultiplier) = 0.200000; +} +SUB(spiderbot_minigun_muzzleflash) { + MY(alpha_min) = 256; + MY(alpha_max) = 512; + MY(alpha_fade) = 6680; + MY(color_min) = "0xff9c00"; + MY(color_max) = "0xff8400"; + MY(countabsolute) = 2; + MY(lightcolor) = '3.0 3.0 0.0'; + MY(lightradiusfade) = 8000; + MY(lightradius) = 120; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = 4000; + MY(spin_max) = -4000; + MY(sizeincrease) = -100; + MY(size_min) = 32; + MY(size_max) = 32; + MY(stretchfactor) = 0.100000; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "static"; +} + +DEF(spiderbot_minigun_impact); +SUB(spiderbot_minigun_impact) { + MY(alpha_min) = 50; + MY(alpha_max) = 100; + MY(alpha_fade) = 1680; + MY(color_min) = "0xff9c00"; + MY(color_max) = "0xf6ff00"; + MY(countabsolute) = 1; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = 4000; + MY(spin_max) = -4000; + MY(sizeincrease) = -100; + MY(size_min) = 52; + MY(size_max) = 52; + MY(stretchfactor) = 0.100000; + MY(tex_min) = 65; + MY(tex_max) = 65; + MY(type) = "static"; +} +// fire +SUB(spiderbot_minigun_impact) { + MY(airfriction) = 6; + MY(alpha_min) = 256; + MY(alpha_max) = 512; + MY(alpha_fade) = 6280; + MY(color_min) = "0xff9c00"; + MY(color_max) = "0xff8400"; + MY(count) = 7; + MY(originjitter) = '2.0 2.0 2.0'; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = 4000; + MY(spin_max) = -4000; + MY(sizeincrease) = 100; + MY(size_min) = 9; + MY(size_max) = 15; + MY(stretchfactor) = 3; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "spark"; + MY(velocityjitter) = '250.0 250.0 150.0'; + MY(velocitymultiplier) = 0.200000; +} +// smoke +SUB(spiderbot_minigun_impact) { + MY(airfriction) = 10; + MY(alpha_min) = 50; + MY(alpha_max) = 50; + MY(alpha_fade) = 190; + MY(color_min) = "0xd0d0a0"; + MY(color_max) = "0xffffff"; + MY(count) = 6; + MY(gravity) = 1.300000; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(sizeincrease) = 80; + MY(size_min) = 10; + MY(size_max) = 20; + MY(tex_max) = 8; + MY(type) = "smoke"; + MY(velocityjitter) = '100.0 100.0 250.0'; + MY(velocitymultiplier) = 0.490000; +} +// smoke 2 +SUB(spiderbot_minigun_impact) { + MY(airfriction) = 6; + MY(alpha_min) = 25; + MY(alpha_max) = 51; + MY(alpha_fade) = 128; + MY(color_min) = "0xd0d0a0"; + MY(color_max) = "0xffffff"; + MY(count) = 7; + MY(originjitter) = '2.0 2.0 2.0'; + MY(sizeincrease) = 100; + MY(size_min) = 15; + MY(size_max) = 19; + MY(stretchfactor) = 7.600000; + MY(tex_max) = 8; + MY(type) = "spark"; + MY(velocityjitter) = '250.0 250.0 150.0'; + MY(velocitymultiplier) = 0.200000; +} +// debris +SUB(spiderbot_minigun_impact) { + MY(airfriction) = 0.400000; + MY(alpha_min) = 644; + MY(alpha_max) = 756; + MY(alpha_fade) = 1484; + MY(color_min) = "0x99977D"; + MY(color_max) = "0xFFFFFF"; + MY(count) = 3; + MY(gravity) = 1.100000; + MY(notunderwater) = true; + MY(originjitter) = '16.0 16.0 16.0'; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = -1000; + MY(spin_max) = 1000; + MY(sizeincrease) = -10; + MY(size_min) = 6; + MY(size_max) = 8; + MY(tex_min) = 66; + MY(tex_max) = 68; + MY(type) = "alphastatic"; + MY(velocityjitter) = '124.0 124.0 224.0'; + MY(velocitymultiplier) = 0.150000; +} +// decal +SUB(spiderbot_minigun_impact) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(countabsolute) = 1; + MY(originjitter) = '16.0 16.0 16.0'; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(size_min) = 20; + MY(size_max) = 25; + MY(tex_min) = 56; + MY(tex_max) = 59; + MY(type) = "decal"; +} + +DEF(spiderbot_rocket_explode); +SUB(spiderbot_rocket_explode) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(countabsolute) = 1; + MY(lightcolor) = '8.0 4.0 0.0'; + MY(lightradiusfade) = 1750; + MY(lightradius) = 300; + MY(originjitter) = '23.0 23.0 23.0'; + MY(size_min) = 72; + MY(size_max) = 72; + MY(tex_min) = 8; + MY(tex_max) = 16; + MY(type) = "decal"; +} +// shockwave +SUB(spiderbot_rocket_explode) { + MY(alpha_min) = 56; + MY(alpha_max) = 56; + MY(alpha_fade) = 230; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(countabsolute) = 1; + MY(sizeincrease) = 2400; + MY(size_min) = 22; + MY(size_max) = 22; + MY(tex_min) = 33; + MY(tex_max) = 33; + MY(type) = "static"; +} +// glow +SUB(spiderbot_rocket_explode) { + MY(alpha_min) = 156; + MY(alpha_max) = 156; + MY(alpha_fade) = 830; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(countabsolute) = 1; + MY(sizeincrease) = 240; + MY(size_min) = 120; + MY(size_max) = 120; + MY(tex_min) = 64; + MY(tex_max) = 64; + MY(type) = "static"; +} +// fire effect +SUB(spiderbot_rocket_explode) { + MY(airfriction) = 8; + MY(alpha_min) = 200; + MY(alpha_max) = 256; + MY(alpha_fade) = 812; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 32; + MY(liquidfriction) = 8; + MY(notunderwater) = true; + MY(originjitter) = '100.0 100.0 100.0'; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = -50; + MY(spin_max) = 50; + MY(sizeincrease) = 495; + MY(size_min) = 12; + MY(size_max) = 21; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "static"; + MY(velocityjitter) = '512.0 512.0 512.0'; +} +// fire effect 2 +SUB(spiderbot_rocket_explode) { + MY(airfriction) = -2; + MY(alpha_min) = 200; + MY(alpha_max) = 256; + MY(alpha_fade) = 912; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 16; + MY(liquidfriction) = 8; + MY(notunderwater) = true; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = -150; + MY(spin_max) = 150; + MY(sizeincrease) = 120; + MY(size_min) = 3; + MY(size_max) = 3; + MY(stretchfactor) = 10; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "spark"; + MY(velocityjitter) = '412.0 412.0 412.0'; +} +// fire rays +SUB(spiderbot_rocket_explode) { + MY(airfriction) = -3; + MY(alpha_min) = 200; + MY(alpha_max) = 256; + MY(alpha_fade) = 1600; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 10; + MY(liquidfriction) = 8; + MY(notunderwater) = true; + MY(originjitter) = '40.0 40.0 40.0'; + MY(sizeincrease) = 120; + MY(size_min) = 13; + MY(size_max) = 54; + MY(stretchfactor) = 10; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "spark"; + MY(velocityjitter) = '712.0 712.0 712.0'; +} +// smoke +SUB(spiderbot_rocket_explode) { + MY(airfriction) = 3; + MY(alpha_min) = 300; + MY(alpha_max) = 650; + MY(alpha_fade) = 756; + MY(color_min) = "0x4F4B46"; + MY(color_max) = "0x000000"; + MY(count) = 10; + MY(notunderwater) = true; + MY(originjitter) = '100.0 100.0 100.0'; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = -20; + MY(spin_max) = 20; + MY(sizeincrease) = 280; + MY(size_min) = 10; + MY(size_max) = 15; + MY(tex_max) = 8; + MY(type) = "alphastatic"; + MY(velocityjitter) = '200.0 200.0 200.0'; +} +// smoke2 +SUB(spiderbot_rocket_explode) { + MY(airfriction) = 2; + MY(alpha_min) = 300; + MY(alpha_max) = 650; + MY(alpha_fade) = 556; + MY(color_min) = "0x4F4B46"; + MY(color_max) = "0x000000"; + MY(count) = 3; + MY(gravity) = -0.500000; + MY(notunderwater) = true; + MY(originjitter) = '10.0 10.0 10.0'; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = -20; + MY(spin_max) = 20; + MY(sizeincrease) = 30; + MY(size_min) = 100; + MY(size_max) = 150; + MY(tex_max) = 8; + MY(type) = "alphastatic"; + MY(velocityjitter) = '200.0 200.0 200.0'; +} +// underwater bubbles +SUB(spiderbot_rocket_explode) { + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 64; + MY(bounce) = 1.500000; + MY(color_min) = "0x404040"; + MY(color_max) = "0x808080"; + MY(count) = 32; + MY(gravity) = -0.125000; + MY(liquidfriction) = 0.250000; + MY(originjitter) = '160.0 160.0 160.0'; + MY(size_min) = 1; + MY(size_max) = 3; + MY(tex_min) = 62; + MY(tex_max) = 62; + MY(type) = "bubble"; + MY(underwater) = true; + MY(velocityjitter) = '144.0 144.0 144.0'; +} +// underwatershockwave +SUB(spiderbot_rocket_explode) { + MY(alpha_min) = 40; + MY(alpha_max) = 40; + MY(alpha_fade) = 300; + MY(countabsolute) = 1; + MY(sizeincrease) = 1200; + MY(size_min) = 30; + MY(size_max) = 30; + MY(tex_min) = 33; + MY(tex_max) = 33; + MY(type) = "smoke"; + MY(underwater) = true; +} + +DEF(spiderbot_rocket_thrust); +SUB(spiderbot_rocket_thrust) { + MY(alpha_min) = 200; + MY(alpha_max) = 256; + MY(alpha_fade) = 1600; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 3; + MY(notunderwater) = true; + MY(sizeincrease) = -40; + MY(size_min) = 5; + MY(size_max) = 10; + MY(stretchfactor) = 0.900000; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "spark"; + MY(velocityjitter) = '20.0 20.0 20.0'; + MY(velocitymultiplier) = -1.400000; +} +SUB(spiderbot_rocket_thrust) { + MY(alpha_min) = 200; + MY(alpha_max) = 200; + MY(alpha_fade) = 9000; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 4; + MY(notunderwater) = true; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = -500; + MY(spin_max) = 500; + MY(sizeincrease) = -3000; + MY(size_min) = 25; + MY(size_max) = 25; + MY(stretchfactor) = 1; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "static"; + MY(velocityjitter) = '60.0 60.0 60.0'; + MY(velocitymultiplier) = -1.400000; +} + +DEF(spiderbot_rocket_launch); +// long lasting smoke +SUB(spiderbot_rocket_launch) { + MY(airfriction) = 0.300000; + MY(alpha_min) = 100; + MY(alpha_max) = 156; + MY(alpha_fade) = 60; + MY(color_min) = "0xFFFFFF"; + MY(color_max) = "0xD9C4B0"; + MY(count) = 8; + MY(gravity) = -0.010000; + MY(notunderwater) = true; + MY(sizeincrease) = 20; + MY(size_min) = 30; + MY(size_max) = 30; + MY(tex_max) = 8; + MY(type) = "smoke"; + MY(velocityjitter) = '60.0 60.0 60.0'; + MY(velocitymultiplier) = -0.100000; +} +// fast smoke +SUB(spiderbot_rocket_launch) { + MY(airfriction) = 0.300000; + MY(alpha_min) = 100; + MY(alpha_max) = 156; + MY(alpha_fade) = 260; + MY(color_min) = "0xFFFFFF"; + MY(color_max) = "0xD9C4B0"; + MY(count) = 14; + MY(gravity) = -0.300000; + MY(notunderwater) = true; + MY(sizeincrease) = 20; + MY(size_min) = 30; + MY(size_max) = 30; + MY(tex_max) = 8; + MY(type) = "smoke"; + MY(velocityjitter) = '160.0 160.0 60.0'; +} +// fire +SUB(spiderbot_rocket_launch) { + MY(airfriction) = 0.300000; + MY(alpha_min) = 200; + MY(alpha_max) = 256; + MY(alpha_fade) = 1960; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(count) = 14; + MY(notunderwater) = true; + MY(sizeincrease) = 40; + MY(size_min) = 30; + MY(size_max) = 30; + MY(stretchfactor) = 3; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "spark"; + MY(velocityjitter) = '60.0 60.0 60.0'; + MY(velocitymultiplier) = 0.500000; +} +// sparks +SUB(spiderbot_rocket_launch) { + MY(alpha_min) = 200; + MY(alpha_max) = 256; + MY(alpha_fade) = 1000; + MY(color_min) = "0xFFFFFF"; + MY(color_max) = "0xD9C4B0"; + MY(count) = 10; + MY(notunderwater) = true; + MY(size_min) = 1; + MY(size_max) = 4; + MY(tex_min) = 40; + MY(tex_max) = 40; + MY(type) = "spark"; + MY(velocityjitter) = '160.0 160.0 160.0'; + MY(velocitymultiplier) = -0.500000; +} + +DEF(wakizashi_gun_impact); +SUB(wakizashi_gun_impact) { + MY(airfriction) = 4; + MY(alpha_min) = 256; + MY(alpha_max) = 512; + MY(alpha_fade) = 1180; + MY(color_min) = "0xff0000"; + MY(color_max) = "0xc03535"; + MY(count) = 15; + MY(gravity) = 3; + MY(originjitter) = '40.0 40.0 10.0'; + MY(size_min) = 4; + MY(size_max) = 7; + MY(stretchfactor) = 0.900000; + MY(tex_min) = 41; + MY(tex_max) = 41; + MY(type) = "spark"; + MY(velocityjitter) = '350.0 350.0 550.0'; + MY(velocityoffset) = '0.0 0.0 700.0'; +} +SUB(wakizashi_gun_impact) { + MY(airfriction) = 4; + MY(alpha_min) = 50; + MY(alpha_max) = 90; + MY(alpha_fade) = 150; + MY(color_min) = "0xd0d0a0"; + MY(color_max) = "0xc03535"; + MY(count) = 24; + MY(originjitter) = '40.0 40.0 10.0'; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(sizeincrease) = 80; + MY(size_min) = 10; + MY(size_max) = 20; + MY(tex_max) = 8; + MY(type) = "smoke"; + MY(velocityjitter) = '250.0 250.0 450.0'; + MY(velocityoffset) = '0.0 0.0 600.0'; +} +SUB(wakizashi_gun_impact) { + MY(alpha_min) = 250; + MY(alpha_max) = 300; + MY(alpha_fade) = 680; + MY(color_min) = "0xff0000"; + MY(color_max) = "0xc03535"; + MY(countabsolute) = 1; + MY(sizeincrease) = -180; + MY(size_min) = 82; + MY(size_max) = 82; + MY(tex_min) = 65; + MY(tex_max) = 65; + MY(type) = "smoke"; +} +SUB(wakizashi_gun_impact) { + MY(alpha_min) = 50; + MY(alpha_max) = 100; + MY(alpha_fade) = 620; + MY(color_min) = "0xff0000"; + MY(color_max) = "0xc03535"; + MY(countabsolute) = 1; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = 400; + MY(spin_max) = -400; + MY(sizeincrease) = 900; + MY(size_min) = 40; + MY(size_max) = 40; + MY(tex_min) = 33; + MY(tex_max) = 33; + MY(type) = "smoke"; +} +SUB(wakizashi_gun_impact) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(countabsolute) = 1; + MY(originjitter) = '16.0 16.0 16.0'; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(size_min) = 14; + MY(size_max) = 14; + MY(tex_min) = 59; + MY(tex_max) = 59; + MY(type) = "decal"; +} + +DEF(wakizashi_gun_muzzleflash); +SUB(wakizashi_gun_muzzleflash) { + MY(airfriction) = 12; + MY(alpha_min) = 256; + MY(alpha_max) = 512; + MY(alpha_fade) = 6280; + MY(color_min) = "0xff0000"; + MY(color_max) = "0xc03535"; + MY(count) = 16; + MY(originjitter) = '2.0 2.0 2.0'; + MY(sizeincrease) = -10; + MY(size_min) = 5; + MY(size_max) = 7; + MY(stretchfactor) = 0.700000; + MY(tex_min) = 8; + MY(tex_max) = 15; + MY(type) = "spark"; + MY(velocityjitter) = '200.0 200.0 200.0'; + MY(velocitymultiplier) = 0.200000; +} + +DEF(wakizashi_rocket_explode); +SUB(wakizashi_rocket_explode) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(countabsolute) = 1; + MY(lightcolor) = '8.0 4.0 0.0'; + MY(lightradiusfade) = 1750; + MY(lightradius) = 300; + MY(originjitter) = '23.0 23.0 23.0'; + MY(size_min) = 72; + MY(size_max) = 72; + MY(tex_min) = 8; + MY(tex_max) = 16; + MY(type) = "decal"; +} +// shockwave +SUB(wakizashi_rocket_explode) { + MY(alpha_min) = 56; + MY(alpha_max) = 56; + MY(alpha_fade) = 230; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(countabsolute) = 1; + MY(sizeincrease) = 2400; + MY(size_min) = 22; + MY(size_max) = 22; + MY(tex_min) = 33; + MY(tex_max) = 33; + MY(type) = "static"; +} +// glow +SUB(wakizashi_rocket_explode) { + MY(alpha_min) = 156; + MY(alpha_max) = 156; + MY(alpha_fade) = 830; + MY(color_min) = "0x8f0d00"; + MY(color_max) = "0xff5a00"; + MY(countabsolute) = 1; + MY(sizeincrease) = 240; + MY(size_min) = 120; + MY(size_max) = 120; + MY(tex_min) = 64; + MY(tex_max) = 64; + MY(type) = "static"; +} +// fire effect +SUB(wakizashi_rocket_explode) { + MY(airfriction) = 2; + MY(alpha_min) = 200; + MY(alpha_max) = 256; + MY(alpha_fade) = 512; + MY(color_min) = "0xFFAE00"; + MY(color_max) = "0xff5a00"; + MY(count) = 64; + MY(liquidfriction) = 8; + MY(notunderwater) = true; + MY(originjitter) = '10.0 10.0 10.0'; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = -50; + MY(spin_max) = 50; + MY(sizeincrease) = 195; + MY(size_min) = 12; + MY(size_max) = 21; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "static"; + MY(velocityjitter) = '512.0 512.0 512.0'; +} +// fire rays +SUB(wakizashi_rocket_explode) { + MY(airfriction) = -3; + MY(alpha_min) = 200; + MY(alpha_max) = 256; + MY(alpha_fade) = 1600; + MY(color_min) = "0xFFEA00"; + MY(color_max) = "0xff5a00"; + MY(count) = 10; + MY(liquidfriction) = 8; + MY(notunderwater) = true; + MY(originjitter) = '40.0 40.0 40.0'; + MY(sizeincrease) = 120; + MY(size_min) = 43; + MY(size_max) = 54; + MY(stretchfactor) = 10; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "spark"; + MY(velocityjitter) = '512.0 512.0 512.0'; +} +// smoke +SUB(wakizashi_rocket_explode) { + MY(airfriction) = 3; + MY(alpha_min) = 300; + MY(alpha_max) = 450; + MY(alpha_fade) = 556; + MY(color_min) = "0x4F4B46"; + MY(color_max) = "0x000000"; + MY(count) = 32; + MY(notunderwater) = true; + MY(originjitter) = '100.0 100.0 100.0'; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = -20; + MY(spin_max) = 20; + MY(sizeincrease) = 230; + MY(size_min) = 10; + MY(size_max) = 15; + MY(tex_max) = 8; + MY(type) = "alphastatic"; + MY(velocityjitter) = '200.0 200.0 200.0'; +} +// bouncing sparks +SUB(wakizashi_rocket_explode) { + MY(airfriction) = 1; + MY(alpha_min) = 644; + MY(alpha_max) = 956; + MY(alpha_fade) = 884; + MY(color_min) = "0xffa35b"; + MY(color_max) = "0xfff2be"; + MY(count) = 14; + MY(gravity) = 1; + MY(liquidfriction) = 0.800000; + MY(notunderwater) = true; + MY(originjitter) = '60.0 60.0 60.0'; + MY(size_min) = 1; + MY(size_max) = 2; + MY(tex_min) = 40; + MY(tex_max) = 40; + MY(type) = "spark"; + MY(velocityjitter) = '524.0 524.0 524.0'; + MY(velocityoffset) = '0.0 0.0 170.0'; +} +// underwater bubbles +SUB(wakizashi_rocket_explode) { + MY(alpha_min) = 128; + MY(alpha_max) = 256; + MY(alpha_fade) = 64; + MY(bounce) = 1.500000; + MY(color_min) = "0x404040"; + MY(color_max) = "0x808080"; + MY(count) = 32; + MY(gravity) = -0.125000; + MY(liquidfriction) = 0.250000; + MY(originjitter) = '160.0 160.0 160.0'; + MY(size_min) = 1; + MY(size_max) = 3; + MY(tex_min) = 62; + MY(tex_max) = 62; + MY(type) = "bubble"; + MY(underwater) = true; + MY(velocityjitter) = '144.0 144.0 144.0'; +} +// underwatershockwave +SUB(wakizashi_rocket_explode) { + MY(alpha_min) = 40; + MY(alpha_max) = 40; + MY(alpha_fade) = 300; + MY(countabsolute) = 1; + MY(sizeincrease) = 1200; + MY(size_min) = 30; + MY(size_max) = 30; + MY(tex_min) = 33; + MY(tex_max) = 33; + MY(type) = "smoke"; + MY(underwater) = true; +} + +DEF(wakizashi_rocket_thrust); +SUB(wakizashi_rocket_thrust) { + MY(alpha_min) = 200; + MY(alpha_max) = 256; + MY(alpha_fade) = 1600; + MY(color_min) = "0x00FFDD"; + MY(color_max) = "0x6200FF"; + MY(countabsolute) = 3; + MY(notunderwater) = true; + MY(sizeincrease) = -2; + MY(size_min) = 14; + MY(size_max) = 19; + MY(stretchfactor) = 1; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "spark"; + MY(velocityjitter) = '60.0 60.0 60.0'; + MY(velocitymultiplier) = -1.100000; +} +SUB(wakizashi_rocket_thrust) { + MY(alpha_min) = 200; + MY(alpha_max) = 256; + MY(alpha_fade) = 1900; + MY(color_min) = "0xFFFF33"; + MY(color_max) = "0xFFEE00"; + MY(countabsolute) = 2; + MY(notunderwater) = true; + MY(sizeincrease) = -2; + MY(size_min) = 5; + MY(size_max) = 10; + MY(stretchfactor) = 3; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "spark"; + MY(velocityjitter) = '60.0 60.0 60.0'; + MY(velocitymultiplier) = -0.300000; +} + +DEF(wakizashi_rocket_launch); +// long lasting smoke +SUB(wakizashi_rocket_launch) { + MY(airfriction) = 0.300000; + MY(alpha_min) = 100; + MY(alpha_max) = 156; + MY(alpha_fade) = 60; + MY(color_min) = "0xFFFFFF"; + MY(color_max) = "0xD9C4B0"; + MY(count) = 8; + MY(notunderwater) = true; + MY(sizeincrease) = 20; + MY(size_min) = 3; + MY(size_max) = 30; + MY(tex_max) = 8; + MY(type) = "smoke"; + MY(velocityjitter) = '160.0 160.0 60.0'; + MY(velocitymultiplier) = -0.100000; +} +// fast smoke +SUB(wakizashi_rocket_launch) { + MY(airfriction) = 0.300000; + MY(alpha_min) = 100; + MY(alpha_max) = 156; + MY(alpha_fade) = 260; + MY(color_min) = "0xFFFFFF"; + MY(color_max) = "0xD9C4B0"; + MY(count) = 14; + MY(notunderwater) = true; + MY(sizeincrease) = 20; + MY(size_min) = 30; + MY(size_max) = 30; + MY(tex_max) = 8; + MY(type) = "smoke"; + MY(velocityjitter) = '160.0 160.0 60.0'; + MY(velocitymultiplier) = 0.400000; +} +//sparks +SUB(wakizashi_rocket_launch) { + MY(alpha_min) = 200; + MY(alpha_max) = 256; + MY(alpha_fade) = 1000; + MY(color_min) = "0xFFFFFF"; + MY(color_max) = "0xD9C4B0"; + MY(count) = 10; + MY(notunderwater) = true; + MY(size_min) = 1; + MY(size_max) = 4; + MY(tex_min) = 40; + MY(tex_max) = 40; + MY(type) = "spark"; + MY(velocityjitter) = '60.0 60.0 60.0'; + MY(velocitymultiplier) = -1.500000; +} + +DEF(wakizashi_booster_smoke); +SUB(wakizashi_booster_smoke) { + MY(airfriction) = 2; + MY(alpha_min) = 200; + MY(alpha_max) = 750; + MY(alpha_fade) = 200; + MY(color_min) = "0xA69A80"; + MY(color_max) = "0xB3B39F"; + MY(count) = 3; + MY(gravity) = -0.100000; + MY(notunderwater) = true; + MY(originjitter) = '60.0 60.0 60.0'; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = -20; + MY(spin_max) = 20; + MY(sizeincrease) = 10; + MY(size_min) = 60; + MY(size_max) = 100; + MY(tex_max) = 8; + MY(type) = "alphastatic"; + MY(velocityjitter) = '40.0 40.0 40.0'; +} + +DEF(raptor_cannon_impact); +// decal +SUB(raptor_cannon_impact) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(countabsolute) = 1; + MY(originjitter) = '16.0 16.0 16.0'; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(size_min) = 24; + MY(size_max) = 24; + MY(tex_min) = 47; + MY(tex_max) = 47; + MY(type) = "decal"; +} +// spark +SUB(raptor_cannon_impact) { + MY(airfriction) = 0.200000; + MY(alpha_min) = 644; + MY(alpha_max) = 956; + MY(alpha_fade) = 784; + MY(color_min) = "0xD400FF"; + MY(color_max) = "0x571863"; + MY(count) = 6; + MY(gravity) = 1; + MY(notunderwater) = true; + MY(originjitter) = '16.0 16.0 16.0'; + MY(size_min) = 1; + MY(size_max) = 1; + MY(tex_min) = 40; + MY(tex_max) = 40; + MY(type) = "spark"; + MY(velocityjitter) = '124.0 124.0 524.0'; + MY(velocityoffset) = '0.0 0.0 150.0'; +} +// smoke +SUB(raptor_cannon_impact) { + MY(airfriction) = 2; + MY(alpha_min) = 428; + MY(alpha_max) = 428; + MY(alpha_fade) = 600; + MY(color_min) = "0x646364"; + MY(color_max) = "0x151515"; + MY(count) = 4; + MY(gravity) = 0.700000; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(size_min) = 50; + MY(size_max) = 50; + MY(tex_max) = 7; + MY(type) = "alphastatic"; + MY(velocityjitter) = '200.0 200.0 300.0'; + MY(velocityoffset) = '0.0 0.0 340.0'; +} +// fire +SUB(raptor_cannon_impact) { + MY(airfriction) = 8; + MY(alpha_min) = 200; + MY(alpha_max) = 256; + MY(alpha_fade) = 812; + MY(bounce) = 1.500000; + MY(color_min) = "0xD400FF"; + MY(color_max) = "0x571863"; + MY(count) = 10; + MY(liquidfriction) = 8; + MY(notunderwater) = true; + MY(originjitter) = '8.0 8.0 8.0'; + MY(sizeincrease) = 25; + MY(size_min) = 33; + MY(size_max) = 44; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "static"; + MY(velocityjitter) = '312.0 312.0 312.0'; +} + +DEF(raptor_cannon_muzzleflash); +SUB(raptor_cannon_muzzleflash) { + MY(airfriction) = 12; + MY(alpha_min) = 1256; + MY(alpha_max) = 1512; + MY(alpha_fade) = 56280; + MY(color_min) = "0xD400FF"; + MY(color_max) = "0x571863"; + MY(count) = 16; + MY(originjitter) = '2.0 2.0 2.0'; + MY(sizeincrease) = -10; + MY(size_min) = 10; + MY(size_max) = 17; + MY(stretchfactor) = 0.600000; + MY(tex_min) = 8; + MY(tex_max) = 15; + MY(type) = "spark"; + MY(velocityjitter) = '200.0 200.0 200.0'; + MY(velocitymultiplier) = 0.200000; +} +SUB(raptor_cannon_muzzleflash) { + MY(alpha_min) = 6056; + MY(alpha_max) = 20112; + MY(alpha_fade) = 406280; + MY(color_min) = "0xD400FF"; + MY(color_max) = "0x571863"; + MY(countabsolute) = 1; + MY(lightcolor) = '3.0 0.0 6.0'; + MY(lightradiusfade) = 6000; + MY(lightradius) = 150; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(spin_min) = 4000; + MY(spin_max) = -4000; + MY(sizeincrease) = -100; + MY(size_min) = 32; + MY(size_max) = 32; + MY(stretchfactor) = 0.100000; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "static"; +} + +DEF(raptor_bomb_impact); +// decal +SUB(raptor_bomb_impact) { + MY(alpha_min) = 256; + MY(alpha_max) = 256; + MY(countabsolute) = 1; + MY(originjitter) = '16.0 16.0 16.0'; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(size_min) = 84; + MY(size_max) = 84; + MY(tex_min) = 8; + MY(tex_max) = 16; + MY(type) = "decal"; +} +// spark vertical +SUB(raptor_bomb_impact) { + MY(alpha_min) = 300; + MY(alpha_max) = 300; + MY(alpha_fade) = 600; + MY(color_min) = "0xff9c00"; + MY(color_max) = "0xff3c00"; + MY(count) = 3; + MY(originjitter) = '10.0 10.0 10.0'; + MY(sizeincrease) = 50; + MY(size_min) = 20; + MY(size_max) = 40; + MY(stretchfactor) = 210; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "spark"; + MY(velocityjitter) = '40.0 40.0 120.0'; +} +// fire +SUB(raptor_bomb_impact) { + MY(airfriction) = 2; + MY(alpha_min) = 300; + MY(alpha_max) = 300; + MY(alpha_fade) = 500; + MY(color_min) = "0xff9c00"; + MY(color_max) = "0xff3c00"; + MY(count) = 4; + MY(originjitter) = '10.0 10.0 10.0'; + MY(sizeincrease) = 230; + MY(size_min) = 30; + MY(size_max) = 120; + MY(tex_min) = 48; + MY(tex_max) = 55; + MY(type) = "static"; + MY(velocityjitter) = '950.0 950.0 0.0'; +} +// smoke +SUB(raptor_bomb_impact) { + MY(alpha_min) = 428; + MY(alpha_max) = 428; + MY(alpha_fade) = 600; + MY(blend) = "alpha"; + MY(color_min) = "0x646364"; + MY(color_max) = "0x151515"; + MY(count) = 4; + MY(originjitter) = '30.0 30.0 10.0'; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(size_min) = 120; + MY(size_max) = 180; + MY(stretchfactor) = 10; + MY(tex_max) = 7; + MY(type) = "spark"; + MY(velocityjitter) = '200.0 200.0 280.0'; + MY(velocityoffset) = '0.0 0.0 280.0'; +} +// smoke 2 +SUB(raptor_bomb_impact) { + MY(airfriction) = 0.600000; + MY(alpha_min) = 328; + MY(alpha_max) = 328; + MY(alpha_fade) = 350; + MY(blend) = "alpha"; + MY(color_min) = "0x646364"; + MY(color_max) = "0x151515"; + MY(count) = 4; + MY(gravity) = 2; + MY(originjitter) = '30.0 30.0 10.0'; + MY(startangle_min) = -180; + MY(startangle_max) = 180; + MY(sizeincrease) = 60; + MY(size_min) = 40; + MY(size_max) = 100; + MY(tex_max) = 7; + MY(type) = "spark"; + MY(velocityjitter) = '200.0 200.0 300.0'; + MY(velocityoffset) = '0.0 0.0 580.0'; +} +// sparks +SUB(raptor_bomb_impact) { + MY(airfriction) = 0.300000; + MY(alpha_min) = 644; + MY(alpha_max) = 956; + MY(alpha_fade) = 984; + MY(color_min) = "0xffa35b"; + MY(color_max) = "0xfff2be"; + MY(count) = 5; + MY(gravity) = 1; + MY(notunderwater) = true; + MY(originjitter) = '16.0 16.0 16.0'; + MY(size_min) = 3; + MY(size_max) = 5; + MY(stretchfactor) = 2; + MY(tex_min) = 40; + MY(tex_max) = 40; + MY(type) = "spark"; + MY(velocityjitter) = '174.0 174.0 924.0'; + MY(velocityoffset) = '0.0 0.0 350.0'; +} + +DEF(raptor_bomb_spread); +SUB(raptor_bomb_spread) { + MY(airfriction) = 1; + MY(alpha_min) = 644; + MY(alpha_max) = 956; + MY(alpha_fade) = 1284; + MY(color_min) = "0xffa35b"; + MY(color_max) = "0xfff2be"; + MY(count) = 34; + MY(gravity) = 1; + MY(liquidfriction) = 0.800000; + MY(notunderwater) = true; + MY(originjitter) = '110.0 110.0 110.0'; + MY(size_min) = 1; + MY(size_max) = 2; + MY(tex_min) = 40; + MY(tex_max) = 40; + MY(type) = "spark"; + MY(velocityjitter) = '324.0 324.0 324.0'; +} diff --git a/qcsrc/common/effects/effects.inc b/qcsrc/common/effects/effects.inc index cbd3a44ab5..4d82087e05 100644 --- a/qcsrc/common/effects/effects.inc +++ b/qcsrc/common/effects/effects.inc @@ -46,15 +46,35 @@ EFFECT(0, VORTEX_IMPACT, "nex_impact") EFFECT(0, VORTEX_MUZZLEFLASH, "nex_muzzleflash") EFFECT(1, VAPORIZER_RED, "TE_TEI_G3RED") -EFFECT(1, VAPORIZER_RED_HIT, "TE_TEI_G3RED_HIT") +EFFECT(1, VAPORIZER_HIT_RED, "TE_TEI_G3RED_HIT") EFFECT(1, VAPORIZER_BLUE, "TE_TEI_G3BLUE") -EFFECT(1, VAPORIZER_BLUE_HIT, "TE_TEI_G3BLUE_HIT") +EFFECT(1, VAPORIZER_HIT_BLUE, "TE_TEI_G3BLUE_HIT") EFFECT(1, VAPORIZER_YELLOW, "TE_TEI_G3YELLOW") -EFFECT(1, VAPORIZER_YELLOW_HIT, "TE_TEI_G3YELLOW_HIT") +EFFECT(1, VAPORIZER_HIT_YELLOW, "TE_TEI_G3YELLOW_HIT") EFFECT(1, VAPORIZER_PINK, "TE_TEI_G3PINK") -EFFECT(1, VAPORIZER_PINK_HIT, "TE_TEI_G3PINK_HIT") +EFFECT(1, VAPORIZER_HIT_PINK, "TE_TEI_G3PINK_HIT") EFFECT(1, VAPORIZER_NEUTRAL, "TE_TEI_G3") -EFFECT(1, VAPORIZER_NEUTRAL_HIT, "TE_TEI_G3_HIT") +EFFECT(1, VAPORIZER_HIT_NEUTRAL, "TE_TEI_G3_HIT") +entity EFFECT_VAPORIZER(int teamid) +{ + switch (teamid) { + case NUM_TEAM_1: return EFFECT_VAPORIZER_RED; + case NUM_TEAM_2: return EFFECT_VAPORIZER_BLUE; + case NUM_TEAM_3: return EFFECT_VAPORIZER_YELLOW; + case NUM_TEAM_4: return EFFECT_VAPORIZER_PINK; + default: return EFFECT_VAPORIZER_NEUTRAL; + } +} +entity EFFECT_VAPORIZER_HIT(int teamid) +{ + switch (teamid) { + case NUM_TEAM_1: return EFFECT_VAPORIZER_HIT_RED; + case NUM_TEAM_2: return EFFECT_VAPORIZER_HIT_BLUE; + case NUM_TEAM_3: return EFFECT_VAPORIZER_HIT_YELLOW; + case NUM_TEAM_4: return EFFECT_VAPORIZER_HIT_PINK; + default: return EFFECT_VAPORIZER_HIT_NEUTRAL; + } +} EFFECT(0, RIFLE_IMPACT, "machinegun_impact") EFFECT(0, RIFLE_MUZZLEFLASH, "rifle_muzzleflash") @@ -124,11 +144,53 @@ EFFECT(0, SPAWN_PINK, "spawn_event_pink") EFFECT(0, SPAWNPOINT_NEUTRAL, "spawn_point_neutral") EFFECT(0, SPAWN_NEUTRAL, "spawn_event_neutral") -EFFECT(0, NADE_RED_EXPLODE, "nade_red_explode") -EFFECT(0, NADE_BLUE_EXPLODE, "nade_blue_explode") -EFFECT(0, NADE_YELLOW_EXPLODE, "nade_yellow_explode") -EFFECT(0, NADE_PINK_EXPLODE, "nade_pink_explode") -EFFECT(0, NADE_NEUTRAL_EXPLODE, "nade_neutral_explode") +EFFECT(0, NADE_EXPLODE_RED, "nade_red_explode") +EFFECT(0, NADE_EXPLODE_BLUE, "nade_blue_explode") +EFFECT(0, NADE_EXPLODE_YELLOW, "nade_yellow_explode") +EFFECT(0, NADE_EXPLODE_PINK, "nade_pink_explode") +EFFECT(0, NADE_EXPLODE_NEUTRAL, "nade_neutral_explode") +entity EFFECT_NADE_EXPLODE(int teamid) +{ + switch (teamid) { + case NUM_TEAM_1: return EFFECT_NADE_EXPLODE_RED; + case NUM_TEAM_2: return EFFECT_NADE_EXPLODE_BLUE; + case NUM_TEAM_3: return EFFECT_NADE_EXPLODE_YELLOW; + case NUM_TEAM_4: return EFFECT_NADE_EXPLODE_PINK; + default: return EFFECT_NADE_EXPLODE_NEUTRAL; + } +} + +EFFECT(1, NADE_TRAIL_RED, "nade_red") +EFFECT(1, NADE_TRAIL_BLUE, "nade_blue") +EFFECT(1, NADE_TRAIL_YELLOW, "nade_yellow") +EFFECT(1, NADE_TRAIL_PINK, "nade_pink") +EFFECT(1, NADE_TRAIL_NEUTRAL, "nade_neutral") +entity EFFECT_NADE_TRAIL(int teamid) +{ + switch (teamid) { + case NUM_TEAM_1: return EFFECT_NADE_TRAIL_RED; + case NUM_TEAM_2: return EFFECT_NADE_TRAIL_BLUE; + case NUM_TEAM_3: return EFFECT_NADE_TRAIL_YELLOW; + case NUM_TEAM_4: return EFFECT_NADE_TRAIL_PINK; + default: return EFFECT_NADE_TRAIL_NEUTRAL; + } +} + +EFFECT(1, NADE_TRAIL_BURN_RED, "nade_red_burn") +EFFECT(1, NADE_TRAIL_BURN_BLUE, "nade_blue_burn") +EFFECT(1, NADE_TRAIL_BURN_YELLOW, "nade_yellow_burn") +EFFECT(1, NADE_TRAIL_BURN_PINK, "nade_pink_burn") +EFFECT(1, NADE_TRAIL_BURN_NEUTRAL, "nade_neutral_burn") +entity EFFECT_NADE_TRAIL_BURN(int teamid) +{ + switch (teamid) { + case NUM_TEAM_1: return EFFECT_NADE_TRAIL_BURN_RED; + case NUM_TEAM_2: return EFFECT_NADE_TRAIL_BURN_BLUE; + case NUM_TEAM_3: return EFFECT_NADE_TRAIL_BURN_YELLOW; + case NUM_TEAM_4: return EFFECT_NADE_TRAIL_BURN_PINK; + default: return EFFECT_NADE_TRAIL_BURN_NEUTRAL; + } +} EFFECT(0, ICEORGLASS, "iceorglass") EFFECT(0, ICEFIELD, "icefield") @@ -137,20 +199,43 @@ EFFECT(0, HEALING, "healing_fx") EFFECT(1, LASER_BEAM_FAST, "nex242_misc_laser_beam_fast") EFFECT(0, RESPAWN_GHOST, "respawn_ghost") -EFFECT(0, FLAG_RED_TOUCH, "redflag_touch") -EFFECT(0, FLAG_BLUE_TOUCH, "blueflag_touch") -EFFECT(0, FLAG_YELLOW_TOUCH, "yellowflag_touch") -EFFECT(0, FLAG_PINK_TOUCH, "pinkflag_touch") -EFFECT(0, FLAG_NEUTRAL_TOUCH, "neutralflag_touch") -EFFECT(1, RED_PASS, "red_pass") -EFFECT(1, BLUE_PASS, "blue_pass") -EFFECT(1, YELLOW_PASS, "yellow_pass") -EFFECT(1, PINK_PASS, "pink_pass") -EFFECT(1, NEUTRAL_PASS, "neutral_pass") -EFFECT(0, RED_CAP, "red_cap") -EFFECT(0, BLUE_CAP, "blue_cap") -EFFECT(0, YELLOW_CAP, "yellow_cap") -EFFECT(0, PINK_CAP, "pink_cap") +EFFECT(0, FLAG_TOUCH_RED, "redflag_touch") +EFFECT(0, FLAG_TOUCH_BLUE, "blueflag_touch") +EFFECT(0, FLAG_TOUCH_YELLOW, "yellowflag_touch") +EFFECT(0, FLAG_TOUCH_PINK, "pinkflag_touch") +EFFECT(0, FLAG_TOUCH_NEUTRAL, "neutralflag_touch") +entity EFFECT_FLAG_TOUCH(int teamid) +{ + switch (teamid) { + case NUM_TEAM_1: return EFFECT_FLAG_TOUCH_RED; + case NUM_TEAM_2: return EFFECT_FLAG_TOUCH_BLUE; + case NUM_TEAM_3: return EFFECT_FLAG_TOUCH_YELLOW; + case NUM_TEAM_4: return EFFECT_FLAG_TOUCH_PINK; + default: return EFFECT_FLAG_TOUCH_NEUTRAL; + } +} + +EFFECT(1, PASS_RED, "red_pass") +EFFECT(1, PASS_BLUE, "blue_pass") +EFFECT(1, PASS_YELLOW, "yellow_pass") +EFFECT(1, PASS_PINK, "pink_pass") +EFFECT(1, PASS_NEUTRAL, "neutral_pass") + +EFFECT(0, CAP_RED, "red_cap") +EFFECT(0, CAP_BLUE, "blue_cap") +EFFECT(0, CAP_YELLOW, "yellow_cap") +EFFECT(0, CAP_PINK, "pink_cap") +EFFECT(0, CAP_NEUTRAL, "neutral_cap") +entity EFFECT_CAP(int teamid) +{ + switch (teamid) { + case NUM_TEAM_1: return EFFECT_CAP_RED; + case NUM_TEAM_2: return EFFECT_CAP_BLUE; + case NUM_TEAM_3: return EFFECT_CAP_YELLOW; + case NUM_TEAM_4: return EFFECT_CAP_PINK; + default: return EFFECT_CAP_NEUTRAL; + } +} EFFECT(0, ITEM_PICKUP, "item_pickup") EFFECT(0, ITEM_RESPAWN, "item_respawn") @@ -187,3 +272,22 @@ EFFECT(1, TR_SLIGHTBLOOD, "TR_SLIGHTBLOOD") EFFECT(1, TR_KNIGHTSPIKE, "TR_KNIGHTSPIKE") EFFECT(1, TR_VORESPIKE, "TR_VORESPIKE") EFFECT(0, TE_SPARK, "TE_SPARK") + +EFFECT(1, ROCKETMINSTA_LASER_RED, "rocketminsta_laser_red") +EFFECT(1, ROCKETMINSTA_LASER_BLUE, "rocketminsta_laser_blue") +EFFECT(1, ROCKETMINSTA_LASER_YELLOW, "rocketminsta_laser_yellow") +EFFECT(1, ROCKETMINSTA_LASER_PINK, "rocketminsta_laser_pink") +EFFECT(1, ROCKETMINSTA_LASER_NEUTRAL, "rocketminsta_laser_neutral") +entity EFFECT_ROCKETMINSTA_LASER(int teamid) +{ + entity e; + switch (teamid) { + case NUM_TEAM_1: e = EFFECT_ROCKETMINSTA_LASER_RED; break; + case NUM_TEAM_2: e = EFFECT_ROCKETMINSTA_LASER_BLUE; break; + case NUM_TEAM_3: e = EFFECT_ROCKETMINSTA_LASER_YELLOW; break; + case NUM_TEAM_4: e = EFFECT_ROCKETMINSTA_LASER_PINK; break; + default: e = EFFECT_ROCKETMINSTA_LASER_NEUTRAL; break; + } + if (particleeffectnum(e) < 0 || Team_TeamToNumber(teamid) == -1) { e = EFFECT_TR_NEXUIZPLASMA; } + return e; +} diff --git a/qcsrc/common/items/all.qc b/qcsrc/common/items/all.qc index fc225cdb7d..8a9e314020 100644 --- a/qcsrc/common/items/all.qc +++ b/qcsrc/common/items/all.qc @@ -11,4 +11,14 @@ void Dump_Items() )); } +string Item_Model(string item_mdl) +{ + string output = strcat("models/items/", item_mdl); +#ifdef SVQC + MUTATOR_CALLHOOK(ItemModel, item_mdl, output); + output = item_model_output; +#endif + return output; +} + #endif diff --git a/qcsrc/common/items/all.qh b/qcsrc/common/items/all.qh index 2e33119fb0..3f8c603e7a 100644 --- a/qcsrc/common/items/all.qh +++ b/qcsrc/common/items/all.qh @@ -11,6 +11,10 @@ REGISTER_REGISTRY(RegisterItems) void Dump_Items(); +#ifndef MENUQC +string Item_Model(string item_mdl); +#endif + #endif #include "inventory.qh" diff --git a/qcsrc/common/items/item/ammo.qc b/qcsrc/common/items/item/ammo.qc index 2d487a7b51..16673711ee 100644 --- a/qcsrc/common/items/item/ammo.qc +++ b/qcsrc/common/items/item/ammo.qc @@ -3,8 +3,14 @@ #include "../../../server/t_items.qh" #endif +#ifndef MENUQC +MODEL(Bullets_ITEM, Item_Model("a_bullets.mdl")); +#endif + REGISTER_ITEM(Bullets, Ammo) { - this.m_model = "a_bullets.mdl"; +#ifndef MENUQC + this.m_model = MDL_Bullets_ITEM; +#endif this.m_name = "bullets"; this.m_icon = "ammo_bullets"; #ifdef SVQC @@ -12,8 +18,15 @@ REGISTER_ITEM(Bullets, Ammo) { this.m_itemid = IT_NAILS; #endif } + +#ifndef MENUQC +MODEL(Cells_ITEM, Item_Model("a_cells.md3")); +#endif + REGISTER_ITEM(Cells, Ammo) { - this.m_model = "a_cells.md3"; +#ifndef MENUQC + this.m_model = MDL_Cells_ITEM; +#endif this.m_name = "cells"; this.m_icon = "ammo_cells"; #ifdef SVQC @@ -21,8 +34,15 @@ REGISTER_ITEM(Cells, Ammo) { this.m_itemid = IT_CELLS; #endif } + +#ifndef MENUQC +MODEL(Plasma_ITEM, Item_Model("a_cells.md3")); +#endif + REGISTER_ITEM(Plasma, Ammo) { - this.m_model = "a_cells.md3"; +#ifndef MENUQC + this.m_model = MDL_Plasma_ITEM; +#endif this.m_name = "plasma"; this.m_icon = "ammo_plasma"; #ifdef SVQC @@ -30,8 +50,15 @@ REGISTER_ITEM(Plasma, Ammo) { this.m_itemid = IT_PLASMA; #endif } + +#ifndef MENUQC +MODEL(Rockets_ITEM, Item_Model("a_rockets.md3")); +#endif + REGISTER_ITEM(Rockets, Ammo) { - this.m_model = "a_rockets.md3"; +#ifndef MENUQC + this.m_model = MDL_Rockets_ITEM; +#endif this.m_name = "rockets"; this.m_icon = "ammo_rockets"; #ifdef SVQC @@ -39,8 +66,15 @@ REGISTER_ITEM(Rockets, Ammo) { this.m_itemid = IT_ROCKETS; #endif } + +#ifndef MENUQC +MODEL(Shells_ITEM, Item_Model("a_shells.md3")); +#endif + REGISTER_ITEM(Shells, Ammo) { - this.m_model = "a_shells.md3"; +#ifndef MENUQC + this.m_model = MDL_Shells_ITEM; +#endif this.m_name = "shells"; this.m_icon = "ammo_shells"; #ifdef SVQC diff --git a/qcsrc/common/items/item/armor.qc b/qcsrc/common/items/item/armor.qc index e7965803e2..13a774ebce 100644 --- a/qcsrc/common/items/item/armor.qc +++ b/qcsrc/common/items/item/armor.qc @@ -3,8 +3,14 @@ #include "../../../server/t_items.qh" #endif +#ifndef MENUQC +MODEL(ArmorSmall_ITEM, Item_Model("item_armor_small.md3")); +#endif + REGISTER_ITEM(ArmorSmall, Armor) { - this.m_model = "item_armor_small.md3"; +#ifndef MENUQC + this.m_model = MDL_ArmorSmall_ITEM; +#endif this.m_sound = "misc/armor1.wav"; this.m_name = "5 Armor"; this.m_icon = "armor"; @@ -16,8 +22,14 @@ REGISTER_ITEM(ArmorSmall, Armor) { #endif } +#ifndef MENUQC +MODEL(ArmorMedium_ITEM, Item_Model("item_armor_medium.md3")); +#endif + REGISTER_ITEM(ArmorMedium, Armor) { - this.m_model = "item_armor_medium.md3"; +#ifndef MENUQC + this.m_model = MDL_ArmorMedium_ITEM; +#endif this.m_sound = "misc/armor10.wav"; this.m_name = "25 Armor"; this.m_icon = "armor"; @@ -29,8 +41,14 @@ REGISTER_ITEM(ArmorMedium, Armor) { #endif } +#ifndef MENUQC +MODEL(ArmorLarge_ITEM, Item_Model("item_armor_big.md3")); +#endif + REGISTER_ITEM(ArmorLarge, Armor) { - this.m_model = "item_armor_big.md3"; +#ifndef MENUQC + this.m_model = MDL_ArmorLarge_ITEM; +#endif this.m_sound = "misc/armor17_5.wav"; this.m_name = "50 Armor"; this.m_icon = "armor"; @@ -44,8 +62,14 @@ REGISTER_ITEM(ArmorLarge, Armor) { #endif } +#ifndef MENUQC +MODEL(ArmorMega_ITEM, Item_Model("item_armor_large.md3")); +#endif + REGISTER_ITEM(ArmorMega, Armor) { - this.m_model = "item_armor_large.md3"; +#ifndef MENUQC + this.m_model = MDL_ArmorMega_ITEM; +#endif this.m_sound = "misc/armor25.wav"; this.m_name = "100 Armor"; this.m_icon = "item_large_armor"; diff --git a/qcsrc/common/items/item/health.qc b/qcsrc/common/items/item/health.qc index bb9d90eb44..b81bde7afc 100644 --- a/qcsrc/common/items/item/health.qc +++ b/qcsrc/common/items/item/health.qc @@ -3,8 +3,14 @@ #include "../../../server/t_items.qh" #endif +#ifndef MENUQC +MODEL(HealthSmall_ITEM, Item_Model("g_h1.md3")); +#endif + REGISTER_ITEM(HealthSmall, Health) { - this.m_model = "g_h1.md3"; +#ifndef MENUQC + this.m_model = MDL_HealthSmall_ITEM; +#endif this.m_sound = "misc/minihealth.wav"; this.m_name = "5 Health"; this.m_icon = "health"; @@ -16,8 +22,14 @@ REGISTER_ITEM(HealthSmall, Health) { #endif } +#ifndef MENUQC +MODEL(HealthMedium_ITEM, Item_Model("g_h25.md3")); +#endif + REGISTER_ITEM(HealthMedium, Health) { - this.m_model = "g_h25.md3"; +#ifndef MENUQC + this.m_model = MDL_HealthMedium_ITEM; +#endif this.m_sound = "misc/mediumhealth.wav"; this.m_name = "25 Health"; this.m_icon = "health"; @@ -29,8 +41,14 @@ REGISTER_ITEM(HealthMedium, Health) { #endif } +#ifndef MENUQC +MODEL(HealthLarge_ITEM, Item_Model("g_h50.md3")); +#endif + REGISTER_ITEM(HealthLarge, Health) { - this.m_model = "g_h50.md3"; +#ifndef MENUQC + this.m_model = MDL_HealthLarge_ITEM; +#endif this.m_sound = "misc/mediumhealth.wav"; this.m_name = "50 Health"; this.m_icon = "health"; @@ -44,8 +62,14 @@ REGISTER_ITEM(HealthLarge, Health) { #endif } +#ifndef MENUQC +MODEL(HealthMega_ITEM, Item_Model("g_h100.md3")); +#endif + REGISTER_ITEM(HealthMega, Health) { - this.m_model = "g_h100.md3"; +#ifndef MENUQC + this.m_model = MDL_HealthMega_ITEM; +#endif this.m_sound = "misc/megahealth.wav"; this.m_name = "100 Health"; this.m_icon = "item_mega_health"; diff --git a/qcsrc/common/items/item/jetpack.qc b/qcsrc/common/items/item/jetpack.qc index 3b4cfbc141..63019aebe8 100644 --- a/qcsrc/common/items/item/jetpack.qc +++ b/qcsrc/common/items/item/jetpack.qc @@ -6,8 +6,14 @@ #include "ammo.qh" #include "powerup.qh" +#ifndef MENUQC +MODEL(Jetpack_ITEM, Item_Model("g_jetpack.md3")); +#endif + REGISTER_ITEM(Jetpack, Powerup) { - this.m_model = "g_jetpack.md3"; +#ifndef MENUQC + this.m_model = MDL_Jetpack_ITEM; +#endif this.m_name = "Jet pack"; this.m_icon = "jetpack"; this.m_color = '0.5 0.5 0.5'; @@ -20,8 +26,14 @@ REGISTER_ITEM(Jetpack, Powerup) { #endif } +#ifndef MENUQC +MODEL(JetpackFuel_ITEM, Item_Model("g_fuel.md3")); +#endif + REGISTER_ITEM(JetpackFuel, Ammo) { - this.m_model = "g_fuel.md3"; +#ifndef MENUQC + this.m_model = MDL_JetpackFuel_ITEM; +#endif this.m_name = "Fuel"; this.m_icon = "ammo_fuel"; #ifdef SVQC @@ -30,8 +42,14 @@ REGISTER_ITEM(JetpackFuel, Ammo) { #endif } +#ifndef MENUQC +MODEL(JetpackRegen_ITEM, Item_Model("g_fuelregen.md3")); +#endif + REGISTER_ITEM(JetpackRegen, Pickup) { - this.m_model = "g_fuelregen.md3"; +#ifndef MENUQC + this.m_model = MDL_JetpackRegen_ITEM; +#endif this.m_name = "Fuel regenerator"; this.m_icon = "fuelregen"; this.m_color = '1 0.5 0'; diff --git a/qcsrc/common/items/item/pickup.qh b/qcsrc/common/items/item/pickup.qh index 793230e359..6f60337c19 100644 --- a/qcsrc/common/items/item/pickup.qh +++ b/qcsrc/common/items/item/pickup.qh @@ -2,7 +2,9 @@ #define PICKUP_H #include "../item.qh" CLASS(Pickup, GameItem) - ATTRIB(Pickup, m_model, string, string_null) +#ifndef MENUQC + ATTRIB(Pickup, m_model, Model, NULL) +#endif ATTRIB(Pickup, m_sound, string, "misc/itempickup.wav") ATTRIB(Pickup, m_name, string, string_null) METHOD(Pickup, show, void(entity this)); diff --git a/qcsrc/common/items/item/powerup.qc b/qcsrc/common/items/item/powerup.qc index fcfe2afb93..f411d748a8 100644 --- a/qcsrc/common/items/item/powerup.qc +++ b/qcsrc/common/items/item/powerup.qc @@ -4,8 +4,15 @@ #ifndef SVQC .int m_itemid; #endif + +#ifndef MENUQC +MODEL(Strength_ITEM, Item_Model("g_strength.md3")); +#endif + REGISTER_ITEM(Strength, Powerup) { - this.m_model = "g_strength.md3"; +#ifndef MENUQC + this.m_model = MDL_Strength_ITEM; +#endif this.m_sound = "misc/powerup.wav"; this.m_name = "Strength Powerup"; this.m_icon = "strength"; @@ -14,8 +21,15 @@ REGISTER_ITEM(Strength, Powerup) { this.m_waypointblink = 2; this.m_itemid = IT_STRENGTH; } + +#ifndef MENUQC +MODEL(Shield_ITEM, Item_Model("g_invincible.md3")); +#endif + REGISTER_ITEM(Shield, Powerup) { - this.m_model = "g_invincible.md3"; +#ifndef MENUQC + this.m_model = MDL_Shield_ITEM; +#endif this.m_sound = "misc/powerup_shield.wav"; this.m_name = "Shield"; this.m_icon = "shield"; diff --git a/qcsrc/common/minigames/cl_minigames.qc b/qcsrc/common/minigames/cl_minigames.qc index b88d219916..38614c7d46 100644 --- a/qcsrc/common/minigames/cl_minigames.qc +++ b/qcsrc/common/minigames/cl_minigames.qc @@ -42,27 +42,6 @@ bool minigame_hud_mouse_in(vector pos, vector sz) mousepos_y >= pos_y && mousepos_y < pos_y + sz_y ; } -void initialize_minigames() -{ - entity last_minig = world; - entity minig; - #define MINIGAME(name,nicename) \ - minig = spawn(); \ - minig.classname = "minigame_descriptor"; \ - minig.netname = strzone(strtolower(#name)); \ - minig.message = nicename; \ - minig.minigame_hud_board = name##_hud_board; \ - minig.minigame_hud_status = name##_hud_status; \ - minig.minigame_event = name##_client_event; \ - if ( !last_minig ) minigame_descriptors = minig; \ - else last_minig.list_next = minig; \ - last_minig = minig; - - REGISTERED_MINIGAMES - - #undef MINIGAME -} - string minigame_texture_skin(string skinname, string name) { return sprintf("gfx/hud/%s/minigames/%s", skinname, name); @@ -95,7 +74,7 @@ MINIGAME_SIMPLELINKED_ENTITIES void minigame_autoclean_entity(entity e) { - LOG_TRACE("CL Auto-cleaned: ",ftos(num_for_edict(e)), " (",e.classname,")\n"); + LOG_DEBUG("CL Auto-cleaned: ",ftos(num_for_edict(e)), " (",e.classname,")\n"); remove(e); } @@ -235,7 +214,7 @@ void ent_read_minigame() minigame_read_owner(); float ent = ReadLong(); self.minigame_playerslot = ent; - LOG_TRACE("Player: ",GetPlayerName(ent-1),"\n"); + LOG_DEBUG("Player: ",GetPlayerName(ent-1),"\n"); activate = (ent == player_localnum+1 && self.owner && self.owner != active_minigame); @@ -258,9 +237,9 @@ void ent_read_minigame() if ( sf & MINIG_SF_CREATE ) { - LOG_TRACE("CL Reading entity: ",ftos(num_for_edict(self)), + LOG_DEBUG("CL Reading entity: ",ftos(num_for_edict(self)), " classname:",self.classname," enttype:",ftos(self.enttype) ); - LOG_TRACE(" sf:",ftos(sf)," netname:",self.netname,"\n\n"); + LOG_DEBUG(" sf:",ftos(sf)," netname:",self.netname,"\n\n"); } } #undef ReadString diff --git a/qcsrc/common/minigames/cl_minigames.qh b/qcsrc/common/minigames/cl_minigames.qh index a839b11061..76d1098640 100644 --- a/qcsrc/common/minigames/cl_minigames.qh +++ b/qcsrc/common/minigames/cl_minigames.qh @@ -79,9 +79,6 @@ string minigame_texture(string name); // For minigame_player: player server slot, don't use for anything else .float minigame_playerslot; -// register all minigames -void initialize_minigames(); - // client-side minigame session cleanup void deactivate_minigame(); @@ -118,4 +115,25 @@ void HUD_MinigameMenu_CustomEntry(entity parent, string message, string event_ar entityvar=world; \ while( (entityvar = findentity(entityvar,owner,active_minigame)) ) + +void RegisterMinigames(); +const int MINIGAMES_MAX = 24; +entity MINIGAMES[MINIGAMES_MAX], MINIGAMES_first, MINIGAMES_last; +int MINIGAMES_COUNT; +#define REGISTER_MINIGAME(name,nicename) \ + REGISTER(RegisterMinigames, MINIGAME, MINIGAMES, MINIGAMES_COUNT, name, m_id, spawn()); \ + void name##_hud_board(vector, vector); \ + void name##_hud_status(vector, vector); \ + int name##_client_event(entity, string, ...); \ + REGISTER_INIT_POST(MINIGAME, name) { \ + this.classname = "minigame_descriptor"; \ + this.netname = strzone(strtolower(#name)); \ + this.message = nicename; \ + this.minigame_hud_board = name##_hud_board; \ + this.minigame_hud_status = name##_hud_status; \ + this.minigame_event = name##_client_event; \ + } \ + REGISTER_INIT(MINIGAME, name) +REGISTER_REGISTRY(RegisterMinigames) + #endif diff --git a/qcsrc/common/minigames/cl_minigames_hud.qc b/qcsrc/common/minigames/cl_minigames_hud.qc index 11470ec136..b0dba86c1e 100644 --- a/qcsrc/common/minigames/cl_minigames_hud.qc +++ b/qcsrc/common/minigames/cl_minigames_hud.qc @@ -211,18 +211,17 @@ void HUD_MinigameMenu_ClickCreate() {SELFPARAM(); if ( HUD_MinigameMenu_Click_ExpandCollapse() ) { - entity e; entity curr; entity prev = self; - for ( e = minigame_descriptors; e != world; e = e.list_next ) + FOREACH(MINIGAMES, true, LAMBDA( { curr = HUD_MinigameMenu_SpawnSubEntry( - e.message, HUD_MinigameMenu_ClickCreate_Entry, self ); - curr.netname = e.netname; - curr.model = strzone(minigame_texture(strcat(e.netname,"/icon"))); + it.message, HUD_MinigameMenu_ClickCreate_Entry, self ); + curr.netname = it.netname; + curr.model = strzone(minigame_texture(strcat(it.netname,"/icon"))); HUD_MinigameMenu_InsertEntry( curr, prev ); prev = curr; - } + })); } } diff --git a/qcsrc/common/minigames/minigame/all.qh b/qcsrc/common/minigames/minigame/all.qh index afcc93d482..d3874e7aa7 100644 --- a/qcsrc/common/minigames/minigame/all.qh +++ b/qcsrc/common/minigames/minigame/all.qh @@ -65,25 +65,9 @@ that .owner is set to the minigame session entity and .minigame_autoclean is tru #include "ttt.qc" #include "c4.qc" #include "pong.qc" -#include "qto.qc" #include "ps.qc" #include "pp.qc" - -/** - * Registration: - * MINIGAME(id,"Name") - * id (QuakeC symbol) Game identifier, used to find the functions explained above - * "Name"(String) Human readable name for the game, shown in the UI - */ -#define REGISTERED_MINIGAMES \ - MINIGAME(nmm, "Nine Men's Morris") \ - MINIGAME(ttt, "Tic Tac Toe") \ - MINIGAME(pong,"Pong") \ - MINIGAME(c4, "Connect Four") \ - MINIGAME(qto, "Quinto") \ - MINIGAME(ps, "Peg Solitaire") \ - MINIGAME(pp, "Push-Pull") \ - /*empty line*/ +#include "snake.qc" /** * Set up automatic entity read/write functionality diff --git a/qcsrc/common/minigames/minigame/c4.qc b/qcsrc/common/minigames/minigame/c4.qc index 31388d0f38..98020972a7 100644 --- a/qcsrc/common/minigames/minigame/c4.qc +++ b/qcsrc/common/minigames/minigame/c4.qc @@ -1,3 +1,5 @@ +REGISTER_MINIGAME(c4, "Connect Four"); + const float C4_TURN_PLACE = 0x0100; // player has to place a piece on the board const float C4_TURN_WIN = 0x0200; // player has won const float C4_TURN_DRAW = 0x0400; // no moves are possible diff --git a/qcsrc/common/minigames/minigame/nmm.qc b/qcsrc/common/minigames/minigame/nmm.qc index 2bd4a4267f..1e4da05075 100644 --- a/qcsrc/common/minigames/minigame/nmm.qc +++ b/qcsrc/common/minigames/minigame/nmm.qc @@ -1,3 +1,5 @@ +REGISTER_MINIGAME(nmm, "Nine Men's Morris"); + const int NMM_TURN_PLACE = 0x0100; // player has to place a piece on the board const int NMM_TURN_MOVE = 0x0200; // player has to move a piece by one tile const int NMM_TURN_FLY = 0x0400; // player has to move a piece anywhere diff --git a/qcsrc/common/minigames/minigame/pong.qc b/qcsrc/common/minigames/minigame/pong.qc index e295c7cd64..540f7ecf2f 100644 --- a/qcsrc/common/minigames/minigame/pong.qc +++ b/qcsrc/common/minigames/minigame/pong.qc @@ -1,3 +1,5 @@ +REGISTER_MINIGAME(pong, "Pong"); + // minigame flags const int PONG_STATUS_WAIT = 0x0010; // waiting for players to join const int PONG_STATUS_PLAY = 0x0020; // playing diff --git a/qcsrc/common/minigames/minigame/pp.qc b/qcsrc/common/minigames/minigame/pp.qc index 01b257a82a..efce0e66b6 100644 --- a/qcsrc/common/minigames/minigame/pp.qc +++ b/qcsrc/common/minigames/minigame/pp.qc @@ -1,3 +1,5 @@ +REGISTER_MINIGAME(pp, "Push-Pull"); + const int PP_TURN_PLACE = 0x0100; // player has to place a piece on the board const int PP_TURN_WIN = 0x0200; // player has won const int PP_TURN_DRAW = 0x0400; // players have equal scores diff --git a/qcsrc/common/minigames/minigame/ps.qc b/qcsrc/common/minigames/minigame/ps.qc index 2b8de29920..54be75cd46 100644 --- a/qcsrc/common/minigames/minigame/ps.qc +++ b/qcsrc/common/minigames/minigame/ps.qc @@ -1,3 +1,5 @@ +REGISTER_MINIGAME(ps, "Peg Solitaire"); + const float PS_TURN_MOVE = 0x0100; // player has to click on a piece on the board const float PS_TURN_WIN = 0x0200; // player has won const float PS_TURN_DRAW = 0x0400; // player can make no more moves diff --git a/qcsrc/common/minigames/minigame/qto.qc b/qcsrc/common/minigames/minigame/qto.qc deleted file mode 100644 index 76fa3ce43f..0000000000 --- a/qcsrc/common/minigames/minigame/qto.qc +++ /dev/null @@ -1,461 +0,0 @@ -const float QTO_TURN_MOVE = 0x0100; // player has to click on a piece on the board -const float QTO_TURN_WIN = 0x0200; // player has won -const float QTO_TURN_TYPE = 0x0f00; // turn type mask - -const int QTO_SF_PLAYERSCORE = MINIG_SF_CUSTOM; - -const int QTO_LET_CNT = 5; -const int QTO_NUM_CNT = 5; - -const int QTO_TILE_SIZE = 8; - -.int qto_moves; - -// find same game piece given its tile name -entity qto_find_piece(entity minig, string tile) -{ - entity e = world; - while ( ( e = findentity(e,owner,minig) ) ) - if ( e.classname == "minigame_board_piece" && e.netname == tile ) - return e; - return world; -} - -// Checks if the given piece completes a row -bool qto_winning_piece(entity minigame) -{ - //int number = minigame_tile_number(piece.netname); - //int letter = minigame_tile_letter(piece.netname); - - entity e = world; - while ( ( e = findentity(e,owner,minigame) ) ) - if ( e.classname == "minigame_board_piece" ) - { - if(!e.cnt) - return false; - } - - return true; -} - -// check if the tile name is valid (5x5 grid) -bool qto_valid_tile(string tile) -{ - if ( !tile ) - return false; - float number = minigame_tile_number(tile); - float letter = minigame_tile_letter(tile); - return 0 <= number && number < QTO_NUM_CNT && 0 <= letter && letter < QTO_LET_CNT; -} - -void qto_setup_pieces(entity minigame) -{ - int i, t; - for(i = 0; i < QTO_NUM_CNT; ++i) - for(t = 0; t < QTO_LET_CNT; ++t) - { - entity piece = msle_spawn(minigame,"minigame_board_piece"); - piece.team = 1; // init default team? - piece.cnt = 0; // initialize cnt - piece.netname = strzone(minigame_tile_buildname(t,i)); - minigame_server_sendflags(piece,MINIG_SF_ALL); - } - - minigame_server_sendflags(minigame,MINIG_SF_UPDATE); -} - -void qto_add_score(entity minigame, int thescore) -{ -#ifdef SVQC - if(!minigame) - return; - if(minigame.minigame_players) - { - minigame.minigame_players.qto_moves += thescore; - minigame.minigame_players.SendFlags |= QTO_SF_PLAYERSCORE; - } -#endif -} - -// make a move -void qto_move(entity minigame, entity player, string pos ) -{ - if ( minigame.minigame_flags & QTO_TURN_MOVE ) - if ( pos ) - { - if ( qto_valid_tile(pos) ) - if ( qto_find_piece(minigame, pos) ) - { - entity piece; - #define DO_JUNK \ - if(piece) \ - { \ - piece.cnt = (piece.cnt) ? 0 : 1; \ - minigame_server_sendflags(piece,MINIG_SF_UPDATE); \ - } - - int number = minigame_tile_number(pos); - int letter = minigame_tile_letter(pos); - piece = qto_find_piece(minigame, pos); - DO_JUNK - piece = qto_find_piece(minigame, minigame_tile_buildname(letter-1,number)); - DO_JUNK - piece = qto_find_piece(minigame, minigame_tile_buildname(letter+1,number)); - DO_JUNK - piece = qto_find_piece(minigame, minigame_tile_buildname(letter,number-1)); - DO_JUNK - piece = qto_find_piece(minigame, minigame_tile_buildname(letter,number+1)); - DO_JUNK - - qto_add_score(minigame,1); // add 1 move score - - minigame_server_sendflags(minigame,MINIG_SF_UPDATE); - - if ( qto_winning_piece(minigame) ) - { - minigame.minigame_flags = QTO_TURN_WIN; - } - else - minigame.minigame_flags = QTO_TURN_MOVE; - } - } -} - -// restart match -void qto_restart_match(entity minigame, entity player) -{ - minigame.minigame_flags = QTO_TURN_MOVE; - minigame_server_sendflags(minigame,MINIG_SF_UPDATE); - entity e = world; - while ( ( e = findentity(e,owner,minigame) ) ) - if ( e.classname == "minigame_board_piece" ) - remove(e); - - qto_setup_pieces(minigame); -#ifdef SVQC - if(minigame.minigame_players) - { - minigame.minigame_players.qto_moves = 0; - minigame.minigame_players.SendFlags |= QTO_SF_PLAYERSCORE; - } -#endif -} - -#ifdef SVQC - - -// required function, handle server side events -int qto_server_event(entity minigame, string event, ...) -{ - switch(event) - { - case "start": - { - qto_setup_pieces(minigame); - minigame.minigame_flags = QTO_TURN_MOVE; - return true; - } - case "end": - { - entity e = world; - while( (e = findentity(e, owner, minigame)) ) - if(e.classname == "minigame_board_piece") - { - if(e.netname) { strunzone(e.netname); } - remove(e); - } - return false; - } - case "join": - { - int pl_num = minigame_count_players(minigame); - - // Don't allow more than 1 player - if(pl_num >= 1) { return false; } - - // Team 1 by default - return 1; - } - case "cmd": - { - switch(argv(0)) - { - case "move": - qto_move(minigame, ...(0,entity), ...(1,int) == 2 ? argv(1) : string_null ); - return true; - case "restart": - qto_restart_match(minigame,...(0,entity)); - return true; - } - - return false; - } - case "network_send": - { - entity sent = ...(0,entity); - int sf = ...(1,int); - if ( sent.classname == "minigame_board_piece" && (sf & MINIG_SF_UPDATE) ) - { - WriteByte(MSG_ENTITY,sent.cnt); - } - else if ( sent.classname == "minigame_player" && (sf & QTO_SF_PLAYERSCORE ) ) - { - WriteLong(MSG_ENTITY,sent.qto_moves); - } - return false; - } - } - - return false; -} - - -#elif defined(CSQC) - -string qto_curr_pos; // identifier of the tile under the mouse -vector qto_boardpos; // HUD board position -vector qto_boardsize;// HUD board size - -// Required function, draw the game board -void qto_hud_board(vector pos, vector mySize) -{ - minigame_hud_fitsqare(pos, mySize); - qto_boardpos = pos; - qto_boardsize = mySize; - - minigame_hud_simpleboard(pos,mySize,minigame_texture("qto/board")); - - vector tile_size = minigame_hud_denormalize_size('1 1 0' / QTO_TILE_SIZE,pos,mySize); - vector tile_pos; - - bool valid = qto_valid_tile(qto_curr_pos); - int number = minigame_tile_number(qto_curr_pos); - int letter = minigame_tile_letter(qto_curr_pos); - string pos1 = minigame_tile_buildname(letter-1,number); - string pos2 = minigame_tile_buildname(letter+1,number); - string pos3 = minigame_tile_buildname(letter,number-1); - string pos4 = minigame_tile_buildname(letter,number+1); - - entity e; - FOREACH_MINIGAME_ENTITY(e) - { - if ( e.classname == "minigame_board_piece" ) - { - tile_pos = minigame_tile_pos(e.netname,QTO_NUM_CNT,QTO_LET_CNT); - tile_pos = minigame_hud_denormalize(tile_pos,pos,mySize); - - vector tile_color = '0.4 0.4 0.4'; - - if(valid) - switch(e.netname) - { - case qto_curr_pos: - case pos1: case pos2: case pos3: case pos4: - tile_color = '0.8 0.8 0.8'; - break; - } - - minigame_drawpic_centered( tile_pos, - minigame_texture(strcat("qto/piece", ftos(e.cnt))), - tile_size, tile_color, panel_fg_alpha, DRAWFLAG_NORMAL ); - } - } -} - - -// Required function, draw the game status panel -void qto_hud_status(vector pos, vector mySize) -{ - HUD_Panel_DrawBg(1); - vector ts; - ts = minigame_drawstring_wrapped(mySize_x,pos,active_minigame.descriptor.message, - hud_fontsize * 2, '0.25 0.47 0.72', panel_fg_alpha, DRAWFLAG_NORMAL,0.5); - - pos_y += ts_y; - mySize_y -= ts_y; - - vector player_fontsize = hud_fontsize * 1.75; - ts_y = ( mySize_y - 2*player_fontsize_y ) / 2; - ts_x = mySize_x; - vector mypos; - vector tile_size = '48 48 0'; - - mypos = pos; - drawfill(mypos,eX*mySize_x+eY*player_fontsize_y,'1 1 1',0.5,DRAWFLAG_ADDITIVE); - mypos_y += player_fontsize_y; - drawfill(mypos,eX*mySize_x+eY*tile_size_y,'1 1 1',0.25,DRAWFLAG_ADDITIVE); - - entity e; - FOREACH_MINIGAME_ENTITY(e) - { - if ( e.classname == "minigame_player" ) - { - mypos = pos; - minigame_drawcolorcodedstring_trunc(mySize_x,mypos, - GetPlayerName(e.minigame_playerslot-1), - player_fontsize, panel_fg_alpha, DRAWFLAG_NORMAL); - - mypos_y += player_fontsize_y; - //drawpic( mypos, - // minigame_texture("qto/piece"), - // tile_size, '1 0 0', panel_fg_alpha, DRAWFLAG_NORMAL ); - - //mypos_x += tile_size_x; - - drawstring(mypos,sprintf(_("Moves: %s"), ftos(e.qto_moves)),'32 32 0', - '0.7 0.84 1', panel_fg_alpha, DRAWFLAG_NORMAL); - } - } -} - -// Turn a set of flags into a help message -string qto_turn_to_string(int turnflags) -{ - if ( turnflags & QTO_TURN_WIN ) - return _("Well done, you win!"); - - if ( turnflags & QTO_TURN_MOVE ) - return _("Turn all the angry faces into happy faces"); - - return ""; -} - -// Make the correct move -void qto_make_move(entity minigame) -{ - if ( minigame.minigame_flags == QTO_TURN_MOVE ) - { - minigame_cmd("move ",qto_curr_pos); - } -} - -void qto_set_curr_pos(string s) -{ - if ( qto_curr_pos ) - strunzone(qto_curr_pos); - if ( s ) - s = strzone(s); - qto_curr_pos = s; -} - -// Required function, handle client events -int qto_client_event(entity minigame, string event, ...) -{ - switch(event) - { - case "activate": - { - qto_set_curr_pos(""); - minigame.message = qto_turn_to_string(minigame.minigame_flags); - return false; - } - case "key_pressed": - { - //if((minigame.minigame_flags & QTO_TURN_TEAM) == minigame_self.team) - { - switch ( ...(0,int) ) - { - case K_RIGHTARROW: - case K_KP_RIGHTARROW: - if ( ! qto_curr_pos ) - qto_set_curr_pos("a3"); - else - qto_set_curr_pos( minigame_relative_tile(qto_curr_pos,1,0,QTO_NUM_CNT,QTO_LET_CNT)); - return true; - case K_LEFTARROW: - case K_KP_LEFTARROW: - if ( ! qto_curr_pos ) - qto_set_curr_pos("c3"); - else - qto_set_curr_pos(minigame_relative_tile(qto_curr_pos,-1,0,QTO_NUM_CNT,QTO_LET_CNT)); - return true; - case K_UPARROW: - case K_KP_UPARROW: - if ( ! qto_curr_pos ) - qto_set_curr_pos("a1"); - else - qto_set_curr_pos(minigame_relative_tile(qto_curr_pos,0,1,QTO_NUM_CNT,QTO_LET_CNT)); - return true; - case K_DOWNARROW: - case K_KP_DOWNARROW: - if ( ! qto_curr_pos ) - qto_set_curr_pos("a3"); - else - qto_set_curr_pos(minigame_relative_tile(qto_curr_pos,0,-1,QTO_NUM_CNT,QTO_LET_CNT)); - return true; - case K_ENTER: - case K_KP_ENTER: - case K_SPACE: - qto_make_move(minigame); - return true; - } - } - - return false; - } - case "mouse_pressed": - { - if(...(0,int) == K_MOUSE1) - { - qto_make_move(minigame); - return true; - } - - return false; - } - case "mouse_moved": - { - vector mouse_pos = minigame_hud_normalize(mousepos,qto_boardpos,qto_boardsize); - if ( minigame.minigame_flags == QTO_TURN_MOVE ) - { - qto_set_curr_pos(minigame_tile_name(mouse_pos,QTO_NUM_CNT,QTO_LET_CNT)); - } - if ( ! qto_valid_tile(qto_curr_pos) ) - qto_set_curr_pos(""); - - return true; - } - case "network_receive": - { - entity sent = ...(0,entity); - int sf = ...(1,int); - if ( sent.classname == "minigame" ) - { - if ( sf & MINIG_SF_UPDATE ) - { - sent.message = qto_turn_to_string(sent.minigame_flags); - if ( sent.minigame_flags & minigame_self.team ) - minigame_prompt(); - } - } - else if(sent.classname == "minigame_board_piece") - { - if(sf & MINIG_SF_UPDATE) - { - sent.cnt = ReadByte(); - } - } - else if ( sent.classname == "minigame_player" && (sf & QTO_SF_PLAYERSCORE ) ) - { - sent.qto_moves = ReadLong(); - } - - return false; - } - case "menu_show": - { - HUD_MinigameMenu_CustomEntry(...(0,entity),_("Restart"),"restart"); - return false; - } - case "menu_click": - { - if(...(0,string) == "restart") - minigame_cmd("restart"); - return false; - } - } - - return false; -} - -#endif diff --git a/qcsrc/common/minigames/minigame/snake.qc b/qcsrc/common/minigames/minigame/snake.qc new file mode 100644 index 0000000000..c7bf6ae59b --- /dev/null +++ b/qcsrc/common/minigames/minigame/snake.qc @@ -0,0 +1,621 @@ +REGISTER_MINIGAME(snake, "Snake"); + +const float SNAKE_TURN_MOVE = 0x0100; // the snake is moving, player must control it +const float SNAKE_TURN_LOSS = 0x0200; // they did it?! +const float SNAKE_TURN_WAIT = 0x0400; // the snake is waiting for the player to make their first move and begin the game +const float SNAKE_TURN_TYPE = 0x0f00; // turn type mask + +const int SNAKE_SF_PLAYERSCORE = MINIG_SF_CUSTOM; + +const int SNAKE_LET_CNT = 15; +const int SNAKE_NUM_CNT = 15; + +const int SNAKE_TILE_SIZE = 15; + +bool autocvar_sv_minigames_snake_wrap = false; +float autocvar_sv_minigames_snake_delay_initial = 0.7; +float autocvar_sv_minigames_snake_delay_multiplier = 50; +float autocvar_sv_minigames_snake_delay_min = 0.1; + +.int snake_score; +.entity snake_head; + +.float snake_delay; +.float snake_nextmove; +.vector snake_dir; + +// find same game piece given its tile name +entity snake_find_piece(entity minig, string tile) +{ + entity e = world; + while ( ( e = findentity(e,owner,minig) ) ) + if ( e.classname == "minigame_board_piece" && e.netname == tile ) + return e; + return world; +} + +// find same game piece given its cnt +entity snake_find_cnt(entity minig, int tile) +{ + entity e = world; + while ( ( e = findentity(e,owner,minig) ) ) + if ( e.classname == "minigame_board_piece" && e.cnt == tile ) + return e; + return world; +} + +// check if the tile name is valid (15x15 grid) +bool snake_valid_tile(string tile) +{ + if ( !tile ) + return false; + int number = minigame_tile_number(tile); + int letter = minigame_tile_letter(tile); + return 0 <= number && number < SNAKE_NUM_CNT && 0 <= letter && letter < SNAKE_LET_CNT; +} + +void snake_new_mouse(entity minigame) +{ + RandomSelection_Init(); + int i, j; + for(i = 0; i < SNAKE_LET_CNT; ++i) + for(j = 0; j < SNAKE_NUM_CNT; ++j) + { + string pos = minigame_tile_buildname(i, j); + if(!snake_find_piece(minigame, pos)) + RandomSelection_Add(world, 0, pos, 1, 1); + } + + entity piece = msle_spawn(minigame,"minigame_board_piece"); + piece.team = 1; + piece.netname = strzone(RandomSelection_chosen_string); + minigame_server_sendflags(piece,MINIG_SF_ALL); + + minigame_server_sendflags(minigame,MINIG_SF_UPDATE); +} + +void snake_setup_pieces(entity minigame) +{ + int targnum = bound(1, floor(random() * SNAKE_NUM_CNT), SNAKE_NUM_CNT - 1); + int targlet = bound(1, floor(random() * SNAKE_LET_CNT), SNAKE_LET_CNT - 1); + + entity piece = msle_spawn(minigame,"minigame_board_piece"); + piece.team = 1; // init default team? + piece.netname = strzone(minigame_tile_buildname(targlet,targnum)); + piece.cnt = 1; + minigame_server_sendflags(piece,MINIG_SF_ALL); + + minigame.snake_head = piece; + + snake_new_mouse(minigame); + + minigame_server_sendflags(minigame,MINIG_SF_UPDATE); +} + +void snake_add_score(entity minigame, int thescore) +{ +#ifdef SVQC + if(!minigame) + return; + if(minigame.minigame_players) + { + minigame.minigame_players.snake_score += thescore; + minigame.minigame_players.SendFlags |= SNAKE_SF_PLAYERSCORE; + } +#endif +} + +void snake_move_body(entity minigame, bool ate_mouse) +{ + entity tail = world; + string tailpos = string_null; + vector taildir = '0 0 0'; + + int i, pieces = 0; + for(i = (SNAKE_NUM_CNT * SNAKE_LET_CNT); i >= 2; --i) + { + entity piece = snake_find_cnt(minigame, i); + entity nextpiece = snake_find_cnt(minigame, i - 1); + if(!piece) + continue; + + pieces++; + + if(!tail) + { + tail = piece; + tailpos = piece.netname; + taildir = piece.snake_dir; + } + + if(piece.netname) { strunzone(piece.netname); } + piece.netname = strzone(nextpiece.netname); + piece.snake_dir = nextpiece.snake_dir; + minigame_server_sendflags(piece, MINIG_SF_ALL); + } + + // just a head + if(!pieces) + { + tail = minigame.snake_head; + tailpos = minigame.snake_head.netname; + taildir = minigame.snake_head.snake_dir; + } + + if(tail && ate_mouse) + { + int newcnt = tail.cnt + 1; + minigame.snake_delay = max(autocvar_sv_minigames_snake_delay_min, autocvar_sv_minigames_snake_delay_initial - (newcnt / autocvar_sv_minigames_snake_delay_multiplier)); + snake_add_score(minigame, 1); + + entity piece = msle_spawn(minigame,"minigame_board_piece"); + piece.cnt = newcnt; + piece.team = 1; + piece.snake_dir = taildir; + piece.netname = strzone(tailpos); + minigame_server_sendflags(piece,MINIG_SF_ALL); + + minigame_server_sendflags(minigame,MINIG_SF_UPDATE); + } +} + +void snake_move_head(entity minigame) +{ + entity head = minigame.snake_head; + string newpos; + + if(autocvar_sv_minigames_snake_wrap) + newpos = minigame_relative_tile(head.netname, minigame.snake_dir_x, minigame.snake_dir_y, SNAKE_NUM_CNT, SNAKE_LET_CNT); + else + { + int myx = minigame_tile_letter(head.netname); + int myy = minigame_tile_number(head.netname); + + myx += minigame.snake_dir_x; + myy += minigame.snake_dir_y; + + newpos = minigame_tile_buildname(myx, myy); + } + + if(!snake_valid_tile(newpos) || (snake_find_piece(minigame, newpos)).cnt) + { + minigame.minigame_flags = SNAKE_TURN_LOSS; + minigame_server_sendflags(minigame,MINIG_SF_UPDATE); + return; + } + + bool ate_mouse = false; + entity piece = snake_find_piece(minigame, newpos); + if(piece && !piece.cnt) + ate_mouse = true; + + // move the body first, then set the new head position? + snake_move_body(minigame, ate_mouse); + + if(ate_mouse) + { + if(piece.netname) { strunzone(piece.netname); } + remove(piece); + + snake_new_mouse(minigame); + } + + if(head.netname) { strunzone(head.netname); } + head.netname = strzone(newpos); + minigame_server_sendflags(head,MINIG_SF_ALL); +} + +// make a move +void snake_move(entity minigame, entity player, string dxs, string dys ) +{ + if ( (minigame.minigame_flags & SNAKE_TURN_MOVE) || (minigame.minigame_flags & SNAKE_TURN_WAIT) ) + if ( dxs || dys ) + { + //if ( snake_valid_tile(pos) ) + //if ( snake_find_piece(minigame, pos) ) + { + int dx = ((dxs) ? bound(-1, stof(dxs), 1) : 0); + int dy = ((dys) ? bound(-1, stof(dys), 1) : 0); + + int myl = minigame_tile_letter(minigame.snake_head.netname); + int myn = minigame_tile_number(minigame.snake_head.netname); + + entity head = snake_find_piece(minigame, minigame_tile_buildname(myl + dx, myn + dy)); + if(head && head.cnt == 2) + return; // nope! + + if(minigame.minigame_flags & SNAKE_TURN_WAIT) + minigame.snake_nextmove = time; + minigame.minigame_flags = SNAKE_TURN_MOVE; + minigame.snake_dir_x = dx; + minigame.snake_dir_y = dy; + minigame.snake_dir_z = 0; + minigame.snake_head.snake_dir = minigame.snake_dir; + minigame_server_sendflags(minigame.snake_head,MINIG_SF_UPDATE); + minigame_server_sendflags(minigame,MINIG_SF_UPDATE); + } + } +} + +#ifdef SVQC + + +// required function, handle server side events +int snake_server_event(entity minigame, string event, ...) +{ + switch(event) + { + case "start": + { + snake_setup_pieces(minigame); + minigame.snake_delay = autocvar_sv_minigames_snake_delay_initial; + minigame.minigame_flags = SNAKE_TURN_WAIT; + return true; + } + case "end": + { + entity e = world; + while( (e = findentity(e, owner, minigame)) ) + if(e.classname == "minigame_board_piece") + { + if(e.netname) { strunzone(e.netname); } + remove(e); + } + minigame.snake_head = world; + return false; + } + case "join": + { + int pl_num = minigame_count_players(minigame); + + // Don't allow more than 1 player + // not sure if this should be a multiplayer game (might get crazy) + if(pl_num >= 1) { return false; } + + // Team 1 by default + return 1; + } + case "frame": + { + if(minigame.minigame_flags & SNAKE_TURN_MOVE) + if(time >= minigame.snake_nextmove) + { + snake_move_head(minigame); + minigame.snake_nextmove = time + minigame.snake_delay; + } + return false; + } + case "cmd": + { + switch(argv(0)) + { + case "move": + snake_move(minigame, ...(0,entity), ((...(1,int)) >= 2 ? argv(1) : string_null), ((...(1,int)) == 3 ? argv(2) : string_null)); + return true; + } + + return false; + } + case "network_send": + { + entity sent = ...(0,entity); + int sf = ...(1,int); + if ( sent.classname == "minigame_board_piece" && (sf & MINIG_SF_UPDATE) ) + { + WriteByte(MSG_ENTITY,sent.cnt); + WriteCoord(MSG_ENTITY,sent.snake_dir_x); + WriteCoord(MSG_ENTITY,sent.snake_dir_y); + } + else if ( sent.classname == "minigame_player" && (sf & SNAKE_SF_PLAYERSCORE ) ) + { + WriteLong(MSG_ENTITY,sent.snake_score); + } + else if ( sent.classname == "minigame" && (sf & MINIG_SF_UPDATE ) ) + { + WriteByte(MSG_ENTITY,autocvar_sv_minigames_snake_wrap); + } + return false; + } + } + + return false; +} + + +#elif defined(CSQC) + +vector snake_boardpos; // HUD board position +vector snake_boardsize;// HUD board size + +bool snake_wrap; + +// Required function, draw the game board +void snake_hud_board(vector pos, vector mySize) +{ + minigame_hud_fitsqare(pos, mySize); + snake_boardpos = pos; + snake_boardsize = mySize; + + minigame_hud_simpleboard(pos,mySize,minigame_texture("snake/board")); + + vector tile_size = minigame_hud_denormalize_size('1 1 0' / SNAKE_TILE_SIZE,pos,mySize); + vector tile_pos; + + entity tail = world; + int i; + for(i = (SNAKE_NUM_CNT * SNAKE_LET_CNT); i >= 2; --i) + { + entity piece = snake_find_cnt(active_minigame, i); + if(piece) + { + tail = piece; + break; + } + } + + entity e; + FOREACH_MINIGAME_ENTITY(e) + { + if ( e.classname == "minigame_board_piece" ) + { + tile_pos = minigame_tile_pos(e.netname,SNAKE_NUM_CNT,SNAKE_LET_CNT); + tile_pos = minigame_hud_denormalize(tile_pos,pos,mySize); + string thepiece = "snake/mouse"; + if(e.cnt) + thepiece = "snake/body"; + if(tail && e.cnt == tail.cnt) + thepiece = "snake/tail"; + if(e.cnt == 1) + { + int dx = minigame_tile_letter(e.netname) + e.snake_dir_x * 2; + int dy = minigame_tile_number(e.netname) + e.snake_dir_y * 2; + entity mouse = snake_find_piece(active_minigame, minigame_tile_buildname(dx, dy)); + thepiece = "snake/head"; + if(mouse && !mouse.cnt) + { + float myang = 0; + int myx = minigame_tile_letter(e.netname); + int myy = minigame_tile_number(e.netname); + if(myx - 2 == dx) + myang = M_PI*3/2; + if(myx + 2 == dx) + myang = M_PI/2; + if(myy - 2 == dy) + myang = M_PI; + + int newx = minigame_tile_letter(e.netname) + e.snake_dir_x; + int newy = minigame_tile_number(e.netname) + e.snake_dir_y; + string newpos = minigame_tile_buildname(newx, newy); + + vector my_pos = minigame_tile_pos(newpos,SNAKE_NUM_CNT,SNAKE_LET_CNT); + my_pos = minigame_hud_denormalize(my_pos,pos,mySize); + + drawrotpic(my_pos, myang, minigame_texture("snake/tongue"), + tile_size, tile_size/2, '1 1 1', + panel_fg_alpha, DRAWFLAG_NORMAL ); + } + } + + if(e.cnt == 1 || e.cnt == tail.cnt) + { + vector thedir = e.snake_dir; + float theang = 0; + if(e.cnt == tail.cnt) + { + int thex = minigame_tile_letter(e.netname); + int they = minigame_tile_number(e.netname); + entity t = snake_find_cnt(active_minigame, e.cnt - 1); + int tx = minigame_tile_letter(t.netname); + int ty = minigame_tile_number(t.netname); + + if(thex - 1 == tx) + { + thedir_y = 0; + thedir_x = -1; + } + if(they + 1 == ty) + { + thedir_x = 0; + thedir_y = 1; + } + if(they - 1 == ty) + { + thedir_x = 0; + thedir_y = -1; + } + } + + if(thedir_y == -1) + theang = M_PI; + if(thedir_x == 1) + theang = M_PI/2; + if(thedir_x == -1) + theang = M_PI*3/2; + + drawrotpic(tile_pos, theang, minigame_texture(thepiece), + tile_size, tile_size/2, '1 1 1', + panel_fg_alpha, DRAWFLAG_NORMAL ); + } + else + { + minigame_drawpic_centered( tile_pos, + minigame_texture(thepiece), + tile_size, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL ); + } + } + } + + if ( active_minigame.minigame_flags & SNAKE_TURN_LOSS ) + { + int scores = 0; + FOREACH_MINIGAME_ENTITY(e) + if(e.classname == "minigame_player") + scores = e.snake_score; + + vector winfs = hud_fontsize*2; + string scores_text; + scores_text = strcat("Score: ", ftos(scores)); + + vector win_pos = pos+eY*(mySize_y-winfs_y)/2; + vector win_sz; + win_sz = minigame_drawcolorcodedstring_wrapped(mySize_x,win_pos, + sprintf("Game over! %s", scores_text), + winfs, 0, DRAWFLAG_NORMAL, 0.5); + + drawfill(win_pos-eY*hud_fontsize_y,win_sz+2*eY*hud_fontsize_y,'0.3 0.3 1',0.8,DRAWFLAG_ADDITIVE); + + minigame_drawcolorcodedstring_wrapped(mySize_x,win_pos, + sprintf("Game over! %s", scores_text), + winfs, panel_fg_alpha, DRAWFLAG_NORMAL, 0.5); + } +} + + +// Required function, draw the game status panel +void snake_hud_status(vector pos, vector mySize) +{ + HUD_Panel_DrawBg(1); + vector ts; + ts = minigame_drawstring_wrapped(mySize_x,pos,active_minigame.descriptor.message, + hud_fontsize * 2, '0.25 0.47 0.72', panel_fg_alpha, DRAWFLAG_NORMAL,0.5); + + pos_y += ts_y; + mySize_y -= ts_y; + + vector player_fontsize = hud_fontsize * 1.75; + ts_y = ( mySize_y - 2*player_fontsize_y ) / 2; + ts_x = mySize_x; + vector mypos; + vector tile_size = '48 48 0'; + + mypos = pos; + drawfill(mypos,eX*mySize_x+eY*player_fontsize_y,'1 1 1',0.5,DRAWFLAG_ADDITIVE); + mypos_y += player_fontsize_y; + drawfill(mypos,eX*mySize_x+eY*tile_size_y,'1 1 1',0.25,DRAWFLAG_ADDITIVE); + + entity e; + FOREACH_MINIGAME_ENTITY(e) + { + if ( e.classname == "minigame_player" ) + { + mypos = pos; + minigame_drawcolorcodedstring_trunc(mySize_x,mypos, + GetPlayerName(e.minigame_playerslot-1), + player_fontsize, panel_fg_alpha, DRAWFLAG_NORMAL); + + mypos_y += player_fontsize_y; + //drawpic( mypos, + // minigame_texture("snake/piece"), + // tile_size, '1 0 0', panel_fg_alpha, DRAWFLAG_NORMAL ); + + //mypos_x += tile_size_x; + + drawstring(mypos,ftos(e.snake_score),tile_size, + '0.7 0.84 1', panel_fg_alpha, DRAWFLAG_NORMAL); + } + } +} + +// Turn a set of flags into a help message +string snake_turn_to_string(int turnflags) +{ + if ( turnflags & SNAKE_TURN_LOSS ) + return _("Game over!"); + + if ( turnflags & SNAKE_TURN_WAIT ) + return _("Press an arrow key to begin the game"); + + if ( turnflags & SNAKE_TURN_MOVE ) + if(snake_wrap) + return _("Avoid the snake's body, collect the mice!"); + else + return _("Avoid the screen edges and the snake's body, collect the mice!"); + + return ""; +} + +// Make the correct move +void snake_set_direction(entity minigame, int dx, int dy) +{ + //if ( minigame.minigame_flags == SNAKE_TURN_MOVE ) + //{ + minigame_cmd("move ",ftos(dx), " ", ftos(dy)); + //} +} + +// Required function, handle client events +int snake_client_event(entity minigame, string event, ...) +{ + switch(event) + { + case "activate": + { + minigame.message = snake_turn_to_string(minigame.minigame_flags); + return false; + } + case "key_pressed": + { + //if((minigame.minigame_flags & SNAKE_TURN_TEAM) == minigame_self.team) + { + switch ( ...(0,int) ) + { + case K_RIGHTARROW: + case K_KP_RIGHTARROW: + snake_set_direction(minigame, 1, 0); + return true; + case K_LEFTARROW: + case K_KP_LEFTARROW: + snake_set_direction(minigame, -1, 0); + return true; + case K_UPARROW: + case K_KP_UPARROW: + snake_set_direction(minigame, 0, 1); + return true; + case K_DOWNARROW: + case K_KP_DOWNARROW: + snake_set_direction(minigame, 0, -1); + return true; + } + } + + return false; + } + case "network_receive": + { + entity sent = ...(0,entity); + int sf = ...(1,int); + if ( sent.classname == "minigame" ) + { + if ( sf & MINIG_SF_UPDATE ) + { + snake_wrap = ReadByte(); + sent.message = snake_turn_to_string(sent.minigame_flags); + //if ( sent.minigame_flags & minigame_self.team ) + minigame_prompt(); + } + } + else if(sent.classname == "minigame_board_piece") + { + if(sf & MINIG_SF_UPDATE) + { + sent.cnt = ReadByte(); + sent.snake_dir_x = ReadCoord(); + sent.snake_dir_y = ReadCoord(); + sent.snake_dir_z = 0; + if(sent.cnt == 1) + minigame.snake_head = sent; // hax + } + } + else if ( sent.classname == "minigame_player" && (sf & SNAKE_SF_PLAYERSCORE ) ) + { + sent.snake_score = ReadLong(); + } + + return false; + } + } + + return false; +} + +#endif \ No newline at end of file diff --git a/qcsrc/common/minigames/minigame/ttt.qc b/qcsrc/common/minigames/minigame/ttt.qc index f2253c2a4b..8c5005ed25 100644 --- a/qcsrc/common/minigames/minigame/ttt.qc +++ b/qcsrc/common/minigames/minigame/ttt.qc @@ -1,3 +1,5 @@ +REGISTER_MINIGAME(ttt, "Tic Tac Toe"); + const int TTT_TURN_PLACE = 0x0100; // player has to place a piece on the board const int TTT_TURN_WIN = 0x0200; // player has won const int TTT_TURN_DRAW = 0x0400; // no moves are possible diff --git a/qcsrc/common/minigames/minigames.qc b/qcsrc/common/minigames/minigames.qc index c2392ae0e0..6a24d37ad8 100644 --- a/qcsrc/common/minigames/minigames.qc +++ b/qcsrc/common/minigames/minigames.qc @@ -2,10 +2,11 @@ entity minigame_get_descriptor(string id) { - entity e; - for ( e = minigame_descriptors; e != world; e = e.list_next ) - if ( e.netname == id ) - return e; + FOREACH(MINIGAMES, true, LAMBDA( + { + if(it.netname == id) + return it; + })); return world; } diff --git a/qcsrc/common/minigames/minigames.qh b/qcsrc/common/minigames/minigames.qh index 536ac50187..7425149f38 100644 --- a/qcsrc/common/minigames/minigames.qh +++ b/qcsrc/common/minigames/minigames.qh @@ -1,8 +1,6 @@ #ifndef MINIGAMES_H #define MINIGAMES_H -entity minigame_descriptors; - // previous node in a doubly linked list .entity list_prev; // next node in a linked list diff --git a/qcsrc/common/minigames/sv_minigames.qc b/qcsrc/common/minigames/sv_minigames.qc index 1bd9609ded..73ad876cfe 100644 --- a/qcsrc/common/minigames/sv_minigames.qc +++ b/qcsrc/common/minigames/sv_minigames.qc @@ -163,6 +163,14 @@ int minigame_addplayer(entity minigame_session, entity player) return mgteam; } +void minigame_frame() +{ + entity minig = self; + + minig.minigame_event(minig,"frame"); + minig.nextthink = time + 0.1; +} + entity start_minigame(entity player, string minigame ) { if ( !autocvar_sv_minigames || !IS_REAL_CLIENT(player) ) @@ -175,6 +183,8 @@ entity start_minigame(entity player, string minigame ) minig.classname = "minigame"; minig.netname = strzone(strcat(e.netname,"_",ftos(num_for_edict(minig)))); minig.descriptor = e; + minig.think = minigame_frame; + minig.nextthink = time; minig.minigame_event = e.minigame_event; minig.minigame_event(minig,"start"); GameLogEcho(strcat(":minigame:start:",minig.netname)); @@ -263,25 +273,6 @@ void end_minigames() } } -void initialize_minigames() -{ - entity last_minig = world; - entity minig; - #define MINIGAME(name,nicename) \ - minig = spawn(); \ - minig.classname = "minigame_descriptor"; \ - minig.netname = #name; \ - minig.message = nicename; \ - minig.minigame_event = name##_server_event; \ - if ( !last_minig ) minigame_descriptors = minig; \ - else last_minig.list_next = minig; \ - last_minig = minig; - - REGISTERED_MINIGAMES - - #undef MINIGAME -} - string invite_minigame(entity inviter, entity player) { if ( !inviter || !inviter.active_minigame ) @@ -359,9 +350,10 @@ void ClientCommand_minigame(int request, int argc, string command) } else if ( minig_cmd == "list" ) { - entity e; - for ( e = minigame_descriptors; e != world; e = e.list_next ) - sprint(self,e.netname," (",e.message,") ","\n"); + FOREACH(MINIGAMES, true, LAMBDA( + { + sprint(self,it.netname," (",it.message,") ","\n"); + })); return; } else if ( minig_cmd == "list-sessions" ) diff --git a/qcsrc/common/minigames/sv_minigames.qh b/qcsrc/common/minigames/sv_minigames.qh index 246440d39e..43b392f743 100644 --- a/qcsrc/common/minigames/sv_minigames.qh +++ b/qcsrc/common/minigames/sv_minigames.qh @@ -1,9 +1,6 @@ #ifndef SV_MINIGAMES_H #define SV_MINIGAMES_H -/// Initialize the minigame system -void initialize_minigames(); - /// Create a new minigame session /// \return minigame session entity entity start_minigame(entity player, string minigame ); @@ -49,4 +46,20 @@ entity minigame_sessions; bool minigame_SendEntity(entity to, int sf); +void RegisterMinigames(); +const int MINIGAMES_MAX = 24; +entity MINIGAMES[MINIGAMES_MAX], MINIGAMES_first, MINIGAMES_last; +int MINIGAMES_COUNT; +#define REGISTER_MINIGAME(name,nicename) \ + REGISTER(RegisterMinigames, MINIGAME, MINIGAMES, MINIGAMES_COUNT, name, m_id, spawn()); \ + int name##_server_event(entity, string, ...); \ + REGISTER_INIT_POST(MINIGAME, name) { \ + this.classname = "minigame_descriptor"; \ + this.netname = strzone(strtolower(#name)); \ + this.message = nicename; \ + this.minigame_event = name##_server_event; \ + } \ + REGISTER_INIT(MINIGAME, name) +REGISTER_REGISTRY(RegisterMinigames) + #endif diff --git a/qcsrc/common/models/models.qh b/qcsrc/common/models/models.qh index c668959655..0d17f43ab4 100644 --- a/qcsrc/common/models/models.qh +++ b/qcsrc/common/models/models.qh @@ -18,10 +18,7 @@ CLASS(Model, Object) } METHOD(Model, model_precache, void(entity this)) { string s = this.model_str(); - int fh = fopen(s, FILE_READ); - if (fh >= 0) { - fclose(fh); - } else if (s && s != "" && s != "null") { + if (s != "" && s != "null" && !fexists(s)) { LOG_WARNINGF("Missing model: \"%s\"\n", s); return; } diff --git a/qcsrc/common/monsters/monster/mage.qc b/qcsrc/common/monsters/monster/mage.qc index d2881e9ba9..433fed6830 100644 --- a/qcsrc/common/monsters/monster/mage.qc +++ b/qcsrc/common/monsters/monster/mage.qc @@ -91,7 +91,7 @@ void M_Mage_Attack_Spike_Explode() {SELFPARAM(); self.event_damage = func_null; - sound(self, CH_SHOTS, W_Sound("grenade_impact"), VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS, SND_GRENADE_IMPACT, VOL_BASE, ATTEN_NORM); self.realowner.mage_spike = world; @@ -258,7 +258,7 @@ void M_Mage_Defend_Heal() void M_Mage_Attack_Push() {SELFPARAM(); - sound(self, CH_SHOTS, W_Sound("tagexp1"), 1, ATTEN_NORM); + sound(self, CH_SHOTS, SND_TAGEXP1, 1, ATTEN_NORM); RadiusDamage (self, self, (autocvar_g_monster_mage_attack_push_damage), (autocvar_g_monster_mage_attack_push_damage), (autocvar_g_monster_mage_attack_push_radius), world, world, (autocvar_g_monster_mage_attack_push_force), DEATH_MONSTER_MAGE, self.enemy); Send_Effect(EFFECT_TE_EXPLOSION, self.origin, '0 0 0', 1); @@ -343,7 +343,7 @@ float M_Mage_Attack(float attack_type) return false; } -void spawnfunc_monster_mage() { Monster_Spawn(MON_MAGE.monsterid); } +spawnfunc(monster_mage) { Monster_Spawn(MON_MAGE.monsterid); } #endif // SVQC @@ -422,8 +422,6 @@ bool M_Mage(int req) } case MR_PRECACHE: { - precache_sound (W_Sound("grenade_impact")); - precache_sound (W_Sound("tagexp1")); return true; } #endif diff --git a/qcsrc/common/monsters/monster/shambler.qc b/qcsrc/common/monsters/monster/shambler.qc index ea7fbbf7cc..fe6078303c 100644 --- a/qcsrc/common/monsters/monster/shambler.qc +++ b/qcsrc/common/monsters/monster/shambler.qc @@ -50,7 +50,7 @@ void M_Shambler_Attack_Smash() {SELFPARAM(); makevectors(self.angles); Send_Effect(EFFECT_EXPLOSION_MEDIUM, (self.origin + (v_forward * 150)) - ('0 0 1' * self.maxs.z), '0 0 0', 1); - sound(self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM); // RadiusDamage does NOT support custom starting location, which means we must use this hack... @@ -75,7 +75,7 @@ void M_Shambler_Attack_Lightning_Explode() {SELFPARAM(); entity head; - sound(self, CH_SHOTS, W_Sound("electro_impact"), VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS, SND_ELECTRO_IMPACT, VOL_BASE, ATTEN_NORM); Send_Effect(EFFECT_ELECTRO_IMPACT, '0 0 0', '0 0 0', 1); self.event_damage = func_null; @@ -211,7 +211,7 @@ float M_Shambler_Attack(float attack_type) return false; } -void spawnfunc_monster_shambler() { Monster_Spawn(MON_SHAMBLER.monsterid); } +spawnfunc(monster_shambler) { Monster_Spawn(MON_SHAMBLER.monsterid); } #endif // SVQC bool M_Shambler(int req) diff --git a/qcsrc/common/monsters/monster/spider.qc b/qcsrc/common/monsters/monster/spider.qc index fb71c2f222..ba2b12695d 100644 --- a/qcsrc/common/monsters/monster/spider.qc +++ b/qcsrc/common/monsters/monster/spider.qc @@ -63,7 +63,7 @@ void M_Spider_Attack_Web() {SELFPARAM(); monster_makevectors(self.enemy); - sound(self, CH_SHOTS, W_Sound("electro_fire2"), VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS, SND_ELECTRO_FIRE2, VOL_BASE, ATTEN_NORM); entity proj = spawn (); proj.classname = "plasma"; @@ -124,7 +124,7 @@ bool M_Spider_Attack(int attack_type) return false; } -void spawnfunc_monster_spider() { Monster_Spawn(MON_SPIDER.monsterid); } +spawnfunc(monster_spider) { Monster_Spawn(MON_SPIDER.monsterid); } #endif // SVQC bool M_Spider(int req) @@ -176,7 +176,6 @@ bool M_Spider(int req) } case MR_PRECACHE: { - precache_sound (W_Sound("electro_fire2")); return true; } #endif diff --git a/qcsrc/common/monsters/monster/wyvern.qc b/qcsrc/common/monsters/monster/wyvern.qc index af174603d2..d65bcf648d 100644 --- a/qcsrc/common/monsters/monster/wyvern.qc +++ b/qcsrc/common/monsters/monster/wyvern.qc @@ -101,7 +101,7 @@ float M_Wyvern_Attack(float attack_type) return false; } -void spawnfunc_monster_wyvern() { Monster_Spawn(MON_WYVERN.monsterid); } +spawnfunc(monster_wyvern) { Monster_Spawn(MON_WYVERN.monsterid); } #endif // SVQC bool M_Wyvern(int req) diff --git a/qcsrc/common/monsters/monster/zombie.qc b/qcsrc/common/monsters/monster/zombie.qc index ed169c99d7..6242a757d0 100644 --- a/qcsrc/common/monsters/monster/zombie.qc +++ b/qcsrc/common/monsters/monster/zombie.qc @@ -138,7 +138,7 @@ float M_Zombie_Attack(float attack_type) return false; } -void spawnfunc_monster_zombie() { Monster_Spawn(MON_ZOMBIE.monsterid); } +spawnfunc(monster_zombie) { Monster_Spawn(MON_ZOMBIE.monsterid); } #endif // SVQC bool M_Zombie(int req) diff --git a/qcsrc/common/monsters/sv_monsters.qc b/qcsrc/common/monsters/sv_monsters.qc index 8eab200a6d..52e5af9847 100644 --- a/qcsrc/common/monsters/sv_monsters.qc +++ b/qcsrc/common/monsters/sv_monsters.qc @@ -39,6 +39,7 @@ void monster_dropitem() vector org = self.origin + ((self.mins + self.maxs) * 0.5); entity e = spawn(); + e.spawnfunc_checked = true; e.monster_loot = self.monster_loot; @@ -49,7 +50,7 @@ void monster_dropitem() { setself(e); e.noalign = true; - e.monster_loot(); + e.monster_loot(e); e.gravity = 1; e.movetype = MOVETYPE_TOSS; e.reset = SUB_Remove; @@ -118,7 +119,7 @@ bool Monster_ValidTarget(entity mon, entity player) makevectors (mon.angles); dot = normalize (player.origin - mon.origin) * v_forward; - if(dot <= 0.3) { return false; } + if(dot <= autocvar_g_monsters_target_infront_range) { return false; } } return true; // this target is valid! @@ -1045,7 +1046,7 @@ void Monster_Dead(entity attacker, float gibbed) void Monster_Damage(entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force) {SELFPARAM(); - if((self.spawnflags & MONSTERFLAG_INVINCIBLE) && deathtype != DEATH_KILL) + if((self.spawnflags & MONSTERFLAG_INVINCIBLE) && deathtype != DEATH_KILL && !ITEM_DAMAGE_NEEDKILL(deathtype)) return; if(self.frozen && deathtype != DEATH_KILL && deathtype != DEATH_NADE_ICE_FREEZE) @@ -1085,7 +1086,7 @@ void Monster_Damage(entity inflictor, entity attacker, float damage, int deathty self.dmg_time = time; if(sound_allowed(MSG_BROADCAST, attacker) && deathtype != DEATH_DROWN) - spamsound (self, CH_PAIN, "misc/bodyimpact1.wav", VOL_BASE, ATTEN_NORM); // FIXME: PLACEHOLDER + spamsound (self, CH_PAIN, SND(BODYIMPACT1), VOL_BASE, ATTEN_NORM); // FIXME: PLACEHOLDER self.velocity += force * self.damageforcescale; diff --git a/qcsrc/common/mutators/mutator/casings.qc b/qcsrc/common/mutators/mutator/casings.qc index fedcf9fe57..7a05c85ea3 100644 --- a/qcsrc/common/mutators/mutator/casings.qc +++ b/qcsrc/common/mutators/mutator/casings.qc @@ -63,6 +63,19 @@ void Casing_Draw() } } +SOUND(BRASS1, W_Sound("brass1")); +SOUND(BRASS2, W_Sound("brass2")); +SOUND(BRASS3, W_Sound("brass3")); +Sound SND_BRASS_RANDOM() { + return SOUNDS[SND_BRASS1.m_id + floor(prandom() * 3)]; +} +SOUND(CASINGS1, W_Sound("casings1")); +SOUND(CASINGS2, W_Sound("casings2")); +SOUND(CASINGS3, W_Sound("casings3")); +Sound SND_CASINGS_RANDOM() { + return SOUNDS[SND_CASINGS1.m_id + floor(prandom() * 3)]; +} + void Casing_Touch() {SELFPARAM(); if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT) @@ -78,16 +91,14 @@ void Casing_Touch() { if (time >= self.nextthink) { - string s; - int f = floor(prandom() * 3) + 1; - + Sound s; switch (self.state) { case 1: - s = W_Sound(strcat("casings", itos(f))); + s = SND_CASINGS_RANDOM(); break; default: - s = W_Sound(strcat("brass", itos(f))); + s = SND_BRASS_RANDOM(); break; } @@ -163,13 +174,4 @@ MUTATOR_HOOKFUNCTION(casings, CSQC_Parse_TempEntity) RubbleLimit("casing", autocvar_cl_casings_maxcount, Casing_Delete); } -STATIC_INIT(Casings) -{ - precache_sound(W_Sound("brass1")); - precache_sound(W_Sound("brass2")); - precache_sound(W_Sound("brass3")); - precache_sound(W_Sound("casings1")); - precache_sound(W_Sound("casings2")); - precache_sound(W_Sound("casings3")); -} #endif diff --git a/qcsrc/common/mutators/mutator/itemstime.qc b/qcsrc/common/mutators/mutator/itemstime.qc index d7ca5a3351..4d859b1fca 100644 --- a/qcsrc/common/mutators/mutator/itemstime.qc +++ b/qcsrc/common/mutators/mutator/itemstime.qc @@ -232,10 +232,15 @@ void DrawItemsTimeItem(vector myPos, vector mySize, float ar, entity item, float HUD_Panel_DrawProgressBar(p_pos, p_size, autocvar_hud_panel_itemstime_progressbar_name, t/autocvar_hud_panel_itemstime_progressbar_maxtime, 0, autocvar_hud_panel_itemstime_iconalign, color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL); } - if (t > 0 && autocvar_hud_panel_itemstime_text) - drawstring_aspect(numpos, ftos(t), eX * ((ar - 1)/ar) * mySize_x + eY * mySize_y, color, panel_fg_alpha, DRAWFLAG_NORMAL); - else - picpos.x = myPos.x + mySize.x / 2 - mySize.y / 2; + if(autocvar_hud_panel_itemstime_text) + { + if(t > 0) + drawstring_aspect(numpos, ftos(t), eX * ((ar - 1)/ar) * mySize_x + eY * mySize_y, color, panel_fg_alpha, DRAWFLAG_NORMAL); + else if(precache_pic("gfx/hud/default/checkmark")) // COMPAT: check if this image exists, as 0.8.1 clients lack it + drawpic_aspect_skin(numpos, "checkmark", eX * (ar - 1) * mySize_y + eY * mySize_y, '1 1 1', panel_fg_alpha * picalpha, DRAWFLAG_NORMAL); + else // legacy code, if the image is missing just center the icon + picpos.x = myPos.x + mySize.x / 2 - mySize.y / 2; + } if (item_availableTime) drawpic_aspect_skin_expanding(picpos, item.m_icon, '1 1 0' * mySize_y, '1 1 1', panel_fg_alpha * picalpha, DRAWFLAG_NORMAL, item_availableTime); drawpic_aspect_skin(picpos, item.m_icon, '1 1 0' * mySize_y, '1 1 1', panel_fg_alpha * picalpha, DRAWFLAG_NORMAL); diff --git a/qcsrc/common/nades.qh b/qcsrc/common/nades.qh index 9ec6c29145..ba189c9bf8 100644 --- a/qcsrc/common/nades.qh +++ b/qcsrc/common/nades.qh @@ -127,8 +127,8 @@ string Nade_TrailEffect(float proj, float nade_team) )); switch (proj) { - case PROJECTILE_NADE: return strcat("nade_", Static_Team_ColorName_Lower(nade_team)); - case PROJECTILE_NADE_BURN: return strcat("nade_", Static_Team_ColorName_Lower(nade_team), "_burn"); + case PROJECTILE_NADE: return EFFECT_NADE_TRAIL(nade_team).eent_eff_name; + case PROJECTILE_NADE_BURN: return EFFECT_NADE_TRAIL_BURN(nade_team).eent_eff_name; } return ""; } diff --git a/qcsrc/common/notifications.qc b/qcsrc/common/notifications.qc index 626c42c7d6..f219569819 100644 --- a/qcsrc/common/notifications.qc +++ b/qcsrc/common/notifications.qc @@ -1286,7 +1286,7 @@ void Local_Notification_sound( )); #endif - sound( + _sound( world, soundchannel, sprintf( diff --git a/qcsrc/common/sounds/sounds.inc b/qcsrc/common/sounds/sounds.inc new file mode 100644 index 0000000000..7993450ab7 --- /dev/null +++ b/qcsrc/common/sounds/sounds.inc @@ -0,0 +1,276 @@ +// Global list of sounds +// TODO: remove uses of _sound + +string W_Sound(string w_snd); + +SOUND(ARC_FIRE, W_Sound("arc_fire")); +SOUND(ARC_LOOP, W_Sound("arc_loop")); +SOUND(ARC_LOOP_OVERHEAT, W_Sound("arc_loop_overheat")); +SOUND(ARC_STOP, W_Sound("arc_stop")); +SOUND(CAMPINGRIFLE_FIRE2, W_Sound("campingrifle_fire2")); +SOUND(CAMPINGRIFLE_FIRE, W_Sound("campingrifle_fire")); +SOUND(CRYLINK_FIRE2, W_Sound("crylink_fire2")); +SOUND(CRYLINK_FIRE, W_Sound("crylink_fire")); +SOUND(CRYLINK_IMPACT2, W_Sound("crylink_impact2")); +SOUND(CRYLINK_IMPACT, W_Sound("crylink_impact")); +SOUND(CRYLINK_LINKJOIN, W_Sound("crylink_linkjoin")); +SOUND(DRYFIRE, W_Sound("dryfire")); +SOUND(ELECTRO_BOUNCE, W_Sound("electro_bounce")); +SOUND(ELECTRO_FIRE2, W_Sound("electro_fire2")); +SOUND(ELECTRO_FIRE, W_Sound("electro_fire")); +SOUND(ELECTRO_FLY, W_Sound("electro_fly")); +SOUND(ELECTRO_IMPACT, W_Sound("electro_impact")); +SOUND(ELECTRO_IMPACT_COMBO, W_Sound("electro_impact_combo")); +SOUND(FIREBALL_FIRE2, W_Sound("fireball_fire2")); +SOUND(FIREBALL_FIRE, W_Sound("fireball_fire")); +SOUND(FIREBALL_FLY2, W_Sound("fireball_fly2")); +SOUND(FIREBALL_FLY, W_Sound("fireball_fly")); +SOUND(FIREBALL_IMPACT2, W_Sound("fireball_impact2")); +SOUND(FIREBALL_PREFIRE2, W_Sound("fireball_prefire2")); +SOUND(FLAC_FIRE, W_Sound("flac_fire")); +SOUND(GRENADE_BOUNCE1, W_Sound("grenade_bounce1")); +SOUND(GRENADE_BOUNCE2, W_Sound("grenade_bounce2")); +SOUND(GRENADE_BOUNCE3, W_Sound("grenade_bounce3")); +SOUND(GRENADE_BOUNCE4, W_Sound("grenade_bounce4")); +SOUND(GRENADE_BOUNCE5, W_Sound("grenade_bounce5")); +SOUND(GRENADE_BOUNCE6, W_Sound("grenade_bounce6")); +Sound SND_GRENADE_BOUNCE_RANDOM() { + return SOUNDS[SND_GRENADE_BOUNCE1.m_id + rint(random() * 5)]; +} +SOUND(GRENADE_FIRE, W_Sound("grenade_fire")); +SOUND(GRENADE_IMPACT, W_Sound("grenade_impact")); +SOUND(GRENADE_STICK, W_Sound("grenade_stick")); +SOUND(HAGAR_BEEP, W_Sound("hagar_beep")); +SOUND(HAGAR_FIRE, W_Sound("hagar_fire")); +SOUND(HAGAR_LOAD, W_Sound("hagar_load")); +SOUND(HAGEXP1, W_Sound("hagexp1")); +SOUND(HAGEXP2, W_Sound("hagexp2")); +SOUND(HAGEXP3, W_Sound("hagexp3")); +Sound SND_HAGEXP_RANDOM() { + return SOUNDS[SND_HAGEXP1.m_id + rint(random() * 2)]; +} + +SOUND(HOOKBOMB_FIRE, W_Sound("hookbomb_fire")); +SOUND(HOOKBOMB_IMPACT, W_Sound("hookbomb_impact")); +SOUND(HOOK_FIRE, W_Sound("hook_fire")); +SOUND(HOOK_IMPACT, W_Sound("hook_impact")); +SOUND(LASERGUN_FIRE, W_Sound("lasergun_fire")); +SOUND(LASERIMPACT, W_Sound("laserimpact")); +SOUND(LGBEAM_FLY, W_Sound("lgbeam_fly")); +SOUND(MINE_DET, W_Sound("mine_det")); +SOUND(MINE_EXP, W_Sound("mine_exp")); +SOUND(MINE_FIRE, W_Sound("mine_fire")); +SOUND(MINE_STICK, W_Sound("mine_stick")); +SOUND(MINE_TRIGGER, W_Sound("mine_trigger")); +SOUND(MINSTANEXFIRE, W_Sound("minstanexfire")); +SOUND(NEXCHARGE, W_Sound("nexcharge")); +SOUND(NEXFIRE, W_Sound("nexfire")); +SOUND(NEXIMPACT, W_Sound("neximpact")); +SOUND(NEXWHOOSH1, W_Sound("nexwhoosh1")); +SOUND(NEXWHOOSH2, W_Sound("nexwhoosh2")); +SOUND(NEXWHOOSH3, W_Sound("nexwhoosh3")); +Sound SND_NEXWHOOSH_RANDOM() { + return SOUNDS[SND_NEXWHOOSH1.m_id + rint(random() * 2)]; +} +SOUND(RELOAD, W_Sound("reload")); // until weapons have individual reload sounds, precache the reload sound here + +SOUND(RIC1, W_Sound("ric1")); +SOUND(RIC2, W_Sound("ric2")); +SOUND(RIC3, W_Sound("ric3")); +Sound SND_RIC_RANDOM() { + return SOUNDS[SND_RIC1.m_id + rint(random() * 2)]; +} + +SOUND(ROCKET_DET, W_Sound("rocket_det")); +SOUND(ROCKET_FIRE, W_Sound("rocket_fire")); +SOUND(ROCKET_FLY, W_Sound("rocket_fly")); +SOUND(ROCKET_IMPACT, W_Sound("rocket_impact")); +SOUND(ROCKET_MODE, W_Sound("rocket_mode")); +SOUND(SEEKEREXP1, W_Sound("seekerexp1")); +SOUND(SEEKEREXP2, W_Sound("seekerexp2")); +SOUND(SEEKEREXP3, W_Sound("seekerexp3")); +SOUND(SEEKER_FIRE, W_Sound("seeker_fire")); +SOUND(SHOTGUN_FIRE, W_Sound("shotgun_fire")); +SOUND(SHOTGUN_MELEE, W_Sound("shotgun_melee")); +SOUND(STRENGTH_FIRE, W_Sound("strength_fire")); +SOUND(TAGEXP1, W_Sound("tagexp1")); +SOUND(TAGEXP2, W_Sound("tagexp2")); +SOUND(TAGEXP3, W_Sound("tagexp3")); +SOUND(TAG_FIRE, W_Sound("tag_fire")); +SOUND(TAG_IMPACT, W_Sound("tag_impact")); +SOUND(TAG_ROCKET_FLY, W_Sound("tag_rocket_fly")); +SOUND(UNAVAILABLE, W_Sound("unavailable")); +SOUND(UZI_FIRE, W_Sound("uzi_fire")); +SOUND(WEAPONPICKUP, W_Sound("weaponpickup")); +SOUND(WEAPONPICKUP_NEW_TOYS, W_Sound("weaponpickup_new_toys")); +SOUND(WEAPON_SWITCH, W_Sound("weapon_switch")); + +SOUND(CTF_CAPTURE_NEUTRAL, "ctf/capture.ogg"); +SOUND(CTF_CAPTURE_RED, "ctf/red_capture.wav"); +SOUND(CTF_CAPTURE_BLUE, "ctf/blue_capture.wav"); +SOUND(CTF_CAPTURE_YELLOW, "ctf/yellow_capture.ogg"); +SOUND(CTF_CAPTURE_PINK, "ctf/pink_capture.ogg"); +Sound SND_CTF_CAPTURE(int teamid) { + switch (teamid) { + case NUM_TEAM_1: return SND_CTF_CAPTURE_RED; + case NUM_TEAM_2: return SND_CTF_CAPTURE_BLUE; + case NUM_TEAM_3: return SND_CTF_CAPTURE_YELLOW; + case NUM_TEAM_4: return SND_CTF_CAPTURE_PINK; + default: return SND_CTF_CAPTURE_NEUTRAL; + } +} + +SOUND(CTF_DROPPED_NEUTRAL, "ctf/neutral_dropped.wav"); +SOUND(CTF_DROPPED_RED, "ctf/red_dropped.wav"); +SOUND(CTF_DROPPED_BLUE, "ctf/blue_dropped.wav"); +SOUND(CTF_DROPPED_YELLOW, "ctf/yellow_dropped.wav"); +SOUND(CTF_DROPPED_PINK, "ctf/pink_dropped.wav"); +Sound SND_CTF_DROPPED(int teamid) { + switch (teamid) { + case NUM_TEAM_1: return SND_CTF_DROPPED_RED; + case NUM_TEAM_2: return SND_CTF_DROPPED_BLUE; + case NUM_TEAM_3: return SND_CTF_DROPPED_YELLOW; + case NUM_TEAM_4: return SND_CTF_DROPPED_PINK; + default: return SND_CTF_DROPPED_NEUTRAL; + } +} + +SOUND(CTF_PASS, "ctf/pass.wav"); +SOUND(CTF_RESPAWN, "ctf/flag_respawn.wav"); + +SOUND(CTF_RETURNED_NEUTRAL, "ctf/return.wav"); +SOUND(CTF_RETURNED_RED, "ctf/red_returned.wav"); +SOUND(CTF_RETURNED_BLUE, "ctf/blue_returned.wav"); +SOUND(CTF_RETURNED_YELLOW, "ctf/yellow_returned.wav"); +SOUND(CTF_RETURNED_PINK, "ctf/pink_returned.wav"); +Sound SND_CTF_RETURNED(int teamid) { + switch (teamid) { + case NUM_TEAM_1: return SND_CTF_RETURNED_RED; + case NUM_TEAM_2: return SND_CTF_RETURNED_BLUE; + case NUM_TEAM_3: return SND_CTF_RETURNED_YELLOW; + case NUM_TEAM_4: return SND_CTF_RETURNED_PINK; + default: return SND_CTF_RETURNED_NEUTRAL; + } +} + +SOUND(CTF_TAKEN_NEUTRAL, "ctf/neutral_taken.wav"); +SOUND(CTF_TAKEN_RED, "ctf/red_taken.wav"); +SOUND(CTF_TAKEN_BLUE, "ctf/blue_taken.wav"); +SOUND(CTF_TAKEN_YELLOW, "ctf/yellow_taken.wav"); +SOUND(CTF_TAKEN_PINK, "ctf/pink_taken.wav"); +Sound SND_CTF_TAKEN(int teamid) { + switch (teamid) { + case NUM_TEAM_1: return SND_CTF_TAKEN_RED; + case NUM_TEAM_2: return SND_CTF_TAKEN_BLUE; + case NUM_TEAM_3: return SND_CTF_TAKEN_YELLOW; + case NUM_TEAM_4: return SND_CTF_TAKEN_PINK; + default: return SND_CTF_TAKEN_NEUTRAL; + } +} + +SOUND(CTF_TOUCH, "ctf/touch.wav"); + +SOUND(DOM_CLAIM, "domination/claim.wav"); + +SOUND(KA_DROPPED, "keepaway/dropped.wav"); +SOUND(KA_PICKEDUP, "keepaway/pickedup.wav"); +SOUND(KA_RESPAWN, "keepaway/respawn.wav"); +SOUND(KA_TOUCH, "keepaway/touch.wav"); + +SOUND(KH_ALARM, "kh/alarm.wav"); +SOUND(KH_CAPTURE, "kh/capture.wav"); +SOUND(KH_COLLECT, "kh/collect.wav"); +SOUND(KH_DESTROY, "kh/destroy.wav"); +SOUND(KH_DROP, "kh/drop.wav"); + +SOUND(NB_BOUNCE, "nexball/bounce.ogg"); +SOUND(NB_DROP, "nexball/drop.ogg"); +SOUND(NB_SHOOT1, "nexball/shoot1.ogg"); +SOUND(NB_SHOOT2, "nexball/shoot2.ogg"); +SOUND(NB_STEAL, "nexball/steal.ogg"); + +SOUND(ONS_CONTROLPOINT_BUILD, "onslaught/controlpoint_build.ogg"); +SOUND(ONS_CONTROLPOINT_BUILT, "onslaught/controlpoint_built.ogg"); +SOUND(ONS_CONTROLPOINT_UNDERATTACK, "onslaught/controlpoint_underattack.ogg"); +SOUND(ONS_DAMAGEBLOCKEDBYSHIELD, "onslaught/damageblockedbyshield.wav"); +SOUND(ONS_ELECTRICITY_EXPLODE, "onslaught/electricity_explode.ogg"); +SOUND(ONS_GENERATOR_DECAY, "onslaught/generator_decay.ogg"); +SOUND(ONS_GENERATOR_UNDERATTACK, "onslaught/generator_underattack.ogg"); +SOUND(ONS_HIT1, "onslaught/ons_hit1.ogg"); +SOUND(ONS_HIT2, "onslaught/ons_hit2.ogg"); +SOUND(ONS_SPARK1, "onslaught/ons_spark1.ogg"); +SOUND(ONS_SPARK2, "onslaught/ons_spark2.ogg"); +SOUND(ONS_SHOCKWAVE, "onslaught/shockwave.ogg"); + +SOUND(PORTO_BOUNCE, "porto/bounce.ogg"); +SOUND(PORTO_CREATE, "porto/create.ogg"); +SOUND(PORTO_EXPIRE, "porto/expire.ogg"); +SOUND(PORTO_EXPLODE, "porto/explode.ogg"); +SOUND(PORTO_FIRE, "porto/fire.ogg"); +SOUND(PORTO_UNSUPPORTED, "porto/unsupported.ogg"); + +SOUND(TUR_PHASER, "turrets/phaser.ogg"); + +SOUND(VEH_ALARM, "vehicles/alarm.wav"); +SOUND(VEH_ALARM_SHIELD, "vehicles/alarm_shield.wav"); +SOUND(VEH_MISSILE_ALARM, "vehicles/missile_alarm.wav"); + +SOUND(VEH_BUMBLEBEE_FIRE, W_Sound("flacexp3")); + +SOUND(VEH_RACER_BOOST, "vehicles/racer_boost.wav"); +SOUND(VEH_RACER_IDLE, "vehicles/racer_idle.wav"); +SOUND(VEH_RACER_MOVE, "vehicles/racer_move.wav"); + +SOUND(VEH_RAPTOR_FLY, "vehicles/raptor_fly.wav"); +SOUND(VEH_RAPTOR_SPEED, "vehicles/raptor_speed.wav"); + +SOUND(VEH_SPIDERBOT_DIE, "vehicles/spiderbot_die.wav"); +SOUND(VEH_SPIDERBOT_IDLE, "vehicles/spiderbot_idle.wav"); +SOUND(VEH_SPIDERBOT_JUMP, "vehicles/spiderbot_jump.wav"); +SOUND(VEH_SPIDERBOT_LAND, "vehicles/spiderbot_land.wav"); +SOUND(VEH_SPIDERBOT_STRAFE, "vehicles/spiderbot_strafe.wav"); +SOUND(VEH_SPIDERBOT_WALK, "vehicles/spiderbot_walk.wav"); + +SOUND(NADE_BEEP, "overkill/grenadebip.ogg"); + +SOUND(BUFF_LOST, "relics/relic_effect.wav"); + +SOUND(POWEROFF, "misc/poweroff.wav"); +SOUND(POWERUP, "misc/powerup.ogg"); +SOUND(SHIELD_RESPAWN, "misc/shield_respawn.wav"); +SOUND(STRENGTH_RESPAWN, "misc/strength_respawn.wav"); + +SOUND(ARMOR25, "misc/armor25.wav"); +SOUND(ARMORIMPACT, "misc/armorimpact.wav"); +SOUND(BODYIMPACT1, "misc/bodyimpact1.wav"); +SOUND(BODYIMPACT2, "misc/bodyimpact2.wav"); + +SOUND(ITEMPICKUP, "misc/itempickup.ogg"); +SOUND(ITEMRESPAWNCOUNTDOWN, "misc/itemrespawncountdown.ogg"); +SOUND(ITEMRESPAWN, "misc/itemrespawn.ogg"); +SOUND(MEGAHEALTH, "misc/megahealth.ogg"); + +SOUND(LAVA, "player/lava.wav"); +SOUND(SLIME, "player/slime.wav"); + +SOUND(GIB, "misc/gib.wav"); +SOUND(GIB_SPLAT01, "misc/gib_splat01.wav"); +SOUND(GIB_SPLAT02, "misc/gib_splat02.wav"); +SOUND(GIB_SPLAT03, "misc/gib_splat03.wav"); +SOUND(GIB_SPLAT04, "misc/gib_splat04.wav"); +Sound SND_GIB_SPLAT_RANDOM() { + return SOUNDS[SND_GIB_SPLAT01.m_id + floor(prandom() * 4)]; +} + +SOUND(HIT, "misc/hit.wav"); +SOUND(TYPEHIT, "misc/typehit.wav"); + +SOUND(SPAWN, "misc/spawn.ogg"); + +SOUND(TALK, "misc/talk.wav"); + +SOUND(TELEPORT, "misc/teleport.ogg"); + +SOUND(INVSHOT, "misc/invshot.wav"); + +SOUND(JETPACK_FLY, "misc/jetpack_fly.ogg"); diff --git a/qcsrc/common/sounds/sounds.qh b/qcsrc/common/sounds/sounds.qh new file mode 100644 index 0000000000..c9838b2f6a --- /dev/null +++ b/qcsrc/common/sounds/sounds.qh @@ -0,0 +1,59 @@ +#ifndef SOUNDS_H +#define SOUNDS_H + +#include "../teams.qh" + +// Play all sounds via sound7, for access to the extra channels. +// Otherwise, channels 8 to 15 would be blocked for a weird QW feature. +#ifdef SVQC + #define _sound(e, c, s, v, a) do { \ + entity __e = e; \ + if (!sound_allowed(MSG_BROADCAST, __e)) break; \ + sound7(__e, c, s, v, a, 0, 0); \ + } while (0) +#else + #define _sound(e, c, s, v, a) sound7(e, c, s, v, a, 0, 0) +#endif +#define sound(e, c, s, v, a) _sound(e, c, s.sound_str(), v, a) +// Used in places where a string is required +#define SND(id) (SND_##id.sound_str()) + +void RegisterSounds(); +const int MAX_SOUNDS = 128; +entity SOUNDS[MAX_SOUNDS], SOUNDS_first, SOUNDS_last; +int SOUNDS_COUNT; + +CLASS(Sound, Object) + ATTRIB(Sound, m_id, int, 0) + ATTRIB(Sound, sound_str, string(), func_null) + CONSTRUCTOR(Sound, string() path) + { + CONSTRUCT(Sound); + this.sound_str = path; + } + METHOD(Sound, sound_precache, void(entity this)) { + string s = this.sound_str(); + if (s && s != "" && !fexists(strcat("sound/", s))) { + LOG_WARNINGF("Missing sound: \"%s\"\n", s); + return; + } + LOG_TRACEF("precache_sound(\"%s\")\n", s); + precache_sound(s); + } +ENDCLASS(Sound) + +#define SOUND(name, path) \ + string SND_##name##_get() { return path; } \ + REGISTER(RegisterSounds, SND, SOUNDS, SOUNDS_COUNT, name, m_id, NEW(Sound, SND_##name##_get)) +REGISTER_REGISTRY(RegisterSounds) + +STATIC_INIT(RegisterSounds_precache) { + FOREACH(SOUNDS, true, LAMBDA({ + it.sound_precache(it); + })); +} + +SOUND(Null, "misc/null.wav"); +#include "sounds.inc" + +#endif diff --git a/qcsrc/common/triggers/func/bobbing.qc b/qcsrc/common/triggers/func/bobbing.qc index 298043bb57..8c7000d933 100644 --- a/qcsrc/common/triggers/func/bobbing.qc +++ b/qcsrc/common/triggers/func/bobbing.qc @@ -28,8 +28,8 @@ noise : path/name of looping .wav file to play. dmg : Do this mutch dmg every .dmgtime intervall when blocked dmgtime : See above. */ -void spawnfunc_func_bobbing() -{SELFPARAM(); +spawnfunc(func_bobbing) +{ entity controller; if (self.noise != "") { diff --git a/qcsrc/common/triggers/func/breakable.qc b/qcsrc/common/triggers/func/breakable.qc index 0430db2d41..af9a6b4233 100644 --- a/qcsrc/common/triggers/func/breakable.qc +++ b/qcsrc/common/triggers/func/breakable.qc @@ -162,7 +162,7 @@ void func_breakable_behave_restore() self.nextthink = 0; // cancel auto respawn func_breakable_colormod(); if (self.noise1) - sound (self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTEN_NORM); + _sound (self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTEN_NORM); } void func_breakable_init_for_player(entity player) @@ -207,7 +207,7 @@ void func_breakable_destroy() func_breakable_destroyed(); if(self.noise) - sound (self, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NORM); + _sound (self, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NORM); if(self.dmg) RadiusDamage(self, activator, self.dmg, self.dmg_edge, self.dmg_radius, self, world, self.dmg_force, DEATH_HURTTRIGGER, world); @@ -266,8 +266,8 @@ void func_breakable_reset() } // destructible walls that can be used to trigger target_objective_decrease -void spawnfunc_func_breakable() -{SELFPARAM(); +spawnfunc(func_breakable) +{ float n, i; if(!self.health) self.health = 100; @@ -335,7 +335,7 @@ void spawnfunc_func_breakable() } // for use in maps with a "model" key set -void spawnfunc_misc_breakablemodel() { - spawnfunc_func_breakable(); +spawnfunc(misc_breakablemodel) { + spawnfunc_func_breakable(this); } #endif diff --git a/qcsrc/common/triggers/func/breakable.qh b/qcsrc/common/triggers/func/breakable.qh index b641d94462..75cfb94c69 100644 --- a/qcsrc/common/triggers/func/breakable.qh +++ b/qcsrc/common/triggers/func/breakable.qh @@ -2,7 +2,7 @@ #define TRIGGERS_FUNC_BREAKABLE_H #ifdef SVQC -void spawnfunc_func_breakable(); +spawnfunc(func_breakable); #endif #endif diff --git a/qcsrc/common/triggers/func/button.qc b/qcsrc/common/triggers/func/button.qc index 228b3f810a..ab1cff538e 100644 --- a/qcsrc/common/triggers/func/button.qc +++ b/qcsrc/common/triggers/func/button.qc @@ -44,7 +44,7 @@ void button_fire() return; if (self.noise != "") - sound (self, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NORM); + _sound (self, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NORM); self.state = STATE_UP; SUB_CalcMove (self.pos2, TSPEED_LINEAR, self.speed, button_wait); @@ -112,8 +112,8 @@ When a button is touched, it moves some distance in the direction of it's angle, 2) metallic click 3) in-out */ -void spawnfunc_func_button() -{SELFPARAM(); +spawnfunc(func_button) +{ SetMovedir (); if (!InitMovingBrushTrigger()) diff --git a/qcsrc/common/triggers/func/conveyor.qc b/qcsrc/common/triggers/func/conveyor.qc index 4f5a7d6ea5..32c12299e0 100644 --- a/qcsrc/common/triggers/func/conveyor.qc +++ b/qcsrc/common/triggers/func/conveyor.qc @@ -129,15 +129,15 @@ void conveyor_init() self.SendFlags |= 1; } -void spawnfunc_trigger_conveyor() +spawnfunc(trigger_conveyor) { SetMovedir(); EXACTTRIGGER_INIT; conveyor_init(); } -void spawnfunc_func_conveyor() -{SELFPARAM(); +spawnfunc(func_conveyor) +{ SetMovedir(); InitMovingBrushTrigger(); self.movetype = MOVETYPE_NONE; diff --git a/qcsrc/common/triggers/func/door.qc b/qcsrc/common/triggers/func/door.qc index 8d19a740c2..fed8e9fa42 100644 --- a/qcsrc/common/triggers/func/door.qc +++ b/qcsrc/common/triggers/func/door.qc @@ -87,7 +87,7 @@ void door_blocked() void door_hit_top() {SELFPARAM(); if (self.noise1 != "") - sound (self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTEN_NORM); + _sound (self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTEN_NORM); self.state = STATE_TOP; if (self.spawnflags & DOOR_TOGGLE) return; // don't come down automatically @@ -104,14 +104,14 @@ void door_hit_top() void door_hit_bottom() {SELFPARAM(); if (self.noise1 != "") - sound (self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTEN_NORM); + _sound (self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTEN_NORM); self.state = STATE_BOTTOM; } void door_go_down() {SELFPARAM(); if (self.noise2 != "") - sound (self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTEN_NORM); + _sound (self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTEN_NORM); if (self.max_health) { self.takedamage = DAMAGE_YES; @@ -134,7 +134,7 @@ void door_go_up() } if (self.noise2 != "") - sound (self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTEN_NORM); + _sound (self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTEN_NORM); self.state = STATE_UP; SUB_CalcMove (self.pos2, TSPEED_LINEAR, self.speed, door_hit_top); @@ -180,7 +180,7 @@ float door_check_keys(void) if (other.key_door_messagetime <= time) { - play2(other, "misc/talk.wav"); + play2(other, SND(TALK)); Send_Notification(NOTIF_ONE, other, MSG_CENTER, CENTER_DOOR_LOCKED_ALSONEED, item_keys_keylist(door.itemkeys)); other.key_door_messagetime = time + 2; } @@ -190,7 +190,7 @@ float door_check_keys(void) // no keys were used if (other.key_door_messagetime <= time) { - play2(other, "misc/talk.wav"); + play2(other, SND(TALK)); Send_Notification(NOTIF_ONE, other, MSG_CENTER, CENTER_DOOR_LOCKED_NEED, item_keys_keylist(door.itemkeys)); other.key_door_messagetime = time + 2; @@ -202,7 +202,7 @@ float door_check_keys(void) { #ifdef SVQC // door is now unlocked - play2(other, "misc/talk.wav"); + play2(other, SND(TALK)); Send_Notification(NOTIF_ONE, other, MSG_CENTER, CENTER_DOOR_UNLOCKED); #endif return true; @@ -321,7 +321,7 @@ void door_touch() { if (IS_CLIENT(other)) centerprint(other, self.owner.message); - play2(other, "misc/talk.wav"); + play2(other, SND(TALK)); } #endif } @@ -367,7 +367,7 @@ void door_generic_plat_blocked() void door_rotating_hit_top() {SELFPARAM(); if (self.noise1 != "") - sound (self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTEN_NORM); + _sound (self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTEN_NORM); self.state = STATE_TOP; if (self.spawnflags & DOOR_TOGGLE) return; // don't come down automatically @@ -378,7 +378,7 @@ void door_rotating_hit_top() void door_rotating_hit_bottom() {SELFPARAM(); if (self.noise1 != "") - sound (self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTEN_NORM); + _sound (self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTEN_NORM); if (self.lip==666) // self.lip is used to remember reverse opening direction for door_rotating { self.pos2 = '0 0 0' - self.pos2; @@ -390,7 +390,7 @@ void door_rotating_hit_bottom() void door_rotating_go_down() {SELFPARAM(); if (self.noise2 != "") - sound (self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTEN_NORM); + _sound (self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTEN_NORM); if (self.max_health) { self.takedamage = DAMAGE_YES; @@ -412,7 +412,7 @@ void door_rotating_go_up() return; } if (self.noise2 != "") - sound (self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTEN_NORM); + _sound (self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTEN_NORM); self.state = STATE_UP; SUB_CalcAngleMove (self.pos2, TSPEED_LINEAR, self.speed, door_rotating_hit_top); @@ -723,8 +723,8 @@ void door_reset() #ifdef SVQC // spawnflags require key (for now only func_door) -void spawnfunc_func_door() -{SELFPARAM(); +spawnfunc(func_door) +{ // Quake 1 keys compatibility if (self.spawnflags & SPAWNFLAGS_GOLD_KEY) self.itemkeys |= ITEM_KEY_BIT(0); diff --git a/qcsrc/common/triggers/func/door_rotating.qc b/qcsrc/common/triggers/func/door_rotating.qc index fbe579c136..e01a7e73e2 100644 --- a/qcsrc/common/triggers/func/door_rotating.qc +++ b/qcsrc/common/triggers/func/door_rotating.qc @@ -44,8 +44,8 @@ void door_rotating_init_startopen() } -void spawnfunc_func_door_rotating() -{SELFPARAM(); +spawnfunc(func_door_rotating) +{ //if (!self.deathtype) // map makers can override this // self.deathtype = " got in the way"; diff --git a/qcsrc/common/triggers/func/door_secret.qc b/qcsrc/common/triggers/func/door_secret.qc index b793228784..8686c671f7 100644 --- a/qcsrc/common/triggers/func/door_secret.qc +++ b/qcsrc/common/triggers/func/door_secret.qc @@ -35,7 +35,7 @@ void fd_secret_use() // Make a sound, wait a little... if (self.noise1 != "") - sound(self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTEN_NORM); + _sound(self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTEN_NORM); self.SUB_NEXTTHINK = self.SUB_LTIME + 0.1; temp = 1 - (self.spawnflags & SECRET_1ST_LEFT); // 1 or -1 @@ -60,7 +60,7 @@ void fd_secret_use() self.dest2 = self.dest1 + v_forward * self.t_length; SUB_CalcMove(self.dest1, TSPEED_LINEAR, self.speed, fd_secret_move1); if (self.noise2 != "") - sound(self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTEN_NORM); + _sound(self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTEN_NORM); } void fd_secret_damage(entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force) @@ -74,14 +74,14 @@ void fd_secret_move1() self.SUB_NEXTTHINK = self.SUB_LTIME + 1.0; self.think = fd_secret_move2; if (self.noise3 != "") - sound(self, CH_TRIGGER_SINGLE, self.noise3, VOL_BASE, ATTEN_NORM); + _sound(self, CH_TRIGGER_SINGLE, self.noise3, VOL_BASE, ATTEN_NORM); } // Start moving sideways w/sound... void fd_secret_move2() {SELFPARAM(); if (self.noise2 != "") - sound(self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTEN_NORM); + _sound(self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTEN_NORM); SUB_CalcMove(self.dest2, TSPEED_LINEAR, self.speed, fd_secret_move3); } @@ -89,7 +89,7 @@ void fd_secret_move2() void fd_secret_move3() {SELFPARAM(); if (self.noise3 != "") - sound(self, CH_TRIGGER_SINGLE, self.noise3, VOL_BASE, ATTEN_NORM); + _sound(self, CH_TRIGGER_SINGLE, self.noise3, VOL_BASE, ATTEN_NORM); if (!(self.spawnflags & SECRET_OPEN_ONCE)) { self.SUB_NEXTTHINK = self.SUB_LTIME + self.wait; @@ -101,7 +101,7 @@ void fd_secret_move3() void fd_secret_move4() {SELFPARAM(); if (self.noise2 != "") - sound(self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTEN_NORM); + _sound(self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTEN_NORM); SUB_CalcMove(self.dest1, TSPEED_LINEAR, self.speed, fd_secret_move5); } @@ -111,13 +111,13 @@ void fd_secret_move5() self.SUB_NEXTTHINK = self.SUB_LTIME + 1.0; self.think = fd_secret_move6; if (self.noise3 != "") - sound(self, CH_TRIGGER_SINGLE, self.noise3, VOL_BASE, ATTEN_NORM); + _sound(self, CH_TRIGGER_SINGLE, self.noise3, VOL_BASE, ATTEN_NORM); } void fd_secret_move6() {SELFPARAM(); if (self.noise2 != "") - sound(self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTEN_NORM); + _sound(self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTEN_NORM); SUB_CalcMove(self.oldorigin, TSPEED_LINEAR, self.speed, fd_secret_done); } @@ -130,7 +130,7 @@ void fd_secret_done() //self.th_pain = fd_secret_use; } if (self.noise3 != "") - sound(self, CH_TRIGGER_SINGLE, self.noise3, VOL_BASE, ATTEN_NORM); + _sound(self, CH_TRIGGER_SINGLE, self.noise3, VOL_BASE, ATTEN_NORM); } void secret_blocked() @@ -161,7 +161,7 @@ void secret_touch() { if (IS_CLIENT(other)) centerprint(other, self.message); - play2(other, "misc/talk.wav"); + play2(other, SND(TALK)); } } @@ -194,8 +194,8 @@ If a secret door has a targetname, it will only be opened by it's botton or trig 3) base */ -void spawnfunc_func_door_secret() -{SELFPARAM(); +spawnfunc(func_door_secret) +{ /*if (!self.deathtype) // map makers can override this self.deathtype = " got in the way";*/ diff --git a/qcsrc/common/triggers/func/fourier.qc b/qcsrc/common/triggers/func/fourier.qc index 552fffe5a1..2b3d07f6ea 100644 --- a/qcsrc/common/triggers/func/fourier.qc +++ b/qcsrc/common/triggers/func/fourier.qc @@ -39,8 +39,8 @@ void func_fourier_controller_think() self.owner.velocity = (v - self.owner.origin) * 10; } -void spawnfunc_func_fourier() -{SELFPARAM(); +spawnfunc(func_fourier) +{ entity controller; if (self.noise != "") { diff --git a/qcsrc/common/triggers/func/ladder.qc b/qcsrc/common/triggers/func/ladder.qc index fc3d47210e..3785299e24 100644 --- a/qcsrc/common/triggers/func/ladder.qc +++ b/qcsrc/common/triggers/func/ladder.qc @@ -39,8 +39,8 @@ void func_ladder_link() //self.model = "null"; } -void spawnfunc_func_ladder() -{SELFPARAM(); +spawnfunc(func_ladder) +{ self.mdl = self.model; EXACTTRIGGER_INIT; self.touch = func_ladder_touch; @@ -48,8 +48,8 @@ void spawnfunc_func_ladder() func_ladder_link(); } -void spawnfunc_func_water() -{SELFPARAM(); +spawnfunc(func_water) +{ self.mdl = self.model; EXACTTRIGGER_INIT; self.touch = func_ladder_touch; diff --git a/qcsrc/common/triggers/func/pendulum.qc b/qcsrc/common/triggers/func/pendulum.qc index b23541e03a..d8bab869e2 100644 --- a/qcsrc/common/triggers/func/pendulum.qc +++ b/qcsrc/common/triggers/func/pendulum.qc @@ -21,8 +21,8 @@ void func_pendulum_controller_think() } } -void spawnfunc_func_pendulum() -{SELFPARAM(); +spawnfunc(func_pendulum) +{ entity controller; if (self.noise != "") { diff --git a/qcsrc/common/triggers/func/plat.qc b/qcsrc/common/triggers/func/plat.qc index f2c57be21e..de4c53cb53 100644 --- a/qcsrc/common/triggers/func/plat.qc +++ b/qcsrc/common/triggers/func/plat.qc @@ -59,8 +59,8 @@ void plat_link() //Net_LinkEntity(self, 0, false, plat_send); } -void spawnfunc_func_plat() -{SELFPARAM(); +spawnfunc(func_plat) +{ if (self.sounds == 0) self.sounds = 2; diff --git a/qcsrc/common/triggers/func/pointparticles.qc b/qcsrc/common/triggers/func/pointparticles.qc index 3c11b2a5b6..04ab77f7fd 100644 --- a/qcsrc/common/triggers/func/pointparticles.qc +++ b/qcsrc/common/triggers/func/pointparticles.qc @@ -112,8 +112,8 @@ void pointparticles_reset() self.state = 0; } -void spawnfunc_func_pointparticles() -{SELFPARAM(); +spawnfunc(func_pointparticles) +{ if(self.model != "") _setmodel(self, self.model); if(self.noise != "") @@ -157,8 +157,8 @@ void spawnfunc_func_pointparticles() self.nextthink = time; } -void spawnfunc_func_sparks() -{SELFPARAM(); +spawnfunc(func_sparks) +{ // self.cnt is the amount of sparks that one burst will spawn if(self.cnt < 1) { self.cnt = 25.0; // nice default value @@ -179,7 +179,7 @@ void spawnfunc_func_sparks() self.wait = 0; self.cnt = 0; // use mdl - spawnfunc_func_pointparticles(); + spawnfunc_func_pointparticles(this); } #elif defined(CSQC) @@ -230,7 +230,7 @@ void Draw_PointParticles() if(self.noise != "") { setorigin(self, p); - sound(self, CH_AMBIENT, self.noise, VOL_BASE * self.volume, self.atten); + _sound(self, CH_AMBIENT, self.noise, VOL_BASE * self.volume, self.atten); } self.just_toggled = 0; } diff --git a/qcsrc/common/triggers/func/rainsnow.qc b/qcsrc/common/triggers/func/rainsnow.qc index 8c00f9ce21..25085ae4aa 100644 --- a/qcsrc/common/triggers/func/rainsnow.qc +++ b/qcsrc/common/triggers/func/rainsnow.qc @@ -26,8 +26,8 @@ Keys: "count" adjusts density, this many particles fall every second for a 1024x1024 area, default is 2000 */ -void spawnfunc_func_rain() -{SELFPARAM(); +spawnfunc(func_rain) +{ self.dest = self.velocity; self.velocity = '0 0 0'; if (!self.dest) @@ -64,8 +64,8 @@ Keys: "count" adjusts density, this many particles fall every second for a 1024x1024 area, default is 2000 */ -void spawnfunc_func_snow() -{SELFPARAM(); +spawnfunc(func_snow) +{ self.dest = self.velocity; self.velocity = '0 0 0'; if (!self.dest) diff --git a/qcsrc/common/triggers/func/rotating.qc b/qcsrc/common/triggers/func/rotating.qc index 2e3c7851a8..be2c7ed9c3 100644 --- a/qcsrc/common/triggers/func/rotating.qc +++ b/qcsrc/common/triggers/func/rotating.qc @@ -26,8 +26,8 @@ dmg : Do this mutch dmg every .dmgtime intervall when blocked dmgtime : See above. */ -void spawnfunc_func_rotating() -{SELFPARAM(); +spawnfunc(func_rotating) +{ if (self.noise != "") { precache_sound(self.noise); diff --git a/qcsrc/common/triggers/func/stardust.qc b/qcsrc/common/triggers/func/stardust.qc index 0c329cdb27..859cdf53df 100644 --- a/qcsrc/common/triggers/func/stardust.qc +++ b/qcsrc/common/triggers/func/stardust.qc @@ -1,6 +1,6 @@ #ifdef SVQC -void spawnfunc_func_stardust() -{SELFPARAM(); +spawnfunc(func_stardust) +{ self.effects = EF_STARDUST; CSQCMODEL_AUTOINIT(self); diff --git a/qcsrc/common/triggers/func/train.qc b/qcsrc/common/triggers/func/train.qc index 4149b538dc..4284d24031 100644 --- a/qcsrc/common/triggers/func/train.qc +++ b/qcsrc/common/triggers/func/train.qc @@ -98,7 +98,7 @@ void train_next() } if(self.noise != "") - sound(self, CH_TRIGGER_SINGLE, self.noise, VOL_BASE, ATTEN_IDLE); + _sound(self, CH_TRIGGER_SINGLE, self.noise, VOL_BASE, ATTEN_IDLE); } #ifdef SVQC @@ -183,8 +183,8 @@ speed : speed the train moves (can be overridden by each spawnfunc_path_corner) target : targetname of first spawnfunc_path_corner (starts here) */ #ifdef SVQC -void spawnfunc_func_train() -{SELFPARAM(); +spawnfunc(func_train) +{ if (self.noise != "") precache_sound(self.noise); diff --git a/qcsrc/common/triggers/func/vectormamamam.qc b/qcsrc/common/triggers/func/vectormamamam.qc index 32355004be..57d3a0636f 100644 --- a/qcsrc/common/triggers/func/vectormamamam.qc +++ b/qcsrc/common/triggers/func/vectormamamam.qc @@ -98,8 +98,8 @@ void func_vectormamamam_findtarget() controller.think = func_vectormamamam_controller_think; } -void spawnfunc_func_vectormamamam() -{SELFPARAM(); +spawnfunc(func_vectormamamam) +{ if (self.noise != "") { precache_sound(self.noise); diff --git a/qcsrc/common/triggers/misc/corner.qc b/qcsrc/common/triggers/misc/corner.qc index 390fd2c79c..ccac77b6c9 100644 --- a/qcsrc/common/triggers/misc/corner.qc +++ b/qcsrc/common/triggers/misc/corner.qc @@ -26,8 +26,8 @@ void corner_link() //Net_LinkEntity(self, false, 0, corner_send); } -void spawnfunc_path_corner() -{SELFPARAM(); +spawnfunc(path_corner) +{ // setup values for overriding train movement // if a second value does not exist, both start and end speeds are the single value specified set_platmovetype(self, self.platmovetype); diff --git a/qcsrc/common/triggers/misc/follow.qc b/qcsrc/common/triggers/misc/follow.qc index 02c9dcc277..842248a4b3 100644 --- a/qcsrc/common/triggers/misc/follow.qc +++ b/qcsrc/common/triggers/misc/follow.qc @@ -62,8 +62,8 @@ void follow_init() } } -void spawnfunc_misc_follow() -{SELFPARAM(); +spawnfunc(misc_follow) +{ InitializeEntity(self, follow_init, INITPRIO_FINDTARGET); } #endif diff --git a/qcsrc/common/triggers/misc/laser.qc b/qcsrc/common/triggers/misc/laser.qc index 52d2caf65a..ec4a9e277a 100644 --- a/qcsrc/common/triggers/misc/laser.qc +++ b/qcsrc/common/triggers/misc/laser.qc @@ -203,8 +203,8 @@ void laser_reset() self.state = 0; } -void spawnfunc_misc_laser() -{SELFPARAM(); +spawnfunc(misc_laser) +{ if(self.mdl) { if(self.mdl == "none") diff --git a/qcsrc/common/triggers/misc/teleport_dest.qc b/qcsrc/common/triggers/misc/teleport_dest.qc index a3c9783537..00752cfa59 100644 --- a/qcsrc/common/triggers/misc/teleport_dest.qc +++ b/qcsrc/common/triggers/misc/teleport_dest.qc @@ -1,7 +1,7 @@ #ifdef SVQC -void spawnfunc_info_teleport_destination (void) -{SELFPARAM(); +spawnfunc(info_teleport_destination) +{ self.classname = "info_teleport_destination"; self.mangle = self.angles; @@ -17,14 +17,14 @@ void spawnfunc_info_teleport_destination (void) objerror ("^3Teleport destination without a targetname"); } -void spawnfunc_misc_teleporter_dest (void) +spawnfunc(misc_teleporter_dest) { - spawnfunc_info_teleport_destination(); + spawnfunc_info_teleport_destination(this); } -void spawnfunc_target_teleporter (void) +spawnfunc(target_teleporter) { - spawnfunc_info_teleport_destination(); + spawnfunc_info_teleport_destination(this); } #endif diff --git a/qcsrc/common/triggers/platforms.qc b/qcsrc/common/triggers/platforms.qc index b4f387470c..dc568cae09 100644 --- a/qcsrc/common/triggers/platforms.qc +++ b/qcsrc/common/triggers/platforms.qc @@ -65,7 +65,7 @@ void plat_spawn_inside_trigger() void plat_hit_top() {SELFPARAM(); - sound (self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTEN_NORM); + _sound (self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTEN_NORM); self.state = 1; self.SUB_THINK = plat_go_down; @@ -74,20 +74,20 @@ void plat_hit_top() void plat_hit_bottom() {SELFPARAM(); - sound (self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTEN_NORM); + _sound (self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTEN_NORM); self.state = 2; } void plat_go_down() {SELFPARAM(); - sound (self, CH_TRIGGER_SINGLE, self.noise, VOL_BASE, ATTEN_NORM); + _sound (self, CH_TRIGGER_SINGLE, self.noise, VOL_BASE, ATTEN_NORM); self.state = 3; SUB_CalcMove (self.pos2, TSPEED_LINEAR, self.speed, plat_hit_bottom); } void plat_go_up() {SELFPARAM(); - sound (self, CH_TRIGGER_SINGLE, self.noise, VOL_BASE, ATTEN_NORM); + _sound (self, CH_TRIGGER_SINGLE, self.noise, VOL_BASE, ATTEN_NORM); self.state = 4; SUB_CalcMove (self.pos1, TSPEED_LINEAR, self.speed, plat_hit_top); } diff --git a/qcsrc/common/triggers/target/changelevel.qc b/qcsrc/common/triggers/target/changelevel.qc index 8dc694e621..51e360e0c5 100644 --- a/qcsrc/common/triggers/target/changelevel.qc +++ b/qcsrc/common/triggers/target/changelevel.qc @@ -3,8 +3,9 @@ .entity chlevel_targ; -void spawnfunc_target_changelevel_use() -{SELFPARAM(); +void target_changelevel_use() +{ + SELFPARAM(); if(self.spawnflags & 2) { // simply don't react if a non-player triggers it @@ -35,9 +36,9 @@ void spawnfunc_target_changelevel_use() localcmd(strcat("changelevel ", self.chmap, "\n")); } -void spawnfunc_target_changelevel() -{SELFPARAM(); - self.use = spawnfunc_target_changelevel_use; +spawnfunc(target_changelevel) +{ + self.use = target_changelevel_use; if(!self.count) { self.count = 0.7; } } diff --git a/qcsrc/common/triggers/target/location.qc b/qcsrc/common/triggers/target/location.qc index 554032ee60..14512c794c 100644 --- a/qcsrc/common/triggers/target/location.qc +++ b/qcsrc/common/triggers/target/location.qc @@ -1,13 +1,13 @@ #ifdef SVQC -void spawnfunc_target_location() -{SELFPARAM(); +spawnfunc(target_location) +{ self.classname = "target_location"; // location name in netname // eventually support: count, teamgame selectors, line of sight? } -void spawnfunc_info_location() -{SELFPARAM(); +spawnfunc(info_location) +{ self.classname = "target_location"; self.message = self.netname; } diff --git a/qcsrc/common/triggers/target/music.qc b/qcsrc/common/triggers/target/music.qc index 33261eabdb..2748ed6f63 100644 --- a/qcsrc/common/triggers/target/music.qc +++ b/qcsrc/common/triggers/target/music.qc @@ -46,8 +46,8 @@ void target_music_use() entity head; FOR_EACH_SPEC(head) if(head.enemy == activator) { msg_entity = head; target_music_sendto(MSG_ONE, 1); } } -void spawnfunc_target_music() -{SELFPARAM(); +spawnfunc(target_music) +{ self.use = target_music_use; self.reset = target_music_reset; if(!self.volume) @@ -125,8 +125,8 @@ void trigger_music_use() self.cnt = !self.cnt; self.SendFlags |= 0x80; } -void spawnfunc_trigger_music() -{SELFPARAM(); +spawnfunc(trigger_music) +{ if(self.model != "") _setmodel(self, self.model); if(!self.volume) @@ -182,9 +182,9 @@ void TargetMusic_Advance() if(vol != vol0) { if(vol0 < 0) - sound(e, CH_BGM_SINGLE, e.noise, vol, ATTEN_NONE); // restart + _sound(e, CH_BGM_SINGLE, e.noise, vol, ATTEN_NONE); // restart else - sound(e, CH_BGM_SINGLE, "", vol, ATTEN_NONE); + _sound(e, CH_BGM_SINGLE, "", vol, ATTEN_NONE); e.lastvol = vol; } } @@ -223,7 +223,7 @@ void Net_TargetMusic() strunzone(e.noise); e.noise = strzone(noi); precache_sound(e.noise); - sound(e, CH_BGM_SINGLE, e.noise, 0, ATTEN_NONE); + _sound(e, CH_BGM_SINGLE, e.noise, 0, ATTEN_NONE); if(getsoundtime(e, CH_BGM_SINGLE) < 0) { LOG_TRACEF("Cannot initialize sound %s\n", e.noise); @@ -310,7 +310,7 @@ void Ent_ReadTriggerMusic() if(self.noise != s) { precache_sound(self.noise); - sound(self, CH_BGM_SINGLE, self.noise, 0, ATTEN_NONE); + _sound(self, CH_BGM_SINGLE, self.noise, 0, ATTEN_NONE); if(getsoundtime(self, CH_BGM_SINGLE) < 0) { LOG_TRACEF("Cannot initialize sound %s\n", self.noise); diff --git a/qcsrc/common/triggers/target/spawn.qc b/qcsrc/common/triggers/target/spawn.qc index 591b971d50..10fe3c764a 100644 --- a/qcsrc/common/triggers/target/spawn.qc +++ b/qcsrc/common/triggers/target/spawn.qc @@ -280,6 +280,7 @@ void target_spawn_use() if(!target_spawn_cancreate()) return; e = spawn(); + e.spawnfunc_checked = true; target_spawn_useon(e); e.target_spawn_id = self.target_spawn_id; } @@ -332,8 +333,8 @@ void initialize_field_db() } } -void spawnfunc_target_spawn() -{SELFPARAM(); +spawnfunc(target_spawn) +{ initialize_field_db(); self.use = target_spawn_use; self.message = strzone(strreplace("'", "\"", self.message)); diff --git a/qcsrc/common/triggers/target/speaker.qc b/qcsrc/common/triggers/target/speaker.qc index e0701dc14f..0b3767ff65 100644 --- a/qcsrc/common/triggers/target/speaker.qc +++ b/qcsrc/common/triggers/target/speaker.qc @@ -10,9 +10,9 @@ void target_speaker_use_activator() { var .string sample = GetVoiceMessageSampleField(substring(self.noise, 1, -1)); if(GetPlayerSoundSampleField_notFound) - snd = "misc/null.wav"; + snd = SND(Null); else if(activator.(sample) == "") - snd = "misc/null.wav"; + snd = SND(Null); else { tokenize_console(activator.(sample)); @@ -36,9 +36,9 @@ void target_speaker_use_on() { var .string sample = GetVoiceMessageSampleField(substring(self.noise, 1, -1)); if(GetPlayerSoundSampleField_notFound) - snd = "misc/null.wav"; + snd = SND(Null); else if(activator.(sample) == "") - snd = "misc/null.wav"; + snd = SND(Null); else { tokenize_console(activator.(sample)); @@ -52,13 +52,13 @@ void target_speaker_use_on() } else snd = self.noise; - sound(self, CH_TRIGGER_SINGLE, snd, VOL_BASE * self.volume, self.atten); + _sound(self, CH_TRIGGER_SINGLE, snd, VOL_BASE * self.volume, self.atten); if(self.spawnflags & 3) self.use = target_speaker_use_off; } void target_speaker_use_off() {SELFPARAM(); - sound(self, CH_TRIGGER_SINGLE, "misc/null.wav", VOL_BASE * self.volume, self.atten); + sound(self, CH_TRIGGER_SINGLE, SND_Null, VOL_BASE * self.volume, self.atten); self.use = target_speaker_use_on; } void target_speaker_reset() @@ -75,8 +75,8 @@ void target_speaker_reset() } } -void spawnfunc_target_speaker() -{SELFPARAM(); +spawnfunc(target_speaker) +{ // TODO: "*" prefix to sound file name // TODO: wait and random (just, HOW? random is not a field) if(self.noise) diff --git a/qcsrc/common/triggers/target/voicescript.qc b/qcsrc/common/triggers/target/voicescript.qc index 35d84da8df..1d1816a774 100644 --- a/qcsrc/common/triggers/target/voicescript.qc +++ b/qcsrc/common/triggers/target/voicescript.qc @@ -73,8 +73,8 @@ void target_voicescript_next(entity pl) } } -void spawnfunc_target_voicescript() -{SELFPARAM(); +spawnfunc(target_voicescript) +{ // netname: directory of the sound files // message: list of "sound file" duration "sound file" duration, a *, and again a list // foo1 4.1 foo2 4.0 foo3 -3.1 * fool1 1.1 fool2 7.1 fool3 9.1 fool4 3.7 diff --git a/qcsrc/common/triggers/teleporters.qc b/qcsrc/common/triggers/teleporters.qc index bc43986019..94f2bd26bc 100644 --- a/qcsrc/common/triggers/teleporters.qc +++ b/qcsrc/common/triggers/teleporters.qc @@ -79,7 +79,7 @@ void TeleportPlayer(entity teleporter, entity player, vector to, vector to_angle if(self.pushltime < time) // only show one teleport effect per teleporter per 0.2 seconds, for better fps { if(tflags & TELEPORT_FLAG_SOUND) - sound (player, CH_TRIGGER, "misc/teleport.wav", VOL_BASE, ATTEN_NORM); + sound (player, CH_TRIGGER, SND_TELEPORT, VOL_BASE, ATTEN_NORM); if(tflags & TELEPORT_FLAG_PARTICLES) { Send_Effect(EFFECT_TELEPORT, player.origin, '0 0 0', 1); diff --git a/qcsrc/common/triggers/trigger/counter.qc b/qcsrc/common/triggers/trigger/counter.qc index 9eb7eb072b..41f9f79ecc 100644 --- a/qcsrc/common/triggers/trigger/counter.qc +++ b/qcsrc/common/triggers/trigger/counter.qc @@ -36,8 +36,8 @@ If nomessage is not set, t will print "1 more.. " etc when triggered and "sequen After the counter has been triggered "count" times (default 2), it will fire all of it's targets and remove itself. */ -void spawnfunc_trigger_counter() -{SELFPARAM(); +spawnfunc(trigger_counter) +{ self.wait = -1; if (!self.count) self.count = 2; diff --git a/qcsrc/common/triggers/trigger/delay.qc b/qcsrc/common/triggers/trigger/delay.qc index a3e08e4d81..eb0c0af775 100644 --- a/qcsrc/common/triggers/trigger/delay.qc +++ b/qcsrc/common/triggers/trigger/delay.qc @@ -11,8 +11,8 @@ void delay_reset() self.nextthink = 0; } -void spawnfunc_trigger_delay() -{SELFPARAM(); +spawnfunc(trigger_delay) +{ if(!self.wait) self.wait = 1; diff --git a/qcsrc/common/triggers/trigger/disablerelay.qc b/qcsrc/common/triggers/trigger/disablerelay.qc index 4545df1957..a1f13d277e 100644 --- a/qcsrc/common/triggers/trigger/disablerelay.qc +++ b/qcsrc/common/triggers/trigger/disablerelay.qc @@ -24,8 +24,8 @@ void trigger_disablerelay_use() LOG_INFO("Invalid use of trigger_disablerelay: ", ftos(a), " relays were on, ", ftos(b), " relays were off!\n"); } -void spawnfunc_trigger_disablerelay() -{SELFPARAM(); +spawnfunc(trigger_disablerelay) +{ self.use = trigger_disablerelay_use; } #endif diff --git a/qcsrc/common/triggers/trigger/flipflop.qc b/qcsrc/common/triggers/trigger/flipflop.qc index b5a2eb8b29..e039173fb0 100644 --- a/qcsrc/common/triggers/trigger/flipflop.qc +++ b/qcsrc/common/triggers/trigger/flipflop.qc @@ -9,11 +9,14 @@ void flipflop_use() SUB_UseTargets(); } -void spawnfunc_trigger_flipflop() -{SELFPARAM(); +void _spawnfunc_trigger_flipflop(); +spawnfunc(trigger_flipflop) +{ if(self.spawnflags & 1) self.state = 1; self.use = flipflop_use; - self.reset = spawnfunc_trigger_flipflop; // perfect resetter + self.reset = _spawnfunc_trigger_flipflop; // perfect resetter } +void _spawnfunc_trigger_flipflop() { SELFPARAM(); spawnfunc_trigger_flipflop(this); } + #endif diff --git a/qcsrc/common/triggers/trigger/gamestart.qc b/qcsrc/common/triggers/trigger/gamestart.qc index 1b72780e51..30e6ebae70 100644 --- a/qcsrc/common/triggers/trigger/gamestart.qc +++ b/qcsrc/common/triggers/trigger/gamestart.qc @@ -6,10 +6,11 @@ void gamestart_use() remove(self); } -void spawnfunc_trigger_gamestart() -{SELFPARAM(); +void _spawnfunc_trigger_gamestart(); +spawnfunc(trigger_gamestart) +{ self.use = gamestart_use; - self.reset2 = spawnfunc_trigger_gamestart; + self.reset2 = _spawnfunc_trigger_gamestart; if(self.wait) { @@ -19,4 +20,6 @@ void spawnfunc_trigger_gamestart() else InitializeEntity(self, gamestart_use, INITPRIO_FINDTARGET); } +void _spawnfunc_trigger_gamestart() { SELFPARAM(); spawnfunc_trigger_gamestart(this); } + #endif diff --git a/qcsrc/common/triggers/trigger/gravity.qc b/qcsrc/common/triggers/trigger/gravity.qc index 659a336901..a6b3eedde6 100644 --- a/qcsrc/common/triggers/trigger/gravity.qc +++ b/qcsrc/common/triggers/trigger/gravity.qc @@ -80,13 +80,13 @@ void trigger_gravity_touch() { other.gravity = g; if(self.noise != "") - sound (other, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NORM); + _sound (other, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NORM); UpdateCSQCProjectile(self.owner); } } -void spawnfunc_trigger_gravity() -{SELFPARAM(); +spawnfunc(trigger_gravity) +{ if(self.gravity == 1) return; diff --git a/qcsrc/common/triggers/trigger/heal.qc b/qcsrc/common/triggers/trigger/heal.qc index 323a4a160d..5d4f2d0b3a 100644 --- a/qcsrc/common/triggers/trigger/heal.qc +++ b/qcsrc/common/triggers/trigger/heal.qc @@ -19,14 +19,14 @@ void trigger_heal_touch() { other.health = min(other.health + self.health, self.max_health); other.pauserothealth_finished = max(other.pauserothealth_finished, time + autocvar_g_balance_pause_health_rot); - sound (other, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NORM); + _sound (other, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NORM); } } } } -void spawnfunc_trigger_heal() -{SELFPARAM(); +spawnfunc(trigger_heal) +{ self.active = ACTIVE_ACTIVE; EXACTTRIGGER_INIT; diff --git a/qcsrc/common/triggers/trigger/hurt.qc b/qcsrc/common/triggers/trigger/hurt.qc index 7a12011931..535ba8500d 100644 --- a/qcsrc/common/triggers/trigger/hurt.qc +++ b/qcsrc/common/triggers/trigger/hurt.qc @@ -57,8 +57,8 @@ defalt dmg = 5 .entity trigger_hurt_next; entity trigger_hurt_last; entity trigger_hurt_first; -void spawnfunc_trigger_hurt() -{SELFPARAM(); +spawnfunc(trigger_hurt) +{ EXACTTRIGGER_INIT; self.active = ACTIVE_ACTIVE; self.touch = trigger_hurt_touch; diff --git a/qcsrc/common/triggers/trigger/impulse.qc b/qcsrc/common/triggers/trigger/impulse.qc index 2b3bb5729a..c40fed3a83 100644 --- a/qcsrc/common/triggers/trigger/impulse.qc +++ b/qcsrc/common/triggers/trigger/impulse.qc @@ -150,8 +150,8 @@ void trigger_impulse_link() //Net_LinkEntity(self, 0, false, trigger_impulse_send); } -void spawnfunc_trigger_impulse() -{SELFPARAM(); +spawnfunc(trigger_impulse) +{ self.active = ACTIVE_ACTIVE; EXACTTRIGGER_INIT; diff --git a/qcsrc/common/triggers/trigger/jumppads.qc b/qcsrc/common/triggers/trigger/jumppads.qc index 5eb2522182..0695811e0f 100644 --- a/qcsrc/common/triggers/trigger/jumppads.qc +++ b/qcsrc/common/triggers/trigger/jumppads.qc @@ -182,7 +182,7 @@ void trigger_push_touch() { // flash when activated Send_Effect(EFFECT_JUMPPAD, other.origin, other.velocity, 1); - sound (other, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NORM); + _sound (other, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NORM); self.pushltime = time + 0.2; } if(IS_REAL_CLIENT(other) || IS_BOT_CLIENT(other)) @@ -363,8 +363,8 @@ void trigger_push_link() * values to target a point on the ceiling. * movedir: if target is not set, this * speed * 10 is the velocity to be reached. */ -void spawnfunc_trigger_push() -{SELFPARAM(); +spawnfunc(trigger_push) +{ SetMovedir (); EXACTTRIGGER_INIT; @@ -406,9 +406,9 @@ void target_push_link() self.SendFlags |= 1; // update } -void spawnfunc_target_push() { target_push_link(); } -void spawnfunc_info_notnull() { target_push_link(); } -void spawnfunc_target_position() { target_push_link(); } +spawnfunc(target_push) { target_push_link(); } +spawnfunc(info_notnull) { target_push_link(); } +spawnfunc(target_position) { target_push_link(); } #endif diff --git a/qcsrc/common/triggers/trigger/jumppads.qh b/qcsrc/common/triggers/trigger/jumppads.qh index bb0f4750ee..efce0df62d 100644 --- a/qcsrc/common/triggers/trigger/jumppads.qh +++ b/qcsrc/common/triggers/trigger/jumppads.qh @@ -59,10 +59,10 @@ void trigger_push_findtarget(); * movedir: if target is not set, this * speed * 10 is the velocity to be reached. */ #ifdef SVQC -void spawnfunc_trigger_push(); +spawnfunc(trigger_push); -void spawnfunc_target_push(); -void spawnfunc_info_notnull(); -void spawnfunc_target_position(); +spawnfunc(target_push); +spawnfunc(info_notnull); +spawnfunc(target_position); #endif #endif diff --git a/qcsrc/common/triggers/trigger/keylock.qc b/qcsrc/common/triggers/trigger/keylock.qc index 17313f0aa8..365c6f5a90 100644 --- a/qcsrc/common/triggers/trigger/keylock.qc +++ b/qcsrc/common/triggers/trigger/keylock.qc @@ -132,8 +132,8 @@ wait: prevent triggering again for this amount of time (default: 5) - applies to If spawned without any key specified in itemkeys, this trigger will display an error and remove itself. message2 and noise2 will be resent to the player every 2 seconds while he is in the trigger zone. */ -void spawnfunc_trigger_keylock(void) -{SELFPARAM(); +spawnfunc(trigger_keylock) +{ if(!self.itemkeys) { remove(self); return; } // set unlocked message @@ -146,7 +146,7 @@ void spawnfunc_trigger_keylock(void) if(self.sounds == 1) self.noise = "misc/secret.wav"; else if(self.sounds == 2) - self.noise = "misc/talk.wav"; + self.noise = SND(TALK); else //if (self.sounds == 3) { self.noise = "misc/trigger1.wav"; } @@ -157,7 +157,7 @@ void spawnfunc_trigger_keylock(void) // set closed sourd if(self.noise2 == "") - self.noise2 = "misc/talk.wav"; + self.noise2 = SND(TALK); // delay between triggering message2 and trigger2 if(!self.wait) { self.wait = 5; } diff --git a/qcsrc/common/triggers/trigger/magicear.qc b/qcsrc/common/triggers/trigger/magicear.qc index 0c8a7d359d..c20514e1a6 100644 --- a/qcsrc/common/triggers/trigger/magicear.qc +++ b/qcsrc/common/triggers/trigger/magicear.qc @@ -162,8 +162,8 @@ string trigger_magicear_processmessage_forallears(entity source, float teamsay, return msgin; } -void spawnfunc_trigger_magicear() -{SELFPARAM(); +spawnfunc(trigger_magicear) +{ self.enemy = magicears; magicears = self; diff --git a/qcsrc/common/triggers/trigger/monoflop.qc b/qcsrc/common/triggers/trigger/monoflop.qc index 5129ce35cd..d81f6e3719 100644 --- a/qcsrc/common/triggers/trigger/monoflop.qc +++ b/qcsrc/common/triggers/trigger/monoflop.qc @@ -34,8 +34,8 @@ void monoflop_reset() self.nextthink = 0; } -void spawnfunc_trigger_monoflop() -{SELFPARAM(); +spawnfunc(trigger_monoflop) +{ if(!self.wait) self.wait = 1; if(self.spawnflags & 1) diff --git a/qcsrc/common/triggers/trigger/multi.qc b/qcsrc/common/triggers/trigger/multi.qc index 007e6da2f5..3261520d7a 100644 --- a/qcsrc/common/triggers/trigger/multi.qc +++ b/qcsrc/common/triggers/trigger/multi.qc @@ -32,7 +32,7 @@ void multi_trigger() } if (self.noise) - sound (self.enemy, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NORM); + _sound (self.enemy, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NORM); // don't trigger again until reset self.takedamage = DAMAGE_NO; @@ -139,8 +139,8 @@ sounds 4) set "message" to text string */ -void spawnfunc_trigger_multiple() -{SELFPARAM(); +spawnfunc(trigger_multiple) +{ self.reset = multi_reset; if (self.sounds == 1) { @@ -149,8 +149,7 @@ void spawnfunc_trigger_multiple() } else if (self.sounds == 2) { - precache_sound ("misc/talk.wav"); - self.noise = "misc/talk.wav"; + self.noise = SND(TALK); } else if (self.sounds == 3) { @@ -202,9 +201,9 @@ sounds 4) set "message" to text string */ -void spawnfunc_trigger_once() -{SELFPARAM(); - self.wait = -1; - spawnfunc_trigger_multiple(); +spawnfunc(trigger_once) +{ + this.wait = -1; + spawnfunc_trigger_multiple(this); } #endif diff --git a/qcsrc/common/triggers/trigger/multi.qh b/qcsrc/common/triggers/trigger/multi.qh index df14a518e6..5e72a96a2f 100644 --- a/qcsrc/common/triggers/trigger/multi.qh +++ b/qcsrc/common/triggers/trigger/multi.qh @@ -2,5 +2,5 @@ void multi_trigger(); void multi_reset(); -void spawnfunc_trigger_once(); +spawnfunc(trigger_once); #endif diff --git a/qcsrc/common/triggers/trigger/multivibrator.qc b/qcsrc/common/triggers/trigger/multivibrator.qc index d9c6c2e60c..78b3383fc0 100644 --- a/qcsrc/common/triggers/trigger/multivibrator.qc +++ b/qcsrc/common/triggers/trigger/multivibrator.qc @@ -55,8 +55,8 @@ respawntime: "off" cycle time (default: same as wait) -------- SPAWNFLAGS -------- START_ON: assume it is already turned on (when targeted) */ -void spawnfunc_trigger_multivibrator() -{SELFPARAM(); +spawnfunc(trigger_multivibrator) +{ if(!self.wait) self.wait = 1; if(!self.respawntime) diff --git a/qcsrc/common/triggers/trigger/relay.qc b/qcsrc/common/triggers/trigger/relay.qc index 20962cd495..178daad90e 100644 --- a/qcsrc/common/triggers/trigger/relay.qc +++ b/qcsrc/common/triggers/trigger/relay.qc @@ -1,10 +1,12 @@ #ifdef SVQC +void _spawnfunc_trigger_relay(); /*QUAKED spawnfunc_trigger_relay (.5 .5 .5) (-8 -8 -8) (8 8 8) This fixed size trigger cannot be touched, it can only be fired by other events. It can contain killtargets, targets, delays, and messages. */ -void spawnfunc_trigger_relay() -{SELFPARAM(); +spawnfunc(trigger_relay) +{ self.use = SUB_UseTargets; - self.reset = spawnfunc_trigger_relay; // this spawnfunc resets fully + self.reset = _spawnfunc_trigger_relay; // this spawnfunc resets fully } +void _spawnfunc_trigger_relay() { SELFPARAM(); spawnfunc_trigger_relay(this); } #endif diff --git a/qcsrc/common/triggers/trigger/relay_activators.qc b/qcsrc/common/triggers/trigger/relay_activators.qc index b765151fd1..147b6178a1 100644 --- a/qcsrc/common/triggers/trigger/relay_activators.qc +++ b/qcsrc/common/triggers/trigger/relay_activators.qc @@ -21,20 +21,20 @@ void relay_activators_use() setself(this); } -void spawnfunc_relay_activate() -{SELFPARAM(); +spawnfunc(relay_activate) +{ self.cnt = ACTIVE_ACTIVE; self.use = relay_activators_use; } -void spawnfunc_relay_deactivate() -{SELFPARAM(); +spawnfunc(relay_deactivate) +{ self.cnt = ACTIVE_NOT; self.use = relay_activators_use; } -void spawnfunc_relay_activatetoggle() -{SELFPARAM(); +spawnfunc(relay_activatetoggle) +{ self.cnt = ACTIVE_TOGGLE; self.use = relay_activators_use; } diff --git a/qcsrc/common/triggers/trigger/relay_if.qc b/qcsrc/common/triggers/trigger/relay_if.qc index cadd95e584..e45996bd85 100644 --- a/qcsrc/common/triggers/trigger/relay_if.qc +++ b/qcsrc/common/triggers/trigger/relay_if.qc @@ -13,8 +13,8 @@ void trigger_relay_if_use() SUB_UseTargets(); } -void spawnfunc_trigger_relay_if() -{SELFPARAM(); +spawnfunc(trigger_relay_if) +{ self.use = trigger_relay_if_use; } #endif diff --git a/qcsrc/common/triggers/trigger/relay_teamcheck.qc b/qcsrc/common/triggers/trigger/relay_teamcheck.qc index f93287a920..ab2b87aaa0 100644 --- a/qcsrc/common/triggers/trigger/relay_teamcheck.qc +++ b/qcsrc/common/triggers/trigger/relay_teamcheck.qc @@ -26,8 +26,8 @@ void trigger_relay_teamcheck_reset() self.team = self.team_saved; } -void spawnfunc_trigger_relay_teamcheck() -{SELFPARAM(); +spawnfunc(trigger_relay_teamcheck) +{ self.team_saved = self.team; self.use = trigger_relay_teamcheck_use; self.reset = trigger_relay_teamcheck_reset; diff --git a/qcsrc/common/triggers/trigger/secret.qc b/qcsrc/common/triggers/trigger/secret.qc index 27347d9e83..d16d2773c1 100644 --- a/qcsrc/common/triggers/trigger/secret.qc +++ b/qcsrc/common/triggers/trigger/secret.qc @@ -51,8 +51,8 @@ killtarget: remove all entities with this targetname when triggered You should create a common/trigger textured brush covering the entrance to a secret room/area. Trigger secret can only be trigger by a player's touch and can not be a target itself. */ -void spawnfunc_trigger_secret() -{SELFPARAM(); +spawnfunc(trigger_secret) +{ // FIXME: should it be disabled in most modes? // update secrets count @@ -78,7 +78,7 @@ void spawnfunc_trigger_secret() // convert this trigger to trigger_once self.classname = "trigger_once"; - spawnfunc_trigger_once(); + spawnfunc_trigger_once(this); // take over the touch() function, so we can mark secret as found self.touch = trigger_secret_touch; diff --git a/qcsrc/common/triggers/trigger/swamp.qc b/qcsrc/common/triggers/trigger/swamp.qc index b9a4acd1a4..2ae068d824 100644 --- a/qcsrc/common/triggers/trigger/swamp.qc +++ b/qcsrc/common/triggers/trigger/swamp.qc @@ -21,7 +21,7 @@ .entity swampslug; #ifdef SVQC -void spawnfunc_trigger_swamp(void); +spawnfunc(trigger_swamp); #endif void swamp_touch(void); void swampslug_think(); @@ -116,8 +116,8 @@ void swamp_link() Players gettin into the swamp will get slowd down and damaged */ -void spawnfunc_trigger_swamp(void) -{SELFPARAM(); +spawnfunc(trigger_swamp) +{ // Init stuff EXACTTRIGGER_INIT; self.touch = swamp_touch; diff --git a/qcsrc/common/triggers/trigger/teleport.qc b/qcsrc/common/triggers/trigger/teleport.qc index 129f4e387c..95bd7fbbd4 100644 --- a/qcsrc/common/triggers/trigger/teleport.qc +++ b/qcsrc/common/triggers/trigger/teleport.qc @@ -47,8 +47,8 @@ void Teleport_Touch (void) WITH(entity, self, e, SUB_UseTargets()); } -void spawnfunc_trigger_teleport() -{SELFPARAM(); +spawnfunc(trigger_teleport) +{ self.angles = '0 0 0'; EXACTTRIGGER_INIT; diff --git a/qcsrc/common/triggers/trigger/viewloc.qc b/qcsrc/common/triggers/trigger/viewloc.qc index de2d3aac28..73d722cf00 100644 --- a/qcsrc/common/triggers/trigger/viewloc.qc +++ b/qcsrc/common/triggers/trigger/viewloc.qc @@ -80,8 +80,8 @@ void viewloc_init() self.nextthink = time; } -void spawnfunc_trigger_viewlocation() -{SELFPARAM(); +spawnfunc(trigger_viewlocation) +{ // we won't check target2 here yet, as it may not even need to exist if(self.target == "") { LOG_INFO("^1FAIL!\n"); remove(self); return; } @@ -114,21 +114,21 @@ void viewloc_link() Net_LinkEntity(self, false, 0, viewloc_send); } -void spawnfunc_target_viewlocation_start() -{SELFPARAM(); +spawnfunc(target_viewlocation_start) +{ self.classname = "target_viewlocation_start"; self.cnt = 1; viewloc_link(); } -void spawnfunc_target_viewlocation_end() -{SELFPARAM(); +spawnfunc(target_viewlocation_end) +{ self.classname = "target_viewlocation_end"; self.cnt = 2; viewloc_link(); } // compatibility -void spawnfunc_target_viewlocation() { spawnfunc_target_viewlocation_start(); } +spawnfunc(target_viewlocation) { spawnfunc_target_viewlocation_start(this); } #elif defined(CSQC) diff --git a/qcsrc/common/triggers/triggers.qc b/qcsrc/common/triggers/triggers.qc index a44c688ed9..73c5c49651 100644 --- a/qcsrc/common/triggers/triggers.qc +++ b/qcsrc/common/triggers/triggers.qc @@ -173,7 +173,7 @@ void SUB_UseTargets() { centerprint(activator, self.message); if (self.noise == "") - play2(activator, "misc/talk.wav"); + play2(activator, SND(TALK)); } // diff --git a/qcsrc/common/turrets/all.inc b/qcsrc/common/turrets/all.inc new file mode 100644 index 0000000000..04bb10f6a5 --- /dev/null +++ b/qcsrc/common/turrets/all.inc @@ -0,0 +1,12 @@ +#include "unit/ewheel.qc" +#include "unit/flac.qc" +#include "unit/fusionreactor.qc" +#include "unit/hellion.qc" +#include "unit/hk.qc" +#include "unit/machinegun.qc" +#include "unit/mlrs.qc" +#include "unit/phaser.qc" +#include "unit/plasma.qc" +#include "unit/plasma_dual.qc" +#include "unit/tesla.qc" +#include "unit/walker.qc" diff --git a/qcsrc/common/turrets/all.qc b/qcsrc/common/turrets/all.qc new file mode 100644 index 0000000000..f0fc7195a8 --- /dev/null +++ b/qcsrc/common/turrets/all.qc @@ -0,0 +1,5 @@ +#include "all.qh" + +#define IMPLEMENTATION +#include "all.inc" +#undef IMPLEMENTATION diff --git a/qcsrc/common/turrets/all.qh b/qcsrc/common/turrets/all.qh index 04bb10f6a5..4f8a728028 100644 --- a/qcsrc/common/turrets/all.qh +++ b/qcsrc/common/turrets/all.qh @@ -1,12 +1,240 @@ -#include "unit/ewheel.qc" -#include "unit/flac.qc" -#include "unit/fusionreactor.qc" -#include "unit/hellion.qc" -#include "unit/hk.qc" -#include "unit/machinegun.qc" -#include "unit/mlrs.qc" -#include "unit/phaser.qc" -#include "unit/plasma.qc" -#include "unit/plasma_dual.qc" -#include "unit/tesla.qc" -#include "unit/walker.qc" +#ifndef TURRETS_H +#define TURRETS_H + +// turret requests +#define TR_SETUP 1 // (BOTH) setup turret data +#define TR_THINK 2 // (SERVER) logic to run every frame +#define TR_DEATH 3 // (SERVER) called when turret dies +#define TR_PRECACHE 4 // (BOTH) precaches models/sounds used by this turret +#define TR_ATTACK 5 // (SERVER) called when turret attacks +#define TR_CONFIG 6 // (ALL) + +// functions: +entity get_turretinfo(int id); + +// fields: +.entity tur_head; + +// target selection flags +.int target_select_flags; +.int target_validate_flags; +const int TFL_TARGETSELECT_NO = 2; // don't automatically find targets +const int TFL_TARGETSELECT_LOS = 4; // require line of sight to find targets +const int TFL_TARGETSELECT_PLAYERS = 8; // target players +const int TFL_TARGETSELECT_MISSILES = 16; // target projectiles +const int TFL_TARGETSELECT_TRIGGERTARGET = 32; // respond to turret_trigger_target events +const int TFL_TARGETSELECT_ANGLELIMITS = 64; // apply extra angular limits to target selection +const int TFL_TARGETSELECT_RANGELIMITS = 128; // limit target selection range +const int TFL_TARGETSELECT_TEAMCHECK = 256; // don't attack teammates +const int TFL_TARGETSELECT_NOBUILTIN = 512; // only attack targets when triggered +const int TFL_TARGETSELECT_OWNTEAM = 1024; // only attack teammates +const int TFL_TARGETSELECT_NOTURRETS = 2048; // don't attack other turrets +const int TFL_TARGETSELECT_FOV = 4096; // extra limits to attack range +const int TFL_TARGETSELECT_MISSILESONLY = 8192; // only attack missiles + +// aim flags +.int aim_flags; +const int TFL_AIM_NO = 1; // no aiming +const int TFL_AIM_SPLASH = 2; // aim for ground around the target's feet +const int TFL_AIM_LEAD = 4; // try to predict target movement +const int TFL_AIM_SHOTTIMECOMPENSATE = 8; // compensate for shot traveltime when leading +const int TFL_AIM_ZPREDICT = 16; // predict target's z position at impact +const int TFL_AIM_SIMPLE = 32; // aim at player's current location + +// tracking flags +.int track_flags; +const int TFL_TRACK_NO = 2; // don't move head +const int TFL_TRACK_PITCH = 4; // pitch head +const int TFL_TRACK_ROTATE = 8; // rotate head + +// prefire checks +.int firecheck_flags; +const int TFL_FIRECHECK_DEAD = 4; // don't attack dead targets (zombies?) +const int TFL_FIRECHECK_DISTANCES = 8; // another range check +const int TFL_FIRECHECK_LOS = 16; // line of sight +const int TFL_FIRECHECK_AIMDIST = 32; // consider distance impactpoint<->aimspot +const int TFL_FIRECHECK_REALDIST = 64; // consider enemy origin<->impactpoint +const int TFL_FIRECHECK_ANGLEDIST = 128; // consider angular diff head<->aimspot +const int TFL_FIRECHECK_TEAMCHECK = 256; // don't attack teammates +const int TFL_FIRECHECK_AFF = 512; // try to avoid any friendly fire +const int TFL_FIRECHECK_AMMO_OWN = 1024; // own ammo needs to be larger than damage dealt +const int TFL_FIRECHECK_AMMO_OTHER = 2048; // target's ammo needs to be less than max +const int TFL_FIRECHECK_REFIRE = 4096; // check single attack finished delays +const int TFL_FIRECHECK_NO = 16384; // no prefire checks + +// attack flags +.int shoot_flags; +const int TFL_SHOOT_NO = 64; // no attacking +const int TFL_SHOOT_VOLLY = 2; // fire in vollies +const int TFL_SHOOT_VOLLYALWAYS = 4; // always do a full volly, even if target is lost +const int TFL_SHOOT_HITALLVALID = 8; // loop through all valid targets +const int TFL_SHOOT_CLEARTARGET = 16; // lose target after attack (after volly is done if in volly mode) +const int TFL_SHOOT_CUSTOM = 32; // custom attacking + +// turret capabilities +.int turret_flags; +const int TUR_FLAG_NONE = 0; // no abilities +const int TUR_FLAG_SNIPER = 2; // sniping turret +const int TUR_FLAG_SPLASH = 4; // can deal splash damage +const int TUR_FLAG_HITSCAN = 8; // hit scan +const int TUR_FLAG_MULTIGUN = 16; // multiple guns +const int TUR_FLAG_GUIDED = 32; // laser guided projectiles +const int TUR_FLAG_SLOWPROJ = 64; // turret fires slow projectiles +const int TUR_FLAG_MEDPROJ = 128; // turret fires medium projectiles +const int TUR_FLAG_FASTPROJ = 256; // turret fires fast projectiles +const int TUR_FLAG_PLAYER = 512; // can damage players +const int TUR_FLAG_MISSILE = 1024; // can damage missiles +const int TUR_FLAG_SUPPORT = 2048; // supports other units +const int TUR_FLAG_AMMOSOURCE = 4096; // can provide ammunition +const int TUR_FLAG_RECIEVETARGETS = 8192; // can recieve targets from external sources +const int TUR_FLAG_MOVE = 16384; // can move +const int TUR_FLAG_ROAM = 32768; // roams around if not attacking +const int TUR_FLAG_ISTURRET = 65536; // identifies this unit as a turret + +// ammo types +#define ammo_flags currentammo +const int TFL_AMMO_NONE = 64; // doesn't use ammo +const int TFL_AMMO_ENERGY = 2; // uses power +const int TFL_AMMO_BULLETS = 4; // uses bullets +const int TFL_AMMO_ROCKETS = 8; // uses explosives +const int TFL_AMMO_RECHARGE = 16; // regenerates ammo +const int TFL_AMMO_RECIEVE = 32; // can recieve ammo from support units + +// damage flags +.int damage_flags; +const int TFL_DMG_NO = 256; // doesn't take damage +const int TFL_DMG_YES = 2; // can be damaged +const int TFL_DMG_TEAM = 4; // can be damaged by teammates +const int TFL_DMG_RETALIATE = 8; // target attackers +const int TFL_DMG_RETALIATE_TEAM = 16; // target attackers, even if on same team +const int TFL_DMG_TARGETLOSS = 32; // loses target when damaged +const int TFL_DMG_AIMSHAKE = 64; // damage throws off aim +const int TFL_DMG_HEADSHAKE = 128; // damage shakes head +const int TFL_DMG_DEATH_NORESPAWN = 256; // no re-spawning + +// spawn flags +const int TSF_SUSPENDED = 1; +const int TSF_TERRAINBASE = 2; // currently unused +const int TSF_NO_AMMO_REGEN = 4; // disable builtin ammo regeneration +const int TSF_NO_PATHBREAK = 8; // don't break path to chase enemies, will still fire at them if possible +const int TSL_NO_RESPAWN = 16; // don't re-spawn +const int TSL_ROAM = 32; // roam while idle + +// send flags +const int TNSF_UPDATE = 2; +const int TNSF_STATUS = 4; +const int TNSF_SETUP = 8; +const int TNSF_ANG = 16; +const int TNSF_AVEL = 32; +const int TNSF_MOVE = 64; +.float anim_start_time; +const int TNSF_ANIM = 128; + +const int TNSF_FULL_UPDATE = 16777215; + + +// other useful macros +#define TUR_ACTION(turrettype,mrequest) (get_turretinfo(turrettype)).turret_func(mrequest) +#define TUR_NAME(turrettype) (get_turretinfo(turrettype)).turret_name + +// ===================== +// Turret Registration +// ===================== + +float t_null(float dummy); +void register_turret(entity e, float(float) func, float turretflags, vector min_s, vector max_s, string modelname, string headmodelname, string shortname, string mname); + +const int TUR_MAXCOUNT = 24; +entity turret_info[TUR_MAXCOUNT], turret_info_first, turret_info_last; +float TUR_COUNT; + +#define _REGISTER_TURRET(id, func, turretflags, min_s, max_s, modelname, headmodelname, shortname, mname) \ + float func(float); \ + REGISTER(RegisterTurrets, TUR, turret_info, TUR_COUNT, id, m_id, NEW(Turret)) { \ + register_turret(this, func,turretflags,min_s,max_s,modelname,headmodelname,shortname,mname); \ + } +void RegisterTurrets(); +REGISTER_REGISTRY(RegisterTurrets) + +#ifdef MENUQC +#define REGISTER_TURRET(id,func,turretflags,min_s,max_s,modelname,headmodelname,shortname,mname) \ + _REGISTER_TURRET(id,t_null,turretflags,min_s,max_s,modelname,headmodelname,shortname,mname) +#else +#define REGISTER_TURRET(id,func,turretflags,min_s,max_s,modelname,headmodelname,shortname,mname) \ + _REGISTER_TURRET(id,func,turretflags,min_s,max_s,modelname,headmodelname,shortname,mname) +#endif + +float t_null(float dummy) { return 0; } + +CLASS(Turret, Object) + ATTRIB(Turret, m_id, int, 0) + + ATTRIB(Turret, turretid, int, 0) + /** short name */ + ATTRIB(Turret, netname, string, string_null) + /** human readable name */ + ATTRIB(Turret, turret_name, string, string_null) + /** t_... */ + ATTRIB(Turret, turret_func, float(float), t_null) + /** currently a copy of the model */ + ATTRIB(Turret, mdl, string, string_null) + /** full name of model */ + ATTRIB(Turret, model, string, string_null) + /** full name of tur_head model */ + ATTRIB(Turret, head_model, string, string_null) + /** TODO: deprecate! */ + ATTRIB(Turret, cvar_basename, string, string_null) + + ATTRIB(Turret, spawnflags, int, 0) + /** turret hitbox size */ + ATTRIB(Turret, mins, vector, '0 0 0') + /** turret hitbox size */ + ATTRIB(Turret, maxs, vector, '0 0 0') + + METHOD(Turret, display, void(entity this, void(string name, string icon) returns)) { + returns(this.turret_name, string_null); + } + +void register_turret(Turret e, float(float) func, float turretflags, vector min_s, vector max_s, string modelname, string headmodelname, string shortname, string mname) +{ + e.classname = "turret_info"; + e.turretid = e.m_id; + e.netname = shortname; + e.turret_name = mname; + e.turret_func = func; + e.mdl = modelname; + e.cvar_basename = shortname; + e.spawnflags = turretflags; + e.mins = min_s; + e.maxs = max_s; + e.model = strzone(strcat("models/turrets/", modelname)); + e.head_model = strzone(strcat("models/turrets/", headmodelname)); +} +ENDCLASS(Turret) + + +REGISTER_TURRET(Null, + t_null, + 0, + '-0 -0 -0', + '0 0 0', + "", + "", + "", + "Turret" +); + +entity get_turretinfo(float id) +{ + entity m; + if(id < 1 || id > TUR_COUNT - 1) + return TUR_Null; + m = turret_info[id]; + if(m) + return m; + return TUR_Null; +} + +#include "all.inc" + +#endif diff --git a/qcsrc/common/turrets/checkpoint.qc b/qcsrc/common/turrets/checkpoint.qc index 2b0bd6f676..bb2bff22c8 100644 --- a/qcsrc/common/turrets/checkpoint.qc +++ b/qcsrc/common/turrets/checkpoint.qc @@ -67,16 +67,16 @@ void turret_checkpoint_init() //tc_acum += 0.25; } -void spawnfunc_turret_checkpoint() -{SELFPARAM(); +spawnfunc(turret_checkpoint) +{ setorigin(self,self.origin); self.think = turret_checkpoint_init; self.nextthink = time + 0.2; } // Compat. -void spawnfunc_walker_checkpoint() -{SELFPARAM(); +spawnfunc(walker_checkpoint) +{ self.classname = "turret_checkpoint"; - spawnfunc_turret_checkpoint(); + spawnfunc_turret_checkpoint(this); } diff --git a/qcsrc/common/turrets/cl_turrets.qc b/qcsrc/common/turrets/cl_turrets.qc index 232f546c12..b2a0fe1b53 100644 --- a/qcsrc/common/turrets/cl_turrets.qc +++ b/qcsrc/common/turrets/cl_turrets.qc @@ -1,3 +1,5 @@ +#include "all.qh" + void turret_remove() {SELFPARAM(); remove(self.tur_head); @@ -216,7 +218,7 @@ void turret_construct() setsize(self, tur.mins, tur.maxs); setsize(self.tur_head, '0 0 0', '0 0 0'); - if(self.turretid == TUR_EWHEEL) + if(self.turretid == TUR_EWHEEL.m_id) setattachment(self.tur_head, self, ""); else setattachment(self.tur_head, self, "tag_head"); @@ -272,7 +274,7 @@ void turret_gibboom() {SELFPARAM(); float i; - sound (self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_NORM); + sound (self, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM); pointparticles(particleeffectnum(EFFECT_ROCKET_EXPLODE), self.origin, '0 0 0', 1); for (i = 1; i < 5; i = i + 1) @@ -318,16 +320,16 @@ entity turret_gibtoss(string _model, vector _from, vector _to, vector _cmod, flo void turret_die() {SELFPARAM(); - sound (self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_NORM); + sound (self, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM); pointparticles(particleeffectnum(EFFECT_ROCKET_EXPLODE), self.origin, '0 0 0', 1); if (!autocvar_cl_nogibs) { // Base - if(self.turretid == TUR_EWHEEL) + if(self.turretid == TUR_EWHEEL.m_id) turret_gibtoss((get_turretinfo(self.turretid)).model, self.origin + '0 0 18', self.velocity + '0 0 400' + '0.1 0.1 1' * (random() * 400), '-1 -1 -1', true); - else if (self.turretid == TUR_WALKER) + else if (self.turretid == TUR_WALKER.m_id) turret_gibtoss((get_turretinfo(self.turretid)).model, self.origin + '0 0 18', self.velocity + '0 0 300' + '0.1 0.1 1' * (random() * 200), '-1 -1 -1', true); - else if (self.turretid == TUR_TESLA) + else if (self.turretid == TUR_TESLA.m_id) turret_gibtoss((get_turretinfo(self.turretid)).model, self.origin + '0 0 18', '0 0 200', '-1 -1 -1', false); else { diff --git a/qcsrc/common/turrets/cl_turrets.qh b/qcsrc/common/turrets/cl_turrets.qh index 0f8ff94851..f8ea64ad11 100644 --- a/qcsrc/common/turrets/cl_turrets.qh +++ b/qcsrc/common/turrets/cl_turrets.qh @@ -1,6 +1,8 @@ #ifndef CL_TURRETS_H #define CL_TURRETS_H +#include "all.qh" + void ent_turret(); #endif diff --git a/qcsrc/common/turrets/config.qc b/qcsrc/common/turrets/config.qc index f35448e9c2..1a8c2cbe77 100644 --- a/qcsrc/common/turrets/config.qc +++ b/qcsrc/common/turrets/config.qc @@ -27,9 +27,8 @@ float T_Config_Queue_Compare(float root, float child, entity pass) void Dump_Turret_Settings(void) { - float i, x, totalsettings = 0; - for(i = TUR_FIRST; i <= TUR_LAST; ++i) - { + float x, totalsettings = 0; + FOREACH(turret_info, it != TUR_Null, LAMBDA({ // step 1: clear the queue TUR_CONFIG_COUNT = 0; for(x = 0; x <= MAX_TUR_CONFIG; ++x) @@ -50,7 +49,7 @@ void Dump_Turret_Settings(void) // step 5: debug info LOG_INFO(sprintf("#%d: %s: %d settings...\n", i, TUR_NAME(i), TUR_CONFIG_COUNT)); totalsettings += TUR_CONFIG_COUNT; - } + })); // clear queue now that we're finished TUR_CONFIG_COUNT = 0; @@ -58,5 +57,5 @@ void Dump_Turret_Settings(void) { tur_config_queue[x] = string_null; } // extra information - LOG_INFO(sprintf("Totals: %d turrets, %d settings\n", (i - 1), totalsettings)); + LOG_INFO(sprintf("Totals: %d turrets, %d settings\n", (TUR_COUNT - 1), totalsettings)); } diff --git a/qcsrc/common/turrets/sv_turrets.qc b/qcsrc/common/turrets/sv_turrets.qc index 9c02d7ad91..c17061b22f 100644 --- a/qcsrc/common/turrets/sv_turrets.qc +++ b/qcsrc/common/turrets/sv_turrets.qc @@ -1,4 +1,5 @@ #ifdef SVQC +#include "all.qh" #include "../../server/autocvars.qh" // Generic aiming @@ -457,7 +458,7 @@ entity turret_projectile(string _snd, float _size, float _health, float _death, {SELFPARAM(); entity proj; - sound (self, CH_WEAPON_A, _snd, VOL_BASE, ATTEN_NORM); + _sound (self, CH_WEAPON_A, _snd, VOL_BASE, ATTEN_NORM); proj = spawn (); setorigin(proj, self.tur_shotorg); setsize(proj, '-0.5 -0.5 -0.5' * _size, '0.5 0.5 0.5' * _size); diff --git a/qcsrc/common/turrets/sv_turrets.qh b/qcsrc/common/turrets/sv_turrets.qh index 8bba1c4a4a..1a4ade6806 100644 --- a/qcsrc/common/turrets/sv_turrets.qh +++ b/qcsrc/common/turrets/sv_turrets.qh @@ -1,6 +1,8 @@ #ifndef SV_TURRETS_H #define SV_TURRETS_H +#include "all.qh" + // turret fields .float ticrate; // interal ai think rate .vector aim_idle; // where to aim while idle diff --git a/qcsrc/common/turrets/targettrigger.qc b/qcsrc/common/turrets/targettrigger.qc index 98c23c4584..6257463417 100644 --- a/qcsrc/common/turrets/targettrigger.qc +++ b/qcsrc/common/turrets/targettrigger.qc @@ -1,4 +1,4 @@ -void spawnfunc_turret_targettrigger(); +spawnfunc(turret_targettrigger); void turret_targettrigger_touch(); void turret_targettrigger_touch() @@ -27,8 +27,8 @@ void turret_targettrigger_touch() /*QUAKED turret_targettrigger (.5 .5 .5) ? */ -void spawnfunc_turret_targettrigger() -{SELFPARAM(); +spawnfunc(turret_targettrigger) +{ if(!autocvar_g_turrets) { remove(self); return; } InitTrigger (); diff --git a/qcsrc/common/turrets/turrets.qc b/qcsrc/common/turrets/turrets.qc deleted file mode 100644 index 37c85ca65a..0000000000 --- a/qcsrc/common/turrets/turrets.qc +++ /dev/null @@ -1,67 +0,0 @@ -#include "all.qh" - -// TURRET PLUGIN SYSTEM -entity turret_info[TUR_MAXCOUNT]; -entity dummy_turret_info; - -void turrets_common_precache() -{ - precache_sound (W_Sound("rocket_impact")); - -#ifdef SVQC - precache_sound(W_Sound("rocket_impact")); -#endif - -#ifdef TURRET_DEBUG - precache_model ("models/pathlib/goodsquare.md3"); - precache_model ("models/pathlib/badsquare.md3"); - precache_model ("models/pathlib/square.md3"); - precache_model ("models/pathlib/edge.md3"); -#endif -} - -void register_turret(float id, float(float) func, float turretflags, vector min_s, vector max_s, string modelname, string headmodelname, string shortname, string mname) -{ - entity e; - turret_info[id - 1] = e = spawn(); - e.classname = "turret_info"; - e.turretid = id; - e.netname = shortname; - e.turret_name = mname; - e.turret_func = func; - e.mdl = modelname; - e.cvar_basename = shortname; - e.spawnflags = turretflags; - e.mins = min_s; - e.maxs = max_s; - e.model = strzone(strcat("models/turrets/", modelname)); - e.head_model = strzone(strcat("models/turrets/", headmodelname)); - - #ifndef MENUQC - turrets_common_precache(); - #endif -} -float t_null(float dummy) { return 0; } -void register_turrets_done() -{ - dummy_turret_info = spawn(); - dummy_turret_info.classname = "turret_info"; - dummy_turret_info.turretid = 0; // you can recognize dummies by this - dummy_turret_info.netname = ""; - dummy_turret_info.turret_name = "Turret"; - dummy_turret_info.turret_func = t_null; - dummy_turret_info.mdl = ""; - dummy_turret_info.mins = '-0 -0 -0'; - dummy_turret_info.maxs = '0 0 0'; - dummy_turret_info.model = ""; -} -entity get_turretinfo(float id) -{ - entity m; - if(id < TUR_FIRST || id > TUR_LAST) - return dummy_turret_info; - m = turret_info[id - 1]; - if(m) - return m; - return dummy_turret_info; -} diff --git a/qcsrc/common/turrets/turrets.qh b/qcsrc/common/turrets/turrets.qh deleted file mode 100644 index e1bf48c1b2..0000000000 --- a/qcsrc/common/turrets/turrets.qh +++ /dev/null @@ -1,188 +0,0 @@ -#ifndef TURRETS_H -#define TURRETS_H - -// turret requests -#define TR_SETUP 1 // (BOTH) setup turret data -#define TR_THINK 2 // (SERVER) logic to run every frame -#define TR_DEATH 3 // (SERVER) called when turret dies -#define TR_PRECACHE 4 // (BOTH) precaches models/sounds used by this turret -#define TR_ATTACK 5 // (SERVER) called when turret attacks -#define TR_CONFIG 6 // (ALL) - -// functions: -entity get_turretinfo(int id); - -// fields: -.entity tur_head; - -// target selection flags -.int target_select_flags; -.int target_validate_flags; -const int TFL_TARGETSELECT_NO = 2; // don't automatically find targets -const int TFL_TARGETSELECT_LOS = 4; // require line of sight to find targets -const int TFL_TARGETSELECT_PLAYERS = 8; // target players -const int TFL_TARGETSELECT_MISSILES = 16; // target projectiles -const int TFL_TARGETSELECT_TRIGGERTARGET = 32; // respond to turret_trigger_target events -const int TFL_TARGETSELECT_ANGLELIMITS = 64; // apply extra angular limits to target selection -const int TFL_TARGETSELECT_RANGELIMITS = 128; // limit target selection range -const int TFL_TARGETSELECT_TEAMCHECK = 256; // don't attack teammates -const int TFL_TARGETSELECT_NOBUILTIN = 512; // only attack targets when triggered -const int TFL_TARGETSELECT_OWNTEAM = 1024; // only attack teammates -const int TFL_TARGETSELECT_NOTURRETS = 2048; // don't attack other turrets -const int TFL_TARGETSELECT_FOV = 4096; // extra limits to attack range -const int TFL_TARGETSELECT_MISSILESONLY = 8192; // only attack missiles - -// aim flags -.int aim_flags; -const int TFL_AIM_NO = 1; // no aiming -const int TFL_AIM_SPLASH = 2; // aim for ground around the target's feet -const int TFL_AIM_LEAD = 4; // try to predict target movement -const int TFL_AIM_SHOTTIMECOMPENSATE = 8; // compensate for shot traveltime when leading -const int TFL_AIM_ZPREDICT = 16; // predict target's z position at impact -const int TFL_AIM_SIMPLE = 32; // aim at player's current location - -// tracking flags -.int track_flags; -const int TFL_TRACK_NO = 2; // don't move head -const int TFL_TRACK_PITCH = 4; // pitch head -const int TFL_TRACK_ROTATE = 8; // rotate head - -// prefire checks -.int firecheck_flags; -const int TFL_FIRECHECK_DEAD = 4; // don't attack dead targets (zombies?) -const int TFL_FIRECHECK_DISTANCES = 8; // another range check -const int TFL_FIRECHECK_LOS = 16; // line of sight -const int TFL_FIRECHECK_AIMDIST = 32; // consider distance impactpoint<->aimspot -const int TFL_FIRECHECK_REALDIST = 64; // consider enemy origin<->impactpoint -const int TFL_FIRECHECK_ANGLEDIST = 128; // consider angular diff head<->aimspot -const int TFL_FIRECHECK_TEAMCHECK = 256; // don't attack teammates -const int TFL_FIRECHECK_AFF = 512; // try to avoid any friendly fire -const int TFL_FIRECHECK_AMMO_OWN = 1024; // own ammo needs to be larger than damage dealt -const int TFL_FIRECHECK_AMMO_OTHER = 2048; // target's ammo needs to be less than max -const int TFL_FIRECHECK_REFIRE = 4096; // check single attack finished delays -const int TFL_FIRECHECK_NO = 16384; // no prefire checks - -// attack flags -.int shoot_flags; -const int TFL_SHOOT_NO = 64; // no attacking -const int TFL_SHOOT_VOLLY = 2; // fire in vollies -const int TFL_SHOOT_VOLLYALWAYS = 4; // always do a full volly, even if target is lost -const int TFL_SHOOT_HITALLVALID = 8; // loop through all valid targets -const int TFL_SHOOT_CLEARTARGET = 16; // lose target after attack (after volly is done if in volly mode) -const int TFL_SHOOT_CUSTOM = 32; // custom attacking - -// turret capabilities -.int turret_flags; -const int TUR_FLAG_NONE = 0; // no abilities -const int TUR_FLAG_SNIPER = 2; // sniping turret -const int TUR_FLAG_SPLASH = 4; // can deal splash damage -const int TUR_FLAG_HITSCAN = 8; // hit scan -const int TUR_FLAG_MULTIGUN = 16; // multiple guns -const int TUR_FLAG_GUIDED = 32; // laser guided projectiles -const int TUR_FLAG_SLOWPROJ = 64; // turret fires slow projectiles -const int TUR_FLAG_MEDPROJ = 128; // turret fires medium projectiles -const int TUR_FLAG_FASTPROJ = 256; // turret fires fast projectiles -const int TUR_FLAG_PLAYER = 512; // can damage players -const int TUR_FLAG_MISSILE = 1024; // can damage missiles -const int TUR_FLAG_SUPPORT = 2048; // supports other units -const int TUR_FLAG_AMMOSOURCE = 4096; // can provide ammunition -const int TUR_FLAG_RECIEVETARGETS = 8192; // can recieve targets from external sources -const int TUR_FLAG_MOVE = 16384; // can move -const int TUR_FLAG_ROAM = 32768; // roams around if not attacking -const int TUR_FLAG_ISTURRET = 65536; // identifies this unit as a turret - -// ammo types -#define ammo_flags currentammo -const int TFL_AMMO_NONE = 64; // doesn't use ammo -const int TFL_AMMO_ENERGY = 2; // uses power -const int TFL_AMMO_BULLETS = 4; // uses bullets -const int TFL_AMMO_ROCKETS = 8; // uses explosives -const int TFL_AMMO_RECHARGE = 16; // regenerates ammo -const int TFL_AMMO_RECIEVE = 32; // can recieve ammo from support units - -// damage flags -.int damage_flags; -const int TFL_DMG_NO = 256; // doesn't take damage -const int TFL_DMG_YES = 2; // can be damaged -const int TFL_DMG_TEAM = 4; // can be damaged by teammates -const int TFL_DMG_RETALIATE = 8; // target attackers -const int TFL_DMG_RETALIATE_TEAM = 16; // target attackers, even if on same team -const int TFL_DMG_TARGETLOSS = 32; // loses target when damaged -const int TFL_DMG_AIMSHAKE = 64; // damage throws off aim -const int TFL_DMG_HEADSHAKE = 128; // damage shakes head -const int TFL_DMG_DEATH_NORESPAWN = 256; // no re-spawning - -// spawn flags -const int TSF_SUSPENDED = 1; -const int TSF_TERRAINBASE = 2; // currently unused -const int TSF_NO_AMMO_REGEN = 4; // disable builtin ammo regeneration -const int TSF_NO_PATHBREAK = 8; // don't break path to chase enemies, will still fire at them if possible -const int TSL_NO_RESPAWN = 16; // don't re-spawn -const int TSL_ROAM = 32; // roam while idle - -// send flags -const int TNSF_UPDATE = 2; -const int TNSF_STATUS = 4; -const int TNSF_SETUP = 8; -const int TNSF_ANG = 16; -const int TNSF_AVEL = 32; -const int TNSF_MOVE = 64; -.float anim_start_time; -const int TNSF_ANIM = 128; - -const int TNSF_FULL_UPDATE = 16777215; - - -// entity properties of turretinfo: -.int turretid; // TUR_... -.string netname; // short name -.string turret_name; // human readable name -.float(float) turret_func; // m_... -.string mdl; // currently a copy of the model -.string model; // full name of model -.string head_model; // full name of tur_head model -.string cvar_basename; // TODO: deprecate! -.float spawnflags; -.vector mins, maxs; // turret hitbox size - -// other useful macros -#define TUR_ACTION(turrettype,mrequest) (get_turretinfo(turrettype)).turret_func(mrequest) -#define TUR_NAME(turrettype) (get_turretinfo(turrettype)).turret_name - -// ===================== -// Turret Registration -// ===================== - -float t_null(float dummy); -void register_turret(float id, float(float) func, float turretflags, vector min_s, vector max_s, string modelname, string headmodelname, string shortname, string mname); -void register_turrets_done(); - -const float TUR_MAXCOUNT = 24; -const int TUR_FIRST = 1; -float TUR_COUNT; -float TUR_LAST; - -#define REGISTER_TURRET_2(id,func,turretflags,min_s,max_s,modelname,headmodelname,shortname,mname) \ - float id; \ - float func(float); \ - void RegisterTurrets_##id() \ - { \ - TUR_LAST = (id = TUR_FIRST + TUR_COUNT); \ - ++TUR_COUNT; \ - register_turret(id,func,turretflags,min_s,max_s,modelname,headmodelname,shortname,mname); \ - } \ - ACCUMULATE_FUNCTION(RegisterTurrets, RegisterTurrets_##id) -#ifdef MENUQC -#define REGISTER_TURRET(id,func,turretflags,min_s,max_s,modelname,headmodelname,shortname,mname) \ - REGISTER_TURRET_2(TUR_##id,t_null,turretflags,min_s,max_s,modelname,headmodelname,shortname,mname) -#else -#define REGISTER_TURRET(id,func,turretflags,min_s,max_s,modelname,headmodelname,shortname,mname) \ - REGISTER_TURRET_2(TUR_##id,func,turretflags,min_s,max_s,modelname,headmodelname,shortname,mname) -#endif - -#include "all.qh" - -#undef REGISTER_TURRET -ACCUMULATE_FUNCTION(RegisterTurrets, register_turrets_done) - -#endif diff --git a/qcsrc/common/turrets/unit/ewheel.qc b/qcsrc/common/turrets/unit/ewheel.qc index e61897cdd8..117e347832 100644 --- a/qcsrc/common/turrets/unit/ewheel.qc +++ b/qcsrc/common/turrets/unit/ewheel.qc @@ -1,4 +1,4 @@ -#ifdef REGISTER_TURRET +#ifndef IMPLEMENTATION REGISTER_TURRET( /* TUR_##id */ EWHEEL, /* function */ t_ewheel, @@ -121,7 +121,7 @@ void ewheel_move_idle() movelib_beak_simple((autocvar_g_turrets_unit_ewheel_speed_stop)); } -void spawnfunc_turret_ewheel() { SELFPARAM(); if(!turret_initialize(TUR_EWHEEL)) remove(self); } +spawnfunc(turret_ewheel) { if(!turret_initialize(TUR_EWHEEL.m_id)) remove(self); } float t_ewheel(float req) {SELFPARAM(); @@ -136,7 +136,7 @@ float t_ewheel(float req) { turret_do_updates(self); - _mis = turret_projectile(W_Sound("lasergun_fire"), 1, 0, DEATH_TURRET_EWHEEL, PROJECTILE_BLASTER, TRUE, TRUE); + _mis = turret_projectile(SND(LASERGUN_FIRE), 1, 0, DEATH_TURRET_EWHEEL, PROJECTILE_BLASTER, TRUE, TRUE); _mis.missile_flags = MIF_SPLASH; Send_Effect(EFFECT_BLASTER_MUZZLEFLASH, self.tur_shotorg, self.tur_shotdir_updated * 1000, 1); diff --git a/qcsrc/common/turrets/unit/flac.qc b/qcsrc/common/turrets/unit/flac.qc index 228049f411..3b9330f7e4 100644 --- a/qcsrc/common/turrets/unit/flac.qc +++ b/qcsrc/common/turrets/unit/flac.qc @@ -1,4 +1,4 @@ -#ifdef REGISTER_TURRET +#ifndef IMPLEMENTATION REGISTER_TURRET( /* TUR_##id */ FLAC, /* function */ t_flac, @@ -28,7 +28,7 @@ void turret_flac_projectile_think_explode() remove(self); } -void spawnfunc_turret_flac() { SELFPARAM(); if(!turret_initialize(TUR_FLAC)) remove(self); } +spawnfunc(turret_flac) { if(!turret_initialize(TUR_FLAC.m_id)) remove(self); } float t_flac(float req) {SELFPARAM(); @@ -40,7 +40,7 @@ float t_flac(float req) turret_tag_fire_update(); - proj = turret_projectile(W_Sound("hagar_fire"), 5, 0, DEATH_TURRET_FLAC, PROJECTILE_HAGAR, TRUE, TRUE); + proj = turret_projectile(SND(HAGAR_FIRE), 5, 0, DEATH_TURRET_FLAC, PROJECTILE_HAGAR, TRUE, TRUE); Send_Effect(EFFECT_BLASTER_MUZZLEFLASH, self.tur_shotorg, self.tur_shotdir_updated * 1000, 1); proj.think = turret_flac_projectile_think_explode; proj.nextthink = time + self.tur_impacttime + (random() * 0.01 - random() * 0.01); diff --git a/qcsrc/common/turrets/unit/fusionreactor.qc b/qcsrc/common/turrets/unit/fusionreactor.qc index 3ba1ff0747..3b6389a964 100644 --- a/qcsrc/common/turrets/unit/fusionreactor.qc +++ b/qcsrc/common/turrets/unit/fusionreactor.qc @@ -1,4 +1,4 @@ -#ifdef REGISTER_TURRET +#ifndef IMPLEMENTATION REGISTER_TURRET( /* TUR_##id */ FUSIONREACTOR, /* function */ t_fusionreactor, @@ -40,7 +40,7 @@ bool turret_fusionreactor_firecheck() return true; } -void spawnfunc_turret_fusionreactor() { SELFPARAM(); if(!turret_initialize(TUR_FUSIONREACTOR)) remove(self); } +spawnfunc(turret_fusionreactor) { if(!turret_initialize(TUR_FUSIONREACTOR.m_id)) remove(self); } float t_fusionreactor(float req) {SELFPARAM(); diff --git a/qcsrc/common/turrets/unit/hellion.qc b/qcsrc/common/turrets/unit/hellion.qc index f785f4e953..a253d20ed1 100644 --- a/qcsrc/common/turrets/unit/hellion.qc +++ b/qcsrc/common/turrets/unit/hellion.qc @@ -1,4 +1,4 @@ -#ifdef REGISTER_TURRET +#ifndef IMPLEMENTATION REGISTER_TURRET( /* TUR_##id */ HELLION, /* function */ t_hellion, @@ -76,7 +76,7 @@ void turret_hellion_missile_think() UpdateCSQCProjectile(self); } -void spawnfunc_turret_hellion() { SELFPARAM(); if(!turret_initialize(TUR_HELLION)) remove(self); } +spawnfunc(turret_hellion) { if(!turret_initialize(TUR_HELLION.m_id)) remove(self); } float t_hellion(float req) {SELFPARAM(); @@ -91,7 +91,7 @@ float t_hellion(float req) else self.tur_shotorg = gettaginfo(self.tur_head, gettagindex(self.tur_head, "tag_fire2")); - missile = turret_projectile(W_Sound("rocket_fire"), 6, 10, DEATH_TURRET_HELLION, PROJECTILE_ROCKET, FALSE, FALSE); + missile = turret_projectile(SND(ROCKET_FIRE), 6, 10, DEATH_TURRET_HELLION, PROJECTILE_ROCKET, FALSE, FALSE); te_explosion (missile.origin); missile.think = turret_hellion_missile_think; missile.nextthink = time; diff --git a/qcsrc/common/turrets/unit/hk.qc b/qcsrc/common/turrets/unit/hk.qc index f01275187d..25235734ba 100644 --- a/qcsrc/common/turrets/unit/hk.qc +++ b/qcsrc/common/turrets/unit/hk.qc @@ -1,4 +1,4 @@ -#ifdef REGISTER_TURRET +#ifndef IMPLEMENTATION REGISTER_TURRET( /* TUR_##id */ HK, /* function */ t_hk, @@ -273,7 +273,7 @@ float turret_hk_addtarget(entity e_target,entity e_sender) return 0; } -void spawnfunc_turret_hk() { SELFPARAM(); if(!turret_initialize(TUR_HK)) remove(self); } +spawnfunc(turret_hk) { if(!turret_initialize(TUR_HK.m_id)) remove(self); } float t_hk(float req) {SELFPARAM(); @@ -283,7 +283,7 @@ float t_hk(float req) { entity missile; - missile = turret_projectile(W_Sound("rocket_fire"), 6, 10, DEATH_TURRET_HK, PROJECTILE_ROCKET, FALSE, FALSE); + missile = turret_projectile(SND(ROCKET_FIRE), 6, 10, DEATH_TURRET_HK, PROJECTILE_ROCKET, FALSE, FALSE); te_explosion (missile.origin); missile.think = turret_hk_missile_think; diff --git a/qcsrc/common/turrets/unit/machinegun.qc b/qcsrc/common/turrets/unit/machinegun.qc index afecb7fa56..eeb889022b 100644 --- a/qcsrc/common/turrets/unit/machinegun.qc +++ b/qcsrc/common/turrets/unit/machinegun.qc @@ -1,4 +1,4 @@ -#ifdef REGISTER_TURRET +#ifndef IMPLEMENTATION REGISTER_TURRET( /* TUR_##id */ MACHINEGUN, /* function */ t_machinegun, @@ -11,7 +11,7 @@ REGISTER_TURRET( ); #else #ifdef SVQC -void spawnfunc_turret_machinegun() { SELFPARAM(); if(!turret_initialize(TUR_MACHINEGUN)) remove(self); } +spawnfunc(turret_machinegun) { if(!turret_initialize(TUR_MACHINEGUN.m_id)) remove(self); } void W_MachineGun_MuzzleFlash(void); @@ -48,7 +48,6 @@ float t_machinegun(float req) } case TR_PRECACHE: { - precache_sound (W_Sound("uzi_fire")); return true; } } diff --git a/qcsrc/common/turrets/unit/mlrs.qc b/qcsrc/common/turrets/unit/mlrs.qc index 1a3c9220b8..7e130c6e18 100644 --- a/qcsrc/common/turrets/unit/mlrs.qc +++ b/qcsrc/common/turrets/unit/mlrs.qc @@ -1,4 +1,4 @@ -#ifdef REGISTER_TURRET +#ifndef IMPLEMENTATION REGISTER_TURRET( /* TUR_##id */ MLRS, /* function */ t_mlrs, @@ -11,7 +11,7 @@ REGISTER_TURRET( ); #else #ifdef SVQC -void spawnfunc_turret_mlrs() { SELFPARAM(); if(!turret_initialize(TUR_MLRS)) remove(self); } +spawnfunc(turret_mlrs) { if(!turret_initialize(TUR_MLRS.m_id)) remove(self); } float t_mlrs(float req) {SELFPARAM(); @@ -22,7 +22,7 @@ float t_mlrs(float req) entity missile; turret_tag_fire_update(); - missile = turret_projectile(W_Sound("rocket_fire"), 6, 10, DEATH_TURRET_MLRS, PROJECTILE_ROCKET, TRUE, TRUE); + missile = turret_projectile(SND(ROCKET_FIRE), 6, 10, DEATH_TURRET_MLRS, PROJECTILE_ROCKET, TRUE, TRUE); missile.nextthink = time + max(self.tur_impacttime,(self.shot_radius * 2) / self.shot_speed); missile.missile_flags = MIF_SPLASH; te_explosion (missile.origin); diff --git a/qcsrc/common/turrets/unit/phaser.qc b/qcsrc/common/turrets/unit/phaser.qc index e1ddef3a9d..6eec37ab4d 100644 --- a/qcsrc/common/turrets/unit/phaser.qc +++ b/qcsrc/common/turrets/unit/phaser.qc @@ -1,4 +1,4 @@ -#ifdef REGISTER_TURRET +#ifndef IMPLEMENTATION REGISTER_TURRET( /* TUR_##id */ PHASER, /* function */ t_phaser, @@ -26,7 +26,7 @@ void beam_think() self.owner.attack_finished_single = time + self.owner.shot_refire; self.owner.fireflag = 2; self.owner.tur_head.frame = 10; - sound (self, CH_SHOTS_SINGLE, "misc/null.wav", VOL_BASE, ATTEN_NORM); + sound (self, CH_SHOTS_SINGLE, SND_Null, VOL_BASE, ATTEN_NORM); remove(self); return; } @@ -36,7 +36,7 @@ void beam_think() if (time - self.shot_spread > 0) { self.shot_spread = time + 2; - sound (self, CH_SHOTS_SINGLE, "turrets/phaser.wav", VOL_BASE, ATTEN_NORM); + sound (self, CH_SHOTS_SINGLE, SND_TUR_PHASER, VOL_BASE, ATTEN_NORM); } @@ -57,7 +57,7 @@ void beam_think() } -void spawnfunc_turret_phaser() { SELFPARAM(); if(!turret_initialize(TUR_PHASER)) remove(self); } +spawnfunc(turret_phaser) { if(!turret_initialize(TUR_PHASER.m_id)) remove(self); } float t_phaser(float req) {SELFPARAM(); @@ -83,7 +83,7 @@ float t_phaser(float req) beam.enemy = self.enemy; beam.bot_dodge = true; beam.bot_dodgerating = beam.shot_dmg; - sound (beam, CH_SHOTS_SINGLE, "turrets/phaser.wav", VOL_BASE, ATTEN_NORM); + sound (beam, CH_SHOTS_SINGLE, SND_TUR_PHASER, VOL_BASE, ATTEN_NORM); self.fireflag = 1; beam.attack_finished_single = self.attack_finished_single; @@ -91,7 +91,7 @@ float t_phaser(float req) setattachment(beam,self.tur_head,"tag_fire"); - soundat (self, trace_endpos, CH_SHOTS, W_Sound("neximpact"), VOL_BASE, ATTEN_NORM); + soundat (self, trace_endpos, CH_SHOTS, SND(NEXIMPACT), VOL_BASE, ATTEN_NORM); if (self.tur_head.frame == 0) self.tur_head.frame = 1; @@ -137,7 +137,6 @@ float t_phaser(float req) } case TR_PRECACHE: { - precache_sound ("turrets/phaser.wav"); return true; } } diff --git a/qcsrc/common/turrets/unit/plasma.qc b/qcsrc/common/turrets/unit/plasma.qc index df986d79e0..59c0f850a7 100644 --- a/qcsrc/common/turrets/unit/plasma.qc +++ b/qcsrc/common/turrets/unit/plasma.qc @@ -1,4 +1,4 @@ -#ifdef REGISTER_TURRET +#ifndef IMPLEMENTATION REGISTER_TURRET( /* TUR_##id */ PLASMA, /* function */ t_plasma, @@ -11,7 +11,7 @@ REGISTER_TURRET( ); #else #ifdef SVQC -void spawnfunc_turret_plasma() { SELFPARAM(); if(!turret_initialize(TUR_PLASMA)) remove(self); } +spawnfunc(turret_plasma) { if(!turret_initialize(TUR_PLASMA.m_id)) remove(self); } float t_plasma(float req) {SELFPARAM(); @@ -30,19 +30,14 @@ float t_plasma(float req) Send_Effect(EFFECT_VORTEX_MUZZLEFLASH, self.tur_shotorg, self.tur_shotdir_updated * 1000, 1); // teamcolor / hit beam effect - vector v; - string s; - v = WarpZone_UnTransformOrigin(WarpZone_trace_transform, trace_endpos); - s = strcat("TE_TEI_G3", ((self.team) ? Static_Team_ColorName_Upper(self.team) : "")); - - WarpZone_TrailParticles(world, _particleeffectnum(s), self.tur_shotorg, v); - + vector v = WarpZone_UnTransformOrigin(WarpZone_trace_transform, trace_endpos); + WarpZone_TrailParticles(world, particleeffectnum(EFFECT_VAPORIZER(self.team)), self.tur_shotorg, v); if (self.tur_head.frame == 0) self.tur_head.frame = 1; } else { - entity missile = turret_projectile(W_Sound("hagar_fire"), 1, 0, DEATH_TURRET_PLASMA, PROJECTILE_ELECTRO_BEAM, TRUE, TRUE); + entity missile = turret_projectile(SND(HAGAR_FIRE), 1, 0, DEATH_TURRET_PLASMA, PROJECTILE_ELECTRO_BEAM, TRUE, TRUE); missile.missile_flags = MIF_SPLASH; Send_Effect(EFFECT_BLASTER_MUZZLEFLASH, self.tur_shotorg, self.tur_shotdir_updated * 1000, 1); diff --git a/qcsrc/common/turrets/unit/plasma_dual.qc b/qcsrc/common/turrets/unit/plasma_dual.qc index f3bd32448f..edcf7ed21f 100644 --- a/qcsrc/common/turrets/unit/plasma_dual.qc +++ b/qcsrc/common/turrets/unit/plasma_dual.qc @@ -1,4 +1,4 @@ -#ifdef REGISTER_TURRET +#ifndef IMPLEMENTATION REGISTER_TURRET( /* TUR_##id */ PLASMA_DUAL, /* function */ t_plasma_dual, @@ -11,7 +11,7 @@ REGISTER_TURRET( ); #else #ifdef SVQC -void spawnfunc_turret_plasma_dual() { SELFPARAM(); if(!turret_initialize(TUR_PLASMA_DUAL)) remove(self); } +spawnfunc(turret_plasma_dual) { if(!turret_initialize(TUR_PLASMA_DUAL.m_id)) remove(self); } float t_plasma_dual(float req) {SELFPARAM(); @@ -31,18 +31,13 @@ float t_plasma_dual(float req) Send_Effect(EFFECT_VORTEX_MUZZLEFLASH, self.tur_shotorg, self.tur_shotdir_updated * 1000, 1); // teamcolor / hit beam effect - vector v; - string s; - v = WarpZone_UnTransformOrigin(WarpZone_trace_transform, trace_endpos); - s = strcat(EFFECT_VAPORIZER_NEUTRAL.eent_eff_name, ((self.team) ? Static_Team_ColorName_Upper(self.team) : "")); - - WarpZone_TrailParticles(world, _particleeffectnum(s), self.tur_shotorg, v); - + vector v = WarpZone_UnTransformOrigin(WarpZone_trace_transform, trace_endpos); + WarpZone_TrailParticles(world, particleeffectnum(EFFECT_VAPORIZER(self.team)), self.tur_shotorg, v); self.tur_head.frame += 1; } else { - entity missile = turret_projectile(W_Sound("hagar_fire"), 1, 0, DEATH_TURRET_PLASMA, PROJECTILE_ELECTRO_BEAM, TRUE, TRUE); + entity missile = turret_projectile(SND(HAGAR_FIRE), 1, 0, DEATH_TURRET_PLASMA, PROJECTILE_ELECTRO_BEAM, TRUE, TRUE); missile.missile_flags = MIF_SPLASH; Send_Effect(EFFECT_BLASTER_MUZZLEFLASH, self.tur_shotorg, self.tur_shotdir_updated * 1000, 1); self.tur_head.frame += 1; diff --git a/qcsrc/common/turrets/unit/tesla.qc b/qcsrc/common/turrets/unit/tesla.qc index 50e37182c3..ebcc4e9977 100644 --- a/qcsrc/common/turrets/unit/tesla.qc +++ b/qcsrc/common/turrets/unit/tesla.qc @@ -1,4 +1,4 @@ -#ifdef REGISTER_TURRET +#ifndef IMPLEMENTATION REGISTER_TURRET( /* TUR_##id */ TESLA, /* function */ t_tesla, @@ -89,7 +89,7 @@ float turret_tesla_firecheck() return 0; } -void spawnfunc_turret_tesla() { SELFPARAM(); if(!turret_initialize(TUR_TESLA)) remove(self); } +spawnfunc(turret_tesla) { if(!turret_initialize(TUR_TESLA.m_id)) remove(self); } float t_tesla(float req) {SELFPARAM(); diff --git a/qcsrc/common/turrets/unit/walker.qc b/qcsrc/common/turrets/unit/walker.qc index 9e7b0cbe13..a2927cfbf2 100644 --- a/qcsrc/common/turrets/unit/walker.qc +++ b/qcsrc/common/turrets/unit/walker.qc @@ -1,4 +1,4 @@ -#ifdef REGISTER_TURRET +#ifndef IMPLEMENTATION REGISTER_TURRET( /* TUR_##id */ WALKER, /* function */ t_walker, @@ -221,7 +221,7 @@ void walker_fire_rocket(vector org) rocket = spawn (); setorigin(rocket, org); - sound (self, CH_WEAPON_A, W_Sound("hagar_fire"), VOL_BASE, ATTEN_NORM); + sound (self, CH_WEAPON_A, SND_HAGAR_FIRE, VOL_BASE, ATTEN_NORM); setsize (rocket, '-3 -3 -3', '3 3 3'); // give it some size so it can be shot rocket.classname = "walker_rocket"; @@ -334,7 +334,7 @@ void walker_move_path() #endif } -void spawnfunc_turret_walker() { SELFPARAM(); if(!turret_initialize(TUR_WALKER)) remove(self); } +spawnfunc(turret_walker) { if(!turret_initialize(TUR_WALKER.m_id)) remove(self); } float t_walker(float req) {SELFPARAM(); @@ -342,7 +342,7 @@ float t_walker(float req) { case TR_ATTACK: { - sound (self, CH_WEAPON_A, W_Sound("uzi_fire"), VOL_BASE, ATTEN_NORM); + sound (self, CH_WEAPON_A, SND_UZI_FIRE, VOL_BASE, ATTEN_NORM); fireBullet (self.tur_shotorg, self.tur_shotdir_updated, self.shot_spread, 0, self.shot_dmg, self.shot_force, DEATH_TURRET_WALK_GUN, 0); Send_Effect(EFFECT_BLASTER_MUZZLEFLASH, self.tur_shotorg, self.tur_shotdir_updated * 1000, 1); @@ -634,7 +634,6 @@ float t_walker(float req) } case TR_PRECACHE: { - precache_sound (W_Sound("rocket_impact")); return true; } } @@ -645,7 +644,7 @@ float t_walker(float req) #endif // SVQC #ifdef CSQC -#include "../../../server/movelib.qh" +#include "../../../client/movelib.qh" void walker_draw() {SELFPARAM(); diff --git a/qcsrc/common/util.qc b/qcsrc/common/util.qc index a054edde8a..a506a59fcd 100644 --- a/qcsrc/common/util.qc +++ b/qcsrc/common/util.qc @@ -271,15 +271,6 @@ string fstrunzone(string s) return sc; } -bool fexists(string f) -{ - int fh = fopen(f, FILE_READ); - if (fh < 0) - return false; - fclose(fh); - return true; -} - // Databases (hash tables) const float DB_BUCKETS = 8192; void db_save(float db, string pFilename) diff --git a/qcsrc/common/util.qh b/qcsrc/common/util.qh index e3fab47b7d..d43136c673 100644 --- a/qcsrc/common/util.qh +++ b/qcsrc/common/util.qh @@ -230,10 +230,6 @@ const float XENCODE_LEN = 5; string xencode(float f); float xdecode(string s); -// Play all sounds via sound7, for access to the extra channels. -// Otherwise, channels 8 to 15 would be blocked for a weird QW feature. -#define sound(e,c,s,v,a) sound7(e,c,s,v,a,0,0) - int lowestbit(float f); #ifdef CSQC diff --git a/qcsrc/common/vehicles/all.qc b/qcsrc/common/vehicles/all.qc index 3f3b77ea33..6e26f17126 100644 --- a/qcsrc/common/vehicles/all.qc +++ b/qcsrc/common/vehicles/all.qc @@ -16,14 +16,7 @@ #ifndef MENUQC STATIC_INIT(vehicles_common_initialize) { -#ifdef CSQC - precache_sound ("vehicles/alarm.wav"); - precache_sound ("vehicles/alarm_shield.wav"); -#endif // CSQC #ifdef SVQC - precache_sound("onslaught/ons_hit2.wav"); - precache_sound("onslaught/electricity_explode.wav"); - addstat(STAT_HUD, AS_INT, hud); addstat(STAT_VEHICLESTAT_HEALTH, AS_INT, vehicle_health); addstat(STAT_VEHICLESTAT_SHIELD, AS_INT, vehicle_shield); diff --git a/qcsrc/common/vehicles/cl_vehicles.qc b/qcsrc/common/vehicles/cl_vehicles.qc index b6c8844abd..a91e3e212a 100644 --- a/qcsrc/common/vehicles/cl_vehicles.qc +++ b/qcsrc/common/vehicles/cl_vehicles.qc @@ -23,7 +23,7 @@ void vehicle_alarm(entity e, int ch, string s0und) if(!autocvar_cl_vehicles_alarm) return; - sound(e, ch, s0und, VOL_BASEVOICE, ATTEN_NONE); + _sound(e, ch, s0und, VOL_BASEVOICE, ATTEN_NONE); } void AuxiliaryXhair_Draw2D() @@ -79,8 +79,8 @@ void Net_VehicleSetup() // hud_id == 0 means we exited a vehicle, so stop alarm sound/s if(hud_id == 0) { - sound(self, CH_TRIGGER_SINGLE, "misc/null.wav", VOL_BASEVOICE, ATTEN_NONE); - sound(self, CH_PAIN_SINGLE, "misc/null.wav", VOL_BASEVOICE, ATTEN_NONE); + sound(self, CH_TRIGGER_SINGLE, SND_Null, VOL_BASEVOICE, ATTEN_NONE); + sound(self, CH_PAIN_SINGLE, SND_Null, VOL_BASEVOICE, ATTEN_NONE); return; } @@ -235,7 +235,7 @@ void Vehicles_drawHUD( if(alarm1time < time) { alarm1time = time + 2; - vehicle_alarm(self, CH_PAIN_SINGLE, "vehicles/alarm.wav"); + vehicle_alarm(self, CH_PAIN_SINGLE, SND(VEH_ALARM)); } drawpic_skin(tmpPos, "vehicle_icon_health", tmpSize, '1 1 1', hudAlpha * blinkValue, DRAWFLAG_NORMAL); } @@ -243,7 +243,7 @@ void Vehicles_drawHUD( { if(alarm1time) { - vehicle_alarm(self, CH_PAIN_SINGLE, "misc/null.wav"); + vehicle_alarm(self, CH_PAIN_SINGLE, SND(Null)); alarm1time = 0; } drawpic_skin(tmpPos, "vehicle_icon_health", tmpSize, '1 1 1', hudAlpha, DRAWFLAG_NORMAL); @@ -257,7 +257,7 @@ void Vehicles_drawHUD( if(alarm2time < time) { alarm2time = time + 1; - vehicle_alarm(self, CH_TRIGGER_SINGLE, "vehicles/alarm_shield.wav"); + vehicle_alarm(self, CH_TRIGGER_SINGLE, SND(VEH_ALARM_SHIELD)); } drawpic_skin(tmpPos, "vehicle_icon_shield", tmpSize, '1 1 1', hudAlpha * blinkValue, DRAWFLAG_NORMAL); } @@ -265,7 +265,7 @@ void Vehicles_drawHUD( { if(alarm2time) { - vehicle_alarm(self, CH_TRIGGER_SINGLE, "misc/null.wav"); + vehicle_alarm(self, CH_TRIGGER_SINGLE, SND(Null)); alarm2time = 0; } drawpic_skin(tmpPos, "vehicle_icon_shield", tmpSize, '1 1 1', hudAlpha, DRAWFLAG_NORMAL); diff --git a/qcsrc/common/vehicles/sv_vehicles.qc b/qcsrc/common/vehicles/sv_vehicles.qc index 73ff86b4be..8f2f7581a2 100644 --- a/qcsrc/common/vehicles/sv_vehicles.qc +++ b/qcsrc/common/vehicles/sv_vehicles.qc @@ -289,7 +289,7 @@ entity vehicles_projectile(string _mzlfx, string _mzlsound, proj.flags = FL_PROJECTILE | FL_NOTARGET; if(_mzlsound) - sound (self, CH_WEAPON_A, _mzlsound, VOL_BASE, ATTEN_NORM); + _sound (self, CH_WEAPON_A, _mzlsound, VOL_BASE, ATTEN_NORM); if(_mzlfx) Send_Effect_(_mzlfx, proj.origin, proj.velocity, 1); @@ -303,7 +303,7 @@ entity vehicles_projectile(string _mzlfx, string _mzlsound, void vehicles_gib_explode() {SELFPARAM(); - sound (self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_NORM); + sound (self, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM); Send_Effect(EFFECT_EXPLOSION_SMALL, randomvec() * 80 + (self.origin + '0 0 100'), '0 0 0', 1); Send_Effect(EFFECT_EXPLOSION_SMALL, self.wp00.origin + '0 0 64', '0 0 0', 1); remove(self); @@ -907,7 +907,7 @@ void vehicles_exit(bool eject) _vehicle.team = _vehicle.tur_head.team; - sound (_vehicle, CH_TRIGGER_SINGLE, "misc/null.wav", 1, ATTEN_NORM); + sound (_vehicle, CH_TRIGGER_SINGLE, SND_Null, 1, ATTEN_NORM); _vehicle.vehicle_hudmodel.viewmodelforclient = _vehicle; _vehicle.phase = time + 1; diff --git a/qcsrc/common/vehicles/unit/bumblebee.qc b/qcsrc/common/vehicles/unit/bumblebee.qc index 96fef6c05c..d36392e207 100644 --- a/qcsrc/common/vehicles/unit/bumblebee.qc +++ b/qcsrc/common/vehicles/unit/bumblebee.qc @@ -104,7 +104,7 @@ float bumble_raygun_send(entity to, int sf); void bumblebee_fire_cannon(entity _gun, string _tagname, entity _owner) { vector v = gettaginfo(_gun, gettagindex(_gun, _tagname)); - vehicles_projectile(EFFECT_BIGPLASMA_MUZZLEFLASH.eent_eff_name, W_Sound("flacexp3"), + vehicles_projectile(EFFECT_BIGPLASMA_MUZZLEFLASH.eent_eff_name, SND(VEH_BUMBLEBEE_FIRE), v, normalize(v_forward + randomvec() * autocvar_g_vehicle_bumblebee_cannon_spread) * autocvar_g_vehicle_bumblebee_cannon_speed, autocvar_g_vehicle_bumblebee_cannon_damage, autocvar_g_vehicle_bumblebee_cannon_radius, autocvar_g_vehicle_bumblebee_cannon_force, 0, DEATH_VH_BUMB_GUN, PROJECTILE_BUMBLE_GUN, 0, true, true, _owner); @@ -716,7 +716,7 @@ void bumblebee_blowup() autocvar_g_vehicle_bumblebee_blowup_forceintensity, DEATH_VH_BUMB_DEATH, world); - sound(self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM); Send_Effect(EFFECT_EXPLOSION_BIG, (self.origin + '0 0 100') + (randomvec() * 80), '0 0 0', 1); if(self.owner.deadflag == DEAD_DYING) @@ -732,7 +732,7 @@ void bumblebee_diethink() if(random() < 0.1) { - sound(self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM); Send_Effect(EFFECT_EXPLOSION_SMALL, randomvec() * 80 + (self.origin + '0 0 100'), '0 0 0', 1); } @@ -768,8 +768,8 @@ float bumble_raygun_send(entity to, float sf) return true; } -void spawnfunc_vehicle_bumblebee() -{SELFPARAM(); +spawnfunc(vehicle_bumblebee) +{ if(!autocvar_g_vehicle_bumblebee) { remove(self); return; } if(!vehicle_initialize(VEH_BUMBLEBEE, false)) { remove(self); return; } } diff --git a/qcsrc/common/vehicles/unit/racer.qc b/qcsrc/common/vehicles/unit/racer.qc index 62a6e850fd..4d62249f47 100644 --- a/qcsrc/common/vehicles/unit/racer.qc +++ b/qcsrc/common/vehicles/unit/racer.qc @@ -174,7 +174,7 @@ void racer_fire_cannon(string tagname) entity bolt; v = gettaginfo(self, gettagindex(self, tagname)); - bolt = vehicles_projectile(EFFECT_RACER_MUZZLEFLASH.eent_eff_name, W_Sound("lasergun_fire"), + bolt = vehicles_projectile(EFFECT_RACER_MUZZLEFLASH.eent_eff_name, SND(LASERGUN_FIRE), v, normalize(v_forward + randomvec() * autocvar_g_vehicle_racer_cannon_spread) * autocvar_g_vehicle_racer_cannon_speed, autocvar_g_vehicle_racer_cannon_damage, autocvar_g_vehicle_racer_cannon_radius, autocvar_g_vehicle_racer_cannon_force, 0, DEATH_VH_WAKI_GUN, PROJECTILE_WAKICANNON, 0, true, true, self.owner); @@ -292,7 +292,7 @@ void racer_rocket_tracker() void racer_fire_rocket(string tagname, entity trg) {SELFPARAM(); vector v = gettaginfo(self, gettagindex(self, tagname)); - entity rocket = vehicles_projectile(EFFECT_RACER_ROCKETLAUNCH.eent_eff_name, W_Sound("rocket_fire"), + entity rocket = vehicles_projectile(EFFECT_RACER_ROCKETLAUNCH.eent_eff_name, SND(ROCKET_FIRE), v, v_forward * autocvar_g_vehicle_racer_rocket_speed, autocvar_g_vehicle_racer_rocket_damage, autocvar_g_vehicle_racer_rocket_radius, autocvar_g_vehicle_racer_rocket_force, 3, DEATH_VH_WAKI_ROCKET, PROJECTILE_WAKIROCKET, 20, false, false, self.owner); @@ -385,7 +385,7 @@ float racer_frame() { self.sounds = 1; self.sound_nexttime = time + 10.922667; //soundlength("vehicles/racer_move.wav"); - sound (self, CH_TRIGGER_SINGLE, "vehicles/racer_move.wav", VOL_VEHICLEENGINE, ATTEN_NORM); + sound (self, CH_TRIGGER_SINGLE, SND_VEH_RACER_MOVE, VOL_VEHICLEENGINE, ATTEN_NORM); } #endif } @@ -396,7 +396,7 @@ float racer_frame() { self.sounds = 0; self.sound_nexttime = time + 11.888604; //soundlength("vehicles/racer_idle.wav"); - sound (self, CH_TRIGGER_SINGLE, "vehicles/racer_idle.wav", VOL_VEHICLEENGINE, ATTEN_NORM); + sound (self, CH_TRIGGER_SINGLE, SND_VEH_RACER_IDLE, VOL_VEHICLEENGINE, ATTEN_NORM); } } #endif @@ -435,14 +435,14 @@ float racer_frame() if(racer.strength_finished < time) { racer.strength_finished = time + 10.922667; //soundlength("vehicles/racer_boost.wav"); - sound (racer.tur_head, CH_TRIGGER_SINGLE, "vehicles/racer_boost.wav", VOL_VEHICLEENGINE, ATTEN_NORM); + sound (racer.tur_head, CH_TRIGGER_SINGLE, SND_VEH_RACER_BOOST, VOL_VEHICLEENGINE, ATTEN_NORM); } #endif } else { racer.strength_finished = 0; - sound (racer.tur_head, CH_TRIGGER_SINGLE, "misc/null.wav", VOL_VEHICLEENGINE, ATTEN_NORM); + sound (racer.tur_head, CH_TRIGGER_SINGLE, SND_Null, VOL_VEHICLEENGINE, ATTEN_NORM); } if(cont == CONTENT_WATER || cont == CONTENT_LAVA || cont == CONTENT_SLIME) @@ -589,7 +589,7 @@ void racer_exit(float eject) self.think = racer_think; self.nextthink = time; self.movetype = MOVETYPE_BOUNCE; - sound (self.tur_head, CH_TRIGGER_SINGLE, "misc/null.wav", VOL_VEHICLEENGINE, ATTEN_NORM); + sound (self.tur_head, CH_TRIGGER_SINGLE, SND_Null, VOL_VEHICLEENGINE, ATTEN_NORM); if(!self.owner) return; @@ -667,8 +667,8 @@ void racer_deadtouch() racer_blowup(); } -void spawnfunc_vehicle_racer() -{SELFPARAM(); +spawnfunc(vehicle_racer) +{ if(!autocvar_g_vehicle_racer) { remove(self); return; } if(!vehicle_initialize(VEH_RACER, false)) { remove(self); return; } } @@ -856,14 +856,6 @@ bool v_racer(int req) case VR_PRECACHE: { - #ifdef SVQC - precache_sound (W_Sound("lasergun_fire")); - precache_sound (W_Sound("rocket_fire")); - - precache_sound ("vehicles/racer_idle.wav"); - precache_sound ("vehicles/racer_move.wav"); - precache_sound ("vehicles/racer_boost.wav"); - #endif return true; } } diff --git a/qcsrc/common/vehicles/unit/raptor.qc b/qcsrc/common/vehicles/unit/raptor.qc index 96a84892cf..a1c058fb00 100644 --- a/qcsrc/common/vehicles/unit/raptor.qc +++ b/qcsrc/common/vehicles/unit/raptor.qc @@ -195,7 +195,7 @@ void raptor_bombdrop() void raptor_fire_cannon(entity gun, string tagname) {SELFPARAM(); - vehicles_projectile(EFFECT_RAPTOR_MUZZLEFLASH.eent_eff_name, W_Sound("lasergun_fire"), + vehicles_projectile(EFFECT_RAPTOR_MUZZLEFLASH.eent_eff_name, SND(LASERGUN_FIRE), gettaginfo(gun, gettagindex(gun, tagname)), normalize(v_forward + randomvec() * autocvar_g_vehicle_raptor_cannon_spread) * autocvar_g_vehicle_raptor_cannon_speed, autocvar_g_vehicle_raptor_cannon_damage, autocvar_g_vehicle_raptor_cannon_radius, autocvar_g_vehicle_raptor_cannon_force, 0, DEATH_VH_RAPT_CANNON, PROJECTILE_RAPTORCANNON, 0, true, true, self.owner); @@ -334,15 +334,15 @@ float raptor_frame() if(self.sound_nexttime < time) { self.sound_nexttime = time + 7.955812; - //sound (self.tur_head, CH_TRIGGER_SINGLE, "vehicles/raptor_fly.wav", 1 - ftmp, ATTEN_NORM ); - sound (self, CH_TRIGGER_SINGLE, "vehicles/raptor_speed.wav", 1, ATTEN_NORM); + //sound (self.tur_head, CH_TRIGGER_SINGLE, SND_VEH_RAPTOR_FLY, 1 - ftmp, ATTEN_NORM ); + sound (self, CH_TRIGGER_SINGLE, SND_VEH_RAPTOR_SPEED, 1, ATTEN_NORM); self.wait = ftmp; } /* else if(fabs(ftmp - self.wait) > 0.2) { - sound (self.tur_head, CH_TRIGGER_SINGLE, "", 1 - ftmp, ATTEN_NORM ); - sound (self, CH_TRIGGER_SINGLE, "", ftmp, ATTEN_NORM); + sound (self.tur_head, CH_TRIGGER_SINGLE, SND_Null, 1 - ftmp, ATTEN_NORM ); + sound (self, CH_TRIGGER_SINGLE, SND_Null, ftmp, ATTEN_NORM); self.wait = ftmp; } */ @@ -629,7 +629,7 @@ float raptor_frame() } if(_incomming) - sound(self, CH_PAIN_SINGLE, "vehicles/missile_alarm.wav", VOL_BASE, ATTEN_NONE); + sound(self, CH_PAIN_SINGLE, SND_VEH_MISSILE_ALARM, VOL_BASE, ATTEN_NONE); self.bomb1.cnt = time + 1; } @@ -661,7 +661,7 @@ float raptor_takeoff() if(self.sound_nexttime < time) { self.sound_nexttime = time + 7.955812; //soundlength("vehicles/raptor_fly.wav"); - sound (self, CH_TRIGGER_SINGLE, "vehicles/raptor_speed.wav", VOL_VEHICLEENGINE, ATTEN_NORM); + sound (self, CH_TRIGGER_SINGLE, SND_VEH_RAPTOR_SPEED, VOL_VEHICLEENGINE, ATTEN_NORM); } // Takeoff sequense @@ -727,7 +727,7 @@ void raptor_diethink() if(random() < 0.05) { - sound (self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_NORM); + sound (self, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM); Send_Effect(EFFECT_EXPLOSION_SMALL, randomvec() * 80 + (self.origin + '0 0 100'), '0 0 0', 1); } self.nextthink = time; @@ -789,8 +789,8 @@ float raptor_impulse(float _imp) return false; } -void spawnfunc_vehicle_raptor() -{SELFPARAM(); +spawnfunc(vehicle_raptor) +{ if(!autocvar_g_vehicle_raptor) { remove(self); return; } if(!vehicle_initialize(VEH_RAPTOR, false)) { remove(self); return; } } @@ -969,10 +969,6 @@ float v_raptor(float req) } case VR_PRECACHE: { - precache_sound ("vehicles/raptor_fly.wav"); - precache_sound ("vehicles/raptor_speed.wav"); - precache_sound ("vehicles/missile_alarm.wav"); - return true; } } diff --git a/qcsrc/common/vehicles/unit/spiderbot.qc b/qcsrc/common/vehicles/unit/spiderbot.qc index 7d03c7736f..6e1fffe7a7 100644 --- a/qcsrc/common/vehicles/unit/spiderbot.qc +++ b/qcsrc/common/vehicles/unit/spiderbot.qc @@ -269,7 +269,7 @@ void spiderbot_rocket_do() switch(self.vehicle_weapon2mode) { case SBRM_VOLLY: - rocket = vehicles_projectile(EFFECT_SPIDERBOT_ROCKETLAUNCH.eent_eff_name, W_Sound("rocket_fire"), + rocket = vehicles_projectile(EFFECT_SPIDERBOT_ROCKETLAUNCH.eent_eff_name, SND(ROCKET_FIRE), v, normalize(randomvec() * autocvar_g_vehicle_spiderbot_rocket_spread + v_forward) * autocvar_g_vehicle_spiderbot_rocket_speed, autocvar_g_vehicle_spiderbot_rocket_damage, autocvar_g_vehicle_spiderbot_rocket_radius, autocvar_g_vehicle_spiderbot_rocket_force, 1, DEATH_VH_SPID_ROCKET, PROJECTILE_SPIDERROCKET, autocvar_g_vehicle_spiderbot_rocket_health, false, true, self.owner); @@ -283,7 +283,7 @@ void spiderbot_rocket_do() self.wait = -10; break; case SBRM_GUIDE: - rocket = vehicles_projectile(EFFECT_SPIDERBOT_ROCKETLAUNCH.eent_eff_name, W_Sound("rocket_fire"), + rocket = vehicles_projectile(EFFECT_SPIDERBOT_ROCKETLAUNCH.eent_eff_name, SND(ROCKET_FIRE), v, normalize(v_forward) * autocvar_g_vehicle_spiderbot_rocket_speed, autocvar_g_vehicle_spiderbot_rocket_damage, autocvar_g_vehicle_spiderbot_rocket_radius, autocvar_g_vehicle_spiderbot_rocket_force, 1, DEATH_VH_SPID_ROCKET, PROJECTILE_SPIDERROCKET, autocvar_g_vehicle_spiderbot_rocket_health, false, false, self.owner); @@ -295,7 +295,7 @@ void spiderbot_rocket_do() break; case SBRM_ARTILLERY: - rocket = vehicles_projectile(EFFECT_SPIDERBOT_ROCKETLAUNCH.eent_eff_name, W_Sound("rocket_fire"), + rocket = vehicles_projectile(EFFECT_SPIDERBOT_ROCKETLAUNCH.eent_eff_name, SND(ROCKET_FIRE), v, normalize(v_forward) * autocvar_g_vehicle_spiderbot_rocket_speed, autocvar_g_vehicle_spiderbot_rocket_damage, autocvar_g_vehicle_spiderbot_rocket_radius, autocvar_g_vehicle_spiderbot_rocket_force, 1, DEATH_VH_SPID_ROCKET, PROJECTILE_SPIDERROCKET, autocvar_g_vehicle_spiderbot_rocket_health, false, true, self.owner); @@ -407,7 +407,7 @@ float spiderbot_frame() if(spider.flags & FL_ONGROUND) if(spider.frame == 4 && self.tur_head.wait != 0) { - sound (self, CH_TRIGGER_SINGLE, "vehicles/spiderbot_land.wav", VOL_VEHICLEENGINE, ATTEN_NORM); + sound (self, CH_TRIGGER_SINGLE, SND_VEH_SPIDERBOT_LAND, VOL_VEHICLEENGINE, ATTEN_NORM); spider.frame = 5; } @@ -416,7 +416,7 @@ float spiderbot_frame() if((spider.flags & FL_ONGROUND) && player.BUTTON_JUMP && !spider.BUTTON_JUMP && self.tur_head.wait < time) { - sound (self, CH_TRIGGER_SINGLE, "vehicles/spiderbot_jump.wav", VOL_VEHICLEENGINE, ATTEN_NORM); + sound (self, CH_TRIGGER_SINGLE, SND_VEH_SPIDERBOT_JUMP, VOL_VEHICLEENGINE, ATTEN_NORM); //dprint("spiderbot_jump:", ftos(soundlength("vehicles/spiderbot_jump.wav")), "\n"); self.delay = 0; @@ -452,7 +452,7 @@ float spiderbot_frame() self.delay = 3; self.sound_nexttime = time + 6.486500; //soundlength("vehicles/spiderbot_idle.wav"); //dprint("spiderbot_idle:", ftos(soundlength("vehicles/spiderbot_idle.wav")), "\n"); - sound (self, CH_TRIGGER_SINGLE, "vehicles/spiderbot_idle.wav", VOL_VEHICLEENGINE, ATTEN_NORM); + sound (self, CH_TRIGGER_SINGLE, SND_VEH_SPIDERBOT_IDLE, VOL_VEHICLEENGINE, ATTEN_NORM); } movelib_beak_simple(autocvar_g_vehicle_spiderbot_speed_stop); spider.frame = 5; @@ -496,7 +496,7 @@ float spiderbot_frame() { self.delay = 1; self.sound_nexttime = time + 6.486500; //soundlength("vehicles/spiderbot_walk.wav"); - sound (self, CH_TRIGGER_SINGLE, "vehicles/spiderbot_walk.wav", VOL_VEHICLEENGINE, ATTEN_NORM); + sound (self, CH_TRIGGER_SINGLE, SND_VEH_SPIDERBOT_WALK, VOL_VEHICLEENGINE, ATTEN_NORM); //dprint("spiderbot_walk:", ftos(soundlength("vehicles/spiderbot_walk.wav")), "\n"); } } @@ -526,7 +526,7 @@ float spiderbot_frame() { self.delay = 2; self.sound_nexttime = time + 6.486500; //soundlength("vehicles/spiderbot_strafe.wav"); - sound (self, CH_TRIGGER_SINGLE, "vehicles/spiderbot_strafe.wav", VOL_VEHICLEENGINE, ATTEN_NORM); + sound (self, CH_TRIGGER_SINGLE, SND_VEH_SPIDERBOT_STRAFE, VOL_VEHICLEENGINE, ATTEN_NORM); //dprint("spiderbot_strafe:", ftos(soundlength("vehicles/spiderbot_strafe.wav")), "\n"); } } @@ -558,7 +558,7 @@ float spiderbot_frame() fireBullet(v, v_forward, autocvar_g_vehicle_spiderbot_minigun_spread, autocvar_g_vehicle_spiderbot_minigun_solidpenetration, autocvar_g_vehicle_spiderbot_minigun_damage, autocvar_g_vehicle_spiderbot_minigun_force, DEATH_VH_SPID_MINIGUN, 0); - sound (gun, CH_WEAPON_A, W_Sound("uzi_fire"), VOL_BASE, ATTEN_NORM); + sound (gun, CH_WEAPON_A, SND_UZI_FIRE, VOL_BASE, ATTEN_NORM); //trailparticles(self, _particleeffectnum("spiderbot_minigun_trail"), v, trace_endpos); pointparticles(particleeffectnum(EFFECT_SPIDERBOT_MINIGUN_MUZZLEFLASH), v, v_forward * 2500, 1); @@ -678,7 +678,7 @@ void spiderbot_headfade() { if(self.alpha > 0.1) { - sound (self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_NORM); + sound (self, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM); Send_Effect(EFFECT_EXPLOSION_BIG, self.origin + '0 0 100', '0 0 0', 1); } remove(self); @@ -691,7 +691,7 @@ void spiderbot_blowup() { if(random() < 0.1) { - sound (self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_NORM); + sound (self, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM); Send_Effect(EFFECT_EXPLOSION_SMALL, randomvec() * 80 + (self.origin + '0 0 100'), '0 0 0', 1); } self.nextthink = time + 0.1; @@ -811,8 +811,8 @@ bool spiderbot_impulse(int _imp) return false; } -void spawnfunc_vehicle_spiderbot() -{SELFPARAM(); +spawnfunc(vehicle_spiderbot) +{ if(!autocvar_g_vehicle_spiderbot) { remove(self); return; } if(!vehicle_initialize(VEH_SPIDERBOT, false)) { remove(self); return; } } @@ -925,15 +925,6 @@ float v_spiderbot(float req) } case VR_PRECACHE: { - precache_sound (W_Sound("uzi_fire") ); - precache_sound (W_Sound("rocket_impact")); - - precache_sound ("vehicles/spiderbot_die.wav"); - precache_sound ("vehicles/spiderbot_idle.wav"); - precache_sound ("vehicles/spiderbot_jump.wav"); - precache_sound ("vehicles/spiderbot_strafe.wav"); - precache_sound ("vehicles/spiderbot_walk.wav"); - precache_sound ("vehicles/spiderbot_land.wav"); return true; } } diff --git a/qcsrc/common/weapons/all.qc b/qcsrc/common/weapons/all.qc index 046298a4c4..b972cfdec4 100644 --- a/qcsrc/common/weapons/all.qc +++ b/qcsrc/common/weapons/all.qc @@ -331,7 +331,16 @@ int GetAmmoStat(.int ammotype) string W_Sound(string w_snd) { - string output = strcat("weapons/", w_snd, ".wav"); + #define extensions(X) X(wav) X(ogg) + #define tryext(ext) { if (fexists(strcat("sound/", output = strcat("weapons/", w_snd, "."#ext)))) break; } + string output; + do { + extensions(tryext); + #undef tryext + #undef extensions + output = strcat("weapons/", w_snd); + } while (0); + #ifdef SVQC MUTATOR_CALLHOOK(WeaponSound, w_snd, output); return weapon_sound_output; diff --git a/qcsrc/common/weapons/weapon/arc.qc b/qcsrc/common/weapons/weapon/arc.qc index a6a0730996..6e1e2c7cb6 100644 --- a/qcsrc/common/weapons/weapon/arc.qc +++ b/qcsrc/common/weapons/weapon/arc.qc @@ -126,7 +126,7 @@ vector Draw_ArcBeam_callback_last_bottom; // NOTE: in same coordinate system as #endif #ifdef IMPLEMENTATION #ifdef SVQC -void spawnfunc_weapon_arc(void) { weapon_defaultspawnfunc(WEP_ARC.m_id); } +spawnfunc(weapon_arc) { weapon_defaultspawnfunc(WEP_ARC.m_id); } float W_Arc_Beam_Send(entity to, int sf) {SELFPARAM(); @@ -267,7 +267,7 @@ void W_Arc_Beam_Think(void) { Send_Effect_("arc_overheat", self.beam_start, self.beam_wantdir, 1 ); - sound(self, CH_WEAPON_A, W_Sound("arc_stop"), VOL_BASE, ATTN_NORM); + sound(self, CH_WEAPON_A, SND_ARC_STOP, VOL_BASE, ATTN_NORM); } } @@ -579,7 +579,7 @@ void W_Arc_Beam(float burst) // only play fire sound if 1 sec has passed since player let go the fire button if(time - self.beam_prev > 1) - sound(self, CH_WEAPON_A, W_Sound("arc_fire"), VOL_BASE, ATTN_NORM); + sound(self, CH_WEAPON_A, SND_ARC_FIRE, VOL_BASE, ATTN_NORM); entity beam = self.arc_beam = spawn(); beam.classname = "W_Arc_Beam"; @@ -611,7 +611,7 @@ void Arc_Smoke() if ( !self.arc_smoke_sound ) { self.arc_smoke_sound = 1; - sound(self, CH_SHOTS_SINGLE, W_Sound("arc_loop_overheat"), VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS_SINGLE, SND_ARC_LOOP_OVERHEAT, VOL_BASE, ATTN_NORM); } } } @@ -627,7 +627,7 @@ void Arc_Smoke() !( self.BUTTON_ATCK || self.BUTTON_ATCK2 ) ) || self.switchweapon != WEP_ARC.m_id ) { self.arc_smoke_sound = 0; - sound(self, CH_SHOTS_SINGLE, "misc/null.wav", VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS_SINGLE, SND_Null, VOL_BASE, ATTEN_NORM); } } @@ -695,7 +695,7 @@ bool W_Arc(int req) if(self.arc_BUTTON_ATCK_prev != 0) { - sound(self, CH_WEAPON_A, W_Sound("arc_stop"), VOL_BASE, ATTN_NORM); + sound(self, CH_WEAPON_A, SND_ARC_STOP, VOL_BASE, ATTN_NORM); weapon_thinkf(WFRAME_FIRE1, WEP_CVAR(arc, beam_animtime), w_ready); ATTACK_FINISHED(self) = time + WEP_CVAR(arc, beam_refire) * W_WeaponRateFactor(); } @@ -716,10 +716,6 @@ bool W_Arc(int req) } case WR_INIT: { - precache_sound(W_Sound("arc_fire")); - precache_sound(W_Sound("arc_loop")); - precache_sound(W_Sound("arc_stop")); - precache_sound(W_Sound("arc_loop_overheat")); if(!arc_shotorigin[0]) { arc_shotorigin[0] = shotorg_adjust_values(CL_Weapon_GetShotOrg(WEP_ARC.m_id), false, false, 1); @@ -1158,7 +1154,7 @@ void Draw_ArcBeam(void) void Remove_ArcBeam(void) {SELFPARAM(); remove(self.beam_muzzleentity); - sound(self, CH_SHOTS_SINGLE, "misc/null.wav", VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS_SINGLE, SND_Null, VOL_BASE, ATTEN_NORM); } void Ent_ReadArcBeam(float isnew) @@ -1180,7 +1176,7 @@ void Ent_ReadArcBeam(float isnew) self.draw = Draw_ArcBeam; self.entremove = Remove_ArcBeam; self.move_time = time; - loopsound(self, CH_SHOTS_SINGLE, W_Sound("arc_loop"), VOL_BASE, ATTEN_NORM); + loopsound(self, CH_SHOTS_SINGLE, SND(ARC_LOOP), VOL_BASE, ATTEN_NORM); flash = spawn(); flash.owner = self; @@ -1524,7 +1520,6 @@ bool W_Arc(int req) } case WR_INIT: { - precache_sound(W_Sound("arc_loop")); return true; } case WR_ZOOMRETICLE: diff --git a/qcsrc/common/weapons/weapon/blaster.qc b/qcsrc/common/weapons/weapon/blaster.qc index b20713c029..10e55990a5 100644 --- a/qcsrc/common/weapons/weapon/blaster.qc +++ b/qcsrc/common/weapons/weapon/blaster.qc @@ -48,8 +48,8 @@ BLASTER_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP) #endif #ifdef IMPLEMENTATION #ifdef SVQC -void spawnfunc_weapon_blaster(void) { weapon_defaultspawnfunc(WEP_BLASTER.m_id); } -void spawnfunc_weapon_laser(void) { spawnfunc_weapon_blaster(); } +spawnfunc(weapon_blaster) { weapon_defaultspawnfunc(WEP_BLASTER.m_id); } +spawnfunc(weapon_laser) { spawnfunc_weapon_blaster(this); } void W_Blaster_Touch(void) {SELFPARAM(); @@ -95,7 +95,7 @@ void W_Blaster_Attack( {SELFPARAM(); vector s_forward = v_forward * cos(atk_shotangle * DEG2RAD) + v_up * sin(atk_shotangle * DEG2RAD); - W_SetupShot_Dir(self, s_forward, false, 3, W_Sound("lasergun_fire"), CH_WEAPON_B, atk_damage); + W_SetupShot_Dir(self, s_forward, false, 3, SND(LASERGUN_FIRE), CH_WEAPON_B, atk_damage); Send_Effect(EFFECT_BLASTER_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1); entity missile = spawn(); @@ -223,7 +223,6 @@ bool W_Blaster(int request) case WR_INIT: { - precache_sound(W_Sound("lasergun_fire")); BLASTER_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP); return true; } @@ -269,13 +268,12 @@ bool W_Blaster(int request) vector org2; org2 = w_org + w_backoff * 6; pointparticles(particleeffectnum(EFFECT_BLASTER_IMPACT), org2, w_backoff * 1000, 1); - if(!w_issilent) { sound(self, CH_SHOTS, W_Sound("laserimpact"), VOL_BASE, ATTN_NORM); } + if(!w_issilent) { sound(self, CH_SHOTS, SND_LASERIMPACT, VOL_BASE, ATTN_NORM); } return true; } case WR_INIT: { - precache_sound(W_Sound("laserimpact")); return true; } case WR_ZOOMRETICLE: diff --git a/qcsrc/common/weapons/weapon/crylink.qc b/qcsrc/common/weapons/weapon/crylink.qc index 6821d5a0e1..bf6c0795f5 100644 --- a/qcsrc/common/weapons/weapon/crylink.qc +++ b/qcsrc/common/weapons/weapon/crylink.qc @@ -64,7 +64,7 @@ CRYLINK_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP) #endif #ifdef IMPLEMENTATION #ifdef SVQC -void spawnfunc_weapon_crylink(void) { weapon_defaultspawnfunc(WEP_CRYLINK.m_id); } +spawnfunc(weapon_crylink) { weapon_defaultspawnfunc(WEP_CRYLINK.m_id); } void W_Crylink_CheckLinks(entity e) { @@ -354,7 +354,7 @@ void W_Crylink_Attack(void) if(WEP_CVAR_PRI(crylink, joinexplode)) maxdmg += WEP_CVAR_PRI(crylink, joinexplode_damage); - W_SetupShot(self, false, 2, W_Sound("crylink_fire"), CH_WEAPON_A, maxdmg); + W_SetupShot(self, false, 2, SND(CRYLINK_FIRE), CH_WEAPON_A, maxdmg); forward = v_forward; right = v_right; up = v_up; @@ -463,7 +463,7 @@ void W_Crylink_Attack2(void) if(WEP_CVAR_SEC(crylink, joinexplode)) maxdmg += WEP_CVAR_SEC(crylink, joinexplode_damage); - W_SetupShot(self, false, 2, W_Sound("crylink_fire2"), CH_WEAPON_A, maxdmg); + W_SetupShot(self, false, 2, SND(CRYLINK_FIRE2), CH_WEAPON_A, maxdmg); forward = v_forward; right = v_right; up = v_up; @@ -638,9 +638,6 @@ bool W_Crylink(int req) } case WR_INIT: { - precache_sound(W_Sound("crylink_fire")); - precache_sound(W_Sound("crylink_fire2")); - precache_sound(W_Sound("crylink_linkjoin")); CRYLINK_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP); return true; } @@ -671,7 +668,7 @@ bool W_Crylink(int req) } case WR_RELOAD: { - W_Reload(min(WEP_CVAR_PRI(crylink, ammo), WEP_CVAR_SEC(crylink, ammo)), W_Sound("reload")); + W_Reload(min(WEP_CVAR_PRI(crylink, ammo), WEP_CVAR_SEC(crylink, ammo)), SND(RELOAD)); return true; } case WR_SUICIDEMESSAGE: @@ -699,21 +696,19 @@ bool W_Crylink(int req) { pointparticles(particleeffectnum(EFFECT_CRYLINK_IMPACT2), org2, '0 0 0', 1); if(!w_issilent) - sound(self, CH_SHOTS, W_Sound("crylink_impact2"), VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, SND_CRYLINK_IMPACT2, VOL_BASE, ATTN_NORM); } else { pointparticles(particleeffectnum(EFFECT_CRYLINK_IMPACT), org2, '0 0 0', 1); if(!w_issilent) - sound(self, CH_SHOTS, W_Sound("crylink_impact"), VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, SND_CRYLINK_IMPACT, VOL_BASE, ATTN_NORM); } return true; } case WR_INIT: { - precache_sound(W_Sound("crylink_impact2")); - precache_sound(W_Sound("crylink_impact")); return true; } case WR_ZOOMRETICLE: diff --git a/qcsrc/common/weapons/weapon/devastator.qc b/qcsrc/common/weapons/weapon/devastator.qc index cb2d16659c..0735f79ab4 100644 --- a/qcsrc/common/weapons/weapon/devastator.qc +++ b/qcsrc/common/weapons/weapon/devastator.qc @@ -62,8 +62,8 @@ DEVASTATOR_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP) #endif #ifdef IMPLEMENTATION #ifdef SVQC -void spawnfunc_weapon_devastator(void) { weapon_defaultspawnfunc(WEP_DEVASTATOR.m_id); } -void spawnfunc_weapon_rocketlauncher(void) { spawnfunc_weapon_devastator(); } +spawnfunc(weapon_devastator) { weapon_defaultspawnfunc(WEP_DEVASTATOR.m_id); } +spawnfunc(weapon_rocketlauncher) { spawnfunc_weapon_devastator(this); } void W_Devastator_Unregister(void) {SELFPARAM(); @@ -295,7 +295,7 @@ void W_Devastator_Think(void) { Send_Effect(EFFECT_ROCKET_GUIDE, self.origin, self.velocity, 1); // TODO add a better sound here - sound(self.realowner, CH_WEAPON_B, W_Sound("rocket_mode"), VOL_BASE, ATTN_NORM); + sound(self.realowner, CH_WEAPON_B, SND_ROCKET_MODE, VOL_BASE, ATTN_NORM); self.count = 1; } } @@ -342,7 +342,7 @@ void W_Devastator_Attack(void) W_DecreaseAmmo(WEP_CVAR(devastator, ammo)); - W_SetupShot_ProjectileSize(self, '-3 -3 -3', '3 3 3', false, 5, W_Sound("rocket_fire"), CH_WEAPON_A, WEP_CVAR(devastator, damage)); + W_SetupShot_ProjectileSize(self, '-3 -3 -3', '3 3 3', false, 5, SND(ROCKET_FIRE), CH_WEAPON_A, WEP_CVAR(devastator, damage)); Send_Effect(EFFECT_ROCKET_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1); missile = WarpZone_RefSys_SpawnSameRefSys(self); @@ -559,7 +559,7 @@ bool W_Devastator(int req) } } if(rockfound) - sound(self, CH_WEAPON_B, W_Sound("rocket_det"), VOL_BASE, ATTN_NORM); + sound(self, CH_WEAPON_B, SND_ROCKET_DET, VOL_BASE, ATTN_NORM); } } @@ -567,12 +567,6 @@ bool W_Devastator(int req) } case WR_INIT: { - //if(autocvar_sv_precacheweapons) - //{ - precache_sound(W_Sound("rocket_det")); - precache_sound(W_Sound("rocket_fire")); - precache_sound(W_Sound("rocket_mode")); - //} DEVASTATOR_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP); return true; } @@ -633,7 +627,7 @@ bool W_Devastator(int req) } case WR_RELOAD: { - W_Reload(WEP_CVAR(devastator, ammo), W_Sound("reload")); + W_Reload(WEP_CVAR(devastator, ammo), SND(RELOAD)); return true; } case WR_SUICIDEMESSAGE: @@ -662,13 +656,12 @@ bool W_Devastator(int req) org2 = w_org + w_backoff * 12; pointparticles(particleeffectnum(EFFECT_ROCKET_EXPLODE), org2, '0 0 0', 1); if(!w_issilent) - sound(self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTN_NORM); return true; } case WR_INIT: { - precache_sound(W_Sound("rocket_impact")); return true; } case WR_ZOOMRETICLE: diff --git a/qcsrc/common/weapons/weapon/electro.qc b/qcsrc/common/weapons/weapon/electro.qc index 7f02a00ce2..85a75ed9c5 100644 --- a/qcsrc/common/weapons/weapon/electro.qc +++ b/qcsrc/common/weapons/weapon/electro.qc @@ -67,7 +67,7 @@ void W_Electro_ExplodeCombo(void); #endif #ifdef IMPLEMENTATION #ifdef SVQC -void spawnfunc_weapon_electro(void) { weapon_defaultspawnfunc(WEP_ELECTRO.m_id); } +spawnfunc(weapon_electro) { weapon_defaultspawnfunc(WEP_ELECTRO.m_id); } void W_Electro_TriggerCombo(vector org, float rad, entity own) { @@ -255,7 +255,7 @@ void W_Electro_Attack_Bolt(void) '0 0 -3', false, 2, - W_Sound("electro_fire"), + SND(ELECTRO_FIRE), CH_WEAPON_A, WEP_CVAR_PRI(electro, damage) ); @@ -296,7 +296,7 @@ void W_Electro_Orb_Touch(void) else { //UpdateCSQCProjectile(self); - spamsound(self, CH_SHOTS, W_Sound("electro_bounce"), VOL_BASE, ATTEN_NORM); + spamsound(self, CH_SHOTS, SND(ELECTRO_BOUNCE), VOL_BASE, ATTEN_NORM); self.projectiledeathtype |= HITTYPE_BOUNCE; } } @@ -353,7 +353,7 @@ void W_Electro_Attack_Orb(void) '0 0 -4', false, 2, - W_Sound("electro_fire2"), + SND(ELECTRO_FIRE2), CH_WEAPON_A, WEP_CVAR_SEC(electro, damage) ); @@ -498,11 +498,6 @@ bool W_Electro(int req) } case WR_INIT: { - precache_sound(W_Sound("electro_bounce")); - precache_sound(W_Sound("electro_fire")); - precache_sound(W_Sound("electro_fire2")); - precache_sound(W_Sound("electro_impact")); - precache_sound(W_Sound("electro_impact_combo")); ELECTRO_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP); return true; } @@ -538,7 +533,7 @@ bool W_Electro(int req) } case WR_RELOAD: { - W_Reload(min(WEP_CVAR_PRI(electro, ammo), WEP_CVAR_SEC(electro, ammo)), W_Sound("reload")); + W_Reload(min(WEP_CVAR_PRI(electro, ammo), WEP_CVAR_SEC(electro, ammo)), SND(RELOAD)); return true; } case WR_SUICIDEMESSAGE: @@ -579,7 +574,7 @@ bool W_Electro(int req) { pointparticles(particleeffectnum(EFFECT_ELECTRO_BALLEXPLODE), org2, '0 0 0', 1); if(!w_issilent) - sound(self, CH_SHOTS, W_Sound("electro_impact"), VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS, SND_ELECTRO_IMPACT, VOL_BASE, ATTEN_NORM); } else { @@ -588,13 +583,13 @@ bool W_Electro(int req) // this is sent as "primary (w_deathtype & HITTYPE_BOUNCE)" to distinguish it from (w_deathtype & HITTYPE_SECONDARY) bounced balls pointparticles(particleeffectnum(EFFECT_ELECTRO_COMBO), org2, '0 0 0', 1); if(!w_issilent) - sound(self, CH_SHOTS, W_Sound("electro_impact_combo"), VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS, SND_ELECTRO_IMPACT_COMBO, VOL_BASE, ATTEN_NORM); } else { pointparticles(particleeffectnum(EFFECT_ELECTRO_IMPACT), org2, '0 0 0', 1); if(!w_issilent) - sound(self, CH_SHOTS, W_Sound("electro_impact"), VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS, SND_ELECTRO_IMPACT, VOL_BASE, ATTEN_NORM); } } @@ -602,8 +597,6 @@ bool W_Electro(int req) } case WR_INIT: { - precache_sound(W_Sound("electro_impact")); - precache_sound(W_Sound("electro_impact_combo")); return true; } case WR_ZOOMRETICLE: diff --git a/qcsrc/common/weapons/weapon/fireball.qc b/qcsrc/common/weapons/weapon/fireball.qc index a37ae8f099..c334932f16 100644 --- a/qcsrc/common/weapons/weapon/fireball.qc +++ b/qcsrc/common/weapons/weapon/fireball.qc @@ -55,7 +55,7 @@ FIREBALL_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP) #endif #ifdef IMPLEMENTATION #ifdef SVQC -void spawnfunc_weapon_fireball(void) { weapon_defaultspawnfunc(WEP_FIREBALL.m_id); } +spawnfunc(weapon_fireball) { weapon_defaultspawnfunc(WEP_FIREBALL.m_id); } void W_Fireball_Explode(void) {SELFPARAM(); @@ -182,7 +182,7 @@ void W_Fireball_Attack1(void) {SELFPARAM(); entity proj; - W_SetupShot_ProjectileSize(self, '-16 -16 -16', '16 16 16', false, 2, W_Sound("fireball_fire2"), CH_WEAPON_A, WEP_CVAR_PRI(fireball, damage) + WEP_CVAR_PRI(fireball, bfgdamage)); + W_SetupShot_ProjectileSize(self, '-16 -16 -16', '16 16 16', false, 2, SND(FIREBALL_FIRE2), CH_WEAPON_A, WEP_CVAR_PRI(fireball, damage) + WEP_CVAR_PRI(fireball, bfgdamage)); Send_Effect(EFFECT_FIREBALL_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1); @@ -251,7 +251,7 @@ void W_Fireball_Attack1_Frame1(void) void W_Fireball_Attack1_Frame0(void) {SELFPARAM(); W_Fireball_AttackEffect(0, '-1.25 -3.75 0'); - sound(self, CH_WEAPON_SINGLE, W_Sound("fireball_prefire2"), VOL_BASE, ATTEN_NORM); + sound(self, CH_WEAPON_SINGLE, SND_FIREBALL_PREFIRE2, VOL_BASE, ATTEN_NORM); weapon_thinkf(WFRAME_FIRE1, WEP_CVAR_PRI(fireball, animtime), W_Fireball_Attack1_Frame1); } @@ -316,7 +316,7 @@ void W_Fireball_Attack2(void) f_diff = '+1.25 +3.75 0'; break; } - W_SetupShot_ProjectileSize(self, '-4 -4 -4', '4 4 4', false, 2, W_Sound("fireball_fire"), CH_WEAPON_A, WEP_CVAR_SEC(fireball, damage)); + W_SetupShot_ProjectileSize(self, '-4 -4 -4', '4 4 4', false, 2, SND(FIREBALL_FIRE), CH_WEAPON_A, WEP_CVAR_SEC(fireball, damage)); traceline(w_shotorg, w_shotorg + f_diff_x * v_up + f_diff_y * v_right, MOVE_NORMAL, self); w_shotorg = trace_endpos; @@ -399,9 +399,6 @@ bool W_Fireball(int req) } case WR_INIT: { - precache_sound(W_Sound("fireball_fire")); - precache_sound(W_Sound("fireball_fire2")); - precache_sound(W_Sound("fireball_prefire2")); FIREBALL_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP); return true; } @@ -460,14 +457,13 @@ bool W_Fireball(int req) org2 = w_org + w_backoff * 16; pointparticles(particleeffectnum(EFFECT_FIREBALL_EXPLODE), org2, '0 0 0', 1); if(!w_issilent) - sound(self, CH_SHOTS, W_Sound("fireball_impact2"), VOL_BASE, ATTEN_NORM * 0.25); // long range boom + sound(self, CH_SHOTS, SND_FIREBALL_IMPACT2, VOL_BASE, ATTEN_NORM * 0.25); // long range boom } return true; } case WR_INIT: { - precache_sound(W_Sound("fireball_impact2")); return true; } case WR_ZOOMRETICLE: diff --git a/qcsrc/common/weapons/weapon/hagar.qc b/qcsrc/common/weapons/weapon/hagar.qc index d55a1b6072..21755eac69 100644 --- a/qcsrc/common/weapons/weapon/hagar.qc +++ b/qcsrc/common/weapons/weapon/hagar.qc @@ -56,7 +56,7 @@ HAGAR_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP) #endif #ifdef IMPLEMENTATION #ifdef SVQC -void spawnfunc_weapon_hagar(void) { weapon_defaultspawnfunc(WEP_HAGAR.m_id); } +spawnfunc(weapon_hagar) { weapon_defaultspawnfunc(WEP_HAGAR.m_id); } // NO bounce protection, as bounces are limited! @@ -127,7 +127,7 @@ void W_Hagar_Attack(void) W_DecreaseAmmo(WEP_CVAR_PRI(hagar, ammo)); - W_SetupShot(self, false, 2, W_Sound("hagar_fire"), CH_WEAPON_A, WEP_CVAR_PRI(hagar, damage)); + W_SetupShot(self, false, 2, SND(HAGAR_FIRE), CH_WEAPON_A, WEP_CVAR_PRI(hagar, damage)); Send_Effect(EFFECT_HAGAR_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1); @@ -170,7 +170,7 @@ void W_Hagar_Attack2(void) W_DecreaseAmmo(WEP_CVAR_SEC(hagar, ammo)); - W_SetupShot(self, false, 2, W_Sound("hagar_fire"), CH_WEAPON_A, WEP_CVAR_SEC(hagar, damage)); + W_SetupShot(self, false, 2, SND(HAGAR_FIRE), CH_WEAPON_A, WEP_CVAR_SEC(hagar, damage)); Send_Effect(EFFECT_HAGAR_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1); @@ -223,7 +223,7 @@ void W_Hagar_Attack2_Load_Release(void) weapon_prepareattack_do(1, WEP_CVAR_SEC(hagar, refire)); - W_SetupShot(self, false, 2, W_Sound("hagar_fire"), CH_WEAPON_A, WEP_CVAR_SEC(hagar, damage)); + W_SetupShot(self, false, 2, SND(HAGAR_FIRE), CH_WEAPON_A, WEP_CVAR_SEC(hagar, damage)); Send_Effect(EFFECT_HAGAR_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1); forward = v_forward; @@ -319,7 +319,7 @@ void W_Hagar_Attack2_Load(void) self.weaponentity.state = WS_READY; W_DecreaseAmmo(WEP_CVAR_SEC(hagar, ammo) * self.hagar_load * -1); // give back ammo self.hagar_load = 0; - sound(self, CH_WEAPON_A, W_Sound("hagar_beep"), VOL_BASE, ATTN_NORM); + sound(self, CH_WEAPON_A, SND_HAGAR_BEEP, VOL_BASE, ATTN_NORM); // pause until we can load rockets again, once we re-press the alt fire button self.hagar_loadstep = time + WEP_CVAR_SEC(hagar, load_speed) * W_WeaponRateFactor(); @@ -338,7 +338,7 @@ void W_Hagar_Attack2_Load(void) W_DecreaseAmmo(WEP_CVAR_SEC(hagar, ammo)); self.weaponentity.state = WS_INUSE; self.hagar_load += 1; - sound(self, CH_WEAPON_B, W_Sound("hagar_load"), VOL_BASE * 0.8, ATTN_NORM); // sound is too loud according to most + sound(self, CH_WEAPON_B, SND_HAGAR_LOAD, VOL_BASE * 0.8, ATTN_NORM); // sound is too loud according to most if(self.hagar_load >= WEP_CVAR_SEC(hagar, load_max)) stopped = true; @@ -349,7 +349,7 @@ void W_Hagar_Attack2_Load(void) if(stopped && !self.hagar_loadbeep && self.hagar_load) // prevents the beep from playing each frame { // if this is the last rocket we can load, play a beep sound to notify the player - sound(self, CH_WEAPON_A, W_Sound("hagar_beep"), VOL_BASE, ATTN_NORM); + sound(self, CH_WEAPON_A, SND_HAGAR_BEEP, VOL_BASE, ATTN_NORM); self.hagar_loadbeep = true; self.hagar_loadstep = time + WEP_CVAR_SEC(hagar, load_hold) * W_WeaponRateFactor(); } @@ -369,7 +369,7 @@ void W_Hagar_Attack2_Load(void) if(!self.hagar_warning) // prevents the beep from playing each frame { // we're about to automatically release after holding time, play a beep sound to notify the player - sound(self, CH_WEAPON_A, W_Sound("hagar_beep"), VOL_BASE, ATTN_NORM); + sound(self, CH_WEAPON_A, SND_HAGAR_BEEP, VOL_BASE, ATTN_NORM); self.hagar_warning = true; } } @@ -451,9 +451,6 @@ bool W_Hagar(int req) } case WR_INIT: { - precache_sound(W_Sound("hagar_fire")); - precache_sound(W_Sound("hagar_load")); - precache_sound(W_Sound("hagar_beep")); HAGAR_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP); return true; } @@ -502,7 +499,7 @@ bool W_Hagar(int req) case WR_RELOAD: { if(!self.hagar_load) // require releasing loaded rockets first - W_Reload(min(WEP_CVAR_PRI(hagar, ammo), WEP_CVAR_SEC(hagar, ammo)), W_Sound("reload")); + W_Reload(min(WEP_CVAR_PRI(hagar, ammo), WEP_CVAR_SEC(hagar, ammo)), SND(RELOAD)); return true; } @@ -534,20 +531,17 @@ bool W_Hagar(int req) if(!w_issilent) { if(w_random<0.15) - sound(self, CH_SHOTS, W_Sound("hagexp1"), VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, SND_HAGEXP1, VOL_BASE, ATTN_NORM); else if(w_random<0.7) - sound(self, CH_SHOTS, W_Sound("hagexp2"), VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, SND_HAGEXP2, VOL_BASE, ATTN_NORM); else - sound(self, CH_SHOTS, W_Sound("hagexp3"), VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, SND_HAGEXP3, VOL_BASE, ATTN_NORM); } return true; } case WR_INIT: { - precache_sound(W_Sound("hagexp1")); - precache_sound(W_Sound("hagexp2")); - precache_sound(W_Sound("hagexp3")); return true; } case WR_ZOOMRETICLE: diff --git a/qcsrc/common/weapons/weapon/hlac.qc b/qcsrc/common/weapons/weapon/hlac.qc index 074b760538..ac300fe540 100644 --- a/qcsrc/common/weapons/weapon/hlac.qc +++ b/qcsrc/common/weapons/weapon/hlac.qc @@ -48,7 +48,7 @@ HLAC_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP) #endif #ifdef IMPLEMENTATION #ifdef SVQC -void spawnfunc_weapon_hlac(void) { weapon_defaultspawnfunc(WEP_HLAC.m_id); } +spawnfunc(weapon_hlac) { weapon_defaultspawnfunc(WEP_HLAC.m_id); } void W_HLAC_Touch(void) {SELFPARAM(); @@ -77,7 +77,7 @@ void W_HLAC_Attack(void) if(self.crouch) spread = spread * WEP_CVAR_PRI(hlac, spread_crouchmod); - W_SetupShot(self, false, 3, W_Sound("lasergun_fire"), CH_WEAPON_A, WEP_CVAR_PRI(hlac, damage)); + W_SetupShot(self, false, 3, SND(LASERGUN_FIRE), CH_WEAPON_A, WEP_CVAR_PRI(hlac, damage)); Send_Effect(EFFECT_BLASTER_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1); if(!autocvar_g_norecoil) { @@ -125,7 +125,7 @@ void W_HLAC_Attack2(void) if(self.crouch) spread = spread * WEP_CVAR_SEC(hlac, spread_crouchmod); - W_SetupShot(self, false, 3, W_Sound("lasergun_fire"), CH_WEAPON_A, WEP_CVAR_SEC(hlac, damage)); + W_SetupShot(self, false, 3, SND(LASERGUN_FIRE), CH_WEAPON_A, WEP_CVAR_SEC(hlac, damage)); Send_Effect(EFFECT_BLASTER_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1); missile = spawn(); @@ -241,7 +241,6 @@ bool W_HLAC(int req) } case WR_INIT: { - precache_sound(W_Sound("lasergun_fire")); HLAC_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP); return true; } @@ -264,7 +263,7 @@ bool W_HLAC(int req) } case WR_RELOAD: { - W_Reload(min(WEP_CVAR_PRI(hlac, ammo), WEP_CVAR_SEC(hlac, ammo)), W_Sound("reload")); + W_Reload(min(WEP_CVAR_PRI(hlac, ammo), WEP_CVAR_SEC(hlac, ammo)), SND(RELOAD)); return true; } case WR_SUICIDEMESSAGE: @@ -290,13 +289,12 @@ bool W_HLAC(int req) org2 = w_org + w_backoff * 6; pointparticles(particleeffectnum(EFFECT_BLASTER_IMPACT), org2, w_backoff * 1000, 1); if(!w_issilent) - sound(self, CH_SHOTS, W_Sound("laserimpact"), VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, SND_LASERIMPACT, VOL_BASE, ATTN_NORM); return true; } case WR_INIT: { - precache_sound(W_Sound("laserimpact")); return true; } case WR_ZOOMRETICLE: diff --git a/qcsrc/common/weapons/weapon/hmg.qc b/qcsrc/common/weapons/weapon/hmg.qc index c55304118b..f4c6a3c752 100644 --- a/qcsrc/common/weapons/weapon/hmg.qc +++ b/qcsrc/common/weapons/weapon/hmg.qc @@ -41,7 +41,7 @@ HMG_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP) #ifdef IMPLEMENTATION #ifdef SVQC -void spawnfunc_weapon_hmg() { weapon_defaultspawnfunc(WEP_HMG.m_id); } +spawnfunc(weapon_hmg) { weapon_defaultspawnfunc(WEP_HMG.m_id); } void W_HeavyMachineGun_Attack_Auto() {SELFPARAM(); @@ -61,7 +61,7 @@ void W_HeavyMachineGun_Attack_Auto() W_DecreaseAmmo(WEP_CVAR(hmg, ammo)); - W_SetupShot (self, true, 0, W_Sound("uzi_fire"), CH_WEAPON_A, WEP_CVAR(hmg, damage)); + W_SetupShot (self, true, 0, SND(UZI_FIRE), CH_WEAPON_A, WEP_CVAR(hmg, damage)); if(!autocvar_g_norecoil) { @@ -118,7 +118,6 @@ bool W_HeavyMachineGun(int req) } case WR_INIT: { - precache_sound (W_Sound("uzi_fire")); HMG_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP); return true; } @@ -147,7 +146,7 @@ bool W_HeavyMachineGun(int req) } case WR_RELOAD: { - W_Reload(WEP_CVAR(hmg, ammo), W_Sound("reload")); + W_Reload(WEP_CVAR(hmg, ammo), SND(RELOAD)); return true; } case WR_SUICIDEMESSAGE: @@ -177,19 +176,16 @@ bool W_HeavyMachineGun(int req) pointparticles(particleeffectnum(EFFECT_MACHINEGUN_IMPACT), org2, w_backoff * 1000, 1); if(!w_issilent) if(w_random < 0.05) - sound(self, CH_SHOTS, W_Sound("ric1"), VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS, SND_RIC1, VOL_BASE, ATTEN_NORM); else if(w_random < 0.1) - sound(self, CH_SHOTS, W_Sound("ric2"), VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS, SND_RIC2, VOL_BASE, ATTEN_NORM); else if(w_random < 0.2) - sound(self, CH_SHOTS, W_Sound("ric3"), VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS, SND_RIC3, VOL_BASE, ATTEN_NORM); return true; } case WR_INIT: { - precache_sound(W_Sound("ric1")); - precache_sound(W_Sound("ric2")); - precache_sound(W_Sound("ric3")); return true; } case WR_ZOOMRETICLE: diff --git a/qcsrc/common/weapons/weapon/hook.qc b/qcsrc/common/weapons/weapon/hook.qc index b7f51b54c4..6c1f82fdf8 100644 --- a/qcsrc/common/weapons/weapon/hook.qc +++ b/qcsrc/common/weapons/weapon/hook.qc @@ -59,8 +59,8 @@ HOOK_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP) #ifdef IMPLEMENTATION #ifdef SVQC -void spawnfunc_weapon_hook(void) -{SELFPARAM(); +spawnfunc(weapon_hook) +{ if(g_grappling_hook) // offhand hook { startitem_failed = true; @@ -134,7 +134,7 @@ void W_Hook_Attack2(void) entity gren; //W_DecreaseAmmo(WEP_CVAR_SEC(hook, ammo)); // WEAPONTODO: Figure out how to handle ammo with hook secondary (gravitybomb) - W_SetupShot(self, false, 4, W_Sound("hookbomb_fire"), CH_WEAPON_A, WEP_CVAR_SEC(hook, damage)); + W_SetupShot(self, false, 4, SND(HOOKBOMB_FIRE), CH_WEAPON_A, WEP_CVAR_SEC(hook, damage)); gren = spawn(); gren.owner = gren.realowner = self; @@ -288,9 +288,6 @@ bool W_Hook(int req) } case WR_INIT: { - precache_sound(W_Sound("hook_impact")); // done by g_hook.qc - precache_sound(W_Sound("hook_fire")); - precache_sound(W_Sound("hookbomb_fire")); HOOK_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP); return true; } @@ -344,13 +341,12 @@ bool W_Hook(int req) org2 = w_org + w_backoff * 2; pointparticles(particleeffectnum(EFFECT_HOOK_EXPLODE), org2, '0 0 0', 1); if(!w_issilent) - sound(self, CH_SHOTS, W_Sound("hookbomb_impact"), VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, SND_HOOKBOMB_IMPACT, VOL_BASE, ATTN_NORM); return true; } case WR_INIT: { - precache_sound(W_Sound("hookbomb_impact")); return true; } case WR_ZOOMRETICLE: diff --git a/qcsrc/common/weapons/weapon/machinegun.qc b/qcsrc/common/weapons/weapon/machinegun.qc index 01efced0f5..e9a50ab439 100644 --- a/qcsrc/common/weapons/weapon/machinegun.qc +++ b/qcsrc/common/weapons/weapon/machinegun.qc @@ -55,8 +55,8 @@ MACHINEGUN_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP) #ifdef IMPLEMENTATION #ifdef SVQC -void spawnfunc_weapon_machinegun(void) -{SELFPARAM(); +spawnfunc(weapon_machinegun) +{ if(autocvar_sv_q3acompat_machineshotgunswap) if(self.classname != "droppedweapon") { @@ -65,7 +65,7 @@ void spawnfunc_weapon_machinegun(void) } weapon_defaultspawnfunc(WEP_MACHINEGUN.m_id); } -void spawnfunc_weapon_uzi(void) { spawnfunc_weapon_machinegun(); } +spawnfunc(weapon_uzi) { spawnfunc_weapon_machinegun(this); } void W_MachineGun_MuzzleFlash_Think(void) {SELFPARAM(); @@ -104,7 +104,7 @@ void W_MachineGun_MuzzleFlash(void) void W_MachineGun_Attack(int deathtype) {SELFPARAM(); - W_SetupShot(self, true, 0, W_Sound("uzi_fire"), CH_WEAPON_A, ((self.misc_bulletcounter == 1) ? WEP_CVAR(machinegun, first_damage) : WEP_CVAR(machinegun, sustained_damage))); + W_SetupShot(self, true, 0, SND(UZI_FIRE), CH_WEAPON_A, ((self.misc_bulletcounter == 1) ? WEP_CVAR(machinegun, first_damage) : WEP_CVAR(machinegun, sustained_damage))); if(!autocvar_g_norecoil) { self.punchangle_x = random() - 0.5; @@ -180,7 +180,7 @@ void W_MachineGun_Attack_Auto(void) W_DecreaseAmmo(WEP_CVAR(machinegun, sustained_ammo)); - W_SetupShot(self, true, 0, W_Sound("uzi_fire"), CH_WEAPON_A, WEP_CVAR(machinegun, sustained_damage)); + W_SetupShot(self, true, 0, SND(UZI_FIRE), CH_WEAPON_A, WEP_CVAR(machinegun, sustained_damage)); if(!autocvar_g_norecoil) { self.punchangle_x = random() - 0.5; @@ -206,7 +206,7 @@ void W_MachineGun_Attack_Auto(void) void W_MachineGun_Attack_Burst(void) {SELFPARAM(); - W_SetupShot(self, true, 0, W_Sound("uzi_fire"), CH_WEAPON_A, WEP_CVAR(machinegun, sustained_damage)); + W_SetupShot(self, true, 0, SND(UZI_FIRE), CH_WEAPON_A, WEP_CVAR(machinegun, sustained_damage)); if(!autocvar_g_norecoil) { self.punchangle_x = random() - 0.5; @@ -304,7 +304,6 @@ bool W_MachineGun(int req) } case WR_INIT: { - precache_sound(W_Sound("uzi_fire")); MACHINEGUN_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP); return true; } @@ -347,7 +346,7 @@ bool W_MachineGun(int req) } case WR_RELOAD: { - W_Reload(min(max(WEP_CVAR(machinegun, sustained_ammo), WEP_CVAR(machinegun, first_ammo)), WEP_CVAR(machinegun, burst_ammo)), W_Sound("reload")); + W_Reload(min(max(WEP_CVAR(machinegun, sustained_ammo), WEP_CVAR(machinegun, first_ammo)), WEP_CVAR(machinegun, burst_ammo)), SND(RELOAD)); return true; } case WR_SUICIDEMESSAGE: @@ -377,19 +376,16 @@ bool W_MachineGun(int req) pointparticles(particleeffectnum(EFFECT_MACHINEGUN_IMPACT), org2, w_backoff * 1000, 1); if(!w_issilent) if(w_random < 0.05) - sound(self, CH_SHOTS, W_Sound("ric1"), VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, SND_RIC1, VOL_BASE, ATTN_NORM); else if(w_random < 0.1) - sound(self, CH_SHOTS, W_Sound("ric2"), VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, SND_RIC2, VOL_BASE, ATTN_NORM); else if(w_random < 0.2) - sound(self, CH_SHOTS, W_Sound("ric3"), VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, SND_RIC3, VOL_BASE, ATTN_NORM); return true; } case WR_INIT: { - precache_sound(W_Sound("ric1")); - precache_sound(W_Sound("ric2")); - precache_sound(W_Sound("ric3")); return true; } case WR_ZOOMRETICLE: diff --git a/qcsrc/common/weapons/weapon/minelayer.qc b/qcsrc/common/weapons/weapon/minelayer.qc index 1c7e89fde2..40866970fb 100644 --- a/qcsrc/common/weapons/weapon/minelayer.qc +++ b/qcsrc/common/weapons/weapon/minelayer.qc @@ -57,11 +57,11 @@ void W_MineLayer_Think(void); #endif #ifdef IMPLEMENTATION #ifdef SVQC -void spawnfunc_weapon_minelayer(void) { weapon_defaultspawnfunc(WEP_MINE_LAYER.m_id); } +spawnfunc(weapon_minelayer) { weapon_defaultspawnfunc(WEP_MINE_LAYER.m_id); } void W_MineLayer_Stick(entity to) {SELFPARAM(); - spamsound(self, CH_SHOTS, W_Sound("mine_stick"), VOL_BASE, ATTN_NORM); + spamsound(self, CH_SHOTS, SND(MINE_STICK), VOL_BASE, ATTN_NORM); // in order for mines to face properly when sticking to the ground, they must be a server side entity rather than a csqc projectile @@ -221,7 +221,7 @@ void W_MineLayer_Think(void) if((time > self.cnt) && (!self.mine_time) && (self.cnt > 0)) { if(WEP_CVAR(minelayer, lifetime_countdown) > 0) - spamsound(self, CH_SHOTS, W_Sound("mine_trigger"), VOL_BASE, ATTN_NORM); + spamsound(self, CH_SHOTS, SND(MINE_TRIGGER), VOL_BASE, ATTN_NORM); self.mine_time = time + WEP_CVAR(minelayer, lifetime_countdown); self.mine_explodeanyway = 1; // make the mine super aggressive -- Samual: Rather, make it not care if a team mate is near. } @@ -244,7 +244,7 @@ void W_MineLayer_Think(void) if(head != self.realowner && DIFF_TEAM(head, self.realowner)) // don't trigger for team mates if(!self.mine_time) { - spamsound(self, CH_SHOTS, W_Sound("mine_trigger"), VOL_BASE, ATTN_NORM); + spamsound(self, CH_SHOTS, SND(MINE_TRIGGER), VOL_BASE, ATTN_NORM); self.mine_time = time + WEP_CVAR(minelayer, time); } head = head.chain; @@ -316,14 +316,14 @@ void W_MineLayer_Attack(void) { // the refire delay keeps this message from being spammed Send_Notification(NOTIF_ONE, self, MSG_MULTI, WEAPON_MINELAYER_LIMIT, WEP_CVAR(minelayer, limit)); - play2(self, W_Sound("unavailable")); + play2(self, SND(UNAVAILABLE)); return; } } W_DecreaseAmmo(WEP_CVAR(minelayer, ammo)); - W_SetupShot_ProjectileSize(self, '-4 -4 -4', '4 4 4', false, 5, W_Sound("mine_fire"), CH_WEAPON_A, WEP_CVAR(minelayer, damage)); + W_SetupShot_ProjectileSize(self, '-4 -4 -4', '4 4 4', false, 5, SND(MINE_FIRE), CH_WEAPON_A, WEP_CVAR(minelayer, damage)); Send_Effect(EFFECT_ROCKET_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1); mine = WarpZone_RefSys_SpawnSameRefSys(self); @@ -523,17 +523,13 @@ bool W_MineLayer(int req) if(self.BUTTON_ATCK2) { if(W_MineLayer_PlacedMines(true)) - sound(self, CH_WEAPON_B, W_Sound("mine_det"), VOL_BASE, ATTN_NORM); + sound(self, CH_WEAPON_B, SND_MINE_DET, VOL_BASE, ATTN_NORM); } return true; } case WR_INIT: { - precache_sound(W_Sound("mine_det")); - precache_sound(W_Sound("mine_fire")); - precache_sound(W_Sound("mine_stick")); - precache_sound(W_Sound("mine_trigger")); MINELAYER_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP); return true; } @@ -567,7 +563,7 @@ bool W_MineLayer(int req) } case WR_RELOAD: { - W_Reload(WEP_CVAR(minelayer, ammo), W_Sound("reload")); + W_Reload(WEP_CVAR(minelayer, ammo), SND(RELOAD)); return true; } case WR_SUICIDEMESSAGE: @@ -593,13 +589,12 @@ bool W_MineLayer(int req) org2 = w_org + w_backoff * 12; pointparticles(particleeffectnum(EFFECT_ROCKET_EXPLODE), org2, '0 0 0', 1); if(!w_issilent) - sound(self, CH_SHOTS, W_Sound("mine_exp"), VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, SND_MINE_EXP, VOL_BASE, ATTN_NORM); return true; } case WR_INIT: { - precache_sound(W_Sound("mine_exp")); return true; } case WR_ZOOMRETICLE: diff --git a/qcsrc/common/weapons/weapon/mortar.qc b/qcsrc/common/weapons/weapon/mortar.qc index d03eb8e565..1276cca5d9 100644 --- a/qcsrc/common/weapons/weapon/mortar.qc +++ b/qcsrc/common/weapons/weapon/mortar.qc @@ -56,8 +56,8 @@ MORTAR_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP) #ifdef IMPLEMENTATION #ifdef SVQC -void spawnfunc_weapon_mortar(void) { weapon_defaultspawnfunc(WEP_MORTAR.m_id); } -void spawnfunc_weapon_grenadelauncher(void) { spawnfunc_weapon_mortar(); } +spawnfunc(weapon_mortar) { weapon_defaultspawnfunc(WEP_MORTAR.m_id); } +spawnfunc(weapon_grenadelauncher) { spawnfunc_weapon_mortar(this); } void W_Mortar_Grenade_Explode(void) {SELFPARAM(); @@ -137,27 +137,14 @@ void W_Mortar_Grenade_Touch1(void) } else if(WEP_CVAR_PRI(mortar, type) == 1) // bounce { - float r; - r = random() * 6; - if(r < 1) - spamsound(self, CH_SHOTS, W_Sound("grenade_bounce1"), VOL_BASE, ATTN_NORM); - else if(r < 2) - spamsound(self, CH_SHOTS, W_Sound("grenade_bounce2"), VOL_BASE, ATTN_NORM); - else if(r < 3) - spamsound(self, CH_SHOTS, W_Sound("grenade_bounce3"), VOL_BASE, ATTN_NORM); - else if(r < 4) - spamsound(self, CH_SHOTS, W_Sound("grenade_bounce4"), VOL_BASE, ATTN_NORM); - else if(r < 5) - spamsound(self, CH_SHOTS, W_Sound("grenade_bounce5"), VOL_BASE, ATTN_NORM); - else - spamsound(self, CH_SHOTS, W_Sound("grenade_bounce6"), VOL_BASE, ATTN_NORM); + spamsound(self, CH_SHOTS, SND(GRENADE_BOUNCE_RANDOM()), VOL_BASE, ATTN_NORM); Send_Effect(EFFECT_HAGAR_BOUNCE, self.origin, self.velocity, 1); self.projectiledeathtype |= HITTYPE_BOUNCE; self.gl_bouncecnt += 1; } else if(WEP_CVAR_PRI(mortar, type) == 2 && (!other || (other.takedamage != DAMAGE_AIM && other.movetype == MOVETYPE_NONE))) // stick { - spamsound(self, CH_SHOTS, W_Sound("grenade_stick"), VOL_BASE, ATTN_NORM); + spamsound(self, CH_SHOTS, SND(GRENADE_STICK), VOL_BASE, ATTN_NORM); // let it stick whereever it is self.oldvelocity = self.velocity; @@ -182,20 +169,7 @@ void W_Mortar_Grenade_Touch2(void) } else if(WEP_CVAR_SEC(mortar, type) == 1) // bounce { - float r; - r = random() * 6; - if(r < 1) - spamsound(self, CH_SHOTS, W_Sound("grenade_bounce1"), VOL_BASE, ATTN_NORM); - else if(r < 2) - spamsound(self, CH_SHOTS, W_Sound("grenade_bounce2"), VOL_BASE, ATTN_NORM); - else if(r < 3) - spamsound(self, CH_SHOTS, W_Sound("grenade_bounce3"), VOL_BASE, ATTN_NORM); - else if(r < 4) - spamsound(self, CH_SHOTS, W_Sound("grenade_bounce4"), VOL_BASE, ATTN_NORM); - else if(r < 5) - spamsound(self, CH_SHOTS, W_Sound("grenade_bounce5"), VOL_BASE, ATTN_NORM); - else - spamsound(self, CH_SHOTS, W_Sound("grenade_bounce6"), VOL_BASE, ATTN_NORM); + spamsound(self, CH_SHOTS, SND(GRENADE_BOUNCE_RANDOM()), VOL_BASE, ATTN_NORM); Send_Effect(EFFECT_HAGAR_BOUNCE, self.origin, self.velocity, 1); self.projectiledeathtype |= HITTYPE_BOUNCE; self.gl_bouncecnt += 1; @@ -206,7 +180,7 @@ void W_Mortar_Grenade_Touch2(void) } else if(WEP_CVAR_SEC(mortar, type) == 2 && (!other || (other.takedamage != DAMAGE_AIM && other.movetype == MOVETYPE_NONE))) // stick { - spamsound(self, CH_SHOTS, W_Sound("grenade_stick"), VOL_BASE, ATTN_NORM); + spamsound(self, CH_SHOTS, SND(GRENADE_STICK), VOL_BASE, ATTN_NORM); // let it stick whereever it is self.oldvelocity = self.velocity; @@ -228,7 +202,7 @@ void W_Mortar_Attack(void) W_DecreaseAmmo(WEP_CVAR_PRI(mortar, ammo)); - W_SetupShot_ProjectileSize(self, '-3 -3 -3', '3 3 3', false, 4, W_Sound("grenade_fire"), CH_WEAPON_A, WEP_CVAR_PRI(mortar, damage)); + W_SetupShot_ProjectileSize(self, '-3 -3 -3', '3 3 3', false, 4, SND(GRENADE_FIRE), CH_WEAPON_A, WEP_CVAR_PRI(mortar, damage)); w_shotdir = v_forward; // no TrueAim for grenades please Send_Effect(EFFECT_GRENADE_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1); @@ -277,7 +251,7 @@ void W_Mortar_Attack2(void) W_DecreaseAmmo(WEP_CVAR_SEC(mortar, ammo)); - W_SetupShot_ProjectileSize(self, '-3 -3 -3', '3 3 3', false, 4, W_Sound("grenade_fire"), CH_WEAPON_A, WEP_CVAR_SEC(mortar, damage)); + W_SetupShot_ProjectileSize(self, '-3 -3 -3', '3 3 3', false, 4, SND(GRENADE_FIRE), CH_WEAPON_A, WEP_CVAR_SEC(mortar, damage)); w_shotdir = v_forward; // no TrueAim for grenades please Send_Effect(EFFECT_GRENADE_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1); @@ -392,7 +366,7 @@ bool W_Mortar(int req) } } if(nadefound) - sound(self, CH_WEAPON_B, W_Sound("rocket_det"), VOL_BASE, ATTN_NORM); + sound(self, CH_WEAPON_B, SND_ROCKET_DET, VOL_BASE, ATTN_NORM); } else if(weapon_prepareattack(1, WEP_CVAR_SEC(mortar, refire))) { @@ -405,14 +379,6 @@ bool W_Mortar(int req) } case WR_INIT: { - precache_sound(W_Sound("grenade_bounce1")); - precache_sound(W_Sound("grenade_bounce2")); - precache_sound(W_Sound("grenade_bounce3")); - precache_sound(W_Sound("grenade_bounce4")); - precache_sound(W_Sound("grenade_bounce5")); - precache_sound(W_Sound("grenade_bounce6")); - precache_sound(W_Sound("grenade_stick")); - precache_sound(W_Sound("grenade_fire")); MORTAR_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP); return true; } @@ -435,7 +401,7 @@ bool W_Mortar(int req) } case WR_RELOAD: { - W_Reload(min(WEP_CVAR_PRI(mortar, ammo), WEP_CVAR_SEC(mortar, ammo)), W_Sound("reload")); // WEAPONTODO + W_Reload(min(WEP_CVAR_PRI(mortar, ammo), WEP_CVAR_SEC(mortar, ammo)), SND(RELOAD)); // WEAPONTODO return true; } case WR_SUICIDEMESSAGE: @@ -467,13 +433,12 @@ bool W_Mortar(int req) org2 = w_org + w_backoff * 12; pointparticles(particleeffectnum(EFFECT_GRENADE_EXPLODE), org2, '0 0 0', 1); if(!w_issilent) - sound(self, CH_SHOTS, W_Sound("grenade_impact"), VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, SND_GRENADE_IMPACT, VOL_BASE, ATTN_NORM); return true; } case WR_INIT: { - precache_sound(W_Sound("grenade_impact")); return true; } case WR_ZOOMRETICLE: diff --git a/qcsrc/common/weapons/weapon/porto.qc b/qcsrc/common/weapons/weapon/porto.qc index 58c28716ae..66cdb21228 100644 --- a/qcsrc/common/weapons/weapon/porto.qc +++ b/qcsrc/common/weapons/weapon/porto.qc @@ -41,7 +41,7 @@ PORTO_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP) #ifdef SVQC #include "../../triggers/trigger/jumppads.qh" -void spawnfunc_weapon_porto(void) { weapon_defaultspawnfunc(WEP_PORTO.m_id); } +spawnfunc(weapon_porto) { weapon_defaultspawnfunc(WEP_PORTO.m_id); } void W_Porto_Success(void) {SELFPARAM(); @@ -132,19 +132,19 @@ void W_Porto_Touch(void) if(self.realowner.playerid != self.playerid) { - sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS, SND_PORTO_UNSUPPORTED, VOL_BASE, ATTEN_NORM); remove(self); } else if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_SLICK || trace_dphitcontents & DPCONTENTS_PLAYERCLIP) { - spamsound(self, CH_SHOTS, "porto/bounce.wav", VOL_BASE, ATTEN_NORM); + spamsound(self, CH_SHOTS, SND(PORTO_BOUNCE), VOL_BASE, ATTEN_NORM); // just reflect self.right_vector = self.right_vector - 2 * trace_plane_normal * (self.right_vector * trace_plane_normal); self.angles = vectoangles(self.velocity - 2 * trace_plane_normal * (self.velocity * trace_plane_normal)); } else if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT) { - sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS, SND_PORTO_UNSUPPORTED, VOL_BASE, ATTEN_NORM); W_Porto_Fail(0); if(self.cnt < 0) Portal_ClearAll_PortalsOnly(self.realowner); @@ -154,14 +154,14 @@ void W_Porto_Touch(void) // in-portal only if(Portal_SpawnInPortalAtTrace(self.realowner, self.right_vector, self.portal_id)) { - sound(self, CH_SHOTS, "porto/create.wav", VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS, SND_PORTO_CREATE, VOL_BASE, ATTEN_NORM); trace_plane_normal = norm; Send_Notification(NOTIF_ONE, self.realowner, MSG_CENTER, CENTER_PORTO_CREATED_IN); W_Porto_Success(); } else { - sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS, SND_PORTO_UNSUPPORTED, VOL_BASE, ATTEN_NORM); trace_plane_normal = norm; W_Porto_Fail(0); } @@ -171,14 +171,14 @@ void W_Porto_Touch(void) // out-portal only if(Portal_SpawnOutPortalAtTrace(self.realowner, self.right_vector, self.portal_id)) { - sound(self, CH_SHOTS, "porto/create.wav", VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS, SND_PORTO_CREATE, VOL_BASE, ATTEN_NORM); trace_plane_normal = norm; Send_Notification(NOTIF_ONE, self.realowner, MSG_CENTER, CENTER_PORTO_CREATED_OUT); W_Porto_Success(); } else { - sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS, SND_PORTO_UNSUPPORTED, VOL_BASE, ATTEN_NORM); trace_plane_normal = norm; W_Porto_Fail(0); } @@ -188,7 +188,7 @@ void W_Porto_Touch(void) self.effects += EF_BLUE - EF_RED; if(Portal_SpawnInPortalAtTrace(self.realowner, self.right_vector, self.portal_id)) { - sound(self, CH_SHOTS, "porto/create.wav", VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS, SND_PORTO_CREATE, VOL_BASE, ATTEN_NORM); trace_plane_normal = norm; Send_Notification(NOTIF_ONE, self.realowner, MSG_CENTER, CENTER_PORTO_CREATED_IN); self.right_vector = self.right_vector - 2 * trace_plane_normal * (self.right_vector * norm); @@ -197,7 +197,7 @@ void W_Porto_Touch(void) } else { - sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS, SND_PORTO_UNSUPPORTED, VOL_BASE, ATTEN_NORM); trace_plane_normal = norm; Portal_ClearAll_PortalsOnly(self.realowner); W_Porto_Fail(0); @@ -209,21 +209,21 @@ void W_Porto_Touch(void) { if(Portal_SpawnOutPortalAtTrace(self.realowner, self.right_vector, self.portal_id)) { - sound(self, CH_SHOTS, "porto/create.wav", VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS, SND_PORTO_CREATE, VOL_BASE, ATTEN_NORM); trace_plane_normal = norm; Send_Notification(NOTIF_ONE, self.realowner, MSG_CENTER, CENTER_PORTO_CREATED_OUT); W_Porto_Success(); } else { - sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS, SND_PORTO_UNSUPPORTED, VOL_BASE, ATTEN_NORM); Portal_ClearAll_PortalsOnly(self.realowner); W_Porto_Fail(0); } } else { - sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS, SND_PORTO_UNSUPPORTED, VOL_BASE, ATTEN_NORM); Portal_ClearAll_PortalsOnly(self.realowner); W_Porto_Fail(0); } @@ -234,7 +234,7 @@ void W_Porto_Attack(float type) {SELFPARAM(); entity gren; - W_SetupShot(self, false, 4, "porto/fire.wav", CH_WEAPON_A, 0); + W_SetupShot(self, false, 4, SND(PORTO_FIRE), CH_WEAPON_A, 0); // always shoot from the eye w_shotdir = v_forward; w_shotorg = self.origin + self.view_ofs + ((w_shotorg - self.origin - self.view_ofs) * v_forward) * v_forward; @@ -373,12 +373,6 @@ bool W_Porto(int req) } case WR_INIT: { - precache_sound("porto/bounce.wav"); - precache_sound("porto/create.wav"); - precache_sound("porto/expire.wav"); - precache_sound("porto/explode.wav"); - precache_sound("porto/fire.wav"); - precache_sound("porto/unsupported.wav"); PORTO_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP); return true; } diff --git a/qcsrc/common/weapons/weapon/rifle.qc b/qcsrc/common/weapons/weapon/rifle.qc index 66be38175f..c156d84b46 100644 --- a/qcsrc/common/weapons/weapon/rifle.qc +++ b/qcsrc/common/weapons/weapon/rifle.qc @@ -47,9 +47,9 @@ RIFLE_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP) #endif #ifdef IMPLEMENTATION #ifdef SVQC -void spawnfunc_weapon_rifle(void) { weapon_defaultspawnfunc(WEP_RIFLE.m_id); } -void spawnfunc_weapon_campingrifle(void) { spawnfunc_weapon_rifle(); } -void spawnfunc_weapon_sniperrifle(void) { spawnfunc_weapon_rifle(); } +spawnfunc(weapon_rifle) { weapon_defaultspawnfunc(WEP_RIFLE.m_id); } +spawnfunc(weapon_campingrifle) { spawnfunc_weapon_rifle(this); } +spawnfunc(weapon_sniperrifle) { spawnfunc_weapon_rifle(this); } void W_Rifle_FireBullet(float pSpread, float pDamage, float pForce, float pSolidPenetration, float pAmmo, int deathtype, float pTracer, float pShots, string pSound) {SELFPARAM(); @@ -76,12 +76,12 @@ void W_Rifle_FireBullet(float pSpread, float pDamage, float pForce, float pSolid void W_Rifle_Attack(void) { - W_Rifle_FireBullet(WEP_CVAR_PRI(rifle, spread), WEP_CVAR_PRI(rifle, damage), WEP_CVAR_PRI(rifle, force), WEP_CVAR_PRI(rifle, solidpenetration), WEP_CVAR_PRI(rifle, ammo), WEP_RIFLE.m_id, WEP_CVAR_PRI(rifle, tracer), WEP_CVAR_PRI(rifle, shots), W_Sound("campingrifle_fire")); + W_Rifle_FireBullet(WEP_CVAR_PRI(rifle, spread), WEP_CVAR_PRI(rifle, damage), WEP_CVAR_PRI(rifle, force), WEP_CVAR_PRI(rifle, solidpenetration), WEP_CVAR_PRI(rifle, ammo), WEP_RIFLE.m_id, WEP_CVAR_PRI(rifle, tracer), WEP_CVAR_PRI(rifle, shots), SND(CAMPINGRIFLE_FIRE)); } void W_Rifle_Attack2(void) { - W_Rifle_FireBullet(WEP_CVAR_SEC(rifle, spread), WEP_CVAR_SEC(rifle, damage), WEP_CVAR_SEC(rifle, force), WEP_CVAR_SEC(rifle, solidpenetration), WEP_CVAR_SEC(rifle, ammo), WEP_RIFLE.m_id | HITTYPE_SECONDARY, WEP_CVAR_SEC(rifle, tracer), WEP_CVAR_SEC(rifle, shots), W_Sound("campingrifle_fire2")); + W_Rifle_FireBullet(WEP_CVAR_SEC(rifle, spread), WEP_CVAR_SEC(rifle, damage), WEP_CVAR_SEC(rifle, force), WEP_CVAR_SEC(rifle, solidpenetration), WEP_CVAR_SEC(rifle, ammo), WEP_RIFLE.m_id | HITTYPE_SECONDARY, WEP_CVAR_SEC(rifle, tracer), WEP_CVAR_SEC(rifle, shots), SND(CAMPINGRIFLE_FIRE2)); } .void(void) rifle_bullethail_attackfunc; @@ -204,8 +204,6 @@ bool W_Rifle(int req) } case WR_INIT: { - precache_sound(W_Sound("campingrifle_fire")); - precache_sound(W_Sound("campingrifle_fire2")); RIFLE_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP); return true; } @@ -233,7 +231,7 @@ bool W_Rifle(int req) } case WR_RELOAD: { - W_Reload(min(WEP_CVAR_PRI(rifle, ammo), WEP_CVAR_SEC(rifle, ammo)), W_Sound("reload")); + W_Reload(min(WEP_CVAR_PRI(rifle, ammo), WEP_CVAR_SEC(rifle, ammo)), SND(RELOAD)); return true; } case WR_SUICIDEMESSAGE: @@ -274,20 +272,17 @@ bool W_Rifle(int req) if(!w_issilent) { if(w_random < 0.2) - sound(self, CH_SHOTS, W_Sound("ric1"), VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, SND_RIC1, VOL_BASE, ATTN_NORM); else if(w_random < 0.4) - sound(self, CH_SHOTS, W_Sound("ric2"), VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, SND_RIC2, VOL_BASE, ATTN_NORM); else if(w_random < 0.5) - sound(self, CH_SHOTS, W_Sound("ric3"), VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, SND_RIC3, VOL_BASE, ATTN_NORM); } return true; } case WR_INIT: { - precache_sound(W_Sound("ric1")); - precache_sound(W_Sound("ric2")); - precache_sound(W_Sound("ric3")); if(autocvar_cl_reticle && autocvar_cl_reticle_weapon) { precache_pic("gfx/reticle_nex"); diff --git a/qcsrc/common/weapons/weapon/rpc.qc b/qcsrc/common/weapons/weapon/rpc.qc index 51c0404405..4286ce4337 100644 --- a/qcsrc/common/weapons/weapon/rpc.qc +++ b/qcsrc/common/weapons/weapon/rpc.qc @@ -45,7 +45,7 @@ RPC_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP) #endif #ifdef IMPLEMENTATION #ifdef SVQC -void spawnfunc_weapon_rpc() { weapon_defaultspawnfunc(WEP_RPC.m_id); } +spawnfunc(weapon_rpc) { weapon_defaultspawnfunc(WEP_RPC.m_id); } void W_RocketPropelledChainsaw_Explode() {SELFPARAM(); @@ -108,7 +108,7 @@ void W_RocketPropelledChainsaw_Attack (void) entity flash = spawn (); W_DecreaseAmmo(WEP_CVAR(rpc, ammo)); - W_SetupShot_ProjectileSize (self, '-3 -3 -3', '3 3 3', false, 5, W_Sound("rocket_fire"), CH_WEAPON_A, WEP_CVAR(rpc, damage)); + W_SetupShot_ProjectileSize (self, '-3 -3 -3', '3 3 3', false, 5, SND(ROCKET_FIRE), CH_WEAPON_A, WEP_CVAR(rpc, damage)); Send_Effect(EFFECT_ROCKET_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1); PROJECTILE_MAKETRIGGER(missile); @@ -182,7 +182,6 @@ bool W_RocketPropelledChainsaw(int req) } case WR_INIT: { - precache_sound (W_Sound("rocket_fire")); RPC_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP); return true; } @@ -203,7 +202,7 @@ bool W_RocketPropelledChainsaw(int req) } case WR_RELOAD: { - W_Reload(WEP_CVAR(rpc, ammo), W_Sound("reload")); + W_Reload(WEP_CVAR(rpc, ammo), SND(RELOAD)); return true; } case WR_SUICIDEMESSAGE: @@ -239,13 +238,12 @@ bool W_RocketPropelledChainsaw(int req) org2 = w_org + w_backoff * 12; pointparticles(particleeffectnum(EFFECT_ROCKET_EXPLODE), org2, '0 0 0', 1); if(!w_issilent) - sound(self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM); return true; } case WR_INIT: { - precache_sound(W_Sound("rocket_impact")); return true; } case WR_ZOOMRETICLE: diff --git a/qcsrc/common/weapons/weapon/seeker.qc b/qcsrc/common/weapons/weapon/seeker.qc index 0687437afb..1686ff5290 100644 --- a/qcsrc/common/weapons/weapon/seeker.qc +++ b/qcsrc/common/weapons/weapon/seeker.qc @@ -84,7 +84,7 @@ SEEKER_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP) #endif #ifdef IMPLEMENTATION #ifdef SVQC -void spawnfunc_weapon_seeker(void) { weapon_defaultspawnfunc(WEP_SEEKER.m_id); } +spawnfunc(weapon_seeker) { weapon_defaultspawnfunc(WEP_SEEKER.m_id); } // ============================ // Begin: Missile functions, these are general functions to be manipulated by other code @@ -250,7 +250,7 @@ void W_Seeker_Fire_Missile(vector f_diff, entity m_target) W_DecreaseAmmo(WEP_CVAR(seeker, missile_ammo)); makevectors(self.v_angle); - W_SetupShot_ProjectileSize(self, '-2 -2 -2', '2 2 2', false, 2, W_Sound("seeker_fire"), CH_WEAPON_A, 0); + W_SetupShot_ProjectileSize(self, '-2 -2 -2', '2 2 2', false, 2, SND(SEEKER_FIRE), CH_WEAPON_A, 0); w_shotorg += f_diff; Send_Effect(EFFECT_SEEKER_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1); @@ -341,7 +341,7 @@ void W_Seeker_Fire_Flac(void) f_diff = '+1.25 +3.75 0'; break; } - W_SetupShot_ProjectileSize(self, '-2 -2 -2', '2 2 2', false, 2, W_Sound("flac_fire"), CH_WEAPON_A, WEP_CVAR(seeker, flac_damage)); + W_SetupShot_ProjectileSize(self, '-2 -2 -2', '2 2 2', false, 2, SND(FLAC_FIRE), CH_WEAPON_A, WEP_CVAR(seeker, flac_damage)); w_shotorg += f_diff; Send_Effect(EFFECT_HAGAR_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1); @@ -559,7 +559,7 @@ void W_Seeker_Fire_Tag(void) entity missile; W_DecreaseAmmo(WEP_CVAR(seeker, tag_ammo)); - W_SetupShot_ProjectileSize(self, '-2 -2 -2', '2 2 2', false, 2, W_Sound("tag_fire"), CH_WEAPON_A, WEP_CVAR(seeker, missile_damage) * WEP_CVAR(seeker, missile_count)); + W_SetupShot_ProjectileSize(self, '-2 -2 -2', '2 2 2', false, 2, SND(TAG_FIRE), CH_WEAPON_A, WEP_CVAR(seeker, missile_damage) * WEP_CVAR(seeker, missile_count)); missile = spawn(); missile.owner = missile.realowner = self; @@ -662,9 +662,6 @@ bool W_Seeker(int req) } case WR_INIT: { - precache_sound(W_Sound("tag_fire")); - precache_sound(W_Sound("flac_fire")); - precache_sound(W_Sound("seeker_fire")); SEEKER_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP); return true; } @@ -703,7 +700,7 @@ bool W_Seeker(int req) } case WR_RELOAD: { - W_Reload(min(WEP_CVAR(seeker, missile_ammo), WEP_CVAR(seeker, tag_ammo)), W_Sound("reload")); + W_Reload(min(WEP_CVAR(seeker, missile_ammo), WEP_CVAR(seeker, tag_ammo)), SND(RELOAD)); return true; } case WR_SUICIDEMESSAGE: @@ -735,7 +732,7 @@ bool W_Seeker(int req) if(w_deathtype & HITTYPE_SECONDARY) { if(!w_issilent) - sound(self, CH_SHOTS, W_Sound("tag_impact"), 1, ATTEN_NORM); + sound(self, CH_SHOTS, SND_TAG_IMPACT, 1, ATTEN_NORM); } else { @@ -743,11 +740,11 @@ bool W_Seeker(int req) if(!w_issilent) { if(w_random<0.15) - sound(self, CH_SHOTS, W_Sound("tagexp1"), 1, ATTEN_NORM); + sound(self, CH_SHOTS, SND_TAGEXP1, 1, ATTEN_NORM); else if(w_random<0.7) - sound(self, CH_SHOTS, W_Sound("tagexp2"), 1, ATTEN_NORM); + sound(self, CH_SHOTS, SND_TAGEXP2, 1, ATTEN_NORM); else - sound(self, CH_SHOTS, W_Sound("tagexp3"), 1, ATTEN_NORM); + sound(self, CH_SHOTS, SND_TAGEXP3, 1, ATTEN_NORM); } } } @@ -757,24 +754,17 @@ bool W_Seeker(int req) if(!w_issilent) { if(w_random<0.15) - sound(self, CH_SHOTS, W_Sound("seekerexp1"), 1, ATTEN_NORM); + sound(self, CH_SHOTS, SND_SEEKEREXP1, 1, ATTEN_NORM); else if(w_random<0.7) - sound(self, CH_SHOTS, W_Sound("seekerexp2"), 1, ATTEN_NORM); + sound(self, CH_SHOTS, SND_SEEKEREXP2, 1, ATTEN_NORM); else - sound(self, CH_SHOTS, W_Sound("seekerexp3"), 1, ATTEN_NORM); + sound(self, CH_SHOTS, SND_SEEKEREXP3, 1, ATTEN_NORM); } } return true; } case WR_INIT: { - precache_sound(W_Sound("seekerexp1")); - precache_sound(W_Sound("seekerexp2")); - precache_sound(W_Sound("seekerexp3")); - precache_sound(W_Sound("tagexp1")); - precache_sound(W_Sound("tagexp2")); - precache_sound(W_Sound("tagexp3")); - precache_sound(W_Sound("tag_impact")); return true; } case WR_ZOOMRETICLE: diff --git a/qcsrc/common/weapons/weapon/shockwave.qc b/qcsrc/common/weapons/weapon/shockwave.qc index b56a41fbbf..a067110b72 100644 --- a/qcsrc/common/weapons/weapon/shockwave.qc +++ b/qcsrc/common/weapons/weapon/shockwave.qc @@ -82,8 +82,8 @@ void Net_ReadShockwaveParticle(void); #endif #ifdef IMPLEMENTATION #ifdef SVQC -void spawnfunc_weapon_shockwave(void) -{SELFPARAM(); +spawnfunc(weapon_shockwave) +{ //if(autocvar_sv_q3acompat_machineshockwaveswap) // WEAPONTODO if(autocvar_sv_q3acompat_machineshotgunswap) if(self.classname != "droppedweapon") @@ -229,7 +229,7 @@ void W_Shockwave_Melee_Think(void) void W_Shockwave_Melee(void) {SELFPARAM(); - sound(self, CH_WEAPON_A, W_Sound("shotgun_melee"), VOL_BASE, ATTN_NORM); + sound(self, CH_WEAPON_A, SND_SHOTGUN_MELEE, VOL_BASE, ATTN_NORM); weapon_thinkf(WFRAME_FIRE2, WEP_CVAR(shockwave, melee_animtime), w_ready); entity meleetemp; @@ -360,7 +360,7 @@ void W_Shockwave_Attack(void) float i, queue = 0; // set up the shot direction - W_SetupShot(self, false, 3, W_Sound("lasergun_fire"), CH_WEAPON_B, WEP_CVAR(shockwave, blast_damage)); + W_SetupShot(self, false, 3, SND(LASERGUN_FIRE), CH_WEAPON_B, WEP_CVAR(shockwave, blast_damage)); vector attack_endpos = (w_shotorg + (w_shotdir * WEP_CVAR(shockwave, blast_distance))); WarpZone_TraceLine(w_shotorg, attack_endpos, MOVE_NOMONSTERS, self); vector attack_hitpos = trace_endpos; @@ -708,9 +708,6 @@ bool W_Shockwave(int req) } case WR_INIT: { - precache_sound("misc/itempickup.wav"); - precache_sound(W_Sound("lasergun_fire")); - precache_sound(W_Sound("shotgun_melee")); SHOCKWAVE_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP); return true; } @@ -875,9 +872,6 @@ bool W_Shockwave(int req) } case WR_INIT: { - //precache_sound(W_Sound("ric1")); - //precache_sound(W_Sound("ric2")); - //precache_sound(W_Sound("ric3")); return false; } case WR_ZOOMRETICLE: diff --git a/qcsrc/common/weapons/weapon/shotgun.qc b/qcsrc/common/weapons/weapon/shotgun.qc index 814d573036..05f4cf6ab0 100644 --- a/qcsrc/common/weapons/weapon/shotgun.qc +++ b/qcsrc/common/weapons/weapon/shotgun.qc @@ -52,7 +52,7 @@ SHOTGUN_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP) #endif #ifdef IMPLEMENTATION #ifdef SVQC -void spawnfunc_weapon_shotgun(void) { weapon_defaultspawnfunc(WEP_SHOTGUN.m_id); } +spawnfunc(weapon_shotgun) { weapon_defaultspawnfunc(WEP_SHOTGUN.m_id); } void W_Shotgun_Attack(float isprimary) {SELFPARAM(); @@ -61,7 +61,7 @@ void W_Shotgun_Attack(float isprimary) W_DecreaseAmmo(WEP_CVAR_PRI(shotgun, ammo)); - W_SetupShot(self, true, 5, W_Sound("shotgun_fire"), ((isprimary) ? CH_WEAPON_A : CH_WEAPON_SINGLE), WEP_CVAR_PRI(shotgun, damage) * WEP_CVAR_PRI(shotgun, bullets)); + W_SetupShot(self, true, 5, SND(SHOTGUN_FIRE), ((isprimary) ? CH_WEAPON_A : CH_WEAPON_SINGLE), WEP_CVAR_PRI(shotgun, damage) * WEP_CVAR_PRI(shotgun, bullets)); for(sc = 0;sc < WEP_CVAR_PRI(shotgun, bullets);sc = sc + 1) fireBullet(w_shotorg, w_shotdir, WEP_CVAR_PRI(shotgun, spread), WEP_CVAR_PRI(shotgun, solidpenetration), WEP_CVAR_PRI(shotgun, damage), WEP_CVAR_PRI(shotgun, force), WEP_SHOTGUN.m_id, 0); @@ -181,7 +181,7 @@ void W_Shotgun_Melee_Think(void) void W_Shotgun_Attack2(void) {SELFPARAM(); - sound(self, CH_WEAPON_A, W_Sound("shotgun_melee"), VOL_BASE, ATTEN_NORM); + sound(self, CH_WEAPON_A, SND_SHOTGUN_MELEE, VOL_BASE, ATTEN_NORM); weapon_thinkf(WFRAME_FIRE2, WEP_CVAR_SEC(shotgun, animtime), w_ready); entity meleetemp; @@ -203,7 +203,7 @@ void W_Shotgun_Attack3_Frame2() return; } - sound(self, CH_WEAPON_SINGLE, "misc/null.wav", VOL_BASE, ATTN_NORM); // kill previous sound + sound(self, CH_WEAPON_SINGLE, SND_Null, VOL_BASE, ATTN_NORM); // kill previous sound W_Shotgun_Attack(true); // actually is secondary, but we trick the last shot into playing full reload sound weapon_thinkf(WFRAME_FIRE1, WEP_CVAR_SEC(shotgun, alt_animtime), w_ready); } @@ -286,9 +286,6 @@ float W_Shotgun(float req) } case WR_INIT: { - precache_sound("misc/itempickup.wav"); - precache_sound(W_Sound("shotgun_fire")); - precache_sound(W_Sound("shotgun_melee")); SHOTGUN_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP); return true; } @@ -327,7 +324,7 @@ float W_Shotgun(float req) } case WR_RELOAD: { - W_Reload(WEP_CVAR_PRI(shotgun, ammo), W_Sound("reload")); // WEAPONTODO + W_Reload(WEP_CVAR_PRI(shotgun, ammo), SND(RELOAD)); // WEAPONTODO return true; } case WR_SUICIDEMESSAGE: @@ -359,11 +356,11 @@ float W_Shotgun(float req) if(!w_issilent && time - self.prevric > 0.25) { if(w_random < 0.0165) - sound(self, CH_SHOTS, W_Sound("ric1"), VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS, SND_RIC1, VOL_BASE, ATTEN_NORM); else if(w_random < 0.033) - sound(self, CH_SHOTS, W_Sound("ric2"), VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS, SND_RIC2, VOL_BASE, ATTEN_NORM); else if(w_random < 0.05) - sound(self, CH_SHOTS, W_Sound("ric3"), VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS, SND_RIC3, VOL_BASE, ATTEN_NORM); self.prevric = time; } @@ -371,9 +368,6 @@ float W_Shotgun(float req) } case WR_INIT: { - precache_sound(W_Sound("ric1")); - precache_sound(W_Sound("ric2")); - precache_sound(W_Sound("ric3")); return true; } case WR_ZOOMRETICLE: diff --git a/qcsrc/common/weapons/weapon/tuba.qc b/qcsrc/common/weapons/weapon/tuba.qc index 20100bf39f..6d1cf3a6f0 100644 --- a/qcsrc/common/weapons/weapon/tuba.qc +++ b/qcsrc/common/weapons/weapon/tuba.qc @@ -54,7 +54,7 @@ float W_Tuba_MarkClientOnlyFieldsAsUsed() { #endif #ifdef IMPLEMENTATION #ifdef SVQC -void spawnfunc_weapon_tuba(void) { weapon_defaultspawnfunc(WEP_TUBA.m_id); } +spawnfunc(weapon_tuba) { weapon_defaultspawnfunc(WEP_TUBA.m_id); } bool W_Tuba_HasPlayed(entity pl, string melody, int instrument, bool ignorepitch, float mintempo, float maxtempo) { diff --git a/qcsrc/common/weapons/weapon/vaporizer.qc b/qcsrc/common/weapons/weapon/vaporizer.qc index 13c3fef8c6..8cdeb61acc 100644 --- a/qcsrc/common/weapons/weapon/vaporizer.qc +++ b/qcsrc/common/weapons/weapon/vaporizer.qc @@ -55,8 +55,8 @@ VAPORIZER_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP) #endif #ifdef IMPLEMENTATION #ifdef SVQC -void spawnfunc_weapon_vaporizer(void) { weapon_defaultspawnfunc(WEP_VAPORIZER.m_id); } -void spawnfunc_weapon_minstanex(void) { spawnfunc_weapon_vaporizer(); } +spawnfunc(weapon_vaporizer) { weapon_defaultspawnfunc(WEP_VAPORIZER.m_id); } +spawnfunc(weapon_minstanex) { spawnfunc_weapon_vaporizer(this); } void W_RocketMinsta_Explosion(vector loc) {SELFPARAM(); @@ -77,7 +77,7 @@ void W_Vaporizer_Attack(void) W_SetupShot(self, true, 0, "", CH_WEAPON_A, vaporizer_damage); // handle sound separately so we can change the volume // added bonus: no longer plays the strength sound (strength gives no bonus to instakill anyway) - sound (self, CH_WEAPON_A, W_Sound("minstanexfire"), VOL_BASE * 0.8, ATTEN_NORM); + sound (self, CH_WEAPON_A, SND_MINSTANEXFIRE, VOL_BASE * 0.8, ATTEN_NORM); yoda = 0; damage_goodhits = 0; @@ -96,41 +96,8 @@ void W_Vaporizer_Attack(void) Send_Effect(EFFECT_VORTEX_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1); // teamcolor / hit beam effect - vector v; - v = WarpZone_UnTransformOrigin(WarpZone_trace_transform, trace_endpos); - switch(self.team) - { - case NUM_TEAM_1: // Red - if(damage_goodhits) - Send_Effect(EFFECT_VAPORIZER_RED_HIT, w_shotorg, v, 1); - else - Send_Effect(EFFECT_VAPORIZER_RED, w_shotorg, v, 1); - break; - case NUM_TEAM_2: // Blue - if(damage_goodhits) - Send_Effect(EFFECT_VAPORIZER_BLUE_HIT, w_shotorg, v, 1); - else - Send_Effect(EFFECT_VAPORIZER_BLUE, w_shotorg, v, 1); - break; - case NUM_TEAM_3: // Yellow - if(damage_goodhits) - Send_Effect(EFFECT_VAPORIZER_YELLOW_HIT, w_shotorg, v, 1); - else - Send_Effect(EFFECT_VAPORIZER_YELLOW, w_shotorg, v, 1); - break; - case NUM_TEAM_4: // Pink - if(damage_goodhits) - Send_Effect(EFFECT_VAPORIZER_PINK_HIT, w_shotorg, v, 1); - else - Send_Effect(EFFECT_VAPORIZER_PINK, w_shotorg, v, 1); - break; - default: - if(damage_goodhits) - Send_Effect_("TE_TEI_G3_HIT", w_shotorg, v, 1); - else - Send_Effect_("TE_TEI_G3", w_shotorg, v, 1); - break; - } + vector v = WarpZone_UnTransformOrigin(WarpZone_trace_transform, trace_endpos); + Send_Effect((damage_goodhits ? EFFECT_VAPORIZER_HIT(self.team) : EFFECT_VAPORIZER(self.team)), w_shotorg, v, 1); if(autocvar_g_rm) if(!(trace_dphitq3surfaceflags & (Q3SURFACEFLAG_SKY | Q3SURFACEFLAG_NOIMPACT))) @@ -174,7 +141,7 @@ void W_RocketMinsta_Attack2(void) float w = self.weapon; self.weapon = WEP_ELECTRO.m_id; - W_SetupShot_ProjectileSize (self, '0 0 -3', '0 0 -3', false, 2, W_Sound("crylink_fire"), CH_WEAPON_A, autocvar_g_rm_laser_damage); + W_SetupShot_ProjectileSize (self, '0 0 -3', '0 0 -3', false, 2, SND(CRYLINK_FIRE), CH_WEAPON_A, autocvar_g_rm_laser_damage); self.weapon = w; Send_Effect(EFFECT_ELECTRO_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1); @@ -227,7 +194,7 @@ void W_RocketMinsta_Attack3 (void) int w = self.weapon; self.weapon = WEP_ELECTRO.m_id; - W_SetupShot_ProjectileSize (self, '0 0 -3', '0 0 -3', false, 2, W_Sound("electro_fire2"), CH_WEAPON_A, autocvar_g_rm_laser_damage); + W_SetupShot_ProjectileSize (self, '0 0 -3', '0 0 -3', false, 2, SND(ELECTRO_FIRE2), CH_WEAPON_A, autocvar_g_rm_laser_damage); self.weapon = w; Send_Effect(EFFECT_ELECTRO_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1); @@ -362,10 +329,6 @@ float W_Vaporizer(float req) } case WR_INIT: { - precache_sound(W_Sound("minstanexfire")); - precache_sound(W_Sound("nexwhoosh1")); - precache_sound(W_Sound("nexwhoosh2")); - precache_sound(W_Sound("nexwhoosh3")); //W_Blaster(WR_INIT); // Samual: Is this really the proper thing to do? Didn't we already run this previously? VAPORIZER_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP); return true; @@ -408,7 +371,7 @@ float W_Vaporizer(float req) else used_ammo = vaporizer_ammo; - W_Reload(used_ammo, W_Sound("reload")); + W_Reload(used_ammo, SND(RELOAD)); return true; } case WR_SUICIDEMESSAGE: @@ -434,19 +397,17 @@ float W_Vaporizer(float req) if(w_deathtype & HITTYPE_SECONDARY) { pointparticles(particleeffectnum(EFFECT_BLASTER_IMPACT), org2, w_backoff * 1000, 1); - if(!w_issilent) { sound(self, CH_SHOTS, W_Sound("laserimpact"), VOL_BASE, ATTN_NORM); } + if(!w_issilent) { sound(self, CH_SHOTS, SND_LASERIMPACT, VOL_BASE, ATTN_NORM); } } else { pointparticles(particleeffectnum(EFFECT_VORTEX_IMPACT), org2, '0 0 0', 1); - if(!w_issilent) { sound(self, CH_SHOTS, W_Sound("neximpact"), VOL_BASE, ATTN_NORM); } + if(!w_issilent) { sound(self, CH_SHOTS, SND_NEXIMPACT, VOL_BASE, ATTN_NORM); } } return true; } case WR_INIT: { - precache_sound(W_Sound("laserimpact")); - precache_sound(W_Sound("neximpact")); if(autocvar_cl_reticle && autocvar_cl_reticle_weapon) { precache_pic("gfx/reticle_nex"); diff --git a/qcsrc/common/weapons/weapon/vortex.qc b/qcsrc/common/weapons/weapon/vortex.qc index 2e515137c5..8238ac22c8 100644 --- a/qcsrc/common/weapons/weapon/vortex.qc +++ b/qcsrc/common/weapons/weapon/vortex.qc @@ -59,8 +59,8 @@ VORTEX_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP) #endif #ifdef IMPLEMENTATION #ifdef SVQC -void spawnfunc_weapon_vortex(void) { weapon_defaultspawnfunc(WEP_VORTEX.m_id); } -void spawnfunc_weapon_nex(void) { spawnfunc_weapon_vortex(); } +spawnfunc(weapon_vortex) { weapon_defaultspawnfunc(WEP_VORTEX.m_id); } +spawnfunc(weapon_nex) { spawnfunc_weapon_vortex(this); } void SendCSQCVortexBeamParticle(float charge) { vector v; @@ -103,10 +103,10 @@ void W_Vortex_Attack(float issecondary) mydmg *= charge; myforce *= charge; - W_SetupShot(self, true, 5, W_Sound("nexfire"), CH_WEAPON_A, mydmg); + W_SetupShot(self, true, 5, SND(NEXFIRE), CH_WEAPON_A, mydmg); if(charge > WEP_CVAR(vortex, charge_animlimit) && WEP_CVAR(vortex, charge_animlimit)) // if the Vortex is overcharged, we play an extra sound { - sound(self, CH_WEAPON_B, W_Sound("nexcharge"), VOL_BASE * (charge - 0.5 * WEP_CVAR(vortex, charge_animlimit)) / (1 - 0.5 * WEP_CVAR(vortex, charge_animlimit)), ATTN_NORM); + sound(self, CH_WEAPON_B, SND_NEXCHARGE, VOL_BASE * (charge - 0.5 * WEP_CVAR(vortex, charge_animlimit)) / (1 - 0.5 * WEP_CVAR(vortex, charge_animlimit)), ATTN_NORM); } yoda = 0; @@ -129,7 +129,7 @@ void W_Vortex_Attack(float issecondary) W_DecreaseAmmo(myammo); } -void spawnfunc_weapon_vortex(void); // defined in t_items.qc +spawnfunc(weapon_vortex); // defined in t_items.qc .float vortex_chargepool_pauseregen_finished; bool W_Vortex(int req) @@ -253,11 +253,6 @@ bool W_Vortex(int req) } case WR_INIT: { - precache_sound(W_Sound("nexfire")); - precache_sound(W_Sound("nexcharge")); - precache_sound(W_Sound("nexwhoosh1")); - precache_sound(W_Sound("nexwhoosh2")); - precache_sound(W_Sound("nexwhoosh3")); VORTEX_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP); return true; } @@ -298,7 +293,7 @@ bool W_Vortex(int req) } case WR_RELOAD: { - W_Reload(min(WEP_CVAR_PRI(vortex, ammo), WEP_CVAR_SEC(vortex, ammo)), W_Sound("reload")); + W_Reload(min(WEP_CVAR_PRI(vortex, ammo), WEP_CVAR_SEC(vortex, ammo)), SND(RELOAD)); return true; } case WR_SUICIDEMESSAGE: @@ -325,13 +320,12 @@ bool W_Vortex(int req) org2 = w_org + w_backoff * 6; pointparticles(particleeffectnum(EFFECT_VORTEX_IMPACT), org2, '0 0 0', 1); if(!w_issilent) - sound(self, CH_SHOTS, W_Sound("neximpact"), VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, SND_NEXIMPACT, VOL_BASE, ATTN_NORM); return true; } case WR_INIT: { - precache_sound(W_Sound("neximpact")); if(autocvar_cl_reticle && autocvar_cl_reticle_weapon) { precache_pic("gfx/reticle_nex"); diff --git a/qcsrc/lib/_all.inc b/qcsrc/lib/_all.inc index 668e7decd6..e7ee2746f5 100644 --- a/qcsrc/lib/_all.inc +++ b/qcsrc/lib/_all.inc @@ -7,6 +7,7 @@ #include "cvar.qh" #include "defer.qh" #include "draw.qh" +#include "file.qh" #include "i18n.qh" #include "lazy.qh" #include "log.qh" @@ -21,6 +22,7 @@ #include "registry.qh" #include "replicate.qh" #include "sortlist.qc" +#include "spawnfunc.qh" #include "static.qh" #include "string.qh" #include "struct.qh" diff --git a/qcsrc/lib/file.qh b/qcsrc/lib/file.qh new file mode 100644 index 0000000000..f732bfe2c1 --- /dev/null +++ b/qcsrc/lib/file.qh @@ -0,0 +1,13 @@ +#ifndef FILE_H +#define FILE_H + +bool fexists(string f) +{ + int fh = fopen(f, FILE_READ); + if (fh < 0) + return false; + fclose(fh); + return true; +} + +#endif diff --git a/qcsrc/lib/log.qh b/qcsrc/lib/log.qh index f74dd4aa2e..3d186e3894 100644 --- a/qcsrc/lib/log.qh +++ b/qcsrc/lib/log.qh @@ -59,4 +59,6 @@ noref bool autocvar_prvm_backtraceforwarnings; cvar_set("prvm_backtraceforwarnings", ftos(war)); \ } while (0) +#define ASSERT(expr) do { if (!(expr)) LOG_FATAL("assertion failed: " #expr "\n"); } while (0) + #endif diff --git a/qcsrc/lib/registry.qh b/qcsrc/lib/registry.qh index d9317e8cbf..c751fc7934 100644 --- a/qcsrc/lib/registry.qh +++ b/qcsrc/lib/registry.qh @@ -6,6 +6,29 @@ #define REGISTER_INIT(ns, id) [[accumulate]] void Register_##ns##_##id##_init(entity this) #define REGISTER_INIT_POST(ns, id) [[accumulate]] void Register_##ns##_##id##_init_post(entity this) +/** + * Register a new entity with a global constructor. + * Must be followed by a semicolon or a function body with a `this` parameter. + * Wrapper macros may perform actions after user initialization like so: + * #define REGISTER_FOO(id) \ + * REGISTER(RegisterFoos, FOO, FOOS, FOOS_COUNT, id, m_id, NEW(Foo)); \ + * REGISTER_INIT_POST(FOO, id) { \ + * print("Registering foo #", this.m_id + 1, "\n"); \ + * } \ + * REGISTER_INIT(FOO, id) + * + * Don't forget to forward declare `initfunc` and call `REGISTER_REGISTRY`: + * void RegisterFoos(); + * REGISTER_REGISTRY(RegisterFoos) + * + * @param initfunc The global constructor to accumulate into + * @param ns Short for namespace, prefix for each global (ns##_##id) + * @param array The array to add each entity to. Also requires `array##_first` and `array##_last` to be defined + * @param counter Global to count number of entries + * @param id The identifier of the current entity being registered + * @param fld The field to store the current count into + * @param inst An expression to create a new instance, invoked for every registration + */ #define REGISTER(initfunc, ns, array, counter, id, fld, inst) \ entity ns##_##id; \ REGISTER_INIT(ns, id) { } \ diff --git a/qcsrc/lib/spawnfunc.qh b/qcsrc/lib/spawnfunc.qh new file mode 100644 index 0000000000..1ab059cdf9 --- /dev/null +++ b/qcsrc/lib/spawnfunc.qh @@ -0,0 +1,167 @@ +#ifndef SPAWNFUNC_H +#define SPAWNFUNC_H + +/** If this global exists, only functions with spawnfunc_ name prefix qualify as spawn functions */ +noref bool require_spawnfunc_prefix; +.bool spawnfunc_checked; + +// Optional type checking; increases compile time too much to be enabled by default +#if 0 +bool entityfieldassignablefromeditor(int i) { + switch (entityfieldtype(i)) { + case FIELD_STRING: + case FIELD_FLOAT: + case FIELD_VECTOR: + return true; + } + return false; +} + +#define _spawnfunc_checktypes(fld) if (fieldname == #fld) \ + if (!entityfieldassignablefromeditor(i)) LOG_FATALF("Entity field '%s' cannot be whitelisted\n", fieldname); +#else +#define _spawnfunc_checktypes(fld) +#endif +#define _spawnfunc_check(fld) if (fieldname == #fld) \ + continue; + +#define spawnfunc_1(id, whitelist) spawnfunc_2(id, whitelist) +#define spawnfunc_2(id, whitelist) void spawnfunc_##id(entity this) { \ + this = self; \ + if (!this.spawnfunc_checked) { \ + for (int i = 0, n = numentityfields(); i < n; ++i) { \ + string value = getentityfieldstring(i, this); \ + string fieldname = entityfieldname(i); \ + whitelist(_spawnfunc_checktypes) \ + if (value == "") continue; \ + if (fieldname == "") continue; \ + FIELDS_COMMON(_spawnfunc_check) \ + whitelist(_spawnfunc_check) \ + LOG_WARNINGF(_("Entity field %s.%s (%s) is not whitelisted. If you believe this is an error, please file an issue.\n"), #id, fieldname, value); \ + } \ + this.spawnfunc_checked = true; \ + } \ +} \ +[[accumulate]] void spawnfunc_##id(entity this) + +#define FIELD_SCALAR(fld, n) \ + fld(n) +#define FIELD_VEC(fld, n) \ + fld(n) \ + fld(n##_x) \ + fld(n##_y) \ + fld(n##_z) + +#define FIELDS_NONE(fld) +#define FIELDS_ALL(fld) if (false) + +#define FIELDS_COMMON(fld) \ + FIELD_SCALAR(fld, classname) \ + FIELD_SCALAR(fld, spawnfunc_checked) \ + /**/ + +#define FIELDS_UNION(fld) \ + FIELD_SCALAR(fld, Version) \ + FIELD_SCALAR(fld, ammo_cells) \ + FIELD_SCALAR(fld, ammo_nails) \ + FIELD_SCALAR(fld, ammo_rockets) \ + FIELD_SCALAR(fld, armorvalue) \ + FIELD_SCALAR(fld, atten) \ + FIELD_SCALAR(fld, bgmscriptdecay) \ + FIELD_SCALAR(fld, bgmscriptsustain) \ + FIELD_SCALAR(fld, bgmscript) \ + FIELD_SCALAR(fld, button0) \ + FIELD_SCALAR(fld, cnt) \ + FIELD_SCALAR(fld, colormap) \ + FIELD_SCALAR(fld, count) \ + FIELD_SCALAR(fld, curvetarget) \ + FIELD_SCALAR(fld, cvarfilter) \ + FIELD_SCALAR(fld, debrisdamageforcescale) \ + FIELD_SCALAR(fld, debrisfadetime) \ + FIELD_SCALAR(fld, debristimejitter) \ + FIELD_SCALAR(fld, debristime) \ + FIELD_SCALAR(fld, debris) \ + FIELD_SCALAR(fld, delay) \ + FIELD_SCALAR(fld, dmgtime) \ + FIELD_SCALAR(fld, dmg) \ + FIELD_SCALAR(fld, dmg_edge) \ + FIELD_SCALAR(fld, dmg_force) \ + FIELD_SCALAR(fld, dmg_radius) \ + FIELD_SCALAR(fld, effects) \ + FIELD_SCALAR(fld, flags) \ + FIELD_SCALAR(fld, fog) \ + FIELD_SCALAR(fld, frags) \ + FIELD_SCALAR(fld, frame) \ + FIELD_SCALAR(fld, gametypefilter) \ + FIELD_SCALAR(fld, geomtype) \ + FIELD_SCALAR(fld, gravity) \ + FIELD_SCALAR(fld, health) \ + FIELD_SCALAR(fld, height) \ + FIELD_SCALAR(fld, impulse) \ + FIELD_SCALAR(fld, killtarget) \ + FIELD_SCALAR(fld, lerpfrac) \ + FIELD_SCALAR(fld, light_lev) \ + FIELD_SCALAR(fld, lip) \ + FIELD_SCALAR(fld, loddistance1) \ + FIELD_SCALAR(fld, lodmodel1) \ + FIELD_SCALAR(fld, ltime) \ + FIELD_SCALAR(fld, mdl) \ + FIELD_SCALAR(fld, message2) \ + FIELD_SCALAR(fld, message) \ + FIELD_SCALAR(fld, modelindex) \ + FIELD_SCALAR(fld, modelscale) \ + FIELD_SCALAR(fld, model) \ + FIELD_SCALAR(fld, monster_moveflags) \ + FIELD_SCALAR(fld, movetype) \ + FIELD_SCALAR(fld, netname) \ + FIELD_SCALAR(fld, nextthink) \ + FIELD_SCALAR(fld, noalign) \ + FIELD_SCALAR(fld, noise1) \ + FIELD_SCALAR(fld, noise2) \ + FIELD_SCALAR(fld, noise) \ + FIELD_SCALAR(fld, phase) \ + FIELD_SCALAR(fld, platmovetype) \ + FIELD_SCALAR(fld, race_place) \ + FIELD_SCALAR(fld, radius) \ + FIELD_SCALAR(fld, respawntimejitter) \ + FIELD_SCALAR(fld, respawntime) \ + FIELD_SCALAR(fld, restriction) \ + FIELD_SCALAR(fld, scale) \ + FIELD_SCALAR(fld, skin) \ + FIELD_SCALAR(fld, solid) \ + FIELD_SCALAR(fld, sound1) \ + FIELD_SCALAR(fld, sounds) \ + FIELD_SCALAR(fld, spawnflags) \ + FIELD_SCALAR(fld, speed) \ + FIELD_SCALAR(fld, strength) \ + FIELD_SCALAR(fld, target2) \ + FIELD_SCALAR(fld, target3) \ + FIELD_SCALAR(fld, target4) \ + FIELD_SCALAR(fld, targetname) \ + FIELD_SCALAR(fld, target) \ + FIELD_SCALAR(fld, target_random) \ + FIELD_SCALAR(fld, target_range) \ + FIELD_SCALAR(fld, team) \ + FIELD_SCALAR(fld, turret_scale_health) \ + FIELD_SCALAR(fld, turret_scale_range) \ + FIELD_SCALAR(fld, turret_scale_respawn) \ + FIELD_SCALAR(fld, volume) \ + FIELD_SCALAR(fld, wait) \ + FIELD_SCALAR(fld, warpzone_fadeend) \ + FIELD_SCALAR(fld, warpzone_fadestart) \ + FIELD_SCALAR(fld, weapon) \ + FIELD_VEC(fld, absmax) \ + FIELD_VEC(fld, absmin) \ + FIELD_VEC(fld, angles) \ + FIELD_VEC(fld, avelocity) \ + FIELD_VEC(fld, maxs) \ + FIELD_VEC(fld, maxs) \ + FIELD_VEC(fld, mins) \ + FIELD_VEC(fld, modelscale_vec) \ + FIELD_VEC(fld, origin) \ + FIELD_VEC(fld, velocity) \ + /**/ + +#define spawnfunc(...) EVAL(OVERLOAD(spawnfunc, __VA_ARGS__, FIELDS_UNION)) + +#endif diff --git a/qcsrc/menu/anim/animation.qc b/qcsrc/menu/anim/animation.qc index d52ae4f719..5563b969d9 100644 --- a/qcsrc/menu/anim/animation.qc +++ b/qcsrc/menu/anim/animation.qc @@ -4,6 +4,7 @@ void setterDummy(entity, float); CLASS(Animation, Object) METHOD(Animation, configureAnimation, void(entity, entity, void(entity, float), float, float, float, float)); + METHOD(Animation, update, void(entity, float, float, float)); METHOD(Animation, setTimeStartEnd, void(entity, float, float)); METHOD(Animation, setTimeStartDuration, void(entity, float, float)); METHOD(Animation, setValueStartEnd, void(entity, float, float)); @@ -36,6 +37,12 @@ void Animation_configureAnimation(entity me, entity obj, void(entity, float) obj me.setValueStartEnd(me, animStartValue, animEndValue); } +void Animation_update(entity me, float animDuration, float animStartValue, float animEndValue) +{ + me.setTimeStartDuration(me, time, animDuration); + me.setValueStartEnd(me, animStartValue, animEndValue); +} + void Animation_setTimeStartEnd(entity me, float s, float e) { me.startTime = s; diff --git a/qcsrc/menu/item/button.qc b/qcsrc/menu/item/button.qc index 343bf1d932..934e8cd342 100644 --- a/qcsrc/menu/item/button.qc +++ b/qcsrc/menu/item/button.qc @@ -44,7 +44,7 @@ void Button_resizeNotify(entity me, vector relOrigin, vector relSize, vector abs if(me.srcMulti) me.keepspaceLeft = 0; else - me.keepspaceLeft = min(0.8, absSize.y / absSize.x); + me.keepspaceLeft = min(0.8, absSize.x == 0 ? 0 : (absSize.y / absSize.x)); SUPER(Button).resizeNotify(me, relOrigin, relSize, absOrigin, absSize); } void Button_configureButton(entity me, string txt, float sz, string gfx) diff --git a/qcsrc/menu/item/label.qc b/qcsrc/menu/item/label.qc index e02642f69d..ea170777ea 100644 --- a/qcsrc/menu/item/label.qc +++ b/qcsrc/menu/item/label.qc @@ -130,8 +130,8 @@ void Label_resizeNotify(entity me, vector relOrigin, vector relSize, vector absO SUPER(Label).resizeNotify(me, relOrigin, relSize, absOrigin, absSize); // absSize_y is height of label - me.realFontSize_y = me.fontSize / absSize.y; - me.realFontSize_x = me.fontSize / absSize.x; + me.realFontSize_y = absSize.y == 0 ? 0 : (me.fontSize / absSize.y); + me.realFontSize_x = absSize.x == 0 ? 0 : (me.fontSize / absSize.x); if(me.marginLeft) me.keepspaceLeft = me.marginLeft * me.realFontSize.x; if(me.marginRight) diff --git a/qcsrc/menu/item/slider.qc b/qcsrc/menu/item/slider.qc index 4654425431..3340e335cb 100644 --- a/qcsrc/menu/item/slider.qc +++ b/qcsrc/menu/item/slider.qc @@ -15,6 +15,8 @@ CLASS(Slider, Label) METHOD(Slider, mouseRelease, float(entity, vector)); METHOD(Slider, valueToText, string(entity, float)); METHOD(Slider, toString, string(entity)); + METHOD(Slider, setValue_allowAnim, void(entity, float, bool)); + METHOD(Slider, setValue_noAnim, void(entity, float)); METHOD(Slider, setValue, void(entity, float)); METHOD(Slider, setSliderValue, void(entity, float)); METHOD(Slider, showNotify, void(entity)); @@ -24,6 +26,7 @@ CLASS(Slider, Label) ATTRIB(Slider, value, float, 0) ATTRIB(Slider, animated, float, 1) ATTRIB(Slider, sliderValue, float, 0) + ATTRIB(Slider, sliderAnim, entity, world) ATTRIB(Slider, valueMin, float, 0) ATTRIB(Slider, valueMax, float, 0) ATTRIB(Slider, valueStep, float, 0) @@ -48,16 +51,27 @@ ENDCLASS(Slider) #endif #ifdef IMPLEMENTATION -void Slider_setValue(entity me, float val) +void Slider_setValue_allowAnim(entity me, float val, bool allowAnim) { - if (me.animated) { - anim.removeObjAnim(anim, me); - makeHostedEasing(me, Slider_setSliderValue, easingQuadInOut, 1, me.sliderValue, val); + if(allowAnim && me.animated) { + float t = 0.5; + if(!me.sliderAnim) + me.sliderAnim = makeHostedEasing(me, Slider_setSliderValue, easingQuadOut, t, me.sliderValue, val); + else + me.sliderAnim.update(me.sliderAnim, t, me.sliderValue, val); } else { me.setSliderValue(me, val); } me.value = val; } +void Slider_setValue_noAnim(entity me, float val) +{ + Slider_setValue_allowAnim(me, val, false); +} +void Slider_setValue(entity me, float val) +{ + Slider_setValue_allowAnim(me, val, true); +} void Slider_setSliderValue(entity me, float val) { me.sliderValue = val; @@ -69,7 +83,7 @@ string Slider_toString(entity me) void Slider_resizeNotify(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize) { SUPER(Slider).resizeNotify(me, relOrigin, relSize, absOrigin, absSize); - me.controlWidth = absSize.y / absSize.x; + me.controlWidth = absSize.x == 0 ? 0 : (absSize.y / absSize.x); } string Slider_valueToText(entity me, float val) { @@ -177,14 +191,10 @@ float Slider_keyUp(entity me, float key, float ascii, float shift) float Slider_mouseDrag(entity me, vector pos) { float hit; - float v, animed; + float v; if(me.disabled) return 0; - anim.removeObjAnim(anim, me); - animed = me.animated; - me.animated = false; - if(me.pressed) { hit = 1; @@ -194,17 +204,18 @@ float Slider_mouseDrag(entity me, vector pos) if(pos.y >= 1 + me.tolerance.y) hit = 0; if(hit) { + // handle dragging + me.pressed = 2; + v = median(0, (pos.x - me.pressOffset - 0.5 * me.controlWidth) / (1 - me.textSpace - me.controlWidth), 1) * (me.valueMax - me.valueMin) + me.valueMin; if(me.valueStep) v = floor(0.5 + v / me.valueStep) * me.valueStep; - me.setValue(me, v); + me.setValue_noAnim(me, v); } else me.setValue(me, me.previousValue); } - me.animated = animed; - return 1; } float Slider_mousePress(entity me, vector pos) @@ -295,6 +306,14 @@ void Slider_draw(entity me) else draw_Picture(eX * controlLeft, strcat(me.src, "_n"), eX * me.controlWidth + eY, me.color, 1); } + + if(me.sliderAnim) + if(me.sliderAnim.isFinished(me.sliderAnim)) + { + anim.removeObjAnim(anim, me); + me.sliderAnim = world; + } + me.setText(me, me.valueToText(me, me.value)); draw_alpha = save; SUPER(Slider).draw(me); diff --git a/qcsrc/menu/item/textslider.qc b/qcsrc/menu/item/textslider.qc index 733b1d6125..30b80c196d 100644 --- a/qcsrc/menu/item/textslider.qc +++ b/qcsrc/menu/item/textslider.qc @@ -6,6 +6,8 @@ CLASS(TextSlider, Slider) METHOD(TextSlider, valueToText, string(entity, float)); METHOD(TextSlider, valueToIdentifier, string(entity, float)); + METHOD(TextSlider, setValueFromIdentifier_allowAnim, void(entity, string, bool)); + METHOD(TextSlider, setValueFromIdentifier_noAnim, void(entity, string)); METHOD(TextSlider, setValueFromIdentifier, void(entity, string)); METHOD(TextSlider, getIdentifier, string(entity)); METHOD(TextSlider, clearValues, void(entity)); @@ -35,16 +37,24 @@ string TextSlider_valueToText(entity me, int val) return _("Custom"); return me.(valueStrings[val]); } -void TextSlider_setValueFromIdentifier(entity me, string id) +void TextSlider_setValueFromIdentifier_allowAnim(entity me, string id, bool allowAnim) { int i; for(i = 0; i < me.nValues; ++i) if(me.valueToIdentifier(me, i) == id) { - SUPER(TextSlider).setValue( me, i ); + SUPER(TextSlider).setValue_allowAnim(me, i, allowAnim); return; } - SUPER(TextSlider).setValue( me, -1 ); + SUPER(TextSlider).setValue_allowAnim(me, -1, allowAnim); +} +void TextSlider_setValueFromIdentifier_noAnim(entity me, string id) +{ + TextSlider_setValueFromIdentifier_allowAnim(me, id, false); +} +void TextSlider_setValueFromIdentifier(entity me, string id) +{ + TextSlider_setValueFromIdentifier_allowAnim(me, id, true); } string TextSlider_getIdentifier(entity me) { @@ -75,6 +85,6 @@ void TextSlider_insertValue(entity me, int pos, string theString, string theIden void TextSlider_configureTextSliderValues(entity me, string theDefault) { me.configureSliderValues(me, 0, 0, me.nValues - 1, 1, 1, 1); - me.setValueFromIdentifier(me, theDefault); + me.setValueFromIdentifier_noAnim(me, theDefault); } #endif diff --git a/qcsrc/menu/xonotic/datasource.qc b/qcsrc/menu/xonotic/datasource.qc index 49cc571761..57ce0c80c3 100644 --- a/qcsrc/menu/xonotic/datasource.qc +++ b/qcsrc/menu/xonotic/datasource.qc @@ -12,12 +12,58 @@ CLASS(DataSource, Object) * returns `DataSource_false` if out of bounds * otherwise returns an entity or `DataSource_true` */ - METHOD(DataSource, getEntry, entity(int i, void(string name, string icon) returns)) { return DataSource_false; } + METHOD(DataSource, getEntry, entity(entity this, int i, void(string name, string icon) returns)) { return DataSource_false; } /** return the index of the first match for `find`. optional */ - METHOD(DataSource, indexOf, int(string find)) { return -1; } + METHOD(DataSource, indexOf, int(entity this, string find)) { return -1; } /** reload all entries matching `filter` returning how many matches were found */ - METHOD(DataSource, reload, int(string filter)) { return 0; } + METHOD(DataSource, reload, int(entity this, string filter)) { return 0; } /** cleanup on shutdown. optional */ - METHOD(DataSource, destroy, void(entity)) { } + METHOD(DataSource, destroy, void(entity this)) { } ENDCLASS(DataSource) + + +CLASS(StringSource, DataSource) + ATTRIB(StringSource, StringSource_str, string, string_null) + ATTRIB(StringSource, StringSource_sep, string, string_null) + CONSTRUCTOR(StringSource, string str, string sep) + { + CONSTRUCT(StringSource); + this.StringSource_str = str; + this.StringSource_sep = sep; + } + METHOD(StringSource, getEntry, entity(entity this, int i, void(string name, string icon) returns)) + { + int n = tokenizebyseparator(this.StringSource_str, this.StringSource_sep); + if (i < 0 || i >= n) return DataSource_false; + string s = argv(i); + if (returns) returns(s, string_null); + return DataSource_true; + } + METHOD(StringSource, reload, int(entity this, string filter)) + { + return tokenizebyseparator(this.StringSource_str, this.StringSource_sep); + } +ENDCLASS(StringSource) + +CLASS(CvarStringSource, StringSource) + ATTRIB(CvarStringSource, CvarStringSource_cvar, string, string_null) + CONSTRUCTOR(CvarStringSource, string cv, string sep) + { + CONSTRUCT(CvarStringSource); + this.CvarStringSource_cvar = cv; + this.StringSource_sep = sep; + } + METHOD(CvarStringSource, getEntry, entity(entity this, int i, void(string name, string icon) returns)) + { + string s = this.CvarStringSource_cvar; + this.StringSource_str = s ? cvar_string(s) : string_null; + return super.getEntry(this, i, returns); + } + METHOD(CvarStringSource, reload, int(entity this, string filter)) + { + string s = this.CvarStringSource_cvar; + this.StringSource_str = s ? cvar_string(s) : string_null; + return super.reload(this, filter); + } +ENDCLASS(CvarStringSource) #endif diff --git a/qcsrc/menu/xonotic/dialog_monstertools.qc b/qcsrc/menu/xonotic/dialog_monstertools.qc index 6b95565074..9969a7b212 100644 --- a/qcsrc/menu/xonotic/dialog_monstertools.qc +++ b/qcsrc/menu/xonotic/dialog_monstertools.qc @@ -27,8 +27,8 @@ void XonoticMonsterToolsDialog_fill(entity me) me.TD(me, 1, 0.4, e = makeXonoticRadioButton(2, "menu_monsters_edit_spawn", "wyvern", _("Wyvern"))); me.TR(me); me.TDempty(me, 0.1); - me.TD(me, 1, 0.5, e = makeXonoticCommandButton(_("Spawn"), '0 0 0', "cmd mobspawn $menu_monsters_edit_spawn $menu_monsters_edit_movetarget", 0)); - me.TD(me, 1, 0.5, e = makeXonoticCommandButton(_("Remove"), '0 0 0', "cmd mobkill", 0)); + me.TD(me, 1, 0.5, e = makeXonoticCommandButton(_("Spawn"), '0 0 0', "spawnmob $menu_monsters_edit_spawn $menu_monsters_edit_movetarget", 0)); + me.TD(me, 1, 0.5, e = makeXonoticCommandButton(_("Remove"), '0 0 0', "killmob", 0)); me.TR(me); me.TD(me, 1, 0.5, e = makeXonoticCommandButton(_("Move target:"), '0 0 0', "editmob movetarget $menu_monsters_edit_movetarget", 0)); me.TD(me, 1, 0.5, e = makeXonoticRadioButton(2, "menu_monsters_edit_movetarget", "1", _("Follow"))); diff --git a/qcsrc/menu/xonotic/dialog_settings_game.qc b/qcsrc/menu/xonotic/dialog_settings_game.qc index fc87261a53..16bc110adb 100644 --- a/qcsrc/menu/xonotic/dialog_settings_game.qc +++ b/qcsrc/menu/xonotic/dialog_settings_game.qc @@ -5,14 +5,14 @@ #include "datasource.qc" CLASS(SettingSource, DataSource) - METHOD(SettingSource, getEntry, entity(int i, void(string name, string icon) returns)) + METHOD(SettingSource, getEntry, entity(entity this, int i, void(string name, string icon) returns)) { Lazy l = SETTINGS[i]; entity it = l.m_get(); if (returns) returns(it.title, string_null); return it; } - METHOD(SettingSource, reload, int(string filter)) { return SETTINGS_COUNT; } + METHOD(SettingSource, reload, int(entity this, string filter)) { return SETTINGS_COUNT; } ENDCLASS(SettingSource) #include "listbox.qc" @@ -38,7 +38,7 @@ CLASS(XonoticRegisteredSettingsList, XonoticListBox) METHOD(XonoticRegisteredSettingsList, drawListBoxItem, void(entity this, int i, vector absSize, bool isSelected, bool isFocused)) { if (!this.source) return; - if (!this.source.getEntry(i, XonoticRegisteredSettingsList_cb)) return; + if (!this.source.getEntry(this.source, i, XonoticRegisteredSettingsList_cb)) return; string name = XonoticRegisteredSettingsList_cb_name; if (isSelected) { draw_Fill('0 0 0', '1 1 0', SKINCOLOR_LISTBOX_SELECTED, SKINALPHA_LISTBOX_SELECTED); @@ -55,7 +55,7 @@ CLASS(XonoticRegisteredSettingsList, XonoticListBox) this.nItems = 0; return; } - this.nItems = this.source.reload(this.stringFilter); + this.nItems = this.source.reload(this.source, this.stringFilter); } METHOD(XonoticRegisteredSettingsList, resizeNotify, void(entity this, vector relOrigin, vector relSize, vector absOrigin, vector absSize)) { @@ -92,7 +92,8 @@ CLASS(XonoticGameSettingsTab, XonoticTab) { entity c = this.currentPanel; entity removing = this.currentItem; - entity adding = this.topicList.source.getEntry(this.topicList.selectedItem, func_null); + DataSource data = this.topicList.source; + entity adding = data.getEntry(data, this.topicList.selectedItem, func_null); if (removing == adding) return; if (removing) { this.currentItem = NULL; diff --git a/qcsrc/menu/xonotic/radiobutton.qc b/qcsrc/menu/xonotic/radiobutton.qc index 2728220779..ceeae22ea0 100644 --- a/qcsrc/menu/xonotic/radiobutton.qc +++ b/qcsrc/menu/xonotic/radiobutton.qc @@ -41,6 +41,7 @@ entity makeXonoticRadioButton(float theGroup, string theCvar, string theValue, s void XonoticRadioButton_configureXonoticRadioButton(entity me, float theGroup, string theCvar, string theValue, string theText, string theTooltip) { me.cvarName = (theCvar) ? theCvar : string_null; + me.cvarValue = theValue; me.loadCvars(me); setZonedTooltip(me, theTooltip, theCvar); me.configureRadioButton(me, theText, me.fontSize, me.image, theGroup, 0); diff --git a/qcsrc/menu/xonotic/slider.qc b/qcsrc/menu/xonotic/slider.qc index ca65c66218..7ecd7a9d0a 100644 --- a/qcsrc/menu/xonotic/slider.qc +++ b/qcsrc/menu/xonotic/slider.qc @@ -71,7 +71,7 @@ void XonoticSlider_loadCvars(entity me) if (!me.cvarName) return; - me.setValue( me, cvar(me.cvarName) ); + me.setValue_noAnim(me, cvar(me.cvarName)); } void XonoticSlider_saveCvars(entity me) { diff --git a/qcsrc/menu/xonotic/slider_decibels.qc b/qcsrc/menu/xonotic/slider_decibels.qc index c840fb07ef..e577cba664 100644 --- a/qcsrc/menu/xonotic/slider_decibels.qc +++ b/qcsrc/menu/xonotic/slider_decibels.qc @@ -62,9 +62,9 @@ void XonoticDecibelsSlider_loadCvars(entity me) // snapping if(v > fromDecibelOfSquare(me.valueMax - 0.5 * me.valueStep, me.valueMin)) - Slider_setValue(me, me.valueMax); + Slider_setValue_noAnim(me, me.valueMax); else - Slider_setValue(me, me.valueStep * floor(0.5 + toDecibelOfSquare(v, me.valueMin) / me.valueStep) ); + Slider_setValue_noAnim(me, me.valueStep * floor(0.5 + toDecibelOfSquare(v, me.valueMin) / me.valueStep)); } void XonoticDecibelsSlider_saveCvars(entity me) { diff --git a/qcsrc/menu/xonotic/slider_particles.qc b/qcsrc/menu/xonotic/slider_particles.qc index 0b2179d36e..1a7ee2c4a5 100644 --- a/qcsrc/menu/xonotic/slider_particles.qc +++ b/qcsrc/menu/xonotic/slider_particles.qc @@ -32,7 +32,7 @@ void XonoticParticlesSlider_configureXonoticParticlesSlider(entity me) } void XonoticParticlesSlider_loadCvars(entity me) { - me.setValueFromIdentifier(me, sprintf("%s %s %s", + me.setValueFromIdentifier_noAnim(me, sprintf("%s %s %s", cvar_string("cl_particles_quality"), cvar_string("r_drawparticles_drawdistance"), cvar_string("cl_damageeffect") diff --git a/qcsrc/menu/xonotic/slider_resolution.qc b/qcsrc/menu/xonotic/slider_resolution.qc index 8b91ecb1f3..c6d95b4304 100644 --- a/qcsrc/menu/xonotic/slider_resolution.qc +++ b/qcsrc/menu/xonotic/slider_resolution.qc @@ -212,7 +212,7 @@ void XonoticResolutionSlider_loadResolutions(entity me, float fullscreen) } void XonoticResolutionSlider_loadCvars(entity me) { - me.setValueFromIdentifier(me, strcat(cvar_string("_menu_vid_width"), " ", cvar_string("_menu_vid_height"), " ", cvar_string("_menu_vid_pixelheight"))); + me.setValueFromIdentifier_noAnim(me, strcat(cvar_string("_menu_vid_width"), " ", cvar_string("_menu_vid_height"), " ", cvar_string("_menu_vid_pixelheight"))); } void XonoticResolutionSlider_saveCvars(entity me) { diff --git a/qcsrc/menu/xonotic/slider_sbfadetime.qc b/qcsrc/menu/xonotic/slider_sbfadetime.qc index 5533a2361b..ecf850f404 100644 --- a/qcsrc/menu/xonotic/slider_sbfadetime.qc +++ b/qcsrc/menu/xonotic/slider_sbfadetime.qc @@ -28,7 +28,7 @@ void XonoticScoreboardFadeTimeSlider_configureXonoticScoreboardFadeTimeSlider(en } void XonoticScoreboardFadeTimeSlider_loadCvars(entity me) { - me.setValueFromIdentifier(me, sprintf("%s %s", + me.setValueFromIdentifier_noAnim(me, sprintf("%s %s", cvar_string("scoreboard_fadeinspeed"), cvar_string("scoreboard_fadeoutspeed") )); diff --git a/qcsrc/menu/xonotic/textslider.qc b/qcsrc/menu/xonotic/textslider.qc index 597772e340..8c4682ee0f 100644 --- a/qcsrc/menu/xonotic/textslider.qc +++ b/qcsrc/menu/xonotic/textslider.qc @@ -65,7 +65,7 @@ void XonoticTextSlider_loadCvars(entity me) float i; for(i = 1; i < n; ++i) s = strcat(s, " ", cvar_string(argv(i))); - me.setValueFromIdentifier(me, s); + me.setValueFromIdentifier_noAnim(me, s); if(me.value < 0 && n > 1) { // if it failed: check if all cvars have the same value @@ -74,7 +74,7 @@ void XonoticTextSlider_loadCvars(entity me) if(cvar_string(argv(i)) != cvar_string(argv(i-1))) break; if(i >= n) - me.setValueFromIdentifier(me, cvar_string(argv(0))); + me.setValueFromIdentifier_noAnim(me, cvar_string(argv(0))); } } void XonoticTextSlider_saveCvars(entity me) diff --git a/qcsrc/server-testcase/framework.qc b/qcsrc/server-testcase/framework.qc index f874b616b2..1ec7115ef2 100644 --- a/qcsrc/server-testcase/framework.qc +++ b/qcsrc/server-testcase/framework.qc @@ -4,7 +4,7 @@ string vtos(vector v) = #27; void error(string e) = #10; float test(); -void spawnfunc_worldspawn() +spawnfunc(worldspawn) { float r; LOG_TRACE("TESTCASE: START\n"); diff --git a/qcsrc/server/_all.qh b/qcsrc/server/_all.qh index 9d7617e006..d3771bafc8 100644 --- a/qcsrc/server/_all.qh +++ b/qcsrc/server/_all.qh @@ -10,5 +10,6 @@ #include "../dpdefs/dpextensions.qh" #include "../common/models/models.qh" +#include "../common/sounds/sounds.qh" #endif diff --git a/qcsrc/server/autocvars.qh b/qcsrc/server/autocvars.qh index fcf209faca..5358b662cf 100644 --- a/qcsrc/server/autocvars.qh +++ b/qcsrc/server/autocvars.qh @@ -702,6 +702,7 @@ int autocvar_g_monsters_max_perplayer; float autocvar_g_monsters_damageforcescale = 0.8; float autocvar_g_monsters_target_range; bool autocvar_g_monsters_target_infront; +float autocvar_g_monsters_target_infront_range = 0.3; float autocvar_g_monsters_attack_range; int autocvar_g_monsters_score_kill; int autocvar_g_monsters_score_spawned; diff --git a/qcsrc/server/bot/havocbot/havocbot.qc b/qcsrc/server/bot/havocbot/havocbot.qc index 7a3ac0561a..629009761f 100644 --- a/qcsrc/server/bot/havocbot/havocbot.qc +++ b/qcsrc/server/bot/havocbot/havocbot.qc @@ -856,7 +856,7 @@ void havocbot_movetogoal() void havocbot_chooseenemy() {SELFPARAM(); entity head, best, head2; - float rating, bestrating, i, hf; + float rating, bestrating, hf; vector eye, v; if (autocvar_bot_nofire || IS_INDEPENDENT_PLAYER(self)) { @@ -908,10 +908,29 @@ void havocbot_chooseenemy() self.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_CORPSE; - for(i = 0; ; ++i) + bool scan_transparent = false; + bool scan_secondary_targets = false; + bool have_secondary_targets = false; + while(true) { - while (head) + scan_secondary_targets = false; + :scan_targets + for( ; head; head = head.chain) { + if(!scan_secondary_targets) + { + if(head.classname == "misc_breakablemodel") + { + have_secondary_targets = true; + continue; + } + } + else + { + if(head.classname != "misc_breakablemodel") + continue; + } + v = (head.absmin + head.absmax) * 0.5; rating = vlen(v - eye); if (rating autocvar_g_max_info_autoscreenshot) { objerror("Too many info_autoscreenshot entitites. FAIL!"); @@ -283,7 +283,7 @@ float CheatImpulse(float i) e = self; Send_Effect(EFFECT_ROCKET_EXPLODE, e.origin, '0 0 0', 1); - sound(e, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_NORM); + sound(e, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM); e2 = spawn(); setorigin(e2, e.origin); @@ -372,7 +372,7 @@ float CheatCommand(float argc) e.angles = fixedvectoangles2(trace_plane_normal, v_forward); e.angles = AnglesTransform_ApplyToAngles(e.angles, '-90 0 0'); // so unrotated models work } - WITH(entity, self, e, spawnfunc_func_breakable()); + WITH(entity, self, e, spawnfunc_func_breakable(e)); // now, is it valid? if(f == 0) { diff --git a/qcsrc/server/cl_client.qc b/qcsrc/server/cl_client.qc index bd9c46a9b0..da1a180d4c 100644 --- a/qcsrc/server/cl_client.qc +++ b/qcsrc/server/cl_client.qc @@ -205,6 +205,7 @@ void PutObserverInServer (void) } self.frags = FRAGS_SPECTATOR; + self.bot_attack = false; MUTATOR_CALLHOOK(MakePlayerObserver); @@ -329,9 +330,8 @@ void FixPlayermodel() { if(teamplay) { - string s; - s = Static_Team_ColorName_Lower(self.team); - if(s != "neutral") + string s = Static_Team_ColorName_Lower(self.team); + if (s != "neutral") { defaultmodel = cvar_string(strcat("sv_defaultplayermodel_", s)); defaultskin = cvar(strcat("sv_defaultplayerskin_", s)); @@ -1447,7 +1447,7 @@ void play_countdown(float finished, string samp) if(IS_REAL_CLIENT(self)) if(floor(finished - time - frametime) != floor(finished - time)) if(finished - time < 6) - sound (self, CH_INFO, samp, VOL_BASE, ATTEN_NORM); + _sound (self, CH_INFO, samp, VOL_BASE, ATTEN_NORM); } void player_powerups (void) @@ -1472,7 +1472,7 @@ void player_powerups (void) { if (self.items & ITEM_Strength.m_itemid) { - play_countdown(self.strength_finished, "misc/poweroff.wav"); + play_countdown(self.strength_finished, SND(POWEROFF)); self.effects = self.effects | (EF_BLUE | EF_ADDITIVE | EF_FULLBRIGHT); if (time > self.strength_finished) { @@ -1492,7 +1492,7 @@ void player_powerups (void) } if (self.items & ITEM_Shield.m_itemid) { - play_countdown(self.invincible_finished, "misc/poweroff.wav"); + play_countdown(self.invincible_finished, SND(POWEROFF)); self.effects = self.effects | (EF_RED | EF_ADDITIVE | EF_FULLBRIGHT); if (time > self.invincible_finished) { @@ -1525,7 +1525,7 @@ void player_powerups (void) } else { - play_countdown(self.superweapons_finished, "misc/poweroff.wav"); + play_countdown(self.superweapons_finished, SND(POWEROFF)); if (time > self.superweapons_finished) { self.items = self.items - (self.items & IT_SUPERWEAPON); diff --git a/qcsrc/server/cl_player.qc b/qcsrc/server/cl_player.qc index f7f3c03b72..182c330411 100644 --- a/qcsrc/server/cl_player.qc +++ b/qcsrc/server/cl_player.qc @@ -182,11 +182,11 @@ void PlayerCorpseDamage (entity inflictor, entity attacker, float damage, int de if(sound_allowed(MSG_BROADCAST, attacker)) { if (save > 10) - sound (self, CH_SHOTS, "misc/armorimpact.wav", VOL_BASE, ATTEN_NORM); + sound (self, CH_SHOTS, SND_ARMORIMPACT, VOL_BASE, ATTEN_NORM); else if (take > 30) - sound (self, CH_SHOTS, "misc/bodyimpact2.wav", VOL_BASE, ATTEN_NORM); + sound (self, CH_SHOTS, SND_BODYIMPACT2, VOL_BASE, ATTEN_NORM); else if (take > 10) - sound (self, CH_SHOTS, "misc/bodyimpact1.wav", VOL_BASE, ATTEN_NORM); + sound (self, CH_SHOTS, SND_BODYIMPACT1, VOL_BASE, ATTEN_NORM); } if (take > 50) @@ -395,11 +395,11 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, int deathtyp if(sound_allowed(MSG_BROADCAST, attacker)) { if (save > 10) - sound (self, CH_SHOTS, "misc/armorimpact.wav", VOL_BASE, ATTEN_NORM); + sound (self, CH_SHOTS, SND_ARMORIMPACT, VOL_BASE, ATTEN_NORM); else if (take > 30) - sound (self, CH_SHOTS, "misc/bodyimpact2.wav", VOL_BASE, ATTEN_NORM); + sound (self, CH_SHOTS, SND_BODYIMPACT2, VOL_BASE, ATTEN_NORM); else if (take > 10) - sound (self, CH_SHOTS, "misc/bodyimpact1.wav", VOL_BASE, ATTEN_NORM); // FIXME possibly remove them? + sound (self, CH_SHOTS, SND_BODYIMPACT1, VOL_BASE, ATTEN_NORM); // FIXME possibly remove them? } if (take > 50) @@ -1225,7 +1225,7 @@ void GlobalSound(string sample, float chan, float voicetype) } break; case VOICETYPE_PLAYERSOUND: - sound(self, chan, sample, VOL_BASE, ATTEN_NORM); + _sound(self, chan, sample, VOL_BASE, ATTEN_NORM); break; default: backtrace("Invalid voice type!"); diff --git a/qcsrc/server/defs.qh b/qcsrc/server/defs.qh index 5072e49002..723b137a13 100644 --- a/qcsrc/server/defs.qh +++ b/qcsrc/server/defs.qh @@ -5,8 +5,6 @@ #define INDEPENDENT_ATTACK_FINISHED -noref float require_spawnfunc_prefix; // if this float exists, only functions with spawnfunc_ name prefix qualify as spawn functions - #define BUTTON_ATCK button0 #define BUTTON_JUMP button2 #define BUTTON_ATCK2 button3 @@ -147,7 +145,9 @@ const float MAX_DAMAGEEXTRARADIUS = 16; .float pauserothealth_finished; .float pauserotarmor_finished; .float pauserotfuel_finished; +// string overrides entity .string item_pickupsound; +.entity item_pickupsound_ent; // definitions for weaponsystem // more WEAPONTODO: move these to their proper files diff --git a/qcsrc/server/g_damage.qc b/qcsrc/server/g_damage.qc index b5d87eed17..2cc773b73f 100644 --- a/qcsrc/server/g_damage.qc +++ b/qcsrc/server/g_damage.qc @@ -560,6 +560,7 @@ void Freeze (entity targ, float freeze_time, float frozen_type, float show_waypo targ.revive_progress = ((frozen_type == 3) ? 1 : 0); targ.health = ((frozen_type == 3) ? targ_maxhealth : 1); targ.revive_speed = freeze_time; + self.bot_attack = false; entity ice, head; ice = spawn(); @@ -591,6 +592,9 @@ void Freeze (entity targ, float freeze_time, float frozen_type, float show_waypo void Unfreeze (entity targ) { + if(!targ.frozen) + return; + if(targ.frozen && targ.frozen != 3) // only reset health if target was frozen targ.health = ((IS_PLAYER(targ)) ? start_health : targ.max_health); @@ -598,6 +602,7 @@ void Unfreeze (entity targ) targ.frozen = 0; targ.revive_progress = 0; targ.revival_time = time; + self.bot_attack = true; WaypointSprite_Kill(targ.waypointsprite_attached); diff --git a/qcsrc/server/g_hook.qc b/qcsrc/server/g_hook.qc index 6a95a61fe0..779ec90c99 100644 --- a/qcsrc/server/g_hook.qc +++ b/qcsrc/server/g_hook.qc @@ -91,7 +91,7 @@ void GrapplingHookThink(); void GrapplingHook_Stop() {SELFPARAM(); Send_Effect(EFFECT_HOOK_IMPACT, self.origin, '0 0 0', 1); - sound (self, CH_SHOTS, W_Sound("hook_impact"), VOL_BASE, ATTEN_NORM); + sound (self, CH_SHOTS, SND_HOOK_IMPACT, VOL_BASE, ATTEN_NORM); self.state = 1; self.think = GrapplingHookThink; @@ -357,7 +357,7 @@ void FireGrapplingHook (void) vs = hook_shotorigin[s]; // UGLY WORKAROUND: play this on CH_WEAPON_B so it can't cut off fire sounds - sound (self, CH_WEAPON_B, W_Sound("hook_fire"), VOL_BASE, ATTEN_NORM); + sound (self, CH_WEAPON_B, SND_HOOK_FIRE, VOL_BASE, ATTEN_NORM); org = self.origin + self.view_ofs + v_forward * vs.x + v_right * -vs.y + v_up * vs.z; tracebox(self.origin + self.view_ofs, '-3 -3 -3', '3 3 3', org, MOVE_NORMAL, self); diff --git a/qcsrc/server/g_lights.qc b/qcsrc/server/g_lights.qc index f7382d1666..bd5232a1c9 100644 --- a/qcsrc/server/g_lights.qc +++ b/qcsrc/server/g_lights.qc @@ -86,7 +86,7 @@ void dynlight_use() else self.light_lev = 0; } -void spawnfunc_dynlight() +spawnfunc(dynlight) { if (!self.light_lev) self.light_lev = 200; diff --git a/qcsrc/server/g_models.qc b/qcsrc/server/g_models.qc index 8bb2b1b6af..3a94d6f1ab 100644 --- a/qcsrc/server/g_models.qc +++ b/qcsrc/server/g_models.qc @@ -177,15 +177,15 @@ float g_clientmodel_genericsendentity (entity to, int sf) self.default_solid = sol; // non-solid model entities: -void spawnfunc_misc_gamemodel() { SELFPARAM(); self.angles_x = -self.angles.x; G_MODEL_INIT (SOLID_NOT) } // model entity -void spawnfunc_misc_clientmodel() { SELFPARAM(); self.angles_x = -self.angles.x; G_CLIENTMODEL_INIT(SOLID_NOT) } // model entity -void spawnfunc_misc_models() { SELFPARAM(); self.angles_x = -self.angles.x; G_MODEL_INIT (SOLID_NOT) } // DEPRECATED old compat entity with confusing name, do not use +spawnfunc(misc_gamemodel) { self.angles_x = -self.angles.x; G_MODEL_INIT (SOLID_NOT) } // model entity +spawnfunc(misc_clientmodel) { self.angles_x = -self.angles.x; G_CLIENTMODEL_INIT(SOLID_NOT) } // model entity +spawnfunc(misc_models) { self.angles_x = -self.angles.x; G_MODEL_INIT (SOLID_NOT) } // DEPRECATED old compat entity with confusing name, do not use // non-solid brush entities: -void spawnfunc_func_illusionary() { SELFPARAM(); G_MODEL_INIT (SOLID_NOT) } // Q1 name (WARNING: MISPREDICTED) -void spawnfunc_func_clientillusionary() { SELFPARAM(); G_CLIENTMODEL_INIT(SOLID_NOT) } // brush entity -void spawnfunc_func_static() { SELFPARAM(); G_MODEL_INIT (SOLID_NOT) } // DEPRECATED old alias name from some other game +spawnfunc(func_illusionary) { G_MODEL_INIT (SOLID_NOT) } // Q1 name (WARNING: MISPREDICTED) +spawnfunc(func_clientillusionary) { G_CLIENTMODEL_INIT(SOLID_NOT) } // brush entity +spawnfunc(func_static) { G_MODEL_INIT (SOLID_NOT) } // DEPRECATED old alias name from some other game // solid brush entities -void spawnfunc_func_wall() { SELFPARAM(); G_MODEL_INIT (SOLID_BSP) } // Q1 name -void spawnfunc_func_clientwall() { SELFPARAM(); G_CLIENTMODEL_INIT(SOLID_BSP) } // brush entity (WARNING: MISPREDICTED) +spawnfunc(func_wall) { G_MODEL_INIT (SOLID_BSP) } // Q1 name +spawnfunc(func_clientwall) { G_CLIENTMODEL_INIT(SOLID_BSP) } // brush entity (WARNING: MISPREDICTED) diff --git a/qcsrc/server/g_subs.qc b/qcsrc/server/g_subs.qc index 723087a963..585ac42e08 100644 --- a/qcsrc/server/g_subs.qc +++ b/qcsrc/server/g_subs.qc @@ -5,8 +5,8 @@ #include "command/common.qh" #include "../warpzonelib/common.qh" -void spawnfunc_info_null (void) -{SELFPARAM(); +spawnfunc(info_null) +{ remove(self); // if anything breaks, tell the mapper to fix his map! info_null is meant to remove itself immediately. } diff --git a/qcsrc/server/g_subs.qh b/qcsrc/server/g_subs.qh index d62bbb6124..77f49ae5a9 100644 --- a/qcsrc/server/g_subs.qh +++ b/qcsrc/server/g_subs.qh @@ -8,7 +8,7 @@ void() SUB_CalcAngleMoveDone; //void() SUB_UseTargets; void() SUB_Remove; -void spawnfunc_info_null (void); +spawnfunc(info_null); void setanim(entity e, vector anim, float looping, float override, float restart); diff --git a/qcsrc/server/g_world.qc b/qcsrc/server/g_world.qc index b5a2806d76..53990fb213 100644 --- a/qcsrc/server/g_world.qc +++ b/qcsrc/server/g_world.qc @@ -534,8 +534,8 @@ void RandomSeed_Spawn() WITH(entity, self, randomseed, randomseed.think()); // sets random seed and nextthink } -void spawnfunc___init_dedicated_server(void) -{SELFPARAM(); +spawnfunc(__init_dedicated_server) +{ // handler for _init/_init map (only for dedicated server initialization) world_initialized = -1; // don't complain @@ -572,8 +572,8 @@ void ClientInit_Spawn(); void WeaponStats_Init(); void WeaponStats_Shutdown(); void Physics_AddStats(); -void spawnfunc_worldspawn (void) -{SELFPARAM(); +spawnfunc(worldspawn) +{ float fd, l, j, n; string s; @@ -608,8 +608,6 @@ void spawnfunc_worldspawn (void) CALL_ACCUMULATED_FUNCTION(RegisterNotifications); CALL_ACCUMULATED_FUNCTION(RegisterDeathtypes); - initialize_minigames(); - ServerProgsDB = db_load(strcat("server.db", autocvar_sessionid)); TemporaryDB = db_create(); @@ -920,8 +918,8 @@ void spawnfunc_worldspawn (void) world_initialized = 1; } -void spawnfunc_light (void) -{SELFPARAM(); +spawnfunc(light) +{ //makestatic (self); // Who the f___ did that? remove(self); } diff --git a/qcsrc/server/item_key.qc b/qcsrc/server/item_key.qc index 6a1527745e..713fbf6c3d 100644 --- a/qcsrc/server/item_key.qc +++ b/qcsrc/server/item_key.qc @@ -148,8 +148,8 @@ This is the only correct way to put keys on the map! itemkeys MUST always have exactly one bit set. */ -void spawnfunc_item_key() -{SELFPARAM(); +spawnfunc(item_key) +{ string _netname; vector _colormod; @@ -234,7 +234,7 @@ void spawnfunc_item_key() self.message = strzone(strcat("You've picked up the ", self.netname, "!")); if (self.noise == "") - self.noise = "misc/itempickup.wav"; + self.noise = SND(ITEMPICKUP); // save the name for later item_keys_names[lowestbit(self.itemkeys)] = self.netname; @@ -255,11 +255,11 @@ FLOATING: the item will float in air, instead of aligning to the floor by fallin ---------NOTES---------- Don't use this entity on new maps! Use item_key instead. */ -void spawnfunc_item_key1(void) -{SELFPARAM(); - self.classname = "item_key"; - self.itemkeys = ITEM_KEY_BIT(1); - spawnfunc_item_key(); +spawnfunc(item_key1) +{ + this.classname = "item_key"; + this.itemkeys = ITEM_KEY_BIT(1); + spawnfunc_item_key(this); }; /*QUAKED item_key2 (0 .5 .8) (-16 -16 -24) (16 16 32) FLOATING @@ -274,9 +274,9 @@ FLOATING: the item will float in air, instead of aligning to the floor by fallin ---------NOTES---------- Don't use this entity on new maps! Use item_key instead. */ -void spawnfunc_item_key2(void) -{SELFPARAM(); - self.classname = "item_key"; - self.itemkeys = ITEM_KEY_BIT(0); - spawnfunc_item_key(); +spawnfunc(item_key2) +{ + this.classname = "item_key"; + this.itemkeys = ITEM_KEY_BIT(0); + spawnfunc_item_key(this); }; diff --git a/qcsrc/server/miscfunctions.qc b/qcsrc/server/miscfunctions.qc index eb8277abc2..a6164747db 100644 --- a/qcsrc/server/miscfunctions.qc +++ b/qcsrc/server/miscfunctions.qc @@ -299,6 +299,8 @@ string formatmessage(string msg) case "x": replacement = ((cursor_ent.netname == "" || !cursor_ent) ? "nothing" : cursor_ent.netname); break; case "s": replacement = ftos(vlen(self.velocity - self.velocity_z * '0 0 1')); break; case "S": replacement = ftos(vlen(self.velocity)); break; + case "t": replacement = seconds_tostring(ceil(max(0, autocvar_timelimit * 60 + game_starttime - time))); break; + case "T": replacement = seconds_tostring(floor(time - game_starttime)); break; default: { MUTATOR_CALLHOOK(FormatMessage, escape, replacement, msg); @@ -764,14 +766,6 @@ float sound_allowed(float destin, entity e) return true; } -#undef sound -void sound(entity e, float chan, string samp, float vol, float attenu) -{ - if (!sound_allowed(MSG_BROADCAST, e)) - return; - sound7(e, chan, samp, vol, attenu, 0, 0); -} - void soundtoat(float _dest, entity e, vector o, float chan, string samp, float vol, float attenu) { float entno, idx; @@ -847,7 +841,7 @@ void stopsoundto(float _dest, entity e, float chan) if (entno >= 8192 || chan < 0 || chan > 7) { float idx, sflags; - idx = precache_sound_index("misc/null.wav"); + idx = precache_sound_index(SND(Null)); sflags = SND_LARGEENTITY; if (idx >= 256) sflags |= SND_LARGESOUND; @@ -895,7 +889,7 @@ float spamsound(entity e, float chan, string samp, float vol, float _atten) if (time > e.spamtime) { e.spamtime = time; - sound(e, chan, samp, vol, _atten); + _sound(e, chan, samp, vol, _atten); return true; } return false; @@ -920,7 +914,7 @@ void play2all(string samp) if (autocvar_bot_sound_monopoly) return; - sound(world, CH_INFO, samp, VOL_BASE, ATTEN_NONE); + _sound(world, CH_INFO, samp, VOL_BASE, ATTEN_NONE); } void PrecachePlayerSounds(string f); @@ -1013,36 +1007,8 @@ void precache() } // gore and miscellaneous sounds - //precache_sound ("misc/h2ohit.wav"); - precache_sound ("misc/armorimpact.wav"); - precache_sound ("misc/bodyimpact1.wav"); - precache_sound ("misc/bodyimpact2.wav"); - precache_sound ("misc/gib.wav"); - precache_sound ("misc/gib_splat01.wav"); - precache_sound ("misc/gib_splat02.wav"); - precache_sound ("misc/gib_splat03.wav"); - precache_sound ("misc/gib_splat04.wav"); PrecacheGlobalSound((globalsound_fall = "misc/hitground 4")); PrecacheGlobalSound((globalsound_metalfall = "misc/metalhitground 4")); - precache_sound ("misc/null.wav"); - precache_sound ("misc/spawn.wav"); - precache_sound ("misc/talk.wav"); - precache_sound ("misc/teleport.wav"); - precache_sound ("misc/poweroff.wav"); - precache_sound ("player/lava.wav"); - precache_sound ("player/slime.wav"); - - // common weapon precaches - precache_sound (W_Sound("reload")); // until weapons have individual reload sounds, precache the reload sound here - precache_sound (W_Sound("weapon_switch")); - precache_sound (W_Sound("weaponpickup")); - precache_sound (W_Sound("unavailable")); - precache_sound (W_Sound("dryfire")); - if (g_grappling_hook) - { - precache_sound (W_Sound("hook_fire")); // hook - precache_sound (W_Sound("hook_impact")); // hook - } #if 0 // Disabled this code because it simply does not work (e.g. ignores bgmvolume, overlaps with "cd loop" controlled tracks). @@ -1057,8 +1023,6 @@ void precache() ambientsound ('0 0 0', self.noise, VOL_BASE, ATTEN_NONE); } #endif - -#include "precache-for-csqc.inc" } @@ -1470,7 +1434,7 @@ string uid2name(string myuid) { return s; } -float MoveToRandomMapLocation(entity e, float goodcontents, float badcontents, float badsurfaceflags, float attempts, float maxaboveground, float minviewdistance) +float MoveToRandomLocationWithinBounds(entity e, vector boundmin, vector boundmax, float goodcontents, float badcontents, float badsurfaceflags, float attempts, float maxaboveground, float minviewdistance) { float m, i; vector start, org, delta, end, enddown, mstart; @@ -1479,8 +1443,8 @@ float MoveToRandomMapLocation(entity e, float goodcontents, float badcontents, f m = e.dphitcontentsmask; e.dphitcontentsmask = goodcontents | badcontents; - org = world.mins; - delta = world.maxs - world.mins; + org = boundmin; + delta = boundmax - boundmin; start = end = org; @@ -1581,6 +1545,11 @@ float MoveToRandomMapLocation(entity e, float goodcontents, float badcontents, f return false; } +float MoveToRandomMapLocation(entity e, float goodcontents, float badcontents, float badsurfaceflags, float attempts, float maxaboveground, float minviewdistance) +{ + return MoveToRandomLocationWithinBounds(e, world.mins, world.maxs, goodcontents, badcontents, badsurfaceflags, attempts, maxaboveground, minviewdistance); +} + void write_recordmarker(entity pl, float tstart, float dt) { GameLogEcho(strcat(":recordset:", ftos(pl.playerid), ":", ftos(dt))); diff --git a/qcsrc/server/miscfunctions.qh b/qcsrc/server/miscfunctions.qh index f1f003820d..fc3583bb16 100644 --- a/qcsrc/server/miscfunctions.qh +++ b/qcsrc/server/miscfunctions.qh @@ -8,7 +8,7 @@ #include "../common/constants.qh" #include "../common/mapinfo.qh" -#include "../common/turrets/turrets.qh" +#include "../common/turrets/all.qh" #ifdef RELEASE #define cvar_string_normal builtin_cvar_string @@ -106,6 +106,8 @@ float LostMovetypeFollow(entity ent); string uid2name(string myuid); +float MoveToRandomLocationWithinBounds(entity e, vector boundmin, vector boundmax, float goodcontents, float badcontents, float badsurfaceflags, float attempts, float maxaboveground, float minviewdistance); + float MoveToRandomMapLocation(entity e, float goodcontents, float badcontents, float badsurfaceflags, float attempts, float maxaboveground, float minviewdistance); string NearestLocation(vector p); diff --git a/qcsrc/server/mutators/events.qh b/qcsrc/server/mutators/events.qh index 881938f068..1492b9f6af 100644 --- a/qcsrc/server/mutators/events.qh +++ b/qcsrc/server/mutators/events.qh @@ -257,7 +257,7 @@ MUTATOR_HOOKABLE(MonsterRespawn, EV_MonsterRespawn); /**/ i(entity, other) \ /**/ o(entity, other) \ /**/ -.void() monster_loot; +.void(entity this) monster_loot; MUTATOR_HOOKABLE(MonsterDropItem, EV_MonsterDropItem); /** diff --git a/qcsrc/server/mutators/gamemode_assault.qc b/qcsrc/server/mutators/gamemode_assault.qc index 844043222a..1a10e3c6c9 100644 --- a/qcsrc/server/mutators/gamemode_assault.qc +++ b/qcsrc/server/mutators/gamemode_assault.qc @@ -251,24 +251,24 @@ void assault_new_round() } // spawnfuncs -void spawnfunc_info_player_attacker() -{SELFPARAM(); +spawnfunc(info_player_attacker) +{ if (!g_assault) { remove(self); return; } self.team = NUM_TEAM_1; // red, gets swapped every round - spawnfunc_info_player_deathmatch(); + spawnfunc_info_player_deathmatch(this); } -void spawnfunc_info_player_defender() -{SELFPARAM(); +spawnfunc(info_player_defender) +{ if (!g_assault) { remove(self); return; } self.team = NUM_TEAM_2; // blue, gets swapped every round - spawnfunc_info_player_deathmatch(); + spawnfunc_info_player_deathmatch(this); } -void spawnfunc_target_objective() -{SELFPARAM(); +spawnfunc(target_objective) +{ if (!g_assault) { remove(self); return; } self.classname = "target_objective"; @@ -278,8 +278,8 @@ void spawnfunc_target_objective() self.spawn_evalfunc = target_objective_spawn_evalfunc; } -void spawnfunc_target_objective_decrease() -{SELFPARAM(); +spawnfunc(target_objective_decrease) +{ if (!g_assault) { remove(self); return; } self.classname = "target_objective_decrease"; @@ -296,8 +296,8 @@ void spawnfunc_target_objective_decrease() } // destructible walls that can be used to trigger target_objective_decrease -void spawnfunc_func_assault_destructible() -{SELFPARAM(); +spawnfunc(func_assault_destructible) +{ if (!g_assault) { remove(self); return; } self.spawnflags = 3; @@ -308,11 +308,11 @@ void spawnfunc_func_assault_destructible() else self.team = NUM_TEAM_1; - spawnfunc_func_breakable(); + spawnfunc_func_breakable(this); } -void spawnfunc_func_assault_wall() -{SELFPARAM(); +spawnfunc(func_assault_wall) +{ if (!g_assault) { remove(self); return; } self.classname = "func_assault_wall"; @@ -324,8 +324,8 @@ void spawnfunc_func_assault_wall() InitializeEntity(self, assault_setenemytoobjective, INITPRIO_FINDTARGET); } -void spawnfunc_target_assault_roundend() -{SELFPARAM(); +spawnfunc(target_assault_roundend) +{ if (!g_assault) { remove(self); return; } self.winning = 0; // round not yet won by attackers @@ -335,8 +335,8 @@ void spawnfunc_target_assault_roundend() self.reset = target_assault_roundend_reset; } -void spawnfunc_target_assault_roundstart() -{SELFPARAM(); +spawnfunc(target_assault_roundstart) +{ if (!g_assault) { remove(self); return; } assault_attacker_team = NUM_TEAM_1; diff --git a/qcsrc/server/mutators/gamemode_ctf.qc b/qcsrc/server/mutators/gamemode_ctf.qc index 060752c111..108b8dda6f 100644 --- a/qcsrc/server/mutators/gamemode_ctf.qc +++ b/qcsrc/server/mutators/gamemode_ctf.qc @@ -239,7 +239,7 @@ void ctf_Handle_Drop(entity flag, entity player, int droptype) // messages and sounds Send_Notification(NOTIF_ALL, world, MSG_INFO, ((flag.team) ? APP_TEAM_ENT_4(flag, INFO_CTF_LOST_) : INFO_CTF_LOST_NEUTRAL), player.netname); - sound(flag, CH_TRIGGER, flag.snd_flag_dropped, VOL_BASE, ATTEN_NONE); + _sound(flag, CH_TRIGGER, flag.snd_flag_dropped, VOL_BASE, ATTEN_NONE); ctf_EventLog("dropped", player.team, player); // scoring @@ -296,7 +296,7 @@ void ctf_Handle_Retrieve(entity flag, entity player) flag.ctf_status = FLAG_CARRY; // messages and sounds - sound(player, CH_TRIGGER, flag.snd_flag_pass, VOL_BASE, ATTEN_NORM); + _sound(player, CH_TRIGGER, flag.snd_flag_pass, VOL_BASE, ATTEN_NORM); ctf_EventLog("receive", flag.team, player); FOR_EACH_REALPLAYER(tmp_player) @@ -363,7 +363,7 @@ void ctf_Handle_Throw(entity player, entity receiver, int droptype) flag.ctf_status = FLAG_PASSING; // other - sound(player, CH_TRIGGER, flag.snd_flag_touch, VOL_BASE, ATTEN_NORM); + _sound(player, CH_TRIGGER, flag.snd_flag_touch, VOL_BASE, ATTEN_NORM); WarpZone_TrailParticles(world, _particleeffectnum(flag.passeffect), player.origin, targ_origin); ctf_EventLog("pass", flag.team, player); break; @@ -436,7 +436,7 @@ void ctf_Handle_Capture(entity flag, entity toucher, int capturetype) // messages and sounds Send_Notification(NOTIF_ONE, player, MSG_CENTER, ((enemy_flag.team) ? APP_TEAM_ENT_4(enemy_flag, CENTER_CTF_CAPTURE_) : CENTER_CTF_CAPTURE_NEUTRAL)); ctf_CaptureRecord(enemy_flag, player); - sound(player, CH_TRIGGER, ((ctf_oneflag) ? player_team_flag.snd_flag_capture : ((DIFF_TEAM(player, flag)) ? enemy_flag.snd_flag_capture : flag.snd_flag_capture)), VOL_BASE, ATTEN_NONE); + _sound(player, CH_TRIGGER, ((ctf_oneflag) ? player_team_flag.snd_flag_capture : ((DIFF_TEAM(player, flag)) ? enemy_flag.snd_flag_capture : flag.snd_flag_capture)), VOL_BASE, ATTEN_NONE); switch(capturetype) { @@ -485,7 +485,7 @@ void ctf_Handle_Return(entity flag, entity player) Send_Notification(NOTIF_ONE, player, MSG_CENTER, APP_TEAM_ENT_4(flag, CENTER_CTF_RETURN_)); Send_Notification(NOTIF_ALL, world, MSG_INFO, APP_TEAM_ENT_4(flag, INFO_CTF_RETURN_), player.netname); } - sound(player, CH_TRIGGER, flag.snd_flag_returned, VOL_BASE, ATTEN_NONE); + _sound(player, CH_TRIGGER, flag.snd_flag_returned, VOL_BASE, ATTEN_NONE); ctf_EventLog("return", flag.team, player); // scoring @@ -573,7 +573,7 @@ void ctf_Handle_Pickup(entity flag, entity player, int pickuptype) else Send_Notification(NOTIF_ONE, tmp_entity, MSG_CHOICE, ((SAME_TEAM(flag, player)) ? CHOICE_CTF_PICKUP_ENEMY_TEAM : CHOICE_CTF_PICKUP_ENEMY), Team_ColorCode(player.team), player.netname); - sound(player, CH_TRIGGER, flag.snd_flag_taken, VOL_BASE, ATTEN_NONE); + _sound(player, CH_TRIGGER, flag.snd_flag_taken, VOL_BASE, ATTEN_NONE); // scoring PlayerScore_Add(player, SP_CTF_PICKUPS, 1); @@ -641,7 +641,7 @@ void ctf_CheckFlagReturn(entity flag, int returntype) case RETURN_TIMEOUT: { Send_Notification(NOTIF_ALL, world, MSG_INFO, ((flag.team) ? APP_TEAM_ENT_4(flag, INFO_CTF_FLAGRETURN_TIMEOUT_) : INFO_CTF_FLAGRETURN_TIMEOUT_NEUTRAL)); break; } } - sound(flag, CH_TRIGGER, flag.snd_flag_respawn, VOL_BASE, ATTEN_NONE); + _sound(flag, CH_TRIGGER, flag.snd_flag_respawn, VOL_BASE, ATTEN_NONE); ctf_EventLog("returned", flag.team, world); ctf_RespawnFlag(flag); } @@ -941,7 +941,7 @@ void ctf_FlagTouch() if(time > self.wait) // if we haven't in a while, play a sound/effect { Send_Effect_(self.toucheffect, self.origin, '0 0 0', 1); - sound(self, CH_TRIGGER, self.snd_flag_touch, VOL_BASE, ATTEN_NORM); + _sound(self, CH_TRIGGER, self.snd_flag_touch, VOL_BASE, ATTEN_NORM); self.wait = time + FLAG_TOUCHRATE; } return; @@ -1091,7 +1091,6 @@ void set_flag_string(entity flag, .string field, string value, string teamname) void ctf_FlagSetup(int teamnumber, entity flag) // called when spawning a flag entity on the map as a spawnfunc {SELFPARAM(); // declarations - string teamname = Static_Team_ColorName_Lower(teamnumber); setself(flag); // for later usage with droptofloor() // main setup @@ -1124,6 +1123,7 @@ void ctf_FlagSetup(int teamnumber, entity flag) // called when spawning a flag e flag.nextthink = time + FLAG_THINKRATE; flag.ctf_status = FLAG_BASE; + string teamname = Static_Team_ColorName_Lower(teamnumber); // appearence if(!flag.scale) { flag.scale = FLAG_SCALE; } if(flag.skin == 0) { flag.skin = cvar(sprintf("g_ctf_flag_%s_skin", teamname)); } @@ -1133,22 +1133,18 @@ void ctf_FlagSetup(int teamnumber, entity flag) // called when spawning a flag e set_flag_string(flag, capeffect, "%s_cap", teamname); // sounds - set_flag_string(flag, snd_flag_taken, "ctf/%s_taken.wav", teamname); - set_flag_string(flag, snd_flag_returned, "ctf/%s_returned.wav", teamname); - set_flag_string(flag, snd_flag_capture, "ctf/%s_capture.wav", teamname); - set_flag_string(flag, snd_flag_dropped, "ctf/%s_dropped.wav", teamname); - if(flag.snd_flag_respawn == "") { flag.snd_flag_respawn = "ctf/flag_respawn.wav"; } // if there is ever a team-based sound for this, update the code to match. - if(flag.snd_flag_touch == "") { flag.snd_flag_touch = "ctf/touch.wav"; } // again has no team-based sound - if(flag.snd_flag_pass == "") { flag.snd_flag_pass = "ctf/pass.wav"; } // same story here - - // precache - precache_sound(flag.snd_flag_taken); - precache_sound(flag.snd_flag_returned); - precache_sound(flag.snd_flag_capture); + flag.snd_flag_taken = SND(CTF_TAKEN(teamnumber)); + flag.snd_flag_returned = SND(CTF_RETURNED(teamnumber)); + flag.snd_flag_capture = SND(CTF_CAPTURE(teamnumber)); + flag.snd_flag_dropped = SND(CTF_DROPPED(teamnumber)); + if (flag.snd_flag_respawn == "") flag.snd_flag_respawn = SND(CTF_RESPAWN); // if there is ever a team-based sound for this, update the code to match. precache_sound(flag.snd_flag_respawn); - precache_sound(flag.snd_flag_dropped); + if (flag.snd_flag_touch == "") flag.snd_flag_touch = SND(CTF_TOUCH); // again has no team-based sound precache_sound(flag.snd_flag_touch); + if (flag.snd_flag_pass == "") flag.snd_flag_pass = SND(CTF_PASS); // same story here precache_sound(flag.snd_flag_pass); + + // precache precache_model(flag.model); // appearence @@ -2251,8 +2247,8 @@ Keys: "noise3" sound played when flag is lost in the field and respawns itself... "noise4" sound played when flag is dropped by a player... "noise5" sound played when flag touches the ground... */ -void spawnfunc_item_flag_team1() -{SELFPARAM(); +spawnfunc(item_flag_team1) +{ if(!g_ctf) { remove(self); return; } ctf_FlagSetup(NUM_TEAM_1, self); @@ -2269,8 +2265,8 @@ Keys: "noise3" sound played when flag is lost in the field and respawns itself... "noise4" sound played when flag is dropped by a player... "noise5" sound played when flag touches the ground... */ -void spawnfunc_item_flag_team2() -{SELFPARAM(); +spawnfunc(item_flag_team2) +{ if(!g_ctf) { remove(self); return; } ctf_FlagSetup(NUM_TEAM_2, self); @@ -2287,8 +2283,8 @@ Keys: "noise3" sound played when flag is lost in the field and respawns itself... "noise4" sound played when flag is dropped by a player... "noise5" sound played when flag touches the ground... */ -void spawnfunc_item_flag_team3() -{SELFPARAM(); +spawnfunc(item_flag_team3) +{ if(!g_ctf) { remove(self); return; } ctf_FlagSetup(NUM_TEAM_3, self); @@ -2305,8 +2301,8 @@ Keys: "noise3" sound played when flag is lost in the field and respawns itself... "noise4" sound played when flag is dropped by a player... "noise5" sound played when flag touches the ground... */ -void spawnfunc_item_flag_team4() -{SELFPARAM(); +spawnfunc(item_flag_team4) +{ if(!g_ctf) { remove(self); return; } ctf_FlagSetup(NUM_TEAM_4, self); @@ -2323,8 +2319,8 @@ Keys: "noise3" sound played when flag is lost in the field and respawns itself... "noise4" sound played when flag is dropped by a player... "noise5" sound played when flag touches the ground... */ -void spawnfunc_item_flag_neutral() -{SELFPARAM(); +spawnfunc(item_flag_neutral) +{ if(!g_ctf) { remove(self); return; } if(!cvar("g_ctf_oneflag")) { remove(self); return; } @@ -2337,8 +2333,8 @@ Note: If you use spawnfunc_ctf_team entities you must define at least 2! Howeve Keys: "netname" Name of the team (for example Red, Blue, Green, Yellow, Life, Death, Offense, Defense, etc)... "cnt" Scoreboard color of the team (for example 4 is red and 13 is blue)... */ -void spawnfunc_ctf_team() -{SELFPARAM(); +spawnfunc(ctf_team) +{ if(!g_ctf) { remove(self); return; } self.classname = "ctf_team"; @@ -2346,15 +2342,15 @@ void spawnfunc_ctf_team() } // compatibility for quake maps -void spawnfunc_team_CTF_redflag() { spawnfunc_item_flag_team1(); } -void spawnfunc_team_CTF_blueflag() { spawnfunc_item_flag_team2(); } -void spawnfunc_team_CTF_redplayer() { spawnfunc_info_player_team1(); } -void spawnfunc_team_CTF_blueplayer() { spawnfunc_info_player_team2(); } -void spawnfunc_team_CTF_redspawn() { spawnfunc_info_player_team1(); } -void spawnfunc_team_CTF_bluespawn() { spawnfunc_info_player_team2(); } +spawnfunc(team_CTF_redflag) { spawnfunc_item_flag_team1(this); } +spawnfunc(team_CTF_blueflag) { spawnfunc_item_flag_team2(this); } +spawnfunc(team_CTF_redplayer) { spawnfunc_info_player_team1(this); } +spawnfunc(team_CTF_blueplayer) { spawnfunc_info_player_team2(this); } +spawnfunc(team_CTF_redspawn) { spawnfunc_info_player_team1(this); } +spawnfunc(team_CTF_bluespawn) { spawnfunc_info_player_team2(this); } -void team_CTF_neutralflag() { spawnfunc_item_flag_neutral(); } -void team_neutralobelisk() { spawnfunc_item_flag_neutral(); } +void team_CTF_neutralflag() { SELFPARAM(); spawnfunc_item_flag_neutral(self); } +void team_neutralobelisk() { SELFPARAM(); spawnfunc_item_flag_neutral(self); } // ============== @@ -2378,15 +2374,12 @@ void ctf_ScoreRules(int teams) // code from here on is just to support maps that don't have flag and team entities void ctf_SpawnTeam (string teamname, int teamcolor) -{SELFPARAM(); - setself(spawn()); - self.classname = "ctf_team"; - self.netname = teamname; - self.cnt = teamcolor; - - spawnfunc_ctf_team(); - - setself(this); +{ + entity this = new(ctf_team); + this.netname = teamname; + this.cnt = teamcolor; + this.spawnfunc_checked = true; + WITH(entity, self, this, spawnfunc_ctf_team(this)); } void ctf_DelayedInit() // Do this check with a delay so we can wait for teams to be set up. diff --git a/qcsrc/server/mutators/gamemode_domination.qc b/qcsrc/server/mutators/gamemode_domination.qc index 6fa778309f..34b2875105 100644 --- a/qcsrc/server/mutators/gamemode_domination.qc +++ b/qcsrc/server/mutators/gamemode_domination.qc @@ -61,9 +61,9 @@ void dompoint_captured () if (head.noise != "") if(self.enemy) - sound(self.enemy, CH_TRIGGER, head.noise, VOL_BASE, ATTEN_NORM); + _sound(self.enemy, CH_TRIGGER, head.noise, VOL_BASE, ATTEN_NORM); else - sound(self, CH_TRIGGER, head.noise, VOL_BASE, ATTEN_NORM); + _sound(self, CH_TRIGGER, head.noise, VOL_BASE, ATTEN_NORM); if (head.noise1 != "") play2all(head.noise1); @@ -447,8 +447,8 @@ MUTATOR_HOOKFUNCTION(dom_BotRoles) /*QUAKED spawnfunc_dom_controlpoint (0 .5 .8) (-16 -16 -24) (16 16 32) Control point for Domination gameplay. */ -void spawnfunc_dom_controlpoint() -{SELFPARAM(); +spawnfunc(dom_controlpoint) +{ if(!g_domination) { remove(self); @@ -492,8 +492,8 @@ Keys: (this is a global sound, like "Red team has captured a control point") */ -void spawnfunc_dom_team() -{SELFPARAM(); +spawnfunc(dom_team) +{ if(!g_domination || autocvar_g_domination_teams_override >= 2) { remove(self); @@ -567,26 +567,27 @@ void dom_spawnteam (string teamname, float teamcolor, string pointmodel, float p setself(this); } +void _spawnfunc_dom_controlpoint() { SELFPARAM(); spawnfunc_dom_controlpoint(self); } void dom_spawnpoint(vector org) {SELFPARAM(); setself(spawn()); self.classname = "dom_controlpoint"; - self.think = spawnfunc_dom_controlpoint; + self.think = _spawnfunc_dom_controlpoint; self.nextthink = time; setorigin(self, org); - spawnfunc_dom_controlpoint(); + spawnfunc_dom_controlpoint(this); setself(this); } // spawn some default teams if the map is not set up for domination void dom_spawnteams(float teams) { - dom_spawnteam("Red", NUM_TEAM_1-1, "models/domination/dom_red.md3", 0, "domination/claim.wav", "", "Red team has captured a control point"); - dom_spawnteam("Blue", NUM_TEAM_2-1, "models/domination/dom_blue.md3", 0, "domination/claim.wav", "", "Blue team has captured a control point"); + dom_spawnteam("Red", NUM_TEAM_1-1, "models/domination/dom_red.md3", 0, SND(DOM_CLAIM), "", "Red team has captured a control point"); + dom_spawnteam("Blue", NUM_TEAM_2-1, "models/domination/dom_blue.md3", 0, SND(DOM_CLAIM), "", "Blue team has captured a control point"); if(teams >= 3) - dom_spawnteam("Yellow", NUM_TEAM_3-1, "models/domination/dom_yellow.md3", 0, "domination/claim.wav", "", "Yellow team has captured a control point"); + dom_spawnteam("Yellow", NUM_TEAM_3-1, "models/domination/dom_yellow.md3", 0, SND(DOM_CLAIM), "", "Yellow team has captured a control point"); if(teams >= 4) - dom_spawnteam("Pink", NUM_TEAM_4-1, "models/domination/dom_pink.md3", 0, "domination/claim.wav", "", "Pink team has captured a control point"); + dom_spawnteam("Pink", NUM_TEAM_4-1, "models/domination/dom_pink.md3", 0, SND(DOM_CLAIM), "", "Pink team has captured a control point"); dom_spawnteam("", 0, "models/domination/dom_unclaimed.md3", 0, "", "", ""); } @@ -622,8 +623,6 @@ void dom_DelayedInit() // Do this check with a delay so we can wait for teams to void dom_Initialize() { - precache_sound("domination/claim.wav"); - InitializeEntity(world, dom_DelayedInit, INITPRIO_GAMETYPE); } diff --git a/qcsrc/server/mutators/gamemode_invasion.qc b/qcsrc/server/mutators/gamemode_invasion.qc index 412e7bd540..5dbe12d22d 100644 --- a/qcsrc/server/mutators/gamemode_invasion.qc +++ b/qcsrc/server/mutators/gamemode_invasion.qc @@ -6,8 +6,8 @@ #include "../../common/monsters/spawn.qh" #include "../../common/monsters/sv_monsters.qh" -void spawnfunc_invasion_spawnpoint() -{SELFPARAM(); +spawnfunc(invasion_spawnpoint) +{ if(!g_invasion) { remove(self); return; } self.classname = "invasion_spawnpoint"; diff --git a/qcsrc/server/mutators/gamemode_keepaway.qc b/qcsrc/server/mutators/gamemode_keepaway.qc index 6d7c8c9901..b265e41d3d 100644 --- a/qcsrc/server/mutators/gamemode_keepaway.qc +++ b/qcsrc/server/mutators/gamemode_keepaway.qc @@ -53,7 +53,7 @@ void ka_RespawnBall() // runs whenever the ball needs to be relocated WaypointSprite_Spawn(WP_KaBall, 0, 0, self, '0 0 64', world, self.team, self, waypointsprite_attachedforcarrier, false, RADARICON_FLAGCARRIER); WaypointSprite_Ping(self.waypointsprite_attachedforcarrier); - sound(self, CH_TRIGGER, "keepaway/respawn.wav", VOL_BASE, ATTEN_NONE); // ATTEN_NONE (it's a sound intended to be heard anywhere) + sound(self, CH_TRIGGER, SND_KA_RESPAWN, VOL_BASE, ATTEN_NONE); // ATTEN_NONE (it's a sound intended to be heard anywhere) } void ka_TimeScoring() @@ -82,7 +82,7 @@ void ka_TouchEvent() // runs any time that the ball comes in contact with someth if (!IS_PLAYER(other)) { // The ball just touched an object, most likely the world Send_Effect(EFFECT_BALL_SPARKS, self.origin, '0 0 0', 1); - sound(self, CH_TRIGGER, "keepaway/touch.wav", VOL_BASE, ATTEN_NORM); + sound(self, CH_TRIGGER, SND_KA_TOUCH, VOL_BASE, ATTEN_NORM); return; } else if(self.wait > time) { return; } @@ -112,7 +112,7 @@ void ka_TouchEvent() // runs any time that the ball comes in contact with someth Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_KEEPAWAY_PICKUP, other.netname); Send_Notification(NOTIF_ALL_EXCEPT, other, MSG_CENTER, CENTER_KEEPAWAY_PICKUP, other.netname); Send_Notification(NOTIF_ONE, other, MSG_CENTER, CENTER_KEEPAWAY_PICKUP_SELF); - sound(self.owner, CH_TRIGGER, "keepaway/pickedup.wav", VOL_BASE, ATTEN_NONE); // ATTEN_NONE (it's a sound intended to be heard anywhere) + sound(self.owner, CH_TRIGGER, SND_KA_PICKEDUP, VOL_BASE, ATTEN_NONE); // ATTEN_NONE (it's a sound intended to be heard anywhere) // scoring PlayerScore_Add(other, SP_KEEPAWAY_PICKUPS, 1); @@ -154,7 +154,7 @@ void ka_DropEvent(entity plyr) // runs any time that a player is supposed to los ka_EventLog("dropped", plyr); Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_KEEPAWAY_DROPPED, plyr.netname); Send_Notification(NOTIF_ALL, world, MSG_CENTER, CENTER_KEEPAWAY_DROPPED, plyr.netname); - sound(other, CH_TRIGGER, "keepaway/dropped.wav", VOL_BASE, ATTEN_NONE); // ATTEN_NONE (it's a sound intended to be heard anywhere) + sound(other, CH_TRIGGER, SND_KA_DROPPED, VOL_BASE, ATTEN_NONE); // ATTEN_NONE (it's a sound intended to be heard anywhere) // scoring // PlayerScore_Add(plyr, SP_KEEPAWAY_DROPS, 1); Not anymore, this is 100% the same as pickups and is useless. @@ -428,11 +428,6 @@ void ka_Initialize() // run at the start of a match, initiates game mode if(!g_keepaway) return; - precache_sound("keepaway/pickedup.wav"); - precache_sound("keepaway/dropped.wav"); - precache_sound("keepaway/respawn.wav"); - precache_sound("keepaway/touch.wav"); - ka_ScoreRules(); ka_SpawnBall(); } diff --git a/qcsrc/server/mutators/gamemode_keyhunt.qc b/qcsrc/server/mutators/gamemode_keyhunt.qc index 56e55d86d9..c02b42513b 100644 --- a/qcsrc/server/mutators/gamemode_keyhunt.qc +++ b/qcsrc/server/mutators/gamemode_keyhunt.qc @@ -63,12 +63,6 @@ float kh_interferemsg_time, kh_interferemsg_team; .float kh_previous_owner_playerid; .float kh_cp_duration; -string kh_sound_capture = "kh/capture.wav"; -string kh_sound_destroy = "kh/destroy.wav"; -string kh_sound_drop = "kh/drop.wav"; -string kh_sound_collect = "kh/collect.wav"; -string kh_sound_alarm = "kh/alarm.wav"; // the new siren/alarm - float kh_key_dropped, kh_key_carried; const float ST_KH_CAPS = 1; @@ -430,7 +424,7 @@ void kh_Key_Damage(entity inflictor, entity attacker, float damage, int deathtyp void kh_Key_Collect(entity key, entity player) //a player picks up a dropped key { - sound(player, CH_TRIGGER, kh_sound_collect, VOL_BASE, ATTEN_NORM); + sound(player, CH_TRIGGER, SND_KH_COLLECT, VOL_BASE, ATTEN_NORM); if(key.kh_dropperteam != player.team) { @@ -575,7 +569,7 @@ void kh_WinnerTeam(float teem) // runs when a team wins // Samual: Teem?.... TE midpoint = midpoint * (1 / kh_teams); te_customflash(midpoint, 1000, 1, Team_ColorRGB(teem) * 0.5 + '0.5 0.5 0.5'); // make the color >=0.5 in each component - play2all(kh_sound_capture); + play2all(SND(KH_CAPTURE)); kh_FinishRound(); } @@ -664,7 +658,7 @@ void kh_LoserTeam(float teem, entity lostkey) // runs when a player pushes a fl Send_Notification(NOTIF_ALL, world, MSG_INFO, APP_TEAM_ENT_4(lostkey, INFO_KEYHUNT_LOST_), lostkey.kh_previous_owner.netname); - play2all(kh_sound_destroy); + play2all(SND(KH_DESTROY)); te_tarexplosion(lostkey.origin); kh_FinishRound(); @@ -696,7 +690,7 @@ void kh_Key_Think() // runs all the time { if(self.siren_time < time) { - sound(self.owner, CH_TRIGGER, kh_sound_alarm, VOL_BASE, ATTEN_NORM); // play a simple alarm + sound(self.owner, CH_TRIGGER, SND_KH_ALARM, VOL_BASE, ATTEN_NORM); // play a simple alarm self.siren_time = time + 2.5; // repeat every 2.5 seconds } @@ -832,7 +826,7 @@ void kh_Key_DropOne(entity key) key.pushltime = time + autocvar_g_balance_keyhunt_protecttime; key.kh_dropperteam = key.team; - sound(player, CH_TRIGGER, kh_sound_drop, VOL_BASE, ATTEN_NORM); + sound(player, CH_TRIGGER, SND_KH_DROP, VOL_BASE, ATTEN_NORM); } void kh_Key_DropAll(entity player, float suicide) // runs whenever a player dies @@ -858,7 +852,7 @@ void kh_Key_DropAll(entity player, float suicide) // runs whenever a player dies if(suicide) key.kh_dropperteam = player.team; } - sound(player, CH_TRIGGER, kh_sound_drop, VOL_BASE, ATTEN_NORM); + sound(player, CH_TRIGGER, SND_KH_DROP, VOL_BASE, ATTEN_NORM); } } @@ -1003,12 +997,6 @@ float kh_HandleFrags(entity attacker, entity targ, float f) // adds to the play void kh_Initialize() // sets up th KH environment { - precache_sound(kh_sound_capture); - precache_sound(kh_sound_destroy); - precache_sound(kh_sound_drop); - precache_sound(kh_sound_collect); - precache_sound(kh_sound_alarm); // the new siren - // setup variables kh_teams = autocvar_g_keyhunt_teams_override; if(kh_teams < 2) diff --git a/qcsrc/server/mutators/gamemode_nexball.qc b/qcsrc/server/mutators/gamemode_nexball.qc index e3480a42e0..3675831acc 100644 --- a/qcsrc/server/mutators/gamemode_nexball.qc +++ b/qcsrc/server/mutators/gamemode_nexball.qc @@ -207,7 +207,7 @@ void InitBall(void) self.teamtime = 0; self.pusher = world; self.team = false; - sound(self, CH_TRIGGER, self.noise1, VOL_BASE, ATTEN_NORM); + _sound(self, CH_TRIGGER, self.noise1, VOL_BASE, ATTEN_NORM); WaypointSprite_Ping(self.waypointsprite_attachedforcarrier); LogNB("init", world); } @@ -254,7 +254,7 @@ void football_touch(void) { if(time > self.lastground + 0.1) { - sound(self, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NORM); + _sound(self, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NORM); self.lastground = time; } if(vlen(self.velocity) && !self.cnt) @@ -310,7 +310,7 @@ void basketball_touch(void) } else if(other.solid == SOLID_BSP) { - sound(self, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NORM); + _sound(self, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NORM); if(vlen(self.velocity) && !self.cnt) self.nextthink = min(time + autocvar_g_nexball_delay_idle, self.teamtime); } @@ -376,7 +376,7 @@ void GoalTouch(void) pscore = 1; } - sound(ball, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NONE); + _sound(ball, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NONE); if(ball.team && pscore) { @@ -408,8 +408,8 @@ void GoalTouch(void) //=======================// // team ents // //=======================// -void spawnfunc_nexball_team(void) -{SELFPARAM(); +spawnfunc(nexball_team) +{ if(!g_nexball) { remove(self); @@ -515,13 +515,13 @@ void SpawnBall(void) if(!autocvar_g_nexball_sound_bounce) self.noise = ""; else if(self.noise == "") - self.noise = "sound/nexball/bounce.wav"; + self.noise = SND(NB_BOUNCE); //bounce sound placeholder (FIXME) if(self.noise1 == "") - self.noise1 = "sound/nexball/drop.wav"; + self.noise1 = SND(NB_DROP); //ball drop sound placeholder (FIXME) if(self.noise2 == "") - self.noise2 = "sound/nexball/steal.wav"; + self.noise2 = SND(NB_STEAL); //stealing sound placeholder (FIXME) if(self.noise) precache_sound(self.noise); precache_sound(self.noise1); @@ -534,8 +534,8 @@ void SpawnBall(void) self.nextthink = game_starttime + autocvar_g_nexball_delay_start; } -void spawnfunc_nexball_basketball(void) -{SELFPARAM(); +spawnfunc(nexball_basketball) +{ nexball_mode |= NBM_BASKETBALL; self.classname = "nexball_basketball"; if (!(balls & BALL_BASKET)) @@ -557,8 +557,8 @@ void spawnfunc_nexball_basketball(void) SpawnBall(); } -void spawnfunc_nexball_football(void) -{SELFPARAM(); +spawnfunc(nexball_football) +{ nexball_mode |= NBM_FOOTBALL; self.classname = "nexball_football"; self.solid = SOLID_TRIGGER; @@ -598,40 +598,40 @@ void SpawnGoal(void) self.touch = GoalTouch; } -void spawnfunc_nexball_redgoal(void) -{SELFPARAM(); +spawnfunc(nexball_redgoal) +{ self.team = NUM_TEAM_1; SpawnGoal(); } -void spawnfunc_nexball_bluegoal(void) -{SELFPARAM(); +spawnfunc(nexball_bluegoal) +{ self.team = NUM_TEAM_2; SpawnGoal(); } -void spawnfunc_nexball_yellowgoal(void) -{SELFPARAM(); +spawnfunc(nexball_yellowgoal) +{ self.team = NUM_TEAM_3; SpawnGoal(); } -void spawnfunc_nexball_pinkgoal(void) -{SELFPARAM(); +spawnfunc(nexball_pinkgoal) +{ self.team = NUM_TEAM_4; SpawnGoal(); } -void spawnfunc_nexball_fault(void) -{SELFPARAM(); +spawnfunc(nexball_fault) +{ self.team = GOAL_FAULT; if(self.noise == "") - self.noise = "misc/typehit.wav"; + self.noise = SND(TYPEHIT); SpawnGoal(); } -void spawnfunc_nexball_out(void) -{SELFPARAM(); +spawnfunc(nexball_out) +{ self.team = GOAL_OUT; if(self.noise == "") - self.noise = "misc/typehit.wav"; + self.noise = SND(TYPEHIT); SpawnGoal(); } @@ -639,34 +639,34 @@ void spawnfunc_nexball_out(void) //Spawnfuncs preserved for compatibility // -void spawnfunc_ball(void) +spawnfunc(ball) { - spawnfunc_nexball_football(); + spawnfunc_nexball_football(this); } -void spawnfunc_ball_football(void) +spawnfunc(ball_football) { - spawnfunc_nexball_football(); + spawnfunc_nexball_football(this); } -void spawnfunc_ball_basketball(void) +spawnfunc(ball_basketball) { - spawnfunc_nexball_basketball(); + spawnfunc_nexball_basketball(this); } // The "red goal" is defended by blue team. A ball in there counts as a point for red. -void spawnfunc_ball_redgoal(void) +spawnfunc(ball_redgoal) { - spawnfunc_nexball_bluegoal(); // I blame Revenant + spawnfunc_nexball_bluegoal(this); // I blame Revenant } -void spawnfunc_ball_bluegoal(void) +spawnfunc(ball_bluegoal) { - spawnfunc_nexball_redgoal(); // but he didn't mean to cause trouble :p + spawnfunc_nexball_redgoal(this); // but he didn't mean to cause trouble :p } -void spawnfunc_ball_fault(void) +spawnfunc(ball_fault) { - spawnfunc_nexball_fault(); + spawnfunc_nexball_fault(this); } -void spawnfunc_ball_bound(void) +spawnfunc(ball_bound) { - spawnfunc_nexball_out(); + spawnfunc_nexball_out(this); } //=======================// @@ -705,7 +705,7 @@ void W_Nexball_Touch(void) if(!attacker.ballcarried) { LogNB("stole", attacker); - sound(other, CH_TRIGGER, ball.noise2, VOL_BASE, ATTEN_NORM); + _sound(other, CH_TRIGGER, ball.noise2, VOL_BASE, ATTEN_NORM); if(SAME_TEAM(attacker, other) && time > attacker.teamkill_complain) { @@ -727,7 +727,7 @@ void W_Nexball_Attack(float t) if(!(ball = self.ballcarried)) return; - W_SetupShot(self, false, 4, "nexball/shoot1.wav", CH_WEAPON_A, 0); + W_SetupShot(self, false, 4, SND(NB_SHOOT1), CH_WEAPON_A, 0); tracebox(w_shotorg, BALL_MINS, BALL_MAXS, w_shotorg, MOVE_WORLDONLY, world); if(trace_startsolid) { @@ -761,7 +761,7 @@ void W_Nexball_Attack2(void) if(self.ballcarried.enemy) { entity _ball = self.ballcarried; - W_SetupShot(self, false, 4, "nexball/shoot1.wav", CH_WEAPON_A, 0); + W_SetupShot(self, false, 4, SND(NB_SHOOT1), CH_WEAPON_A, 0); DropBall(_ball, w_shotorg, trigger_push_calculatevelocity(_ball.origin, _ball.enemy, 32)); _ball.think = W_Nexball_Think; _ball.nextthink = time; @@ -774,7 +774,7 @@ void W_Nexball_Attack2(void) entity missile; if(!(balls & BALL_BASKET)) return; - W_SetupShot(self, false, 2, "nexball/shoot2.wav", CH_WEAPON_A, 0); + W_SetupShot(self, false, 2, SND(NB_SHOOT2), CH_WEAPON_A, 0); missile = spawn(); missile.owner = self; @@ -860,9 +860,6 @@ float w_nexball_weapon(float req) } else if(req == WR_INIT) { - precache_sound("nexball/shoot1.wav"); - precache_sound("nexball/shoot2.wav"); - precache_sound("misc/typehit.wav"); } else if(req == WR_SETUP) { diff --git a/qcsrc/server/mutators/gamemode_onslaught.qc b/qcsrc/server/mutators/gamemode_onslaught.qc index e5d127748b..35a8e7bdc7 100644 --- a/qcsrc/server/mutators/gamemode_onslaught.qc +++ b/qcsrc/server/mutators/gamemode_onslaught.qc @@ -31,7 +31,7 @@ void ons_CaptureShield_Touch() if(IS_REAL_CLIENT(other)) { - play2(other, "onslaught/damageblockedbyshield.wav"); + play2(other, SND(ONS_DAMAGEBLOCKEDBYSHIELD)); if(self.enemy.classname == "onslaught_generator") Send_Notification(NOTIF_ONE, other, MSG_CENTER, CENTER_ONS_GENERATOR_SHIELDED); @@ -353,7 +353,7 @@ void ons_ControlPoint_Icon_Damage(entity inflictor, entity attacker, float damag if (time > self.pain_finished) if (IS_PLAYER(attacker)) { - play2(attacker, "onslaught/damageblockedbyshield.wav"); + play2(attacker, SND(ONS_DAMAGEBLOCKEDBYSHIELD)); self.pain_finished = time + 1; attacker.typehitsound += 1; // play both sounds (shield is way too quiet) } @@ -364,7 +364,7 @@ void ons_ControlPoint_Icon_Damage(entity inflictor, entity attacker, float damag if(IS_PLAYER(attacker)) if(time - ons_notification_time[self.team] > 10) { - play2team(self.team, "onslaught/controlpoint_underattack.wav"); + play2team(self.team, SND(ONS_CONTROLPOINT_UNDERATTACK)); ons_notification_time[self.team] = time; } @@ -378,13 +378,13 @@ void ons_ControlPoint_Icon_Damage(entity inflictor, entity attacker, float damag pointparticles(particleeffectnum(EFFECT_SPARKS), hitloc, force*-1, 1); //sound on every hit if (random() < 0.5) - sound(self, CH_TRIGGER, "onslaught/ons_hit1.wav", VOL_BASE+0.3, ATTEN_NORM); + sound(self, CH_TRIGGER, SND_ONS_HIT1, VOL_BASE+0.3, ATTEN_NORM); else - sound(self, CH_TRIGGER, "onslaught/ons_hit2.wav", VOL_BASE+0.3, ATTEN_NORM); + sound(self, CH_TRIGGER, SND_ONS_HIT2, VOL_BASE+0.3, ATTEN_NORM); if (self.health < 0) { - sound(self, CH_TRIGGER, W_Sound("grenade_impact"), VOL_BASE, ATTEN_NORM); + sound(self, CH_TRIGGER, SND_GRENADE_IMPACT, VOL_BASE, ATTEN_NORM); pointparticles(particleeffectnum(EFFECT_ROCKET_EXPLODE), self.origin, '0 0 0', 1); Send_Notification(NOTIF_ALL, world, MSG_INFO, APP_TEAM_NUM_4(self.team, INFO_ONSLAUGHT_CPDESTROYED_), self.owner.message, attacker.netname); @@ -490,9 +490,9 @@ void ons_ControlPoint_Icon_Think() Send_Effect(EFFECT_ELECTRIC_SPARKS, self.origin + randompos('-10 -10 -20', '10 10 20'), '0 0 0', 1); if(random() > 0.8) - sound(self, CH_PAIN, "onslaught/ons_spark1.wav", VOL_BASE, ATTEN_NORM); + sound(self, CH_PAIN, SND_ONS_SPARK1, VOL_BASE, ATTEN_NORM); else if (random() > 0.5) - sound(self, CH_PAIN, "onslaught/ons_spark2.wav", VOL_BASE, ATTEN_NORM); + sound(self, CH_PAIN, SND_ONS_SPARK2, VOL_BASE, ATTEN_NORM); } } @@ -516,11 +516,11 @@ void ons_ControlPoint_Icon_BuildThink() self.health = self.max_health; self.count = autocvar_g_onslaught_cp_regen * ONS_CP_THINKRATE; // slow repair rate from now on self.think = ons_ControlPoint_Icon_Think; - sound(self, CH_TRIGGER, "onslaught/controlpoint_built.wav", VOL_BASE, ATTEN_NORM); + sound(self, CH_TRIGGER, SND_ONS_CONTROLPOINT_BUILT, VOL_BASE, ATTEN_NORM); self.owner.iscaptured = true; self.solid = SOLID_BBOX; - Send_Effect_(sprintf("%s_cap", Static_Team_ColorName_Lower(self.owner.team)), self.owner.origin, '0 0 0', 1); + Send_Effect(EFFECT_CAP(self.owner.team), self.owner.origin, '0 0 0', 1); WaypointSprite_UpdateMaxHealth(self.owner.sprite, self.max_health); WaypointSprite_UpdateHealth(self.owner.sprite, self.health); @@ -572,13 +572,13 @@ void ons_ControlPoint_Icon_Spawn(entity cp, entity player) e.colormap = 1024 + (e.team - 1) * 17; e.count = (e.max_health - e.health) * ONS_CP_THINKRATE / autocvar_g_onslaught_cp_buildtime; // how long it takes to build - sound(e, CH_TRIGGER, "onslaught/controlpoint_build.wav", VOL_BASE, ATTEN_NORM); + sound(e, CH_TRIGGER, SND_ONS_CONTROLPOINT_BUILD, VOL_BASE, ATTEN_NORM); cp.goalentity = e; cp.team = e.team; cp.colormap = e.colormap; - Send_Effect_(sprintf("%sflag_touch", Static_Team_ColorName_Lower(player.team)), e.origin, '0 0 0', 1); + Send_Effect(EFFECT_FLAG_TOUCH(player.team), e.origin, '0 0 0', 1); WaypointSprite_UpdateBuildFinished(cp.sprite, time + (e.max_health - e.health) / (e.count / ONS_CP_THINKRATE)); WaypointSprite_UpdateRule(cp.sprite,cp.team,SPRITERULE_TEAMPLAY); @@ -751,15 +751,6 @@ void ons_ControlPoint_Setup(entity cp) if(cp.message == "") { cp.message = "a"; } - // precache - TODO: clean up! - precache_sound("onslaught/controlpoint_build.wav"); - precache_sound("onslaught/controlpoint_built.wav"); - precache_sound(W_Sound("grenade_impact")); - precache_sound("onslaught/damageblockedbyshield.wav"); - precache_sound("onslaught/controlpoint_underattack.wav"); - precache_sound("onslaught/ons_spark1.wav"); - precache_sound("onslaught/ons_spark2.wav"); - // appearence setmodel_fixsize(cp, MDL_ONS_CP_PAD1); @@ -838,7 +829,7 @@ void ons_GeneratorDamage(entity inflictor, entity attacker, float damage, int de if (time > self.pain_finished) if (IS_PLAYER(attacker)) { - play2(attacker, "onslaught/damageblockedbyshield.wav"); + play2(attacker, SND(ONS_DAMAGEBLOCKEDBYSHIELD)); attacker.typehitsound += 1; self.pain_finished = time + 1; } @@ -849,7 +840,7 @@ void ons_GeneratorDamage(entity inflictor, entity attacker, float damage, int de self.pain_finished = time + 10; entity head; FOR_EACH_REALPLAYER(head) if(SAME_TEAM(head, self)) { Send_Notification(NOTIF_ONE, head, MSG_CENTER, CENTER_GENERATOR_UNDERATTACK); } - play2team(self.team, "onslaught/generator_underattack.wav"); + play2team(self.team, SND(ONS_GENERATOR_UNDERATTACK)); } } self.health = self.health - damage; @@ -890,7 +881,7 @@ void ons_GeneratorDamage(entity inflictor, entity attacker, float damage, int de // Throw some flaming gibs on damage, more damage = more chance for gib if(random() < damage/220) { - sound(self, CH_TRIGGER, W_Sound("rocket_impact"), VOL_BASE, ATTEN_NORM); + sound(self, CH_TRIGGER, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM); } else { @@ -899,9 +890,9 @@ void ons_GeneratorDamage(entity inflictor, entity attacker, float damage, int de //sound on every hit if (random() < 0.5) - sound(self, CH_TRIGGER, "onslaught/ons_hit1.wav", VOL_BASE, ATTEN_NORM); + sound(self, CH_TRIGGER, SND_ONS_HIT1, VOL_BASE, ATTEN_NORM); else - sound(self, CH_TRIGGER, "onslaught/ons_hit2.wav", VOL_BASE, ATTEN_NORM); + sound(self, CH_TRIGGER, SND_ONS_HIT2, VOL_BASE, ATTEN_NORM); } self.SendFlags |= GSF_STATUS; @@ -921,7 +912,7 @@ void ons_GeneratorThink() if(SAME_TEAM(e, self)) { Send_Notification(NOTIF_ONE, e, MSG_CENTER, CENTER_ONS_NOTSHIELDED_TEAM); - soundto(MSG_ONE, e, CHAN_AUTO, "kh/alarm.wav", VOL_BASE, ATTEN_NONE); // FIXME: unique sound? + soundto(MSG_ONE, e, CHAN_AUTO, SND(KH_ALARM), VOL_BASE, ATTEN_NONE); // FIXME: unique sound? } else Send_Notification(NOTIF_ONE, e, MSG_CENTER, APP_TEAM_NUM_4(self.team, CENTER_ONS_NOTSHIELDED_)); @@ -1008,16 +999,6 @@ void ons_GeneratorSetup(entity gen) // called when spawning a generator entity o gen.isshielded = true; gen.touch = onslaught_generator_touch; - // precache - TODO: clean up! - precache_sound("onslaught/generator_decay.wav"); - precache_sound(W_Sound("grenade_impact")); - precache_sound(W_Sound("rocket_impact")); - precache_sound("onslaught/generator_underattack.wav"); - precache_sound("onslaught/shockwave.wav"); - precache_sound("onslaught/ons_hit1.wav"); - precache_sound("onslaught/ons_hit2.wav"); - precache_sound("onslaught/generator_underattack.wav"); - // appearence // model handled by CSQC setsize(gen, GENERATOR_MIN, GENERATOR_MAX); @@ -1095,7 +1076,7 @@ bool Onslaught_CheckWinner() if (!wpforenemy_announced) { Send_Notification(NOTIF_ALL, world, MSG_CENTER, CENTER_OVERTIME_CONTROLPOINT); - sound(world, CH_INFO, "onslaught/generator_decay.wav", VOL_BASE, ATTEN_NONE); + sound(world, CH_INFO, SND_ONS_GENERATOR_DECAY, VOL_BASE, ATTEN_NONE); wpforenemy_announced = true; } @@ -1149,7 +1130,7 @@ bool Onslaught_CheckWinner() ons_stalemate = false; - play2all(sprintf("ctf/%s_capture.wav", Static_Team_ColorName_Lower(winner_team))); + play2all(SND(CTF_CAPTURE(winner_team))); round_handler_Init(7, autocvar_g_onslaught_warmup, autocvar_g_onslaught_round_timelimit); @@ -1658,7 +1639,7 @@ bool ons_Teleport(entity player, entity tele_target, float range, bool tele_effe if ( tele_effects ) { Send_Effect(EFFECT_TELEPORT, player.origin, '0 0 0', 1); - sound (player, CH_TRIGGER, "misc/teleport.wav", VOL_BASE, ATTEN_NORM); + sound (player, CH_TRIGGER, SND_TELEPORT, VOL_BASE, ATTEN_NORM); } setorigin(player, loc); player.angles = '0 1 0' * ( theta * RAD2DEG + 180 ); @@ -2044,8 +2025,8 @@ keys: "target" - first control point. "target2" - second control point. */ -void spawnfunc_onslaught_link() -{SELFPARAM(); +spawnfunc(onslaught_link) +{ if(!g_onslaught) { remove(self); return; } if (self.target == "" || self.target2 == "") @@ -2069,8 +2050,8 @@ keys: "message" - name of this control point (should reflect the location in the map, such as "center bridge", "north tower", etc) */ -void spawnfunc_onslaught_controlpoint() -{SELFPARAM(); +spawnfunc(onslaught_controlpoint) +{ if(!g_onslaught) { remove(self); return; } ons_ControlPoint_Setup(self); @@ -2085,8 +2066,8 @@ keys: "team" - team that owns this generator (5 = red, 14 = blue, etc), MUST BE SET. "targetname" - name that spawnfunc_onslaught_link entities will use to target this. */ -void spawnfunc_onslaught_generator() -{SELFPARAM(); +spawnfunc(onslaught_generator) +{ if(!g_onslaught) { remove(self); return; } if(!self.team) { objerror("team must be set"); } @@ -2114,11 +2095,6 @@ void ons_DelayedInit() // Do this check with a delay so we can wait for teams to void ons_Initialize() { - precache_sound("ctf/red_capture.wav"); - precache_sound("ctf/blue_capture.wav"); - precache_sound("ctf/yellow_capture.wav"); - precache_sound("ctf/pink_capture.wav"); - ons_captureshield_force = autocvar_g_onslaught_shield_force; addstat(STAT_ROUNDLOST, AS_INT, ons_roundlost); diff --git a/qcsrc/server/mutators/gamemode_tdm.qc b/qcsrc/server/mutators/gamemode_tdm.qc index 27cc19b0ab..451e4a55c3 100644 --- a/qcsrc/server/mutators/gamemode_tdm.qc +++ b/qcsrc/server/mutators/gamemode_tdm.qc @@ -8,8 +8,8 @@ Note: If you use spawnfunc_tdm_team entities you must define at least 2! Howeve Keys: "netname" Name of the team (for example Red, Blue, Green, Yellow, Life, Death, Offense, Defense, etc)... "cnt" Scoreboard color of the team (for example 4 is red and 13 is blue)... */ -void spawnfunc_tdm_team() -{SELFPARAM(); +spawnfunc(tdm_team) +{ if(!g_tdm || !self.cnt) { remove(self); return; } self.classname = "tdm_team"; @@ -18,15 +18,12 @@ void spawnfunc_tdm_team() // code from here on is just to support maps that don't have team entities void tdm_SpawnTeam (string teamname, float teamcolor) -{SELFPARAM(); - setself(spawn()); - self.classname = "tdm_team"; - self.netname = teamname; - self.cnt = teamcolor; - - spawnfunc_tdm_team(); - - setself(this); +{ + entity this = new(tdm_team); + this.netname = teamname; + this.cnt = teamcolor; + this.spawnfunc_checked = true; + WITH(entity, self, this, spawnfunc_tdm_team(this)); } void tdm_DelayedInit() diff --git a/qcsrc/server/mutators/mutator_buffs.qc b/qcsrc/server/mutators/mutator_buffs.qc index 79004e1c41..fb0c2b7b6f 100644 --- a/qcsrc/server/mutators/mutator_buffs.qc +++ b/qcsrc/server/mutators/mutator_buffs.qc @@ -140,7 +140,7 @@ void buff_Respawn(entity ent) WaypointSprite_Ping(ent.buff_waypoint); - sound(ent, CH_TRIGGER, "keepaway/respawn.wav", VOL_BASE, ATTEN_NONE); // ATTEN_NONE (it's a sound intended to be heard anywhere) + sound(ent, CH_TRIGGER, SND_KA_RESPAWN, VOL_BASE, ATTEN_NONE); // ATTEN_NONE (it's a sound intended to be heard anywhere) } void buff_Touch() @@ -178,7 +178,7 @@ void buff_Touch() Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_ITEM_BUFF_LOST, other.netname, buffid); other.buffs = 0; - //sound(other, CH_TRIGGER, "relics/relic_effect.wav", VOL_BASE, ATTN_NORM); + //sound(other, CH_TRIGGER, SND_BUFF_LOST, VOL_BASE, ATTN_NORM); } else { return; } // do nothing } @@ -191,7 +191,7 @@ void buff_Touch() Send_Notification(NOTIF_ALL_EXCEPT, other, MSG_INFO, INFO_ITEM_BUFF, other.netname, buffid); Send_Effect(EFFECT_ITEM_PICKUP, CENTER_OR_VIEWOFS(self), '0 0 0', 1); - sound(other, CH_TRIGGER, "misc/shield_respawn.wav", VOL_BASE, ATTN_NORM); + sound(other, CH_TRIGGER, SND_SHIELD_RESPAWN, VOL_BASE, ATTN_NORM); other.buffs |= (self.buffs); } @@ -271,7 +271,7 @@ void buff_Think() if(!self.buff_activetime) { self.buff_active = true; - sound(self, CH_TRIGGER, "misc/strength_respawn.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_TRIGGER, SND_STRENGTH_RESPAWN, VOL_BASE, ATTN_NORM); Send_Effect(EFFECT_ITEM_RESPAWN, CENTER_OR_VIEWOFS(self), '0 0 0', 1); } } @@ -596,7 +596,7 @@ MUTATOR_HOOKFUNCTION(buffs_PlayerUseKey) Send_Notification(NOTIF_ALL_EXCEPT, self, MSG_INFO, INFO_ITEM_BUFF_LOST, self.netname, buffid); self.buffs = 0; - sound(self, CH_TRIGGER, "relics/relic_effect.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_TRIGGER, SND_BUFF_LOST, VOL_BASE, ATTN_NORM); return true; } return false; @@ -661,8 +661,8 @@ MUTATOR_HOOKFUNCTION(buffs_PlayerThrowKey) Send_Effect(EFFECT_ELECTRO_COMBO, their_org, '0 0 0', 1); Send_Effect(EFFECT_ELECTRO_COMBO, my_org, '0 0 0', 1); - sound(self, CH_TRIGGER, "keepaway/respawn.wav", VOL_BASE, ATTEN_NORM); - sound(closest, CH_TRIGGER, "keepaway/respawn.wav", VOL_BASE, ATTEN_NORM); + sound(self, CH_TRIGGER, SND_KA_RESPAWN, VOL_BASE, ATTEN_NORM); + sound(closest, CH_TRIGGER, SND_KA_RESPAWN, VOL_BASE, ATTEN_NORM); // TODO: add a counter to handle how many times one can teleport, and a delay to prevent spam self.buffs = 0; @@ -771,7 +771,7 @@ MUTATOR_HOOKFUNCTION(buffs_PlayerThink) if(buff_lost >= 2) { Send_Notification(NOTIF_ONE, self, MSG_MULTI, ITEM_BUFF_DROP, buffid); // TODO: special timeout message? - sound(self, CH_TRIGGER, "relics/relic_effect.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_TRIGGER, SND_BUFF_LOST, VOL_BASE, ATTN_NORM); } self.buffs = 0; } @@ -957,12 +957,6 @@ void buffs_DelayedInit() void buffs_Initialize() { - precache_sound("misc/strength_respawn.wav"); - precache_sound("misc/shield_respawn.wav"); - precache_sound("relics/relic_effect.wav"); - precache_sound(W_Sound("rocket_impact")); - precache_sound("keepaway/respawn.wav"); - addstat(STAT_BUFFS, AS_INT, buffs); addstat(STAT_BUFF_TIME, AS_FLOAT, buff_time); diff --git a/qcsrc/server/mutators/mutator_instagib.qc b/qcsrc/server/mutators/mutator_instagib.qc index 7488fd2954..cbe57ca2ac 100644 --- a/qcsrc/server/mutators/mutator_instagib.qc +++ b/qcsrc/server/mutators/mutator_instagib.qc @@ -7,8 +7,8 @@ #include "../../common/items/all.qc" -void spawnfunc_item_minst_cells() -{SELFPARAM(); +spawnfunc(item_minst_cells) +{ if (!g_instagib) { remove(self); return; } if (!self.ammo_cells) self.ammo_cells = autocvar_g_instagib_ammo_drop; StartItemA(ITEM_VaporizerCells); @@ -187,7 +187,7 @@ MUTATOR_HOOKFUNCTION(instagib_PlayerPowerups) if (self.items & ITEM_Invisibility.m_itemid) { - play_countdown(self.strength_finished, "misc/poweroff.wav"); + play_countdown(self.strength_finished, SND(POWEROFF)); if (time > self.strength_finished) { self.alpha = default_player_alpha; @@ -210,7 +210,7 @@ MUTATOR_HOOKFUNCTION(instagib_PlayerPowerups) if (self.items & ITEM_Speed.m_itemid) { - play_countdown(self.invincible_finished, "misc/poweroff.wav"); + play_countdown(self.invincible_finished, SND(POWEROFF)); if (time > self.invincible_finished) { self.items &= ~ITEM_Speed.m_itemid; @@ -357,7 +357,7 @@ MUTATOR_HOOKFUNCTION(instagib_FilterItem) e.noalign = self.noalign; e.cnt = self.cnt; e.team = self.team; - WITH(entity, self, e, spawnfunc_item_minst_cells()); + WITH(entity, self, e, spawnfunc_item_minst_cells(e)); return true; } diff --git a/qcsrc/server/mutators/mutator_instagib_items.qc b/qcsrc/server/mutators/mutator_instagib_items.qc index 8beec7db2d..87abd78a2c 100644 --- a/qcsrc/server/mutators/mutator_instagib_items.qc +++ b/qcsrc/server/mutators/mutator_instagib_items.qc @@ -5,8 +5,14 @@ float instagib_respawntimejitter_ammo = 0; GETTER(float, instagib_respawntime_ammo) GETTER(float, instagib_respawntimejitter_ammo) +#ifndef MENUQC +MODEL(VaporizerCells_ITEM, Item_Model("a_cells.md3")); +#endif + REGISTER_ITEM(VaporizerCells, Ammo) { - this.m_model = "a_cells.md3"; +#ifndef MENUQC + this.m_model = MDL_VaporizerCells_ITEM; +#endif this.m_sound = "misc/itempickup.wav"; this.m_name = "Vaporizer Ammo"; this.m_icon = "ammo_supercells"; @@ -18,8 +24,14 @@ REGISTER_ITEM(VaporizerCells, Ammo) { #endif } +#ifndef MENUQC +MODEL(ExtraLife_ITEM, Item_Model("g_h100.md3")); +#endif + REGISTER_ITEM(ExtraLife, Powerup) { - this.m_model = "g_h100.md3"; +#ifndef MENUQC + this.m_model = MDL_ExtraLife_ITEM; +#endif this.m_sound = "misc/megahealth.wav"; this.m_name = "Extra life"; this.m_icon = "item_mega_health"; @@ -29,8 +41,14 @@ REGISTER_ITEM(ExtraLife, Powerup) { this.m_itemid = IT_NAILS; } +#ifndef MENUQC +MODEL(Invisibility_ITEM, Item_Model("g_strength.md3")); +#endif + REGISTER_ITEM(Invisibility, Powerup) { - this.m_model = "g_strength.md3"; +#ifndef MENUQC + this.m_model = MDL_Invisibility_ITEM; +#endif this.m_sound = "misc/powerup.wav"; this.m_name = "Invisibility"; this.m_icon = "strength"; @@ -40,8 +58,14 @@ REGISTER_ITEM(Invisibility, Powerup) { this.m_itemid = IT_STRENGTH; } +#ifndef MENUQC +MODEL(Speed_ITEM, Item_Model("g_invincible.md3")); +#endif + REGISTER_ITEM(Speed, Powerup) { - this.m_model = "g_invincible.md3"; +#ifndef MENUQC + this.m_model = MDL_Speed_ITEM; +#endif this.m_sound = "misc/powerup_shield.wav"; this.m_name = "Speed"; this.m_icon = "shield"; diff --git a/qcsrc/server/mutators/mutator_nades.qc b/qcsrc/server/mutators/mutator_nades.qc index 99c7854825..19a0aa462c 100644 --- a/qcsrc/server/mutators/mutator_nades.qc +++ b/qcsrc/server/mutators/mutator_nades.qc @@ -121,7 +121,7 @@ void nade_napalm_ball() entity proj; vector kick; - spamsound(self, CH_SHOTS, W_Sound("fireball_fire"), VOL_BASE, ATTEN_NORM); + spamsound(self, CH_SHOTS, SND(FIREBALL_FIRE), VOL_BASE, ATTEN_NORM); proj = spawn (); proj.owner = self.owner; @@ -250,17 +250,9 @@ void nade_ice_think() { if ( autocvar_g_nades_ice_explode ) { - entity expef = NULL; - switch(self.realowner.team) - { - case NUM_TEAM_1: expef = EFFECT_NADE_RED_EXPLODE; break; - case NUM_TEAM_2: expef = EFFECT_NADE_BLUE_EXPLODE; break; - case NUM_TEAM_3: expef = EFFECT_NADE_YELLOW_EXPLODE; break; - case NUM_TEAM_4: expef = EFFECT_NADE_PINK_EXPLODE; break; - default: expef = EFFECT_NADE_NEUTRAL_EXPLODE; break; - } + entity expef = EFFECT_NADE_EXPLODE(self.realowner.team); Send_Effect(expef, self.origin + '0 0 1', '0 0 0', 1); - sound(self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM); RadiusDamage(self, self.realowner, autocvar_g_nades_nade_damage, autocvar_g_nades_nade_edgedamage, autocvar_g_nades_nade_radius, self, world, autocvar_g_nades_nade_force, self.projectiledeathtype, self.enemy); @@ -517,21 +509,15 @@ void nade_boom() default: case NADE_TYPE_NORMAL: - switch(self.realowner.team) - { - case NUM_TEAM_1: expef = EFFECT_NADE_RED_EXPLODE; break; - case NUM_TEAM_2: expef = EFFECT_NADE_BLUE_EXPLODE; break; - case NUM_TEAM_3: expef = EFFECT_NADE_YELLOW_EXPLODE; break; - case NUM_TEAM_4: expef = EFFECT_NADE_PINK_EXPLODE; break; - default: expef = EFFECT_NADE_NEUTRAL_EXPLODE; break; - } + expef = EFFECT_NADE_EXPLODE(self.realowner.team); + break; } if(expef) Send_Effect(expef, findbetterlocation(self.origin, 8), '0 0 0', 1); - sound(self, CH_SHOTS_SINGLE, "misc/null.wav", VOL_BASE, ATTEN_NORM); - sound(self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS_SINGLE, SND_Null, VOL_BASE, ATTEN_NORM); + sound(self, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM); self.event_damage = func_null; // prevent somehow calling damage in the next call @@ -584,7 +570,7 @@ void nade_touch() //UpdateCSQCProjectile(self); if(self.health == self.max_health) { - spamsound(self, CH_SHOTS, W_Sound(strcat("grenade_bounce", ftos(1 + rint(random() * 5)))), VOL_BASE, ATTEN_NORM); + spamsound(self, CH_SHOTS, SND(GRENADE_BOUNCE_RANDOM()), VOL_BASE, ATTEN_NORM); return; } @@ -594,7 +580,7 @@ void nade_touch() void nade_beep() {SELFPARAM(); - sound(self, CH_SHOTS_SINGLE, "overkill/grenadebip.ogg", VOL_BASE, 0.5 *(ATTEN_LARGE + ATTEN_MAX)); + sound(self, CH_SHOTS_SINGLE, SND_NADE_BEEP, VOL_BASE, 0.5 *(ATTEN_LARGE + ATTEN_MAX)); self.think = nade_boom; self.nextthink = max(self.wait, time); } @@ -649,7 +635,7 @@ void nade_damage(entity inflictor, entity attacker, float damage, int deathtype, if(self.health == self.max_health) { - sound(self, CH_SHOTS_SINGLE, "misc/null.wav", VOL_BASE, 0.5 *(ATTEN_LARGE + ATTEN_MAX)); + sound(self, CH_SHOTS_SINGLE, SND_Null, VOL_BASE, 0.5 *(ATTEN_LARGE + ATTEN_MAX)); self.nextthink = max(time + autocvar_g_nades_nade_lifetime, time); self.think = nade_beep; } @@ -759,7 +745,7 @@ void nades_GiveBonus(entity player, float score) if ( player.bonus_nade_score >= 1 ) { Send_Notification(NOTIF_ONE, player, MSG_CENTER, CENTER_NADE_BONUS); - play2(player,"kh/alarm.wav"); + play2(player, SND(KH_ALARM)); player.bonus_nades++; player.bonus_nade_score -= 1; } @@ -1198,15 +1184,6 @@ void nades_Initialize() addstat(STAT_NADE_BONUS_SCORE, AS_FLOAT, bonus_nade_score); addstat(STAT_HEALING_ORB, AS_FLOAT, stat_healing_orb); addstat(STAT_HEALING_ORB_ALPHA, AS_FLOAT, stat_healing_orb_alpha); - - precache_sound(W_Sound("rocket_impact")); - precache_sound(W_Sound("grenade_bounce1")); - precache_sound(W_Sound("grenade_bounce2")); - precache_sound(W_Sound("grenade_bounce3")); - precache_sound(W_Sound("grenade_bounce4")); - precache_sound(W_Sound("grenade_bounce5")); - precache_sound(W_Sound("grenade_bounce6")); - precache_sound("overkill/grenadebip.ogg"); } MUTATOR_DEFINITION(mutator_nades) diff --git a/qcsrc/server/mutators/mutator_new_toys.qc b/qcsrc/server/mutators/mutator_new_toys.qc index 172ee4d651..9b51d9abb8 100644 --- a/qcsrc/server/mutators/mutator_new_toys.qc +++ b/qcsrc/server/mutators/mutator_new_toys.qc @@ -190,8 +190,10 @@ MUTATOR_HOOKFUNCTION(nt_SetWeaponreplace) MUTATOR_HOOKFUNCTION(nt_FilterItem) {SELFPARAM(); - if(nt_IsNewToy(self.weapon) && autocvar_g_new_toys_use_pickupsound) - self.item_pickupsound = W_Sound("weaponpickup_new_toys"); + if(nt_IsNewToy(self.weapon) && autocvar_g_new_toys_use_pickupsound) { + self.item_pickupsound = string_null; + self.item_pickupsound_ent = SND_WEAPONPICKUP_NEW_TOYS; + } return 0; } @@ -207,8 +209,6 @@ MUTATOR_DEFINITION(mutator_new_toys) if(time > 1) // game loads at time 1 error("This cannot be added at runtime\n"); - precache_sound(W_Sound("weaponpickup_new_toys")); - // mark the guns as ok to use by e.g. impulse 99 float i; for(i = WEP_FIRST; i <= WEP_LAST; ++i) diff --git a/qcsrc/server/mutators/mutator_overkill.qc b/qcsrc/server/mutators/mutator_overkill.qc index 5b7018b303..2114efc92d 100644 --- a/qcsrc/server/mutators/mutator_overkill.qc +++ b/qcsrc/server/mutators/mutator_overkill.qc @@ -4,8 +4,8 @@ #include "mutator.qh" void W_Blaster_Attack(float, float, float, float, float, float, float, float, float, float); -void spawnfunc_weapon_hmg(); -void spawnfunc_weapon_rpc(); +spawnfunc(weapon_hmg); +spawnfunc(weapon_rpc); void ok_DecreaseCharge(entity ent, int wep) { @@ -84,7 +84,7 @@ MUTATOR_HOOKFUNCTION(ok_PlayerDies) self.ok_item = true; self.noalign = true; self.pickup_anyway = true; - spawnfunc_item_armor_small(); + spawnfunc_item_armor_small(this); self.movetype = MOVETYPE_TOSS; self.gravity = 1; self.reset = SUB_Remove; @@ -174,7 +174,7 @@ MUTATOR_HOOKFUNCTION(ok_PlayerPreThink) { //Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_OVERKILL_CHARGE); self.ok_notice_time = time + 2; - play2(self, W_Sound("dryfire")); + play2(self, SND(DRYFIRE)); } if(self.weaponentity.state != WS_CLEAR) w_ready(); @@ -205,6 +205,9 @@ MUTATOR_HOOKFUNCTION(ok_PlayerSpawn) return false; } +void _spawnfunc_weapon_hmg() { SELFPARAM(); spawnfunc_weapon_hmg(this); } +void _spawnfunc_weapon_rpc() { SELFPARAM(); spawnfunc_weapon_rpc(this); } + MUTATOR_HOOKFUNCTION(ok_OnEntityPreSpawn) {SELFPARAM(); if(autocvar_g_powerups) @@ -222,7 +225,7 @@ MUTATOR_HOOKFUNCTION(ok_OnEntityPreSpawn) wep.team = self.team; wep.respawntime = autocvar_g_overkill_superguns_respawn_time; wep.pickup_anyway = true; - wep.think = spawnfunc_weapon_hmg; + wep.think = _spawnfunc_weapon_hmg; wep.nextthink = time + 0.1; return true; } @@ -239,7 +242,7 @@ MUTATOR_HOOKFUNCTION(ok_OnEntityPreSpawn) wep.team = self.team; wep.respawntime = autocvar_g_overkill_superguns_respawn_time; wep.pickup_anyway = true; - wep.think = spawnfunc_weapon_rpc; + wep.think = _spawnfunc_weapon_rpc; wep.nextthink = time + 0.1; return true; } @@ -316,8 +319,6 @@ void ok_Initialize() precache_all_playermodels("models/ok_player/*.dpm"); - precache_sound(W_Sound("dryfire")); - addstat(STAT_OK_AMMO_CHARGE, AS_FLOAT, ok_use_ammocharge); addstat(STAT_OK_AMMO_CHARGEPOOL, AS_FLOAT, ok_ammo_charge); diff --git a/qcsrc/server/mutators/mutator_touchexplode.qc b/qcsrc/server/mutators/mutator_touchexplode.qc index 4f49d550d9..faa74bb1dc 100644 --- a/qcsrc/server/mutators/mutator_touchexplode.qc +++ b/qcsrc/server/mutators/mutator_touchexplode.qc @@ -10,7 +10,7 @@ void PlayerTouchExplode(entity p1, entity p2) org = (p1.origin + p2.origin) * 0.5; org.z += (p1.mins.z + p2.mins.z) * 0.5; - sound(self, CH_TRIGGER, W_Sound("grenade_impact"), VOL_BASE, ATTEN_NORM); + sound(self, CH_TRIGGER, SND_GRENADE_IMPACT, VOL_BASE, ATTEN_NORM); Send_Effect(EFFECT_EXPLOSION_SMALL, org, '0 0 0', 1); entity e; diff --git a/qcsrc/server/mutators/sandbox.qc b/qcsrc/server/mutators/sandbox.qc index 509e920511..ed3ffc5e77 100644 --- a/qcsrc/server/mutators/sandbox.qc +++ b/qcsrc/server/mutators/sandbox.qc @@ -30,7 +30,7 @@ void sandbox_ObjectFunction_Touch() intensity -= autocvar_g_sandbox_object_material_velocity_min; // start from minimum velocity, not actual velocity intensity = bound(0, intensity * autocvar_g_sandbox_object_material_velocity_factor, 1); - sound(self, CH_TRIGGER, strcat("object/impact_", self.material, "_", ftos(ceil(random() * 5)) , ".wav"), VOL_BASE * intensity, ATTEN_NORM); + _sound(self, CH_TRIGGER, strcat("object/impact_", self.material, "_", ftos(ceil(random() * 5)) , ".wav"), VOL_BASE * intensity, ATTEN_NORM); Send_Effect_(strcat("impact_", self.material), self.origin, '0 0 0', ceil(intensity * 10)); // allow a count from 1 to 10 } diff --git a/qcsrc/server/pathlib.qc b/qcsrc/server/pathlib.qc deleted file mode 100644 index a563a02c1e..0000000000 --- a/qcsrc/server/pathlib.qc +++ /dev/null @@ -1,973 +0,0 @@ -#include "pathlib.qh" -#include "_all.qh" - -#define medium spawnshieldtime - -//#define DEBUGPATHING -#ifdef DEBUGPATHING -float edge_show(vector point,float fsize); -void mark_error(vector where,float lifetime); -void mark_info(vector where,float lifetime); -entity mark_misc(vector where,float lifetime); - -void pathlib_showpath(entity start) -{ - entity e; - e = start; - while(e.path_next) - { - te_lightning1(e,e.origin,e.path_next.origin); - e = e.path_next; - } -} - -void path_dbg_think() -{ - pathlib_showpath(self); - self.nextthink = time + 1; -} - -void __showpath2_think() -{ - mark_info(self.origin,1); - if(self.path_next) - { - self.path_next.think = __showpath2_think; - self.path_next.nextthink = time + 0.15; - } - else - { - self.owner.think = __showpath2_think; - self.owner.nextthink = time + 0.15; - } -} - -void pathlib_showpath2(entity path) -{ - path.think = __showpath2_think; - path.nextthink = time; -} - -#endif - -void pathlib_deletepath(entity start) -{ - entity e; - - e = findchainentity(owner, start); - while(e) - { - e.think = SUB_Remove; - e.nextthink = time; - e = e.chain; - } -} - -float walknode_stepsize; -vector walknode_stepup; -vector walknode_maxdrop; -vector walknode_boxup; -vector walknode_boxmax; -vector walknode_boxmin; -float pathlib_movenode_goodnode; - -float floor_ok(vector point) -{ - float pc; - - if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_SKY) - return 0; - - pc = pointcontents(point); - - switch(pc) - { - case CONTENT_SOLID: - case CONTENT_SLIME: - case CONTENT_LAVA: - case CONTENT_SKY: - return 0; - case CONTENT_EMPTY: - if(pointcontents(point - '0 0 1') != CONTENT_SOLID) - return 0; - break; - case CONTENT_WATER: - return 1; - } - if(pointcontents(point - '0 0 1') == CONTENT_SOLID) - return 1; - - return 0; -} - -#define _pcheck(p) traceline(p+z_up,p-z_down,MOVE_WORLDONLY,self); if (!floor_ok(trace_endpos)) return 1 -float edge_check(vector point,float fsize) -{ - vector z_up,z_down; - - z_up = '0 0 1' * fsize; - z_down = '0 0 1' * fsize; - - _pcheck(point + ('1 1 0' * fsize)); - _pcheck(point + ('1 -1 0' * fsize)); - _pcheck(point + ('1 0 0' * fsize)); - - _pcheck(point + ('0 1 0' * fsize)); - _pcheck(point + ('0 -1 0' * fsize)); - - _pcheck(point + ('-1 0 0' * fsize)); - _pcheck(point + ('-1 1 0' * fsize)); - _pcheck(point + ('-1 -1 0' * fsize)); - - return 0; -} - -#ifdef DEBUGPATHING -#define _pshow(p) mark_error(p,10) -float edge_show(vector point,float fsize) -{ - - _pshow(point + ('1 1 0' * fsize)); - _pshow(point + ('1 -1 0' * fsize)); - _pshow(point + ('1 0 0' * fsize)); - - _pshow(point + ('0 1 0' * fsize)); - _pshow(point + ('0 -1 0' * fsize)); - - _pshow(point + ('-1 0 0' * fsize)); - _pshow(point + ('-1 1 0' * fsize)); - _pshow(point + ('-1 -1 0' * fsize)); - - return 0; -} -#endif - -var vector pathlib_movenode(vector start,vector end,float doedge); -vector pathlib_wateroutnode(vector start,vector end,float doedge) -{ - vector surface; - - pathlib_movenode_goodnode = 0; - - end.x = fsnap(end.x, pathlib_gridsize); - end.y = fsnap(end.y, pathlib_gridsize); - - traceline(end + ('0 0 0.25' * pathlib_gridsize),end - ('0 0 1' * pathlib_gridsize),MOVE_WORLDONLY,self); - end = trace_endpos; - - if(pointcontents(end - '0 0 1') != CONTENT_SOLID) - return end; - - for(surface = start ; surface.z < (end.z + 32); ++surface.z) - { - if(pointcontents(surface) == CONTENT_EMPTY) - break; - } - - if(pointcontents(surface + '0 0 1') != CONTENT_EMPTY) - return end; - - tracebox(start + '0 0 64', walknode_boxmin,walknode_boxmax, end + '0 0 64', MOVE_WORLDONLY, self); - if(trace_fraction == 1) - pathlib_movenode_goodnode = 1; - - if(fabs(surface.z - end.z) > 32) - pathlib_movenode_goodnode = 0; - - return end; -} - -vector pathlib_swimnode(vector start,vector end,float doedge) -{ - pathlib_movenode_goodnode = 0; - - if(pointcontents(start) != CONTENT_WATER) - return end; - - end.x = fsnap(end.x, pathlib_gridsize); - end.y = fsnap(end.y, pathlib_gridsize); - - if(pointcontents(end) == CONTENT_EMPTY) - return pathlib_wateroutnode( start, end, doedge); - - tracebox(start, walknode_boxmin,walknode_boxmax, end, MOVE_WORLDONLY, self); - if(trace_fraction == 1) - pathlib_movenode_goodnode = 1; - - return end; -} - -vector pathlib_flynode(vector start,vector end) -{ - pathlib_movenode_goodnode = 0; - - end.x = fsnap(end.x, pathlib_gridsize); - end.y = fsnap(end.y, pathlib_gridsize); - - tracebox(start, walknode_boxmin,walknode_boxmax, end, MOVE_WORLDONLY, self); - if(trace_fraction == 1) - pathlib_movenode_goodnode = 1; - - return end; -} - -vector pathlib_walknode(vector start,vector end,float doedge) -{ - vector direction,point,last_point,s,e; - float steps, distance, i,laststep; - - pathlib_movenode_goodnode = 0; - - s = start; - e = end; - e.z = 0; - s.z = 0; - direction = normalize(s - e); - - distance = vlen(start - end); - laststep = distance / walknode_stepsize; - steps = floor(laststep); - laststep = laststep - steps; - - point = start; - s = point + walknode_stepup; - e = point - walknode_maxdrop; - - traceline(s, e,MOVE_WORLDONLY,self); - if(trace_fraction == 1.0) - return trace_endpos; - - if (floor_ok(trace_endpos) == 0) - return trace_endpos; - - last_point = trace_endpos; - - for(i = 0; i < steps; ++i) - { - point = last_point + direction * walknode_stepsize; - - s = point + walknode_stepup; - e = point - walknode_maxdrop; - traceline(s, e,MOVE_WORLDONLY,self); - if(trace_fraction == 1.0) - return trace_endpos; - - point = trace_endpos; - if (!floor_ok(trace_endpos)) - return trace_endpos; - - tracebox(last_point + walknode_boxup, walknode_boxmin,walknode_boxmax, point + walknode_boxup, MOVE_WORLDONLY, self); - if(trace_fraction != 1.0) - return trace_endpos; - - if(doedge) - if(edge_check(point,pathlib_edge_check_size)) - return trace_endpos; - - last_point = point; - } - - point = last_point + direction * walknode_stepsize * laststep; - - point.x = fsnap(point.x, pathlib_gridsize); - point.y = fsnap(point.y, pathlib_gridsize); - - s = point + walknode_stepup; - e = point - walknode_maxdrop; - traceline(s, e,MOVE_WORLDONLY,self); - - if(trace_fraction == 1.0) - return trace_endpos; - - point = trace_endpos; - - if (!floor_ok(trace_endpos)) - return trace_endpos; - - tracebox(last_point + walknode_boxup, walknode_boxmin,walknode_boxmax, point + walknode_boxup, MOVE_WORLDONLY, self); - if(trace_fraction != 1.0) - return trace_endpos; - - pathlib_movenode_goodnode = 1; - return point; -} - -var float pathlib_cost(entity parent,vector to, float static_cost); -float pathlib_g_static(entity parent,vector to, float static_cost) -{ - if(inwater(to)) - return parent.pathlib_node_g + static_cost * pathlib_movecost_waterfactor; - else - return parent.pathlib_node_g + static_cost; -} - -float pathlib_g_static_water(entity parent,vector to, float static_cost) -{ - if(inwater(to)) - return parent.pathlib_node_g + static_cost * pathlib_movecost_waterfactor; - else - return parent.pathlib_node_g + static_cost; -} - -float pathlib_g_euclidean(entity parent,vector to, float static_cost) -{ - return parent.pathlib_node_g + vlen(parent.origin - to); -} -float pathlib_g_euclidean_water(entity parent,vector to, float static_cost) -{ - if(inwater(to)) - return parent.pathlib_node_g + vlen(parent.origin - to) * pathlib_movecost_waterfactor; - else - return parent.pathlib_node_g + vlen(parent.origin - to); -} - -var float(vector from,vector to) pathlib_heuristic; - -/** - Manhattan Menas we expect to move up,down left or right - No diagonal moves espected. (like moving bewteen city blocks) -**/ -float pathlib_h_manhattan(vector a,vector b) -{ - //h(n) = D * (abs(n.x-goal.x) + abs(n.y-goal.y)) - - float h; - h = fabs(a.x - b.x); - h += fabs(a.y - b.y); - h *= pathlib_gridsize; - - return h; -} - -/** - This heuristic consider both stright and disagonal moves - to have teh same cost. -**/ -float pathlib_h_diagonal(vector a,vector b) -{ - //h(n) = D * max(abs(n.x-goal.x), abs(n.y-goal.y)) - float h,x,y; - - x = fabs(a.x - b.x); - y = fabs(a.y - b.y); - h = pathlib_movecost * max(x,y); - - return h; -} - -/** - This heuristic only considers the stright line distance. - Will usualy mean a lower H then G meaning A* Will speand more - and run slower. -**/ -float pathlib_h_euclidean(vector a,vector b) -{ - return vlen(a - b); -} - -/** - This heuristic consider both stright and disagonal moves, - But has a separate cost for diagonal moves. -**/ -float pathlib_h_diagonal2(vector a,vector b) -{ - float h_diag,h_str,h,x,y; - - /* - h_diagonal(n) = min(abs(n.x-goal.x), abs(n.y-goal.y)) - h_straight(n) = (abs(n.x-goal.x) + abs(n.y-goal.y)) - h(n) = D2 * h_diagonal(n) + D * (h_straight(n) - 2*h_diagonal(n))) - */ - - x = fabs(a.x - b.x); - y = fabs(a.y - b.y); - - h_diag = min(x,y); - h_str = x + y; - - h = pathlib_movecost_diag * h_diag; - h += pathlib_movecost * (h_str - 2 * h_diag); - - return h; -} - -/** - This heuristic consider both stright and disagonal moves, - But has a separate cost for diagonal moves. - - -**/ -float pathlib_h_diagonal2sdp(vector preprev,vector prev,vector point,vector end) -{ - float h_diag,h_str,h,x,y,z; - - //h_diagonal(n) = min(abs(n.x-goal.x), abs(n.y-goal.y)) - //h_straight(n) = (abs(n.x-goal.x) + abs(n.y-goal.y)) - //h(n) = D2 * h_diagonal(n) + D * (h_straight(n) - 2*h_diagonal(n))) - - x = fabs(point.x - end.x); - y = fabs(point.y - end.y); - z = fabs(point.z - end.z); - - h_diag = min3(x,y,z); - h_str = x + y + z; - - h = pathlib_movecost_diag * h_diag; - h += pathlib_movecost * (h_str - 2 * h_diag); - - float m; - vector d1,d2; - - d1 = normalize(preprev - point); - d2 = normalize(prev - point); - m = vlen(d1-d2); - //bprint("pathlib_h_diagonal2sdp-M = ",ftos(m),"\n"); - - return h * m; -} - - -float pathlib_h_diagonal3(vector a,vector b) -{ - float h_diag,h_str,h,x,y,z; - - //h_diagonal(n) = min(abs(n.x-goal.x), abs(n.y-goal.y)) - //h_straight(n) = (abs(n.x-goal.x) + abs(n.y-goal.y)) - //h(n) = D2 * h_diagonal(n) + D * (h_straight(n) - 2*h_diagonal(n))) - - x = fabs(a.x - b.x); - y = fabs(a.y - b.y); - z = fabs(a.z - b.z); - - h_diag = min3(x,y,z); - h_str = x + y + z; - - h = pathlib_movecost_diag * h_diag; - h += pathlib_movecost * (h_str - 2 * h_diag); - - return h; -} - -const float PATHLIB_NODEEXPIRE = 0.05; -float pathlib_scraplist_cnt; -entity newnode() -{ - entity n; -#ifdef PATHLIB_USE_NODESCRAP - if(pathlib_scraplist_cnt) - { - n = findentity(world,owner,scraplist); - if(n) - { - --pathlib_scraplist_cnt; - ++pathlib_recycle_cnt; - return n; - } - else - pathlib_scraplist_cnt = 0; - } -#endif - ++pathlib_made_cnt; - n = spawn(); - n.think = SUB_Remove; - n.nextthink = time + PATHLIB_NODEEXPIRE; - return n; -} - -void dumpnode(entity n) -{ -#ifdef PATHLIB_USE_NODESCRAP - ++pathlib_scraplist_cnt; - - n.path_next = world; - n.path_prev = world; - n.is_path_node = false; - n.owner = scraplist; -#else - //n.is_path_node = false; - n.think = SUB_Remove; - n.nextthink = time; -#endif -} - -entity pathlib_mknode(vector where,entity parent) -{ - entity node; - - node = newnode(); - node.is_path_node = true; - node.owner = openlist; - node.path_prev = parent; - - setorigin(node, where); - - ++pathlib_open_cnt; - - node.medium = pointcontents(where); - - return node; -} - -var float pathlib_expandnode(entity node, vector start, vector goal); -float pathlib_expandnode_star(entity node, vector start, vector goal); -float pathlib_expandnode_box(entity node, vector start, vector goal); - -var float pathlib_makenode(entity parent,vector start, vector to, vector goal,float cost); -float pathlib_makenode_adaptive(entity parent,vector start, vector to, vector goal,float cost) -{ - entity node; - float h,g,f,doedge; - vector where; - - ++pathlib_searched_cnt; - - if(inwater(parent.origin)) - { - pathlib_expandnode = pathlib_expandnode_box; - pathlib_movenode = pathlib_swimnode; - doedge = 0; - } - else - { - if(inwater(to)) - { - pathlib_expandnode = pathlib_expandnode_box; - pathlib_movenode = pathlib_swimnode; - doedge = 0; - } - else - { - - pathlib_expandnode = pathlib_expandnode_star; - pathlib_movenode = pathlib_walknode; - doedge = 1; - } - } - - where = pathlib_movenode(parent.origin,to,0); - if (!pathlib_movenode_goodnode) - return 0; - - if(doedge) - if(edge_check(where,pathlib_edge_check_size)) - return 0; - - if(parent.path_prev) - pathlib_h_diagonal2sdp(parent.path_prev.origin,parent.origin,where,goal); - - h = pathlib_heuristic(where,goal); - g = pathlib_cost(parent,where,cost); - f = g + h; - - node = findradius(where,pathlib_gridsize * 0.75); - while(node) - { - if(node.is_path_node == true) - { - ++pathlib_merge_cnt; - if(node.owner == openlist) - { - if(node.pathlib_node_g > g) - { - node.pathlib_node_h = h; - node.pathlib_node_g = g; - node.pathlib_node_f = f; - node.path_prev = parent; - } - - if (!best_open_node) - best_open_node = node; - else if(best_open_node.pathlib_node_f > node.pathlib_node_f) - best_open_node = node; - } - - return 1; - } - node = node.chain; - } - - node = pathlib_mknode(where,parent); - node.pathlib_node_h = h; - node.pathlib_node_g = g; - node.pathlib_node_f = f; - - if (!best_open_node) - best_open_node = node; - else if(best_open_node.pathlib_node_f > node.pathlib_node_f) - best_open_node = node; - - return 1; -} - -entity pathlib_getbestopen() -{ - entity node; - entity bestnode; - - if(best_open_node) - { - ++pathlib_bestcash_hits; - pathlib_bestcash_saved += pathlib_open_cnt; - - return best_open_node; - } - - node = findchainentity(owner,openlist); - if(!node) - return world; - - bestnode = node; - while(node) - { - ++pathlib_bestopen_seached; - if(node.pathlib_node_f < bestnode.pathlib_node_f) - bestnode = node; - - node = node.chain; - } - - return bestnode; -} - -void pathlib_close_node(entity node,vector goal) -{ - - if(node.owner == closedlist) - { - LOG_TRACE("Pathlib: Tried to close a closed node!\n"); - return; - } - - if(node == best_open_node) - best_open_node = world; - - ++pathlib_closed_cnt; - --pathlib_open_cnt; - - node.owner = closedlist; - - if(vlen(node.origin - goal) <= pathlib_gridsize) - { - vector goalmove; - - goalmove = pathlib_walknode(node.origin,goal,1); - if(pathlib_movenode_goodnode) - { - goal_node = node; - pathlib_foundgoal = true; - } - } -} - -float pathlib_expandnode_star(entity node, vector start, vector goal) -{ - vector point; - vector where; - float nodecnt = 0; - - where = node.origin; - - v_forward = '1 0 0'; - v_right = '0 1 0'; - - // Forward - point = where + v_forward * pathlib_gridsize; - nodecnt += pathlib_makenode(node,start,point,goal,pathlib_movecost); - - // Back - point = where - v_forward * pathlib_gridsize; - nodecnt += pathlib_makenode(node,start,point,goal,pathlib_movecost); - - // Right - point = where + v_right * pathlib_gridsize; - nodecnt += pathlib_makenode(node,start,point,goal,pathlib_movecost); - - // Left - point = where - v_right * pathlib_gridsize; - nodecnt += pathlib_makenode(node,start,point,goal,pathlib_movecost); - - // Forward-right - point = where + v_forward * pathlib_gridsize + v_right * pathlib_gridsize; - nodecnt += pathlib_makenode(node,start,point,goal,pathlib_movecost_diag); - - // Forward-left - point = where + v_forward * pathlib_gridsize - v_right * pathlib_gridsize; - nodecnt += pathlib_makenode(node,start,point,goal,pathlib_movecost_diag); - - // Back-right - point = where - v_forward * pathlib_gridsize + v_right * pathlib_gridsize; - nodecnt += pathlib_makenode(node,start,point,goal,pathlib_movecost_diag); - - // Back-left - point = where - v_forward * pathlib_gridsize - v_right * pathlib_gridsize; - nodecnt += pathlib_makenode(node,start,point,goal,pathlib_movecost_diag); - - return pathlib_open_cnt; -} - -float pathlib_expandnode_box(entity node, vector start, vector goal) -{ - vector v; - - for(v.z = node.origin.z - pathlib_gridsize; v.z <= node.origin.z + pathlib_gridsize; v.z += pathlib_gridsize) - for(v.y = node.origin.y - pathlib_gridsize; v.y <= node.origin.y + pathlib_gridsize; v.y += pathlib_gridsize) - for(v.x = node.origin.x - pathlib_gridsize; v.x <= node.origin.x + pathlib_gridsize; v.x += pathlib_gridsize) - { - if(vlen(v - node.origin)) - pathlib_makenode(node,start,v,goal,pathlib_movecost); - } - - return pathlib_open_cnt; -} - -void pathlib_cleanup() -{ - entity node; - - node = findfloat(world,is_path_node, true); - while(node) - { - dumpnode(node); - node = findfloat(node,is_path_node, true); - } - - if(openlist) - remove(openlist); - - if(closedlist) - remove(closedlist); - - best_open_node = world; - openlist = world; - closedlist = world; -} - -var float buildpath_nodefilter(vector n,vector c,vector p); -float buildpath_nodefilter_directional(vector n,vector c,vector p) -{ - vector d1,d2; - - d2 = normalize(p - c); - d1 = normalize(c - n); - - if(vlen(d1-d2) < 0.25) - return 1; - - return 0; -} - -float buildpath_nodefilter_moveskip(vector n,vector c,vector p) -{ - pathlib_walknode(p,n,1); - if(pathlib_movenode_goodnode) - return 1; - - return 0; -} - -entity path_build(entity next, vector where, entity prev, entity start) -{ - entity path; - - if(prev && next) - if(buildpath_nodefilter) - if(buildpath_nodefilter(next.origin,where,prev.origin)) - return next; - - - path = spawn(); - path.owner = start; - path.path_next = next; - - setorigin(path,where); - - if(!next) - path.classname = "path_end"; - else - { - if(!prev) - path.classname = "path_start"; - else - path.classname = "path_node"; - } - - return path; -} - -entity pathlib_astar(vector from,vector to) -{ - entity path, start, end, open, n, ln; - float ptime, ftime, ctime; - - ptime = gettime(GETTIME_REALTIME); - - pathlib_cleanup(); - - // Select water<->land capable node make/link - pathlib_makenode = pathlib_makenode_adaptive; - // Select XYZ cost estimate - pathlib_heuristic = pathlib_h_diagonal3; - // Select distance + waterfactor cost - pathlib_cost = pathlib_g_euclidean_water; - // Select star expander - pathlib_expandnode = pathlib_expandnode_star; - // Select walk simulation movement test - pathlib_movenode = pathlib_walknode; - // Filter final nodes by direction - buildpath_nodefilter = buildpath_nodefilter_directional; - - // If the start is in water we need diffrent settings - if(inwater(from)) - { - // Select volumetric node expaner - pathlib_expandnode = pathlib_expandnode_box; - - // Water movement test - pathlib_movenode = pathlib_swimnode; - } - - if (!openlist) - openlist = spawn(); - - if (!closedlist) - closedlist = spawn(); - - if (!scraplist) - scraplist = spawn(); - - pathlib_closed_cnt = 0; - pathlib_open_cnt = 0; - pathlib_made_cnt = 0; - pathlib_merge_cnt = 0; - pathlib_searched_cnt = 0; - pathlib_bestopen_seached = 0; - pathlib_bestcash_hits = 0; - pathlib_bestcash_saved = 0; - pathlib_recycle_cnt = 0; - - pathlib_gridsize = 128; - pathlib_movecost = pathlib_gridsize; - pathlib_movecost_diag = vlen(('1 1 0' * pathlib_gridsize)); - pathlib_movecost_waterfactor = 1.1; - pathlib_foundgoal = 0; - - walknode_boxmax = self.maxs * 1.5; - walknode_boxmin = self.mins * 1.5; - - pathlib_edge_check_size = (vlen(walknode_boxmin - walknode_boxmax) * 0.5); - - walknode_boxup = '0 0 2' * self.maxs.z; - walknode_stepsize = 32; - walknode_stepup = '0 0 1' * walknode_stepsize; - walknode_maxdrop = '0 0 3' * walknode_stepsize; - - from.x = fsnap(from.x,pathlib_gridsize); - from.y = fsnap(from.y,pathlib_gridsize); - - to.x = fsnap(to.x,pathlib_gridsize); - to.y = fsnap(to.y,pathlib_gridsize); - - LOG_TRACE("AStar init. ", ftos(pathlib_scraplist_cnt), " nodes on scrap\n"); - path = pathlib_mknode(from,world); - pathlib_close_node(path,to); - if(pathlib_foundgoal) - { - LOG_TRACE("AStar: Goal found on first node!\n"); - - open = spawn(); - open.owner = open; - open.classname = "path_end"; - setorigin(open,path.origin); - - pathlib_cleanup(); - - return open; - } - - if(pathlib_expandnode(path,from,to) <= 0) - { - LOG_TRACE("AStar path fail.\n"); - pathlib_cleanup(); - - return world; - } - - best_open_node = pathlib_getbestopen(); - n = best_open_node; - pathlib_close_node(best_open_node,to); - if(inwater(n.origin)) - pathlib_expandnode_box(n,from,to); - else - pathlib_expandnode_star(n,from,to); - - while(pathlib_open_cnt) - { - best_open_node = pathlib_getbestopen(); - n = best_open_node; - pathlib_close_node(best_open_node,to); - - if(inwater(n.origin)) - pathlib_expandnode_box(n,from,to); - else - pathlib_expandnode(n,from,to); - - if(pathlib_foundgoal) - { - LOG_TRACE("Target found. Rebuilding and filtering path...\n"); - ftime = gettime(GETTIME_REALTIME); - ptime = ftime - ptime; - - start = path_build(world,path.origin,world,world); - end = path_build(world,goal_node.origin,world,start); - ln = end; - - open = goal_node; - for(open = goal_node; open.path_prev != path; open = open.path_prev) - { - n = path_build(ln,open.origin,open.path_prev,start); - ln.path_prev = n; - ln = n; - } - start.path_next = n; - n.path_prev = start; - ftime = gettime(GETTIME_REALTIME) - ftime; - - ctime = gettime(GETTIME_REALTIME); - pathlib_cleanup(); - ctime = gettime(GETTIME_REALTIME) - ctime; - - -#ifdef DEBUGPATHING - pathlib_showpath2(start); - - LOG_TRACE("Time used - pathfinding: ", ftos(ptime),"\n"); - LOG_TRACE("Time used - rebuild & filter: ", ftos(ftime),"\n"); - LOG_TRACE("Time used - cleanup: ", ftos(ctime),"\n"); - LOG_TRACE("Time used - total: ", ftos(ptime + ftime + ctime),"\n"); - LOG_TRACE("Time used - # frames: ", ftos(ceil((ptime + ftime + ctime) / sys_frametime)),"\n\n"); - LOG_TRACE("Nodes - created: ", ftos(pathlib_made_cnt),"\n"); - LOG_TRACE("Nodes - open: ", ftos(pathlib_open_cnt),"\n"); - LOG_TRACE("Nodes - merged: ", ftos(pathlib_merge_cnt),"\n"); - LOG_TRACE("Nodes - closed: ", ftos(pathlib_closed_cnt),"\n"); - LOG_TRACE("Nodes - searched: ", ftos(pathlib_searched_cnt),"\n"); - - if(pathlib_recycle_cnt) - LOG_TRACE("Nodes - make/reuse: ", ftos(pathlib_made_cnt / pathlib_recycle_cnt),"\n"); - if(pathlib_recycle_cnt) - LOG_TRACE("Nodes - reused: ", ftos(pathlib_recycle_cnt),"\n"); - - LOG_TRACE("Nodes bestopen searched: ", ftos(pathlib_bestopen_seached),"\n"); - LOG_TRACE("Nodes bestcash - hits: ", ftos(pathlib_bestcash_hits),"\n"); - LOG_TRACE("Nodes bestcash - save: ", ftos(pathlib_bestcash_saved),"\n"); - LOG_TRACE("AStar done. ", ftos(pathlib_scraplist_cnt), " nodes on scrap\n\n"); -#endif - return start; - } - } - - LOG_TRACE("A* Faild to find a path! Try a smaller gridsize.\n"); - - pathlib_cleanup(); - - return world; -} diff --git a/qcsrc/server/pathlib.qh b/qcsrc/server/pathlib.qh deleted file mode 100644 index da4ae0cf88..0000000000 --- a/qcsrc/server/pathlib.qh +++ /dev/null @@ -1,48 +0,0 @@ -#ifndef PATHLIB_H -#define PATHLIB_H - -//#define PATHLIB_RDFIELDS -#ifdef PATHLIB_RDFIELDS - #define path_next swampslug - #define path_prev lasertarget -#else - .entity path_next; - .entity path_prev; -#endif - -entity openlist; -entity closedlist; -entity scraplist; - -.float pathlib_node_g; -.float pathlib_node_h; -.float pathlib_node_f; - -float pathlib_open_cnt; -float pathlib_closed_cnt; -float pathlib_made_cnt; -float pathlib_merge_cnt; -float pathlib_recycle_cnt; -float pathlib_searched_cnt; - -float pathlib_bestopen_seached; -float pathlib_bestcash_hits; -float pathlib_bestcash_saved; - -float pathlib_gridsize; - -float pathlib_movecost; -float pathlib_movecost_diag; -float pathlib_movecost_waterfactor; - -float pathlib_edge_check_size; - -float pathlib_foundgoal; -entity goal_node; - -entity best_open_node; -.float is_path_node; - -#define inwater(point) (pointcontents(point) == CONTENT_WATER) - -#endif diff --git a/qcsrc/server/pathlib/costs.qc b/qcsrc/server/pathlib/costs.qc index 878e8fd5b1..3e452f66e7 100644 --- a/qcsrc/server/pathlib/costs.qc +++ b/qcsrc/server/pathlib/costs.qc @@ -1,4 +1,4 @@ -#include "../pathlib.qh" +#include "pathlib.qh" float pathlib_g_static(entity parent,vector to, float static_cost) { diff --git a/qcsrc/server/pathlib/debug.qc b/qcsrc/server/pathlib/debug.qc index 09dae70edc..37e167aae7 100644 --- a/qcsrc/server/pathlib/debug.qc +++ b/qcsrc/server/pathlib/debug.qc @@ -1,4 +1,4 @@ -#include "../pathlib.qh" +#include "pathlib.qh" MODEL(SQUARE, "models/pathlib/square.md3"); MODEL(SQUARE_GOOD, "models/pathlib/goodsquare.md3"); diff --git a/qcsrc/server/portals.qc b/qcsrc/server/portals.qc index 7501b63607..30fa073849 100644 --- a/qcsrc/server/portals.qc +++ b/qcsrc/server/portals.qc @@ -414,14 +414,14 @@ void Portal_Remove(entity portal, float killed) if(killed) { fixedmakevectors(portal.mangle); - sound(portal, CH_SHOTS, "porto/explode.wav", VOL_BASE, ATTEN_NORM); + sound(portal, CH_SHOTS, SND_PORTO_EXPLODE, VOL_BASE, ATTEN_NORM); Send_Effect(EFFECT_ROCKET_EXPLODE, portal.origin + v_forward * 16, v_forward * 1024, 4); remove(portal); } else { Portal_MakeBrokenPortal(portal); - sound(portal, CH_SHOTS, "porto/expire.wav", VOL_BASE, ATTEN_NORM); + sound(portal, CH_SHOTS, SND_PORTO_EXPIRE, VOL_BASE, ATTEN_NORM); SUB_SetFade(portal, time, 0.5); } } diff --git a/qcsrc/server/progs.inc b/qcsrc/server/progs.inc index 069c964590..5d7af0cd2b 100644 --- a/qcsrc/server/progs.inc +++ b/qcsrc/server/progs.inc @@ -30,7 +30,6 @@ #include "mapvoting.qc" #include "miscfunctions.qc" #include "movelib.qc" -// #include "pathlib.qc" // TODO: was never used. Seems to duplicate `pathlib/` #include "playerdemo.qc" #include "portals.qc" #include "race.qc" @@ -84,6 +83,7 @@ #include "../common/campaign_file.qc" #include "../common/campaign_setup.qc" #include "../common/effects/effects.qc" +#include "../common/effects/effectinfo.qc" #include "../common/mapinfo.qc" #include "../common/monsters/spawn.qc" #include "../common/monsters/sv_monsters.qc" @@ -108,7 +108,7 @@ #include "../common/turrets/sv_turrets.qc" #include "../common/turrets/config.qc" #include "../common/turrets/util.qc" -#include "../common/turrets/turrets.qc" +#include "../common/turrets/all.qc" #include "../common/turrets/checkpoint.qc" #include "../common/turrets/targettrigger.qc" #include "../common/weapons/config.qc" diff --git a/qcsrc/server/race.qc b/qcsrc/server/race.qc index 1638dc9855..fbf1eaa185 100644 --- a/qcsrc/server/race.qc +++ b/qcsrc/server/race.qc @@ -86,7 +86,7 @@ string race_readName(string map, float pos) const float MAX_CHECKPOINTS = 255; -void spawnfunc_target_checkpoint(); +spawnfunc(target_checkpoint); .float race_penalty; .float race_penalty_accumulator; @@ -929,8 +929,8 @@ vector trigger_race_checkpoint_spawn_evalfunc(entity player, entity spot, vector return current; } -void spawnfunc_trigger_race_checkpoint() -{SELFPARAM(); +spawnfunc(trigger_race_checkpoint) +{ vector o; if(!g_race && !g_cts) { remove(self); return; } @@ -977,8 +977,8 @@ void spawnfunc_trigger_race_checkpoint() InitializeEntity(self, trigger_race_checkpoint_verify, INITPRIO_FINDTARGET); } -void spawnfunc_target_checkpoint() // defrag entity -{SELFPARAM(); +spawnfunc(target_checkpoint) // defrag entity +{ vector o; if(!g_race && !g_cts) { remove(self); return; } defrag_ents = 1; @@ -1018,8 +1018,8 @@ void spawnfunc_target_checkpoint() // defrag entity InitializeEntity(self, trigger_race_checkpoint_verify, INITPRIO_FINDTARGET); } -void spawnfunc_target_startTimer() { spawnfunc_target_checkpoint(); } -void spawnfunc_target_stopTimer() { spawnfunc_target_checkpoint(); } +spawnfunc(target_startTimer) { spawnfunc_target_checkpoint(this); } +spawnfunc(target_stopTimer) { spawnfunc_target_checkpoint(this); } void race_AbandonRaceCheck(entity p) { @@ -1059,11 +1059,11 @@ void race_RetractPlayer() self.race_checkpoint = self.race_respawn_checkpoint; } -void spawnfunc_info_player_race (void) -{SELFPARAM(); +spawnfunc(info_player_race) +{ if(!g_race && !g_cts) { remove(self); return; } ++race_spawns; - spawnfunc_info_player_deathmatch(); + spawnfunc_info_player_deathmatch(this); if(self.race_place > race_highest_place_spawn) race_highest_place_spawn = self.race_place; @@ -1141,8 +1141,8 @@ void penalty_use() race_ImposePenaltyTime(activator, self.race_penalty, self.race_penalty_reason); } -void spawnfunc_trigger_race_penalty() -{SELFPARAM(); +spawnfunc(trigger_race_penalty) +{ EXACTTRIGGER_INIT; self.use = penalty_use; diff --git a/qcsrc/server/spawnpoints.qc b/qcsrc/server/spawnpoints.qc index 3a574b28b2..3c2851b91f 100644 --- a/qcsrc/server/spawnpoints.qc +++ b/qcsrc/server/spawnpoints.qc @@ -141,18 +141,18 @@ void relocate_spawnpoint() { Net_LinkEntity(self, false, 0, SpawnPoint_Send); } } -void spawnfunc_info_player_survivor (void) +spawnfunc(info_player_survivor) { - spawnfunc_info_player_deathmatch(); + spawnfunc_info_player_deathmatch(this); } -void spawnfunc_info_player_start (void) +spawnfunc(info_player_start) { - spawnfunc_info_player_deathmatch(); + spawnfunc_info_player_deathmatch(this); } -void spawnfunc_info_player_deathmatch (void) -{SELFPARAM(); +spawnfunc(info_player_deathmatch) +{ self.classname = "info_player_deathmatch"; relocate_spawnpoint(); } @@ -160,47 +160,47 @@ void spawnfunc_info_player_deathmatch (void) /*QUAKED spawnfunc_info_player_team1 (1 0 0) (-16 -16 -24) (16 16 24) Starting point for a player in team one (Red). Keys: "angle" viewing angle when spawning. */ -void spawnfunc_info_player_team1() -{SELFPARAM(); - if(g_assault) { remove(self); return; } +spawnfunc(info_player_team1) +{ + if(g_assault) { remove(this); return; } - self.team = NUM_TEAM_1; // red - spawnfunc_info_player_deathmatch(); + this.team = NUM_TEAM_1; // red + spawnfunc_info_player_deathmatch(this); } /*QUAKED spawnfunc_info_player_team2 (1 0 0) (-16 -16 -24) (16 16 24) Starting point for a player in team two (Blue). Keys: "angle" viewing angle when spawning. */ -void spawnfunc_info_player_team2() -{SELFPARAM(); - if(g_assault) { remove(self); return; } +spawnfunc(info_player_team2) +{ + if(g_assault) { remove(this); return; } - self.team = NUM_TEAM_2; // blue - spawnfunc_info_player_deathmatch(); + this.team = NUM_TEAM_2; // blue + spawnfunc_info_player_deathmatch(this); } /*QUAKED spawnfunc_info_player_team3 (1 0 0) (-16 -16 -24) (16 16 24) Starting point for a player in team three (Yellow). Keys: "angle" viewing angle when spawning. */ -void spawnfunc_info_player_team3() -{SELFPARAM(); - if(g_assault) { remove(self); return; } +spawnfunc(info_player_team3) +{ + if(g_assault) { remove(this); return; } - self.team = NUM_TEAM_3; // yellow - spawnfunc_info_player_deathmatch(); + this.team = NUM_TEAM_3; // yellow + spawnfunc_info_player_deathmatch(this); } /*QUAKED spawnfunc_info_player_team4 (1 0 0) (-16 -16 -24) (16 16 24) Starting point for a player in team four (Purple). Keys: "angle" viewing angle when spawning. */ -void spawnfunc_info_player_team4() -{SELFPARAM(); - if(g_assault) { remove(self); return; } +spawnfunc(info_player_team4) +{ + if(g_assault) { remove(this); return; } - self.team = NUM_TEAM_4; // purple - spawnfunc_info_player_deathmatch(); + this.team = NUM_TEAM_4; // purple + spawnfunc_info_player_deathmatch(this); } // Returns: diff --git a/qcsrc/server/spawnpoints.qh b/qcsrc/server/spawnpoints.qh index e697001c18..c6ed28a4c7 100644 --- a/qcsrc/server/spawnpoints.qh +++ b/qcsrc/server/spawnpoints.qh @@ -6,6 +6,6 @@ float spawnpoint_nag; float SpawnEvent_Send(entity to, int sf); entity Spawn_FilterOutBadSpots(entity firstspot, float mindist, float teamcheck); entity SelectSpawnPoint (float anypoint); -void spawnfunc_info_player_deathmatch(); +spawnfunc(info_player_deathmatch); void spawnpoint_use(); #endif diff --git a/qcsrc/server/steerlib.qc b/qcsrc/server/steerlib.qc index 6ebfc8ad31..fbf84da32b 100644 --- a/qcsrc/server/steerlib.qc +++ b/qcsrc/server/steerlib.qc @@ -640,7 +640,7 @@ void flocker_hunter_think() float globflockcnt; -void spawnfunc_flockerspawn() +spawnfunc(flockerspawn) {SELFPARAM(); ++globflockcnt; diff --git a/qcsrc/server/sv_main.qc b/qcsrc/server/sv_main.qc index 948e2d3743..138051827b 100644 --- a/qcsrc/server/sv_main.qc +++ b/qcsrc/server/sv_main.qc @@ -90,7 +90,7 @@ void CreatureFrame (void) if (self.watersound_finished < time) { self.watersound_finished = time + 0.5; - sound (self, CH_PLAYER_SINGLE, "player/lava.wav", VOL_BASE, ATTEN_NORM); + sound (self, CH_PLAYER_SINGLE, SND_LAVA, VOL_BASE, ATTEN_NORM); } Damage (self, world, world, autocvar_g_balance_contents_playerdamage_lava * autocvar_g_balance_contents_damagerate * self.waterlevel, DEATH_LAVA, self.origin, '0 0 0'); } @@ -99,7 +99,7 @@ void CreatureFrame (void) if (self.watersound_finished < time) { self.watersound_finished = time + 0.5; - sound (self, CH_PLAYER_SINGLE, "player/slime.wav", VOL_BASE, ATTEN_NORM); + sound (self, CH_PLAYER_SINGLE, SND_SLIME, VOL_BASE, ATTEN_NORM); } Damage (self, world, world, autocvar_g_balance_contents_playerdamage_slime * autocvar_g_balance_contents_damagerate * self.waterlevel, DEATH_SLIME, self.origin, '0 0 0'); } diff --git a/qcsrc/server/sys-pre.qh b/qcsrc/server/sys-pre.qh index bfdcdb860e..067e014097 100644 --- a/qcsrc/server/sys-pre.qh +++ b/qcsrc/server/sys-pre.qh @@ -3,7 +3,6 @@ #define objerror builtin_objerror #define droptofloor builtin_droptofloor -#define sound builtin_sound #define remove builtin_remove #define cvar_set builtin_cvar_set #define cvar_string builtin_cvar_string diff --git a/qcsrc/server/t_halflife.qc b/qcsrc/server/t_halflife.qc index f041dd3965..0438282006 100644 --- a/qcsrc/server/t_halflife.qc +++ b/qcsrc/server/t_halflife.qc @@ -5,30 +5,30 @@ .float rendermode; .vector rendercolor; -void spawnfunc_weapon_crossbow() {} -void spawnfunc_weapon_handgrenade() {} -void spawnfunc_ammo_crossbow() {} -void spawnfunc_ammo_9mmclip() {} -void spawnfunc_ammo_gaussclip() {} -void spawnfunc_weapon_rpg() {} -void spawnfunc_weapon_357() {} +spawnfunc(weapon_crossbow) {} +spawnfunc(weapon_handgrenade) {} +spawnfunc(ammo_crossbow) {} +spawnfunc(ammo_9mmclip) {} +spawnfunc(ammo_gaussclip) {} +spawnfunc(weapon_rpg) {} +spawnfunc(weapon_357) {} void ammo_ARgrenades() {} -void spawnfunc_item_battery() {} -void spawnfunc_ammo_rpgclip() {} +spawnfunc(item_battery) {} +spawnfunc(ammo_rpgclip) {} void weapon_9mmAR() {} -void spawnfunc_weapon_tripmine() {} -void spawnfunc_weapon_snark() {} -void spawnfunc_ammo_buckshot() {} +spawnfunc(weapon_tripmine) {} +spawnfunc(weapon_snark) {} +spawnfunc(ammo_buckshot) {} void ammo_9mmAR() {} -void spawnfunc_ammo_357() {} -void spawnfunc_weapon_gauss() {} -void spawnfunc_weapon_hornetgun() {} -//void spawnfunc_weapon_shotgun() {} -void spawnfunc_item_healthkit() {} -void spawnfunc_item_longjump() {} -void spawnfunc_item_antidote() {} -void spawnfunc_func_recharge() {} -void spawnfunc_info_node() {} -void spawnfunc_env_sound() {} -void spawnfunc_light_spot() {} -void spawnfunc_func_healthcharger() {} +spawnfunc(ammo_357) {} +spawnfunc(weapon_gauss) {} +spawnfunc(weapon_hornetgun) {} +//spawnfunc(weapon_shotgun) {} +spawnfunc(item_healthkit) {} +spawnfunc(item_longjump) {} +spawnfunc(item_antidote) {} +spawnfunc(func_recharge) {} +spawnfunc(info_node) {} +spawnfunc(env_sound) {} +spawnfunc(light_spot) {} +spawnfunc(func_healthcharger) {} diff --git a/qcsrc/server/t_items.qc b/qcsrc/server/t_items.qc index 0fbbf2732e..015d4aeb2c 100644 --- a/qcsrc/server/t_items.qc +++ b/qcsrc/server/t_items.qc @@ -436,11 +436,11 @@ void Item_Respawn (void) Item_Show(self, 1); // this is ugly... if(self.items == ITEM_Strength.m_itemid) - sound (self, CH_TRIGGER, "misc/strength_respawn.wav", VOL_BASE, ATTEN_NORM); // play respawn sound + sound (self, CH_TRIGGER, SND_STRENGTH_RESPAWN, VOL_BASE, ATTEN_NORM); // play respawn sound else if(self.items == ITEM_Shield.m_itemid) - sound (self, CH_TRIGGER, "misc/shield_respawn.wav", VOL_BASE, ATTEN_NORM); // play respawn sound + sound (self, CH_TRIGGER, SND_SHIELD_RESPAWN, VOL_BASE, ATTEN_NORM); // play respawn sound else - sound (self, CH_TRIGGER, "misc/itemrespawn.wav", VOL_BASE, ATTEN_NORM); // play respawn sound + sound (self, CH_TRIGGER, SND_ITEMRESPAWN, VOL_BASE, ATTEN_NORM); // play respawn sound setorigin (self, self.origin); if (Item_ItemsTime_Allow(self.itemdef, self.weapons)) @@ -472,15 +472,24 @@ void Item_RespawnCountdown (void) if(self.count == 1) { MUTATOR_CALLHOOK(Item_RespawnCountdown, string_null, '0 0 0'); - int wpextra = 0; - entity e = self.itemdef; - if (e) wpextra = e.m_id; - if (self.flags & FL_WEAPON) { - entity wi = get_weaponinfo(self.weapon); - if (wi) wpextra = wi.m_id; - } - entity wp = WaypointSprite_Spawn(WP_Item, 0, 0, self, '0 0 64', world, 0, self, waypointsprite_attached, true, RADARICON_POWERUP); - wp.wp_extra = wpextra; + do { + { + entity wi = get_weaponinfo(self.weapon); + if (wi.m_id) { + entity wp = WaypointSprite_Spawn(WP_Weapon, 0, 0, self, '0 0 64', world, 0, self, waypointsprite_attached, true, RADARICON_POWERUP); + wp.wp_extra = wi.m_id; + break; + } + } + { + entity ii = self.itemdef; + if (ii.m_id) { + entity wp = WaypointSprite_Spawn(WP_Item, 0, 0, self, '0 0 64', world, 0, self, waypointsprite_attached, true, RADARICON_POWERUP); + wp.wp_extra = ii.m_id; + break; + } + } + } while (0); if(self.waypointsprite_attached) { GameItem def = self.itemdef; @@ -498,7 +507,7 @@ void Item_RespawnCountdown (void) if(self.waypointsprite_visible_for_player(e)) { msg_entity = e; - soundto(MSG_ONE, this, CH_TRIGGER, "misc/itemrespawncountdown.wav", VOL_BASE, ATTEN_NORM); // play respawn sound + soundto(MSG_ONE, this, CH_TRIGGER, SND(ITEMRESPAWNCOUNTDOWN), VOL_BASE, ATTEN_NORM); // play respawn sound } setself(this); @@ -506,7 +515,7 @@ void Item_RespawnCountdown (void) //WaypointSprite_UpdateHealth(self.waypointsprite_attached, self.count); } else - sound(self, CH_TRIGGER, "misc/itemrespawncountdown.wav", VOL_BASE, ATTEN_NORM); // play respawn sound + sound(self, CH_TRIGGER, SND_ITEMRESPAWNCOUNTDOWN, VOL_BASE, ATTEN_NORM); // play respawn sound } } @@ -750,7 +759,7 @@ void Item_Touch (void) other.last_pickup = time; Send_Effect(EFFECT_ITEM_PICKUP, CENTER_OR_VIEWOFS(self), '0 0 0', 1); - sound (other, CH_TRIGGER, self.item_pickupsound, VOL_BASE, ATTEN_NORM); + _sound (other, CH_TRIGGER, (self.item_pickupsound ? self.item_pickupsound : self.item_pickupsound_ent.sound_str()), VOL_BASE, ATTEN_NORM); if (self.classname == "droppedweapon") remove (self); @@ -1119,14 +1128,6 @@ void StartItem (string itemmodel, string pickupsound, float defaultrespawntime, precache_model (self.model); precache_sound (self.item_pickupsound); - precache_sound ("misc/itemrespawncountdown.wav"); - if(itemid == ITEM_Strength.m_itemid) - precache_sound ("misc/strength_respawn.wav"); - else if(itemid == ITEM_Shield.m_itemid) - precache_sound ("misc/shield_respawn.wav"); - else - precache_sound ("misc/itemrespawn.wav"); - if((itemflags & (FL_POWERUP | FL_WEAPON)) || (itemid & (IT_HEALTH | IT_ARMOR | IT_KEY1 | IT_KEY2))) self.target = "###item###"; // for finding the nearest item using find() @@ -1196,21 +1197,14 @@ void StartItem (string itemmodel, string pickupsound, float defaultrespawntime, } } -string Item_Model(string item_mdl) -{ - string output = strcat("models/items/", item_mdl); - MUTATOR_CALLHOOK(ItemModel, item_mdl, output); - return strzone(item_model_output); -} - void StartItemA (entity a) {SELFPARAM(); self.itemdef = a; - StartItem(Item_Model(a.m_model), a.m_sound, a.m_respawntime(), a.m_respawntimejitter(), a.m_name, a.m_itemid, 0, a.m_itemflags, a.m_pickupevalfunc, a.m_botvalue); + StartItem(strzone(a.m_model.model_str()), a.m_sound, a.m_respawntime(), a.m_respawntimejitter(), a.m_name, a.m_itemid, 0, a.m_itemflags, a.m_pickupevalfunc, a.m_botvalue); } -void spawnfunc_item_rockets() -{SELFPARAM(); +spawnfunc(item_rockets) +{ if(!self.ammo_rockets) self.ammo_rockets = g_pickup_rockets; if(!self.pickup_anyway) @@ -1218,14 +1212,14 @@ void spawnfunc_item_rockets() StartItemA (ITEM_Rockets); } -void spawnfunc_item_bullets() -{SELFPARAM(); +spawnfunc(item_bullets) +{ if(!weaponswapping) if(autocvar_sv_q3acompat_machineshotgunswap) if(self.classname != "droppedweapon") { weaponswapping = true; - spawnfunc_item_shells(); + spawnfunc_item_shells(this); weaponswapping = false; return; } @@ -1237,8 +1231,8 @@ void spawnfunc_item_bullets() StartItemA (ITEM_Bullets); } -void spawnfunc_item_cells() -{SELFPARAM(); +spawnfunc(item_cells) +{ if(!self.ammo_cells) self.ammo_cells = g_pickup_cells; if(!self.pickup_anyway) @@ -1246,8 +1240,8 @@ void spawnfunc_item_cells() StartItemA (ITEM_Cells); } -void spawnfunc_item_plasma() -{SELFPARAM(); +spawnfunc(item_plasma) +{ if(!self.ammo_plasma) self.ammo_plasma = g_pickup_plasma; if(!self.pickup_anyway) @@ -1255,14 +1249,14 @@ void spawnfunc_item_plasma() StartItemA (ITEM_Plasma); } -void spawnfunc_item_shells() -{SELFPARAM(); +spawnfunc(item_shells) +{ if(!weaponswapping) if(autocvar_sv_q3acompat_machineshotgunswap) if(self.classname != "droppedweapon") { weaponswapping = true; - spawnfunc_item_bullets(); + spawnfunc_item_bullets(this); weaponswapping = false; return; } @@ -1274,8 +1268,8 @@ void spawnfunc_item_shells() StartItemA (ITEM_Shells); } -void spawnfunc_item_armor_small() -{SELFPARAM(); +spawnfunc(item_armor_small) +{ if(!self.armorvalue) self.armorvalue = g_pickup_armorsmall; if(!self.max_armorvalue) @@ -1285,8 +1279,8 @@ void spawnfunc_item_armor_small() StartItemA (ITEM_ArmorSmall); } -void spawnfunc_item_armor_medium() -{SELFPARAM(); +spawnfunc(item_armor_medium) +{ if(!self.armorvalue) self.armorvalue = g_pickup_armormedium; if(!self.max_armorvalue) @@ -1296,8 +1290,8 @@ void spawnfunc_item_armor_medium() StartItemA (ITEM_ArmorMedium); } -void spawnfunc_item_armor_big() -{SELFPARAM(); +spawnfunc(item_armor_big) +{ if(!self.armorvalue) self.armorvalue = g_pickup_armorbig; if(!self.max_armorvalue) @@ -1307,8 +1301,8 @@ void spawnfunc_item_armor_big() StartItemA (ITEM_ArmorLarge); } -void spawnfunc_item_armor_large() -{SELFPARAM(); +spawnfunc(item_armor_large) +{ if(!self.armorvalue) self.armorvalue = g_pickup_armorlarge; if(!self.max_armorvalue) @@ -1318,8 +1312,8 @@ void spawnfunc_item_armor_large() StartItemA (ITEM_ArmorMega); } -void spawnfunc_item_health_small() -{SELFPARAM(); +spawnfunc(item_health_small) +{ if(!self.max_health) self.max_health = g_pickup_healthsmall_max; if(!self.health) @@ -1329,8 +1323,8 @@ void spawnfunc_item_health_small() StartItemA (ITEM_HealthSmall); } -void spawnfunc_item_health_medium() -{SELFPARAM(); +spawnfunc(item_health_medium) +{ if(!self.max_health) self.max_health = g_pickup_healthmedium_max; if(!self.health) @@ -1340,8 +1334,8 @@ void spawnfunc_item_health_medium() StartItemA (ITEM_HealthMedium); } -void spawnfunc_item_health_large() -{SELFPARAM(); +spawnfunc(item_health_large) +{ if(!self.max_health) self.max_health = g_pickup_healthlarge_max; if(!self.health) @@ -1351,8 +1345,8 @@ void spawnfunc_item_health_large() StartItemA (ITEM_HealthLarge); } -void spawnfunc_item_health_mega() -{SELFPARAM(); +spawnfunc(item_health_mega) +{ if(!self.max_health) self.max_health = g_pickup_healthmega_max; if(!self.health) @@ -1363,29 +1357,28 @@ void spawnfunc_item_health_mega() } // support old misnamed entities -void spawnfunc_item_armor1() { spawnfunc_item_armor_small(); } // FIXME: in Quake this is green armor, in Xonotic maps it is an armor shard -void spawnfunc_item_armor25() { spawnfunc_item_armor_large(); } -void spawnfunc_item_health1() { spawnfunc_item_health_small(); } -void spawnfunc_item_health25() { spawnfunc_item_health_medium(); } -void spawnfunc_item_health100() { spawnfunc_item_health_mega(); } +spawnfunc(item_armor1) { spawnfunc_item_armor_small(this); } // FIXME: in Quake this is green armor, in Xonotic maps it is an armor shard +spawnfunc(item_armor25) { spawnfunc_item_armor_large(this); } +spawnfunc(item_health1) { spawnfunc_item_health_small(this); } +spawnfunc(item_health25) { spawnfunc_item_health_medium(this); } +spawnfunc(item_health100) { spawnfunc_item_health_mega(this); } -void spawnfunc_item_strength() -{SELFPARAM(); - precache_sound("weapons/strength_fire.wav"); +spawnfunc(item_strength) +{ if(!self.strength_finished) self.strength_finished = autocvar_g_balance_powerup_strength_time; StartItemA (ITEM_Strength); } -void spawnfunc_item_invincible() -{SELFPARAM(); +spawnfunc(item_invincible) +{ if(!self.invincible_finished) self.invincible_finished = autocvar_g_balance_powerup_invincible_time; StartItemA (ITEM_Shield); } // compatibility: -void spawnfunc_item_quad() {SELFPARAM(); self.classname = "item_strength";spawnfunc_item_strength();} +spawnfunc(item_quad) { self.classname = "item_strength";spawnfunc_item_strength(this);} void target_items_use() {SELFPARAM(); @@ -1411,8 +1404,8 @@ void target_items_use() centerprint(activator, self.message); } -void spawnfunc_target_items (void) -{SELFPARAM(); +spawnfunc(target_items) +{ float n, i, j; entity e; string s; @@ -1425,13 +1418,6 @@ void spawnfunc_target_items (void) if(!self.superweapons_finished) self.superweapons_finished = autocvar_g_balance_superweapons_time; - precache_sound("misc/itempickup.wav"); - precache_sound("misc/megahealth.wav"); - precache_sound("misc/armor25.wav"); - precache_sound("misc/powerup.wav"); - precache_sound("misc/poweroff.wav"); - precache_sound(W_Sound("weaponpickup")); - n = tokenize_console(self.netname); if(argv(0) == "give") { @@ -1536,8 +1522,8 @@ void spawnfunc_target_items (void) } } -void spawnfunc_item_fuel(void) -{SELFPARAM(); +spawnfunc(item_fuel) +{ if(!self.ammo_fuel) self.ammo_fuel = g_pickup_fuel; if(!self.pickup_anyway) @@ -1545,23 +1531,23 @@ void spawnfunc_item_fuel(void) StartItemA (ITEM_JetpackFuel); } -void spawnfunc_item_fuel_regen(void) +spawnfunc(item_fuel_regen) { if(start_items & ITEM_JetpackRegen.m_itemid) { - spawnfunc_item_fuel(); + spawnfunc_item_fuel(this); return; } StartItemA (ITEM_JetpackRegen); } -void spawnfunc_item_jetpack(void) -{SELFPARAM(); +spawnfunc(item_jetpack) +{ if(!self.ammo_fuel) self.ammo_fuel = g_pickup_fuel_jetpack; if(start_items & ITEM_Jetpack.m_itemid) { - spawnfunc_item_fuel(); + spawnfunc_item_fuel(this); return; } StartItemA (ITEM_Jetpack); @@ -1660,12 +1646,12 @@ void GiveSound(entity e, float v0, float v1, float t, string snd_incr, string sn if(v1 <= v0 - t) { if(snd_decr != "") - sound (e, CH_TRIGGER, snd_decr, VOL_BASE, ATTEN_NORM); + _sound (e, CH_TRIGGER, snd_decr, VOL_BASE, ATTEN_NORM); } else if(v0 >= v0 + t) { if(snd_incr != "") - sound (e, CH_TRIGGER, snd_incr, VOL_BASE, ATTEN_NORM); + _sound (e, CH_TRIGGER, snd_incr, VOL_BASE, ATTEN_NORM); } } @@ -1831,31 +1817,31 @@ float GiveItems(entity e, float beginarg, float endarg) op = OP_SET; } - POSTGIVE_BIT(e, items, ITEM_JetpackRegen.m_itemid, "misc/itempickup.wav", string_null); - POSTGIVE_BIT(e, items, IT_UNLIMITED_SUPERWEAPONS, "misc/powerup.wav", "misc/poweroff.wav"); - POSTGIVE_BIT(e, items, IT_UNLIMITED_WEAPON_AMMO, "misc/powerup.wav", "misc/poweroff.wav"); - POSTGIVE_BIT(e, items, ITEM_Jetpack.m_itemid, "misc/itempickup.wav", string_null); + POSTGIVE_BIT(e, items, ITEM_JetpackRegen.m_itemid, SND(ITEMPICKUP), string_null); + POSTGIVE_BIT(e, items, IT_UNLIMITED_SUPERWEAPONS, SND(POWERUP), SND(POWEROFF)); + POSTGIVE_BIT(e, items, IT_UNLIMITED_WEAPON_AMMO, SND(POWERUP), SND(POWEROFF)); + POSTGIVE_BIT(e, items, ITEM_Jetpack.m_itemid, SND(ITEMPICKUP), string_null); for(j = WEP_FIRST; j <= WEP_LAST; ++j) { wi = get_weaponinfo(j); if(wi.weapon) { - POSTGIVE_WEAPON(e, j, W_Sound("weaponpickup"), string_null); + POSTGIVE_WEAPON(e, j, SND(WEAPONPICKUP), string_null); if (!(save_weapons & WepSet_FromWeapon(j))) if(e.weapons & WepSet_FromWeapon(j)) WEP_ACTION(wi.weapon, WR_INIT); } } - POSTGIVE_VALUE(e, strength_finished, 1, "misc/powerup.wav", "misc/poweroff.wav"); - POSTGIVE_VALUE(e, invincible_finished, 1, "misc/powerup_shield.wav", "misc/poweroff.wav"); - POSTGIVE_VALUE(e, ammo_nails, 0, "misc/itempickup.wav", string_null); - POSTGIVE_VALUE(e, ammo_cells, 0, "misc/itempickup.wav", string_null); - POSTGIVE_VALUE(e, ammo_plasma, 0, "misc/itempickup.wav", string_null); - POSTGIVE_VALUE(e, ammo_shells, 0, "misc/itempickup.wav", string_null); - POSTGIVE_VALUE(e, ammo_rockets, 0, "misc/itempickup.wav", string_null); - POSTGIVE_VALUE_ROT(e, ammo_fuel, 1, pauserotfuel_finished, autocvar_g_balance_pause_fuel_rot, pauseregen_finished, autocvar_g_balance_pause_fuel_regen, "misc/itempickup.wav", string_null); - POSTGIVE_VALUE_ROT(e, armorvalue, 1, pauserotarmor_finished, autocvar_g_balance_pause_armor_rot, pauseregen_finished, autocvar_g_balance_pause_health_regen, "misc/armor25.wav", string_null); - POSTGIVE_VALUE_ROT(e, health, 1, pauserothealth_finished, autocvar_g_balance_pause_health_rot, pauseregen_finished, autocvar_g_balance_pause_health_regen, "misc/megahealth.wav", string_null); + POSTGIVE_VALUE(e, strength_finished, 1, SND(POWERUP), SND(POWEROFF)); + POSTGIVE_VALUE(e, invincible_finished, 1, "misc/powerup_shield.wav", SND(POWEROFF)); + POSTGIVE_VALUE(e, ammo_nails, 0, SND(ITEMPICKUP), string_null); + POSTGIVE_VALUE(e, ammo_cells, 0, SND(ITEMPICKUP), string_null); + POSTGIVE_VALUE(e, ammo_plasma, 0, SND(ITEMPICKUP), string_null); + POSTGIVE_VALUE(e, ammo_shells, 0, SND(ITEMPICKUP), string_null); + POSTGIVE_VALUE(e, ammo_rockets, 0, SND(ITEMPICKUP), string_null); + POSTGIVE_VALUE_ROT(e, ammo_fuel, 1, pauserotfuel_finished, autocvar_g_balance_pause_fuel_rot, pauseregen_finished, autocvar_g_balance_pause_fuel_regen, SND(ITEMPICKUP), string_null); + POSTGIVE_VALUE_ROT(e, armorvalue, 1, pauserotarmor_finished, autocvar_g_balance_pause_armor_rot, pauseregen_finished, autocvar_g_balance_pause_health_regen, SND(ARMOR25), string_null); + POSTGIVE_VALUE_ROT(e, health, 1, pauserothealth_finished, autocvar_g_balance_pause_health_rot, pauseregen_finished, autocvar_g_balance_pause_health_regen, SND(MEGAHEALTH), string_null); if(e.superweapons_finished <= 0) if(self.weapons & WEPSET_SUPERWEAPONS) diff --git a/qcsrc/server/t_items.qh b/qcsrc/server/t_items.qh index d93e28bb61..1dfe537494 100644 --- a/qcsrc/server/t_items.qh +++ b/qcsrc/server/t_items.qh @@ -86,12 +86,12 @@ void ItemRead(float _IsNew); #endif #ifdef SVQC -void spawnfunc_item_strength(); -void spawnfunc_item_invincible(); -void spawnfunc_item_armor_small(); -void spawnfunc_item_shells(); -void spawnfunc_item_bullets(); -void spawnfunc_item_rockets(); +spawnfunc(item_strength); +spawnfunc(item_invincible); +spawnfunc(item_armor_small); +spawnfunc(item_shells); +spawnfunc(item_bullets); +spawnfunc(item_rockets); float autocvar_sv_simple_items; bool ItemSend(entity to, int sf); diff --git a/qcsrc/server/t_quake.qc b/qcsrc/server/t_quake.qc index 74a324b981..9e22b8d065 100644 --- a/qcsrc/server/t_quake.qc +++ b/qcsrc/server/t_quake.qc @@ -2,27 +2,27 @@ #include "../common/weapons/all.qh" -void spawnfunc_weapon_electro(); -void spawnfunc_weapon_hagar(); -void spawnfunc_weapon_machinegun(); -void spawnfunc_item_bullets(); -void spawnfunc_item_armor_large(); -void spawnfunc_item_armor_large(); -void spawnfunc_item_health_mega(); -void spawnfunc_item_health_medium(); +spawnfunc(weapon_electro); +spawnfunc(weapon_hagar); +spawnfunc(weapon_machinegun); +spawnfunc(item_bullets); +spawnfunc(item_armor_large); +spawnfunc(item_armor_large); +spawnfunc(item_health_mega); +spawnfunc(item_health_medium); //*********************** //QUAKE 1 ENTITIES - So people can play quake1 maps with the xonotic weapons //*********************** -void spawnfunc_weapon_nailgun() {spawnfunc_weapon_electro();} -void spawnfunc_weapon_supernailgun() {spawnfunc_weapon_hagar();} -void spawnfunc_weapon_supershotgun() {spawnfunc_weapon_machinegun();} - -void spawnfunc_item_spikes() {spawnfunc_item_bullets();} -//void spawnfunc_item_armor1() {spawnfunc_item_armor_medium;} // FIXME: in Quake this is green armor, in Xonotic maps it is an armor shard -void spawnfunc_item_armor2() {spawnfunc_item_armor_large();} -void item_armorInv() {spawnfunc_item_armor_large();} -void spawnfunc_item_health() {SELFPARAM();if (self.spawnflags & 2) spawnfunc_item_health_mega();else spawnfunc_item_health_medium();} +spawnfunc(weapon_nailgun) {spawnfunc_weapon_electro(this);} +spawnfunc(weapon_supernailgun) {spawnfunc_weapon_hagar(this);} +spawnfunc(weapon_supershotgun) {spawnfunc_weapon_machinegun(this);} + +spawnfunc(item_spikes) {spawnfunc_item_bullets(this);} +//spawnfunc(item_armor1) {spawnfunc_item_armor_medium(this);} // FIXME: in Quake this is green armor, in Xonotic maps it is an armor shard +spawnfunc(item_armor2) {spawnfunc_item_armor_large(this);} +void item_armorInv() {SELFPARAM();spawnfunc_item_armor_large(self);} +spawnfunc(item_health) {if (self.spawnflags & 2) spawnfunc_item_health_mega(this);else spawnfunc_item_health_medium(this);} //spawnfunc_item_spikes //spawnfunc_item_health diff --git a/qcsrc/server/t_quake3.qc b/qcsrc/server/t_quake3.qc index d20c90055d..8eecc5ee3b 100644 --- a/qcsrc/server/t_quake3.qc +++ b/qcsrc/server/t_quake3.qc @@ -3,27 +3,27 @@ #include "../common/weapons/all.qh" #include "../common/buffs.qh" -void spawnfunc_weapon_crylink(); -void spawnfunc_weapon_electro(); -void spawnfunc_weapon_hagar(); -void spawnfunc_weapon_machinegun(); -void spawnfunc_weapon_vortex(); +spawnfunc(weapon_crylink); +spawnfunc(weapon_electro); +spawnfunc(weapon_hagar); +spawnfunc(weapon_machinegun); +spawnfunc(weapon_vortex); -void spawnfunc_target_items(); +spawnfunc(target_items); -void spawnfunc_item_bullets(); -void spawnfunc_item_cells(); -void spawnfunc_item_rockets(); -void spawnfunc_item_shells(); +spawnfunc(item_bullets); +spawnfunc(item_cells); +spawnfunc(item_rockets); +spawnfunc(item_shells); -void spawnfunc_item_jetpack(); +spawnfunc(item_jetpack); -void spawnfunc_item_armor_big(); -void spawnfunc_item_armor_large(); -void spawnfunc_item_armor_small(); +spawnfunc(item_armor_big); +spawnfunc(item_armor_large); +spawnfunc(item_armor_small); -void spawnfunc_item_health_medium(); -void spawnfunc_item_health_mega(); +spawnfunc(item_health_medium); +spawnfunc(item_health_mega); //*********************** //QUAKE 3 ENTITIES - So people can play quake3 maps with the xonotic weapons @@ -32,38 +32,38 @@ void spawnfunc_item_health_mega(); // NOTE: for best experience, you need to swap MGs with SGs in the map or it won't have a MG // SG -> SG -void spawnfunc_ammo_shells() { spawnfunc_item_shells(); } +spawnfunc(ammo_shells) { spawnfunc_item_shells(this); } // MG -> MG -void spawnfunc_ammo_bullets() { spawnfunc_item_bullets(); } +spawnfunc(ammo_bullets) { spawnfunc_item_bullets(this); } // GL -> Mortar -void spawnfunc_ammo_grenades() { spawnfunc_item_rockets(); } +spawnfunc(ammo_grenades) { spawnfunc_item_rockets(this); } // LG -> Lightning -void spawnfunc_weapon_lightning() { spawnfunc_weapon_electro(); } -void spawnfunc_ammo_lightning() { spawnfunc_item_cells(); } +spawnfunc(weapon_lightning) { spawnfunc_weapon_electro(this); } +spawnfunc(ammo_lightning) { spawnfunc_item_cells(this); } // Plasma -> Hagar -void spawnfunc_weapon_plasmagun() { spawnfunc_weapon_hagar(); } -void spawnfunc_ammo_cells() { spawnfunc_item_rockets(); } +spawnfunc(weapon_plasmagun) { spawnfunc_weapon_hagar(this); } +spawnfunc(ammo_cells) { spawnfunc_item_rockets(this); } // Rail -> Vortex -void spawnfunc_weapon_railgun() { spawnfunc_weapon_vortex(); } -void spawnfunc_ammo_slugs() { spawnfunc_item_cells(); } +spawnfunc(weapon_railgun) { spawnfunc_weapon_vortex(this); } +spawnfunc(ammo_slugs) { spawnfunc_item_cells(this); } // BFG -> Crylink -void spawnfunc_weapon_bfg() { spawnfunc_weapon_crylink(); } -void spawnfunc_ammo_bfg() { spawnfunc_item_cells(); } +spawnfunc(weapon_bfg) { spawnfunc_weapon_crylink(this); } +spawnfunc(ammo_bfg) { spawnfunc_item_cells(this); } // RL -> RL -void spawnfunc_ammo_rockets() { spawnfunc_item_rockets(); } +spawnfunc(ammo_rockets) { spawnfunc_item_rockets(this); } // Armor -void spawnfunc_item_armor_body() { spawnfunc_item_armor_large(); } -void spawnfunc_item_armor_combat() { spawnfunc_item_armor_big(); } -void spawnfunc_item_armor_shard() { spawnfunc_item_armor_small(); } -void spawnfunc_item_enviro() { spawnfunc_item_invincible(); } +spawnfunc(item_armor_body) { spawnfunc_item_armor_large(this); } +spawnfunc(item_armor_combat) { spawnfunc_item_armor_big(this); } +spawnfunc(item_armor_shard) { spawnfunc_item_armor_small(this); } +spawnfunc(item_enviro) { spawnfunc_item_invincible(this); } // weapon remove ent from df void target_init_verify() @@ -84,11 +84,11 @@ void target_init_verify() } } -void spawnfunc_target_init() -{SELFPARAM(); +spawnfunc(target_init) +{ self.spawnflags = 0; // remove all weapons except the ones listed below self.netname = "shotgun"; // keep these weapons through the remove trigger - spawnfunc_target_items(); + spawnfunc_target_items(this); InitializeEntity(self, target_init_verify, INITPRIO_FINDTARGET); } @@ -131,30 +131,30 @@ void target_give_init() targ.nextthink = time; } self.spawnflags = 2; - spawnfunc_target_items(); + spawnfunc_target_items(this); InitializeEntity(self, target_init_verify, INITPRIO_FINDTARGET); } -void spawnfunc_target_give() -{SELFPARAM(); +spawnfunc(target_give) +{ InitializeEntity(self, target_give_init, INITPRIO_FINDTARGET); } -//void spawnfunc_item_flight() /* handled by buffs mutator or jetpack */ -//void spawnfunc_item_haste() /* handled by buffs mutator */ -//void spawnfunc_item_health() /* handled in t_quake.qc */ -//void spawnfunc_item_health_large() /* handled in t_items.qc */ -//void spawnfunc_item_health_small() /* handled in t_items.qc */ -//void spawnfunc_item_health_mega() /* handled in t_items.qc */ -//void spawnfunc_item_invis() /* handled by buffs mutator */ -//void spawnfunc_item_regen() /* handled by buffs mutator */ +//spawnfunc(item_flight) /* handled by buffs mutator or jetpack */ +//spawnfunc(item_haste) /* handled by buffs mutator */ +//spawnfunc(item_health) /* handled in t_quake.qc */ +//spawnfunc(item_health_large) /* handled in t_items.qc */ +//spawnfunc(item_health_small) /* handled in t_items.qc */ +//spawnfunc(item_health_mega) /* handled in t_items.qc */ +//spawnfunc(item_invis) /* handled by buffs mutator */ +//spawnfunc(item_regen) /* handled by buffs mutator */ // CTF spawnfuncs handled in mutators/gamemode_ctf.qc now -void spawnfunc_item_flight() -{SELFPARAM(); +spawnfunc(item_flight) +{ if(!cvar("g_buffs") || !cvar("g_buffs_flight")) - spawnfunc_item_jetpack(); + spawnfunc_item_jetpack(this); else buff_Init_Compat(self, BUFF_FLIGHT); } diff --git a/qcsrc/server/weapons/common.qc b/qcsrc/server/weapons/common.qc index db712933d0..f1720757f6 100644 --- a/qcsrc/server/weapons/common.qc +++ b/qcsrc/server/weapons/common.qc @@ -30,7 +30,7 @@ void W_PlayStrengthSound(entity player) // void W_PlayStrengthSound && ((time > player.prevstrengthsound + autocvar_sv_strengthsound_antispam_time) // prevent insane sound spam || (time > player.prevstrengthsoundattempt + autocvar_sv_strengthsound_antispam_refire_threshold))) { - sound(player, CH_TRIGGER, W_Sound("strength_fire"), VOL_BASE, ATTEN_NORM); + sound(player, CH_TRIGGER, SND_STRENGTH_FIRE, VOL_BASE, ATTEN_NORM); player.prevstrengthsound = time; } player.prevstrengthsoundattempt = time; diff --git a/qcsrc/server/weapons/selection.qc b/qcsrc/server/weapons/selection.qc index de240ce2ef..ce464c18e4 100644 --- a/qcsrc/server/weapons/selection.qc +++ b/qcsrc/server/weapons/selection.qc @@ -63,7 +63,7 @@ float client_hasweapon(entity cl, float wpn, float andammo, float complain) if (complain) if(IS_REAL_CLIENT(cl)) { - play2(cl, W_Sound("unavailable")); + play2(cl, SND(UNAVAILABLE)); Send_WeaponComplain (cl, wpn, 0); } return false; @@ -107,7 +107,7 @@ float client_hasweapon(entity cl, float wpn, float andammo, float complain) Send_WeaponComplain (cl, wpn, 2); } - play2(cl, W_Sound("unavailable")); + play2(cl, SND(UNAVAILABLE)); } return false; } diff --git a/qcsrc/server/weapons/spawning.qc b/qcsrc/server/weapons/spawning.qc index 202b29fda7..81261383f5 100644 --- a/qcsrc/server/weapons/spawning.qc +++ b/qcsrc/server/weapons/spawning.qc @@ -177,7 +177,8 @@ void weapon_defaultspawnfunc(float wpn) if(self.team) f |= FL_NO_WEAPON_STAY; - StartItem(e.model, "weapons/weaponpickup.wav", self.respawntime, self.respawntimejitter, e.message, 0, e.weapon, f, weapon_pickupevalfunc, e.bot_pickupbasevalue); + StartItem(e.model, string_null, self.respawntime, self.respawntimejitter, e.message, 0, e.weapon, f, weapon_pickupevalfunc, e.bot_pickupbasevalue); + self.item_pickupsound_ent = SND_WEAPONPICKUP; #if 0 // WEAPONTODO if (self.modelindex) // don't precache if self was removed WEP_ACTION(e.weapon, WR_INIT); diff --git a/qcsrc/server/weapons/tracing.qc b/qcsrc/server/weapons/tracing.qc index 7c033fa889..69821aaaf6 100644 --- a/qcsrc/server/weapons/tracing.qc +++ b/qcsrc/server/weapons/tracing.qc @@ -131,7 +131,7 @@ void W_SetupShot_Dir_ProjectileSize_Range(entity ent, vector s_forward, vector m if (snd != "") { - sound (ent, chan, snd, VOL_BASE, ATTN_NORM); + _sound (ent, chan, snd, VOL_BASE, ATTN_NORM); W_PlayStrengthSound(ent); } @@ -287,7 +287,7 @@ void FireRailgunBullet (vector start, vector end, float bdamage, float bforce, f if(f <= 0) continue; - snd = W_Sound(strcat("nexwhoosh", ftos(floor(random() * 3) + 1))); + snd = SND(NEXWHOOSH_RANDOM()); if(!pseudoprojectile) pseudoprojectile = spawn(); // we need this so the sound uses the "entchannel4" volume diff --git a/qcsrc/server/weapons/weaponsystem.qc b/qcsrc/server/weapons/weaponsystem.qc index 076a172c8d..ba33c515ff 100644 --- a/qcsrc/server/weapons/weaponsystem.qc +++ b/qcsrc/server/weapons/weaponsystem.qc @@ -474,7 +474,7 @@ float weapon_prepareattack_checkammo(float secondary) if(self.weapon == self.switchweapon && time - self.prevdryfire > 1) // only play once BEFORE starting to switch weapons { - sound (self, CH_WEAPON_A, W_Sound("dryfire"), VOL_BASE, ATTEN_NORM); + sound (self, CH_WEAPON_A, SND_DRYFIRE, VOL_BASE, ATTEN_NORM); self.prevdryfire = time; } @@ -732,7 +732,7 @@ void W_WeaponFrame() if(ATTACK_FINISHED(self) <= time + self.weapon_frametime * 0.5) { #endif - sound(self, CH_WEAPON_SINGLE, W_Sound("weapon_switch"), VOL_BASE, ATTN_NORM); + sound(self, CH_WEAPON_SINGLE, SND_WEAPON_SWITCH, VOL_BASE, ATTN_NORM); self.weaponentity.state = WS_DROP; weapon_thinkf(WFRAME_DONTCHANGE, oldwep.switchdelay_drop, w_clear); #ifndef INDEPENDENT_ATTACK_FINISHED @@ -927,7 +927,7 @@ void W_Reload(float sent_ammo_min, string sent_sound) { if(IS_REAL_CLIENT(self) && self.reload_complain < time) { - play2(self, W_Sound("unavailable")); + play2(self, SND(UNAVAILABLE)); sprint(self, strcat("You don't have enough ammo to reload the ^2", WEP_NAME(self.weapon), "\n")); self.reload_complain = time + 1; } @@ -951,7 +951,7 @@ void W_Reload(float sent_ammo_min, string sent_sound) // now begin the reloading process - sound(self, CH_WEAPON_SINGLE, self.reload_sound, VOL_BASE, ATTEN_NORM); + _sound(self, CH_WEAPON_SINGLE, self.reload_sound, VOL_BASE, ATTEN_NORM); // do not set ATTACK_FINISHED in reload code any more. This causes annoying delays if eg: You start reloading a weapon, // then quickly switch to another weapon and back. Reloading is canceled, but the reload delay is still there, diff --git a/qcsrc/warpzonelib/server.qc b/qcsrc/warpzonelib/server.qc index 5d0afc819e..d34870ec01 100644 --- a/qcsrc/warpzonelib/server.qc +++ b/qcsrc/warpzonelib/server.qc @@ -680,18 +680,18 @@ float warpzone_initialized; entity warpzone_position_first; entity warpzone_camera_first; .entity warpzone_next; -void spawnfunc_misc_warpzone_position(void) -{SELFPARAM(); +spawnfunc(misc_warpzone_position) +{ // "target", "angles", "origin" self.warpzone_next = warpzone_position_first; warpzone_position_first = self; } -void spawnfunc_trigger_warpzone_position(void) +spawnfunc(trigger_warpzone_position) { - spawnfunc_misc_warpzone_position(); + spawnfunc_misc_warpzone_position(this); } -void spawnfunc_trigger_warpzone(void) -{SELFPARAM(); +spawnfunc(trigger_warpzone) +{ // warp zone entities must have: // "killtarget" pointing to a target_position with a direction arrow // that points AWAY from the warp zone, and that is inside @@ -723,8 +723,8 @@ void spawnfunc_trigger_warpzone(void) self.warpzone_next = warpzone_first; warpzone_first = self; } -void spawnfunc_func_camera(void) -{SELFPARAM(); +spawnfunc(func_camera) +{ if(!self.scale) self.scale = self.modelscale; if(!self.scale) @@ -877,14 +877,14 @@ void trigger_warpzone_reconnect_use() setself(e); } -void spawnfunc_trigger_warpzone_reconnect() -{SELFPARAM(); +spawnfunc(trigger_warpzone_reconnect) +{ self.use = trigger_warpzone_reconnect_use; } -void spawnfunc_target_warpzone_reconnect() +spawnfunc(target_warpzone_reconnect) { - spawnfunc_trigger_warpzone_reconnect(); // both names make sense here :( + spawnfunc_trigger_warpzone_reconnect(this); // both names make sense here :( } void WarpZone_PlayerPhysics_FixVAngle(void)