@@ -5181,6 +5181,7 @@ sint32 rail_vehicle_t::block_reserver(route_t *route, uint16 start_index, uint16
51815181 sint32 choose_return = 0 ;
51825182 bool reached_end_of_loop = false ;
51835183 bool no_junctions_to_next_signal = true ;
5184+ bool no_junctions_to_last_signal = true ;
51845185 signal_t * previous_signal = NULL ;
51855186 bool end_of_block = false ;
51865187 bool not_entirely_free = false ;
@@ -5908,6 +5909,7 @@ sint32 rail_vehicle_t::block_reserver(route_t *route, uint16 start_index, uint16
59085909 last_longblock_signal_index = i;
59095910 }
59105911 // Any junctions previously found no longer apply to the next signal, unless this is a pre-signal
5912+ no_junctions_to_last_signal = no_junctions_to_next_signal;
59115913 no_junctions_to_next_signal = true ;
59125914 }
59135915 else if (!directional_only) // Distant signal or repeater
@@ -6555,11 +6557,11 @@ sint32 rail_vehicle_t::block_reserver(route_t *route, uint16 start_index, uint16
65556557
65566558 bool last_signal_was_track_circuit_block = false ;
65576559
6558- if (no_junctions_to_next_signal && reached_end_of_loop && success && last_stop_signal_index < INVALID_INDEX)
6560+ if (no_junctions_to_last_signal && reached_end_of_loop && success && last_stop_signal_index < INVALID_INDEX)
65596561 {
65606562 const grund_t * gr_signal = welt->lookup (route->at (last_stop_signal_index));
65616563 signal_t * signal = gr_signal->find <signal_t >();
6562- if (signal)
6564+ if (signal && !signal-> get_desc ()-> is_choose_sign () )
65636565 {
65646566 signal->set_no_junctions_to_next_signal (true );
65656567 }
0 commit comments