-// 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
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)"
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
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.*
@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
#include "../dpdefs/csprogsdefs.qh"
#include "../common/models/models.qh"
+#include "../common/sounds/sounds.qh"
#endif
#include "../common/movetypes/movetypes.qh"
.float alpha;
-bool cpicon_precached;
.int count;
.float pain_finished;
.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; }
self.count = (self.health - self.max_health) * frametime;
cpicon_changeteam();
- cpicon_precache();
cpicon_construct();
}
const int CPSF_SETUP = 8;
void ent_cpicon();
-void cpicon_precache();
#endif
-#include "csqcmodel_hooks.qh"
#include "_all.qh"
#include "gibs.qh"
{
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;
}
}
{
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;
+++ /dev/null
-#ifndef CSQCMODEL_HOOKS
-#define CSQCMODEL_HOOKS
-
-void CSQCPlayer_Precache();
-
-#endif
// 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:
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;
}
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;
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;
#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)
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);
// 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);
}
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
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;
self.count = 40;
generator_changeteam();
- generator_precache();
generator_construct();
}
const int GSF_SETUP = 8;
void ent_generator();
-void generator_precache();
#endif
}
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();
{
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);
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");
-}
void Ent_GibSplash(bool isNew);
-void GibSplash_Precache();
#endif
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;
}
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)
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;
}
}
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!
#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);
#include "_all.qh"
#include "controlpoint.qh"
-#include "csqcmodel_hooks.qh"
#include "damage.qh"
#include "effects.qh"
#include "generator.qh"
#include "../common/triggers/include.qh"
#include "../common/turrets/cl_turrets.qh"
-#include "../common/turrets/turrets.qh"
#include "../warpzonelib/client.qh"
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)
{
}
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);
}
}
}
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;
}
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; }
#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"
#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"
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);
}
}
}
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);
// 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;
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;
}
}
if(self.silent)
return;
- sound(e, ch, samp, vol, attn);
+ _sound(e, ch, samp, vol, attn);
e.snd_looping = ch;
}
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);
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))
{
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;
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;
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';
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;
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;
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);
}
+++ /dev/null
-#!/bin/sh
-
-{
- grep -h '\<precache_model *( *"' client/* | grep -v "//NO_SV_PRECACHE"
- grep -h '\<precache_sound *( *"' client/* | grep -v "//NO_SV_PRECACHE"
-} > server/precache-for-csqc.inc
-
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); \
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)
}
}
+#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)
#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") \
--- /dev/null
+// 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"
--- /dev/null
+#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
--- /dev/null
+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';
+}
--- /dev/null
+// 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
--- /dev/null
+// 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';
+}
--- /dev/null
+// 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';
+}
--- /dev/null
+// 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';
+}
--- /dev/null
+// 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';
+}
--- /dev/null
+#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
--- /dev/null
+#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
--- /dev/null
+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';
+}
--- /dev/null
+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';
+}
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")
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")
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")
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;
+}
));
}
+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
void Dump_Items();
+#ifndef MENUQC
+string Item_Model(string item_mdl);
+#endif
+
#endif
#include "inventory.qh"
#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
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
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
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
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
#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";
#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";
#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";
#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";
#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";
#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";
#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";
#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";
#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';
#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
#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';
#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));
#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";
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";
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);
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);
}
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);
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
// 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();
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
{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;
- }
+ }));
}
}
#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
+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
+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
+REGISTER_MINIGAME(pong, "Pong");
+
// minigame flags
const int PONG_STATUS_WAIT = 0x0010; // waiting for players to join
const int PONG_STATUS_PLAY = 0x0020; // playing
+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
+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
+++ /dev/null
-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
--- /dev/null
+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
+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
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;
}
#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
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) )
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));
}
}
-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 )
}
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" )
#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 );
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
}
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;
}
{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;
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);
return false;
}
-void spawnfunc_monster_mage() { Monster_Spawn(MON_MAGE.monsterid); }
+spawnfunc(monster_mage) { Monster_Spawn(MON_MAGE.monsterid); }
#endif // SVQC
}
case MR_PRECACHE:
{
- precache_sound (W_Sound("grenade_impact"));
- precache_sound (W_Sound("tagexp1"));
return true;
}
#endif
{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...
{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;
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)
{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";
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)
}
case MR_PRECACHE:
{
- precache_sound (W_Sound("electro_fire2"));
return true;
}
#endif
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)
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)
vector org = self.origin + ((self.mins + self.maxs) * 0.5);
entity e = spawn();
+ e.spawnfunc_checked = true;
e.monster_loot = self.monster_loot;
{
setself(e);
e.noalign = true;
- e.monster_loot();
+ e.monster_loot(e);
e.gravity = 1;
e.movetype = MOVETYPE_TOSS;
e.reset = SUB_Remove;
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!
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)
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;
}
}
+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)
{
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;
}
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
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);
));
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 "";
}
));
#endif
- sound(
+ _sound(
world,
soundchannel,
sprintf(
--- /dev/null
+// 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");
--- /dev/null
+#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
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 != "")
{
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)
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);
}
// 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;
}
// for use in maps with a "model" key set
-void spawnfunc_misc_breakablemodel() {
- spawnfunc_func_breakable();
+spawnfunc(misc_breakablemodel) {
+ spawnfunc_func_breakable(this);
}
#endif
#define TRIGGERS_FUNC_BREAKABLE_H
#ifdef SVQC
-void spawnfunc_func_breakable();
+spawnfunc(func_breakable);
#endif
#endif
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);
2) metallic click
3) in-out
*/
-void spawnfunc_func_button()
-{SELFPARAM();
+spawnfunc(func_button)
+{
SetMovedir ();
if (!InitMovingBrushTrigger())
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;
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
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;
}
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);
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;
}
// 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;
{
#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;
{
if (IS_CLIENT(other))
centerprint(other, self.owner.message);
- play2(other, "misc/talk.wav");
+ play2(other, SND(TALK));
}
#endif
}
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
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;
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;
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);
#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);
}
-void spawnfunc_func_door_rotating()
-{SELFPARAM();
+spawnfunc(func_door_rotating)
+{
//if (!self.deathtype) // map makers can override this
// self.deathtype = " got in the way";
// 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
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)
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);
}
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;
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);
}
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);
}
//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()
{
if (IS_CLIENT(other))
centerprint(other, self.message);
- play2(other, "misc/talk.wav");
+ play2(other, SND(TALK));
}
}
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";*/
self.owner.velocity = (v - self.owner.origin) * 10;
}
-void spawnfunc_func_fourier()
-{SELFPARAM();
+spawnfunc(func_fourier)
+{
entity controller;
if (self.noise != "")
{
//self.model = "null";
}
-void spawnfunc_func_ladder()
-{SELFPARAM();
+spawnfunc(func_ladder)
+{
self.mdl = self.model;
EXACTTRIGGER_INIT;
self.touch = func_ladder_touch;
func_ladder_link();
}
-void spawnfunc_func_water()
-{SELFPARAM();
+spawnfunc(func_water)
+{
self.mdl = self.model;
EXACTTRIGGER_INIT;
self.touch = func_ladder_touch;
}
}
-void spawnfunc_func_pendulum()
-{SELFPARAM();
+spawnfunc(func_pendulum)
+{
entity controller;
if (self.noise != "")
{
//Net_LinkEntity(self, 0, false, plat_send);
}
-void spawnfunc_func_plat()
-{SELFPARAM();
+spawnfunc(func_plat)
+{
if (self.sounds == 0)
self.sounds = 2;
self.state = 0;
}
-void spawnfunc_func_pointparticles()
-{SELFPARAM();
+spawnfunc(func_pointparticles)
+{
if(self.model != "")
_setmodel(self, self.model);
if(self.noise != "")
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
self.wait = 0;
self.cnt = 0; // use mdl
- spawnfunc_func_pointparticles();
+ spawnfunc_func_pointparticles(this);
}
#elif defined(CSQC)
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;
}
"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)
"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)
dmgtime : See above.
*/
-void spawnfunc_func_rotating()
-{SELFPARAM();
+spawnfunc(func_rotating)
+{
if (self.noise != "")
{
precache_sound(self.noise);
#ifdef SVQC
-void spawnfunc_func_stardust()
-{SELFPARAM();
+spawnfunc(func_stardust)
+{
self.effects = EF_STARDUST;
CSQCMODEL_AUTOINIT(self);
}
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
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);
controller.think = func_vectormamamam_controller_think;
}
-void spawnfunc_func_vectormamamam()
-{SELFPARAM();
+spawnfunc(func_vectormamamam)
+{
if (self.noise != "")
{
precache_sound(self.noise);
//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);
}
}
-void spawnfunc_misc_follow()
-{SELFPARAM();
+spawnfunc(misc_follow)
+{
InitializeEntity(self, follow_init, INITPRIO_FINDTARGET);
}
#endif
self.state = 0;
}
-void spawnfunc_misc_laser()
-{SELFPARAM();
+spawnfunc(misc_laser)
+{
if(self.mdl)
{
if(self.mdl == "none")
#ifdef SVQC
-void spawnfunc_info_teleport_destination (void)
-{SELFPARAM();
+spawnfunc(info_teleport_destination)
+{
self.classname = "info_teleport_destination";
self.mangle = self.angles;
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
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;
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);
}
.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
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; }
}
#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;
}
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)
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)
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;
}
}
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);
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);
if(!target_spawn_cancreate())
return;
e = spawn();
+ e.spawnfunc_checked = true;
target_spawn_useon(e);
e.target_spawn_id = self.target_spawn_id;
}
}
}
-void spawnfunc_target_spawn()
-{SELFPARAM();
+spawnfunc(target_spawn)
+{
initialize_field_db();
self.use = target_spawn_use;
self.message = strzone(strreplace("'", "\"", self.message));
{
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));
{
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));
}
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()
}
}
-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)
}
}
-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
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);
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;
self.nextthink = 0;
}
-void spawnfunc_trigger_delay()
-{SELFPARAM();
+spawnfunc(trigger_delay)
+{
if(!self.wait)
self.wait = 1;
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
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
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)
{
else
InitializeEntity(self, gamestart_use, INITPRIO_FINDTARGET);
}
+void _spawnfunc_trigger_gamestart() { SELFPARAM(); spawnfunc_trigger_gamestart(this); }
+
#endif
{
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;
{
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;
.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;
//Net_LinkEntity(self, 0, false, trigger_impulse_send);
}
-void spawnfunc_trigger_impulse()
-{SELFPARAM();
+spawnfunc(trigger_impulse)
+{
self.active = ACTIVE_ACTIVE;
EXACTTRIGGER_INIT;
{
// 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))
* 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;
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
* 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
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
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";
}
// 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; }
return msgin;
}
-void spawnfunc_trigger_magicear()
-{SELFPARAM();
+spawnfunc(trigger_magicear)
+{
self.enemy = magicears;
magicears = self;
self.nextthink = 0;
}
-void spawnfunc_trigger_monoflop()
-{SELFPARAM();
+spawnfunc(trigger_monoflop)
+{
if(!self.wait)
self.wait = 1;
if(self.spawnflags & 1)
}
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;
4)
set "message" to text string
*/
-void spawnfunc_trigger_multiple()
-{SELFPARAM();
+spawnfunc(trigger_multiple)
+{
self.reset = multi_reset;
if (self.sounds == 1)
{
}
else if (self.sounds == 2)
{
- precache_sound ("misc/talk.wav");
- self.noise = "misc/talk.wav";
+ self.noise = SND(TALK);
}
else if (self.sounds == 3)
{
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
void multi_trigger();
void multi_reset();
-void spawnfunc_trigger_once();
+spawnfunc(trigger_once);
#endif
-------- 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)
#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
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;
}
SUB_UseTargets();
}
-void spawnfunc_trigger_relay_if()
-{SELFPARAM();
+spawnfunc(trigger_relay_if)
+{
self.use = trigger_relay_if_use;
}
#endif
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;
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
// 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;
.entity swampslug;
#ifdef SVQC
-void spawnfunc_trigger_swamp(void);
+spawnfunc(trigger_swamp);
#endif
void swamp_touch(void);
void swampslug_think();
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;
WITH(entity, self, e, SUB_UseTargets());
}
-void spawnfunc_trigger_teleport()
-{SELFPARAM();
+spawnfunc(trigger_teleport)
+{
self.angles = '0 0 0';
EXACTTRIGGER_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; }
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)
{
centerprint(activator, self.message);
if (self.noise == "")
- play2(activator, "misc/talk.wav");
+ play2(activator, SND(TALK));
}
//
--- /dev/null
+#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"
--- /dev/null
+#include "all.qh"
+
+#define IMPLEMENTATION
+#include "all.inc"
+#undef IMPLEMENTATION
-#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
//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);
}
+#include "all.qh"
+
void turret_remove()
{SELFPARAM();
remove(self.tur_head);
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");
{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)
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
{
#ifndef CL_TURRETS_H
#define CL_TURRETS_H
+#include "all.qh"
+
void ent_turret();
#endif
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)
// 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;
{ 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));
}
#ifdef SVQC
+#include "all.qh"
#include "../../server/autocvars.qh"
// Generic aiming
{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);
#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
-void spawnfunc_turret_targettrigger();
+spawnfunc(turret_targettrigger);
void turret_targettrigger_touch();
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 ();
+++ /dev/null
-#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;
-}
+++ /dev/null
-#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
-#ifdef REGISTER_TURRET
+#ifndef IMPLEMENTATION
REGISTER_TURRET(
/* TUR_##id */ EWHEEL,
/* function */ t_ewheel,
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();
{
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);
-#ifdef REGISTER_TURRET
+#ifndef IMPLEMENTATION
REGISTER_TURRET(
/* TUR_##id */ FLAC,
/* function */ t_flac,
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();
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);
-#ifdef REGISTER_TURRET
+#ifndef IMPLEMENTATION
REGISTER_TURRET(
/* TUR_##id */ FUSIONREACTOR,
/* function */ t_fusionreactor,
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();
-#ifdef REGISTER_TURRET
+#ifndef IMPLEMENTATION
REGISTER_TURRET(
/* TUR_##id */ HELLION,
/* function */ t_hellion,
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();
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;
-#ifdef REGISTER_TURRET
+#ifndef IMPLEMENTATION
REGISTER_TURRET(
/* TUR_##id */ HK,
/* function */ t_hk,
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();
{
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;
-#ifdef REGISTER_TURRET
+#ifndef IMPLEMENTATION
REGISTER_TURRET(
/* TUR_##id */ MACHINEGUN,
/* function */ t_machinegun,
);
#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);
}
case TR_PRECACHE:
{
- precache_sound (W_Sound("uzi_fire"));
return true;
}
}
-#ifdef REGISTER_TURRET
+#ifndef IMPLEMENTATION
REGISTER_TURRET(
/* TUR_##id */ MLRS,
/* function */ t_mlrs,
);
#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();
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);
-#ifdef REGISTER_TURRET
+#ifndef IMPLEMENTATION
REGISTER_TURRET(
/* TUR_##id */ PHASER,
/* function */ t_phaser,
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;
}
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);
}
}
-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();
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;
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;
}
case TR_PRECACHE:
{
- precache_sound ("turrets/phaser.wav");
return true;
}
}
-#ifdef REGISTER_TURRET
+#ifndef IMPLEMENTATION
REGISTER_TURRET(
/* TUR_##id */ PLASMA,
/* function */ t_plasma,
);
#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();
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);
-#ifdef REGISTER_TURRET
+#ifndef IMPLEMENTATION
REGISTER_TURRET(
/* TUR_##id */ PLASMA_DUAL,
/* function */ t_plasma_dual,
);
#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();
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;
-#ifdef REGISTER_TURRET
+#ifndef IMPLEMENTATION
REGISTER_TURRET(
/* TUR_##id */ TESLA,
/* function */ t_tesla,
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();
-#ifdef REGISTER_TURRET
+#ifndef IMPLEMENTATION
REGISTER_TURRET(
/* TUR_##id */ WALKER,
/* function */ t_walker,
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";
#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();
{
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);
}
case TR_PRECACHE:
{
- precache_sound (W_Sound("rocket_impact"));
return true;
}
}
#endif // SVQC
#ifdef CSQC
-#include "../../../server/movelib.qh"
+#include "../../../client/movelib.qh"
void walker_draw()
{SELFPARAM();
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)
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
#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);
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()
// 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;
}
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);
}
{
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);
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);
}
{
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);
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);
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);
_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;
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);
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)
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);
}
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; }
}
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);
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);
{
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
}
{
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
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)
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;
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; }
}
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;
}
}
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);
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;
}
*/
}
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;
}
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
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;
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; }
}
}
case VR_PRECACHE:
{
- precache_sound ("vehicles/raptor_fly.wav");
- precache_sound ("vehicles/raptor_speed.wav");
- precache_sound ("vehicles/missile_alarm.wav");
-
return true;
}
}
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);
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);
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);
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;
}
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;
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;
{
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");
}
}
{
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");
}
}
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);
{
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);
{
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;
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; }
}
}
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;
}
}
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;
#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();
{
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);
}
}
// 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";
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);
}
}
}
!( 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);
}
}
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();
}
}
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);
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)
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;
}
case WR_INIT:
{
- precache_sound(W_Sound("arc_loop"));
return true;
}
case WR_ZOOMRETICLE:
#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();
{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();
case WR_INIT:
{
- precache_sound(W_Sound("lasergun_fire"));
BLASTER_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
return true;
}
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:
#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)
{
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;
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;
}
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;
}
}
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:
{
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:
#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();
{
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;
}
}
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);
}
}
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);
}
}
}
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;
}
}
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:
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:
#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)
{
'0 0 -3',
false,
2,
- W_Sound("electro_fire"),
+ SND(ELECTRO_FIRE),
CH_WEAPON_A,
WEP_CVAR_PRI(electro, damage)
);
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;
}
}
'0 0 -4',
false,
2,
- W_Sound("electro_fire2"),
+ SND(ELECTRO_FIRE2),
CH_WEAPON_A,
WEP_CVAR_SEC(electro, damage)
);
}
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;
}
}
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:
{
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
{
// 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);
}
}
}
case WR_INIT:
{
- precache_sound(W_Sound("electro_impact"));
- precache_sound(W_Sound("electro_impact_combo"));
return true;
}
case WR_ZOOMRETICLE:
#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();
{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);
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);
}
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;
}
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;
}
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:
#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!
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);
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);
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;
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();
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;
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();
}
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;
}
}
}
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;
}
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;
}
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:
#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();
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)
{
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();
}
case WR_INIT:
{
- precache_sound(W_Sound("lasergun_fire"));
HLAC_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
return true;
}
}
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:
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:
#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();
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)
{
}
case WR_INIT:
{
- precache_sound (W_Sound("uzi_fire"));
HMG_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
return true;
}
}
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:
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:
#ifdef IMPLEMENTATION
#ifdef SVQC
-void spawnfunc_weapon_hook(void)
-{SELFPARAM();
+spawnfunc(weapon_hook)
+{
if(g_grappling_hook) // offhand hook
{
startitem_failed = true;
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;
}
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;
}
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:
#ifdef IMPLEMENTATION
#ifdef SVQC
-void spawnfunc_weapon_machinegun(void)
-{SELFPARAM();
+spawnfunc(weapon_machinegun)
+{
if(autocvar_sv_q3acompat_machineshotgunswap)
if(self.classname != "droppedweapon")
{
}
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();
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;
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;
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;
}
case WR_INIT:
{
- precache_sound(W_Sound("uzi_fire"));
MACHINEGUN_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
return true;
}
}
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:
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:
#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
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.
}
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;
{
// 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);
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;
}
}
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:
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:
#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();
}
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;
}
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;
}
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;
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);
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);
}
}
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)))
{
}
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;
}
}
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:
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:
#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();
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);
// 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);
}
// 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);
}
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);
}
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);
{
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);
}
{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;
}
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;
}
#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();
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;
}
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;
}
}
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:
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");
#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();
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);
}
case WR_INIT:
{
- precache_sound (W_Sound("rocket_fire"));
RPC_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
return true;
}
}
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:
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:
#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
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);
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);
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;
}
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;
}
}
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:
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
{
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);
}
}
}
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:
#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")
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;
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;
}
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;
}
}
case WR_INIT:
{
- //precache_sound(W_Sound("ric1"));
- //precache_sound(W_Sound("ric2"));
- //precache_sound(W_Sound("ric3"));
return false;
}
case WR_ZOOMRETICLE:
#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();
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);
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;
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);
}
}
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;
}
}
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:
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;
}
}
case WR_INIT:
{
- precache_sound(W_Sound("ric1"));
- precache_sound(W_Sound("ric2"));
- precache_sound(W_Sound("ric3"));
return true;
}
case WR_ZOOMRETICLE:
#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)
{
#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();
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;
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)))
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);
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);
}
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;
else
used_ammo = vaporizer_ammo;
- W_Reload(used_ammo, W_Sound("reload"));
+ W_Reload(used_ammo, SND(RELOAD));
return true;
}
case WR_SUICIDEMESSAGE:
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");
#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;
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;
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)
}
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;
}
}
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:
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");
#include "cvar.qh"
#include "defer.qh"
#include "draw.qh"
+#include "file.qh"
#include "i18n.qh"
#include "lazy.qh"
#include "log.qh"
#include "registry.qh"
#include "replicate.qh"
#include "sortlist.qc"
+#include "spawnfunc.qh"
#include "static.qh"
#include "string.qh"
#include "struct.qh"
--- /dev/null
+#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
cvar_set("prvm_backtraceforwarnings", ftos(war)); \
} while (0)
+#define ASSERT(expr) do { if (!(expr)) LOG_FATAL("assertion failed: " #expr "\n"); } while (0)
+
#endif
#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) { } \
--- /dev/null
+#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
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));
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;
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)
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)
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));
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)
#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;
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)
{
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;
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)
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);
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));
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)
{
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
* 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
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")));
#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"
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);
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))
{
{
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;
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);
if (!me.cvarName)
return;
- me.setValue( me, cvar(me.cvarName) );
+ me.setValue_noAnim(me, cvar(me.cvarName));
}
void XonoticSlider_saveCvars(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)
{
}
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")
}
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)
{
}
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")
));
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
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)
void error(string e) = #10;
float test();
-void spawnfunc_worldspawn()
+spawnfunc(worldspawn)
{
float r;
LOG_TRACE("TESTCASE: START\n");
#include "../dpdefs/dpextensions.qh"
#include "../common/models/models.qh"
+#include "../common/sounds/sounds.qh"
#endif
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;
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))
{
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_bot_ai_enemydetectionradius)
bestrating = rating;
}
}
- head = head.chain;
+ }
+
+ if(!best && have_secondary_targets && !scan_secondary_targets)
+ {
+ scan_secondary_targets = true;
+ // restart the loop
+ head = head2;
+ bestrating = 100000000;
+ goto scan_targets;
}
// I want to do a second scan if no enemy was found or I don't have weapons
// TODO: Perform the scan when using the rifle (requires changes on the rifle code)
if(best || self.weapons) // || self.weapon == WEP_RIFLE.m_id
break;
- if(i)
+ if(scan_transparent)
break;
// Set flags to see through transparent objects
self.dphitcontentsmask |= DPCONTENTS_OPAQUE;
head = head2;
+ scan_transparent = true;
}
// Restore hit flags
self.enemy = best;
self.havocbot_stickenemy = true;
+ if(best && best.classname == "misc_breakablemodel")
+ self.havocbot_stickenemy = false;
}
float havocbot_chooseweapon_checkreload(int new_weapon)
atten = stof(argv(2));
precache_sound(f);
- sound(self, chan, sample, vol, atten);
+ _sound(self, chan, sample, vol, atten);
return CMD_STATUS_FINISHED;
}
}
// spawnfunc_waypoint map entity
-void spawnfunc_waypoint()
-{SELFPARAM();
+spawnfunc(waypoint)
+{
setorigin(self, self.origin);
// schedule a relink after other waypoints have had a chance to spawn
waypoint_clearlinks(self);
* Functions
*/
-void spawnfunc_waypoint();
+spawnfunc(waypoint);
void waypoint_addlink(entity from, entity to);
void waypoint_think();
void waypoint_clearlinks(entity wp);
self.angles_y = a.y;
// we leave Rick Roll alone
}
-void spawnfunc_info_autoscreenshot()
-{SELFPARAM();
+spawnfunc(info_autoscreenshot)
+{
if(++num_autoscreenshot > autocvar_g_max_info_autoscreenshot)
{
objerror("Too many info_autoscreenshot entitites. FAIL!");
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);
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)
{
}
self.frags = FRAGS_SPECTATOR;
+ self.bot_attack = false;
MUTATOR_CALLHOOK(MakePlayerObserver);
{
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));
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)
{
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)
{
}
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)
{
}
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);
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)
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)
}
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!");
#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
.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
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();
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);
targ.frozen = 0;
targ.revive_progress = 0;
targ.revival_time = time;
+ self.bot_attack = true;
WaypointSprite_Kill(targ.waypointsprite_attached);
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;
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);
else
self.light_lev = 0;
}
-void spawnfunc_dynlight()
+spawnfunc(dynlight)
{
if (!self.light_lev)
self.light_lev = 200;
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)
#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.
}
//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);
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
void WeaponStats_Init();
void WeaponStats_Shutdown();
void Physics_AddStats();
-void spawnfunc_worldspawn (void)
-{SELFPARAM();
+spawnfunc(worldspawn)
+{
float fd, l, j, n;
string s;
CALL_ACCUMULATED_FUNCTION(RegisterNotifications);
CALL_ACCUMULATED_FUNCTION(RegisterDeathtypes);
- initialize_minigames();
-
ServerProgsDB = db_load(strcat("server.db", autocvar_sessionid));
TemporaryDB = db_create();
world_initialized = 1;
}
-void spawnfunc_light (void)
-{SELFPARAM();
+spawnfunc(light)
+{
//makestatic (self); // Who the f___ did that?
remove(self);
}
itemkeys MUST always have exactly one bit set.
*/
-void spawnfunc_item_key()
-{SELFPARAM();
+spawnfunc(item_key)
+{
string _netname;
vector _colormod;
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;
---------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
---------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);
};
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);
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;
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;
if (time > e.spamtime)
{
e.spamtime = time;
- sound(e, chan, samp, vol, _atten);
+ _sound(e, chan, samp, vol, _atten);
return true;
}
return false;
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);
}
// 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).
ambientsound ('0 0 0', self.noise, VOL_BASE, ATTEN_NONE);
}
#endif
-
-#include "precache-for-csqc.inc"
}
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;
m = e.dphitcontentsmask;
e.dphitcontentsmask = goodcontents | badcontents;
- org = world.mins;
- delta = world.maxs - world.mins;
+ org = boundmin;
+ delta = boundmax - boundmin;
start = end = org;
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)));
#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
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);
/**/ i(entity, other) \
/**/ o(entity, other) \
/**/
-.void() monster_loot;
+.void(entity this) monster_loot;
MUTATOR_HOOKABLE(MonsterDropItem, EV_MonsterDropItem);
/**
}
// 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";
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";
}
// 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;
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";
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
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;
// 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
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)
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;
// 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)
{
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
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);
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);
}
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;
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
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)); }
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
"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);
"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);
"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);
"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);
"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; }
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";
}
// 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); }
// ==============
// 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.
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);
/*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);
(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);
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, "", "", "");
}
void dom_Initialize()
{
- precache_sound("domination/claim.wav");
-
InitializeEntity(world, dom_DelayedInit, INITPRIO_GAMETYPE);
}
#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";
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()
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; }
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);
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.
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();
}
.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;
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)
{
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();
}
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();
{
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
}
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
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);
}
}
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)
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);
}
{
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)
}
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);
}
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)
{
//=======================//
// team ents //
//=======================//
-void spawnfunc_nexball_team(void)
-{SELFPARAM();
+spawnfunc(nexball_team)
+{
if(!g_nexball)
{
remove(self);
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);
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))
SpawnBall();
}
-void spawnfunc_nexball_football(void)
-{SELFPARAM();
+spawnfunc(nexball_football)
+{
nexball_mode |= NBM_FOOTBALL;
self.classname = "nexball_football";
self.solid = SOLID_TRIGGER;
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();
}
//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);
}
//=======================//
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)
{
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)
{
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;
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;
}
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)
{
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);
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)
}
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;
}
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);
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);
}
}
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);
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);
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);
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;
}
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;
// 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
{
//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;
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_));
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);
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;
}
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);
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 );
"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 == "")
"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);
"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"); }
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);
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";
// 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()
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()
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
}
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);
}
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);
}
}
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;
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;
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;
}
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);
#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);
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;
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;
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;
}
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";
#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";
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";
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";
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;
{
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);
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
//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;
}
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);
}
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;
}
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;
}
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)
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;
}
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)
#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)
{
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;
{
//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();
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)
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;
}
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;
}
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);
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;
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
}
+++ /dev/null
-#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;
-}
+++ /dev/null
-#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
-#include "../pathlib.qh"
+#include "pathlib.qh"
float pathlib_g_static(entity parent,vector to, float static_cost)
{
-#include "../pathlib.qh"
+#include "pathlib.qh"
MODEL(SQUARE, "models/pathlib/square.md3");
MODEL(SQUARE_GOOD, "models/pathlib/goodsquare.md3");
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);
}
}
#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"
#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"
#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"
const float MAX_CHECKPOINTS = 255;
-void spawnfunc_target_checkpoint();
+spawnfunc(target_checkpoint);
.float race_penalty;
.float race_penalty_accumulator;
return current;
}
-void spawnfunc_trigger_race_checkpoint()
-{SELFPARAM();
+spawnfunc(trigger_race_checkpoint)
+{
vector o;
if(!g_race && !g_cts) { remove(self); return; }
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;
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)
{
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;
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;
{ 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();
}
/*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:
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
float globflockcnt;
-void spawnfunc_flockerspawn()
+spawnfunc(flockerspawn)
{SELFPARAM();
++globflockcnt;
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');
}
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');
}
#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
.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) {}
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))
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;
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);
//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
}
}
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);
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()
}
}
-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)
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;
}
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)
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)
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;
}
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)
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)
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)
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)
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)
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)
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)
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)
}
// 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();
centerprint(activator, self.message);
}
-void spawnfunc_target_items (void)
-{SELFPARAM();
+spawnfunc(target_items)
+{
float n, i, j;
entity e;
string s;
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")
{
}
}
-void spawnfunc_item_fuel(void)
-{SELFPARAM();
+spawnfunc(item_fuel)
+{
if(!self.ammo_fuel)
self.ammo_fuel = g_pickup_fuel;
if(!self.pickup_anyway)
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);
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);
}
}
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)
#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);
#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
#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
// 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()
}
}
-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);
}
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);
}
&& ((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;
if (complain)
if(IS_REAL_CLIENT(cl))
{
- play2(cl, W_Sound("unavailable"));
+ play2(cl, SND(UNAVAILABLE));
Send_WeaponComplain (cl, wpn, 0);
}
return false;
Send_WeaponComplain (cl, wpn, 2);
}
- play2(cl, W_Sound("unavailable"));
+ play2(cl, SND(UNAVAILABLE));
}
return false;
}
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);
if (snd != "")
{
- sound (ent, chan, snd, VOL_BASE, ATTN_NORM);
+ _sound (ent, chan, snd, VOL_BASE, ATTN_NORM);
W_PlayStrengthSound(ent);
}
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
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;
}
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
{
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;
}
// 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,
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
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)
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)