Merge branch 'master' into jgrpp-nrt

Merge NRT feature

# Conflicts:
#	docs/landscape.html
#	docs/landscape_grid.html
#	src/bridge_map.h
#	src/build_vehicle_gui.cpp
#	src/company_base.h
#	src/company_cmd.cpp
#	src/misc_gui.cpp
#	src/newgrf.cpp
#	src/newgrf_engine.cpp
#	src/pathfinder/follow_track.hpp
#	src/pathfinder/npf/npf.cpp
#	src/road_cmd.cpp
#	src/road_func.h
#	src/road_gui.cpp
#	src/road_map.h
#	src/road_type.h
#	src/roadveh_cmd.cpp
#	src/saveload/afterload.cpp
#	src/saveload/company_sl.cpp
#	src/script/api/script_bridge.cpp
#	src/table/newgrf_debug_data.h
#	src/tile_cmd.h
#	src/town_cmd.cpp
#	src/tunnel_map.h
#	src/tunnelbridge_cmd.cpp
pull/104/head
Jonathan G Rennison 5 years ago
commit ba8ed880c1

Binary file not shown.

@ -98,6 +98,38 @@
</li>
</ul>
</li>
<li><span style="font-weight: bold;">m4:</span><br>
<a name="RoadType"></a>
Road roadtype. Used for all tiles with road (road, station, tunnelbridge).
<ul>
<li>
Bits 5..0: Road roadtype, 0x3F for no road.
</li>
</ul>
</li>
<li><span style="font-weight: bold;">m8:</span><br>
<a name="TramType"></a>
Tram roadtype. Used for all tiles with road (road, station, tunnelbridge).
<ul>
<li>
Bits 11..6: Tram roadtype, 0x3F for no tram.
</li>
</ul>
</li>
<li><span style="font-weight: bold;">m8:</span><br>
<ul>
<li>
<a name="RailType"></a>
Bits 5..0: Railtype. Used for all tiles with rail (road, rail, station, tunnelbridge).
</li>
</ul>
<ul>
<li>
<a name="RailType"></a>
Bits 11..6: Secondary Railtype. Used for some tiles with rail (rail, tunnelbridge). Used for lower or right track when two parallel tracks on tile.
</li>
</ul>
</li>
<li><span style="font-weight: bold;">m7:</span><br>
Animation frame/state. Used for houses, industries, objects and stations.
</li>
@ -108,7 +140,7 @@
<table border=1 cellpadding=3>
<tr bgcolor="#0099FF">
<th align=left><font color="#FFFFFF">Class</font></th>
<th align=left><font color="#FFFFFF">Meaning & details of encoding</font></th>
<th align=left><font color="#FFFFFF">Meaning &amp; details of encoding</font></th>
</tr>
<tr bgcolor="#CCCCCC">
<td align=left><strong><a name="Class0"><tt> 0 </tt></a></strong></td>
@ -542,21 +574,10 @@
<td>
<ul>
<li>m2: Index into the array of towns (owning town for town roads; closest town otherwise, INVALID_TOWN if there is no town or we are creating a town)</li>
<li>m7 bit 5 set = on snow or desert</li>
<li>m7 bits 7..6: present road types
<table>
<tr>
<td>bit 0&nbsp; </td>
<td>normal road</td>
</tr>
<tr>
<td>bit 1&nbsp; </td>
<td>tram</td>
</tr>
</table>
</li>
<li>m3 bits 7..4: <a href="#OwnershipInfo">owner</a> of road type 1 (tram); OWNER_NONE (<tt>10</tt>) is stored as OWNER_TOWN (<tt>0F</tt>)
<li>m4 bits 5..0: <a href="#RoadType">Roadtype</a></li>
<li>m7 bit 5 set = on snow or desert</li>
<li>m8 bits 11..6: <a href="#TramType">Tramtype</a></li>
<li>m5 bits 7 clear: road or level-crossing
<ul>
<li>m6 bits 5..3:
@ -870,6 +891,7 @@
<li>m3 bits 7..4: persistent random data for railway stations/waypoints and airports)</li>
<li>m3 bits 7..4: <a href="#OwnershipInfo">owner</a> of tram tracks (road stop)</li>
<li>m4: custom station id; 0 means standard graphics</li>
<li>m4: <a href="#RoadType">Roadtype</a> for road stops</li>
<li>m5: graphics index (range from 0..255 for each station type):
<table>
<tr>
@ -985,8 +1007,8 @@
<li>m6 bit 2: pbs reservation state for railway stations/waypoints</li>
<li>m7 bits 4..0: <a href="#OwnershipInfo">owner</a> of road (road stops)</li>
<li>m7 bits 7..6: present road types (road stops)</li>
<li>m7: animation frame (railway stations/waypoints, airports)</li>
<li>m8 bits 11..6: <a href="#TramType">Tramtype</a></li>
<li>m8 bits 5..0: <a href="#TrackType">track type</a> for railway stations/waypoints</li>
</ul>
</td>
@ -1563,6 +1585,9 @@
</li>
<li>m5 bit 4: pbs reservation state for railway (tunnel only)</li>
<li>m5 bit 7 clear: tunnel entrance/exit</li>
<li>m4: <a href="#RoadType">Roadtype</a></li>
<li>m5 bit 4: pbs reservation state for railway</li>
<li>m5 bits 7 clear: tunnel entrance/exit</li>
<li>m5 bit 7 set: bridge ramp
<ul>
<li>m6 bits 5..2: <a name="BridgeType">bridge type</a>:
@ -1729,7 +1754,7 @@
</li>
<li>m7 bits 4..0: <a href="#OwnershipInfo">owner</a> of road</li>
<li>m7 bit 5 set = on snow or desert</li>
<li>m7 bits 7..6: present road types for road</li>
<li>m8 bits 11..6: <a href="#TramType">Tramtype</a></li>
<li>m8 bits 5..0: <a href="#TrackType">track type</a> for railway</li>
<li style="color: blue">m8 bits 11..6 = <a name="TrackType">secondary track type</a> for railway (used for bridge-bypassing track when two parallel tracks on custom bridge head)</li>
</ul>

@ -145,11 +145,11 @@ the array so you can quickly see what is used and what is not.
<td class="bits"><span class="free">OOO</span>X XXXX</td>
<td class="bits">XXXX XXXX XXXX XXXX</td>
<td class="bits">XXXX XXXX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits"><span class="free">OO</span>XX XXXX</td>
<td class="bits">XXXX XXXX</td>
<td class="bits"><span class="free">OO</span>XX X<span class="free">OOO</span></td>
<td class="bits">XXX<span class="free">O</span> XXXX</td>
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
<td class="bits"><span class="free">OO</span>X<span class="free">O</span> XXXX</td>
<td class="bits"><span class="free">OOOO</span> XXXX XX<span class="free">OO OOOO</span></td>
</tr>
<tr>
<td class="caption">level crossing</td>
@ -161,8 +161,8 @@ the array so you can quickly see what is used and what is not.
<td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits">XXXX <span class="free">OO</span><span class="used_p">P</span>X</td>
<td class="bits"><span class="free">OO</span>XX X<span class="free">OOO</span></td>
<td class="bits">XXXX XXXX</td>
<td class="bits"><span class="free">OOOO OOOO OO</span>XX XXXX</td>
<td class="bits"><span class="free">OO</span>XX XXXX</td>
<td class="bits"><span class="free">OOOO</span> XXXX XXXX XXXX</td>
</tr>
<tr>
<td class="caption">road depot</td>
@ -171,11 +171,11 @@ the array so you can quickly see what is used and what is not.
<td class="bits"><span class="free">OOO</span>X XXXX</td>
<td class="bits">-inherit-</td>
<td class="bits">XXXX <span class="free">OOOO</span></td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits">-inherit-</td>
<td class="bits">XX<span class="free">OO OO</span>XX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits">XXX<span class="free">O</span> XXXX</td>
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
<td class="bits"><span class="free">OO</span>X<span class="free">O</span> XXXX</td>
<td class="bits">-inherit-</td>
</tr>
<tr>
<td>3</td>
@ -239,11 +239,11 @@ the array so you can quickly see what is used and what is not.
<td class="bits"><span class="free">O</span>XXX XXXX</td>
<td class="bits">-inherit-</td>
<td class="bits">XXXX <span class="free">OOOO</span></td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits"><span class="free">OO</span>XX XXXX</td>
<td class="bits"><span class="option">~~~~ ~</span>XXX</td>
<td class="bits"><span class="free">OO</span>XX X<span class="free">OOO</span></td>
<td class="bits">XX<span class="free">O</span>X XXXX</td>
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
<td class="bits"><span class="free">OOO</span>X XXXX</td>
<td class="bits"><span class="free">OOOO</span> XXXX XX<span class="free">OO OOOO</span></td>
</tr>
<tr>
<td class="caption">dock</td>
@ -359,11 +359,11 @@ the array so you can quickly see what is used and what is not.
<td class="bits"><span class="free">OOO</span>X XXXX</td>
<td class="bits"><span class="used_p">PPPP PPPP PPPP PPPP</span></td>
<td class="bits">XXXX <span class="free">OOOO</span></td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits">X<span class="used_p">PP</span>X XXXX</td>
<td class="bits"><span class="free">OO</span>XX XXXX</td>
<td class="bits">X<span class="free">OO</span>X XXXX</td>
<td class="bits"><span class="used_p">PP</span><span class="free">OO OO</span><span class="used_p">PP</span></td>
<td class="bits">XXXX XXXX</td>
<td class="bits"><span class="free">OOOO OOOO OO</span>XX XXXX</td>
<td class="bits"><span class="free">OO</span>XX XXXX</td>
<td class="bits"><span class="free">OOOO</span> XXXX XXXX XXXX</td>
</tr>
<tr>
<td>bridge ramp</td>
@ -372,11 +372,11 @@ the array so you can quickly see what is used and what is not.
<td class="bits">-inherit-</td>
<td class="bits"><span class="used_p">PPPP PPPP PPPP PPPP</span></td>
<td class="bits">-inherit-</td>
<td class="bits"><span class="free">OO</span><span class="used_p">PP PPPP</span></td>
<td class="bits"><span class="free">OO</span><span class="abuse">PP PPPP</span></td>
<td class="bits">-inherit-</td>
<td class="bits"><span class="free"></span><span class="used_p">PP</span>XX XX<span class="used_p">PP</span></td>
<td class="bits">-inherit-</td>
<td class="bits"><span class="free">OOOO</span> <span class="used_p">PPPP PP</span>XX XXXX</td>
<td class="bits"><span class="free">OOOO</span> <span class="abuse">PPPP PP</span>XX XXXX</td>
</tr>
<tr>
<td rowspan=2>A</td>

@ -7,7 +7,7 @@
// See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
//
-1 * 0 0C "OpenTTD GUI graphics"
-1 * 3 05 15 \b 179 // OPENTTD_SPRITE_COUNT
-1 * 3 05 15 \b 184 // OPENTTD_SPRITE_COUNT
-1 sprites/openttdgui.png 8bpp 66 8 64 31 -31 7 normal
-1 sprites/openttdgui.png 8bpp 146 8 64 31 -31 7 normal
-1 sprites/openttdgui.png 8bpp 226 8 64 31 -31 7 normal
@ -187,3 +187,8 @@
-1 sprites/openttdgui_group_livery.png 8bpp 21 0 20 20 0 0 normal
-1 sprites/openttdgui_group_livery.png 8bpp 42 0 20 20 0 0 normal
-1 sprites/openttdgui_group_livery.png 8bpp 63 0 20 20 0 0 normal
-1 sprites/openttdgui_build_tram.png 8bpp 0 0 20 20 0 0 normal
-1 sprites/openttdgui_convert_road.png 8bpp 0 0 20 20 0 0 normal
-1 sprites/openttdgui_convert_road.png 8bpp 24 0 32 32 0 0 normal
-1 sprites/openttdgui_convert_tram.png 8bpp 0 0 20 20 0 0 normal
-1 sprites/openttdgui_convert_tram.png 8bpp 24 0 32 32 0 0 normal

Binary file not shown.

After

Width:  |  Height:  |  Size: 1017 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

@ -7,7 +7,7 @@
// See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
//
-1 * 0 0C "Tram track graphics by PikkaBird"
-1 * 3 05 0B 71
-1 * 3 05 0B 77
-1 sprites/tramtracks.png 8bpp 18 8 20 13 0 4 normal
-1 sprites/tramtracks.png 8bpp 50 8 20 13 0 4 normal
-1 sprites/tramtracks.png 8bpp 82 8 64 36 -18 -8 normal
@ -121,3 +121,9 @@
-1 sprites/tramtracks.png 8bpp 722 696 64 23 -31 0 normal
-1 sprites/tramtracks.png 8bpp 2 776 64 23 -31 0 normal
-1 sprites/tramtracks.png 8bpp 82 776 64 39 -31 -8 normal
-1 sprites/tramtracks_bare_depot.png 8bpp 0 0 64 31 -31 0 normal
-1 sprites/tramtracks_bare_depot.png 8bpp 80 0 62 64 2 -49 normal
-1 sprites/tramtracks_bare_depot.png 8bpp 158 0 64 31 -31 0 normal
-1 sprites/tramtracks_bare_depot.png 8bpp 238 0 62 64 -62 -49 normal
-1 sprites/tramtracks_bare_depot.png 8bpp 318 0 62 64 -62 -49 normal
-1 sprites/tramtracks_bare_depot.png 8bpp 398 0 62 64 2 -49 normal

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

@ -604,6 +604,7 @@
<ClInclude Include="..\src\newgrf_object.h" />
<ClInclude Include="..\src\newgrf_properties.h" />
<ClInclude Include="..\src\newgrf_railtype.h" />
<ClInclude Include="..\src\newgrf_roadtype.h" />
<ClInclude Include="..\src\newgrf_sound.h" />
<ClInclude Include="..\src\newgrf_spritegroup.h" />
<ClInclude Include="..\src\newgrf_station.h" />
@ -638,6 +639,7 @@
<ClInclude Include="..\src\rail_gui.h" />
<ClInclude Include="..\src\rail_type.h" />
<ClInclude Include="..\src\rev.h" />
<ClInclude Include="..\src\road.h" />
<ClInclude Include="..\src\road_cmd.h" />
<ClInclude Include="..\src\road_func.h" />
<ClInclude Include="..\src\road_gui.h" />
@ -1006,6 +1008,7 @@
<ClInclude Include="..\src\table\railtypes.h" />
<ClInclude Include="..\src\table\road_land.h" />
<ClInclude Include="..\src\table\roadveh_movement.h" />
<ClInclude Include="..\src\table\roadtypes.h" />
<ClInclude Include="..\src\..\objs\settings\table\settings.h" />
<ClInclude Include="..\src\table\sprites.h" />
<ClInclude Include="..\src\table\station_land.h" />
@ -1144,6 +1147,7 @@
<ClInclude Include="..\src\script\api\script_rail.hpp" />
<ClInclude Include="..\src\script\api\script_railtypelist.hpp" />
<ClInclude Include="..\src\script\api\script_road.hpp" />
<ClInclude Include="..\src\script\api\script_roadtypelist.hpp" />
<ClInclude Include="..\src\script\api\script_sign.hpp" />
<ClInclude Include="..\src\script\api\script_signlist.hpp" />
<ClInclude Include="..\src\script\api\script_station.hpp" />
@ -1210,6 +1214,7 @@
<ClCompile Include="..\src\script\api\script_rail.cpp" />
<ClCompile Include="..\src\script\api\script_railtypelist.cpp" />
<ClCompile Include="..\src\script\api\script_road.cpp" />
<ClCompile Include="..\src\script\api\script_roadtypelist.cpp" />
<ClCompile Include="..\src\script\api\script_sign.cpp" />
<ClCompile Include="..\src\script\api\script_signlist.cpp" />
<ClCompile Include="..\src\script\api\script_station.cpp" />
@ -1283,6 +1288,7 @@
<ClCompile Include="..\src\newgrf_industrytiles.cpp" />
<ClCompile Include="..\src\newgrf_object.cpp" />
<ClCompile Include="..\src\newgrf_railtype.cpp" />
<ClCompile Include="..\src\newgrf_roadtype.cpp" />
<ClCompile Include="..\src\newgrf_sound.cpp" />
<ClCompile Include="..\src\newgrf_spritegroup.cpp" />
<ClCompile Include="..\src\newgrf_station.cpp" />

@ -906,6 +906,9 @@
<ClInclude Include="..\src\newgrf_railtype.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\newgrf_roadtype.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\newgrf_sound.h">
<Filter>Header Files</Filter>
</ClInclude>
@ -1008,6 +1011,9 @@
<ClInclude Include="..\src\rev.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\road.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\road_cmd.h">
<Filter>Header Files</Filter>
</ClInclude>
@ -2112,6 +2118,9 @@
<ClInclude Include="..\src\table\roadveh_movement.h">
<Filter>Tables</Filter>
</ClInclude>
<ClInclude Include="..\src\table\roadtypes.h">
<Filter>Tables</Filter>
</ClInclude>
<ClInclude Include="..\src\..\objs\settings\table\settings.h">
<Filter>Tables</Filter>
</ClInclude>
@ -2526,6 +2535,9 @@
<ClInclude Include="..\src\script\api\script_road.hpp">
<Filter>Script API</Filter>
</ClInclude>
<ClInclude Include="..\src\script\api\script_roadtypelist.hpp">
<Filter>Script API</Filter>
</ClInclude>
<ClInclude Include="..\src\script\api\script_sign.hpp">
<Filter>Script API</Filter>
</ClInclude>
@ -2724,6 +2736,9 @@
<ClCompile Include="..\src\script\api\script_road.cpp">
<Filter>Script API Implementation</Filter>
</ClCompile>
<ClCompile Include="..\src\script\api\script_roadtypelist.cpp">
<Filter>Script API Implementation</Filter>
</ClCompile>
<ClCompile Include="..\src\script\api\script_sign.cpp">
<Filter>Script API Implementation</Filter>
</ClCompile>
@ -2943,6 +2958,9 @@
<ClCompile Include="..\src\newgrf_railtype.cpp">
<Filter>NewGRF</Filter>
</ClCompile>
<ClCompile Include="..\src\newgrf_roadtype.cpp">
<Filter>NewGRF</Filter>
</ClCompile>
<ClCompile Include="..\src\newgrf_sound.cpp">
<Filter>NewGRF</Filter>
</ClCompile>

@ -604,6 +604,7 @@
<ClInclude Include="..\src\newgrf_object.h" />
<ClInclude Include="..\src\newgrf_properties.h" />
<ClInclude Include="..\src\newgrf_railtype.h" />
<ClInclude Include="..\src\newgrf_roadtype.h" />
<ClInclude Include="..\src\newgrf_sound.h" />
<ClInclude Include="..\src\newgrf_spritegroup.h" />
<ClInclude Include="..\src\newgrf_station.h" />
@ -638,6 +639,7 @@
<ClInclude Include="..\src\rail_gui.h" />
<ClInclude Include="..\src\rail_type.h" />
<ClInclude Include="..\src\rev.h" />
<ClInclude Include="..\src\road.h" />
<ClInclude Include="..\src\road_cmd.h" />
<ClInclude Include="..\src\road_func.h" />
<ClInclude Include="..\src\road_gui.h" />
@ -1006,6 +1008,7 @@
<ClInclude Include="..\src\table\railtypes.h" />
<ClInclude Include="..\src\table\road_land.h" />
<ClInclude Include="..\src\table\roadveh_movement.h" />
<ClInclude Include="..\src\table\roadtypes.h" />
<ClInclude Include="..\src\..\objs\settings\table\settings.h" />
<ClInclude Include="..\src\table\sprites.h" />
<ClInclude Include="..\src\table\station_land.h" />
@ -1144,6 +1147,7 @@
<ClInclude Include="..\src\script\api\script_rail.hpp" />
<ClInclude Include="..\src\script\api\script_railtypelist.hpp" />
<ClInclude Include="..\src\script\api\script_road.hpp" />
<ClInclude Include="..\src\script\api\script_roadtypelist.hpp" />
<ClInclude Include="..\src\script\api\script_sign.hpp" />
<ClInclude Include="..\src\script\api\script_signlist.hpp" />
<ClInclude Include="..\src\script\api\script_station.hpp" />
@ -1210,6 +1214,7 @@
<ClCompile Include="..\src\script\api\script_rail.cpp" />
<ClCompile Include="..\src\script\api\script_railtypelist.cpp" />
<ClCompile Include="..\src\script\api\script_road.cpp" />
<ClCompile Include="..\src\script\api\script_roadtypelist.cpp" />
<ClCompile Include="..\src\script\api\script_sign.cpp" />
<ClCompile Include="..\src\script\api\script_signlist.cpp" />
<ClCompile Include="..\src\script\api\script_station.cpp" />
@ -1283,6 +1288,7 @@
<ClCompile Include="..\src\newgrf_industrytiles.cpp" />
<ClCompile Include="..\src\newgrf_object.cpp" />
<ClCompile Include="..\src\newgrf_railtype.cpp" />
<ClCompile Include="..\src\newgrf_roadtype.cpp" />
<ClCompile Include="..\src\newgrf_sound.cpp" />
<ClCompile Include="..\src\newgrf_spritegroup.cpp" />
<ClCompile Include="..\src\newgrf_station.cpp" />

@ -906,6 +906,9 @@
<ClInclude Include="..\src\newgrf_railtype.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\newgrf_roadtype.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\newgrf_sound.h">
<Filter>Header Files</Filter>
</ClInclude>
@ -1008,6 +1011,9 @@
<ClInclude Include="..\src\rev.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\road.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\road_cmd.h">
<Filter>Header Files</Filter>
</ClInclude>
@ -2112,6 +2118,9 @@
<ClInclude Include="..\src\table\roadveh_movement.h">
<Filter>Tables</Filter>
</ClInclude>
<ClInclude Include="..\src\table\roadtypes.h">
<Filter>Tables</Filter>
</ClInclude>
<ClInclude Include="..\src\..\objs\settings\table\settings.h">
<Filter>Tables</Filter>
</ClInclude>
@ -2526,6 +2535,9 @@
<ClInclude Include="..\src\script\api\script_road.hpp">
<Filter>Script API</Filter>
</ClInclude>
<ClInclude Include="..\src\script\api\script_roadtypelist.hpp">
<Filter>Script API</Filter>
</ClInclude>
<ClInclude Include="..\src\script\api\script_sign.hpp">
<Filter>Script API</Filter>
</ClInclude>
@ -2724,6 +2736,9 @@
<ClCompile Include="..\src\script\api\script_road.cpp">
<Filter>Script API Implementation</Filter>
</ClCompile>
<ClCompile Include="..\src\script\api\script_roadtypelist.cpp">
<Filter>Script API Implementation</Filter>
</ClCompile>
<ClCompile Include="..\src\script\api\script_sign.cpp">
<Filter>Script API Implementation</Filter>
</ClCompile>
@ -2943,6 +2958,9 @@
<ClCompile Include="..\src\newgrf_railtype.cpp">
<Filter>NewGRF</Filter>
</ClCompile>
<ClCompile Include="..\src\newgrf_roadtype.cpp">
<Filter>NewGRF</Filter>
</ClCompile>
<ClCompile Include="..\src\newgrf_sound.cpp">
<Filter>NewGRF</Filter>
</ClCompile>

@ -604,6 +604,7 @@
<ClInclude Include="..\src\newgrf_object.h" />
<ClInclude Include="..\src\newgrf_properties.h" />
<ClInclude Include="..\src\newgrf_railtype.h" />
<ClInclude Include="..\src\newgrf_roadtype.h" />
<ClInclude Include="..\src\newgrf_sound.h" />
<ClInclude Include="..\src\newgrf_spritegroup.h" />
<ClInclude Include="..\src\newgrf_station.h" />
@ -638,6 +639,7 @@
<ClInclude Include="..\src\rail_gui.h" />
<ClInclude Include="..\src\rail_type.h" />
<ClInclude Include="..\src\rev.h" />
<ClInclude Include="..\src\road.h" />
<ClInclude Include="..\src\road_cmd.h" />
<ClInclude Include="..\src\road_func.h" />
<ClInclude Include="..\src\road_gui.h" />
@ -1006,6 +1008,7 @@
<ClInclude Include="..\src\table\railtypes.h" />
<ClInclude Include="..\src\table\road_land.h" />
<ClInclude Include="..\src\table\roadveh_movement.h" />
<ClInclude Include="..\src\table\roadtypes.h" />
<ClInclude Include="..\src\..\objs\settings\table\settings.h" />
<ClInclude Include="..\src\table\sprites.h" />
<ClInclude Include="..\src\table\station_land.h" />
@ -1144,6 +1147,7 @@
<ClInclude Include="..\src\script\api\script_rail.hpp" />
<ClInclude Include="..\src\script\api\script_railtypelist.hpp" />
<ClInclude Include="..\src\script\api\script_road.hpp" />
<ClInclude Include="..\src\script\api\script_roadtypelist.hpp" />
<ClInclude Include="..\src\script\api\script_sign.hpp" />
<ClInclude Include="..\src\script\api\script_signlist.hpp" />
<ClInclude Include="..\src\script\api\script_station.hpp" />
@ -1210,6 +1214,7 @@
<ClCompile Include="..\src\script\api\script_rail.cpp" />
<ClCompile Include="..\src\script\api\script_railtypelist.cpp" />
<ClCompile Include="..\src\script\api\script_road.cpp" />
<ClCompile Include="..\src\script\api\script_roadtypelist.cpp" />
<ClCompile Include="..\src\script\api\script_sign.cpp" />
<ClCompile Include="..\src\script\api\script_signlist.cpp" />
<ClCompile Include="..\src\script\api\script_station.cpp" />
@ -1283,6 +1288,7 @@
<ClCompile Include="..\src\newgrf_industrytiles.cpp" />
<ClCompile Include="..\src\newgrf_object.cpp" />
<ClCompile Include="..\src\newgrf_railtype.cpp" />
<ClCompile Include="..\src\newgrf_roadtype.cpp" />
<ClCompile Include="..\src\newgrf_sound.cpp" />
<ClCompile Include="..\src\newgrf_spritegroup.cpp" />
<ClCompile Include="..\src\newgrf_station.cpp" />

@ -906,6 +906,9 @@
<ClInclude Include="..\src\newgrf_railtype.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\newgrf_roadtype.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\newgrf_sound.h">
<Filter>Header Files</Filter>
</ClInclude>
@ -1008,6 +1011,9 @@
<ClInclude Include="..\src\rev.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\road.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\road_cmd.h">
<Filter>Header Files</Filter>
</ClInclude>
@ -2112,6 +2118,9 @@
<ClInclude Include="..\src\table\roadveh_movement.h">
<Filter>Tables</Filter>
</ClInclude>
<ClInclude Include="..\src\table\roadtypes.h">
<Filter>Tables</Filter>
</ClInclude>
<ClInclude Include="..\src\..\objs\settings\table\settings.h">
<Filter>Tables</Filter>
</ClInclude>
@ -2526,6 +2535,9 @@
<ClInclude Include="..\src\script\api\script_road.hpp">
<Filter>Script API</Filter>
</ClInclude>
<ClInclude Include="..\src\script\api\script_roadtypelist.hpp">
<Filter>Script API</Filter>
</ClInclude>
<ClInclude Include="..\src\script\api\script_sign.hpp">
<Filter>Script API</Filter>
</ClInclude>
@ -2724,6 +2736,9 @@
<ClCompile Include="..\src\script\api\script_road.cpp">
<Filter>Script API Implementation</Filter>
</ClCompile>
<ClCompile Include="..\src\script\api\script_roadtypelist.cpp">
<Filter>Script API Implementation</Filter>
</ClCompile>
<ClCompile Include="..\src\script\api\script_sign.cpp">
<Filter>Script API Implementation</Filter>
</ClCompile>
@ -2943,6 +2958,9 @@
<ClCompile Include="..\src\newgrf_railtype.cpp">
<Filter>NewGRF</Filter>
</ClCompile>
<ClCompile Include="..\src\newgrf_roadtype.cpp">
<Filter>NewGRF</Filter>
</ClCompile>
<ClCompile Include="..\src\newgrf_sound.cpp">
<Filter>NewGRF</Filter>
</ClCompile>

@ -292,6 +292,7 @@ newgrf_industrytiles.h
newgrf_object.h
newgrf_properties.h
newgrf_railtype.h
newgrf_roadtype.h
newgrf_sound.h
newgrf_spritegroup.h
newgrf_station.h
@ -326,6 +327,7 @@ rail.h
rail_gui.h
rail_type.h
rev.h
road.h
road_cmd.h
road_func.h
road_gui.h
@ -722,6 +724,7 @@ table/pricebase.h
table/railtypes.h
table/road_land.h
table/roadveh_movement.h
table/roadtypes.h
../objs/settings/table/settings.h
table/sprites.h
table/station_land.h
@ -878,6 +881,7 @@ script/api/script_order.hpp
script/api/script_rail.hpp
script/api/script_railtypelist.hpp
script/api/script_road.hpp
script/api/script_roadtypelist.hpp
script/api/script_sign.hpp
script/api/script_signlist.hpp
script/api/script_station.hpp
@ -946,6 +950,7 @@ script/api/script_order.cpp
script/api/script_rail.cpp
script/api/script_railtypelist.cpp
script/api/script_road.cpp
script/api/script_roadtypelist.cpp
script/api/script_sign.cpp
script/api/script_signlist.cpp
script/api/script_station.cpp
@ -1034,6 +1039,7 @@ newgrf_industries.cpp
newgrf_industrytiles.cpp
newgrf_object.cpp
newgrf_railtype.cpp
newgrf_roadtype.cpp
newgrf_sound.cpp
newgrf_spritegroup.cpp
newgrf_station.cpp

@ -62,6 +62,7 @@
#include "../script/api/ai/ai_rail.hpp.sq"
#include "../script/api/ai/ai_railtypelist.hpp.sq"
#include "../script/api/ai/ai_road.hpp.sq"
#include "../script/api/ai/ai_roadtypelist.hpp.sq"
#include "../script/api/ai/ai_sign.hpp.sq"
#include "../script/api/ai/ai_signlist.hpp.sq"
#include "../script/api/ai/ai_station.hpp.sq"
@ -167,6 +168,7 @@ void AIInstance::RegisterAPI()
SQAIRail_Register(this->engine);
SQAIRailTypeList_Register(this->engine);
SQAIRoad_Register(this->engine);
SQAIRoadTypeList_Register(this->engine);
SQAISign_Register(this->engine);
SQAISignList_Register(this->engine);
SQAIStation_Register(this->engine);

@ -21,6 +21,7 @@
#include "tracerestrict.h"
#include "core/random_func.hpp"
#include "vehiclelist.h"
#include "road.h"
#include "table/strings.h"
@ -75,6 +76,9 @@ bool CheckAutoreplaceValidity(EngineID from, EngineID to, CompanyID company)
}
case VEH_ROAD:
/* make sure the roadtypes are compatible */
if ((GetRoadTypeInfo(e_from->u.road.roadtype)->powered_roadtypes & GetRoadTypeInfo(e_to->u.road.roadtype)->powered_roadtypes) == ROADTYPES_NONE) return false;
/* make sure that we do not replace a tram with a normal road vehicles or vice versa */
if (HasBit(e_from->info.misc_flags, EF_ROAD_TRAM) != HasBit(e_to->info.misc_flags, EF_ROAD_TRAM)) return false;
break;

@ -14,6 +14,7 @@
#include "vehicle_gui.h"
#include "newgrf_engine.h"
#include "rail.h"
#include "road.h"
#include "strings_func.h"
#include "window_func.h"
#include "autoreplace_func.h"
@ -24,6 +25,7 @@
#include "settings_func.h"
#include "core/geometry_func.hpp"
#include "rail_gui.h"
#include "road_gui.h"
#include "widgets/dropdown_func.h"
#include "widgets/autoreplace_widget.h"
@ -86,6 +88,7 @@ class ReplaceVehicleWindow : public Window {
bool descending_sort_order; ///< Order of sorting vehicles.
bool show_hidden_engines; ///< Whether to show the hidden engines.
RailType sel_railtype; ///< Type of rail tracks selected. #INVALID_RAILTYPE to show all.
RoadType sel_roadtype; ///< Type of road selected. #INVALID_ROADTYPE to show all.
Scrollbar *vscroll[2];
/**
@ -127,7 +130,21 @@ class ReplaceVehicleWindow : public Window {
FOR_ALL_ENGINES_OF_TYPE(e, type) {
if (!draw_left && !this->show_hidden_engines && e->IsHidden(_local_company)) continue;
EngineID eid = e->index;
if (type == VEH_TRAIN && !this->GenerateReplaceRailList(eid, draw_left, this->replace_engines)) continue; // special rules for trains
switch (type) {
case VEH_TRAIN:
if (!this->GenerateReplaceRailList(eid, draw_left, this->replace_engines)) continue; // special rules for trains
break;
case VEH_ROAD:
if (draw_left && this->sel_roadtype != INVALID_ROADTYPE) {
/* Ensure that the roadtype is specific to the selected one */
if (e->u.road.roadtype != this->sel_roadtype) continue;
}
break;
default:
break;
}
if (draw_left) {
const uint num_engines = GetGroupNumEngines(_local_company, this->sel_group, eid);
@ -210,6 +227,7 @@ public:
ReplaceVehicleWindow(WindowDesc *desc, VehicleType vehicletype, GroupID id_g) : Window(desc)
{
this->sel_railtype = INVALID_RAILTYPE;
this->sel_roadtype = INVALID_ROADTYPE;
this->replace_engines = true; // start with locomotives (all other vehicles will not read this bool)
this->engines[0].ForceRebuild();
this->engines[1].ForceRebuild();
@ -229,6 +247,11 @@ public:
widget->SetLowered(this->show_hidden_engines);
this->FinishInitNested(vehicletype);
if (vehicletype == VEH_TRAIN || vehicletype == VEH_ROAD) {
widget = this->GetWidget<NWidgetCore>(WID_RV_RAIL_ROAD_TYPE_DROPDOWN);
widget->tool_tip = STR_REPLACE_HELP_RAILTYPE + vehicletype;
}
this->sort_criteria = _engine_sort_last_criteria[vehicletype];
this->descending_sort_order = _engine_sort_last_order[vehicletype];
this->owner = _local_company;
@ -287,13 +310,28 @@ public:
break;
}
case WID_RV_TRAIN_RAILTYPE_DROPDOWN: {
case WID_RV_RAIL_ROAD_TYPE_DROPDOWN: {
Dimension d = {0, 0};
for (RailType rt = RAILTYPE_BEGIN; rt != RAILTYPE_END; rt++) {
const RailtypeInfo *rti = GetRailTypeInfo(rt);
/* Skip rail type if it has no label */
if (rti->label == 0) continue;
d = maxdim(d, GetStringBoundingBox(rti->strings.replace_text));
switch (this->window_number) {
case VEH_TRAIN:
for (RailType rt = RAILTYPE_BEGIN; rt != RAILTYPE_END; rt++) {
const RailtypeInfo *rti = GetRailTypeInfo(rt);
/* Skip rail type if it has no label */
if (rti->label == 0) continue;
d = maxdim(d, GetStringBoundingBox(rti->strings.replace_text));
}
break;
case VEH_ROAD:
for (RoadType rt = ROADTYPE_BEGIN; rt < ROADTYPE_END; rt++) {
const RoadTypeInfo *rti = GetRoadTypeInfo(rt);
/* Skip road type if it has no label */
if (rti->label == 0) continue;
d = maxdim(d, GetStringBoundingBox(rti->strings.replace_text));
}
break;
default: NOT_REACHED();
}
d.width += padding.width;
d.height += padding.height;
@ -409,9 +447,18 @@ public:
* or The selected vehicle has no replacement set up */
this->SetWidgetDisabledState(WID_RV_STOP_REPLACE, this->sel_engine[0] == INVALID_ENGINE || !EngineHasReplacementForCompany(c, this->sel_engine[0], this->sel_group));
if (this->window_number == VEH_TRAIN) {
/* Show the selected railtype in the pulldown menu */
this->GetWidget<NWidgetCore>(WID_RV_TRAIN_RAILTYPE_DROPDOWN)->widget_data = sel_railtype == INVALID_RAILTYPE ? STR_REPLACE_ALL_RAILTYPE : GetRailTypeInfo(sel_railtype)->strings.replace_text;
switch (this->window_number) {
case VEH_TRAIN:
/* Show the selected railtype in the pulldown menu */
this->GetWidget<NWidgetCore>(WID_RV_RAIL_ROAD_TYPE_DROPDOWN)->widget_data = sel_railtype == INVALID_RAILTYPE ? STR_REPLACE_ALL_RAILTYPE : GetRailTypeInfo(sel_railtype)->strings.replace_text;
break;
case VEH_ROAD:
/* Show the selected roadtype in the pulldown menu */
this->GetWidget<NWidgetCore>(WID_RV_RAIL_ROAD_TYPE_DROPDOWN)->widget_data = sel_roadtype == INVALID_ROADTYPE ? STR_REPLACE_ALL_ROADTYPE : GetRoadTypeInfo(sel_roadtype)->strings.replace_text;
break;
default: break;
}
this->DrawWidgets();
@ -472,8 +519,16 @@ public:
break;
}
case WID_RV_TRAIN_RAILTYPE_DROPDOWN: // Railtype selection dropdown menu
ShowDropDownList(this, GetRailTypeDropDownList(true, true), sel_railtype, WID_RV_TRAIN_RAILTYPE_DROPDOWN);
case WID_RV_RAIL_ROAD_TYPE_DROPDOWN: // Rail/roadtype selection dropdown menu
switch (this->window_number) {
case VEH_TRAIN:
ShowDropDownList(this, GetRailTypeDropDownList(true, true), sel_railtype, WID_RV_RAIL_ROAD_TYPE_DROPDOWN);
break;
case VEH_ROAD:
ShowDropDownList(this, GetRoadTypeDropDownList(RTTB_ROAD | RTTB_TRAM, true, true), sel_roadtype, WID_RV_RAIL_ROAD_TYPE_DROPDOWN);
break;
}
break;
case WID_RV_TRAIN_WAGONREMOVE_TOGGLE: // toggle renew_keep_length
@ -533,10 +588,25 @@ public:
}
break;
case WID_RV_TRAIN_RAILTYPE_DROPDOWN: {
RailType temp = (RailType)index;
if (temp == sel_railtype) return; // we didn't select a new one. No need to change anything
sel_railtype = temp;
case WID_RV_RAIL_ROAD_TYPE_DROPDOWN:
switch (this->window_number) {
case VEH_TRAIN: {
RailType temp = (RailType)index;
if (temp == sel_railtype) return; // we didn't select a new one. No need to change anything
sel_railtype = temp;
break;
}
case VEH_ROAD: {
RoadType temp = (RoadType)index;
if (temp == sel_roadtype) return; // we didn't select a new one. No need to change anything
sel_roadtype = temp;
break;
}
default: NOT_REACHED();
}
/* Reset scrollbar positions */
this->vscroll[0]->SetPosition(0);
this->vscroll[1]->SetPosition(0);
@ -546,7 +616,6 @@ public:
this->reset_sel_engine = true;
this->SetDirty();
break;
}
case WID_RV_TRAIN_ENGINEWAGON_DROPDOWN: {
this->replace_engines = index != 0;
@ -603,7 +672,7 @@ static const NWidgetPart _nested_replace_rail_vehicle_widgets[] = {
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
NWidget(NWID_VERTICAL),
NWidget(NWID_HORIZONTAL),
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_RV_TRAIN_RAILTYPE_DROPDOWN), SetMinimalSize(136, 12), SetDataTip(0x0, STR_REPLACE_HELP_RAILTYPE), SetFill(1, 0), SetResize(1, 0),
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_RV_RAIL_ROAD_TYPE_DROPDOWN), SetMinimalSize(136, 12), SetDataTip(0x0, STR_REPLACE_HELP_RAILTYPE), SetFill(1, 0), SetResize(1, 0),
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_RV_TRAIN_ENGINEWAGON_DROPDOWN), SetDataTip(STR_BLACK_STRING, STR_REPLACE_ENGINE_WAGON_SELECT_HELP),
EndContainer(),
NWidget(WWT_PANEL, COLOUR_GREY), SetResize(1, 0), EndContainer(),
@ -648,6 +717,64 @@ static WindowDesc _replace_rail_vehicle_desc(
_nested_replace_rail_vehicle_widgets, lengthof(_nested_replace_rail_vehicle_widgets)
);
static const NWidgetPart _nested_replace_road_vehicle_widgets[] = {
NWidget(NWID_HORIZONTAL),
NWidget(WWT_CLOSEBOX, COLOUR_GREY),
NWidget(WWT_CAPTION, COLOUR_GREY, WID_RV_CAPTION), SetDataTip(STR_REPLACE_VEHICLES_WHITE, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
NWidget(WWT_SHADEBOX, COLOUR_GREY),
NWidget(WWT_DEFSIZEBOX, COLOUR_GREY),
NWidget(WWT_STICKYBOX, COLOUR_GREY),
EndContainer(),
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
NWidget(WWT_PANEL, COLOUR_GREY),
NWidget(WWT_LABEL, COLOUR_GREY), SetDataTip(STR_REPLACE_VEHICLE_VEHICLES_IN_USE, STR_REPLACE_VEHICLE_VEHICLES_IN_USE_TOOLTIP), SetFill(1, 1), SetMinimalSize(0, 12), SetResize(1, 0),
EndContainer(),
NWidget(WWT_PANEL, COLOUR_GREY),
NWidget(WWT_LABEL, COLOUR_GREY), SetDataTip(STR_REPLACE_VEHICLE_AVAILABLE_VEHICLES, STR_REPLACE_VEHICLE_AVAILABLE_VEHICLES_TOOLTIP), SetFill(1, 1), SetMinimalSize(0, 12), SetResize(1, 0),
EndContainer(),
EndContainer(),
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
NWidget(NWID_VERTICAL),
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_RV_RAIL_ROAD_TYPE_DROPDOWN), SetMinimalSize(136, 12), SetDataTip(0x0, STR_REPLACE_HELP_RAILTYPE), SetFill(1, 0), SetResize(1, 0),
NWidget(WWT_PANEL, COLOUR_GREY), SetResize(1, 0), EndContainer(),
EndContainer(),
NWidget(NWID_VERTICAL),
NWidget(NWID_HORIZONTAL),
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_RV_SORT_ASCENDING_DESCENDING), SetDataTip(STR_BUTTON_SORT_BY, STR_TOOLTIP_SORT_ORDER), SetFill(1, 1),
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_RV_SORT_DROPDOWN), SetResize(1, 0), SetFill(1, 1), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_SORT_CRITERIA),
EndContainer(),
NWidget(NWID_HORIZONTAL),
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_RV_SHOW_HIDDEN_ENGINES), SetDataTip(STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN, STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN_TOOLTIP),
NWidget(WWT_PANEL, COLOUR_GREY), SetResize(1, 0), SetFill(1, 1), EndContainer(),
EndContainer(),
EndContainer(),
EndContainer(),
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
NWidget(WWT_MATRIX, COLOUR_GREY, WID_RV_LEFT_MATRIX), SetMinimalSize(216, 0), SetFill(1, 1), SetMatrixDataTip(1, 0, STR_REPLACE_HELP_LEFT_ARRAY), SetResize(1, 1), SetScrollbar(WID_RV_LEFT_SCROLLBAR),
NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_RV_LEFT_SCROLLBAR),
NWidget(WWT_MATRIX, COLOUR_GREY, WID_RV_RIGHT_MATRIX), SetMinimalSize(216, 0), SetFill(1, 1), SetMatrixDataTip(1, 0, STR_REPLACE_HELP_RIGHT_ARRAY), SetResize(1, 1), SetScrollbar(WID_RV_RIGHT_SCROLLBAR),
NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_RV_RIGHT_SCROLLBAR),
EndContainer(),
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
NWidget(WWT_PANEL, COLOUR_GREY, WID_RV_LEFT_DETAILS), SetMinimalSize(240, 122), SetResize(1, 0), EndContainer(),
NWidget(WWT_PANEL, COLOUR_GREY, WID_RV_RIGHT_DETAILS), SetMinimalSize(240, 122), SetResize(1, 0), EndContainer(),
EndContainer(),
NWidget(NWID_HORIZONTAL),
NWidget(NWID_PUSHBUTTON_DROPDOWN, COLOUR_GREY, WID_RV_START_REPLACE), SetMinimalSize(139, 12), SetDataTip(STR_REPLACE_VEHICLES_START, STR_REPLACE_HELP_START_BUTTON),
NWidget(WWT_PANEL, COLOUR_GREY, WID_RV_INFO_TAB), SetMinimalSize(167, 12), SetDataTip(0x0, STR_REPLACE_HELP_REPLACE_INFO_TAB), SetResize(1, 0),
EndContainer(),
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_RV_STOP_REPLACE), SetMinimalSize(150, 12), SetDataTip(STR_REPLACE_VEHICLES_STOP, STR_REPLACE_HELP_STOP_BUTTON),
NWidget(WWT_RESIZEBOX, COLOUR_GREY),
EndContainer(),
};
static WindowDesc _replace_road_vehicle_desc(
WDP_AUTO, "replace_vehicle_road", 500, 140,
WC_REPLACE_VEHICLE, WC_NONE,
WDF_CONSTRUCTION,
_nested_replace_road_vehicle_widgets, lengthof(_nested_replace_road_vehicle_widgets)
);
static const NWidgetPart _nested_replace_vehicle_widgets[] = {
NWidget(NWID_HORIZONTAL),
NWidget(WWT_CLOSEBOX, COLOUR_GREY),
@ -710,5 +837,11 @@ static WindowDesc _replace_vehicle_desc(
void ShowReplaceGroupVehicleWindow(GroupID id_g, VehicleType vehicletype)
{
DeleteWindowById(WC_REPLACE_VEHICLE, vehicletype);
new ReplaceVehicleWindow(vehicletype == VEH_TRAIN ? &_replace_rail_vehicle_desc : &_replace_vehicle_desc, vehicletype, id_g);
WindowDesc *desc;
switch (vehicletype) {
case VEH_TRAIN: desc = &_replace_rail_vehicle_desc; break;
case VEH_ROAD: desc = &_replace_road_vehicle_desc; break;
default: desc = &_replace_vehicle_desc; break;
}
new ReplaceVehicleWindow(desc, vehicletype, id_g);
}

@ -13,6 +13,7 @@
#include "error.h"
#include "command_func.h"
#include "rail.h"
#include "road.h"
#include "strings_func.h"
#include "window_func.h"
#include "sound_func.h"
@ -410,11 +411,25 @@ void ShowBuildBridgeWindow(TileIndex start, TileIndex end, TransportType transpo
Money infra_cost = 0;
switch (transport_type) {
case TRANSPORT_ROAD:
infra_cost = (bridge_len + 2) * _price[PR_BUILD_ROAD] * 2;
case TRANSPORT_ROAD: {
/* In case we add a new road type as well, we must be aware of those costs. */
if (IsBridgeTile(start)) infra_cost *= CountBits(GetRoadTypes(start) | (RoadTypes)road_rail_type);
RoadType road_rt = INVALID_ROADTYPE;
RoadType tram_rt = INVALID_ROADTYPE;
if (IsBridgeTile(start)) {
road_rt = GetRoadTypeRoad(start);
tram_rt = GetRoadTypeTram(start);
}
if (RoadTypeIsRoad((RoadType)road_rail_type)) {
road_rt = (RoadType)road_rail_type;
} else {
tram_rt = (RoadType)road_rail_type;
}
if (road_rt != INVALID_ROADTYPE) infra_cost += (bridge_len + 2) * 2 * RoadBuildCost(road_rt);
if (tram_rt != INVALID_ROADTYPE) infra_cost += (bridge_len + 2) * 2 * RoadBuildCost(tram_rt);
break;
}
case TRANSPORT_RAIL: infra_cost = (bridge_len + 2) * RailBuildCost((RailType)road_rail_type); break;
default: break;
}

@ -131,11 +131,11 @@ static inline void MakeBridgeRamp(TileIndex t, Owner o, BridgeType bridgetype, D
SetTileOwner(t, o);
_m[t].m2 = 0;
_m[t].m3 = 0;
_m[t].m4 = 0;
_m[t].m4 = INVALID_ROADTYPE;
_m[t].m5 = 1 << 7 | tt << 2 | d;
SB(_me[t].m6, 2, 4, bridgetype);
_me[t].m7 = 0;
_me[t].m8 = 0;
_me[t].m8 = INVALID_ROADTYPE << 6;
}
/**
@ -146,18 +146,19 @@ static inline void MakeBridgeRamp(TileIndex t, Owner o, BridgeType bridgetype, D
* @param owner_tram the new owner of the tram on the bridge
* @param bridgetype the type of bridge this bridge ramp belongs to
* @param d the direction this ramp must be facing
* @param rts the road types of the bridge
* @param road_rt the road type of the bridge
* @param tram_rt the tram type of the bridge
* @param upgrade whether the bridge is an upgrade instead of a totally new bridge
*/
static inline void MakeRoadBridgeRamp(TileIndex t, Owner o, Owner owner_road, Owner owner_tram, BridgeType bridgetype, DiagDirection d, RoadTypes rts, bool upgrade)
static inline void MakeRoadBridgeRamp(TileIndex t, Owner o, Owner owner_road, Owner owner_tram, BridgeType bridgetype, DiagDirection d, RoadType road_rt, RoadType tram_rt, bool upgrade)
{
// Backup custom bridgehead data.
uint custom_bridge_head_backup = GB(_m[t].m2, 0, 8);
MakeBridgeRamp(t, o, bridgetype, d, TRANSPORT_ROAD);
SetRoadOwner(t, ROADTYPE_ROAD, owner_road);
if (owner_tram != OWNER_TOWN) SetRoadOwner(t, ROADTYPE_TRAM, owner_tram);
SetRoadTypes(t, rts);
SetRoadOwner(t, RTT_ROAD, owner_road);
if (owner_tram != OWNER_TOWN) SetRoadOwner(t, RTT_TRAM, owner_tram);
SetRoadTypes(t, road_rt, tram_rt);
// Restore custom bridgehead data if we're upgrading an existing bridge.
if (upgrade) SB(_m[t].m2, 0, 8, custom_bridge_head_backup);
@ -182,6 +183,7 @@ static inline void MakeRailBridgeRamp(TileIndex t, Owner o, BridgeType bridgetyp
auto m8_backup = _me[t].m8;
MakeBridgeRamp(t, o, bridgetype, d, TRANSPORT_RAIL);
_m[t].m4 = 0;
_me[t].m8 = rt;
if (upgrade) {
@ -234,15 +236,15 @@ static inline bool IsRoadCustomBridgeHeadTile(TileIndex t)
/**
* Returns the road bits for a (possibly custom) road bridge head
* @param t The tile to analyze
* @param rt Road type.
* @param rtt Road/tram type.
* @pre IsBridgeTile(t) && GetTunnelBridgeTransportType(t) == TRANSPORT_ROAD
* @return road bits for the bridge head
*/
static inline RoadBits GetCustomBridgeHeadRoadBits(TileIndex t, RoadType rt)
static inline RoadBits GetCustomBridgeHeadRoadBits(TileIndex t, RoadTramType rtt)
{
assert_tile(IsBridgeTile(t), t);
if (!HasTileRoadType(t, rt)) return (RoadBits) 0;
RoadBits bits = (GB(_m[t].m5, 0, 1) ? ROAD_Y : ROAD_X) ^ (RoadBits) GB(_m[t].m2, rt == ROADTYPE_TRAM ? 4 : 0, 4);
if (!HasTileRoadType(t, rtt)) return (RoadBits) 0;
RoadBits bits = (GB(_m[t].m5, 0, 1) ? ROAD_Y : ROAD_X) ^ (RoadBits) GB(_m[t].m2, rtt == RTT_TRAM ? 4 : 0, 4);
return bits;
}
@ -254,26 +256,26 @@ static inline RoadBits GetCustomBridgeHeadRoadBits(TileIndex t, RoadType rt)
*/
static inline RoadBits GetCustomBridgeHeadAllRoadBits(TileIndex t)
{
return GetCustomBridgeHeadRoadBits(t, ROADTYPE_ROAD) | GetCustomBridgeHeadRoadBits(t, ROADTYPE_TRAM);
return GetCustomBridgeHeadRoadBits(t, RTT_ROAD) | GetCustomBridgeHeadRoadBits(t, RTT_TRAM);
}
/**
* Sets the road bits for a (possibly custom) road bridge head
* @param t The tile to modify
* @param rt Road type.
* @param rtt Road/tram type.
* @param bits The road bits.
* @pre IsBridgeTile(t) && GetTunnelBridgeTransportType(t) == TRANSPORT_ROAD
* @pre HasTileRoadType() must be set correctly before calling this
*/
static inline void SetCustomBridgeHeadRoadBits(TileIndex t, RoadType rt, RoadBits bits)
static inline void SetCustomBridgeHeadRoadBits(TileIndex t, RoadTramType rtt, RoadBits bits)
{
assert_tile(IsBridgeTile(t), t);
if (HasTileRoadType(t, rt)) {
if (HasTileRoadType(t, rtt)) {
assert(bits != ROAD_NONE);
SB(_m[t].m2, rt == ROADTYPE_TRAM ? 4 : 0, 4, bits ^ (GB(_m[t].m5, 0, 1) ? ROAD_Y : ROAD_X));
SB(_m[t].m2, rtt == RTT_TRAM ? 4 : 0, 4, bits ^ (GB(_m[t].m5, 0, 1) ? ROAD_Y : ROAD_X));
} else {
assert(bits == ROAD_NONE);
SB(_m[t].m2, rt == ROADTYPE_TRAM ? 4 : 0, 4, 0);
SB(_m[t].m2, rtt == RTT_TRAM ? 4 : 0, 4, 0);
}
}

@ -1015,8 +1015,8 @@ void DisplayVehicleSortDropDown(Window *w, VehicleType vehicle_type, int selecte
struct BuildVehicleWindow : Window {
VehicleType vehicle_type; ///< Type of vehicles shown in the window.
union {
RailType railtype; ///< Rail type to show, or #RAILTYPE_END.
RoadTypes roadtypes; ///< Road type to show, or #ROADTYPES_ALL.
RailType railtype; ///< Rail type to show, or #INVALID_RAILTYPE.
RoadType roadtype; ///< Road type to show, or #INVALID_ROADTYPE.
} filter; ///< Filter to apply.
bool descending_sort_order; ///< Sort direction, @see _engine_sort_direction
byte sort_criteria; ///< Current sort criterium.
@ -1062,6 +1062,7 @@ struct BuildVehicleWindow : Window {
this->virtual_train_out = virtual_train_out;
this->virtual_train_mode = (virtual_train_out != nullptr);
if (this->virtual_train_mode) this->window_number = 0;
this->listview_mode = (tile == INVALID_TILE) && !virtual_train_mode;
this->sel_engine = INVALID_ENGINE;
@ -1069,19 +1070,7 @@ struct BuildVehicleWindow : Window {
this->descending_sort_order = _engine_sort_last_order[type];
this->show_hidden_engines = _engine_sort_show_hidden_engines[type];
switch (type) {
default: NOT_REACHED();
case VEH_TRAIN:
this->filter.railtype = (tile == INVALID_TILE) ? RAILTYPE_END : GetRailType(tile);
break;
case VEH_ROAD:
this->filter.roadtypes = (tile == INVALID_TILE) ? ROADTYPES_ALL : GetRoadTypes(tile);
case VEH_SHIP:
case VEH_AIRCRAFT:
break;
}
this->listview_mode = !(this->virtual_train_mode) && (this->window_number <= VEH_END);
this->UpdateFilterByTile();
this->CreateNestedTree();
@ -1127,6 +1116,36 @@ struct BuildVehicleWindow : Window {
}
}
/** Set the filter type according to the depot type */
void UpdateFilterByTile()
{
switch (this->vehicle_type) {
default: NOT_REACHED();
case VEH_TRAIN:
if (this->listview_mode || this->virtual_train_mode) {
this->filter.railtype = INVALID_RAILTYPE;
} else {
this->filter.railtype = GetRailType(this->window_number);
}
break;
case VEH_ROAD:
if (this->listview_mode || this->virtual_train_mode) {
this->filter.roadtype = INVALID_ROADTYPE;
} else {
this->filter.roadtype = GetRoadTypeRoad(this->window_number);
if (this->filter.roadtype == INVALID_ROADTYPE) {
this->filter.roadtype = GetRoadTypeTram(this->window_number);
}
}
break;
case VEH_SHIP:
case VEH_AIRCRAFT:
break;
}
}
/** Populate the filter list and set the cargo filter criteria. */
void SetCargoFilterArray()
{
@ -1236,8 +1255,6 @@ struct BuildVehicleWindow : Window {
int num_engines = 0;
int num_wagons = 0;
this->filter.railtype = (this->listview_mode || this->virtual_train_mode) ? RAILTYPE_END : GetRailType(this->window_number);
this->eng_list.clear();
/* Make list of all available train engines and wagons.
@ -1250,7 +1267,7 @@ struct BuildVehicleWindow : Window {
EngineID eid = e->index;
const RailVehicleInfo *rvi = &e->u.rail;
if (this->filter.railtype != RAILTYPE_END && !HasPowerOnRail(rvi->railtype, this->filter.railtype)) continue;
if (this->filter.railtype != INVALID_RAILTYPE && !HasPowerOnRail(rvi->railtype, this->filter.railtype)) continue;
if (!IsEngineBuildable(eid, VEH_TRAIN, _local_company)) continue;
/* Filter now! So num_engines and num_wagons is valid */
@ -1293,7 +1310,8 @@ struct BuildVehicleWindow : Window {
if (!this->show_hidden_engines && e->IsHidden(_local_company)) continue;
EngineID eid = e->index;
if (!IsEngineBuildable(eid, VEH_ROAD, _local_company)) continue;
if (!HasBit(this->filter.roadtypes, HasBit(EngInfo(eid)->misc_flags, EF_ROAD_TRAM) ? ROADTYPE_TRAM : ROADTYPE_ROAD)) continue;
if (this->filter.roadtype != INVALID_ROADTYPE && !HasPowerOnRoad(e->u.road.roadtype, this->filter.roadtype)) continue;
this->eng_list.push_back(eid);
if (eid == this->sel_engine) sel_id = eid;
@ -1351,6 +1369,10 @@ struct BuildVehicleWindow : Window {
void GenerateBuildList()
{
if (!this->eng_list.NeedRebuild()) return;
/* Update filter type in case the road/railtype of the depot got converted */
this->UpdateFilterByTile();
switch (this->vehicle_type) {
default: NOT_REACHED();
case VEH_TRAIN:
@ -1482,6 +1504,9 @@ struct BuildVehicleWindow : Window {
if (this->vehicle_type == VEH_TRAIN && !this->listview_mode && !this->virtual_train_mode) {
const RailtypeInfo *rti = GetRailTypeInfo(this->filter.railtype);
SetDParam(0, rti->strings.build_caption);
} else if (this->vehicle_type == VEH_ROAD && !this->listview_mode) {
const RoadTypeInfo *rti = GetRoadTypeInfo(this->filter.roadtype);
SetDParam(0, rti->strings.build_caption);
} else {
SetDParam(0, (this->listview_mode ? STR_VEHICLE_LIST_AVAILABLE_TRAINS : STR_BUY_VEHICLE_TRAIN_ALL_CAPTION) + this->vehicle_type);
}

@ -75,6 +75,8 @@ CommandProc CmdBuildRoad;
CommandProc CmdBuildRoadDepot;
CommandProc CmdConvertRoad;
CommandProc CmdBuildAirport;
CommandProc CmdBuildDock;
@ -298,6 +300,7 @@ static const Command _command_proc_table[] = {
DEF_CMD(CmdRemoveLongRoad, CMD_NO_TEST | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_REMOVE_LONG_ROAD; towns may disallow removing road bits (as they are connected) in test, but in exec they're removed and thus removing is allowed.
DEF_CMD(CmdBuildRoad, CMD_DEITY | CMD_NO_WATER | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_ROAD
DEF_CMD(CmdBuildRoadDepot, CMD_NO_WATER | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_ROAD_DEPOT
DEF_CMD(CmdConvertRoad, 0, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_CONVERT_ROAD
DEF_CMD(CmdBuildAirport, CMD_NO_WATER | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_AIRPORT
DEF_CMD(CmdBuildDock, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_DOCK

@ -242,6 +242,7 @@ enum Commands {
CMD_REMOVE_LONG_ROAD, ///< remove a complete road (not a "half" one)
CMD_BUILD_ROAD, ///< build a "half" road
CMD_BUILD_ROAD_DEPOT, ///< build a road depot
CMD_CONVERT_ROAD, ///< convert a road type
CMD_BUILD_AIRPORT, ///< build an airport

@ -44,6 +44,9 @@ struct CompanyInfrastructure {
return total;
}
uint32 GetRoadTotal() const;
uint32 GetTramTotal() const;
char *Dump(char *buffer, const char *last) const;
};

@ -568,7 +568,7 @@ Company *DoStartupNewCompany(bool is_ai, CompanyID company = INVALID_COMPANY)
c->share_owners[0] = c->share_owners[1] = c->share_owners[2] = c->share_owners[3] = INVALID_OWNER;
c->avail_railtypes = GetCompanyRailtypes(c->index);
c->avail_roadtypes = GetCompanyRoadtypes(c->index);
c->avail_roadtypes = GetCompanyRoadTypes(c->index);
c->inaugurated_year = _cur_year;
RandomCompanyManagerFaceBits(c->face, (GenderEthnicity)Random(), false, false); // create a random company manager face
@ -1183,11 +1183,40 @@ int CompanyServiceInterval(const Company *c, VehicleType type)
}
}
/**
* Get total sum of all owned road bits.
* @return Combined total road road bits.
*/
uint32 CompanyInfrastructure::GetRoadTotal() const
{
uint32 total = 0;
for (RoadType rt = ROADTYPE_BEGIN; rt != ROADTYPE_END; rt++) {
if (RoadTypeIsRoad(rt)) total += this->road[rt];
}
return total;
}
/**
* Get total sum of all owned tram bits.
* @return Combined total of tram road bits.
*/
uint32 CompanyInfrastructure::GetTramTotal() const
{
uint32 total = 0;
for (RoadType rt = ROADTYPE_BEGIN; rt != ROADTYPE_END; rt++) {
if (RoadTypeIsTram(rt)) total += this->road[rt];
}
return total;
}
char *CompanyInfrastructure::Dump(char *buffer, const char *last) const
{
for (RailType rt = RAILTYPE_BEGIN; rt != RAILTYPE_END; rt++) {
if (rail[rt]) buffer += seprintf(buffer, last, "Rail: %s: %u\n", GetStringPtr(GetRailTypeInfo(rt)->strings.name), rail[rt]);
}
for (RoadType rt = ROADTYPE_BEGIN; rt != ROADTYPE_END; rt++) {
if (road[rt]) buffer += seprintf(buffer, last, "%s: %s: %u\n", RoadTypeIsTram(rt) ? "Tram" : "Road", GetStringPtr(GetRoadTypeInfo(rt)->strings.name), road[rt]);
}
buffer += seprintf(buffer, last, "Signal: %u\n", signal);
buffer += seprintf(buffer, last, "Road: %u\n", road[ROADTYPE_ROAD]);
buffer += seprintf(buffer, last, "Tram: %u\n", road[ROADTYPE_TRAM]);

@ -31,6 +31,7 @@
#include "core/geometry_func.hpp"
#include "object_type.h"
#include "rail.h"
#include "road.h"
#include "engine_base.h"
#include "window_func.h"
#include "road_func.h"
@ -1786,6 +1787,10 @@ static const NWidgetPart _nested_company_infrastructure_widgets[] = {
NWidget(WWT_EMPTY, COLOUR_GREY, WID_CI_ROAD_DESC), SetMinimalTextLines(2, 0), SetFill(1, 0),
NWidget(WWT_EMPTY, COLOUR_GREY, WID_CI_ROAD_COUNT), SetMinimalTextLines(2, 0), SetFill(0, 1),
EndContainer(),
NWidget(NWID_HORIZONTAL), SetPIP(2, 4, 2),
NWidget(WWT_EMPTY, COLOUR_GREY, WID_CI_TRAM_DESC), SetMinimalTextLines(2, 0), SetFill(1, 0),
NWidget(WWT_EMPTY, COLOUR_GREY, WID_CI_TRAM_COUNT), SetMinimalTextLines(2, 0), SetFill(0, 1),
EndContainer(),
NWidget(NWID_HORIZONTAL), SetPIP(2, 4, 2),
NWidget(WWT_EMPTY, COLOUR_GREY, WID_CI_WATER_DESC), SetMinimalTextLines(2, 0), SetFill(1, 0),
NWidget(WWT_EMPTY, COLOUR_GREY, WID_CI_WATER_COUNT), SetMinimalTextLines(2, 0), SetFill(0, 1),
@ -1823,7 +1828,7 @@ struct CompanyInfrastructureWindow : Window
void UpdateRailRoadTypes()
{
this->railtypes = RAILTYPES_NONE;
this->roadtypes = ROADTYPES_ROAD; // Road is always available.
this->roadtypes = ROADTYPES_NONE;
/* Find the used railtypes. */
Engine *e;
@ -1836,14 +1841,16 @@ struct CompanyInfrastructureWindow : Window
/* Get the date introduced railtypes as well. */
this->railtypes = AddDateIntroducedRailTypes(this->railtypes, MAX_DAY);
/* Tram is only visible when there will be a tram. */
/* Find the used roadtypes. */
FOR_ALL_ENGINES_OF_TYPE(e, VEH_ROAD) {
if (!HasBit(e->info.climates, _settings_game.game_creation.landscape)) continue;
if (!HasBit(e->info.misc_flags, EF_ROAD_TRAM)) continue;
this->roadtypes |= ROADTYPES_TRAM;
break;
this->roadtypes |= GetRoadTypeInfo(e->u.road.roadtype)->introduces_roadtypes;
}
/* Get the date introduced roadtypes as well. */
this->roadtypes = AddDateIntroducedRoadTypes(this->roadtypes, MAX_DAY);
this->roadtypes &= ~_roadtypes_hidden_mask;
}
/** Get total infrastructure maintenance cost. */
@ -1858,8 +1865,11 @@ struct CompanyInfrastructureWindow : Window
}
total += SignalMaintenanceCost(c->infrastructure.signal);
if (HasBit(this->roadtypes, ROADTYPE_ROAD)) total += RoadMaintenanceCost(ROADTYPE_ROAD, c->infrastructure.road[ROADTYPE_ROAD]);
if (HasBit(this->roadtypes, ROADTYPE_TRAM)) total += RoadMaintenanceCost(ROADTYPE_TRAM, c->infrastructure.road[ROADTYPE_TRAM]);
uint32 road_total = c->infrastructure.GetRoadTotal();
uint32 tram_total = c->infrastructure.GetTramTotal();
for (RoadType rt = ROADTYPE_BEGIN; rt != ROADTYPE_END; rt++) {
if (HasBit(this->roadtypes, rt)) total += RoadMaintenanceCost(rt, c->infrastructure.road[rt], RoadTypeIsRoad(rt) ? road_total : tram_total);
}
total += CanalMaintenanceCost(c->infrastructure.water);
total += StationMaintenanceCost(c->infrastructure.station);
@ -1887,7 +1897,8 @@ struct CompanyInfrastructureWindow : Window
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT).width);
for (RailType rt = RAILTYPE_BEGIN; rt < RAILTYPE_END; rt++) {
RailType rt;
FOR_ALL_SORTED_RAILTYPES(rt) {
if (HasBit(this->railtypes, rt)) {
lines++;
SetDParam(0, GetRailTypeInfo(rt)->strings.name);
@ -1903,18 +1914,19 @@ struct CompanyInfrastructureWindow : Window
break;
}
case WID_CI_ROAD_DESC: {
uint lines = 1;
case WID_CI_ROAD_DESC:
case WID_CI_TRAM_DESC: {
uint lines = 0;
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT).width);
size->width = max(size->width, GetStringBoundingBox(widget == WID_CI_ROAD_DESC ? STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT : STR_COMPANY_INFRASTRUCTURE_VIEW_TRAM_SECT).width);
if (HasBit(this->roadtypes, ROADTYPE_ROAD)) {
lines++;
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD).width + WD_FRAMERECT_LEFT);
}
if (HasBit(this->roadtypes, ROADTYPE_TRAM)) {
lines++;
size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY).width + WD_FRAMERECT_LEFT);
RoadType rt;
FOR_ALL_SORTED_ROADTYPES(rt) {
if (HasBit(this->roadtypes, rt) && RoadTypeIsRoad(rt) == (widget == WID_CI_ROAD_DESC)) {
lines++;
SetDParam(0, GetRoadTypeInfo(rt)->strings.name);
size->width = max(size->width, GetStringBoundingBox(STR_WHITE_STRING).width + WD_FRAMERECT_LEFT);
}
}
size->height = max(size->height, lines * FONT_HEIGHT_NORMAL);
@ -1934,6 +1946,7 @@ struct CompanyInfrastructureWindow : Window
case WID_CI_RAIL_COUNT:
case WID_CI_ROAD_COUNT:
case WID_CI_TRAM_COUNT:
case WID_CI_WATER_COUNT:
case WID_CI_STATION_COUNT:
case WID_CI_TOTAL: {
@ -1947,9 +1960,12 @@ struct CompanyInfrastructureWindow : Window
}
max_val = max(max_val, c->infrastructure.signal);
max_cost = max(max_cost, SignalMaintenanceCost(c->infrastructure.signal));
uint32 road_total = c->infrastructure.GetRoadTotal();
uint32 tram_total = c->infrastructure.GetTramTotal();
for (RoadType rt = ROADTYPE_BEGIN; rt < ROADTYPE_END; rt++) {
max_val = max(max_val, c->infrastructure.road[rt]);
max_cost = max(max_cost, RoadMaintenanceCost(rt, c->infrastructure.road[rt]));
max_cost = max(max_cost, RoadMaintenanceCost(rt, c->infrastructure.road[rt], RoadTypeIsRoad(rt) ? road_total : tram_total));
}
max_val = max(max_val, c->infrastructure.water);
max_cost = max(max_cost, CanalMaintenanceCost(c->infrastructure.water));
@ -2045,26 +2061,32 @@ struct CompanyInfrastructureWindow : Window
}
case WID_CI_ROAD_DESC:
DrawString(r.left, r.right, y, STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT);
if (this->roadtypes != ROADTYPES_NONE) {
if (HasBit(this->roadtypes, ROADTYPE_ROAD)) DrawString(r.left + offs_left, r.right - offs_right, y += FONT_HEIGHT_NORMAL, STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD);
if (HasBit(this->roadtypes, ROADTYPE_TRAM)) DrawString(r.left + offs_left, r.right - offs_right, y += FONT_HEIGHT_NORMAL, STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY);
} else {
/* No valid roadtypes. */
DrawString(r.left + offs_left, r.right - offs_right, y += FONT_HEIGHT_NORMAL, STR_COMPANY_VIEW_INFRASTRUCTURE_NONE);
case WID_CI_TRAM_DESC: {
DrawString(r.left, r.right, y, widget == WID_CI_ROAD_DESC ? STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT : STR_COMPANY_INFRASTRUCTURE_VIEW_TRAM_SECT);
/* Draw name of each valid roadtype. */
RoadType rt;
FOR_ALL_SORTED_ROADTYPES(rt) {
if (HasBit(this->roadtypes, rt) && RoadTypeIsRoad(rt) == (widget == WID_CI_ROAD_DESC)) {
SetDParam(0, GetRoadTypeInfo(rt)->strings.name);
DrawString(r.left + offs_left, r.right - offs_right, y += FONT_HEIGHT_NORMAL, STR_WHITE_STRING);
}
}
break;
}
case WID_CI_ROAD_COUNT:
if (HasBit(this->roadtypes, ROADTYPE_ROAD)) {
this->DrawCountLine(r, y, c->infrastructure.road[ROADTYPE_ROAD], RoadMaintenanceCost(ROADTYPE_ROAD, c->infrastructure.road[ROADTYPE_ROAD]));
}
if (HasBit(this->roadtypes, ROADTYPE_TRAM)) {
this->DrawCountLine(r, y, c->infrastructure.road[ROADTYPE_TRAM], RoadMaintenanceCost(ROADTYPE_TRAM, c->infrastructure.road[ROADTYPE_TRAM]));
case WID_CI_TRAM_COUNT: {
uint32 road_tram_total = widget == WID_CI_ROAD_COUNT ? c->infrastructure.GetRoadTotal() : c->infrastructure.GetTramTotal();
RoadType rt;
FOR_ALL_SORTED_ROADTYPES(rt) {
if (HasBit(this->roadtypes, rt) && RoadTypeIsRoad(rt) == (widget == WID_CI_ROAD_COUNT)) {
this->DrawCountLine(r, y, c->infrastructure.road[rt], RoadMaintenanceCost(rt, c->infrastructure.road[rt], road_tram_total));
}
}
break;
}
case WID_CI_WATER_DESC:
DrawString(r.left, r.right, y, STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT);

@ -729,8 +729,10 @@ static void CompaniesGenStatistics()
if (c->infrastructure.rail[rt] != 0) cost.AddCost(RailMaintenanceCost(rt, c->infrastructure.rail[rt], rail_total));
}
cost.AddCost(SignalMaintenanceCost(c->infrastructure.signal));
uint32 road_total = c->infrastructure.GetRoadTotal();
uint32 tram_total = c->infrastructure.GetTramTotal();
for (RoadType rt = ROADTYPE_BEGIN; rt < ROADTYPE_END; rt++) {
if (c->infrastructure.road[rt] != 0) cost.AddCost(RoadMaintenanceCost(rt, c->infrastructure.road[rt]));
if (c->infrastructure.road[rt] != 0) cost.AddCost(RoadMaintenanceCost(rt, c->infrastructure.road[rt], RoadTypeIsRoad(rt) ? road_total : tram_total));
}
cost.AddCost(CanalMaintenanceCost(c->infrastructure.water));
cost.AddCost(StationMaintenanceCost(c->infrastructure.station));

@ -718,7 +718,7 @@ void StartupEngines()
Company *c;
FOR_ALL_COMPANIES(c) {
c->avail_railtypes = GetCompanyRailtypes(c->index);
c->avail_roadtypes = GetCompanyRoadtypes(c->index);
c->avail_roadtypes = GetCompanyRoadTypes(c->index);
}
/* Invalidate any open purchase lists */
@ -740,7 +740,8 @@ static void AcceptEnginePreview(EngineID eid, CompanyID company)
assert(e->u.rail.railtype < RAILTYPE_END);
c->avail_railtypes = AddDateIntroducedRailTypes(c->avail_railtypes | GetRailTypeInfo(e->u.rail.railtype)->introduces_railtypes, _date);
} else if (e->type == VEH_ROAD) {
SetBit(c->avail_roadtypes, HasBit(e->info.misc_flags, EF_ROAD_TRAM) ? ROADTYPE_TRAM : ROADTYPE_ROAD);
assert(e->u.road.roadtype < ROADTYPE_END);
c->avail_roadtypes = AddDateIntroducedRoadTypes(c->avail_roadtypes | GetRoadTypeInfo(e->u.road.roadtype)->introduces_roadtypes, _date);
}
e->preview_company = INVALID_COMPANY;
@ -820,6 +821,7 @@ void EnginesDailyLoop()
Company *c;
FOR_ALL_COMPANIES(c) {
c->avail_railtypes = AddDateIntroducedRailTypes(c->avail_railtypes, _date);
c->avail_roadtypes = AddDateIntroducedRoadTypes(c->avail_roadtypes, _date);
}
if (_cur_year >= _year_engine_aging_stops) return;
@ -961,7 +963,8 @@ static void NewVehicleAvailable(Engine *e)
FOR_ALL_COMPANIES(c) c->avail_railtypes = AddDateIntroducedRailTypes(c->avail_railtypes | GetRailTypeInfo(e->u.rail.railtype)->introduces_railtypes, _date);
} else if (e->type == VEH_ROAD) {
/* maybe make another road type available */
FOR_ALL_COMPANIES(c) SetBit(c->avail_roadtypes, HasBit(e->info.misc_flags, EF_ROAD_TRAM) ? ROADTYPE_TRAM : ROADTYPE_ROAD);
assert(e->u.road.roadtype < ROADTYPE_END);
FOR_ALL_COMPANIES(c) c->avail_roadtypes = AddDateIntroducedRoadTypes(c->avail_roadtypes | GetRoadTypeInfo(e->u.road.roadtype)->introduces_roadtypes, _date);
}
/* Only broadcast event if AIs are able to build this vehicle type. */
@ -1108,6 +1111,11 @@ bool IsEngineBuildable(EngineID engine, VehicleType type, CompanyID company)
const Company *c = Company::Get(company);
if (((GetRailTypeInfo(e->u.rail.railtype))->compatible_railtypes & c->avail_railtypes) == 0) return false;
}
if (type == VEH_ROAD && company != OWNER_DEITY) {
/* Check if the road type is available to this company */
const Company *c = Company::Get(company);
if ((GetRoadTypeInfo(e->u.road.roadtype)->powered_roadtypes & c->avail_roadtypes) == ROADTYPES_NONE) return false;
}
return true;
}

@ -19,6 +19,7 @@
#include "vehicle_func.h"
#include "company_func.h"
#include "rail.h"
#include "road.h"
#include "settings_type.h"
#include "train.h"
#include "roadveh.h"
@ -41,7 +42,8 @@ StringID GetEngineCategoryName(EngineID engine)
const Engine *e = Engine::Get(engine);
switch (e->type) {
default: NOT_REACHED();
case VEH_ROAD: return STR_ENGINE_PREVIEW_ROAD_VEHICLE;
case VEH_ROAD:
return GetRoadTypeInfo(e->u.road.roadtype)->strings.new_engine;
case VEH_AIRCRAFT: return STR_ENGINE_PREVIEW_AIRCRAFT;
case VEH_SHIP: return STR_ENGINE_PREVIEW_SHIP;
case VEH_TRAIN:

@ -14,6 +14,7 @@
#include "economy_type.h"
#include "rail_type.h"
#include "road_type.h"
#include "cargo_type.h"
#include "date_type.h"
#include "sound_type.h"
@ -123,6 +124,7 @@ struct RoadVehicleInfo {
uint8 air_drag; ///< Coefficient of air drag
byte visual_effect; ///< Bitstuffed NewGRF visual effect data
byte shorten_factor; ///< length on main map for this type is 8 - shorten_factor
RoadType roadtype; ///< Road type
};
/**

@ -64,6 +64,7 @@
#include "../script/api/game/game_rail.hpp.sq"
#include "../script/api/game/game_railtypelist.hpp.sq"
#include "../script/api/game/game_road.hpp.sq"
#include "../script/api/game/game_roadtypelist.hpp.sq"
#include "../script/api/game/game_sign.hpp.sq"
#include "../script/api/game/game_signlist.hpp.sq"
#include "../script/api/game/game_station.hpp.sq"
@ -174,6 +175,7 @@ void GameInstance::RegisterAPI()
SQGSRail_Register(this->engine);
SQGSRailTypeList_Register(this->engine);
SQGSRoad_Register(this->engine);
SQGSRoadTypeList_Register(this->engine);
SQGSSign_Register(this->engine);
SQGSSignList_Register(this->engine);
SQGSStation_Register(this->engine);

@ -30,7 +30,7 @@ void GroundVehicle<T, Type>::PowerChanged()
uint32 total_power = 0;
uint32 max_te = 0;
uint32 number_of_parts = 0;
uint16 max_track_speed = v->GetDisplayMaxSpeed();
uint16 max_track_speed = this->vcache.cached_max_speed; // Max track speed in internal units.
this->CalculatePower(total_power, max_te, false);

@ -37,7 +37,7 @@ struct GroundVehicleCache {
uint16 cached_axle_resistance; ///< Resistance caused by the axles of the vehicle (valid only for the first engine).
/* Cached acceleration values, recalculated on load and each time a vehicle is added to/removed from the consist. */
uint16 cached_max_track_speed; ///< Maximum consist speed limited by track type (valid only for the first engine).
uint16 cached_max_track_speed; ///< Maximum consist speed (in internal units) limited by track type (valid only for the first engine).
uint32 cached_power; ///< Total power of the consist (valid only for the first engine).
uint32 cached_air_drag; ///< Air drag coefficient of the vehicle (valid only for the first engine).

@ -3255,8 +3255,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}{COMPANY
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Spoorstukke:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Seine
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Padstukke:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Pad
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Tremweg
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Waterteëls:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Kanale
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Stasies:
@ -4268,7 +4266,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Moet eer
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Geen geskikte treinspoor
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Moet eers spoor verwyder
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Pad is een rigting of geblok
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Vlak kruisings word nie toegelaat vir die spoor tipe nie
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Vlak kruisings word nie toegelaat vir die spoor tipe nie
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Kan nie seinligte hier bou nie...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Kan nie spore hier bou nie...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Kan nie spore hier verwyder nie...

@ -3733,7 +3733,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}يجب
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}... مسار السكة الحديدية غير مناسب
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}يجب إزاله السكه الحديديه اولاً
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}الطريق باتجاه واحد او ربما يكون مسدوداً
STR_ERROR_CROSSING_DISALLOWED :{WHITE}التقاطع المتعدد غير متاح لهذا النوع من السكك
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}التقاطع المتعدد غير متاح لهذا النوع من السكك
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}تعذر بناء اﻹشارات هنا...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}تعذر بناء السكه الحديديه هنا...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}تعذر إزاله السكه الحديديه من هنا...

@ -3143,8 +3143,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}{COMPANY
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Trenbide sailak:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Seinaleak
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Errepide sailak:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Errepidea
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Tranbia sailak
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Urbide sailak:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Kanalak
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Geltokiak:
@ -4140,7 +4138,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Lehendab
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Ez dago trenbide egokirik
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Lehendabizi trenbidea ezabatu
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Errepidea norabide bakarrekoa da edo blokeatua dago
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Ezin dira maila bereko pasaguneak egin trenbide mota honetan
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Ezin dira maila bereko pasaguneak egin trenbide mota honetan
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Ezin da seinalerik hemen eraiki...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Ezin da trenbiderik hemen eraiki...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Ezin da hemengo trenbidea ezabatu...

@ -3604,8 +3604,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Iнфр
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Чыгуначныя элемэнты:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Сыґналы
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Дарожныя элемэнты:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Дарогi
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Трамваi
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Водныя клеткi:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Каналы
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Станцыi:
@ -4653,7 +4651,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Спач
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Няма прыдатных рэйкаў
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Спачатку выдаліце чыгунку
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Дарога аднабаковая або блякаваная
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Праз гэты від рэйкаў забаронена будаваць пераезды
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Праз гэты від рэйкаў забаронена будаваць пераезды
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Тут немагчыма паставіць сьветлафор...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Тут немагчыма пракласьцi рэйкі...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Не атрымалася выдаліць чыгунку...

@ -3314,8 +3314,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infraest
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Partes de ferrovias:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Sinais
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Partes de rodovias:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Rodovia
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Linha de bonde
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Partes d'água:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Canais
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Estações:
@ -4343,7 +4341,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Remova o
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Tipo de linha não apropriado
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Remova a ferrovia antes
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Rua é mão única ou está bloqueada
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Cruzamentos de nível não são permitidos para esse tipo de trilho
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Cruzamentos de nível não são permitidos para esse tipo de trilho
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Impossível construir sinais aqui...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Impossível construir ferrovia aqui...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Impossível remover a ferrovia daqui...

@ -3184,8 +3184,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Инфр
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Релсови части:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Сигнали
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Пътни части:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Път
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Трамвай
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Водни части:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Канали
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Станции:
@ -4197,7 +4195,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Първ
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Неподходящ за употреба релсов път
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Първо трябва да бъде премахнат релсовия път
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Пътят е еднопосочен или блокиран
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Пресичането на различни видове ЖП линии не е позволено.
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Пресичането на различни видове ЖП линии не е позволено.
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Тук не може да бъдат поставени сигнали...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Тук не могат да бъдат построени ЖП релси...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Не може да премахнеш тези ЖП релси...

@ -3353,8 +3353,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infraest
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Trossos de vies:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Senyals
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Trossos de carretera:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Carretera
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Tramvia
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Cel·les d'aigua:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Canals
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Estacions:
@ -4388,7 +4386,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}...abans
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Via de tren no apropiada
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}...abans s'ha de treure la via.
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}La carretera és un d'un sol sentit o està bloquejada
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Els passos a nivell no estan permesos en aquest tipus de via
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Els passos a nivell no estan permesos en aquest tipus de via
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Aquí no es poden construir senyals...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Aquí no es pot construir la via de tren...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Aquí no es pot treure la via de tren...

@ -3454,8 +3454,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infrastr
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Dijelovi pruge:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Signali
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Dijelovi ceste:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Cesta
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Tramvajska pruga
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Polje s vodom:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Kanali
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Postaje:
@ -4501,7 +4499,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Najprije
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Nije prikladno za želježnicku prugu
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Najprije je potrebno ukloniti željezničku prugu
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Cesta je jednosmjerna ili je blokirana
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Pružni prijelazi nisu dopušteni za ovu vrstu pruge
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Pružni prijelazi nisu dopušteni za ovu vrstu pruge
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Ovdje nije moguće postaviti signale...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Ovdje nije moguće izgraditi željezničke tračnice...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Nije moguće ukloniti željezničku prugu odavde...

@ -3374,8 +3374,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infrastr
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Železniční oblasti:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Semafory
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Silniční oblasti:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Silnice
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Tramvajové koleje
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Vodní oblasti:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Průplavy
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Stanice:
@ -4406,7 +4404,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Je nutn
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Žádné použitelné koleje
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Je nutné nejprve odstranit koleje
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Silnice je jednosměrná nebo zablokovaná
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Železniční přejezd není povolen pro tento typ kolejí
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Železniční přejezd není povolen pro tento typ kolejí
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Zde nelze postavit semafory...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Zde nelze postavit koleje...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Odsud nelze odstranit koleje...

@ -3356,8 +3356,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infrastr
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Spor-stykker:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Signaler
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Vej-stykker:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Vej
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Sporvogne
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Vand-felter:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Kanaler
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Stationer:
@ -4391,7 +4389,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Det er n
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Ingen brugbar jernbane
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Det er nødvendigt at fjerne jernbaneskinnerne først
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Vejen er ensrettet eller blokeret
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Niveaukrydsning ikke tilladt for denne type skinner
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Niveaukrydsning ikke tilladt for denne type skinner
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Kan ikke bygge signaler her...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Kan ikke bygge jernbane her...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Kan ikke fjerne jernbane herfra...

@ -3358,8 +3358,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infrastr
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Spoordelen:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Seinen
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Wegdelen:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Weg
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Tramsporen
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Watertegels:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Kanalen
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Stations:
@ -4405,7 +4403,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Verwijde
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Geen bruikbaar spoor
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Moet spoor eerst verwijderen
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Weg is eenrichtingsverkeer of geblokkeerd
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Gelijkvloerse kruisingen zijn niet toegestaan voor dit type spoor
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Gelijkvloerse kruisingen zijn niet toegestaan voor dit type spoor
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Kan hier geen seinen plaatsen...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Kan hier geen spoor leggen...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Kan hier geen spoor verwijderen...

@ -344,6 +344,7 @@ STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Zoom the
STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Zoom the view out
STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Build railway track
STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Build roads
STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Build tramways
STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Build ship docks
STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Build airports
STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Open the landscaping toolbar to raise/lower land, plant trees, etc.
@ -364,6 +365,7 @@ STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Landscap
STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Town generation
STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Industry generation
STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Road construction
STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Tramway construction
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plant trees. Shift toggles building/showing cost estimate
STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Place sign
STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Place object. Shift toggles building/showing cost estimate
@ -2930,6 +2932,11 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Build ro
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Build tramway tunnel. Shift toggles building/showing cost estimate
STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Toggle build/remove for road construction
STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Toggle build/remove for tramway construction
STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Convert/Upgrade the type of road. Shift toggles building/showing cost estimate
STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Convert/Upgrade the type of tram. Shift toggles building/showing cost estimate
STR_ROAD_NAME_ROAD :Road
STR_ROAD_NAME_TRAM :Tramway
# Road depot construction window
STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Road Depot Orientation
@ -3147,8 +3154,11 @@ STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF:
STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Cargo accepted: {LTBLUE}
STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING})
STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Rail type: {LTBLUE}{STRING}
STR_LANG_AREA_INFORMATION_ROAD_TYPE :{BLACK}Road type: {LTBLUE}{STRING}
STR_LANG_AREA_INFORMATION_TRAM_TYPE :{BLACK}Tram type: {LTBLUE}{STRING}
STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Rail speed limit: {LTBLUE}{VELOCITY}
STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Road speed limit: {LTBLUE}{VELOCITY}
STR_LANG_AREA_INFORMATION_TRAM_SPEED_LIMIT :{BLACK}Tram speed limit: {LTBLUE}{VELOCITY}
# Description of land area of different tiles
STR_LAI_CLEAR_DESCRIPTION_ROCKS :Rocks
@ -4016,8 +4026,7 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infrastr
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Rail pieces:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Signals
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Road pieces:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Road
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Tramway
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAM_SECT :{GOLD}Tram pieces:
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Water tiles:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Canals
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Stations:
@ -4165,10 +4174,15 @@ STR_BUY_VEHICLE_TRAIN_ELRAIL_CAPTION :New Electric Ra
STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :New Monorail Vehicles
STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :New Maglev Vehicles
STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :New Rail Vehicles
STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :New Road Vehicles
STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :New Tram Vehicles
############ range for vehicle availability starts
STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :New Rail Vehicles
STR_BUY_VEHICLE_ROAD_VEHICLE_ALL_CAPTION :New Road Vehicles
STR_BUY_VEHICLE_SHIP_CAPTION :New Ships
STR_BUY_VEHICLE_AIRCRAFT_CAPTION :New Aircraft
############ range for vehicle availability ends
STR_PURCHASE_INFO_COST_WEIGHT :{BLACK}Cost: {GOLD}{CURRENCY_LONG}{BLACK} Weight: {GOLD}{WEIGHT_SHORT}
STR_PURCHASE_INFO_COST_REFIT_WEIGHT :{BLACK}Cost: {GOLD}{CURRENCY_LONG}{BLACK} (Refit Cost: {GOLD}{CURRENCY_LONG}{BLACK}) Weight: {GOLD}{WEIGHT_SHORT}
@ -4334,12 +4348,17 @@ STR_DEPOT_SELL_CONFIRMATION_TEXT :{YELLOW}You are
# Engine preview window
STR_ENGINE_PREVIEW_CAPTION :{WHITE}Message from vehicle manufacturer
STR_ENGINE_PREVIEW_MESSAGE :{GOLD}We have just designed a new {STRING} - would you be interested in a year's exclusive use of this vehicle, so we can see how it performs before making it universally available?
STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE :railway locomotive
STR_ENGINE_PREVIEW_ELRAIL_LOCOMOTIVE :electrified railway locomotive
STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :monorail locomotive
STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :maglev locomotive
STR_ENGINE_PREVIEW_ROAD_VEHICLE :road vehicle
STR_ENGINE_PREVIEW_TRAM_VEHICLE :tramway vehicle
STR_ENGINE_PREVIEW_AIRCRAFT :aircraft
STR_ENGINE_PREVIEW_SHIP :ship
STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :monorail locomotive
STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :maglev locomotive
STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}Cost: {CURRENCY_LONG} Weight: {WEIGHT_SHORT}{}Speed: {VELOCITY} Power: {POWER}{}Running Cost: {CURRENCY_LONG}/yr{}Capacity: {CARGO_LONG}
STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Cost: {CURRENCY_LONG} Weight: {WEIGHT_SHORT}{}Speed: {VELOCITY} Power: {POWER} Max. T.E.: {6:FORCE}{}Running Cost: {4:CURRENCY_LONG}/yr{}Capacity: {5:CARGO_LONG}
@ -4378,14 +4397,19 @@ STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Switch b
STR_REPLACE_ENGINES :Engines
STR_REPLACE_WAGONS :Wagons
STR_REPLACE_ALL_RAILTYPE :All rail vehicles
STR_REPLACE_ALL_ROADTYPE :All road vehicles
STR_REPLACE_HELP_RAILTYPE :{BLACK}Choose the rail type you want to replace engines for
STR_REPLACE_HELP_ROADTYPE :{BLACK}Choose the road type you want to replace engines for
STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Displays which engine the left selected engine is being replaced with, if any
STR_REPLACE_RAIL_VEHICLES :Rail Vehicles
STR_REPLACE_ELRAIL_VEHICLES :Electrified Rail Vehicles
STR_REPLACE_MONORAIL_VEHICLES :Monorail Vehicles
STR_REPLACE_MAGLEV_VEHICLES :Maglev Vehicles
STR_REPLACE_ROAD_VEHICLES :Road Vehicles
STR_REPLACE_TRAM_VEHICLES :Tramway Vehicles
STR_REPLACE_REMOVE_WAGON :{BLACK}Wagon removal: {ORANGE}{STRING}
STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Make autoreplace keep the length of a train the same by removing wagons (starting at the front), if replacing the engine would make the train longer
@ -5290,7 +5314,8 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Must rem
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}No suitable railway track
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Must remove railway track first
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Road is one way or blocked
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Level crossings not allowed for this rail type
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Level crossings not allowed for this rail type
STR_ERROR_CROSSING_DISALLOWED_ROAD :{WHITE}Level crossings not allowed for this road type
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Can't build signals here...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Can't build railway track here...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Can't remove railway track from here...
@ -5312,6 +5337,12 @@ STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Can't re
STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Can't remove tramway from here...
STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... there is no road
STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... there is no tramway
STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Can't convert road type here...
STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Can't convert tram type here...
STR_ERROR_NO_SUITABLE_ROAD :{WHITE}No suitable road
STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}No suitable tramway
STR_ERROR_INCOMPATIBLE_ROAD :{WHITE}... incompatible road
STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... incompatible tramway
# Waterway construction errors
STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Can't build canals here...

@ -3221,8 +3221,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infrastr
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Rail pieces:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Signals
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Road pieces:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Road
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Tramway
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Water tiles:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Canals
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Stations:
@ -4217,7 +4215,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Must rem
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}No suitable railway track
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Must remove railway track first
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Road is one way or blocked
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Level crossings not allowed for this rail type
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Level crossings not allowed for this rail type
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Can't build signals here...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Can't build railway track here...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Can't remove railway track from here...

@ -3355,8 +3355,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infrastr
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Rail pieces:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Signals
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Road pieces:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Road
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Streetcar
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Water tiles:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Canals
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Stations:
@ -4402,7 +4400,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Must rem
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}No suitable railroad track
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Must remove railroad track first
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Road is one way or blocked
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Grade crossings not allowed for this rail type
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Grade crossings not allowed for this rail type
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Can't build signals here...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Can't build railroad track here...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Can't remove railroad track from here...

@ -3645,7 +3645,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Unue vi
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Nekonvena fervojtrako
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Antaŭe devas la trako esti detruita
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Strato estas unudirekta aŭ blokita
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Traknivelaj pasejoj ne permesa por ĉi tio fervojtipo
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Traknivelaj pasejoj ne permesa por ĉi tio fervojtipo
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Ne povas konstrui signalojn ĉi tie...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Ne povas konstrui trakon ĉi tie...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Ne povas forigi trakon de ĉi tie...

@ -3332,8 +3332,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE} {COMPAN
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Raudtee tükid:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Signaalid
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Tee tükid:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Tee
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Trammitee
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Veekogu ruudud:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Kanalid
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Jaamad:
@ -4351,7 +4349,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Signaali
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Sobiv rongitee puudub
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Rööbastee tuleb eelnevalt lammutada
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Läbipääsmatu või ühesuunaline maantee
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Ülesõidukohad on selle raudteetüübi puhul keelatud
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Ülesõidukohad on selle raudteetüübi puhul keelatud
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Siia ei saa signaale rajada...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Siia ei saa raudteed ehitada...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Siit ei saa raudteed lammutada...

@ -2889,8 +2889,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Innanker
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Jarnbreyta pettir:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Tekin
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Vega pettir:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Vegur
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Sporvognur
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Vatn puntar:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Siglingarennir
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Støðir:
@ -3790,7 +3788,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Neyðugt
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Ikki hóskandi jarnbreyt
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Neyðugt at beina burtur jarnbreyt fyrst
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Vegur er einvegis ella blokeraður
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Javnir krossvegir ikki loyvdir fyri hetta slagi av tok bana
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Javnir krossvegir ikki loyvdir fyri hetta slagi av tok bana
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Kann ikki byggja jarnbreytatekin her...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Kann ikki byggja jarnbreyt her...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Kann ikki beina burtur jarnbreyt hagani...

@ -3358,8 +3358,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}{COMPANY
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Rautatiepalat:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Opastimet
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Teiden palat:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Tie
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Raitiotie
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Vesiruudut:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Kanavat
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Asemat:
@ -4405,7 +4403,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Opastime
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Ei kelvollista rautatietä.
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Rautatie pitää poistaa ensin.
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Tie on yksisuuntainen tai suljettu
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Tasoristeykset eivät ole sallittu tälle raidetyypille
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Tasoristeykset eivät ole sallittu tälle raidetyypille
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Opastinta ei voi rakentaa.
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Rautatietä ei voi rakentaa.
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Rautatietä ei voi poistaa.

@ -3356,8 +3356,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infrastr
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Morceaux de voie ferrée{NBSP}:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Signaux
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Morceaux de route{NBSP}:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Route
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Tramway
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Cases d'eau{NBSP}:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Canaux
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Stations{NBSP}:
@ -4403,7 +4401,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Vous dev
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Aucuns rails convenables
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Vous devez d'abord enlever les rails
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}La route est à sens unique ou bloquée
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Les passages à niveau ne sont pas authorisés pour ce type de rails
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Les passages à niveau ne sont pas authorisés pour ce type de rails
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Impossible de construire des signaux ici...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Impossible de construire des rails ici...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Impossible de retirer les rails d'ici...

@ -3533,8 +3533,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Am bun-s
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Earrannan rèile:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Comharran
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Earrannan rathaid:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Rathad
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Slighe-trama
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Leacan uisge:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Canalan
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Stèiseanan:
@ -4563,7 +4561,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Feumaidh
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Chan eil slighe rèile iomchaidh ann
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Feumaidh tu an t-slighe rèile a thoirt air falbh an toiseach
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Rathad aon-shligheach no bacte
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Chan eil staranan-rèile ceadaichte leis an t-seòrsa dhe rèile seo
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Chan eil staranan-rèile ceadaichte leis an t-seòrsa dhe rèile seo
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Cha ghabh comharran togail an-seo...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Cha ghabh slighe-rèile togail an-seo...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Cha ghabh an t-slighe-rèile toirt air falbh an-seo...

@ -3259,8 +3259,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infraest
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Segmentos de vía de ferrocarril:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Sinais
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Segmentos de estrada:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Estrada
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE} Tranvía
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Cadros de auga:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Canles
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Estacións:
@ -4287,7 +4285,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Debes re
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Non hay vía de ferrocarril adecuada
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Debes elimina-la vía de ferrocarril primeiro
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}A estrada é de sentido único ou está bloqueada
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Non se permiten pasos a nivel con este tipo de carril
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Non se permiten pasos a nivel con este tipo de carril
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Non se poden construír sinais aquí...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Non se pode construír vía ferroviaria aquí...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Non se pode elimina-la vía ferroviaria de aquí...

@ -3884,8 +3884,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infrastr
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Schienenfelder:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Signale
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Straßenfelder:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Straße
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Straßenbahnfelder
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Wasserfelder:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Kanäle
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Stationen:
@ -5075,7 +5073,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Signal m
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Keine geeigneten Gleise
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Gleise müssen erst abgerissen werden
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Einbahnstraße oder blockierter Weg
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Bahnübergänge sind für diesen Schienentyp nicht erlaubt
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Bahnübergänge sind für diesen Schienentyp nicht erlaubt
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Signal kann hier nicht aufgestellt werden...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Gleise können hier nicht verlegt werden...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Gleise können nicht abgerissen werden...

@ -3462,8 +3462,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Υποδ
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Κομμάτια σιδηροτροχιάς:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Σήματα
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Κομμάτια δρόμου:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Δρόμος
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Τροχιόδρομος
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Τετραγωνίδια νερού:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Κανάλια
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Σταθμοί:
@ -4514,7 +4512,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Πρέπ
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Μη συμβατή σιδηροτροχιά
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Πρέπει να αφαιρεθεί ο σιδηρόδρομος πρώτα
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Η δρόμος είναι μονόδρομος ή μπλοκαρισμένος
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Δεν επιτρέπονται ισόπεδες διασταυρώσεις για αυτόν τον τύπο σιδηροδρόμου
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Δεν επιτρέπονται ισόπεδες διασταυρώσεις για αυτόν τον τύπο σιδηροδρόμου
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Δεν μπορούν να τοποθετοηθούν σηματοδότες εδώ...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Δεν μπορεί να κτιστεί σιδηρόδρομος εδώ...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Δεν μπορεί να αφαιρεθεί σιδηρόδρομος από εδώ...

@ -3312,8 +3312,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}תתיו
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}חלקי מסילה:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}רמזורים
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}חלקי כביש:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}כביש
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}מסילת רכבת קלה
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}משבצות מים:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}תעלות
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}תחנות:
@ -4342,7 +4340,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}יש ל
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}אין מסילת רכבת מתאימה
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}יש להסיר את המסילה הקיימת תחילה
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}כביש חד סיטרי או חסום
STR_ERROR_CROSSING_DISALLOWED :{WHITE}מפגשי כביש/מסילה אין אפשריים עבור סוג מסילה זה
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}מפגשי כביש/מסילה אין אפשריים עבור סוג מסילה זה
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}לא ניתן למקם רמזורים כאן...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}לא ניתן להניח פסי רכבת כאן...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}לא ניתן להסיר פסי רכבת ממשבצת זו...

@ -3419,8 +3419,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}{COMPANY
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Vasúti elemek:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Vasúti jelzők
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Közúti elemek:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Út
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Villamospálya
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Vízi elemek:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Csatornák
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Állomások:
@ -4466,7 +4464,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Előszö
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Nincs megfelelő vasúti pálya
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Előbb le kell rombolnod a vasúti pályát
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}... az út egyirányú vagy blokkolt
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Ehhez a síntipushoz nem megengedett vasúti átjárók építése
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Ehhez a síntipushoz nem megengedett vasúti átjárók építése
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Nem helyezhetsz ide jelzőt...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Nem építhetsz ide vasúti pályát...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Nem szedheted fel innen a vasúti pályát...

@ -3045,8 +3045,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Innviði
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Járnbrautarspor:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Umferðarmerki
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Vegir:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Vegir
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Sporvagnaspor
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Vatns reitir:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Skipaskurðir
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Stöðvar:
@ -4030,7 +4028,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Verður
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Ekkert hentugt járnbrautarspor
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Verður að fjarlægja járnbrautarspor fyrst
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Vegurinn er einstefnuvegur eða stíflaður
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Gatnamót ekki leyfð fyrir þessa tegund járnbrautarspora
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Gatnamót ekki leyfð fyrir þessa tegund járnbrautarspora
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Get ekki byggt umferðarmerki hér...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Get ekki byggt járnbrautarspor hér...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Get ekki fjarlægt járnbrautarspor héðan...

@ -3301,8 +3301,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infrastr
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Bagian rel:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Sinyal
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Bagian jalan:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Jalan raya
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Rel Trem
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Perairan:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Kanal
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Stasiun:
@ -4333,7 +4331,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Sinyal h
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Tidak tersedia rel yang sesuai
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Harus membongkar rel terlebih dahulu
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Jalannya satu arah atau terhalang
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Perlintasan tingkat tidak diperbolehkan pada tipe rel ini
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Perlintasan tingkat tidak diperbolehkan pada tipe rel ini
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Tidak dapat membangun sinyal disini
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Tidak dapat membangun jalur rel disini
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Tidak dapat menghapus jalur rel dari sini

@ -3254,8 +3254,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Bonneaga
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Píosaí iarnróid:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Comharthaí
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Píosaí bóthair:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Bóthar
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Trambhealach
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Tíleanna uisce:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Canálacha
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Stáisiúin:
@ -4267,7 +4265,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Ní mór
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Níl ráillí iarnróid feiliúnacha ann
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Ní mór na ráillí iarnróid a bhaint ar dtús
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Is bóthar aonbhealaigh nó blocáilte é
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Ní cheadaítear crosairí comhréidh don chineál ráille seo
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Ní cheadaítear crosairí comhréidh don chineál ráille seo
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Ní féidir comharthaí a thógáil anseo...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Ní féidir ráillí iarnróid a thógáil anseo...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Ní féidir ráillí iarnróid a bhaint as seo...

@ -3388,8 +3388,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infrastr
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Segmenti ferroviari:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Segnali
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Segmenti stradali:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Strada
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Tranvia
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Riquadri d'acqua:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Canali
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Stazioni:
@ -4435,7 +4433,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Bisogna
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Tipo di binari non adatti
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Bisogna rimuovere i binari prima
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}La strada è bloccata o a senso unico
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Passaggi a livello non consentiti per questo tipo di rotaia
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Passaggi a livello non consentiti per questo tipo di rotaia
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Impossibile costruire i segnali qui...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Impossibile costruire i binari qui...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Impossibile rimuovere i binari da qui...

@ -3319,8 +3319,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}{COMPANY
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}線路長:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}信号
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}道路長(含軌道):
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}道路
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}軌道
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}水運長:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}運河
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}停留施設数:
@ -4334,7 +4332,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}先に
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}適当な線路がありません
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}先に線路を撤去しなければなりません
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}道路は一方通行または進入禁止です
STR_ERROR_CROSSING_DISALLOWED :{WHITE}このレール種別との平面交差はできません
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}このレール種別との平面交差はできません
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}ここには信号を設置できません
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}ここには線路を建設できません
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}ここから線路を撤去できません

@ -4016,8 +4016,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}{COMPANY
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}철도 기반시설:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}신호기
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}도로 기반시설:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}도로
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}전찻길
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}해운 기반시설:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}운하
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}정거장 시설:
@ -5290,7 +5288,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}신호
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}알맞지 않은 선로입니다.
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}선로를 먼저 제거하십시오.
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}도로가 일방통행이거나 막혔습니다
STR_ERROR_CROSSING_DISALLOWED :{WHITE}이 철도 타입에서는 건널목을 만들 수 없습니다.
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}이 철도 타입에서는 건널목을 만들 수 없습니다.
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}여기에 신호기를 건설할 수 없습니다...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}여기에 선로를 건설할 수 없습니다...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}이 선로를 철거할 수 없습니다...

@ -3514,8 +3514,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infrastr
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Partes ferriviariae:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Signalia
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Partes viariae:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Viariae
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Ferriviae stratariae
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Tegulae aquariae:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Canales
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Stationes:
@ -4563,7 +4561,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Necesse
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Nulla astaria idonea
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Necesse est ferriviam removere
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Via est monodromus vel obstructa
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Non licet huic typo ferriviae habere transitus
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Non licet huic typo ferriviae habere transitus
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Non licet signalia hic struere...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Non licet ferriviam hic struere...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Non licet ferriviam removere hic...

@ -3197,8 +3197,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}{COMPANY
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Sliežu gabali:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Signālierīces
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Ceļa gabali:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Ceļš
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Tramvajs
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Ūdens lauciņi:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Kanāli
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Stacijas:
@ -4198,7 +4196,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Vispirms
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Nav piemērota sliežu ceļa
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Vispirms ir jānoņem dzelzceļa sliedes
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Ceļs ir bloķēts vai vienvirziena
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Vienlīmeņa krustojumi šīm sliedēm nav atļauti
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Vienlīmeņa krustojumi šīm sliedēm nav atļauti
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Šeit nevar būvēt signālierīces...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Šeit nevar būvēt dzelzceļa posmu...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Šeit nevar nojaukt dzelzceļa posmu...

@ -3473,8 +3473,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}{COMPANY
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Bėgių dalys:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Signalai
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Kelio dalys:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Kelias
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Tramvajus
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Vandens langeliai:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Kanalai
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Stotys:
@ -4542,7 +4540,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Pirma re
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Netinkamas bėgis
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Pirmiau pašalinkite geležinkelio bėgius
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Kelias vienpusis ar užblokuotas
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Sankryžos tame pačiame aukštyje neleidžiamos šiam bėgių tipui
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Sankryžos tame pačiame aukštyje neleidžiamos šiam bėgių tipui
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Šviesoforo čia statyti negalima ...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Begių čia statyti negalima...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Šių bėgių pašalinti negalima...

@ -3334,8 +3334,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infrastr
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Schinnestécker:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Signaler
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Stroossestécker:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Strooss
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Tram
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Waasserfelder:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Kanäl
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Statiounen:
@ -4377,7 +4375,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Signaler
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Keng gëeegent Schinnen
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}D'Schinne musse fir d'éischt ewech
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}D'Strooss ass eng Einbahn oder blockéiert
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Barrièren si fir dësen Schinnentyp net erlaabt
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Barrièren si fir dësen Schinnentyp net erlaabt
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Kann d'Signaler hei net bauen...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Kann d'Schinnen hei net bauen...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Kann d'Schinnen hei net ewech huelen...

@ -2955,8 +2955,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infrastr
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Cebisan landasan:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Isyarat
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Cebisan jalanraya:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Jalanraya
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Laluan Trem
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Petak air:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Terusan
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Stesen:
@ -3944,7 +3942,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Tanda-ta
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Tiada landasan keretapi yang sesuai
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Landasan keretapi mesti dibuang terlebih dahulu
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Jalanraya adalah sehala atau telah disekat
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Persimpangan bertingkat adalah tidak dibenarkan untuk jenis landasan ini
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Persimpangan bertingkat adalah tidak dibenarkan untuk jenis landasan ini
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Isyarat tidak dapat dibina di sini...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Landasan keretapi tidak dapat dibina di sini...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Landasan keretapi tidak dapat dibuang...

@ -3359,8 +3359,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infrastr
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Jernbanebiter:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Signaler
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Veibiter:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Vei
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Trikkespor
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Vannruter:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Kanaler
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Stasjoner:
@ -4407,7 +4405,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Må fjer
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Ingen passende jernbanespor
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Må fjerne jernbanespor først
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Veien er enveiskjørt eller blokkert
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Denne jernbanetypen tillater ikke planoverganger
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Denne jernbanetypen tillater ikke planoverganger
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Kan ikke bygge signaler her...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Kan ikke bygge jernbanespor her...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Kan ikke fjerne jernbanespor herfra...

@ -3173,8 +3173,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infrastr
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Togsporbitar:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Signal
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Vegstubbar:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Veg
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Trikkespor
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Vannruter:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Kanalar
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Stasjonar:
@ -4183,7 +4181,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Må fjer
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Upassande jernbanespor
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Må fjerne jernbanespor først
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Vegen er einvegskøyrd eller blokkert
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Overgang ikkje tillate for denne typen jernbane
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Overgang ikkje tillate for denne typen jernbane
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Kan ikkje byggje signaler her...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Kan ikkje byggje jernbanespor her...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Kan ikkje fjerne jernbanespor herfrå...

@ -3696,8 +3696,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infrastr
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Elementy kolei:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Sygnalizatory
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Elementy dróg:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Droga
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Tramwaj
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Pola wody:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Kanały
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Stacje:
@ -4734,7 +4732,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Należy
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Nieodpowiednie tory/brak torów
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Należy najpierw usunąć tory
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Droga jest jednokierunkowa lub zablokowana
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Przejazd kolejowy nie dozwolony dla tego typu torów
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Przejazd kolejowy nie dozwolony dla tego typu torów
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Nie można tutaj postawić sygnałów...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Nie można tutaj ułożyć torów...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Nie można stąd usunąć torów...

@ -3356,8 +3356,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infraest
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Secções de caminho-de-ferro:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Sinais
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Secções de estrada:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Estrada
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Via para elétricos
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Blocos de água:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Canais
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Estações:
@ -4403,7 +4401,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Deverá
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Tipo de linha não apropriado
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Deverá remover a linha férrea primeiro
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Estrada de sentido único ou bloqueada
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Passagens de nível não são permitidas para este tipo de linha
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Passagens de nível não são permitidas para este tipo de linha
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Não é possível construir sinais aqui...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Não é possível construir linha férrea aqui...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Não é possível remover linha férrea daqui...

@ -3238,8 +3238,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infrastr
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Pătrățele de cale ferată:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Semnale
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Pătrățele cu drumuri:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Drumuri
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Tramvaie
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Suprafață apă:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Canale
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Stații:
@ -4252,7 +4250,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Trebuie
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Cale ferată nepotrivită
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Mai întâi trebuie înlăturată calea ferată
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Drum cu sens unic sau blocat
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Trecerea la nivel nu este permisă pentru acest tip de cale ferată
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Trecerea la nivel nu este permisă pentru acest tip de cale ferată
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Nu se pot plasa semafoare aici...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Nu se poate construi cale ferată aici...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Nu se poate înlătura calea ferată...

@ -3544,8 +3544,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Инфр
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Ж/д участки:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Сигналы
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Дорожные участки:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Автодороги
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Трамвайные пути
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Водные участки:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Каналы
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Станции:
@ -4614,7 +4612,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Снач
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Нет подходящих рельсов
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Сначала удалите рельсы
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Дорога односторонняя или заблокирована
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Через этот вид рельсов запрещено строить переезды
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Через этот вид рельсов запрещено строить переезды
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Здесь невозможно поставить сигнал...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Здесь невозможно проложить рельсы...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Не удалось удалить рельсы...

@ -3465,8 +3465,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infrastr
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Delova pruge:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Signalizacija
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Delova druma:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Drum
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Tramvajska pruga
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Pločica sa vodom:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Kanali
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Stanice:
@ -4510,7 +4508,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Neophodn
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Nedostaje odgovarajuća železnička pruga
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Potrebno je prvo ukloniti železničku prugu
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Put je jednosmeran ili je blokiran
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Putni prelaz nije dozvoljen za ovu vrstu pruge
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Putni prelaz nije dozvoljen za ovu vrstu pruge
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Izgradnja signalizacije ovde nije moguća...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Izgradnja železničke pruge ovde nije moguća...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Nemoguće je ukloniti železničku prugu odatle...

@ -3279,8 +3279,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}{COMPANY
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}铁路:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}信号灯
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}道路:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}普通道路
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}电车线路
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}水运:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}运河
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}站台:
@ -4305,7 +4303,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}必须
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}没有合适的轨道
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}必须先拆除轨道
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}这是单行道或这条路被堵死了
STR_ERROR_CROSSING_DISALLOWED :{WHITE}该轨道类型不允许建设平交道
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}该轨道类型不允许建设平交道
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}不能在这里设置信号灯……
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}不能在这里铺设轨道……
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}不能从这里拆除轨道……

@ -3322,8 +3322,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infrašt
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Políčka železnice:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Semafóry
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Políčka cesty:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Cesta
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Električka
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Vodné políčka:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Kanále
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Stanice:
@ -4335,7 +4333,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Najprv j
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Žiadne použiteľné železničné koľaje
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Musíš najskôr odstrániť železničné koľaje
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Cesta je jednosmerná alebo blokovaná.
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Nie sú povolené priecestia pre tento typ železníc
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Nie sú povolené priecestia pre tento typ železníc
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Nemôžeš tu stavať návestidlá...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Nemôžeš tu stavať železničné koľaje...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Nemôžeš tu odstrániť železničné koľaje...

@ -3408,8 +3408,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infrastr
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Kosi tirov:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Signali
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Odseki cest:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Cesta
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Tramvaj
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Polja vode:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Kanali
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Postaje:
@ -4422,7 +4420,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Najprej
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Ni primernih tračnic
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Najprej moraš odstraniti tračnice
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Cesta je enosmerna ali blokirana
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Istonivojna križišča niso dovoljena za ta tip železnice
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Istonivojna križišča niso dovoljena za ta tip železnice
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Tukaj ni mogoče zgraditi signalov...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Tukaj ni mogoče zgraditi železniških tirov...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Tukaj ni mogoče odstraniti železniških tirov...

@ -3303,8 +3303,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infraest
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Trozos de ferrocarril:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Señales
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Trozos de carretera:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Carretera
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Tranvía
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Casillas de agua:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Canales
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Estaciones:
@ -4335,7 +4333,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Primero
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Tramo de ferrocarril no apropiado
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Primero se debe retirar tramo de ferrocarril
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Carretera de un solo sentido o bloqueada
STR_ERROR_CROSSING_DISALLOWED :{WHITE}No se permiten pasos a nivel para este tipo de ferrocarril
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}No se permiten pasos a nivel para este tipo de ferrocarril
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}No se pueden construir señales aquí...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}No se pueden construir ferrocarriles aquí...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}No se pueden retirar ferrocarriles aquí...

@ -3357,8 +3357,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infraest
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Tramos de vías férreas:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Señales
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Tramos de carretera:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Carretera
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Tranvía
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Casillas de agua:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Canales
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Estaciones:
@ -4404,7 +4402,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Primero
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Tramo de vías férreas no apropiado
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Primero se debe quitar el tramo de vías férreas
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Carretera de un solo sentido o bloqueada
STR_ERROR_CROSSING_DISALLOWED :{WHITE}No se permiten pasos a nivel para este tipo de vías férreas
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}No se permiten pasos a nivel para este tipo de vías férreas
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}No se pueden instalar señales aquí...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}No se pueden construir vías férreas aquí...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}No se pueden quitar vías férreas de aquí...

@ -3333,8 +3333,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infrastr
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Järnvägsbitar:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Signaler
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Vägbitar:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Väg
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Spårväg
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Vattenrutor:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Kanaler
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Stationer:
@ -4368,7 +4366,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Måste t
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Inget passande järnvägsspår
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Måste ta bort järnväg först
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Vägen är enkelriktad eller blockerad
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Plankorsningar är inte tillåtna för denna typ av spår
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Plankorsningar är inte tillåtna för denna typ av spår
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Kan inte bygga signaler här...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Kan inte bygga järnvägsspår här...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Kan inte ta bort järnvägspår här...

@ -2879,8 +2879,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}{COMPANY
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}இரயில் பாகங்கள்:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}சிக்னல்கள்
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}சாலை பாகங்கள்:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}சாலை
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}ட்ராம்வே
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}தண்ணீர் வட்டங்கள்:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}கால்வாய்கள்
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}நிலையங்கள்:
@ -3821,7 +3819,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}மு
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}தக்க இரயில் தடம் ஏதும் இல்லை
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}முதலில் இரயில்வே தடத்தினை எடுக்க வேண்டும்
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}சாலை ஒருவழிப்பாதை அல்லது மறிக்கப்பட்டுள்ளது
STR_ERROR_CROSSING_DISALLOWED :{WHITE}இந்த வகையிலான இரயில்களுக்கு இருப்புப்பாதை சந்திக் கடவுகள் கிடையாது
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}இந்த வகையிலான இரயில்களுக்கு இருப்புப்பாதை சந்திக் கடவுகள் கிடையாது
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}இங்கே சிக்னல்களை நிறுவ இயலாது...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}இங்கே இரயில்வே தடங்களை பதிய முடியாது...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}இங்கிருந்து இரயில்வே தடங்களை அகற்ற முடியாது...

@ -3186,8 +3186,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}โค
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}ชิ้นส่วนทางรถไฟ:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}เสาอาณัติสัญญาณ
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}ชิ้นส่วนถนน:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}ถนน
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}ทางรถราง
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}คลอง:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}คลอง
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}สถานี:
@ -4180,7 +4178,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}ต้
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}ไม่มีรางรถไฟที่เหมาะสม
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}ต้องทำลายทางรถไฟทิ้งเสียก่อน
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}ถนนเป็นทางเดียวหรือถูกปิดกั้น
STR_ERROR_CROSSING_DISALLOWED :{WHITE}ทางตัดเสมอระดับทางไม่อนุญาตให้ตัดผ่านทางประเภทนี้
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}ทางตัดเสมอระดับทางไม่อนุญาตให้ตัดผ่านทางประเภทนี้
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}ไม่สามารถสร้างเสาอาณัติสัญญาณได้...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}บริเวณนี้ไม่สามารถสร้างรางรถไฟได้...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}ตรงนี้ไม่สามารถลบรางรถไฟออกไปได้

@ -3254,8 +3254,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}{COMPANY
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}鐵路區塊:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}號誌
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}道路區塊:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}道路
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}路面電車
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}水道或海運設施:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}運河
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}車站:
@ -4267,7 +4265,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}必須
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}沒有適合的鐵軌
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}必須先移除鐵路
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}道路是單行道或已封閉
STR_ERROR_CROSSING_DISALLOWED :{WHITE}這種軌道不能建設平交道
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}這種軌道不能建設平交道
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}無法在此興建號誌...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}無法在此鋪設鐵路...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}不能從這邊移除鐵路...

@ -3342,8 +3342,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}{COMPANY
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Demiryolu parçaları:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Sinyaller
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Karayolu parçaları:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Karayolu
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Tramvay
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Su kareleri:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Kanallar
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}İstasyonlar:
@ -4377,7 +4375,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Önce i
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Uygun ray yok
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Önce ray kaldırılmalı
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Yol tek yönlü veya kapalı
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Bu ray türü için hemzemin geçit yapılamaz
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Bu ray türü için hemzemin geçit yapılamaz
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Buraya sinyal yapılamıyor...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Buraya ray yapılamıyor...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Buradan ray kaldırılamıyor...

@ -3484,8 +3484,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Інфр
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Залізничні ділянки:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}З сигналами
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Дорожні ділянки:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Автомобільні
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Трамвайні
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Судноплавні ділянки:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Канали
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Станції:
@ -4519,7 +4517,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Споч
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Невідповідний тип колії
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Спочатку приберіть колію
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Дорога з одностороннім рухом або блокована
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Переїзди для такого виду колії є забороненими
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Переїзди для такого виду колії є забороненими
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Неможливо будувати сигнали тут...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Неможливо будувати колію тут...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Неможливо прибрати колію звідси...

@ -3009,8 +3009,6 @@ STR_BUY_COMPANY_MESSAGE :{WHITE}Wy sykje
STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Ynfrastruktuer fan {COMPANY}
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Seinen
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Stikjes dyk:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Dyk
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Tramwei
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Stasjons:
STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS :{WHITE}Stasjontegels
STR_COMPANY_INFRASTRUCTURE_VIEW_AIRPORTS :{WHITE}Fleanfjilden
@ -3821,7 +3819,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Stopljoc
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Spoar is net geskikt
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Spoar moat der earst wei
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Dyk is in ienrjochtingsdyk of blokearre
STR_ERROR_CROSSING_DISALLOWED :{WHITE}In oergong is net tastien foar dit type spoar
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}In oergong is net tastien foar dit type spoar
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Kin hjir gjin stopljochten boue...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Kin hjir gjin spoarwei boue
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Kin hjir gjin spoar fuorthelje...

@ -1399,8 +1399,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Инфр
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}железнички парчиња:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}сигнали
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Патот парчиња:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}патот
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}трамвај
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Вода плочки:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}каналите
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}станици:
@ -1768,7 +1766,7 @@ STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Не а
STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(лимит на пари)
# Rail construction errors
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Ниво, нема премини се дозволени за овој вид железнички
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Ниво, нема премини се дозволени за овој вид железнички
STR_ERROR_THERE_IS_NO_RAILROAD_TRACK :{WHITE}... не постои железничка пруга
STR_ERROR_THERE_ARE_NO_SIGNALS :{WHITE}... постојат никакви сигнали

@ -2875,8 +2875,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}زیرس
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}قطعه های ریل:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}نشانگرها
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}قطعه های راه:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}راه
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}تراموا
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}قسمتهای زیر آب:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}کانال ها
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}ایستگاه ها:

@ -2302,8 +2302,6 @@ STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :بتائیں آ
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}ریل کے ٹکڑے
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}اشارے
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}سڑک کے ٹکرے
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}سڑک
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}ٹرام وے
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}پانی کی ٹائل
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}نہریں
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD} اسٹیشن:

@ -3317,8 +3317,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Hạ t
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Ô đường ray:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Tín hiệu
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Ô đường bộ:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Đường bộ
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Xe điện
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Ô là nước:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Kênh đào
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Ga, bến:
@ -4346,7 +4344,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Phải b
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Không có đường ray thích hợp
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Phải phá bỏ đường ray trước
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Đường một chiều hoặc bị chặn
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Đường giao nhau không cho phép với loại ray này
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Đường giao nhau không cho phép với loại ray này
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Không thể xây đèn hiệu ở đây...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Không thể xây đường ray ở đây...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Không thể phá bỏ đường ray ở đây...

@ -3258,8 +3258,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Tanadeil
STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Darnau rheilffordd:
STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Signalau
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Darnau ffordd:
STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Ffordd
STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Tramffordd
STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Teiliau dŵr:
STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Camlesi
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Gorsafoedd:
@ -4286,7 +4284,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Rhaid ty
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Dim trac rheilffordd addas
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Rhaid tynnu'r trac rheilffordd yn gyntaf
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Mae'r ffordd yn ffordd un-ffordd, neu wedi'i blocio
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Ni chaniateir croesfannau ar y cledrau yma
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Ni chaniateir croesfannau ar y cledrau yma
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Methu adeiladu signalau yma...
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Methu adeiladu trac rheilffordd yma...
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Methu tynnu trac rheilffordd oddi yma...

@ -519,8 +519,8 @@ void DumpMapStats(char *b, const char *last)
if (IsTunnelBridgeSignalSimulationBidirectional(t)) bucket |= TBB_SIGNALLED_BIDI;
}
if (GetTunnelBridgeTransportType(t) == TRANSPORT_ROAD) {
if (HasTileRoadType(t, ROADTYPE_ROAD)) bucket |= TBB_ROAD;
if (HasTileRoadType(t, ROADTYPE_TRAM)) bucket |= TBB_TRAM;
if (HasTileRoadType(t, RTT_ROAD)) bucket |= TBB_ROAD;
if (HasTileRoadType(t, RTT_TRAM)) bucket |= TBB_TRAM;
}
if (GetTunnelBridgeTransportType(t) == TRANSPORT_RAIL) bucket |= TBB_RAIL;
if (GetTunnelBridgeTransportType(t) == TRANSPORT_WATER) bucket |= TBB_WATER;

@ -177,7 +177,10 @@ public:
td.railtype2 = STR_NULL;
td.rail_speed = 0;
td.rail_speed2 = 0;
td.roadtype = STR_NULL;
td.road_speed = 0;
td.tramtype = STR_NULL;
td.tram_speed = 0;
td.grf = nullptr;
@ -312,6 +315,13 @@ public:
line_nr++;
}
/* Road type name */
if (td.roadtype != STR_NULL) {
SetDParam(0, td.roadtype);
GetString(this->landinfo_data[line_nr], STR_LANG_AREA_INFORMATION_ROAD_TYPE, lastof(this->landinfo_data[line_nr]));
line_nr++;
}
/* Road speed limit */
if (td.road_speed != 0) {
SetDParam(0, td.road_speed);
@ -319,6 +329,20 @@ public:
line_nr++;
}
/* Tram type name */
if (td.tramtype != STR_NULL) {
SetDParam(0, td.tramtype);
GetString(this->landinfo_data[line_nr], STR_LANG_AREA_INFORMATION_TRAM_TYPE, lastof(this->landinfo_data[line_nr]));
line_nr++;
}
/* Tram speed limit */
if (td.tram_speed != 0) {
SetDParam(0, td.tram_speed);
GetString(this->landinfo_data[line_nr], STR_LANG_AREA_INFORMATION_TRAM_SPEED_LIMIT, lastof(this->landinfo_data[line_nr]));
line_nr++;
}
/* NewGRF name */
if (td.grf != nullptr) {
SetDParamStr(0, td.grf);

@ -48,6 +48,7 @@
#include "vehicle_func.h"
#include "language.h"
#include "vehicle_base.h"
#include "road.h"
#include "table/strings.h"
#include "table/build_industry.h"
@ -313,6 +314,7 @@ struct GRFTempEngineData {
uint16 cargo_allowed;
uint16 cargo_disallowed;
RailTypeLabel railtypelabel;
uint8 roadtramtype;
const GRFFile *defaultcargo_grf; ///< GRF defining the cargo translation table to use if the default cargo is the 'first refittable'.
Refittability refittability; ///< Did the newgrf set any refittability property? If not, default refittability will be applied.
bool prop27_set; ///< Did the NewGRF set property 27 (misc flags)?
@ -1380,6 +1382,12 @@ static ChangeInfoResult RoadVehicleChangeInfo(uint engine, int numinfo, int prop
RoadVehicleInfo *rvi = &e->u.road;
switch (prop) {
case 0x05: // Road/tram type
/* RoadTypeLabel is looked up later after the engine's road/tram
* flag is set, however 0 means the value has not been set. */
_gted[e->index].roadtramtype = buf->ReadByte() + 1;
break;
case 0x08: // Speed (1 unit is 0.5 kmh)
rvi->max_speed = buf->ReadByte();
break;
@ -2686,6 +2694,12 @@ static ChangeInfoResult GlobalVarChangeInfo(uint gvid, int numinfo, int prop, co
case 0x12: // Rail type translation table; loading during both reservation and activation stage (in case it is selected depending on defined railtypes)
return LoadTranslationTable(gvid, numinfo, buf, _cur.grffile->railtype_list, "Rail type");
case 0x16: // Road type translation table; loading during both reservation and activation stage (in case it is selected depending on defined railtypes)
return LoadTranslationTable(gvid, numinfo, buf, _cur.grffile->roadtype_list, "Road type");
case 0x17: // Tram type translation table; loading during both reservation and activation stage (in case it is selected depending on defined railtypes)
return LoadTranslationTable(gvid, numinfo, buf, _cur.grffile->tramtype_list, "Tram type");
default:
break;
}
@ -2901,6 +2915,12 @@ static ChangeInfoResult GlobalVarReserveInfo(uint gvid, int numinfo, int prop, c
case 0x12: // Rail type translation table; loading during both reservation and activation stage (in case it is selected depending on defined railtypes)
return LoadTranslationTable(gvid, numinfo, buf, _cur.grffile->railtype_list, "Rail type");
case 0x16: // Road type translation table; loading during both reservation and activation stage (in case it is selected depending on defined roadtypes)
return LoadTranslationTable(gvid, numinfo, buf, _cur.grffile->roadtype_list, "Road type");
case 0x17: // Tram type translation table; loading during both reservation and activation stage (in case it is selected depending on defined tramtypes)
return LoadTranslationTable(gvid, numinfo, buf, _cur.grffile->tramtype_list, "Tram type");
default:
break;
}
@ -4442,6 +4462,228 @@ static ChangeInfoResult RailTypeReserveInfo(uint id, int numinfo, int prop, cons
return ret;
}
/**
* Define properties for roadtypes
* @param id ID of the roadtype.
* @param numinfo Number of subsequent IDs to change the property for.
* @param prop The property to change.
* @param buf The property value.
* @return ChangeInfoResult.
*/
static ChangeInfoResult RoadTypeChangeInfo(uint id, int numinfo, int prop, const GRFFilePropertyRemapEntry *mapping_entry, ByteReader *buf, RoadTramType rtt)
{
ChangeInfoResult ret = CIR_SUCCESS;
extern RoadTypeInfo _roadtypes[ROADTYPE_END];
RoadType *type_map = (rtt == RTT_TRAM) ? _cur.grffile->tramtype_map : _cur.grffile->roadtype_map;
if (id + numinfo > ROADTYPE_END) {
grfmsg(1, "RoadTypeChangeInfo: Road type %u is invalid, max %u, ignoring", id + numinfo, ROADTYPE_END);
return CIR_INVALID_ID;
}
for (int i = 0; i < numinfo; i++) {
RoadType rt = type_map[id + i];
if (rt == INVALID_ROADTYPE) return CIR_INVALID_ID;
RoadTypeInfo *rti = &_roadtypes[rt];
switch (prop) {
case 0x08: // Label of road type
/* Skipped here as this is loaded during reservation stage. */
buf->ReadDWord();
break;
case 0x09: { // Toolbar caption of roadtype (sets name as well for backwards compatibility for grf ver < 8)
uint16 str = buf->ReadWord();
AddStringForMapping(str, &rti->strings.toolbar_caption);
break;
}
case 0x0A: // Menu text of roadtype
AddStringForMapping(buf->ReadWord(), &rti->strings.menu_text);
break;
case 0x0B: // Build window caption
AddStringForMapping(buf->ReadWord(), &rti->strings.build_caption);
break;
case 0x0C: // Autoreplace text
AddStringForMapping(buf->ReadWord(), &rti->strings.replace_text);
break;
case 0x0D: // New engine text
AddStringForMapping(buf->ReadWord(), &rti->strings.new_engine);
break;
case 0x0F: // Powered roadtype list
case 0x18: // Roadtype list required for date introduction
case 0x19: { // Introduced roadtype list
/* Road type compatibility bits are added to the existing bits
* to allow multiple GRFs to modify compatibility with the
* default road types. */
int n = buf->ReadByte();
for (int j = 0; j != n; j++) {
RoadTypeLabel label = buf->ReadDWord();
RoadType rt = GetRoadTypeByLabel(BSWAP32(label), false);
if (rt != INVALID_ROADTYPE) {
switch (prop) {
case 0x0F: SetBit(rti->powered_roadtypes, rt); break;
case 0x18: SetBit(rti->introduction_required_roadtypes, rt); break;
case 0x19: SetBit(rti->introduces_roadtypes, rt); break;
}
}
}
break;
}
case 0x10: // Road Type flags
rti->flags = (RoadTypeFlags)buf->ReadByte();
break;
case 0x13: // Construction cost factor
rti->cost_multiplier = buf->ReadWord();
break;
case 0x14: // Speed limit
rti->max_speed = buf->ReadWord();
break;
case 0x16: // Map colour
rti->map_colour = buf->ReadByte();
break;
case 0x17: // Introduction date
rti->introduction_date = buf->ReadDWord();
break;
case 0x1A: // Sort order
rti->sorting_order = buf->ReadByte();
break;
case 0x1B: // Name of roadtype
AddStringForMapping(buf->ReadWord(), &rti->strings.name);
break;
case 0x1C: // Maintenance cost factor
rti->maintenance_multiplier = buf->ReadWord();
break;
case 0x1D: // Alternate road type label list
/* Skipped here as this is loaded during reservation stage. */
for (int j = buf->ReadByte(); j != 0; j--) buf->ReadDWord();
break;
default:
ret = CIR_UNKNOWN;
break;
}
}
return ret;
}
static ChangeInfoResult RoadTypeChangeInfo(uint id, int numinfo, int prop, const GRFFilePropertyRemapEntry *mapping_entry, ByteReader *buf)
{
return RoadTypeChangeInfo(id, numinfo, prop, mapping_entry, buf, RTT_ROAD);
}
static ChangeInfoResult TramTypeChangeInfo(uint id, int numinfo, int prop, const GRFFilePropertyRemapEntry *mapping_entry, ByteReader *buf)
{
return RoadTypeChangeInfo(id, numinfo, prop, mapping_entry, buf, RTT_TRAM);
}
static ChangeInfoResult RoadTypeReserveInfo(uint id, int numinfo, int prop, const GRFFilePropertyRemapEntry *mapping_entry, ByteReader *buf, RoadTramType rtt)
{
ChangeInfoResult ret = CIR_SUCCESS;
extern RoadTypeInfo _roadtypes[ROADTYPE_END];
RoadType *type_map = (rtt == RTT_TRAM) ? _cur.grffile->tramtype_map : _cur.grffile->roadtype_map;
if (id + numinfo > ROADTYPE_END) {
grfmsg(1, "RoadTypeReserveInfo: Road type %u is invalid, max %u, ignoring", id + numinfo, ROADTYPE_END);
return CIR_INVALID_ID;
}
for (int i = 0; i < numinfo; i++) {
switch (prop) {
case 0x08: { // Label of road type
RoadTypeLabel rtl = buf->ReadDWord();
rtl = BSWAP32(rtl);
RoadType rt = GetRoadTypeByLabel(rtl, false);
if (rt == INVALID_ROADTYPE) {
/* Set up new road type */
rt = AllocateRoadType(rtl, rtt);
} else if (GetRoadTramType(rt) != rtt) {
grfmsg(1, "RoadTypeReserveInfo: Road type %u is invalid type (road/tram), ignoring", id + numinfo);
return CIR_INVALID_ID;
}
type_map[id + i] = rt;
break;
}
case 0x09: // Toolbar caption of roadtype
case 0x0A: // Menu text
case 0x0B: // Build window caption
case 0x0C: // Autoreplace text
case 0x0D: // New loco
case 0x13: // Construction cost
case 0x14: // Speed limit
case 0x1B: // Name of roadtype
case 0x1C: // Maintenance cost factor
buf->ReadWord();
break;
case 0x1D: // Alternate road type label list
if (type_map[id + i] != INVALID_ROADTYPE) {
int n = buf->ReadByte();
for (int j = 0; j != n; j++) {
_roadtypes[type_map[id + i]].alternate_labels.push_back(BSWAP32(buf->ReadDWord()));
}
break;
}
grfmsg(1, "RoadTypeReserveInfo: Ignoring property 1D for road type %u because no label was set", id + i);
/* FALL THROUGH */
case 0x0F: // Powered roadtype list
case 0x18: // Roadtype list required for date introduction
case 0x19: // Introduced roadtype list
for (int j = buf->ReadByte(); j != 0; j--) buf->ReadDWord();
break;
case 0x10: // Road Type flags
case 0x12: // Station graphic
case 0x15: // Acceleration model
case 0x16: // Map colour
case 0x1A: // Sort order
buf->ReadByte();
break;
case 0x17: // Introduction date
buf->ReadDWord();
break;
default:
ret = CIR_UNKNOWN;
break;
}
}
return ret;
}
static ChangeInfoResult RoadTypeReserveInfo(uint id, int numinfo, int prop, const GRFFilePropertyRemapEntry *mapping_entry, ByteReader *buf)
{
return RoadTypeReserveInfo(id, numinfo, prop, mapping_entry, buf, RTT_ROAD);
}
static ChangeInfoResult TramTypeReserveInfo(uint id, int numinfo, int prop, const GRFFilePropertyRemapEntry *mapping_entry, ByteReader *buf)
{
return RoadTypeReserveInfo(id, numinfo, prop, mapping_entry, buf, RTT_TRAM);
}
static ChangeInfoResult AirportTilesChangeInfo(uint airtid, int numinfo, int prop, const GRFFilePropertyRemapEntry *mapping_entry, ByteReader *buf)
{
ChangeInfoResult ret = CIR_SUCCESS;
@ -4626,6 +4868,8 @@ static void FeatureChangeInfo(ByteReader *buf)
/* GSF_OBJECTS */ ObjectChangeInfo,
/* GSF_RAILTYPES */ RailTypeChangeInfo,
/* GSF_AIRPORTTILES */ AirportTilesChangeInfo,
/* GSF_ROADTYPES */ RoadTypeChangeInfo,
/* GSF_TRAMTYPES */ TramTypeChangeInfo,
};
static_assert(lengthof(handler) == lengthof(_cur.grffile->action0_property_remaps), "Action 0 feature list length mismatch");
@ -4700,7 +4944,7 @@ static void ReserveChangeInfo(ByteReader *buf)
{
uint8 feature = buf->ReadByte();
if (feature != GSF_CARGOES && feature != GSF_GLOBALVAR && feature != GSF_RAILTYPES) return;
if (feature != GSF_CARGOES && feature != GSF_GLOBALVAR && feature != GSF_RAILTYPES && feature != GSF_ROADTYPES && feature != GSF_TRAMTYPES) return;
uint8 numprops = buf->ReadByte();
uint8 numinfo = buf->ReadByte();
@ -4723,6 +4967,14 @@ static void ReserveChangeInfo(ByteReader *buf)
case GSF_RAILTYPES:
cir = RailTypeReserveInfo(index, numinfo, desc.prop, desc.entry, buf);
break;
case GSF_ROADTYPES:
cir = RoadTypeReserveInfo(index, numinfo, desc.prop, desc.entry, buf);
break;
case GSF_TRAMTYPES:
cir = TramTypeReserveInfo(index, numinfo, desc.prop, desc.entry, buf);
break;
}
if (HandleChangeInfoResult("ReserveChangeInfo", cir, feature, desc.prop)) return;
@ -5035,6 +5287,8 @@ static void NewSpriteGroup(ByteReader *buf)
case GSF_CARGOES:
case GSF_AIRPORTS:
case GSF_RAILTYPES:
case GSF_ROADTYPES:
case GSF_TRAMTYPES:
{
byte num_loaded = type;
byte num_loading = buf->ReadByte();
@ -5612,6 +5866,39 @@ static void RailTypeMapSpriteGroup(ByteReader *buf, uint8 idcount)
buf->ReadWord();
}
static void RoadTypeMapSpriteGroup(ByteReader *buf, uint8 idcount, RoadTramType rtt)
{
RoadType *type_map = (rtt == RTT_TRAM) ? _cur.grffile->tramtype_map : _cur.grffile->roadtype_map;
uint8 *roadtypes = AllocaM(uint8, idcount);
for (uint i = 0; i < idcount; i++) {
uint8 id = buf->ReadByte();
roadtypes[i] = id < ROADTYPE_END ? type_map[id] : INVALID_ROADTYPE;
}
uint8 cidcount = buf->ReadByte();
for (uint c = 0; c < cidcount; c++) {
uint8 ctype = buf->ReadByte();
uint16 groupid = buf->ReadWord();
if (!IsValidGroupID(groupid, "RoadTypeMapSpriteGroup")) continue;
if (ctype >= ROTSG_END) continue;
extern RoadTypeInfo _roadtypes[ROADTYPE_END];
for (uint i = 0; i < idcount; i++) {
if (roadtypes[i] != INVALID_ROADTYPE) {
RoadTypeInfo *rti = &_roadtypes[roadtypes[i]];
rti->grffile[ctype] = _cur.grffile;
rti->group[ctype] = _cur.spritegroups[groupid];
}
}
}
/* Roadtypes do not use the default group. */
buf->ReadWord();
}
static void AirportMapSpriteGroup(ByteReader *buf, uint8 idcount)
{
uint8 *airports = AllocaM(uint8, idcount);
@ -5762,6 +6049,14 @@ static void FeatureMapSpriteGroup(ByteReader *buf)
RailTypeMapSpriteGroup(buf, idcount);
break;
case GSF_ROADTYPES:
RoadTypeMapSpriteGroup(buf, idcount, RTT_ROAD);
break;
case GSF_TRAMTYPES:
RoadTypeMapSpriteGroup(buf, idcount, RTT_TRAM);
break;
case GSF_AIRPORTTILES:
AirportTileMapSpriteGroup(buf, idcount);
return;
@ -6030,6 +6325,15 @@ static void GraphicsNew(ByteReader *buf)
/* Load <num> sprites starting from <replace>, then skip <skip_num> sprites. */
grfmsg(2, "GraphicsNew: Replacing sprites %d to %d of %s (type 0x%02X) at SpriteID 0x%04X", offset, offset + num - 1, action5_type->name, type, replace);
if (type == 0x0D) _loaded_newgrf_features.shore = SHORE_REPLACE_ACTION_5;
if (type == 0x0B) {
static const SpriteID depot_with_track_offset = SPR_TRAMWAY_DEPOT_WITH_TRACK - SPR_TRAMWAY_BASE;
static const SpriteID depot_no_track_offset = SPR_TRAMWAY_DEPOT_NO_TRACK - SPR_TRAMWAY_BASE;
if (offset <= depot_with_track_offset && offset + num > depot_with_track_offset) _loaded_newgrf_features.tram = TRAMWAY_REPLACE_DEPOT_WITH_TRACK;
if (offset <= depot_no_track_offset && offset + num > depot_no_track_offset) _loaded_newgrf_features.tram = TRAMWAY_REPLACE_DEPOT_NO_TRACK;
}
for (uint16 n = num; n > 0; n--) {
_cur.nfo_line++;
LoadNextSprite(replace == 0 ? _cur.spriteid++ : replace++, _cur.file_index, _cur.nfo_line, _cur.grf_container_ver);
@ -6043,8 +6347,6 @@ static void GraphicsNew(ByteReader *buf)
}
}
if (type == 0x0D) _loaded_newgrf_features.shore = SHORE_REPLACE_ACTION_5;
_cur.skip_sprites = skip_num;
}
@ -6468,6 +6770,14 @@ static void SkipIf(ByteReader *buf)
break;
case 0x0E: result = GetRailTypeByLabel(BSWAP32(cond_val)) != INVALID_RAILTYPE;
break;
case 0x0F: result = GetRoadTypeByLabel(BSWAP32(cond_val)) == INVALID_ROADTYPE;
break;
case 0x10: result = GetRoadTypeByLabel(BSWAP32(cond_val)) != INVALID_ROADTYPE;
break;
case 0x11: result = GetRoadTypeByLabel(BSWAP32(cond_val)) == INVALID_ROADTYPE;
break;
case 0x12: result = GetRoadTypeByLabel(BSWAP32(cond_val)) != INVALID_ROADTYPE;
break;
default: grfmsg(1, "SkipIf: Unsupported condition type %02X. Ignoring", condtype); return;
}
@ -8830,6 +9140,9 @@ void ResetNewGRFData()
/* Reset rail type information */
ResetRailTypes();
/* Copy/reset original road type info data */
ResetRoadTypes();
/* Allocate temporary refit/cargo class data */
_gted = CallocT<GRFTempEngineData>(Engine::GetPoolSize());
@ -8898,6 +9211,7 @@ void ResetNewGRFData()
_loaded_newgrf_features.has_newhouses = false;
_loaded_newgrf_features.has_newindustries = false;
_loaded_newgrf_features.shore = SHORE_REPLACE_NONE;
_loaded_newgrf_features.tram = TRAMWAY_REPLACE_DEPOT_NONE;
/* Clear all GRF overrides */
_grf_id_overrides.clear();
@ -8985,6 +9299,14 @@ GRFFile::GRFFile(const GRFConfig *config)
this->railtype_map[2] = RAILTYPE_MONO;
this->railtype_map[3] = RAILTYPE_MAGLEV;
/* Initialise road type map with default road types */
memset(this->roadtype_map, INVALID_ROADTYPE, sizeof(this->roadtype_map));
this->roadtype_map[0] = ROADTYPE_ROAD;
/* Initialise tram type map with default tram types */
memset(this->tramtype_map, INVALID_ROADTYPE, sizeof(this->tramtype_map));
this->tramtype_map[0] = ROADTYPE_TRAM;
/* Copy the initial parameter list
* 'Uninitialised' parameters are zeroed as that is their default value when dynamically creating them. */
assert_compile(lengthof(this->param) == lengthof(config->param) && lengthof(this->param) == 0x80);
@ -9754,6 +10076,21 @@ static void ActivateOldShore()
}
}
/**
* Replocate the old tram depot sprites to the new position, if no new ones were loaded.
*/
static void ActivateOldTramDepot()
{
if (_loaded_newgrf_features.tram == TRAMWAY_REPLACE_DEPOT_WITH_TRACK) {
DupSprite(SPR_ROAD_DEPOT + 0, SPR_TRAMWAY_DEPOT_NO_TRACK + 0); // use road depot graphics for "no tracks"
DupSprite(SPR_TRAMWAY_DEPOT_WITH_TRACK + 1, SPR_TRAMWAY_DEPOT_NO_TRACK + 1);
DupSprite(SPR_ROAD_DEPOT + 2, SPR_TRAMWAY_DEPOT_NO_TRACK + 2); // use road depot graphics for "no tracks"
DupSprite(SPR_TRAMWAY_DEPOT_WITH_TRACK + 3, SPR_TRAMWAY_DEPOT_NO_TRACK + 3);
DupSprite(SPR_TRAMWAY_DEPOT_WITH_TRACK + 4, SPR_TRAMWAY_DEPOT_NO_TRACK + 4);
DupSprite(SPR_TRAMWAY_DEPOT_WITH_TRACK + 5, SPR_TRAMWAY_DEPOT_NO_TRACK + 5);
}
}
/**
* Decide whether price base multipliers of grfs shall apply globally or only to the grf specifying them
*/
@ -9932,8 +10269,12 @@ static void AfterLoadGRFs()
/* Load old shore sprites in new position, if they were replaced by ActionA */
ActivateOldShore();
/* Load old tram depot sprites in new position, if no new ones are present */
ActivateOldTramDepot();
/* Set up custom rail types */
InitRailTypes();
InitRoadTypes();
Engine *e;
FOR_ALL_ENGINES_OF_TYPE(e, VEH_ROAD) {
@ -9941,6 +10282,31 @@ static void AfterLoadGRFs()
/* Set RV maximum speed from the mph/0.8 unit value */
e->u.road.max_speed = _gted[e->index].rv_max_speed * 4;
}
RoadTramType rtt = HasBit(e->info.misc_flags, EF_ROAD_TRAM) ? RTT_TRAM : RTT_ROAD;
const GRFFile *file = e->GetGRF();
if (file == nullptr || _gted[e->index].roadtramtype == 0) {
e->u.road.roadtype = (rtt == RTT_TRAM) ? ROADTYPE_TRAM : ROADTYPE_ROAD;
continue;
}
/* Remove +1 offset. */
_gted[e->index].roadtramtype--;
const std::vector<RoadTypeLabel> *list = (rtt == RTT_TRAM) ? &file->tramtype_list : &file->roadtype_list;
if (_gted[e->index].roadtramtype < list->size())
{
RoadTypeLabel rtl = (*list)[_gted[e->index].roadtramtype];
RoadType rt = GetRoadTypeByLabel(rtl);
if (rt != INVALID_ROADTYPE && GetRoadTramType(rt) == rtt) {
e->u.road.roadtype = rt;
continue;
}
}
/* Road type is not available, so disable this engine */
e->info.climates = 0;
}
FOR_ALL_ENGINES_OF_TYPE(e, VEH_TRAIN) {

@ -14,6 +14,7 @@
#include "cargotype.h"
#include "rail_type.h"
#include "road_type.h"
#include "fileio_type.h"
#include "debug.h"
#include "core/bitmath_func.hpp"
@ -86,6 +87,8 @@ enum GrfSpecFeature {
GSF_OBJECTS,
GSF_RAILTYPES,
GSF_AIRPORTTILES,
GSF_ROADTYPES,
GSF_TRAMTYPES,
GSF_END,
GSF_FAKE_TOWNS = GSF_END, ///< Fake town GrfSpecFeature for NewGRF debugging (parent scope)
@ -240,6 +243,12 @@ struct GRFFile : ZeroedMemoryAllocator {
std::vector<RailTypeLabel> railtype_list; ///< Railtype translation table
RailType railtype_map[RAILTYPE_END];
std::vector<RoadTypeLabel> roadtype_list; ///< Roadtype translation table (road)
RoadType roadtype_map[ROADTYPE_END];
std::vector<RoadTypeLabel> tramtype_list; ///, Roadtype translation table (tram)
RoadType tramtype_map[ROADTYPE_END];
CanalProperties canal_local_properties[CF_END]; ///< Canal properties as set by this NewGRF
struct LanguageMap *language_map; ///< Mappings related to the languages.
@ -273,12 +282,19 @@ enum ShoreReplacement {
SHORE_REPLACE_ONLY_NEW, ///< Only corner-shores were loaded by Action5 (openttd(w/d).grf only).
};
enum TramReplacement {
TRAMWAY_REPLACE_DEPOT_NONE, ///< No tram depot graphics were loaded.
TRAMWAY_REPLACE_DEPOT_WITH_TRACK, ///< Electrified depot graphics with tram track were loaded.
TRAMWAY_REPLACE_DEPOT_NO_TRACK, ///< Electrified depot graphics without tram track were loaded.
};
struct GRFLoadedFeatures {
bool has_2CC; ///< Set if any vehicle is loaded which uses 2cc (two company colours).
uint64 used_liveries; ///< Bitmask of #LiveryScheme used by the defined engines.
bool has_newhouses; ///< Set if there are any newhouses loaded.
bool has_newindustries; ///< Set if there are any newindustries loaded.
ShoreReplacement shore; ///< In which way shore sprites were replaced.
TramReplacement tram; ///< In which way tram depots were replaced.
};
/**

@ -23,6 +23,7 @@
#include "station_base.h"
#include "company_base.h"
#include "newgrf_railtype.h"
#include "newgrf_roadtype.h"
#include "ship.h"
#include "safeguards.h"
@ -606,12 +607,22 @@ static uint32 VehicleGetVariable(Vehicle *v, const VehicleScopeResolver *object,
case 0x48: return v->GetEngine()->flags; // Vehicle Type Info
case 0x49: return v->build_year;
case 0x4A: {
if (v->type != VEH_TRAIN) return 0;
if (Train::From(v)->IsVirtual()) return 0x1FF;
RailType rt = GetTileRailTypeByTrackBit(v->tile, Train::From(v)->track);
return (HasPowerOnRail(Train::From(v)->railtype, rt) ? 0x100 : 0) | GetReverseRailTypeTranslation(rt, object->ro.grffile);
}
case 0x4A:
switch (v->type) {
case VEH_TRAIN: {
if (Train::From(v)->IsVirtual()) return 0x1FF;
RailType rt = GetTileRailTypeByTrackBit(v->tile, Train::From(v)->track);
return (HasPowerOnRail(Train::From(v)->railtype, rt) ? 0x100 : 0) | GetReverseRailTypeTranslation(rt, object->ro.grffile);
}
case VEH_ROAD: {
RoadType rt = GetRoadType(v->tile, GetRoadTramType(RoadVehicle::From(v)->roadtype));
return 0x100 | GetReverseRoadTypeTranslation(rt, object->ro.grffile);
}
default:
return 0;
}
case 0x4B: // Long date of last service
return v->date_of_last_service;

@ -0,0 +1,143 @@
/* $Id$ */
/*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file newgrf_roadtype.cpp NewGRF handling of road types. */
#include "stdafx.h"
#include "debug.h"
#include "newgrf_roadtype.h"
#include "date_func.h"
#include "depot_base.h"
#include "town.h"
#include "safeguards.h"
/* virtual */ uint32 RoadTypeScopeResolver::GetRandomBits() const
{
uint tmp = CountBits(this->tile + (TileX(this->tile) + TileY(this->tile)) * TILE_SIZE);
return GB(tmp, 0, 2);
}
/* virtual */ uint32 RoadTypeScopeResolver::GetVariable(byte variable, uint32 parameter, bool *available) const
{
if (this->tile == INVALID_TILE) {
switch (variable) {
case 0x40: return 0;
case 0x41: return 0;
case 0x42: return 0;
case 0x43: return _date;
case 0x44: return HZB_TOWN_EDGE;
}
}
switch (variable) {
case 0x40: return GetTerrainType(this->tile, this->context);
case 0x41: return 0;
case 0x42: return IsLevelCrossingTile(this->tile) && IsCrossingBarred(this->tile);
case 0x43:
if (IsRoadDepotTile(this->tile)) return Depot::GetByTile(this->tile)->build_date;
return _date;
case 0x44: {
const Town *t = nullptr;
if (IsRoadDepotTile(this->tile)) {
t = Depot::GetByTile(this->tile)->town;
} else if (IsTileType(this->tile, MP_ROAD)) {
t = ClosestTownFromTile(this->tile, UINT_MAX);
}
return t != nullptr ? GetTownRadiusGroup(t, this->tile) : HZB_TOWN_EDGE;
}
}
DEBUG(grf, 1, "Unhandled road type tile variable 0x%X", variable);
*available = false;
return UINT_MAX;
}
/* virtual */ const SpriteGroup *RoadTypeResolverObject::ResolveReal(const RealSpriteGroup *group) const
{
if (group->num_loading > 0) return group->loading[0];
if (group->num_loaded > 0) return group->loaded[0];
return nullptr;
}
/**
* Constructor of the roadtype scope resolvers.
* @param ro Surrounding resolver.
* @param tile %Tile containing the track. For track on a bridge this is the southern bridgehead.
* @param context Are we resolving sprites for the upper halftile, or on a bridge?
*/
RoadTypeScopeResolver::RoadTypeScopeResolver(ResolverObject &ro, TileIndex tile, TileContext context) : ScopeResolver(ro)
{
this->tile = tile;
this->context = context;
}
/**
* Resolver object for road types.
* @param rti Roadtype. nullptr in NewGRF Inspect window.
* @param tile %Tile containing the track. For track on a bridge this is the southern bridgehead.
* @param context Are we resolving sprites for the upper halftile, or on a bridge?
* @param rtsg Roadpart of interest
* @param param1 Extra parameter (first parameter of the callback, except roadtypes do not have callbacks).
* @param param2 Extra parameter (second parameter of the callback, except roadtypes do not have callbacks).
*/
RoadTypeResolverObject::RoadTypeResolverObject(const RoadTypeInfo *rti, TileIndex tile, TileContext context, RoadTypeSpriteGroup rtsg, uint32 param1, uint32 param2)
: ResolverObject(rti != nullptr ? rti->grffile[rtsg] : nullptr, CBID_NO_CALLBACK, param1, param2), roadtype_scope(*this, tile, context)
{
this->root_spritegroup = rti != nullptr ? rti->group[rtsg] : nullptr;
}
/**
* Get the sprite to draw for the given tile.
* @param rti The road type data (spec).
* @param tile The tile to get the sprite for.
* @param rtsg The type of sprite to draw.
* @param content Where are we drawing the tile?
* @param [out] num_results If not nullptr, return the number of sprites in the spriteset.
* @return The sprite to draw.
*/
SpriteID GetCustomRoadSprite(const RoadTypeInfo *rti, TileIndex tile, RoadTypeSpriteGroup rtsg, TileContext context, uint *num_results)
{
assert(rtsg < ROTSG_END);
if (rti->group[rtsg] == nullptr) return 0;
RoadTypeResolverObject object(rti, tile, context, rtsg);
const SpriteGroup *group = object.Resolve();
if (group == nullptr || group->GetNumResults() == 0) return 0;
if (num_results) *num_results = group->GetNumResults();
return group->GetResult();
}
/**
* Perform a reverse roadtype lookup to get the GRF internal ID.
* @param roadtype The global (OpenTTD) roadtype.
* @param grffile The GRF to do the lookup for.
* @return the GRF internal ID.
*/
uint8 GetReverseRoadTypeTranslation(RoadType roadtype, const GRFFile *grffile)
{
/* No road type table present, return road type as-is */
if (grffile == nullptr) return roadtype;
const std::vector<RoadTypeLabel> *list = RoadTypeIsRoad(roadtype) ? &grffile->roadtype_list : &grffile->tramtype_list;
if (list->size() == 0) return roadtype;
/* Look for a matching road type label in the table */
RoadTypeLabel label = GetRoadTypeInfo(roadtype)->label;
int index = find_index(*list, label);
if (index >= 0) return index;
/* If not found, return as invalid */
return 0xFF;
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save