diff --git a/planner.c b/planner.c index d6efb61f1..a4aacc053 100644 --- a/planner.c +++ b/planner.c @@ -879,6 +879,11 @@ bool trial_ascent(int trial_depth, int stoplevel, int avg_depth, int bottom_time bool clear_to_ascend = true; char *trial_cache = NULL; + // Don't do a trail ascent but check if the ceiling is above the next stoplevel. + // This does not sound like a relevant question but it seems the original VPM-B implementation does that. + if (prefs.check_ceiling_before_ascent) + return (deco_allowed_depth(tissue_tolerance, surface_pressure, &displayed_dive, 1) <= stoplevel); + cache_deco_state(tissue_tolerance, &trial_cache); while (trial_depth > stoplevel) { int deltad = ascent_velocity(trial_depth, avg_depth, bottom_time) * TIMESTEP; diff --git a/pref.h b/pref.h index e471add73..953003a2d 100644 --- a/pref.h +++ b/pref.h @@ -97,6 +97,7 @@ struct preferences { bool display_transitions; bool safetystop; bool switch_at_req_stop; + bool check_ceiling_before_ascent; int reserve_gas; int min_switch_duration; // seconds int bottomsac; diff --git a/subsurfacestartup.c b/subsurfacestartup.c index 18d00d374..ba0969a10 100644 --- a/subsurfacestartup.c +++ b/subsurfacestartup.c @@ -48,6 +48,7 @@ struct preferences default_prefs = { .doo2breaks = false, .drop_stone_mode = false, .switch_at_req_stop = false, + .check_ceiling_before_ascent = false, .min_switch_duration = 60, .last_stop = false, .verbatim_plan = false,