mirror of https://github.com/OpenTTD/OpenTTD
Compare commits
20 Commits
47d8f72205
...
d0d0ff3c38
Author | SHA1 | Date |
---|---|---|
|
d0d0ff3c38 | |
|
87f159b567 | |
|
8128e46fbd | |
|
b0c37a85ef | |
|
7c8759552a | |
|
614a01907a | |
|
f51067f9f5 | |
|
009b7cbc57 | |
|
79524af5fc | |
|
d764d59f5a | |
|
13759e9f23 | |
|
3e06c69e26 | |
|
7eb042feac | |
|
10eeba86a6 | |
|
d99dad9e9e | |
|
ae917cb8c6 | |
|
6d95cea73a | |
|
921d83c324 | |
|
c69fc76395 | |
|
1d21edde8d |
|
@ -48,10 +48,7 @@
|
|||
|
||||
void Aircraft::UpdateDeltaXY()
|
||||
{
|
||||
this->x_offs = -1;
|
||||
this->y_offs = -1;
|
||||
this->x_extent = 2;
|
||||
this->y_extent = 2;
|
||||
this->bounds = {{-1, -1, 0}, {2, 2, 0}, {}};
|
||||
|
||||
switch (this->subtype) {
|
||||
default: NOT_REACHED();
|
||||
|
@ -64,21 +61,21 @@ void Aircraft::UpdateDeltaXY()
|
|||
case LANDING:
|
||||
case HELILANDING:
|
||||
case FLYING:
|
||||
this->x_extent = 24;
|
||||
this->y_extent = 24;
|
||||
/* Bounds are not centred on the aircraft. */
|
||||
this->bounds.extent.x = 24;
|
||||
this->bounds.extent.y = 24;
|
||||
break;
|
||||
}
|
||||
this->z_extent = 5;
|
||||
this->bounds.extent.z = 5;
|
||||
break;
|
||||
|
||||
case AIR_SHADOW:
|
||||
this->z_extent = 1;
|
||||
this->x_offs = 0;
|
||||
this->y_offs = 0;
|
||||
this->bounds.extent.z = 1;
|
||||
this->bounds.origin = {};
|
||||
break;
|
||||
|
||||
case AIR_ROTOR:
|
||||
this->z_extent = 1;
|
||||
this->bounds.extent.z = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -493,7 +493,7 @@ public:
|
|||
{
|
||||
switch (widget) {
|
||||
case WID_AP_CLASS_DROPDOWN:
|
||||
ShowDropDownList(this, BuildAirportClassDropDown(), _selected_airport_class, WID_AP_CLASS_DROPDOWN);
|
||||
this->HandleDropdownListButtonClick(BuildAirportClassDropDown(), _selected_airport_class, WID_AP_CLASS_DROPDOWN);
|
||||
break;
|
||||
|
||||
case WID_AP_AIRPORT_LIST: {
|
||||
|
@ -509,7 +509,7 @@ public:
|
|||
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->SetDirty();
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
this->UpdateSelectSize();
|
||||
SetViewportCatchmentStation(nullptr, true);
|
||||
break;
|
||||
|
|
|
@ -534,16 +534,16 @@ public:
|
|||
DropDownList list;
|
||||
list.push_back(MakeDropDownListStringItem(STR_REPLACE_ENGINES, 1));
|
||||
list.push_back(MakeDropDownListStringItem(STR_REPLACE_WAGONS, 0));
|
||||
ShowDropDownList(this, std::move(list), this->replace_engines ? 1 : 0, WID_RV_TRAIN_ENGINEWAGON_DROPDOWN);
|
||||
this->HandleDropdownListButtonClick(std::move(list), this->replace_engines ? 1 : 0, WID_RV_TRAIN_ENGINEWAGON_DROPDOWN);
|
||||
break;
|
||||
}
|
||||
|
||||
case WID_RV_RAIL_TYPE_DROPDOWN: // Railtype selection dropdown menu
|
||||
ShowDropDownList(this, GetRailTypeDropDownList(true, true), this->sel_railtype, widget);
|
||||
this->HandleDropdownListButtonClick(GetRailTypeDropDownList(true, true), this->sel_railtype, widget);
|
||||
break;
|
||||
|
||||
case WID_RV_ROAD_TYPE_DROPDOWN: // Roadtype selection dropdown menu
|
||||
ShowDropDownList(this, GetRoadTypeDropDownList(RTTB_ROAD | RTTB_TRAM, true, true), this->sel_roadtype, widget);
|
||||
this->HandleDropdownListButtonClick(GetRoadTypeDropDownList(RTTB_ROAD | RTTB_TRAM, true, true), this->sel_roadtype, widget);
|
||||
break;
|
||||
|
||||
case WID_RV_TRAIN_WAGONREMOVE_TOGGLE: {
|
||||
|
@ -563,7 +563,7 @@ public:
|
|||
ReplaceClick_StartReplace(false);
|
||||
} else {
|
||||
bool replacment_when_old = EngineHasReplacementWhenOldForCompany(Company::Get(_local_company), this->sel_engine[0], this->sel_group);
|
||||
ShowDropDownMenu(this, _start_replace_dropdown, replacment_when_old ? 1 : 0, WID_RV_START_REPLACE, !this->replace_engines ? 1 << 1 : 0, 0);
|
||||
this->HandleDropdownMenuButtonClick(_start_replace_dropdown, replacment_when_old ? 1 : 0, WID_RV_START_REPLACE, !this->replace_engines ? 1 << 1 : 0, 0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -278,7 +278,7 @@ public:
|
|||
break;
|
||||
|
||||
case WID_BBS_DROPDOWN_CRITERIA:
|
||||
ShowDropDownMenu(this, BuildBridgeWindow::sorter_names, this->bridges.SortType(), WID_BBS_DROPDOWN_CRITERIA, 0, 0);
|
||||
this->HandleDropdownMenuButtonClick(BuildBridgeWindow::sorter_names, this->bridges.SortType(), WID_BBS_DROPDOWN_CRITERIA, 0, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1675,12 +1675,12 @@ struct BuildVehicleWindow : Window {
|
|||
break;
|
||||
|
||||
case WID_BV_CARGO_FILTER_DROPDOWN: // Select cargo filtering criteria dropdown menu
|
||||
ShowDropDownList(this, this->BuildCargoDropDownList(), this->cargo_filter_criteria, widget);
|
||||
this->HandleDropdownListButtonClick(this->BuildCargoDropDownList(), this->cargo_filter_criteria, widget);
|
||||
break;
|
||||
|
||||
case WID_BV_CONFIGURE_BADGES:
|
||||
if (this->badge_classes.GetClasses().empty()) break;
|
||||
ShowDropDownList(this, this->BuildBadgeConfigurationList(), -1, widget, 0, false, true);
|
||||
this->HandleDropdownListButtonClick(this->BuildBadgeConfigurationList(), -1, widget, 0, false, true);
|
||||
break;
|
||||
|
||||
case WID_BV_SHOW_HIDE: {
|
||||
|
@ -1706,7 +1706,7 @@ struct BuildVehicleWindow : Window {
|
|||
|
||||
default:
|
||||
if (IsInsideMM(widget, this->badge_filters.first, this->badge_filters.second)) {
|
||||
ShowDropDownList(this, this->GetWidget<NWidgetBadgeFilter>(widget)->GetDropDownList(), -1, widget, 0, false);
|
||||
this->HandleDropdownListButtonClick(this->GetWidget<NWidgetBadgeFilter>(widget)->GetDropDownList(), -1, widget, 0, false);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -69,36 +69,45 @@ static void DrawClearLandFence(const TileInfo *ti)
|
|||
/* combine fences into one sprite object */
|
||||
StartSpriteCombine();
|
||||
|
||||
int maxz = GetSlopeMaxPixelZ(ti->tileh);
|
||||
SpriteBounds bounds{{}, {TILE_SIZE, TILE_SIZE, 4}, {}};
|
||||
|
||||
bounds.extent.z += GetSlopeMaxPixelZ(ti->tileh);
|
||||
|
||||
uint fence_nw = GetFence(ti->tile, DIAGDIR_NW);
|
||||
if (fence_nw != 0) {
|
||||
int z = GetSlopePixelZInCorner(ti->tileh, CORNER_W);
|
||||
bounds.offset.x = 0;
|
||||
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];
|
||||
AddSortableSpriteToDraw(sprite, PAL_NONE, ti->x, ti->y - 16, 16, 32, maxz - z + 4, ti->z + z, false, 0, 16, -z);
|
||||
AddSortableSpriteToDraw(sprite, PAL_NONE, *ti, bounds, false);
|
||||
}
|
||||
|
||||
uint fence_ne = GetFence(ti->tile, DIAGDIR_NE);
|
||||
if (fence_ne != 0) {
|
||||
int z = GetSlopePixelZInCorner(ti->tileh, CORNER_E);
|
||||
bounds.offset.x = -static_cast<int>(TILE_SIZE);
|
||||
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];
|
||||
AddSortableSpriteToDraw(sprite, PAL_NONE, ti->x - 16, ti->y, 32, 16, maxz - z + 4, ti->z + z, false, 16, 0, -z);
|
||||
AddSortableSpriteToDraw(sprite, PAL_NONE, *ti, bounds, false);
|
||||
}
|
||||
|
||||
uint fence_sw = GetFence(ti->tile, DIAGDIR_SW);
|
||||
uint fence_se = GetFence(ti->tile, DIAGDIR_SE);
|
||||
|
||||
if (fence_sw != 0 || fence_se != 0) {
|
||||
int z = GetSlopePixelZInCorner(ti->tileh, CORNER_S);
|
||||
bounds.offset.x = 0;
|
||||
bounds.offset.y = 0;
|
||||
bounds.offset.z = GetSlopePixelZInCorner(ti->tileh, CORNER_S);
|
||||
|
||||
if (fence_sw != 0) {
|
||||
SpriteID sprite = _clear_land_fence_sprites[fence_sw - 1] + _fence_mod_by_tileh_sw[ti->tileh];
|
||||
AddSortableSpriteToDraw(sprite, PAL_NONE, ti->x, ti->y, 16, 16, maxz - z + 4, ti->z + z, false, 0, 0, -z);
|
||||
AddSortableSpriteToDraw(sprite, PAL_NONE, *ti, bounds, false);
|
||||
}
|
||||
|
||||
if (fence_se != 0) {
|
||||
SpriteID sprite = _clear_land_fence_sprites[fence_se - 1] + _fence_mod_by_tileh_se[ti->tileh];
|
||||
AddSortableSpriteToDraw(sprite, PAL_NONE, ti->x, ti->y, 16, 16, maxz - z + 4, ti->z + z, false, 0, 0, -z);
|
||||
AddSortableSpriteToDraw(sprite, PAL_NONE, *ti, bounds, false);
|
||||
|
||||
}
|
||||
}
|
||||
EndSpriteCombine();
|
||||
|
|
|
@ -660,7 +660,7 @@ private:
|
|||
} else {
|
||||
sel = default_col;
|
||||
}
|
||||
ShowDropDownList(this, std::move(list), sel, widget);
|
||||
this->HandleDropdownListButtonClick(std::move(list), sel, widget);
|
||||
}
|
||||
|
||||
void BuildGroupList(CompanyID owner)
|
||||
|
|
|
@ -28,15 +28,30 @@ inline int CentreBounds(int min, int max, int size)
|
|||
return (min + max - size + 1) / 2;
|
||||
}
|
||||
|
||||
/** Coordinates of a point in 2D */
|
||||
struct Point {
|
||||
int x;
|
||||
int y;
|
||||
/** A coordinate with two dimensons. */
|
||||
template <typename T>
|
||||
struct Coord2D {
|
||||
T x = 0; ///< X coordinate.
|
||||
T y = 0; ///< Y coordinate.
|
||||
|
||||
constexpr Point() : x(0), y(0) {}
|
||||
constexpr Point(int x, int y) : x(x), y(y) {}
|
||||
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 */
|
||||
using Point = Coord2D<int>;
|
||||
|
||||
/** Dimensions (a width and height) of a rectangle in 2D */
|
||||
struct Dimension {
|
||||
uint width;
|
||||
|
|
|
@ -96,7 +96,7 @@ struct SetDateWindow : Window {
|
|||
break;
|
||||
}
|
||||
|
||||
ShowDropDownList(this, std::move(list), selected, widget);
|
||||
this->HandleDropdownListButtonClick(std::move(list), selected, widget);
|
||||
}
|
||||
|
||||
void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#include "depot_base.h"
|
||||
#include "spritecache.h"
|
||||
#include "strings_func.h"
|
||||
#include "sound_func.h"
|
||||
#include "vehicle_func.h"
|
||||
#include "company_func.h"
|
||||
#include "tilehighlight_func.h"
|
||||
|
@ -815,6 +816,7 @@ struct DepotWindow : Window {
|
|||
} else {
|
||||
ResetObjectToPlace();
|
||||
}
|
||||
SndClickBeep();
|
||||
break;
|
||||
|
||||
case WID_D_LOCATION:
|
||||
|
|
|
@ -992,9 +992,5 @@ void ReleaseDisasterVehicle(VehicleID vehicle)
|
|||
|
||||
void DisasterVehicle::UpdateDeltaXY()
|
||||
{
|
||||
this->x_offs = -1;
|
||||
this->y_offs = -1;
|
||||
this->x_extent = 2;
|
||||
this->y_extent = 2;
|
||||
this->z_extent = 5;
|
||||
this->bounds = {{-1, -1, 0}, {2, 2, 5}, {}};
|
||||
}
|
||||
|
|
|
@ -469,7 +469,7 @@ public:
|
|||
this->RaiseWidget(_settings_client.gui.station_show_coverage + BDSW_LT_OFF);
|
||||
_settings_client.gui.station_show_coverage = (widget != BDSW_LT_OFF);
|
||||
this->LowerWidget(_settings_client.gui.station_show_coverage + BDSW_LT_OFF);
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
this->SetDirty();
|
||||
SetViewportCatchmentStation(nullptr, true);
|
||||
break;
|
||||
|
@ -580,7 +580,7 @@ public:
|
|||
this->RaiseWidget(WID_BDD_X + _ship_depot_direction);
|
||||
_ship_depot_direction = (widget == WID_BDD_X ? AXIS_X : AXIS_Y);
|
||||
this->LowerWidget(WID_BDD_X + _ship_depot_direction);
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
UpdateDocksDirection();
|
||||
this->SetDirty();
|
||||
break;
|
||||
|
|
|
@ -14,7 +14,6 @@
|
|||
#include "gfx_func.h"
|
||||
#include "gfx_type.h"
|
||||
#include "palette_func.h"
|
||||
#include "window_gui.h"
|
||||
|
||||
/**
|
||||
* Base list item class from which others are derived.
|
||||
|
|
|
@ -619,11 +619,7 @@ bool EffectVehicle::Tick()
|
|||
|
||||
void EffectVehicle::UpdateDeltaXY()
|
||||
{
|
||||
this->x_offs = 0;
|
||||
this->y_offs = 0;
|
||||
this->x_extent = 1;
|
||||
this->y_extent = 1;
|
||||
this->z_extent = 1;
|
||||
this->bounds = {{}, {1, 1, 1}, {}};
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -248,27 +248,12 @@ static int GetPCPElevation(TileIndex tile, DiagDirection pcp_pos)
|
|||
*/
|
||||
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);
|
||||
|
||||
SpriteID wire_base = GetWireBase(ti->tile);
|
||||
|
||||
const SortableSpriteStruct *sss = &_rail_catenary_sprite_data_tunnel[dir];
|
||||
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
|
||||
);
|
||||
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));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -440,8 +425,8 @@ static void DrawRailCatenaryRailway(const TileInfo *ti)
|
|||
continue; // No neighbour, go looking for a better position
|
||||
}
|
||||
|
||||
AddSortableSpriteToDraw(pylon_base + _pylon_sprites[temp], PAL_NONE, x, y, 1, 1, BB_HEIGHT_UNDER_BRIDGE,
|
||||
elevation, IsTransparencySet(TO_CATENARY), -1, -1);
|
||||
AddSortableSpriteToDraw(pylon_base + _pylon_sprites[temp], PAL_NONE, x, y, elevation,
|
||||
{{-1, -1, 0}, {1, 1, BB_HEIGHT_UNDER_BRIDGE}, {1, 1, 0}}, IsTransparencySet(TO_CATENARY));
|
||||
|
||||
break; // We already have drawn a pylon, bail out
|
||||
}
|
||||
|
@ -482,7 +467,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(!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.
|
||||
|
@ -490,9 +475,8 @@ 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
|
||||
* down to the nearest full height change.
|
||||
*/
|
||||
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, (GetSlopePixelZ(ti->x + sss->x_offset, ti->y + sss->y_offset, true) + 4) / 8 * 8 + sss->z_offset,
|
||||
IsTransparencySet(TO_CATENARY));
|
||||
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, ti->y, z, sss, IsTransparencySet(TO_CATENARY));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -530,13 +514,12 @@ void DrawRailCatenaryOnBridge(const TileInfo *ti)
|
|||
|
||||
SpriteID wire_base = GetWireBase(end, TCX_ON_BRIDGE);
|
||||
|
||||
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)
|
||||
);
|
||||
AddSortableSpriteToDraw(wire_base + sss->image_offset, PAL_NONE, ti->x, ti->y, height, *sss, IsTransparencySet(TO_CATENARY));
|
||||
|
||||
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
|
||||
* every other tile needs a pylon on the northern end */
|
||||
if (num % 2) {
|
||||
|
@ -545,7 +528,7 @@ void DrawRailCatenaryOnBridge(const TileInfo *ti)
|
|||
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 y = ti->y + _y_pcp_offsets[pcp_pos] + _y_ppp_offsets[ppp_pos];
|
||||
AddSortableSpriteToDraw(pylon_base + _pylon_sprites[ppp_pos], PAL_NONE, x, y, 1, 1, BB_HEIGHT_UNDER_BRIDGE, height, IsTransparencySet(TO_CATENARY), -1, -1);
|
||||
AddSortableSpriteToDraw(pylon_base + _pylon_sprites[ppp_pos], PAL_NONE, x, y, height, pylon_bounds, IsTransparencySet(TO_CATENARY));
|
||||
}
|
||||
|
||||
/* need a pylon on the southern end of the bridge */
|
||||
|
@ -555,7 +538,7 @@ void DrawRailCatenaryOnBridge(const TileInfo *ti)
|
|||
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 y = ti->y + _y_pcp_offsets[pcp_pos] + _y_ppp_offsets[ppp_pos];
|
||||
AddSortableSpriteToDraw(pylon_base + _pylon_sprites[ppp_pos], PAL_NONE, x, y, 1, 1, BB_HEIGHT_UNDER_BRIDGE, height, IsTransparencySet(TO_CATENARY), -1, -1);
|
||||
AddSortableSpriteToDraw(pylon_base + _pylon_sprites[ppp_pos], PAL_NONE, x, y, height, pylon_bounds, IsTransparencySet(TO_CATENARY));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -569,17 +552,12 @@ void DrawRailCatenary(const TileInfo *ti)
|
|||
switch (GetTileType(ti->tile)) {
|
||||
case MP_RAILWAY:
|
||||
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);
|
||||
|
||||
/* This wire is not visible with the default depot sprites */
|
||||
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)
|
||||
);
|
||||
AddSortableSpriteToDraw(wire_base + sss.image_offset, PAL_NONE, ti->x, ti->y, GetTileMaxPixelZ(ti->tile), sss, IsTransparencySet(TO_CATENARY));
|
||||
return;
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -323,7 +323,7 @@ static void StartGeneratingLandscape(GenerateLandscapeWindowMode mode)
|
|||
MakeNewgameSettingsLive();
|
||||
ResetGRFConfig(true);
|
||||
|
||||
if (_settings_client.sound.confirm) SndPlayFx(SND_15_BEEP);
|
||||
SndConfirmBeep();
|
||||
switch (mode) {
|
||||
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;
|
||||
|
@ -654,26 +654,27 @@ struct GenerateLandscapeWindow : public Window {
|
|||
case WID_GL_TROPICAL:
|
||||
case WID_GL_TOYLAND:
|
||||
SetNewLandscapeType(LandscapeType(widget - WID_GL_TEMPERATE));
|
||||
SndClickBeep();
|
||||
break;
|
||||
|
||||
case WID_GL_MAPSIZE_X_PULLDOWN: // Mapsize X
|
||||
ShowDropDownList(this, BuildMapsizeDropDown(), _settings_newgame.game_creation.map_x, WID_GL_MAPSIZE_X_PULLDOWN);
|
||||
this->HandleDropdownListButtonClick(BuildMapsizeDropDown(), _settings_newgame.game_creation.map_x, WID_GL_MAPSIZE_X_PULLDOWN);
|
||||
break;
|
||||
|
||||
case WID_GL_MAPSIZE_Y_PULLDOWN: // Mapsize Y
|
||||
ShowDropDownList(this, BuildMapsizeDropDown(), _settings_newgame.game_creation.map_y, WID_GL_MAPSIZE_Y_PULLDOWN);
|
||||
this->HandleDropdownListButtonClick(BuildMapsizeDropDown(), _settings_newgame.game_creation.map_y, WID_GL_MAPSIZE_Y_PULLDOWN);
|
||||
break;
|
||||
|
||||
case WID_GL_TOWN_PULLDOWN: // Number of towns
|
||||
ShowDropDownMenu(this, _num_towns, _settings_newgame.difficulty.number_towns, WID_GL_TOWN_PULLDOWN, 0, 0);
|
||||
this->HandleDropdownMenuButtonClick(_num_towns, _settings_newgame.difficulty.number_towns, WID_GL_TOWN_PULLDOWN, 0, 0);
|
||||
break;
|
||||
|
||||
case WID_GL_TOWNNAME_DROPDOWN: // Townname generator
|
||||
ShowDropDownList(this, BuildTownNameDropDown(), _settings_newgame.game_creation.town_name, WID_GL_TOWNNAME_DROPDOWN);
|
||||
this->HandleDropdownListButtonClick(BuildTownNameDropDown(), _settings_newgame.game_creation.town_name, WID_GL_TOWNNAME_DROPDOWN);
|
||||
break;
|
||||
|
||||
case WID_GL_INDUSTRY_PULLDOWN: // Number of industries
|
||||
ShowDropDownMenu(this, _num_inds, _settings_newgame.difficulty.industry_density, WID_GL_INDUSTRY_PULLDOWN, 0, 0);
|
||||
this->HandleDropdownMenuButtonClick(_num_inds, _settings_newgame.difficulty.industry_density, WID_GL_INDUSTRY_PULLDOWN, 0, 0);
|
||||
break;
|
||||
|
||||
case WID_GL_GENERATE_BUTTON: { // Generate
|
||||
|
@ -718,6 +719,7 @@ struct GenerateLandscapeWindow : public Window {
|
|||
case WID_GL_HEIGHTMAP_HEIGHT_TEXT: // Height level 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);
|
||||
SndClickBeep();
|
||||
break;
|
||||
|
||||
|
||||
|
@ -753,6 +755,7 @@ struct GenerateLandscapeWindow : public Window {
|
|||
case WID_GL_SNOW_COVERAGE_TEXT: // 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);
|
||||
SndClickBeep();
|
||||
break;
|
||||
|
||||
case WID_GL_DESERT_COVERAGE_DOWN:
|
||||
|
@ -770,15 +773,16 @@ struct GenerateLandscapeWindow : public Window {
|
|||
case WID_GL_DESERT_COVERAGE_TEXT: // Desert line 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);
|
||||
SndClickBeep();
|
||||
break;
|
||||
|
||||
case WID_GL_HEIGHTMAP_ROTATION_PULLDOWN: // Heightmap rotation
|
||||
ShowDropDownMenu(this, _rotation, _settings_newgame.game_creation.heightmap_rotation, WID_GL_HEIGHTMAP_ROTATION_PULLDOWN, 0, 0);
|
||||
this->HandleDropdownMenuButtonClick(_rotation, _settings_newgame.game_creation.heightmap_rotation, WID_GL_HEIGHTMAP_ROTATION_PULLDOWN, 0, 0);
|
||||
break;
|
||||
|
||||
case WID_GL_TERRAIN_PULLDOWN: // Terrain type
|
||||
/* For the original map generation only the first four are valid. */
|
||||
ShowDropDownMenu(this, _elevations, _settings_newgame.difficulty.terrain_type, WID_GL_TERRAIN_PULLDOWN, 0, _settings_newgame.game_creation.land_generator == LG_ORIGINAL ? ~0xF : 0);
|
||||
this->HandleDropdownMenuButtonClick(_elevations, _settings_newgame.difficulty.terrain_type, WID_GL_TERRAIN_PULLDOWN, 0, _settings_newgame.game_creation.land_generator == LG_ORIGINAL ? ~0xF : 0);
|
||||
break;
|
||||
|
||||
case WID_GL_WATER_PULLDOWN: { // Water quantity
|
||||
|
@ -787,45 +791,50 @@ struct GenerateLandscapeWindow : public Window {
|
|||
if (_settings_newgame.game_creation.land_generator == LG_ORIGINAL) {
|
||||
SetBit(hidden_mask, CUSTOM_SEA_LEVEL_NUMBER_DIFFICULTY);
|
||||
}
|
||||
ShowDropDownMenu(this, _sea_lakes, _settings_newgame.difficulty.quantity_sea_lakes, WID_GL_WATER_PULLDOWN, 0, hidden_mask);
|
||||
this->HandleDropdownMenuButtonClick(_sea_lakes, _settings_newgame.difficulty.quantity_sea_lakes, WID_GL_WATER_PULLDOWN, 0, hidden_mask);
|
||||
break;
|
||||
}
|
||||
|
||||
case WID_GL_RIVER_PULLDOWN: // Amount of rivers
|
||||
ShowDropDownMenu(this, _rivers, _settings_newgame.game_creation.amount_of_rivers, WID_GL_RIVER_PULLDOWN, 0, 0);
|
||||
this->HandleDropdownMenuButtonClick(_rivers, _settings_newgame.game_creation.amount_of_rivers, WID_GL_RIVER_PULLDOWN, 0, 0);
|
||||
break;
|
||||
|
||||
case WID_GL_SMOOTHNESS_PULLDOWN: // Map smoothness
|
||||
ShowDropDownMenu(this, _smoothness, _settings_newgame.game_creation.tgen_smoothness, WID_GL_SMOOTHNESS_PULLDOWN, 0, 0);
|
||||
this->HandleDropdownMenuButtonClick(_smoothness, _settings_newgame.game_creation.tgen_smoothness, WID_GL_SMOOTHNESS_PULLDOWN, 0, 0);
|
||||
break;
|
||||
|
||||
case WID_GL_VARIETY_PULLDOWN: // Map variety
|
||||
ShowDropDownMenu(this, _variety, _settings_newgame.game_creation.variety, WID_GL_VARIETY_PULLDOWN, 0, 0);
|
||||
this->HandleDropdownMenuButtonClick(_variety, _settings_newgame.game_creation.variety, WID_GL_VARIETY_PULLDOWN, 0, 0);
|
||||
break;
|
||||
|
||||
/* Freetype map borders */
|
||||
case WID_GL_WATER_NW:
|
||||
_settings_newgame.game_creation.water_borders.Flip(BorderFlag::NorthWest);
|
||||
SndClickBeep();
|
||||
this->InvalidateData();
|
||||
break;
|
||||
|
||||
case WID_GL_WATER_NE:
|
||||
_settings_newgame.game_creation.water_borders.Flip(BorderFlag::NorthEast);
|
||||
SndClickBeep();
|
||||
this->InvalidateData();
|
||||
break;
|
||||
|
||||
case WID_GL_WATER_SE:
|
||||
_settings_newgame.game_creation.water_borders.Flip(BorderFlag::SouthEast);
|
||||
SndClickBeep();
|
||||
this->InvalidateData();
|
||||
break;
|
||||
|
||||
case WID_GL_WATER_SW:
|
||||
_settings_newgame.game_creation.water_borders.Flip(BorderFlag::SouthWest);
|
||||
SndClickBeep();
|
||||
this->InvalidateData();
|
||||
break;
|
||||
|
||||
case WID_GL_BORDERS_RANDOM:
|
||||
_settings_newgame.game_creation.water_borders = (_settings_newgame.game_creation.water_borders == BorderFlag::Random) ? BorderFlag{} : BorderFlag::Random;
|
||||
SndClickBeep();
|
||||
this->InvalidateData();
|
||||
break;
|
||||
|
||||
|
@ -1134,11 +1143,11 @@ struct CreateScenarioWindow : public Window
|
|||
break;
|
||||
|
||||
case WID_CS_MAPSIZE_X_PULLDOWN: // Mapsize X
|
||||
ShowDropDownList(this, BuildMapsizeDropDown(), _settings_newgame.game_creation.map_x, WID_CS_MAPSIZE_X_PULLDOWN);
|
||||
this->HandleDropdownListButtonClick(BuildMapsizeDropDown(), _settings_newgame.game_creation.map_x, WID_CS_MAPSIZE_X_PULLDOWN);
|
||||
break;
|
||||
|
||||
case WID_CS_MAPSIZE_Y_PULLDOWN: // Mapsize Y
|
||||
ShowDropDownList(this, BuildMapsizeDropDown(), _settings_newgame.game_creation.map_y, WID_CS_MAPSIZE_Y_PULLDOWN);
|
||||
this->HandleDropdownListButtonClick(BuildMapsizeDropDown(), _settings_newgame.game_creation.map_y, WID_CS_MAPSIZE_Y_PULLDOWN);
|
||||
break;
|
||||
|
||||
case WID_CS_EMPTY_WORLD: // Empty world / flat world
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
#include "cargotype.h"
|
||||
#include "strings_func.h"
|
||||
#include "window_func.h"
|
||||
#include "sound_func.h"
|
||||
#include "gfx_func.h"
|
||||
#include "core/geometry_func.hpp"
|
||||
#include "currency.h"
|
||||
|
@ -90,6 +91,8 @@ struct GraphLegendWindow : Window {
|
|||
InvalidateWindowData(WC_DELIVERED_CARGO, 0);
|
||||
InvalidateWindowData(WC_PERFORMANCE_HISTORY, 0);
|
||||
InvalidateWindowData(WC_COMPANY_VALUE, 0);
|
||||
|
||||
SndClickBeep();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -718,6 +721,7 @@ public:
|
|||
|
||||
if (HasBit(this->masked_range, row)) break;
|
||||
ToggleBit(this->excluded_range, row);
|
||||
SndClickBeep();
|
||||
this->SetDirty();
|
||||
break;
|
||||
}
|
||||
|
@ -1255,6 +1259,8 @@ struct BaseCargoGraphWindow : BaseGraphWindow {
|
|||
int row = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_GRAPH_MATRIX);
|
||||
if (row >= this->vscroll->GetCount()) return;
|
||||
|
||||
SndClickBeep();
|
||||
|
||||
for (const CargoSpec *cs : _sorted_cargo_specs) {
|
||||
if (!HasBit(this->cargo_types, cs->Index())) continue;
|
||||
if (row-- > 0) continue;
|
||||
|
|
|
@ -700,15 +700,15 @@ public:
|
|||
break;
|
||||
|
||||
case WID_GL_GROUP_BY_DROPDOWN: // Select grouping option dropdown menu
|
||||
ShowDropDownMenu(this, this->vehicle_group_by_names, this->grouping, WID_GL_GROUP_BY_DROPDOWN, 0, 0);
|
||||
this->HandleDropdownMenuButtonClick(this->vehicle_group_by_names, this->grouping, WID_GL_GROUP_BY_DROPDOWN, 0, 0);
|
||||
return;
|
||||
|
||||
case WID_GL_SORT_BY_DROPDOWN: // Select sorting criteria dropdown menu
|
||||
ShowDropDownMenu(this, this->GetVehicleSorterNames(), this->vehgroups.SortType(), WID_GL_SORT_BY_DROPDOWN, 0, (this->vli.vtype == VEH_TRAIN || this->vli.vtype == VEH_ROAD) ? 0 : (1 << 10));
|
||||
this->HandleDropdownMenuButtonClick(this->GetVehicleSorterNames(), this->vehgroups.SortType(), WID_GL_SORT_BY_DROPDOWN, 0, (this->vli.vtype == VEH_TRAIN || this->vli.vtype == VEH_ROAD) ? 0 : (1 << 10));
|
||||
return;
|
||||
|
||||
case WID_GL_FILTER_BY_CARGO: // Select filtering criteria dropdown menu
|
||||
ShowDropDownList(this, this->BuildCargoDropDownList(false), this->cargo_filter_criteria, widget);
|
||||
this->HandleDropdownListButtonClick(this->BuildCargoDropDownList(false), this->cargo_filter_criteria, widget);
|
||||
break;
|
||||
|
||||
case WID_GL_ALL_VEHICLES: // All vehicles button
|
||||
|
@ -849,7 +849,7 @@ public:
|
|||
break;
|
||||
|
||||
case WID_GL_MANAGE_VEHICLES_DROPDOWN: {
|
||||
ShowDropDownList(this, this->BuildActionDropdownList(true, Group::IsValidID(this->vli.ToGroupID()), IsDefaultGroupID(this->vli.ToGroupID())), -1, WID_GL_MANAGE_VEHICLES_DROPDOWN);
|
||||
this->HandleDropdownListButtonClick(this->BuildActionDropdownList(true, Group::IsValidID(this->vli.ToGroupID()), IsDefaultGroupID(this->vli.ToGroupID())), -1, WID_GL_MANAGE_VEHICLES_DROPDOWN);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -374,13 +374,7 @@ static void DrawTile_Industry(TileInfo *ti)
|
|||
image = dits->building.sprite;
|
||||
if (image != 0) {
|
||||
AddSortableSpriteToDraw(image, SpriteLayoutPaletteTransform(image, dits->building.pal, GetColourPalette(ind->random_colour)),
|
||||
ti->x + dits->subtile_x,
|
||||
ti->y + dits->subtile_y,
|
||||
dits->width,
|
||||
dits->height,
|
||||
dits->dz,
|
||||
ti->z,
|
||||
IsTransparencySet(TO_INDUSTRIES));
|
||||
*ti, *dits, IsTransparencySet(TO_INDUSTRIES));
|
||||
|
||||
if (IsTransparencySet(TO_INDUSTRIES)) return;
|
||||
}
|
||||
|
|
|
@ -1798,15 +1798,15 @@ public:
|
|||
break;
|
||||
|
||||
case WID_ID_DROPDOWN_CRITERIA:
|
||||
ShowDropDownMenu(this, IndustryDirectoryWindow::sorter_names, this->industries.SortType(), WID_ID_DROPDOWN_CRITERIA, 0, 0);
|
||||
this->HandleDropdownMenuButtonClick(IndustryDirectoryWindow::sorter_names, this->industries.SortType(), WID_ID_DROPDOWN_CRITERIA, 0, 0);
|
||||
break;
|
||||
|
||||
case WID_ID_FILTER_BY_ACC_CARGO: // Cargo filter dropdown
|
||||
ShowDropDownList(this, this->BuildCargoDropDownList(), this->accepted_cargo_filter_criteria, widget);
|
||||
this->HandleDropdownListButtonClick(this->BuildCargoDropDownList(), this->accepted_cargo_filter_criteria, widget);
|
||||
break;
|
||||
|
||||
case WID_ID_FILTER_BY_PROD_CARGO: // Cargo filter dropdown
|
||||
ShowDropDownList(this, this->BuildCargoDropDownList(), this->produced_cargo_filter_criteria, widget);
|
||||
this->HandleDropdownListButtonClick(this->BuildCargoDropDownList(), this->produced_cargo_filter_criteria, widget);
|
||||
break;
|
||||
|
||||
case WID_ID_INDUSTRY_LIST: {
|
||||
|
@ -3076,7 +3076,7 @@ struct IndustryCargoesWindow : public Window {
|
|||
case WID_IC_NOTIFY:
|
||||
this->ToggleWidgetLoweredState(WID_IC_NOTIFY);
|
||||
this->SetWidgetDirty(WID_IC_NOTIFY);
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
|
||||
if (this->IsWidgetLowered(WID_IC_NOTIFY)) {
|
||||
if (FindWindowByClass(WC_SMALLMAP) == nullptr) ShowSmallMap();
|
||||
|
@ -3092,7 +3092,7 @@ struct IndustryCargoesWindow : public Window {
|
|||
}
|
||||
if (!lst.empty()) {
|
||||
int selected = (this->ind_cargo >= NUM_INDUSTRYTYPES) ? (int)(this->ind_cargo - NUM_INDUSTRYTYPES) : -1;
|
||||
ShowDropDownList(this, std::move(lst), selected, WID_IC_CARGO_DROPDOWN);
|
||||
this->HandleDropdownListButtonClick(std::move(lst), selected, WID_IC_CARGO_DROPDOWN);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -3106,7 +3106,7 @@ struct IndustryCargoesWindow : public Window {
|
|||
}
|
||||
if (!lst.empty()) {
|
||||
int selected = (this->ind_cargo < NUM_INDUSTRYTYPES) ? (int)this->ind_cargo : -1;
|
||||
ShowDropDownList(this, std::move(lst), selected, WID_IC_IND_DROPDOWN);
|
||||
this->HandleDropdownListButtonClick(std::move(lst), selected, WID_IC_IND_DROPDOWN);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -450,9 +450,8 @@ void DrawFoundation(TileInfo *ti, Foundation f)
|
|||
if (IsSteepSlope(ti->tileh)) {
|
||||
if (!IsNonContinuousFoundation(f)) {
|
||||
/* Lower part of foundation */
|
||||
AddSortableSpriteToDraw(
|
||||
leveled_base + (ti->tileh & ~SLOPE_STEEP), PAL_NONE, ti->x, ti->y, TILE_SIZE, TILE_SIZE, TILE_HEIGHT - 1, ti->z
|
||||
);
|
||||
static constexpr SpriteBounds bounds{{}, {TILE_SIZE, TILE_SIZE, TILE_HEIGHT - 1}, {}};
|
||||
AddSortableSpriteToDraw(leveled_base + (ti->tileh & ~SLOPE_STEEP), PAL_NONE, *ti, bounds);
|
||||
}
|
||||
|
||||
Corner highest_corner = GetHighestSlopeCorner(ti->tileh);
|
||||
|
@ -462,24 +461,25 @@ void DrawFoundation(TileInfo *ti, Foundation f)
|
|||
/* inclined foundation */
|
||||
uint8_t inclined = highest_corner * 2 + (f == FOUNDATION_INCLINED_Y ? 1 : 0);
|
||||
|
||||
AddSortableSpriteToDraw(inclined_base + inclined, PAL_NONE, ti->x, ti->y,
|
||||
f == FOUNDATION_INCLINED_X ? TILE_SIZE : 1,
|
||||
f == FOUNDATION_INCLINED_Y ? TILE_SIZE : 1,
|
||||
TILE_HEIGHT, ti->z
|
||||
);
|
||||
SpriteBounds bounds{{}, {1, 1, TILE_HEIGHT}, {}};
|
||||
if (f == FOUNDATION_INCLINED_X) bounds.extent.x = TILE_SIZE;
|
||||
if (f == FOUNDATION_INCLINED_Y) bounds.extent.y = TILE_SIZE;
|
||||
AddSortableSpriteToDraw(inclined_base + inclined, PAL_NONE, *ti, bounds);
|
||||
OffsetGroundSprite(0, 0);
|
||||
} else if (IsLeveledFoundation(f)) {
|
||||
AddSortableSpriteToDraw(leveled_base + SlopeWithOneCornerRaised(highest_corner), PAL_NONE, ti->x, ti->y, TILE_SIZE, TILE_SIZE, TILE_HEIGHT - 1, ti->z - TILE_HEIGHT);
|
||||
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, bounds);
|
||||
OffsetGroundSprite(0, -(int)TILE_HEIGHT);
|
||||
} else if (f == FOUNDATION_STEEP_LOWER) {
|
||||
/* one corner raised */
|
||||
OffsetGroundSprite(0, -(int)TILE_HEIGHT);
|
||||
} else {
|
||||
/* halftile foundation */
|
||||
int x_bb = (((highest_corner == CORNER_W) || (highest_corner == CORNER_S)) ? TILE_SIZE / 2 : 0);
|
||||
int y_bb = (((highest_corner == CORNER_S) || (highest_corner == CORNER_E)) ? TILE_SIZE / 2 : 0);
|
||||
int8_t 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);
|
||||
|
||||
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);
|
||||
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, bounds);
|
||||
/* Reposition ground sprite back to original position after bounding box change above. This is similar to
|
||||
* RemapCoords() but without zoom scaling. */
|
||||
Point pt = {(y_bb - x_bb) * 2, y_bb + x_bb};
|
||||
|
@ -488,15 +488,17 @@ void DrawFoundation(TileInfo *ti, Foundation f)
|
|||
} else {
|
||||
if (IsLeveledFoundation(f)) {
|
||||
/* leveled foundation */
|
||||
AddSortableSpriteToDraw(leveled_base + ti->tileh, PAL_NONE, ti->x, ti->y, TILE_SIZE, TILE_SIZE, TILE_HEIGHT - 1, ti->z);
|
||||
static constexpr SpriteBounds bounds{{}, {TILE_SIZE, TILE_SIZE, TILE_HEIGHT - 1}, {}};
|
||||
AddSortableSpriteToDraw(leveled_base + ti->tileh, PAL_NONE, *ti, bounds);
|
||||
OffsetGroundSprite(0, -(int)TILE_HEIGHT);
|
||||
} else if (IsNonContinuousFoundation(f)) {
|
||||
/* halftile foundation */
|
||||
Corner halftile_corner = GetHalftileFoundationCorner(f);
|
||||
int x_bb = (((halftile_corner == CORNER_W) || (halftile_corner == CORNER_S)) ? TILE_SIZE / 2 : 0);
|
||||
int y_bb = (((halftile_corner == CORNER_S) || (halftile_corner == CORNER_E)) ? TILE_SIZE / 2 : 0);
|
||||
int8_t 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);
|
||||
|
||||
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);
|
||||
SpriteBounds bounds{{x_bb, y_bb, 0}, {TILE_SIZE / 2, TILE_SIZE / 2, TILE_HEIGHT - 1}, {}};
|
||||
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
|
||||
* RemapCoords() but without zoom scaling. */
|
||||
Point pt = {(y_bb - x_bb) * 2, y_bb + x_bb};
|
||||
|
@ -511,17 +513,17 @@ void DrawFoundation(TileInfo *ti, Foundation f)
|
|||
/* 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);
|
||||
}
|
||||
AddSortableSpriteToDraw(spr, PAL_NONE, ti->x, ti->y, TILE_SIZE, TILE_SIZE, TILE_HEIGHT - 1, ti->z);
|
||||
static constexpr SpriteBounds bounds{{}, {TILE_SIZE, TILE_SIZE, TILE_HEIGHT - 1}, {}};
|
||||
AddSortableSpriteToDraw(spr, PAL_NONE, *ti, bounds);
|
||||
OffsetGroundSprite(0, 0);
|
||||
} else {
|
||||
/* inclined foundation */
|
||||
uint8_t inclined = GetHighestSlopeCorner(ti->tileh) * 2 + (f == FOUNDATION_INCLINED_Y ? 1 : 0);
|
||||
|
||||
AddSortableSpriteToDraw(inclined_base + inclined, PAL_NONE, ti->x, ti->y,
|
||||
f == FOUNDATION_INCLINED_X ? TILE_SIZE : 1,
|
||||
f == FOUNDATION_INCLINED_Y ? TILE_SIZE : 1,
|
||||
TILE_HEIGHT, ti->z
|
||||
);
|
||||
SpriteBounds bounds{{}, {1, 1, TILE_HEIGHT}, {}};
|
||||
if (f == FOUNDATION_INCLINED_X) bounds.extent.x = TILE_SIZE;
|
||||
if (f == FOUNDATION_INCLINED_Y) bounds.extent.y = TILE_SIZE;
|
||||
AddSortableSpriteToDraw(inclined_base + inclined, PAL_NONE, *ti, bounds);
|
||||
OffsetGroundSprite(0, 0);
|
||||
}
|
||||
ti->z += ApplyPixelFoundationToSlope(f, ti->tileh);
|
||||
|
|
|
@ -635,9 +635,11 @@ 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_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||
|
||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Histórico da Produção
|
||||
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} - Histórico de Carga
|
||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produzido
|
||||
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
|
||||
|
||||
|
@ -4025,8 +4027,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_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_PRODUCTION_GRAPH :{BLACK}Gráfico de Produção
|
||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Mostrar gráfico do histórico de produção da indústria
|
||||
STR_INDUSTRY_VIEW_CARGO_GRAPH :{BLACK}Gráfico da Carga
|
||||
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}Mostrar o gráfico do histórico de carga da indústria
|
||||
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!
|
||||
|
||||
|
|
|
@ -628,7 +628,6 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Скри
|
|||
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Активирай/деактивирай графиката за видовете товар
|
||||
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||
|
||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - История на производството
|
||||
|
||||
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Покажи подробен рейтинг на представянето
|
||||
|
||||
|
@ -3967,8 +3966,6 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Прои
|
|||
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Произведено последната минута:
|
||||
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% превозено)
|
||||
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_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Индустрията обяви незабавна ликвидация!
|
||||
|
||||
|
|
|
@ -635,7 +635,6 @@ 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_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_TRANSPORTED :Transportat
|
||||
|
||||
|
@ -4025,8 +4024,6 @@ 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_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_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_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}La indústria ha anunciat la seva clausura imminent!
|
||||
|
||||
|
|
|
@ -720,7 +720,6 @@ 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_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_TRANSPORTED :Přepraveno
|
||||
|
||||
|
@ -4069,8 +4068,6 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Produkce
|
|||
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_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_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Průmysl oznámila blížící se uzavření!
|
||||
|
||||
|
|
|
@ -633,7 +633,6 @@ 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_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||
|
||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Produktionshistorie
|
||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produceret
|
||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transporteret
|
||||
|
||||
|
@ -4013,8 +4012,6 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Produkti
|
|||
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_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_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industrien har rapporteret øjeblikkelig nedlukning!
|
||||
|
||||
|
|
|
@ -634,9 +634,11 @@ 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_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||
|
||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Productiegeschiedenis
|
||||
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} - Vrachtgeschiedenis
|
||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Geproduceerd
|
||||
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
|
||||
|
||||
|
@ -4024,8 +4026,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Producti
|
|||
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_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_PRODUCTION_GRAPH :{BLACK}Productiegrafiek
|
||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Geeft de grafiek weer van de productiegeschiedenis van de industrie
|
||||
STR_INDUSTRY_VIEW_CARGO_GRAPH :{BLACK}Vrachtgrafiek
|
||||
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}Geeft de grafiek weer van de geschiedenis van de vracht
|
||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Productieniveau: {YELLOW}{COMMA}%
|
||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}De industrie heeft een dreigende sluiting aangekondigd!
|
||||
|
||||
|
@ -5001,6 +5003,7 @@ STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}Vlak lan
|
|||
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_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_SITE_UNSUITABLE :{WHITE}... locatie ongeschikt
|
||||
STR_ERROR_ALREADY_BUILT :{WHITE}... reeds gebouwd
|
||||
|
|
|
@ -634,9 +634,11 @@ 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_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||
|
||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Production History
|
||||
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} - Cargo History
|
||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produced
|
||||
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
|
||||
|
||||
|
@ -4024,8 +4026,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Producti
|
|||
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_LOCATION_TOOLTIP :{BLACK}Centre the main view on industry location. Ctrl+Click to open a new viewport on industry location
|
||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Production Graph
|
||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Shows the graph of industry production history
|
||||
STR_INDUSTRY_VIEW_CARGO_GRAPH :{BLACK}Cargo Graph
|
||||
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}Shows the graph of industry cargo history
|
||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Production level: {YELLOW}{COMMA}%
|
||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}The industry has announced imminent closure!
|
||||
|
||||
|
|
|
@ -634,9 +634,11 @@ 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_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||
|
||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Production History
|
||||
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} - Cargo History
|
||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produced
|
||||
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
|
||||
|
||||
|
@ -4024,8 +4026,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Producti
|
|||
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_LOCATION_TOOLTIP :{BLACK}Center the main view on industry location. Ctrl+Click to open a new viewport on industry location
|
||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Production Graph
|
||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Shows the graph of industry production history
|
||||
STR_INDUSTRY_VIEW_CARGO_GRAPH :{BLACK}Cargo Graph
|
||||
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}Shows the graph of industry cargo history
|
||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Production level: {YELLOW}{COMMA}%
|
||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}The industry has announced imminent closure!
|
||||
|
||||
|
@ -5001,6 +5003,7 @@ STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}Flat lan
|
|||
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_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_SITE_UNSUITABLE :{WHITE}... site unsuitable
|
||||
STR_ERROR_ALREADY_BUILT :{WHITE}... already built
|
||||
|
|
|
@ -634,9 +634,11 @@ 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_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||
|
||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} – Tuotantohistoria
|
||||
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} – rahtihistoria
|
||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Tuotettu
|
||||
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
|
||||
|
||||
|
@ -4024,8 +4026,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Tuotanto
|
|||
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_LOCATION_TOOLTIP :{BLACK}Keskitä päänäkymä tuotantolaitoksen sijaintiin. Ctrl+napsautus avataksesi uuden näkymäikkunan laitoksen sijaintiin
|
||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Tuotannon kuvaaja
|
||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Näyttää tuotantohistorian kuvaajana
|
||||
STR_INDUSTRY_VIEW_CARGO_GRAPH :{BLACK}Rahdin kuvaaja
|
||||
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}Näyttää tuotantolaitoksen rahtihistorian kuvaajana
|
||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Tuotantotaso: {YELLOW}{COMMA}{NBSP}%
|
||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Teollisuuslaitos ilmoittaa välittömästä lakkautuksesta!
|
||||
|
||||
|
|
|
@ -634,7 +634,6 @@ 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_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_TRANSPORTED :Transporté
|
||||
|
||||
|
@ -4002,8 +4001,6 @@ 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_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_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_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}L'industrie a annoncé sa fermeture imminente{NBSP}!
|
||||
|
||||
|
|
|
@ -635,9 +635,11 @@ 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_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||
|
||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Historial de produción
|
||||
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} - Histórico de carga
|
||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Producido
|
||||
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
|
||||
|
||||
|
@ -4025,8 +4027,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_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_PRODUCTION_GRAPH :{BLACK}Gráfico de produción
|
||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Amosa o gráfico co histórico de produción industrial
|
||||
STR_INDUSTRY_VIEW_CARGO_GRAPH :{BLACK}Gráfica de carga
|
||||
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}Amosa o gráfico do histórico de cargas da industria
|
||||
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
|
||||
|
||||
|
@ -5002,6 +5004,7 @@ STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}Precísa
|
|||
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_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_SITE_UNSUITABLE :{WHITE}... emprazamento inadecuado
|
||||
STR_ERROR_ALREADY_BUILT :{WHITE}... xa construído
|
||||
|
|
|
@ -627,7 +627,6 @@ 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_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||
|
||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Produktionshistorie
|
||||
|
||||
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Zeige detailierte Leistungsaufschlüsselung
|
||||
|
||||
|
@ -3958,8 +3957,6 @@ 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_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_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_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Diese Industrie wird in Kürze schließen!
|
||||
|
||||
|
|
|
@ -727,9 +727,11 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Εμφά
|
|||
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Εναλλαγή γραφήματος αυτού του τύπου φορτίου
|
||||
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||
|
||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Ιστορικό Παραγωγής
|
||||
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} - Ιστορικό φορτίου
|
||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Παράχθηκε/αν
|
||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Μεταφέρθηκε/αν
|
||||
STR_GRAPH_INDUSTRY_RANGE_DELIVERED :Παραδόθηκε
|
||||
STR_GRAPH_INDUSTRY_RANGE_WAITING :Αναμονή
|
||||
|
||||
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Εμφάνιση λεπτομεριών αποδόσεων
|
||||
|
||||
|
@ -4118,8 +4120,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Παρα
|
|||
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Παραγωγή τελευταίου λεπτού:
|
||||
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% μεταφέρθηκαν)
|
||||
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Κεντράρισμα εικόνας στην περιοχή της βιομηχανίας. Ctrl+Κλικ για άνοιγμα νέου παραθύρου προβολής στην περιοχή της βιομηχανίας
|
||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}Γράφημα Παραγωγής
|
||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Εμφανίζει το γράφημα ιστορικού παραγωγής της βιομηχανίας
|
||||
STR_INDUSTRY_VIEW_CARGO_GRAPH :{BLACK}Γράφημα φορτίου
|
||||
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}Εμφανίζει το γράφημα του ιστορικού του φορτίου της βιομηχανίας
|
||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Επίπεδο παραγωγής: {YELLOW}{COMMA}%
|
||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Η βιομηχανία έχει ανακοινώσει άμεσο κλείσιμο!
|
||||
|
||||
|
|
|
@ -697,9 +697,11 @@ 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_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||
|
||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Termelési előzmények
|
||||
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} - Rakománytörténet
|
||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Előállított
|
||||
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
|
||||
|
||||
|
@ -4088,8 +4090,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_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_PRODUCTION_GRAPH :{BLACK}Termelési grafikon
|
||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Megjeleníti az ipar termelési történetének grafikonját
|
||||
STR_INDUSTRY_VIEW_CARGO_GRAPH :{BLACK}Rakomány grafikon
|
||||
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}Megmutatja az iparág rakománytörténetének grafikonját
|
||||
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!
|
||||
|
||||
|
@ -5065,6 +5067,7 @@ 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_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_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_SITE_UNSUITABLE :{WHITE}... nem alkalmas rá a hely
|
||||
STR_ERROR_ALREADY_BUILT :{WHITE}... már van itt
|
||||
|
|
|
@ -437,6 +437,7 @@ STR_SETTINGS_MENU_NEWGRF_SETTINGS :NewGRFの設定
|
|||
STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :透過表示設定
|
||||
STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :街名を表示
|
||||
STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :駅名を表示
|
||||
STR_SETTINGS_MENU_STATION_NAMES_BUS :バス停
|
||||
STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :中継駅名を表示
|
||||
STR_SETTINGS_MENU_SIGNS_DISPLAYED :標識を表示
|
||||
STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS :競争者の標識と名前を表示
|
||||
|
@ -522,6 +523,7 @@ STR_ABOUT_MENU_ABOUT_OPENTTD :OpenTTDにつ
|
|||
STR_ABOUT_MENU_SPRITE_ALIGNER :スプライトを整列
|
||||
STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :バウンディングボックスの表示切替
|
||||
STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :ダーティーブロックの色付け切替
|
||||
STR_ABOUT_MENU_TOGGLE_WIDGET_OUTLINES :ウィジェットの枠線の表示切替
|
||||
|
||||
###length 31
|
||||
STR_DAY_NUMBER_1ST :1
|
||||
|
@ -1203,12 +1205,14 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :中央
|
|||
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_HELPTEXT :初期の借入限度額を設定します (インフレは考慮されません)
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :初期の借入限度額を設定します (インフレは考慮されません)。「借入金なし」に設定した場合、ゲームスクリプトか「無限の資金」オプションによる提供がない限り、資金は利用できなくなります。
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG}
|
||||
###setting-zero-is-special
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :借入金なし {RED}ゲームスクリプトで資金を受給する必要があります
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :借入金なし
|
||||
|
||||
STR_CONFIG_SETTING_INTEREST_RATE :金利: {STRING}
|
||||
STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :借入利率を設定します (インフレ設定を有効にしたときのインフレ率にも影響します)
|
||||
|
@ -1247,7 +1251,7 @@ STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :設定を有効
|
|||
STR_CONFIG_SETTING_DISASTERS :災害: {STRING}
|
||||
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_MAP_HEIGHT_LIMIT :マップ高さ限界: {STRING}
|
||||
|
@ -1351,10 +1355,10 @@ STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT_FULLSCREEN :する (フル
|
|||
STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT :する
|
||||
STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT :する (ビューポートでも有効)
|
||||
|
||||
STR_CONFIG_SETTING_BRIBE :議会の買収: {STRING}
|
||||
STR_CONFIG_SETTING_BRIBE :地方自治体の贈賄: {STRING}
|
||||
###length 2
|
||||
STR_CONFIG_SETTING_BRIBE_HELPTEXT :街で議会買収を企てられるようになります。成功すれば街での評判が良くなりますが、地元当局に事が発覚した場合罰金を受けた上評判が悪くなり、その上その街では半年間何もできなくなります
|
||||
STR_CONFIG_SETTING_BRIBE_HELPTEXT_MINUTES :会社が議会買収を企てられるようにします。もし当局に事が発覚した場合、買収した会社は当該自治体では半年間何もできなくなります
|
||||
STR_CONFIG_SETTING_BRIBE_HELPTEXT :地方自治体への贈賄を企てられるようにします。もし当局に事が発覚した場合、贈賄を試みた会社は当該自治体では半年間何もできなくなります
|
||||
STR_CONFIG_SETTING_BRIBE_HELPTEXT_MINUTES :地方自治体への贈賄を企てられるようにします。もし当局に事が発覚した場合、贈賄を試みた会社は当該自治体では半年間何もできなくなります
|
||||
|
||||
STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :独占運送契約の締結: {STRING}
|
||||
###length 2
|
||||
|
@ -1424,6 +1428,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :有効にする
|
|||
|
||||
###setting-zero-is-special
|
||||
|
||||
STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}%
|
||||
|
||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :老朽車両の自動交換: {STRING}
|
||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :有効にすると、耐用年数を越えた輸送機器は自動で更新されるようになります(交換には一度格納施設に戻る必要があります)。具体的な交換時期は下の設定で変更できます。
|
||||
|
@ -1858,7 +1863,7 @@ STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :街の自治体
|
|||
STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :街路との平面交差を許可: {STRING}
|
||||
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_TOWN_FOUNDING :ゲーム中での街新設: {STRING}
|
||||
|
@ -1936,9 +1941,9 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :初期の都市
|
|||
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :ゲーム開始時に都市が普通の街に比べて平均して何倍の人口規模になるかを設定します
|
||||
|
||||
STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :行先分配グラフを{STRING}秒毎に更新
|
||||
STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :行先分配グラフの更新の間の待ち時間。各更新はグラフの一部だけのルートを再計算します。即ち、この設定を〇〇秒に指定する場合、全グラフが〇〇秒毎に更新されるのではありません。間隔が短ければ短いほどCPU時間を消費します。長ければ長いほど貨物流通の新規ルートの行先分配に時間がかかります。
|
||||
STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :行先分配グラフの再計算間隔。各計算タイミングでは一部のグラフのみが再計算されます。よって、ここ設定した X 秒ごとにグラフ全体が更新されるというわけではありません。再計算の間隔が短ければ短いほどCPU時間を消費します。長ければ長いほど貨物流通の新規ルートの行先分配に時間がかかります。
|
||||
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_HELPTEXT :旅客がどのように行き先別に分配されるかを設定します。「対称」ではAからBへ向かう乗客とほぼ同数が、BからAに向かうようになります。 「非対称」ではそれぞれの方向に向かう旅客数は独立に決められます。「無効」では行き先別分配をしなくなります。
|
||||
|
@ -1954,7 +1959,7 @@ STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :非対称
|
|||
STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :対称
|
||||
|
||||
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_HELPTEXT :0より大きい値に設定すると、ある貨物の生産先Aと受取可能先Bとの距離がAからBへ送られる貨物量に影響を及ぼすようになります。高い値を設定すればするほど、遠い施設に送られる貨物量は少なくなり、近場の施設に送られる量が大きくなります
|
||||
|
@ -2058,8 +2063,10 @@ STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}ファ
|
|||
# Video initalization errors
|
||||
STR_VIDEO_DRIVER_ERROR :{WHITE}ビデオ設定にエラーがあります...
|
||||
STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... 対応する GPU が見つかりません。ハードウェアアクセラレーションは無効になります。
|
||||
STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... GPUドライバーがゲームをクラッシュさせました。ハードウェアアクセラレーションは無効になりました
|
||||
|
||||
# Intro window
|
||||
STR_INTRO_CAPTION :{WHITE}OpenTTD
|
||||
|
||||
STR_INTRO_NEW_GAME :{BLACK}新しいゲーム
|
||||
STR_INTRO_LOAD_GAME :{BLACK}ロード
|
||||
|
@ -2070,6 +2077,7 @@ STR_INTRO_MULTIPLAYER :{BLACK}マル
|
|||
|
||||
STR_INTRO_GAME_OPTIONS :{BLACK}基本設定
|
||||
STR_INTRO_HIGHSCORE :{BLACK}ハイスコア
|
||||
STR_INTRO_HELP :{BLACK}ヘルプとマニュアル
|
||||
STR_INTRO_ONLINE_CONTENT :{BLACK}オンラインコンテンツの確認
|
||||
STR_INTRO_QUIT :{BLACK}終了
|
||||
|
||||
|
@ -2121,14 +2129,14 @@ STR_HELP_WINDOW_COMMUNITY :{BLACK}コミ
|
|||
STR_CHEATS :{WHITE}サンドボックスのオプション
|
||||
STR_CHEAT_MONEY :{LTBLUE}預金残高を{CURRENCY_LONG}増やす
|
||||
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_NO_JETCRASH :{LTBLUE}ジェット機の小型空港での墜落率を減少: {ORANGE}{STRING}
|
||||
STR_CHEAT_EDIT_MAX_HL :{LTBLUE}マップの最高高度を変更: {ORANGE}{NUM}
|
||||
STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}マップの最大高度
|
||||
STR_CHEAT_CHANGE_DATE :{LTBLUE}日付を変更: {ORANGE}{DATE_SHORT}
|
||||
STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}現在日時を変更
|
||||
STR_CHEAT_SETUP_PROD :{LTBLUE}生産量変更: {ORANGE}{STRING}
|
||||
STR_CHEAT_SETUP_PROD :{LTBLUE}産業の生産量の変更を有効化: {ORANGE}{STRING}
|
||||
|
||||
# Livery window
|
||||
STR_LIVERY_CAPTION :{WHITE}{COMPANY} - 配色
|
||||
|
@ -2457,6 +2465,7 @@ STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :リンクグラ
|
|||
STR_NETWORK_MESSAGE_CLIENT_LEAVING :退出
|
||||
STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} が参加してきました
|
||||
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_NEW :*** {STRING} が新会社 (#{NUM}) を設立しました
|
||||
STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} が退出しました({STRING})
|
||||
|
@ -2672,6 +2681,7 @@ STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}道路
|
|||
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}建設したい橋の種類をクリックしてください
|
||||
STR_SELECT_BRIDGE_INFO_NAME :{GOLD}{STRING}
|
||||
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_BRIDGE_NAME_SUSPENSION_STEEL :吊橋(S造)
|
||||
STR_BRIDGE_NAME_GIRDER_STEEL :桁橋(S造)
|
||||
|
@ -3458,7 +3468,7 @@ STR_LOCAL_AUTHORITY_ACTION_ROAD_RECONSTRUCTION :道路補修に
|
|||
STR_LOCAL_AUTHORITY_ACTION_STATUE_OF_COMPANY :社長の彫像を建設
|
||||
STR_LOCAL_AUTHORITY_ACTION_NEW_BUILDINGS :市街地開発に出資
|
||||
STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :独占運送契約を締結
|
||||
STR_LOCAL_AUTHORITY_ACTION_BRIBE :議会を買収
|
||||
STR_LOCAL_AUTHORITY_ACTION_BRIBE :地方自治体への贈賄
|
||||
###next-name-looks-similar
|
||||
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{PUSH_COLOUR}{YELLOW}旅客と貨物を確保する為に、街で新聞広告を実施します。{}より多くの旅客と貨物が自社の交通網を利用するようになります。{}{POP_COLOUR}費用: {CURRENCY_LONG}
|
||||
|
@ -3466,7 +3476,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_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_BRIBE :{PUSH_COLOUR}{YELLOW}買収を行い、議会内の評判を高めます。注意: 露見した場合は処罰されます{}{POP_COLOUR}費用: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}贈賄を通じて地方自治体内の評判を高めます。注意: 露見した場合は処罰されます{}{POP_COLOUR}費用: {CURRENCY_LONG}
|
||||
|
||||
# Goal window
|
||||
STR_GOALS_CAPTION :{WHITE}{COMPANY} 目標
|
||||
|
@ -4374,6 +4384,7 @@ STR_ORDER_REFIT_STOP_ORDER :({STRING}に改
|
|||
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_IMPLICIT :(自動)
|
||||
|
@ -4432,6 +4443,7 @@ STR_TIMETABLE_TOOLTIP :{BLACK}ダイ
|
|||
STR_TIMETABLE_NO_TRAVEL :運行計画無
|
||||
STR_TIMETABLE_NOT_TIMETABLEABLE :該当区間を運行 (次の手動指令により自動設定)
|
||||
STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :該当区間を運行 (ダイヤ設定無)
|
||||
STR_TIMETABLE_TRAVEL_NOT_TIMETABLED_SPEED :最高速度{VELOCITY}で該当区間を運行 (ダイヤ設定無)
|
||||
STR_TIMETABLE_TRAVEL_FOR :{STRING}で該当区間を運行
|
||||
STR_TIMETABLE_TRAVEL_FOR_SPEED :{STRING}で該当区間を運行(最高速度{VELOCITY})
|
||||
STR_TIMETABLE_TRAVEL_FOR_ESTIMATED :運行({0:STRING}・ダイヤ設定無)
|
||||
|
@ -4525,14 +4537,14 @@ STR_AI_CONFIG_MOVE_DOWN :{BLACK}下に
|
|||
STR_AI_CONFIG_MOVE_DOWN_TOOLTIP :{BLACK}選択したAIの順位を下げる
|
||||
|
||||
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_CHANGE_AI :{BLACK}AIを選択
|
||||
STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}ゲームスクリプトを選択
|
||||
STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}他のスクリプトをロードします。Ctrl+クリックで全ての利用可能バージョンを表示します
|
||||
STR_AI_CONFIG_CONFIGURE :{BLACK}設定
|
||||
STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}スクリプトのパラメータを設定します
|
||||
STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}スクリプトのパラメーターを設定します
|
||||
|
||||
# Available AIs window
|
||||
STR_AI_LIST_CAPTION :{WHITE}使用可能な{STRING}
|
||||
|
@ -4556,8 +4568,8 @@ STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}ハイ
|
|||
STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}ミニマップのスクリーンショット
|
||||
|
||||
# Script Parameters
|
||||
STR_AI_SETTINGS_CAPTION_AI :AI
|
||||
STR_AI_SETTINGS_CAPTION_GAMESCRIPT :ゲームスクリプト
|
||||
STR_AI_SETTINGS_CAPTION_AI :{WHITE}AIのパラメーター
|
||||
STR_AI_SETTINGS_CAPTION_GAMESCRIPT :{WHITE}ゲームスクリプトのパラメーター
|
||||
STR_AI_SETTINGS_RESET :{BLACK}リセット
|
||||
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
|
||||
|
||||
|
@ -4638,6 +4650,7 @@ STR_ERROR_SCREENSHOT_FAILED :{WHITE}スク
|
|||
|
||||
# Error message titles
|
||||
STR_ERROR_MESSAGE_CAPTION :{YELLOW}メッセージ
|
||||
STR_ERROR_MESSAGE_CAPTION_OTHER_COMPANY :{YELLOW}{COMPANY}からのメッセージ
|
||||
|
||||
# Generic construction errors
|
||||
STR_ERROR_OFF_EDGE_OF_MAP :{WHITE}マップからはみ出します
|
||||
|
@ -4656,12 +4669,13 @@ STR_ERROR_TERRAFORM_LIMIT_REACHED :{WHITE}一度
|
|||
STR_ERROR_CLEARING_LIMIT_REACHED :{WHITE}一度にできる撤去量を越えています
|
||||
STR_ERROR_TREE_PLANT_LIMIT_REACHED :{WHITE}木の本数が多すぎます
|
||||
STR_ERROR_NAME_MUST_BE_UNIQUE :{WHITE}名前は重複してはいけません
|
||||
STR_ERROR_GENERIC_OBJECT_IN_THE_WAY :{WHITE}{STRING}があります
|
||||
STR_ERROR_NOT_ALLOWED_WHILE_PAUSED :{WHITE}ポーズ中にはできない行動です
|
||||
|
||||
# Local authority errors
|
||||
STR_ERROR_LOCAL_AUTHORITY_REFUSES_TO_ALLOW_THIS :{WHITE}{TOWN}議会が反対しています
|
||||
STR_ERROR_LOCAL_AUTHORITY_REFUSES_AIRPORT :{WHITE}{TOWN}議会はこれ以上の空港建設を認可しない方針です
|
||||
STR_ERROR_LOCAL_AUTHORITY_REFUSES_NOISE :{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_NOISE :{WHITE}{TOWN}の地方自治体は騒音公害の懸念から空港建設を許可しません
|
||||
STR_ERROR_BRIBE_FAILED :{WHITE}あなたの行った贈収賄が地元当局に露見しました!
|
||||
|
||||
# Levelling errors
|
||||
|
@ -5535,3 +5549,8 @@ STR_SHIP :{BLACK}{SHIP}
|
|||
|
||||
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 :名前
|
||||
|
|
|
@ -635,9 +635,11 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}화물
|
|||
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}이 화물의 그래프를 표시하거나 숨깁니다
|
||||
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||
|
||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - 생산량 이력
|
||||
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} - 화물 그래프
|
||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :생산량
|
||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :수송량
|
||||
STR_GRAPH_INDUSTRY_RANGE_DELIVERED :수송됨
|
||||
STR_GRAPH_INDUSTRY_RANGE_WAITING :대기 중
|
||||
|
||||
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}상세 성취도를 봅니다.
|
||||
|
||||
|
@ -4025,8 +4027,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}지난
|
|||
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}지난 1분간 생산량:
|
||||
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% 수송됨)
|
||||
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}이 산업시설로 이동합니다. CTRL+클릭하면 이 산업시설을 기준으로 새로운 외부 화면을 엽니다
|
||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}생산량 그래프
|
||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}산업시설 생산량 이력 그래프를 보여줍니다
|
||||
STR_INDUSTRY_VIEW_CARGO_GRAPH :{BLACK}화물 그래프
|
||||
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}산업시설 화물 이력 그래프를 보여줍니다
|
||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}생산 수준: {YELLOW}{COMMA}%
|
||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}산업시설이 곧 폐쇄됩니다!
|
||||
|
||||
|
@ -5002,6 +5004,7 @@ STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}평지
|
|||
STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}잘못된 방향으로 땅이 기울어졌습니다
|
||||
STR_ERROR_CAN_T_DO_THIS :{WHITE}그렇게 할 수 없습니다...
|
||||
STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}건물을 먼저 제거해야 합니다
|
||||
STR_ERROR_BUILDING_IS_PROTECTED :{WHITE}... 건물이 보호되어 있습니다
|
||||
STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}이 지역을 파괴할 수 없습니다...
|
||||
STR_ERROR_SITE_UNSUITABLE :{WHITE}... 알맞지 않은 장소입니다
|
||||
STR_ERROR_ALREADY_BUILT :{WHITE}... 이미 지어져있습니다
|
||||
|
|
|
@ -635,7 +635,6 @@ 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_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_TRANSPORTED :Pārvadāts
|
||||
|
||||
|
@ -4021,8 +4020,6 @@ 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_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_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_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Nozare ir paziņojusi par nenovēršamu slēgšanu!
|
||||
|
||||
|
|
|
@ -633,7 +633,6 @@ 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_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||
|
||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Produktiounshistorie
|
||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produzéiert
|
||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transportéiert
|
||||
|
||||
|
@ -3994,8 +3993,6 @@ 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_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_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_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}D'Industrie annoncéiert dass se zougemaach gëtt
|
||||
|
||||
|
|
|
@ -635,7 +635,6 @@ 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_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||
|
||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Produksjonshistorikk
|
||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produsert
|
||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transportert
|
||||
|
||||
|
@ -4025,8 +4024,6 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Produksj
|
|||
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_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_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Næringen har annonsert snarlig nedleggelse!
|
||||
|
||||
|
|
|
@ -1010,12 +1010,14 @@ STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLA
|
|||
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_DISABLE_ALL :{BLACK}Ukryj wszystkie ładunki na wykresie stawek za ładunek
|
||||
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Przełącz ukrywanie/wyświetlanie wykresu danego typu ładunku
|
||||
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Przełącz ukrywanie/wyświetlanie wykresu ładunku danego typu
|
||||
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||
|
||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Historia Produkcji
|
||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Wyprodukowano
|
||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Przetransportowano
|
||||
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} - Historia Ładunków
|
||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Wyprodukowany
|
||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Przetransportowany
|
||||
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
|
||||
|
||||
|
@ -4404,8 +4406,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_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_PRODUCTION_GRAPH :{BLACK}Wykres Produkcji
|
||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Wyświetl wykres historii produkcji tego przedsiębiorstwa
|
||||
STR_INDUSTRY_VIEW_CARGO_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_LEVEL :{BLACK}Poziom produkcji: {YELLOW}{COMMA}%
|
||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Przedsiębiorstwo ogłosiło likwidację!
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
##id 0x0000
|
||||
STR_NULL :
|
||||
STR_EMPTY :
|
||||
STR_UNDEFINED :(frase indefinida)
|
||||
STR_UNDEFINED :(cadeia de caracteres indefinida)
|
||||
STR_JUST_NOTHING :Nada
|
||||
|
||||
# Cargo related strings
|
||||
|
@ -635,9 +635,11 @@ 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_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||
|
||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Histórico da Produção
|
||||
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} - Histórico da Carga
|
||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produzido
|
||||
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
|
||||
|
||||
|
@ -4025,8 +4027,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_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_PRODUCTION_GRAPH :{BLACK}Gráfico de Produção
|
||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Mostrar gráfico do histórico de produção da indústria
|
||||
STR_INDUSTRY_VIEW_CARGO_GRAPH :{BLACK}Gráfico da Carga
|
||||
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}Mostra o gráfico do histórico da carga desta indústria
|
||||
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!
|
||||
|
||||
|
|
|
@ -3976,8 +3976,6 @@ 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_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_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_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industria a anunțat închiderea iminentă!
|
||||
|
||||
|
|
|
@ -772,9 +772,11 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Скры
|
|||
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Включить/отключить отображение груза на графике
|
||||
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||
|
||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}График производительности: {INDUSTRY}
|
||||
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} - Продукция
|
||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Произведено
|
||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Перевезено
|
||||
STR_GRAPH_INDUSTRY_RANGE_DELIVERED :Доставлено
|
||||
STR_GRAPH_INDUSTRY_RANGE_WAITING :В ожидании
|
||||
|
||||
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Показать составляющие части рейтинга
|
||||
|
||||
|
@ -4199,8 +4201,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Прои
|
|||
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Произведено за минуту:
|
||||
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% перевезено)
|
||||
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Показать предприятие в основном окне. Ctrl+щелчок{NBSP}- показать в дополнительном окне.
|
||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}График производительности
|
||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Показать график производительности этого предприятия
|
||||
STR_INDUSTRY_VIEW_CARGO_GRAPH :{BLACK}График доставки
|
||||
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}Показать график продукции предприятия
|
||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Производительность: {YELLOW}{COMMA}%
|
||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Предприятие скоро закрывается!
|
||||
|
||||
|
|
|
@ -634,7 +634,6 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}在货
|
|||
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}切换显示货物
|
||||
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_TRANSPORTED :已运输
|
||||
|
||||
|
@ -4024,8 +4023,6 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}上月
|
|||
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}上分钟产量:
|
||||
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK}(已运输 {COMMA}%)
|
||||
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_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}此工业已经宣布即刻停业倒闭!
|
||||
|
||||
|
|
|
@ -634,7 +634,6 @@ 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_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_TRANSPORTED :Transportado
|
||||
|
||||
|
@ -4011,8 +4010,6 @@ 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_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_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_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}La industria ha anunciado su cierre inminente!
|
||||
|
||||
|
|
|
@ -635,9 +635,11 @@ 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_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||
|
||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Historial de producción
|
||||
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} - Historial de carga
|
||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Producido
|
||||
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
|
||||
|
||||
|
@ -4025,8 +4027,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_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_PRODUCTION_GRAPH :{BLACK}Gráfica de producción
|
||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Mostrar la gráfica histórica de producción de la industria
|
||||
STR_INDUSTRY_VIEW_CARGO_GRAPH :{BLACK}Gráfica de carga
|
||||
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}Mostrar la gráfica del historial de carga de la industria
|
||||
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!
|
||||
|
||||
|
@ -5002,6 +5004,7 @@ 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_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_IS_PROTECTED :{WHITE}... el edificio está protegido
|
||||
STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}No se puede despejar esta zona...
|
||||
STR_ERROR_SITE_UNSUITABLE :{WHITE}... lugar no apto
|
||||
STR_ERROR_ALREADY_BUILT :{WHITE}... ya construido
|
||||
|
|
|
@ -633,7 +633,6 @@ 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_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||
|
||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Produktionshistorik
|
||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Producerat
|
||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transporterat
|
||||
|
||||
|
@ -4001,8 +4000,6 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Produkti
|
|||
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_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_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industrin har annonserat att den snart kommer att stänga!
|
||||
|
||||
|
|
|
@ -631,18 +631,20 @@ STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLA
|
|||
STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}無
|
||||
STR_GRAPH_CARGO_TOOLTIP_ENABLE_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_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - 產量歷史
|
||||
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} - 貨物記錄
|
||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :已產出
|
||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :已運送
|
||||
STR_GRAPH_INDUSTRY_RANGE_DELIVERED :已運送
|
||||
STR_GRAPH_INDUSTRY_RANGE_WAITING :庫存
|
||||
|
||||
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}顯示詳細營運評比
|
||||
|
||||
# Graph key window
|
||||
STR_GRAPH_KEY_CAPTION :{WHITE}顯示公司圖表的圖例
|
||||
STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}切換該公司圖表
|
||||
STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}切換顯示公司
|
||||
|
||||
# Company league window
|
||||
STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}公司排行榜
|
||||
|
@ -4024,8 +4026,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}上月
|
|||
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}上分鐘產量︰
|
||||
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} (運送了 {COMMA}%)
|
||||
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}將工業置於畫面正中央。按住 <Ctrl> 點選可於工業位置開啟新檢視視窗
|
||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH :{BLACK}產量圖表
|
||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}顯示工業產量歷史圖表
|
||||
STR_INDUSTRY_VIEW_CARGO_GRAPH :{BLACK}貨物圖表
|
||||
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}檢視工業貨物運送記錄圖表
|
||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}產出等級:{YELLOW}{COMMA}%
|
||||
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}該工業已宣佈關閉!
|
||||
|
||||
|
|
|
@ -770,7 +770,6 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Не п
|
|||
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Ввімк/вимик графік типів вантажу
|
||||
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_TRANSPORTED :Перевезено
|
||||
|
||||
|
@ -4150,8 +4149,6 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Виро
|
|||
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Вироблено за минулу хвилину:
|
||||
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% перевезено)
|
||||
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_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Підприємство оголосило про близьке закриття!
|
||||
|
||||
|
|
|
@ -267,6 +267,7 @@ STR_UNITS_YEARS :{NUM}{NBSP}năm
|
|||
STR_UNITS_PERIODS :{NUM}{NBSP}kỳ
|
||||
|
||||
STR_LIST_SEPARATOR :,{SPACE}
|
||||
STR_TRUNCATION_ELLIPSIS :...
|
||||
|
||||
# Common window strings
|
||||
STR_LIST_FILTER_TITLE :{BLACK}Lọc:
|
||||
|
@ -285,7 +286,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_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_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_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_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_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Bật kích cỡ cửa sổ lớn/nhỏ
|
||||
|
@ -451,6 +452,12 @@ 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_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_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_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ủ
|
||||
|
@ -627,9 +634,11 @@ 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_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||
|
||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Lịch Sử Sản Xuất
|
||||
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} - Lịch sử hàng hóa
|
||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Đã cung cấp
|
||||
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
|
||||
|
||||
|
@ -831,7 +840,7 @@ STR_STATUSBAR_INFINITE_MONEY :{WHITE}(tiền
|
|||
# News message history
|
||||
STR_MESSAGE_HISTORY :{WHITE}Lịch Sử Thông Điệp
|
||||
STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Danh sách những tin tức gần đây
|
||||
STR_MESSAGE_NEWS_FORMAT :{STRING} - {STRING}
|
||||
STR_MESSAGE_NEWS_FORMAT :{STRING} - {STRING}
|
||||
|
||||
STR_NEWS_MESSAGE_CAPTION :{WHITE}Thông Điệp
|
||||
|
||||
|
@ -959,11 +968,14 @@ 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_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_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_SFX_VOLUME :Hiệu ứng âm thanh
|
||||
STR_GAME_OPTIONS_MUSIC_VOLUME :Âm nhạc
|
||||
|
||||
STR_GAME_OPTIONS_SETTING :{STRING}: {ORANGE}{STRING}
|
||||
|
||||
STR_GAME_OPTIONS_VOLUME_MARK :{NUM}%
|
||||
|
||||
|
@ -1017,6 +1029,7 @@ STR_GAME_OPTIONS_CURRENCY_IDR :Rupiah Indonesi
|
|||
STR_GAME_OPTIONS_CURRENCY_MYR :Ringgit Malaysia
|
||||
STR_GAME_OPTIONS_CURRENCY_LVL :Lát-vi-a Lats
|
||||
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_DROPDOWN_TOOLTIP :Lựa chọn khoảng thời gian tự động lưu
|
||||
|
@ -1050,6 +1063,7 @@ 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_INTERFACE :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
|
||||
|
@ -1074,6 +1088,7 @@ 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_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_TOOLTIP :Chọn tần số quét màn hình
|
||||
|
@ -1095,7 +1110,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_TOOLTIP :Kiểm tra những nội dung mới & cập nhật để tải về
|
||||
|
||||
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_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_PLUGIN_TITLE :{STRING} ({STRING})
|
||||
STR_GAME_OPTIONS_SOCIAL_PLUGIN_PLATFORM :Nền tảng:
|
||||
|
@ -1289,6 +1304,9 @@ 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_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
|
||||
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_HELPTEXT :Giới hạn hành động xây dựng của AI
|
||||
|
@ -1311,6 +1329,9 @@ 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_HELPTEXT :Thiết lập mức độ xây dựng và chi phí mua sắm
|
||||
###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_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)
|
||||
|
@ -1980,8 +2001,12 @@ 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_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
|
||||
###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_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
|
||||
|
@ -2010,7 +2035,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_VALUE :{COMMA}
|
||||
###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_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
|
||||
|
@ -2062,9 +2087,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_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
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :bằng tay
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :bất đối xứng
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :đối xứng
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :Bằng tay
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :Bất đố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_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
|
||||
|
@ -2125,7 +2150,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_SI :SI (m)
|
|||
STR_CONFIG_SETTING_LOCALISATION :Tiêu Chuẩn Đo Lường
|
||||
STR_CONFIG_SETTING_GRAPHICS :Đồ họa
|
||||
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_VIEWPORTS :Vùng nhìn
|
||||
STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION :Xây Dựng
|
||||
|
@ -2179,6 +2204,8 @@ 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
|
||||
|
||||
# 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_LOAD_GAME :{BLACK}Nạp Ván Chơi
|
||||
|
@ -2312,16 +2339,19 @@ STR_FACE_SIMPLE_TOOLTIP :{BLACK}Trình c
|
|||
STR_FACE_LOAD :{BLACK}Nạp
|
||||
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_FACECODE :{BLACK}Khuôn mặt thứ.
|
||||
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 số bộ mặt người chơi
|
||||
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 - mã số phải trong khoảng từ 0 đến 4,294,967,295!
|
||||
STR_FACE_FACECODE :{BLACK}Mã số khuôn mặt
|
||||
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_CAPTION :{WHITE}Xem và/hoặc chọn mã số gương 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_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_SAVE :{BLACK}Lưu
|
||||
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_SETTING_TOGGLE :{STRING} {ORANGE}{STRING}
|
||||
STR_FACE_SETTING_NUMERIC :{STRING} {ORANGE}{NUM} / {NUM}
|
||||
STR_FACE_YES :Đồng ý
|
||||
STR_FACE_NO :Không
|
||||
STR_FACE_STYLE :Kiểu:
|
||||
STR_FACE_HAIR :Tóc:
|
||||
STR_FACE_EYEBROWS :Lông mày:
|
||||
STR_FACE_EYECOLOUR :Màu mắt:
|
||||
|
@ -2608,7 +2638,7 @@ STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} r
|
|||
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_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_ERROR_COORDINATOR_REGISTRATION_FAILED :{WHITE}Đăng ký server thất bại
|
||||
|
@ -2794,6 +2824,10 @@ STR_PICKER_MODE_USED_TOOLTIP :Bật/tắt hi
|
|||
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_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_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
|
||||
|
@ -2817,6 +2851,7 @@ STR_HOUSE_PICKER_YEARS_FROM :{BLACK}Năm: {O
|
|||
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_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_ZONE2 :Ngoại ô
|
||||
|
@ -2825,6 +2860,7 @@ STR_HOUSE_PICKER_CLASS_ZONE4 :Phía trong ngo
|
|||
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_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_ON :Bật
|
||||
|
||||
|
@ -3032,6 +3068,11 @@ STR_FOUND_TOWN_INITIAL_SIZE_TOOLTIP :{BLACK}Chọn q
|
|||
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_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_SELECT_LAYOUT_TOOLTIP :{BLACK}Chọn để quy hoạch đường bộ trong đô thị
|
||||
|
@ -3104,6 +3145,8 @@ 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_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_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
|
||||
STR_LAI_CLEAR_DESCRIPTION_ROCKS :Đá
|
||||
|
@ -3112,6 +3155,9 @@ STR_LAI_CLEAR_DESCRIPTION_BARE_LAND :Đất trống
|
|||
STR_LAI_CLEAR_DESCRIPTION_GRASS :Bãi cỏ
|
||||
STR_LAI_CLEAR_DESCRIPTION_FIELDS :Cánh đồng
|
||||
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_WITH_NORMAL_SIGNALS :Đường ray với đèn hiệu khóa
|
||||
|
@ -3580,17 +3626,17 @@ STR_NEWGRF_LIST_COMPATIBLE :{YELLOW}Đã t
|
|||
STR_NEWGRF_LIST_MISSING :{RED}Thiếu files
|
||||
|
||||
# NewGRF 'it's broken' warnings
|
||||
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 '{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 '{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 '{1:ENGINE}' khi không ở trong xưởng hoặc vì cải biến
|
||||
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_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_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_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_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 '{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 '{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}'{1:STRING}' gây ra một vòng lặp vô tận khi gọi hàm callback.
|
||||
STR_NEWGRF_BUGGY :{WHITE}NewGRF '{PUSH_COLOUR}{0:STRING}{POP_COLOUR}' 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_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_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}'{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}
|
||||
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}
|
||||
|
||||
# 'User removed essential NewGRFs'-placeholders for stuff without specs
|
||||
STR_NEWGRF_INVALID_CARGO :<sai kiểu hàng>
|
||||
|
@ -3651,6 +3697,10 @@ STR_TOWN_VIEW_RENAME_TOOLTIP :{BLACK}Đổi t
|
|||
|
||||
STR_TOWN_VIEW_EXPAND_BUTTON :{BLACK}Mở rộng
|
||||
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_TOOLTIP :{BLACK}Xoá bỏ đô thị này hoàn toàn
|
||||
|
||||
|
@ -3976,8 +4026,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_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_PRODUCTION_GRAPH :{BLACK}Biểu Đồ Sản Xuất
|
||||
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_CARGO_GRAPH :{BLACK}Đồ thị hàng hóa
|
||||
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}Xem đồ thị lịch sử kinh doanh hàng hóa
|
||||
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!
|
||||
|
||||
|
@ -4389,10 +4439,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
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
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
|
||||
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
|
||||
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_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_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_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Hiện chi tiết máy bay. Ctrl+Click để hiện nhóm của máy bay
|
||||
|
||||
###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
|
||||
|
@ -4647,55 +4697,56 @@ STR_ORDER_ROAD_VEHICLE_DEPOT :Xưởng xe
|
|||
STR_ORDER_SHIP_DEPOT :Xưởng tàu thuỷ
|
||||
###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_DEPOT_FORMAT :{STRING} {DEPOT}
|
||||
|
||||
STR_ORDER_REFIT_ORDER :(Cải biến thành {STRING})
|
||||
STR_ORDER_REFIT_STOP_ORDER :(Cải biến thành {STRING} và dừng)
|
||||
STR_ORDER_STOP_ORDER :(Dừng)
|
||||
STR_ORDER_REFIT_ORDER :{SPACE}(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_STOP_ORDER :{SPACE}(Dừng)
|
||||
|
||||
STR_ORDER_WAIT_TO_UNBUNCH :(Chờ để gỡ gộp)
|
||||
STR_ORDER_WAIT_TO_UNBUNCH :{SPACE}(Chờ để gỡ gộp)
|
||||
|
||||
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_IMPLICIT :(Chạy ngầm)
|
||||
STR_ORDER_IMPLICIT :{SPACE}(Chạy ngầm)
|
||||
|
||||
STR_ORDER_FULL_LOAD :(Bốc đầy hàng)
|
||||
STR_ORDER_FULL_LOAD_ANY :(Bốc đủ bất kỳ hàng nào)
|
||||
STR_ORDER_NO_LOAD :(Không bốc xếp)
|
||||
STR_ORDER_UNLOAD :(Dỡ và lấy hàng khác)
|
||||
STR_ORDER_UNLOAD_FULL_LOAD :(Dỡ tất hàng và chờ bốc đầy hàng)
|
||||
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 :(Dỡ tất hàng và để trống)
|
||||
STR_ORDER_TRANSFER :(Trung chuyển hàng và lấy hàng khác)
|
||||
STR_ORDER_TRANSFER_FULL_LOAD :(Trung chuyển và chờ bốc đầy hàng)
|
||||
STR_ORDER_TRANSFER_FULL_LOAD_ANY :(Trung chuyển và chờ bốc đủ hàng bất kỳ)
|
||||
STR_ORDER_TRANSFER_NO_LOAD :(Trung chuyển và để trống)
|
||||
STR_ORDER_NO_UNLOAD :(Không dỡ và lấ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 :(Không dỡ và chờ lấy đủ hàng bất kỳ)
|
||||
STR_ORDER_NO_UNLOAD_NO_LOAD :(Không bốc hàng và không dỡ hàng)
|
||||
STR_ORDER_FULL_LOAD :{SPACE}(Bốc đầy hàng)
|
||||
STR_ORDER_FULL_LOAD_ANY :{SPACE}(Bốc đủ bất kỳ hàng nào)
|
||||
STR_ORDER_NO_LOAD :{SPACE}(Không bốc xếp)
|
||||
STR_ORDER_UNLOAD :{SPACE}(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_ANY :{SPACE}(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_TRANSFER :{SPACE}(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_ANY :{SPACE}(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_NO_UNLOAD :{SPACE}(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_ANY :{SPACE}(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_AUTO_REFIT :(Tự cải biến thành {STRING})
|
||||
STR_ORDER_FULL_LOAD_REFIT :(Tự cải biến và chất đầy {STRING})
|
||||
STR_ORDER_FULL_LOAD_ANY_REFIT :(Tự cải biến và chất đầy bất kỳ {STRING})
|
||||
STR_ORDER_UNLOAD_REFIT :(Dỡ hàng và tự cải biến để lấ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 :(Dỡ hàng và tự cải biến để bốc đầy bất kỳ {STRING})
|
||||
STR_ORDER_TRANSFER_REFIT :(Trung chuyển và tự cải biến để lấ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 :(Trung chuyển và tự cải biến để bốc đầy bất kỳ {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 :(Không dỡ hàng và tự cải biến để bốc đầy {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 :{SPACE}(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_ANY_REFIT :{SPACE}(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_FULL_LOAD_REFIT :{SPACE}(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_TRANSFER_REFIT :{SPACE}(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_ANY_REFIT :{SPACE}(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_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_ANY_REFIT :{SPACE}(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ó
|
||||
|
||||
###length 3
|
||||
STR_ORDER_STOP_LOCATION_NEAR_END :[đỗ ở đầu gần]
|
||||
STR_ORDER_STOP_LOCATION_MIDDLE :[đỗ ở giữa]
|
||||
STR_ORDER_STOP_LOCATION_FAR_END :[đỗ ở đầu xa]
|
||||
STR_ORDER_STOP_LOCATION_NEAR_END :{SPACE}[đỗ ở đầu gần]
|
||||
STR_ORDER_STOP_LOCATION_MIDDLE :{SPACE}[đỗ ở giữa]
|
||||
STR_ORDER_STOP_LOCATION_FAR_END :{SPACE}[đỗ ở đầu xa]
|
||||
|
||||
STR_ORDER_OUT_OF_RANGE :{RED} (Điểm đến kế tiếp ngoài tầm xa)
|
||||
|
||||
|
@ -4715,14 +4766,15 @@ STR_TIMETABLE_TOOLTIP :{BLACK}Lịch t
|
|||
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_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_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_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 :(ở lại {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 :và ở lại trong {STRING}
|
||||
STR_TIMETABLE_AND_TRAVEL_FOR :và di chuyển trong {STRING}
|
||||
STR_TIMETABLE_STAY_FOR_ESTIMATED :{SPACE}(ở 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_STAY_FOR :{SPACE}và ở lại trong {STRING}
|
||||
STR_TIMETABLE_AND_TRAVEL_FOR :{SPACE}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_TOTAL_TIME :{BLACK}Lịch trình này sẽ mất {STRING} để hoàn thành
|
||||
|
@ -4741,12 +4793,14 @@ STR_TIMETABLE_START_SECONDS_QUERY :Số giây cho
|
|||
|
||||
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_CHANGE_TIME_QUERY :Thay đổi 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_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_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_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
|
||||
|
@ -4910,7 +4964,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ỏ
|
||||
|
||||
# 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_PNGMAP :{WHITE}Không thể nạp nền từ file PNG...
|
||||
|
@ -4949,6 +5003,7 @@ 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_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_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_SITE_UNSUITABLE :{WHITE}... điểm không phù hợp
|
||||
STR_ERROR_ALREADY_BUILT :{WHITE}... đã xây rồi
|
||||
|
@ -5001,7 +5056,7 @@ STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... quá
|
|||
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_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_CAN_T_BUILD_HOUSE :{WHITE}Không thể xây dựng nhà...
|
||||
|
||||
|
@ -5828,6 +5883,7 @@ STR_CURRENCY_SHORT_GIGA :{NBSP}tỷ
|
|||
STR_CURRENCY_SHORT_TERA :{NBSP}ktỷ
|
||||
|
||||
STR_JUST_CARGO :{CARGO_LONG}
|
||||
STR_JUST_LEFT_ARROW :{LEFT_ARROW}
|
||||
STR_JUST_RIGHT_ARROW :{RIGHT_ARROW}
|
||||
STR_JUST_CHECKMARK :{CHECKMARK}
|
||||
STR_JUST_COMMA :{COMMA}
|
||||
|
@ -5867,3 +5923,11 @@ STR_SHIP :{BLACK}{SHIP}
|
|||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
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}
|
||||
|
|
|
@ -267,6 +267,7 @@ STR_UNITS_YEARS :{NUM}{NBSP}blwy
|
|||
STR_UNITS_PERIODS :{NUM}{NBSP}cyfnod{P "" ""}
|
||||
|
||||
STR_LIST_SEPARATOR :,{SPACE}
|
||||
STR_TRUNCATION_ELLIPSIS :...
|
||||
|
||||
# Common window strings
|
||||
STR_LIST_FILTER_TITLE :{BLACK}Hidlydd:
|
||||
|
@ -285,7 +286,7 @@ STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Cau ffen
|
|||
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_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
|
||||
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_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_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Toglu maint ffenestri mawr/bach
|
||||
|
@ -633,9 +634,11 @@ 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_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||
|
||||
STR_GRAPH_INDUSTRY_PRODUCTION_CAPTION :{WHITE}{INDUSTRY} - Hanes Cynhyrchu
|
||||
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} - Hanes Llwyth
|
||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Cynhyrchwyd
|
||||
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
|
||||
|
||||
|
@ -965,11 +968,14 @@ STR_GAME_OPTIONS_TAB_SOUND :Sain
|
|||
STR_GAME_OPTIONS_TAB_SOUND_TOOLTIP :Dewis gosodiadau sain a cherddoriaeth
|
||||
STR_GAME_OPTIONS_TAB_SOCIAL :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_SFX_VOLUME :Effeithiau sŵn
|
||||
STR_GAME_OPTIONS_MUSIC_VOLUME :Cerddoriaeth
|
||||
|
||||
STR_GAME_OPTIONS_SETTING :{STRING}: {ORANGE}{STRING}
|
||||
|
||||
STR_GAME_OPTIONS_VOLUME_MARK :{NUM}%
|
||||
|
||||
|
@ -1057,6 +1063,7 @@ STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :Bydd ticio'r bl
|
|||
|
||||
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_TOOLTIP :Llusgwch y llithrwr i osod maint y rhyngwyneb. Daliwhc Ctrl i ganiatáu addasiad parhaol
|
||||
|
@ -1081,6 +1088,7 @@ 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_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_TOOLTIP :Dewis y cyfradd adnewyddu sgrin i'w defnyddio
|
||||
|
@ -1102,7 +1110,7 @@ STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :Gwybodaeth bell
|
|||
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_SOCIAL_PLUGINS_NONE :{LTBLUE}(dim ategolion integreiddio gyda llwyfannau cymdeithasol wedi'u gosod)
|
||||
STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :(dim ategolion integreiddio gyda llwyfannau cymdeithasol wedi'u gosod)
|
||||
|
||||
STR_GAME_OPTIONS_SOCIAL_PLUGIN_TITLE :{STRING} ({STRING})
|
||||
STR_GAME_OPTIONS_SOCIAL_PLUGIN_PLATFORM :Llwyfan:
|
||||
|
@ -1296,6 +1304,9 @@ STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Cyfradd chwyddi
|
|||
STR_CONFIG_SETTING_RUNNING_COSTS :Costau rhedeg: {STRING}
|
||||
STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Gosod lefel costau cynnal a chadw ar gerbydau a thanadeiledd
|
||||
###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_HELPTEXT :Cyfyngu'r nifer o weithredoedd adeiliadu ar gyfer AIau
|
||||
|
@ -1318,6 +1329,9 @@ STR_CONFIG_SETTING_SUBSIDY_DURATION_DISABLED :Dim cymhorthdal
|
|||
STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Costau adeiladu: {STRING}
|
||||
STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Gosod lefel costau prynnu ac adeiladu
|
||||
###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_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)
|
||||
|
@ -2073,9 +2087,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_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
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :â llaw
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :anghymesur
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :cymesur
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :Â llaw
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :Anghymesur
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :Cymesur
|
||||
|
||||
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
|
||||
|
@ -2190,6 +2204,8 @@ 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
|
||||
|
||||
# Intro window
|
||||
STR_INTRO_CAPTION :{WHITE}OpenTTD
|
||||
STR_INTRO_VERSION :OpenTTD {REV}
|
||||
|
||||
STR_INTRO_NEW_GAME :{BLACK}Gêm Newydd
|
||||
STR_INTRO_LOAD_GAME :{BLACK}Llwytho Gêm
|
||||
|
@ -2323,16 +2339,19 @@ STR_FACE_SIMPLE_TOOLTIP :{BLACK}Dewis wy
|
|||
STR_FACE_LOAD :{BLACK}Llwytho
|
||||
STR_FACE_LOAD_TOOLTIP :{BLACK}Llwytho hoff wyneb
|
||||
STR_FACE_LOAD_DONE :{WHITE}Llwythwyd eich hoff wyneb o'r ffeil ffurfweddu OpenTTD
|
||||
STR_FACE_FACECODE :{BLACK}Wyneb chwaraewr rhif:
|
||||
STR_FACE_FACECODE_TOOLTIP :{BLACK}Gweld ac/neu osod rhif wyneb llywydd y cwmni
|
||||
STR_FACE_FACECODE_CAPTION :{WHITE}Gweld ac/neu osod rhif gwyneb llywydd
|
||||
STR_FACE_FACECODE_SET :{WHITE}Cafodd rhif wyneb newydd ei osod
|
||||
STR_FACE_FACECODE_ERR :{WHITE}Methu gosod rhif wyneb llywydd - rhaid iddo fod yn rhif rhwng 0 a 4,294,967,295!
|
||||
STR_FACE_FACECODE :{BLACK}Cod gwyneb chwaraewr
|
||||
STR_FACE_FACECODE_TOOLTIP :{BLACK}Gweld ac/neu osod cod gwyneb llywydd y cwmni
|
||||
STR_FACE_FACECODE_CAPTION :{WHITE}Gweld ac/neu osod cod gwyneb llywydd
|
||||
STR_FACE_FACECODE_SET :{WHITE}Cafodd cod gwyneb newydd ei osod
|
||||
STR_FACE_FACECODE_ERR :{WHITE}Methu gosod cod wyneb llywydd - rhaid iddo fod yn label a rhif dilys
|
||||
STR_FACE_SAVE :{BLACK}Cadw
|
||||
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_SETTING_TOGGLE :{STRING} {ORANGE}{STRING}
|
||||
STR_FACE_SETTING_NUMERIC :{STRING} {ORANGE}{NUM} / {NUM}
|
||||
STR_FACE_YES :Ie
|
||||
STR_FACE_NO :Na
|
||||
STR_FACE_STYLE :Arddull:
|
||||
STR_FACE_HAIR :Gwallt:
|
||||
STR_FACE_EYEBROWS :Aeliau:
|
||||
STR_FACE_EYECOLOUR :Lliw llygaid
|
||||
|
@ -2805,6 +2824,10 @@ STR_PICKER_MODE_USED_TOOLTIP :Toglu dangos ei
|
|||
STR_PICKER_MODE_SAVED :Wedi'u Cadw
|
||||
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_TYPE_TOOLTIP :Dewis math gorsaf i'w adeiladu. Mae Ctrl+Clic yn adio neu tynnu o'r eitemau a gedwir
|
||||
|
@ -3045,6 +3068,11 @@ STR_FOUND_TOWN_INITIAL_SIZE_TOOLTIP :{BLACK}Dewiswch
|
|||
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_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_SELECT_LAYOUT_TOOLTIP :{BLACK}Dewiswch y cynllun ffyrdd i'w ddefnyddio ar gyfer y dref hon
|
||||
|
@ -3669,6 +3697,10 @@ STR_TOWN_VIEW_RENAME_TOOLTIP :{BLACK}newid en
|
|||
|
||||
STR_TOWN_VIEW_EXPAND_BUTTON :{BLACK}Ehangu
|
||||
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_TOOLTIP :{BLACK}Dileu'r dref hon yn llwyr
|
||||
|
||||
|
@ -3994,8 +4026,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_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_PRODUCTION_GRAPH :{BLACK}Graff Cynhyrchiant
|
||||
STR_INDUSTRY_VIEW_PRODUCTION_GRAPH_TOOLTIP :{BLACK}Dangos graff o hanes cynhyrchu diwydiant
|
||||
STR_INDUSTRY_VIEW_CARGO_GRAPH :{BLACK}Graff Llwythi
|
||||
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}Yn dangos graff o hanes llwythi diwydiant
|
||||
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!
|
||||
|
||||
|
@ -4407,10 +4439,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
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
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
|
||||
STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Dangos manylion llong
|
||||
STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Dangos manylion awyren
|
||||
STR_VEHICLE_VIEW_TRAIN_SHOW_DETAILS_TOOLTIP :{BLACK}Dangos manylion trên. Ctrl+Clic i ddangos grŵp y 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_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Dangos manylion llong. Ctrl+Clic i ddangos grŵp y llong
|
||||
STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Dangos manylion awyren. Ctrl+Clic i ddangos grŵp yr awyren
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
STR_VEHICLE_VIEW_TRAIN_STATUS_START_STOP_TOOLTIP :{BLACK}Gweithred presennol trên - clicio i stopio/cychwyn trên
|
||||
|
@ -4734,14 +4766,15 @@ STR_TIMETABLE_TOOLTIP :{BLACK}Amserlen
|
|||
STR_TIMETABLE_NO_TRAVEL :Dim teithio
|
||||
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_SPEED :Teithio heb oresgyn {VELOCITY} (heb ei amserlenu)
|
||||
STR_TIMETABLE_TRAVEL_FOR :Teithio am{STRING}
|
||||
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_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_AND_TRAVEL_FOR_ESTIMATED :{SPACE}(teithio am {STRING}, heb ei amserlennu)
|
||||
STR_TIMETABLE_STAY_FOR :aros am {STRING}
|
||||
STR_TIMETABLE_AND_TRAVEL_FOR :a theithio am {STRING}
|
||||
STR_TIMETABLE_STAY_FOR :{SPACE}aros am {STRING}
|
||||
STR_TIMETABLE_AND_TRAVEL_FOR :{SPACE}a theithio am {STRING}
|
||||
|
||||
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
|
||||
|
@ -4970,6 +5003,7 @@ 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_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_IS_PROTECTED :{WHITE}... adeilad wedi ei amddiffyn
|
||||
STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Does dim modd clirio’r ardal hon...
|
||||
STR_ERROR_SITE_UNSUITABLE :{WHITE}... safle anaddas
|
||||
STR_ERROR_ALREADY_BUILT :{WHITE}... eisoes wedi'i adeiladu
|
||||
|
@ -5849,6 +5883,7 @@ STR_CURRENCY_SHORT_GIGA :{NBSP}bn
|
|||
STR_CURRENCY_SHORT_TERA :{NBSP}tn
|
||||
|
||||
STR_JUST_CARGO :{CARGO_LONG}
|
||||
STR_JUST_LEFT_ARROW :{LEFT_ARROW}
|
||||
STR_JUST_RIGHT_ARROW :{RIGHT_ARROW}
|
||||
STR_JUST_CHECKMARK :{CHECKMARK}
|
||||
STR_JUST_COMMA :{COMMA}
|
||||
|
@ -5888,3 +5923,11 @@ STR_SHIP :{BLACK}{SHIP}
|
|||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
||||
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}
|
||||
|
|
|
@ -64,7 +64,7 @@ bool HandlePlacePushButton(Window *w, WidgetID widget, CursorID cursor, HighLigh
|
|||
{
|
||||
if (w->IsWidgetDisabled(widget)) return false;
|
||||
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
w->SetDirty();
|
||||
|
||||
if (w->IsWidgetLowered(widget)) {
|
||||
|
|
|
@ -595,7 +595,7 @@ struct MusicTrackSelectionWindow : public Window {
|
|||
|
||||
case WID_MTS_MUSICSET: {
|
||||
int selected = 0;
|
||||
ShowDropDownList(this, BuildSetDropDownList<BaseMusic>(&selected), selected, widget);
|
||||
this->HandleDropdownListButtonClick(BuildSetDropDownList<BaseMusic>(&selected), selected, widget);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -683,13 +683,16 @@ struct MusicWindow : public Window {
|
|||
|
||||
void UpdateDisabledButtons()
|
||||
{
|
||||
/* Disable music control widgets if there is no music
|
||||
* -- except Programme button! So you can still select a music set. */
|
||||
/* Disable stop and play if there is no music. */
|
||||
this->SetWidgetsDisabledState(BaseMusic::GetUsedSet()->num_available == 0, WID_M_STOP, WID_M_PLAY);
|
||||
/* Disable most music control widgets if there is no music, or we are in the intro menu. */
|
||||
this->SetWidgetsDisabledState(
|
||||
BaseMusic::GetUsedSet()->num_available == 0,
|
||||
WID_M_PREV, WID_M_NEXT, WID_M_STOP, WID_M_PLAY, WID_M_SHUFFLE,
|
||||
BaseMusic::GetUsedSet()->num_available == 0 || _game_mode == GM_MENU,
|
||||
WID_M_PREV, WID_M_NEXT, WID_M_SHUFFLE,
|
||||
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
|
||||
|
|
|
@ -1019,7 +1019,7 @@ struct NetworkStartServerWindow : public Window {
|
|||
break;
|
||||
|
||||
case WID_NSS_CONNTYPE_BTN: // Connection type
|
||||
ShowDropDownList(this, BuildVisibilityDropDownList(), _settings_client.network.server_game_type, WID_NSS_CONNTYPE_BTN);
|
||||
this->HandleDropdownListButtonClick(BuildVisibilityDropDownList(), _settings_client.network.server_game_type, WID_NSS_CONNTYPE_BTN);
|
||||
break;
|
||||
|
||||
case WID_NSS_CLIENTS_BTND: case WID_NSS_CLIENTS_BTNU: // Click on up/down button for number of clients
|
||||
|
@ -1714,7 +1714,7 @@ public:
|
|||
case WID_CL_SERVER_VISIBILITY:
|
||||
if (!_network_server) break;
|
||||
|
||||
ShowDropDownList(this, BuildVisibilityDropDownList(), _settings_client.network.server_game_type, WID_CL_SERVER_VISIBILITY);
|
||||
this->HandleDropdownListButtonClick(BuildVisibilityDropDownList(), _settings_client.network.server_game_type, WID_CL_SERVER_VISIBILITY);
|
||||
break;
|
||||
|
||||
case WID_CL_MATRIX: {
|
||||
|
|
|
@ -59,7 +59,7 @@ static ChangeInfoResult LoadTranslationTable(uint first, uint last, ByteReader &
|
|||
GRFFile *grf_override = GetCurrentGRFOverride();
|
||||
if (grf_override != nullptr) {
|
||||
/* GRF override is present, copy the translation table to the overridden GRF as well. */
|
||||
GrfMsg(1, "LoadTranslationTable: Copying {} translation table to override GRFID '{}'", name, std::byteswap(grf_override->grfid));
|
||||
GrfMsg(1, "LoadTranslationTable: Copying {} translation table to override GRFID {:08X}", name, std::byteswap(grf_override->grfid));
|
||||
std::vector<T> &override_table = gettable(*grf_override);
|
||||
override_table = translation_table;
|
||||
}
|
||||
|
|
|
@ -90,12 +90,12 @@ static ChangeInfoResult StationChangeInfo(uint first, uint last, int prop, ByteR
|
|||
|
||||
/* no relative bounding box support */
|
||||
DrawTileSeqStruct &dtss = tmp_layout.emplace_back();
|
||||
dtss.delta_x = delta_x;
|
||||
dtss.delta_y = buf.ReadByte();
|
||||
dtss.delta_z = buf.ReadByte();
|
||||
dtss.size_x = buf.ReadByte();
|
||||
dtss.size_y = buf.ReadByte();
|
||||
dtss.size_z = buf.ReadByte();
|
||||
dtss.origin.x = delta_x;
|
||||
dtss.origin.y = buf.ReadByte();
|
||||
dtss.origin.z = buf.ReadByte();
|
||||
dtss.extent.x = buf.ReadByte();
|
||||
dtss.extent.y = buf.ReadByte();
|
||||
dtss.extent.z = buf.ReadByte();
|
||||
|
||||
ReadSpriteLayoutSprite(buf, false, true, false, GSF_STATIONS, &dtss.image);
|
||||
/* On error, bail out immediately. Temporary GRF data was already freed */
|
||||
|
|
|
@ -207,15 +207,15 @@ bool ReadSpriteLayout(ByteReader &buf, uint num_building_sprites, bool use_cur_s
|
|||
return true;
|
||||
}
|
||||
|
||||
seq->delta_x = buf.ReadByte();
|
||||
seq->delta_y = buf.ReadByte();
|
||||
seq->origin.x = buf.ReadByte();
|
||||
seq->origin.y = buf.ReadByte();
|
||||
|
||||
if (!no_z_position) seq->delta_z = buf.ReadByte();
|
||||
if (!no_z_position) seq->origin.z = buf.ReadByte();
|
||||
|
||||
if (seq->IsParentSprite()) {
|
||||
seq->size_x = buf.ReadByte();
|
||||
seq->size_y = buf.ReadByte();
|
||||
seq->size_z = buf.ReadByte();
|
||||
seq->extent.x = buf.ReadByte();
|
||||
seq->extent.y = buf.ReadByte();
|
||||
seq->extent.z = buf.ReadByte();
|
||||
}
|
||||
|
||||
ReadSpriteLayoutRegisters(buf, flags, seq->IsParentSprite(), dts, i + 1);
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#include "newgrf_badge.h"
|
||||
#include "newgrf_badge_type.h"
|
||||
#include "timer/timer_game_calendar.h"
|
||||
#include "widget_type.h"
|
||||
|
||||
class GUIBadgeClasses : public UsedBadgeClasses {
|
||||
public:
|
||||
|
|
|
@ -609,7 +609,7 @@ SpriteLayoutProcessor::SpriteLayoutProcessor(const NewGRFSpriteLayout &raw_layou
|
|||
* Also include the groundsprite into the sequence for easier processing. */
|
||||
DrawTileSeqStruct © = this->result_seq.emplace_back();
|
||||
copy.image = this->raw_layout->ground;
|
||||
copy.delta_z = static_cast<int8_t>(0x80);
|
||||
copy.origin.z = static_cast<int8_t>(0x80);
|
||||
|
||||
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 (flags & TLF_BB_XY_OFFSET) {
|
||||
result.delta_x += object.GetRegister(regs->delta.parent[0]);
|
||||
result.delta_y += object.GetRegister(regs->delta.parent[1]);
|
||||
result.origin.x += object.GetRegister(regs->delta.parent[0]);
|
||||
result.origin.y += object.GetRegister(regs->delta.parent[1]);
|
||||
}
|
||||
if (flags & TLF_BB_Z_OFFSET) result.delta_z += object.GetRegister(regs->delta.parent[2]);
|
||||
if (flags & TLF_BB_Z_OFFSET) result.origin.z += object.GetRegister(regs->delta.parent[2]);
|
||||
} else {
|
||||
if (flags & TLF_CHILD_X_OFFSET) result.delta_x += object.GetRegister(regs->delta.child[0]);
|
||||
if (flags & TLF_CHILD_Y_OFFSET) result.delta_y += object.GetRegister(regs->delta.child[1]);
|
||||
if (flags & TLF_CHILD_X_OFFSET) result.origin.x += object.GetRegister(regs->delta.child[0]);
|
||||
if (flags & TLF_CHILD_Y_OFFSET) result.origin.y += object.GetRegister(regs->delta.child[1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -941,7 +941,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback {
|
|||
}
|
||||
|
||||
this->CloseChildWindows(WC_QUERY_STRING); // Remove the parameter query window
|
||||
ShowDropDownList(this, std::move(list), this->preset, WID_NS_PRESET_LIST);
|
||||
this->HandleDropdownListButtonClick(std::move(list), this->preset, WID_NS_PRESET_LIST);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -476,13 +476,7 @@ static void DrawTile_Object(TileInfo *ti)
|
|||
|
||||
if (!IsInvisibilitySet(TO_STRUCTURES)) {
|
||||
for (const DrawTileSeqStruct &dtss : dts->GetSequence()) {
|
||||
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)
|
||||
);
|
||||
AddSortableSpriteToDraw(dtss.image.sprite, palette, *ti, dtss, IsTransparencySet(TO_STRUCTURES));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
|
|
@ -319,7 +319,7 @@ public:
|
|||
if (_object_gui.sel_type != std::numeric_limits<uint16_t>::max()) {
|
||||
_object_gui.sel_view = this->GetWidget<NWidgetBase>(widget)->GetParentWidget<NWidgetMatrix>()->GetCurrentElement();
|
||||
this->InvalidateData(PickerInvalidation::Position);
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
|
@ -1254,7 +1254,7 @@ public:
|
|||
} else {
|
||||
const Order *o = this->vehicle->GetOrder(this->OrderGetSel());
|
||||
assert(o != nullptr);
|
||||
ShowDropDownMenu(this, _order_non_stop_drowdown, o->GetNonStopType(), WID_O_NON_STOP, 0,
|
||||
this->HandleDropdownMenuButtonClick(_order_non_stop_drowdown, o->GetNonStopType(), WID_O_NON_STOP, 0,
|
||||
o->IsType(OT_GOTO_STATION) ? 0 : (o->IsType(OT_GOTO_WAYPOINT) ? 3 : 12));
|
||||
}
|
||||
break;
|
||||
|
@ -1275,7 +1275,7 @@ public:
|
|||
case OPOS_SHARE: sel = 3; break;
|
||||
default: NOT_REACHED();
|
||||
}
|
||||
ShowDropDownMenu(this, this->vehicle->type == VEH_AIRCRAFT ? _order_goto_dropdown_aircraft : _order_goto_dropdown, sel, WID_O_GOTO, 0, 0);
|
||||
this->HandleDropdownMenuButtonClick(this->vehicle->type == VEH_AIRCRAFT ? _order_goto_dropdown_aircraft : _order_goto_dropdown, sel, WID_O_GOTO, 0, 0);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -1283,7 +1283,7 @@ public:
|
|||
if (this->GetWidget<NWidgetLeaf>(widget)->ButtonHit(pt)) {
|
||||
this->OrderClick_FullLoad(OLF_FULL_LOAD_ANY, true);
|
||||
} else {
|
||||
ShowDropDownMenu(this, _order_full_load_drowdown, this->vehicle->GetOrder(this->OrderGetSel())->GetLoadType(), WID_O_FULL_LOAD, 0, 2);
|
||||
this->HandleDropdownMenuButtonClick(_order_full_load_drowdown, this->vehicle->GetOrder(this->OrderGetSel())->GetLoadType(), WID_O_FULL_LOAD, 0, 2);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -1291,7 +1291,7 @@ public:
|
|||
if (this->GetWidget<NWidgetLeaf>(widget)->ButtonHit(pt)) {
|
||||
this->OrderClick_Unload(OUFB_UNLOAD, true);
|
||||
} else {
|
||||
ShowDropDownMenu(this, _order_unload_drowdown, this->vehicle->GetOrder(this->OrderGetSel())->GetUnloadType(), WID_O_UNLOAD, 0, 8);
|
||||
this->HandleDropdownMenuButtonClick(_order_unload_drowdown, this->vehicle->GetOrder(this->OrderGetSel())->GetUnloadType(), WID_O_UNLOAD, 0, 8);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -1300,14 +1300,14 @@ public:
|
|||
break;
|
||||
|
||||
case WID_O_DEPOT_ACTION:
|
||||
ShowDropDownMenu(this, _order_depot_action_dropdown, DepotActionStringIndex(this->vehicle->GetOrder(this->OrderGetSel())), WID_O_DEPOT_ACTION, 0, 0);
|
||||
this->HandleDropdownMenuButtonClick(_order_depot_action_dropdown, DepotActionStringIndex(this->vehicle->GetOrder(this->OrderGetSel())), WID_O_DEPOT_ACTION, 0, 0);
|
||||
break;
|
||||
|
||||
case WID_O_REFIT_DROPDOWN:
|
||||
if (this->GetWidget<NWidgetLeaf>(widget)->ButtonHit(pt)) {
|
||||
this->OrderClick_Refit(0, true);
|
||||
} else {
|
||||
ShowDropDownMenu(this, _order_refit_action_dropdown, 0, WID_O_REFIT_DROPDOWN, 0, 0);
|
||||
this->HandleDropdownMenuButtonClick(_order_refit_action_dropdown, 0, WID_O_REFIT_DROPDOWN, 0, 0);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -1320,14 +1320,14 @@ public:
|
|||
for (const auto &ocv : _order_conditional_variable) {
|
||||
list.push_back(MakeDropDownListStringItem(STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE + ocv, ocv));
|
||||
}
|
||||
ShowDropDownList(this, std::move(list), this->vehicle->GetOrder(this->OrderGetSel())->GetConditionVariable(), WID_O_COND_VARIABLE);
|
||||
this->HandleDropdownListButtonClick(std::move(list), this->vehicle->GetOrder(this->OrderGetSel())->GetConditionVariable(), WID_O_COND_VARIABLE);
|
||||
break;
|
||||
}
|
||||
|
||||
case WID_O_COND_COMPARATOR: {
|
||||
const Order *o = this->vehicle->GetOrder(this->OrderGetSel());
|
||||
assert(o != nullptr);
|
||||
ShowDropDownMenu(this, _order_conditional_condition, o->GetConditionComparator(), WID_O_COND_COMPARATOR, 0, (o->GetConditionVariable() == OCV_REQUIRES_SERVICE) ? 0x3F : 0xC0);
|
||||
this->HandleDropdownMenuButtonClick(_order_conditional_condition, o->GetConditionComparator(), WID_O_COND_COMPARATOR, 0, (o->GetConditionVariable() == OCV_REQUIRES_SERVICE) ? 0x3F : 0xC0);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -384,7 +384,7 @@ void PickerWindow::OnClick(Point pt, WidgetID widget, int)
|
|||
this->callbacks.SetSelectedClass(*it);
|
||||
this->InvalidateData({PickerInvalidation::Type, PickerInvalidation::Position, PickerInvalidation::Validate});
|
||||
}
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
CloseWindowById(WC_SELECT_STATION, 0);
|
||||
break;
|
||||
}
|
||||
|
@ -398,6 +398,7 @@ void PickerWindow::OnClick(Point pt, WidgetID widget, int)
|
|||
SetBit(this->callbacks.mode, PFM_ALL);
|
||||
}
|
||||
this->InvalidateData({PickerInvalidation::Class, PickerInvalidation::Type, PickerInvalidation::Position});
|
||||
SndClickBeep();
|
||||
break;
|
||||
|
||||
case WID_PW_SHRINK:
|
||||
|
@ -434,19 +435,19 @@ void PickerWindow::OnClick(Point pt, WidgetID widget, int)
|
|||
this->callbacks.SetSelectedType(item.index);
|
||||
this->InvalidateData(PickerInvalidation::Position);
|
||||
}
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
CloseWindowById(WC_SELECT_STATION, 0);
|
||||
break;
|
||||
}
|
||||
|
||||
case WID_PW_CONFIGURE_BADGES:
|
||||
if (this->badge_classes.GetClasses().empty()) break;
|
||||
ShowDropDownList(this, BuildBadgeClassConfigurationList(this->badge_classes, 1, {}), -1, widget, 0, false, true);
|
||||
this->HandleDropdownListButtonClick(BuildBadgeClassConfigurationList(this->badge_classes, 1, {}), -1, widget, 0, false, true);
|
||||
break;
|
||||
|
||||
default:
|
||||
if (IsInsideMM(widget, this->badge_filters.first, this->badge_filters.second)) {
|
||||
ShowDropDownList(this, this->GetWidget<NWidgetBadgeFilter>(widget)->GetDropDownList(), -1, widget, 0, false);
|
||||
this->HandleDropdownListButtonClick(this->GetWidget<NWidgetBadgeFilter>(widget)->GetDropDownList(), -1, widget, 0, false);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -184,7 +184,7 @@ public:
|
|||
/**
|
||||
* Bridge offset
|
||||
*/
|
||||
SpriteID bridge_offset;
|
||||
uint8_t bridge_offset;
|
||||
|
||||
/**
|
||||
* Original railtype number to use when drawing non-newgrf railtypes, or when drawing stations.
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
AddSortableSpriteToDraw(sprite, PAL_NONE, x, y, 1, 1, BB_HEIGHT_UNDER_BRIDGE, GetSaveSlopeZ(x, y, track));
|
||||
AddSortableSpriteToDraw(sprite, PAL_NONE, x, y, GetSaveSlopeZ(x, y, track), {{}, {1, 1, BB_HEIGHT_UNDER_BRIDGE}, {}});
|
||||
}
|
||||
|
||||
static uint32_t _drawtile_track_palette;
|
||||
|
@ -1907,12 +1907,11 @@ static uint32_t _drawtile_track_palette;
|
|||
|
||||
|
||||
/** Offsets for drawing fences */
|
||||
struct FenceOffset {
|
||||
Corner height_ref; //!< Corner to use height offset from.
|
||||
int x_offs; //!< Bounding box X offset.
|
||||
int y_offs; //!< Bounding box Y offset.
|
||||
int x_size; //!< Bounding box X size.
|
||||
int y_size; //!< Bounding box Y size.
|
||||
struct FenceOffset : SpriteBounds {
|
||||
Corner height_ref; ///< Corner to use height offset from.
|
||||
|
||||
constexpr FenceOffset(Corner height_ref, int8_t origin_x, int8_t origin_y, uint8_t extent_x, uint8_t extent_y) :
|
||||
SpriteBounds({origin_x, origin_y, 0}, {extent_x, extent_y, 4}, {}), height_ref(height_ref) {}
|
||||
};
|
||||
|
||||
/** Offsets for drawing fences */
|
||||
|
@ -1948,12 +1947,7 @@ static void DrawTrackFence(const TileInfo *ti, SpriteID base_image, uint num_spr
|
|||
if (_fence_offsets[rfo].height_ref != CORNER_INVALID) {
|
||||
z += GetSlopePixelZInCorner(RemoveHalftileSlope(ti->tileh), _fence_offsets[rfo].height_ref);
|
||||
}
|
||||
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);
|
||||
AddSortableSpriteToDraw(base_image + (rfo % num_sprites), _drawtile_track_palette, ti->x, ti->y, z, _fence_offsets[rfo]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -357,7 +357,7 @@ static void BuildRailClick_Remove(Window *w)
|
|||
{
|
||||
if (w->IsWidgetDisabled(WID_RAT_REMOVE)) return;
|
||||
ToggleRailButton_Remove(w);
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
|
||||
/* handle station builder */
|
||||
if (w->IsWidgetLowered(WID_RAT_BUILD_STATION)) {
|
||||
|
@ -1239,7 +1239,7 @@ public:
|
|||
this->RaiseWidget(WID_BRAS_PLATFORM_DIR_X + _station_gui.axis);
|
||||
_station_gui.axis = (Axis)(widget - WID_BRAS_PLATFORM_DIR_X);
|
||||
this->LowerWidget(WID_BRAS_PLATFORM_DIR_X + _station_gui.axis);
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
this->SetDirty();
|
||||
CloseWindowById(WC_SELECT_STATION, 0);
|
||||
break;
|
||||
|
@ -1271,7 +1271,7 @@ public:
|
|||
|
||||
this->LowerWidget(_settings_client.gui.station_numtracks + WID_BRAS_PLATFORM_NUM_BEGIN);
|
||||
this->LowerWidget(_settings_client.gui.station_platlength + WID_BRAS_PLATFORM_LEN_BEGIN);
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
this->SetDirty();
|
||||
CloseWindowById(WC_SELECT_STATION, 0);
|
||||
break;
|
||||
|
@ -1304,7 +1304,7 @@ public:
|
|||
|
||||
this->LowerWidget(_settings_client.gui.station_numtracks + WID_BRAS_PLATFORM_NUM_BEGIN);
|
||||
this->LowerWidget(_settings_client.gui.station_platlength + WID_BRAS_PLATFORM_LEN_BEGIN);
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
this->SetDirty();
|
||||
CloseWindowById(WC_SELECT_STATION, 0);
|
||||
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_platlength + WID_BRAS_PLATFORM_LEN_BEGIN, !_settings_client.gui.station_dragdrop);
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
this->SetDirty();
|
||||
CloseWindowById(WC_SELECT_STATION, 0);
|
||||
break;
|
||||
|
@ -1350,7 +1350,7 @@ public:
|
|||
|
||||
this->SetWidgetLoweredState(WID_BRAS_HIGHLIGHT_OFF, !_settings_client.gui.station_show_coverage);
|
||||
this->SetWidgetLoweredState(WID_BRAS_HIGHLIGHT_ON, _settings_client.gui.station_show_coverage);
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
this->SetDirty();
|
||||
SetViewportCatchmentStation(nullptr, true);
|
||||
break;
|
||||
|
@ -1580,10 +1580,12 @@ public:
|
|||
if (w != nullptr) ToggleRailButton_Remove(w);
|
||||
}
|
||||
|
||||
SndClickBeep();
|
||||
break;
|
||||
|
||||
case WID_BS_CONVERT:
|
||||
_convert_signal_button = !_convert_signal_button;
|
||||
SndClickBeep();
|
||||
break;
|
||||
|
||||
case WID_BS_DRAG_SIGNALS_DENSITY_DECREASE:
|
||||
|
@ -1743,7 +1745,7 @@ struct BuildRailDepotWindow : public PickerWindowBase {
|
|||
this->RaiseWidget(WID_BRAD_DEPOT_NE + _build_depot_direction);
|
||||
_build_depot_direction = (DiagDirection)(widget - WID_BRAD_DEPOT_NE);
|
||||
this->LowerWidget(WID_BRAD_DEPOT_NE + _build_depot_direction);
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
this->SetDirty();
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -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. */
|
||||
Owner owner = GetRoadOwner(ti->tile, GetRoadTramType(rt));
|
||||
PaletteID pal = (owner == OWNER_NONE || owner == OWNER_TOWN ? GetColourPalette(COLOUR_GREY) : GetCompanyPalette(owner));
|
||||
int z_wires = (ti->tileh == SLOPE_FLAT ? 0 : TILE_HEIGHT) + BB_HEIGHT_UNDER_BRIDGE;
|
||||
uint8_t z_wires = (ti->tileh == SLOPE_FLAT ? 0 : TILE_HEIGHT) + BB_HEIGHT_UNDER_BRIDGE;
|
||||
if (back != 0) {
|
||||
/* 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.
|
||||
|
@ -1427,13 +1427,16 @@ void DrawRoadTypeCatenary(const TileInfo *ti, RoadType rt, RoadBits rb)
|
|||
static const SubSprite west = { -INF, -INF, -12, INF };
|
||||
static const SubSprite north = { -12, -INF, 12, INF };
|
||||
static const SubSprite east = { 12, -INF, INF, INF };
|
||||
AddSortableSpriteToDraw(back, pal, ti->x, ti->y, 16, 1, z_wires, ti->z, IsTransparencySet(TO_CATENARY), 15, 0, GetSlopePixelZInCorner(ti->tileh, CORNER_W), &west);
|
||||
AddSortableSpriteToDraw(back, pal, ti->x, ti->y, 1, 1, z_wires, ti->z, IsTransparencySet(TO_CATENARY), 0, 0, GetSlopePixelZInCorner(ti->tileh, CORNER_N), &north);
|
||||
AddSortableSpriteToDraw(back, pal, ti->x, ti->y, 1, 16, z_wires, ti->z, IsTransparencySet(TO_CATENARY), 0, 15, GetSlopePixelZInCorner(ti->tileh, CORNER_E), &east);
|
||||
int8_t west_z = GetSlopePixelZInCorner(ti->tileh, CORNER_W);
|
||||
int8_t north_z = GetSlopePixelZInCorner(ti->tileh, CORNER_N);
|
||||
int8_t east_z = GetSlopePixelZInCorner(ti->tileh, CORNER_E);
|
||||
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) {
|
||||
/* 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->x, ti->y, 16, 16, z_wires + 1, ti->z, IsTransparencySet(TO_CATENARY), 0, 0, z_wires);
|
||||
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));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1487,13 +1490,13 @@ void DrawRoadCatenary(const TileInfo *ti)
|
|||
* @param h the height of the sprite to draw
|
||||
* @param transparent whether the sprite should be transparent (used for roadside trees)
|
||||
*/
|
||||
static void DrawRoadDetail(SpriteID img, const TileInfo *ti, int dx, int dy, int h, bool transparent)
|
||||
static void DrawRoadDetail(SpriteID img, const TileInfo *ti, int8_t dx, int8_t dy, uint8_t h, bool transparent)
|
||||
{
|
||||
int x = ti->x | dx;
|
||||
int y = ti->y | dy;
|
||||
int z = ti->z;
|
||||
if (ti->tileh != SLOPE_FLAT) z = GetSlopePixelZ(x, y);
|
||||
AddSortableSpriteToDraw(img, PAL_NONE, x, y, 2, 2, h, z, transparent);
|
||||
AddSortableSpriteToDraw(img, PAL_NONE, ti->x, ti->y, z, {{dx, dy, 0}, {2, 2, h}, {}}, transparent);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -582,7 +582,7 @@ struct BuildRoadToolbarWindow : Window {
|
|||
|
||||
CloseWindowById(WC_SELECT_STATION, 0);
|
||||
ToggleRoadButton_Remove(this);
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
break;
|
||||
|
||||
case WID_ROT_CONVERT_ROAD:
|
||||
|
@ -1145,7 +1145,7 @@ struct BuildRoadDepotWindow : public PickerWindowBase {
|
|||
this->RaiseWidget(WID_BROD_DEPOT_NE + _road_depot_orientation);
|
||||
_road_depot_orientation = (DiagDirection)(widget - WID_BROD_DEPOT_NE);
|
||||
this->LowerWidget(WID_BROD_DEPOT_NE + _road_depot_orientation);
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
this->SetDirty();
|
||||
break;
|
||||
|
||||
|
@ -1477,7 +1477,7 @@ public:
|
|||
this->RaiseWidget(WID_BROS_STATION_NE + _roadstop_gui.orientation);
|
||||
_roadstop_gui.orientation = (DiagDirection)(widget - WID_BROS_STATION_NE);
|
||||
this->LowerWidget(WID_BROS_STATION_NE + _roadstop_gui.orientation);
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
this->SetDirty();
|
||||
CloseWindowById(WC_SELECT_STATION, 0);
|
||||
break;
|
||||
|
@ -1487,7 +1487,7 @@ public:
|
|||
this->RaiseWidget(_settings_client.gui.station_show_coverage + 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);
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
this->SetDirty();
|
||||
SetViewportCatchmentStation(nullptr, true);
|
||||
break;
|
||||
|
|
|
@ -405,29 +405,56 @@ void RoadVehicle::MarkDirty()
|
|||
|
||||
void RoadVehicle::UpdateDeltaXY()
|
||||
{
|
||||
static const int8_t _delta_xy_table[8][10] = {
|
||||
/* 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
|
||||
{3, 7, -1, -3, 0, -1, 0, -1, 0, 0}, // NE
|
||||
{3, 3, -1, -1, 0, 0, 1, -1, 1, -1}, // E
|
||||
{7, 3, -3, -1, -1, 0, 0, 0, 1, 0}, // SE
|
||||
{3, 3, -1, -1, 0, 0, 1, 1, 1, 1}, // S
|
||||
{3, 7, -1, -3, 0, -1, 0, 0, 0, 1}, // SW
|
||||
{3, 3, -1, -1, 0, 0, -1, 1, -1, 1}, // W
|
||||
{7, 3, -3, -1, -1, 0, -1, 0, 0, 0}, // NW
|
||||
};
|
||||
/* Set common defaults. */
|
||||
this->bounds = {{-1, -1, 0}, {3, 3, 6}, {}};
|
||||
|
||||
int shorten = VEHICLE_LENGTH - this->gcache.cached_veh_length;
|
||||
if (!IsDiagonalDirection(this->direction)) shorten >>= 1;
|
||||
if (!IsDiagonalDirection(this->direction)) {
|
||||
static const Point _sign_table[] = {
|
||||
/* x, y */
|
||||
{-1, -1}, // DIR_N
|
||||
{-1, 1}, // DIR_E
|
||||
{ 1, 1}, // DIR_S
|
||||
{ 1, -1}, // DIR_W
|
||||
};
|
||||
|
||||
const int8_t *bb = _delta_xy_table[this->direction];
|
||||
this->x_bb_offs = bb[5] + bb[9] * shorten;
|
||||
this->y_bb_offs = bb[4] + bb[8] * shorten;;
|
||||
this->x_offs = bb[3];
|
||||
this->y_offs = bb[2];
|
||||
this->x_extent = bb[1] + bb[7] * shorten;
|
||||
this->y_extent = bb[0] + bb[6] * shorten;
|
||||
this->z_extent = 6;
|
||||
int half_shorten = (VEHICLE_LENGTH - this->gcache.cached_veh_length) / 2;
|
||||
|
||||
/* 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(this->direction)].x;
|
||||
this->bounds.offset.y -= half_shorten * _sign_table[DirToDiagDir(this->direction)].y;
|
||||
} else {
|
||||
/* Unlike trains, road vehicles do not have their offsets moved to the centre. */
|
||||
switch (this->direction) {
|
||||
/* Shorten southern corner of the bounding box according the vehicle length. */
|
||||
case DIR_NE:
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#include "table/strings.h"
|
||||
|
||||
#include "safeguards.h"
|
||||
#include "window_gui.h"
|
||||
|
||||
|
||||
/* == BaseSettingEntry methods == */
|
||||
|
|
|
@ -1148,7 +1148,7 @@ struct GameOptionsWindow : Window {
|
|||
int selected;
|
||||
DropDownList list = this->BuildDropDownList(widget, &selected);
|
||||
if (!list.empty()) {
|
||||
ShowDropDownList(this, std::move(list), selected, widget);
|
||||
this->HandleDropdownListButtonClick(std::move(list), selected, widget);
|
||||
} else {
|
||||
if (widget == WID_GO_RESOLUTION_DROPDOWN) ShowErrorMessage(GetEncodedString(STR_ERROR_RESOLUTION_LIST_FAILED), {}, WL_ERROR);
|
||||
}
|
||||
|
@ -1180,7 +1180,7 @@ struct GameOptionsWindow : Window {
|
|||
int selected;
|
||||
DropDownList list = this->BuildDropDownList(widget, &selected);
|
||||
if (!list.empty()) {
|
||||
ShowDropDownList(this, std::move(list), this->filter.mode, widget);
|
||||
this->HandleDropdownListButtonClick(std::move(list), this->filter.mode, widget);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -1189,7 +1189,7 @@ struct GameOptionsWindow : Window {
|
|||
int selected;
|
||||
DropDownList list = this->BuildDropDownList(widget, &selected);
|
||||
if (!list.empty()) {
|
||||
ShowDropDownList(this, std::move(list), this->filter.type, widget);
|
||||
this->HandleDropdownListButtonClick(std::move(list), this->filter.type, widget);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -330,32 +330,26 @@ TileIndex Ship::GetOrderStationLocation(StationID station)
|
|||
|
||||
void Ship::UpdateDeltaXY()
|
||||
{
|
||||
static const int8_t _delta_xy_table[8][4] = {
|
||||
/* y_extent, x_extent, y_offs, x_offs */
|
||||
{ 6, 6, -3, -3}, // N
|
||||
{ 6, 32, -3, -16}, // NE
|
||||
{ 6, 6, -3, -3}, // E
|
||||
{32, 6, -16, -3}, // SE
|
||||
{ 6, 6, -3, -3}, // S
|
||||
{ 6, 32, -3, -16}, // SW
|
||||
{ 6, 6, -3, -3}, // W
|
||||
{32, 6, -16, -3}, // NW
|
||||
static constexpr SpriteBounds ship_bounds[DIR_END] = {
|
||||
{{ -3, -3, 0}, { 6, 6, 6}, {}}, // N
|
||||
{{-16, -3, 0}, {32, 6, 6}, {}}, // NE
|
||||
{{ -3, -3, 0}, { 6, 6, 6}, {}}, // E
|
||||
{{ -3, -16, 0}, { 6, 32, 6}, {}}, // SE
|
||||
{{ -3, -3, 0}, { 6, 6, 6}, {}}, // S
|
||||
{{-16, -3, 0}, {32, 6, 6}, {}}, // SW
|
||||
{{ -3, -3, 0}, { 6, 6, 6}, {}}, // W
|
||||
{{ -3, -16, 0}, { 6, 32, 6}, {}}, // NW
|
||||
};
|
||||
|
||||
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;
|
||||
this->bounds = ship_bounds[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
|
||||
* 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
|
||||
* where it was before it moved. */
|
||||
this->x_offs -= this->x_pos - this->rotation_x_pos;
|
||||
this->y_offs -= this->y_pos - this->rotation_y_pos;
|
||||
this->bounds.origin.x -= this->x_pos - this->rotation_x_pos;
|
||||
this->bounds.origin.y -= this->y_pos - this->rotation_y_pos;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1717,7 +1717,7 @@ public:
|
|||
const NWidgetBase *wid = this->GetWidget<NWidgetBase>(WID_SM_MAP);
|
||||
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);
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1729,13 +1729,12 @@ public:
|
|||
case WID_SM_VEGETATION: // Show vegetation
|
||||
case WID_SM_OWNERS: // Show land owners
|
||||
this->SwitchMapType((SmallMapType)(widget - WID_SM_CONTOUR));
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
break;
|
||||
|
||||
case WID_SM_CENTERMAP: // Center the smallmap again
|
||||
this->SmallMapCenterOnCurrentPos();
|
||||
this->HandleButtonClick(WID_SM_CENTERMAP);
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
break;
|
||||
|
||||
case WID_SM_TOGGLETOWNNAME: // Toggle town names
|
||||
|
@ -1743,7 +1742,7 @@ public:
|
|||
this->SetWidgetLoweredState(WID_SM_TOGGLETOWNNAME, this->show_towns);
|
||||
|
||||
this->SetDirty();
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
break;
|
||||
|
||||
case WID_SM_SHOW_IND_NAMES: // Toggle industry names
|
||||
|
@ -1751,7 +1750,7 @@ public:
|
|||
this->SetWidgetLoweredState(WID_SM_SHOW_IND_NAMES, this->show_ind_names);
|
||||
|
||||
this->SetDirty();
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
break;
|
||||
|
||||
case WID_SM_LEGEND: // Legend
|
||||
|
|
|
@ -247,6 +247,22 @@ void SndPlayFx(SoundID sound)
|
|||
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 */
|
||||
static const std::string_view _sound_file_names[] = { "samples" };
|
||||
|
||||
|
|
|
@ -21,4 +21,7 @@ void SndPlayVehicleFx(SoundID sound, const Vehicle *v);
|
|||
void SndPlayFx(SoundID sound);
|
||||
void SndCopyToPool();
|
||||
|
||||
void SndClickBeep();
|
||||
void SndConfirmBeep();
|
||||
|
||||
#endif /* SOUND_FUNC_H */
|
||||
|
|
|
@ -54,16 +54,11 @@ void DrawCommonTileSeq(const TileInfo *ti, const DrawTileSprites *dts, Transpare
|
|||
|
||||
if (dtss.IsParentSprite()) {
|
||||
parent_sprite_encountered = true;
|
||||
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)
|
||||
AddSortableSpriteToDraw(image, pal, *ti, dtss, !HasBit(image, SPRITE_MODIFIER_OPAQUE) && IsTransparencySet(to)
|
||||
);
|
||||
} else {
|
||||
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.delta_y) : dtss.delta_y;
|
||||
int offs_x = child_offset_is_unsigned ? static_cast<uint8_t>(dtss.origin.x) : dtss.origin.x;
|
||||
int offs_y = child_offset_is_unsigned ? static_cast<uint8_t>(dtss.origin.y) : dtss.origin.y;
|
||||
bool transparent = !HasBit(image, SPRITE_MODIFIER_OPAQUE) && IsTransparencySet(to);
|
||||
if (parent_sprite_encountered) {
|
||||
AddChildSpriteScreen(image, pal, offs_x, offs_y, transparent);
|
||||
|
@ -114,15 +109,15 @@ void DrawCommonTileSeqInGUI(int x, int y, const DrawTileSprites *dts, int32_t or
|
|||
pal = SpriteLayoutPaletteTransform(image, pal, default_palette);
|
||||
|
||||
if (dtss.IsParentSprite()) {
|
||||
Point pt = RemapCoords(dtss.delta_x, dtss.delta_y, dtss.delta_z);
|
||||
Point pt = RemapCoords(dtss.origin.x, dtss.origin.y, dtss.origin.z);
|
||||
DrawSprite(image, pal, x + UnScaleGUI(pt.x), y + UnScaleGUI(pt.y));
|
||||
|
||||
const Sprite *spr = GetSprite(image & SPRITE_MASK, SpriteType::Normal);
|
||||
child_offset.x = UnScaleGUI(pt.x + spr->x_offs);
|
||||
child_offset.y = UnScaleGUI(pt.y + spr->y_offs);
|
||||
} else {
|
||||
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.delta_y) : dtss.delta_y;
|
||||
int offs_x = child_offset_is_unsigned ? static_cast<uint8_t>(dtss.origin.x) : dtss.origin.x;
|
||||
int offs_y = child_offset_is_unsigned ? static_cast<uint8_t>(dtss.origin.y) : dtss.origin.y;
|
||||
DrawSprite(image, pal, x + child_offset.x + ScaleSpriteTrad(offs_x), y + child_offset.y + ScaleSpriteTrad(offs_y));
|
||||
}
|
||||
}
|
||||
|
|
36
src/sprite.h
36
src/sprite.h
|
@ -10,28 +10,37 @@
|
|||
#ifndef SPRITE_H
|
||||
#define SPRITE_H
|
||||
|
||||
#include "core/geometry_type.hpp"
|
||||
#include "transparency.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
|
||||
* bounding box. Used especially for various multi-sprite buildings (like
|
||||
* depots or stations): */
|
||||
|
||||
/** A tile child sprite and palette to draw for stations etc, with 3D bounding box */
|
||||
struct DrawTileSeqStruct {
|
||||
int8_t delta_x = 0;
|
||||
int8_t delta_y = 0;
|
||||
int8_t delta_z = 0; ///< \c 0x80 identifies child sprites
|
||||
uint8_t size_x = 0;
|
||||
uint8_t size_y = 0;
|
||||
uint8_t size_z = 0;
|
||||
PalSpriteID image{};
|
||||
struct DrawTileSeqStruct : SpriteBounds {
|
||||
PalSpriteID image;
|
||||
|
||||
constexpr DrawTileSeqStruct() = default;
|
||||
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) :
|
||||
SpriteBounds({origin_x, origin_y, origin_z}, {extent_x, extent_y, extent_z}, {}), image(image) {}
|
||||
|
||||
/** Check whether this is a parent sprite with a boundingbox. */
|
||||
bool IsParentSprite() const
|
||||
inline bool IsParentSprite() const
|
||||
{
|
||||
return (uint8_t)this->delta_z != 0x80;
|
||||
return static_cast<uint8_t>(this->origin.z) != 0x80;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -69,14 +78,9 @@ struct DrawTileSpriteSpan : DrawTileSprites {
|
|||
* This structure is the same for both Industries and Houses.
|
||||
* Buildings here reference a general type of construction
|
||||
*/
|
||||
struct DrawBuildingsTileStruct {
|
||||
struct DrawBuildingsTileStruct : SpriteBounds {
|
||||
PalSpriteID ground;
|
||||
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.
|
||||
};
|
||||
|
||||
|
|
|
@ -3184,7 +3184,7 @@ static void DrawTile_Station(TileInfo *ti)
|
|||
7, 8, 9 // SLOPE_NE, SLOPE_ENW, SLOPE_SEN
|
||||
};
|
||||
|
||||
AddSortableSpriteToDraw(image + foundation_parts[ti->tileh], PAL_NONE, ti->x, ti->y, 16, 16, 7, ti->z);
|
||||
AddSortableSpriteToDraw(image + foundation_parts[ti->tileh], PAL_NONE, *ti, {{}, {TILE_SIZE, TILE_SIZE, 7}, {}});
|
||||
} else {
|
||||
/* Draw simple foundations, built up from 8 possible foundation sprites. */
|
||||
|
||||
|
@ -3218,7 +3218,7 @@ static void DrawTile_Station(TileInfo *ti)
|
|||
StartSpriteCombine();
|
||||
for (int i = 0; i < 8; i++) {
|
||||
if (HasBit(parts, i)) {
|
||||
AddSortableSpriteToDraw(image + i, PAL_NONE, ti->x, ti->y, 16, 16, 7, ti->z);
|
||||
AddSortableSpriteToDraw(image + i, PAL_NONE, *ti, {{}, {TILE_SIZE, TILE_SIZE, 7}, {}});
|
||||
}
|
||||
}
|
||||
EndSpriteCombine();
|
||||
|
|
|
@ -658,12 +658,12 @@ public:
|
|||
break;
|
||||
|
||||
case WID_STL_SORTDROPBTN: // select sorting criteria dropdown menu
|
||||
ShowDropDownMenu(this, CompanyStationsWindow::sorter_names, this->stations.SortType(), WID_STL_SORTDROPBTN, 0, 0);
|
||||
this->HandleDropdownMenuButtonClick(CompanyStationsWindow::sorter_names, this->stations.SortType(), WID_STL_SORTDROPBTN, 0, 0);
|
||||
break;
|
||||
|
||||
case WID_STL_CARGODROPDOWN:
|
||||
this->filter_expanded = false;
|
||||
ShowDropDownList(this, this->BuildCargoDropDownList(this->filter_expanded), -1, widget, 0, false, true);
|
||||
this->HandleDropdownListButtonClick(this->BuildCargoDropDownList(this->filter_expanded), -1, widget, 0, false, true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -2005,14 +2005,14 @@ struct StationViewWindow : public Window {
|
|||
* sorting criteria for columns 1, 2, and 3. Column 0 is always
|
||||
* sorted by cargo type. The others can theoretically be sorted
|
||||
* by different things but there is no UI for that. */
|
||||
ShowDropDownMenu(this, StationViewWindow::sort_names,
|
||||
this->HandleDropdownMenuButtonClick(StationViewWindow::sort_names,
|
||||
this->current_mode * 2 + (this->sortings[1] == CargoSortType::Count ? 1 : 0),
|
||||
WID_SV_SORT_BY, 0, 0);
|
||||
break;
|
||||
}
|
||||
|
||||
case WID_SV_GROUP_BY: {
|
||||
ShowDropDownMenu(this, StationViewWindow::group_names, this->grouping_index, WID_SV_GROUP_BY, 0, 0);
|
||||
this->HandleDropdownMenuButtonClick(StationViewWindow::group_names, this->grouping_index, WID_SV_GROUP_BY, 0, 0);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -805,7 +805,7 @@ public:
|
|||
selected++;
|
||||
}
|
||||
|
||||
ShowDropDownList(this, std::move(list), selected, widget);
|
||||
this->HandleDropdownListButtonClick(std::move(list), selected, widget);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -36,13 +36,18 @@
|
|||
# define MW(a) {a, PALETTE_TO_STRUCT_WHITE}
|
||||
# define MC(a) {a, PALETTE_TO_STRUCT_CONCRETE}
|
||||
|
||||
static const PalSpriteID _aqueduct_sprites[] = {
|
||||
{ SPR_AQUEDUCT_MIDDLE_X, PAL_NONE }, { 0x0, PAL_NONE }, { SPR_AQUEDUCT_PILLAR_X, PAL_NONE }, { 0x0, PAL_NONE },
|
||||
{ SPR_AQUEDUCT_MIDDLE_Y, PAL_NONE }, { 0x0, PAL_NONE }, { SPR_AQUEDUCT_PILLAR_Y, PAL_NONE }, { 0x0, PAL_NONE },
|
||||
{ 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 middle part of aqueduct. */
|
||||
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}, // AXIS_X
|
||||
{SPR_AQUEDUCT_MIDDLE_Y, PAL_NONE}, {0x0, PAL_NONE}, {SPR_AQUEDUCT_PILLAR_Y, PAL_NONE}, {0x0, PAL_NONE}, // AIXS_Y
|
||||
};
|
||||
|
||||
static const PalSpriteID _bridge_sprite_table_4_0[] = {
|
||||
/* Sprite table for head part of aqueduct. */
|
||||
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 },
|
||||
{ 0x9A5, PAL_NONE }, { 0x997, PAL_NONE }, { 0x9AD, PAL_NONE }, { 0x0, PAL_NONE },
|
||||
{ 0x99D, PAL_NONE }, { 0x99F, PAL_NONE }, { 0x9B1, PAL_NONE }, { 0x0, PAL_NONE },
|
||||
|
@ -53,7 +58,7 @@ static const PalSpriteID _bridge_sprite_table_4_0[] = {
|
|||
{ 0x1116, PAL_NONE }, { 0x997, PAL_NONE }, { 0x9AD, PAL_NONE }, { 0x0, PAL_NONE },
|
||||
};
|
||||
|
||||
static const PalSpriteID _bridge_sprite_table_4_1[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_suspension_oxide_south[] = {
|
||||
{ 0x9AA, PAL_NONE }, { 0x9A0, PAL_NONE }, { 0x9B2, 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 },
|
||||
|
@ -64,7 +69,7 @@ static const PalSpriteID _bridge_sprite_table_4_1[] = {
|
|||
{ 0x1117, PAL_NONE }, { 0x998, PAL_NONE }, { 0x9AE, PAL_NONE }, { 0x0, PAL_NONE },
|
||||
};
|
||||
|
||||
static const PalSpriteID _bridge_sprite_table_4_2[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_suspension_oxide_inner_north[] = {
|
||||
{ 0x9AC, PAL_NONE }, { 0x9A4, PAL_NONE }, { 0x9B4, 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 },
|
||||
|
@ -75,7 +80,7 @@ static const PalSpriteID _bridge_sprite_table_4_2[] = {
|
|||
{ 0x1119, PAL_NONE }, { 0x99C, PAL_NONE }, { 0x9B0, PAL_NONE }, { 0x0, PAL_NONE },
|
||||
};
|
||||
|
||||
static const PalSpriteID _bridge_sprite_table_4_3[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_suspension_oxide_inner_south[] = {
|
||||
{ 0x9AB, PAL_NONE }, { 0x9A3, PAL_NONE }, { 0x9B3, 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 },
|
||||
|
@ -86,7 +91,7 @@ static const PalSpriteID _bridge_sprite_table_4_3[] = {
|
|||
{ 0x1118, PAL_NONE }, { 0x99B, PAL_NONE }, { 0x9AF, PAL_NONE }, { 0x0, PAL_NONE },
|
||||
};
|
||||
|
||||
static const PalSpriteID _bridge_sprite_table_4_4[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_suspension_oxide_middle_odd[] = {
|
||||
{ 0x9B6, PAL_NONE }, { 0x9BA, PAL_NONE }, { 0x9BC, 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 },
|
||||
|
@ -97,7 +102,7 @@ static const PalSpriteID _bridge_sprite_table_4_4[] = {
|
|||
{ 0x111E, PAL_NONE }, { 0x9B9, PAL_NONE }, { 0x9BB, PAL_NONE }, { 0x0, PAL_NONE },
|
||||
};
|
||||
|
||||
static const PalSpriteID _bridge_sprite_table_4_5[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_suspension_middle_even[] = {
|
||||
{ 0x9BD, PAL_NONE }, { 0x9C1, 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 },
|
||||
|
@ -108,7 +113,7 @@ static const PalSpriteID _bridge_sprite_table_4_5[] = {
|
|||
{ 0x1121, PAL_NONE }, { 0x9C2, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
|
||||
};
|
||||
|
||||
static const PalSpriteID _bridge_sprite_table_4_6[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_generic_oxide_heads[] = {
|
||||
{ 0x986, PAL_NONE }, { 0x988, PAL_NONE }, { 0x985, PAL_NONE }, { 0x987, 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 },
|
||||
|
@ -119,7 +124,7 @@ static const PalSpriteID _bridge_sprite_table_4_6[] = {
|
|||
{ 0x1113, PAL_NONE }, { 0x1115, PAL_NONE }, { 0x1112, PAL_NONE }, { 0x1114, PAL_NONE },
|
||||
};
|
||||
|
||||
static const PalSpriteID _bridge_sprite_table_5_0[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_suspension_yellow_north[] = {
|
||||
{ 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 },
|
||||
{ 0x99D, PALETTE_TO_STRUCT_YELLOW }, { 0x99F, PALETTE_TO_STRUCT_YELLOW }, { 0x9B1, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
|
||||
|
@ -130,7 +135,7 @@ static const PalSpriteID _bridge_sprite_table_5_0[] = {
|
|||
{ 0x1116, PALETTE_TO_STRUCT_YELLOW }, { 0x997, PALETTE_TO_STRUCT_YELLOW }, { 0x9AD, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
|
||||
};
|
||||
|
||||
static const PalSpriteID _bridge_sprite_table_5_1[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_suspension_yellow_south[] = {
|
||||
{ 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 },
|
||||
{ 0x99E, PALETTE_TO_STRUCT_YELLOW }, { 0x9A0, PALETTE_TO_STRUCT_YELLOW }, { 0x9B2, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
|
||||
|
@ -141,7 +146,7 @@ static const PalSpriteID _bridge_sprite_table_5_1[] = {
|
|||
{ 0x1117, PALETTE_TO_STRUCT_YELLOW }, { 0x998, PALETTE_TO_STRUCT_YELLOW }, { 0x9AE, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
|
||||
};
|
||||
|
||||
static const PalSpriteID _bridge_sprite_table_5_2[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_suspension_yellow_inner_north[] = {
|
||||
{ 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 },
|
||||
{ 0x9A2, PALETTE_TO_STRUCT_YELLOW }, { 0x9A4, PALETTE_TO_STRUCT_YELLOW }, { 0x9B4, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
|
||||
|
@ -152,7 +157,7 @@ static const PalSpriteID _bridge_sprite_table_5_2[] = {
|
|||
{ 0x1119, PALETTE_TO_STRUCT_YELLOW }, { 0x99C, PALETTE_TO_STRUCT_YELLOW }, { 0x9B0, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
|
||||
};
|
||||
|
||||
static const PalSpriteID _bridge_sprite_table_5_3[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_suspension_yellow_inner_south[] = {
|
||||
{ 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 },
|
||||
{ 0x9A1, PALETTE_TO_STRUCT_YELLOW }, { 0x9A3, PALETTE_TO_STRUCT_YELLOW }, { 0x9B3, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
|
||||
|
@ -163,7 +168,7 @@ static const PalSpriteID _bridge_sprite_table_5_3[] = {
|
|||
{ 0x1118, PALETTE_TO_STRUCT_YELLOW }, { 0x99B, PALETTE_TO_STRUCT_YELLOW }, { 0x9AF, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
|
||||
};
|
||||
|
||||
static const PalSpriteID _bridge_sprite_table_5_4[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_suspension_yellow_middle_odd[] = {
|
||||
{ 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 },
|
||||
{ 0x9B8, PALETTE_TO_STRUCT_YELLOW }, { 0x9BA, PALETTE_TO_STRUCT_YELLOW }, { 0x9BC, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
|
||||
|
@ -174,7 +179,7 @@ static const PalSpriteID _bridge_sprite_table_5_4[] = {
|
|||
{ 0x111E, PALETTE_TO_STRUCT_YELLOW }, { 0x9B9, PALETTE_TO_STRUCT_YELLOW }, { 0x9BB, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
|
||||
};
|
||||
|
||||
static const PalSpriteID _bridge_sprite_table_5_5[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_suspension_yellow_middle_even[] = {
|
||||
{ 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 },
|
||||
{ 0x9BF, PALETTE_TO_STRUCT_YELLOW }, { 0x9C1, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
|
||||
|
@ -185,7 +190,7 @@ static const PalSpriteID _bridge_sprite_table_5_5[] = {
|
|||
{ 0x1121, PALETTE_TO_STRUCT_YELLOW }, { 0x9C2, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
|
||||
};
|
||||
|
||||
static const PalSpriteID _bridge_sprite_table_5_6[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_generic_yellow_heads[] = {
|
||||
{ 0x986, PAL_NONE }, { 0x988, PAL_NONE }, { 0x985, PAL_NONE }, { 0x987, 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 },
|
||||
|
@ -196,7 +201,7 @@ static const PalSpriteID _bridge_sprite_table_5_6[] = {
|
|||
{ 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_6_0[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_cantilever_oxide_north[] = {
|
||||
{ 0x9CD, PAL_NONE }, { 0x9D9, 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 },
|
||||
|
@ -207,7 +212,7 @@ static const PalSpriteID _bridge_sprite_table_6_0[] = {
|
|||
{ 0x1125, PAL_NONE }, { 0x9DA, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
|
||||
};
|
||||
|
||||
static const PalSpriteID _bridge_sprite_table_6_1[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_cantilever_oxide_south[] = {
|
||||
{ 0x9CB, PAL_NONE }, { 0x9D7, PAL_NONE }, { 0x9DD, 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 },
|
||||
|
@ -218,7 +223,7 @@ static const PalSpriteID _bridge_sprite_table_6_1[] = {
|
|||
{ 0x1127, PAL_NONE }, { 0x9DC, PAL_NONE }, { 0x9E0, PAL_NONE }, { 0x0, PAL_NONE },
|
||||
};
|
||||
|
||||
static const PalSpriteID _bridge_sprite_table_6_2[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_cantilever_oxide_middle[] = {
|
||||
{ 0x9CC, PAL_NONE }, { 0x9D8, PAL_NONE }, { 0x9DE, 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 },
|
||||
|
@ -229,7 +234,7 @@ static const PalSpriteID _bridge_sprite_table_6_2[] = {
|
|||
{ 0x1126, PAL_NONE }, { 0x9DB, PAL_NONE }, { 0x9DF, PAL_NONE }, { 0x0, PAL_NONE },
|
||||
};
|
||||
|
||||
static const PalSpriteID _bridge_sprite_table_6_3[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_cantilever_oxide_heads[] = {
|
||||
{ 0x986, PAL_NONE }, { 0x988, PAL_NONE }, { 0x985, PAL_NONE }, { 0x987, 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 },
|
||||
|
@ -240,7 +245,7 @@ static const PalSpriteID _bridge_sprite_table_6_3[] = {
|
|||
{ 0x1113, PAL_NONE }, { 0x1115, PAL_NONE }, { 0x1112, PAL_NONE }, { 0x1114, PAL_NONE },
|
||||
};
|
||||
|
||||
static const PalSpriteID _bridge_sprite_table_7_0[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_cantilever_brown_north[] = {
|
||||
{ 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 },
|
||||
{ 0x9D3, PALETTE_TO_STRUCT_BROWN }, { 0x9D9, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
|
||||
|
@ -251,7 +256,7 @@ static const PalSpriteID _bridge_sprite_table_7_0[] = {
|
|||
{ 0x1125, PALETTE_TO_STRUCT_BROWN }, { 0x9DA, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
|
||||
};
|
||||
|
||||
static const PalSpriteID _bridge_sprite_table_7_1[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_cantilever_brown_south[] = {
|
||||
{ 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 },
|
||||
{ 0x9D1, PALETTE_TO_STRUCT_BROWN }, { 0x9D7, PALETTE_TO_STRUCT_BROWN }, { 0x9DD, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE },
|
||||
|
@ -262,7 +267,7 @@ static const PalSpriteID _bridge_sprite_table_7_1[] = {
|
|||
{ 0x1127, PALETTE_TO_STRUCT_BROWN }, { 0x9DC, PALETTE_TO_STRUCT_BROWN }, { 0x9E0, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE },
|
||||
};
|
||||
|
||||
static const PalSpriteID _bridge_sprite_table_7_2[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_cantilever_brown_middle[] = {
|
||||
{ 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 },
|
||||
{ 0x9D2, PALETTE_TO_STRUCT_BROWN }, { 0x9D8, PALETTE_TO_STRUCT_BROWN }, { 0x9DE, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE },
|
||||
|
@ -273,7 +278,7 @@ static const PalSpriteID _bridge_sprite_table_7_2[] = {
|
|||
{ 0x1126, PALETTE_TO_STRUCT_BROWN }, { 0x9DB, PALETTE_TO_STRUCT_BROWN }, { 0x9DF, PALETTE_TO_STRUCT_BROWN }, { 0x0, PAL_NONE },
|
||||
};
|
||||
|
||||
static const PalSpriteID _bridge_sprite_table_7_3[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_cantilever_brown_heads[] = {
|
||||
{ 0x986, PAL_NONE }, { 0x988, PAL_NONE }, { 0x985, PAL_NONE }, { 0x987, 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 },
|
||||
|
@ -284,7 +289,7 @@ static const PalSpriteID _bridge_sprite_table_7_3[] = {
|
|||
{ 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_8_0[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_cantilever_red_north[] = {
|
||||
{ 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 },
|
||||
{ 0x9D3, PALETTE_TO_STRUCT_RED }, { 0x9D9, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
|
||||
|
@ -295,7 +300,7 @@ static const PalSpriteID _bridge_sprite_table_8_0[] = {
|
|||
{ 0x1125, PALETTE_TO_STRUCT_RED }, { 0x9DA, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
|
||||
};
|
||||
|
||||
static const PalSpriteID _bridge_sprite_table_8_1[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_cantilever_red_south[] = {
|
||||
{ 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 },
|
||||
{ 0x9D1, PALETTE_TO_STRUCT_RED }, { 0x9D7, PALETTE_TO_STRUCT_RED }, { 0x9DD, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE },
|
||||
|
@ -306,7 +311,7 @@ static const PalSpriteID _bridge_sprite_table_8_1[] = {
|
|||
{ 0x1127, PALETTE_TO_STRUCT_RED }, { 0x9DC, PALETTE_TO_STRUCT_RED }, { 0x9E0, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE },
|
||||
};
|
||||
|
||||
static const PalSpriteID _bridge_sprite_table_8_2[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_cantilever_red_middle[] = {
|
||||
{ 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 },
|
||||
{ 0x9D2, PALETTE_TO_STRUCT_RED }, { 0x9D8, PALETTE_TO_STRUCT_RED }, { 0x9DE, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE },
|
||||
|
@ -317,7 +322,7 @@ static const PalSpriteID _bridge_sprite_table_8_2[] = {
|
|||
{ 0x1126, PALETTE_TO_STRUCT_RED }, { 0x9DB, PALETTE_TO_STRUCT_RED }, { 0x9DF, PALETTE_TO_STRUCT_RED }, { 0x0, PAL_NONE },
|
||||
};
|
||||
|
||||
static const PalSpriteID _bridge_sprite_table_8_3[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_cantilever_red_heads[] = {
|
||||
{ 0x986, PAL_NONE }, { 0x988, PAL_NONE }, { 0x985, PAL_NONE }, { 0x987, 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 },
|
||||
|
@ -394,7 +399,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 ),
|
||||
};
|
||||
|
||||
static const PalSpriteID _bridge_sprite_table_concrete_suspended_A[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_suspension_concrete_north[] = {
|
||||
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_ROAD_X_REAR_TILE_A ), MC( SPR_BTSUS_X_FRONT_TILE_A ), MC( SPR_BTSUS_X_PILLAR_TILE_A ), MN( 0x0 ),
|
||||
|
@ -405,7 +410,7 @@ static const PalSpriteID _bridge_sprite_table_concrete_suspended_A[] = {
|
|||
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_concrete_suspended_B[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_suspension_concrete_south[] = {
|
||||
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_ROAD_X_REAR_TILE_B ), MC( SPR_BTSUS_X_FRONT_TILE_B ), MC( SPR_BTSUS_X_PILLAR_TILE_B ), MN( 0x0 ),
|
||||
|
@ -416,7 +421,7 @@ static const PalSpriteID _bridge_sprite_table_concrete_suspended_B[] = {
|
|||
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_concrete_suspended_C[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_suspension_concrete_inner_north[] = {
|
||||
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_ROAD_X_REAR_TILE_C ), MC( SPR_BTSUS_X_FRONT_TILE_C ), MC( SPR_BTSUS_X_PILLAR_TILE_C ), MN( 0x0 ),
|
||||
|
@ -427,7 +432,7 @@ static const PalSpriteID _bridge_sprite_table_concrete_suspended_C[] = {
|
|||
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_concrete_suspended_D[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_suspension_concrete_inner_south[] = {
|
||||
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_ROAD_X_REAR_TILE_D ), MC( SPR_BTSUS_X_FRONT_TILE_D ), MC( SPR_BTSUS_X_PILLAR_TILE_D ), MN( 0x0 ),
|
||||
|
@ -438,7 +443,7 @@ static const PalSpriteID _bridge_sprite_table_concrete_suspended_D[] = {
|
|||
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_concrete_suspended_E[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_suspension_concrete_middle_odd[] = {
|
||||
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_ROAD_X_REAR_TILE_E ), MC( SPR_BTSUS_X_FRONT_TILE_E ), MC( SPR_BTSUS_X_PILLAR_TILE_E ), MN( 0x0 ),
|
||||
|
@ -449,7 +454,7 @@ static const PalSpriteID _bridge_sprite_table_concrete_suspended_E[] = {
|
|||
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_concrete_suspended_F[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_suspension_concrete_middle_even[] = {
|
||||
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_ROAD_X_REAR_TILE_F ), MC( SPR_BTSUS_X_FRONT ), MN( 0x0 ), MN( 0x0 ),
|
||||
|
@ -460,7 +465,7 @@ static const PalSpriteID _bridge_sprite_table_concrete_suspended_F[] = {
|
|||
MC( SPR_BTSUS_MGLV_Y_REAR_TILE_F ), MC( SPR_BTSUS_Y_FRONT ), MN( 0x0 ), MN( 0x0 ),
|
||||
};
|
||||
|
||||
static const PalSpriteID _bridge_sprite_table_concrete_suspended_heads[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_generic_concrete_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_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 ),
|
||||
|
@ -471,7 +476,7 @@ static const PalSpriteID _bridge_sprite_table_concrete_suspended_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 ),
|
||||
};
|
||||
|
||||
static const PalSpriteID _bridge_sprite_table_9_0[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_girder_middle[] = {
|
||||
{ 0x9F9, PAL_NONE }, { 0x9FD, PAL_NONE }, { 0x9C9, 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 },
|
||||
|
@ -482,7 +487,7 @@ static const PalSpriteID _bridge_sprite_table_9_0[] = {
|
|||
{ 0x1133, PAL_NONE }, { 0x9FE, PAL_NONE }, { 0x9CA, PAL_NONE }, { 0x0, PAL_NONE },
|
||||
};
|
||||
|
||||
static const PalSpriteID _bridge_sprite_table_10_0[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_tubular_oxide_north[] = {
|
||||
{ 0xA0B, PAL_NONE }, { 0xA01, 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 },
|
||||
|
@ -493,7 +498,7 @@ static const PalSpriteID _bridge_sprite_table_10_0[] = {
|
|||
{ 0xA1E, PAL_NONE }, { 0xA02, PAL_NONE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
|
||||
};
|
||||
|
||||
static const PalSpriteID _bridge_sprite_table_10_1[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_tubular_oxide_south[] = {
|
||||
{ 0xA09, PAL_NONE }, { 0x9FF, PAL_NONE }, { 0xA05, 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 },
|
||||
|
@ -504,7 +509,7 @@ static const PalSpriteID _bridge_sprite_table_10_1[] = {
|
|||
{ 0xA20, PAL_NONE }, { 0xA04, PAL_NONE }, { 0xA08, PAL_NONE }, { 0x0, PAL_NONE },
|
||||
};
|
||||
|
||||
static const PalSpriteID _bridge_sprite_table_10_2[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_tubular_oxide_middle[] = {
|
||||
{ 0xA0A, PAL_NONE }, { 0xA00, PAL_NONE }, { 0xA06, 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 },
|
||||
|
@ -515,7 +520,7 @@ static const PalSpriteID _bridge_sprite_table_10_2[] = {
|
|||
{ 0xA1F, PAL_NONE }, { 0xA03, PAL_NONE }, { 0xA07, PAL_NONE }, { 0x0, PAL_NONE },
|
||||
};
|
||||
|
||||
static const PalSpriteID _bridge_sprite_table_11_0[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_tubular_yellow_north[] = {
|
||||
{ 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 },
|
||||
{ 0xA11, PALETTE_TO_STRUCT_YELLOW }, { 0xA01, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
|
||||
|
@ -526,7 +531,7 @@ static const PalSpriteID _bridge_sprite_table_11_0[] = {
|
|||
{ 0xA1E, PALETTE_TO_STRUCT_YELLOW }, { 0xA02, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
|
||||
};
|
||||
|
||||
static const PalSpriteID _bridge_sprite_table_11_1[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_tubular_yellow_south[] = {
|
||||
{ 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 },
|
||||
{ 0xA0F, PALETTE_TO_STRUCT_YELLOW }, { 0x9FF, PALETTE_TO_STRUCT_YELLOW }, { 0xA05, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
|
||||
|
@ -537,7 +542,7 @@ static const PalSpriteID _bridge_sprite_table_11_1[] = {
|
|||
{ 0xA20, PALETTE_TO_STRUCT_YELLOW }, { 0xA04, PALETTE_TO_STRUCT_YELLOW }, { 0xA08, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
|
||||
};
|
||||
|
||||
static const PalSpriteID _bridge_sprite_table_11_2[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_tubular_yellow_middle[] = {
|
||||
{ 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 },
|
||||
{ 0xA10, PALETTE_TO_STRUCT_YELLOW }, { 0xA00, PALETTE_TO_STRUCT_YELLOW }, { 0xA06, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
|
||||
|
@ -548,7 +553,7 @@ static const PalSpriteID _bridge_sprite_table_11_2[] = {
|
|||
{ 0xA1F, PALETTE_TO_STRUCT_YELLOW }, { 0xA03, PALETTE_TO_STRUCT_YELLOW }, { 0xA07, PALETTE_TO_STRUCT_YELLOW }, { 0x0, PAL_NONE },
|
||||
};
|
||||
|
||||
static const PalSpriteID _bridge_sprite_table_12_0[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_tubular_silicon_north[] = {
|
||||
{ 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 },
|
||||
{ 0xA11, PALETTE_TO_STRUCT_CONCRETE }, { 0xA01, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
|
||||
|
@ -559,7 +564,7 @@ static const PalSpriteID _bridge_sprite_table_12_0[] = {
|
|||
{ 0xA1E, PALETTE_TO_STRUCT_CONCRETE }, { 0xA02, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE }, { 0x0, PAL_NONE },
|
||||
};
|
||||
|
||||
static const PalSpriteID _bridge_sprite_table_12_1[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_tubular_silicon_south[] = {
|
||||
{ 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 },
|
||||
{ 0xA0F, PALETTE_TO_STRUCT_CONCRETE }, { 0x9FF, PALETTE_TO_STRUCT_CONCRETE }, { 0xA05, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE },
|
||||
|
@ -570,7 +575,7 @@ static const PalSpriteID _bridge_sprite_table_12_1[] = {
|
|||
{ 0xA20, PALETTE_TO_STRUCT_CONCRETE }, { 0xA04, PALETTE_TO_STRUCT_CONCRETE }, { 0xA08, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE },
|
||||
};
|
||||
|
||||
static const PalSpriteID _bridge_sprite_table_12_2[] = {
|
||||
static const PalSpriteID _bridge_sprite_table_tubular_silicon_middle[] = {
|
||||
{ 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 },
|
||||
{ 0xA10, PALETTE_TO_STRUCT_CONCRETE }, { 0xA00, PALETTE_TO_STRUCT_CONCRETE }, { 0xA06, PALETTE_TO_STRUCT_CONCRETE }, { 0x0, PAL_NONE },
|
||||
|
@ -591,64 +596,64 @@ static const std::span<const PalSpriteID> _bridge_sprite_table_archgirder[] = {
|
|||
_bridge_sprite_table_archgirder_heads,
|
||||
};
|
||||
|
||||
static const std::span<const PalSpriteID> _bridge_sprite_table_4[] = {
|
||||
_bridge_sprite_table_4_0,
|
||||
_bridge_sprite_table_4_1,
|
||||
_bridge_sprite_table_4_2,
|
||||
_bridge_sprite_table_4_3,
|
||||
_bridge_sprite_table_4_4,
|
||||
_bridge_sprite_table_4_5,
|
||||
_bridge_sprite_table_4_6,
|
||||
static const std::span<const PalSpriteID> _bridge_sprite_table_suspension_oxide[] = {
|
||||
_bridge_sprite_table_suspension_oxide_north,
|
||||
_bridge_sprite_table_suspension_oxide_south,
|
||||
_bridge_sprite_table_suspension_oxide_inner_north,
|
||||
_bridge_sprite_table_suspension_oxide_inner_south,
|
||||
_bridge_sprite_table_suspension_oxide_middle_odd,
|
||||
_bridge_sprite_table_suspension_middle_even,
|
||||
_bridge_sprite_table_generic_oxide_heads,
|
||||
};
|
||||
|
||||
static const std::span<const PalSpriteID> _bridge_sprite_table_5[] = {
|
||||
_bridge_sprite_table_5_0,
|
||||
_bridge_sprite_table_5_1,
|
||||
_bridge_sprite_table_5_2,
|
||||
_bridge_sprite_table_5_3,
|
||||
_bridge_sprite_table_5_4,
|
||||
_bridge_sprite_table_5_5,
|
||||
_bridge_sprite_table_5_6,
|
||||
static const std::span<const PalSpriteID> _bridge_sprite_table_suspension_yellow[] = {
|
||||
_bridge_sprite_table_suspension_yellow_north,
|
||||
_bridge_sprite_table_suspension_yellow_south,
|
||||
_bridge_sprite_table_suspension_yellow_inner_north,
|
||||
_bridge_sprite_table_suspension_yellow_inner_south,
|
||||
_bridge_sprite_table_suspension_yellow_middle_odd,
|
||||
_bridge_sprite_table_suspension_yellow_middle_even,
|
||||
_bridge_sprite_table_generic_yellow_heads,
|
||||
};
|
||||
|
||||
static const std::span<const PalSpriteID> _bridge_sprite_table_concrete_suspended[] = {
|
||||
_bridge_sprite_table_concrete_suspended_A,
|
||||
_bridge_sprite_table_concrete_suspended_B,
|
||||
_bridge_sprite_table_concrete_suspended_C,
|
||||
_bridge_sprite_table_concrete_suspended_D,
|
||||
_bridge_sprite_table_concrete_suspended_E,
|
||||
_bridge_sprite_table_concrete_suspended_F,
|
||||
_bridge_sprite_table_concrete_suspended_heads,
|
||||
static const std::span<const PalSpriteID> _bridge_sprite_table_suspension_concrete[] = {
|
||||
_bridge_sprite_table_suspension_concrete_north,
|
||||
_bridge_sprite_table_suspension_concrete_south,
|
||||
_bridge_sprite_table_suspension_concrete_inner_north,
|
||||
_bridge_sprite_table_suspension_concrete_inner_south,
|
||||
_bridge_sprite_table_suspension_concrete_middle_odd,
|
||||
_bridge_sprite_table_suspension_concrete_middle_even,
|
||||
_bridge_sprite_table_generic_concrete_heads,
|
||||
};
|
||||
|
||||
static const std::span<const PalSpriteID> _bridge_sprite_table_6[] = {
|
||||
_bridge_sprite_table_6_0,
|
||||
_bridge_sprite_table_6_1,
|
||||
_bridge_sprite_table_6_2,
|
||||
_bridge_sprite_table_6_2,
|
||||
_bridge_sprite_table_6_2,
|
||||
_bridge_sprite_table_6_2,
|
||||
_bridge_sprite_table_6_3,
|
||||
static const std::span<const PalSpriteID> _bridge_sprite_table_cantilever_oxide[] = {
|
||||
_bridge_sprite_table_cantilever_oxide_north,
|
||||
_bridge_sprite_table_cantilever_oxide_south,
|
||||
_bridge_sprite_table_cantilever_oxide_middle,
|
||||
_bridge_sprite_table_cantilever_oxide_middle,
|
||||
_bridge_sprite_table_cantilever_oxide_middle,
|
||||
_bridge_sprite_table_cantilever_oxide_middle,
|
||||
_bridge_sprite_table_cantilever_oxide_heads,
|
||||
};
|
||||
|
||||
static const std::span<const PalSpriteID> _bridge_sprite_table_7[] = {
|
||||
_bridge_sprite_table_7_0,
|
||||
_bridge_sprite_table_7_1,
|
||||
_bridge_sprite_table_7_2,
|
||||
_bridge_sprite_table_7_2,
|
||||
_bridge_sprite_table_7_2,
|
||||
_bridge_sprite_table_7_2,
|
||||
_bridge_sprite_table_7_3,
|
||||
static const std::span<const PalSpriteID> _bridge_sprite_table_cantilever_brown[] = {
|
||||
_bridge_sprite_table_cantilever_brown_north,
|
||||
_bridge_sprite_table_cantilever_brown_south,
|
||||
_bridge_sprite_table_cantilever_brown_middle,
|
||||
_bridge_sprite_table_cantilever_brown_middle,
|
||||
_bridge_sprite_table_cantilever_brown_middle,
|
||||
_bridge_sprite_table_cantilever_brown_middle,
|
||||
_bridge_sprite_table_cantilever_brown_heads,
|
||||
};
|
||||
|
||||
static const std::span<const PalSpriteID> _bridge_sprite_table_8[] = {
|
||||
_bridge_sprite_table_8_0,
|
||||
_bridge_sprite_table_8_1,
|
||||
_bridge_sprite_table_8_2,
|
||||
_bridge_sprite_table_8_2,
|
||||
_bridge_sprite_table_8_2,
|
||||
_bridge_sprite_table_8_2,
|
||||
_bridge_sprite_table_8_3,
|
||||
static const std::span<const PalSpriteID> _bridge_sprite_table_cantilever_red[] = {
|
||||
_bridge_sprite_table_cantilever_red_north,
|
||||
_bridge_sprite_table_cantilever_red_south,
|
||||
_bridge_sprite_table_cantilever_red_middle,
|
||||
_bridge_sprite_table_cantilever_red_middle,
|
||||
_bridge_sprite_table_cantilever_red_middle,
|
||||
_bridge_sprite_table_cantilever_red_middle,
|
||||
_bridge_sprite_table_cantilever_red_heads,
|
||||
};
|
||||
|
||||
static const std::span<const PalSpriteID> _bridge_sprite_table_wood[] = {
|
||||
|
@ -671,60 +676,60 @@ static const std::span<const PalSpriteID> _bridge_sprite_table_concrete[] = {
|
|||
_bridge_sprite_table_concrete_heads,
|
||||
};
|
||||
|
||||
static const std::span<const PalSpriteID> _bridge_sprite_table_9[] = {
|
||||
_bridge_sprite_table_9_0,
|
||||
_bridge_sprite_table_9_0,
|
||||
_bridge_sprite_table_9_0,
|
||||
_bridge_sprite_table_9_0,
|
||||
_bridge_sprite_table_9_0,
|
||||
_bridge_sprite_table_9_0,
|
||||
_bridge_sprite_table_4_6,
|
||||
static const std::span<const PalSpriteID> _bridge_sprite_table_girder[] = {
|
||||
_bridge_sprite_table_girder_middle,
|
||||
_bridge_sprite_table_girder_middle,
|
||||
_bridge_sprite_table_girder_middle,
|
||||
_bridge_sprite_table_girder_middle,
|
||||
_bridge_sprite_table_girder_middle,
|
||||
_bridge_sprite_table_girder_middle,
|
||||
_bridge_sprite_table_generic_oxide_heads,
|
||||
};
|
||||
|
||||
static const std::span<const PalSpriteID> _bridge_sprite_table_10[] = {
|
||||
_bridge_sprite_table_10_0,
|
||||
_bridge_sprite_table_10_1,
|
||||
_bridge_sprite_table_10_2,
|
||||
_bridge_sprite_table_10_2,
|
||||
_bridge_sprite_table_10_2,
|
||||
_bridge_sprite_table_10_2,
|
||||
_bridge_sprite_table_4_6,
|
||||
static const std::span<const PalSpriteID> _bridge_sprite_table_tubular_oxide[] = {
|
||||
_bridge_sprite_table_tubular_oxide_north,
|
||||
_bridge_sprite_table_tubular_oxide_south,
|
||||
_bridge_sprite_table_tubular_oxide_middle,
|
||||
_bridge_sprite_table_tubular_oxide_middle,
|
||||
_bridge_sprite_table_tubular_oxide_middle,
|
||||
_bridge_sprite_table_tubular_oxide_middle,
|
||||
_bridge_sprite_table_generic_oxide_heads,
|
||||
};
|
||||
|
||||
static const std::span<const PalSpriteID> _bridge_sprite_table_11[] = {
|
||||
_bridge_sprite_table_11_0,
|
||||
_bridge_sprite_table_11_1,
|
||||
_bridge_sprite_table_11_2,
|
||||
_bridge_sprite_table_11_2,
|
||||
_bridge_sprite_table_11_2,
|
||||
_bridge_sprite_table_11_2,
|
||||
_bridge_sprite_table_5_6,
|
||||
static const std::span<const PalSpriteID> _bridge_sprite_table_tubular_yellow[] = {
|
||||
_bridge_sprite_table_tubular_yellow_north,
|
||||
_bridge_sprite_table_tubular_yellow_south,
|
||||
_bridge_sprite_table_tubular_yellow_middle,
|
||||
_bridge_sprite_table_tubular_yellow_middle,
|
||||
_bridge_sprite_table_tubular_yellow_middle,
|
||||
_bridge_sprite_table_tubular_yellow_middle,
|
||||
_bridge_sprite_table_generic_yellow_heads,
|
||||
};
|
||||
|
||||
static const std::span<const PalSpriteID> _bridge_sprite_table_12[] = {
|
||||
_bridge_sprite_table_12_0,
|
||||
_bridge_sprite_table_12_1,
|
||||
_bridge_sprite_table_12_2,
|
||||
_bridge_sprite_table_12_2,
|
||||
_bridge_sprite_table_12_2,
|
||||
_bridge_sprite_table_12_2,
|
||||
_bridge_sprite_table_concrete_suspended_heads,
|
||||
static const std::span<const PalSpriteID> _bridge_sprite_table_tubular_silicon[] = {
|
||||
_bridge_sprite_table_tubular_silicon_north,
|
||||
_bridge_sprite_table_tubular_silicon_south,
|
||||
_bridge_sprite_table_tubular_silicon_middle,
|
||||
_bridge_sprite_table_tubular_silicon_middle,
|
||||
_bridge_sprite_table_tubular_silicon_middle,
|
||||
_bridge_sprite_table_tubular_silicon_middle,
|
||||
_bridge_sprite_table_generic_concrete_heads,
|
||||
};
|
||||
|
||||
static const std::span<const std::span<const PalSpriteID>> _bridge_sprite_table[MAX_BRIDGES] = {
|
||||
_bridge_sprite_table_wood,
|
||||
_bridge_sprite_table_concrete,
|
||||
_bridge_sprite_table_archgirder,
|
||||
_bridge_sprite_table_concrete_suspended,
|
||||
_bridge_sprite_table_4,
|
||||
_bridge_sprite_table_5,
|
||||
_bridge_sprite_table_6,
|
||||
_bridge_sprite_table_7,
|
||||
_bridge_sprite_table_8,
|
||||
_bridge_sprite_table_9,
|
||||
_bridge_sprite_table_10,
|
||||
_bridge_sprite_table_11,
|
||||
_bridge_sprite_table_12
|
||||
_bridge_sprite_table_suspension_concrete,
|
||||
_bridge_sprite_table_suspension_oxide,
|
||||
_bridge_sprite_table_suspension_yellow,
|
||||
_bridge_sprite_table_cantilever_oxide,
|
||||
_bridge_sprite_table_cantilever_brown,
|
||||
_bridge_sprite_table_cantilever_red,
|
||||
_bridge_sprite_table_girder,
|
||||
_bridge_sprite_table_tubular_oxide,
|
||||
_bridge_sprite_table_tubular_yellow,
|
||||
_bridge_sprite_table_tubular_silicon,
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -313,14 +313,12 @@ enum WireSpriteOffset : uint8_t {
|
|||
WSO_ENTRANCE_SE,
|
||||
};
|
||||
|
||||
struct SortableSpriteStruct {
|
||||
struct SortableSpriteStruct : SpriteBounds {
|
||||
uint8_t image_offset;
|
||||
int8_t x_offset;
|
||||
int8_t y_offset;
|
||||
int8_t x_size;
|
||||
int8_t y_size;
|
||||
int8_t z_size;
|
||||
int8_t z_offset;
|
||||
|
||||
constexpr SortableSpriteStruct(uint8_t image_offset, const SpriteBounds &bounds) : SpriteBounds(bounds), image_offset(image_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) :
|
||||
SpriteBounds({x_offset, y_offset, z_offset}, {x_size, y_size, z_size}, {}), image_offset(image_offset) {}
|
||||
};
|
||||
|
||||
/** Distance between wire and rail */
|
||||
|
@ -398,11 +396,17 @@ static const SortableSpriteStruct _rail_catenary_sprite_data_depot[] = {
|
|||
{ 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[] = {
|
||||
{ WSO_ENTRANCE_SW, 0, 7, 15, 1, 1, ELRAIL_ELEVATION }, //! Wire for NE tunnel (SW facing exit)
|
||||
{ WSO_ENTRANCE_NW, 7, 0, 1, 15, 1, ELRAIL_ELEVATION }, //! Wire for SE tunnel (NW facing exit)
|
||||
{ WSO_ENTRANCE_NE, 0, 7, 15, 1, 1, ELRAIL_ELEVATION }, //! Wire for SW tunnel (NE facing exit)
|
||||
{ WSO_ENTRANCE_SE, 7, 0, 1, 15, 1, ELRAIL_ELEVATION } //! Wire for NW tunnel (SE facing exit)
|
||||
{ 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_NW, {{0, 0, BB_Z_SEPARATOR}, {15, 16, 1}, {7, 0, ELRAIL_TUNNEL_OFFSET}} }, //! 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_SE, {{0, 0, BB_Z_SEPARATOR}, {15, 16, 1}, {7, 0, ELRAIL_TUNNEL_OFFSET}} } //! Wire for NW tunnel (SE facing exit)
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -37,15 +37,15 @@ struct DrawIndustryCoordinates {
|
|||
* @param p1 palette ID of ground sprite
|
||||
* @param s2 sprite ID of building sprite
|
||||
* @param p2 palette ID of building sprite
|
||||
* @param sx coordinate x of the sprite
|
||||
* @param sy coordinate y of the sprite
|
||||
* @param w width of the sprite
|
||||
* @param h height of the sprite
|
||||
* @param dz virtual height of the sprite
|
||||
* @param dx The x-position of the sprite within the tile.
|
||||
* @param dy the y-position of the sprite within the tile.
|
||||
* @param sx the x-extent of the sprite.
|
||||
* @param sy the y-extent of the sprite.
|
||||
* @param sz the z-extent of the sprite.
|
||||
* @param p this allows to specify a special drawing procedure.
|
||||
* @see DrawBuildingsTileStruct
|
||||
*/
|
||||
#define M(s1, p1, s2, p2, sx, sy, w, h, dz, p) { { s1, p1 }, { s2, p2 }, sx, sy, w, h, dz, p }
|
||||
#define M(s1, p1, s2, p2, dx, dy, sx, sy, sz, p) { {{dx, dy, 0}, {sx, sy, sz}, {}}, { s1, p1 }, { s2, p2 }, p}
|
||||
|
||||
/** Structure for industry tiles drawing */
|
||||
static const DrawBuildingsTileStruct _industry_draw_tile_data[NEW_INDUSTRYTILEOFFSET * 4] = {
|
||||
|
|
|
@ -13,15 +13,15 @@
|
|||
* @param p1 The first sprite's palette of the building, mostly the ground sprite
|
||||
* @param s2 The second sprite of the building.
|
||||
* @param p2 The second sprite's palette of the building.
|
||||
* @param sx The x-position of the sprite within the tile
|
||||
* @param sy the y-position of the sprite within the tile
|
||||
* @param w the width of the sprite
|
||||
* @param h the height of the sprite
|
||||
* @param dz the virtual height of the sprite
|
||||
* @param dx The x-position of the sprite within the tile.
|
||||
* @param dy the y-position of the sprite within the tile.
|
||||
* @param sx the x-extent of the sprite.
|
||||
* @param sy the y-extent of the sprite.
|
||||
* @param sz the z-extent of the sprite.
|
||||
* @param p set to 1 if a lift is present ()
|
||||
* @see DrawBuildingsTileStruct
|
||||
*/
|
||||
#define M(s1, p1, s2, p2, sx, sy, w, h, dz, p) { { s1, p1 }, { s2, p2 }, sx, sy, w, h, dz, p}
|
||||
#define M(s1, p1, s2, p2, dx, dy, sx, sy, sz, p) { {{dx, dy, 0}, {sx, sy, sz}, {}}, { s1, p1 }, { s2, p2 }, p}
|
||||
|
||||
/** structure of houses graphics*/
|
||||
static const DrawBuildingsTileStruct _town_draw_tile_data[] = {
|
||||
|
|
|
@ -621,7 +621,6 @@ struct ScenarioEditorLandscapeGenerationWindow : Window {
|
|||
if (!IsInsideMM(size, 1, 8 + 1)) return;
|
||||
_terraform_size = size;
|
||||
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
this->SetDirty();
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -514,7 +514,7 @@ void TextfileWindow::AfterLoadMarkdown()
|
|||
for (size_t line : this->jumplist) {
|
||||
list.push_back(MakeDropDownListStringItem(GetString(STR_TEXTFILE_JUMPLIST_ITEM, this->lines[line].text), (int)line));
|
||||
}
|
||||
ShowDropDownList(this, std::move(list), -1, widget);
|
||||
this->HandleDropdownListButtonClick(std::move(list), -1, widget);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
#ifndef TILE_CMD_H
|
||||
#define TILE_CMD_H
|
||||
|
||||
#include "core/geometry_type.hpp"
|
||||
#include "command_type.h"
|
||||
#include "vehicle_type.h"
|
||||
#include "cargo_type.h"
|
||||
|
@ -26,12 +27,9 @@ enum class VehicleEnterTileState : uint8_t {
|
|||
using VehicleEnterTileStates = EnumBitSet<VehicleEnterTileState, uint8_t>;
|
||||
|
||||
/** Tile information, used while rendering the tile */
|
||||
struct TileInfo {
|
||||
int x; ///< X position of the tile in unit coordinates
|
||||
int y; ///< Y position of the tile in unit coordinates
|
||||
struct TileInfo : Coord3D<int> {
|
||||
Slope tileh; ///< Slope of the tile
|
||||
TileIndex tile; ///< Tile index
|
||||
int z; ///< Height
|
||||
};
|
||||
|
||||
/** Tile description for the 'land area information' tool */
|
||||
|
|
|
@ -12,29 +12,29 @@
|
|||
|
||||
#include "core/strong_typedef_type.hpp"
|
||||
|
||||
static const uint TILE_SIZE = 16; ///< Tile size in world coordinates.
|
||||
static const uint TILE_UNIT_MASK = TILE_SIZE - 1; ///< For masking in/out the inner-tile world coordinate units.
|
||||
static const uint TILE_PIXELS = 32; ///< Pixel distance between tile columns/rows 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 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 constexpr 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 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 int MAX_VEHICLE_PIXEL_X = 192; ///< Maximum width 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_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 constexpr int MAX_VEHICLE_PIXEL_Y = 96; ///< Maximum height of a vehicle in pixels in #ZOOM_BASE.
|
||||
|
||||
static const uint MAX_TILE_HEIGHT = 255; ///< Maximum allowed tile height
|
||||
static constexpr uint MAX_TILE_HEIGHT = 255; ///< Maximum allowed tile height
|
||||
|
||||
static const uint MIN_HEIGHTMAP_HEIGHT = 1; ///< Lowest possible peak value for heightmap creation
|
||||
static const uint MIN_CUSTOM_TERRAIN_TYPE = 1; ///< Lowest possible peak value for world generation
|
||||
static constexpr 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_MAP_HEIGHT_LIMIT = 15; ///< Lower 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_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 MIN_SNOWLINE_HEIGHT = 2; ///< Minimum snowline height
|
||||
static const uint DEF_SNOWLINE_HEIGHT = 10; ///< Default snowline height
|
||||
static const uint MAX_SNOWLINE_HEIGHT = (MAX_TILE_HEIGHT - 2); ///< Maximum allowed snowline height
|
||||
static constexpr uint MIN_SNOWLINE_HEIGHT = 2; ///< Minimum snowline height
|
||||
static constexpr 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 DEF_SNOW_COVERAGE = 40; ///< Default snow coverage.
|
||||
static const uint DEF_DESERT_COVERAGE = 50; ///< Default desert coverage.
|
||||
static constexpr uint DEF_SNOW_COVERAGE = 40; ///< Default snow coverage.
|
||||
static constexpr uint DEF_DESERT_COVERAGE = 50; ///< Default desert coverage.
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
@ -117,7 +117,7 @@ public:
|
|||
static void PopupMainToolbarMenu(Window *w, WidgetID widget, DropDownList &&list, int def)
|
||||
{
|
||||
ShowDropDownList(w, std::move(list), def, widget, 0, true);
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -204,7 +204,7 @@ static CallBackFunction ToolbarPauseClick(Window *)
|
|||
if (_networking && !_network_server) return CBF_NONE; // only server can pause the game
|
||||
|
||||
if (Command<CMD_PAUSE>::Post(PauseMode::Normal, _pause_mode.None())) {
|
||||
if (_settings_client.sound.confirm) SndPlayFx(SND_15_BEEP);
|
||||
SndConfirmBeep();
|
||||
}
|
||||
return CBF_NONE;
|
||||
}
|
||||
|
@ -220,7 +220,7 @@ static CallBackFunction ToolbarFastForwardClick(Window *)
|
|||
|
||||
ChangeGameSpeed(_game_speed == 100);
|
||||
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
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));
|
||||
|
||||
ShowDropDownList(w, std::move(list), 0, WID_TN_SETTINGS, 140, true);
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
return CBF_NONE;
|
||||
}
|
||||
|
||||
|
@ -684,7 +684,7 @@ static CallBackFunction ToolbarGraphsClick(Window *w)
|
|||
if (_toolbar_mode != TB_NORMAL) AddDropDownLeagueTableOptions(list);
|
||||
|
||||
ShowDropDownList(w, std::move(list), GRMN_OPERATING_PROFIT_GRAPH, WID_TN_GRAPHS, 140, true);
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
|
||||
return CBF_NONE;
|
||||
}
|
||||
|
@ -697,7 +697,7 @@ static CallBackFunction ToolbarLeagueClick(Window *w)
|
|||
|
||||
int selected = list[0]->result;
|
||||
ShowDropDownList(w, std::move(list), selected, WID_TN_LEAGUE, 140, true);
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
|
||||
return CBF_NONE;
|
||||
}
|
||||
|
@ -857,7 +857,6 @@ static CallBackFunction ToolbarZoomInClick(Window *w)
|
|||
{
|
||||
if (DoZoomInOutWindow(ZOOM_IN, GetMainWindow())) {
|
||||
w->HandleButtonClick((_game_mode == GM_EDITOR) ? (WidgetID)WID_TE_ZOOM_IN : (WidgetID)WID_TN_ZOOM_IN);
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
}
|
||||
return CBF_NONE;
|
||||
}
|
||||
|
@ -868,7 +867,6 @@ static CallBackFunction ToolbarZoomOutClick(Window *w)
|
|||
{
|
||||
if (DoZoomInOutWindow(ZOOM_OUT, GetMainWindow())) {
|
||||
w->HandleButtonClick((_game_mode == GM_EDITOR) ? (WidgetID)WID_TE_ZOOM_OUT : (WidgetID)WID_TN_ZOOM_OUT);
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
}
|
||||
return CBF_NONE;
|
||||
}
|
||||
|
@ -878,7 +876,7 @@ static CallBackFunction ToolbarZoomOutClick(Window *w)
|
|||
static CallBackFunction ToolbarBuildRailClick(Window *w)
|
||||
{
|
||||
ShowDropDownList(w, GetRailTypeDropDownList(), _last_built_railtype, WID_TN_RAILS, 140, true);
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
return CBF_NONE;
|
||||
}
|
||||
|
||||
|
@ -900,7 +898,7 @@ static CallBackFunction MenuClickBuildRail(int index)
|
|||
static CallBackFunction ToolbarBuildRoadClick(Window *w)
|
||||
{
|
||||
ShowDropDownList(w, GetRoadTypeDropDownList(RTTB_ROAD), _last_built_roadtype, WID_TN_ROADS, 140, true);
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
return CBF_NONE;
|
||||
}
|
||||
|
||||
|
@ -922,7 +920,7 @@ static CallBackFunction MenuClickBuildRoad(int index)
|
|||
static CallBackFunction ToolbarBuildTramClick(Window *w)
|
||||
{
|
||||
ShowDropDownList(w, GetRoadTypeDropDownList(RTTB_TRAM), _last_built_tramtype, WID_TN_TRAMS, 140, true);
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
return CBF_NONE;
|
||||
}
|
||||
|
||||
|
@ -946,7 +944,7 @@ static CallBackFunction ToolbarBuildWaterClick(Window *w)
|
|||
DropDownList list;
|
||||
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);
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
return CBF_NONE;
|
||||
}
|
||||
|
||||
|
@ -968,7 +966,7 @@ static CallBackFunction ToolbarBuildAirClick(Window *w)
|
|||
DropDownList list;
|
||||
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);
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
return CBF_NONE;
|
||||
}
|
||||
|
||||
|
@ -992,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_SIGN, PAL_NONE, STR_LANDSCAPING_MENU_PLACE_SIGN, 2));
|
||||
ShowDropDownList(w, std::move(list), 0, WID_TN_LANDSCAPE, 100, true);
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
return CBF_NONE;
|
||||
}
|
||||
|
||||
|
@ -1188,7 +1186,7 @@ static CallBackFunction ToolbarSwitchClick(Window *w)
|
|||
|
||||
w->ReInit();
|
||||
w->SetWidgetLoweredState(_game_mode == GM_EDITOR ? (WidgetID)WID_TE_SWITCH_BAR : (WidgetID)WID_TN_SWITCH_BAR, _toolbar_mode == TB_LOWER);
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
return CBF_NONE;
|
||||
}
|
||||
|
||||
|
@ -1232,7 +1230,6 @@ static CallBackFunction ToolbarScenDateForward(Window *w)
|
|||
static CallBackFunction ToolbarScenGenLand(Window *w)
|
||||
{
|
||||
w->HandleButtonClick(WID_TE_LAND_GENERATE);
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
|
||||
ShowEditorTerraformToolbar();
|
||||
return CBF_NONE;
|
||||
|
@ -1256,7 +1253,6 @@ static CallBackFunction ToolbarScenGenTown(int index)
|
|||
static CallBackFunction ToolbarScenGenIndustry(Window *w)
|
||||
{
|
||||
w->HandleButtonClick(WID_TE_INDUSTRY);
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
ShowBuildIndustryWindow();
|
||||
return CBF_NONE;
|
||||
}
|
||||
|
@ -1264,7 +1260,7 @@ static CallBackFunction ToolbarScenGenIndustry(Window *w)
|
|||
static CallBackFunction ToolbarScenBuildRoadClick(Window *w)
|
||||
{
|
||||
ShowDropDownList(w, GetScenRoadTypeDropDownList(RTTB_ROAD), _last_built_roadtype, WID_TE_ROADS, 140, true);
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
return CBF_NONE;
|
||||
}
|
||||
|
||||
|
@ -1284,7 +1280,7 @@ static CallBackFunction ToolbarScenBuildRoad(int index)
|
|||
static CallBackFunction ToolbarScenBuildTramClick(Window *w)
|
||||
{
|
||||
ShowDropDownList(w, GetScenRoadTypeDropDownList(RTTB_TRAM), _last_built_tramtype, WID_TE_TRAMS, 140, true);
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
return CBF_NONE;
|
||||
}
|
||||
|
||||
|
@ -1304,7 +1300,6 @@ static CallBackFunction ToolbarScenBuildTram(int index)
|
|||
static CallBackFunction ToolbarScenBuildDocks(Window *w)
|
||||
{
|
||||
w->HandleButtonClick(WID_TE_WATER);
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
ShowBuildDocksScenToolbar();
|
||||
return CBF_NONE;
|
||||
}
|
||||
|
@ -1312,7 +1307,6 @@ static CallBackFunction ToolbarScenBuildDocks(Window *w)
|
|||
static CallBackFunction ToolbarScenPlantTrees(Window *w)
|
||||
{
|
||||
w->HandleButtonClick(WID_TE_TREES);
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
ShowBuildTreesToolbar();
|
||||
return CBF_NONE;
|
||||
}
|
||||
|
@ -1320,7 +1314,6 @@ static CallBackFunction ToolbarScenPlantTrees(Window *w)
|
|||
static CallBackFunction ToolbarScenPlaceSign(Window *w)
|
||||
{
|
||||
w->HandleButtonClick(WID_TE_SIGNS);
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
return SelectSignTool();
|
||||
}
|
||||
|
||||
|
@ -2407,7 +2400,7 @@ struct ScenarioEditorToolbarWindow : Window {
|
|||
{
|
||||
CallBackFunction cbf = _scen_toolbar_dropdown_procs[widget](index);
|
||||
if (cbf != CBF_NONE) _last_started_action = cbf;
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
}
|
||||
|
||||
EventState OnHotkey(int hotkey) override
|
||||
|
|
|
@ -284,15 +284,7 @@ static void DrawTile_Town(TileInfo *ti)
|
|||
/* Add a house on top of the ground? */
|
||||
SpriteID image = dcts->building.sprite;
|
||||
if (image != 0) {
|
||||
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)
|
||||
);
|
||||
AddSortableSpriteToDraw(image, dcts->building.pal, *ti, *dcts, IsTransparencySet(TO_HOUSES));
|
||||
|
||||
if (IsTransparencySet(TO_HOUSES)) return;
|
||||
}
|
||||
|
|
|
@ -288,6 +288,7 @@ public:
|
|||
|
||||
this->town->show_zone = new_show_state;
|
||||
this->SetWidgetLoweredState(widget, new_show_state);
|
||||
SndClickBeep();
|
||||
MarkWholeScreenDirty();
|
||||
break;
|
||||
}
|
||||
|
@ -937,7 +938,7 @@ public:
|
|||
break;
|
||||
|
||||
case WID_TD_SORT_CRITERIA: // Click on sort criteria dropdown
|
||||
ShowDropDownMenu(this, TownDirectoryWindow::sorter_names, this->towns.SortType(), WID_TD_SORT_CRITERIA, 0, 0);
|
||||
this->HandleDropdownMenuButtonClick(TownDirectoryWindow::sorter_names, this->towns.SortType(), WID_TD_SORT_CRITERIA, 0, 0);
|
||||
break;
|
||||
|
||||
case WID_TD_LIST: { // Click on Town Matrix
|
||||
|
@ -1376,7 +1377,7 @@ void DrawHouseInGUI(int x, int y, HouseID house_id, int view)
|
|||
|
||||
/* Add a house on top of the ground? */
|
||||
if (dcts.building.sprite != 0) {
|
||||
Point pt = RemapCoords(dcts.subtile_x, dcts.subtile_y, 0);
|
||||
Point pt = RemapCoords(dcts.origin.x, dcts.origin.y, dcts.origin.z);
|
||||
DrawSprite(dcts.building.sprite, dcts.building.pal, x + UnScaleGUI(pt.x), y + UnScaleGUI(pt.y));
|
||||
}
|
||||
};
|
||||
|
@ -1739,7 +1740,7 @@ struct BuildHouseWindow : public PickerWindow {
|
|||
this->SetWidgetLoweredState(WID_BH_PROTECT_OFF, !BuildHouseWindow::house_protected);
|
||||
this->SetWidgetLoweredState(WID_BH_PROTECT_ON, BuildHouseWindow::house_protected);
|
||||
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
this->SetDirty();
|
||||
break;
|
||||
|
||||
|
|
|
@ -1491,13 +1491,7 @@ CommandCost CmdSellRailWagon(DoCommandFlags flags, Vehicle *t, bool sell_chain,
|
|||
void Train::UpdateDeltaXY()
|
||||
{
|
||||
/* Set common defaults. */
|
||||
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;
|
||||
this->bounds = {{-1, -1, 0}, {3, 3, 6}, {}};
|
||||
|
||||
/* 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);
|
||||
|
@ -1508,50 +1502,47 @@ void Train::UpdateDeltaXY()
|
|||
if (flipped) dir = ReverseDir(dir);
|
||||
|
||||
if (!IsDiagonalDirection(dir)) {
|
||||
static const int _sign_table[] =
|
||||
{
|
||||
static const Point _sign_table[] = {
|
||||
/* x, y */
|
||||
-1, -1, // DIR_N
|
||||
-1, 1, // DIR_E
|
||||
1, 1, // DIR_S
|
||||
1, -1, // DIR_W
|
||||
{-1, -1}, // DIR_N
|
||||
{-1, 1}, // DIR_E
|
||||
{ 1, 1}, // DIR_S
|
||||
{ 1, -1}, // DIR_W
|
||||
};
|
||||
|
||||
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. */
|
||||
this->x_offs -= half_shorten * _sign_table[dir];
|
||||
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];
|
||||
this->bounds.offset.x -= half_shorten * _sign_table[DirToDiagDir(dir)].x;
|
||||
this->bounds.offset.y -= half_shorten * _sign_table[DirToDiagDir(dir)].y;
|
||||
} else {
|
||||
switch (dir) {
|
||||
/* Shorten southern corner of the bounding box according the vehicle length
|
||||
* and center the bounding box on the vehicle. */
|
||||
case DIR_NE:
|
||||
this->x_offs = 1 - (this->gcache.cached_veh_length + 1) / 2 + flip_offs;
|
||||
this->x_extent = this->gcache.cached_veh_length - 1;
|
||||
this->x_bb_offs = -1;
|
||||
this->bounds.origin.x = -(this->gcache.cached_veh_length + 1) / 2 + flip_offs;
|
||||
this->bounds.extent.x = this->gcache.cached_veh_length;
|
||||
this->bounds.offset.x = 1;
|
||||
break;
|
||||
|
||||
case DIR_NW:
|
||||
this->y_offs = 1 - (this->gcache.cached_veh_length + 1) / 2 + flip_offs;
|
||||
this->y_extent = this->gcache.cached_veh_length - 1;
|
||||
this->y_bb_offs = -1;
|
||||
this->bounds.origin.y = -(this->gcache.cached_veh_length + 1) / 2 + flip_offs;
|
||||
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
|
||||
* and center the bounding box on the vehicle. */
|
||||
case DIR_SW:
|
||||
this->x_offs = 1 + (this->gcache.cached_veh_length + 1) / 2 - VEHICLE_LENGTH - flip_offs;
|
||||
this->x_extent = VEHICLE_LENGTH - 1;
|
||||
this->x_bb_offs = VEHICLE_LENGTH - this->gcache.cached_veh_length - 1;
|
||||
this->bounds.origin.x = -(this->gcache.cached_veh_length) / 2 - flip_offs;
|
||||
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->y_offs = 1 + (this->gcache.cached_veh_length + 1) / 2 - VEHICLE_LENGTH - flip_offs;
|
||||
this->y_extent = VEHICLE_LENGTH - 1;
|
||||
this->y_bb_offs = VEHICLE_LENGTH - this->gcache.cached_veh_length - 1;
|
||||
this->bounds.origin.y = -(this->gcache.cached_veh_length) / 2 - flip_offs;
|
||||
this->bounds.extent.y = this->gcache.cached_veh_length;
|
||||
this->bounds.offset.y = 1 - (VEHICLE_LENGTH - this->gcache.cached_veh_length);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
|
@ -80,7 +80,7 @@ public:
|
|||
} else {
|
||||
/* toggle the bit of the transparencies variable and play a sound */
|
||||
ToggleTransparency((TransparencyOption)(widget - WID_TT_BEGIN));
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
MarkWholeScreenDirty();
|
||||
}
|
||||
} else if (widget == WID_TT_BUTTONS) {
|
||||
|
@ -94,7 +94,7 @@ public:
|
|||
if (i == WID_TT_TEXT|| i == WID_TT_END) return;
|
||||
|
||||
ToggleInvisibility((TransparencyOption)(i - WID_TT_BEGIN));
|
||||
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
|
||||
SndClickBeep();
|
||||
|
||||
/* Redraw whole screen only if transparency is set */
|
||||
if (IsTransparencySet((TransparencyOption)(i - WID_TT_BEGIN))) {
|
||||
|
|
|
@ -635,7 +635,7 @@ CommandCost CmdPlantTree(DoCommandFlags flags, TileIndex tile, TileIndex start_t
|
|||
}
|
||||
|
||||
struct TreeListEnt : PalSpriteID {
|
||||
uint8_t x, y;
|
||||
int8_t x, y;
|
||||
};
|
||||
|
||||
static void DrawTile_Trees(TileInfo *ti)
|
||||
|
@ -699,7 +699,8 @@ static void DrawTile_Trees(TileInfo *ti)
|
|||
}
|
||||
}
|
||||
|
||||
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);
|
||||
SpriteBounds bounds{{}, {TILE_SIZE, TILE_SIZE, 48}, {te[mi].x, te[mi].y, 0}};
|
||||
AddSortableSpriteToDraw(te[mi].sprite, te[mi].pal, ti->x, ti->y, z, bounds, IsTransparencySet(TO_TREES));
|
||||
|
||||
/* replace the removed one with the last one */
|
||||
te[mi] = te[trees - 1];
|
||||
|
|
|
@ -102,7 +102,7 @@ class BuildTreesWindow : public Window
|
|||
|
||||
if (this->tree_to_plant >= 0) {
|
||||
/* Activate placement */
|
||||
if (_settings_client.sound.confirm) SndPlayFx(SND_15_BEEP);
|
||||
SndConfirmBeep();
|
||||
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
|
||||
} else {
|
||||
|
@ -180,7 +180,7 @@ public:
|
|||
break;
|
||||
|
||||
case WID_BT_MANY_RANDOM: // place trees randomly over the landscape
|
||||
if (_settings_client.sound.confirm) SndPlayFx(SND_15_BEEP);
|
||||
SndConfirmBeep();
|
||||
PlaceTreesRandomly();
|
||||
MarkWholeScreenDirty();
|
||||
break;
|
||||
|
|
|
@ -138,15 +138,58 @@ bool HasBridgeFlatRamp(Slope tileh, Axis axis)
|
|||
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)
|
||||
{
|
||||
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];
|
||||
assert(piece < NUM_BRIDGE_PIECES);
|
||||
|
||||
return _bridge_sprite_table[index][table];
|
||||
const BridgeSpec *bridge = GetBridgeSpec(bridge_type);
|
||||
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.
|
||||
|
@ -1017,10 +1060,10 @@ static CommandCost ClearTile_TunnelBridge(TileIndex tile, DoCommandFlags flags)
|
|||
* @param h Bounding box size in Y direction
|
||||
* @param subsprite Optional subsprite for drawing halfpillars
|
||||
*/
|
||||
static inline void DrawPillar(const PalSpriteID *psid, int x, int y, int z, int w, int h, const SubSprite *subsprite)
|
||||
static inline void DrawPillar(const PalSpriteID &psid, int x, int y, int z, uint8_t w, uint8_t h, const SubSprite *subsprite)
|
||||
{
|
||||
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, w, h, BB_HEIGHT_UNDER_BRIDGE - PILLAR_Z_OFFSET, z, IsTransparencySet(TO_BRIDGES), 0, 0, -PILLAR_Z_OFFSET, subsprite);
|
||||
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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1034,7 +1077,7 @@ static inline void DrawPillar(const PalSpriteID *psid, int x, int y, int z, int
|
|||
* @param h Bounding box size in Y direction
|
||||
* @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;
|
||||
for (cur_z = z_top; cur_z >= z_bottom; cur_z -= TILE_HEIGHT) {
|
||||
|
@ -1054,7 +1097,7 @@ static int DrawPillarColumn(int z_bottom, int z_top, const PalSpriteID *psid, in
|
|||
* @param y Sprite Y position of front pillar.
|
||||
* @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 back_pillar_offset[2] = { 0, 9}; ///< sprite position offset of back facing pillar
|
||||
|
@ -1065,7 +1108,7 @@ static void DrawBridgePillars(const PalSpriteID *psid, const TileInfo *ti, Axis
|
|||
{ { -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 */
|
||||
DiagDirection south_dir = AxisToDiagDir(axis);
|
||||
|
@ -1194,18 +1237,20 @@ static void DrawBridgeRoadBits(TileIndex head_tile, int x, int y, int z, int off
|
|||
}
|
||||
}
|
||||
|
||||
static const uint size_x[6] = { 1, 16, 16, 1, 16, 1 };
|
||||
static const uint size_y[6] = { 16, 1, 1, 16, 1, 16 };
|
||||
static const uint front_bb_offset_x[6] = { 15, 0, 0, 15, 0, 15 };
|
||||
static const uint front_bb_offset_y[6] = { 0, 15, 15, 0, 15, 0 };
|
||||
static constexpr SpriteBounds back_bounds[6] = {
|
||||
{{}, {0, TILE_SIZE, 40}, {}},
|
||||
{{}, {TILE_SIZE, 0, 40}, {}},
|
||||
{{}, {TILE_SIZE, 0, 40}, {}},
|
||||
{{}, {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 bounding boxes here are the same as for bridge front/roof */
|
||||
for (uint i = 0; i < lengthof(seq_back); ++i) {
|
||||
if (seq_back[i] != 0) {
|
||||
AddSortableSpriteToDraw(seq_back[i], PAL_NONE,
|
||||
x, y, size_x[offset], size_y[offset], 0x28, z,
|
||||
trans_back[i]);
|
||||
AddSortableSpriteToDraw(seq_back[i], PAL_NONE, x, y, z, back_bounds[offset], trans_back[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1213,12 +1258,18 @@ static void DrawBridgeRoadBits(TileIndex head_tile, int x, int y, int z, int off
|
|||
EndSpriteCombine();
|
||||
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) {
|
||||
if (seq_front[i] != 0) {
|
||||
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]);
|
||||
AddSortableSpriteToDraw(seq_front[i], PAL_NONE, x, y, z, front_bounds[offset], trans_front[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1251,15 +1302,35 @@ static void DrawTile_TunnelBridge(TileInfo *ti)
|
|||
*
|
||||
*/
|
||||
|
||||
static const int _tunnel_BB[4][12] = {
|
||||
/* tunnnel-roof | Z-separator | tram-catenary
|
||||
* w h bb_x bb_y| x y w h |bb_x bb_y w h */
|
||||
{ 1, 0, -15, -14, 0, 15, 16, 1, 0, 1, 16, 15 }, // NE
|
||||
{ 0, 1, -14, -15, 15, 0, 1, 16, 1, 0, 15, 16 }, // SE
|
||||
{ 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
|
||||
/* Tunnel sprites are positioned at 15,15, but the bounding box covers most of the tile. */
|
||||
static constexpr SpriteBounds roof_bounds[DIAGDIR_END] = {
|
||||
{{0, 1, BB_Z_SEPARATOR}, {TILE_SIZE, TILE_SIZE - 1, 1}, {TILE_SIZE - 1, TILE_SIZE - 2, -BB_Z_SEPARATOR}}, // NE
|
||||
{{1, 0, BB_Z_SEPARATOR}, {TILE_SIZE - 1, TILE_SIZE, 1}, {TILE_SIZE - 2, TILE_SIZE - 1, -BB_Z_SEPARATOR}}, // SE
|
||||
{{0, 1, BB_Z_SEPARATOR}, {TILE_SIZE, TILE_SIZE - 1, 1}, {TILE_SIZE - 1, TILE_SIZE - 2, -BB_Z_SEPARATOR}}, // SW
|
||||
{{1, 0, BB_Z_SEPARATOR}, {TILE_SIZE - 1, TILE_SIZE, 1}, {TILE_SIZE - 2, TILE_SIZE - 1, -BB_Z_SEPARATOR}}, // 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;
|
||||
|
||||
|
@ -1332,7 +1403,7 @@ static void DrawTile_TunnelBridge(TileInfo *ti)
|
|||
if (catenary_sprite_base != 0) {
|
||||
catenary = true;
|
||||
StartSpriteCombine();
|
||||
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);
|
||||
AddSortableSpriteToDraw(catenary_sprite_base + tunnelbridge_direction, PAL_NONE, *ti, catenary_bounds[tunnelbridge_direction], IsTransparencySet(TO_CATENARY));
|
||||
}
|
||||
} else {
|
||||
const RailTypeInfo *rti = GetRailTypeInfo(GetRailType(ti->tile));
|
||||
|
@ -1364,46 +1435,32 @@ static void DrawTile_TunnelBridge(TileInfo *ti)
|
|||
|
||||
if (railtype_overlay != 0 && !catenary) StartSpriteCombine();
|
||||
|
||||
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);
|
||||
AddSortableSpriteToDraw(image + 1, PAL_NONE, *ti, roof_bounds[tunnelbridge_direction], false);
|
||||
/* Draw railtype tunnel portal overlay if defined. */
|
||||
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 (railtype_overlay != 0) AddSortableSpriteToDraw(railtype_overlay + tunnelbridge_direction, PAL_NONE, *ti, roof_bounds[tunnelbridge_direction], false);
|
||||
|
||||
if (catenary || railtype_overlay != 0) EndSpriteCombine();
|
||||
|
||||
/* Add helper BB for sprite sorting that separates the tunnel from things beside of it. */
|
||||
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->x + BB_data[4], ti->y + BB_data[5], BB_data[6], BB_data[7], TILE_HEIGHT, ti->z);
|
||||
AddSortableSpriteToDraw(SPR_EMPTY_BOUNDING_BOX, PAL_NONE, *ti, rear_sep[tunnelbridge_direction]);
|
||||
AddSortableSpriteToDraw(SPR_EMPTY_BOUNDING_BOX, PAL_NONE, *ti, front_sep[tunnelbridge_direction]);
|
||||
|
||||
DrawBridgeMiddle(ti);
|
||||
} 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)));
|
||||
|
||||
/* HACK Wizardry to convert the bridge ramp direction into a sprite offset */
|
||||
base_offset += (6 - tunnelbridge_direction) % 4;
|
||||
|
||||
/* Table number BRIDGE_PIECE_HEAD always refers to the bridge heads for any bridge type */
|
||||
uint base_offset = GetBridgeRampDirectionBaseOffset(tunnelbridge_direction);
|
||||
std::span<const PalSpriteID> psid;
|
||||
if (transport_type != TRANSPORT_WATER) {
|
||||
if (ti->tileh == SLOPE_FLAT) base_offset += 4; // sloped bridge head
|
||||
psid = &GetBridgeSpriteTable(GetBridgeType(ti->tile), BRIDGE_PIECE_HEAD)[base_offset];
|
||||
base_offset += GetBridgeSpriteTableBaseOffset(transport_type, ti->tile);
|
||||
psid = GetBridgeSpriteTable(GetBridgeType(ti->tile), BRIDGE_PIECE_HEAD);
|
||||
} else {
|
||||
psid = _aqueduct_sprites + base_offset;
|
||||
psid = _aqueduct_sprite_table_heads;
|
||||
}
|
||||
psid = psid.subspan(base_offset, 1);
|
||||
|
||||
if (!ice) {
|
||||
if (!HasTunnelBridgeSnowOrDesert(ti->tile)) {
|
||||
TileIndex next = ti->tile + TileOffsByDiagDir(tunnelbridge_direction);
|
||||
if (ti->tileh != SLOPE_FLAT && ti->z == 0 && HasTileWaterClass(next) && GetWaterClass(next) == WATER_CLASS_SEA) {
|
||||
DrawShoreTile(ti->tileh);
|
||||
|
@ -1423,7 +1480,7 @@ static void DrawTile_TunnelBridge(TileInfo *ti)
|
|||
* it doesn't disappear behind it
|
||||
*/
|
||||
/* Bridge heads are drawn solid no matter how invisibility/transparency is set */
|
||||
AddSortableSpriteToDraw(psid->sprite, psid->pal, ti->x, ti->y, 16, 16, ti->tileh == SLOPE_FLAT ? 0 : 8, ti->z);
|
||||
AddSortableSpriteToDraw(psid[0].sprite, psid[0].pal, *ti, {{}, {TILE_SIZE, TILE_SIZE, static_cast<uint8_t>(ti->tileh == SLOPE_FLAT ? 0 : TILE_HEIGHT)}, {}});
|
||||
|
||||
if (transport_type == TRANSPORT_ROAD) {
|
||||
uint offset = tunnelbridge_direction;
|
||||
|
@ -1445,9 +1502,9 @@ static void DrawTile_TunnelBridge(TileInfo *ti)
|
|||
SpriteID surface = GetCustomRailSprite(rti, ti->tile, RTSG_BRIDGE);
|
||||
if (surface != 0) {
|
||||
if (HasBridgeFlatRamp(ti->tileh, DiagDirToAxis(tunnelbridge_direction))) {
|
||||
AddSortableSpriteToDraw(surface + ((DiagDirToAxis(tunnelbridge_direction) == AXIS_X) ? RTBO_X : RTBO_Y), PAL_NONE, ti->x, ti->y, 16, 16, 0, ti->z + 8);
|
||||
AddSortableSpriteToDraw(surface + ((DiagDirToAxis(tunnelbridge_direction) == AXIS_X) ? RTBO_X : RTBO_Y), PAL_NONE, *ti, {{0, 0, TILE_HEIGHT}, {TILE_SIZE, TILE_SIZE, 0}, {}});
|
||||
} else {
|
||||
AddSortableSpriteToDraw(surface + RTBO_SLOPE + tunnelbridge_direction, PAL_NONE, ti->x, ti->y, 16, 16, 8, ti->z);
|
||||
AddSortableSpriteToDraw(surface + RTBO_SLOPE + tunnelbridge_direction, PAL_NONE, *ti, {{}, {TILE_SIZE, TILE_SIZE, TILE_HEIGHT}, {}});
|
||||
}
|
||||
}
|
||||
/* Don't fallback to non-overlay sprite -- the spec states that
|
||||
|
@ -1460,15 +1517,15 @@ static void DrawTile_TunnelBridge(TileInfo *ti)
|
|||
if (rti->UsesOverlay()) {
|
||||
SpriteID overlay = GetCustomRailSprite(rti, ti->tile, RTSG_OVERLAY);
|
||||
if (HasBridgeFlatRamp(ti->tileh, DiagDirToAxis(tunnelbridge_direction))) {
|
||||
AddSortableSpriteToDraw(overlay + RTO_X + DiagDirToAxis(tunnelbridge_direction), PALETTE_CRASH, ti->x, ti->y, 16, 16, 0, ti->z + 8);
|
||||
AddSortableSpriteToDraw(overlay + RTO_X + DiagDirToAxis(tunnelbridge_direction), PALETTE_CRASH, *ti, {{0, 0, TILE_HEIGHT}, {TILE_SIZE, TILE_SIZE, 0}, {}});
|
||||
} else {
|
||||
AddSortableSpriteToDraw(overlay + RTO_SLOPE_NE + tunnelbridge_direction, PALETTE_CRASH, ti->x, ti->y, 16, 16, 8, ti->z);
|
||||
AddSortableSpriteToDraw(overlay + RTO_SLOPE_NE + tunnelbridge_direction, PALETTE_CRASH, *ti, {{}, {TILE_SIZE, TILE_SIZE, TILE_HEIGHT}, {}});
|
||||
}
|
||||
} else {
|
||||
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->x, ti->y, 16, 16, 0, ti->z + 8);
|
||||
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}, {}});
|
||||
} else {
|
||||
AddSortableSpriteToDraw(rti->base_sprites.single_sloped + tunnelbridge_direction, PALETTE_CRASH, ti->x, ti->y, 16, 16, 8, ti->z);
|
||||
AddSortableSpriteToDraw(rti->base_sprites.single_sloped + tunnelbridge_direction, PALETTE_CRASH, *ti, {{}, {TILE_SIZE, TILE_SIZE, TILE_HEIGHT}, {}});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1544,33 +1601,21 @@ void DrawBridgeMiddle(const TileInfo *ti)
|
|||
TileIndex rampnorth = GetNorthernBridgeEnd(ti->tile);
|
||||
TileIndex rampsouth = GetSouthernBridgeEnd(ti->tile);
|
||||
TransportType transport_type = GetTunnelBridgeTransportType(rampsouth);
|
||||
|
||||
Axis axis = GetBridgeAxis(ti->tile);
|
||||
BridgePieces piece = CalcBridgePiece(
|
||||
GetTunnelBridgeLength(ti->tile, rampnorth) + 1,
|
||||
GetTunnelBridgeLength(ti->tile, rampsouth) + 1
|
||||
);
|
||||
|
||||
const PalSpriteID *psid;
|
||||
uint base_offset = GetBridgeMiddleAxisBaseOffset(axis);
|
||||
std::span<const PalSpriteID> psid;
|
||||
bool drawfarpillar;
|
||||
if (transport_type != TRANSPORT_WATER) {
|
||||
BridgeType type = GetBridgeType(rampsouth);
|
||||
drawfarpillar = !HasBit(GetBridgeSpec(type)->flags, 0);
|
||||
|
||||
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];
|
||||
BridgeType bridge_type = GetBridgeType(rampsouth);
|
||||
drawfarpillar = !HasBit(GetBridgeSpec(bridge_type)->flags, 0);
|
||||
base_offset += GetBridgeSpriteTableBaseOffset(transport_type, rampsouth);
|
||||
psid = GetBridgeSpriteTable(bridge_type, CalcBridgePiece(GetTunnelBridgeLength(ti->tile, rampnorth) + 1, GetTunnelBridgeLength(ti->tile, rampsouth) + 1));
|
||||
} else {
|
||||
drawfarpillar = true;
|
||||
psid = _aqueduct_sprites;
|
||||
psid = _aqueduct_sprite_table_middle;
|
||||
}
|
||||
|
||||
if (axis != AXIS_X) psid += 4;
|
||||
psid = psid.subspan(base_offset, 3);
|
||||
|
||||
int x = ti->x;
|
||||
int y = ti->y;
|
||||
|
@ -1578,7 +1623,7 @@ void DrawBridgeMiddle(const TileInfo *ti)
|
|||
int z = bridge_z - BRIDGE_Z_START;
|
||||
|
||||
/* Add a bounding box that separates the bridge from things below it. */
|
||||
AddSortableSpriteToDraw(SPR_EMPTY_BOUNDING_BOX, PAL_NONE, x, y, 16, 16, 1, bridge_z - TILE_HEIGHT + BB_Z_SEPARATOR);
|
||||
AddSortableSpriteToDraw(SPR_EMPTY_BOUNDING_BOX, PAL_NONE, x, y, bridge_z - TILE_HEIGHT + BB_Z_SEPARATOR, {{}, {TILE_SIZE, TILE_SIZE, 1}, {}});
|
||||
|
||||
/* Draw Trambits as SpriteCombine */
|
||||
if (transport_type == TRANSPORT_ROAD || transport_type == TRANSPORT_RAIL) StartSpriteCombine();
|
||||
|
@ -1586,14 +1631,12 @@ void DrawBridgeMiddle(const TileInfo *ti)
|
|||
/* Draw floor and far part of bridge*/
|
||||
if (!IsInvisibilitySet(TO_BRIDGES)) {
|
||||
if (axis == AXIS_X) {
|
||||
AddSortableSpriteToDraw(psid->sprite, psid->pal, x, y, 16, 1, 0x28, z, IsTransparencySet(TO_BRIDGES), 0, 0, BRIDGE_Z_START);
|
||||
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));
|
||||
} else {
|
||||
AddSortableSpriteToDraw(psid->sprite, psid->pal, x, y, 1, 16, 0x28, z, IsTransparencySet(TO_BRIDGES), 0, 0, BRIDGE_Z_START);
|
||||
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));
|
||||
}
|
||||
}
|
||||
|
||||
psid++;
|
||||
|
||||
if (transport_type == TRANSPORT_ROAD) {
|
||||
/* DrawBridgeRoadBits() calls EndSpriteCombine() and StartSpriteCombine() */
|
||||
DrawBridgeRoadBits(rampsouth, x, y, bridge_z, axis ^ 1, false);
|
||||
|
@ -1602,16 +1645,16 @@ void DrawBridgeMiddle(const TileInfo *ti)
|
|||
if (rti->UsesOverlay() && !IsInvisibilitySet(TO_BRIDGES)) {
|
||||
SpriteID surface = GetCustomRailSprite(rti, rampsouth, RTSG_BRIDGE, TCX_ON_BRIDGE);
|
||||
if (surface != 0) {
|
||||
AddSortableSpriteToDraw(surface + axis, PAL_NONE, x, y, 16, 16, 0, bridge_z, IsTransparencySet(TO_BRIDGES));
|
||||
AddSortableSpriteToDraw(surface + axis, PAL_NONE, x, y, bridge_z, {{}, {TILE_SIZE, TILE_SIZE, 0}, {}}, IsTransparencySet(TO_BRIDGES));
|
||||
}
|
||||
}
|
||||
|
||||
if (_game_mode != GM_MENU && _settings_client.gui.show_track_reservation && !IsInvisibilitySet(TO_BRIDGES) && HasTunnelBridgeReservation(rampnorth)) {
|
||||
if (rti->UsesOverlay()) {
|
||||
SpriteID overlay = GetCustomRailSprite(rti, ti->tile, RTSG_OVERLAY);
|
||||
AddSortableSpriteToDraw(overlay + RTO_X + axis, PALETTE_CRASH, ti->x, ti->y, 16, 16, 0, bridge_z, IsTransparencySet(TO_BRIDGES));
|
||||
AddSortableSpriteToDraw(overlay + RTO_X + axis, PALETTE_CRASH, ti->x, ti->y, bridge_z, {{}, {TILE_SIZE, TILE_SIZE, 0}, {}}, IsTransparencySet(TO_BRIDGES));
|
||||
} else {
|
||||
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));
|
||||
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));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1626,10 +1669,10 @@ void DrawBridgeMiddle(const TileInfo *ti)
|
|||
if (!IsInvisibilitySet(TO_BRIDGES)) {
|
||||
if (axis == AXIS_X) {
|
||||
y += 12;
|
||||
if (psid->sprite & SPRITE_MASK) AddSortableSpriteToDraw(psid->sprite, psid->pal, x, y, 16, 4, 0x28, z, IsTransparencySet(TO_BRIDGES), 0, 3, BRIDGE_Z_START);
|
||||
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));
|
||||
} else {
|
||||
x += 12;
|
||||
if (psid->sprite & SPRITE_MASK) AddSortableSpriteToDraw(psid->sprite, psid->pal, x, y, 4, 16, 0x28, z, IsTransparencySet(TO_BRIDGES), 3, 0, BRIDGE_Z_START);
|
||||
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));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1639,8 +1682,7 @@ void DrawBridgeMiddle(const TileInfo *ti)
|
|||
/* Do not draw anything more if bridges are invisible */
|
||||
if (IsInvisibilitySet(TO_BRIDGES)) return;
|
||||
|
||||
psid++;
|
||||
DrawBridgePillars(psid, ti, axis, drawfarpillar, x, y, z);
|
||||
DrawBridgePillars(psid[2], ti, axis, drawfarpillar, x, y, z);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1109,8 +1109,7 @@ static void DoDrawVehicle(const Vehicle *v)
|
|||
for (uint i = 0; i < v->sprite_cache.sprite_seq.count; ++i) {
|
||||
PaletteID pal2 = v->sprite_cache.sprite_seq.seq[i].pal;
|
||||
if (!pal2 || v->vehstatus.Test(VehState::Crashed)) pal2 = pal;
|
||||
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);
|
||||
AddSortableSpriteToDraw(v->sprite_cache.sprite_seq.seq[i].sprite, pal2, v->x_pos, v->y_pos, v->z_pos, v->bounds, shadowed);
|
||||
}
|
||||
EndSpriteCombine();
|
||||
}
|
||||
|
@ -1674,12 +1673,24 @@ void Vehicle::UpdateBoundingBoxCoordinates(bool update_cache) const
|
|||
Rect new_coord;
|
||||
this->sprite_cache.sprite_seq.GetBounds(&new_coord);
|
||||
|
||||
Point pt = RemapCoords(this->x_pos + this->x_offs, this->y_pos + this->y_offs, this->z_pos);
|
||||
/* z-bounds are not used. */
|
||||
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.top += pt.y;
|
||||
new_coord.right += pt.x + 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 the old coordinates are invalid, set the cache to the new coordinates for correct
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
#ifndef VEHICLE_BASE_H
|
||||
#define VEHICLE_BASE_H
|
||||
|
||||
#include "sprite.h"
|
||||
#include "track_type.h"
|
||||
#include "command_type.h"
|
||||
#include "order_base.h"
|
||||
|
@ -293,13 +294,7 @@ public:
|
|||
* 0xff == reserved for another custom sprite
|
||||
*/
|
||||
uint8_t spritenum = 0;
|
||||
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
|
||||
SpriteBounds bounds{}; ///< Bounding box of 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
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue