+// docs: https://www.quakewiki.net/darkplaces-wiki/effectinfo-scripting-reference/
+// use `cl_particles_reloadeffects` to reload effects without restarting engine
+// use `chase_active 1` and `cl_lockview 1` to see effects from different perspectives
+// `dumpeffectinfo` currently doesn't work so edit effectinfo.txt manually, just try to keep the files in sync
+// always add new effects to the bottom of the list
+
+// `tex` are indices into particles/particlefont.tga (see particles/particlefont-template.tga for numbers)
+// the first index is inclusive, second exclusive (so `tex 0 8` will use images 0 though 7)
+// unless they're equal (`tex 69 69` is the same as `tex 69 70`)
+
// item respawn effect
DEF(TE_WIZSPIKE);
// flare particle and light
MY(velocityjitter) = '5.0 5.0 5.0';
}
+// cover small area in dark fog, spawn it once per second
+DEF(darkfield);
+SUB(darkfield) {
+ MY(airfriction) = 1;
+ MY(alpha_min) = 256;
+ MY(alpha_max) = 256;
+ MY(alpha_fade) = 50;
+ MY(bounce) = 1.500000;
+ MY(color_min) = "0x600089";
+ MY(color_max) = "0x000000";
+ 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(darkfield) {
+ MY(alpha_min) = 256;
+ MY(alpha_max) = 256;
+ MY(alpha_fade) = 50;
+ MY(color_min) = "0x600089";
+ MY(color_max) = "0x000000";
+ 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 small area in icy mist, spawn it once per second
DEF(icefield);
SUB(icefield) {
// bullet trail (somewhat like a tracer)
DEF(tr_bullet);
+SUB(tr_bullet) {
+ MY(alpha) = '500 600 10000';
+ MY(color_min) = "0xf03000";
+ MY(color_max) = "0xff6010";
+ MY(countabsolute) = 1;
+ MY(sizeincrease) = -3;
+ MY(size_min) = 0.6;
+ MY(size_max) = 0.8;
+ my(tex_min) = 200;
+ my(tex_max) = 200;
+ MY(type) = "beam";
+}
+SUB(tr_bullet) {
+ MY(airfriction) = -4;
+ MY(alpha) = '256 256 350';
+ MY(color_min) = "0x202020";
+ MY(color_max) = "0x404040";
+ MY(notunderwater) = true;
+ MY(sizeincrease) = 0.4;
+ MY(size_min) = 1;
+ MY(size_max) = 2;
+ MY(tex_min) = 0;
+ MY(tex_max) = 8;
+ MY(trailspacing) = 16;
+ MY(type) = "smoke";
+ MY(velocityjitter) = '4 4 4';
+}
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;
+ 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) = 0.5;
+ MY(size_max) = 0.6;
+ 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';
}
// smoke emitter for small pipes
}
// laser damage effect
-DEF(damage_laser);
-SUB(damage_laser) {
+DEF(damage_blaster);
+SUB(damage_blaster) {
MY(airfriction) = -0.350000;
MY(alpha_min) = 128;
MY(alpha_max) = 16;
}
// shotgun damage effect, alien blood
-DEF(damage_shotgun_alien);
-SUB(damage_shotgun_alien) {
+DEF(alien_damage_shotgun);
+SUB(alien_damage_shotgun) {
MY(airfriction) = 1;
MY(alpha_min) = 256;
MY(alpha_max) = 256;
MY(velocitymultiplier) = 5;
}
// blood mist
-SUB(damage_shotgun_alien) {
+SUB(alien_damage_shotgun) {
MY(alpha_min) = 100;
MY(alpha_max) = 256;
MY(alpha_fade) = 400;
}
// shotgun damage effect, robot blood
-DEF(damage_shotgun_robot);
-SUB(damage_shotgun_robot) {
+DEF(robot_damage_shotgun);
+SUB(robot_damage_shotgun) {
MY(airfriction) = 1;
MY(alpha_min) = 256;
MY(alpha_max) = 256;
MY(velocitymultiplier) = 5;
}
// blood mist
-SUB(damage_shotgun_robot) {
+SUB(robot_damage_shotgun) {
MY(alpha_min) = 100;
MY(alpha_max) = 256;
MY(alpha_fade) = 400;
}
// machinegun damage effect, normal blood
-DEF(damage_uzi);
-SUB(damage_uzi) {
+DEF(damage_machinegun);
+SUB(damage_machinegun) {
MY(airfriction) = 1;
MY(alpha_min) = 256;
MY(alpha_max) = 256;
MY(velocitymultiplier) = 5;
}
// blood mist
-SUB(damage_uzi) {
+SUB(damage_machinegun) {
MY(alpha_min) = 100;
MY(alpha_max) = 256;
MY(alpha_fade) = 400;
}
// machinegun damage effect, alien blood
-DEF(damage_uzi_alien);
-SUB(damage_uzi_alien) {
+DEF(alien_damage_machinegun);
+SUB(alien_damage_machinegun) {
MY(airfriction) = 1;
MY(alpha_min) = 256;
MY(alpha_max) = 256;
MY(velocitymultiplier) = 5;
}
// blood mist
-SUB(damage_uzi_alien) {
+SUB(alien_damage_machinegun) {
MY(alpha_min) = 100;
MY(alpha_max) = 256;
MY(alpha_fade) = 400;
}
// machinegun damage effect, robot blood
-DEF(damage_uzi_robot);
-SUB(damage_uzi_robot) {
+DEF(robot_damage_machinegun);
+SUB(robot_damage_machinegun) {
MY(airfriction) = 1;
MY(alpha_min) = 256;
MY(alpha_max) = 256;
MY(velocitymultiplier) = 5;
}
// blood mist
-SUB(damage_uzi_robot) {
+SUB(robot_damage_machinegun) {
MY(alpha_min) = 100;
MY(alpha_max) = 256;
MY(alpha_fade) = 400;
}
// mortar damage effect
-DEF(damage_grenadelauncher);
-SUB(damage_grenadelauncher) {
+DEF(damage_mortar);
+SUB(damage_mortar) {
MY(alpha_min) = 512;
MY(alpha_max) = 64;
MY(alpha_fade) = 1024;
MY(velocityjitter) = '22.0 22.0 50.0';
}
// smoke
-SUB(damage_grenadelauncher) {
+SUB(damage_mortar) {
MY(alpha_min) = 128;
MY(alpha_max) = 32;
MY(alpha_fade) = 128;
MY(velocityjitter) = '11.0 11.0 50.0';
}
+// arc damage effect
+DEF(damage_arc);
+SUB(damage_arc) {
+ MY(airfriction) = -0.650000;
+ 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.600000;
+ MY(notunderwater) = true;
+ MY(originjitter) = '2.0 2.0 2.0';
+ MY(startangle_min) = 180;
+ MY(startangle_max) = 360;
+ MY(spin_min) = -30;
+ MY(spin_max) = 30;
+ MY(sizeincrease) = -14;
+ MY(size_min) = 4;
+ MY(size_max) = 8;
+ MY(tex_min) = 47;
+ MY(tex_max) = 47;
+ MY(type) = "static";
+ MY(velocityjitter) = '6.0 6.0 12.0';
+}
+// plasma smoke
+SUB(damage_arc) {
+ MY(airfriction) = -0.500000;
+ 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) = '3.0 3.0 3.0';
+ MY(startangle_max) = 180;
+ MY(spin_min) = -30;
+ MY(spin_max) = 30;
+ MY(sizeincrease) = 10;
+ MY(size_min) = 3;
+ MY(size_max) = 6;
+ MY(tex_max) = 8;
+ MY(type) = "smoke";
+ MY(velocityjitter) = '0.3 0.3 0.5';
+}
+// bouncing sparks
+SUB(damage_arc) {
+ 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.150000;
+ MY(liquidfriction) = 0.600000;
+ MY(size_min) = 1;
+ MY(size_max) = 1;
+ MY(tex_min) = 66;
+ MY(tex_max) = 68;
+ MY(type) = "spark";
+ MY(velocityjitter) = '24.0 24.0 24.0';
+}
+
// electro damage effect
DEF(damage_electro);
SUB(damage_electro) {
}
// vortex damage effect
-DEF(damage_nex);
-SUB(damage_nex) {
+DEF(damage_vortex);
+SUB(damage_vortex) {
MY(airfriction) = -0.500000;
MY(alpha_min) = 64;
MY(alpha_max) = 8;
MY(velocityjitter) = '8.0 8.0 16.0';
}
// plasma smoke
-SUB(damage_nex) {
+SUB(damage_vortex) {
MY(airfriction) = -0.350000;
MY(alpha_min) = 64;
MY(alpha_max) = 16;
MY(velocityjitter) = '0.5 0.5 0.8';
}
// bouncing sparks
-SUB(damage_nex) {
+SUB(damage_vortex) {
MY(airfriction) = 2;
MY(alpha_min) = 255;
MY(alpha_max) = 255;
}
// vaporizer damage effect
-DEF(damage_minstanex);
-SUB(damage_minstanex) {
+DEF(damage_vaporizer);
+SUB(damage_vaporizer) {
MY(airfriction) = -0.500000;
MY(alpha_min) = 64;
MY(alpha_max) = 8;
MY(velocityjitter) = '8.0 8.0 16.0';
}
// plasma smoke
-SUB(damage_minstanex) {
+SUB(damage_vaporizer) {
MY(airfriction) = -0.350000;
MY(alpha_min) = 64;
MY(alpha_max) = 16;
MY(velocityjitter) = '0.5 0.5 0.8';
}
// bouncing sparks
-SUB(damage_minstanex) {
+SUB(damage_vaporizer) {
MY(airfriction) = 2;
MY(alpha_min) = 255;
MY(alpha_max) = 255;
}
// rocketlauncher damage effect
-DEF(damage_rocketlauncher);
-SUB(damage_rocketlauncher) {
+DEF(damage_devastator);
+SUB(damage_devastator) {
MY(alpha_min) = 512;
MY(alpha_max) = 64;
MY(alpha_fade) = 1024;
MY(velocityjitter) = '22.0 22.0 30.0';
}
// smoke
-SUB(damage_rocketlauncher) {
+SUB(damage_devastator) {
MY(alpha_min) = 128;
MY(alpha_max) = 32;
MY(alpha_fade) = 128;
MY(velocityjitter) = '224.0 224.0 224.0';
MY(velocityoffset) = '0.0 0.0 80.0';
}
+
+// weak bullet trail (somewhat like a tracer)
+DEF(tr_bullet_weak);
+SUB(tr_bullet_weak) {
+ MY(alpha) = '75 100 3000';
+ MY(color_min) = "0xf03000";
+ MY(color_max) = "0xff6010";
+ MY(countabsolute) = 1;
+ MY(sizeincrease) = -3;
+ MY(size_min) = 0.6;
+ MY(size_max) = 0.8;
+ my(tex_min) = 200;
+ my(tex_max) = 200;
+ MY(type) = "beam";
+}
+SUB(tr_bullet_weak) {
+ MY(airfriction) = -4;
+ MY(alpha) = '256 256 350';
+ MY(color_min) = "0x202020";
+ MY(color_max) = "0x404040";
+ MY(notunderwater) = true;
+ MY(sizeincrease) = 0.4;
+ MY(size_min) = 1;
+ MY(size_max) = 2;
+ MY(tex_min) = 0;
+ MY(tex_max) = 8;
+ MY(trailspacing) = 16;
+ MY(type) = "smoke";
+ MY(velocityjitter) = '4 4 4';
+}
+SUB(tr_bullet_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) = 0.5;
+ MY(size_max) = 0.6;
+ 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';
+}
+
+// Vaporizer hit effect
+DEF(TE_TEI_G3_HIT);
+SUB(TE_TEI_G3_HIT) {
+ 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) = 8;
+ MY(size_max) = 8;
+ MY(tex_min) = 200;
+ MY(tex_max) = 200;
+ MY(type) = "beam";
+}
+SUB(TE_TEI_G3_HIT) /* rings */ {
+ MY(airfriction) = -4;
+ MY(alpha_min) = 256;
+ MY(alpha_max) = 256;
+ MY(alpha_fade) = 512;
+ MY(color_min) = "0xFFFFFF";
+ MY(color_max) = "0xFFFFFF";
+ 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_HIT) {
+ MY(airfriction) = -4;
+ MY(alpha_min) = 256;
+ MY(alpha_max) = 256;
+ MY(alpha_fade) = 512;
+ MY(color_min) = "0xFFFFFF";
+ MY(color_max) = "0xFFFFFF";
+ MY(sizeincrease) = -6;
+ MY(size_min) = 10;
+ MY(size_max) = 10;
+ MY(trailspacing) = 40;
+ MY(type) = "smoke";
+}
+
+// respawn ghosts effect
+DEF(respawn_ghost);
+SUB(respawn_ghost) {
+ MY(count) = 75;
+ MY(type) = "static";
+ MY(color_min) = "0xA0A0A0";
+ MY(color_max) = "0xFFFFFF";
+ MY(size_min) = 2;
+ MY(size_max) = 2;
+ MY(alpha_min) = 32;
+ MY(alpha_max) = 64;
+ MY(alpha_fade) = 128;
+ MY(airfriction) = 1;
+ MY(liquidfriction) = 4;
+ MY(originoffset) = '0 0 -8';
+ MY(originjitter) = '28 28 16';
+ MY(velocityjitter) = '0 0 256';
+}
+
+// originally based on goldendust
+DEF(item_despawn);
+SUB(item_despawn) {
+ MY(type) = "snow";
+// MY(type) = "smoke";
+ MY(blend) = "add";
+ MY(alpha_min) = 192;
+ MY(alpha_max) = 256;
+ MY(alpha_fade) = 256;
+ MY(color_min) = "0xff9600";
+ MY(color_max) = "0xffefb8";
+ MY(count) = 32;
+ MY(originjitter) = '8 8 8';
+ MY(sizeincrease) = 1;
+ MY(size_min) = 0.5;
+ MY(size_max) = 1;
+ MY(tex_min) = 48;
+ MY(tex_max) = 55;
+ MY(velocityjitter) = '16 16 32';
+ MY(lightradius) = 48;
+ MY(lightradiusfade) 64;
+ MY(lightcolor) '1 0.75 0.36';
+ MY(lightshadow) 1;
+}
+
+// always add new effects to the bottom of the list. And keep this comment in the bottom line of this file!