Index: boden/grund.h =================================================================== --- boden/grund.h (revision 8148) +++ boden/grund.h (working copy) @@ -627,7 +627,7 @@ weg_t *get_weg(waytype_t typ) const { if (weg_t* const w = get_weg_nr(0)) { const waytype_t wt = w->get_waytype(); - if(wt == typ) { + if(wt == typ || (typ == any_wt && wt > 0)) { return w; } else if (wt > typ) { Index: descriptor/writer/get_waytype.cc =================================================================== --- descriptor/writer/get_waytype.cc (revision 8148) +++ descriptor/writer/get_waytype.cc (working copy) @@ -35,6 +35,8 @@ uv8 = tram_wt; } else if (!STRICMP(waytype, "power")) { uv8 = powerline_wt; + } else if (!STRICMP(waytype, "decoration")) { + uv8 = any_wt; } else { dbg->fatal("get_waytype()","invalid waytype \"%s\"\n", waytype); exit(1); Index: obj/wayobj.cc =================================================================== --- obj/wayobj.cc (revision 8148) +++ obj/wayobj.cc (working copy) @@ -205,6 +205,15 @@ if(desc->is_overhead_line()) { const waytype_t wt = (desc->get_wtyp()==tram_wt) ? track_wt : desc->get_wtyp(); weg_t *weg = welt->lookup(get_pos())->get_weg(wt); + if (wt == any_wt) { + weg_t *weg2 = welt->lookup(get_pos())->get_weg_nr(1); + if (weg2) { + weg2->set_electrify(true); + if(weg2->get_max_speed()>desc->get_topspeed()) { + weg2->set_max_speed(desc->get_topspeed()); + } + } + } if(weg) { // Weg wieder freigeben, wenn das Signal nicht mehr da ist. weg->set_electrify(true); @@ -268,8 +277,15 @@ return; } + ribi_t::ribi sec_way_ribi_unmasked = 0; + if (wt == any_wt) { + if (weg_t *sec_w = gr->get_weg_nr(1)) { + sec_way_ribi_unmasked = sec_w->get_ribi_unmasked(); + } + } + set_yoff( -gr->get_weg_yoff() ); - dir &= w->get_ribi_unmasked(); + dir &= (w->get_ribi_unmasked() | sec_way_ribi_unmasked); // if there is a slope, we are finished, only four choices here (so far) hang = gr->get_weg_hang(); Index: simtool.cc =================================================================== --- simtool.cc (revision 8148) +++ simtool.cc (working copy) @@ -3330,8 +3330,12 @@ bool tool_build_wayobj_t::calc_route( route_t &verbindung, player_t *player, const koord3d& start, const koord3d& to ) { + waytype_t waytype = wt; + if (waytype == any_wt) { + waytype = welt->lookup(start)->get_weg(wt)->get_waytype(); + } // get a default vehikel - vehicle_desc_t remover_desc( wt, 500, vehicle_desc_t::diesel ); + vehicle_desc_t remover_desc( waytype, 500, vehicle_desc_t::diesel ); vehicle_t* test_vehicle = vehicle_builder_t::build(start, player, NULL, &remover_desc); test_vehicle->set_flag( obj_t::not_on_map ); test_driver_t* test_driver = scenario_checker_t::apply(test_vehicle, player, this); Index: simtypes.h =================================================================== --- simtypes.h (revision 8148) +++ simtypes.h (working copy) @@ -103,7 +103,8 @@ tram_wt = 7, narrowgauge_wt = 8, air_wt = 16, - powerline_wt = 128 + powerline_wt = 128, + any_wt = 255 }; /**