1
0
Fork 0

Compare commits

..

4 Commits

Author SHA1 Message Date
Tyler Trahan 47d8f72205 Fix: Missing beeps for graph selectors 2025-07-20 22:10:56 -04:00
Tyler Trahan ef4514862b Fix: Missing beeps for various buttons 2025-07-20 22:00:08 -04:00
Tyler Trahan 621d7cc44d Codechange: Handle dropdown clicks in wrapper functions that go beep 2025-07-20 21:44:40 -04:00
Tyler Trahan ce6bc21641 Codechange: Handle "beep" sound within Window::HandleButtonClick() 2025-07-20 20:50:20 -04:00
88 changed files with 841 additions and 1020 deletions

View File

@ -48,7 +48,10 @@
void Aircraft::UpdateDeltaXY() void Aircraft::UpdateDeltaXY()
{ {
this->bounds = {{-1, -1, 0}, {2, 2, 0}, {}}; this->x_offs = -1;
this->y_offs = -1;
this->x_extent = 2;
this->y_extent = 2;
switch (this->subtype) { switch (this->subtype) {
default: NOT_REACHED(); default: NOT_REACHED();
@ -61,21 +64,21 @@ void Aircraft::UpdateDeltaXY()
case LANDING: case LANDING:
case HELILANDING: case HELILANDING:
case FLYING: case FLYING:
/* Bounds are not centred on the aircraft. */ this->x_extent = 24;
this->bounds.extent.x = 24; this->y_extent = 24;
this->bounds.extent.y = 24;
break; break;
} }
this->bounds.extent.z = 5; this->z_extent = 5;
break; break;
case AIR_SHADOW: case AIR_SHADOW:
this->bounds.extent.z = 1; this->z_extent = 1;
this->bounds.origin = {}; this->x_offs = 0;
this->y_offs = 0;
break; break;
case AIR_ROTOR: case AIR_ROTOR:
this->bounds.extent.z = 1; this->z_extent = 1;
break; break;
} }
} }

View File

@ -509,7 +509,7 @@ public:
this->SetWidgetLoweredState(WID_AP_BTN_DONTHILIGHT, !_settings_client.gui.station_show_coverage); this->SetWidgetLoweredState(WID_AP_BTN_DONTHILIGHT, !_settings_client.gui.station_show_coverage);
this->SetWidgetLoweredState(WID_AP_BTN_DOHILIGHT, _settings_client.gui.station_show_coverage); this->SetWidgetLoweredState(WID_AP_BTN_DOHILIGHT, _settings_client.gui.station_show_coverage);
this->SetDirty(); this->SetDirty();
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
this->UpdateSelectSize(); this->UpdateSelectSize();
SetViewportCatchmentStation(nullptr, true); SetViewportCatchmentStation(nullptr, true);
break; break;

View File

@ -69,45 +69,36 @@ static void DrawClearLandFence(const TileInfo *ti)
/* combine fences into one sprite object */ /* combine fences into one sprite object */
StartSpriteCombine(); StartSpriteCombine();
SpriteBounds bounds{{}, {TILE_SIZE, TILE_SIZE, 4}, {}}; int maxz = GetSlopeMaxPixelZ(ti->tileh);
bounds.extent.z += GetSlopeMaxPixelZ(ti->tileh);
uint fence_nw = GetFence(ti->tile, DIAGDIR_NW); uint fence_nw = GetFence(ti->tile, DIAGDIR_NW);
if (fence_nw != 0) { if (fence_nw != 0) {
bounds.offset.x = 0; int z = GetSlopePixelZInCorner(ti->tileh, CORNER_W);
bounds.offset.y = -static_cast<int>(TILE_SIZE);
bounds.offset.z = GetSlopePixelZInCorner(ti->tileh, CORNER_W);
SpriteID sprite = _clear_land_fence_sprites[fence_nw - 1] + _fence_mod_by_tileh_nw[ti->tileh]; SpriteID sprite = _clear_land_fence_sprites[fence_nw - 1] + _fence_mod_by_tileh_nw[ti->tileh];
AddSortableSpriteToDraw(sprite, PAL_NONE, *ti, bounds, false); AddSortableSpriteToDraw(sprite, PAL_NONE, ti->x, ti->y - 16, 16, 32, maxz - z + 4, ti->z + z, false, 0, 16, -z);
} }
uint fence_ne = GetFence(ti->tile, DIAGDIR_NE); uint fence_ne = GetFence(ti->tile, DIAGDIR_NE);
if (fence_ne != 0) { if (fence_ne != 0) {
bounds.offset.x = -static_cast<int>(TILE_SIZE); int z = GetSlopePixelZInCorner(ti->tileh, CORNER_E);
bounds.offset.y = 0;
bounds.offset.z = GetSlopePixelZInCorner(ti->tileh, CORNER_E);
SpriteID sprite = _clear_land_fence_sprites[fence_ne - 1] + _fence_mod_by_tileh_ne[ti->tileh]; SpriteID sprite = _clear_land_fence_sprites[fence_ne - 1] + _fence_mod_by_tileh_ne[ti->tileh];
AddSortableSpriteToDraw(sprite, PAL_NONE, *ti, bounds, false); AddSortableSpriteToDraw(sprite, PAL_NONE, ti->x - 16, ti->y, 32, 16, maxz - z + 4, ti->z + z, false, 16, 0, -z);
} }
uint fence_sw = GetFence(ti->tile, DIAGDIR_SW); uint fence_sw = GetFence(ti->tile, DIAGDIR_SW);
uint fence_se = GetFence(ti->tile, DIAGDIR_SE); uint fence_se = GetFence(ti->tile, DIAGDIR_SE);
if (fence_sw != 0 || fence_se != 0) { if (fence_sw != 0 || fence_se != 0) {
bounds.offset.x = 0; int z = GetSlopePixelZInCorner(ti->tileh, CORNER_S);
bounds.offset.y = 0;
bounds.offset.z = GetSlopePixelZInCorner(ti->tileh, CORNER_S);
if (fence_sw != 0) { if (fence_sw != 0) {
SpriteID sprite = _clear_land_fence_sprites[fence_sw - 1] + _fence_mod_by_tileh_sw[ti->tileh]; SpriteID sprite = _clear_land_fence_sprites[fence_sw - 1] + _fence_mod_by_tileh_sw[ti->tileh];
AddSortableSpriteToDraw(sprite, PAL_NONE, *ti, bounds, false); AddSortableSpriteToDraw(sprite, PAL_NONE, ti->x, ti->y, 16, 16, maxz - z + 4, ti->z + z, false, 0, 0, -z);
} }
if (fence_se != 0) { if (fence_se != 0) {
SpriteID sprite = _clear_land_fence_sprites[fence_se - 1] + _fence_mod_by_tileh_se[ti->tileh]; SpriteID sprite = _clear_land_fence_sprites[fence_se - 1] + _fence_mod_by_tileh_se[ti->tileh];
AddSortableSpriteToDraw(sprite, PAL_NONE, *ti, bounds, false); AddSortableSpriteToDraw(sprite, PAL_NONE, ti->x, ti->y, 16, 16, maxz - z + 4, ti->z + z, false, 0, 0, -z);
} }
} }
EndSpriteCombine(); EndSpriteCombine();

View File

@ -28,29 +28,14 @@ inline int CentreBounds(int min, int max, int size)
return (min + max - size + 1) / 2; return (min + max - size + 1) / 2;
} }
/** A coordinate with two dimensons. */
template <typename T>
struct Coord2D {
T x = 0; ///< X coordinate.
T y = 0; ///< Y coordinate.
constexpr Coord2D() = default;
constexpr Coord2D(T x, T y) : x(x), y(y) {}
};
/** A coordinate with three dimensions. */
template <typename T>
struct Coord3D {
T x = 0; ///< X coordinate.
T y = 0; ///< Y coordinate.
T z = 0; ///< Z coordinate.
constexpr Coord3D() = default;
constexpr Coord3D(T x, T y, T z) : x(x), y(y), z(z) {}
};
/** Coordinates of a point in 2D */ /** Coordinates of a point in 2D */
using Point = Coord2D<int>; struct Point {
int x;
int y;
constexpr Point() : x(0), y(0) {}
constexpr Point(int x, int y) : x(x), y(y) {}
};
/** Dimensions (a width and height) of a rectangle in 2D */ /** Dimensions (a width and height) of a rectangle in 2D */
struct Dimension { struct Dimension {

View File

@ -816,7 +816,8 @@ struct DepotWindow : Window {
} else { } else {
ResetObjectToPlace(); ResetObjectToPlace();
} }
SndClickBeep();
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
break; break;
case WID_D_LOCATION: case WID_D_LOCATION:

View File

@ -992,5 +992,9 @@ void ReleaseDisasterVehicle(VehicleID vehicle)
void DisasterVehicle::UpdateDeltaXY() void DisasterVehicle::UpdateDeltaXY()
{ {
this->bounds = {{-1, -1, 0}, {2, 2, 5}, {}}; this->x_offs = -1;
this->y_offs = -1;
this->x_extent = 2;
this->y_extent = 2;
this->z_extent = 5;
} }

View File

@ -469,7 +469,7 @@ public:
this->RaiseWidget(_settings_client.gui.station_show_coverage + BDSW_LT_OFF); this->RaiseWidget(_settings_client.gui.station_show_coverage + BDSW_LT_OFF);
_settings_client.gui.station_show_coverage = (widget != BDSW_LT_OFF); _settings_client.gui.station_show_coverage = (widget != BDSW_LT_OFF);
this->LowerWidget(_settings_client.gui.station_show_coverage + BDSW_LT_OFF); this->LowerWidget(_settings_client.gui.station_show_coverage + BDSW_LT_OFF);
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
this->SetDirty(); this->SetDirty();
SetViewportCatchmentStation(nullptr, true); SetViewportCatchmentStation(nullptr, true);
break; break;
@ -580,7 +580,7 @@ public:
this->RaiseWidget(WID_BDD_X + _ship_depot_direction); this->RaiseWidget(WID_BDD_X + _ship_depot_direction);
_ship_depot_direction = (widget == WID_BDD_X ? AXIS_X : AXIS_Y); _ship_depot_direction = (widget == WID_BDD_X ? AXIS_X : AXIS_Y);
this->LowerWidget(WID_BDD_X + _ship_depot_direction); this->LowerWidget(WID_BDD_X + _ship_depot_direction);
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
UpdateDocksDirection(); UpdateDocksDirection();
this->SetDirty(); this->SetDirty();
break; break;

View File

@ -619,7 +619,11 @@ bool EffectVehicle::Tick()
void EffectVehicle::UpdateDeltaXY() void EffectVehicle::UpdateDeltaXY()
{ {
this->bounds = {{}, {1, 1, 1}, {}}; this->x_offs = 0;
this->y_offs = 0;
this->x_extent = 1;
this->y_extent = 1;
this->z_extent = 1;
} }
/** /**

View File

@ -248,12 +248,27 @@ static int GetPCPElevation(TileIndex tile, DiagDirection pcp_pos)
*/ */
void DrawRailCatenaryOnTunnel(const TileInfo *ti) void DrawRailCatenaryOnTunnel(const TileInfo *ti)
{ {
/* xmin, ymin, xmax + 1, ymax + 1 of BB */
static const int tunnel_wire_bb[4][4] = {
{ 0, 1, 16, 15 }, // NE
{ 1, 0, 15, 16 }, // SE
{ 0, 1, 16, 15 }, // SW
{ 1, 0, 15, 16 }, // NW
};
DiagDirection dir = GetTunnelBridgeDirection(ti->tile); DiagDirection dir = GetTunnelBridgeDirection(ti->tile);
SpriteID wire_base = GetWireBase(ti->tile); SpriteID wire_base = GetWireBase(ti->tile);
const SortableSpriteStruct &sss = _rail_catenary_sprite_data_tunnel[dir]; const SortableSpriteStruct *sss = &_rail_catenary_sprite_data_tunnel[dir];
AddSortableSpriteToDraw(wire_base + sss.image_offset, PAL_NONE, ti->x, ti->y, GetTilePixelZ(ti->tile), sss, IsTransparencySet(TO_CATENARY)); const int *bb_data = tunnel_wire_bb[dir];
AddSortableSpriteToDraw(
wire_base + sss->image_offset, PAL_NONE, ti->x + sss->x_offset, ti->y + sss->y_offset,
bb_data[2] - sss->x_offset, bb_data[3] - sss->y_offset, BB_Z_SEPARATOR - sss->z_offset + 1,
GetTilePixelZ(ti->tile) + sss->z_offset,
IsTransparencySet(TO_CATENARY),
bb_data[0] - sss->x_offset, bb_data[1] - sss->y_offset, BB_Z_SEPARATOR - sss->z_offset
);
} }
/** /**
@ -425,8 +440,8 @@ static void DrawRailCatenaryRailway(const TileInfo *ti)
continue; // No neighbour, go looking for a better position continue; // No neighbour, go looking for a better position
} }
AddSortableSpriteToDraw(pylon_base + _pylon_sprites[temp], PAL_NONE, x, y, elevation, AddSortableSpriteToDraw(pylon_base + _pylon_sprites[temp], PAL_NONE, x, y, 1, 1, BB_HEIGHT_UNDER_BRIDGE,
{{-1, -1, 0}, {1, 1, BB_HEIGHT_UNDER_BRIDGE}, {1, 1, 0}}, IsTransparencySet(TO_CATENARY)); elevation, IsTransparencySet(TO_CATENARY), -1, -1);
break; // We already have drawn a pylon, bail out break; // We already have drawn a pylon, bail out
} }
@ -467,7 +482,7 @@ static void DrawRailCatenaryRailway(const TileInfo *ti)
assert(pcp_config != 0); // We have a pylon on neither end of the wire, that doesn't work (since we have no sprites for that) assert(pcp_config != 0); // We have a pylon on neither end of the wire, that doesn't work (since we have no sprites for that)
assert(!IsSteepSlope(tileh[TS_HOME])); assert(!IsSteepSlope(tileh[TS_HOME]));
const SortableSpriteStruct &sss = _rail_catenary_sprite_data[_rail_wires[tileh_selector][t][pcp_config]]; const SortableSpriteStruct *sss = &_rail_catenary_sprite_data[_rail_wires[tileh_selector][t][pcp_config]];
/* /*
* The "wire"-sprite position is inside the tile, i.e. 0 <= sss->?_offset < TILE_SIZE. * The "wire"-sprite position is inside the tile, i.e. 0 <= sss->?_offset < TILE_SIZE.
@ -475,8 +490,9 @@ static void DrawRailCatenaryRailway(const TileInfo *ti)
* Also note that the result of GetSlopePixelZ() is very special for bridge-ramps, so we round the result up or * Also note that the result of GetSlopePixelZ() is very special for bridge-ramps, so we round the result up or
* down to the nearest full height change. * down to the nearest full height change.
*/ */
int z = (GetSlopePixelZ(ti->x + sss.origin.x, ti->y + sss.origin.y, true) + 4) / 8 * 8; AddSortableSpriteToDraw(wire_base + sss->image_offset, PAL_NONE, ti->x + sss->x_offset, ti->y + sss->y_offset,
AddSortableSpriteToDraw(wire_base + sss.image_offset, PAL_NONE, ti->x, ti->y, z, sss, IsTransparencySet(TO_CATENARY)); sss->x_size, sss->y_size, sss->z_size, (GetSlopePixelZ(ti->x + sss->x_offset, ti->y + sss->y_offset, true) + 4) / 8 * 8 + sss->z_offset,
IsTransparencySet(TO_CATENARY));
} }
} }
@ -514,12 +530,13 @@ void DrawRailCatenaryOnBridge(const TileInfo *ti)
SpriteID wire_base = GetWireBase(end, TCX_ON_BRIDGE); SpriteID wire_base = GetWireBase(end, TCX_ON_BRIDGE);
AddSortableSpriteToDraw(wire_base + sss->image_offset, PAL_NONE, ti->x, ti->y, height, *sss, IsTransparencySet(TO_CATENARY)); AddSortableSpriteToDraw(wire_base + sss->image_offset, PAL_NONE, ti->x + sss->x_offset, ti->y + sss->y_offset,
sss->x_size, sss->y_size, sss->z_size, height + sss->z_offset,
IsTransparencySet(TO_CATENARY)
);
SpriteID pylon_base = GetPylonBase(end, TCX_ON_BRIDGE); SpriteID pylon_base = GetPylonBase(end, TCX_ON_BRIDGE);
static constexpr SpriteBounds pylon_bounds{{-1, -1, 0}, {1, 1, BB_HEIGHT_UNDER_BRIDGE}, {1, 1, 0}};
/* Finished with wires, draw pylons /* Finished with wires, draw pylons
* every other tile needs a pylon on the northern end */ * every other tile needs a pylon on the northern end */
if (num % 2) { if (num % 2) {
@ -528,7 +545,7 @@ void DrawRailCatenaryOnBridge(const TileInfo *ti)
if (HasBit(tlg, (axis == AXIS_X ? 0 : 1))) ppp_pos = ReverseDir(ppp_pos); if (HasBit(tlg, (axis == AXIS_X ? 0 : 1))) ppp_pos = ReverseDir(ppp_pos);
uint x = ti->x + _x_pcp_offsets[pcp_pos] + _x_ppp_offsets[ppp_pos]; uint x = ti->x + _x_pcp_offsets[pcp_pos] + _x_ppp_offsets[ppp_pos];
uint y = ti->y + _y_pcp_offsets[pcp_pos] + _y_ppp_offsets[ppp_pos]; uint y = ti->y + _y_pcp_offsets[pcp_pos] + _y_ppp_offsets[ppp_pos];
AddSortableSpriteToDraw(pylon_base + _pylon_sprites[ppp_pos], PAL_NONE, x, y, height, pylon_bounds, IsTransparencySet(TO_CATENARY)); AddSortableSpriteToDraw(pylon_base + _pylon_sprites[ppp_pos], PAL_NONE, x, y, 1, 1, BB_HEIGHT_UNDER_BRIDGE, height, IsTransparencySet(TO_CATENARY), -1, -1);
} }
/* need a pylon on the southern end of the bridge */ /* need a pylon on the southern end of the bridge */
@ -538,7 +555,7 @@ void DrawRailCatenaryOnBridge(const TileInfo *ti)
if (HasBit(tlg, (axis == AXIS_X ? 0 : 1))) ppp_pos = ReverseDir(ppp_pos); if (HasBit(tlg, (axis == AXIS_X ? 0 : 1))) ppp_pos = ReverseDir(ppp_pos);
uint x = ti->x + _x_pcp_offsets[pcp_pos] + _x_ppp_offsets[ppp_pos]; uint x = ti->x + _x_pcp_offsets[pcp_pos] + _x_ppp_offsets[ppp_pos];
uint y = ti->y + _y_pcp_offsets[pcp_pos] + _y_ppp_offsets[ppp_pos]; uint y = ti->y + _y_pcp_offsets[pcp_pos] + _y_ppp_offsets[ppp_pos];
AddSortableSpriteToDraw(pylon_base + _pylon_sprites[ppp_pos], PAL_NONE, x, y, height, pylon_bounds, IsTransparencySet(TO_CATENARY)); AddSortableSpriteToDraw(pylon_base + _pylon_sprites[ppp_pos], PAL_NONE, x, y, 1, 1, BB_HEIGHT_UNDER_BRIDGE, height, IsTransparencySet(TO_CATENARY), -1, -1);
} }
} }
@ -552,12 +569,17 @@ void DrawRailCatenary(const TileInfo *ti)
switch (GetTileType(ti->tile)) { switch (GetTileType(ti->tile)) {
case MP_RAILWAY: case MP_RAILWAY:
if (IsRailDepot(ti->tile)) { if (IsRailDepot(ti->tile)) {
const SortableSpriteStruct &sss = _rail_catenary_sprite_data_depot[GetRailDepotDirection(ti->tile)]; const SortableSpriteStruct *sss = &_rail_catenary_sprite_data_depot[GetRailDepotDirection(ti->tile)];
SpriteID wire_base = GetWireBase(ti->tile); SpriteID wire_base = GetWireBase(ti->tile);
/* This wire is not visible with the default depot sprites */ /* This wire is not visible with the default depot sprites */
AddSortableSpriteToDraw(wire_base + sss.image_offset, PAL_NONE, ti->x, ti->y, GetTileMaxPixelZ(ti->tile), sss, IsTransparencySet(TO_CATENARY)); AddSortableSpriteToDraw(
wire_base + sss->image_offset, PAL_NONE, ti->x + sss->x_offset, ti->y + sss->y_offset,
sss->x_size, sss->y_size, sss->z_size,
GetTileMaxPixelZ(ti->tile) + sss->z_offset,
IsTransparencySet(TO_CATENARY)
);
return; return;
} }
break; break;

View File

@ -323,7 +323,7 @@ static void StartGeneratingLandscape(GenerateLandscapeWindowMode mode)
MakeNewgameSettingsLive(); MakeNewgameSettingsLive();
ResetGRFConfig(true); ResetGRFConfig(true);
SndConfirmBeep(); if (_settings_client.sound.confirm) SndPlayFx(SND_15_BEEP);
switch (mode) { switch (mode) {
case GLWM_GENERATE: _switch_mode = (_game_mode == GM_EDITOR) ? SM_GENRANDLAND : SM_NEWGAME; break; case GLWM_GENERATE: _switch_mode = (_game_mode == GM_EDITOR) ? SM_GENRANDLAND : SM_NEWGAME; break;
case GLWM_HEIGHTMAP: _switch_mode = (_game_mode == GM_EDITOR) ? SM_LOAD_HEIGHTMAP : SM_START_HEIGHTMAP; break; case GLWM_HEIGHTMAP: _switch_mode = (_game_mode == GM_EDITOR) ? SM_LOAD_HEIGHTMAP : SM_START_HEIGHTMAP; break;
@ -654,7 +654,7 @@ struct GenerateLandscapeWindow : public Window {
case WID_GL_TROPICAL: case WID_GL_TROPICAL:
case WID_GL_TOYLAND: case WID_GL_TOYLAND:
SetNewLandscapeType(LandscapeType(widget - WID_GL_TEMPERATE)); SetNewLandscapeType(LandscapeType(widget - WID_GL_TEMPERATE));
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
break; break;
case WID_GL_MAPSIZE_X_PULLDOWN: // Mapsize X case WID_GL_MAPSIZE_X_PULLDOWN: // Mapsize X
@ -719,7 +719,7 @@ struct GenerateLandscapeWindow : public Window {
case WID_GL_HEIGHTMAP_HEIGHT_TEXT: // Height level text case WID_GL_HEIGHTMAP_HEIGHT_TEXT: // Height level text
this->widget_id = WID_GL_HEIGHTMAP_HEIGHT_TEXT; this->widget_id = WID_GL_HEIGHTMAP_HEIGHT_TEXT;
ShowQueryString(GetString(STR_JUST_INT, _settings_newgame.game_creation.heightmap_height), STR_MAPGEN_HEIGHTMAP_HEIGHT_QUERY_CAPT, 4, this, CS_NUMERAL, QueryStringFlag::EnableDefault); ShowQueryString(GetString(STR_JUST_INT, _settings_newgame.game_creation.heightmap_height), STR_MAPGEN_HEIGHTMAP_HEIGHT_QUERY_CAPT, 4, this, CS_NUMERAL, QueryStringFlag::EnableDefault);
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
break; break;
@ -755,7 +755,7 @@ struct GenerateLandscapeWindow : public Window {
case WID_GL_SNOW_COVERAGE_TEXT: // Snow coverage text case WID_GL_SNOW_COVERAGE_TEXT: // Snow coverage text
this->widget_id = WID_GL_SNOW_COVERAGE_TEXT; this->widget_id = WID_GL_SNOW_COVERAGE_TEXT;
ShowQueryString(GetString(STR_JUST_INT, _settings_newgame.game_creation.snow_coverage), STR_MAPGEN_SNOW_COVERAGE_QUERY_CAPT, 4, this, CS_NUMERAL, QueryStringFlag::EnableDefault); ShowQueryString(GetString(STR_JUST_INT, _settings_newgame.game_creation.snow_coverage), STR_MAPGEN_SNOW_COVERAGE_QUERY_CAPT, 4, this, CS_NUMERAL, QueryStringFlag::EnableDefault);
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
break; break;
case WID_GL_DESERT_COVERAGE_DOWN: case WID_GL_DESERT_COVERAGE_DOWN:
@ -773,7 +773,7 @@ struct GenerateLandscapeWindow : public Window {
case WID_GL_DESERT_COVERAGE_TEXT: // Desert line text case WID_GL_DESERT_COVERAGE_TEXT: // Desert line text
this->widget_id = WID_GL_DESERT_COVERAGE_TEXT; this->widget_id = WID_GL_DESERT_COVERAGE_TEXT;
ShowQueryString(GetString(STR_JUST_INT, _settings_newgame.game_creation.desert_coverage), STR_MAPGEN_DESERT_COVERAGE_QUERY_CAPT, 4, this, CS_NUMERAL, QueryStringFlag::EnableDefault); ShowQueryString(GetString(STR_JUST_INT, _settings_newgame.game_creation.desert_coverage), STR_MAPGEN_DESERT_COVERAGE_QUERY_CAPT, 4, this, CS_NUMERAL, QueryStringFlag::EnableDefault);
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
break; break;
case WID_GL_HEIGHTMAP_ROTATION_PULLDOWN: // Heightmap rotation case WID_GL_HEIGHTMAP_ROTATION_PULLDOWN: // Heightmap rotation
@ -810,31 +810,31 @@ struct GenerateLandscapeWindow : public Window {
/* Freetype map borders */ /* Freetype map borders */
case WID_GL_WATER_NW: case WID_GL_WATER_NW:
_settings_newgame.game_creation.water_borders.Flip(BorderFlag::NorthWest); _settings_newgame.game_creation.water_borders.Flip(BorderFlag::NorthWest);
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
this->InvalidateData(); this->InvalidateData();
break; break;
case WID_GL_WATER_NE: case WID_GL_WATER_NE:
_settings_newgame.game_creation.water_borders.Flip(BorderFlag::NorthEast); _settings_newgame.game_creation.water_borders.Flip(BorderFlag::NorthEast);
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
this->InvalidateData(); this->InvalidateData();
break; break;
case WID_GL_WATER_SE: case WID_GL_WATER_SE:
_settings_newgame.game_creation.water_borders.Flip(BorderFlag::SouthEast); _settings_newgame.game_creation.water_borders.Flip(BorderFlag::SouthEast);
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
this->InvalidateData(); this->InvalidateData();
break; break;
case WID_GL_WATER_SW: case WID_GL_WATER_SW:
_settings_newgame.game_creation.water_borders.Flip(BorderFlag::SouthWest); _settings_newgame.game_creation.water_borders.Flip(BorderFlag::SouthWest);
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
this->InvalidateData(); this->InvalidateData();
break; break;
case WID_GL_BORDERS_RANDOM: case WID_GL_BORDERS_RANDOM:
_settings_newgame.game_creation.water_borders = (_settings_newgame.game_creation.water_borders == BorderFlag::Random) ? BorderFlag{} : BorderFlag::Random; _settings_newgame.game_creation.water_borders = (_settings_newgame.game_creation.water_borders == BorderFlag::Random) ? BorderFlag{} : BorderFlag::Random;
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
this->InvalidateData(); this->InvalidateData();
break; break;

View File

@ -92,7 +92,7 @@ struct GraphLegendWindow : Window {
InvalidateWindowData(WC_PERFORMANCE_HISTORY, 0); InvalidateWindowData(WC_PERFORMANCE_HISTORY, 0);
InvalidateWindowData(WC_COMPANY_VALUE, 0); InvalidateWindowData(WC_COMPANY_VALUE, 0);
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
} }
/** /**
@ -719,9 +719,10 @@ public:
case WID_GRAPH_RANGE_MATRIX: { case WID_GRAPH_RANGE_MATRIX: {
int row = GetRowFromWidget(pt.y, widget, 0, GetCharacterHeight(FS_SMALL) + WidgetDimensions::scaled.framerect.Vertical()); int row = GetRowFromWidget(pt.y, widget, 0, GetCharacterHeight(FS_SMALL) + WidgetDimensions::scaled.framerect.Vertical());
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
if (HasBit(this->masked_range, row)) break; if (HasBit(this->masked_range, row)) break;
ToggleBit(this->excluded_range, row); ToggleBit(this->excluded_range, row);
SndClickBeep();
this->SetDirty(); this->SetDirty();
break; break;
} }
@ -1259,7 +1260,7 @@ struct BaseCargoGraphWindow : BaseGraphWindow {
int row = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_GRAPH_MATRIX); int row = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_GRAPH_MATRIX);
if (row >= this->vscroll->GetCount()) return; if (row >= this->vscroll->GetCount()) return;
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
for (const CargoSpec *cs : _sorted_cargo_specs) { for (const CargoSpec *cs : _sorted_cargo_specs) {
if (!HasBit(this->cargo_types, cs->Index())) continue; if (!HasBit(this->cargo_types, cs->Index())) continue;

View File

@ -374,7 +374,13 @@ static void DrawTile_Industry(TileInfo *ti)
image = dits->building.sprite; image = dits->building.sprite;
if (image != 0) { if (image != 0) {
AddSortableSpriteToDraw(image, SpriteLayoutPaletteTransform(image, dits->building.pal, GetColourPalette(ind->random_colour)), AddSortableSpriteToDraw(image, SpriteLayoutPaletteTransform(image, dits->building.pal, GetColourPalette(ind->random_colour)),
*ti, *dits, IsTransparencySet(TO_INDUSTRIES)); ti->x + dits->subtile_x,
ti->y + dits->subtile_y,
dits->width,
dits->height,
dits->dz,
ti->z,
IsTransparencySet(TO_INDUSTRIES));
if (IsTransparencySet(TO_INDUSTRIES)) return; if (IsTransparencySet(TO_INDUSTRIES)) return;
} }

View File

@ -3076,7 +3076,7 @@ struct IndustryCargoesWindow : public Window {
case WID_IC_NOTIFY: case WID_IC_NOTIFY:
this->ToggleWidgetLoweredState(WID_IC_NOTIFY); this->ToggleWidgetLoweredState(WID_IC_NOTIFY);
this->SetWidgetDirty(WID_IC_NOTIFY); this->SetWidgetDirty(WID_IC_NOTIFY);
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
if (this->IsWidgetLowered(WID_IC_NOTIFY)) { if (this->IsWidgetLowered(WID_IC_NOTIFY)) {
if (FindWindowByClass(WC_SMALLMAP) == nullptr) ShowSmallMap(); if (FindWindowByClass(WC_SMALLMAP) == nullptr) ShowSmallMap();

View File

@ -450,8 +450,9 @@ void DrawFoundation(TileInfo *ti, Foundation f)
if (IsSteepSlope(ti->tileh)) { if (IsSteepSlope(ti->tileh)) {
if (!IsNonContinuousFoundation(f)) { if (!IsNonContinuousFoundation(f)) {
/* Lower part of foundation */ /* Lower part of foundation */
static constexpr SpriteBounds bounds{{}, {TILE_SIZE, TILE_SIZE, TILE_HEIGHT - 1}, {}}; AddSortableSpriteToDraw(
AddSortableSpriteToDraw(leveled_base + (ti->tileh & ~SLOPE_STEEP), PAL_NONE, *ti, bounds); leveled_base + (ti->tileh & ~SLOPE_STEEP), PAL_NONE, ti->x, ti->y, TILE_SIZE, TILE_SIZE, TILE_HEIGHT - 1, ti->z
);
} }
Corner highest_corner = GetHighestSlopeCorner(ti->tileh); Corner highest_corner = GetHighestSlopeCorner(ti->tileh);
@ -461,25 +462,24 @@ void DrawFoundation(TileInfo *ti, Foundation f)
/* inclined foundation */ /* inclined foundation */
uint8_t inclined = highest_corner * 2 + (f == FOUNDATION_INCLINED_Y ? 1 : 0); uint8_t inclined = highest_corner * 2 + (f == FOUNDATION_INCLINED_Y ? 1 : 0);
SpriteBounds bounds{{}, {1, 1, TILE_HEIGHT}, {}}; AddSortableSpriteToDraw(inclined_base + inclined, PAL_NONE, ti->x, ti->y,
if (f == FOUNDATION_INCLINED_X) bounds.extent.x = TILE_SIZE; f == FOUNDATION_INCLINED_X ? TILE_SIZE : 1,
if (f == FOUNDATION_INCLINED_Y) bounds.extent.y = TILE_SIZE; f == FOUNDATION_INCLINED_Y ? TILE_SIZE : 1,
AddSortableSpriteToDraw(inclined_base + inclined, PAL_NONE, *ti, bounds); TILE_HEIGHT, ti->z
);
OffsetGroundSprite(0, 0); OffsetGroundSprite(0, 0);
} else if (IsLeveledFoundation(f)) { } else if (IsLeveledFoundation(f)) {
static constexpr SpriteBounds bounds{{0, 0, -(int)TILE_HEIGHT}, {TILE_SIZE, TILE_SIZE, TILE_HEIGHT - 1}, {}}; AddSortableSpriteToDraw(leveled_base + SlopeWithOneCornerRaised(highest_corner), PAL_NONE, ti->x, ti->y, TILE_SIZE, TILE_SIZE, TILE_HEIGHT - 1, ti->z - TILE_HEIGHT);
AddSortableSpriteToDraw(leveled_base + SlopeWithOneCornerRaised(highest_corner), PAL_NONE, *ti, bounds);
OffsetGroundSprite(0, -(int)TILE_HEIGHT); OffsetGroundSprite(0, -(int)TILE_HEIGHT);
} else if (f == FOUNDATION_STEEP_LOWER) { } else if (f == FOUNDATION_STEEP_LOWER) {
/* one corner raised */ /* one corner raised */
OffsetGroundSprite(0, -(int)TILE_HEIGHT); OffsetGroundSprite(0, -(int)TILE_HEIGHT);
} else { } else {
/* halftile foundation */ /* halftile foundation */
int8_t x_bb = (((highest_corner == CORNER_W) || (highest_corner == CORNER_S)) ? TILE_SIZE / 2 : 0); int x_bb = (((highest_corner == CORNER_W) || (highest_corner == CORNER_S)) ? TILE_SIZE / 2 : 0);
int8_t y_bb = (((highest_corner == CORNER_S) || (highest_corner == CORNER_E)) ? TILE_SIZE / 2 : 0); int y_bb = (((highest_corner == CORNER_S) || (highest_corner == CORNER_E)) ? TILE_SIZE / 2 : 0);
SpriteBounds bounds{{x_bb, y_bb, TILE_HEIGHT}, {TILE_SIZE / 2, TILE_SIZE / 2, TILE_HEIGHT - 1}, {}}; AddSortableSpriteToDraw(halftile_base + highest_corner, PAL_NONE, ti->x + x_bb, ti->y + y_bb, TILE_SIZE / 2, TILE_SIZE / 2, TILE_HEIGHT - 1, ti->z + TILE_HEIGHT);
AddSortableSpriteToDraw(halftile_base + highest_corner, PAL_NONE, *ti, bounds);
/* Reposition ground sprite back to original position after bounding box change above. This is similar to /* Reposition ground sprite back to original position after bounding box change above. This is similar to
* RemapCoords() but without zoom scaling. */ * RemapCoords() but without zoom scaling. */
Point pt = {(y_bb - x_bb) * 2, y_bb + x_bb}; Point pt = {(y_bb - x_bb) * 2, y_bb + x_bb};
@ -488,17 +488,15 @@ void DrawFoundation(TileInfo *ti, Foundation f)
} else { } else {
if (IsLeveledFoundation(f)) { if (IsLeveledFoundation(f)) {
/* leveled foundation */ /* leveled foundation */
static constexpr SpriteBounds bounds{{}, {TILE_SIZE, TILE_SIZE, TILE_HEIGHT - 1}, {}}; AddSortableSpriteToDraw(leveled_base + ti->tileh, PAL_NONE, ti->x, ti->y, TILE_SIZE, TILE_SIZE, TILE_HEIGHT - 1, ti->z);
AddSortableSpriteToDraw(leveled_base + ti->tileh, PAL_NONE, *ti, bounds);
OffsetGroundSprite(0, -(int)TILE_HEIGHT); OffsetGroundSprite(0, -(int)TILE_HEIGHT);
} else if (IsNonContinuousFoundation(f)) { } else if (IsNonContinuousFoundation(f)) {
/* halftile foundation */ /* halftile foundation */
Corner halftile_corner = GetHalftileFoundationCorner(f); Corner halftile_corner = GetHalftileFoundationCorner(f);
int8_t x_bb = (((halftile_corner == CORNER_W) || (halftile_corner == CORNER_S)) ? TILE_SIZE / 2 : 0); int x_bb = (((halftile_corner == CORNER_W) || (halftile_corner == CORNER_S)) ? TILE_SIZE / 2 : 0);
int8_t y_bb = (((halftile_corner == CORNER_S) || (halftile_corner == CORNER_E)) ? TILE_SIZE / 2 : 0); int y_bb = (((halftile_corner == CORNER_S) || (halftile_corner == CORNER_E)) ? TILE_SIZE / 2 : 0);
SpriteBounds bounds{{x_bb, y_bb, 0}, {TILE_SIZE / 2, TILE_SIZE / 2, TILE_HEIGHT - 1}, {}}; AddSortableSpriteToDraw(halftile_base + halftile_corner, PAL_NONE, ti->x + x_bb, ti->y + y_bb, TILE_SIZE / 2, TILE_SIZE / 2, TILE_HEIGHT - 1, ti->z);
AddSortableSpriteToDraw(halftile_base + halftile_corner, PAL_NONE, *ti, bounds);
/* Reposition ground sprite back to original position after bounding box change above. This is similar to /* Reposition ground sprite back to original position after bounding box change above. This is similar to
* RemapCoords() but without zoom scaling. */ * RemapCoords() but without zoom scaling. */
Point pt = {(y_bb - x_bb) * 2, y_bb + x_bb}; Point pt = {(y_bb - x_bb) * 2, y_bb + x_bb};
@ -513,17 +511,17 @@ void DrawFoundation(TileInfo *ti, Foundation f)
/* tile-slope = sloped along X/Y, foundation-slope = three corners raised */ /* tile-slope = sloped along X/Y, foundation-slope = three corners raised */
spr = inclined_base + 2 * GetRailFoundationCorner(f) + ((ti->tileh == SLOPE_SW || ti->tileh == SLOPE_NE) ? 1 : 0); spr = inclined_base + 2 * GetRailFoundationCorner(f) + ((ti->tileh == SLOPE_SW || ti->tileh == SLOPE_NE) ? 1 : 0);
} }
static constexpr SpriteBounds bounds{{}, {TILE_SIZE, TILE_SIZE, TILE_HEIGHT - 1}, {}}; AddSortableSpriteToDraw(spr, PAL_NONE, ti->x, ti->y, TILE_SIZE, TILE_SIZE, TILE_HEIGHT - 1, ti->z);
AddSortableSpriteToDraw(spr, PAL_NONE, *ti, bounds);
OffsetGroundSprite(0, 0); OffsetGroundSprite(0, 0);
} else { } else {
/* inclined foundation */ /* inclined foundation */
uint8_t inclined = GetHighestSlopeCorner(ti->tileh) * 2 + (f == FOUNDATION_INCLINED_Y ? 1 : 0); uint8_t inclined = GetHighestSlopeCorner(ti->tileh) * 2 + (f == FOUNDATION_INCLINED_Y ? 1 : 0);
SpriteBounds bounds{{}, {1, 1, TILE_HEIGHT}, {}}; AddSortableSpriteToDraw(inclined_base + inclined, PAL_NONE, ti->x, ti->y,
if (f == FOUNDATION_INCLINED_X) bounds.extent.x = TILE_SIZE; f == FOUNDATION_INCLINED_X ? TILE_SIZE : 1,
if (f == FOUNDATION_INCLINED_Y) bounds.extent.y = TILE_SIZE; f == FOUNDATION_INCLINED_Y ? TILE_SIZE : 1,
AddSortableSpriteToDraw(inclined_base + inclined, PAL_NONE, *ti, bounds); TILE_HEIGHT, ti->z
);
OffsetGroundSprite(0, 0); OffsetGroundSprite(0, 0);
} }
ti->z += ApplyPixelFoundationToSlope(f, ti->tileh); ti->z += ApplyPixelFoundationToSlope(f, ti->tileh);

View File

@ -635,11 +635,9 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Não mos
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Mostrar/Ocultar gráfico para este tipo de carga STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Mostrar/Ocultar gráfico para este tipo de carga
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING} STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} - Histórico de Carga STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Histórico da Produção
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produzido STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produzido
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transportado STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transportado
STR_GRAPH_INDUSTRY_RANGE_DELIVERED :Entregue
STR_GRAPH_INDUSTRY_RANGE_WAITING :Aguardando
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Mostrar avaliações detalhadas de desempenho STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Mostrar avaliações detalhadas de desempenho
@ -4027,8 +4025,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Produç
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Produção no último minuto: STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Produção no último minuto:
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transportado) STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transportado)
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centralizar visualização principal na localização da indústria. Ctrl+Clique para abrir uma nova visualização na localização da indústria STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centralizar visualização principal na localização da indústria. Ctrl+Clique para abrir uma nova visualização na localização da indústria
STR_INDUSTRY_VIEW_CARGO_GRAPH :{BLACK}Gráfico da Carga STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Gráfico de Produção
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}Mostrar o gráfico do histórico de carga da indústria STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Mostrar gráfico do histórico de produção da indústria
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nível de produção: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nível de produção: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}A indústria anunciou fechamento iminente! STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}A indústria anunciou fechamento iminente!

View File

@ -628,6 +628,7 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Скри
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Активирай/деактивирай графиката за видовете товар STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Активирай/деактивирай графиката за видовете товар
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING} STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - История на производството
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Покажи подробен рейтинг на представянето STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Покажи подробен рейтинг на представянето
@ -3966,6 +3967,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Прои
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Произведено последната минута: STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Произведено последната минута:
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% превозено) STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% превозено)
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Центриране камерата върху индустрията. Ctrl+Click отваря прозорец с нов изглед към индустрията STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Центриране камерата върху индустрията. Ctrl+Click отваря прозорец с нов изглед към индустрията
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Производствена графика
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Показва графиката на производствената история на индустрията
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Ниво на производство: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Ниво на производство: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Индустрията обяви незабавна ликвидация! STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Индустрията обяви незабавна ликвидация!

View File

@ -635,6 +635,7 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}No mostr
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Mostra/amaga el tipus de càrrega al gràfic STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Mostra/amaga el tipus de càrrega al gràfic
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING} STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Historial de producció
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produït STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produït
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transportat STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transportat
@ -4024,6 +4025,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Producci
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Producció durant l'últim minut: STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Producció durant l'últim minut:
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}{NBSP}% transportat) STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}{NBSP}% transportat)
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centra la vista principal al lloc de la indústria. Amb Ctrl+clic, s'obre una vista nova centrada al lloc on és la indústria. STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centra la vista principal al lloc de la indústria. Amb Ctrl+clic, s'obre una vista nova centrada al lloc on és la indústria.
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Gràfic de producció
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Mostra el gràfic de l'evolució de la producció de la indústria.
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivell de producció: {YELLOW}{COMMA}{NBSP}% STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivell de producció: {YELLOW}{COMMA}{NBSP}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}La indústria ha anunciat la seva clausura imminent! STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}La indústria ha anunciat la seva clausura imminent!

View File

@ -720,6 +720,7 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Skryje v
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Zobrazit nebo skrýt graf pro určitý druh nákladu STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Zobrazit nebo skrýt graf pro určitý druh nákladu
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING} STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Historie produkce
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Vyprodukováno STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Vyprodukováno
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Přepraveno STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Přepraveno
@ -4068,6 +4069,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Produkce
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Produkce v minulé minutě: STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Produkce v minulé minutě:
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% přepraveno) STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% přepraveno)
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Vystředit pohled na průmysl. Ctrl+Klik otevře nový pohled na umístění průmyslu STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Vystředit pohled na průmysl. Ctrl+Klik otevře nový pohled na umístění průmyslu
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Graf výroby
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Zobrazí graf historie produkce průmyslu
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produkce: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produkce: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Průmysl oznámila blížící se uzavření! STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Průmysl oznámila blížící se uzavření!

View File

@ -633,6 +633,7 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Vis inte
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Skift grafen for denne lasttype til/fra STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Skift grafen for denne lasttype til/fra
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING} STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Produktionshistorie
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produceret STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produceret
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transporteret STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transporteret
@ -4012,6 +4013,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Produkti
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Produktion sidste minut: STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Produktion sidste minut:
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transporteret) STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transporteret)
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrer skærmen over industriens lokalitet. Ctrl+Klik åbner et nyt vindue ved industriens lokalitet. STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrer skærmen over industriens lokalitet. Ctrl+Klik åbner et nyt vindue ved industriens lokalitet.
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Produktionsgraf
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Viser grafen over industriens produktionshistorie
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produktions niveauet: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produktions niveauet: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industrien har rapporteret øjeblikkelig nedlukning! STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industrien har rapporteret øjeblikkelig nedlukning!

View File

@ -634,11 +634,9 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Geen vra
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Grafiek voor dit vrachttype weergeven-verbergen STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Grafiek voor dit vrachttype weergeven-verbergen
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING} STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} - Vrachtgeschiedenis STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Productiegeschiedenis
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Geproduceerd STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Geproduceerd
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Vervoerd STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Vervoerd
STR_GRAPH_INDUSTRY_RANGE_DELIVERED :Afgeleverd
STR_GRAPH_INDUSTRY_RANGE_WAITING :Wachtend
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Gedetailleerde prestatiescores weergeven STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Gedetailleerde prestatiescores weergeven
@ -4026,8 +4024,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Producti
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Productie vorige minuut: STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Productie vorige minuut:
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% vervoerd) STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% vervoerd)
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centreer het hoofdscherm op de locatie van de industrie. Ctrl+klik opent een nieuws venster op de locatie van de industrie STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centreer het hoofdscherm op de locatie van de industrie. Ctrl+klik opent een nieuws venster op de locatie van de industrie
STR_INDUSTRY_VIEW_CARGO_GRAPH :{BLACK}Vrachtgrafiek STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Productiegrafiek
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}Geeft de grafiek weer van de geschiedenis van de vracht STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Geeft de grafiek weer van de productiegeschiedenis van de industrie
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Productieniveau: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Productieniveau: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}De industrie heeft een dreigende sluiting aangekondigd! STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}De industrie heeft een dreigende sluiting aangekondigd!
@ -5003,7 +5001,6 @@ STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}Vlak lan
STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Landhelling is in de verkeerde richting STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Landhelling is in de verkeerde richting
STR_ERROR_CAN_T_DO_THIS :{WHITE}Kan dit niet uitvoeren... STR_ERROR_CAN_T_DO_THIS :{WHITE}Kan dit niet uitvoeren...
STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Gebouw moet eerst gesloopt worden STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Gebouw moet eerst gesloopt worden
STR_ERROR_BUILDING_IS_PROTECTED :{WHITE}... gebouw is beschermd
STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Kan dit gebied niet ontruimen... STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Kan dit gebied niet ontruimen...
STR_ERROR_SITE_UNSUITABLE :{WHITE}... locatie ongeschikt STR_ERROR_SITE_UNSUITABLE :{WHITE}... locatie ongeschikt
STR_ERROR_ALREADY_BUILT :{WHITE}... reeds gebouwd STR_ERROR_ALREADY_BUILT :{WHITE}... reeds gebouwd

View File

@ -634,11 +634,9 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Display
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Toggle graph of this cargo type STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Toggle graph of this cargo type
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING} STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} - Cargo History STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Production History
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produced STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produced
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transported STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transported
STR_GRAPH_INDUSTRY_RANGE_DELIVERED :Delivered
STR_GRAPH_INDUSTRY_RANGE_WAITING :Waiting
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Show detailed performance ratings STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Show detailed performance ratings
@ -4026,8 +4024,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Producti
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Production last minute: STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Production last minute:
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transported) STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transported)
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centre the main view on industry location. Ctrl+Click to open a new viewport on industry location STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centre the main view on industry location. Ctrl+Click to open a new viewport on industry location
STR_INDUSTRY_VIEW_CARGO_GRAPH :{BLACK}Cargo Graph STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Production Graph
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}Shows the graph of industry cargo history STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Shows the graph of industry production history
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Production level: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Production level: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}The industry has announced imminent closure! STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}The industry has announced imminent closure!

View File

@ -634,11 +634,9 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Display
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Toggle graph of this cargo type STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Toggle graph of this cargo type
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING} STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} - Cargo History STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Production History
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produced STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produced
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transported STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transported
STR_GRAPH_INDUSTRY_RANGE_DELIVERED :Delivered
STR_GRAPH_INDUSTRY_RANGE_WAITING :Waiting
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Show detailed performance ratings STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Show detailed performance ratings
@ -4026,8 +4024,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Producti
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Production last minute: STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Production last minute:
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transported) STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transported)
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Center the main view on industry location. Ctrl+Click to open a new viewport on industry location STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Center the main view on industry location. Ctrl+Click to open a new viewport on industry location
STR_INDUSTRY_VIEW_CARGO_GRAPH :{BLACK}Cargo Graph STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Production Graph
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}Shows the graph of industry cargo history STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Shows the graph of industry production history
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Production level: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Production level: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}The industry has announced imminent closure! STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}The industry has announced imminent closure!
@ -5003,7 +5001,6 @@ STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}Flat lan
STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Land sloped in wrong direction STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Land sloped in wrong direction
STR_ERROR_CAN_T_DO_THIS :{WHITE}Can't do this... STR_ERROR_CAN_T_DO_THIS :{WHITE}Can't do this...
STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Building must be demolished first STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Building must be demolished first
STR_ERROR_BUILDING_IS_PROTECTED :{WHITE}... building is protected
STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Can't clear this area... STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Can't clear this area...
STR_ERROR_SITE_UNSUITABLE :{WHITE}... site unsuitable STR_ERROR_SITE_UNSUITABLE :{WHITE}... site unsuitable
STR_ERROR_ALREADY_BUILT :{WHITE}... already built STR_ERROR_ALREADY_BUILT :{WHITE}... already built

View File

@ -634,11 +634,9 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Älä n
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Valitse, näytetäänkö tämän rahdin kuvaaja STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Valitse, näytetäänkö tämän rahdin kuvaaja
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING} STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} rahtihistoria STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} Tuotantohistoria
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Tuotettu STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Tuotettu
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Kuljetettu STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Kuljetettu
STR_GRAPH_INDUSTRY_RANGE_DELIVERED :Toimitettu
STR_GRAPH_INDUSTRY_RANGE_WAITING :Odottava
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Näytä tarkat suorituskykyarviot STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Näytä tarkat suorituskykyarviot
@ -4026,8 +4024,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Tuotanto
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Tuotanto viime minuutissa: STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Tuotanto viime minuutissa:
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}{NBSP}% kuljetettu) STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}{NBSP}% kuljetettu)
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Keskitä päänäkymä tuotantolaitoksen sijaintiin. Ctrl+napsautus avataksesi uuden näkymäikkunan laitoksen sijaintiin STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Keskitä päänäkymä tuotantolaitoksen sijaintiin. Ctrl+napsautus avataksesi uuden näkymäikkunan laitoksen sijaintiin
STR_INDUSTRY_VIEW_CARGO_GRAPH :{BLACK}Rahdin kuvaaja STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Tuotannon kuvaaja
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}Näyttää tuotantolaitoksen rahtihistorian kuvaajana STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Näyttää tuotantohistorian kuvaajana
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Tuotantotaso: {YELLOW}{COMMA}{NBSP}% STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Tuotantotaso: {YELLOW}{COMMA}{NBSP}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Teollisuuslaitos ilmoittaa välittömästä lakkautuksesta! STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Teollisuuslaitos ilmoittaa välittömästä lakkautuksesta!

View File

@ -634,6 +634,7 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}N'affich
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Afficher/Cacher le type de marchandise STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Afficher/Cacher le type de marchandise
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING} STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Historique de production
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produit STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produit
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transporté STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transporté
@ -4001,6 +4002,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Producti
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Production la minute précédente{NBSP}: STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Production la minute précédente{NBSP}:
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}{NBSP}% transporté{P "" s}) STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}{NBSP}% transporté{P "" s})
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrer la vue sur l'industrie. Ctrl-clic pour ouvrir une nouvelle vue sur l'industrie. STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrer la vue sur l'industrie. Ctrl-clic pour ouvrir une nouvelle vue sur l'industrie.
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Graphe de production
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Affiche le graphe de l'historique de la production des industries
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Niveau de production{NBSP}: {YELLOW}{COMMA}{NBSP}% STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Niveau de production{NBSP}: {YELLOW}{COMMA}{NBSP}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}L'industrie a annoncé sa fermeture imminente{NBSP}! STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}L'industrie a annoncé sa fermeture imminente{NBSP}!

View File

@ -635,11 +635,9 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Non amos
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Amosar/ocultar gráfica para o tipo de carga STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Amosar/ocultar gráfica para o tipo de carga
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING} STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} - Histórico de carga STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Historial de produción
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Producido STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Producido
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transportado STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transportado
STR_GRAPH_INDUSTRY_RANGE_DELIVERED :Entregada
STR_GRAPH_INDUSTRY_RANGE_WAITING :Agardando
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Amosar puntuacións de rendemento detalladas STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Amosar puntuacións de rendemento detalladas
@ -4027,8 +4025,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Produci
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Producción no último minuto: STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Producción no último minuto:
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transportado) STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transportado)
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrar a vista principal na localización da industria. Ctrl+Clic abre unha nova fiestra na localización da industria STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrar a vista principal na localización da industria. Ctrl+Clic abre unha nova fiestra na localización da industria
STR_INDUSTRY_VIEW_CARGO_GRAPH :{BLACK}Gráfica de carga STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Gráfico de produción
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}Amosa o gráfico do histórico de cargas da industria STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Amosa o gráfico co histórico de produción industrial
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivel de produción: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivel de produción: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}A industria anunció un peche inminente STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}A industria anunció un peche inminente
@ -5004,7 +5002,6 @@ STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}Precísa
STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Terreo inclinado na dirección incorrecta STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Terreo inclinado na dirección incorrecta
STR_ERROR_CAN_T_DO_THIS :{WHITE}Non podes facer iso... STR_ERROR_CAN_T_DO_THIS :{WHITE}Non podes facer iso...
STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Debes demole-lo edificio primeiro STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Debes demole-lo edificio primeiro
STR_ERROR_BUILDING_IS_PROTECTED :{WHITE}... a estrutura está protexida
STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Non podes limpar esta área... STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Non podes limpar esta área...
STR_ERROR_SITE_UNSUITABLE :{WHITE}... emprazamento inadecuado STR_ERROR_SITE_UNSUITABLE :{WHITE}... emprazamento inadecuado
STR_ERROR_ALREADY_BUILT :{WHITE}... xa construído STR_ERROR_ALREADY_BUILT :{WHITE}... xa construído

View File

@ -627,6 +627,7 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Zeige ke
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Diagramm für diesen Frachttyp ein/aus STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Diagramm für diesen Frachttyp ein/aus
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING} STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Produktionshistorie
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Zeige detailierte Leistungsaufschlüsselung STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Zeige detailierte Leistungsaufschlüsselung
@ -3957,6 +3958,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Produkti
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Produktion in der letzten Minute: STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Produktion in der letzten Minute:
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% befördert) STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% befördert)
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Hauptansicht auf den Industriestandort zentrieren. Mit Strg+Klick wird eine neue Zusatzansicht auf den Industriestandort geöffnet STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Hauptansicht auf den Industriestandort zentrieren. Mit Strg+Klick wird eine neue Zusatzansicht auf den Industriestandort geöffnet
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Produktionsgraph
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Zeigt den Graphen der Produktionshistorie der Industrie an
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produktionsrate: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produktionsrate: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Diese Industrie wird in Kürze schließen! STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Diese Industrie wird in Kürze schließen!

View File

@ -727,11 +727,9 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Εμφά
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Εναλλαγή γραφήματος αυτού του τύπου φορτίου STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Εναλλαγή γραφήματος αυτού του τύπου φορτίου
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING} STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} - Ιστορικό φορτίου STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Ιστορικό Παραγωγής
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Παράχθηκε/αν STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Παράχθηκε/αν
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Μεταφέρθηκε/αν STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Μεταφέρθηκε/αν
STR_GRAPH_INDUSTRY_RANGE_DELIVERED :Παραδόθηκε
STR_GRAPH_INDUSTRY_RANGE_WAITING :Αναμονή
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Εμφάνιση λεπτομεριών αποδόσεων STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Εμφάνιση λεπτομεριών αποδόσεων
@ -4120,8 +4118,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Παρα
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Παραγωγή τελευταίου λεπτού: STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Παραγωγή τελευταίου λεπτού:
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% μεταφέρθηκαν) STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% μεταφέρθηκαν)
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Κεντράρισμα εικόνας στην περιοχή της βιομηχανίας. Ctrl+Κλικ για άνοιγμα νέου παραθύρου προβολής στην περιοχή της βιομηχανίας STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Κεντράρισμα εικόνας στην περιοχή της βιομηχανίας. Ctrl+Κλικ για άνοιγμα νέου παραθύρου προβολής στην περιοχή της βιομηχανίας
STR_INDUSTRY_VIEW_CARGO_GRAPH :{BLACK}Γράφημα φορτίου STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Γράφημα Παραγωγής
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}Εμφανίζει το γράφημα του ιστορικού του φορτίου της βιομηχανίας STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Εμφανίζει το γράφημα ιστορικού παραγωγής της βιομηχανίας
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Επίπεδο παραγωγής: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Επίπεδο παραγωγής: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Η βιομηχανία έχει ανακοινώσει άμεσο κλείσιμο! STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Η βιομηχανία έχει ανακοινώσει άμεσο κλείσιμο!

View File

@ -697,11 +697,9 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Ne mutas
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Adott rakomány grafikonjának mutatása be/ki STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Adott rakomány grafikonjának mutatása be/ki
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING} STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} - Rakománytörténet STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Termelési előzmények
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Előállított STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Előállított
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Szállítva STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Szállítva
STR_GRAPH_INDUSTRY_RANGE_DELIVERED :Leszállítva
STR_GRAPH_INDUSTRY_RANGE_WAITING :Várakozik
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Részletes teljesítményértékelés mutatása STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Részletes teljesítményértékelés mutatása
@ -4090,8 +4088,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Múlt ha
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Termelés az elmúlt percben: STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Termelés az elmúlt percben:
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% elszállítva) STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% elszállítva)
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}A fő nézetet a gazdasági épületre állítja. Ctrl+kattintással új nézet nyílik a gazdasági épület helyzeténél STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}A fő nézetet a gazdasági épületre állítja. Ctrl+kattintással új nézet nyílik a gazdasági épület helyzeténél
STR_INDUSTRY_VIEW_CARGO_GRAPH :{BLACK}Rakomány grafikon STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Termelési grafikon
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}Megmutatja az iparág rakománytörténetének grafikonját STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Megjeleníti az ipar termelési történetének grafikonját
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Termelési szint: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Termelési szint: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}A gyár bejelentette a közelgő bezárását! STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}A gyár bejelentette a közelgő bezárását!
@ -5067,7 +5065,6 @@ STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}Sima tal
STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Rossz irányba lejt a föld STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Rossz irányba lejt a föld
STR_ERROR_CAN_T_DO_THIS :{WHITE}Nem teheted ezt... STR_ERROR_CAN_T_DO_THIS :{WHITE}Nem teheted ezt...
STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Előbb le kell rombolnod az épületet STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Előbb le kell rombolnod az épületet
STR_ERROR_BUILDING_IS_PROTECTED :{WHITE}... a(z) épület védett
STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Nem tisztíthatod meg ezt a területet... STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Nem tisztíthatod meg ezt a területet...
STR_ERROR_SITE_UNSUITABLE :{WHITE}... nem alkalmas rá a hely STR_ERROR_SITE_UNSUITABLE :{WHITE}... nem alkalmas rá a hely
STR_ERROR_ALREADY_BUILT :{WHITE}... már van itt STR_ERROR_ALREADY_BUILT :{WHITE}... már van itt

View File

@ -437,7 +437,6 @@ STR_SETTINGS_MENU_NEWGRF_SETTINGS :NewGRFの設定
STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :透過表示設定 STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :透過表示設定
STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :街名を表示 STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :街名を表示
STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :駅名を表示 STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :駅名を表示
STR_SETTINGS_MENU_STATION_NAMES_BUS :バス停
STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :中継駅名を表示 STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :中継駅名を表示
STR_SETTINGS_MENU_SIGNS_DISPLAYED :標識を表示 STR_SETTINGS_MENU_SIGNS_DISPLAYED :標識を表示
STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS :競争者の標識と名前を表示 STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS :競争者の標識と名前を表示
@ -523,7 +522,6 @@ STR_ABOUT_MENU_ABOUT_OPENTTD :OpenTTDにつ
STR_ABOUT_MENU_SPRITE_ALIGNER :スプライトを整列 STR_ABOUT_MENU_SPRITE_ALIGNER :スプライトを整列
STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :バウンディングボックスの表示切替 STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :バウンディングボックスの表示切替
STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :ダーティーブロックの色付け切替 STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :ダーティーブロックの色付け切替
STR_ABOUT_MENU_TOGGLE_WIDGET_OUTLINES :ウィジェットの枠線の表示切替
###length 31 ###length 31
STR_DAY_NUMBER_1ST :1 STR_DAY_NUMBER_1ST :1
@ -1205,14 +1203,12 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :中央
STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :右 STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :右
STR_CONFIG_SETTING_INFINITE_MONEY :無限の資金: {STRING}
STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :無制限の支出を許容し、会社の破産も無効にします
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :初期の借入最大額: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :初期の借入最大額: {STRING}
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :初期の借入限度額を設定します (インフレは考慮されません)。「借入金なし」に設定した場合、ゲームスクリプトか「無限の資金」オプションによる提供がない限り、資金は利用できなくなります。 STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :初期の借入限度額を設定します (インフレは考慮されません)
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG}
###setting-zero-is-special ###setting-zero-is-special
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :借入金なし STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :借入金なし {RED}ゲームスクリプトで資金を受給する必要があります
STR_CONFIG_SETTING_INTEREST_RATE :金利: {STRING} STR_CONFIG_SETTING_INTEREST_RATE :金利: {STRING}
STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :借入利率を設定します (インフレ設定を有効にしたときのインフレ率にも影響します) STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :借入利率を設定します (インフレ設定を有効にしたときのインフレ率にも影響します)
@ -1251,7 +1247,7 @@ STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :設定を有効
STR_CONFIG_SETTING_DISASTERS :災害: {STRING} STR_CONFIG_SETTING_DISASTERS :災害: {STRING}
STR_CONFIG_SETTING_DISASTERS_HELPTEXT :設定を有効にすると時折、乗り物や交通インフラを遮断・破壊する災害が起きるようになります STR_CONFIG_SETTING_DISASTERS_HELPTEXT :設定を有効にすると時折、乗り物や交通インフラを遮断・破壊する災害が起きるようになります
STR_CONFIG_SETTING_CITY_APPROVAL :地方自治体の姿勢: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL :議会の姿勢: {STRING}
STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :会社が街で引き起こした騒音(主に空港)や環境破壊がどの程度、街での評価や更なる建設行為に影響するかを設定します STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :会社が街で引き起こした騒音(主に空港)や環境破壊がどの程度、街での評価や更なる建設行為に影響するかを設定します
STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT :マップ高さ限界: {STRING} STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT :マップ高さ限界: {STRING}
@ -1355,10 +1351,10 @@ STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT_FULLSCREEN :する (フル
STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT :する STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT :する
STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT :する (ビューポートでも有効) STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT :する (ビューポートでも有効)
STR_CONFIG_SETTING_BRIBE :地方自治体の贈賄: {STRING} STR_CONFIG_SETTING_BRIBE :議会の買収: {STRING}
###length 2 ###length 2
STR_CONFIG_SETTING_BRIBE_HELPTEXT :地方自治体への贈賄を企てられるようにします。もし当局に事が発覚した場合、贈賄を試みた会社は当該自治体では半年間何もできなくなります STR_CONFIG_SETTING_BRIBE_HELPTEXT :街で議会買収を企てられるようになります。成功すれば街での評判が良くなりますが、地元当局に事が発覚した場合罰金を受けた上評判が悪くなり、その上その街では半年間何もできなくなります
STR_CONFIG_SETTING_BRIBE_HELPTEXT_MINUTES :地方自治体への贈賄を企てられるようにします。もし当局に事が発覚した場合、贈賄を試みた会社は当該自治体では半年間何もできなくなります STR_CONFIG_SETTING_BRIBE_HELPTEXT_MINUTES :会社が議会買収を企てられるようにします。もし当局に事が発覚した場合、買収した会社は当該自治体では半年間何もできなくなります
STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :独占運送契約の締結: {STRING} STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :独占運送契約の締結: {STRING}
###length 2 ###length 2
@ -1428,7 +1424,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :有効にする
###setting-zero-is-special ###setting-zero-is-special
STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}%
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :老朽車両の自動交換: {STRING} STR_CONFIG_SETTING_AUTORENEW_VEHICLE :老朽車両の自動交換: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :有効にすると、耐用年数を越えた輸送機器は自動で更新されるようになります(交換には一度格納施設に戻る必要があります)。具体的な交換時期は下の設定で変更できます。 STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :有効にすると、耐用年数を越えた輸送機器は自動で更新されるようになります(交換には一度格納施設に戻る必要があります)。具体的な交換時期は下の設定で変更できます。
@ -1863,7 +1858,7 @@ STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :街の自治体
STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :街路との平面交差を許可: {STRING} STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :街路との平面交差を許可: {STRING}
STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :有効にすると、会社が作る道路と街路とが交差できるようになります STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :有効にすると、会社が作る道路と街路とが交差できるようになります
STR_CONFIG_SETTING_NOISE_LEVEL :騒音レベルに基づいた空港建設の制: {STRING} STR_CONFIG_SETTING_NOISE_LEVEL :空港建設に対する街騒音レベル規制: {STRING}
STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :この設定を無効にすると、街に作れる空港は最大2つまでになります。有効にした場合は、各空港の騒音レベルの総和が街の騒音許容レベル以下になるようにしか建てられません。騒音レベルは空港の大きさ・街からの距離により、騒音許容レベルは街の人口により左右されます STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :この設定を無効にすると、街に作れる空港は最大2つまでになります。有効にした場合は、各空港の騒音レベルの総和が街の騒音許容レベル以下になるようにしか建てられません。騒音レベルは空港の大きさ・街からの距離により、騒音許容レベルは街の人口により左右されます
STR_CONFIG_SETTING_TOWN_FOUNDING :ゲーム中での街新設: {STRING} STR_CONFIG_SETTING_TOWN_FOUNDING :ゲーム中での街新設: {STRING}
@ -1941,9 +1936,9 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :初期の都市
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :ゲーム開始時に都市が普通の街に比べて平均して何倍の人口規模になるかを設定します STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :ゲーム開始時に都市が普通の街に比べて平均して何倍の人口規模になるかを設定します
STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :行先分配グラフを{STRING}秒毎に更新 STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :行先分配グラフを{STRING}秒毎に更新
STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :行先分配グラフの再計算間隔。各計算タイミングでは一部のグラフのみが再計算されます。よって、ここ設定した X 秒ごとにグラフ全体が更新されるというわけではありません。再計算の間隔が短ければ短いほどCPU時間を消費します。長ければ長いほど貨物流通の新規ルートの行先分配に時間がかかります。 STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :行先分配グラフの更新の間の待ち時間。各更新はグラフの一部だけのルートを再計算します。即ち、この設定を〇〇秒に指定する場合、全グラフが〇〇秒毎に更新されるのではありません。間隔が短ければ短いほどCPU時間を消費します。長ければ長いほど貨物流通の新規ルートの行先分配に時間がかかります。
STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :行先分配の更新に{STRING}秒を割り当て STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :行先分配の更新に{STRING}秒を割り当て
STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :行先分配グラフの再計算に割り当てられる時間。再計算が始まると、グラフの処理のために指定した生存秒数だけ実行可能なスレッドが作られます。生存秒数が短ければ短いほど再計算が間に合わない可能性が高まります。その際、ゲームは一時停止して計算完了を待ちます。生存秒数が長ければ長いほど、ルート変更の際に行先分配の更新に時間がかかります。 STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :行先分配グラフの更新に割り当てられる時間。更新が始まると、スレッドが生成されて、指定の時間に実行させられます。短ければ短いほど間に合わない可能性が高まります。その場合、ゲームは停止して計算完了を待ちます。長ければ長いほどルート変更の際に行先分配の更新に時間がかかります。
STR_CONFIG_SETTING_DISTRIBUTION_PAX :旅客の行先分配法: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_PAX :旅客の行先分配法: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :旅客がどのように行き先別に分配されるかを設定します。「対称」ではAからBへ向かう乗客とほぼ同数が、BからAに向かうようになります。 「非対称」ではそれぞれの方向に向かう旅客数は独立に決められます。「無効」では行き先別分配をしなくなります。 STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :旅客がどのように行き先別に分配されるかを設定します。「対称」ではAからBへ向かう乗客とほぼ同数が、BからAに向かうようになります。 「非対称」ではそれぞれの方向に向かう旅客数は独立に決められます。「無効」では行き先別分配をしなくなります。
@ -1959,7 +1954,7 @@ STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :非対称
STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :対称 STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :対称
STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :分配精度: {STRING} STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :分配精度: {STRING}
STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :この設定値を高く設定すればするほど、行先分配グラフの計算に要するCPU時間が長くなります。計算に時間がかかりすぎると遅延が発生する可能性があります。一方、設定値を低く設定すると分配が不正確になり、荷物が意図された場所に送られない場合があります。 STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :この値を高くすると、リンクグラフ演算の為CPUへの負荷が大きくなります。演算に時間がかかりすぎると、目に見えてタイムラグが起こる場合があります。しかし低い値に設定すると、分配が不正確になり、望まれる場所に貨物が送られなくなる場合があります
STR_CONFIG_SETTING_DEMAND_DISTANCE :距離効果: {STRING} STR_CONFIG_SETTING_DEMAND_DISTANCE :距離効果: {STRING}
STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :0より大きい値に設定すると、ある貨物の生産先Aと受取可能先Bとの距離がAからBへ送られる貨物量に影響を及ぼすようになります。高い値を設定すればするほど、遠い施設に送られる貨物量は少なくなり、近場の施設に送られる量が大きくなります STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :0より大きい値に設定すると、ある貨物の生産先Aと受取可能先Bとの距離がAからBへ送られる貨物量に影響を及ぼすようになります。高い値を設定すればするほど、遠い施設に送られる貨物量は少なくなり、近場の施設に送られる量が大きくなります
@ -2063,10 +2058,8 @@ STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}ファ
# Video initalization errors # Video initalization errors
STR_VIDEO_DRIVER_ERROR :{WHITE}ビデオ設定にエラーがあります... STR_VIDEO_DRIVER_ERROR :{WHITE}ビデオ設定にエラーがあります...
STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... 対応する GPU が見つかりません。ハードウェアアクセラレーションは無効になります。 STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... 対応する GPU が見つかりません。ハードウェアアクセラレーションは無効になります。
STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... GPUドライバーがゲームをクラッシュさせました。ハードウェアアクセラレーションは無効になりました
# Intro window # Intro window
STR_INTRO_CAPTION :{WHITE}OpenTTD
STR_INTRO_NEW_GAME :{BLACK}新しいゲーム STR_INTRO_NEW_GAME :{BLACK}新しいゲーム
STR_INTRO_LOAD_GAME :{BLACK}ロード STR_INTRO_LOAD_GAME :{BLACK}ロード
@ -2077,7 +2070,6 @@ STR_INTRO_MULTIPLAYER :{BLACK}マル
STR_INTRO_GAME_OPTIONS :{BLACK}基本設定 STR_INTRO_GAME_OPTIONS :{BLACK}基本設定
STR_INTRO_HIGHSCORE :{BLACK}ハイスコア STR_INTRO_HIGHSCORE :{BLACK}ハイスコア
STR_INTRO_HELP :{BLACK}ヘルプとマニュアル
STR_INTRO_ONLINE_CONTENT :{BLACK}オンラインコンテンツの確認 STR_INTRO_ONLINE_CONTENT :{BLACK}オンラインコンテンツの確認
STR_INTRO_QUIT :{BLACK}終了 STR_INTRO_QUIT :{BLACK}終了
@ -2129,14 +2121,14 @@ STR_HELP_WINDOW_COMMUNITY :{BLACK}コミ
STR_CHEATS :{WHITE}サンドボックスのオプション STR_CHEATS :{WHITE}サンドボックスのオプション
STR_CHEAT_MONEY :{LTBLUE}預金残高を{CURRENCY_LONG}増やす STR_CHEAT_MONEY :{LTBLUE}預金残高を{CURRENCY_LONG}増やす
STR_CHEAT_CHANGE_COMPANY :{LTBLUE}会社: {ORANGE}{COMMA}を乗っ取ってプレイする STR_CHEAT_CHANGE_COMPANY :{LTBLUE}会社: {ORANGE}{COMMA}を乗っ取ってプレイする
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}魔法のブルドーザー(産業拠点など何でも撤去可能): {ORANGE}{STRING} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}魔法のブルドーザー(産業拠点等、何でも撤去できる): {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}トンネルの平面交差を許容: {ORANGE}{STRING} STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}トンネルの平面交差を許容: {ORANGE}{STRING}
STR_CHEAT_NO_JETCRASH :{LTBLUE}ジェット機の小型空港での墜落率を減少: {ORANGE}{STRING} STR_CHEAT_NO_JETCRASH :{LTBLUE}ジェット機の小型空港での墜落率を減少: {ORANGE}{STRING}
STR_CHEAT_EDIT_MAX_HL :{LTBLUE}マップの最高高度を変更: {ORANGE}{NUM} STR_CHEAT_EDIT_MAX_HL :{LTBLUE}マップの最高高度を変更: {ORANGE}{NUM}
STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}マップの最大高度 STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}マップの最大高度
STR_CHEAT_CHANGE_DATE :{LTBLUE}日付を変更: {ORANGE}{DATE_SHORT} STR_CHEAT_CHANGE_DATE :{LTBLUE}日付を変更: {ORANGE}{DATE_SHORT}
STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}現在日時を変更 STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}現在日時を変更
STR_CHEAT_SETUP_PROD :{LTBLUE}産業の生産量変更を有効化: {ORANGE}{STRING} STR_CHEAT_SETUP_PROD :{LTBLUE}生産量変更: {ORANGE}{STRING}
# Livery window # Livery window
STR_LIVERY_CAPTION :{WHITE}{COMPANY} - 配色 STR_LIVERY_CAPTION :{WHITE}{COMPANY} - 配色
@ -2465,7 +2457,6 @@ STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :リンクグラ
STR_NETWORK_MESSAGE_CLIENT_LEAVING :退出 STR_NETWORK_MESSAGE_CLIENT_LEAVING :退出
STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} が参加してきました STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} が参加してきました
STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {STRING} がゲームに参加してきました (クライアント #{NUM}) STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {STRING} がゲームに参加してきました (クライアント #{NUM})
STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {0:STRING} が{STRING}の経営に参画してきました
STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} がゲームを観覧し始めました STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} がゲームを観覧し始めました
STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} が新会社 (#{NUM}) を設立しました STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} が新会社 (#{NUM}) を設立しました
STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} が退出しました({STRING}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} が退出しました({STRING})
@ -2681,7 +2672,6 @@ STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}道路
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}建設したい橋の種類をクリックしてください STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}建設したい橋の種類をクリックしてください
STR_SELECT_BRIDGE_INFO_NAME :{GOLD}{STRING} STR_SELECT_BRIDGE_INFO_NAME :{GOLD}{STRING}
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED :{GOLD}{STRING}{} {VELOCITY} STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED :{GOLD}{STRING}{} {VELOCITY}
STR_SELECT_BRIDGE_INFO_NAME_COST :{GOLD}{STRING}{} {WHITE}{CURRENCY_LONG}
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING}{} {VELOCITY} {WHITE}{CURRENCY_LONG} STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING}{} {VELOCITY} {WHITE}{CURRENCY_LONG}
STR_BRIDGE_NAME_SUSPENSION_STEEL :吊橋(S造) STR_BRIDGE_NAME_SUSPENSION_STEEL :吊橋(S造)
STR_BRIDGE_NAME_GIRDER_STEEL :桁橋(S造) STR_BRIDGE_NAME_GIRDER_STEEL :桁橋(S造)
@ -3468,7 +3458,7 @@ STR_LOCAL_AUTHORITY_ACTION_ROAD_RECONSTRUCTION :道路補修に
STR_LOCAL_AUTHORITY_ACTION_STATUE_OF_COMPANY :社長の彫像を建設 STR_LOCAL_AUTHORITY_ACTION_STATUE_OF_COMPANY :社長の彫像を建設
STR_LOCAL_AUTHORITY_ACTION_NEW_BUILDINGS :市街地開発に出資 STR_LOCAL_AUTHORITY_ACTION_NEW_BUILDINGS :市街地開発に出資
STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :独占運送契約を締結 STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :独占運送契約を締結
STR_LOCAL_AUTHORITY_ACTION_BRIBE :地方自治体への贈賄 STR_LOCAL_AUTHORITY_ACTION_BRIBE :議会を買収
###next-name-looks-similar ###next-name-looks-similar
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{PUSH_COLOUR}{YELLOW}旅客と貨物を確保する為に、街で新聞広告を実施します。{}より多くの旅客と貨物が自社の交通網を利用するようになります。{}{POP_COLOUR}費用: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{PUSH_COLOUR}{YELLOW}旅客と貨物を確保する為に、街で新聞広告を実施します。{}より多くの旅客と貨物が自社の交通網を利用するようになります。{}{POP_COLOUR}費用: {CURRENCY_LONG}
@ -3476,7 +3466,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{PUSH_COLOUR}{Y
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{YELLOW}旅客と貨物を確保する為に、街でTV-CMを開始します{}街の中心部の大範囲にある駅の評価が一時的に高まります。{}{POP_COLOUR}費用: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{YELLOW}旅客と貨物を確保する為に、街でTV-CMを開始します{}街の中心部の大範囲にある駅の評価が一時的に高まります。{}{POP_COLOUR}費用: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}社を称える彫像を建設します{}この街の駅の評価を恒久的に高めます。{}{POP_COLOUR}費用: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}社を称える彫像を建設します{}この街の駅の評価を恒久的に高めます。{}{POP_COLOUR}費用: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}市街地の開発に出資します{}街の成長速度が一時的に早まります。{}{POP_COLOUR}費用: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}市街地の開発に出資します{}街の成長速度が一時的に早まります。{}{POP_COLOUR}費用: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}贈賄を通じて地方自治体内の評判を高めます。注意: 露見した場合は処罰されます{}{POP_COLOUR}費用: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}買収を行い、議会内の評判を高めます。注意: 露見した場合は処罰されます{}{POP_COLOUR}費用: {CURRENCY_LONG}
# Goal window # Goal window
STR_GOALS_CAPTION :{WHITE}{COMPANY} 目標 STR_GOALS_CAPTION :{WHITE}{COMPANY} 目標
@ -4384,7 +4374,6 @@ STR_ORDER_REFIT_STOP_ORDER :({STRING}に改
STR_ORDER_STOP_ORDER :(運用停止) STR_ORDER_STOP_ORDER :(運用停止)
STR_ORDER_GO_TO_STATION :{STRING} {STATION}
STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(駅を使用できません){POP_COLOUR} {STRING} {STATION} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(駅を使用できません){POP_COLOUR} {STRING} {STATION}
STR_ORDER_IMPLICIT :(自動) STR_ORDER_IMPLICIT :(自動)
@ -4443,7 +4432,6 @@ STR_TIMETABLE_TOOLTIP :{BLACK}ダイ
STR_TIMETABLE_NO_TRAVEL :運行計画無 STR_TIMETABLE_NO_TRAVEL :運行計画無
STR_TIMETABLE_NOT_TIMETABLEABLE :該当区間を運行 (次の手動指令により自動設定) STR_TIMETABLE_NOT_TIMETABLEABLE :該当区間を運行 (次の手動指令により自動設定)
STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :該当区間を運行 (ダイヤ設定無) STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :該当区間を運行 (ダイヤ設定無)
STR_TIMETABLE_TRAVEL_NOT_TIMETABLED_SPEED :最高速度{VELOCITY}で該当区間を運行 (ダイヤ設定無)
STR_TIMETABLE_TRAVEL_FOR :{STRING}で該当区間を運行 STR_TIMETABLE_TRAVEL_FOR :{STRING}で該当区間を運行
STR_TIMETABLE_TRAVEL_FOR_SPEED :{STRING}で該当区間を運行(最高速度{VELOCITY}) STR_TIMETABLE_TRAVEL_FOR_SPEED :{STRING}で該当区間を運行(最高速度{VELOCITY})
STR_TIMETABLE_TRAVEL_FOR_ESTIMATED :運行({0:STRING}・ダイヤ設定無) STR_TIMETABLE_TRAVEL_FOR_ESTIMATED :運行({0:STRING}・ダイヤ設定無)
@ -4537,14 +4525,14 @@ STR_AI_CONFIG_MOVE_DOWN :{BLACK}下に
STR_AI_CONFIG_MOVE_DOWN_TOOLTIP :{BLACK}選択したAIの順位を下げる STR_AI_CONFIG_MOVE_DOWN_TOOLTIP :{BLACK}選択したAIの順位を下げる
STR_AI_CONFIG_GAMESCRIPT :{SILVER}ゲームスクリプト STR_AI_CONFIG_GAMESCRIPT :{SILVER}ゲームスクリプト
STR_AI_CONFIG_GAMESCRIPT_PARAM :{SILVER}パラメータ STR_AI_CONFIG_GAMESCRIPT_PARAM :{SILVER}パラメータ
STR_AI_CONFIG_AI :{SILVER}AI STR_AI_CONFIG_AI :{SILVER}AI
STR_AI_CONFIG_CHANGE_AI :{BLACK}AIを選択 STR_AI_CONFIG_CHANGE_AI :{BLACK}AIを選択
STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}ゲームスクリプトを選択 STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}ゲームスクリプトを選択
STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}他のスクリプトをロードします。Ctrl+クリックで全ての利用可能バージョンを表示します STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}他のスクリプトをロードします。Ctrl+クリックで全ての利用可能バージョンを表示します
STR_AI_CONFIG_CONFIGURE :{BLACK}設定 STR_AI_CONFIG_CONFIGURE :{BLACK}設定
STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}スクリプトのパラメータを設定します STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}スクリプトのパラメータを設定します
# Available AIs window # Available AIs window
STR_AI_LIST_CAPTION :{WHITE}使用可能な{STRING} STR_AI_LIST_CAPTION :{WHITE}使用可能な{STRING}
@ -4568,8 +4556,8 @@ STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}ハイ
STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}ミニマップのスクリーンショット STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}ミニマップのスクリーンショット
# Script Parameters # Script Parameters
STR_AI_SETTINGS_CAPTION_AI :{WHITE}AIのパラメーター STR_AI_SETTINGS_CAPTION_AI :AI
STR_AI_SETTINGS_CAPTION_GAMESCRIPT :{WHITE}ゲームスクリプトのパラメーター STR_AI_SETTINGS_CAPTION_GAMESCRIPT :ゲームスクリプト
STR_AI_SETTINGS_RESET :{BLACK}リセット STR_AI_SETTINGS_RESET :{BLACK}リセット
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
@ -4650,7 +4638,6 @@ STR_ERROR_SCREENSHOT_FAILED :{WHITE}スク
# Error message titles # Error message titles
STR_ERROR_MESSAGE_CAPTION :{YELLOW}メッセージ STR_ERROR_MESSAGE_CAPTION :{YELLOW}メッセージ
STR_ERROR_MESSAGE_CAPTION_OTHER_COMPANY :{YELLOW}{COMPANY}からのメッセージ
# Generic construction errors # Generic construction errors
STR_ERROR_OFF_EDGE_OF_MAP :{WHITE}マップからはみ出します STR_ERROR_OFF_EDGE_OF_MAP :{WHITE}マップからはみ出します
@ -4669,13 +4656,12 @@ STR_ERROR_TERRAFORM_LIMIT_REACHED :{WHITE}一度
STR_ERROR_CLEARING_LIMIT_REACHED :{WHITE}一度にできる撤去量を越えています STR_ERROR_CLEARING_LIMIT_REACHED :{WHITE}一度にできる撤去量を越えています
STR_ERROR_TREE_PLANT_LIMIT_REACHED :{WHITE}木の本数が多すぎます STR_ERROR_TREE_PLANT_LIMIT_REACHED :{WHITE}木の本数が多すぎます
STR_ERROR_NAME_MUST_BE_UNIQUE :{WHITE}名前は重複してはいけません STR_ERROR_NAME_MUST_BE_UNIQUE :{WHITE}名前は重複してはいけません
STR_ERROR_GENERIC_OBJECT_IN_THE_WAY :{WHITE}{STRING}があります
STR_ERROR_NOT_ALLOWED_WHILE_PAUSED :{WHITE}ポーズ中にはできない行動です STR_ERROR_NOT_ALLOWED_WHILE_PAUSED :{WHITE}ポーズ中にはできない行動です
# Local authority errors # Local authority errors
STR_ERROR_LOCAL_AUTHORITY_REFUSES_TO_ALLOW_THIS :{WHITE}{TOWN}の地方自治体が反対しています STR_ERROR_LOCAL_AUTHORITY_REFUSES_TO_ALLOW_THIS :{WHITE}{TOWN}議会が反対しています
STR_ERROR_LOCAL_AUTHORITY_REFUSES_AIRPORT :{WHITE}{TOWN}の地方自治体はこれ以上の空港建設を許可しません STR_ERROR_LOCAL_AUTHORITY_REFUSES_AIRPORT :{WHITE}{TOWN}議会はこれ以上の空港建設を認可しない方針です
STR_ERROR_LOCAL_AUTHORITY_REFUSES_NOISE :{WHITE}{TOWN}の地方自治体は騒音公害の懸念から空港建設を許可しません STR_ERROR_LOCAL_AUTHORITY_REFUSES_NOISE :{WHITE}{TOWN}の地元民が騒音公害を理由に空港建設に反対しています
STR_ERROR_BRIBE_FAILED :{WHITE}あなたの行った贈収賄が地元当局に露見しました! STR_ERROR_BRIBE_FAILED :{WHITE}あなたの行った贈収賄が地元当局に露見しました!
# Levelling errors # Levelling errors
@ -5549,8 +5535,3 @@ STR_SHIP :{BLACK}{SHIP}
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY}) STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
STR_BADGE_CONFIG_MENU_TOOLTIP :バッジ設定を開く
STR_BADGE_CONFIG_RESET :リセット
STR_BADGE_CONFIG_ICONS :{WHITE}バッジのアイコン
STR_BADGE_CONFIG_FILTERS :{WHITE}バッジのフィルター
STR_BADGE_CONFIG_NAME :名前

View File

@ -635,11 +635,9 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}화물
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}이 화물의 그래프를 표시하거나 숨깁니다 STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}이 화물의 그래프를 표시하거나 숨깁니다
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING} STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} - 화물 그래프 STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - 생산량 이력
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :생산량 STR_GRAPH_INDUSTRY_RANGE_PRODUCED :생산량
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :수송량 STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :수송량
STR_GRAPH_INDUSTRY_RANGE_DELIVERED :수송됨
STR_GRAPH_INDUSTRY_RANGE_WAITING :대기 중
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}상세 성취도를 봅니다. STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}상세 성취도를 봅니다.
@ -4027,8 +4025,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}지난
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}지난 1분간 생산량: STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}지난 1분간 생산량:
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% 수송됨) STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% 수송됨)
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}이 산업시설로 이동합니다. CTRL+클릭하면 이 산업시설을 기준으로 새로운 외부 화면을 엽니다 STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}이 산업시설로 이동합니다. CTRL+클릭하면 이 산업시설을 기준으로 새로운 외부 화면을 엽니다
STR_INDUSTRY_VIEW_CARGO_GRAPH :{BLACK}화물 그래프 STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}생산량 그래프
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}산업시설 화물 이력 그래프를 보여줍니다 STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}산업시설 생산량 이력 그래프를 보여줍니다
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}생산 수준: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}생산 수준: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}산업시설이 곧 폐쇄됩니다! STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}산업시설이 곧 폐쇄됩니다!
@ -5004,7 +5002,6 @@ STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}평지
STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}잘못된 방향으로 땅이 기울어졌습니다 STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}잘못된 방향으로 땅이 기울어졌습니다
STR_ERROR_CAN_T_DO_THIS :{WHITE}그렇게 할 수 없습니다... STR_ERROR_CAN_T_DO_THIS :{WHITE}그렇게 할 수 없습니다...
STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}건물을 먼저 제거해야 합니다 STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}건물을 먼저 제거해야 합니다
STR_ERROR_BUILDING_IS_PROTECTED :{WHITE}... 건물이 보호되어 있습니다
STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}이 지역을 파괴할 수 없습니다... STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}이 지역을 파괴할 수 없습니다...
STR_ERROR_SITE_UNSUITABLE :{WHITE}... 알맞지 않은 장소입니다 STR_ERROR_SITE_UNSUITABLE :{WHITE}... 알맞지 않은 장소입니다
STR_ERROR_ALREADY_BUILT :{WHITE}... 이미 지어져있습니다 STR_ERROR_ALREADY_BUILT :{WHITE}... 이미 지어져있습니다

View File

@ -635,6 +635,7 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Nerādī
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Paslēgt kravas veida diagrammu STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Paslēgt kravas veida diagrammu
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING} STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Ražošanas Vēsture
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Saražots STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Saražots
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Pārvadāts STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Pārvadāts
@ -4020,6 +4021,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Iepriek
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Ražošanas pēdējā minūtē: STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Ražošanas pēdējā minūtē:
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} (pārvadāti {COMMA}%) STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} (pārvadāti {COMMA}%)
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrēt galveno skatu uz ražotni. Ctrl+klikšķis atvērs skatu uz ražotni jaunā skatlaukā STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrēt galveno skatu uz ražotni. Ctrl+klikšķis atvērs skatu uz ražotni jaunā skatlaukā
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Ražošanas Grafiks
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Parāda nozares ražošanas vēstures grafiku
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Ražošanas līmenis: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Ražošanas līmenis: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Nozare ir paziņojusi par nenovēršamu slēgšanu! STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Nozare ir paziņojusi par nenovēršamu slēgšanu!

View File

@ -633,6 +633,7 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Keng Wue
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Schalt d'Grafik fir de Wuerentyp em STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Schalt d'Grafik fir de Wuerentyp em
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING} STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Produktiounshistorie
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produzéiert STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produzéiert
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transportéiert STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transportéiert
@ -3993,6 +3994,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Produkti
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Produktioun déi läscht Minutt: STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Produktioun déi läscht Minutt:
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transportéiert) STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transportéiert)
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Zentréiert d'Siicht op d'Industrie. Ctrl+Klick erstellt eng nei Usiicht op d'Industrie STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Zentréiert d'Siicht op d'Industrie. Ctrl+Klick erstellt eng nei Usiicht op d'Industrie
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Produktiounsgrafik
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Weist d'Grafik vun der Industrieproduktiounshistorie un
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produktiounslevel: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produktiounslevel: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}D'Industrie annoncéiert dass se zougemaach gëtt STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}D'Industrie annoncéiert dass se zougemaach gëtt

View File

@ -635,6 +635,7 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Skjul al
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Vis/skjul graf for en bestemt varetype STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Vis/skjul graf for en bestemt varetype
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING} STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Produksjonshistorikk
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produsert STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produsert
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transportert STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transportert
@ -4024,6 +4025,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Produksj
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Produksjon forrige minutt: STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Produksjon forrige minutt:
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}{NBSP}% transportert) STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}{NBSP}% transportert)
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Sentrer hovedvisningen på industrilokasjon. Ctrl+klikk for å åpne et nytt tilleggsvindu på industrilokasjon STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Sentrer hovedvisningen på industrilokasjon. Ctrl+klikk for å åpne et nytt tilleggsvindu på industrilokasjon
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Graf over produksjon
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Viser grafen for industriell produksjonshistorikk
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produksjonsnivå: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produksjonsnivå: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Næringen har annonsert snarlig nedleggelse! STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Næringen har annonsert snarlig nedleggelse!

View File

@ -1010,14 +1010,12 @@ STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLA
STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Żaden STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Żaden
STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL :{BLACK}Wyświetl wszystkie ładunki na wykresie stawek za ładunek STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL :{BLACK}Wyświetl wszystkie ładunki na wykresie stawek za ładunek
STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Ukryj wszystkie ładunki na wykresie stawek za ładunek STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Ukryj wszystkie ładunki na wykresie stawek za ładunek
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Przełącz ukrywanie/wyświetlanie wykresu ładunku danego typu STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Przełącz ukrywanie/wyświetlanie wykresu danego typu ładunku
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING} STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} - Historia Ładunków STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Historia Produkcji
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Wyprodukowany STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Wyprodukowano
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Przetransportowany STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Przetransportowano
STR_GRAPH_INDUSTRY_RANGE_DELIVERED :Dostarczony
STR_GRAPH_INDUSTRY_RANGE_WAITING :Oczekujący
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Pokaż szczegóły oceny wydajności STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Pokaż szczegóły oceny wydajności
@ -4406,8 +4404,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Wyproduk
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Wyprodukowano w poprzedniej minucie: STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Wyprodukowano w poprzedniej minucie:
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% przetransportowano) STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% przetransportowano)
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Wyśrodkuj widok główny na lokalizacji przedsiębiorstwa. Użyj Ctrl, aby otworzyć nowy podgląd na jego lokalizację STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Wyśrodkuj widok główny na lokalizacji przedsiębiorstwa. Użyj Ctrl, aby otworzyć nowy podgląd na jego lokalizację
STR_INDUSTRY_VIEW_CARGO_GRAPH :{BLACK}Wykres Produkcji STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Wykres Produkcji
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}Wyświetl na wykresie historię stanu ładunków w tym przedsiębiorstwie STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Wyświetl wykres historii produkcji tego przedsiębiorstwa
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Poziom produkcji: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Poziom produkcji: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Przedsiębiorstwo ogłosiło likwidację! STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Przedsiębiorstwo ogłosiło likwidację!

View File

@ -20,7 +20,7 @@
##id 0x0000 ##id 0x0000
STR_NULL : STR_NULL :
STR_EMPTY : STR_EMPTY :
STR_UNDEFINED :(cadeia de caracteres indefinida) STR_UNDEFINED :(frase indefinida)
STR_JUST_NOTHING :Nada STR_JUST_NOTHING :Nada
# Cargo related strings # Cargo related strings
@ -635,11 +635,9 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Não mos
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Alternar o gráfico para este tipo de carga STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Alternar o gráfico para este tipo de carga
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING} STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} - Histórico da Carga STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Histórico da Produção
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produzido STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produzido
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transportado STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transportado
STR_GRAPH_INDUSTRY_RANGE_DELIVERED :Entregue
STR_GRAPH_INDUSTRY_RANGE_WAITING :Em Espera
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Exibir classificações detalhadas de desempenho STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Exibir classificações detalhadas de desempenho
@ -4027,8 +4025,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Produç
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Produção no último minuto: STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Produção no último minuto:
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transportado) STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transportado)
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrar visualização na localização da indústria. Ctrl+Clique para abrir um novo visualizador na localização da indústria STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrar visualização na localização da indústria. Ctrl+Clique para abrir um novo visualizador na localização da indústria
STR_INDUSTRY_VIEW_CARGO_GRAPH :{BLACK}Gráfico da Carga STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Gráfico de Produção
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}Mostra o gráfico do histórico da carga desta indústria STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Mostrar gráfico do histórico de produção da indústria
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nível de produção: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nível de produção: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}A indústria anunciou encerramento iminente! STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}A indústria anunciou encerramento iminente!

View File

@ -3976,6 +3976,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Producț
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Producție în ultimul minut: STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Producție în ultimul minut:
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transportat) STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transportat)
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrează imaginea pe locația industriei. Ctrl+Click pentru a deshide o fereastra cu locația industriei STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrează imaginea pe locația industriei. Ctrl+Click pentru a deshide o fereastra cu locația industriei
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Grafic de producție
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Arată graficul de producție istoric al industriei
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivelul producției: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivelul producției: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industria a anunțat închiderea iminentă! STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industria a anunțat închiderea iminentă!

View File

@ -772,11 +772,9 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Скры
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Включить/отключить отображение груза на графике STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Включить/отключить отображение груза на графике
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING} STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} - Продукция STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}График производительности: {INDUSTRY}
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Произведено STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Произведено
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Перевезено STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Перевезено
STR_GRAPH_INDUSTRY_RANGE_DELIVERED :Доставлено
STR_GRAPH_INDUSTRY_RANGE_WAITING :В ожидании
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Показать составляющие части рейтинга STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Показать составляющие части рейтинга
@ -4201,8 +4199,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Прои
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Произведено за минуту: STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Произведено за минуту:
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% перевезено) STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% перевезено)
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Показать предприятие в основном окне. Ctrl+щелчок{NBSP}- показать в дополнительном окне. STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Показать предприятие в основном окне. Ctrl+щелчок{NBSP}- показать в дополнительном окне.
STR_INDUSTRY_VIEW_CARGO_GRAPH :{BLACK}График доставки STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}График производительности
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}Показать график продукции предприятия STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Показать график производительности этого предприятия
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Производительность: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Производительность: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Предприятие скоро закрывается! STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Предприятие скоро закрывается!

View File

@ -634,6 +634,7 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}在货
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}切换显示货物 STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}切换显示货物
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING} STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - 产量历史
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :已生产 STR_GRAPH_INDUSTRY_RANGE_PRODUCED :已生产
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :已运输 STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :已运输
@ -4023,6 +4024,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}上月
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}上分钟产量: STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}上分钟产量:
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK}(已运输 {COMMA}% STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK}(已运输 {COMMA}%
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}将屏幕中心移动到当前工业的位置。按住 <Ctrl> 键点选会在新视点中显示工业位置 STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}将屏幕中心移动到当前工业的位置。按住 <Ctrl> 键点选会在新视点中显示工业位置
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}产量图表
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}显示工业产量历史图表
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}生产等级:{YELLOW}{COMMA}% STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}生产等级:{YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}此工业已经宣布即刻停业倒闭! STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}此工业已经宣布即刻停业倒闭!

View File

@ -634,6 +634,7 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Oculta t
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Alterna entre mostrar/ocultar la gráfica para este tipo de carga STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Alterna entre mostrar/ocultar la gráfica para este tipo de carga
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING} STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Historial de Producción
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Producido STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Producido
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transportado STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transportado
@ -4010,6 +4011,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Producci
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Producción el minuto anterior: STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Producción el minuto anterior:
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transportado) STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transportado)
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centra la vista principal sobre la industria. Ctrl+clic abre un punto de vista en dicha posición STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centra la vista principal sobre la industria. Ctrl+clic abre un punto de vista en dicha posición
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Gráfico de Producción
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Muestra el gráfico del historial de producción de la industria
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivel de producción: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivel de producción: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}La industria ha anunciado su cierre inminente! STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}La industria ha anunciado su cierre inminente!

View File

@ -635,11 +635,9 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Ocultar
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Mostrar u ocultar gráfica de este tipo de carga STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Mostrar u ocultar gráfica de este tipo de carga
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING} STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} - Historial de carga STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Historial de producción
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Producido STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Producido
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transportado STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transportado
STR_GRAPH_INDUSTRY_RANGE_DELIVERED :Entregada
STR_GRAPH_INDUSTRY_RANGE_WAITING :En espera
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Mostrar detalles de nivel de desempeño STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Mostrar detalles de nivel de desempeño
@ -4027,8 +4025,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Producci
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Producción último minuto: STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Producción último minuto:
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transportad{G 0 o a o a}{P 0 "" s}) STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transportad{G 0 o a o a}{P 0 "" s})
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrar vista en la industria. Ctrl+Clic abre una vista aparte en su ubicación STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrar vista en la industria. Ctrl+Clic abre una vista aparte en su ubicación
STR_INDUSTRY_VIEW_CARGO_GRAPH :{BLACK}Gráfica de carga STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Gráfica de producción
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}Mostrar la gráfica del historial de carga de la industria STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Mostrar la gráfica histórica de producción de la industria
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivel de producción: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivel de producción: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}¡La industria ha anunciado su cierre inminente! STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}¡La industria ha anunciado su cierre inminente!
@ -5004,7 +5002,6 @@ STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}Se requi
STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Tierra inclinada en dirección errónea STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Tierra inclinada en dirección errónea
STR_ERROR_CAN_T_DO_THIS :{WHITE}No se puede hacer eso... STR_ERROR_CAN_T_DO_THIS :{WHITE}No se puede hacer eso...
STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Primero se debe demoler el edificio STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Primero se debe demoler el edificio
STR_ERROR_BUILDING_IS_PROTECTED :{WHITE}... el edificio está protegido
STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}No se puede despejar esta zona... STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}No se puede despejar esta zona...
STR_ERROR_SITE_UNSUITABLE :{WHITE}... lugar no apto STR_ERROR_SITE_UNSUITABLE :{WHITE}... lugar no apto
STR_ERROR_ALREADY_BUILT :{WHITE}... ya construido STR_ERROR_ALREADY_BUILT :{WHITE}... ya construido

View File

@ -633,6 +633,7 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Visa ing
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Slå på/av denna godstyps graf STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Slå på/av denna godstyps graf
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING} STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Produktionshistorik
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Producerat STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Producerat
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transporterat STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transporterat
@ -4000,6 +4001,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Produkti
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Produktion förra minuten: STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Produktion förra minuten:
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transporterat) STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transporterat)
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrera huvudvyn ovanför industrin. Ctrl+Klick för att öppna en ny fönstervy industrins läge STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrera huvudvyn ovanför industrin. Ctrl+Klick för att öppna en ny fönstervy industrins läge
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Produktionsgraf
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Visar en graf över den historiska industriproduktionen
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produktionsnivå: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produktionsnivå: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industrin har annonserat att den snart kommer att stänga! STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industrin har annonserat att den snart kommer att stänga!

View File

@ -631,20 +631,18 @@ STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLA
STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}無 STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}無
STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL :{BLACK}於貨物運費表顯示所有類型的貨物 STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL :{BLACK}於貨物運費表顯示所有類型的貨物
STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}於貨物運費表隱藏所有類型的貨物 STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}於貨物運費表隱藏所有類型的貨物
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}切換顯示貨物 STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}切換該貨物類型圖示
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING} STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} - 貨物記錄 STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - 產量歷史
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :已產出 STR_GRAPH_INDUSTRY_RANGE_PRODUCED :已產出
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :已運送 STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :已運送
STR_GRAPH_INDUSTRY_RANGE_DELIVERED :已運送
STR_GRAPH_INDUSTRY_RANGE_WAITING :庫存
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}顯示詳細營運評比 STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}顯示詳細營運評比
# Graph key window # Graph key window
STR_GRAPH_KEY_CAPTION :{WHITE}顯示公司圖表的圖例 STR_GRAPH_KEY_CAPTION :{WHITE}顯示公司圖表的圖例
STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}切換顯示公司 STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}切換該公司圖表
# Company league window # Company league window
STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}公司排行榜 STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}公司排行榜
@ -4026,8 +4024,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}上月
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}上分鐘產量︰ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}上分鐘產量︰
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} (運送了 {COMMA}%) STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} (運送了 {COMMA}%)
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}將工業置於畫面正中央。按住 <Ctrl> 點選可於工業位置開啟新檢視視窗 STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}將工業置於畫面正中央。按住 <Ctrl> 點選可於工業位置開啟新檢視視窗
STR_INDUSTRY_VIEW_CARGO_GRAPH :{BLACK}貨物圖表 STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}產量圖表
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}檢視工業貨物運送記錄圖表 STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}顯示工業產量歷史圖表
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}產出等級:{YELLOW}{COMMA}% STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}產出等級:{YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}該工業已宣佈關閉! STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}該工業已宣佈關閉!

View File

@ -770,6 +770,7 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Не п
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Ввімк/вимик графік типів вантажу STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Ввімк/вимик графік типів вантажу
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING} STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Історія виробництва
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Вироблено STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Вироблено
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Перевезено STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Перевезено
@ -4149,6 +4150,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Виро
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Вироблено за минулу хвилину: STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Вироблено за минулу хвилину:
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% перевезено) STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% перевезено)
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Показати підприємство у центрі екрану. Ctrl+клац мишею відкриє нове вікно з видом на підприємство STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Показати підприємство у центрі екрану. Ctrl+клац мишею відкриє нове вікно з видом на підприємство
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Графік продуктивності
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Відобразити графік продуктивності підприємства
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Обсяг виробництва: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Обсяг виробництва: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Підприємство оголосило про близьке закриття! STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Підприємство оголосило про близьке закриття!

View File

@ -267,7 +267,6 @@ STR_UNITS_YEARS :{NUM}{NBSP}năm
STR_UNITS_PERIODS :{NUM}{NBSP}kỳ STR_UNITS_PERIODS :{NUM}{NBSP}kỳ
STR_LIST_SEPARATOR :,{SPACE} STR_LIST_SEPARATOR :,{SPACE}
STR_TRUNCATION_ELLIPSIS :...
# Common window strings # Common window strings
STR_LIST_FILTER_TITLE :{BLACK}Lọc: STR_LIST_FILTER_TITLE :{BLACK}Lọc:
@ -286,7 +285,7 @@ STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Đóng c
STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Tiêu đề cửa sổ - kéo nó để di chuyển cửa số STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Tiêu đề cửa sổ - kéo nó để di chuyển cửa số
STR_TOOLTIP_SHADE :{BLACK}Thu gọn cửa sổ - Chỉ hiển thị thanh tiêu đề STR_TOOLTIP_SHADE :{BLACK}Thu gọn cửa sổ - Chỉ hiển thị thanh tiêu đề
STR_TOOLTIP_DEBUG :{BLACK}Hiện thông tin debug của NewGRF STR_TOOLTIP_DEBUG :{BLACK}Hiện thông tin debug của NewGRF
STR_TOOLTIP_DEFSIZE :{BLACK}Chuyển cửa sổ về kích thước mặc định. Ctrl+Click để lưu kích thước hiện tại làm mặc định. Ctri+Click kép để thiết lập lại mặc định cũ. STR_TOOLTIP_DEFSIZE :{BLACK}Chuyển cửa sổ về kích thước mặc định. Ctrl+Click để lưu kích thước hiện tại làm mặc định
STR_TOOLTIP_STICKY :{BLACK}Đánh dấu không-thể-đóng khi bấm nút "Đóng Tất Cả Cửa Sổ". Ctrl+Click để lưu thành trạng thái mặc định STR_TOOLTIP_STICKY :{BLACK}Đánh dấu không-thể-đóng khi bấm nút "Đóng Tất Cả Cửa Sổ". Ctrl+Click để lưu thành trạng thái mặc định
STR_TOOLTIP_RESIZE :{BLACK}Click và kéo để thay đổi kích thước cửa sổ STR_TOOLTIP_RESIZE :{BLACK}Click và kéo để thay đổi kích thước cửa sổ
STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Bật kích cỡ cửa sổ lớn/nhỏ STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Bật kích cỡ cửa sổ lớn/nhỏ
@ -452,12 +451,6 @@ STR_SETTINGS_MENU_SANDBOX_OPTIONS :Tuỳ chọn Sa
STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Thiết lập hiệu ứng trong suốt STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Thiết lập hiệu ứng trong suốt
STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Hiển thị tên thị trấn STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Hiển thị tên thị trấn
STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Hiển thị tên nhà ga STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Hiển thị tên nhà ga
STR_SETTINGS_MENU_STATION_NAMES_TRAIN :Ga tàu
STR_SETTINGS_MENU_STATION_NAMES_LORRY :Trạm xe tải
STR_SETTINGS_MENU_STATION_NAMES_BUS :Trạm xe buýt
STR_SETTINGS_MENU_STATION_NAMES_SHIP :Cảng
STR_SETTINGS_MENU_STATION_NAMES_PLANE :Sân bay
STR_SETTINGS_MENU_STATION_NAMES_GHOST :Trạm ma
STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :Hiển thị tên điểm mốc STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :Hiển thị tên điểm mốc
STR_SETTINGS_MENU_SIGNS_DISPLAYED :Hiển thị ký hiệu STR_SETTINGS_MENU_SIGNS_DISPLAYED :Hiển thị ký hiệu
STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS :Hiển thị biển hiệu và tên của đối thủ STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS :Hiển thị biển hiệu và tên của đối thủ
@ -634,11 +627,9 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Không h
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Bật/tắt đồ thị cho hàng hóa này STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Bật/tắt đồ thị cho hàng hóa này
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING} STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} - Lịch sử hàng hóa STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Lịch Sử Sản Xuất
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Đã cung cấp STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Đã cung cấp
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Đã vận chuyển STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Đã vận chuyển
STR_GRAPH_INDUSTRY_RANGE_DELIVERED :Đã giao
STR_GRAPH_INDUSTRY_RANGE_WAITING :Đang chờ...
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Hiện chi tiết đánh giá chỉ số năng suất STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Hiện chi tiết đánh giá chỉ số năng suất
@ -968,14 +959,11 @@ STR_GAME_OPTIONS_TAB_SOUND :Âm thanh
STR_GAME_OPTIONS_TAB_SOUND_TOOLTIP :Lựa chọn thiết lập cho âm thanh và nhạc STR_GAME_OPTIONS_TAB_SOUND_TOOLTIP :Lựa chọn thiết lập cho âm thanh và nhạc
STR_GAME_OPTIONS_TAB_SOCIAL :Xã hội STR_GAME_OPTIONS_TAB_SOCIAL :Xã hội
STR_GAME_OPTIONS_TAB_SOCIAL_TOOLTIP :Chọn thiết lập các tích hợp xã hội STR_GAME_OPTIONS_TAB_SOCIAL_TOOLTIP :Chọn thiết lập các tích hợp xã hội
STR_GAME_OPTIONS_TAB_ADVANCED :Tùy chọn nâng cao
STR_GAME_OPTIONS_TAB_ADVANCED_TOOLTIP :Thay đổi tùy chọn nâng cao
STR_GAME_OPTIONS_VOLUME :Âm lượng STR_GAME_OPTIONS_VOLUME :Âm lượng
STR_GAME_OPTIONS_SFX_VOLUME :Hiệu ứng âm thanh STR_GAME_OPTIONS_SFX_VOLUME :Hiệu ứng âm thanh
STR_GAME_OPTIONS_MUSIC_VOLUME :Âm nhạc STR_GAME_OPTIONS_MUSIC_VOLUME :Âm nhạc
STR_GAME_OPTIONS_SETTING :{STRING}: {ORANGE}{STRING}
STR_GAME_OPTIONS_VOLUME_MARK :{NUM}% STR_GAME_OPTIONS_VOLUME_MARK :{NUM}%
@ -1029,7 +1017,6 @@ STR_GAME_OPTIONS_CURRENCY_IDR :Rupiah Indonesi
STR_GAME_OPTIONS_CURRENCY_MYR :Ringgit Malaysia STR_GAME_OPTIONS_CURRENCY_MYR :Ringgit Malaysia
STR_GAME_OPTIONS_CURRENCY_LVL :Lát-vi-a Lats STR_GAME_OPTIONS_CURRENCY_LVL :Lát-vi-a Lats
STR_GAME_OPTIONS_CURRENCY_PTE :Escudo Bồ Đào Nha STR_GAME_OPTIONS_CURRENCY_PTE :Escudo Bồ Đào Nha
STR_GAME_OPTIONS_CURRENCY_UAH :Hryvnia Ukraina
STR_GAME_OPTIONS_AUTOSAVE_FRAME :Lưu tự động STR_GAME_OPTIONS_AUTOSAVE_FRAME :Lưu tự động
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :Lựa chọn khoảng thời gian tự động lưu STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :Lựa chọn khoảng thời gian tự động lưu
@ -1063,7 +1050,6 @@ STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :Đánh dấu v
STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :Trình điều khiển hiện tại: {STRING} STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :Trình điều khiển hiện tại: {STRING}
STR_GAME_OPTIONS_INTERFACE :Giao diện
STR_GAME_OPTIONS_GUI_SCALE_FRAME :Kích thước giao diện STR_GAME_OPTIONS_GUI_SCALE_FRAME :Kích thước giao diện
STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :Kéo thanh trượt để điều chỉnh kích thước giao diện. Giữ Ctrl để điều chỉnh liên tục STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :Kéo thanh trượt để điều chỉnh kích thước giao diện. Giữ Ctrl để điều chỉnh liên tục
@ -1088,7 +1074,6 @@ STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK_TOOLTIP :Sẽ mở trìn
STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW :Xem trước kết quả khảo sát STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW :Xem trước kết quả khảo sát
STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW_TOOLTIP :Hiển thị kết quả khảo sát ở ván chơi hiện tại STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW_TOOLTIP :Hiển thị kết quả khảo sát ở ván chơi hiện tại
STR_GAME_OPTIONS_DISPLAY :Hiển thị
STR_GAME_OPTIONS_REFRESH_RATE :Tần số quét màn hình STR_GAME_OPTIONS_REFRESH_RATE :Tần số quét màn hình
STR_GAME_OPTIONS_REFRESH_RATE_TOOLTIP :Chọn tần số quét màn hình STR_GAME_OPTIONS_REFRESH_RATE_TOOLTIP :Chọn tần số quét màn hình
@ -1110,7 +1095,7 @@ STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :Thông tin thê
STR_GAME_OPTIONS_ONLINE_CONTENT :Tải Nội Dung STR_GAME_OPTIONS_ONLINE_CONTENT :Tải Nội Dung
STR_GAME_OPTIONS_ONLINE_CONTENT_TOOLTIP :Kiểm tra những nội dung mới & cập nhật để tải về STR_GAME_OPTIONS_ONLINE_CONTENT_TOOLTIP :Kiểm tra những nội dung mới & cập nhật để tải về
STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :(không có plugins được cài đặt để tích hợp vào nền tảng xã hội) STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(không có plugins được cài đặt để tích hợp vào nền tảng xã hội)
STR_GAME_OPTIONS_SOCIAL_PLUGIN_TITLE :{STRING} ({STRING}) STR_GAME_OPTIONS_SOCIAL_PLUGIN_TITLE :{STRING} ({STRING})
STR_GAME_OPTIONS_SOCIAL_PLUGIN_PLATFORM :Nền tảng: STR_GAME_OPTIONS_SOCIAL_PLUGIN_PLATFORM :Nền tảng:
@ -1304,9 +1289,6 @@ STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Lãi xuất vay
STR_CONFIG_SETTING_RUNNING_COSTS :Chi phí hoạt động: {STRING} STR_CONFIG_SETTING_RUNNING_COSTS :Chi phí hoạt động: {STRING}
STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Thiết lập mức độ tính chi phí bảo trì và vận hành đối với phương tiện và hạ tầng giao thông STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Thiết lập mức độ tính chi phí bảo trì và vận hành đối với phương tiện và hạ tầng giao thông
###length 3 ###length 3
STR_CONFIG_SETTING_RUNNING_COSTS_LOW :Thấp
STR_CONFIG_SETTING_RUNNING_COSTS_MEDIUM :Trung bình
STR_CONFIG_SETTING_RUNNING_COSTS_HIGH :Cao
STR_CONFIG_SETTING_CONSTRUCTION_SPEED :Tốc độ xây dựng: {STRING} STR_CONFIG_SETTING_CONSTRUCTION_SPEED :Tốc độ xây dựng: {STRING}
STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :Giới hạn hành động xây dựng của AI STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :Giới hạn hành động xây dựng của AI
@ -1329,9 +1311,6 @@ STR_CONFIG_SETTING_SUBSIDY_DURATION_DISABLED :Không có tr
STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Chi phí xây dựng: {STRING} STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Chi phí xây dựng: {STRING}
STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Thiết lập mức độ xây dựng và chi phí mua sắm STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Thiết lập mức độ xây dựng và chi phí mua sắm
###length 3 ###length 3
STR_CONFIG_SETTING_CONSTRUCTION_COSTS_LOW :Thấp
STR_CONFIG_SETTING_CONSTRUCTION_COSTS_MEDIUM :Trung bình
STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HIGH :Cao
STR_CONFIG_SETTING_RECESSIONS :Suy thoái: {STRING} STR_CONFIG_SETTING_RECESSIONS :Suy thoái: {STRING}
STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Nếu bật, thì các đợt suy thoái sẽ xảy ra vài năm một lần. Trong suy thoái tất cả sản xuất sẽ giảm mạnh (và sẽ trở lại như cũ sau khi suy thoái kết thúc) STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Nếu bật, thì các đợt suy thoái sẽ xảy ra vài năm một lần. Trong suy thoái tất cả sản xuất sẽ giảm mạnh (và sẽ trở lại như cũ sau khi suy thoái kết thúc)
@ -2001,12 +1980,8 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :không cho phé
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :cho phép STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :cho phép
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :cho phép, tùy chọn bố trí đô thị STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :cho phép, tùy chọn bố trí đô thị
STR_CONFIG_SETTING_HOUSE_PLACER :Đật từng ngôi nhà: {STRING}
STR_CONFIG_SETTING_HOUSE_PLACER_HELPTEXT :Bật tùy chọn này cho phép người chơi đặt nhà cửa bằng tay STR_CONFIG_SETTING_HOUSE_PLACER_HELPTEXT :Bật tùy chọn này cho phép người chơi đặt nhà cửa bằng tay
###length 3 ###length 3
STR_CONFIG_SETTING_HOUSE_PLACER_FORBIDDEN :Không cho phép
STR_CONFIG_SETTING_HOUSE_PLACER_ALLOWED :Cho phép
STR_CONFIG_SETTING_HOUSE_PLACER_FULLY_CONSTRUCTED :Cho phép, đã hoàn thành thi công
STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Nhu cầu vận chuyển hàng đô thị: {STRING} STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Nhu cầu vận chuyển hàng đô thị: {STRING}
STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Lượng hàng hoá cần vận chuyển ở trong đô thị, tỉ lệ với tổng dân số của độ thị.{}Tăng tỉ lệ bình phương: một đô thị to gấp 2 sẽ tăng 4 lần số hành khách.{}Tăng tỉ lệ thuận: một đô thị tăng gấp 2 sẽ tăng gấp 2 lần số hành khách STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Lượng hàng hoá cần vận chuyển ở trong đô thị, tỉ lệ với tổng dân số của độ thị.{}Tăng tỉ lệ bình phương: một đô thị to gấp 2 sẽ tăng 4 lần số hành khách.{}Tăng tỉ lệ thuận: một đô thị tăng gấp 2 sẽ tăng gấp 2 lần số hành khách
@ -2035,7 +2010,7 @@ STR_CONFIG_SETTING_SOFT_LIMIT :Giới hạn s
STR_CONFIG_SETTING_SOFT_LIMIT_HELPTEXT :Số lượng cửa sổ chưa neo (tối đa) trước khi tự động đóng để nhường chỗ khi mở cửa sổ mới STR_CONFIG_SETTING_SOFT_LIMIT_HELPTEXT :Số lượng cửa sổ chưa neo (tối đa) trước khi tự động đóng để nhường chỗ khi mở cửa sổ mới
STR_CONFIG_SETTING_SOFT_LIMIT_VALUE :{COMMA} STR_CONFIG_SETTING_SOFT_LIMIT_VALUE :{COMMA}
###setting-zero-is-special ###setting-zero-is-special
STR_CONFIG_SETTING_SOFT_LIMIT_DISABLED :Tắt STR_CONFIG_SETTING_SOFT_LIMIT_DISABLED :tắt
STR_CONFIG_SETTING_ZOOM_MIN :Độ phóng to tối đa: {STRING} STR_CONFIG_SETTING_ZOOM_MIN :Độ phóng to tối đa: {STRING}
STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT :Độ phóng to tối đa của cửa sổ. Độ càng cao thì yêu cầu bộ nhớ càng nhiều STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT :Độ phóng to tối đa của cửa sổ. Độ càng cao thì yêu cầu bộ nhớ càng nhiều
@ -2087,9 +2062,9 @@ STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Loại hàng h
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Chế độ phân phối đối với các loại hàng hóa mặc định: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Chế độ phân phối đối với các loại hàng hóa mặc định: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Không đối xứng" có nghĩa là số lượng hàng hóa tùy ý có thể được gửi theo một trong hai hướng. "Thủ công" có nghĩa là những loại hàng hóa đó sẽ không được phân phối tự động STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Không đối xứng" có nghĩa là số lượng hàng hóa tùy ý có thể được gửi theo một trong hai hướng. "Thủ công" có nghĩa là những loại hàng hóa đó sẽ không được phân phối tự động
###length 3 ###length 3
STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :Bằng tay STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :bằng tay
STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :Bất đối xứng STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :bất đối xứng
STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :Đối xứng STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :đối xứng
STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Độ chính xác phân phối: {STRING} STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Độ chính xác phân phối: {STRING}
STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Mức chính xác tính toán đồ thị, nếu giá trị càng cao càng tốn CPU và trò chơi có thể chậm phản ứng, tuy nhiên giá trị thấp sẽ khiến việc phân phối sẽ giảm sự chính xác và bạn sẽ thấy sự khác biệt là hàng hóa không gửi đến chỗ cần đến STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Mức chính xác tính toán đồ thị, nếu giá trị càng cao càng tốn CPU và trò chơi có thể chậm phản ứng, tuy nhiên giá trị thấp sẽ khiến việc phân phối sẽ giảm sự chính xác và bạn sẽ thấy sự khác biệt là hàng hóa không gửi đến chỗ cần đến
@ -2150,7 +2125,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_SI :SI (m)
STR_CONFIG_SETTING_LOCALISATION :Tiêu Chuẩn Đo Lường STR_CONFIG_SETTING_LOCALISATION :Tiêu Chuẩn Đo Lường
STR_CONFIG_SETTING_GRAPHICS :Đồ họa STR_CONFIG_SETTING_GRAPHICS :Đồ họa
STR_CONFIG_SETTING_SOUND :Âm thanh STR_CONFIG_SETTING_SOUND :Âm thanh
STR_CONFIG_SETTING_INTERFACE :Giao diện STR_CONFIG_SETTING_INTERFACE :Giao Diện
STR_CONFIG_SETTING_INTERFACE_GENERAL :Tổng quát STR_CONFIG_SETTING_INTERFACE_GENERAL :Tổng quát
STR_CONFIG_SETTING_INTERFACE_VIEWPORTS :Vùng nhìn STR_CONFIG_SETTING_INTERFACE_VIEWPORTS :Vùng nhìn
STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION :Xây Dựng STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION :Xây Dựng
@ -2204,8 +2179,6 @@ STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... khô
STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... trình điều khiển GPU đã làm trò chơi bị lỗi. Tăng tốc phần cứng đã được tắt STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... trình điều khiển GPU đã làm trò chơi bị lỗi. Tăng tốc phần cứng đã được tắt
# Intro window # Intro window
STR_INTRO_CAPTION :{WHITE}OpenTTD
STR_INTRO_VERSION :OpenTTD {REV}
STR_INTRO_NEW_GAME :{BLACK}Màn Chơi Mới STR_INTRO_NEW_GAME :{BLACK}Màn Chơi Mới
STR_INTRO_LOAD_GAME :{BLACK}Nạp Ván Chơi STR_INTRO_LOAD_GAME :{BLACK}Nạp Ván Chơi
@ -2339,19 +2312,16 @@ STR_FACE_SIMPLE_TOOLTIP :{BLACK}Trình c
STR_FACE_LOAD :{BLACK}Nạp STR_FACE_LOAD :{BLACK}Nạp
STR_FACE_LOAD_TOOLTIP :{BLACK}Chọn vẻ mặt ưa thích STR_FACE_LOAD_TOOLTIP :{BLACK}Chọn vẻ mặt ưa thích
STR_FACE_LOAD_DONE :{WHITE}Vẻ mặt ưa thích đã được nạp từ file thiết lập của OpenTTD. STR_FACE_LOAD_DONE :{WHITE}Vẻ mặt ưa thích đã được nạp từ file thiết lập của OpenTTD.
STR_FACE_FACECODE :{BLACK}Mã số khuôn mặt STR_FACE_FACECODE :{BLACK}Khuôn mặt thứ.
STR_FACE_FACECODE_TOOLTIP :{BLACK}Xem và/hoặc sửa mã số gương mặt của chủ tịch công ty STR_FACE_FACECODE_TOOLTIP :{BLACK}Xem và/hoặc sửa số vẻ mặt của chủ tịch công ty
STR_FACE_FACECODE_CAPTION :{WHITE}Xem và/hoặc chọn mã số gương mặt người chơi STR_FACE_FACECODE_CAPTION :{WHITE}Xem và/hoặc chọn số bộ mặt người chơi
STR_FACE_FACECODE_SET :{WHITE}Gương mặt người chơi mới được thiết lập. STR_FACE_FACECODE_SET :{WHITE}Mã số gương mặt mới được thiết lập.
STR_FACE_FACECODE_ERR :{WHITE}Không thể thiết lập mã số gương mặt - Nhãn và mã số phải hợp lệ STR_FACE_FACECODE_ERR :{WHITE}Không thể thiết lập mã số gương mặt - mã số phải trong khoảng từ 0 đến 4,294,967,295!
STR_FACE_SAVE :{BLACK}Lưu STR_FACE_SAVE :{BLACK}Lưu
STR_FACE_SAVE_TOOLTIP :{BLACK}Lưu gương mặt yêu thích STR_FACE_SAVE_TOOLTIP :{BLACK}Lưu gương mặt yêu thích
STR_FACE_SAVE_DONE :{WHITE}Gương mặt yêu thích này sẽ được lưu lại trong tập tin cấu hình OpenTTD . STR_FACE_SAVE_DONE :{WHITE}Gương mặt yêu thích này sẽ được lưu lại trong tập tin cấu hình OpenTTD .
STR_FACE_SETTING_TOGGLE :{STRING} {ORANGE}{STRING}
STR_FACE_SETTING_NUMERIC :{STRING} {ORANGE}{NUM} / {NUM}
STR_FACE_YES :Đồng ý STR_FACE_YES :Đồng ý
STR_FACE_NO :Không STR_FACE_NO :Không
STR_FACE_STYLE :Kiểu:
STR_FACE_HAIR :Tóc: STR_FACE_HAIR :Tóc:
STR_FACE_EYEBROWS :Lông mày: STR_FACE_EYEBROWS :Lông mày:
STR_FACE_EYECOLOUR :Màu mắt: STR_FACE_EYECOLOUR :Màu mắt:
@ -2638,7 +2608,7 @@ STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} r
STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} đã đổi tên thành {STRING} STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} đã đổi tên thành {STRING}
STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} tặng {CURRENCY_LONG} cho {STRING} STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} tặng {CURRENCY_LONG} cho {STRING}
STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Server kết thúc phiên STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Server kết thúc phiên
STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Server khởi động lại...{}{}Xin chờ... STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Server khởi động lại...{}Xin chờ...
STR_NETWORK_MESSAGE_KICKED :*** {STRING} đã bị đá khỏi ván chơi. Lý do: ({STRING}) STR_NETWORK_MESSAGE_KICKED :*** {STRING} đã bị đá khỏi ván chơi. Lý do: ({STRING})
STR_NETWORK_ERROR_COORDINATOR_REGISTRATION_FAILED :{WHITE}Đăng ký server thất bại STR_NETWORK_ERROR_COORDINATOR_REGISTRATION_FAILED :{WHITE}Đăng ký server thất bại
@ -2824,10 +2794,6 @@ STR_PICKER_MODE_USED_TOOLTIP :Bật/tắt hi
STR_PICKER_MODE_SAVED :Đã lưu STR_PICKER_MODE_SAVED :Đã lưu
STR_PICKER_MODE_SAVED_TOOLTIP :Bật/tắt hiển thị những hạng mục được lưu STR_PICKER_MODE_SAVED_TOOLTIP :Bật/tắt hiển thị những hạng mục được lưu
STR_PICKER_PREVIEW_SHRINK :-
STR_PICKER_PREVIEW_SHRINK_TOOLTIP :Giảm chiều cao của ảnh xem trước. Ctrl+Click để giảm đến mức tối thiểu
STR_PICKER_PREVIEW_EXPAND :+
STR_PICKER_PREVIEW_EXPAND_TOOLTIP :Tăng chiều cao của ảnh xem trước. Ctrl+Click để tăng đến mức tối đa
STR_PICKER_STATION_CLASS_TOOLTIP :Chọn loại ga bến cần hiển thị STR_PICKER_STATION_CLASS_TOOLTIP :Chọn loại ga bến cần hiển thị
STR_PICKER_STATION_TYPE_TOOLTIP :Chọn loại ga bến để xây. Ctrl+Click để thêm hoặc bớt vào danh sách lưu STR_PICKER_STATION_TYPE_TOOLTIP :Chọn loại ga bến để xây. Ctrl+Click để thêm hoặc bớt vào danh sách lưu
@ -2851,7 +2817,6 @@ STR_HOUSE_PICKER_YEARS_FROM :{BLACK}Năm: {O
STR_HOUSE_PICKER_YEARS_UNTIL :{BLACK}Năm: {ORANGE}Đến {NUM} STR_HOUSE_PICKER_YEARS_UNTIL :{BLACK}Năm: {ORANGE}Đến {NUM}
STR_HOUSE_PICKER_SIZE :{BLACK}Kích thước: {ORANGE}{NUM}x{NUM} ô STR_HOUSE_PICKER_SIZE :{BLACK}Kích thước: {ORANGE}{NUM}x{NUM} ô
STR_HOUSE_PICKER_CARGO_ACCEPTED :{BLACK}Hàng hóa được chấp nhận: {ORANGE} STR_HOUSE_PICKER_CARGO_ACCEPTED :{BLACK}Hàng hóa được chấp nhận: {ORANGE}
STR_HOUSE_PICKER_CARGO_PRODUCED :{BLACK}Hàng hóa cung cấp: {ORANGE}{CARGO_LIST}
STR_HOUSE_PICKER_CLASS_ZONE1 :Ngoài rìa STR_HOUSE_PICKER_CLASS_ZONE1 :Ngoài rìa
STR_HOUSE_PICKER_CLASS_ZONE2 :Ngoại ô STR_HOUSE_PICKER_CLASS_ZONE2 :Ngoại ô
@ -2860,7 +2825,6 @@ STR_HOUSE_PICKER_CLASS_ZONE4 :Phía trong ngo
STR_HOUSE_PICKER_CLASS_ZONE5 :Nội thành STR_HOUSE_PICKER_CLASS_ZONE5 :Nội thành
STR_HOUSE_PICKER_PROTECT_TITLE :Ngăn chặn nâng cấp STR_HOUSE_PICKER_PROTECT_TITLE :Ngăn chặn nâng cấp
STR_HOUSE_PICKER_PROTECT_TOOLTIP :Chọn nếu ngôi nhà này có được bảo vệ khỏi việc bị thay thế hay không khi thị trấn phát triển
STR_HOUSE_PICKER_PROTECT_OFF :Tắt STR_HOUSE_PICKER_PROTECT_OFF :Tắt
STR_HOUSE_PICKER_PROTECT_ON :Bật STR_HOUSE_PICKER_PROTECT_ON :Bật
@ -3068,11 +3032,6 @@ STR_FOUND_TOWN_INITIAL_SIZE_TOOLTIP :{BLACK}Chọn q
STR_FOUND_TOWN_CITY :{BLACK}Đô thị STR_FOUND_TOWN_CITY :{BLACK}Đô thị
STR_FOUND_TOWN_CITY_TOOLTIP :{BLACK}Thành phố phát triển nhanh hơn thị trấn{}Tuỳ thuộc thiết lập, chúng lớn hơn khi khai sinh STR_FOUND_TOWN_CITY_TOOLTIP :{BLACK}Thành phố phát triển nhanh hơn thị trấn{}Tuỳ thuộc thiết lập, chúng lớn hơn khi khai sinh
STR_FOUND_TOWN_EXPAND_MODE :{YELLOW}Mở rộng thị trấn:
STR_FOUND_TOWN_EXPAND_BUILDINGS :Công trình
STR_FOUND_TOWN_EXPAND_BUILDINGS_TOOLTIP :Tăng số công trình của thị trấn
STR_FOUND_TOWN_EXPAND_ROADS :Đường sá
STR_FOUND_TOWN_EXPAND_ROADS_TOOLTIP :Tăng số đường sá của thị trấn
STR_FOUND_TOWN_ROAD_LAYOUT :{YELLOW}Quy hoạch đường đô thị: STR_FOUND_TOWN_ROAD_LAYOUT :{YELLOW}Quy hoạch đường đô thị:
STR_FOUND_TOWN_SELECT_LAYOUT_TOOLTIP :{BLACK}Chọn để quy hoạch đường bộ trong đô thị STR_FOUND_TOWN_SELECT_LAYOUT_TOOLTIP :{BLACK}Chọn để quy hoạch đường bộ trong đô thị
@ -3145,8 +3104,6 @@ STR_LANG_AREA_INFORMATION_TRAM_TYPE :{BLACK}Kiểu x
STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Giới hạn tốc độ đường ray: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Giới hạn tốc độ đường ray: {LTBLUE}{VELOCITY}
STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Hạn chế tốc độ đường bộ: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Hạn chế tốc độ đường bộ: {LTBLUE}{VELOCITY}
STR_LANG_AREA_INFORMATION_TRAM_SPEED_LIMIT :{BLACK}Tốc độ xe điện giới hạn: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_TRAM_SPEED_LIMIT :{BLACK}Tốc độ xe điện giới hạn: {LTBLUE}{VELOCITY}
STR_LAND_AREA_INFORMATION_TOWN_CAN_UPGRADE :{BLACK}Nâng cấp thị trấn: {LTBLUE}Có thể
STR_LAND_AREA_INFORMATION_TOWN_CANNOT_UPGRADE :{BLACK}Nâng cấp thị trấn: {LTBLUE}Không thể
# Description of land area of different tiles # Description of land area of different tiles
STR_LAI_CLEAR_DESCRIPTION_ROCKS :Đá STR_LAI_CLEAR_DESCRIPTION_ROCKS :Đá
@ -3155,9 +3112,6 @@ STR_LAI_CLEAR_DESCRIPTION_BARE_LAND :Đất trống
STR_LAI_CLEAR_DESCRIPTION_GRASS :Bãi cỏ STR_LAI_CLEAR_DESCRIPTION_GRASS :Bãi cỏ
STR_LAI_CLEAR_DESCRIPTION_FIELDS :Cánh đồng STR_LAI_CLEAR_DESCRIPTION_FIELDS :Cánh đồng
STR_LAI_CLEAR_DESCRIPTION_DESERT :Hoang mạc STR_LAI_CLEAR_DESCRIPTION_DESERT :Hoang mạc
STR_LAI_CLEAR_DESCRIPTION_SNOWY_ROCKS :Đá có tuyết phủ
STR_LAI_CLEAR_DESCRIPTION_SNOWY_ROUGH_LAND :Đất gồ ghề có tuyết phủ
STR_LAI_CLEAR_DESCRIPTION_SNOWY_GRASS :Cỏ có tuyết phủ
STR_LAI_RAIL_DESCRIPTION_TRACK :Đường ray STR_LAI_RAIL_DESCRIPTION_TRACK :Đường ray
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Đường ray với đèn hiệu khóa STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Đường ray với đèn hiệu khóa
@ -3626,17 +3580,17 @@ STR_NEWGRF_LIST_COMPATIBLE :{YELLOW}Đã t
STR_NEWGRF_LIST_MISSING :{RED}Thiếu files STR_NEWGRF_LIST_MISSING :{RED}Thiếu files
# NewGRF 'it's broken' warnings # NewGRF 'it's broken' warnings
STR_NEWGRF_BROKEN :{WHITE}Hoạt động của NewGRF '{PUSH_COLOUR}{0:STRING}{POP_COLOUR}' có thể gây mất đồng bộ hoặc bị treo. STR_NEWGRF_BROKEN :{WHITE}Hoạt động của NewGRF '{0:STRING}' có thể gây mất đồng bộ hoặc bị treo.
STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}Trạng thái đầu kéo '{PUSH_COLOUR}{1:ENGINE}{POP_COLOUR}' được thay đổi khi không ở trong xưởng sửa chữa. STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}Trạng thái đầu kéo '{1:ENGINE}' được thay đổi khi không ở trong xưởng sửa chữa.
STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Nó cắt ngắn độ dài của đoàn tàu '{PUSH_COLOUR}{1:ENGINE}{POP_COLOUR}' nếu không ở trong xưởng. STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Nó cắt ngắn độ dài của đoàn tàu '{1:ENGINE}' nếu không ở trong xưởng.
STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Sức chứa của phương tiện bị thay đổi '{PUSH_COLOUR}{1:ENGINE}{POP_COLOUR}' khi không ở trong xưởng hoặc vì cải biến STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Sức chứa của phương tiện bị thay đổi '{1:ENGINE}' khi không ở trong xưởng hoặc vì cải biến
STR_BROKEN_VEHICLE_LENGTH :{WHITE}Đoàn tàu '{VEHICLE}' của '{COMPANY}' có độ dài không hợp lệ. Sự cố có thể có căn nguyên từ NewGRFs. Ván chơi có thể mất đồng bộ hoặc bị treo STR_BROKEN_VEHICLE_LENGTH :{WHITE}Đoàn tàu '{VEHICLE}' của '{COMPANY}' có độ dài không hợp lệ. Sự cố có thể có căn nguyên từ NewGRFs. Ván chơi có thể mất đồng bộ hoặc bị treo
STR_NEWGRF_BUGGY :{WHITE}NewGRF '{PUSH_COLOUR}{0:STRING}{POP_COLOUR}' không hợp lệ. STR_NEWGRF_BUGGY :{WHITE}NewGRF '{0:STRING}' không hợp lệ.
STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Danh mục hàng hoá/cải biến được cho '{PUSH_COLOUR}{1:ENGINE}{POP_COLOUR}' khác với danh mục mua được sau khi đã có. Việc này khiến cho việc tự thay thế hay là tự cải biến không chính xác. STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Danh mục hàng hoá/cải biến được cho '{1:ENGINE}' khác với danh mục mua được sau khi đã có. Việc này khiến cho việc tự thay thế hay là tự cải biến không chính xác.
STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{PUSH_COLOUR}{1:STRING}{POP_COLOUR}' gây ra một vòng lặp vô tận khi gọi hàm callback. STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' gây ra một vòng lặp vô tận khi gọi hàm callback.
STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Hàm callback {1:HEX} gửi trả kết quả sai/không rõ {2:HEX} STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Hàm callback {1:HEX} gửi trả kết quả sai/không rõ {2:HEX}
STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{PUSH_COLOUR}{1:STRING}{POP_COLOUR}' trả về loại hàng hoá sản xuất không hợp lệ khi gọi lại tại {2:HEX} STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' trả về loại hàng hoá sản xuất không hợp lệ khi gọi lại tại {2:HEX}
# 'User removed essential NewGRFs'-placeholders for stuff without specs # 'User removed essential NewGRFs'-placeholders for stuff without specs
STR_NEWGRF_INVALID_CARGO :<sai kiểu hàng> STR_NEWGRF_INVALID_CARGO :<sai kiểu hàng>
@ -3697,10 +3651,6 @@ STR_TOWN_VIEW_RENAME_TOOLTIP :{BLACK}Đổi t
STR_TOWN_VIEW_EXPAND_BUTTON :{BLACK}Mở rộng STR_TOWN_VIEW_EXPAND_BUTTON :{BLACK}Mở rộng
STR_TOWN_VIEW_EXPAND_TOOLTIP :{BLACK}Tăng quy mô đô thị STR_TOWN_VIEW_EXPAND_TOOLTIP :{BLACK}Tăng quy mô đô thị
STR_TOWN_VIEW_EXPAND_BUILDINGS_BUTTON :{BLACK}Mở rộng công trình
STR_TOWN_VIEW_EXPAND_BUILDINGS_TOOLTIP :{BLACK}Tăng số công trình của thị trấn
STR_TOWN_VIEW_EXPAND_ROADS_BUTTON :{BLACK}Mở rộng đường
STR_TOWN_VIEW_EXPAND_ROADS_TOOLTIP :{BLACK}Tăng số đường sá của thị trấn
STR_TOWN_VIEW_DELETE_BUTTON :{BLACK}Xoá STR_TOWN_VIEW_DELETE_BUTTON :{BLACK}Xoá
STR_TOWN_VIEW_DELETE_TOOLTIP :{BLACK}Xoá bỏ đô thị này hoàn toàn STR_TOWN_VIEW_DELETE_TOOLTIP :{BLACK}Xoá bỏ đô thị này hoàn toàn
@ -4026,8 +3976,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Sản l
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Sản lượng phút trước: STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Sản lượng phút trước:
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% đã vận chuyển) STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% đã vận chuyển)
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Xem vị trí trung tâm của nhà máy. Ctrl+Click mở cửa sổ mới để xem STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Xem vị trí trung tâm của nhà máy. Ctrl+Click mở cửa sổ mới để xem
STR_INDUSTRY_VIEW_CARGO_GRAPH :{BLACK}Đồ thị hàng hóa STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Biểu Đồ Sản Xuất
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}Xem đồ thị lịch sử kinh doanh hàng hóa STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Hiển thị biểu đồ lịch sử sản xuất của nhà máy
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Mức sản lượng: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Mức sản lượng: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Nhà máy này đã thông báo sắp đóng cửa! STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Nhà máy này đã thông báo sắp đóng cửa!
@ -4439,10 +4389,10 @@ STR_VEHICLE_VIEW_SHIP_ORDERS_TOOLTIP :{BLACK}Hiện l
STR_VEHICLE_VIEW_AIRCRAFT_ORDERS_TOOLTIP :{BLACK}Hiện lộ trình máy bay. Ctrl+Click để hiện lịch trình STR_VEHICLE_VIEW_AIRCRAFT_ORDERS_TOOLTIP :{BLACK}Hiện lộ trình máy bay. Ctrl+Click để hiện lịch trình
###length VEHICLE_TYPES ###length VEHICLE_TYPES
STR_VEHICLE_VIEW_TRAIN_SHOW_DETAILS_TOOLTIP :{BLACK}Hiện chi tiết tàu hoả. Ctrl+Click vào để hiện nhóm của tàu hỏa STR_VEHICLE_VIEW_TRAIN_SHOW_DETAILS_TOOLTIP :{BLACK}Hiện chi tiết tàu hoả
STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Hiện chi tiết xe. Ctrl+Click để hiện nhóm phương tiện STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Hiện chi tiết xe
STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Hiện chi tiết tàu thuỷ. Ctrl+Click vào để hiện nhóm của tàu thủy STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Hiện chi tiết tàu thuỷ
STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Hiện chi tiết máy bay. Ctrl+Click để hiện nhóm của máy bay STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Hiện chi tiết máy bay
###length VEHICLE_TYPES ###length VEHICLE_TYPES
STR_VEHICLE_VIEW_TRAIN_STATUS_START_STOP_TOOLTIP :{BLACK}Tác động đến tàu hỏa hiện tại - bấm để dừng/chạy tàu hỏa STR_VEHICLE_VIEW_TRAIN_STATUS_START_STOP_TOOLTIP :{BLACK}Tác động đến tàu hỏa hiện tại - bấm để dừng/chạy tàu hỏa
@ -4697,56 +4647,55 @@ STR_ORDER_ROAD_VEHICLE_DEPOT :Xưởng xe
STR_ORDER_SHIP_DEPOT :Xưởng tàu thuỷ STR_ORDER_SHIP_DEPOT :Xưởng tàu thuỷ
###next-name-looks-similar ###next-name-looks-similar
STR_ORDER_GO_TO_NEAREST_HANGAR_FORMAT :{STRING} xưởng sân bay gần nhất
STR_ORDER_GO_TO_NEAREST_DEPOT_FORMAT :{STRING} gần {STRING} nhất STR_ORDER_GO_TO_NEAREST_DEPOT_FORMAT :{STRING} gần {STRING} nhất
STR_ORDER_GO_TO_DEPOT_FORMAT :{STRING} {DEPOT} STR_ORDER_GO_TO_DEPOT_FORMAT :{STRING} {DEPOT}
STR_ORDER_REFIT_ORDER :{SPACE}(Cải biến thành {STRING}) STR_ORDER_REFIT_ORDER :(Cải biến thành {STRING})
STR_ORDER_REFIT_STOP_ORDER :{SPACE}(Cải biến thành {STRING} và dừng) STR_ORDER_REFIT_STOP_ORDER :(Cải biến thành {STRING} và dừng)
STR_ORDER_STOP_ORDER :{SPACE}(Dừng) STR_ORDER_STOP_ORDER :(Dừng)
STR_ORDER_WAIT_TO_UNBUNCH :{SPACE}(Chờ để gỡ gộp) STR_ORDER_WAIT_TO_UNBUNCH :(Chờ để gỡ gộp)
STR_ORDER_GO_TO_STATION :{STRING} {STATION} STR_ORDER_GO_TO_STATION :{STRING} {STATION}
STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Không thể sử dụng trạm){POP_COLOUR} {STRING} {STATION} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Không thể sử dụng trạm){POP_COLOUR} {STRING} {STATION}
STR_ORDER_IMPLICIT :{SPACE}(Chạy ngầm) STR_ORDER_IMPLICIT :(Chạy ngầm)
STR_ORDER_FULL_LOAD :{SPACE}(Bốc đầy hàng) STR_ORDER_FULL_LOAD :(Bốc đầy hàng)
STR_ORDER_FULL_LOAD_ANY :{SPACE}(Bốc đủ bất kỳ hàng nào) STR_ORDER_FULL_LOAD_ANY :(Bốc đủ bất kỳ hàng nào)
STR_ORDER_NO_LOAD :{SPACE}(Không bốc xếp) STR_ORDER_NO_LOAD :(Không bốc xếp)
STR_ORDER_UNLOAD :{SPACE}(Dỡ và lấy hàng khác) STR_ORDER_UNLOAD :(Dỡ và lấy hàng khác)
STR_ORDER_UNLOAD_FULL_LOAD :{SPACE}(Dỡ tất hàng và chờ bốc đầy hàng) STR_ORDER_UNLOAD_FULL_LOAD :(Dỡ tất hàng và chờ bốc đầy hàng)
STR_ORDER_UNLOAD_FULL_LOAD_ANY :{SPACE}(Dỡ tất hàng và chờ bốc đủ bất kỳ hàng nào) STR_ORDER_UNLOAD_FULL_LOAD_ANY :(Dỡ tất hàng và chờ bốc đủ bất kỳ hàng nào)
STR_ORDER_UNLOAD_NO_LOAD :{SPACE}(Dỡ tất hàng và để trống) STR_ORDER_UNLOAD_NO_LOAD :(Dỡ tất hàng và để trống)
STR_ORDER_TRANSFER :{SPACE}(Trung chuyển hàng và lấy hàng khác) STR_ORDER_TRANSFER :(Trung chuyển hàng và lấy hàng khác)
STR_ORDER_TRANSFER_FULL_LOAD :{SPACE}(Trung chuyển và chờ bốc đầy hàng) STR_ORDER_TRANSFER_FULL_LOAD :(Trung chuyển và chờ bốc đầy hàng)
STR_ORDER_TRANSFER_FULL_LOAD_ANY :{SPACE}(Trung chuyển và chờ bốc đủ hàng bất kỳ) STR_ORDER_TRANSFER_FULL_LOAD_ANY :(Trung chuyển và chờ bốc đủ hàng bất kỳ)
STR_ORDER_TRANSFER_NO_LOAD :{SPACE}(Trung chuyển và để trống) STR_ORDER_TRANSFER_NO_LOAD :(Trung chuyển và để trống)
STR_ORDER_NO_UNLOAD :{SPACE}(Không dỡ và lấy hàng) STR_ORDER_NO_UNLOAD :(Không dỡ và lấy hàng)
STR_ORDER_NO_UNLOAD_FULL_LOAD :{SPACE}(Không dỡ và chờ lấy thêm đầy hàng) STR_ORDER_NO_UNLOAD_FULL_LOAD :(Không dỡ và chờ lấy thêm đầy hàng)
STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY :{SPACE}(Không dỡ và chờ lấy đủ hàng bất kỳ) STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY :(Không dỡ và chờ lấy đủ hàng bất kỳ)
STR_ORDER_NO_UNLOAD_NO_LOAD :{SPACE}(Không bốc hàng và không dỡ hàng) STR_ORDER_NO_UNLOAD_NO_LOAD :(Không bốc hàng và không dỡ hàng)
STR_ORDER_AUTO_REFIT :{SPACE}(Tự cải biến thành {STRING}) STR_ORDER_AUTO_REFIT :(Tự cải biến thành {STRING})
STR_ORDER_FULL_LOAD_REFIT :{SPACE}(Tự cải biến và chất đầy {STRING}) STR_ORDER_FULL_LOAD_REFIT :(Tự cải biến và chất đầy {STRING})
STR_ORDER_FULL_LOAD_ANY_REFIT :{SPACE}(Tự cải biến và chất đầy bất kỳ {STRING}) STR_ORDER_FULL_LOAD_ANY_REFIT :(Tự cải biến và chất đầy bất kỳ {STRING})
STR_ORDER_UNLOAD_REFIT :{SPACE}(Dỡ hàng và tự cải biến để lấy {STRING}) STR_ORDER_UNLOAD_REFIT :(Dỡ hàng và tự cải biến để lấy {STRING})
STR_ORDER_UNLOAD_FULL_LOAD_REFIT :{SPACE}(Dỡ hàng và tự cải biến đề bốc đầy {STRING}) STR_ORDER_UNLOAD_FULL_LOAD_REFIT :(Dỡ hàng và tự cải biến đề bốc đầy {STRING})
STR_ORDER_UNLOAD_FULL_LOAD_ANY_REFIT :{SPACE}(Dỡ hàng và tự cải biến để bốc đầy bất kỳ {STRING}) STR_ORDER_UNLOAD_FULL_LOAD_ANY_REFIT :(Dỡ hàng và tự cải biến để bốc đầy bất kỳ {STRING})
STR_ORDER_TRANSFER_REFIT :{SPACE}(Trung chuyển và tự cải biến để lấy {STRING}) STR_ORDER_TRANSFER_REFIT :(Trung chuyển và tự cải biến để lấy {STRING})
STR_ORDER_TRANSFER_FULL_LOAD_REFIT :{SPACE}(Trung chuyển và tự cải biến đề bốc đầy {STRING}) STR_ORDER_TRANSFER_FULL_LOAD_REFIT :(Trung chuyển và tự cải biến đề bốc đầy {STRING})
STR_ORDER_TRANSFER_FULL_LOAD_ANY_REFIT :{SPACE}(Trung chuyển và tự cải biến để bốc đầy bất kỳ {STRING}) STR_ORDER_TRANSFER_FULL_LOAD_ANY_REFIT :(Trung chuyển và tự cải biến để bốc đầy bất kỳ {STRING})
STR_ORDER_NO_UNLOAD_REFIT :{SPACE}(Không dỡ hàng và tự cái biến để lấy {STRING}) STR_ORDER_NO_UNLOAD_REFIT :(Không dỡ hàng và tự cái biến để lấy {STRING})
STR_ORDER_NO_UNLOAD_FULL_LOAD_REFIT :{SPACE}(Không dỡ hàng và tự cải biến để bốc đầy {STRING}) STR_ORDER_NO_UNLOAD_FULL_LOAD_REFIT :(Không dỡ hàng và tự cải biến để bốc đầy {STRING})
STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY_REFIT :{SPACE}(Không dỡ hàng và tự cải biến để bốc đầy bất kỳ {STRING}) STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY_REFIT :(Không dỡ hàng và tự cải biến để bốc đầy bất kỳ {STRING})
STR_ORDER_AUTO_REFIT_ANY :hàng hóa sẵn có STR_ORDER_AUTO_REFIT_ANY :hàng hóa sẵn có
###length 3 ###length 3
STR_ORDER_STOP_LOCATION_NEAR_END :{SPACE}[đỗ ở đầu gần] STR_ORDER_STOP_LOCATION_NEAR_END :[đỗ ở đầu gần]
STR_ORDER_STOP_LOCATION_MIDDLE :{SPACE}[đỗ ở giữa] STR_ORDER_STOP_LOCATION_MIDDLE :[đỗ ở giữa]
STR_ORDER_STOP_LOCATION_FAR_END :{SPACE}[đỗ ở đầu xa] STR_ORDER_STOP_LOCATION_FAR_END :[đỗ ở đầu xa]
STR_ORDER_OUT_OF_RANGE :{RED} (Điểm đến kế tiếp ngoài tầm xa) STR_ORDER_OUT_OF_RANGE :{RED} (Điểm đến kế tiếp ngoài tầm xa)
@ -4766,15 +4715,14 @@ STR_TIMETABLE_TOOLTIP :{BLACK}Lịch t
STR_TIMETABLE_NO_TRAVEL :Không di chuyển STR_TIMETABLE_NO_TRAVEL :Không di chuyển
STR_TIMETABLE_NOT_TIMETABLEABLE :Hành trình (tự động; tính thời gian theo lịch trình thủ công kế tiếp) STR_TIMETABLE_NOT_TIMETABLEABLE :Hành trình (tự động; tính thời gian theo lịch trình thủ công kế tiếp)
STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Di chuyển (không bó buộc theo lịch trình) STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Di chuyển (không bó buộc theo lịch trình)
STR_TIMETABLE_TRAVEL_NOT_TIMETABLED_SPEED :Hành trình với tốc độ tối đa là {VELOCITY} (chưa dựng lịch trình)
STR_TIMETABLE_TRAVEL_FOR :Di chuyển trong {STRING} STR_TIMETABLE_TRAVEL_FOR :Di chuyển trong {STRING}
STR_TIMETABLE_TRAVEL_FOR_SPEED :Lộ trình {STRING} với tốc độ tối đa {VELOCITY} STR_TIMETABLE_TRAVEL_FOR_SPEED :Lộ trình {STRING} với tốc độ tối đa {VELOCITY}
STR_TIMETABLE_TRAVEL_FOR_ESTIMATED :Lộ trình (cho {STRING}, chưa có lịch trình) STR_TIMETABLE_TRAVEL_FOR_ESTIMATED :Lộ trình (cho {STRING}, chưa có lịch trình)
STR_TIMETABLE_TRAVEL_FOR_SPEED_ESTIMATED :Lộ trình (cho {STRING}, chưa có lịch trình) với tốc độ đối đa {VELOCITY} STR_TIMETABLE_TRAVEL_FOR_SPEED_ESTIMATED :Lộ trình (cho {STRING}, chưa có lịch trình) với tốc độ đối đa {VELOCITY}
STR_TIMETABLE_STAY_FOR_ESTIMATED :{SPACE}(ở lại {STRING}, chưa có lịch trình) STR_TIMETABLE_STAY_FOR_ESTIMATED :(ở lại {STRING}, chưa có lịch trình)
STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :{SPACE}(di chuyển đến {STRING}, chưa có lịch trình) STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(di chuyển đến {STRING}, chưa có lịch trình)
STR_TIMETABLE_STAY_FOR :{SPACE}và ở lại trong {STRING} STR_TIMETABLE_STAY_FOR :và ở lại trong {STRING}
STR_TIMETABLE_AND_TRAVEL_FOR :{SPACE}và di chuyển trong {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :và di chuyển trong {STRING}
STR_TIMETABLE_APPROX_TIME :{BLACK}Lịch trình này sẽ mất khoảng {STRING} để hoàn thành STR_TIMETABLE_APPROX_TIME :{BLACK}Lịch trình này sẽ mất khoảng {STRING} để hoàn thành
STR_TIMETABLE_TOTAL_TIME :{BLACK}Lịch trình này sẽ mất {STRING} để hoàn thành STR_TIMETABLE_TOTAL_TIME :{BLACK}Lịch trình này sẽ mất {STRING} để hoàn thành
@ -4793,14 +4741,12 @@ STR_TIMETABLE_START_SECONDS_QUERY :Số giây cho
STR_TIMETABLE_CHANGE_TIME :{BLACK}Đổi thời gian STR_TIMETABLE_CHANGE_TIME :{BLACK}Đổi thời gian
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Thay đổi thời lượng của điểm lộ trình được phép sử dụng. Ctrl+Click đặt thời gian cho mọi lộ trình STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Thay đổi thời lượng của điểm lộ trình được phép sử dụng. Ctrl+Click đặt thời gian cho mọi lộ trình
STR_TIMETABLE_CHANGE_TIME_QUERY :Thay đổi thời gian
STR_TIMETABLE_CLEAR_TIME :{BLACK}Xoá thời gian STR_TIMETABLE_CLEAR_TIME :{BLACK}Xoá thời gian
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Xóa thời lượng áp dụng cho điểm lộ trình. Ctrl+Click xoá tất cả thời gian cho mọi lộ trình STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Xóa thời lượng áp dụng cho điểm lộ trình. Ctrl+Click xoá tất cả thời gian cho mọi lộ trình
STR_TIMETABLE_CHANGE_SPEED :{BLACK}Thay Đổi Giới Hạn Tốc Độ STR_TIMETABLE_CHANGE_SPEED :{BLACK}Thay Đổi Giới Hạn Tốc Độ
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Thay đổi tốc độ tối đa của lộ trình được chọn. Ctrl+Click đặt tốc độ cho mọi lộ trình STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Thay đổi tốc độ tối đa của lộ trình được chọn. Ctrl+Click đặt tốc độ cho mọi lộ trình
STR_TIMETABLE_CHANGE_SPEED_QUERY :Thay đổi giới hạn tốc độ
STR_TIMETABLE_CLEAR_SPEED :{BLACK}Xóa Giới Hạn Tốc Độ STR_TIMETABLE_CLEAR_SPEED :{BLACK}Xóa Giới Hạn Tốc Độ
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Xóa tốc độ đối đa đối với lộ trình được chọn. Ctrl+Click xoá tốc độ cho mọi lộ trình STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Xóa tốc độ đối đa đối với lộ trình được chọn. Ctrl+Click xoá tốc độ cho mọi lộ trình
@ -4964,7 +4910,7 @@ STR_GAME_SAVELOAD_NOT_AVAILABLE :<không có s
STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Lưu ván chơi sẽ không có xe điện. Những công trình cho xe điện sẽ bị xoá bỏ STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Lưu ván chơi sẽ không có xe điện. Những công trình cho xe điện sẽ bị xoá bỏ
# Map generation messages # Map generation messages
STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Sinh bản đồ bị ngưng...{}{}... không có nơi đặt đô thị STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Sinh bản đồ bị ngưng...{}... không có nơi đặt đô thị
STR_ERROR_NO_TOWN_IN_SCENARIO :{WHITE}... không có đô thị nào ở màn chơi kịch bản này STR_ERROR_NO_TOWN_IN_SCENARIO :{WHITE}... không có đô thị nào ở màn chơi kịch bản này
STR_ERROR_PNGMAP :{WHITE}Không thể nạp nền từ file PNG... STR_ERROR_PNGMAP :{WHITE}Không thể nạp nền từ file PNG...
@ -5003,7 +4949,6 @@ STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}Yêu c
STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Tạo dốc bị sai hướng STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Tạo dốc bị sai hướng
STR_ERROR_CAN_T_DO_THIS :{WHITE}Không làm thế này được... STR_ERROR_CAN_T_DO_THIS :{WHITE}Không làm thế này được...
STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Cần giải toả nhà cửa trước STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Cần giải toả nhà cửa trước
STR_ERROR_BUILDING_IS_PROTECTED :{WHITE}... công trình được bảo vệ
STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Không thể dọn dẹp khu vực này... STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Không thể dọn dẹp khu vực này...
STR_ERROR_SITE_UNSUITABLE :{WHITE}... điểm không phù hợp STR_ERROR_SITE_UNSUITABLE :{WHITE}... điểm không phù hợp
STR_ERROR_ALREADY_BUILT :{WHITE}... đã xây rồi STR_ERROR_ALREADY_BUILT :{WHITE}... đã xây rồi
@ -5056,7 +5001,7 @@ STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... quá
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... quá nhiều đô thị STR_ERROR_TOO_MANY_TOWNS :{WHITE}... quá nhiều đô thị
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... không còn khoảng trống nào trên bản đồ STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... không còn khoảng trống nào trên bản đồ
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Xây dựng cầu đường đang tiến hành STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Xây dựng cầu đường đang tiến hành
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Không thể xoá đo thị này...{}{}Có một ga, bến hoặc xưởng thuộc đô thị hoặc là 1 ô đất của đô thị không thể xoá được. STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Không thể xoá đo thị này...{}Có một ga, bến hoặc xưởng thuộc đô thị hoặc là 1 ô đất của đô thị không thể xoá được.
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... không có nơi nào hợp lý để dựng tượng đài ở trung tâm đô thị này STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... không có nơi nào hợp lý để dựng tượng đài ở trung tâm đô thị này
STR_ERROR_CAN_T_BUILD_HOUSE :{WHITE}Không thể xây dựng nhà... STR_ERROR_CAN_T_BUILD_HOUSE :{WHITE}Không thể xây dựng nhà...
@ -5883,7 +5828,6 @@ STR_CURRENCY_SHORT_GIGA :{NBSP}tỷ
STR_CURRENCY_SHORT_TERA :{NBSP}ktỷ STR_CURRENCY_SHORT_TERA :{NBSP}ktỷ
STR_JUST_CARGO :{CARGO_LONG} STR_JUST_CARGO :{CARGO_LONG}
STR_JUST_LEFT_ARROW :{LEFT_ARROW}
STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW}
STR_JUST_CHECKMARK :{CHECKMARK} STR_JUST_CHECKMARK :{CHECKMARK}
STR_JUST_COMMA :{COMMA} STR_JUST_COMMA :{COMMA}
@ -5923,11 +5867,3 @@ STR_SHIP :{BLACK}{SHIP}
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY}) STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
STR_BADGE_NAME_LIST :{STRING}: {GOLD}{STRING} STR_BADGE_NAME_LIST :{STRING}: {GOLD}{STRING}
STR_BADGE_CONFIG_MENU_TOOLTIP :Mở thiết lập phù hiệu
STR_BADGE_CONFIG_RESET :Thiêt lập lại
STR_BADGE_CONFIG_ICONS :{WHITE}Ảnh phù hiệu
STR_BADGE_CONFIG_FILTERS :{WHITE}Bộ lọc phù hiệu
STR_BADGE_CONFIG_PREVIEW :Ảnh xem trước
STR_BADGE_CONFIG_NAME :Tên
STR_BADGE_FILTER_ANY_LABEL :Bất cứ {STRING} nào
STR_BADGE_FILTER_IS_LABEL :{STRING} là {STRING}

View File

@ -267,7 +267,6 @@ STR_UNITS_YEARS :{NUM}{NBSP}blwy
STR_UNITS_PERIODS :{NUM}{NBSP}cyfnod{P "" ""} STR_UNITS_PERIODS :{NUM}{NBSP}cyfnod{P "" ""}
STR_LIST_SEPARATOR :,{SPACE} STR_LIST_SEPARATOR :,{SPACE}
STR_TRUNCATION_ELLIPSIS :...
# Common window strings # Common window strings
STR_LIST_FILTER_TITLE :{BLACK}Hidlydd: STR_LIST_FILTER_TITLE :{BLACK}Hidlydd:
@ -286,7 +285,7 @@ STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Cau ffen
STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Teitl ffenestr - llusgwch hwn i symud ffenestr STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Teitl ffenestr - llusgwch hwn i symud ffenestr
STR_TOOLTIP_SHADE :{BLACK}Cysgodi'r ffenest - dangos y bar teitl yn unig STR_TOOLTIP_SHADE :{BLACK}Cysgodi'r ffenest - dangos y bar teitl yn unig
STR_TOOLTIP_DEBUG :{BLACK}Dangos gwybodaeth dadnamu NewGRF STR_TOOLTIP_DEBUG :{BLACK}Dangos gwybodaeth dadnamu NewGRF
STR_TOOLTIP_DEFSIZE :{BLACK}Ailfeintio'r ffenestr i'w faint rhagosodedig. Bydd Ctrl+Clic yn storio'r maint presenol fel rhagosodiad. Dwbl Ctrl+Clic i ailosod y rhagosodiad a storiwyd STR_TOOLTIP_DEFSIZE :{BLACK}Ailfeintio'r ffenestr i'w faint rhagosodedig. Bydd Ctrl+Clic yn storio'r maint presenol fel rhagosodiad
STR_TOOLTIP_STICKY :{BLACK}Nodi'r ffenest yma fel un na ellir ei gau can yr allwedd 'Cau Pob Ffenestr'. Bydd Ctrl+Clicio'n cadw'r dewis fel rhagosodiad STR_TOOLTIP_STICKY :{BLACK}Nodi'r ffenest yma fel un na ellir ei gau can yr allwedd 'Cau Pob Ffenestr'. Bydd Ctrl+Clicio'n cadw'r dewis fel rhagosodiad
STR_TOOLTIP_RESIZE :{BLACK}Cliciwch a llusgo er mwyn newid maint y ffenestr STR_TOOLTIP_RESIZE :{BLACK}Cliciwch a llusgo er mwyn newid maint y ffenestr
STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Toglu maint ffenestri mawr/bach STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Toglu maint ffenestri mawr/bach
@ -634,11 +633,9 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Peidio a
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Toglu'r graff ar gyfer y math llwyth yma STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Toglu'r graff ar gyfer y math llwyth yma
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING} STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} - Hanes Llwyth STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Hanes Cynhyrchu
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Cynhyrchwyd STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Cynhyrchwyd
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Cludwyd STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Cludwyd
STR_GRAPH_INDUSTRY_RANGE_DELIVERED :Danfonwyd
STR_GRAPH_INDUSTRY_RANGE_WAITING :Yn aros
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Dangos manwl amcangyfrif perfformiad STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Dangos manwl amcangyfrif perfformiad
@ -968,14 +965,11 @@ STR_GAME_OPTIONS_TAB_SOUND :Sain
STR_GAME_OPTIONS_TAB_SOUND_TOOLTIP :Dewis gosodiadau sain a cherddoriaeth STR_GAME_OPTIONS_TAB_SOUND_TOOLTIP :Dewis gosodiadau sain a cherddoriaeth
STR_GAME_OPTIONS_TAB_SOCIAL :Cymdeithasol STR_GAME_OPTIONS_TAB_SOCIAL :Cymdeithasol
STR_GAME_OPTIONS_TAB_SOCIAL_TOOLTIP :Dewis gosodiadau integreiddio cymdeithasol STR_GAME_OPTIONS_TAB_SOCIAL_TOOLTIP :Dewis gosodiadau integreiddio cymdeithasol
STR_GAME_OPTIONS_TAB_ADVANCED :Uwch
STR_GAME_OPTIONS_TAB_ADVANCED_TOOLTIP :Newid gosodiadau uwch
STR_GAME_OPTIONS_VOLUME :Lefel Sain STR_GAME_OPTIONS_VOLUME :Lefel Sain
STR_GAME_OPTIONS_SFX_VOLUME :Effeithiau sŵn STR_GAME_OPTIONS_SFX_VOLUME :Effeithiau sŵn
STR_GAME_OPTIONS_MUSIC_VOLUME :Cerddoriaeth STR_GAME_OPTIONS_MUSIC_VOLUME :Cerddoriaeth
STR_GAME_OPTIONS_SETTING :{STRING}: {ORANGE}{STRING}
STR_GAME_OPTIONS_VOLUME_MARK :{NUM}% STR_GAME_OPTIONS_VOLUME_MARK :{NUM}%
@ -1063,7 +1057,6 @@ STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :Bydd ticio'r bl
STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :Gyriant presennol: {STRING} STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :Gyriant presennol: {STRING}
STR_GAME_OPTIONS_INTERFACE :Rhyngwyneb
STR_GAME_OPTIONS_GUI_SCALE_FRAME :Maint rhyngwyneb STR_GAME_OPTIONS_GUI_SCALE_FRAME :Maint rhyngwyneb
STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :Llusgwch y llithrwr i osod maint y rhyngwyneb. Daliwhc Ctrl i ganiatáu addasiad parhaol STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :Llusgwch y llithrwr i osod maint y rhyngwyneb. Daliwhc Ctrl i ganiatáu addasiad parhaol
@ -1088,7 +1081,6 @@ STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK_TOOLTIP :Mae hwn yn agor
STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW :Rhagolwg o ganlyniad yr arolwg STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW :Rhagolwg o ganlyniad yr arolwg
STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW_TOOLTIP :Dangos canlyniadau arolwg y gêm sy'n rhedeg STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW_TOOLTIP :Dangos canlyniadau arolwg y gêm sy'n rhedeg
STR_GAME_OPTIONS_DISPLAY :Dangos
STR_GAME_OPTIONS_REFRESH_RATE :Dangos cyfradd adnewyddu STR_GAME_OPTIONS_REFRESH_RATE :Dangos cyfradd adnewyddu
STR_GAME_OPTIONS_REFRESH_RATE_TOOLTIP :Dewis y cyfradd adnewyddu sgrin i'w defnyddio STR_GAME_OPTIONS_REFRESH_RATE_TOOLTIP :Dewis y cyfradd adnewyddu sgrin i'w defnyddio
@ -1110,7 +1102,7 @@ STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :Gwybodaeth bell
STR_GAME_OPTIONS_ONLINE_CONTENT :Nôl Cynnwys STR_GAME_OPTIONS_ONLINE_CONTENT :Nôl Cynnwys
STR_GAME_OPTIONS_ONLINE_CONTENT_TOOLTIP :Gwirio am gynnwys newydd a diweddar i'w lawrlwytho STR_GAME_OPTIONS_ONLINE_CONTENT_TOOLTIP :Gwirio am gynnwys newydd a diweddar i'w lawrlwytho
STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :(dim ategolion integreiddio gyda llwyfannau cymdeithasol wedi'u gosod) STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(dim ategolion integreiddio gyda llwyfannau cymdeithasol wedi'u gosod)
STR_GAME_OPTIONS_SOCIAL_PLUGIN_TITLE :{STRING} ({STRING}) STR_GAME_OPTIONS_SOCIAL_PLUGIN_TITLE :{STRING} ({STRING})
STR_GAME_OPTIONS_SOCIAL_PLUGIN_PLATFORM :Llwyfan: STR_GAME_OPTIONS_SOCIAL_PLUGIN_PLATFORM :Llwyfan:
@ -1304,9 +1296,6 @@ STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Cyfradd chwyddi
STR_CONFIG_SETTING_RUNNING_COSTS :Costau rhedeg: {STRING} STR_CONFIG_SETTING_RUNNING_COSTS :Costau rhedeg: {STRING}
STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Gosod lefel costau cynnal a chadw ar gerbydau a thanadeiledd STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Gosod lefel costau cynnal a chadw ar gerbydau a thanadeiledd
###length 3 ###length 3
STR_CONFIG_SETTING_RUNNING_COSTS_LOW :Isel
STR_CONFIG_SETTING_RUNNING_COSTS_MEDIUM :Cymhedrol
STR_CONFIG_SETTING_RUNNING_COSTS_HIGH :Uchel
STR_CONFIG_SETTING_CONSTRUCTION_SPEED :Cyflymder adeiladu: {STRING} STR_CONFIG_SETTING_CONSTRUCTION_SPEED :Cyflymder adeiladu: {STRING}
STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :Cyfyngu'r nifer o weithredoedd adeiliadu ar gyfer AIau STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :Cyfyngu'r nifer o weithredoedd adeiliadu ar gyfer AIau
@ -1329,9 +1318,6 @@ STR_CONFIG_SETTING_SUBSIDY_DURATION_DISABLED :Dim cymhorthdal
STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Costau adeiladu: {STRING} STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Costau adeiladu: {STRING}
STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Gosod lefel costau prynnu ac adeiladu STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Gosod lefel costau prynnu ac adeiladu
###length 3 ###length 3
STR_CONFIG_SETTING_CONSTRUCTION_COSTS_LOW :Isel
STR_CONFIG_SETTING_CONSTRUCTION_COSTS_MEDIUM :Cymhedrol
STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HIGH :Uchel
STR_CONFIG_SETTING_RECESSIONS :Dirwasgiadau: {STRING} STR_CONFIG_SETTING_RECESSIONS :Dirwasgiadau: {STRING}
STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Os y galluogir, gall dirwasgiadau ddigwydd yn ysbeidiol. Yn ystod dirwasgiad bydd lefelau gweithgynhyrchu'n is o lawer (gan ddychwelyd at y lefel gwreiddiol wedi diwedd y dirwasgiad) STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Os y galluogir, gall dirwasgiadau ddigwydd yn ysbeidiol. Yn ystod dirwasgiad bydd lefelau gweithgynhyrchu'n is o lawer (gan ddychwelyd at y lefel gwreiddiol wedi diwedd y dirwasgiad)
@ -2087,9 +2073,9 @@ STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Mae llwythi ARF
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Dull dosrannu ar gyfer llwythi eraill: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Dull dosrannu ar gyfer llwythi eraill: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :Mae "anghymesur" yn golygu y gall llwythi mympwyol eu gyrru yn y naill cyfeiriad neu'r llall. Mae "â llaw" yn golygu ni fydd dosrannu diofyn yn digwydd ar gyfer y llwythi hyn STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :Mae "anghymesur" yn golygu y gall llwythi mympwyol eu gyrru yn y naill cyfeiriad neu'r llall. Mae "â llaw" yn golygu ni fydd dosrannu diofyn yn digwydd ar gyfer y llwythi hyn
###length 3 ###length 3
STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :Â llaw STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :â llaw
STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :Anghymesur STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :anghymesur
STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :Cymesur STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :cymesur
STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Manylder dosrannu: {STRING} STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Manylder dosrannu: {STRING}
STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Mae'r gosodiad yma'n pennu faint o amser prosesydd y bydd cyfrifo'r graff cyswllt yn ei gymeryd. Os yw'n cymryd gormod o amser efallai bydd peth oedi ar y gêm. Os ydych yn gosod gwerth isel, fodd bynnag, ni fydd y dosraniad yn fanwl gywir, a gallwch nodi nad yw llwythi'n cael ei yrru i'r mannau y byddech y disgwyl STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Mae'r gosodiad yma'n pennu faint o amser prosesydd y bydd cyfrifo'r graff cyswllt yn ei gymeryd. Os yw'n cymryd gormod o amser efallai bydd peth oedi ar y gêm. Os ydych yn gosod gwerth isel, fodd bynnag, ni fydd y dosraniad yn fanwl gywir, a gallwch nodi nad yw llwythi'n cael ei yrru i'r mannau y byddech y disgwyl
@ -2204,8 +2190,6 @@ STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... dim
STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... gyriant caledwedd graffig wedi chwalu'r gêm. Cyflymu caledwedd wedi;i analluogi STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... gyriant caledwedd graffig wedi chwalu'r gêm. Cyflymu caledwedd wedi;i analluogi
# Intro window # Intro window
STR_INTRO_CAPTION :{WHITE}OpenTTD
STR_INTRO_VERSION :OpenTTD {REV}
STR_INTRO_NEW_GAME :{BLACK}Gêm Newydd STR_INTRO_NEW_GAME :{BLACK}Gêm Newydd
STR_INTRO_LOAD_GAME :{BLACK}Llwytho Gêm STR_INTRO_LOAD_GAME :{BLACK}Llwytho Gêm
@ -2339,19 +2323,16 @@ STR_FACE_SIMPLE_TOOLTIP :{BLACK}Dewis wy
STR_FACE_LOAD :{BLACK}Llwytho STR_FACE_LOAD :{BLACK}Llwytho
STR_FACE_LOAD_TOOLTIP :{BLACK}Llwytho hoff wyneb STR_FACE_LOAD_TOOLTIP :{BLACK}Llwytho hoff wyneb
STR_FACE_LOAD_DONE :{WHITE}Llwythwyd eich hoff wyneb o'r ffeil ffurfweddu OpenTTD STR_FACE_LOAD_DONE :{WHITE}Llwythwyd eich hoff wyneb o'r ffeil ffurfweddu OpenTTD
STR_FACE_FACECODE :{BLACK}Cod gwyneb chwaraewr STR_FACE_FACECODE :{BLACK}Wyneb chwaraewr rhif:
STR_FACE_FACECODE_TOOLTIP :{BLACK}Gweld ac/neu osod cod gwyneb llywydd y cwmni STR_FACE_FACECODE_TOOLTIP :{BLACK}Gweld ac/neu osod rhif wyneb llywydd y cwmni
STR_FACE_FACECODE_CAPTION :{WHITE}Gweld ac/neu osod cod gwyneb llywydd STR_FACE_FACECODE_CAPTION :{WHITE}Gweld ac/neu osod rhif gwyneb llywydd
STR_FACE_FACECODE_SET :{WHITE}Cafodd cod gwyneb newydd ei osod STR_FACE_FACECODE_SET :{WHITE}Cafodd rhif wyneb newydd ei osod
STR_FACE_FACECODE_ERR :{WHITE}Methu gosod cod wyneb llywydd - rhaid iddo fod yn label a rhif dilys STR_FACE_FACECODE_ERR :{WHITE}Methu gosod rhif wyneb llywydd - rhaid iddo fod yn rhif rhwng 0 a 4,294,967,295!
STR_FACE_SAVE :{BLACK}Cadw STR_FACE_SAVE :{BLACK}Cadw
STR_FACE_SAVE_TOOLTIP :{BLACK}Cadw hoff wyneb STR_FACE_SAVE_TOOLTIP :{BLACK}Cadw hoff wyneb
STR_FACE_SAVE_DONE :{WHITE}Bydd yr wyneb hwn yn cael ei gadw fel eich ffefryn yn y ffeil ffurfweddu OpenTTD STR_FACE_SAVE_DONE :{WHITE}Bydd yr wyneb hwn yn cael ei gadw fel eich ffefryn yn y ffeil ffurfweddu OpenTTD
STR_FACE_SETTING_TOGGLE :{STRING} {ORANGE}{STRING}
STR_FACE_SETTING_NUMERIC :{STRING} {ORANGE}{NUM} / {NUM}
STR_FACE_YES :Ie STR_FACE_YES :Ie
STR_FACE_NO :Na STR_FACE_NO :Na
STR_FACE_STYLE :Arddull:
STR_FACE_HAIR :Gwallt: STR_FACE_HAIR :Gwallt:
STR_FACE_EYEBROWS :Aeliau: STR_FACE_EYEBROWS :Aeliau:
STR_FACE_EYECOLOUR :Lliw llygaid STR_FACE_EYECOLOUR :Lliw llygaid
@ -2824,10 +2805,6 @@ STR_PICKER_MODE_USED_TOOLTIP :Toglu dangos ei
STR_PICKER_MODE_SAVED :Wedi'u Cadw STR_PICKER_MODE_SAVED :Wedi'u Cadw
STR_PICKER_MODE_SAVED_TOOLTIP :Toglu dangos eitemau wedi'u cadw yn unig STR_PICKER_MODE_SAVED_TOOLTIP :Toglu dangos eitemau wedi'u cadw yn unig
STR_PICKER_PREVIEW_SHRINK :-
STR_PICKER_PREVIEW_SHRINK_TOOLTIP :Lleihau ucher delewddau rhagolwg. Mae Ctrl+Clic yn lleihau at yr isafswm
STR_PICKER_PREVIEW_EXPAND :+
STR_PICKER_PREVIEW_EXPAND_TOOLTIP :Cynyddu ucher delewddau rhagolwg. Mae Ctrl+Clic yn cynyddu at yr uchafswm
STR_PICKER_STATION_CLASS_TOOLTIP :Dewis dosbarth gorsaf i'w ddangos STR_PICKER_STATION_CLASS_TOOLTIP :Dewis dosbarth gorsaf i'w ddangos
STR_PICKER_STATION_TYPE_TOOLTIP :Dewis math gorsaf i'w adeiladu. Mae Ctrl+Clic yn adio neu tynnu o'r eitemau a gedwir STR_PICKER_STATION_TYPE_TOOLTIP :Dewis math gorsaf i'w adeiladu. Mae Ctrl+Clic yn adio neu tynnu o'r eitemau a gedwir
@ -3068,11 +3045,6 @@ STR_FOUND_TOWN_INITIAL_SIZE_TOOLTIP :{BLACK}Dewiswch
STR_FOUND_TOWN_CITY :{BLACK}Dinas STR_FOUND_TOWN_CITY :{BLACK}Dinas
STR_FOUND_TOWN_CITY_TOOLTIP :{BLACK}Mae dinasoedd yn tyfu'n gynt na threfi arferol{}Yn dibynnu ar y gosodiadau, maent hefyd yn fwy pan gânt eu sefydlu STR_FOUND_TOWN_CITY_TOOLTIP :{BLACK}Mae dinasoedd yn tyfu'n gynt na threfi arferol{}Yn dibynnu ar y gosodiadau, maent hefyd yn fwy pan gânt eu sefydlu
STR_FOUND_TOWN_EXPAND_MODE :{YELLOW}Ehangu tref:
STR_FOUND_TOWN_EXPAND_BUILDINGS :Adeiladau
STR_FOUND_TOWN_EXPAND_BUILDINGS_TOOLTIP :Cynyddu adeiladau trefi
STR_FOUND_TOWN_EXPAND_ROADS :Lonydd
STR_FOUND_TOWN_EXPAND_ROADS_TOOLTIP :Cynyddu lonau mewn trefi
STR_FOUND_TOWN_ROAD_LAYOUT :{YELLOW}Cynllun ffyrdd tref STR_FOUND_TOWN_ROAD_LAYOUT :{YELLOW}Cynllun ffyrdd tref
STR_FOUND_TOWN_SELECT_LAYOUT_TOOLTIP :{BLACK}Dewiswch y cynllun ffyrdd i'w ddefnyddio ar gyfer y dref hon STR_FOUND_TOWN_SELECT_LAYOUT_TOOLTIP :{BLACK}Dewiswch y cynllun ffyrdd i'w ddefnyddio ar gyfer y dref hon
@ -3697,10 +3669,6 @@ STR_TOWN_VIEW_RENAME_TOOLTIP :{BLACK}newid en
STR_TOWN_VIEW_EXPAND_BUTTON :{BLACK}Ehangu STR_TOWN_VIEW_EXPAND_BUTTON :{BLACK}Ehangu
STR_TOWN_VIEW_EXPAND_TOOLTIP :{BLACK}Cynyddu maint tref STR_TOWN_VIEW_EXPAND_TOOLTIP :{BLACK}Cynyddu maint tref
STR_TOWN_VIEW_EXPAND_BUILDINGS_BUTTON :{BLACK}Ehangu adeiladau
STR_TOWN_VIEW_EXPAND_BUILDINGS_TOOLTIP :{BLACK}Cynyddu adeiladau'r dref
STR_TOWN_VIEW_EXPAND_ROADS_BUTTON :{BLACK}Ehangu lonydd
STR_TOWN_VIEW_EXPAND_ROADS_TOOLTIP :{BLACK}Cynyddu lonau y dref
STR_TOWN_VIEW_DELETE_BUTTON :{BLACK}Dileu STR_TOWN_VIEW_DELETE_BUTTON :{BLACK}Dileu
STR_TOWN_VIEW_DELETE_TOOLTIP :{BLACK}Dileu'r dref hon yn llwyr STR_TOWN_VIEW_DELETE_TOOLTIP :{BLACK}Dileu'r dref hon yn llwyr
@ -4026,8 +3994,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Cynnyrch
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Cynnyrch y munud olaf: STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Cynnyrch y munud olaf:
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% wedi'i gludo) STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% wedi'i gludo)
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Canoli'r brif olygfa ar y diwydiant. Ctrl+Clic i agor ffenest golwg newydd ar leoliad y diwydiant STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Canoli'r brif olygfa ar y diwydiant. Ctrl+Clic i agor ffenest golwg newydd ar leoliad y diwydiant
STR_INDUSTRY_VIEW_CARGO_GRAPH :{BLACK}Graff Llwythi STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Graff Cynhyrchiant
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}Yn dangos graff o hanes llwythi diwydiant STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Dangos graff o hanes cynhyrchu diwydiant
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Lefel cynhyrchu: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Lefel cynhyrchu: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Mae'r diwydiant wedi datgan ei fod ar fin cau! STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Mae'r diwydiant wedi datgan ei fod ar fin cau!
@ -4439,10 +4407,10 @@ STR_VEHICLE_VIEW_SHIP_ORDERS_TOOLTIP :{BLACK}Dangos g
STR_VEHICLE_VIEW_AIRCRAFT_ORDERS_TOOLTIP :{BLACK}Dangos gorchmynion awyren. Mae Ctrl + clic yn dangos amserlen y awyren STR_VEHICLE_VIEW_AIRCRAFT_ORDERS_TOOLTIP :{BLACK}Dangos gorchmynion awyren. Mae Ctrl + clic yn dangos amserlen y awyren
###length VEHICLE_TYPES ###length VEHICLE_TYPES
STR_VEHICLE_VIEW_TRAIN_SHOW_DETAILS_TOOLTIP :{BLACK}Dangos manylion trên. Ctrl+Clic i ddangos grŵp y trên STR_VEHICLE_VIEW_TRAIN_SHOW_DETAILS_TOOLTIP :{BLACK}Dangos manylion trên
STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Dangos manylion cerbyd ffordd. Ctrl+Clic i ddangos grŵp y cerbyd STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Dangos manylion cerbyd ffordd
STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Dangos manylion llong. Ctrl+Clic i ddangos grŵp y llong STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Dangos manylion llong
STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Dangos manylion awyren. Ctrl+Clic i ddangos grŵp yr awyren STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Dangos manylion awyren
###length VEHICLE_TYPES ###length VEHICLE_TYPES
STR_VEHICLE_VIEW_TRAIN_STATUS_START_STOP_TOOLTIP :{BLACK}Gweithred presennol trên - clicio i stopio/cychwyn trên STR_VEHICLE_VIEW_TRAIN_STATUS_START_STOP_TOOLTIP :{BLACK}Gweithred presennol trên - clicio i stopio/cychwyn trên
@ -4766,15 +4734,14 @@ STR_TIMETABLE_TOOLTIP :{BLACK}Amserlen
STR_TIMETABLE_NO_TRAVEL :Dim teithio STR_TIMETABLE_NO_TRAVEL :Dim teithio
STR_TIMETABLE_NOT_TIMETABLEABLE :Teithio (awtomatig; amserlennir gan y gorchymyn defnyddiwr nesaf) STR_TIMETABLE_NOT_TIMETABLEABLE :Teithio (awtomatig; amserlennir gan y gorchymyn defnyddiwr nesaf)
STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Teithio (heb ei amserlenu) STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Teithio (heb ei amserlenu)
STR_TIMETABLE_TRAVEL_NOT_TIMETABLED_SPEED :Teithio heb oresgyn {VELOCITY} (heb ei amserlenu)
STR_TIMETABLE_TRAVEL_FOR :Teithio am{STRING} STR_TIMETABLE_TRAVEL_FOR :Teithio am{STRING}
STR_TIMETABLE_TRAVEL_FOR_SPEED :Teithio am {STRING} heb oresgyn {VELOCITY} STR_TIMETABLE_TRAVEL_FOR_SPEED :Teithio am {STRING} heb oresgyn {VELOCITY}
STR_TIMETABLE_TRAVEL_FOR_ESTIMATED :Teithio (am {STRING}, heb ei amserlennu) STR_TIMETABLE_TRAVEL_FOR_ESTIMATED :Teithio (am {STRING}, heb ei amserlennu)
STR_TIMETABLE_TRAVEL_FOR_SPEED_ESTIMATED :Teitho (am {STRING}, heb ei amserlennu) dim cyflymach na {VELOCITY} STR_TIMETABLE_TRAVEL_FOR_SPEED_ESTIMATED :Teitho (am {STRING}, heb ei amserlennu) dim cyflymach na {VELOCITY}
STR_TIMETABLE_STAY_FOR_ESTIMATED :{SPACE}(aros am {STRING}, heb ei amserlennu) STR_TIMETABLE_STAY_FOR_ESTIMATED :{SPACE}(aros am {STRING}, heb ei amserlennu)
STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :{SPACE}(teithio am {STRING}, heb ei amserlennu) STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :{SPACE}(teithio am {STRING}, heb ei amserlennu)
STR_TIMETABLE_STAY_FOR :{SPACE}aros am {STRING} STR_TIMETABLE_STAY_FOR :aros am {STRING}
STR_TIMETABLE_AND_TRAVEL_FOR :{SPACE}a theithio am {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :a theithio am {STRING}
STR_TIMETABLE_APPROX_TIME :{BLACK}Bydd yr amserlen hon yn cymryd tua {STRING} i'w chwblhau STR_TIMETABLE_APPROX_TIME :{BLACK}Bydd yr amserlen hon yn cymryd tua {STRING} i'w chwblhau
STR_TIMETABLE_TOTAL_TIME :{BLACK}Bydd yr amserlen hon yn cymryd {STRING} i'w chwblhau STR_TIMETABLE_TOTAL_TIME :{BLACK}Bydd yr amserlen hon yn cymryd {STRING} i'w chwblhau
@ -5003,7 +4970,6 @@ STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}Rhaid i'
STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Mae'r tir yn goleddu i'r cyfeiriad anghywir STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Mae'r tir yn goleddu i'r cyfeiriad anghywir
STR_ERROR_CAN_T_DO_THIS :{WHITE}Does dim modd gwneud hynny... STR_ERROR_CAN_T_DO_THIS :{WHITE}Does dim modd gwneud hynny...
STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Rhaid dymchwel adeilad yn gyntaf STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Rhaid dymchwel adeilad yn gyntaf
STR_ERROR_BUILDING_IS_PROTECTED :{WHITE}... adeilad wedi ei amddiffyn
STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Does dim modd clirior ardal hon... STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Does dim modd clirior ardal hon...
STR_ERROR_SITE_UNSUITABLE :{WHITE}... safle anaddas STR_ERROR_SITE_UNSUITABLE :{WHITE}... safle anaddas
STR_ERROR_ALREADY_BUILT :{WHITE}... eisoes wedi'i adeiladu STR_ERROR_ALREADY_BUILT :{WHITE}... eisoes wedi'i adeiladu
@ -5883,7 +5849,6 @@ STR_CURRENCY_SHORT_GIGA :{NBSP}bn
STR_CURRENCY_SHORT_TERA :{NBSP}tn STR_CURRENCY_SHORT_TERA :{NBSP}tn
STR_JUST_CARGO :{CARGO_LONG} STR_JUST_CARGO :{CARGO_LONG}
STR_JUST_LEFT_ARROW :{LEFT_ARROW}
STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW}
STR_JUST_CHECKMARK :{CHECKMARK} STR_JUST_CHECKMARK :{CHECKMARK}
STR_JUST_COMMA :{COMMA} STR_JUST_COMMA :{COMMA}
@ -5923,11 +5888,3 @@ STR_SHIP :{BLACK}{SHIP}
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY}) STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
STR_BADGE_NAME_LIST :{STRING}: {GOLD}{STRING} STR_BADGE_NAME_LIST :{STRING}: {GOLD}{STRING}
STR_BADGE_CONFIG_MENU_TOOLTIP :Agod ffurfweddu bathodyn
STR_BADGE_CONFIG_RESET :Ailosod
STR_BADGE_CONFIG_ICONS :{WHITE}Eiconau Bathodyn
STR_BADGE_CONFIG_FILTERS :{WHITE}Hidlau Bathodyn
STR_BADGE_CONFIG_PREVIEW :Rhagolwg Delwedd
STR_BADGE_CONFIG_NAME :Enw
STR_BADGE_FILTER_ANY_LABEL :Unrhyw {STRING}
STR_BADGE_FILTER_IS_LABEL :Mae {STRING} yn {STRING}

View File

@ -64,7 +64,7 @@ bool HandlePlacePushButton(Window *w, WidgetID widget, CursorID cursor, HighLigh
{ {
if (w->IsWidgetDisabled(widget)) return false; if (w->IsWidgetDisabled(widget)) return false;
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
w->SetDirty(); w->SetDirty();
if (w->IsWidgetLowered(widget)) { if (w->IsWidgetLowered(widget)) {

View File

@ -683,16 +683,13 @@ struct MusicWindow : public Window {
void UpdateDisabledButtons() void UpdateDisabledButtons()
{ {
/* Disable stop and play if there is no music. */ /* Disable music control widgets if there is no music
this->SetWidgetsDisabledState(BaseMusic::GetUsedSet()->num_available == 0, WID_M_STOP, WID_M_PLAY); * -- except Programme button! So you can still select a music set. */
/* Disable most music control widgets if there is no music, or we are in the intro menu. */
this->SetWidgetsDisabledState( this->SetWidgetsDisabledState(
BaseMusic::GetUsedSet()->num_available == 0 || _game_mode == GM_MENU, BaseMusic::GetUsedSet()->num_available == 0,
WID_M_PREV, WID_M_NEXT, WID_M_SHUFFLE, WID_M_PREV, WID_M_NEXT, WID_M_STOP, WID_M_PLAY, WID_M_SHUFFLE,
WID_M_ALL, WID_M_OLD, WID_M_NEW, WID_M_EZY, WID_M_CUSTOM1, WID_M_CUSTOM2 WID_M_ALL, WID_M_OLD, WID_M_NEW, WID_M_EZY, WID_M_CUSTOM1, WID_M_CUSTOM2
); );
/* Also disable programme button in the intro menu (not in game; it is desirable to allow change of music set.) */
this->SetWidgetsDisabledState(_game_mode == GM_MENU, WID_M_PROGRAMME);
} }
void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override

View File

@ -59,7 +59,7 @@ static ChangeInfoResult LoadTranslationTable(uint first, uint last, ByteReader &
GRFFile *grf_override = GetCurrentGRFOverride(); GRFFile *grf_override = GetCurrentGRFOverride();
if (grf_override != nullptr) { if (grf_override != nullptr) {
/* GRF override is present, copy the translation table to the overridden GRF as well. */ /* GRF override is present, copy the translation table to the overridden GRF as well. */
GrfMsg(1, "LoadTranslationTable: Copying {} translation table to override GRFID {:08X}", name, std::byteswap(grf_override->grfid)); GrfMsg(1, "LoadTranslationTable: Copying {} translation table to override GRFID '{}'", name, std::byteswap(grf_override->grfid));
std::vector<T> &override_table = gettable(*grf_override); std::vector<T> &override_table = gettable(*grf_override);
override_table = translation_table; override_table = translation_table;
} }

View File

@ -90,12 +90,12 @@ static ChangeInfoResult StationChangeInfo(uint first, uint last, int prop, ByteR
/* no relative bounding box support */ /* no relative bounding box support */
DrawTileSeqStruct &dtss = tmp_layout.emplace_back(); DrawTileSeqStruct &dtss = tmp_layout.emplace_back();
dtss.origin.x = delta_x; dtss.delta_x = delta_x;
dtss.origin.y = buf.ReadByte(); dtss.delta_y = buf.ReadByte();
dtss.origin.z = buf.ReadByte(); dtss.delta_z = buf.ReadByte();
dtss.extent.x = buf.ReadByte(); dtss.size_x = buf.ReadByte();
dtss.extent.y = buf.ReadByte(); dtss.size_y = buf.ReadByte();
dtss.extent.z = buf.ReadByte(); dtss.size_z = buf.ReadByte();
ReadSpriteLayoutSprite(buf, false, true, false, GSF_STATIONS, &dtss.image); ReadSpriteLayoutSprite(buf, false, true, false, GSF_STATIONS, &dtss.image);
/* On error, bail out immediately. Temporary GRF data was already freed */ /* On error, bail out immediately. Temporary GRF data was already freed */

View File

@ -207,15 +207,15 @@ bool ReadSpriteLayout(ByteReader &buf, uint num_building_sprites, bool use_cur_s
return true; return true;
} }
seq->origin.x = buf.ReadByte(); seq->delta_x = buf.ReadByte();
seq->origin.y = buf.ReadByte(); seq->delta_y = buf.ReadByte();
if (!no_z_position) seq->origin.z = buf.ReadByte(); if (!no_z_position) seq->delta_z = buf.ReadByte();
if (seq->IsParentSprite()) { if (seq->IsParentSprite()) {
seq->extent.x = buf.ReadByte(); seq->size_x = buf.ReadByte();
seq->extent.y = buf.ReadByte(); seq->size_y = buf.ReadByte();
seq->extent.z = buf.ReadByte(); seq->size_z = buf.ReadByte();
} }
ReadSpriteLayoutRegisters(buf, flags, seq->IsParentSprite(), dts, i + 1); ReadSpriteLayoutRegisters(buf, flags, seq->IsParentSprite(), dts, i + 1);

View File

@ -609,7 +609,7 @@ SpriteLayoutProcessor::SpriteLayoutProcessor(const NewGRFSpriteLayout &raw_layou
* Also include the groundsprite into the sequence for easier processing. */ * Also include the groundsprite into the sequence for easier processing. */
DrawTileSeqStruct &copy = this->result_seq.emplace_back(); DrawTileSeqStruct &copy = this->result_seq.emplace_back();
copy.image = this->raw_layout->ground; copy.image = this->raw_layout->ground;
copy.origin.z = static_cast<int8_t>(0x80); copy.delta_z = static_cast<int8_t>(0x80);
this->result_seq.insert(this->result_seq.end(), this->raw_layout->seq.begin(), this->raw_layout->seq.end()); this->result_seq.insert(this->result_seq.end(), this->raw_layout->seq.begin(), this->raw_layout->seq.end());
@ -692,13 +692,13 @@ void SpriteLayoutProcessor::ProcessRegisters(const ResolverObject &object, uint8
if (result.IsParentSprite()) { if (result.IsParentSprite()) {
if (flags & TLF_BB_XY_OFFSET) { if (flags & TLF_BB_XY_OFFSET) {
result.origin.x += object.GetRegister(regs->delta.parent[0]); result.delta_x += object.GetRegister(regs->delta.parent[0]);
result.origin.y += object.GetRegister(regs->delta.parent[1]); result.delta_y += object.GetRegister(regs->delta.parent[1]);
} }
if (flags & TLF_BB_Z_OFFSET) result.origin.z += object.GetRegister(regs->delta.parent[2]); if (flags & TLF_BB_Z_OFFSET) result.delta_z += object.GetRegister(regs->delta.parent[2]);
} else { } else {
if (flags & TLF_CHILD_X_OFFSET) result.origin.x += object.GetRegister(regs->delta.child[0]); if (flags & TLF_CHILD_X_OFFSET) result.delta_x += object.GetRegister(regs->delta.child[0]);
if (flags & TLF_CHILD_Y_OFFSET) result.origin.y += object.GetRegister(regs->delta.child[1]); if (flags & TLF_CHILD_Y_OFFSET) result.delta_y += object.GetRegister(regs->delta.child[1]);
} }
} }
} }

View File

@ -476,7 +476,13 @@ static void DrawTile_Object(TileInfo *ti)
if (!IsInvisibilitySet(TO_STRUCTURES)) { if (!IsInvisibilitySet(TO_STRUCTURES)) {
for (const DrawTileSeqStruct &dtss : dts->GetSequence()) { for (const DrawTileSeqStruct &dtss : dts->GetSequence()) {
AddSortableSpriteToDraw(dtss.image.sprite, palette, *ti, dtss, IsTransparencySet(TO_STRUCTURES)); AddSortableSpriteToDraw(
dtss.image.sprite, palette,
ti->x + dtss.delta_x, ti->y + dtss.delta_y,
dtss.size_x, dtss.size_y,
dtss.size_z, ti->z + dtss.delta_z,
IsTransparencySet(TO_STRUCTURES)
);
} }
} }
} else { } else {

View File

@ -319,7 +319,7 @@ public:
if (_object_gui.sel_type != std::numeric_limits<uint16_t>::max()) { if (_object_gui.sel_type != std::numeric_limits<uint16_t>::max()) {
_object_gui.sel_view = this->GetWidget<NWidgetBase>(widget)->GetParentWidget<NWidgetMatrix>()->GetCurrentElement(); _object_gui.sel_view = this->GetWidget<NWidgetBase>(widget)->GetParentWidget<NWidgetMatrix>()->GetCurrentElement();
this->InvalidateData(PickerInvalidation::Position); this->InvalidateData(PickerInvalidation::Position);
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
} }
break; break;

View File

@ -384,7 +384,7 @@ void PickerWindow::OnClick(Point pt, WidgetID widget, int)
this->callbacks.SetSelectedClass(*it); this->callbacks.SetSelectedClass(*it);
this->InvalidateData({PickerInvalidation::Type, PickerInvalidation::Position, PickerInvalidation::Validate}); this->InvalidateData({PickerInvalidation::Type, PickerInvalidation::Position, PickerInvalidation::Validate});
} }
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
CloseWindowById(WC_SELECT_STATION, 0); CloseWindowById(WC_SELECT_STATION, 0);
break; break;
} }
@ -398,7 +398,8 @@ void PickerWindow::OnClick(Point pt, WidgetID widget, int)
SetBit(this->callbacks.mode, PFM_ALL); SetBit(this->callbacks.mode, PFM_ALL);
} }
this->InvalidateData({PickerInvalidation::Class, PickerInvalidation::Type, PickerInvalidation::Position}); this->InvalidateData({PickerInvalidation::Class, PickerInvalidation::Type, PickerInvalidation::Position});
SndClickBeep();
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
break; break;
case WID_PW_SHRINK: case WID_PW_SHRINK:
@ -435,7 +436,7 @@ void PickerWindow::OnClick(Point pt, WidgetID widget, int)
this->callbacks.SetSelectedType(item.index); this->callbacks.SetSelectedType(item.index);
this->InvalidateData(PickerInvalidation::Position); this->InvalidateData(PickerInvalidation::Position);
} }
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
CloseWindowById(WC_SELECT_STATION, 0); CloseWindowById(WC_SELECT_STATION, 0);
break; break;
} }

View File

@ -184,7 +184,7 @@ public:
/** /**
* Bridge offset * Bridge offset
*/ */
uint8_t bridge_offset; SpriteID bridge_offset;
/** /**
* Original railtype number to use when drawing non-newgrf railtypes, or when drawing stations. * Original railtype number to use when drawing non-newgrf railtypes, or when drawing stations.

View File

@ -1899,7 +1899,7 @@ static void DrawSingleSignal(TileIndex tile, const RailTypeInfo *rti, Track trac
sprite += type * 16 + variant * 64 + image * 2 + condition + (type > SIGTYPE_LAST_NOPBS ? 64 : 0); sprite += type * 16 + variant * 64 + image * 2 + condition + (type > SIGTYPE_LAST_NOPBS ? 64 : 0);
} }
AddSortableSpriteToDraw(sprite, PAL_NONE, x, y, GetSaveSlopeZ(x, y, track), {{}, {1, 1, BB_HEIGHT_UNDER_BRIDGE}, {}}); AddSortableSpriteToDraw(sprite, PAL_NONE, x, y, 1, 1, BB_HEIGHT_UNDER_BRIDGE, GetSaveSlopeZ(x, y, track));
} }
static uint32_t _drawtile_track_palette; static uint32_t _drawtile_track_palette;
@ -1907,11 +1907,12 @@ static uint32_t _drawtile_track_palette;
/** Offsets for drawing fences */ /** Offsets for drawing fences */
struct FenceOffset : SpriteBounds { struct FenceOffset {
Corner height_ref; ///< Corner to use height offset from. Corner height_ref; //!< Corner to use height offset from.
int x_offs; //!< Bounding box X offset.
constexpr FenceOffset(Corner height_ref, int8_t origin_x, int8_t origin_y, uint8_t extent_x, uint8_t extent_y) : int y_offs; //!< Bounding box Y offset.
SpriteBounds({origin_x, origin_y, 0}, {extent_x, extent_y, 4}, {}), height_ref(height_ref) {} int x_size; //!< Bounding box X size.
int y_size; //!< Bounding box Y size.
}; };
/** Offsets for drawing fences */ /** Offsets for drawing fences */
@ -1947,7 +1948,12 @@ static void DrawTrackFence(const TileInfo *ti, SpriteID base_image, uint num_spr
if (_fence_offsets[rfo].height_ref != CORNER_INVALID) { if (_fence_offsets[rfo].height_ref != CORNER_INVALID) {
z += GetSlopePixelZInCorner(RemoveHalftileSlope(ti->tileh), _fence_offsets[rfo].height_ref); z += GetSlopePixelZInCorner(RemoveHalftileSlope(ti->tileh), _fence_offsets[rfo].height_ref);
} }
AddSortableSpriteToDraw(base_image + (rfo % num_sprites), _drawtile_track_palette, ti->x, ti->y, z, _fence_offsets[rfo]); AddSortableSpriteToDraw(base_image + (rfo % num_sprites), _drawtile_track_palette,
ti->x + _fence_offsets[rfo].x_offs,
ti->y + _fence_offsets[rfo].y_offs,
_fence_offsets[rfo].x_size,
_fence_offsets[rfo].y_size,
4, z);
} }
/** /**

View File

@ -357,7 +357,7 @@ static void BuildRailClick_Remove(Window *w)
{ {
if (w->IsWidgetDisabled(WID_RAT_REMOVE)) return; if (w->IsWidgetDisabled(WID_RAT_REMOVE)) return;
ToggleRailButton_Remove(w); ToggleRailButton_Remove(w);
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
/* handle station builder */ /* handle station builder */
if (w->IsWidgetLowered(WID_RAT_BUILD_STATION)) { if (w->IsWidgetLowered(WID_RAT_BUILD_STATION)) {
@ -1239,7 +1239,7 @@ public:
this->RaiseWidget(WID_BRAS_PLATFORM_DIR_X + _station_gui.axis); this->RaiseWidget(WID_BRAS_PLATFORM_DIR_X + _station_gui.axis);
_station_gui.axis = (Axis)(widget - WID_BRAS_PLATFORM_DIR_X); _station_gui.axis = (Axis)(widget - WID_BRAS_PLATFORM_DIR_X);
this->LowerWidget(WID_BRAS_PLATFORM_DIR_X + _station_gui.axis); this->LowerWidget(WID_BRAS_PLATFORM_DIR_X + _station_gui.axis);
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
this->SetDirty(); this->SetDirty();
CloseWindowById(WC_SELECT_STATION, 0); CloseWindowById(WC_SELECT_STATION, 0);
break; break;
@ -1271,7 +1271,7 @@ public:
this->LowerWidget(_settings_client.gui.station_numtracks + WID_BRAS_PLATFORM_NUM_BEGIN); this->LowerWidget(_settings_client.gui.station_numtracks + WID_BRAS_PLATFORM_NUM_BEGIN);
this->LowerWidget(_settings_client.gui.station_platlength + WID_BRAS_PLATFORM_LEN_BEGIN); this->LowerWidget(_settings_client.gui.station_platlength + WID_BRAS_PLATFORM_LEN_BEGIN);
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
this->SetDirty(); this->SetDirty();
CloseWindowById(WC_SELECT_STATION, 0); CloseWindowById(WC_SELECT_STATION, 0);
break; break;
@ -1304,7 +1304,7 @@ public:
this->LowerWidget(_settings_client.gui.station_numtracks + WID_BRAS_PLATFORM_NUM_BEGIN); this->LowerWidget(_settings_client.gui.station_numtracks + WID_BRAS_PLATFORM_NUM_BEGIN);
this->LowerWidget(_settings_client.gui.station_platlength + WID_BRAS_PLATFORM_LEN_BEGIN); this->LowerWidget(_settings_client.gui.station_platlength + WID_BRAS_PLATFORM_LEN_BEGIN);
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
this->SetDirty(); this->SetDirty();
CloseWindowById(WC_SELECT_STATION, 0); CloseWindowById(WC_SELECT_STATION, 0);
break; break;
@ -1338,7 +1338,7 @@ public:
this->SetWidgetLoweredState(_settings_client.gui.station_numtracks + WID_BRAS_PLATFORM_NUM_BEGIN, !_settings_client.gui.station_dragdrop); this->SetWidgetLoweredState(_settings_client.gui.station_numtracks + WID_BRAS_PLATFORM_NUM_BEGIN, !_settings_client.gui.station_dragdrop);
this->SetWidgetLoweredState(_settings_client.gui.station_platlength + WID_BRAS_PLATFORM_LEN_BEGIN, !_settings_client.gui.station_dragdrop); this->SetWidgetLoweredState(_settings_client.gui.station_platlength + WID_BRAS_PLATFORM_LEN_BEGIN, !_settings_client.gui.station_dragdrop);
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
this->SetDirty(); this->SetDirty();
CloseWindowById(WC_SELECT_STATION, 0); CloseWindowById(WC_SELECT_STATION, 0);
break; break;
@ -1350,7 +1350,7 @@ public:
this->SetWidgetLoweredState(WID_BRAS_HIGHLIGHT_OFF, !_settings_client.gui.station_show_coverage); this->SetWidgetLoweredState(WID_BRAS_HIGHLIGHT_OFF, !_settings_client.gui.station_show_coverage);
this->SetWidgetLoweredState(WID_BRAS_HIGHLIGHT_ON, _settings_client.gui.station_show_coverage); this->SetWidgetLoweredState(WID_BRAS_HIGHLIGHT_ON, _settings_client.gui.station_show_coverage);
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
this->SetDirty(); this->SetDirty();
SetViewportCatchmentStation(nullptr, true); SetViewportCatchmentStation(nullptr, true);
break; break;
@ -1580,12 +1580,13 @@ public:
if (w != nullptr) ToggleRailButton_Remove(w); if (w != nullptr) ToggleRailButton_Remove(w);
} }
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
break; break;
case WID_BS_CONVERT: case WID_BS_CONVERT:
_convert_signal_button = !_convert_signal_button; _convert_signal_button = !_convert_signal_button;
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
break; break;
case WID_BS_DRAG_SIGNALS_DENSITY_DECREASE: case WID_BS_DRAG_SIGNALS_DENSITY_DECREASE:
@ -1745,7 +1746,7 @@ struct BuildRailDepotWindow : public PickerWindowBase {
this->RaiseWidget(WID_BRAD_DEPOT_NE + _build_depot_direction); this->RaiseWidget(WID_BRAD_DEPOT_NE + _build_depot_direction);
_build_depot_direction = (DiagDirection)(widget - WID_BRAD_DEPOT_NE); _build_depot_direction = (DiagDirection)(widget - WID_BRAD_DEPOT_NE);
this->LowerWidget(WID_BRAD_DEPOT_NE + _build_depot_direction); this->LowerWidget(WID_BRAD_DEPOT_NE + _build_depot_direction);
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
this->SetDirty(); this->SetDirty();
break; break;
} }

View File

@ -1418,7 +1418,7 @@ void DrawRoadTypeCatenary(const TileInfo *ti, RoadType rt, RoadBits rb)
* For tiles with OWNER_TOWN or OWNER_NONE, recolour CC to grey as a neutral colour. */ * For tiles with OWNER_TOWN or OWNER_NONE, recolour CC to grey as a neutral colour. */
Owner owner = GetRoadOwner(ti->tile, GetRoadTramType(rt)); Owner owner = GetRoadOwner(ti->tile, GetRoadTramType(rt));
PaletteID pal = (owner == OWNER_NONE || owner == OWNER_TOWN ? GetColourPalette(COLOUR_GREY) : GetCompanyPalette(owner)); PaletteID pal = (owner == OWNER_NONE || owner == OWNER_TOWN ? GetColourPalette(COLOUR_GREY) : GetCompanyPalette(owner));
uint8_t z_wires = (ti->tileh == SLOPE_FLAT ? 0 : TILE_HEIGHT) + BB_HEIGHT_UNDER_BRIDGE; int z_wires = (ti->tileh == SLOPE_FLAT ? 0 : TILE_HEIGHT) + BB_HEIGHT_UNDER_BRIDGE;
if (back != 0) { if (back != 0) {
/* The "back" sprite contains the west, north and east pillars. /* The "back" sprite contains the west, north and east pillars.
* We cut the sprite at 3/8 of the west/east edges to create 3 sprites. * We cut the sprite at 3/8 of the west/east edges to create 3 sprites.
@ -1427,16 +1427,13 @@ void DrawRoadTypeCatenary(const TileInfo *ti, RoadType rt, RoadBits rb)
static const SubSprite west = { -INF, -INF, -12, INF }; static const SubSprite west = { -INF, -INF, -12, INF };
static const SubSprite north = { -12, -INF, 12, INF }; static const SubSprite north = { -12, -INF, 12, INF };
static const SubSprite east = { 12, -INF, INF, INF }; static const SubSprite east = { 12, -INF, INF, INF };
int8_t west_z = GetSlopePixelZInCorner(ti->tileh, CORNER_W); AddSortableSpriteToDraw(back, pal, ti->x, ti->y, 16, 1, z_wires, ti->z, IsTransparencySet(TO_CATENARY), 15, 0, GetSlopePixelZInCorner(ti->tileh, CORNER_W), &west);
int8_t north_z = GetSlopePixelZInCorner(ti->tileh, CORNER_N); AddSortableSpriteToDraw(back, pal, ti->x, ti->y, 1, 1, z_wires, ti->z, IsTransparencySet(TO_CATENARY), 0, 0, GetSlopePixelZInCorner(ti->tileh, CORNER_N), &north);
int8_t east_z = GetSlopePixelZInCorner(ti->tileh, CORNER_E); AddSortableSpriteToDraw(back, pal, ti->x, ti->y, 1, 16, z_wires, ti->z, IsTransparencySet(TO_CATENARY), 0, 15, GetSlopePixelZInCorner(ti->tileh, CORNER_E), &east);
AddSortableSpriteToDraw(back, pal, *ti, {{15, 0, west_z}, {1, 1, z_wires}, {-15, 0, static_cast<int8_t>(-west_z)}}, IsTransparencySet(TO_CATENARY), &west);
AddSortableSpriteToDraw(back, pal, *ti, {{0, 0, north_z}, {1, 1, z_wires}, {0, 0, static_cast<int8_t>(-north_z)}}, IsTransparencySet(TO_CATENARY), &north);
AddSortableSpriteToDraw(back, pal, *ti, {{0, 15, east_z}, {1, 1, z_wires}, {0, -15, static_cast<int8_t>(-east_z)}}, IsTransparencySet(TO_CATENARY), &east);
} }
if (front != 0) { if (front != 0) {
/* Draw the "front" sprite (containing south pillar and wires) at a Z height that is both above the vehicles and above the "back" pillars. */ /* Draw the "front" sprite (containing south pillar and wires) at a Z height that is both above the vehicles and above the "back" pillars. */
AddSortableSpriteToDraw(front, pal, *ti, {{0, 0, static_cast<int8_t>(z_wires)}, {TILE_SIZE, TILE_SIZE, 1}, {0, 0, static_cast<int8_t>(-z_wires)}}, IsTransparencySet(TO_CATENARY)); AddSortableSpriteToDraw(front, pal, ti->x, ti->y, 16, 16, z_wires + 1, ti->z, IsTransparencySet(TO_CATENARY), 0, 0, z_wires);
} }
} }
@ -1490,13 +1487,13 @@ void DrawRoadCatenary(const TileInfo *ti)
* @param h the height of the sprite to draw * @param h the height of the sprite to draw
* @param transparent whether the sprite should be transparent (used for roadside trees) * @param transparent whether the sprite should be transparent (used for roadside trees)
*/ */
static void DrawRoadDetail(SpriteID img, const TileInfo *ti, int8_t dx, int8_t dy, uint8_t h, bool transparent) static void DrawRoadDetail(SpriteID img, const TileInfo *ti, int dx, int dy, int h, bool transparent)
{ {
int x = ti->x | dx; int x = ti->x | dx;
int y = ti->y | dy; int y = ti->y | dy;
int z = ti->z; int z = ti->z;
if (ti->tileh != SLOPE_FLAT) z = GetSlopePixelZ(x, y); if (ti->tileh != SLOPE_FLAT) z = GetSlopePixelZ(x, y);
AddSortableSpriteToDraw(img, PAL_NONE, ti->x, ti->y, z, {{dx, dy, 0}, {2, 2, h}, {}}, transparent); AddSortableSpriteToDraw(img, PAL_NONE, x, y, 2, 2, h, z, transparent);
} }
/** /**

View File

@ -582,7 +582,7 @@ struct BuildRoadToolbarWindow : Window {
CloseWindowById(WC_SELECT_STATION, 0); CloseWindowById(WC_SELECT_STATION, 0);
ToggleRoadButton_Remove(this); ToggleRoadButton_Remove(this);
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
break; break;
case WID_ROT_CONVERT_ROAD: case WID_ROT_CONVERT_ROAD:
@ -1145,7 +1145,7 @@ struct BuildRoadDepotWindow : public PickerWindowBase {
this->RaiseWidget(WID_BROD_DEPOT_NE + _road_depot_orientation); this->RaiseWidget(WID_BROD_DEPOT_NE + _road_depot_orientation);
_road_depot_orientation = (DiagDirection)(widget - WID_BROD_DEPOT_NE); _road_depot_orientation = (DiagDirection)(widget - WID_BROD_DEPOT_NE);
this->LowerWidget(WID_BROD_DEPOT_NE + _road_depot_orientation); this->LowerWidget(WID_BROD_DEPOT_NE + _road_depot_orientation);
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
this->SetDirty(); this->SetDirty();
break; break;
@ -1477,7 +1477,7 @@ public:
this->RaiseWidget(WID_BROS_STATION_NE + _roadstop_gui.orientation); this->RaiseWidget(WID_BROS_STATION_NE + _roadstop_gui.orientation);
_roadstop_gui.orientation = (DiagDirection)(widget - WID_BROS_STATION_NE); _roadstop_gui.orientation = (DiagDirection)(widget - WID_BROS_STATION_NE);
this->LowerWidget(WID_BROS_STATION_NE + _roadstop_gui.orientation); this->LowerWidget(WID_BROS_STATION_NE + _roadstop_gui.orientation);
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
this->SetDirty(); this->SetDirty();
CloseWindowById(WC_SELECT_STATION, 0); CloseWindowById(WC_SELECT_STATION, 0);
break; break;
@ -1487,7 +1487,7 @@ public:
this->RaiseWidget(_settings_client.gui.station_show_coverage + WID_BROS_LT_OFF); this->RaiseWidget(_settings_client.gui.station_show_coverage + WID_BROS_LT_OFF);
_settings_client.gui.station_show_coverage = (widget != WID_BROS_LT_OFF); _settings_client.gui.station_show_coverage = (widget != WID_BROS_LT_OFF);
this->LowerWidget(_settings_client.gui.station_show_coverage + WID_BROS_LT_OFF); this->LowerWidget(_settings_client.gui.station_show_coverage + WID_BROS_LT_OFF);
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
this->SetDirty(); this->SetDirty();
SetViewportCatchmentStation(nullptr, true); SetViewportCatchmentStation(nullptr, true);
break; break;

View File

@ -405,56 +405,29 @@ void RoadVehicle::MarkDirty()
void RoadVehicle::UpdateDeltaXY() void RoadVehicle::UpdateDeltaXY()
{ {
/* Set common defaults. */ static const int8_t _delta_xy_table[8][10] = {
this->bounds = {{-1, -1, 0}, {3, 3, 6}, {}}; /* y_extent, x_extent, y_offs, x_offs, y_bb_offs, x_bb_offs, y_extent_shorten, x_extent_shorten, y_bb_offs_shorten, x_bb_offs_shorten */
{3, 3, -1, -1, 0, 0, -1, -1, -1, -1}, // N
if (!IsDiagonalDirection(this->direction)) { {3, 7, -1, -3, 0, -1, 0, -1, 0, 0}, // NE
static const Point _sign_table[] = { {3, 3, -1, -1, 0, 0, 1, -1, 1, -1}, // E
/* x, y */ {7, 3, -3, -1, -1, 0, 0, 0, 1, 0}, // SE
{-1, -1}, // DIR_N {3, 3, -1, -1, 0, 0, 1, 1, 1, 1}, // S
{-1, 1}, // DIR_E {3, 7, -1, -3, 0, -1, 0, 0, 0, 1}, // SW
{ 1, 1}, // DIR_S {3, 3, -1, -1, 0, 0, -1, 1, -1, 1}, // W
{ 1, -1}, // DIR_W {7, 3, -3, -1, -1, 0, -1, 0, 0, 0}, // NW
}; };
int half_shorten = (VEHICLE_LENGTH - this->gcache.cached_veh_length) / 2; int shorten = VEHICLE_LENGTH - this->gcache.cached_veh_length;
if (!IsDiagonalDirection(this->direction)) shorten >>= 1;
/* For all straight directions, move the bound box to the centre of the vehicle, but keep the size. */ const int8_t *bb = _delta_xy_table[this->direction];
this->bounds.offset.x -= half_shorten * _sign_table[DirToDiagDir(this->direction)].x; this->x_bb_offs = bb[5] + bb[9] * shorten;
this->bounds.offset.y -= half_shorten * _sign_table[DirToDiagDir(this->direction)].y; this->y_bb_offs = bb[4] + bb[8] * shorten;;
} else { this->x_offs = bb[3];
/* Unlike trains, road vehicles do not have their offsets moved to the centre. */ this->y_offs = bb[2];
switch (this->direction) { this->x_extent = bb[1] + bb[7] * shorten;
/* Shorten southern corner of the bounding box according the vehicle length. */ this->y_extent = bb[0] + bb[6] * shorten;
case DIR_NE: this->z_extent = 6;
this->bounds.origin.x = -3;
this->bounds.extent.x = this->gcache.cached_veh_length;
this->bounds.offset.x = 1;
break;
case DIR_NW:
this->bounds.origin.y = -3;
this->bounds.extent.y = this->gcache.cached_veh_length;
this->bounds.offset.y = 1;
break;
/* Move northern corner of the bounding box down according to vehicle length. */
case DIR_SW:
this->bounds.origin.x = -3 + (VEHICLE_LENGTH - this->gcache.cached_veh_length);
this->bounds.extent.x = this->gcache.cached_veh_length;
this->bounds.offset.x = 1 - (VEHICLE_LENGTH - this->gcache.cached_veh_length);
break;
case DIR_SE:
this->bounds.origin.y = -3 + (VEHICLE_LENGTH - this->gcache.cached_veh_length);
this->bounds.extent.y = this->gcache.cached_veh_length;
this->bounds.offset.y = 1 - (VEHICLE_LENGTH - this->gcache.cached_veh_length);
break;
default:
NOT_REACHED();
}
}
} }
/** /**

View File

@ -330,26 +330,32 @@ TileIndex Ship::GetOrderStationLocation(StationID station)
void Ship::UpdateDeltaXY() void Ship::UpdateDeltaXY()
{ {
static constexpr SpriteBounds ship_bounds[DIR_END] = { static const int8_t _delta_xy_table[8][4] = {
{{ -3, -3, 0}, { 6, 6, 6}, {}}, // N /* y_extent, x_extent, y_offs, x_offs */
{{-16, -3, 0}, {32, 6, 6}, {}}, // NE { 6, 6, -3, -3}, // N
{{ -3, -3, 0}, { 6, 6, 6}, {}}, // E { 6, 32, -3, -16}, // NE
{{ -3, -16, 0}, { 6, 32, 6}, {}}, // SE { 6, 6, -3, -3}, // E
{{ -3, -3, 0}, { 6, 6, 6}, {}}, // S {32, 6, -16, -3}, // SE
{{-16, -3, 0}, {32, 6, 6}, {}}, // SW { 6, 6, -3, -3}, // S
{{ -3, -3, 0}, { 6, 6, 6}, {}}, // W { 6, 32, -3, -16}, // SW
{{ -3, -16, 0}, { 6, 32, 6}, {}}, // NW { 6, 6, -3, -3}, // W
{32, 6, -16, -3}, // NW
}; };
this->bounds = ship_bounds[this->rotation]; const int8_t *bb = _delta_xy_table[this->rotation];
this->x_offs = bb[3];
this->y_offs = bb[2];
this->x_extent = bb[1];
this->y_extent = bb[0];
this->z_extent = 6;
if (this->direction != this->rotation) { if (this->direction != this->rotation) {
/* If we are rotating, then it is possible the ship was moved to its next position. In that /* If we are rotating, then it is possible the ship was moved to its next position. In that
* case, because we are still showing the old direction, the ship will appear to glitch sideways * case, because we are still showing the old direction, the ship will appear to glitch sideways
* slightly. We can work around this by applying an additional offset to make the ship appear * slightly. We can work around this by applying an additional offset to make the ship appear
* where it was before it moved. */ * where it was before it moved. */
this->bounds.origin.x -= this->x_pos - this->rotation_x_pos; this->x_offs -= this->x_pos - this->rotation_x_pos;
this->bounds.origin.y -= this->y_pos - this->rotation_y_pos; this->y_offs -= this->y_pos - this->rotation_y_pos;
} }
} }

View File

@ -1717,7 +1717,7 @@ public:
const NWidgetBase *wid = this->GetWidget<NWidgetBase>(WID_SM_MAP); const NWidgetBase *wid = this->GetWidget<NWidgetBase>(WID_SM_MAP);
Point zoom_pt = { (int)wid->current_x / 2, (int)wid->current_y / 2}; Point zoom_pt = { (int)wid->current_x / 2, (int)wid->current_y / 2};
this->SetZoomLevel((widget == WID_SM_ZOOM_IN) ? ZLC_ZOOM_IN : ZLC_ZOOM_OUT, &zoom_pt); this->SetZoomLevel((widget == WID_SM_ZOOM_IN) ? ZLC_ZOOM_IN : ZLC_ZOOM_OUT, &zoom_pt);
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
break; break;
} }
@ -1729,7 +1729,7 @@ public:
case WID_SM_VEGETATION: // Show vegetation case WID_SM_VEGETATION: // Show vegetation
case WID_SM_OWNERS: // Show land owners case WID_SM_OWNERS: // Show land owners
this->SwitchMapType((SmallMapType)(widget - WID_SM_CONTOUR)); this->SwitchMapType((SmallMapType)(widget - WID_SM_CONTOUR));
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
break; break;
case WID_SM_CENTERMAP: // Center the smallmap again case WID_SM_CENTERMAP: // Center the smallmap again
@ -1742,7 +1742,7 @@ public:
this->SetWidgetLoweredState(WID_SM_TOGGLETOWNNAME, this->show_towns); this->SetWidgetLoweredState(WID_SM_TOGGLETOWNNAME, this->show_towns);
this->SetDirty(); this->SetDirty();
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
break; break;
case WID_SM_SHOW_IND_NAMES: // Toggle industry names case WID_SM_SHOW_IND_NAMES: // Toggle industry names
@ -1750,7 +1750,7 @@ public:
this->SetWidgetLoweredState(WID_SM_SHOW_IND_NAMES, this->show_ind_names); this->SetWidgetLoweredState(WID_SM_SHOW_IND_NAMES, this->show_ind_names);
this->SetDirty(); this->SetDirty();
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
break; break;
case WID_SM_LEGEND: // Legend case WID_SM_LEGEND: // Legend

View File

@ -247,22 +247,6 @@ void SndPlayFx(SoundID sound)
StartSound(sound, 0.5, UINT8_MAX); StartSound(sound, 0.5, UINT8_MAX);
} }
/**
* Play a beep sound for a click event if enabled in settings.
*/
void SndClickBeep()
{
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
}
/**
* Play a beep sound for a confirm event if enabled in settings.
*/
void SndConfirmBeep()
{
if (_settings_client.sound.confirm) SndPlayFx(SND_15_BEEP);
}
/** Names corresponding to the sound set's files */ /** Names corresponding to the sound set's files */
static const std::string_view _sound_file_names[] = { "samples" }; static const std::string_view _sound_file_names[] = { "samples" };

View File

@ -21,7 +21,4 @@ void SndPlayVehicleFx(SoundID sound, const Vehicle *v);
void SndPlayFx(SoundID sound); void SndPlayFx(SoundID sound);
void SndCopyToPool(); void SndCopyToPool();
void SndClickBeep();
void SndConfirmBeep();
#endif /* SOUND_FUNC_H */ #endif /* SOUND_FUNC_H */

View File

@ -54,11 +54,16 @@ void DrawCommonTileSeq(const TileInfo *ti, const DrawTileSprites *dts, Transpare
if (dtss.IsParentSprite()) { if (dtss.IsParentSprite()) {
parent_sprite_encountered = true; parent_sprite_encountered = true;
AddSortableSpriteToDraw(image, pal, *ti, dtss, !HasBit(image, SPRITE_MODIFIER_OPAQUE) && IsTransparencySet(to) AddSortableSpriteToDraw(
image, pal,
ti->x + dtss.delta_x, ti->y + dtss.delta_y,
dtss.size_x, dtss.size_y,
dtss.size_z, ti->z + dtss.delta_z,
!HasBit(image, SPRITE_MODIFIER_OPAQUE) && IsTransparencySet(to)
); );
} else { } else {
int offs_x = child_offset_is_unsigned ? static_cast<uint8_t>(dtss.origin.x) : dtss.origin.x; int offs_x = child_offset_is_unsigned ? static_cast<uint8_t>(dtss.delta_x) : dtss.delta_x;
int offs_y = child_offset_is_unsigned ? static_cast<uint8_t>(dtss.origin.y) : dtss.origin.y; int offs_y = child_offset_is_unsigned ? static_cast<uint8_t>(dtss.delta_y) : dtss.delta_y;
bool transparent = !HasBit(image, SPRITE_MODIFIER_OPAQUE) && IsTransparencySet(to); bool transparent = !HasBit(image, SPRITE_MODIFIER_OPAQUE) && IsTransparencySet(to);
if (parent_sprite_encountered) { if (parent_sprite_encountered) {
AddChildSpriteScreen(image, pal, offs_x, offs_y, transparent); AddChildSpriteScreen(image, pal, offs_x, offs_y, transparent);
@ -109,15 +114,15 @@ void DrawCommonTileSeqInGUI(int x, int y, const DrawTileSprites *dts, int32_t or
pal = SpriteLayoutPaletteTransform(image, pal, default_palette); pal = SpriteLayoutPaletteTransform(image, pal, default_palette);
if (dtss.IsParentSprite()) { if (dtss.IsParentSprite()) {
Point pt = RemapCoords(dtss.origin.x, dtss.origin.y, dtss.origin.z); Point pt = RemapCoords(dtss.delta_x, dtss.delta_y, dtss.delta_z);
DrawSprite(image, pal, x + UnScaleGUI(pt.x), y + UnScaleGUI(pt.y)); DrawSprite(image, pal, x + UnScaleGUI(pt.x), y + UnScaleGUI(pt.y));
const Sprite *spr = GetSprite(image & SPRITE_MASK, SpriteType::Normal); const Sprite *spr = GetSprite(image & SPRITE_MASK, SpriteType::Normal);
child_offset.x = UnScaleGUI(pt.x + spr->x_offs); child_offset.x = UnScaleGUI(pt.x + spr->x_offs);
child_offset.y = UnScaleGUI(pt.y + spr->y_offs); child_offset.y = UnScaleGUI(pt.y + spr->y_offs);
} else { } else {
int offs_x = child_offset_is_unsigned ? static_cast<uint8_t>(dtss.origin.x) : dtss.origin.x; int offs_x = child_offset_is_unsigned ? static_cast<uint8_t>(dtss.delta_x) : dtss.delta_x;
int offs_y = child_offset_is_unsigned ? static_cast<uint8_t>(dtss.origin.y) : dtss.origin.y; int offs_y = child_offset_is_unsigned ? static_cast<uint8_t>(dtss.delta_y) : dtss.delta_y;
DrawSprite(image, pal, x + child_offset.x + ScaleSpriteTrad(offs_x), y + child_offset.y + ScaleSpriteTrad(offs_y)); DrawSprite(image, pal, x + child_offset.x + ScaleSpriteTrad(offs_x), y + child_offset.y + ScaleSpriteTrad(offs_y));
} }
} }

View File

@ -10,37 +10,28 @@
#ifndef SPRITE_H #ifndef SPRITE_H
#define SPRITE_H #define SPRITE_H
#include "core/geometry_type.hpp"
#include "transparency.h" #include "transparency.h"
#include "table/sprites.h" #include "table/sprites.h"
struct SpriteBounds {
Coord3D<int8_t> origin; ///< Position of northern corner within tile.
Coord3D<uint8_t> extent; ///< Size of bounding box.
Coord3D<int8_t> offset; ///< Relative position of sprite from bounding box.
constexpr SpriteBounds() = default;
constexpr SpriteBounds(const Coord3D<int8_t> &origin, const Coord3D<uint8_t> &extent, const Coord3D<int8_t> &offset) :
origin(origin), extent(extent), offset(offset) {}
};
/* The following describes bunch of sprites to be drawn together in a single 3D /* The following describes bunch of sprites to be drawn together in a single 3D
* bounding box. Used especially for various multi-sprite buildings (like * bounding box. Used especially for various multi-sprite buildings (like
* depots or stations): */ * depots or stations): */
/** A tile child sprite and palette to draw for stations etc, with 3D bounding box */ /** A tile child sprite and palette to draw for stations etc, with 3D bounding box */
struct DrawTileSeqStruct : SpriteBounds { struct DrawTileSeqStruct {
PalSpriteID image; int8_t delta_x = 0;
int8_t delta_y = 0;
constexpr DrawTileSeqStruct() = default; int8_t delta_z = 0; ///< \c 0x80 identifies child sprites
constexpr DrawTileSeqStruct(int8_t origin_x, int8_t origin_y, int8_t origin_z, uint8_t extent_x, uint8_t extent_y, uint8_t extent_z, PalSpriteID image) : uint8_t size_x = 0;
SpriteBounds({origin_x, origin_y, origin_z}, {extent_x, extent_y, extent_z}, {}), image(image) {} uint8_t size_y = 0;
uint8_t size_z = 0;
PalSpriteID image{};
/** Check whether this is a parent sprite with a boundingbox. */ /** Check whether this is a parent sprite with a boundingbox. */
inline bool IsParentSprite() const bool IsParentSprite() const
{ {
return static_cast<uint8_t>(this->origin.z) != 0x80; return (uint8_t)this->delta_z != 0x80;
} }
}; };
@ -78,9 +69,14 @@ struct DrawTileSpriteSpan : DrawTileSprites {
* This structure is the same for both Industries and Houses. * This structure is the same for both Industries and Houses.
* Buildings here reference a general type of construction * Buildings here reference a general type of construction
*/ */
struct DrawBuildingsTileStruct : SpriteBounds { struct DrawBuildingsTileStruct {
PalSpriteID ground; PalSpriteID ground;
PalSpriteID building; PalSpriteID building;
uint8_t subtile_x;
uint8_t subtile_y;
uint8_t width;
uint8_t height;
uint8_t dz;
uint8_t draw_proc; // this allows to specify a special drawing procedure. uint8_t draw_proc; // this allows to specify a special drawing procedure.
}; };

View File

@ -3184,7 +3184,7 @@ static void DrawTile_Station(TileInfo *ti)
7, 8, 9 // SLOPE_NE, SLOPE_ENW, SLOPE_SEN 7, 8, 9 // SLOPE_NE, SLOPE_ENW, SLOPE_SEN
}; };
AddSortableSpriteToDraw(image + foundation_parts[ti->tileh], PAL_NONE, *ti, {{}, {TILE_SIZE, TILE_SIZE, 7}, {}}); AddSortableSpriteToDraw(image + foundation_parts[ti->tileh], PAL_NONE, ti->x, ti->y, 16, 16, 7, ti->z);
} else { } else {
/* Draw simple foundations, built up from 8 possible foundation sprites. */ /* Draw simple foundations, built up from 8 possible foundation sprites. */
@ -3218,7 +3218,7 @@ static void DrawTile_Station(TileInfo *ti)
StartSpriteCombine(); StartSpriteCombine();
for (int i = 0; i < 8; i++) { for (int i = 0; i < 8; i++) {
if (HasBit(parts, i)) { if (HasBit(parts, i)) {
AddSortableSpriteToDraw(image + i, PAL_NONE, *ti, {{}, {TILE_SIZE, TILE_SIZE, 7}, {}}); AddSortableSpriteToDraw(image + i, PAL_NONE, ti->x, ti->y, 16, 16, 7, ti->z);
} }
} }
EndSpriteCombine(); EndSpriteCombine();

View File

@ -36,18 +36,13 @@
# define MW(a) {a, PALETTE_TO_STRUCT_WHITE} # define MW(a) {a, PALETTE_TO_STRUCT_WHITE}
# define MC(a) {a, PALETTE_TO_STRUCT_CONCRETE} # define MC(a) {a, PALETTE_TO_STRUCT_CONCRETE}
/* Sprite table for middle part of aqueduct. */ static const PalSpriteID _aqueduct_sprites[] = {
static const PalSpriteID _aqueduct_sprite_table_middle[] = { { SPR_AQUEDUCT_MIDDLE_X, PAL_NONE }, { 0x0, PAL_NONE }, { SPR_AQUEDUCT_PILLAR_X, PAL_NONE }, { 0x0, PAL_NONE },
{SPR_AQUEDUCT_MIDDLE_X, PAL_NONE}, {0x0, PAL_NONE}, {SPR_AQUEDUCT_PILLAR_X, PAL_NONE}, {0x0, PAL_NONE}, // AXIS_X { SPR_AQUEDUCT_MIDDLE_Y, PAL_NONE }, { 0x0, PAL_NONE }, { SPR_AQUEDUCT_PILLAR_Y, PAL_NONE }, { 0x0, PAL_NONE },
{SPR_AQUEDUCT_MIDDLE_Y, PAL_NONE}, {0x0, PAL_NONE}, {SPR_AQUEDUCT_PILLAR_Y, PAL_NONE}, {0x0, PAL_NONE}, // AIXS_Y { SPR_AQUEDUCT_RAMP_SW, PAL_NONE }, { SPR_AQUEDUCT_RAMP_SE, PAL_NONE }, { SPR_AQUEDUCT_RAMP_NE, PAL_NONE }, { SPR_AQUEDUCT_RAMP_NW, PAL_NONE },
}; };
/* Sprite table for head part of aqueduct. */ static const PalSpriteID _bridge_sprite_table_4_0[] = {
static const PalSpriteID _aqueduct_sprite_table_heads[] = {
{SPR_AQUEDUCT_RAMP_SW, PAL_NONE}, {SPR_AQUEDUCT_RAMP_SE, PAL_NONE}, {SPR_AQUEDUCT_RAMP_NE, PAL_NONE}, {SPR_AQUEDUCT_RAMP_NW, PAL_NONE},
};
static const PalSpriteID _bridge_sprite_table_suspension_oxide_north[] = {
{ 0x9A9, PAL_NONE }, { 0x99F, PAL_NONE }, { 0x9B1, PAL_NONE }, { 0x0, PAL_NONE }, { 0x9A9, PAL_NONE }, { 0x99F, PAL_NONE }, { 0x9B1, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9A5, PAL_NONE }, { 0x997, PAL_NONE }, { 0x9AD, PAL_NONE }, { 0x0, PAL_NONE }, { 0x9A5, PAL_NONE }, { 0x997, PAL_NONE }, { 0x9AD, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x99D, PAL_NONE }, { 0x99F, PAL_NONE }, { 0x9B1, PAL_NONE }, { 0x0, PAL_NONE }, { 0x99D, PAL_NONE }, { 0x99F, PAL_NONE }, { 0x9B1, PAL_NONE }, { 0x0, PAL_NONE },
@ -58,7 +53,7 @@ static const PalSpriteID _bridge_sprite_table_suspension_oxide_north[] = {
{ 0x1116, PAL_NONE }, { 0x997, PAL_NONE }, { 0x9AD, PAL_NONE }, { 0x0, PAL_NONE }, { 0x1116, PAL_NONE }, { 0x997, PAL_NONE }, { 0x9AD, PAL_NONE }, { 0x0, PAL_NONE },
}; };
static const PalSpriteID _bridge_sprite_table_suspension_oxide_south[] = { static const PalSpriteID _bridge_sprite_table_4_1[] = {
{ 0x9AA, PAL_NONE }, { 0x9A0, PAL_NONE }, { 0x9B2, PAL_NONE }, { 0x0, PAL_NONE }, { 0x9AA, PAL_NONE }, { 0x9A0, PAL_NONE }, { 0x9B2, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9A6, PAL_NONE }, { 0x998, PAL_NONE }, { 0x9AE, PAL_NONE }, { 0x0, PAL_NONE }, { 0x9A6, PAL_NONE }, { 0x998, PAL_NONE }, { 0x9AE, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x99E, PAL_NONE }, { 0x9A0, PAL_NONE }, { 0x9B2, PAL_NONE }, { 0x0, PAL_NONE }, { 0x99E, PAL_NONE }, { 0x9A0, PAL_NONE }, { 0x9B2, PAL_NONE }, { 0x0, PAL_NONE },
@ -69,7 +64,7 @@ static const PalSpriteID _bridge_sprite_table_suspension_oxide_south[] = {
{ 0x1117, PAL_NONE }, { 0x998, PAL_NONE }, { 0x9AE, PAL_NONE }, { 0x0, PAL_NONE }, { 0x1117, PAL_NONE }, { 0x998, PAL_NONE }, { 0x9AE, PAL_NONE }, { 0x0, PAL_NONE },
}; };
static const PalSpriteID _bridge_sprite_table_suspension_oxide_inner_north[] = { static const PalSpriteID _bridge_sprite_table_4_2[] = {
{ 0x9AC, PAL_NONE }, { 0x9A4, PAL_NONE }, { 0x9B4, PAL_NONE }, { 0x0, PAL_NONE }, { 0x9AC, PAL_NONE }, { 0x9A4, PAL_NONE }, { 0x9B4, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9A8, PAL_NONE }, { 0x99C, PAL_NONE }, { 0x9B0, PAL_NONE }, { 0x0, PAL_NONE }, { 0x9A8, PAL_NONE }, { 0x99C, PAL_NONE }, { 0x9B0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9A2, PAL_NONE }, { 0x9A4, PAL_NONE }, { 0x9B4, PAL_NONE }, { 0x0, PAL_NONE }, { 0x9A2, PAL_NONE }, { 0x9A4, PAL_NONE }, { 0x9B4, PAL_NONE }, { 0x0, PAL_NONE },
@ -80,7 +75,7 @@ static const PalSpriteID _bridge_sprite_table_suspension_oxide_inner_north[] = {
{ 0x1119, PAL_NONE }, { 0x99C, PAL_NONE }, { 0x9B0, PAL_NONE }, { 0x0, PAL_NONE }, { 0x1119, PAL_NONE }, { 0x99C, PAL_NONE }, { 0x9B0, PAL_NONE }, { 0x0, PAL_NONE },
}; };
static const PalSpriteID _bridge_sprite_table_suspension_oxide_inner_south[] = { static const PalSpriteID _bridge_sprite_table_4_3[] = {
{ 0x9AB, PAL_NONE }, { 0x9A3, PAL_NONE }, { 0x9B3, PAL_NONE }, { 0x0, PAL_NONE }, { 0x9AB, PAL_NONE }, { 0x9A3, PAL_NONE }, { 0x9B3, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9A7, PAL_NONE }, { 0x99B, PAL_NONE }, { 0x9AF, PAL_NONE }, { 0x0, PAL_NONE }, { 0x9A7, PAL_NONE }, { 0x99B, PAL_NONE }, { 0x9AF, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9A1, PAL_NONE }, { 0x9A3, PAL_NONE }, { 0x9B3, PAL_NONE }, { 0x0, PAL_NONE }, { 0x9A1, PAL_NONE }, { 0x9A3, PAL_NONE }, { 0x9B3, PAL_NONE }, { 0x0, PAL_NONE },
@ -91,7 +86,7 @@ static const PalSpriteID _bridge_sprite_table_suspension_oxide_inner_south[] = {
{ 0x1118, PAL_NONE }, { 0x99B, PAL_NONE }, { 0x9AF, PAL_NONE }, { 0x0, PAL_NONE }, { 0x1118, PAL_NONE }, { 0x99B, PAL_NONE }, { 0x9AF, PAL_NONE }, { 0x0, PAL_NONE },
}; };
static const PalSpriteID _bridge_sprite_table_suspension_oxide_middle_odd[] = { static const PalSpriteID _bridge_sprite_table_4_4[] = {
{ 0x9B6, PAL_NONE }, { 0x9BA, PAL_NONE }, { 0x9BC, PAL_NONE }, { 0x0, PAL_NONE }, { 0x9B6, PAL_NONE }, { 0x9BA, PAL_NONE }, { 0x9BC, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9B5, PAL_NONE }, { 0x9B9, PAL_NONE }, { 0x9BB, PAL_NONE }, { 0x0, PAL_NONE }, { 0x9B5, PAL_NONE }, { 0x9B9, PAL_NONE }, { 0x9BB, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9B8, PAL_NONE }, { 0x9BA, PAL_NONE }, { 0x9BC, PAL_NONE }, { 0x0, PAL_NONE }, { 0x9B8, PAL_NONE }, { 0x9BA, PAL_NONE }, { 0x9BC, PAL_NONE }, { 0x0, PAL_NONE },
@ -102,7 +97,7 @@ static const PalSpriteID _bridge_sprite_table_suspension_oxide_middle_odd[] = {
{ 0x111E, PAL_NONE }, { 0x9B9, PAL_NONE }, { 0x9BB, PAL_NONE }, { 0x0, PAL_NONE }, { 0x111E, PAL_NONE }, { 0x9B9, PAL_NONE }, { 0x9BB, PAL_NONE }, { 0x0, PAL_NONE },
}; };
static const PalSpriteID _bridge_sprite_table_suspension_middle_even[] = { static const PalSpriteID _bridge_sprite_table_4_5[] = {
{ 0x9BD, PAL_NONE }, { 0x9C1, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE }, { 0x9BD, PAL_NONE }, { 0x9C1, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9BE, PAL_NONE }, { 0x9C2, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE }, { 0x9BE, PAL_NONE }, { 0x9C2, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9BF, PAL_NONE }, { 0x9C1, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE }, { 0x9BF, PAL_NONE }, { 0x9C1, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
@ -113,7 +108,7 @@ static const PalSpriteID _bridge_sprite_table_suspension_middle_even[] = {
{ 0x1121, PAL_NONE }, { 0x9C2, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE }, { 0x1121, PAL_NONE }, { 0x9C2, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
}; };
static const PalSpriteID _bridge_sprite_table_generic_oxide_heads[] = { static const PalSpriteID _bridge_sprite_table_4_6[] = {
{ 0x986, PAL_NONE }, { 0x988, PAL_NONE }, { 0x985, PAL_NONE }, { 0x987, PAL_NONE }, { 0x986, PAL_NONE }, { 0x988, PAL_NONE }, { 0x985, PAL_NONE }, { 0x987, PAL_NONE },
{ 0x98A, PAL_NONE }, { 0x98C, PAL_NONE }, { 0x989, PAL_NONE }, { 0x98B, PAL_NONE }, { 0x98A, PAL_NONE }, { 0x98C, PAL_NONE }, { 0x989, PAL_NONE }, { 0x98B, PAL_NONE },
{ 0x98E, PAL_NONE }, { 0x990, PAL_NONE }, { 0x98D, PAL_NONE }, { 0x98F, PAL_NONE }, { 0x98E, PAL_NONE }, { 0x990, PAL_NONE }, { 0x98D, PAL_NONE }, { 0x98F, PAL_NONE },
@ -124,7 +119,7 @@ static const PalSpriteID _bridge_sprite_table_generic_oxide_heads[] = {
{ 0x1113, PAL_NONE }, { 0x1115, PAL_NONE }, { 0x1112, PAL_NONE }, { 0x1114, PAL_NONE }, { 0x1113, PAL_NONE }, { 0x1115, PAL_NONE }, { 0x1112, PAL_NONE }, { 0x1114, PAL_NONE },
}; };
static const PalSpriteID _bridge_sprite_table_suspension_yellow_north[] = { static const PalSpriteID _bridge_sprite_table_5_0[] = {
{ 0x9A9, PALETTE_TO_STRUCT_YELLOW }, { 0x99F, PALETTE_TO_STRUCT_YELLOW }, { 0x9B1, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x9A9, PALETTE_TO_STRUCT_YELLOW }, { 0x99F, PALETTE_TO_STRUCT_YELLOW }, { 0x9B1, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x9A5, PALETTE_TO_STRUCT_YELLOW }, { 0x997, PALETTE_TO_STRUCT_YELLOW }, { 0x9AD, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x9A5, PALETTE_TO_STRUCT_YELLOW }, { 0x997, PALETTE_TO_STRUCT_YELLOW }, { 0x9AD, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x99D, PALETTE_TO_STRUCT_YELLOW }, { 0x99F, PALETTE_TO_STRUCT_YELLOW }, { 0x9B1, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x99D, PALETTE_TO_STRUCT_YELLOW }, { 0x99F, PALETTE_TO_STRUCT_YELLOW }, { 0x9B1, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
@ -135,7 +130,7 @@ static const PalSpriteID _bridge_sprite_table_suspension_yellow_north[] = {
{ 0x1116, PALETTE_TO_STRUCT_YELLOW }, { 0x997, PALETTE_TO_STRUCT_YELLOW }, { 0x9AD, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x1116, PALETTE_TO_STRUCT_YELLOW }, { 0x997, PALETTE_TO_STRUCT_YELLOW }, { 0x9AD, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
}; };
static const PalSpriteID _bridge_sprite_table_suspension_yellow_south[] = { static const PalSpriteID _bridge_sprite_table_5_1[] = {
{ 0x9AA, PALETTE_TO_STRUCT_YELLOW }, { 0x9A0, PALETTE_TO_STRUCT_YELLOW }, { 0x9B2, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x9AA, PALETTE_TO_STRUCT_YELLOW }, { 0x9A0, PALETTE_TO_STRUCT_YELLOW }, { 0x9B2, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x9A6, PALETTE_TO_STRUCT_YELLOW }, { 0x998, PALETTE_TO_STRUCT_YELLOW }, { 0x9AE, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x9A6, PALETTE_TO_STRUCT_YELLOW }, { 0x998, PALETTE_TO_STRUCT_YELLOW }, { 0x9AE, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x99E, PALETTE_TO_STRUCT_YELLOW }, { 0x9A0, PALETTE_TO_STRUCT_YELLOW }, { 0x9B2, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x99E, PALETTE_TO_STRUCT_YELLOW }, { 0x9A0, PALETTE_TO_STRUCT_YELLOW }, { 0x9B2, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
@ -146,7 +141,7 @@ static const PalSpriteID _bridge_sprite_table_suspension_yellow_south[] = {
{ 0x1117, PALETTE_TO_STRUCT_YELLOW }, { 0x998, PALETTE_TO_STRUCT_YELLOW }, { 0x9AE, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x1117, PALETTE_TO_STRUCT_YELLOW }, { 0x998, PALETTE_TO_STRUCT_YELLOW }, { 0x9AE, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
}; };
static const PalSpriteID _bridge_sprite_table_suspension_yellow_inner_north[] = { static const PalSpriteID _bridge_sprite_table_5_2[] = {
{ 0x9AC, PALETTE_TO_STRUCT_YELLOW }, { 0x9A4, PALETTE_TO_STRUCT_YELLOW }, { 0x9B4, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x9AC, PALETTE_TO_STRUCT_YELLOW }, { 0x9A4, PALETTE_TO_STRUCT_YELLOW }, { 0x9B4, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x9A8, PALETTE_TO_STRUCT_YELLOW }, { 0x99C, PALETTE_TO_STRUCT_YELLOW }, { 0x9B0, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x9A8, PALETTE_TO_STRUCT_YELLOW }, { 0x99C, PALETTE_TO_STRUCT_YELLOW }, { 0x9B0, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x9A2, PALETTE_TO_STRUCT_YELLOW }, { 0x9A4, PALETTE_TO_STRUCT_YELLOW }, { 0x9B4, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x9A2, PALETTE_TO_STRUCT_YELLOW }, { 0x9A4, PALETTE_TO_STRUCT_YELLOW }, { 0x9B4, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
@ -157,7 +152,7 @@ static const PalSpriteID _bridge_sprite_table_suspension_yellow_inner_north[] =
{ 0x1119, PALETTE_TO_STRUCT_YELLOW }, { 0x99C, PALETTE_TO_STRUCT_YELLOW }, { 0x9B0, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x1119, PALETTE_TO_STRUCT_YELLOW }, { 0x99C, PALETTE_TO_STRUCT_YELLOW }, { 0x9B0, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
}; };
static const PalSpriteID _bridge_sprite_table_suspension_yellow_inner_south[] = { static const PalSpriteID _bridge_sprite_table_5_3[] = {
{ 0x9AB, PALETTE_TO_STRUCT_YELLOW }, { 0x9A3, PALETTE_TO_STRUCT_YELLOW }, { 0x9B3, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x9AB, PALETTE_TO_STRUCT_YELLOW }, { 0x9A3, PALETTE_TO_STRUCT_YELLOW }, { 0x9B3, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x9A7, PALETTE_TO_STRUCT_YELLOW }, { 0x99B, PALETTE_TO_STRUCT_YELLOW }, { 0x9AF, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x9A7, PALETTE_TO_STRUCT_YELLOW }, { 0x99B, PALETTE_TO_STRUCT_YELLOW }, { 0x9AF, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x9A1, PALETTE_TO_STRUCT_YELLOW }, { 0x9A3, PALETTE_TO_STRUCT_YELLOW }, { 0x9B3, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x9A1, PALETTE_TO_STRUCT_YELLOW }, { 0x9A3, PALETTE_TO_STRUCT_YELLOW }, { 0x9B3, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
@ -168,7 +163,7 @@ static const PalSpriteID _bridge_sprite_table_suspension_yellow_inner_south[] =
{ 0x1118, PALETTE_TO_STRUCT_YELLOW }, { 0x99B, PALETTE_TO_STRUCT_YELLOW }, { 0x9AF, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x1118, PALETTE_TO_STRUCT_YELLOW }, { 0x99B, PALETTE_TO_STRUCT_YELLOW }, { 0x9AF, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
}; };
static const PalSpriteID _bridge_sprite_table_suspension_yellow_middle_odd[] = { static const PalSpriteID _bridge_sprite_table_5_4[] = {
{ 0x9B6, PALETTE_TO_STRUCT_YELLOW }, { 0x9BA, PALETTE_TO_STRUCT_YELLOW }, { 0x9BC, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x9B6, PALETTE_TO_STRUCT_YELLOW }, { 0x9BA, PALETTE_TO_STRUCT_YELLOW }, { 0x9BC, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x9B5, PALETTE_TO_STRUCT_YELLOW }, { 0x9B9, PALETTE_TO_STRUCT_YELLOW }, { 0x9BB, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x9B5, PALETTE_TO_STRUCT_YELLOW }, { 0x9B9, PALETTE_TO_STRUCT_YELLOW }, { 0x9BB, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0x9B8, PALETTE_TO_STRUCT_YELLOW }, { 0x9BA, PALETTE_TO_STRUCT_YELLOW }, { 0x9BC, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x9B8, PALETTE_TO_STRUCT_YELLOW }, { 0x9BA, PALETTE_TO_STRUCT_YELLOW }, { 0x9BC, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
@ -179,7 +174,7 @@ static const PalSpriteID _bridge_sprite_table_suspension_yellow_middle_odd[] = {
{ 0x111E, PALETTE_TO_STRUCT_YELLOW }, { 0x9B9, PALETTE_TO_STRUCT_YELLOW }, { 0x9BB, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x111E, PALETTE_TO_STRUCT_YELLOW }, { 0x9B9, PALETTE_TO_STRUCT_YELLOW }, { 0x9BB, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
}; };
static const PalSpriteID _bridge_sprite_table_suspension_yellow_middle_even[] = { static const PalSpriteID _bridge_sprite_table_5_5[] = {
{ 0x9BD, PALETTE_TO_STRUCT_YELLOW }, { 0x9C1, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE }, { 0x9BD, PALETTE_TO_STRUCT_YELLOW }, { 0x9C1, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9BE, PALETTE_TO_STRUCT_YELLOW }, { 0x9C2, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE }, { 0x9BE, PALETTE_TO_STRUCT_YELLOW }, { 0x9C2, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9BF, PALETTE_TO_STRUCT_YELLOW }, { 0x9C1, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE }, { 0x9BF, PALETTE_TO_STRUCT_YELLOW }, { 0x9C1, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
@ -190,7 +185,7 @@ static const PalSpriteID _bridge_sprite_table_suspension_yellow_middle_even[] =
{ 0x1121, PALETTE_TO_STRUCT_YELLOW }, { 0x9C2, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE }, { 0x1121, PALETTE_TO_STRUCT_YELLOW }, { 0x9C2, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
}; };
static const PalSpriteID _bridge_sprite_table_generic_yellow_heads[] = { static const PalSpriteID _bridge_sprite_table_5_6[] = {
{ 0x986, PAL_NONE }, { 0x988, PAL_NONE }, { 0x985, PAL_NONE }, { 0x987, PAL_NONE }, { 0x986, PAL_NONE }, { 0x988, PAL_NONE }, { 0x985, PAL_NONE }, { 0x987, PAL_NONE },
{ 0x98A, PAL_NONE }, { 0x98C, PAL_NONE }, { 0x989, PAL_NONE }, { 0x98B, PAL_NONE }, { 0x98A, PAL_NONE }, { 0x98C, PAL_NONE }, { 0x989, PAL_NONE }, { 0x98B, PAL_NONE },
{ 0x98E, PALETTE_TO_STRUCT_YELLOW }, { 0x990, PALETTE_TO_STRUCT_YELLOW }, { 0x98D, PALETTE_TO_STRUCT_YELLOW }, { 0x98F, PALETTE_TO_STRUCT_YELLOW }, { 0x98E, PALETTE_TO_STRUCT_YELLOW }, { 0x990, PALETTE_TO_STRUCT_YELLOW }, { 0x98D, PALETTE_TO_STRUCT_YELLOW }, { 0x98F, PALETTE_TO_STRUCT_YELLOW },
@ -201,7 +196,7 @@ static const PalSpriteID _bridge_sprite_table_generic_yellow_heads[] = {
{ 0x1113, PALETTE_TO_STRUCT_YELLOW }, { 0x1115, PALETTE_TO_STRUCT_YELLOW }, { 0x1112, PALETTE_TO_STRUCT_YELLOW }, { 0x1114, PALETTE_TO_STRUCT_YELLOW }, { 0x1113, PALETTE_TO_STRUCT_YELLOW }, { 0x1115, PALETTE_TO_STRUCT_YELLOW }, { 0x1112, PALETTE_TO_STRUCT_YELLOW }, { 0x1114, PALETTE_TO_STRUCT_YELLOW },
}; };
static const PalSpriteID _bridge_sprite_table_cantilever_oxide_north[] = { static const PalSpriteID _bridge_sprite_table_6_0[] = {
{ 0x9CD, PAL_NONE }, { 0x9D9, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE }, { 0x9CD, PAL_NONE }, { 0x9D9, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9CE, PAL_NONE }, { 0x9DA, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE }, { 0x9CE, PAL_NONE }, { 0x9DA, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9D3, PAL_NONE }, { 0x9D9, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE }, { 0x9D3, PAL_NONE }, { 0x9D9, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
@ -212,7 +207,7 @@ static const PalSpriteID _bridge_sprite_table_cantilever_oxide_north[] = {
{ 0x1125, PAL_NONE }, { 0x9DA, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE }, { 0x1125, PAL_NONE }, { 0x9DA, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
}; };
static const PalSpriteID _bridge_sprite_table_cantilever_oxide_south[] = { static const PalSpriteID _bridge_sprite_table_6_1[] = {
{ 0x9CB, PAL_NONE }, { 0x9D7, PAL_NONE }, { 0x9DD, PAL_NONE }, { 0x0, PAL_NONE }, { 0x9CB, PAL_NONE }, { 0x9D7, PAL_NONE }, { 0x9DD, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9D0, PAL_NONE }, { 0x9DC, PAL_NONE }, { 0x9E0, PAL_NONE }, { 0x0, PAL_NONE }, { 0x9D0, PAL_NONE }, { 0x9DC, PAL_NONE }, { 0x9E0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9D1, PAL_NONE }, { 0x9D7, PAL_NONE }, { 0x9DD, PAL_NONE }, { 0x0, PAL_NONE }, { 0x9D1, PAL_NONE }, { 0x9D7, PAL_NONE }, { 0x9DD, PAL_NONE }, { 0x0, PAL_NONE },
@ -223,7 +218,7 @@ static const PalSpriteID _bridge_sprite_table_cantilever_oxide_south[] = {
{ 0x1127, PAL_NONE }, { 0x9DC, PAL_NONE }, { 0x9E0, PAL_NONE }, { 0x0, PAL_NONE }, { 0x1127, PAL_NONE }, { 0x9DC, PAL_NONE }, { 0x9E0, PAL_NONE }, { 0x0, PAL_NONE },
}; };
static const PalSpriteID _bridge_sprite_table_cantilever_oxide_middle[] = { static const PalSpriteID _bridge_sprite_table_6_2[] = {
{ 0x9CC, PAL_NONE }, { 0x9D8, PAL_NONE }, { 0x9DE, PAL_NONE }, { 0x0, PAL_NONE }, { 0x9CC, PAL_NONE }, { 0x9D8, PAL_NONE }, { 0x9DE, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9CF, PAL_NONE }, { 0x9DB, PAL_NONE }, { 0x9DF, PAL_NONE }, { 0x0, PAL_NONE }, { 0x9CF, PAL_NONE }, { 0x9DB, PAL_NONE }, { 0x9DF, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9D2, PAL_NONE }, { 0x9D8, PAL_NONE }, { 0x9DE, PAL_NONE }, { 0x0, PAL_NONE }, { 0x9D2, PAL_NONE }, { 0x9D8, PAL_NONE }, { 0x9DE, PAL_NONE }, { 0x0, PAL_NONE },
@ -234,7 +229,7 @@ static const PalSpriteID _bridge_sprite_table_cantilever_oxide_middle[] = {
{ 0x1126, PAL_NONE }, { 0x9DB, PAL_NONE }, { 0x9DF, PAL_NONE }, { 0x0, PAL_NONE }, { 0x1126, PAL_NONE }, { 0x9DB, PAL_NONE }, { 0x9DF, PAL_NONE }, { 0x0, PAL_NONE },
}; };
static const PalSpriteID _bridge_sprite_table_cantilever_oxide_heads[] = { static const PalSpriteID _bridge_sprite_table_6_3[] = {
{ 0x986, PAL_NONE }, { 0x988, PAL_NONE }, { 0x985, PAL_NONE }, { 0x987, PAL_NONE }, { 0x986, PAL_NONE }, { 0x988, PAL_NONE }, { 0x985, PAL_NONE }, { 0x987, PAL_NONE },
{ 0x98A, PAL_NONE }, { 0x98C, PAL_NONE }, { 0x989, PAL_NONE }, { 0x98B, PAL_NONE }, { 0x98A, PAL_NONE }, { 0x98C, PAL_NONE }, { 0x989, PAL_NONE }, { 0x98B, PAL_NONE },
{ 0x98E, PAL_NONE }, { 0x990, PAL_NONE }, { 0x98D, PAL_NONE }, { 0x98F, PAL_NONE }, { 0x98E, PAL_NONE }, { 0x990, PAL_NONE }, { 0x98D, PAL_NONE }, { 0x98F, PAL_NONE },
@ -245,7 +240,7 @@ static const PalSpriteID _bridge_sprite_table_cantilever_oxide_heads[] = {
{ 0x1113, PAL_NONE }, { 0x1115, PAL_NONE }, { 0x1112, PAL_NONE }, { 0x1114, PAL_NONE }, { 0x1113, PAL_NONE }, { 0x1115, PAL_NONE }, { 0x1112, PAL_NONE }, { 0x1114, PAL_NONE },
}; };
static const PalSpriteID _bridge_sprite_table_cantilever_brown_north[] = { static const PalSpriteID _bridge_sprite_table_7_0[] = {
{ 0x9CD, PALETTE_TO_STRUCT_BROWN }, { 0x9D9, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE }, { 0x9CD, PALETTE_TO_STRUCT_BROWN }, { 0x9D9, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9CE, PALETTE_TO_STRUCT_BROWN }, { 0x9DA, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE }, { 0x9CE, PALETTE_TO_STRUCT_BROWN }, { 0x9DA, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9D3, PALETTE_TO_STRUCT_BROWN }, { 0x9D9, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE }, { 0x9D3, PALETTE_TO_STRUCT_BROWN }, { 0x9D9, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
@ -256,7 +251,7 @@ static const PalSpriteID _bridge_sprite_table_cantilever_brown_north[] = {
{ 0x1125, PALETTE_TO_STRUCT_BROWN }, { 0x9DA, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE }, { 0x1125, PALETTE_TO_STRUCT_BROWN }, { 0x9DA, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
}; };
static const PalSpriteID _bridge_sprite_table_cantilever_brown_south[] = { static const PalSpriteID _bridge_sprite_table_7_1[] = {
{ 0x9CB, PALETTE_TO_STRUCT_BROWN }, { 0x9D7, PALETTE_TO_STRUCT_BROWN }, { 0x9DD, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE }, { 0x9CB, PALETTE_TO_STRUCT_BROWN }, { 0x9D7, PALETTE_TO_STRUCT_BROWN }, { 0x9DD, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE },
{ 0x9D0, PALETTE_TO_STRUCT_BROWN }, { 0x9DC, PALETTE_TO_STRUCT_BROWN }, { 0x9E0, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE }, { 0x9D0, PALETTE_TO_STRUCT_BROWN }, { 0x9DC, PALETTE_TO_STRUCT_BROWN }, { 0x9E0, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE },
{ 0x9D1, PALETTE_TO_STRUCT_BROWN }, { 0x9D7, PALETTE_TO_STRUCT_BROWN }, { 0x9DD, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE }, { 0x9D1, PALETTE_TO_STRUCT_BROWN }, { 0x9D7, PALETTE_TO_STRUCT_BROWN }, { 0x9DD, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE },
@ -267,7 +262,7 @@ static const PalSpriteID _bridge_sprite_table_cantilever_brown_south[] = {
{ 0x1127, PALETTE_TO_STRUCT_BROWN }, { 0x9DC, PALETTE_TO_STRUCT_BROWN }, { 0x9E0, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE }, { 0x1127, PALETTE_TO_STRUCT_BROWN }, { 0x9DC, PALETTE_TO_STRUCT_BROWN }, { 0x9E0, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE },
}; };
static const PalSpriteID _bridge_sprite_table_cantilever_brown_middle[] = { static const PalSpriteID _bridge_sprite_table_7_2[] = {
{ 0x9CC, PALETTE_TO_STRUCT_BROWN }, { 0x9D8, PALETTE_TO_STRUCT_BROWN }, { 0x9DE, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE }, { 0x9CC, PALETTE_TO_STRUCT_BROWN }, { 0x9D8, PALETTE_TO_STRUCT_BROWN }, { 0x9DE, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE },
{ 0x9CF, PALETTE_TO_STRUCT_BROWN }, { 0x9DB, PALETTE_TO_STRUCT_BROWN }, { 0x9DF, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE }, { 0x9CF, PALETTE_TO_STRUCT_BROWN }, { 0x9DB, PALETTE_TO_STRUCT_BROWN }, { 0x9DF, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE },
{ 0x9D2, PALETTE_TO_STRUCT_BROWN }, { 0x9D8, PALETTE_TO_STRUCT_BROWN }, { 0x9DE, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE }, { 0x9D2, PALETTE_TO_STRUCT_BROWN }, { 0x9D8, PALETTE_TO_STRUCT_BROWN }, { 0x9DE, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE },
@ -278,7 +273,7 @@ static const PalSpriteID _bridge_sprite_table_cantilever_brown_middle[] = {
{ 0x1126, PALETTE_TO_STRUCT_BROWN }, { 0x9DB, PALETTE_TO_STRUCT_BROWN }, { 0x9DF, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE }, { 0x1126, PALETTE_TO_STRUCT_BROWN }, { 0x9DB, PALETTE_TO_STRUCT_BROWN }, { 0x9DF, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE },
}; };
static const PalSpriteID _bridge_sprite_table_cantilever_brown_heads[] = { static const PalSpriteID _bridge_sprite_table_7_3[] = {
{ 0x986, PAL_NONE }, { 0x988, PAL_NONE }, { 0x985, PAL_NONE }, { 0x987, PAL_NONE }, { 0x986, PAL_NONE }, { 0x988, PAL_NONE }, { 0x985, PAL_NONE }, { 0x987, PAL_NONE },
{ 0x98A, PAL_NONE }, { 0x98C, PAL_NONE }, { 0x989, PAL_NONE }, { 0x98B, PAL_NONE }, { 0x98A, PAL_NONE }, { 0x98C, PAL_NONE }, { 0x989, PAL_NONE }, { 0x98B, PAL_NONE },
{ 0x98E, PALETTE_TO_STRUCT_BROWN }, { 0x990, PALETTE_TO_STRUCT_BROWN }, { 0x98D, PALETTE_TO_STRUCT_BROWN }, { 0x98F, PALETTE_TO_STRUCT_BROWN }, { 0x98E, PALETTE_TO_STRUCT_BROWN }, { 0x990, PALETTE_TO_STRUCT_BROWN }, { 0x98D, PALETTE_TO_STRUCT_BROWN }, { 0x98F, PALETTE_TO_STRUCT_BROWN },
@ -289,7 +284,7 @@ static const PalSpriteID _bridge_sprite_table_cantilever_brown_heads[] = {
{ 0x1113, PALETTE_TO_STRUCT_BROWN }, { 0x1115, PALETTE_TO_STRUCT_BROWN }, { 0x1112, PALETTE_TO_STRUCT_BROWN }, { 0x1114, PALETTE_TO_STRUCT_BROWN }, { 0x1113, PALETTE_TO_STRUCT_BROWN }, { 0x1115, PALETTE_TO_STRUCT_BROWN }, { 0x1112, PALETTE_TO_STRUCT_BROWN }, { 0x1114, PALETTE_TO_STRUCT_BROWN },
}; };
static const PalSpriteID _bridge_sprite_table_cantilever_red_north[] = { static const PalSpriteID _bridge_sprite_table_8_0[] = {
{ 0x9CD, PALETTE_TO_STRUCT_RED }, { 0x9D9, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE }, { 0x9CD, PALETTE_TO_STRUCT_RED }, { 0x9D9, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9CE, PALETTE_TO_STRUCT_RED }, { 0x9DA, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE }, { 0x9CE, PALETTE_TO_STRUCT_RED }, { 0x9DA, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9D3, PALETTE_TO_STRUCT_RED }, { 0x9D9, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE }, { 0x9D3, PALETTE_TO_STRUCT_RED }, { 0x9D9, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
@ -300,7 +295,7 @@ static const PalSpriteID _bridge_sprite_table_cantilever_red_north[] = {
{ 0x1125, PALETTE_TO_STRUCT_RED }, { 0x9DA, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE }, { 0x1125, PALETTE_TO_STRUCT_RED }, { 0x9DA, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
}; };
static const PalSpriteID _bridge_sprite_table_cantilever_red_south[] = { static const PalSpriteID _bridge_sprite_table_8_1[] = {
{ 0x9CB, PALETTE_TO_STRUCT_RED }, { 0x9D7, PALETTE_TO_STRUCT_RED }, { 0x9DD, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE }, { 0x9CB, PALETTE_TO_STRUCT_RED }, { 0x9D7, PALETTE_TO_STRUCT_RED }, { 0x9DD, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE },
{ 0x9D0, PALETTE_TO_STRUCT_RED }, { 0x9DC, PALETTE_TO_STRUCT_RED }, { 0x9E0, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE }, { 0x9D0, PALETTE_TO_STRUCT_RED }, { 0x9DC, PALETTE_TO_STRUCT_RED }, { 0x9E0, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE },
{ 0x9D1, PALETTE_TO_STRUCT_RED }, { 0x9D7, PALETTE_TO_STRUCT_RED }, { 0x9DD, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE }, { 0x9D1, PALETTE_TO_STRUCT_RED }, { 0x9D7, PALETTE_TO_STRUCT_RED }, { 0x9DD, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE },
@ -311,7 +306,7 @@ static const PalSpriteID _bridge_sprite_table_cantilever_red_south[] = {
{ 0x1127, PALETTE_TO_STRUCT_RED }, { 0x9DC, PALETTE_TO_STRUCT_RED }, { 0x9E0, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE }, { 0x1127, PALETTE_TO_STRUCT_RED }, { 0x9DC, PALETTE_TO_STRUCT_RED }, { 0x9E0, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE },
}; };
static const PalSpriteID _bridge_sprite_table_cantilever_red_middle[] = { static const PalSpriteID _bridge_sprite_table_8_2[] = {
{ 0x9CC, PALETTE_TO_STRUCT_RED }, { 0x9D8, PALETTE_TO_STRUCT_RED }, { 0x9DE, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE }, { 0x9CC, PALETTE_TO_STRUCT_RED }, { 0x9D8, PALETTE_TO_STRUCT_RED }, { 0x9DE, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE },
{ 0x9CF, PALETTE_TO_STRUCT_RED }, { 0x9DB, PALETTE_TO_STRUCT_RED }, { 0x9DF, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE }, { 0x9CF, PALETTE_TO_STRUCT_RED }, { 0x9DB, PALETTE_TO_STRUCT_RED }, { 0x9DF, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE },
{ 0x9D2, PALETTE_TO_STRUCT_RED }, { 0x9D8, PALETTE_TO_STRUCT_RED }, { 0x9DE, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE }, { 0x9D2, PALETTE_TO_STRUCT_RED }, { 0x9D8, PALETTE_TO_STRUCT_RED }, { 0x9DE, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE },
@ -322,7 +317,7 @@ static const PalSpriteID _bridge_sprite_table_cantilever_red_middle[] = {
{ 0x1126, PALETTE_TO_STRUCT_RED }, { 0x9DB, PALETTE_TO_STRUCT_RED }, { 0x9DF, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE }, { 0x1126, PALETTE_TO_STRUCT_RED }, { 0x9DB, PALETTE_TO_STRUCT_RED }, { 0x9DF, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE },
}; };
static const PalSpriteID _bridge_sprite_table_cantilever_red_heads[] = { static const PalSpriteID _bridge_sprite_table_8_3[] = {
{ 0x986, PAL_NONE }, { 0x988, PAL_NONE }, { 0x985, PAL_NONE }, { 0x987, PAL_NONE }, { 0x986, PAL_NONE }, { 0x988, PAL_NONE }, { 0x985, PAL_NONE }, { 0x987, PAL_NONE },
{ 0x98A, PAL_NONE }, { 0x98C, PAL_NONE }, { 0x989, PAL_NONE }, { 0x98B, PAL_NONE }, { 0x98A, PAL_NONE }, { 0x98C, PAL_NONE }, { 0x989, PAL_NONE }, { 0x98B, PAL_NONE },
{ 0x98E, PALETTE_TO_STRUCT_RED }, { 0x990, PALETTE_TO_STRUCT_RED }, { 0x98D, PALETTE_TO_STRUCT_RED }, { 0x98F, PALETTE_TO_STRUCT_RED }, { 0x98E, PALETTE_TO_STRUCT_RED }, { 0x990, PALETTE_TO_STRUCT_RED }, { 0x98D, PALETTE_TO_STRUCT_RED }, { 0x98F, PALETTE_TO_STRUCT_RED },
@ -399,7 +394,7 @@ static const PalSpriteID _bridge_sprite_table_archgirder_heads[] = {
MW( SPR_BTGEN_MGLV_RAMP_X_DOWN ), MW( SPR_BTGEN_MGLV_RAMP_Y_DOWN ), MW( SPR_BTGEN_MGLV_RAMP_X_UP ), MW( SPR_BTGEN_MGLV_RAMP_Y_UP ), MW( SPR_BTGEN_MGLV_RAMP_X_DOWN ), MW( SPR_BTGEN_MGLV_RAMP_Y_DOWN ), MW( SPR_BTGEN_MGLV_RAMP_X_UP ), MW( SPR_BTGEN_MGLV_RAMP_Y_UP ),
}; };
static const PalSpriteID _bridge_sprite_table_suspension_concrete_north[] = { static const PalSpriteID _bridge_sprite_table_concrete_suspended_A[] = {
MC( SPR_BTSUS_RAIL_X_REAR_TILE_A ), MC( SPR_BTSUS_X_FRONT_TILE_A ), MC( SPR_BTSUS_X_PILLAR_TILE_A ), MN( 0x0 ), MC( SPR_BTSUS_RAIL_X_REAR_TILE_A ), MC( SPR_BTSUS_X_FRONT_TILE_A ), MC( SPR_BTSUS_X_PILLAR_TILE_A ), MN( 0x0 ),
MC( SPR_BTSUS_RAIL_Y_REAR_TILE_A ), MC( SPR_BTSUS_Y_FRONT_TILE_A ), MC( SPR_BTSUS_Y_PILLAR_TILE_A ), MN( 0x0 ), MC( SPR_BTSUS_RAIL_Y_REAR_TILE_A ), MC( SPR_BTSUS_Y_FRONT_TILE_A ), MC( SPR_BTSUS_Y_PILLAR_TILE_A ), MN( 0x0 ),
MC( SPR_BTSUS_ROAD_X_REAR_TILE_A ), MC( SPR_BTSUS_X_FRONT_TILE_A ), MC( SPR_BTSUS_X_PILLAR_TILE_A ), MN( 0x0 ), MC( SPR_BTSUS_ROAD_X_REAR_TILE_A ), MC( SPR_BTSUS_X_FRONT_TILE_A ), MC( SPR_BTSUS_X_PILLAR_TILE_A ), MN( 0x0 ),
@ -410,7 +405,7 @@ static const PalSpriteID _bridge_sprite_table_suspension_concrete_north[] = {
MC( SPR_BTSUS_MGLV_Y_REAR_TILE_A ), MC( SPR_BTSUS_Y_FRONT_TILE_A ), MC( SPR_BTSUS_Y_PILLAR_TILE_A ), MN( 0x0 ), MC( SPR_BTSUS_MGLV_Y_REAR_TILE_A ), MC( SPR_BTSUS_Y_FRONT_TILE_A ), MC( SPR_BTSUS_Y_PILLAR_TILE_A ), MN( 0x0 ),
}; };
static const PalSpriteID _bridge_sprite_table_suspension_concrete_south[] = { static const PalSpriteID _bridge_sprite_table_concrete_suspended_B[] = {
MC( SPR_BTSUS_RAIL_X_REAR_TILE_B ), MC( SPR_BTSUS_X_FRONT_TILE_B ), MC( SPR_BTSUS_X_PILLAR_TILE_B ), MN( 0x0 ), MC( SPR_BTSUS_RAIL_X_REAR_TILE_B ), MC( SPR_BTSUS_X_FRONT_TILE_B ), MC( SPR_BTSUS_X_PILLAR_TILE_B ), MN( 0x0 ),
MC( SPR_BTSUS_RAIL_Y_REAR_TILE_B ), MC( SPR_BTSUS_Y_FRONT_TILE_B ), MC( SPR_BTSUS_Y_PILLAR_TILE_B ), MN( 0x0 ), MC( SPR_BTSUS_RAIL_Y_REAR_TILE_B ), MC( SPR_BTSUS_Y_FRONT_TILE_B ), MC( SPR_BTSUS_Y_PILLAR_TILE_B ), MN( 0x0 ),
MC( SPR_BTSUS_ROAD_X_REAR_TILE_B ), MC( SPR_BTSUS_X_FRONT_TILE_B ), MC( SPR_BTSUS_X_PILLAR_TILE_B ), MN( 0x0 ), MC( SPR_BTSUS_ROAD_X_REAR_TILE_B ), MC( SPR_BTSUS_X_FRONT_TILE_B ), MC( SPR_BTSUS_X_PILLAR_TILE_B ), MN( 0x0 ),
@ -421,7 +416,7 @@ static const PalSpriteID _bridge_sprite_table_suspension_concrete_south[] = {
MC( SPR_BTSUS_MGLV_Y_REAR_TILE_B ), MC( SPR_BTSUS_Y_FRONT_TILE_B ), MC( SPR_BTSUS_Y_PILLAR_TILE_B ), MN( 0x0 ), MC( SPR_BTSUS_MGLV_Y_REAR_TILE_B ), MC( SPR_BTSUS_Y_FRONT_TILE_B ), MC( SPR_BTSUS_Y_PILLAR_TILE_B ), MN( 0x0 ),
}; };
static const PalSpriteID _bridge_sprite_table_suspension_concrete_inner_north[] = { static const PalSpriteID _bridge_sprite_table_concrete_suspended_C[] = {
MC( SPR_BTSUS_RAIL_X_REAR_TILE_C ), MC( SPR_BTSUS_X_FRONT_TILE_C ), MC( SPR_BTSUS_X_PILLAR_TILE_C ), MN( 0x0 ), MC( SPR_BTSUS_RAIL_X_REAR_TILE_C ), MC( SPR_BTSUS_X_FRONT_TILE_C ), MC( SPR_BTSUS_X_PILLAR_TILE_C ), MN( 0x0 ),
MC( SPR_BTSUS_RAIL_Y_REAR_TILE_C ), MC( SPR_BTSUS_Y_FRONT_TILE_C ), MC( SPR_BTSUS_Y_PILLAR_TILE_C ), MN( 0x0 ), MC( SPR_BTSUS_RAIL_Y_REAR_TILE_C ), MC( SPR_BTSUS_Y_FRONT_TILE_C ), MC( SPR_BTSUS_Y_PILLAR_TILE_C ), MN( 0x0 ),
MC( SPR_BTSUS_ROAD_X_REAR_TILE_C ), MC( SPR_BTSUS_X_FRONT_TILE_C ), MC( SPR_BTSUS_X_PILLAR_TILE_C ), MN( 0x0 ), MC( SPR_BTSUS_ROAD_X_REAR_TILE_C ), MC( SPR_BTSUS_X_FRONT_TILE_C ), MC( SPR_BTSUS_X_PILLAR_TILE_C ), MN( 0x0 ),
@ -432,7 +427,7 @@ static const PalSpriteID _bridge_sprite_table_suspension_concrete_inner_north[]
MC( SPR_BTSUS_MGLV_Y_REAR_TILE_C ), MC( SPR_BTSUS_Y_FRONT_TILE_C ), MC( SPR_BTSUS_Y_PILLAR_TILE_C ), MN( 0x0 ), MC( SPR_BTSUS_MGLV_Y_REAR_TILE_C ), MC( SPR_BTSUS_Y_FRONT_TILE_C ), MC( SPR_BTSUS_Y_PILLAR_TILE_C ), MN( 0x0 ),
}; };
static const PalSpriteID _bridge_sprite_table_suspension_concrete_inner_south[] = { static const PalSpriteID _bridge_sprite_table_concrete_suspended_D[] = {
MC( SPR_BTSUS_RAIL_X_REAR_TILE_D ), MC( SPR_BTSUS_X_FRONT_TILE_D ), MC( SPR_BTSUS_X_PILLAR_TILE_D ), MN( 0x0 ), MC( SPR_BTSUS_RAIL_X_REAR_TILE_D ), MC( SPR_BTSUS_X_FRONT_TILE_D ), MC( SPR_BTSUS_X_PILLAR_TILE_D ), MN( 0x0 ),
MC( SPR_BTSUS_RAIL_Y_REAR_TILE_D ), MC( SPR_BTSUS_Y_FRONT_TILE_D ), MC( SPR_BTSUS_Y_PILLAR_TILE_D ), MN( 0x0 ), MC( SPR_BTSUS_RAIL_Y_REAR_TILE_D ), MC( SPR_BTSUS_Y_FRONT_TILE_D ), MC( SPR_BTSUS_Y_PILLAR_TILE_D ), MN( 0x0 ),
MC( SPR_BTSUS_ROAD_X_REAR_TILE_D ), MC( SPR_BTSUS_X_FRONT_TILE_D ), MC( SPR_BTSUS_X_PILLAR_TILE_D ), MN( 0x0 ), MC( SPR_BTSUS_ROAD_X_REAR_TILE_D ), MC( SPR_BTSUS_X_FRONT_TILE_D ), MC( SPR_BTSUS_X_PILLAR_TILE_D ), MN( 0x0 ),
@ -443,7 +438,7 @@ static const PalSpriteID _bridge_sprite_table_suspension_concrete_inner_south[]
MC( SPR_BTSUS_MGLV_Y_REAR_TILE_D ), MC( SPR_BTSUS_Y_FRONT_TILE_D ), MC( SPR_BTSUS_Y_PILLAR_TILE_D ), MN( 0x0 ), MC( SPR_BTSUS_MGLV_Y_REAR_TILE_D ), MC( SPR_BTSUS_Y_FRONT_TILE_D ), MC( SPR_BTSUS_Y_PILLAR_TILE_D ), MN( 0x0 ),
}; };
static const PalSpriteID _bridge_sprite_table_suspension_concrete_middle_odd[] = { static const PalSpriteID _bridge_sprite_table_concrete_suspended_E[] = {
MC( SPR_BTSUS_RAIL_X_REAR_TILE_E ), MC( SPR_BTSUS_X_FRONT_TILE_E ), MC( SPR_BTSUS_X_PILLAR_TILE_E ), MN( 0x0 ), MC( SPR_BTSUS_RAIL_X_REAR_TILE_E ), MC( SPR_BTSUS_X_FRONT_TILE_E ), MC( SPR_BTSUS_X_PILLAR_TILE_E ), MN( 0x0 ),
MC( SPR_BTSUS_RAIL_Y_REAR_TILE_E ), MC( SPR_BTSUS_Y_FRONT_TILE_E ), MC( SPR_BTSUS_Y_PILLAR_TILE_E ), MN( 0x0 ), MC( SPR_BTSUS_RAIL_Y_REAR_TILE_E ), MC( SPR_BTSUS_Y_FRONT_TILE_E ), MC( SPR_BTSUS_Y_PILLAR_TILE_E ), MN( 0x0 ),
MC( SPR_BTSUS_ROAD_X_REAR_TILE_E ), MC( SPR_BTSUS_X_FRONT_TILE_E ), MC( SPR_BTSUS_X_PILLAR_TILE_E ), MN( 0x0 ), MC( SPR_BTSUS_ROAD_X_REAR_TILE_E ), MC( SPR_BTSUS_X_FRONT_TILE_E ), MC( SPR_BTSUS_X_PILLAR_TILE_E ), MN( 0x0 ),
@ -454,7 +449,7 @@ static const PalSpriteID _bridge_sprite_table_suspension_concrete_middle_odd[] =
MC( SPR_BTSUS_MGLV_Y_REAR_TILE_E ), MC( SPR_BTSUS_Y_FRONT_TILE_E ), MC( SPR_BTSUS_Y_PILLAR_TILE_E ), MN( 0x0 ), MC( SPR_BTSUS_MGLV_Y_REAR_TILE_E ), MC( SPR_BTSUS_Y_FRONT_TILE_E ), MC( SPR_BTSUS_Y_PILLAR_TILE_E ), MN( 0x0 ),
}; };
static const PalSpriteID _bridge_sprite_table_suspension_concrete_middle_even[] = { static const PalSpriteID _bridge_sprite_table_concrete_suspended_F[] = {
MC( SPR_BTSUS_RAIL_X_REAR_TILE_F ), MC( SPR_BTSUS_X_FRONT ), MN( 0x0 ), MN( 0x0 ), MC( SPR_BTSUS_RAIL_X_REAR_TILE_F ), MC( SPR_BTSUS_X_FRONT ), MN( 0x0 ), MN( 0x0 ),
MC( SPR_BTSUS_RAIL_Y_REAR_TILE_F ), MC( SPR_BTSUS_Y_FRONT ), MN( 0x0 ), MN( 0x0 ), MC( SPR_BTSUS_RAIL_Y_REAR_TILE_F ), MC( SPR_BTSUS_Y_FRONT ), MN( 0x0 ), MN( 0x0 ),
MC( SPR_BTSUS_ROAD_X_REAR_TILE_F ), MC( SPR_BTSUS_X_FRONT ), MN( 0x0 ), MN( 0x0 ), MC( SPR_BTSUS_ROAD_X_REAR_TILE_F ), MC( SPR_BTSUS_X_FRONT ), MN( 0x0 ), MN( 0x0 ),
@ -465,7 +460,7 @@ static const PalSpriteID _bridge_sprite_table_suspension_concrete_middle_even[]
MC( SPR_BTSUS_MGLV_Y_REAR_TILE_F ), MC( SPR_BTSUS_Y_FRONT ), MN( 0x0 ), MN( 0x0 ), MC( SPR_BTSUS_MGLV_Y_REAR_TILE_F ), MC( SPR_BTSUS_Y_FRONT ), MN( 0x0 ), MN( 0x0 ),
}; };
static const PalSpriteID _bridge_sprite_table_generic_concrete_heads[] = { static const PalSpriteID _bridge_sprite_table_concrete_suspended_heads[] = {
MN( SPR_BTGEN_RAIL_X_SLOPE_UP ), MN( SPR_BTGEN_RAIL_Y_SLOPE_UP ), MN( SPR_BTGEN_RAIL_X_SLOPE_DOWN ), MN( SPR_BTGEN_RAIL_Y_SLOPE_DOWN ), MN( SPR_BTGEN_RAIL_X_SLOPE_UP ), MN( SPR_BTGEN_RAIL_Y_SLOPE_UP ), MN( SPR_BTGEN_RAIL_X_SLOPE_DOWN ), MN( SPR_BTGEN_RAIL_Y_SLOPE_DOWN ),
MN( SPR_BTGEN_RAIL_RAMP_X_DOWN ), MN( SPR_BTGEN_RAIL_RAMP_Y_DOWN ), MN( SPR_BTGEN_RAIL_RAMP_X_UP ), MN( SPR_BTGEN_RAIL_RAMP_Y_UP ), MN( SPR_BTGEN_RAIL_RAMP_X_DOWN ), MN( SPR_BTGEN_RAIL_RAMP_Y_DOWN ), MN( SPR_BTGEN_RAIL_RAMP_X_UP ), MN( SPR_BTGEN_RAIL_RAMP_Y_UP ),
MC( SPR_BTGEN_ROAD_X_SLOPE_UP ), MC( SPR_BTGEN_ROAD_Y_SLOPE_UP ), MC( SPR_BTGEN_ROAD_X_SLOPE_DOWN ), MC( SPR_BTGEN_ROAD_Y_SLOPE_DOWN ), MC( SPR_BTGEN_ROAD_X_SLOPE_UP ), MC( SPR_BTGEN_ROAD_Y_SLOPE_UP ), MC( SPR_BTGEN_ROAD_X_SLOPE_DOWN ), MC( SPR_BTGEN_ROAD_Y_SLOPE_DOWN ),
@ -476,7 +471,7 @@ static const PalSpriteID _bridge_sprite_table_generic_concrete_heads[] = {
MC( SPR_BTGEN_MGLV_RAMP_X_DOWN ), MC( SPR_BTGEN_MGLV_RAMP_Y_DOWN ), MC( SPR_BTGEN_MGLV_RAMP_X_UP ), MC( SPR_BTGEN_MGLV_RAMP_Y_UP ), MC( SPR_BTGEN_MGLV_RAMP_X_DOWN ), MC( SPR_BTGEN_MGLV_RAMP_Y_DOWN ), MC( SPR_BTGEN_MGLV_RAMP_X_UP ), MC( SPR_BTGEN_MGLV_RAMP_Y_UP ),
}; };
static const PalSpriteID _bridge_sprite_table_girder_middle[] = { static const PalSpriteID _bridge_sprite_table_9_0[] = {
{ 0x9F9, PAL_NONE }, { 0x9FD, PAL_NONE }, { 0x9C9, PAL_NONE }, { 0x0, PAL_NONE }, { 0x9F9, PAL_NONE }, { 0x9FD, PAL_NONE }, { 0x9C9, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9FA, PAL_NONE }, { 0x9FE, PAL_NONE }, { 0x9CA, PAL_NONE }, { 0x0, PAL_NONE }, { 0x9FA, PAL_NONE }, { 0x9FE, PAL_NONE }, { 0x9CA, PAL_NONE }, { 0x0, PAL_NONE },
{ 0x9FB, PAL_NONE }, { 0x9FD, PAL_NONE }, { 0x9C9, PAL_NONE }, { 0x0, PAL_NONE }, { 0x9FB, PAL_NONE }, { 0x9FD, PAL_NONE }, { 0x9C9, PAL_NONE }, { 0x0, PAL_NONE },
@ -487,7 +482,7 @@ static const PalSpriteID _bridge_sprite_table_girder_middle[] = {
{ 0x1133, PAL_NONE }, { 0x9FE, PAL_NONE }, { 0x9CA, PAL_NONE }, { 0x0, PAL_NONE }, { 0x1133, PAL_NONE }, { 0x9FE, PAL_NONE }, { 0x9CA, PAL_NONE }, { 0x0, PAL_NONE },
}; };
static const PalSpriteID _bridge_sprite_table_tubular_oxide_north[] = { static const PalSpriteID _bridge_sprite_table_10_0[] = {
{ 0xA0B, PAL_NONE }, { 0xA01, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE }, { 0xA0B, PAL_NONE }, { 0xA01, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA0C, PAL_NONE }, { 0xA02, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE }, { 0xA0C, PAL_NONE }, { 0xA02, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA11, PAL_NONE }, { 0xA01, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE }, { 0xA11, PAL_NONE }, { 0xA01, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
@ -498,7 +493,7 @@ static const PalSpriteID _bridge_sprite_table_tubular_oxide_north[] = {
{ 0xA1E, PAL_NONE }, { 0xA02, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE }, { 0xA1E, PAL_NONE }, { 0xA02, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
}; };
static const PalSpriteID _bridge_sprite_table_tubular_oxide_south[] = { static const PalSpriteID _bridge_sprite_table_10_1[] = {
{ 0xA09, PAL_NONE }, { 0x9FF, PAL_NONE }, { 0xA05, PAL_NONE }, { 0x0, PAL_NONE }, { 0xA09, PAL_NONE }, { 0x9FF, PAL_NONE }, { 0xA05, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA0E, PAL_NONE }, { 0xA04, PAL_NONE }, { 0xA08, PAL_NONE }, { 0x0, PAL_NONE }, { 0xA0E, PAL_NONE }, { 0xA04, PAL_NONE }, { 0xA08, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA0F, PAL_NONE }, { 0x9FF, PAL_NONE }, { 0xA05, PAL_NONE }, { 0x0, PAL_NONE }, { 0xA0F, PAL_NONE }, { 0x9FF, PAL_NONE }, { 0xA05, PAL_NONE }, { 0x0, PAL_NONE },
@ -509,7 +504,7 @@ static const PalSpriteID _bridge_sprite_table_tubular_oxide_south[] = {
{ 0xA20, PAL_NONE }, { 0xA04, PAL_NONE }, { 0xA08, PAL_NONE }, { 0x0, PAL_NONE }, { 0xA20, PAL_NONE }, { 0xA04, PAL_NONE }, { 0xA08, PAL_NONE }, { 0x0, PAL_NONE },
}; };
static const PalSpriteID _bridge_sprite_table_tubular_oxide_middle[] = { static const PalSpriteID _bridge_sprite_table_10_2[] = {
{ 0xA0A, PAL_NONE }, { 0xA00, PAL_NONE }, { 0xA06, PAL_NONE }, { 0x0, PAL_NONE }, { 0xA0A, PAL_NONE }, { 0xA00, PAL_NONE }, { 0xA06, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA0D, PAL_NONE }, { 0xA03, PAL_NONE }, { 0xA07, PAL_NONE }, { 0x0, PAL_NONE }, { 0xA0D, PAL_NONE }, { 0xA03, PAL_NONE }, { 0xA07, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA10, PAL_NONE }, { 0xA00, PAL_NONE }, { 0xA06, PAL_NONE }, { 0x0, PAL_NONE }, { 0xA10, PAL_NONE }, { 0xA00, PAL_NONE }, { 0xA06, PAL_NONE }, { 0x0, PAL_NONE },
@ -520,7 +515,7 @@ static const PalSpriteID _bridge_sprite_table_tubular_oxide_middle[] = {
{ 0xA1F, PAL_NONE }, { 0xA03, PAL_NONE }, { 0xA07, PAL_NONE }, { 0x0, PAL_NONE }, { 0xA1F, PAL_NONE }, { 0xA03, PAL_NONE }, { 0xA07, PAL_NONE }, { 0x0, PAL_NONE },
}; };
static const PalSpriteID _bridge_sprite_table_tubular_yellow_north[] = { static const PalSpriteID _bridge_sprite_table_11_0[] = {
{ 0xA0B, PALETTE_TO_STRUCT_YELLOW }, { 0xA01, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE }, { 0xA0B, PALETTE_TO_STRUCT_YELLOW }, { 0xA01, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA0C, PALETTE_TO_STRUCT_YELLOW }, { 0xA02, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE }, { 0xA0C, PALETTE_TO_STRUCT_YELLOW }, { 0xA02, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA11, PALETTE_TO_STRUCT_YELLOW }, { 0xA01, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE }, { 0xA11, PALETTE_TO_STRUCT_YELLOW }, { 0xA01, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
@ -531,7 +526,7 @@ static const PalSpriteID _bridge_sprite_table_tubular_yellow_north[] = {
{ 0xA1E, PALETTE_TO_STRUCT_YELLOW }, { 0xA02, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE }, { 0xA1E, PALETTE_TO_STRUCT_YELLOW }, { 0xA02, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
}; };
static const PalSpriteID _bridge_sprite_table_tubular_yellow_south[] = { static const PalSpriteID _bridge_sprite_table_11_1[] = {
{ 0xA09, PALETTE_TO_STRUCT_YELLOW }, { 0x9FF, PALETTE_TO_STRUCT_YELLOW }, { 0xA05, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0xA09, PALETTE_TO_STRUCT_YELLOW }, { 0x9FF, PALETTE_TO_STRUCT_YELLOW }, { 0xA05, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0xA0E, PALETTE_TO_STRUCT_YELLOW }, { 0xA04, PALETTE_TO_STRUCT_YELLOW }, { 0xA08, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0xA0E, PALETTE_TO_STRUCT_YELLOW }, { 0xA04, PALETTE_TO_STRUCT_YELLOW }, { 0xA08, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0xA0F, PALETTE_TO_STRUCT_YELLOW }, { 0x9FF, PALETTE_TO_STRUCT_YELLOW }, { 0xA05, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0xA0F, PALETTE_TO_STRUCT_YELLOW }, { 0x9FF, PALETTE_TO_STRUCT_YELLOW }, { 0xA05, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
@ -542,7 +537,7 @@ static const PalSpriteID _bridge_sprite_table_tubular_yellow_south[] = {
{ 0xA20, PALETTE_TO_STRUCT_YELLOW }, { 0xA04, PALETTE_TO_STRUCT_YELLOW }, { 0xA08, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0xA20, PALETTE_TO_STRUCT_YELLOW }, { 0xA04, PALETTE_TO_STRUCT_YELLOW }, { 0xA08, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
}; };
static const PalSpriteID _bridge_sprite_table_tubular_yellow_middle[] = { static const PalSpriteID _bridge_sprite_table_11_2[] = {
{ 0xA0A, PALETTE_TO_STRUCT_YELLOW }, { 0xA00, PALETTE_TO_STRUCT_YELLOW }, { 0xA06, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0xA0A, PALETTE_TO_STRUCT_YELLOW }, { 0xA00, PALETTE_TO_STRUCT_YELLOW }, { 0xA06, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0xA0D, PALETTE_TO_STRUCT_YELLOW }, { 0xA03, PALETTE_TO_STRUCT_YELLOW }, { 0xA07, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0xA0D, PALETTE_TO_STRUCT_YELLOW }, { 0xA03, PALETTE_TO_STRUCT_YELLOW }, { 0xA07, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
{ 0xA10, PALETTE_TO_STRUCT_YELLOW }, { 0xA00, PALETTE_TO_STRUCT_YELLOW }, { 0xA06, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0xA10, PALETTE_TO_STRUCT_YELLOW }, { 0xA00, PALETTE_TO_STRUCT_YELLOW }, { 0xA06, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
@ -553,7 +548,7 @@ static const PalSpriteID _bridge_sprite_table_tubular_yellow_middle[] = {
{ 0xA1F, PALETTE_TO_STRUCT_YELLOW }, { 0xA03, PALETTE_TO_STRUCT_YELLOW }, { 0xA07, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0xA1F, PALETTE_TO_STRUCT_YELLOW }, { 0xA03, PALETTE_TO_STRUCT_YELLOW }, { 0xA07, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
}; };
static const PalSpriteID _bridge_sprite_table_tubular_silicon_north[] = { static const PalSpriteID _bridge_sprite_table_12_0[] = {
{ 0xA0B, PALETTE_TO_STRUCT_CONCRETE }, { 0xA01, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE }, { 0xA0B, PALETTE_TO_STRUCT_CONCRETE }, { 0xA01, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA0C, PALETTE_TO_STRUCT_CONCRETE }, { 0xA02, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE }, { 0xA0C, PALETTE_TO_STRUCT_CONCRETE }, { 0xA02, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
{ 0xA11, PALETTE_TO_STRUCT_CONCRETE }, { 0xA01, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE }, { 0xA11, PALETTE_TO_STRUCT_CONCRETE }, { 0xA01, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
@ -564,7 +559,7 @@ static const PalSpriteID _bridge_sprite_table_tubular_silicon_north[] = {
{ 0xA1E, PALETTE_TO_STRUCT_CONCRETE }, { 0xA02, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE }, { 0xA1E, PALETTE_TO_STRUCT_CONCRETE }, { 0xA02, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
}; };
static const PalSpriteID _bridge_sprite_table_tubular_silicon_south[] = { static const PalSpriteID _bridge_sprite_table_12_1[] = {
{ 0xA09, PALETTE_TO_STRUCT_CONCRETE }, { 0x9FF, PALETTE_TO_STRUCT_CONCRETE }, { 0xA05, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE }, { 0xA09, PALETTE_TO_STRUCT_CONCRETE }, { 0x9FF, PALETTE_TO_STRUCT_CONCRETE }, { 0xA05, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE },
{ 0xA0E, PALETTE_TO_STRUCT_CONCRETE }, { 0xA04, PALETTE_TO_STRUCT_CONCRETE }, { 0xA08, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE }, { 0xA0E, PALETTE_TO_STRUCT_CONCRETE }, { 0xA04, PALETTE_TO_STRUCT_CONCRETE }, { 0xA08, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE },
{ 0xA0F, PALETTE_TO_STRUCT_CONCRETE }, { 0x9FF, PALETTE_TO_STRUCT_CONCRETE }, { 0xA05, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE }, { 0xA0F, PALETTE_TO_STRUCT_CONCRETE }, { 0x9FF, PALETTE_TO_STRUCT_CONCRETE }, { 0xA05, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE },
@ -575,7 +570,7 @@ static const PalSpriteID _bridge_sprite_table_tubular_silicon_south[] = {
{ 0xA20, PALETTE_TO_STRUCT_CONCRETE }, { 0xA04, PALETTE_TO_STRUCT_CONCRETE }, { 0xA08, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE }, { 0xA20, PALETTE_TO_STRUCT_CONCRETE }, { 0xA04, PALETTE_TO_STRUCT_CONCRETE }, { 0xA08, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE },
}; };
static const PalSpriteID _bridge_sprite_table_tubular_silicon_middle[] = { static const PalSpriteID _bridge_sprite_table_12_2[] = {
{ 0xA0A, PALETTE_TO_STRUCT_CONCRETE }, { 0xA00, PALETTE_TO_STRUCT_CONCRETE }, { 0xA06, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE }, { 0xA0A, PALETTE_TO_STRUCT_CONCRETE }, { 0xA00, PALETTE_TO_STRUCT_CONCRETE }, { 0xA06, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE },
{ 0xA0D, PALETTE_TO_STRUCT_CONCRETE }, { 0xA03, PALETTE_TO_STRUCT_CONCRETE }, { 0xA07, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE }, { 0xA0D, PALETTE_TO_STRUCT_CONCRETE }, { 0xA03, PALETTE_TO_STRUCT_CONCRETE }, { 0xA07, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE },
{ 0xA10, PALETTE_TO_STRUCT_CONCRETE }, { 0xA00, PALETTE_TO_STRUCT_CONCRETE }, { 0xA06, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE }, { 0xA10, PALETTE_TO_STRUCT_CONCRETE }, { 0xA00, PALETTE_TO_STRUCT_CONCRETE }, { 0xA06, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE },
@ -596,64 +591,64 @@ static const std::span<const PalSpriteID> _bridge_sprite_table_archgirder[] = {
_bridge_sprite_table_archgirder_heads, _bridge_sprite_table_archgirder_heads,
}; };
static const std::span<const PalSpriteID> _bridge_sprite_table_suspension_oxide[] = { static const std::span<const PalSpriteID> _bridge_sprite_table_4[] = {
_bridge_sprite_table_suspension_oxide_north, _bridge_sprite_table_4_0,
_bridge_sprite_table_suspension_oxide_south, _bridge_sprite_table_4_1,
_bridge_sprite_table_suspension_oxide_inner_north, _bridge_sprite_table_4_2,
_bridge_sprite_table_suspension_oxide_inner_south, _bridge_sprite_table_4_3,
_bridge_sprite_table_suspension_oxide_middle_odd, _bridge_sprite_table_4_4,
_bridge_sprite_table_suspension_middle_even, _bridge_sprite_table_4_5,
_bridge_sprite_table_generic_oxide_heads, _bridge_sprite_table_4_6,
}; };
static const std::span<const PalSpriteID> _bridge_sprite_table_suspension_yellow[] = { static const std::span<const PalSpriteID> _bridge_sprite_table_5[] = {
_bridge_sprite_table_suspension_yellow_north, _bridge_sprite_table_5_0,
_bridge_sprite_table_suspension_yellow_south, _bridge_sprite_table_5_1,
_bridge_sprite_table_suspension_yellow_inner_north, _bridge_sprite_table_5_2,
_bridge_sprite_table_suspension_yellow_inner_south, _bridge_sprite_table_5_3,
_bridge_sprite_table_suspension_yellow_middle_odd, _bridge_sprite_table_5_4,
_bridge_sprite_table_suspension_yellow_middle_even, _bridge_sprite_table_5_5,
_bridge_sprite_table_generic_yellow_heads, _bridge_sprite_table_5_6,
}; };
static const std::span<const PalSpriteID> _bridge_sprite_table_suspension_concrete[] = { static const std::span<const PalSpriteID> _bridge_sprite_table_concrete_suspended[] = {
_bridge_sprite_table_suspension_concrete_north, _bridge_sprite_table_concrete_suspended_A,
_bridge_sprite_table_suspension_concrete_south, _bridge_sprite_table_concrete_suspended_B,
_bridge_sprite_table_suspension_concrete_inner_north, _bridge_sprite_table_concrete_suspended_C,
_bridge_sprite_table_suspension_concrete_inner_south, _bridge_sprite_table_concrete_suspended_D,
_bridge_sprite_table_suspension_concrete_middle_odd, _bridge_sprite_table_concrete_suspended_E,
_bridge_sprite_table_suspension_concrete_middle_even, _bridge_sprite_table_concrete_suspended_F,
_bridge_sprite_table_generic_concrete_heads, _bridge_sprite_table_concrete_suspended_heads,
}; };
static const std::span<const PalSpriteID> _bridge_sprite_table_cantilever_oxide[] = { static const std::span<const PalSpriteID> _bridge_sprite_table_6[] = {
_bridge_sprite_table_cantilever_oxide_north, _bridge_sprite_table_6_0,
_bridge_sprite_table_cantilever_oxide_south, _bridge_sprite_table_6_1,
_bridge_sprite_table_cantilever_oxide_middle, _bridge_sprite_table_6_2,
_bridge_sprite_table_cantilever_oxide_middle, _bridge_sprite_table_6_2,
_bridge_sprite_table_cantilever_oxide_middle, _bridge_sprite_table_6_2,
_bridge_sprite_table_cantilever_oxide_middle, _bridge_sprite_table_6_2,
_bridge_sprite_table_cantilever_oxide_heads, _bridge_sprite_table_6_3,
}; };
static const std::span<const PalSpriteID> _bridge_sprite_table_cantilever_brown[] = { static const std::span<const PalSpriteID> _bridge_sprite_table_7[] = {
_bridge_sprite_table_cantilever_brown_north, _bridge_sprite_table_7_0,
_bridge_sprite_table_cantilever_brown_south, _bridge_sprite_table_7_1,
_bridge_sprite_table_cantilever_brown_middle, _bridge_sprite_table_7_2,
_bridge_sprite_table_cantilever_brown_middle, _bridge_sprite_table_7_2,
_bridge_sprite_table_cantilever_brown_middle, _bridge_sprite_table_7_2,
_bridge_sprite_table_cantilever_brown_middle, _bridge_sprite_table_7_2,
_bridge_sprite_table_cantilever_brown_heads, _bridge_sprite_table_7_3,
}; };
static const std::span<const PalSpriteID> _bridge_sprite_table_cantilever_red[] = { static const std::span<const PalSpriteID> _bridge_sprite_table_8[] = {
_bridge_sprite_table_cantilever_red_north, _bridge_sprite_table_8_0,
_bridge_sprite_table_cantilever_red_south, _bridge_sprite_table_8_1,
_bridge_sprite_table_cantilever_red_middle, _bridge_sprite_table_8_2,
_bridge_sprite_table_cantilever_red_middle, _bridge_sprite_table_8_2,
_bridge_sprite_table_cantilever_red_middle, _bridge_sprite_table_8_2,
_bridge_sprite_table_cantilever_red_middle, _bridge_sprite_table_8_2,
_bridge_sprite_table_cantilever_red_heads, _bridge_sprite_table_8_3,
}; };
static const std::span<const PalSpriteID> _bridge_sprite_table_wood[] = { static const std::span<const PalSpriteID> _bridge_sprite_table_wood[] = {
@ -676,60 +671,60 @@ static const std::span<const PalSpriteID> _bridge_sprite_table_concrete[] = {
_bridge_sprite_table_concrete_heads, _bridge_sprite_table_concrete_heads,
}; };
static const std::span<const PalSpriteID> _bridge_sprite_table_girder[] = { static const std::span<const PalSpriteID> _bridge_sprite_table_9[] = {
_bridge_sprite_table_girder_middle, _bridge_sprite_table_9_0,
_bridge_sprite_table_girder_middle, _bridge_sprite_table_9_0,
_bridge_sprite_table_girder_middle, _bridge_sprite_table_9_0,
_bridge_sprite_table_girder_middle, _bridge_sprite_table_9_0,
_bridge_sprite_table_girder_middle, _bridge_sprite_table_9_0,
_bridge_sprite_table_girder_middle, _bridge_sprite_table_9_0,
_bridge_sprite_table_generic_oxide_heads, _bridge_sprite_table_4_6,
}; };
static const std::span<const PalSpriteID> _bridge_sprite_table_tubular_oxide[] = { static const std::span<const PalSpriteID> _bridge_sprite_table_10[] = {
_bridge_sprite_table_tubular_oxide_north, _bridge_sprite_table_10_0,
_bridge_sprite_table_tubular_oxide_south, _bridge_sprite_table_10_1,
_bridge_sprite_table_tubular_oxide_middle, _bridge_sprite_table_10_2,
_bridge_sprite_table_tubular_oxide_middle, _bridge_sprite_table_10_2,
_bridge_sprite_table_tubular_oxide_middle, _bridge_sprite_table_10_2,
_bridge_sprite_table_tubular_oxide_middle, _bridge_sprite_table_10_2,
_bridge_sprite_table_generic_oxide_heads, _bridge_sprite_table_4_6,
}; };
static const std::span<const PalSpriteID> _bridge_sprite_table_tubular_yellow[] = { static const std::span<const PalSpriteID> _bridge_sprite_table_11[] = {
_bridge_sprite_table_tubular_yellow_north, _bridge_sprite_table_11_0,
_bridge_sprite_table_tubular_yellow_south, _bridge_sprite_table_11_1,
_bridge_sprite_table_tubular_yellow_middle, _bridge_sprite_table_11_2,
_bridge_sprite_table_tubular_yellow_middle, _bridge_sprite_table_11_2,
_bridge_sprite_table_tubular_yellow_middle, _bridge_sprite_table_11_2,
_bridge_sprite_table_tubular_yellow_middle, _bridge_sprite_table_11_2,
_bridge_sprite_table_generic_yellow_heads, _bridge_sprite_table_5_6,
}; };
static const std::span<const PalSpriteID> _bridge_sprite_table_tubular_silicon[] = { static const std::span<const PalSpriteID> _bridge_sprite_table_12[] = {
_bridge_sprite_table_tubular_silicon_north, _bridge_sprite_table_12_0,
_bridge_sprite_table_tubular_silicon_south, _bridge_sprite_table_12_1,
_bridge_sprite_table_tubular_silicon_middle, _bridge_sprite_table_12_2,
_bridge_sprite_table_tubular_silicon_middle, _bridge_sprite_table_12_2,
_bridge_sprite_table_tubular_silicon_middle, _bridge_sprite_table_12_2,
_bridge_sprite_table_tubular_silicon_middle, _bridge_sprite_table_12_2,
_bridge_sprite_table_generic_concrete_heads, _bridge_sprite_table_concrete_suspended_heads,
}; };
static const std::span<const std::span<const PalSpriteID>> _bridge_sprite_table[MAX_BRIDGES] = { static const std::span<const std::span<const PalSpriteID>> _bridge_sprite_table[MAX_BRIDGES] = {
_bridge_sprite_table_wood, _bridge_sprite_table_wood,
_bridge_sprite_table_concrete, _bridge_sprite_table_concrete,
_bridge_sprite_table_archgirder, _bridge_sprite_table_archgirder,
_bridge_sprite_table_suspension_concrete, _bridge_sprite_table_concrete_suspended,
_bridge_sprite_table_suspension_oxide, _bridge_sprite_table_4,
_bridge_sprite_table_suspension_yellow, _bridge_sprite_table_5,
_bridge_sprite_table_cantilever_oxide, _bridge_sprite_table_6,
_bridge_sprite_table_cantilever_brown, _bridge_sprite_table_7,
_bridge_sprite_table_cantilever_red, _bridge_sprite_table_8,
_bridge_sprite_table_girder, _bridge_sprite_table_9,
_bridge_sprite_table_tubular_oxide, _bridge_sprite_table_10,
_bridge_sprite_table_tubular_yellow, _bridge_sprite_table_11,
_bridge_sprite_table_tubular_silicon, _bridge_sprite_table_12
}; };
/** /**

View File

@ -313,12 +313,14 @@ enum WireSpriteOffset : uint8_t {
WSO_ENTRANCE_SE, WSO_ENTRANCE_SE,
}; };
struct SortableSpriteStruct : SpriteBounds { struct SortableSpriteStruct {
uint8_t image_offset; uint8_t image_offset;
int8_t x_offset;
constexpr SortableSpriteStruct(uint8_t image_offset, const SpriteBounds &bounds) : SpriteBounds(bounds), image_offset(image_offset) {} int8_t y_offset;
constexpr SortableSpriteStruct(uint8_t image_offset, int8_t x_offset, int8_t y_offset, uint8_t x_size, uint8_t y_size, uint8_t z_size, int8_t z_offset) : int8_t x_size;
SpriteBounds({x_offset, y_offset, z_offset}, {x_size, y_size, z_size}, {}), image_offset(image_offset) {} int8_t y_size;
int8_t z_size;
int8_t z_offset;
}; };
/** Distance between wire and rail */ /** Distance between wire and rail */
@ -396,17 +398,11 @@ static const SortableSpriteStruct _rail_catenary_sprite_data_depot[] = {
{ WSO_ENTRANCE_NW, 7, 0, 1, 15, 1, ELRAIL_ELEVATION } //! Wire for NW depot exit { WSO_ENTRANCE_NW, 7, 0, 1, 15, 1, ELRAIL_ELEVATION } //! Wire for NW depot exit
}; };
/**
* In tunnelheads, the bounding box for wires covers nearly the full tile, and is lowered a bit.
* ELRAIL_TUNNEL_OFFSET is the difference between visual position and bounding box.
*/
static const int8_t ELRAIL_TUNNEL_OFFSET = ELRAIL_ELEVATION - BB_Z_SEPARATOR;
static const SortableSpriteStruct _rail_catenary_sprite_data_tunnel[] = { static const SortableSpriteStruct _rail_catenary_sprite_data_tunnel[] = {
{ WSO_ENTRANCE_SW, {{0, 0, BB_Z_SEPARATOR}, {16, 15, 1}, {0, 7, ELRAIL_TUNNEL_OFFSET}} }, //! Wire for NE tunnel (SW facing exit) { WSO_ENTRANCE_SW, 0, 7, 15, 1, 1, ELRAIL_ELEVATION }, //! Wire for NE tunnel (SW facing exit)
{ WSO_ENTRANCE_NW, {{0, 0, BB_Z_SEPARATOR}, {15, 16, 1}, {7, 0, ELRAIL_TUNNEL_OFFSET}} }, //! Wire for SE tunnel (NW facing exit) { WSO_ENTRANCE_NW, 7, 0, 1, 15, 1, ELRAIL_ELEVATION }, //! Wire for SE tunnel (NW facing exit)
{ WSO_ENTRANCE_NE, {{0, 0, BB_Z_SEPARATOR}, {16, 15, 1}, {0, 7, ELRAIL_TUNNEL_OFFSET}} }, //! Wire for SW tunnel (NE facing exit) { WSO_ENTRANCE_NE, 0, 7, 15, 1, 1, ELRAIL_ELEVATION }, //! Wire for SW tunnel (NE facing exit)
{ WSO_ENTRANCE_SE, {{0, 0, BB_Z_SEPARATOR}, {15, 16, 1}, {7, 0, ELRAIL_TUNNEL_OFFSET}} } //! Wire for NW tunnel (SE facing exit) { WSO_ENTRANCE_SE, 7, 0, 1, 15, 1, ELRAIL_ELEVATION } //! Wire for NW tunnel (SE facing exit)
}; };

View File

@ -37,15 +37,15 @@ struct DrawIndustryCoordinates {
* @param p1 palette ID of ground sprite * @param p1 palette ID of ground sprite
* @param s2 sprite ID of building sprite * @param s2 sprite ID of building sprite
* @param p2 palette ID of building sprite * @param p2 palette ID of building sprite
* @param dx The x-position of the sprite within the tile. * @param sx coordinate x of the sprite
* @param dy the y-position of the sprite within the tile. * @param sy coordinate y of the sprite
* @param sx the x-extent of the sprite. * @param w width of the sprite
* @param sy the y-extent of the sprite. * @param h height of the sprite
* @param sz the z-extent of the sprite. * @param dz virtual height of the sprite
* @param p this allows to specify a special drawing procedure. * @param p this allows to specify a special drawing procedure.
* @see DrawBuildingsTileStruct * @see DrawBuildingsTileStruct
*/ */
#define M(s1, p1, s2, p2, dx, dy, sx, sy, sz, p) { {{dx, dy, 0}, {sx, sy, sz}, {}}, { s1, p1 }, { s2, p2 }, p} #define M(s1, p1, s2, p2, sx, sy, w, h, dz, p) { { s1, p1 }, { s2, p2 }, sx, sy, w, h, dz, p }
/** Structure for industry tiles drawing */ /** Structure for industry tiles drawing */
static const DrawBuildingsTileStruct _industry_draw_tile_data[NEW_INDUSTRYTILEOFFSET * 4] = { static const DrawBuildingsTileStruct _industry_draw_tile_data[NEW_INDUSTRYTILEOFFSET * 4] = {

View File

@ -13,15 +13,15 @@
* @param p1 The first sprite's palette of the building, mostly the ground sprite * @param p1 The first sprite's palette of the building, mostly the ground sprite
* @param s2 The second sprite of the building. * @param s2 The second sprite of the building.
* @param p2 The second sprite's palette of the building. * @param p2 The second sprite's palette of the building.
* @param dx The x-position of the sprite within the tile. * @param sx The x-position of the sprite within the tile
* @param dy the y-position of the sprite within the tile. * @param sy the y-position of the sprite within the tile
* @param sx the x-extent of the sprite. * @param w the width of the sprite
* @param sy the y-extent of the sprite. * @param h the height of the sprite
* @param sz the z-extent of the sprite. * @param dz the virtual height of the sprite
* @param p set to 1 if a lift is present () * @param p set to 1 if a lift is present ()
* @see DrawBuildingsTileStruct * @see DrawBuildingsTileStruct
*/ */
#define M(s1, p1, s2, p2, dx, dy, sx, sy, sz, p) { {{dx, dy, 0}, {sx, sy, sz}, {}}, { s1, p1 }, { s2, p2 }, p} #define M(s1, p1, s2, p2, sx, sy, w, h, dz, p) { { s1, p1 }, { s2, p2 }, sx, sy, w, h, dz, p}
/** structure of houses graphics*/ /** structure of houses graphics*/
static const DrawBuildingsTileStruct _town_draw_tile_data[] = { static const DrawBuildingsTileStruct _town_draw_tile_data[] = {

View File

@ -10,7 +10,6 @@
#ifndef TILE_CMD_H #ifndef TILE_CMD_H
#define TILE_CMD_H #define TILE_CMD_H
#include "core/geometry_type.hpp"
#include "command_type.h" #include "command_type.h"
#include "vehicle_type.h" #include "vehicle_type.h"
#include "cargo_type.h" #include "cargo_type.h"
@ -27,9 +26,12 @@ enum class VehicleEnterTileState : uint8_t {
using VehicleEnterTileStates = EnumBitSet<VehicleEnterTileState, uint8_t>; using VehicleEnterTileStates = EnumBitSet<VehicleEnterTileState, uint8_t>;
/** Tile information, used while rendering the tile */ /** Tile information, used while rendering the tile */
struct TileInfo : Coord3D<int> { struct TileInfo {
int x; ///< X position of the tile in unit coordinates
int y; ///< Y position of the tile in unit coordinates
Slope tileh; ///< Slope of the tile Slope tileh; ///< Slope of the tile
TileIndex tile; ///< Tile index TileIndex tile; ///< Tile index
int z; ///< Height
}; };
/** Tile description for the 'land area information' tool */ /** Tile description for the 'land area information' tool */

View File

@ -12,29 +12,29 @@
#include "core/strong_typedef_type.hpp" #include "core/strong_typedef_type.hpp"
static constexpr uint TILE_SIZE = 16; ///< Tile size in world coordinates. static const uint TILE_SIZE = 16; ///< Tile size in world coordinates.
static constexpr uint TILE_UNIT_MASK = TILE_SIZE - 1; ///< For masking in/out the inner-tile world coordinate units. static const uint TILE_UNIT_MASK = TILE_SIZE - 1; ///< For masking in/out the inner-tile world coordinate units.
static constexpr uint TILE_PIXELS = 32; ///< Pixel distance between tile columns/rows in #ZOOM_BASE. static const uint TILE_PIXELS = 32; ///< Pixel distance between tile columns/rows in #ZOOM_BASE.
static constexpr uint TILE_HEIGHT = 8; ///< Height of a height level in world coordinate AND in pixels in #ZOOM_BASE. static const uint TILE_HEIGHT = 8; ///< Height of a height level in world coordinate AND in pixels in #ZOOM_BASE.
static constexpr uint MAX_BUILDING_PIXELS = 200; ///< Maximum height of a building in pixels in #ZOOM_BASE. (Also applies to "bridge buildings" on the bridge floor.) static const uint MAX_BUILDING_PIXELS = 200; ///< Maximum height of a building in pixels in #ZOOM_BASE. (Also applies to "bridge buildings" on the bridge floor.)
static constexpr int MAX_VEHICLE_PIXEL_X = 192; ///< Maximum width of a vehicle in pixels in #ZOOM_BASE. static const int MAX_VEHICLE_PIXEL_X = 192; ///< Maximum width of a vehicle in pixels in #ZOOM_BASE.
static constexpr int MAX_VEHICLE_PIXEL_Y = 96; ///< Maximum height of a vehicle in pixels in #ZOOM_BASE. static const int MAX_VEHICLE_PIXEL_Y = 96; ///< Maximum height of a vehicle in pixels in #ZOOM_BASE.
static constexpr uint MAX_TILE_HEIGHT = 255; ///< Maximum allowed tile height static const uint MAX_TILE_HEIGHT = 255; ///< Maximum allowed tile height
static constexpr uint MIN_HEIGHTMAP_HEIGHT = 1; ///< Lowest possible peak value for heightmap creation static const uint MIN_HEIGHTMAP_HEIGHT = 1; ///< Lowest possible peak value for heightmap creation
static constexpr uint MIN_CUSTOM_TERRAIN_TYPE = 1; ///< Lowest possible peak value for world generation static const uint MIN_CUSTOM_TERRAIN_TYPE = 1; ///< Lowest possible peak value for world generation
static constexpr uint MIN_MAP_HEIGHT_LIMIT = 15; ///< Lower bound of maximum allowed heightlevel (in the construction settings) static const uint MIN_MAP_HEIGHT_LIMIT = 15; ///< Lower bound of maximum allowed heightlevel (in the construction settings)
static constexpr uint MAX_MAP_HEIGHT_LIMIT = MAX_TILE_HEIGHT; ///< Upper bound of maximum allowed heightlevel (in the construction settings) static const uint MAX_MAP_HEIGHT_LIMIT = MAX_TILE_HEIGHT; ///< Upper bound of maximum allowed heightlevel (in the construction settings)
static constexpr uint MIN_SNOWLINE_HEIGHT = 2; ///< Minimum snowline height static const uint MIN_SNOWLINE_HEIGHT = 2; ///< Minimum snowline height
static constexpr uint DEF_SNOWLINE_HEIGHT = 10; ///< Default snowline height static const uint DEF_SNOWLINE_HEIGHT = 10; ///< Default snowline height
static constexpr uint MAX_SNOWLINE_HEIGHT = (MAX_TILE_HEIGHT - 2); ///< Maximum allowed snowline height static const uint MAX_SNOWLINE_HEIGHT = (MAX_TILE_HEIGHT - 2); ///< Maximum allowed snowline height
static constexpr uint DEF_SNOW_COVERAGE = 40; ///< Default snow coverage. static const uint DEF_SNOW_COVERAGE = 40; ///< Default snow coverage.
static constexpr uint DEF_DESERT_COVERAGE = 50; ///< Default desert coverage. static const uint DEF_DESERT_COVERAGE = 50; ///< Default desert coverage.
/** /**

View File

@ -117,7 +117,7 @@ public:
static void PopupMainToolbarMenu(Window *w, WidgetID widget, DropDownList &&list, int def) static void PopupMainToolbarMenu(Window *w, WidgetID widget, DropDownList &&list, int def)
{ {
ShowDropDownList(w, std::move(list), def, widget, 0, true); ShowDropDownList(w, std::move(list), def, widget, 0, true);
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
} }
/** /**
@ -204,7 +204,7 @@ static CallBackFunction ToolbarPauseClick(Window *)
if (_networking && !_network_server) return CBF_NONE; // only server can pause the game if (_networking && !_network_server) return CBF_NONE; // only server can pause the game
if (Command<CMD_PAUSE>::Post(PauseMode::Normal, _pause_mode.None())) { if (Command<CMD_PAUSE>::Post(PauseMode::Normal, _pause_mode.None())) {
SndConfirmBeep(); if (_settings_client.sound.confirm) SndPlayFx(SND_15_BEEP);
} }
return CBF_NONE; return CBF_NONE;
} }
@ -220,7 +220,7 @@ static CallBackFunction ToolbarFastForwardClick(Window *)
ChangeGameSpeed(_game_speed == 100); ChangeGameSpeed(_game_speed == 100);
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
return CBF_NONE; return CBF_NONE;
} }
@ -291,7 +291,7 @@ static CallBackFunction ToolbarOptionsClick(Window *w)
list.push_back(MakeDropDownListCheckedItem(IsTransparencySet(TO_SIGNS), STR_SETTINGS_MENU_TRANSPARENT_SIGNS, OME_SHOW_STATIONSIGNS)); list.push_back(MakeDropDownListCheckedItem(IsTransparencySet(TO_SIGNS), STR_SETTINGS_MENU_TRANSPARENT_SIGNS, OME_SHOW_STATIONSIGNS));
ShowDropDownList(w, std::move(list), 0, WID_TN_SETTINGS, 140, true); ShowDropDownList(w, std::move(list), 0, WID_TN_SETTINGS, 140, true);
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
return CBF_NONE; return CBF_NONE;
} }
@ -684,7 +684,7 @@ static CallBackFunction ToolbarGraphsClick(Window *w)
if (_toolbar_mode != TB_NORMAL) AddDropDownLeagueTableOptions(list); if (_toolbar_mode != TB_NORMAL) AddDropDownLeagueTableOptions(list);
ShowDropDownList(w, std::move(list), GRMN_OPERATING_PROFIT_GRAPH, WID_TN_GRAPHS, 140, true); ShowDropDownList(w, std::move(list), GRMN_OPERATING_PROFIT_GRAPH, WID_TN_GRAPHS, 140, true);
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
return CBF_NONE; return CBF_NONE;
} }
@ -697,7 +697,7 @@ static CallBackFunction ToolbarLeagueClick(Window *w)
int selected = list[0]->result; int selected = list[0]->result;
ShowDropDownList(w, std::move(list), selected, WID_TN_LEAGUE, 140, true); ShowDropDownList(w, std::move(list), selected, WID_TN_LEAGUE, 140, true);
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
return CBF_NONE; return CBF_NONE;
} }
@ -876,7 +876,7 @@ static CallBackFunction ToolbarZoomOutClick(Window *w)
static CallBackFunction ToolbarBuildRailClick(Window *w) static CallBackFunction ToolbarBuildRailClick(Window *w)
{ {
ShowDropDownList(w, GetRailTypeDropDownList(), _last_built_railtype, WID_TN_RAILS, 140, true); ShowDropDownList(w, GetRailTypeDropDownList(), _last_built_railtype, WID_TN_RAILS, 140, true);
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
return CBF_NONE; return CBF_NONE;
} }
@ -898,7 +898,7 @@ static CallBackFunction MenuClickBuildRail(int index)
static CallBackFunction ToolbarBuildRoadClick(Window *w) static CallBackFunction ToolbarBuildRoadClick(Window *w)
{ {
ShowDropDownList(w, GetRoadTypeDropDownList(RTTB_ROAD), _last_built_roadtype, WID_TN_ROADS, 140, true); ShowDropDownList(w, GetRoadTypeDropDownList(RTTB_ROAD), _last_built_roadtype, WID_TN_ROADS, 140, true);
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
return CBF_NONE; return CBF_NONE;
} }
@ -920,7 +920,7 @@ static CallBackFunction MenuClickBuildRoad(int index)
static CallBackFunction ToolbarBuildTramClick(Window *w) static CallBackFunction ToolbarBuildTramClick(Window *w)
{ {
ShowDropDownList(w, GetRoadTypeDropDownList(RTTB_TRAM), _last_built_tramtype, WID_TN_TRAMS, 140, true); ShowDropDownList(w, GetRoadTypeDropDownList(RTTB_TRAM), _last_built_tramtype, WID_TN_TRAMS, 140, true);
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
return CBF_NONE; return CBF_NONE;
} }
@ -944,7 +944,7 @@ static CallBackFunction ToolbarBuildWaterClick(Window *w)
DropDownList list; DropDownList list;
list.push_back(MakeDropDownListIconItem(SPR_IMG_BUILD_CANAL, PAL_NONE, STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION, 0)); list.push_back(MakeDropDownListIconItem(SPR_IMG_BUILD_CANAL, PAL_NONE, STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION, 0));
ShowDropDownList(w, std::move(list), 0, WID_TN_WATER, 140, true); ShowDropDownList(w, std::move(list), 0, WID_TN_WATER, 140, true);
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
return CBF_NONE; return CBF_NONE;
} }
@ -966,7 +966,7 @@ static CallBackFunction ToolbarBuildAirClick(Window *w)
DropDownList list; DropDownList list;
list.push_back(MakeDropDownListIconItem(SPR_IMG_AIRPORT, PAL_NONE, STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION, 0)); list.push_back(MakeDropDownListIconItem(SPR_IMG_AIRPORT, PAL_NONE, STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION, 0));
ShowDropDownList(w, std::move(list), 0, WID_TN_AIR, 140, true); ShowDropDownList(w, std::move(list), 0, WID_TN_AIR, 140, true);
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
return CBF_NONE; return CBF_NONE;
} }
@ -990,7 +990,7 @@ static CallBackFunction ToolbarForestClick(Window *w)
list.push_back(MakeDropDownListIconItem(SPR_IMG_PLANTTREES, PAL_NONE, STR_LANDSCAPING_MENU_PLANT_TREES, 1)); list.push_back(MakeDropDownListIconItem(SPR_IMG_PLANTTREES, PAL_NONE, STR_LANDSCAPING_MENU_PLANT_TREES, 1));
list.push_back(MakeDropDownListIconItem(SPR_IMG_SIGN, PAL_NONE, STR_LANDSCAPING_MENU_PLACE_SIGN, 2)); list.push_back(MakeDropDownListIconItem(SPR_IMG_SIGN, PAL_NONE, STR_LANDSCAPING_MENU_PLACE_SIGN, 2));
ShowDropDownList(w, std::move(list), 0, WID_TN_LANDSCAPE, 100, true); ShowDropDownList(w, std::move(list), 0, WID_TN_LANDSCAPE, 100, true);
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
return CBF_NONE; return CBF_NONE;
} }
@ -1186,7 +1186,7 @@ static CallBackFunction ToolbarSwitchClick(Window *w)
w->ReInit(); w->ReInit();
w->SetWidgetLoweredState(_game_mode == GM_EDITOR ? (WidgetID)WID_TE_SWITCH_BAR : (WidgetID)WID_TN_SWITCH_BAR, _toolbar_mode == TB_LOWER); w->SetWidgetLoweredState(_game_mode == GM_EDITOR ? (WidgetID)WID_TE_SWITCH_BAR : (WidgetID)WID_TN_SWITCH_BAR, _toolbar_mode == TB_LOWER);
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
return CBF_NONE; return CBF_NONE;
} }
@ -1260,7 +1260,7 @@ static CallBackFunction ToolbarScenGenIndustry(Window *w)
static CallBackFunction ToolbarScenBuildRoadClick(Window *w) static CallBackFunction ToolbarScenBuildRoadClick(Window *w)
{ {
ShowDropDownList(w, GetScenRoadTypeDropDownList(RTTB_ROAD), _last_built_roadtype, WID_TE_ROADS, 140, true); ShowDropDownList(w, GetScenRoadTypeDropDownList(RTTB_ROAD), _last_built_roadtype, WID_TE_ROADS, 140, true);
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
return CBF_NONE; return CBF_NONE;
} }
@ -1280,7 +1280,7 @@ static CallBackFunction ToolbarScenBuildRoad(int index)
static CallBackFunction ToolbarScenBuildTramClick(Window *w) static CallBackFunction ToolbarScenBuildTramClick(Window *w)
{ {
ShowDropDownList(w, GetScenRoadTypeDropDownList(RTTB_TRAM), _last_built_tramtype, WID_TE_TRAMS, 140, true); ShowDropDownList(w, GetScenRoadTypeDropDownList(RTTB_TRAM), _last_built_tramtype, WID_TE_TRAMS, 140, true);
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
return CBF_NONE; return CBF_NONE;
} }
@ -2400,7 +2400,7 @@ struct ScenarioEditorToolbarWindow : Window {
{ {
CallBackFunction cbf = _scen_toolbar_dropdown_procs[widget](index); CallBackFunction cbf = _scen_toolbar_dropdown_procs[widget](index);
if (cbf != CBF_NONE) _last_started_action = cbf; if (cbf != CBF_NONE) _last_started_action = cbf;
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
} }
EventState OnHotkey(int hotkey) override EventState OnHotkey(int hotkey) override

View File

@ -284,7 +284,15 @@ static void DrawTile_Town(TileInfo *ti)
/* Add a house on top of the ground? */ /* Add a house on top of the ground? */
SpriteID image = dcts->building.sprite; SpriteID image = dcts->building.sprite;
if (image != 0) { if (image != 0) {
AddSortableSpriteToDraw(image, dcts->building.pal, *ti, *dcts, IsTransparencySet(TO_HOUSES)); AddSortableSpriteToDraw(image, dcts->building.pal,
ti->x + dcts->subtile_x,
ti->y + dcts->subtile_y,
dcts->width,
dcts->height,
dcts->dz,
ti->z,
IsTransparencySet(TO_HOUSES)
);
if (IsTransparencySet(TO_HOUSES)) return; if (IsTransparencySet(TO_HOUSES)) return;
} }

View File

@ -286,9 +286,10 @@ public:
new_show_state ? _town_local_authority_kdtree.Insert(index) : _town_local_authority_kdtree.Remove(index); new_show_state ? _town_local_authority_kdtree.Insert(index) : _town_local_authority_kdtree.Remove(index);
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
this->town->show_zone = new_show_state; this->town->show_zone = new_show_state;
this->SetWidgetLoweredState(widget, new_show_state); this->SetWidgetLoweredState(widget, new_show_state);
SndClickBeep();
MarkWholeScreenDirty(); MarkWholeScreenDirty();
break; break;
} }
@ -1377,7 +1378,7 @@ void DrawHouseInGUI(int x, int y, HouseID house_id, int view)
/* Add a house on top of the ground? */ /* Add a house on top of the ground? */
if (dcts.building.sprite != 0) { if (dcts.building.sprite != 0) {
Point pt = RemapCoords(dcts.origin.x, dcts.origin.y, dcts.origin.z); Point pt = RemapCoords(dcts.subtile_x, dcts.subtile_y, 0);
DrawSprite(dcts.building.sprite, dcts.building.pal, x + UnScaleGUI(pt.x), y + UnScaleGUI(pt.y)); DrawSprite(dcts.building.sprite, dcts.building.pal, x + UnScaleGUI(pt.x), y + UnScaleGUI(pt.y));
} }
}; };
@ -1740,7 +1741,7 @@ struct BuildHouseWindow : public PickerWindow {
this->SetWidgetLoweredState(WID_BH_PROTECT_OFF, !BuildHouseWindow::house_protected); this->SetWidgetLoweredState(WID_BH_PROTECT_OFF, !BuildHouseWindow::house_protected);
this->SetWidgetLoweredState(WID_BH_PROTECT_ON, BuildHouseWindow::house_protected); this->SetWidgetLoweredState(WID_BH_PROTECT_ON, BuildHouseWindow::house_protected);
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
this->SetDirty(); this->SetDirty();
break; break;

View File

@ -1491,7 +1491,13 @@ CommandCost CmdSellRailWagon(DoCommandFlags flags, Vehicle *t, bool sell_chain,
void Train::UpdateDeltaXY() void Train::UpdateDeltaXY()
{ {
/* Set common defaults. */ /* Set common defaults. */
this->bounds = {{-1, -1, 0}, {3, 3, 6}, {}}; this->x_offs = -1;
this->y_offs = -1;
this->x_extent = 3;
this->y_extent = 3;
this->z_extent = 6;
this->x_bb_offs = 0;
this->y_bb_offs = 0;
/* Set if flipped and engine is NOT flagged with custom flip handling. */ /* Set if flipped and engine is NOT flagged with custom flip handling. */
int flipped = this->flags.Test(VehicleRailFlag::Flipped) && !EngInfo(this->engine_type)->misc_flags.Test(EngineMiscFlag::RailFlips); int flipped = this->flags.Test(VehicleRailFlag::Flipped) && !EngInfo(this->engine_type)->misc_flags.Test(EngineMiscFlag::RailFlips);
@ -1502,47 +1508,50 @@ void Train::UpdateDeltaXY()
if (flipped) dir = ReverseDir(dir); if (flipped) dir = ReverseDir(dir);
if (!IsDiagonalDirection(dir)) { if (!IsDiagonalDirection(dir)) {
static const Point _sign_table[] = { static const int _sign_table[] =
{
/* x, y */ /* x, y */
{-1, -1}, // DIR_N -1, -1, // DIR_N
{-1, 1}, // DIR_E -1, 1, // DIR_E
{ 1, 1}, // DIR_S 1, 1, // DIR_S
{ 1, -1}, // DIR_W 1, -1, // DIR_W
}; };
int half_shorten = (VEHICLE_LENGTH - this->gcache.cached_veh_length + flipped) / 2; int half_shorten = (VEHICLE_LENGTH - this->gcache.cached_veh_length + flipped) / 2;
/* For all straight directions, move the bound box to the centre of the vehicle, but keep the size. */ /* For all straight directions, move the bound box to the centre of the vehicle, but keep the size. */
this->bounds.offset.x -= half_shorten * _sign_table[DirToDiagDir(dir)].x; this->x_offs -= half_shorten * _sign_table[dir];
this->bounds.offset.y -= half_shorten * _sign_table[DirToDiagDir(dir)].y; this->y_offs -= half_shorten * _sign_table[dir + 1];
this->x_extent += this->x_bb_offs = half_shorten * _sign_table[dir];
this->y_extent += this->y_bb_offs = half_shorten * _sign_table[dir + 1];
} else { } else {
switch (dir) { switch (dir) {
/* Shorten southern corner of the bounding box according the vehicle length /* Shorten southern corner of the bounding box according the vehicle length
* and center the bounding box on the vehicle. */ * and center the bounding box on the vehicle. */
case DIR_NE: case DIR_NE:
this->bounds.origin.x = -(this->gcache.cached_veh_length + 1) / 2 + flip_offs; this->x_offs = 1 - (this->gcache.cached_veh_length + 1) / 2 + flip_offs;
this->bounds.extent.x = this->gcache.cached_veh_length; this->x_extent = this->gcache.cached_veh_length - 1;
this->bounds.offset.x = 1; this->x_bb_offs = -1;
break; break;
case DIR_NW: case DIR_NW:
this->bounds.origin.y = -(this->gcache.cached_veh_length + 1) / 2 + flip_offs; this->y_offs = 1 - (this->gcache.cached_veh_length + 1) / 2 + flip_offs;
this->bounds.extent.y = this->gcache.cached_veh_length; this->y_extent = this->gcache.cached_veh_length - 1;
this->bounds.offset.y = 1; this->y_bb_offs = -1;
break; break;
/* Move northern corner of the bounding box down according to vehicle length /* Move northern corner of the bounding box down according to vehicle length
* and center the bounding box on the vehicle. */ * and center the bounding box on the vehicle. */
case DIR_SW: case DIR_SW:
this->bounds.origin.x = -(this->gcache.cached_veh_length) / 2 - flip_offs; this->x_offs = 1 + (this->gcache.cached_veh_length + 1) / 2 - VEHICLE_LENGTH - flip_offs;
this->bounds.extent.x = this->gcache.cached_veh_length; this->x_extent = VEHICLE_LENGTH - 1;
this->bounds.offset.x = 1 - (VEHICLE_LENGTH - this->gcache.cached_veh_length); this->x_bb_offs = VEHICLE_LENGTH - this->gcache.cached_veh_length - 1;
break; break;
case DIR_SE: case DIR_SE:
this->bounds.origin.y = -(this->gcache.cached_veh_length) / 2 - flip_offs; this->y_offs = 1 + (this->gcache.cached_veh_length + 1) / 2 - VEHICLE_LENGTH - flip_offs;
this->bounds.extent.y = this->gcache.cached_veh_length; this->y_extent = VEHICLE_LENGTH - 1;
this->bounds.offset.y = 1 - (VEHICLE_LENGTH - this->gcache.cached_veh_length); this->y_bb_offs = VEHICLE_LENGTH - this->gcache.cached_veh_length - 1;
break; break;
default: default:

View File

@ -80,7 +80,7 @@ public:
} else { } else {
/* toggle the bit of the transparencies variable and play a sound */ /* toggle the bit of the transparencies variable and play a sound */
ToggleTransparency((TransparencyOption)(widget - WID_TT_BEGIN)); ToggleTransparency((TransparencyOption)(widget - WID_TT_BEGIN));
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
MarkWholeScreenDirty(); MarkWholeScreenDirty();
} }
} else if (widget == WID_TT_BUTTONS) { } else if (widget == WID_TT_BUTTONS) {
@ -94,7 +94,7 @@ public:
if (i == WID_TT_TEXT|| i == WID_TT_END) return; if (i == WID_TT_TEXT|| i == WID_TT_END) return;
ToggleInvisibility((TransparencyOption)(i - WID_TT_BEGIN)); ToggleInvisibility((TransparencyOption)(i - WID_TT_BEGIN));
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
/* Redraw whole screen only if transparency is set */ /* Redraw whole screen only if transparency is set */
if (IsTransparencySet((TransparencyOption)(i - WID_TT_BEGIN))) { if (IsTransparencySet((TransparencyOption)(i - WID_TT_BEGIN))) {

View File

@ -635,7 +635,7 @@ CommandCost CmdPlantTree(DoCommandFlags flags, TileIndex tile, TileIndex start_t
} }
struct TreeListEnt : PalSpriteID { struct TreeListEnt : PalSpriteID {
int8_t x, y; uint8_t x, y;
}; };
static void DrawTile_Trees(TileInfo *ti) static void DrawTile_Trees(TileInfo *ti)
@ -699,8 +699,7 @@ static void DrawTile_Trees(TileInfo *ti)
} }
} }
SpriteBounds bounds{{}, {TILE_SIZE, TILE_SIZE, 48}, {te[mi].x, te[mi].y, 0}}; AddSortableSpriteToDraw(te[mi].sprite, te[mi].pal, ti->x + te[mi].x, ti->y + te[mi].y, 16 - te[mi].x, 16 - te[mi].y, 0x30, z, IsTransparencySet(TO_TREES), -te[mi].x, -te[mi].y);
AddSortableSpriteToDraw(te[mi].sprite, te[mi].pal, ti->x, ti->y, z, bounds, IsTransparencySet(TO_TREES));
/* replace the removed one with the last one */ /* replace the removed one with the last one */
te[mi] = te[trees - 1]; te[mi] = te[trees - 1];

View File

@ -102,7 +102,7 @@ class BuildTreesWindow : public Window
if (this->tree_to_plant >= 0) { if (this->tree_to_plant >= 0) {
/* Activate placement */ /* Activate placement */
SndConfirmBeep(); if (_settings_client.sound.confirm) SndPlayFx(SND_15_BEEP);
SetObjectToPlace(SPR_CURSOR_TREE, PAL_NONE, HT_RECT | HT_DIAGONAL, this->window_class, this->window_number); SetObjectToPlace(SPR_CURSOR_TREE, PAL_NONE, HT_RECT | HT_DIAGONAL, this->window_class, this->window_number);
this->tree_to_plant = current_tree; // SetObjectToPlace may call ResetObjectToPlace which may reset tree_to_plant to -1 this->tree_to_plant = current_tree; // SetObjectToPlace may call ResetObjectToPlace which may reset tree_to_plant to -1
} else { } else {
@ -180,7 +180,7 @@ public:
break; break;
case WID_BT_MANY_RANDOM: // place trees randomly over the landscape case WID_BT_MANY_RANDOM: // place trees randomly over the landscape
SndConfirmBeep(); if (_settings_client.sound.confirm) SndPlayFx(SND_15_BEEP);
PlaceTreesRandomly(); PlaceTreesRandomly();
MarkWholeScreenDirty(); MarkWholeScreenDirty();
break; break;

View File

@ -138,58 +138,15 @@ bool HasBridgeFlatRamp(Slope tileh, Axis axis)
return (tileh != SLOPE_FLAT); return (tileh != SLOPE_FLAT);
} }
/** static inline std::span<const PalSpriteID> GetBridgeSpriteTable(int index, BridgePieces table)
* Get the sprite table for a rail/road bridge piece.
* @param bridge_type Bridge type.
* @param piece Bridge piece.
* @return Sprite table for the bridge piece.
*/
static std::span<const PalSpriteID> GetBridgeSpriteTable(BridgeType bridge_type, BridgePieces piece)
{ {
assert(piece < NUM_BRIDGE_PIECES); const BridgeSpec *bridge = GetBridgeSpec(index);
assert(table < NUM_BRIDGE_PIECES);
if (table < bridge->sprite_table.size() && !bridge->sprite_table[table].empty()) return bridge->sprite_table[table];
const BridgeSpec *bridge = GetBridgeSpec(bridge_type); return _bridge_sprite_table[index][table];
if (piece < bridge->sprite_table.size() && !bridge->sprite_table[piece].empty()) return bridge->sprite_table[piece];
return _bridge_sprite_table[bridge_type][piece];
} }
/**
* Get the sprite table transport type base offset for a rail/road bridge.
* @param transport_type Transport type of bridge.
* @param ramp Tile of bridge ramp.
* @return Offset for transport type.
*/
static uint8_t GetBridgeSpriteTableBaseOffset(TransportType transport_type, TileIndex ramp)
{
switch (transport_type) {
case TRANSPORT_RAIL: return GetRailTypeInfo(GetRailType(ramp))->bridge_offset;
case TRANSPORT_ROAD: return 8;
default: NOT_REACHED();
}
}
/**
* Get bridge sprite table base offset for the ramp part of bridge.
* @param diagdir Direction of ramp.
* @return Offset for direction.
*/
static uint8_t GetBridgeRampDirectionBaseOffset(DiagDirection diagdir)
{
/* Bridge ramps are ordered SW, SE, NE, NW instead of NE, SE, SW, NW. */
static constexpr uint8_t ramp_offsets[DIAGDIR_END] = {2, 1, 0, 3};
return ramp_offsets[diagdir];
}
/**
* Get bridge sprite table base offset for the middle part of bridge.
* @param axis Axis of bridge.
* @return Offset for axis.
*/
static uint8_t GetBridgeMiddleAxisBaseOffset(Axis axis)
{
return axis == AXIS_X ? 0 : 4;
}
/** /**
* Determines the foundation for the bridge head, and tests if the resulting slope is valid. * Determines the foundation for the bridge head, and tests if the resulting slope is valid.
@ -1060,10 +1017,10 @@ static CommandCost ClearTile_TunnelBridge(TileIndex tile, DoCommandFlags flags)
* @param h Bounding box size in Y direction * @param h Bounding box size in Y direction
* @param subsprite Optional subsprite for drawing halfpillars * @param subsprite Optional subsprite for drawing halfpillars
*/ */
static inline void DrawPillar(const PalSpriteID &psid, int x, int y, int z, uint8_t w, uint8_t h, const SubSprite *subsprite) static inline void DrawPillar(const PalSpriteID *psid, int x, int y, int z, int w, int h, const SubSprite *subsprite)
{ {
static const int PILLAR_Z_OFFSET = TILE_HEIGHT - BRIDGE_Z_START; ///< Start offset of pillar wrt. bridge (downwards) static const int PILLAR_Z_OFFSET = TILE_HEIGHT - BRIDGE_Z_START; ///< Start offset of pillar wrt. bridge (downwards)
AddSortableSpriteToDraw(psid.sprite, psid.pal, x, y, z, {{0, 0, -PILLAR_Z_OFFSET}, {w, h, BB_HEIGHT_UNDER_BRIDGE}, {0, 0, PILLAR_Z_OFFSET}}, IsTransparencySet(TO_BRIDGES), subsprite); AddSortableSpriteToDraw(psid->sprite, psid->pal, x, y, w, h, BB_HEIGHT_UNDER_BRIDGE - PILLAR_Z_OFFSET, z, IsTransparencySet(TO_BRIDGES), 0, 0, -PILLAR_Z_OFFSET, subsprite);
} }
/** /**
@ -1077,7 +1034,7 @@ static inline void DrawPillar(const PalSpriteID &psid, int x, int y, int z, uint
* @param h Bounding box size in Y direction * @param h Bounding box size in Y direction
* @return Reached Z at the bottom * @return Reached Z at the bottom
*/ */
static int DrawPillarColumn(int z_bottom, int z_top, const PalSpriteID &psid, int x, int y, int w, int h) static int DrawPillarColumn(int z_bottom, int z_top, const PalSpriteID *psid, int x, int y, int w, int h)
{ {
int cur_z; int cur_z;
for (cur_z = z_top; cur_z >= z_bottom; cur_z -= TILE_HEIGHT) { for (cur_z = z_top; cur_z >= z_bottom; cur_z -= TILE_HEIGHT) {
@ -1097,7 +1054,7 @@ static int DrawPillarColumn(int z_bottom, int z_top, const PalSpriteID &psid, in
* @param y Sprite Y position of front pillar. * @param y Sprite Y position of front pillar.
* @param z_bridge Absolute height of bridge bottom. * @param z_bridge Absolute height of bridge bottom.
*/ */
static void DrawBridgePillars(const PalSpriteID &psid, const TileInfo *ti, Axis axis, bool drawfarpillar, int x, int y, int z_bridge) static void DrawBridgePillars(const PalSpriteID *psid, const TileInfo *ti, Axis axis, bool drawfarpillar, int x, int y, int z_bridge)
{ {
static const int bounding_box_size[2] = {16, 2}; ///< bounding box size of pillars along bridge direction static const int bounding_box_size[2] = {16, 2}; ///< bounding box size of pillars along bridge direction
static const int back_pillar_offset[2] = { 0, 9}; ///< sprite position offset of back facing pillar static const int back_pillar_offset[2] = { 0, 9}; ///< sprite position offset of back facing pillar
@ -1108,7 +1065,7 @@ static void DrawBridgePillars(const PalSpriteID &psid, const TileInfo *ti, Axis
{ { -INF, -INF, 15, INF }, { 16, -INF, INF, INF } }, // Y axis, north and south { { -INF, -INF, 15, INF }, { 16, -INF, INF, INF } }, // Y axis, north and south
}; };
if (psid.sprite == 0) return; if (psid->sprite == 0) return;
/* Determine ground height under pillars */ /* Determine ground height under pillars */
DiagDirection south_dir = AxisToDiagDir(axis); DiagDirection south_dir = AxisToDiagDir(axis);
@ -1237,20 +1194,18 @@ static void DrawBridgeRoadBits(TileIndex head_tile, int x, int y, int z, int off
} }
} }
static constexpr SpriteBounds back_bounds[6] = { static const uint size_x[6] = { 1, 16, 16, 1, 16, 1 };
{{}, {0, TILE_SIZE, 40}, {}}, static const uint size_y[6] = { 16, 1, 1, 16, 1, 16 };
{{}, {TILE_SIZE, 0, 40}, {}}, static const uint front_bb_offset_x[6] = { 15, 0, 0, 15, 0, 15 };
{{}, {TILE_SIZE, 0, 40}, {}}, static const uint front_bb_offset_y[6] = { 0, 15, 15, 0, 15, 0 };
{{}, {0, TILE_SIZE, 40}, {}},
{{}, {TILE_SIZE, 0, 40}, {}},
{{}, {0, TILE_SIZE, 40}, {}},
};
/* The sprites under the vehicles are drawn as SpriteCombine. StartSpriteCombine() has already been called /* The sprites under the vehicles are drawn as SpriteCombine. StartSpriteCombine() has already been called
* The bounding boxes here are the same as for bridge front/roof */ * The bounding boxes here are the same as for bridge front/roof */
for (uint i = 0; i < lengthof(seq_back); ++i) { for (uint i = 0; i < lengthof(seq_back); ++i) {
if (seq_back[i] != 0) { if (seq_back[i] != 0) {
AddSortableSpriteToDraw(seq_back[i], PAL_NONE, x, y, z, back_bounds[offset], trans_back[i]); AddSortableSpriteToDraw(seq_back[i], PAL_NONE,
x, y, size_x[offset], size_y[offset], 0x28, z,
trans_back[i]);
} }
} }
@ -1258,18 +1213,12 @@ static void DrawBridgeRoadBits(TileIndex head_tile, int x, int y, int z, int off
EndSpriteCombine(); EndSpriteCombine();
StartSpriteCombine(); StartSpriteCombine();
static constexpr SpriteBounds front_bounds[6] = {
{{15, 0, 0}, {0, TILE_SIZE, 40}, {-15, 0, 0}},
{{0, 15, 0}, {TILE_SIZE, 0, 40}, {0, -15, 0}},
{{0, 15, 0}, {TILE_SIZE, 0, 40}, {0, -15, 0}},
{{15, 0, 0}, {0, TILE_SIZE, 40}, {-15, 0, 0}},
{{0, 15, 0}, {TILE_SIZE, 0, 40}, {0, -15, 0}},
{{15, 0, 0}, {0, TILE_SIZE, 40}, {-15, 0, 0}},
};
for (uint i = 0; i < lengthof(seq_front); ++i) { for (uint i = 0; i < lengthof(seq_front); ++i) {
if (seq_front[i] != 0) { if (seq_front[i] != 0) {
AddSortableSpriteToDraw(seq_front[i], PAL_NONE, x, y, z, front_bounds[offset], trans_front[i]); AddSortableSpriteToDraw(seq_front[i], PAL_NONE,
x, y, size_x[offset] + front_bb_offset_x[offset], size_y[offset] + front_bb_offset_y[offset], 0x28, z,
trans_front[i],
front_bb_offset_x[offset], front_bb_offset_y[offset]);
} }
} }
} }
@ -1302,35 +1251,15 @@ static void DrawTile_TunnelBridge(TileInfo *ti)
* *
*/ */
/* Tunnel sprites are positioned at 15,15, but the bounding box covers most of the tile. */ static const int _tunnel_BB[4][12] = {
static constexpr SpriteBounds roof_bounds[DIAGDIR_END] = { /* tunnnel-roof | Z-separator | tram-catenary
{{0, 1, BB_Z_SEPARATOR}, {TILE_SIZE, TILE_SIZE - 1, 1}, {TILE_SIZE - 1, TILE_SIZE - 2, -BB_Z_SEPARATOR}}, // NE * w h bb_x bb_y| x y w h |bb_x bb_y w h */
{{1, 0, BB_Z_SEPARATOR}, {TILE_SIZE - 1, TILE_SIZE, 1}, {TILE_SIZE - 2, TILE_SIZE - 1, -BB_Z_SEPARATOR}}, // SE { 1, 0, -15, -14, 0, 15, 16, 1, 0, 1, 16, 15 }, // NE
{{0, 1, BB_Z_SEPARATOR}, {TILE_SIZE, TILE_SIZE - 1, 1}, {TILE_SIZE - 1, TILE_SIZE - 2, -BB_Z_SEPARATOR}}, // SW { 0, 1, -14, -15, 15, 0, 1, 16, 1, 0, 15, 16 }, // SE
{{1, 0, BB_Z_SEPARATOR}, {TILE_SIZE - 1, TILE_SIZE, 1}, {TILE_SIZE - 2, TILE_SIZE - 1, -BB_Z_SEPARATOR}}, // NW { 1, 0, -15, -14, 0, 15, 16, 1, 0, 1, 16, 15 }, // SW
}; { 0, 1, -14, -15, 15, 0, 1, 16, 1, 0, 15, 16 }, // NW
/* Catenary sprites are positioned at 0,0, with the same bounding box as above. */
static constexpr SpriteBounds catenary_bounds[DIAGDIR_END] = {
{{0, 1, BB_Z_SEPARATOR}, {TILE_SIZE, TILE_SIZE - 1, 1}, {0, -1, -BB_Z_SEPARATOR}}, // NE
{{1, 0, BB_Z_SEPARATOR}, {TILE_SIZE - 1, TILE_SIZE, 1}, {-1, 0, -BB_Z_SEPARATOR}}, // SE
{{0, 1, BB_Z_SEPARATOR}, {TILE_SIZE, TILE_SIZE - 1, 1}, {0, -1, -BB_Z_SEPARATOR}}, // SW
{{1, 0, BB_Z_SEPARATOR}, {TILE_SIZE - 1, TILE_SIZE, 1}, {-1, 0, -BB_Z_SEPARATOR}}, // NW
};
static constexpr SpriteBounds rear_sep[DIAGDIR_END] = {
{{}, {TILE_SIZE, 1, TILE_HEIGHT}, {}}, // NE
{{}, {1, TILE_SIZE, TILE_HEIGHT}, {}}, // SE
{{}, {TILE_SIZE, 1, TILE_HEIGHT}, {}}, // SW
{{}, {1, TILE_SIZE, TILE_HEIGHT}, {}}, // NW
};
static constexpr SpriteBounds front_sep[DIAGDIR_END] = {
{{0, TILE_SIZE - 1, 0}, {TILE_SIZE, 1, TILE_HEIGHT}, {}}, // NE
{{TILE_SIZE - 1, 0, 0}, {1, TILE_SIZE, TILE_HEIGHT}, {}}, // SE
{{0, TILE_SIZE - 1, 0}, {TILE_SIZE, 1, TILE_HEIGHT}, {}}, // SW
{{TILE_SIZE - 1, 0, 0}, {1, TILE_SIZE, TILE_HEIGHT}, {}}, // NW
}; };
const int *BB_data = _tunnel_BB[tunnelbridge_direction];
bool catenary = false; bool catenary = false;
@ -1403,7 +1332,7 @@ static void DrawTile_TunnelBridge(TileInfo *ti)
if (catenary_sprite_base != 0) { if (catenary_sprite_base != 0) {
catenary = true; catenary = true;
StartSpriteCombine(); StartSpriteCombine();
AddSortableSpriteToDraw(catenary_sprite_base + tunnelbridge_direction, PAL_NONE, *ti, catenary_bounds[tunnelbridge_direction], IsTransparencySet(TO_CATENARY)); AddSortableSpriteToDraw(catenary_sprite_base + tunnelbridge_direction, PAL_NONE, ti->x, ti->y, BB_data[10], BB_data[11], TILE_HEIGHT, ti->z, IsTransparencySet(TO_CATENARY), BB_data[8], BB_data[9], BB_Z_SEPARATOR);
} }
} else { } else {
const RailTypeInfo *rti = GetRailTypeInfo(GetRailType(ti->tile)); const RailTypeInfo *rti = GetRailTypeInfo(GetRailType(ti->tile));
@ -1435,32 +1364,46 @@ static void DrawTile_TunnelBridge(TileInfo *ti)
if (railtype_overlay != 0 && !catenary) StartSpriteCombine(); if (railtype_overlay != 0 && !catenary) StartSpriteCombine();
AddSortableSpriteToDraw(image + 1, PAL_NONE, *ti, roof_bounds[tunnelbridge_direction], false); AddSortableSpriteToDraw(image + 1, PAL_NONE, ti->x + TILE_SIZE - 1, ti->y + TILE_SIZE - 1, BB_data[0], BB_data[1], TILE_HEIGHT, ti->z, false, BB_data[2], BB_data[3], BB_Z_SEPARATOR);
/* Draw railtype tunnel portal overlay if defined. */ /* Draw railtype tunnel portal overlay if defined. */
if (railtype_overlay != 0) AddSortableSpriteToDraw(railtype_overlay + tunnelbridge_direction, PAL_NONE, *ti, roof_bounds[tunnelbridge_direction], false); if (railtype_overlay != 0) AddSortableSpriteToDraw(railtype_overlay + tunnelbridge_direction, PAL_NONE, ti->x + TILE_SIZE - 1, ti->y + TILE_SIZE - 1, BB_data[0], BB_data[1], TILE_HEIGHT, ti->z, false, BB_data[2], BB_data[3], BB_Z_SEPARATOR);
if (catenary || railtype_overlay != 0) EndSpriteCombine(); if (catenary || railtype_overlay != 0) EndSpriteCombine();
/* Add helper BB for sprite sorting that separates the tunnel from things beside of it. */ /* Add helper BB for sprite sorting that separates the tunnel from things beside of it. */
AddSortableSpriteToDraw(SPR_EMPTY_BOUNDING_BOX, PAL_NONE, *ti, rear_sep[tunnelbridge_direction]); AddSortableSpriteToDraw(SPR_EMPTY_BOUNDING_BOX, PAL_NONE, ti->x, ti->y, BB_data[6], BB_data[7], TILE_HEIGHT, ti->z);
AddSortableSpriteToDraw(SPR_EMPTY_BOUNDING_BOX, PAL_NONE, *ti, front_sep[tunnelbridge_direction]); AddSortableSpriteToDraw(SPR_EMPTY_BOUNDING_BOX, PAL_NONE, ti->x + BB_data[4], ti->y + BB_data[5], BB_data[6], BB_data[7], TILE_HEIGHT, ti->z);
DrawBridgeMiddle(ti); DrawBridgeMiddle(ti);
} else { // IsBridge(ti->tile) } else { // IsBridge(ti->tile)
const PalSpriteID *psid;
int base_offset;
bool ice = HasTunnelBridgeSnowOrDesert(ti->tile);
if (transport_type == TRANSPORT_RAIL) {
base_offset = GetRailTypeInfo(GetRailType(ti->tile))->bridge_offset;
assert(base_offset != 8); // This one is used for roads
} else {
base_offset = 8;
}
/* as the lower 3 bits are used for other stuff, make sure they are clear */
assert( (base_offset & 0x07) == 0x00);
DrawFoundation(ti, GetBridgeFoundation(ti->tileh, DiagDirToAxis(tunnelbridge_direction))); DrawFoundation(ti, GetBridgeFoundation(ti->tileh, DiagDirToAxis(tunnelbridge_direction)));
uint base_offset = GetBridgeRampDirectionBaseOffset(tunnelbridge_direction); /* HACK Wizardry to convert the bridge ramp direction into a sprite offset */
std::span<const PalSpriteID> psid; base_offset += (6 - tunnelbridge_direction) % 4;
/* Table number BRIDGE_PIECE_HEAD always refers to the bridge heads for any bridge type */
if (transport_type != TRANSPORT_WATER) { if (transport_type != TRANSPORT_WATER) {
if (ti->tileh == SLOPE_FLAT) base_offset += 4; // sloped bridge head if (ti->tileh == SLOPE_FLAT) base_offset += 4; // sloped bridge head
base_offset += GetBridgeSpriteTableBaseOffset(transport_type, ti->tile); psid = &GetBridgeSpriteTable(GetBridgeType(ti->tile), BRIDGE_PIECE_HEAD)[base_offset];
psid = GetBridgeSpriteTable(GetBridgeType(ti->tile), BRIDGE_PIECE_HEAD);
} else { } else {
psid = _aqueduct_sprite_table_heads; psid = _aqueduct_sprites + base_offset;
} }
psid = psid.subspan(base_offset, 1);
if (!HasTunnelBridgeSnowOrDesert(ti->tile)) { if (!ice) {
TileIndex next = ti->tile + TileOffsByDiagDir(tunnelbridge_direction); TileIndex next = ti->tile + TileOffsByDiagDir(tunnelbridge_direction);
if (ti->tileh != SLOPE_FLAT && ti->z == 0 && HasTileWaterClass(next) && GetWaterClass(next) == WATER_CLASS_SEA) { if (ti->tileh != SLOPE_FLAT && ti->z == 0 && HasTileWaterClass(next) && GetWaterClass(next) == WATER_CLASS_SEA) {
DrawShoreTile(ti->tileh); DrawShoreTile(ti->tileh);
@ -1480,7 +1423,7 @@ static void DrawTile_TunnelBridge(TileInfo *ti)
* it doesn't disappear behind it * it doesn't disappear behind it
*/ */
/* Bridge heads are drawn solid no matter how invisibility/transparency is set */ /* Bridge heads are drawn solid no matter how invisibility/transparency is set */
AddSortableSpriteToDraw(psid[0].sprite, psid[0].pal, *ti, {{}, {TILE_SIZE, TILE_SIZE, static_cast<uint8_t>(ti->tileh == SLOPE_FLAT ? 0 : TILE_HEIGHT)}, {}}); AddSortableSpriteToDraw(psid->sprite, psid->pal, ti->x, ti->y, 16, 16, ti->tileh == SLOPE_FLAT ? 0 : 8, ti->z);
if (transport_type == TRANSPORT_ROAD) { if (transport_type == TRANSPORT_ROAD) {
uint offset = tunnelbridge_direction; uint offset = tunnelbridge_direction;
@ -1502,9 +1445,9 @@ static void DrawTile_TunnelBridge(TileInfo *ti)
SpriteID surface = GetCustomRailSprite(rti, ti->tile, RTSG_BRIDGE); SpriteID surface = GetCustomRailSprite(rti, ti->tile, RTSG_BRIDGE);
if (surface != 0) { if (surface != 0) {
if (HasBridgeFlatRamp(ti->tileh, DiagDirToAxis(tunnelbridge_direction))) { if (HasBridgeFlatRamp(ti->tileh, DiagDirToAxis(tunnelbridge_direction))) {
AddSortableSpriteToDraw(surface + ((DiagDirToAxis(tunnelbridge_direction) == AXIS_X) ? RTBO_X : RTBO_Y), PAL_NONE, *ti, {{0, 0, TILE_HEIGHT}, {TILE_SIZE, TILE_SIZE, 0}, {}}); AddSortableSpriteToDraw(surface + ((DiagDirToAxis(tunnelbridge_direction) == AXIS_X) ? RTBO_X : RTBO_Y), PAL_NONE, ti->x, ti->y, 16, 16, 0, ti->z + 8);
} else { } else {
AddSortableSpriteToDraw(surface + RTBO_SLOPE + tunnelbridge_direction, PAL_NONE, *ti, {{}, {TILE_SIZE, TILE_SIZE, TILE_HEIGHT}, {}}); AddSortableSpriteToDraw(surface + RTBO_SLOPE + tunnelbridge_direction, PAL_NONE, ti->x, ti->y, 16, 16, 8, ti->z);
} }
} }
/* Don't fallback to non-overlay sprite -- the spec states that /* Don't fallback to non-overlay sprite -- the spec states that
@ -1517,15 +1460,15 @@ static void DrawTile_TunnelBridge(TileInfo *ti)
if (rti->UsesOverlay()) { if (rti->UsesOverlay()) {
SpriteID overlay = GetCustomRailSprite(rti, ti->tile, RTSG_OVERLAY); SpriteID overlay = GetCustomRailSprite(rti, ti->tile, RTSG_OVERLAY);
if (HasBridgeFlatRamp(ti->tileh, DiagDirToAxis(tunnelbridge_direction))) { if (HasBridgeFlatRamp(ti->tileh, DiagDirToAxis(tunnelbridge_direction))) {
AddSortableSpriteToDraw(overlay + RTO_X + DiagDirToAxis(tunnelbridge_direction), PALETTE_CRASH, *ti, {{0, 0, TILE_HEIGHT}, {TILE_SIZE, TILE_SIZE, 0}, {}}); AddSortableSpriteToDraw(overlay + RTO_X + DiagDirToAxis(tunnelbridge_direction), PALETTE_CRASH, ti->x, ti->y, 16, 16, 0, ti->z + 8);
} else { } else {
AddSortableSpriteToDraw(overlay + RTO_SLOPE_NE + tunnelbridge_direction, PALETTE_CRASH, *ti, {{}, {TILE_SIZE, TILE_SIZE, TILE_HEIGHT}, {}}); AddSortableSpriteToDraw(overlay + RTO_SLOPE_NE + tunnelbridge_direction, PALETTE_CRASH, ti->x, ti->y, 16, 16, 8, ti->z);
} }
} else { } else {
if (HasBridgeFlatRamp(ti->tileh, DiagDirToAxis(tunnelbridge_direction))) { if (HasBridgeFlatRamp(ti->tileh, DiagDirToAxis(tunnelbridge_direction))) {
AddSortableSpriteToDraw(DiagDirToAxis(tunnelbridge_direction) == AXIS_X ? rti->base_sprites.single_x : rti->base_sprites.single_y, PALETTE_CRASH, *ti, {{0, 0, TILE_HEIGHT}, {TILE_SIZE, TILE_SIZE, 0}, {}}); AddSortableSpriteToDraw(DiagDirToAxis(tunnelbridge_direction) == AXIS_X ? rti->base_sprites.single_x : rti->base_sprites.single_y, PALETTE_CRASH, ti->x, ti->y, 16, 16, 0, ti->z + 8);
} else { } else {
AddSortableSpriteToDraw(rti->base_sprites.single_sloped + tunnelbridge_direction, PALETTE_CRASH, *ti, {{}, {TILE_SIZE, TILE_SIZE, TILE_HEIGHT}, {}}); AddSortableSpriteToDraw(rti->base_sprites.single_sloped + tunnelbridge_direction, PALETTE_CRASH, ti->x, ti->y, 16, 16, 8, ti->z);
} }
} }
} }
@ -1601,21 +1544,33 @@ void DrawBridgeMiddle(const TileInfo *ti)
TileIndex rampnorth = GetNorthernBridgeEnd(ti->tile); TileIndex rampnorth = GetNorthernBridgeEnd(ti->tile);
TileIndex rampsouth = GetSouthernBridgeEnd(ti->tile); TileIndex rampsouth = GetSouthernBridgeEnd(ti->tile);
TransportType transport_type = GetTunnelBridgeTransportType(rampsouth); TransportType transport_type = GetTunnelBridgeTransportType(rampsouth);
Axis axis = GetBridgeAxis(ti->tile);
uint base_offset = GetBridgeMiddleAxisBaseOffset(axis); Axis axis = GetBridgeAxis(ti->tile);
std::span<const PalSpriteID> psid; BridgePieces piece = CalcBridgePiece(
GetTunnelBridgeLength(ti->tile, rampnorth) + 1,
GetTunnelBridgeLength(ti->tile, rampsouth) + 1
);
const PalSpriteID *psid;
bool drawfarpillar; bool drawfarpillar;
if (transport_type != TRANSPORT_WATER) { if (transport_type != TRANSPORT_WATER) {
BridgeType bridge_type = GetBridgeType(rampsouth); BridgeType type = GetBridgeType(rampsouth);
drawfarpillar = !HasBit(GetBridgeSpec(bridge_type)->flags, 0); drawfarpillar = !HasBit(GetBridgeSpec(type)->flags, 0);
base_offset += GetBridgeSpriteTableBaseOffset(transport_type, rampsouth);
psid = GetBridgeSpriteTable(bridge_type, CalcBridgePiece(GetTunnelBridgeLength(ti->tile, rampnorth) + 1, GetTunnelBridgeLength(ti->tile, rampsouth) + 1)); uint base_offset;
if (transport_type == TRANSPORT_RAIL) {
base_offset = GetRailTypeInfo(GetRailType(rampsouth))->bridge_offset;
} else {
base_offset = 8;
}
psid = &GetBridgeSpriteTable(type, piece)[base_offset];
} else { } else {
drawfarpillar = true; drawfarpillar = true;
psid = _aqueduct_sprite_table_middle; psid = _aqueduct_sprites;
} }
psid = psid.subspan(base_offset, 3);
if (axis != AXIS_X) psid += 4;
int x = ti->x; int x = ti->x;
int y = ti->y; int y = ti->y;
@ -1623,7 +1578,7 @@ void DrawBridgeMiddle(const TileInfo *ti)
int z = bridge_z - BRIDGE_Z_START; int z = bridge_z - BRIDGE_Z_START;
/* Add a bounding box that separates the bridge from things below it. */ /* Add a bounding box that separates the bridge from things below it. */
AddSortableSpriteToDraw(SPR_EMPTY_BOUNDING_BOX, PAL_NONE, x, y, bridge_z - TILE_HEIGHT + BB_Z_SEPARATOR, {{}, {TILE_SIZE, TILE_SIZE, 1}, {}}); AddSortableSpriteToDraw(SPR_EMPTY_BOUNDING_BOX, PAL_NONE, x, y, 16, 16, 1, bridge_z - TILE_HEIGHT + BB_Z_SEPARATOR);
/* Draw Trambits as SpriteCombine */ /* Draw Trambits as SpriteCombine */
if (transport_type == TRANSPORT_ROAD || transport_type == TRANSPORT_RAIL) StartSpriteCombine(); if (transport_type == TRANSPORT_ROAD || transport_type == TRANSPORT_RAIL) StartSpriteCombine();
@ -1631,12 +1586,14 @@ void DrawBridgeMiddle(const TileInfo *ti)
/* Draw floor and far part of bridge*/ /* Draw floor and far part of bridge*/
if (!IsInvisibilitySet(TO_BRIDGES)) { if (!IsInvisibilitySet(TO_BRIDGES)) {
if (axis == AXIS_X) { if (axis == AXIS_X) {
AddSortableSpriteToDraw(psid[0].sprite, psid[0].pal, x, y, z, {{0, 0, BRIDGE_Z_START}, {TILE_SIZE, 1, 40}, {0, 0, -BRIDGE_Z_START}}, IsTransparencySet(TO_BRIDGES)); AddSortableSpriteToDraw(psid->sprite, psid->pal, x, y, 16, 1, 0x28, z, IsTransparencySet(TO_BRIDGES), 0, 0, BRIDGE_Z_START);
} else { } else {
AddSortableSpriteToDraw(psid[0].sprite, psid[0].pal, x, y, z, {{0, 0, BRIDGE_Z_START}, {1, TILE_SIZE, 40}, {0, 0, -BRIDGE_Z_START}}, IsTransparencySet(TO_BRIDGES)); AddSortableSpriteToDraw(psid->sprite, psid->pal, x, y, 1, 16, 0x28, z, IsTransparencySet(TO_BRIDGES), 0, 0, BRIDGE_Z_START);
} }
} }
psid++;
if (transport_type == TRANSPORT_ROAD) { if (transport_type == TRANSPORT_ROAD) {
/* DrawBridgeRoadBits() calls EndSpriteCombine() and StartSpriteCombine() */ /* DrawBridgeRoadBits() calls EndSpriteCombine() and StartSpriteCombine() */
DrawBridgeRoadBits(rampsouth, x, y, bridge_z, axis ^ 1, false); DrawBridgeRoadBits(rampsouth, x, y, bridge_z, axis ^ 1, false);
@ -1645,16 +1602,16 @@ void DrawBridgeMiddle(const TileInfo *ti)
if (rti->UsesOverlay() && !IsInvisibilitySet(TO_BRIDGES)) { if (rti->UsesOverlay() && !IsInvisibilitySet(TO_BRIDGES)) {
SpriteID surface = GetCustomRailSprite(rti, rampsouth, RTSG_BRIDGE, TCX_ON_BRIDGE); SpriteID surface = GetCustomRailSprite(rti, rampsouth, RTSG_BRIDGE, TCX_ON_BRIDGE);
if (surface != 0) { if (surface != 0) {
AddSortableSpriteToDraw(surface + axis, PAL_NONE, x, y, bridge_z, {{}, {TILE_SIZE, TILE_SIZE, 0}, {}}, IsTransparencySet(TO_BRIDGES)); AddSortableSpriteToDraw(surface + axis, PAL_NONE, x, y, 16, 16, 0, bridge_z, IsTransparencySet(TO_BRIDGES));
} }
} }
if (_game_mode != GM_MENU && _settings_client.gui.show_track_reservation && !IsInvisibilitySet(TO_BRIDGES) && HasTunnelBridgeReservation(rampnorth)) { if (_game_mode != GM_MENU && _settings_client.gui.show_track_reservation && !IsInvisibilitySet(TO_BRIDGES) && HasTunnelBridgeReservation(rampnorth)) {
if (rti->UsesOverlay()) { if (rti->UsesOverlay()) {
SpriteID overlay = GetCustomRailSprite(rti, ti->tile, RTSG_OVERLAY); SpriteID overlay = GetCustomRailSprite(rti, ti->tile, RTSG_OVERLAY);
AddSortableSpriteToDraw(overlay + RTO_X + axis, PALETTE_CRASH, ti->x, ti->y, bridge_z, {{}, {TILE_SIZE, TILE_SIZE, 0}, {}}, IsTransparencySet(TO_BRIDGES)); AddSortableSpriteToDraw(overlay + RTO_X + axis, PALETTE_CRASH, ti->x, ti->y, 16, 16, 0, bridge_z, IsTransparencySet(TO_BRIDGES));
} else { } else {
AddSortableSpriteToDraw(axis == AXIS_X ? rti->base_sprites.single_x : rti->base_sprites.single_y, PALETTE_CRASH, ti->x, ti->y, bridge_z, {{}, {TILE_SIZE, TILE_SIZE, 0}, {}}, IsTransparencySet(TO_BRIDGES)); AddSortableSpriteToDraw(axis == AXIS_X ? rti->base_sprites.single_x : rti->base_sprites.single_y, PALETTE_CRASH, ti->x, ti->y, 16, 16, 0, bridge_z, IsTransparencySet(TO_BRIDGES));
} }
} }
@ -1669,10 +1626,10 @@ void DrawBridgeMiddle(const TileInfo *ti)
if (!IsInvisibilitySet(TO_BRIDGES)) { if (!IsInvisibilitySet(TO_BRIDGES)) {
if (axis == AXIS_X) { if (axis == AXIS_X) {
y += 12; y += 12;
if (psid[1].sprite & SPRITE_MASK) AddSortableSpriteToDraw(psid[1].sprite, psid[1].pal, x, y, z, {{0, 3, BRIDGE_Z_START}, {TILE_SIZE, 1, 40}, {0, -3, -BRIDGE_Z_START}}, IsTransparencySet(TO_BRIDGES)); if (psid->sprite & SPRITE_MASK) AddSortableSpriteToDraw(psid->sprite, psid->pal, x, y, 16, 4, 0x28, z, IsTransparencySet(TO_BRIDGES), 0, 3, BRIDGE_Z_START);
} else { } else {
x += 12; x += 12;
if (psid[1].sprite & SPRITE_MASK) AddSortableSpriteToDraw(psid[1].sprite, psid[1].pal, x, y, z, {{3, 0, BRIDGE_Z_START}, {1, TILE_SIZE, 40}, {-3, 0, -BRIDGE_Z_START}}, IsTransparencySet(TO_BRIDGES)); if (psid->sprite & SPRITE_MASK) AddSortableSpriteToDraw(psid->sprite, psid->pal, x, y, 4, 16, 0x28, z, IsTransparencySet(TO_BRIDGES), 3, 0, BRIDGE_Z_START);
} }
} }
@ -1682,7 +1639,8 @@ void DrawBridgeMiddle(const TileInfo *ti)
/* Do not draw anything more if bridges are invisible */ /* Do not draw anything more if bridges are invisible */
if (IsInvisibilitySet(TO_BRIDGES)) return; if (IsInvisibilitySet(TO_BRIDGES)) return;
DrawBridgePillars(psid[2], ti, axis, drawfarpillar, x, y, z); psid++;
DrawBridgePillars(psid, ti, axis, drawfarpillar, x, y, z);
} }

View File

@ -1109,7 +1109,8 @@ static void DoDrawVehicle(const Vehicle *v)
for (uint i = 0; i < v->sprite_cache.sprite_seq.count; ++i) { for (uint i = 0; i < v->sprite_cache.sprite_seq.count; ++i) {
PaletteID pal2 = v->sprite_cache.sprite_seq.seq[i].pal; PaletteID pal2 = v->sprite_cache.sprite_seq.seq[i].pal;
if (!pal2 || v->vehstatus.Test(VehState::Crashed)) pal2 = pal; if (!pal2 || v->vehstatus.Test(VehState::Crashed)) pal2 = pal;
AddSortableSpriteToDraw(v->sprite_cache.sprite_seq.seq[i].sprite, pal2, v->x_pos, v->y_pos, v->z_pos, v->bounds, shadowed); AddSortableSpriteToDraw(v->sprite_cache.sprite_seq.seq[i].sprite, pal2, v->x_pos + v->x_offs, v->y_pos + v->y_offs,
v->x_extent, v->y_extent, v->z_extent, v->z_pos, shadowed, v->x_bb_offs, v->y_bb_offs);
} }
EndSpriteCombine(); EndSpriteCombine();
} }
@ -1673,24 +1674,12 @@ void Vehicle::UpdateBoundingBoxCoordinates(bool update_cache) const
Rect new_coord; Rect new_coord;
this->sprite_cache.sprite_seq.GetBounds(&new_coord); this->sprite_cache.sprite_seq.GetBounds(&new_coord);
/* z-bounds are not used. */ Point pt = RemapCoords(this->x_pos + this->x_offs, this->y_pos + this->y_offs, this->z_pos);
Point pt = RemapCoords(this->x_pos + this->bounds.origin.x + this->bounds.offset.x, this->y_pos + this->bounds.origin.y + this->bounds.offset.y, this->z_pos);
new_coord.left += pt.x; new_coord.left += pt.x;
new_coord.top += pt.y; new_coord.top += pt.y;
new_coord.right += pt.x + 2 * ZOOM_BASE; new_coord.right += pt.x + 2 * ZOOM_BASE;
new_coord.bottom += pt.y + 2 * ZOOM_BASE; new_coord.bottom += pt.y + 2 * ZOOM_BASE;
extern bool _draw_bounding_boxes;
if (_draw_bounding_boxes) {
int x = this->x_pos + this->bounds.origin.x;
int y = this->y_pos + this->bounds.origin.y;
int z = this->z_pos + this->bounds.origin.z;
new_coord.left = std::min(new_coord.left, RemapCoords(x + bounds.extent.x, y, z).x);
new_coord.right = std::max(new_coord.right, RemapCoords(x, y + bounds.extent.y, z).x + 1);
new_coord.top = std::min(new_coord.top, RemapCoords(x, y, z + bounds.extent.z).y);
new_coord.bottom = std::max(new_coord.bottom, RemapCoords(x + bounds.extent.x, y + bounds.extent.y, z).y + 1);
}
if (update_cache) { if (update_cache) {
/* /*
* If the old coordinates are invalid, set the cache to the new coordinates for correct * If the old coordinates are invalid, set the cache to the new coordinates for correct

View File

@ -10,7 +10,6 @@
#ifndef VEHICLE_BASE_H #ifndef VEHICLE_BASE_H
#define VEHICLE_BASE_H #define VEHICLE_BASE_H
#include "sprite.h"
#include "track_type.h" #include "track_type.h"
#include "command_type.h" #include "command_type.h"
#include "order_base.h" #include "order_base.h"
@ -294,7 +293,13 @@ public:
* 0xff == reserved for another custom sprite * 0xff == reserved for another custom sprite
*/ */
uint8_t spritenum = 0; uint8_t spritenum = 0;
SpriteBounds bounds{}; ///< Bounding box of vehicle. uint8_t x_extent = 0; ///< x-extent of vehicle bounding box
uint8_t y_extent = 0; ///< y-extent of vehicle bounding box
uint8_t z_extent = 0; ///< z-extent of vehicle bounding box
int8_t x_bb_offs = 0; ///< x offset of vehicle bounding box
int8_t y_bb_offs = 0; ///< y offset of vehicle bounding box
int8_t x_offs = 0; ///< x offset for vehicle sprite
int8_t y_offs = 0; ///< y offset for vehicle sprite
EngineID engine_type = EngineID::Invalid(); ///< The type of engine used for this vehicle. EngineID engine_type = EngineID::Invalid(); ///< The type of engine used for this vehicle.
TextEffectID fill_percent_te_id = INVALID_TE_ID; ///< a text-effect id to a loading indicator object TextEffectID fill_percent_te_id = INVALID_TE_ID; ///< a text-effect id to a loading indicator object

View File

@ -660,17 +660,12 @@ static void AddCombinedSprite(SpriteID image, PaletteID pal, int x, int y, int z
* @param bb_offset_z bounding box extent towards negative Z (world) * @param bb_offset_z bounding box extent towards negative Z (world)
* @param sub Only draw a part of the sprite. * @param sub Only draw a part of the sprite.
*/ */
void AddSortableSpriteToDraw(SpriteID image, PaletteID pal, int x, int y, int z, const SpriteBounds &bounds, bool transparent, const SubSprite *sub) void AddSortableSpriteToDraw(SpriteID image, PaletteID pal, int x, int y, int w, int h, int dz, int z, bool transparent, int bb_offset_x, int bb_offset_y, int bb_offset_z, const SubSprite *sub)
{ {
int32_t left, right, top, bottom; int32_t left, right, top, bottom;
assert((image & SPRITE_MASK) < MAX_SPRITES); assert((image & SPRITE_MASK) < MAX_SPRITES);
/* Move to bounding box. */
x += bounds.origin.x;
y += bounds.origin.y;
z += bounds.origin.z;
/* make the sprites transparent with the right palette */ /* make the sprites transparent with the right palette */
if (transparent) { if (transparent) {
SetBit(image, PALETTE_MODIFIER_TRANSPARENT); SetBit(image, PALETTE_MODIFIER_TRANSPARENT);
@ -678,21 +673,21 @@ void AddSortableSpriteToDraw(SpriteID image, PaletteID pal, int x, int y, int z,
} }
if (_vd.combine_sprites == SPRITE_COMBINE_ACTIVE) { if (_vd.combine_sprites == SPRITE_COMBINE_ACTIVE) {
AddCombinedSprite(image, pal, x + bounds.offset.x, y + bounds.offset.y, z + bounds.offset.z, sub); AddCombinedSprite(image, pal, x, y, z, sub);
return; return;
} }
_vd.last_child = LAST_CHILD_NONE; _vd.last_child = LAST_CHILD_NONE;
Point pt = RemapCoords(x + bounds.offset.x, y + bounds.offset.y, z + bounds.offset.z); Point pt = RemapCoords(x, y, z);
int tmp_left, tmp_top, tmp_x = pt.x, tmp_y = pt.y; int tmp_left, tmp_top, tmp_x = pt.x, tmp_y = pt.y;
/* Compute screen extents of sprite */ /* Compute screen extents of sprite */
if (image == SPR_EMPTY_BOUNDING_BOX) { if (image == SPR_EMPTY_BOUNDING_BOX) {
left = tmp_left = RemapCoords(x + bounds.extent.x, y, z).x; left = tmp_left = RemapCoords(x + w , y + bb_offset_y, z + bb_offset_z).x;
right = RemapCoords(x, y + bounds.extent.y, z).x + 1; right = RemapCoords(x + bb_offset_x, y + h , z + bb_offset_z).x + 1;
top = tmp_top = RemapCoords(x, y, z + bounds.extent.z).y; top = tmp_top = RemapCoords(x + bb_offset_x, y + bb_offset_y, z + dz ).y;
bottom = RemapCoords(x + bounds.extent.x, y + bounds.extent.y, z).y + 1; bottom = RemapCoords(x + w , y + h , z + bb_offset_z).y + 1;
} else { } else {
const Sprite *spr = GetSprite(image & SPRITE_MASK, SpriteType::Normal); const Sprite *spr = GetSprite(image & SPRITE_MASK, SpriteType::Normal);
left = tmp_left = (pt.x += spr->x_offs); left = tmp_left = (pt.x += spr->x_offs);
@ -703,10 +698,10 @@ void AddSortableSpriteToDraw(SpriteID image, PaletteID pal, int x, int y, int z,
if (_draw_bounding_boxes && (image != SPR_EMPTY_BOUNDING_BOX)) { if (_draw_bounding_boxes && (image != SPR_EMPTY_BOUNDING_BOX)) {
/* Compute maximal extents of sprite and its bounding box */ /* Compute maximal extents of sprite and its bounding box */
left = std::min(left , RemapCoords(x + bounds.extent.x, y, z).x); left = std::min(left , RemapCoords(x + w , y + bb_offset_y, z + bb_offset_z).x);
right = std::max(right , RemapCoords(x, y + bounds.extent.y, z).x + 1); right = std::max(right , RemapCoords(x + bb_offset_x, y + h , z + bb_offset_z).x + 1);
top = std::min(top , RemapCoords(x, y, z + bounds.extent.z).y); top = std::min(top , RemapCoords(x + bb_offset_x, y + bb_offset_y, z + dz ).y);
bottom = std::max(bottom, RemapCoords(x + bounds.extent.x, y + bounds.extent.y, z).y + 1); bottom = std::max(bottom, RemapCoords(x + w , y + h , z + bb_offset_z).y + 1);
} }
/* Do not add the sprite to the viewport, if it is outside */ /* Do not add the sprite to the viewport, if it is outside */
@ -727,14 +722,14 @@ void AddSortableSpriteToDraw(SpriteID image, PaletteID pal, int x, int y, int z,
ps.image = image; ps.image = image;
ps.pal = pal; ps.pal = pal;
ps.sub = sub; ps.sub = sub;
ps.xmin = x; ps.xmin = x + bb_offset_x;
ps.xmax = x + bounds.extent.x - 1; ps.xmax = x + std::max(bb_offset_x, w) - 1;
ps.ymin = y; ps.ymin = y + bb_offset_y;
ps.ymax = y + bounds.extent.y - 1; ps.ymax = y + std::max(bb_offset_y, h) - 1;
ps.zmin = z; ps.zmin = z + bb_offset_z;
ps.zmax = z + bounds.extent.z - 1; ps.zmax = z + std::max(bb_offset_z, dz) - 1;
ps.first_child = LAST_CHILD_NONE; ps.first_child = LAST_CHILD_NONE;

View File

@ -11,7 +11,6 @@
#define VIEWPORT_FUNC_H #define VIEWPORT_FUNC_H
#include "gfx_type.h" #include "gfx_type.h"
#include "sprite.h"
#include "viewport_type.h" #include "viewport_type.h"
#include "window_type.h" #include "window_type.h"
#include "tile_map.h" #include "tile_map.h"
@ -52,14 +51,10 @@ void OffsetGroundSprite(int x, int y);
void DrawGroundSprite(SpriteID image, PaletteID pal, const SubSprite *sub = nullptr, int extra_offs_x = 0, int extra_offs_y = 0); void DrawGroundSprite(SpriteID image, PaletteID pal, const SubSprite *sub = nullptr, int extra_offs_x = 0, int extra_offs_y = 0);
void DrawGroundSpriteAt(SpriteID image, PaletteID pal, int32_t x, int32_t y, int z, const SubSprite *sub = nullptr, int extra_offs_x = 0, int extra_offs_y = 0); void DrawGroundSpriteAt(SpriteID image, PaletteID pal, int32_t x, int32_t y, int z, const SubSprite *sub = nullptr, int extra_offs_x = 0, int extra_offs_y = 0);
void AddSortableSpriteToDraw(SpriteID image, PaletteID pal, int x, int y, int z, const SpriteBounds &bounds, bool transparent = false, const SubSprite *sub = nullptr); void AddSortableSpriteToDraw(SpriteID image, PaletteID pal, int x, int y, int w, int h, int dz, int z, bool transparent = false, int bb_offset_x = 0, int bb_offset_y = 0, int bb_offset_z = 0, const SubSprite *sub = nullptr);
void AddChildSpriteScreen(SpriteID image, PaletteID pal, int x, int y, bool transparent = false, const SubSprite *sub = nullptr, bool scale = true, bool relative = true); void AddChildSpriteScreen(SpriteID image, PaletteID pal, int x, int y, bool transparent = false, const SubSprite *sub = nullptr, bool scale = true, bool relative = true);
std::string *ViewportAddString(const DrawPixelInfo *dpi, const ViewportSign *sign, ViewportStringFlags flags, Colours colour); std::string *ViewportAddString(const DrawPixelInfo *dpi, const ViewportSign *sign, ViewportStringFlags flags, Colours colour);
inline void AddSortableSpriteToDraw(SpriteID image, PaletteID pal, const Coord3D<int32_t> &world, const SpriteBounds &bounds, bool transparent = false, const SubSprite *sub = nullptr)
{
AddSortableSpriteToDraw(image, pal, world.x, world.y, world.z, bounds, transparent, sub);
}
void StartSpriteCombine(); void StartSpriteCombine();
void EndSpriteCombine(); void EndSpriteCombine();

View File

@ -89,8 +89,8 @@ enum ZoomStateChange : uint8_t {
* z=6 reserved, currently unused. * z=6 reserved, currently unused.
* z=7 Z separator between bridge/tunnel and the things under/above it. * z=7 Z separator between bridge/tunnel and the things under/above it.
*/ */
static constexpr int BB_HEIGHT_UNDER_BRIDGE = 6; ///< Everything that can be built under low bridges, must not exceed this Z height. static const uint BB_HEIGHT_UNDER_BRIDGE = 6; ///< Everything that can be built under low bridges, must not exceed this Z height.
static constexpr int BB_Z_SEPARATOR = 7; ///< Separates the bridge/tunnel from the things under/above it. static const uint BB_Z_SEPARATOR = 7; ///< Separates the bridge/tunnel from the things under/above it.
/** Viewport place method (type of highlighted area and placed objects) */ /** Viewport place method (type of highlighted area and placed objects) */
enum ViewportPlaceMethod : uint8_t { enum ViewportPlaceMethod : uint8_t {

View File

@ -806,7 +806,11 @@ static void DrawWaterTileStruct(const TileInfo *ti, std::span<const DrawTileSeqS
for (const DrawTileSeqStruct &dtss : seq) { for (const DrawTileSeqStruct &dtss : seq) {
uint tile_offs = offset + dtss.image.sprite; uint tile_offs = offset + dtss.image.sprite;
if (feature < CF_END) tile_offs = GetCanalSpriteOffset(feature, ti->tile, tile_offs); if (feature < CF_END) tile_offs = GetCanalSpriteOffset(feature, ti->tile, tile_offs);
AddSortableSpriteToDraw(base + tile_offs, palette, *ti, dtss, IsTransparencySet(TO_BUILDINGS)); AddSortableSpriteToDraw(base + tile_offs, palette,
ti->x + dtss.delta_x, ti->y + dtss.delta_y,
dtss.size_x, dtss.size_y,
dtss.size_z, ti->z + dtss.delta_z,
IsTransparencySet(TO_BUILDINGS));
} }
} }

View File

@ -601,7 +601,7 @@ EventState Window::OnHotkey(int hotkey)
*/ */
void Window::HandleDropdownListButtonClick(DropDownList &&list, int selected, WidgetID button, uint width, bool instant_close, bool persist) void Window::HandleDropdownListButtonClick(DropDownList &&list, int selected, WidgetID button, uint width, bool instant_close, bool persist)
{ {
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
ShowDropDownList(this, std::forward<DropDownList>(list), selected, button, width, instant_close, persist); ShowDropDownList(this, std::forward<DropDownList>(list), selected, button, width, instant_close, persist);
} }
@ -616,7 +616,7 @@ void Window::HandleDropdownListButtonClick(DropDownList &&list, int selected, Wi
*/ */
void Window::HandleDropdownMenuButtonClick(std::span<const StringID> strings, int selected, WidgetID button, uint32_t disabled_mask, uint32_t hidden_mask, uint width) void Window::HandleDropdownMenuButtonClick(std::span<const StringID> strings, int selected, WidgetID button, uint32_t disabled_mask, uint32_t hidden_mask, uint width)
{ {
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
ShowDropDownMenu(this, strings, selected, button, disabled_mask, hidden_mask, width); ShowDropDownMenu(this, strings, selected, button, disabled_mask, hidden_mask, width);
} }
@ -630,7 +630,7 @@ void Window::HandleButtonClick(WidgetID widget)
this->LowerWidget(widget); this->LowerWidget(widget);
this->SetTimeout(); this->SetTimeout();
this->SetWidgetDirty(widget); this->SetWidgetDirty(widget);
SndClickBeep(); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
} }
static void StartWindowDrag(Window *w); static void StartWindowDrag(Window *w);