This articles contains a number of particle generator definition examples.
(The syntax of these DED examples is not the most exemplary. The Stages in particular should be made more readable.)
This generator is used to create the effect of flames for the Lost Soul in jDRP 1.1 I have used the Mobj type so that all Lost Souls share the same number of particles. This is important, otherwise Doomsday might slow to a crawl if there are 100 Lost Souls in view and it's trying to spawn eg 200 particles for each. Furthermore because of the generator limit (256 active generators) I have used the mobj type as Doomsday treats all Lost Souls as THE SAME generator. So 100 Lost Souls == 1 generator when using the mobj type.
Generator { Mobj = "SKULL" Flags = blend | srcvel | srcdir | static Center { -1 0 22 } Speed = .6 Speed rnd = .4 Spawn radius = .8 Spawn age = -1 Max age = -1 Particles = 600 Spawn rate = 1.2 Vector { 0 -2 0} Vector Rnd = 4 Stage { Type= point Flags= bright Tics= 1 Radius= 12 Bounce= 0 Resistance= .1 Color { 1 .9 .7 .7 } } Stage { Type= tex07 Flags= bright Force { 0 0 .04 } Tics= 20 Radius= 12 Bounce= 0 Color { 1 .9 .4 .7 } } Stage { Type= tex07 Flags= bright Force { 0 0 .04 } Tics= 10 Radius= 15 Color { .6 .2 0 .5 } } Stage { Type= tex07 Flags= bright Force { 0 0 .04 } Radius= 20 Tics= 40 Color { .4 0 0 .01} } Stage { Type= tex07 Flags= bright Force { 0 0 .04 } Radius= 20 Tics= 2 Color { 0 0 0 0} } }
This generator is used to create the effects of pieces of broken barrel bouncing around after a barrel is destroyed. It is only one of several generators used for the Barrel Explosion. It is a good example of a generator that uses model particles (note the models are defined elsewhere) and the Alt Start to create two different pieces of barrel using the same generator. This helps to cut down the number of active generators so we don't go over the limit. Notice the empty stage 6, this stops particles in the first group of stages from “rolling over” into the second group.
Generator { State = "BEXP3" Flags = static | srcdir | srcvel | extra | modelonly Max age= 1550 Particles = 9 Speed = 30 Speed Rnd = .8 Spawn Age = 2 Spawn rate = 4 Spawn Rnd = .1 Vector Rnd = 2 Center { 0 0 15 } Distance = 1792 Alt start = 7 Alt Rnd = .8 Stage {Type= model03 Flags= rndyaw | rndpitch | stagetouch Tics= 600 Radius= 1 Color {1 1 1 1} Bounce= .5 Spin {16 18} Resistance= .04 Gravity= .85} Stage {Type= model03 Tics= 80 Radius= 1 Color {1 1 1 1} Bounce= .3 Resistance= .1 Gravity= 2} Stage {Type= model03 Tics= 20 Radius= 1 Color {1 1 1 1} Bounce= .2 Resistance= .1 Gravity= 3} Stage {Type= model03 Tics= 800 Radius= 1 Rnd= .3 Color {1 1 1 1} Resistance= .4 Gravity= 4 } Stage {Type= model03 Tics= 40 Radius= 1 Color {1 1 1 1}} Stage {Type= model03 Tics= 1 Radius= 1 Color {1 1 1 .001}} Stage {} Stage {Type= model04 Flags= rndyaw | rndpitch Tics= 100 Radius= 1 Color {1 1 1 1} Bounce= .6 Spin {16 18} Resistance= .2 Gravity= .85} Stage {Type= model04 Tics= 80 Radius= 1 Color {1 1 1 1} Bounce= .6 Resistance= .2 Gravity= 2} Stage {Type= model04 Tics= 20 Radius= 1 Color {1 1 1 1} Bounce= .5 Resistance= .3 Gravity= 3} Stage {Type= model04 Tics= 800 Radius= 1 Rnd= .3 Color {1 1 1 1} Resistance= .4 Gravity= 4} Stage {Type= model04 Tics= 40 Radius= 1 Color {1 1 1 1}} Stage {Type= model04 Tics= 1 Radius= 1 Color {1 1 1 .001}} }
This generator is used to create the effect of rain. The rain will be visible in all sectors with flat “F_SKY1” as the ceiling. This generator provides a good example of how flat based generators work. Notice that it makes use of the density flag to produce an even distribution of particles in 128×128 blocks rather than per sector. Without this flag particles would “bunch up” in small sectors. Also, notice that we make use of the distance property to reduce the amount of rain being rendered to particles that are within 1024 world units of the camera, because this generator produces somewhat heavy rainfall it is not noticeable that the particles in the distance are not being drawn.
Generator { Flat = "F_SKY1" Flags = ceiling | density Speed = 20.0 Speed Rnd = 0.1 Vector { 0, 0, -1} Vector Rnd = 0.05 Distance = 1024 Spawn age = -1 Max age = -1 Particles = 96 Spawn rate = 0.5 Spawn Rnd = 0.3 Presim = 175 Stage { Type = line Tics = 30000 Color = { .6, .6, .6, .6} Radius = 6 Flags = stagetouch } Stage { Type = line Tics = 30 Color = { .6, .6, .6, 1} Radius = 2 Bounce = 0.9 Resistance = 0.3 } Stage { Type = line Tics = 2 Color = { .6, .6, .6, 0} Radius = 0 Resistance = 1 } }
This is included as an example of tying particle generators to stationary mobjs (as opposed to the lost souls which were mobile). Additionally it also shared in the benefit of reducing the total number of generators used.
#---PickleBro's Heretic Teleporter Particles #---inspired by BAM's Doom Teleporter Particles #---and by jaquboss/deus-ex's teleporter smoke in XccP #red teleporters Generator { Mobj = "TELEGLITGEN" Flags = blendadd | static | floor Speed = 2; Speed rnd = 1; Spawn age = -1; Spawn radius = 30 Max age = -1; Particles = 300; Spawn rate = 10; Vector { 0 0 1 }; Presim = 70; Stage { Type = "pt_point"; Flags = "ptf_bright ptf_dietouch"; Tics = 10; Rnd = 1; Bounce = 0; Gravity = 0; Radius = 4; Color { 1 .7 .6 .5 }; }; Stage { Type = "pt_point"; Flags = "ptf_bright ptf_dietouch"; Tics = 70; Rnd = 1; Bounce = 0; Gravity = -1; Radius = 3; Color { 1 .4 .3 .5 }; }; Stage { Type = "pt_line"; Flags = "ptf_bright ptf_dietouch"; Tics = 35; Rnd = 1; Bounce = 0; Gravity = -1; Radius = 1; Color { 1 0 0 .5 }; }; } Generator { Mobj = "TELEGLITTER" Flags = blendadd | static | floor Speed = 2; Speed rnd = 1; Spawn age = -1; Spawn radius = 30 Max age = -1; Particles = 200; Spawn rate = 10; Vector { 0 0 1 }; Presim = 70; Stage { Type = "pt_point"; Flags = "ptf_bright ptf_dietouch"; Tics = 10; Rnd = 1; Bounce = 3; Gravity = 0; Radius = 4; Color { 1 .7 .6 .5 }; }; Stage { Type = "pt_line"; Flags = "ptf_bright ptf_dietouch"; Tics = 70; Rnd = 1; Bounce = 0; Gravity = -1; Radius = 3; Color { 1 .4 .3 .5 }; }; Stage { Type = "pt_line"; Flags = "ptf_bright ptf_dietouch"; Tics = 35; Rnd = 1; Bounce = 0; Gravity = -1; Radius = 1; Color { 1 0 0 .5 }; }; } #blue teleporters Generator { Mobj = "TELEGLITGEN2" Flags = blendadd | static | floor Speed = 7 Speed Rnd = 0.6 Vector { 0 0 1 } Vector Rnd = 0.2 Spawn radius = 30 Spawn age = -1 Max age = -1 Particles = 300 Spawn rate = 1 Spawn Rnd = 0.2 Stage { Type = "pt_point" Flags = "ptf_bright"; Tics = 10 Rnd = 1 Bounce = 2; Color { 0.4 0.4 1 0.3 } Radius = 30 Flags = bright Gravity = -0.6 Resistance = 0.15 } Stage { Type = "pt_point" Flags = "ptf_bright"; Tics = 30 Rnd = 1 Bounce = 20; Color { 0.4 0.4 1 0.3 } Radius = 10 Gravity = 0.6 Resistance = 0.15 } Stage { Type = "pt_point" Flags = "ptf_bright"; Tics = 8 Rnd = 1 Bounce = 0 Color { 0.5 0.4 1 0.3 } Radius = 5 Flags = bright Resistance = 0.05 } Stage { Type = "pt_line"; Flags = "ptf_bright ptf_dietouch"; Tics = 35; Rnd = 1; Bounce = 0; Gravity = -1; Radius = 2; Resistance = 0.25 Color { 0.3 0.4 1 0.3 } }; } Generator { Mobj = "TELEGLITTER2" Flags = blendadd | static | floor Speed = 2; Speed rnd = 1; Spawn age = -1; Spawn radius = 30 Max age = -1; Particles = 200; Spawn rate = 10; Vector { 0 0 1 }; Presim = 70; Stage { Type = "pt_point"; Flags = "ptf_bright ptf_dietouch"; Tics = 10; Rnd = 1; Bounce = 0; Gravity = 0; Radius = 4; Color { 0.4 0.4 1 0.3 }; }; Stage { Type = "pt_line"; Flags = "ptf_bright ptf_dietouch"; Tics = 70; Rnd = 1; Bounce = 0; Gravity = -1; Radius = 3; Color { 0.4 0.4 1 0.3 }; }; Stage { Type = "pt_line"; Flags = "ptf_bright ptf_dietouch"; Tics = 35; Rnd = 1; Bounce = 0; Gravity = -1; Radius = 1; Color { 0.4 0.4 1 0.3 }; }; }