diff --git a/Environment/environment.xml b/Environment/environment.xml
index fa004b9cf..b90b363ec 100644
--- a/Environment/environment.xml
+++ b/Environment/environment.xml
@@ -502,5 +502,8 @@
0.0
+
+
+
diff --git a/Environment/volcanoes.xml b/Environment/volcanoes.xml
new file mode 100644
index 000000000..d48fb2faf
--- /dev/null
+++ b/Environment/volcanoes.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+0
+
+
+ 0
+ 0
+
+
+
+ 0
+ 0
+
+
+
diff --git a/Models/Volcanoes/Kilauea/halemaumau.xml b/Models/Volcanoes/Kilauea/halemaumau.xml
new file mode 100644
index 000000000..6b5a9a14c
--- /dev/null
+++ b/Models/Volcanoes/Kilauea/halemaumau.xml
@@ -0,0 +1,121 @@
+
+
+
+
+
+
+
+
+
+
+ kilauea.ac
+
+ 0.00
+ 0.00
+ 5.00
+
+
+
+ select
+ Lava
+
+
+ /environment/volcanoes/kilauea/halemaumau-activity
+ 0
+
+
+
+
+
+ Lava
+ Effects/model-combined-deferred
+
+
+
+ scale
+ Lava
+ 330.0
+ 330.0
+ 1.0
+
+
+
+ material
+ Lava
+
+ 0.4
+ 0.32
+ 0.32
+
+
+
+
+ halemaumau_smoke.xml
+
+ -20.0
+ 20.0
+ 0.0
+ 0
+
+
+
+ /environment/volcanoes/kilauea/halemaumau-activity
+ 1
+
+
+
+
+
+ kilauea_lava_fountain.xml
+
+ -20.0
+ 20.0
+ 0.0
+ 0
+
+
+
+ /environment/volcanoes/kilauea/halemaumau-activity
+ 1
+
+
+
+
+
+ kilauea_smoke.xml
+
+ 160.0
+ -130.0
+ 0.0
+ 0
+
+
+
+ /environment/volcanoes/kilauea/halemaumau-activity
+ 0
+
+
+
+
+
+ kilauea_smoke.xml
+
+ 180.0
+ 180.0
+ 0.0
+ 0
+
+
+
+ /environment/volcanoes/kilauea/halemaumau-activity
+ 0
+
+
+
+
+
+
+
+
diff --git a/Models/Volcanoes/Kilauea/halemaumau_smoke.xml b/Models/Volcanoes/Kilauea/halemaumau_smoke.xml
new file mode 100644
index 000000000..f6d03468f
--- /dev/null
+++ b/Models/Volcanoes/Kilauea/halemaumau_smoke.xml
@@ -0,0 +1,107 @@
+
+
+
+
+
+
+ kilauea-smoke
+ smoke.png
+ false
+ false
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+
+
+ local
+
+
+ point
+
+
+
+ 90
+ 90
+ 0
+ 0
+
+ 15
+ 2
+
+
+ 0
+ 0
+ 10
+ 0
+ 0
+ 40
+
+
+
+
+
+ 2
+ 0
+
+
+
+ billboard
+
+
+
+
+
+ /rendering/scene/diffuse/green
+
+
+ /rendering/scene/diffuse/green
+
+
+ /rendering/scene/diffuse/green
+
+
+ 0.2
+
+
+
+ 50.0
+
+
+
+
+
+ /rendering/scene/diffuse/green
+
+
+ /rendering/scene/diffuse/green
+
+
+ /rendering/scene/diffuse/green
+
+
+ 0.1
+
+
+
+ 250.0
+
+
+
+ 40
+
+ 1.0
+ 2.50
+
+
+
+ air
+ true
+ true
+
+
+
+
+
\ No newline at end of file
diff --git a/Models/Volcanoes/Kilauea/kilauea.ac b/Models/Volcanoes/Kilauea/kilauea.ac
new file mode 100644
index 000000000..70817f30b
--- /dev/null
+++ b/Models/Volcanoes/Kilauea/kilauea.ac
@@ -0,0 +1,24 @@
+AC3Db
+MATERIAL "DefaultWhite" rgb 1.0000 1.0000 1.0000 amb 0.2000 0.2000 0.2000 emis 0.0000 0.0000 0.0000 spec 0.5000 0.5000 0.5000 shi 10 trans 0.0000
+MATERIAL "Material.001" rgb 0.8000 0.8000 0.8000 amb 1.0000 1.0000 1.0000 emis 0.0000 0.0000 0.0000 spec 0.2500 0.2500 0.2500 shi 50 trans 0.0000
+OBJECT world
+name "Blender_export__kilauea.ac"
+kids 1
+OBJECT poly
+name "Lava"
+texture "lava_texture.png"
+texrep 1 1
+numvert 4
+1.0000000 0.0000000 1.0000000
+-1.0000000 0.0000000 1.0000000
+1.0000000 0.0000000 -1.0000000
+-1.0000000 0.0000000 -1.0000000
+numsurf 1
+SURF 0X20
+mat 1
+refs 4
+1 0.00000 1.00000
+0 1.00000 1.000000
+2 1.00000 0.00000
+3 0.00000 0.000000
+kids 0
diff --git a/Models/Volcanoes/Kilauea/kilauea.nas b/Models/Volcanoes/Kilauea/kilauea.nas
new file mode 100644
index 000000000..1c8838ff6
--- /dev/null
+++ b/Models/Volcanoes/Kilauea/kilauea.nas
@@ -0,0 +1,54 @@
+ var puu_oo_loop_flag = 1;
+
+ var puu_oo_loop = func (strength, tgt_strength) {
+
+ if (puu_oo_loop_flag == 0)
+ {
+ print("Ending Puu Oo eruption simulation.");
+ return;
+ }
+
+ if (rand() > 0.99) {tgt_strength = 100.0;}
+
+ tgt_strength = tgt_strength - 0.5;
+ if (tgt_strength < 40.0) {tgt_strength = 40.0;}
+
+ var step = 5.0;
+
+ if (math.abs(strength - tgt_strength) < 5.0) {step = 1.0;}
+
+ if (strength < tgt_strength)
+ {strength += step;}
+ else
+ {strength -= step;}
+
+ setprop("/environment/volcanoes/kilauea/puu-oo-eruption-strength", strength);
+ setprop("/environment/volcanoes/kilauea/puu-oo-eruption-quantity", int(0.5*strength));
+
+
+ settimer(func {puu_oo_loop(strength, tgt_strength);}, 0.1);
+ }
+
+ puu_oo_state_manager = func {
+
+ print ("Puu Oo state manager");
+ var state = getprop("/environment/volcanoes/kilauea/puu-oo-activity");
+
+ if (state == 3)
+ {
+ print("Starting Puu Oo eruption simulation.");
+ puu_oo_loop_flag = 1;
+ puu_oo_loop(50.0, 50.0);
+ }
+ else
+ {
+ puu_oo_loop_flag = 0;
+ }
+
+ }
+
+ # call state manager once to get correct autosaved behavior, otherwise use listener
+
+ puu_oo_state_manager();
+
+ setlistener("/environment/volcanoes/kilauea/puu-oo-activity", puu_oo_state_manager);
\ No newline at end of file
diff --git a/Models/Volcanoes/Kilauea/kilauea_lava_fountain.xml b/Models/Volcanoes/Kilauea/kilauea_lava_fountain.xml
new file mode 100644
index 000000000..66d110810
--- /dev/null
+++ b/Models/Volcanoes/Kilauea/kilauea_lava_fountain.xml
@@ -0,0 +1,107 @@
+
+
+
+
+
+
+ kilauea-lava-fountain
+ lava.png
+ true
+ false
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+
+
+ local
+
+
+ point
+
+
+
+ 0
+ 10
+ 0
+ 360
+
+ 30
+ 10
+
+
+ 0
+ 0
+ 10
+ 0
+ 0
+ 40
+
+
+
+
+
+ 25
+ 0
+
+
+
+ billboard
+
+
+
+
+
+ 1.0
+
+
+ 0.2
+
+
+ 0.2
+
+
+ 1.0
+
+
+
+ 5.0
+
+
+
+
+
+ 0.5
+
+
+ 0.1
+
+
+ 0.1
+
+
+ 1.0
+
+
+
+ 7.0
+
+
+
+ 8
+
+ 200.0
+ 0.50
+
+
+
+ air
+ true
+ true
+
+
+
+
+
\ No newline at end of file
diff --git a/Models/Volcanoes/Kilauea/kilauea_smoke.xml b/Models/Volcanoes/Kilauea/kilauea_smoke.xml
new file mode 100644
index 000000000..c82da40ad
--- /dev/null
+++ b/Models/Volcanoes/Kilauea/kilauea_smoke.xml
@@ -0,0 +1,107 @@
+
+
+
+
+
+
+ kilauea-smoke2
+ smoke.png
+ false
+ false
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+
+
+ local
+
+
+ point
+
+
+
+ 60
+ 90
+ 0
+ 360
+
+ 20
+ 2
+
+
+ 0
+ 0
+ 10
+ 0
+ 0
+ 40
+
+
+
+
+
+ 4
+ 0
+
+
+
+ billboard
+
+
+
+
+
+ /rendering/scene/diffuse/green
+
+
+ /rendering/scene/diffuse/green
+
+
+ /rendering/scene/diffuse/green
+
+
+ 0.4
+
+
+
+ 10.0
+
+
+
+
+
+ /rendering/scene/diffuse/green
+
+
+ /rendering/scene/diffuse/green
+
+
+ /rendering/scene/diffuse/green
+
+
+ 0.05
+
+
+
+ 100.0
+
+
+
+ 15
+
+ 1.0
+ 2.50
+
+
+
+ air
+ true
+ true
+
+
+
+
+
\ No newline at end of file
diff --git a/Models/Volcanoes/Kilauea/lava.png b/Models/Volcanoes/Kilauea/lava.png
new file mode 100644
index 000000000..12b6a443f
Binary files /dev/null and b/Models/Volcanoes/Kilauea/lava.png differ
diff --git a/Models/Volcanoes/Kilauea/lava_texture.png b/Models/Volcanoes/Kilauea/lava_texture.png
new file mode 100644
index 000000000..28747b1af
Binary files /dev/null and b/Models/Volcanoes/Kilauea/lava_texture.png differ
diff --git a/Models/Volcanoes/Kilauea/lava_texture_base.png b/Models/Volcanoes/Kilauea/lava_texture_base.png
new file mode 100644
index 000000000..d0f6bde89
Binary files /dev/null and b/Models/Volcanoes/Kilauea/lava_texture_base.png differ
diff --git a/Models/Volcanoes/Kilauea/puu_oo.xml b/Models/Volcanoes/Kilauea/puu_oo.xml
new file mode 100644
index 000000000..bae443891
--- /dev/null
+++ b/Models/Volcanoes/Kilauea/puu_oo.xml
@@ -0,0 +1,187 @@
+
+
+
+
+
+
+
+
+
+ kilauea.ac
+
+ 0.00
+ 0.00
+ 8.00
+
+
+
+ select
+ Lava
+
+
+ /environment/volcanoes/kilauea/puu-oo-activity
+ 0
+
+
+
+
+
+ Lava
+ Effects/model-combined-deferred
+
+
+
+ scale
+ Lava
+ 120.0
+ 120.0
+ 2.0
+
+
+
+ material
+ Lava
+
+ 0.4
+ 0.32
+ 0.32
+
+
+
+
+ puu_oo_smoke.xml
+
+ -20.0
+ 20.0
+ 140.0
+ 0
+
+
+
+ /environment/volcanoes/kilauea/puu-oo-activity
+ 0
+
+
+
+
+
+ puu_oo_lava_fountain.xml
+
+ 0.0
+ 0.0
+ 0.0
+ 0
+
+
+
+ /environment/volcanoes/kilauea/puu-oo-activity
+ 2
+
+
+
+
+
+ puu_oo_lava_fountain2.xml
+
+ 0.0
+ 0.0
+ 0.0
+ 0
+
+
+
+ /environment/volcanoes/kilauea/puu-oo-activity
+ 2
+
+
+
+
+
+ kilauea_lava_fountain.xml
+
+ 30.0
+ -20.0
+ 0.0
+ 0
+
+
+
+ /environment/volcanoes/kilauea/puu-oo-activity
+ 1
+
+
+
+
+
+
+
+
diff --git a/Models/Volcanoes/Kilauea/puu_oo_lava_fountain.xml b/Models/Volcanoes/Kilauea/puu_oo_lava_fountain.xml
new file mode 100644
index 000000000..d72f53b1f
--- /dev/null
+++ b/Models/Volcanoes/Kilauea/puu_oo_lava_fountain.xml
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+ puu-oo-lava-fountain
+ lava.png
+ true
+ false
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+
+
+ local
+
+
+ sector
+ 0.0
+ 15.0
+ 0.0
+ 360.0
+
+
+
+ 0
+ 8
+ 0
+ 360
+
+
+ /environment/volcanoes/kilauea/puu-oo-eruption-strength
+ 50.0
+
+
+ 0
+ 0
+ 10
+ 0
+ 0
+ 40
+
+
+
+
+
+ /environment/volcanoes/kilauea/puu-oo-eruption-quantity
+ 0
+
+
+
+ billboard
+
+
+
+
+
+ 1.0
+
+
+ 0.2
+
+
+ 0.2
+
+
+ 1.0
+
+
+
+ 10.0
+
+
+
+
+
+ 0.5
+
+
+ 0.1
+
+
+ 0.1
+
+
+ 1.0
+
+
+
+ 10.0
+
+
+
+ 25
+
+ 200.0
+ 0.50
+
+
+
+ air
+ true
+ true
+
+
+
+
+
\ No newline at end of file
diff --git a/Models/Volcanoes/Kilauea/puu_oo_lava_fountain2.xml b/Models/Volcanoes/Kilauea/puu_oo_lava_fountain2.xml
new file mode 100644
index 000000000..379dc4de7
--- /dev/null
+++ b/Models/Volcanoes/Kilauea/puu_oo_lava_fountain2.xml
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+ puu-oo-lava-fountain
+ lava.png
+ true
+ false
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+
+
+ local
+
+
+ sector
+ 0.0
+ 15.0
+ 0.0
+ 360.0
+
+
+
+ 0
+ 12
+ 0
+ 360
+
+
+ /environment/volcanoes/kilauea/puu-oo-eruption-strength
+ 30
+
+
+ 0
+ 0
+ 10
+ 0
+ 0
+ 40
+
+
+
+
+
+ /environment/volcanoes/kilauea/puu-oo-eruption-quantity
+ 0
+
+
+
+ billboard
+
+
+
+
+
+ 1.0
+
+
+ 0.2
+
+
+ 0.2
+
+
+ 1.0
+
+
+
+ 3.0
+
+
+
+
+
+ 0.5
+
+
+ 0.1
+
+
+ 0.1
+
+
+ 1.0
+
+
+
+ 3.0
+
+
+
+ 20
+
+ 200.0
+ 0.50
+
+
+
+ air
+ true
+ true
+
+
+
+
+
\ No newline at end of file
diff --git a/Models/Volcanoes/Kilauea/puu_oo_smoke.xml b/Models/Volcanoes/Kilauea/puu_oo_smoke.xml
new file mode 100644
index 000000000..81d78412b
--- /dev/null
+++ b/Models/Volcanoes/Kilauea/puu_oo_smoke.xml
@@ -0,0 +1,107 @@
+
+
+
+
+
+
+ puu-oo-smoke
+ smoke_turbulent.png
+ false
+ false
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+
+
+ local
+
+
+ point
+
+
+
+ 90
+ 90
+ 0
+ 0
+
+ 20
+ 10
+
+
+ 0
+ 0
+ -40
+ 0
+ 0
+ 40
+
+
+
+
+
+ 1
+ 0
+
+
+
+ billboard
+
+
+
+
+
+ /rendering/scene/diffuse/green
+
+
+ /rendering/scene/diffuse/green
+
+
+ /rendering/scene/diffuse/green
+
+
+ 0.6
+
+
+
+ 50.0
+
+
+
+
+
+ /rendering/scene/diffuse/green
+
+
+ /rendering/scene/diffuse/green
+
+
+ /rendering/scene/diffuse/green
+
+
+ 0.1
+
+
+
+ 250.0
+
+
+
+ 60
+
+ 1.0
+ 2.50
+
+
+
+ air
+ true
+ true
+
+
+
+
+
\ No newline at end of file
diff --git a/Models/Volcanoes/Kilauea/smoke.png b/Models/Volcanoes/Kilauea/smoke.png
new file mode 100644
index 000000000..f50fa935a
Binary files /dev/null and b/Models/Volcanoes/Kilauea/smoke.png differ
diff --git a/Models/Volcanoes/Kilauea/smoke_turbulent.png b/Models/Volcanoes/Kilauea/smoke_turbulent.png
new file mode 100644
index 000000000..f71a7ad83
Binary files /dev/null and b/Models/Volcanoes/Kilauea/smoke_turbulent.png differ
diff --git a/Models/Volcanoes/Stromboli/central_crater.xml b/Models/Volcanoes/Stromboli/central_crater.xml
new file mode 100644
index 000000000..cc7fab866
--- /dev/null
+++ b/Models/Volcanoes/Stromboli/central_crater.xml
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+ stromboli_smoke_main.xml
+
+ -50.0
+ 50.0
+ 20.0
+ 0
+
+
+
+ /environment/volcanoes/stromboli/central-activity
+ 0
+
+
+
+
+
+ stromboli_smoke_minor.xml
+
+ 50.0
+ 100.0
+ 20.0
+ 0
+
+
+
+ /environment/volcanoes/stromboli/central-activity
+ 0
+
+
+
+
+
+ central_crater_lava_fountain.xml
+
+ 0.0
+ 0.0
+ 0.0
+ 170
+ 10
+
+
+
+ /environment/volcanoes/stromboli/central-activity
+ 1
+
+
+
+
+
+ central_crater_lava_fountain_inner.xml
+
+ 0.0
+ 0.0
+ 0.0
+ 170
+ 10
+
+
+
+ /environment/volcanoes/stromboli/central-activity
+ 1
+
+
+
+
+
+
+
+
+
diff --git a/Models/Volcanoes/Stromboli/central_crater_lava_fountain.xml b/Models/Volcanoes/Stromboli/central_crater_lava_fountain.xml
new file mode 100644
index 000000000..3e2c5e3de
--- /dev/null
+++ b/Models/Volcanoes/Stromboli/central_crater_lava_fountain.xml
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+ stromboli-lava-foundain
+ lava.png
+ true
+ false
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+
+
+ global
+
+
+ sector
+ 0.0
+ 25.0
+ 0.0
+ 360.0
+
+
+
+ 0
+ 15
+ 0
+ 360
+
+
+ /environment/volcanoes/stromboli/stromboli-eruption-strength
+ 150.0
+
+
+ 0
+ 0
+ 10
+ 0
+ 0
+ 40
+
+
+
+
+
+ /environment/volcanoes/stromboli/stromboli-eruption-quantity
+ 0
+
+
+
+ billboard
+
+
+
+
+
+ 1.0
+
+
+ 0.2
+
+
+ 0.2
+
+
+ 1.0
+
+
+
+ 4.0
+
+
+
+
+
+ 0.5
+
+
+ 0.1
+
+
+ 0.1
+
+
+ 1.0
+
+
+
+ 4.0
+
+
+
+ 22
+
+ 200.0
+ 0.50
+
+
+
+ air
+ true
+ true
+
+
+
+
+
\ No newline at end of file
diff --git a/Models/Volcanoes/Stromboli/central_crater_lava_fountain_inner.xml b/Models/Volcanoes/Stromboli/central_crater_lava_fountain_inner.xml
new file mode 100644
index 000000000..76b5eb8de
--- /dev/null
+++ b/Models/Volcanoes/Stromboli/central_crater_lava_fountain_inner.xml
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+ stromboli-lava-foundain-inner
+ lava.png
+ true
+ false
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+
+
+ global
+
+
+ sector
+ 0.0
+ 10.0
+ 0.0
+ 360.0
+
+
+
+ 0
+ 3
+ 0
+ 360
+
+
+ /environment/volcanoes/stromboli/stromboli-eruption-strength-inner
+ 150.0
+
+
+ 0
+ 0
+ 10
+ 0
+ 0
+ 40
+
+
+
+
+
+ /environment/volcanoes/stromboli/stromboli-eruption-quantity-inner
+ 0
+
+
+
+ billboard
+
+
+
+
+
+ 1.0
+
+
+ 0.2
+
+
+ 0.2
+
+
+ 1.0
+
+
+
+ 6.0
+
+
+
+
+
+ 0.5
+
+
+ 0.1
+
+
+ 0.1
+
+
+ 1.0
+
+
+
+ 6.0
+
+
+
+ 22
+
+ 200.0
+ 0.50
+
+
+
+ air
+ true
+ true
+
+
+
+
+
\ No newline at end of file
diff --git a/Models/Volcanoes/Stromboli/lava.png b/Models/Volcanoes/Stromboli/lava.png
new file mode 100644
index 000000000..bb7f943ad
Binary files /dev/null and b/Models/Volcanoes/Stromboli/lava.png differ
diff --git a/Models/Volcanoes/Stromboli/side_crater.xml b/Models/Volcanoes/Stromboli/side_crater.xml
new file mode 100644
index 000000000..bca8c6398
--- /dev/null
+++ b/Models/Volcanoes/Stromboli/side_crater.xml
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+
+
+
+
+ stromboli_smoke_minor.xml
+
+ 50.0
+ -100.0
+ 0.0
+ 0
+
+
+
+ /environment/volcanoes/stromboli/side-activity
+ 0
+
+
+
+
+
+ stromboli_smoke_minor.xml
+
+ -50.0
+ -120.0
+ 0.0
+ 0
+
+
+
+ /environment/volcanoes/stromboli/side-activity
+ 0
+
+
+
+
+
+ stromboli_smoke_main.xml
+
+ 0.0
+ 60.0
+ 20.0
+ 0
+
+
+
+ /environment/volcanoes/stromboli/side-activity
+ 0
+
+
+
+
+
+ side_crater_lava_fountain.xml
+
+ 0.0
+ 0.0
+ 0.0
+ 180.0
+ 40.0
+
+
+
+ /environment/volcanoes/stromboli/side-activity
+ 1
+
+
+
+
+
+ side_crater_lava_fountain_inner.xml
+
+ 0.0
+ 0.0
+ 0.0
+ 180.0
+ 40.0
+
+
+
+ /environment/volcanoes/stromboli/side-activity
+ 1
+
+
+
+
+
+
+
+
+
diff --git a/Models/Volcanoes/Stromboli/side_crater_lava_fountain.xml b/Models/Volcanoes/Stromboli/side_crater_lava_fountain.xml
new file mode 100644
index 000000000..db298b1a8
--- /dev/null
+++ b/Models/Volcanoes/Stromboli/side_crater_lava_fountain.xml
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+ stromboli-sec-lava-foundain
+ lava.png
+ true
+ false
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+
+
+ global
+
+
+ sector
+ 0.0
+ 20.0
+ 0.0
+ 360.0
+
+
+
+ 0
+ 15
+ 0
+ 360
+
+
+ /environment/volcanoes/stromboli/stromboli-eruption-strength-sec
+ 150.0
+
+
+ 0
+ 0
+ 10
+ 0
+ 0
+ 40
+
+
+
+
+
+ /environment/volcanoes/stromboli/stromboli-eruption-quantity-sec
+ 0
+
+
+
+ billboard
+
+
+
+
+
+ 1.0
+
+
+ 0.2
+
+
+ 0.2
+
+
+ 1.0
+
+
+
+ 4.0
+
+
+
+
+
+ 0.5
+
+
+ 0.1
+
+
+ 0.1
+
+
+ 1.0
+
+
+
+ 4.0
+
+
+
+ 22
+
+ 200.0
+ 0.50
+
+
+
+ air
+ true
+ true
+
+
+
+
+
\ No newline at end of file
diff --git a/Models/Volcanoes/Stromboli/side_crater_lava_fountain_inner.xml b/Models/Volcanoes/Stromboli/side_crater_lava_fountain_inner.xml
new file mode 100644
index 000000000..6026926d2
--- /dev/null
+++ b/Models/Volcanoes/Stromboli/side_crater_lava_fountain_inner.xml
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+ stromboli-sec-lava-foundain-inner
+ lava.png
+ true
+ false
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+
+
+ global
+
+
+ sector
+ 0.0
+ 5.0
+ 0.0
+ 360.0
+
+
+
+ 0
+ 5
+ 0
+ 360
+
+
+ /environment/volcanoes/stromboli/stromboli-eruption-strength-sec-inner
+ 150.0
+
+
+ 0
+ 0
+ 10
+ 0
+ 0
+ 40
+
+
+
+
+
+ /environment/volcanoes/stromboli/stromboli-eruption-quantity-sec-inner
+ 0
+
+
+
+ billboard
+
+
+
+
+
+ 1.0
+
+
+ 0.2
+
+
+ 0.2
+
+
+ 1.0
+
+
+
+ 6.0
+
+
+
+
+
+ 0.5
+
+
+ 0.1
+
+
+ 0.1
+
+
+ 1.0
+
+
+
+ 6.0
+
+
+
+ 22
+
+ 200.0
+ 0.50
+
+
+
+ air
+ true
+ true
+
+
+
+
+
\ No newline at end of file
diff --git a/Models/Volcanoes/Stromboli/smoke_turbulent.png b/Models/Volcanoes/Stromboli/smoke_turbulent.png
new file mode 100644
index 000000000..f71a7ad83
Binary files /dev/null and b/Models/Volcanoes/Stromboli/smoke_turbulent.png differ
diff --git a/Models/Volcanoes/Stromboli/stromboli.nas b/Models/Volcanoes/Stromboli/stromboli.nas
new file mode 100644
index 000000000..8562b89ff
--- /dev/null
+++ b/Models/Volcanoes/Stromboli/stromboli.nas
@@ -0,0 +1,122 @@
+ var stromboli_loop_flag = 1;
+
+ var stromboli_central_factor = 1.0;
+ var stromboli_side_factor = 1.0;
+
+ var stromboli_central_probability = 0.99;
+ var stromboli_side_probability = 0.99;
+
+
+ var stromboli_loop = func (timer, strength, timer_sec, strength_sec) {
+
+ if (stromboli_loop_flag == 0)
+ {
+ print("Ending Stromboli simulation.");
+ return;
+ }
+
+
+ if ((timer <= 0.0) and (rand() > stromboli_central_probability))
+ {
+ strength = 180.0 + 70.0 * rand();
+ strength *= stromboli_central_factor;
+ timer = 0.3 + 0.3 * rand();
+ }
+ else if (timer <= 0.0)
+ {
+ strength = strength - 3.0;
+ }
+ else
+ {
+ strength = strength - 0.5;
+ }
+
+ if (strength < 10.0) {strength = 10.0;}
+
+
+ setprop("/environment/volcanoes/stromboli/stromboli-eruption-strength", strength );
+ setprop("/environment/volcanoes/stromboli/stromboli-eruption-strength-inner", 0.95 * strength );
+ setprop("/environment/volcanoes/stromboli/stromboli-eruption-quantity", int(5.0*strength + rand()));
+ setprop("/environment/volcanoes/stromboli/stromboli-eruption-quantity-inner", int(1.0*strength + 0.2 * rand()));
+
+ timer = timer - 0.1;
+
+
+ if ((timer_sec <= 0.0) and (rand() > stromboli_side_probability))
+ {
+ strength_sec = 140.0 + 60.0 * rand();
+ strength_sec *= stromboli_side_factor;
+ timer_sec = 0.2 + 0.2 * rand();
+ }
+ else if (timer_sec <= 0.0)
+ {
+ strength_sec = strength_sec - 3.0;
+ }
+ else
+ {
+ strength_sec = strength_sec - 0.5;
+ }
+
+ if (strength_sec < 10.0) {strength_sec = 10.0;}
+
+
+ setprop("/environment/volcanoes/stromboli/stromboli-eruption-strength-sec", 0.95 * ((0.9 + 0.1 * rand()) * strength_sec) );
+ setprop("/environment/volcanoes/stromboli/stromboli-eruption-strength-sec-inner", ((0.9 + 0.1 * rand()) * strength_sec) );
+ setprop("/environment/volcanoes/stromboli/stromboli-eruption-quantity-sec", int(5.0*strength_sec + rand()));
+ setprop("/environment/volcanoes/stromboli/stromboli-eruption-quantity-sec-inner", int(1.0*strength_sec + 0.2 * rand()));
+
+ timer_sec = timer_sec - 0.1;
+
+ settimer(func {stromboli_loop(timer, strength, timer_sec, strength_sec);}, 0.1);
+ }
+
+ stromboli_state_manager = func {
+
+ print ("Stromboli state manager");
+ var state1 = getprop("/environment/volcanoes/stromboli/central-activity");
+ var state2 = getprop("/environment/volcanoes/stromboli/side-activity");
+
+ if (state1 > 2)
+ {
+ stromboli_central_probability = 0.99;
+ stromboli_central_factor = 1.0;
+ }
+ else
+ {
+ stromboli_central_probability = 0.998;
+ stromboli_central_factor = 0.6;
+ }
+
+ if (state2 > 2)
+ {
+ stromboli_side_probability = 0.99;
+ stromboli_side_factor = 1.0;
+ }
+ else
+ {
+ stromboli_side_probability = 0.998;
+ stromboli_side_factor = 0.6;
+ }
+
+
+ var state = state1;
+ if (state2 > state) {state = state2;}
+
+ if (state > 1)
+ {
+ print("Starting Stromboli eruption simulation.");
+ stromboli_loop_flag = 1;
+ stromboli_loop(0.0, 0.0, 0.0, 0.0);
+ }
+ else
+ {
+ stromboli_loop_flag = 0;
+ }
+
+ }
+
+ # call state manager once to get correct autosaved behavior, otherwise use listener
+
+ stromboli_state_manager();
+ setlistener("/environment/volcanoes/stromboli/central-activity", stromboli_state_manager);
+ setlistener("/environment/volcanoes/stromboli/side-activity", stromboli_state_manager);
\ No newline at end of file
diff --git a/Models/Volcanoes/Stromboli/stromboli_smoke_main.xml b/Models/Volcanoes/Stromboli/stromboli_smoke_main.xml
new file mode 100644
index 000000000..0b95082ae
--- /dev/null
+++ b/Models/Volcanoes/Stromboli/stromboli_smoke_main.xml
@@ -0,0 +1,107 @@
+
+
+
+
+
+
+ stromboli-smoke
+ smoke_turbulent.png
+ false
+ false
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+
+
+ local
+
+
+ point
+
+
+
+ 90
+ 90
+ 0
+ 0
+
+ 20
+ 10
+
+
+ 0
+ 0
+ -40
+ 0
+ 0
+ 40
+
+
+
+
+
+ 1
+ 1
+
+
+
+ billboard
+
+
+
+
+
+ /rendering/scene/diffuse/green
+
+
+ /rendering/scene/diffuse/green
+
+
+ /rendering/scene/diffuse/green
+
+
+ 0.6
+
+
+
+ 50.0
+
+
+
+
+
+ /rendering/scene/diffuse/green
+
+
+ /rendering/scene/diffuse/green
+
+
+ /rendering/scene/diffuse/green
+
+
+ 0.1
+
+
+
+ 350.0
+
+
+
+ 120
+
+ 1.0
+ 2.50
+
+
+
+ air
+ true
+ true
+
+
+
+
+
\ No newline at end of file
diff --git a/Models/Volcanoes/Stromboli/stromboli_smoke_minor.xml b/Models/Volcanoes/Stromboli/stromboli_smoke_minor.xml
new file mode 100644
index 000000000..88512da05
--- /dev/null
+++ b/Models/Volcanoes/Stromboli/stromboli_smoke_minor.xml
@@ -0,0 +1,107 @@
+
+
+
+
+
+
+ stromboli-smoke-minor
+ smoke_turbulent.png
+ false
+ false
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+
+
+ global
+
+
+ point
+
+
+
+ 90
+ 90
+ 0
+ 0
+
+ 20
+ 10
+
+
+ 0
+ 0
+ -40
+ 0
+ 0
+ 40
+
+
+
+
+
+ 4
+ 1
+
+
+
+ billboard
+
+
+
+
+
+ /rendering/scene/diffuse/green
+
+
+ /rendering/scene/diffuse/green
+
+
+ /rendering/scene/diffuse/green
+
+
+ 0.6
+
+
+
+ 10.0
+
+
+
+
+
+ /rendering/scene/diffuse/green
+
+
+ /rendering/scene/diffuse/green
+
+
+ /rendering/scene/diffuse/green
+
+
+ 0.1
+
+
+
+ 50.0
+
+
+
+ 30
+
+ 1.0
+ 2.50
+
+
+
+ air
+ true
+ true
+
+
+
+
+
\ No newline at end of file
diff --git a/Nasal/volcano.nas b/Nasal/volcano.nas
new file mode 100644
index 000000000..7663e6462
--- /dev/null
+++ b/Nasal/volcano.nas
@@ -0,0 +1,136 @@
+# volcano management routines
+# Thorsten Renk 2017
+
+
+
+
+var volcano = {
+ new: func(name, lat, lon) {
+ var v = { parents: [volcano] };
+ v.lat = lat;
+ v.lon = lon;
+ v.pos = geo.Coord.new().set_latlon(lat, lon);
+ v.name = name;
+ v.loaded = 0;
+ return v;
+ },
+
+};
+
+
+var volcano_manager = {
+
+ dist_to_load: 100000.0,
+ active: 0,
+
+ init: func {
+
+ me.volcano_array = [];
+ me.pos = {};
+ me.init_state();
+
+ },
+
+ start: func {
+
+ if (me.active == 1)
+ {
+ me.run(0);
+ }
+
+ },
+
+ init_state: func {
+ var state = getprop("/environment/volcanoes/enable-volcanoes");
+ me.active = state;
+ if (state == 1)
+ {print("Volcanic activity on.");}
+ else {print ("Volcanic activity off.");}
+ },
+
+ set_state: func {
+ var state = getprop("/environment/volcanoes/enable-volcanoes");
+ me.active = state;
+ if (state == 1)
+ {
+ print("Volcanic activity on.");
+ me.run(0);
+ }
+ else {print ("Volcanic activity off.");}
+
+ },
+
+ run: func (index) {
+
+
+ if (me.active == 0) {return;}
+
+ if (index > size(me.volcano_array) - 1) {index = 0;}
+
+
+
+ if (me.volcano_array[index].loaded == 0)
+ {
+ me.pos = geo.aircraft_position();
+ var dist = me.pos.distance_to(me.volcano_array[index].pos);
+ #print ("Distance is now: ", dist);
+
+ var visibility = getprop("/environment/visibility-m");
+
+
+ if ((dist < me.dist_to_load) and (dist < visibility))
+ {
+ print("Loading ", me.volcano_array[index].name, ".");
+ me.volcano_array[index].set();
+ me.volcano_array[index].loaded = 1;
+ }
+ }
+
+ index += 1;
+
+ settimer( func { me.run(index);}, 1.0);
+ },
+
+};
+
+volcano_manager.init();
+
+
+
+# setter functions for volcano sceneries
+
+var set_kilauea = func {
+
+io.include("Models/Volcanoes/Kilauea/kilauea.nas");
+geo.put_model("Models/Volcanoes/Kilauea/halemaumau.xml", 19.4062038, -155.2840123);
+geo.put_model("Models/Volcanoes/Kilauea/puu_oo.xml", 19.38881767, -155.10669939);
+}
+
+var set_stromboli = func {
+
+io.include("Models/Volcanoes/Stromboli/stromboli.nas");
+geo.put_model("Models/Volcanoes/Stromboli/central_crater.xml", 38.7892, 15.2105);
+geo.put_model("Models/Volcanoes/Stromboli/side_crater.xml", 38.7950, 15.2139);
+}
+
+# volcano definitions
+
+var kilauea = volcano.new("Kilauea", 19.39, -155.20);
+kilauea.set = set_kilauea;
+append(volcano_manager.volcano_array, kilauea);
+
+var stromboli = volcano.new("Stromboli", 38.78, 15.21);
+stromboli.set = set_stromboli;
+append(volcano_manager.volcano_array, stromboli);
+
+
+# start the manager when autosaved (need some delay for terrain loading to finish)
+
+settimer(func {volcano_manager.start();}, 5.0);
+
+# set the relevant listeners
+
+setlistener("/environment/volcanoes/enable-volcanoes", func {volcano_manager.set_state();},0,0 );
+
+
+
diff --git a/gui/dialogs/volcano-kilauea.xml b/gui/dialogs/volcano-kilauea.xml
new file mode 100644
index 000000000..d876ce0ba
--- /dev/null
+++ b/gui/dialogs/volcano-kilauea.xml
@@ -0,0 +1,152 @@
+
+
+
+ Kilauea
+ vbox
+ 1
+ false
+ 400
+
+
+ 6
+
+
+
+
+
+
+
+ 4
+
+
+
+
+
+ table
+
+
+
+ left
+ 0
+ 0
+
+
+
+
+ 0
+ 1
+
+
+
+ halemaumau
+ 0
+ 2
+ 0
+ 2
+ 1
+ true
+ /environment/volcanoes/kilauea/halemaumau-activity
+
+ dialog-apply
+ halemaumau
+
+
+
+
+
+ 0
+ 3
+
+
+
+
+ left
+ 1
+ 0
+
+
+
+
+ 1
+ 1
+
+
+
+ puu-oo
+ 1
+ 2
+ 0
+ 3
+ 1
+ true
+ /environment/volcanoes/kilauea/puu-oo-activity
+
+ dialog-apply
+ puu-oo
+
+
+
+
+
+ 1
+ 3
+
+
+
+
+
+
+
+
+ 12
+
+
+
+
+
+ 20
+
+
+
+ table
+
+
+
+
+
+
+
+
diff --git a/gui/dialogs/volcano-stromboli.xml b/gui/dialogs/volcano-stromboli.xml
new file mode 100644
index 000000000..48c9c6e88
--- /dev/null
+++ b/gui/dialogs/volcano-stromboli.xml
@@ -0,0 +1,141 @@
+
+
+
+ Stromboli
+ vbox
+ 1
+ false
+ 400
+
+
+ 6
+
+
+
+
+
+
+
+ 4
+
+
+
+
+
+ table
+
+
+
+ left
+ 0
+ 0
+
+
+
+
+ 0
+ 1
+
+
+
+ central
+ 0
+ 2
+ 0
+ 3
+ 1
+ true
+ /environment/volcanoes/stromboli/central-activity
+
+ dialog-apply
+ central
+
+
+
+
+
+ 0
+ 3
+
+
+
+
+ left
+ 1
+ 0
+
+
+
+
+ 1
+ 1
+
+
+
+ side
+ 1
+ 2
+ 0
+ 3
+ 1
+ true
+ /environment/volcanoes/stromboli/side-activity
+
+ dialog-apply
+ side
+
+
+
+
+
+ 1
+ 3
+
+
+
+
+
+
+
+
+ 12
+
+
+
+
+
+ 20
+
+
+
+ table
+
+
+
+
+
+
+
+
diff --git a/gui/dialogs/volcanoes.xml b/gui/dialogs/volcanoes.xml
new file mode 100644
index 000000000..604b72d72
--- /dev/null
+++ b/gui/dialogs/volcanoes.xml
@@ -0,0 +1,131 @@
+
+
+
+ volcanoes
+ vbox
+ 1
+ false
+ 400
+
+
+ 6
+
+
+
+
+
+
+
+ 4
+
+
+
+
+
+ table
+
+
+
+ enable-volcanoes
+ 0
+ 0
+ left
+ /environment/volcanoes/enable-volcanoes
+
+ true
+
+ dialog-apply
+ enable-volcanoes
+
+
+
+
+
+
+ 8
+
+
+
+ table
+
+
+
+ left
+ 0
+ 0
+
+
+
+ 2
+ 0
+ object-selection
+ left
+ true
+ 380
+ /environment/volcanoes/volcano-selected
+ /environment/volcanoes/volcanoes-nearby/
+ Kilauea
+
+ dialog-apply
+ object-selection
+
+
+
+
+
+
+
+
+
+ 12
+
+
+
+
+
+ 20
+
+
+
+ table
+
+
+
+
+
+
+
+
diff --git a/gui/menubar.xml b/gui/menubar.xml
index 5c2baff09..730c3bef0 100644
--- a/gui/menubar.xml
+++ b/gui/menubar.xml
@@ -330,6 +330,51 @@
+
+
+ -
+
+ volcanoes
+
+
+ nasal
+
+
+
+ dialog-show
+ volcanoes
+
+
+
+