@@ -1414,6 +1414,10 @@
RelativePath=".\..\src\newgrf_railtype.h"
>
</File>
<File
RelativePath=".\..\src\newgrf_roadtype.h"
>
</File>
<File
RelativePath=".\..\src\newgrf_sound.h"
>
@@ -1526,6 +1530,10 @@
RelativePath=".\..\src\rev.h"
>
</File>
<File
RelativePath=".\..\src\road.h"
>
</File>
<File
RelativePath=".\..\src\road_cmd.h"
>
@@ -2874,6 +2882,10 @@
RelativePath=".\..\src\table\roadveh_movement.h"
>
</File>
<File
RelativePath=".\..\src\table\roadtypes.h"
>
</File>
<File
RelativePath=".\..\src\..\objs\settings\table\settings.h"
>
@@ -4014,6 +4026,10 @@
RelativePath=".\..\src\newgrf_railtype.cpp"
>
</File>
<File
RelativePath=".\..\src\newgrf_roadtype.cpp"
>
</File>
<File
RelativePath=".\..\src\newgrf_sound.cpp"
>
@@ -1411,6 +1411,10 @@
RelativePath=".\..\src\newgrf_railtype.h"
>
</File>
<File
RelativePath=".\..\src\newgrf_roadtype.h"
>
</File>
<File
RelativePath=".\..\src\newgrf_sound.h"
>
@@ -1523,6 +1527,10 @@
RelativePath=".\..\src\rev.h"
>
</File>
<File
RelativePath=".\..\src\road.h"
>
</File>
<File
RelativePath=".\..\src\road_cmd.h"
>
@@ -2871,6 +2879,10 @@
RelativePath=".\..\src\table\roadveh_movement.h"
>
</File>
<File
RelativePath=".\..\src\table\roadtypes.h"
>
</File>
<File
RelativePath=".\..\src\..\objs\settings\table\settings.h"
>
@@ -4011,6 +4023,10 @@
RelativePath=".\..\src\newgrf_railtype.cpp"
>
</File>
<File
RelativePath=".\..\src\newgrf_roadtype.cpp"
>
</File>
<File
RelativePath=".\..\src\newgrf_sound.cpp"
>
@@ -274,6 +274,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
@@ -302,6 +303,7 @@ rail.h
rail_gui.h
rail_type.h
rev.h
road.h
road_cmd.h
road_func.h
road_gui.h
@@ -660,6 +662,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
@@ -966,6 +969,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
@@ -408,8 +408,8 @@ void AddArticulatedParts(Vehicle *first)
gcache->cached_veh_length = VEHICLE_LENGTH; // Callback is called when the consist is finished
rv->state = RVSB_IN_DEPOT;

rv->roadtype = front->roadtype;
rv->compatible_roadtypes = front->compatible_roadtypes;
rv->rtid = front->rtid;
rv->compatible_subtypes = front->compatible_subtypes;

rv->spritenum = e_artic->u.road.image_index;
if (e_artic->CanCarryCargo()) {
@@ -19,6 +19,7 @@
#include "autoreplace_gui.h"
#include "articulated_vehicles.h"
#include "core/random_func.hpp"
#include "road.h"

#include "table/strings.h"

@@ -76,6 +77,9 @@ bool CheckAutoreplaceValidity(EngineID from, EngineID to, CompanyID company)
case VEH_ROAD:
/* 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;

/* make sure the roadtypes are compatible */
if ((GetRoadTypeInfo(e_from->GetRoadType())->powered_roadtypes & GetRoadTypeInfo(e_to->GetRoadType())->powered_roadtypes) == 0) return false;
break;

case VEH_AIRCRAFT:
@@ -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"
@@ -88,30 +90,9 @@ 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.
RoadTypeIdentifier sel_rtid; ///< Type of road selected. Invalid to show all.
Scrollbar *vscroll[2];

/**
* Figure out if an engine should be added to a list.
* @param e The EngineID.
* @param draw_left If \c true, the left list is drawn (the engines specific to the railtype you selected).
* @param show_engines If \c true, the locomotives are drawn, else the wagons are drawn (never both).
* @return \c true if the engine should be in the list (based on this check), else \c false.
*/
bool GenerateReplaceRailList(EngineID e, bool draw_left, bool show_engines)
{
const RailVehicleInfo *rvi = RailVehInfo(e);

/* Ensure that the wagon/engine selection fits the engine. */
if ((rvi->railveh_type == RAILVEH_WAGON) == show_engines) return false;

if (draw_left && this->sel_railtype != INVALID_RAILTYPE) {
/* Ensure that the railtype is specific to the selected one */
if (rvi->railtype != this->sel_railtype) return false;
}
return true;
}


/**
* Generate an engines list
* @param draw_left true if generating the left list, otherwise false
@@ -129,7 +110,27 @@ 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:
/* Ensure that the wagon/engine selection fits the engine. */
if ((e->u.rail.railveh_type == RAILVEH_WAGON) == this->replace_engines) continue;

if (draw_left && this->sel_railtype != INVALID_RAILTYPE) {
/* Ensure that the railtype is specific to the selected one */
if (e->u.rail.railtype != this->sel_railtype) continue;
}
break;

case VEH_ROAD:
if (draw_left && this->sel_rtid.IsValid()) {
/* Ensure that the railtype is specific to the selected one */
if (e->GetRoadType() != this->sel_rtid) continue;
}
break;

default:
break;
}

if (draw_left) {
const uint num_engines = GetGroupNumEngines(_local_company, this->sel_group, eid);
@@ -289,13 +290,27 @@ class ReplaceVehicleWindow : public Window {
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++) {
RoadTypeIdentifier rtid;
FOR_ALL_SORTED_ROADTYPES(rtid, rt) {
const RoadtypeInfo *rti = GetRoadTypeInfo(rtid);
d = maxdim(d, GetStringBoundingBox(rti->strings.replace_text));
}
}
break;
default: NOT_REACHED();
}
d.width += padding.width;
d.height += padding.height;
@@ -411,9 +426,19 @@ class ReplaceVehicleWindow : public Window {
* 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_rtid.IsValid() ? GetRoadTypeInfo(sel_rtid)->strings.replace_text : STR_REPLACE_ALL_ROADTYPE;
break;

default:
break;
}

this->DrawWidgets();
@@ -467,8 +492,16 @@ class ReplaceVehicleWindow : public Window {
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(ROADTYPES_ALL, true, true), sel_rtid.IsValid() ? sel_rtid.Pack() : -1, WID_RV_RAIL_ROAD_TYPE_DROPDOWN);
break;
}
break;

case WID_RV_TRAIN_WAGONREMOVE_TOGGLE: // toggle renew_keep_length
@@ -528,10 +561,24 @@ class ReplaceVehicleWindow : public Window {
}
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: {
RoadTypeIdentifier temp;
if (index != -1) temp = RoadTypeIdentifier::Unpack(index);
if (temp == sel_rtid) return; // we didn't select a new one. No need to change anything
sel_rtid = temp;
break;
}
default: NOT_REACHED();
}

/* Reset scrollbar positions */
this->vscroll[0]->SetPosition(0);
this->vscroll[1]->SetPosition(0);
@@ -541,7 +588,6 @@ class ReplaceVehicleWindow : public Window {
this->reset_sel_engine = true;
this->SetDirty();
break;
}

case WID_RV_TRAIN_ENGINEWAGON_DROPDOWN: {
this->replace_engines = index != 0;
@@ -598,7 +644,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(),
@@ -643,6 +689,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),
@@ -705,5 +809,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"
@@ -403,11 +404,17 @@ 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);
RoadTypeIdentifiers rtids;
if (IsBridgeTile(start)) rtids = RoadTypeIdentifiers::FromTile(start);
rtids.MergeRoadType(RoadTypeIdentifier::Unpack(road_rail_type));
RoadTypeIdentifier rtid;
FOR_EACH_SET_ROADTYPEIDENTIFIER(rtid, rtids) {
infra_cost += (bridge_len + 2) * 2 * RoadBuildCost(rtid);
}
break;
}
case TRANSPORT_RAIL: infra_cost = (bridge_len + 2) * RailBuildCost((RailType)road_rail_type); break;
default: break;
}
@@ -132,7 +132,7 @@ static inline void MakeBridgeRamp(TileIndex t, Owner o, BridgeType bridgetype, D
SetTileOwner(t, o);
_m[t].m2 = 0;
_m[t].m3 = rt;
_m[t].m4 = 0;
_m[t].m4 = INVALID_ROADTYPES;
_m[t].m5 = 1 << 7 | tt << 2 | d;
SB(_me[t].m6, 2, 4, bridgetype);
_me[t].m7 = 0;
@@ -148,7 +148,7 @@ static inline void MakeBridgeRamp(TileIndex t, Owner o, BridgeType bridgetype, D
* @param d the direction this ramp must be facing
* @param r the road type of the bridge
*/
static inline void MakeRoadBridgeRamp(TileIndex t, Owner o, Owner owner_road, Owner owner_tram, BridgeType bridgetype, DiagDirection d, RoadTypes r)
static inline void MakeRoadBridgeRamp(TileIndex t, Owner o, Owner owner_road, Owner owner_tram, BridgeType bridgetype, DiagDirection d, RoadTypeIdentifiers r)
{
MakeBridgeRamp(t, o, bridgetype, d, TRANSPORT_ROAD, 0);
SetRoadOwner(t, ROADTYPE_ROAD, owner_road);
@@ -972,10 +972,8 @@ void DisplayVehicleSortDropDown(Window *w, VehicleType vehicle_type, int selecte
/** GUI for building vehicles. */
struct BuildVehicleWindow : Window {
VehicleType vehicle_type; ///< Type of vehicles shown in the window.
union {
RailTypeByte railtype; ///< Rail type to show, or #RAILTYPE_END.
RoadTypes roadtypes; ///< Road type to show, or #ROADTYPES_ALL.
} filter; ///< Filter to apply.
RailTypeByte filter_railtype; ///< Rail type to show, or #RAILTYPE_END.
RoadTypeIdentifier filter_rtid; ///< Road type to show, or invalid to show all.
bool descending_sort_order; ///< Sort direction, @see _engine_sort_direction
byte sort_criteria; ///< Current sort criterium.
bool show_hidden_engines; ///< State of the 'show hidden engines' button.
@@ -992,27 +990,17 @@ struct BuildVehicleWindow : Window {
BuildVehicleWindow(WindowDesc *desc, TileIndex tile, VehicleType type) : Window(desc)
{
this->vehicle_type = type;
this->window_number = tile == INVALID_TILE ? (int)type : tile;
this->listview_mode = tile == INVALID_TILE;
this->window_number = this->listview_mode ? (int)type : tile;

this->sel_engine = INVALID_ENGINE;

this->sort_criteria = _engine_sort_last_criteria[type];
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->window_number <= VEH_END);
this->filter_railtype = RAILTYPE_END;
UpdateFilterByTile();

this->CreateNestedTree();

@@ -1056,6 +1044,28 @@ struct BuildVehicleWindow : Window {
if (this->eng_list.Length() > 0) this->sel_engine = this->eng_list[0];
}

/** Set the filter type according to the depot type */
void UpdateFilterByTile()
{
if (this->listview_mode) return;

switch (this->vehicle_type) {
default: NOT_REACHED();
case VEH_TRAIN:
this->filter_railtype = GetRailType(this->window_number);
break;
case VEH_ROAD: {
assert(IsRoadDepotTile(this->window_number));
RoadTypeIdentifiers rtids = RoadTypeIdentifiers::FromTile(this->window_number);
this->filter_rtid = rtids.HasRoad() ? rtids.road_identifier : rtids.tram_identifier;
break;
}
case VEH_SHIP:
case VEH_AIRCRAFT:
break;
}
}

/** Populate the filter list and set the cargo filter criteria. */
void SetCargoFilterArray()
{
@@ -1130,8 +1140,6 @@ struct BuildVehicleWindow : Window {
int num_engines = 0;
int num_wagons = 0;

this->filter.railtype = (this->listview_mode) ? RAILTYPE_END : GetRailType(this->window_number);

this->eng_list.Clear();

/* Make list of all available train engines and wagons.
@@ -1144,7 +1152,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 != RAILTYPE_END && !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 */
@@ -1187,7 +1195,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_rtid.IsValid() && !HasPowerOnRoad(e->GetRoadType(), this->filter_rtid)) continue;

*this->eng_list.Append() = eid;

if (eid == this->sel_engine) sel_id = eid;
@@ -1245,6 +1254,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 */
UpdateFilterByTile();

switch (this->vehicle_type) {
default: NOT_REACHED();
case VEH_TRAIN:
@@ -1363,7 +1376,10 @@ struct BuildVehicleWindow : Window {
switch (widget) {
case WID_BV_CAPTION:
if (this->vehicle_type == VEH_TRAIN && !this->listview_mode) {
const RailtypeInfo *rti = GetRailTypeInfo(this->filter.railtype);
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_rtid);
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);
@@ -68,6 +68,8 @@ CommandProc CmdBuildRoad;

CommandProc CmdBuildRoadDepot;

CommandProc CmdConvertRoad;

CommandProc CmdBuildAirport;

CommandProc CmdBuildDock;
@@ -233,6 +235,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
@@ -202,6 +202,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

@@ -29,7 +29,7 @@ struct CompanyEconomyEntry {
};

struct CompanyInfrastructure {
uint32 road[ROADTYPE_END]; ///< Count of company owned track bits for each road type.
uint32 road[ROADTYPE_END][ROADSUBTYPE_END]; ///< Count of company owned track bits for each road type.
uint32 signal; ///< Count of company owned signals.
uint32 rail[RAILTYPE_END]; ///< Count of company owned track bits for each rail type.
uint32 water; ///< Count of company owned track bits for canals.
@@ -43,6 +43,14 @@ struct CompanyInfrastructure {
for (RailType rt = RAILTYPE_BEGIN; rt < RAILTYPE_END; rt++) total += this->rail[rt];
return total;
}

/** Get total sum of all owned road/tram bits. */
uint32 GetRoadTotal(RoadType rt) const
{
uint32 total = 0;
for (RoadSubType rst = ROADSUBTYPE_BEGIN; rst < ROADSUBTYPE_END; rst++) total += this->road[rt][rst];
return total;
}
};

typedef Pool<Company, CompanyID, 1, MAX_COMPANIES> CompanyPool;
@@ -112,7 +120,7 @@ struct Company : CompanyPool::PoolItem<&_company_pool>, CompanyProperties {
~Company();

Livery livery[LS_END];
RoadTypes avail_roadtypes; ///< Road types available to this company.
RoadSubTypes avail_roadtypes[ROADTYPE_END]; ///< NOSAVE: Road types available to this company.

class AIInstance *ai_instance;
class AIInfo *ai_info;
@@ -28,6 +28,7 @@
#include "date_func.h"
#include "sound_func.h"
#include "rail.h"
#include "road.h"
#include "core/pool_func.hpp"
#include "settings_func.h"
#include "vehicle_base.h"
@@ -555,7 +556,8 @@ 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[ROADTYPE_ROAD] = GetCompanyRoadtypes(c->index, ROADTYPE_ROAD);
c->avail_roadtypes[ROADTYPE_TRAM] = GetCompanyRoadtypes(c->index, ROADTYPE_TRAM);
c->inaugurated_year = _cur_year;
RandomCompanyManagerFaceBits(c->face, (GenderEthnicity)Random(), false, false); // create a random company manager face

@@ -30,6 +30,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"
@@ -1538,6 +1539,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),
@@ -1560,7 +1565,7 @@ static const NWidgetPart _nested_company_infrastructure_widgets[] = {
struct CompanyInfrastructureWindow : Window
{
RailTypes railtypes; ///< Valid railtypes.
RoadTypes roadtypes; ///< Valid roadtypes.
RoadSubTypes roadtypes[ROADTYPE_END]; ///< Valid roadtypes.

uint total_width; ///< String width of the total cost line.

@@ -1575,7 +1580,8 @@ struct CompanyInfrastructureWindow : Window
void UpdateRailRoadTypes()
{
this->railtypes = RAILTYPES_NONE;
this->roadtypes = ROADTYPES_ROAD; // Road is always available.
this->roadtypes[ROADTYPE_ROAD] = ROADSUBTYPES_NORMAL; // Road is always available. // TODO
this->roadtypes[ROADTYPE_TRAM] = ROADSUBTYPES_NONE;

/* Find the used railtypes. */
Engine *e;
@@ -1588,14 +1594,17 @@ 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;
RoadTypeIdentifier rtid = e->GetRoadType();
this->roadtypes[rtid.basetype] |= GetRoadTypeInfo(rtid)->introduces_roadtypes;
}

/* Get the date introduced roadtypes as well. */
this->roadtypes[ROADTYPE_ROAD] = AddDateIntroducedRoadTypes(ROADTYPE_ROAD, this->roadtypes[ROADTYPE_ROAD], MAX_DAY);
this->roadtypes[ROADTYPE_TRAM] = AddDateIntroducedRoadTypes(ROADTYPE_TRAM, this->roadtypes[ROADTYPE_TRAM], MAX_DAY);
}

/** Get total infrastructure maintenance cost. */
@@ -1610,8 +1619,12 @@ 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(ROADTYPE_ROAD);
uint32 tram_total = c->infrastructure.GetRoadTotal(ROADTYPE_TRAM);
for (RoadSubType rst = ROADSUBTYPE_BEGIN; rst < ROADSUBTYPE_END; rst++) {
if (HasBit(this->roadtypes[ROADTYPE_ROAD], rst)) total += RoadMaintenanceCost(RoadTypeIdentifier(ROADTYPE_ROAD, rst), c->infrastructure.road[ROADTYPE_ROAD][rst], road_total);
if (HasBit(this->roadtypes[ROADTYPE_TRAM], rst)) total += RoadMaintenanceCost(RoadTypeIdentifier(ROADTYPE_TRAM, rst), c->infrastructure.road[ROADTYPE_TRAM][rst], tram_total);
}

total += CanalMaintenanceCost(c->infrastructure.water);
total += StationMaintenanceCost(c->infrastructure.station);
@@ -1655,18 +1668,19 @@ struct CompanyInfrastructureWindow : Window
break;
}

case WID_CI_ROAD_DESC: {
case WID_CI_ROAD_DESC:
case WID_CI_TRAM_DESC: {
uint lines = 1;

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);
RoadTypeIdentifier rtid;
FOR_ALL_SORTED_ROADTYPES(rtid, widget == WID_CI_ROAD_DESC ? ROADTYPE_ROAD : ROADTYPE_TRAM) {
if (HasBit(this->roadtypes[rtid.basetype], rtid.subtype)) {
lines++;
SetDParam(0, GetRoadTypeInfo(rtid)->strings.name);
size->width = max(size->width, GetStringBoundingBox(STR_WHITE_STRING).width + WD_FRAMERECT_LEFT);
}
}

size->height = max(size->height, lines * FONT_HEIGHT_NORMAL);
@@ -1686,6 +1700,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: {
@@ -1700,8 +1715,11 @@ struct CompanyInfrastructureWindow : Window
max_val = max(max_val, c->infrastructure.signal);
max_cost = max(max_cost, SignalMaintenanceCost(c->infrastructure.signal));
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]));
uint32 road_total = c->infrastructure.GetRoadTotal(rt);
for (RoadSubType rst = ROADSUBTYPE_BEGIN; rst < ROADSUBTYPE_END; rst++) {
max_val = max(max_val, c->infrastructure.road[rt][rst]);
max_cost = max(max_cost, RoadMaintenanceCost(RoadTypeIdentifier(rt, rst), c->infrastructure.road[rt][rst], road_total));
}
}
max_val = max(max_val, c->infrastructure.water);
max_cost = max(max_cost, CanalMaintenanceCost(c->infrastructure.water));
@@ -1797,26 +1815,33 @@ 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. */
RoadTypeIdentifier rtid;
FOR_ALL_SORTED_ROADTYPES(rtid, widget == WID_CI_ROAD_DESC ? ROADTYPE_ROAD : ROADTYPE_TRAM) {
if (HasBit(this->roadtypes[rtid.basetype], rtid.subtype)) {
SetDParam(0, GetRoadTypeInfo(rtid)->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: {
RoadType rt = widget == WID_CI_ROAD_COUNT ? ROADTYPE_ROAD : ROADTYPE_TRAM;
uint32 road_total = c->infrastructure.GetRoadTotal(rt);
RoadTypeIdentifier rtid;
FOR_ALL_SORTED_ROADTYPES(rtid, rt) {
if (HasBit(this->roadtypes[rtid.basetype], rtid.subtype)) {
this->DrawCountLine(r, y, c->infrastructure.road[rtid.basetype][rtid.subtype], RoadMaintenanceCost(rtid, c->infrastructure.road[rtid.basetype][rtid.subtype], road_total));
}
}
break;
}

case WID_CI_WATER_DESC:
DrawString(r.left, r.right, y, STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT);
@@ -2203,7 +2228,9 @@ struct CompanyWindow : Window
uint rail_pices = c->infrastructure.signal;
uint road_pieces = 0;
for (uint i = 0; i < lengthof(c->infrastructure.rail); i++) rail_pices += c->infrastructure.rail[i];
for (uint i = 0; i < lengthof(c->infrastructure.road); i++) road_pieces += c->infrastructure.road[i];
for (RoadType rt = ROADTYPE_BEGIN; rt < ROADTYPE_END; rt++) {
for (uint i = 0; i < lengthof(c->infrastructure.road[rt]); i++) road_pieces += c->infrastructure.road[rt][i];
}

if (rail_pices == 0 && road_pieces == 0 && c->infrastructure.water == 0 && c->infrastructure.station == 0 && c->infrastructure.airport == 0) {
DrawString(r.left, r.right, y, STR_COMPANY_VIEW_INFRASTRUCTURE_NONE);
@@ -681,7 +681,10 @@ static void CompaniesGenStatistics()
}
cost.AddCost(SignalMaintenanceCost(c->infrastructure.signal));
for (RoadType rt = ROADTYPE_BEGIN; rt < ROADTYPE_END; rt++) {
if (c->infrastructure.road[rt] != 0) cost.AddCost(RoadMaintenanceCost(rt, c->infrastructure.road[rt]));
uint32 road_total = c->infrastructure.GetRoadTotal(rt);
for (RoadSubType rst = ROADSUBTYPE_BEGIN; rst < ROADSUBTYPE_END; rst++) {
if (c->infrastructure.road[rt][rst] != 0) cost.AddCost(RoadMaintenanceCost(RoadTypeIdentifier(rt, rst), c->infrastructure.road[rt][rst], road_total));
}
}
cost.AddCost(CanalMaintenanceCost(c->infrastructure.water));
cost.AddCost(StationMaintenanceCost(c->infrastructure.station));
@@ -154,6 +154,16 @@ bool Engine::IsEnabled() const
return this->info.string_id != STR_NEWGRF_INVALID_ENGINE && HasBit(this->info.climates, _settings_game.game_creation.landscape);
}

/**
* Determine the roadtype of a road vehicle.
* @return roadtype identifier
*/
RoadTypeIdentifier Engine::GetRoadType() const
{
assert(this->type == VEH_ROAD);
return RoadTypeIdentifier(HasBit(this->info.misc_flags, EF_ROAD_TRAM) ? ROADTYPE_TRAM : ROADTYPE_ROAD, this->u.road.roadsubtype);
}

/**
* Retrieve the GRF ID of the NewGRF the engine is tied to.
* This is the GRF providing the Action 3.
@@ -699,7 +709,8 @@ void StartupEngines()
Company *c;
FOR_ALL_COMPANIES(c) {
c->avail_railtypes = GetCompanyRailtypes(c->index);
c->avail_roadtypes = GetCompanyRoadtypes(c->index);
c->avail_roadtypes[ROADTYPE_ROAD] = GetCompanyRoadtypes(c->index, ROADTYPE_ROAD);
c->avail_roadtypes[ROADTYPE_TRAM] = GetCompanyRoadtypes(c->index, ROADTYPE_TRAM);
}

/* Invalidate any open purchase lists */
@@ -721,7 +732,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);
RoadTypeIdentifier rtid = e->GetRoadType();
c->avail_roadtypes[rtid.basetype] = AddDateIntroducedRoadTypes(rtid.basetype, c->avail_roadtypes[rtid.basetype] | GetRoadTypeInfo(rtid)->introduces_roadtypes, _date);
}

e->preview_company = INVALID_COMPANY;
@@ -801,6 +813,8 @@ void EnginesDailyLoop()
Company *c;
FOR_ALL_COMPANIES(c) {
c->avail_railtypes = AddDateIntroducedRailTypes(c->avail_railtypes, _date);
c->avail_roadtypes[ROADTYPE_ROAD] = AddDateIntroducedRoadTypes(ROADTYPE_ROAD, c->avail_roadtypes[ROADTYPE_ROAD], _date);
c->avail_roadtypes[ROADTYPE_TRAM] = AddDateIntroducedRoadTypes(ROADTYPE_TRAM, c->avail_roadtypes[ROADTYPE_TRAM], _date);
}

if (_cur_year >= _year_engine_aging_stops) return;
@@ -942,7 +956,10 @@ 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);
FOR_ALL_COMPANIES(c) {
RoadTypeIdentifier rtid = e->GetRoadType();
c->avail_roadtypes[rtid.basetype] = AddDateIntroducedRoadTypes(rtid.basetype, c->avail_roadtypes[rtid.basetype] | GetRoadTypeInfo(rtid)->introduces_roadtypes, _date);
}
}

/* Only broadcast event if AIs are able to build this vehicle type. */
@@ -1089,6 +1106,12 @@ 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);
RoadTypeIdentifier rtid = e->GetRoadType();
if (((GetRoadTypeInfo(rtid))->powered_roadtypes & c->avail_roadtypes[rtid.basetype]) == 0) return false;
}

return true;
}
@@ -67,6 +67,8 @@ struct Engine : EnginePool::PoolItem<&_engine_pool> {
~Engine();
bool IsEnabled() const;

RoadTypeIdentifier GetRoadType() const;

/**
* Determines the default cargo type of an engine.
*
@@ -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->GetRoadType())->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"
@@ -22,6 +23,7 @@
typedef uint16 EngineID; ///< Unique identification number of an engine.

struct Engine;
struct RoadTypeIdentifier;

/** Available types of rail vehicles. */
enum RailVehicleTypes {
@@ -123,6 +125,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
RoadSubType roadsubtype;
};

/**
@@ -28,7 +28,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; // Note: Different units for RV and Trains.

for (const T *u = v; u != NULL; u = u->Next()) {
uint32 current_power = u->GetPower() + u->GetPoweredPartPower(u);
@@ -3262,8 +3262,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:
@@ -4283,7 +4281,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...
@@ -3744,7 +3744,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}تعذر إزاله السكه الحديديه من هنا...
@@ -3147,8 +3147,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:
@@ -4152,7 +4150,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...
@@ -3598,8 +3598,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:
@@ -4654,7 +4652,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}Не атрымалася выдаліць чыгунку...
@@ -3266,8 +3266,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:
@@ -4302,7 +4300,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á bloqueado
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...
@@ -3191,8 +3191,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}Станции:
@@ -4212,7 +4210,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}Не може да премахнеш тези ЖП релси...
@@ -3266,8 +3266,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:
@@ -4302,7 +4300,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...
@@ -3361,8 +3361,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:
@@ -4397,7 +4395,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...
@@ -3358,8 +3358,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:
@@ -4397,7 +4395,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...
@@ -3265,8 +3265,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:
@@ -4301,7 +4299,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...
@@ -4301,7 +4301,7 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Sein moe
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Geen bruikbaar spoor
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Bestaand spoor moet eerst weggehaald worden
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 weghalen...
@@ -336,6 +336,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.
@@ -356,6 +357,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
@@ -431,17 +433,15 @@ STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Industry chains
STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Fund new industry
############ range ends here

############ range for railway construction menu starts
STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Railway construction
STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Electrified railway construction
STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Monorail construction
STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Maglev construction
############ range ends here

############ range for road construction menu starts
STR_ROAD_MENU_ROAD_CONSTRUCTION :Road construction
STR_ROAD_MENU_ELROAD_CONSTRUCTION :Electrified road construction
STR_ROAD_MENU_TRAM_CONSTRUCTION :Tramway construction
############ range ends here
STR_ROAD_MENU_ELTRAM_CONSTRUCTION :Electrified tramway construction

############ range for waterways construction menu starts
STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Waterways construction
@@ -2391,7 +2391,9 @@ STR_BRIDGE_TUBULAR_SILICON :Tubular, Silico

# Road construction toolbar
STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Road Construction
STR_ROAD_TOOLBAR_ELROAD_CONSTRUCTION_CAPTION :{WHITE}Electrified Road Construction
STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Tramway Construction
STR_ROAD_TOOLBAR_ELTRAM_CONSTRUCTION_CAPTION :{WHITE}Electrified Tramway Construction
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Build road section. Ctrl toggles build/remove for road construction. Shift toggles building/showing cost estimate
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Build tramway section. Ctrl toggles build/remove for tramway construction. Shift toggles building/showing cost estimate
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Build road section using the Autoroad mode. Ctrl toggles build/remove for road construction. Shift toggles building/showing cost estimate
@@ -2409,6 +2411,13 @@ 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_ELROAD :Electrified road
STR_ROAD_NAME_TRAM :Tramway
STR_ROAD_NAME_ELTRAM :Electrified tramway

# Road depot construction window
STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Road Depot Orientation
@@ -2593,8 +2602,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
@@ -3265,8 +3277,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:
@@ -3378,10 +3389,17 @@ 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_ELROAD_VEHICLE_CAPTION :New Electric Road Vehicles
STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :New Tram Vehicles
STR_BUY_VEHICLE_ELTRAM_VEHICLE_CAPTION :New Electric 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_SPEED_POWER :{BLACK}Speed: {GOLD}{VELOCITY}{BLACK} Power: {GOLD}{POWER}
@@ -3528,12 +3546,19 @@ 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_ELROAD_VEHICLE :electrified road vehicle
STR_ENGINE_PREVIEW_TRAM_VEHICLE :tramway vehicle
STR_ENGINE_PREVIEW_ELTRAM_VEHICLE :electrified 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}
@@ -3572,6 +3597,7 @@ 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_REPLACE_INFO_TAB :{BLACK}Displays which engine the left selected engine is being replaced with, if any
@@ -3580,6 +3606,11 @@ STR_REPLACE_ELRAIL_VEHICLES :Electrified Rai
STR_REPLACE_MONORAIL_VEHICLES :Monorail Vehicles
STR_REPLACE_MAGLEV_VEHICLES :Maglev Vehicles

STR_REPLACE_ROAD_VEHICLES :Road Vehicles
STR_REPLACE_ELROAD_VEHICLES :Electrified Road Vehicles
STR_REPLACE_TRAM_VEHICLES :Tramway Vehicles
STR_REPLACE_ELTRAM_VEHICLES :Electrified 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

@@ -4301,7 +4332,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...
@@ -4321,6 +4353,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...
@@ -3228,8 +3228,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:
@@ -4232,7 +4230,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...
@@ -3265,8 +3265,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:
@@ -4301,7 +4299,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...
@@ -3656,7 +3656,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...
@@ -3319,8 +3319,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:
@@ -4340,7 +4338,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...
@@ -2893,8 +2893,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:
@@ -3802,7 +3800,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...
@@ -3265,8 +3265,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Yhtiön
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:
@@ -4300,7 +4298,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.
@@ -3266,8 +3266,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}:
@@ -4302,7 +4300,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...
@@ -3506,8 +3506,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:
@@ -4542,7 +4540,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...
@@ -3266,8 +3266,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:
@@ -4302,7 +4300,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í...
@@ -3266,8 +3266,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:
@@ -4302,7 +4300,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...
@@ -3372,8 +3372,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}Σταθμοί:
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}Δεν μπορεί να αφαιρεθεί σιδηρόδρομος από εδώ...
@@ -3279,8 +3279,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}תחנות:
@@ -4315,7 +4313,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}לא ניתן להסיר פסי רכבת ממשבצת זו...
@@ -3329,8 +3329,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:
@@ -4365,7 +4363,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...
@@ -3052,8 +3052,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:
@@ -4045,7 +4043,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...