smoke.lsl 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. // :SHOW:1
  2. // :CATEGORY:Fire
  3. // :NAME:Realfire by Rene
  4. // :AUTHOR:Rene10957 Resident
  5. // :KEYWORDS: light,lamp,lighting
  6. // :CREATED:2015-06-11 14:37:34
  7. // :EDITED:2015-06-12 11:25:11
  8. // :ID:1078
  9. // :NUM:1768
  10. // :REV:3.0.1
  11. // :WORLD:Second Life, Opensim
  12. // :DESCRIPTION:
  13. // Smoke slave script - goes into separate linked prims to to make more smoke
  14. // :CODE:
  15. // :LICENSE: CC0 (Public Domain). To the extent possible under law, Rene10957 has waived all copyright and related or neighboring rights.For more information, see http://creativecommons.org/publicdomain/zero/1.0/.
  16. string title = "RealSmoke"; // title
  17. string version = "3.0"; // version
  18. integer silent = TRUE; // silent startup
  19. // Constants
  20. integer smokeChannel = -15790; // smoke channel
  21. key texture = "5de058da-95f0-2736-b0e0-e218184ddece"; // whispy smoke
  22. // Particle parameters (general)
  23. float age = 16.0; // particle lifetime
  24. float rate = 0.5; // particle burst rate
  25. integer count = 3; // particle count
  26. vector startColor = <0.5, 0.5, 0.5>; // particle start color
  27. vector endColor = <0.5, 0.5, 0.5>; // particle end color
  28. float startAlpha = 1.0; // particle start alpha
  29. float endAlpha = 0.0; // particle end alpha
  30. // Particle parameters (resizing)
  31. vector startScale = <0.1, 0.1, 0>; // particle start size (100%)
  32. vector endScale = <4, 4, 0>; // particle end size (100%)
  33. float minSpeed = 0.0; // particle min. burst speed (100%)
  34. float maxSpeed = 0.1; // particle max. burst speed (100%)
  35. float burstRadius = 0.1; // particle burst radius (100%)
  36. vector partAccel = <0, 0, 0.2>; // particle accelleration (100%)
  37. // Functions
  38. updateSize(float size)
  39. {
  40. vector start = startScale / 100.0 * size; // start scale
  41. vector end = endScale / 100.0 * size; // end scale
  42. float min = minSpeed / 100.0 * size; // min. burst speed
  43. float max = maxSpeed / 100.0 * size; // max. burst speed
  44. float radius = burstRadius / 100.0 * size; // burst radius
  45. vector push = partAccel / 100.0 * size; // accelleration
  46. updateParticles(start, end, min, max, radius, push);
  47. }
  48. string getGroup()
  49. {
  50. string str = llStringTrim(llGetObjectDesc(), STRING_TRIM);
  51. if (llToLower(str) == "(no description)" || str == "") str = "Default";
  52. return str;
  53. }
  54. float percentage (float per, float num)
  55. {
  56. return num / 100.0 * per;
  57. }
  58. updateParticles(vector start, vector end, float min, float max, float radius, vector push)
  59. {
  60. llParticleSystem([
  61. PSYS_SRC_PATTERN, PSYS_SRC_PATTERN_EXPLODE,
  62. PSYS_SRC_TEXTURE, texture,
  63. PSYS_PART_START_COLOR, startColor,
  64. PSYS_PART_END_COLOR, endColor,
  65. PSYS_PART_START_ALPHA, startAlpha,
  66. PSYS_PART_END_ALPHA, endAlpha,
  67. PSYS_PART_START_SCALE, start,
  68. PSYS_PART_END_SCALE, end,
  69. PSYS_PART_MAX_AGE, age,
  70. PSYS_SRC_BURST_RATE, rate,
  71. PSYS_SRC_BURST_PART_COUNT, count,
  72. PSYS_SRC_BURST_SPEED_MIN, min,
  73. PSYS_SRC_BURST_SPEED_MAX, max,
  74. PSYS_SRC_BURST_RADIUS, radius,
  75. PSYS_SRC_ACCEL, push,
  76. PSYS_PART_FLAGS,
  77. 0 |
  78. PSYS_PART_EMISSIVE_MASK |
  79. PSYS_PART_FOLLOW_VELOCITY_MASK |
  80. PSYS_PART_INTERP_COLOR_MASK |
  81. PSYS_PART_INTERP_SCALE_MASK ]);
  82. }
  83. default
  84. {
  85. state_entry()
  86. {
  87. llParticleSystem([]);
  88. if (!silent) llWhisper(0, title + " " + version + " ready");
  89. }
  90. on_rez(integer start_param)
  91. {
  92. llResetScript();
  93. }
  94. link_message(integer sender_number, integer number, string msg, key id)
  95. {
  96. if (number != smokeChannel) return;
  97. integer size = (integer)msg;
  98. string group = (string)id;
  99. if (group == getGroup() || group == "Default" || getGroup() == "Default") {
  100. if (size) updateSize((float)size);
  101. else llParticleSystem([]);
  102. }
  103. }
  104. }