# jDoom: Particle Effects

Header { Version = 6; }

SkipIf -nodefaultfx; 

######=====---- PLAYER WEAPONS ----=====######
# Rocket smoke trail.
Generator {
  State = "ROCKET";
  Flags = "gnf_spawn";
  Center { -16 0 5 };
  Speed = .8; Speed rnd = 1;
  Spawn age = -1; Max age = 1200;
  Particles = 150;
  Spawn rate = 1.4; Spawn Rnd = 0.4;
  Vector { 0 0 0 }; Vector rnd = 1;
  # Fire and smoke.
  Stage {
    Type = "pt_point"; Flags = "ptf_bright";
    Radius = 1; Color { 1 1 1 1 };
  };
  Stage {
    Type = "pt_point"; Flags = "ptf_bright";
    Tics = 4; Rnd = .2;
    Radius = 5; Color { 1 .95 .7 1 };
  };
  Stage {
    Type = "pt_point"; Flags = "ptf_bright";
    Tics = 2; Rnd = .2;
    Radius = 5; Color { 1 .7 .3 1 };
  };
  Stage {
    Type = "pt_point";
    Tics = 15;
    Radius = 6; Color { .6 .6 .6 .5 };
    Resistance = 0.01;
  };
  Stage {
    Type = "pt_point";
    Tics = 130;
    Radius = 22;
    Bounce = 0;
    Resistance = 0.1;
    Gravity = 0;
    Color { 0.5 0.5 0.55 0.3 };
  };
  Stage { 
    Type = "pt_point"; 
    Radius = 30; 
    Color { 0.2 0.2 0.22 0 };
  };
}

# Bullet ricochet. Happens pretty rarely.
Generator {
  State = "PUFF1";
  Flags = "gnf_blend";
  Speed = 20;
  Speed rnd = 0.1;
  Spawn age = 2;
  Max age = 50;
  Particles = 20;
  Spawn rate = .65;
  Spawn rnd = 1;
  Vector rnd = 1;
  Stage {
    Type = "pt_line"; 
    Flags = "ptf_bright";
    Tics = 20; Rnd = 0.5;
    Radius = 1; Color { 1 1 .9 1 };
    Bounce = 0.5; Resistance = 0.01; Gravity = 0.04;
  };
  Stage {
    Type = "pt_line"; 
    Flags = "ptf_bright";
    Tics = 10; Rnd = 0.5;
    Radius = 1; Color { 1 .9 .3 .5 };
    Bounce = 0.5; Resistance = 0.01; Gravity = 0.04;
  };
  Stage {
    Type = "pt_line"; 
    Flags = "ptf_bright";
    Radius = 1; 
    Resistance = 0.01; Gravity = 0.02;
  };
}

# Plasma sparks (Red).
Generator {
  State = "PLASBALL";
  Flags = "gnf_blend";
  Speed = 3;
  Speed rnd = 0.8;
  Spawn age = 3;
  Spawn radius = 20;
  Max age = 50;
  Particles = 30;
  Spawn rate = 10;
  Spawn rnd = 1;
  Vector rnd = 1;
  Stage {
    Type = "pt_point";
    Flags = "ptf_bright";
    Tics = 5; Rnd = 0.5;
    Radius = 15; Color { 1.8 1.1 0.5 };
    Resistance = 0.3;
  };
  Stage {
    Type = "pt_point";
    Flags = "ptf_bright";
    Tics = 20; Rnd = 0.5;
    Radius = 13; Color { 1.45 0.5 0.01 };
    Resistance = 0.3;
  };
  Stage {
    Type = "pt_point";
    Flags = "ptf_bright";
    Tics = 10; Rnd = 0.5;
    Radius = 12; Color { 2.05 0.05 0.4 };
    Resistance = 0.2;
  };
  Stage {
    Type = "pt_point";
    Flags = "ptf_bright";
    Color { .2 .2 1 0 };
    Radius = 10;
  };
}

# BFG explosion effect.
Generator {
  State = "BFGLAND";
  Flags = "gnf_blend";
  Speed = 7;
  Speed rnd = 0.2;
  Spawn radius = 10;
  Spawn age = 7;
  Max age = 70;
  Particles = 200;
  Spawn rate = 25;
  Vector rnd = 1;
  Stage {
    Type = "pt_point";
    Flags = "ptf_bright";
    Tics = 30;
    Rnd = 0.2;
    Radius = 4;
    Bounce = 0.8;
    Resistance = .03;
    Gravity = 0.01;
    Color { 1 1 1 1 };
  };
  Stage {
    Type = "pt_point";
    Flags = "ptf_bright";
    Radius = 3;
    Tics = 30;
    Resistance = .05;
    Gravity = 0.02;
    Color { .5 1 .5 .8 };
  };
  Stage {
    Type = "pt_point";
    Flags = "ptf_bright";
    Tics = 3;
    Color { 0 1 0 .5 };
  };
}

######=====---- MONSTERS ----=====######
# Baby Spider plasma sparks (yellow-green).
Generator {
  State = "ARACH_PLEX";
  Flags = "gnf_blend";
  Speed = 3;
  Speed rnd = 0.8;
  Spawn age = 3;
  Spawn radius = 20;
  Max age = 50;
  Particles = 30;
  Spawn rate = 10;
  Spawn rnd = 1;
  Vector rnd = 1;
  Stage {
    Type = "pt_point";
    Flags = "ptf_bright";
    Tics = 5; Rnd = 0.5;
    Radius = 15; Color { 1 1 1 .7 };
    Resistance = 0.3;
  };
  Stage {
    Type = "pt_point";
    Flags = "ptf_bright";
    Tics = 20; Rnd = 0.5;
    Radius = 13; Color { 1 .9 .5 .4 };
    Resistance = 0.3;
  };
  Stage {
    Type = "pt_point";
    Flags = "ptf_bright";
    Tics = 10; Rnd = 0.5;
    Radius = 12; Color { .5 1 .2 .4 };
    Resistance = 0.2;
  };
  Stage {
    Type = "pt_point";
    Flags = "ptf_bright";
    Color { 0 .6 0 0 };
    Radius = 10;
  };
}

######=====---- EXPLOSIONS ----=====######
# Rocket explosions.
Generator {
  State = "EXPLODE1";
  Center { 0 0 5 };
  Flags = "gnf_blend";
  Speed = 8;
  Speed rnd = 0.5;
  Spawn age = 2;
  Spawn radius = 15;
  Max age = 200;
  Particles = 100;
  Spawn rate = 14;
  Spawn Rnd = 0.1;
  Vector rnd = 1;
  Stage {
    Type = "pt_point";
    Flags = "ptf_bright";
    Tics = 20; Rnd = .5;
    Radius = 18; Color { 1 1 1 1 };
    Resistance = 0.2;
  };
  Stage {
    Type = "pt_point";
    Flags = "ptf_bright";
    Tics = 13; Rnd = .5;
    Radius = 17; Color { 1 .9 .5 .7 };
    Resistance = 0.2;
  };
  Stage {
    Type = "pt_point";
    Flags = "ptf_bright";
    Tics = 7; Rnd = 0.2;
    Radius = 10; Color { 1 .5 .2 .5 };
    Resistance = 0.2;
  };
  Stage {
    Type = "pt_point";
    Flags = "ptf_bright";
    Tics = 20; Rnd = .8;
    Radius = 12; Color { .4 .4 .42 .3 };
    Resistance = 0.5;
  };
  Stage {
    Type = "pt_point";
    Radius = 5; Color { .2 .2 .2 0 };
  };
}

# Mancubus rocket explosion.
Copy Generator {
  State = "FATSHOTX1";
  Spawn rate = 15; 
}

# Barrel explosion.
Copy Generator {
  State = "BEXP";
  Flags = "gnf_blend gnf_srcvel";
  Center { 0 0 20 };
}

# Rocket sparks.
Generator {
  State = "EXPLODE0";
  Speed = 10;
  Speed rnd = 0.9;
  Spawn age = 2;
  Spawn radius = 3;
  Max age = 200;
  Particles = 100;
  Spawn rate = 30;
  Spawn Rnd = 0.3;
  Vector { 0 0 0 }; Vector rnd = 1;
  Stage {
    Type = "pt_point";
    Flags = "ptf_bright";
    Tics = 25;
    Rnd = 0.5;
    Radius = 2;
    Bounce = 0.3;
    Resistance = 0.02;
    Gravity = 0.1;
    Color { 1 1 1 1 };
  };
  Stage {
    Type = "pt_point";
    Flags = "ptf_bright";
    Tics = 15;
    Rnd = 0.5;
    Radius = 1.5;
    Bounce = 0.3;
    Resistance = 0.03;
    Gravity = 0.1;
    Color { 1 1 .5 1 };
  };
  Stage {
    Type = "pt_point";
    Tics = 7;
    Radius = 1.25;
    Bounce = 0.3;
    Resistance = 0.1;
    Gravity = 0.1;
    Color { 1 .1 .1 1 };
  };
  Stage {
    Type = "pt_point";
    Tics = 7;
    Radius = 1;
    Bounce = 0.3;
    Resistance = 0.1;
    Gravity = 0.1;
    Radius = 1;
    Color { .7 .1 0 .7 };
  };
  Stage {
    Type = "pt_point";
    Tics = 30;
    Radius = 10;
    Resistance = 0.2;
    Gravity = 0.01;
    Color { .3 .3 .3 .3 };
  };
  Stage {
    Type = "pt_point";
    Tics = 30;
    Radius = 20;
    Resistance = 0.2;
    Gravity = 0.01;
    Color { .15 .15 .15 .15 };
  };
  Stage {
    Type = "pt_point";
    Radius = 10;
  };
}

# Low-energy (small and red) explosion. Red fireballs.
Generator {
  State = "TBALLX1";
  Flags = "gnf_blend";
  Speed = 5;
  Speed rnd = 0.6;
  Spawn age = 2;
  Spawn radius = 12;
  Max age = 200;
  Particles = 50;
  Spawn rate = 20;
  Spawn Rnd = 0.2;
  Vector rnd = 1;
  Stage {
    Type = "pt_point";
    Flags = "ptf_bright";
    Tics = 12; Rnd = .5;
    Radius = 15; Color { 1 .9 .5 .8 };
    Resistance = 0.2;
  };
  Stage {
    Type = "pt_point";
    Flags = "ptf_bright";
    Tics = 10; Rnd = .5;
    Radius = 13; Color { 1 .7 .5 .7 };
    Resistance = 0.2;
  };
  Stage {
    Type = "pt_point";
    Flags = "ptf_bright";
    Tics = 15; Rnd = 0.2;
    Radius = 10; Color { 1 .2 .1 .5 };
    Resistance = 0.2;
  };
  Stage {
    Type = "pt_point";
    Radius = 10; Color { .5 0 0 0 };
  };
}

# Cacodemon fireball explosion.
Copy Generator { State = "RBALLX1"; }

# Revenant tracer missile explosion.
Copy Generator { 
  State = "TRACEEXP1"; 
  Center { 0 0 8 };
}

# Skull explosion.
Copy Generator { 
  State = "SKULL_DIE3"; 
  Center { 0 0 24 };
  Flags = "gnf_blend";
  Speed = 4;
  Speed rnd = 0.8;
  Spawn age = 2;
  Spawn radius = 30;
  Max age = 200;
  Particles = 100;
  Spawn rate = 30;
  Spawn rnd = 0.1;
  Vector rnd = 1;
  Stage {
    Type = "pt_point";
    Flags = "ptf_bright";
    Tics = 6; Rnd = .5;
    Radius = 13; Color { 1 1 1 1 };
    Resistance = 0.2;
  };
  Stage {
    Type = "pt_point";
    Flags = "ptf_bright";
    Tics = 13; Rnd = .6;
    Radius = 12; Color { 1 .8 .5 1 };
    Resistance = 0.3; Gravity = -0.15;
  };
  Stage {
    Type = "pt_point";
    Flags = "ptf_bright";
    Tics = 13; Rnd = .7;
    Radius = 15; Color { 1 .3 .1 .7 };
    Resistance = 0.2; Gravity = -0.15;
  };
  Stage {
    Type = "pt_point";
    Flags = "ptf_bright";
    Tics = 10; Rnd = .8;
    Radius = 13; Color { .5 .1 .1 .3 };
    Resistance = 0.2; Gravity = -0.15;
  };
  Stage {
    Type = "pt_point";
    Radius = 10; 
  };
}

# Pain Elemental death explosion.
Copy Generator { State = "PAIN_DIE3"; }

# Green blast explosion.
Generator {
  State = "BRBALLX1";
  Flags = "gnf_blend";
  Center { 0 0 -4 };
  Speed = 3;
  Speed rnd = 0.6;
  Spawn age = 2;
  Spawn radius = 14;
  Max age = 200;
  Particles = 50;
  Spawn rate = 20;
  Spawn Rnd = 0.2;
  Vector rnd = 1;
  Stage {
    Type = "pt_point";
    Flags = "ptf_bright";
    Tics = 12; Rnd = .5;
    Radius = 10; Color { .5 1 .5 .8 };
    Resistance = 0.2;
  };
  Stage {
    Type = "pt_point";
    Flags = "ptf_bright";
    Tics = 10; Rnd = .5;
    Radius = 8; Color { .2 1 .2 .7 };
    Resistance = 0.2;
  };
  Stage {
    Type = "pt_point";
    Flags = "ptf_bright";
    Tics = 15; Rnd = 0.2;
    Radius = 6; Color { 0 1 0 .5 };
    Resistance = 0.2;
  };
  Stage {
    Type = "pt_point";
    Radius = 10; Color { 0 .5 0 0 };
  };
}

######=====---- PICK-UP OBJECTS ----=====######
# Invulnerability.
Generator {
  State = "PINV";
  Flags = "gnf_blend gnf_spawn";
  Center { 0 0 12 };
  Spawn age = -1;
  Max age = -1;
  Particles = 80;
  Spawn rate = .6;
  Spawn rnd = 1;
  Min spawn radius = 10;
  Spawn radius = 15;  
  Vector rnd = 1;
  Force radius = 15;
  Force = 0.02;
  Force axis { 0 0 1.5 };
  
  Stage {
    Type = "pt_point"; Flags = "ptf_bright ptf_force";
    Radius = 0; Color { 0 1 0 0 };
    Tics = 20;
    Resistance = 0.05;
  };
  Stage {
    Type = "pt_point"; Flags = "ptf_bright ptf_force";
    Radius = 2.5; Color { .3 1 .3 .8 };
    Tics = 20;
    Resistance = 0.05;
  };
  Stage {
    Type = "pt_point"; Flags = "ptf_bright ptf_force";
    Radius = 2.5; Color { .3 1 .3 .8 };
    Tics = 30;
    Resistance = 0.05;
  };
  Stage { 
    Type = "pt_point"; Flags = "ptf_bright ptf_force";
    Radius = 0; Color { 0 1 0 0 };
  };
}

######=====---- DAMAGE ----=====######
# Gibbed blood spurt.
Generator {
  State = "POSS_XDIE2";
  Flags = "gnf_srcvel";
  Center { 0 0 30 };
  Speed = 6;
  Speed rnd = 0.7;
  Spawn age = 4;
  Max age = 300;
  Particles = 200;
  Spawn rate = 30;
  Spawn Rnd = 0.1;
  Vector rnd = 1;
  Stage {
    Type = "pt_point"; Flags = "ptf_flat ptf_stagetouch";
    Radius = 1.5; Color { .7 0 0 1 };
    Tics = 300;
    Resistance = 0.01; Gravity = 0.15;
  };
  Stage {
    Type = "pt_point"; Flags = "ptf_flat";
    Radius = 16; Radius rnd = 0.8; Color { .7 0 0 1 };
    Tics = 200;
    Resistance = 1;
  };
  Stage { 
    Type = "pt_point"; 
    Radius = 9; Radius rnd = 0.8; Color { .45 0 0 0 };
  };
}

Copy Generator { State = "PLAY_XDIE2"; }
Copy Generator { State = "SPOS_XDIE2"; }
Copy Generator { State = "TROO_XDIE2"; }
Copy Generator { State = "CPOS_XDIE2"; }
Copy Generator { State = "SSWV_XDIE2"; }

# Pink demon death blood.
Copy Generator { 
  State = "SARG_DIE1"; 
  Speed = 4;
  Spawn age = 3;
  Spawn rate = 20;
}

Copy Generator { State = "FATT_DIE2"; }

# Trooper death blood.
Copy Generator { 
  State = "TROO_DIE1"; 
  Speed = 3;
  Spawn age = 2;
  Spawn rate = 15;
}

# Arachnotron death.
Copy Generator { State = "BSPI_DIE2"; }

# Cacodemon blue blood.
Copy Generator {
  State = "HEAD_DIE3";
  Stage {
    Type = "pt_point"; Flags = "ptf_flat ptf_stagetouch";
    Radius = 1.5; Color { 0 0 .7 1 };
    Tics = 300;
    Resistance = 0.01; Gravity = 0.15;
  };
  Stage {
    Type = "pt_point"; Flags = "ptf_flat";
    Radius = 13; Color { 0 0 .7 1 };
    Tics = 200;
    Resistance = 1;
  };
  Stage { 
    Type = "pt_point"; 
    Radius = 7; Color { 0 0 .4 0 };
  };
}
