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);