Comparing this to, say, the QMB particle engine in JoeQuake/ezQuake/FuhQuake, the QMB code is mostly a hell of a lot of constants per particle type.
But with effectinfo.txt, these are not hardcoded. I've been thinking about this lately mostly because the inability to customize particles in any of the more stock Quake engines is a major liability. An effectinfo.txt style approach combined with a particle font really is quite the answer to be able to play with this on the fly.
I guess my main reason in mentioning this, is the DarkPlaces texture/graphics/models people really do great work in exposing some of the fun things effectinfo.txt is capable of ... versus, say, a couple of years ago maybe the only well-known project that really did anything with the capability was Nexuiz. Outside of that, you never saw anyone use the capability.
I'm kind of tempted to reduce the QMB particle system to an effectinfo.txt file, not any time soon, but added to the "rainy day" list ...
effectinfo.txt looks kinda of like this (pulled off a Nexuiz or Xonotic page):
Code: Select all
// item respawn effect
// flare particle and light
// used in qcsrc/server/bots.qc: //te_wizspike(start)
// used in qcsrc/server/bots.qc: te_wizspike(org)
// used in qcsrc/server/bots.qc: //te_wizspike(e.origin)
// used in qcsrc/server/bots.qc: //te_wizspike(e.nearestwaypoint.wpnearestpoint)
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
effect TE_WIZSPIKE
count 100
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/bots.qc: //te_knightspike(end)
// used in qcsrc/server/bots.qc: te_knightspike(start)
// used in qcsrc/server/bots.qc: te_knightspike(org)
// used in qcsrc/server/bots.qc: te_knightspike(org)
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
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
effect TE_KNIGHTSPIKE
count 256
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
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
effect TE_SPIKE
count 8
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
effect TE_SPIKE
count 1
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
effect TE_SPIKE
count 20
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
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
effect TE_SPIKEQUAD
countabsolute 1
type static
tex 38 38
color 0x80C0FF 0x80C0FF
size 48 48
alpha 256 256 128
// large sparks
effect TE_SPIKEQUAD
count 20
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
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
effect TE_SUPERSPIKE
count 8
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
effect TE_SUPERSPIKE
count 1
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
effect TE_SUPERSPIKE
count 30
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
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
effect TE_SUPERSPIKEQUAD
count 8
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
effect TE_SUPERSPIKEQUAD
count 1
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
effect TE_SUPERSPIKEQUAD
count 30
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 in qcsrc/server/bots.qc: //te_gunshot(org)
// used in qcsrc/server/bots.qc: te_gunshot(org)
// used in qcsrc/server/bots.qc: te_gunshot(org)
// used in qcsrc/server/bots.qc: te_gunshot(org)
// used in qcsrc/server/bots.qc: //te_gunshot(end)
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
effect TE_GUNSHOT
count 4
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
effect TE_GUNSHOT
count 1
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
effect TE_GUNSHOT
count 10
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
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
effect TE_GUNSHOTQUAD
countabsolute 1
type static
tex 39 39
color 0x504060 0x504060
size 8 8
alpha 256 256 512
// purple sparks
effect TE_GUNSHOTQUAD
count 12
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