home *** CD-ROM | disk | FTP | other *** search
/ PC Gamer 5.14 / 2000-11_-_Disc_5.14.iso / Goodies / 3DGameStudio / Mission / particle.wdl < prev    next >
Text File  |  2000-02-08  |  5KB  |  156 lines

  1. /////////////////////////////////////////////////////////////////////////
  2. //    WDL prefabs for particles
  3. /////////////////////////////////////////////////////////////////////////
  4. // Some common definitions
  5. BMAP spark_map,<particle.pcx>;
  6. SKILL scatter_color         { RED 250; GREEN 250; BLUE 250; }
  7. SKILL scatter_range         { RED -100; GREEN -245; BLUE -245; }
  8. SKILL scatter_lifetime    { VAL 50; }
  9. SKILL scatter_size        { VAL 100; }
  10. IFDEF ACKNEX_VERSION414;
  11. SKILL scatter_gravity    { VAL 0.5; }
  12. SKILL scatter_spread        { VAL 6; }
  13. IFELSE;
  14. SKILL scatter_gravity    { VAL 4; }
  15. SKILL scatter_spread        { VAL 100; }
  16. ENDIF;
  17. /////////////////////////////////////////////////////////////////////////
  18. SYNONYM scatter_map { TYPE BMAP; DEFAULT spark_map; }
  19. SKILL particle_pos {}
  20. SKILL particle_speed {}
  21. SKILL scatter_speed { X 0; Y 0; Z 0; }
  22.  
  23. /////////////////////////////////////////////////////////////////////////
  24. // The particle_fade action lets a particle fade away
  25.  
  26. SKILL fade_lifetime    { VAL 8; }
  27. SKILL fade_color         { RED 255; GREEN 200; BLUE 0; }
  28. SKILL fade_targetcolor     { RED 128; GREEN 128; BLUE 128; }
  29.  
  30. ACTION particle_fade {
  31.     IF (MY_AGE == 0) {    // just born?
  32.         MY_SIZE = 100;
  33.         MY_SPEED.X = RANDOM(2)-1;
  34.         MY_SPEED.Y = RANDOM(2)-1;
  35.         MY_SPEED.Z = RANDOM(2)-1;
  36.         MY_COLOR.RED = fade_color.RED;
  37.         MY_COLOR.GREEN = fade_color.GREEN;
  38.         MY_COLOR.BLUE = fade_color.BLUE;
  39.     } ELSE {
  40.         MY_COLOR.RED += (fade_targetcolor.RED - MY_COLOR.RED)*0.2;
  41.         MY_COLOR.GREEN += (fade_targetcolor.GREEN - MY_COLOR.GREEN)*0.2;
  42.         MY_COLOR.BLUE += (fade_targetcolor.BLUE - MY_COLOR.BLUE)*0.2;
  43.  
  44.         IF (MY_AGE > fade_lifetime) { SET MY_ACTION,NULL; }
  45.     }
  46. }
  47. /////////////////////////////////////////////////////////////////////////
  48. // The particle_tumble action lets a particle tumble around
  49. // for 0.5 seconds, then disappear.
  50.  
  51. SKILL tumble_lifetime    { VAL 8; }
  52.  
  53. ACTION particle_tumble {
  54.     IF (MY_AGE == 0) {    // just born?
  55.         MY_SPEED.X = RANDOM(0.3)-0.15;
  56.         MY_SPEED.Y = RANDOM(0.3)-0.15;
  57.         MY_SPEED.Z = RANDOM(0.3)-0.15;
  58.  
  59.         MY_SIZE = 30;
  60.         MY_COLOR.RED = scatter_color.RED * 0.75;
  61.         MY_COLOR.GREEN = scatter_color.GREEN * 0.3;
  62.         MY_COLOR.BLUE = scatter_color.BLUE * 0.3;
  63.     }
  64.     IF (MY_AGE > tumble_lifetime) {
  65.         SET MY_ACTION,NULL;
  66.     }
  67. }
  68.  
  69. /////////////////////////////////////////////////////////////////////////
  70. // The particle_scatter action will scatter particles in all directions,
  71. // then let them fall to the ground.
  72. ACTION particle_scatter {
  73.     IF (MY_AGE == 0) {    // just born?
  74.         MY_SPEED.X = scatter_speed.X + RANDOM(scatter_spread);
  75.         MY_SPEED.Y = scatter_speed.Y + RANDOM(scatter_spread);
  76.         MY_SPEED.Z = scatter_speed.Z + RANDOM(scatter_spread);
  77.  
  78.         MY_SIZE = scatter_size;
  79.         MY_COLOR.RED = scatter_color.RED;
  80.         MY_COLOR.GREEN = scatter_color.GREEN;
  81.         MY_COLOR.BLUE = scatter_color.BLUE;
  82.         SET MY_MAP,scatter_map;
  83. //        SET MY_FLARE,ON;    //$$$
  84.         RETURN;
  85.     }
  86. // Add gravity
  87.     MY_SPEED.Z -= scatter_gravity;
  88. // Maybe add random term to age
  89. //    MY_AGE += RANDOM(0.05);
  90.  
  91.     IF (MY_AGE >= scatter_lifetime) {
  92.         SET MY_ACTION,NULL;
  93.     }
  94. }
  95.  
  96. // The same, but with a particle trace behind
  97. ACTION particle_traces {
  98.     CALL particle_scatter;
  99. // A particle itself may EMIT further particles
  100.     EMIT 1,MY_POS,particle_tumble;
  101. }
  102.  
  103. // The same, but with a color range
  104. ACTION particle_range {
  105.     CALL particle_scatter;
  106.     IF (MY_AGE > 0) {
  107.         MY_COLOR.RED += scatter_range.RED*MY_AGE/scatter_lifetime;
  108.         MY_COLOR.GREEN += scatter_range.GREEN*MY_AGE/scatter_lifetime;
  109.         MY_COLOR.BLUE += scatter_range.BLUE*MY_AGE/scatter_lifetime;
  110.     }
  111. }
  112.  
  113. // The same, but emits a sphere, with color range
  114. ACTION particle_sphere {
  115.     CALL particle_scatter;
  116.     IF (MY_AGE == 0) {
  117.         NORMALIZE MY_SPEED,scatter_spread;
  118.     } ELSE {
  119.         MY_COLOR.RED += scatter_range.RED*MY_AGE/scatter_lifetime;
  120.         MY_COLOR.GREEN += scatter_range.GREEN*MY_AGE/scatter_lifetime;
  121.         MY_COLOR.BLUE += scatter_range.BLUE*MY_AGE/scatter_lifetime;
  122.     }
  123. }
  124. // This action may be called to initalize the scattering
  125. ACTION scatter_init {
  126.     particle_pos.X = MY.X;
  127.     particle_pos.Y = MY.Y;
  128.     particle_pos.Z = MY.Z;
  129.     scatter_speed.X = -scatter_spread*0.5;    // to compensate for the first random
  130.     scatter_speed.Y = -scatter_spread*0.5;
  131.     scatter_speed.Z = -scatter_spread*0.5;
  132. }
  133.  
  134. /////////////////////////////////////////////////////////////////////////
  135. // The particle_shot action lets a particle fly in shot_speed
  136. // direction for 2 seconds, then disappear.
  137.  
  138. SKILL shot_lifetime    { VAL 32; }
  139. SKILL shot_speed        { }
  140.  
  141. ACTION particle_shot {
  142.     IF (MY_AGE == 0) {    // just born?
  143.         MY_SPEED.X = shot_speed.X;
  144.         MY_SPEED.Y = shot_speed.Y;
  145.         MY_SPEED.Z = shot_speed.Z;
  146.         MY_SIZE = 100;
  147.         MY_COLOR.RED = 255;
  148.         MY_COLOR.GREEN = 0;
  149.         MY_COLOR.BLUE = 200;
  150.     }
  151.     IF (MY_AGE > shot_lifetime) {
  152.         SET MY_ACTION,NULL;
  153.     }
  154. }
  155.  
  156. /////////////////////////////////////////////////////////////////