Merge branch 'master' into jgrpp

# Conflicts:
#	src/gfx.cpp
#	src/lang/traditional_chinese.txt
#	src/station_cmd.cpp
pull/353/head
Jonathan G Rennison 2 years ago
commit 2f8e63e954

@ -71,7 +71,7 @@ that comes with vcpkg. After that, you can run something similar to this:
```powershell
mkdir build
cd build
cmake.exe .. -G'Visual Studio 16 2019' -DCMAKE_TOOLCHAIN_FILE="<location of vcpkg>\vcpkg\scripts\buildsystems\vcpkg.cmake" -DVCPKG_TARGET_TRIPLET="x64-windows-static"
cmake.exe .. -G"Visual Studio 16 2019" -DCMAKE_TOOLCHAIN_FILE="<location of vcpkg>\vcpkg\scripts\buildsystems\vcpkg.cmake" -DVCPKG_TARGET_TRIPLET="x64-windows-static"
```
Change `<location of vcpkg>` to where you have installed vcpkg. After this

@ -429,9 +429,9 @@ For some platforms, you will need to refer to [the installation guide](https://w
The free data files, split into OpenGFX for graphics, OpenSFX for sounds and
OpenMSX for music can be found at:
- https://www.openttd.org/downloads/opengfx-releases/ for OpenGFX
- https://www.openttd.org/downloads/opensfx-releases/ for OpenSFX
- https://www.openttd.org/downloads/openmsx-releases/ for OpenMSX
- https://www.openttd.org/downloads/opengfx-releases/latest for OpenGFX
- https://www.openttd.org/downloads/opensfx-releases/latest for OpenSFX
- https://www.openttd.org/downloads/openmsx-releases/latest for OpenMSX
Please follow the readme of these packages about the installation procedure.
The Windows installer can optionally download and install these packages.

@ -45,6 +45,11 @@ macro(compile_flags)
add_link_options(
"$<$<NOT:$<CONFIG:Debug>>:-fstack-protector>" # Prevent undefined references when _FORTIFY_SOURCE > 0
)
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
add_link_options(
"$<$<CONFIG:Debug>:-Wl,--disable-dynamicbase,--disable-high-entropy-va,--default-image-base-low>" # ASLR somehow breaks linking for x64 Debug builds
)
endif()
endif()
# Prepare a generator that checks if we are not a debug, and don't have asserts

@ -24,6 +24,7 @@
#include "window_gui.h"
#include "framerate_type.h"
#include "transparency.h"
#include "core/backup_type.hpp"
#include "table/palettes.h"
#include "table/string_colours.h"
@ -1215,39 +1216,58 @@ static void GfxBlitter(const Sprite * const sprite, int x, int y, BlitterMode mo
* Draws a sprite to a new RGBA buffer (see Colour union) instead of drawing to the screen.
*
* @param spriteId The sprite to draw.
* @param zoom The zoom level at which to draw the sprites.
* @return Pixel buffer, or nullptr if an 8bpp blitter is being used.
*/
std::unique_ptr<uint32[]> DrawSpriteToRgbaBuffer(SpriteID spriteId)
std::unique_ptr<uint32[]> DrawSpriteToRgbaBuffer(SpriteID spriteId, ZoomLevel zoom)
{
/* Invalid zoom level requested? */
if (zoom < _settings_client.gui.zoom_min || zoom > _settings_client.gui.zoom_max) return nullptr;
Blitter *blitter = BlitterFactory::GetCurrentBlitter();
if (!blitter->Is32BppSupported()) return nullptr;
if (blitter->GetScreenDepth() != 8 && blitter->GetScreenDepth() != 32) return nullptr;
/* Gather information about the sprite to write, reserve memory */
const SpriteID real_sprite = GB(spriteId, 0, SPRITE_WIDTH);
const Sprite *sprite = GetSprite(real_sprite, ST_NORMAL);
std::unique_ptr<uint32[]> result(new uint32[sprite->width * sprite->height]);
Dimension dim = GetSpriteSize(real_sprite, nullptr, zoom);
std::unique_ptr<uint32[]> result(new uint32[dim.width * dim.height]);
/* Set buffer to fully transparent. */
MemSetT(result.get(), 0, dim.width * dim.height);
/* Prepare new DrawPixelInfo - Normally this would be the screen but we want to draw to another buffer here.
* Normally, pitch would be scaled screen width, but in our case our "screen" is only the sprite width wide. */
DrawPixelInfo dpi;
dpi.dst_ptr = result.get();
dpi.pitch = sprite->width;
dpi.pitch = dim.width;
dpi.left = 0;
dpi.top = 0;
dpi.width = sprite->width;
dpi.height = sprite->height;
dpi.zoom = ZOOM_LVL_NORMAL;
dpi.width = dim.width;
dpi.height = dim.height;
dpi.zoom = zoom;
/* If the current blitter is a paletted blitter, we have to render to an extra buffer and resolve the palette later. */
std::unique_ptr<byte[]> pal_buffer{};
if (blitter->GetScreenDepth() == 8) {
pal_buffer.reset(new byte[dim.width * dim.height]);
MemSetT(pal_buffer.get(), 0, dim.width * dim.height);
/* Zero out the allocated memory, there may be garbage present. */
uint32 *writeHead = (uint32*)result.get();
for (int i = 0; i < sprite->width * sprite->height; i++) {
writeHead[i] = 0;
dpi.dst_ptr = pal_buffer.get();
}
/* Temporarily disable screen animations while blitting - This prevents 40bpp_anim from writing to the animation buffer. */
_screen_disable_anim = true;
GfxBlitter<1, false>(sprite, 0, 0, BM_NORMAL, nullptr, real_sprite, ZOOM_LVL_NORMAL, &dpi);
_screen_disable_anim = false;
Backup<bool> disable_anim(_screen_disable_anim, true, FILE_LINE);
GfxBlitter<1, true>(sprite, 0, 0, BM_NORMAL, nullptr, real_sprite, zoom, &dpi);
disable_anim.Restore();
if (blitter->GetScreenDepth() == 8) {
/* Resolve palette. */
uint32 *dst = result.get();
const byte *src = pal_buffer.get();
for (size_t i = 0; i < dim.height * dim.width; ++i) {
*dst++ = _cur_palette.palette[*src++].data;
}
}
return result;
}

@ -92,7 +92,7 @@ void RedrawScreenRect(int left, int top, int right, int bottom);
Dimension GetSpriteSize(SpriteID sprid, Point *offset = nullptr, ZoomLevel zoom = ZOOM_LVL_GUI);
void DrawSpriteViewport(SpriteID img, PaletteID pal, int x, int y, const SubSprite *sub = nullptr);
void DrawSprite(SpriteID img, PaletteID pal, int x, int y, const SubSprite *sub = nullptr, ZoomLevel zoom = ZOOM_LVL_GUI);
std::unique_ptr<uint32[]> DrawSpriteToRgbaBuffer(SpriteID spriteId);
std::unique_ptr<uint32[]> DrawSpriteToRgbaBuffer(SpriteID spriteId, ZoomLevel zoom = ZOOM_LVL_GUI);
int DrawString(int left, int right, int top, const char *str, TextColour colour = TC_FROMSTRING, StringAlignment align = SA_LEFT, bool underline = false, FontSize fontsize = FS_NORMAL);
int DrawString(int left, int right, int top, const std::string &str, TextColour colour = TC_FROMSTRING, StringAlignment align = SA_LEFT, bool underline = false, FontSize fontsize = FS_NORMAL);

@ -1750,6 +1750,8 @@ STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER_HELPTEXT :Exibe um jornal
STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS :Acidentes / desastres: {STRING}
STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS_HELPTEXT :Exibir jornal quando acidentes ou desastres acontecem
STR_CONFIG_SETTING_NEWS_ACCIDENT_OTHER :Acidentes de veículos dos competidores: {STRING}
STR_CONFIG_SETTING_NEWS_ACCIDENT_OTHER_HELPTEXT :Mostrar um jornal sobre os acidentes de veículos dos competidores
STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION :Informações da empresa: {STRING}
STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION_HELPTEXT :Exibe um jornal quando uma companhia é aberta, ou quando estão próximas da bancarrota

@ -1996,6 +1996,7 @@ STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER_HELPTEXT :Zobrazovat novi
STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS :Nehody a katastrofy: {STRING}
STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS_HELPTEXT :Zobrazovat noviny o nehodách a katastrofách
STR_CONFIG_SETTING_NEWS_ACCIDENT_OTHER :Nehody konkurenčních vozidel: {STRING}
STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION :Informace o společnosti: {STRING}
STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION_HELPTEXT :Zobrazovat noviny když společnost začne nebo hrozí krach
@ -2617,6 +2618,7 @@ STR_NETWORK_SERVER_LIST_LANDSCAPE :{SILVER}Prostř
STR_NETWORK_SERVER_LIST_MAP_SIZE :{SILVER}Velikost mapy: {WHITE}{COMMA}x{COMMA}
STR_NETWORK_SERVER_LIST_SERVER_VERSION :{SILVER}Verze hry na serveru: {WHITE}{STRING}
STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}Adresa serveru: {WHITE}{STRING}
STR_NETWORK_SERVER_LIST_INVITE_CODE :{SILVER}Zvací kód: {WHITE}{STRING}
STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}Počáteční datum: {WHITE}{DATE_SHORT}
STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}Současné datum: {WHITE}{DATE_SHORT}
STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}Herní skript: {WHITE}{STRING} (v{NUM})
@ -2642,7 +2644,7 @@ STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Spustit
STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP :{BLACK}Spustit vlastní server
STR_NETWORK_SERVER_LIST_PLAYER_NAME_OSKTITLE :{BLACK}Zadej své jméno
STR_NETWORK_SERVER_LIST_ENTER_SERVER_ADDRESS :{BLACK}Zadej adresu serveru nebo kód pozvánky
STR_NETWORK_SERVER_LIST_ENTER_SERVER_ADDRESS :{BLACK}Zadej adresu serveru nebo zvací kód
# Start new multiplayer server
STR_NETWORK_START_SERVER_CAPTION :{WHITE}Začít novou hru
@ -2698,8 +2700,8 @@ STR_NETWORK_CLIENT_LIST_SERVER_NAME_EDIT_TOOLTIP :{BLACK}Upravte
STR_NETWORK_CLIENT_LIST_SERVER_NAME_QUERY_CAPTION :Název serveru
STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY :{BLACK}Viditelnost
STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY_TOOLTIP :{BLACK}Zda mohou ostatní hráči vidět váš server ve veřejném seznamu
STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE :{BLACK}Pozvánkový kód
STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE_TOOLTIP :{BLACK}Kód pozvánky, který mohou ostatní hráči použít k připojení k tomuto serveru.
STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE :{BLACK}Zvací kód
STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE_TOOLTIP :{BLACK}Zvací kód, který mohou ostatní hráči použít k připojení k tomuto serveru.
STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE :{BLACK}Typ spojení
STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TOOLTIP :{BLACK}Jestli a jak může být tvůj server dostupný pro ostatní
STR_NETWORK_CLIENT_LIST_PLAYER :{BLACK}Hráč
@ -3037,6 +3039,7 @@ STR_STATION_CLASS_WAYP :Směrování
# Signal window
STR_BUILD_SIGNAL_CAPTION :{WHITE}Výběr návěstidel
STR_BUILD_SIGNAL_TOGGLE_ADVANCED_SIGNAL_TOOLTIP :{BLACK}Zobrazit dokonalejší návěstidla
STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Obyčejné návěstidlo (semafor){}Návěstidla jsou nutná, aby nedocházelo ke srážkám vlaků na tratích, kde jezdí více než jeden vlak
STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Vjezdové návěstidlo (semafor){}Svítí zeleně do té doby, kdy v následujícím úseku trati je alespoň jedno další svítící zeleně. Jinak svítí červeně
STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Výjezdové návěstidlo (semafor){}Chová se stejně jako obyčejné, ale je nezbytné nastavit správnou barvu vjezdových a kombinovaných pre-signálů

@ -850,7 +850,7 @@ STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLAC
STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Nova {STRING} asentada preto de {TOWN}!
STR_NEWS_INDUSTRY_CLOSURE_GENERAL :{BIG_FONT}{BLACK}{STRING} anuncia o seu peche inminente!
STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS :{BIG_FONT}{BLACK}Problemas de subministración en {STRING} provocan que anuncie o seu peche inminente!
STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS :{BIG_FONT}{BLACK}Problemas de abastecemento en {STRING} provocan que anuncie o seu peche inminente!
STR_NEWS_INDUSTRY_CLOSURE_LACK_OF_TREES :{BIG_FONT}{BLACK}A falta de árbores cercanos provoca que {STRING} anuncie o peche inminente!
STR_NEWS_EURO_INTRODUCTION :{BIG_FONT}{BLACK}Unión Económica e Monetaria Europea!{}{}O Euro introdúcese como a única moeda para as transaccións diarias no teu país!
@ -2622,7 +2622,7 @@ STR_STATION_BUILD_COVERAGE_ON :{BLACK}On
STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP :{BLACK}Non resalta-la área de cobertura do sitio proposto
STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP :{BLACK}Resalta-la área de cobertura do sitio proposto
STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}Acepta: {GOLD}{CARGO_LIST}
STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Suministros: {GOLD}{CARGO_LIST}
STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Abastecementos: {GOLD}{CARGO_LIST}
# Join station window
STR_JOIN_STATION_CAPTION :{WHITE}Unir estación
@ -3559,7 +3559,7 @@ STR_STATION_VIEW_EXCLUSIVE_RIGHTS_COMPANY :{YELLOW}{COMPAN
STR_STATION_VIEW_RATINGS_BUTTON :{BLACK}Puntuacións:
STR_STATION_VIEW_RATINGS_TOOLTIP :{BLACK}Mostra-las puntuacións da estación
STR_STATION_VIEW_SUPPLY_RATINGS_TITLE :{BLACK}Suministro mensual e puntuación local:
STR_STATION_VIEW_SUPPLY_RATINGS_TITLE :{BLACK}Abastecemento mensual e puntuación local:
STR_STATION_VIEW_CARGO_SUPPLY_RATING :{WHITE}{STRING}: {YELLOW}{COMMA} / {STRING} ({COMMA}%)
STR_STATION_VIEW_GROUP :{BLACK}Agrupar por
@ -5116,7 +5116,7 @@ STR_INDUSTRY_NAME_DIAMOND_MINE :Mina de diamant
STR_INDUSTRY_NAME_IRON_ORE_MINE :Mina de ferro
STR_INDUSTRY_NAME_FRUIT_PLANTATION :Plantación de froita
STR_INDUSTRY_NAME_RUBBER_PLANTATION :Plantación de sobreiras
STR_INDUSTRY_NAME_WATER_SUPPLY :Subministro de auga
STR_INDUSTRY_NAME_WATER_SUPPLY :Abastecemento de auga
STR_INDUSTRY_NAME_WATER_TOWER :Torre de auga
STR_INDUSTRY_NAME_FACTORY_2 :Fábrica
STR_INDUSTRY_NAME_FARM_2 :Granxa

@ -1813,6 +1813,8 @@ STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER_HELPTEXT :Újság megjele
STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS :Balesetek / természeti csapások: {STRING}
STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS_HELPTEXT :Újság megjelenítése balesetek vagy katasztrófák bekövetkezésekor
STR_CONFIG_SETTING_NEWS_ACCIDENT_OTHER :Konkurens vállalatok járműveinek balesetei: {STRING}
STR_CONFIG_SETTING_NEWS_ACCIDENT_OTHER_HELPTEXT :Újság megjelenítése, ha valamelyik konkurens vállalat egy járműve balesetet szenved
STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION :Vállalati információk: {STRING}
STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION_HELPTEXT :Újság megjelenítése amikor egy új cég alapul vagy csődközelbe kerül
@ -2328,6 +2330,7 @@ STR_NETWORK_SERVER_LIST_LANDSCAPE :{SILVER}Tájtí
STR_NETWORK_SERVER_LIST_MAP_SIZE :{SILVER}A térkép nagysága: {WHITE}{COMMA}x{COMMA}
STR_NETWORK_SERVER_LIST_SERVER_VERSION :{SILVER}Szerver verzió: {WHITE}{STRING}
STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}A szerver címe: {WHITE}{STRING}
STR_NETWORK_SERVER_LIST_INVITE_CODE :{SILVER}Meghívókód: {WHITE}{STRING}
STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}Kezdési dátum: {WHITE}{DATE_SHORT}
STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}Jelenlegi dátum: {WHITE}{DATE_SHORT}
STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}Játékszkript: {WHITE}{STRING} (v{NUM})
@ -2743,7 +2746,8 @@ STR_STATION_CLASS_DFLT :Alapértelmezet
STR_STATION_CLASS_WAYP :Ellenőrző pontok
# Signal window
STR_BUILD_SIGNAL_CAPTION :{WHITE}Jelző választó
STR_BUILD_SIGNAL_CAPTION :{WHITE}Jelzőválasztó
STR_BUILD_SIGNAL_TOGGLE_ADVANCED_SIGNAL_TOOLTIP :{BLACK}Mutassa vagy ne mutassa az összes jelzőtípust
STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Normál jelző (alak){}A legegyszerűbb jelzőtípus, az előtte lévő jelzőblokkba egyszerre csak egy vonatot enged tartózkodni
STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Bejárati jelző (alak){}Mindaddig szabad, amíg van legalább egy szabad kijárati jelző az utána következő szakaszon. Egyébként Megálljt jelez
STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Kijárati jelző (alak){}Ugyanúgy viselkedik mint a normál jelző, de megléte elengedhetetlenül szükséges a bejárati- és a kombinált jelzők működéséhez

@ -209,7 +209,7 @@ STR_UNITS_WEIGHT_SHORT_METRIC :{COMMA}t
STR_UNITS_WEIGHT_SHORT_SI :{COMMA}kg
STR_UNITS_WEIGHT_LONG_IMPERIAL :{COMMA}{NBSP}tona
STR_UNITS_WEIGHT_LONG_METRIC :{COMMA}{NBSP}{P "th" "th" "th" "dt" "th"}ona
STR_UNITS_WEIGHT_LONG_METRIC :{COMMA}{NBSP}{P "th" "th" "th" "dt" "t"}ona
STR_UNITS_WEIGHT_LONG_SI :{COMMA}{NBSP}kg
STR_UNITS_VOLUME_SHORT_IMPERIAL :{COMMA}{NBSP}gal
@ -860,7 +860,7 @@ STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL :{BIG_FONT}{BLAC
STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_COAL :{BIG_FONT}{BLACK}Aimsítear síog ghuail nua ag {INDUSTRY}!{}Meastar go dtiocfaidh méadú faoi dhó ar tháirgeadh!
STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_OIL :{BIG_FONT}{BLACK}Aimsítear stoc ola nua ag {INDUSTRY}!{}Meastar go dtiocfaidh méadú faoi dhó ar tháirgeadh!
STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_FARM :{BIG_FONT}{BLACK}Meastar go dtiocfaidh méadú faoi dhó ar tháirgeadh ag {INDUSTRY} mar gheall ar feabhsuithe sna modhanna feirmeoireachta!
STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_SMOOTH :{BIG_FONT}{BLACK}Tagann méadú ar tháirgeadh {STRING} ag {INDUSTRY} de {COMMA}%!
STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_SMOOTH :{BIG_FONT}{BLACK}Tháing méadú {2:COMMA}% ar tháirgeadh '{0:STRING}' ag {1:INDUSTRY}!
STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL :{BIG_FONT}{BLACK}Tagann laghdú 50% ar tháirgeadh ag {INDUSTRY}
STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM :{BIG_FONT}{BLACK}Déantar robach de bharr inmhíolú feithidí ag {INDUSTRY}!{}Lagdhú 50% ar tháirgeadh
STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_SMOOTH :{BIG_FONT}{BLACK}Tagann laghdú ar tháirgeadh {STRING} ag {INDUSTRY} de {COMMA}%!
@ -1036,7 +1036,7 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Roghnaig
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_AUTO :(uath-aimsiú)
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Gnáth
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Méid dúbailte
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Méid cheathrúil
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Méid 4x
STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Méid na clófhoirne
STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Roghnaigh méid na clófhoirne don chomhéadan a úsáidfear
@ -1744,6 +1744,7 @@ STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER_HELPTEXT :Taispeáin nuac
STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS :Timpistí / tubaistí: {STRING}
STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS_HELPTEXT :Taispeáin nuachtán nuair a thiteann timpistí nó tubaistí amach
STR_CONFIG_SETTING_NEWS_ACCIDENT_OTHER :Timpistí de chuid fheithiclí na n-iomaitheoirí: {STRING}
STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION :Faisnéis cuideachta: {STRING}
STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION_HELPTEXT :Taispeáin nuachtán nuair a thosaíonn cuideachta nua, nó nuair atá cuideachta i mbaol féimheachta
@ -2257,6 +2258,7 @@ STR_NETWORK_SERVER_LIST_LANDSCAPE :{SILVER}Tírdhr
STR_NETWORK_SERVER_LIST_MAP_SIZE :{SILVER}Méid na léarscáile: {WHITE}{COMMA}x{COMMA}
STR_NETWORK_SERVER_LIST_SERVER_VERSION :{SILVER}Leagan an fhreastalaí: {WHITE}{STRING}
STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}Seoladh an fhreastalaí: {WHITE}{STRING}
STR_NETWORK_SERVER_LIST_INVITE_CODE :{SILVER}Cód an chuiridh: {WHITE}{STRING}
STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}Dáta tosaigh: {WHITE}{DATE_SHORT}
STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}Dáta reatha: {WHITE}{DATE_SHORT}
STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}Script Cluiche: {WHITE}{STRING} (v{NUM})

@ -334,6 +334,7 @@ STR_GROUP_BY_NONE :Nessuno
STR_GROUP_BY_SHARED_ORDERS :Ordini condivisi
# Order button in shared orders vehicle list
STR_GOTO_ORDER_VIEW :{BLACK}Ordini
# Tooltips for the main toolbar
###length 31
@ -800,6 +801,7 @@ STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * I
STR_STATUSBAR_AUTOSAVE :{RED}SALVATAGGIO AUTOMATICO
STR_STATUSBAR_SAVING_GAME :{RED}* * SALVATAGGIO PARTITA * *
STR_STATUSBAR_SPECTATOR :{WHITE}(spettatore)
# News message history
STR_MESSAGE_HISTORY :{WHITE}Cronologia messaggi
@ -1487,6 +1489,7 @@ STR_CONFIG_SETTING_SNOW_COVERAGE :Aree innevate:
STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}%
STR_CONFIG_SETTING_DESERT_COVERAGE :Aree desertiche: {STRING}
STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Regola la quantità approssimativa di deserto nei paesaggi tropicali. Il deserto influenza anche la generazione di industrie. Usato esclusivamente durante la generazione della mappa
STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}%
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Irregolarità del terreno: {STRING}
@ -1755,6 +1758,7 @@ STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER_HELPTEXT :Mostra un giorn
STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS :Incidenti / disastri: {STRING}
STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS_HELPTEXT :Mostra un giornale quando si verificano incidenti o disastri
STR_CONFIG_SETTING_NEWS_ACCIDENT_OTHER :Incidenti dei veicoli dell'avversario: {STRING}
STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION :Informazioni sulla compagnia: {STRING}
STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION_HELPTEXT :Mostra un giornale quando una compagnia viene lanciata, o quando rischia il fallimento
@ -1838,6 +1842,7 @@ STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Solo segnali a
STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Tutti
###length 2
STR_CONFIG_SETTING_SIGNAL_GUI_MODE_ALL_CYCLE_PATH :Tutti i segnali
STR_CONFIG_SETTING_TOWN_LAYOUT :Disposizione delle strade per le nuove città: {STRING}
STR_CONFIG_SETTING_TOWN_LAYOUT_HELPTEXT :Orgnalizzazione della rete stradale delle città
@ -2340,6 +2345,8 @@ STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TOOLTIP :{BLACK}Se e com
STR_NETWORK_CLIENT_LIST_PLAYER :{BLACK}Giocatore
STR_NETWORK_CLIENT_LIST_PLAYER_NAME_TOOLTIP :{BLACK}Il nome del tuo personaggio
STR_NETWORK_CLIENT_LIST_PLAYER_NAME_EDIT_TOOLTIP : {BLACK}Modifica il nome del tuo personaggio
STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :Nome del tuo personaggio
STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Invia un messaggio a questo giocatore
STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}Manda un messaggio a tutti gli spettatori
STR_NETWORK_CLIENT_LIST_SPECTATORS :Spettatori
STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Crea una nuova compagnia e controllala
@ -2469,6 +2476,7 @@ STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Il serve
STR_NETWORK_MESSAGE_KICKED :*** {STRING} è stato espulso. Motivo: ({STRING})
STR_NETWORK_ERROR_COORDINATOR_REGISTRATION_FAILED :{WHITE}Registrazione al server fallita
STR_NETWORK_ERROR_COORDINATOR_ISOLATED :{WHITE}Il tuo server non permette connessioni remote
STR_NETWORK_ERROR_COORDINATOR_ISOLATED_DETAIL :{WHITE}Altri giocatori non saranno in grado di connettersi al tuo server
# Content downloading window
@ -3104,6 +3112,8 @@ STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Numero c
STR_MAPGEN_DATE :{BLACK}Data:
STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Numero industrie:
STR_MAPGEN_HEIGHTMAP_HEIGHT :{WHITE}Picco massimo:
STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Aumenta la massima altezza del picco più alto sulla mappa di uno
STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Diminuisci la massima altezza del picco più alto sulla mappa di uno
STR_MAPGEN_SNOW_COVERAGE :{BLACK}Aree innevate:
STR_MAPGEN_SNOW_COVERAGE_UP :{BLACK}Aumenta la copertura della neve del dieci per cento
STR_MAPGEN_SNOW_COVERAGE_DOWN :{BLACK}Diminuisci la copertura della neve del dieci per cento
@ -3280,6 +3290,7 @@ STR_NEWGRF_ERROR_MSG_WARNING :{RED}Attenzione
STR_NEWGRF_ERROR_MSG_ERROR :{RED}Errore: {SILVER}{STRING}
STR_NEWGRF_ERROR_MSG_FATAL :{RED}Errore irreversibile: {SILVER}{STRING}
STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Si è verificato un errore irreversibile nel NewGRF:{}{STRING}
STR_NEWGRF_ERROR_POPUP :{WHITE}Si è verificato un errore in un NewGRF:{}{STRING}
STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} non funziona con la versione di TTDPatch riferita da OpenTTD
STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} è per la versione {STRING} di TTD
STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} è progettato per essere usato con {STRING}
@ -4117,6 +4128,7 @@ STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}Manuten
STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}Impossibile raggiungere {STATION}, {VELOCITY}
STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}Impossibile raggiungere {WAYPOINT}, {VELOCITY}
STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_VEL :{ORANGE}Impossibile raggiungere {DEPOT}, {VELOCITY}
# Vehicle stopped/started animations
###length 2

@ -1752,6 +1752,8 @@ STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER_HELPTEXT :Vise nyhetsoppd
STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS :Ulykker / katastrofer: {STRING}
STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS_HELPTEXT :Vise nyhetsoppdatering når ulykker eller katastrofer inntreffer
STR_CONFIG_SETTING_NEWS_ACCIDENT_OTHER :Ulykker med konkurrentens kjøretøy: {STRING}
STR_CONFIG_SETTING_NEWS_ACCIDENT_OTHER_HELPTEXT :Vis en avis om havarerte kjøretøy for konkurrenter
STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION :Firmainformasjon: {STRING}
STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION_HELPTEXT :Vise nyhetsoppdatering når nye selskaper starter opp, eller når selskaper er konkurstruet
@ -2267,6 +2269,7 @@ STR_NETWORK_SERVER_LIST_LANDSCAPE :{SILVER}Landska
STR_NETWORK_SERVER_LIST_MAP_SIZE :{SILVER}Kartstørrelse: {WHITE}{COMMA}x{COMMA}
STR_NETWORK_SERVER_LIST_SERVER_VERSION :{SILVER}Tjenerversjon: {WHITE}{STRING}
STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}Tjeneradresse: {WHITE}{STRING}
STR_NETWORK_SERVER_LIST_INVITE_CODE :{SILVER}Invitasjonskode: {WHITE}{STRING}
STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}Startdato: {WHITE}{DATE_SHORT}
STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}Nettverksdato: {WHITE}{DATE_SHORT}
STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}Spillskript: {WHITE}{STRING} (v{NUM})
@ -2684,6 +2687,7 @@ STR_STATION_CLASS_WAYP :Kontrollpunkter
# Signal window
STR_BUILD_SIGNAL_CAPTION :{WHITE}Signalvalg
STR_BUILD_SIGNAL_TOGGLE_ADVANCED_SIGNAL_TOOLTIP :{BLACK}Veksle mellom visning av avanserte signaltyper
STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Blokksignal (vingesignal){}Dette er den enkleste typen av signaler som tillater kun ett tog å kjøre om gangen.
STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Inngangssignal (vingesignal){}Grønt så lenge det er ett eller flere grønne utgangssignal fra etterfølgende sporseksjon. Ellers rødt.
STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Utgangssignal (vingesignal){}Oppfører seg på samme måte som et blokksignal, men er nødvendig for å utløse riktig farge på inngangs- og kombinasjons-forsignaler.

@ -2129,6 +2129,8 @@ STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER_HELPTEXT :Wyświetl wiado
STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS :Wypadki / klęski: {STRING}
STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS_HELPTEXT :Wyświetl wiadomość w gazecie kiedy zdarzy się wypadek lub nastąpi katastrofa
STR_CONFIG_SETTING_NEWS_ACCIDENT_OTHER :Wypadki pojazdów konkurentów: {STRING}
STR_CONFIG_SETTING_NEWS_ACCIDENT_OTHER_HELPTEXT :Wyświetl wiadomość w gazecie o rozbitych pojazdach konkurentów
STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION :Informacja firmy: {STRING}
STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION_HELPTEXT :Wyświetl wiadomość w gazecie kiedy powstaje nowa firma lub kiedy istniejącym firmom grozi bankructwo

@ -1749,6 +1749,7 @@ STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER_HELPTEXT :Visa nyhetstidn
STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS :Olyckor / katastrofer: {STRING}
STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS_HELPTEXT :Visa nyhetstidning när olyckor eller katastrofer inträffar
STR_CONFIG_SETTING_NEWS_ACCIDENT_OTHER :Olyckor med konkurrenters fordon: {STRING}
STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION :Företagsinformation: {STRING}
STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION_HELPTEXT :Visa nyhetstidning när nya företag startar upp eller när ett befintligt företag riskerar att gå bankrupt

@ -188,6 +188,7 @@ STR_COLOUR_ORANGE :橙
STR_COLOUR_BROWN :棕
STR_COLOUR_GREY :灰
STR_COLOUR_WHITE :白
STR_COLOUR_RANDOM :隨機
# Units used in OpenTTD
STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}英里/小時
@ -268,6 +269,7 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}如啟
STR_BUTTON_DEFAULT :{BLACK}預設值
STR_BUTTON_CANCEL :{BLACK}取消
STR_BUTTON_OK :{BLACK}確定
STR_WARNING_PASSWORD_SECURITY :{YELLOW}警告: 伺服器管理者可能可以閱讀在此處輸入的任何文字訊息
# On screen keyboard window
STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ .
@ -317,9 +319,13 @@ STR_SORT_BY_RANGE :範圍
STR_SORT_BY_POPULATION :人口
STR_SORT_BY_RATING :評價
STR_SORT_BY_NUM_VEHICLES :車輛數量
STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :去年總盈利
STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :今年總盈利
STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :去年平均盈利
# Group by options for vehicle list
STR_GROUP_BY_NONE :無
STR_GROUP_BY_SHARED_ORDERS :共享指令
# Order button in shared orders vehicle list
@ -368,6 +374,7 @@ STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}產生
STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}產生市鎮
STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}產生工業
STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}建造道路
STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}鋪設電車軌
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}植樹。按 Shift 可切換種植/顯示預估的種植費用
STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}放置標誌
STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}放置物件。按 Shift 可切換興建/顯示預估的興建費用
@ -782,6 +789,7 @@ STR_STATUSBAR_PAUSED :{YELLOW}* *
STR_STATUSBAR_AUTOSAVE :{RED}自動儲存
STR_STATUSBAR_SAVING_GAME :{RED}* * 遊戲儲存中 * *
STR_STATUSBAR_SPECTATOR :{WHITE}旁觀者
# News message history
STR_MESSAGE_HISTORY :{WHITE}訊息記錄
@ -883,7 +891,12 @@ STR_NEWS_STATION_NOW_ACCEPTS_CARGO_AND_CARGO :{WHITE}{STATION
STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}補助過期:{}{}將 {STRING} 從 {STRING} 運到 {STRING} 現在起不再提供補助
STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}補助結束:{}{}將 {STRING} 從 {STRING} 運到 {STRING} 的服務不再提供補助
STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}提供補助:{}{}首先將 {STRING} 從 {STRING} 運到 {STRING} 的公司將得到地方政府補助{NUM}年!
###length 4
STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}{STRING} 獲得補助!{}{}將 {STRING} 從 {STRING} 運到 {STRING} 的服務可在往後{NUM}年收到額外 50% 的運費補助!
STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}{STRING} 獲得補助!{}{}將 {STRING} 從 {STRING} 運到 {STRING} 的服務可在往後{NUM}年收到雙倍運費補助!
STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}{STRING} 獲得補助!{}{}將 {STRING} 從 {STRING} 運到 {STRING} 的服務可在往後{NUM}年收到三倍運費補助!
STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}{STRING} 獲得補助!{}{}將 {STRING} 從 {STRING} 運到 {STRING} 的服務可在往後{NUM}年收到四倍運費補助!
STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLACK}{TOWN} 交通大亂!{}{}{STRING} 出資的道路重建計劃為用路人帶來六個月的惡夢!
STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}運輸大亨!
@ -923,7 +936,7 @@ STR_GAME_OPTIONS_CURRENCY_NLG :荷蘭盾 (NLG)
STR_GAME_OPTIONS_CURRENCY_NOK :挪威克朗 (NOK)
STR_GAME_OPTIONS_CURRENCY_PLN :波蘭茲羅提 (PLN)
STR_GAME_OPTIONS_CURRENCY_RON :羅馬尼亞列伊 (RON)
STR_GAME_OPTIONS_CURRENCY_RUR :俄羅斯盧布 (RUR)
STR_GAME_OPTIONS_CURRENCY_RUR :俄羅斯盧布 (RUR)
STR_GAME_OPTIONS_CURRENCY_SIT :斯洛文尼亞托拉 (SIT)
STR_GAME_OPTIONS_CURRENCY_SEK :瑞典克朗 (SEK)
STR_GAME_OPTIONS_CURRENCY_TRY :土耳其里拉 (TRY)
@ -936,13 +949,17 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :南非蘭特 (Z
STR_GAME_OPTIONS_CURRENCY_CUSTOM :自訂...
STR_GAME_OPTIONS_CURRENCY_GEL :喬治亞拉里 (GEL)
STR_GAME_OPTIONS_CURRENCY_IRR :伊朗里亞爾 (IRR)
STR_GAME_OPTIONS_CURRENCY_RUB :俄羅斯盧布 (RUB)
STR_GAME_OPTIONS_CURRENCY_CNY :中國人民幣(CNY)
STR_GAME_OPTIONS_CURRENCY_HKD :港幣 (HKD)
STR_GAME_OPTIONS_CURRENCY_INR :印度盧比(INR)
STR_GAME_OPTIONS_CURRENCY_IDR :印尼盾 (IDR)
###length 2
STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :靠左行駛
STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :靠右行駛
STR_GAME_OPTIONS_TOWN_NAMES_FRAME :{BLACK}市鎮名稱
STR_GAME_OPTIONS_TOWN_NAMES_FRAME :{BLACK}市鎮名稱:
STR_GAME_OPTIONS_TOWN_NAMES_DROPDOWN_TOOLTIP :{BLACK}選擇市鎮命名風格
###length 21
@ -989,8 +1006,13 @@ STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}勾選
STR_GAME_OPTIONS_RESOLUTION :{BLACK}螢幕解析度
STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}選擇螢幕解析度
STR_GAME_OPTIONS_RESOLUTION_OTHER :其它
STR_GAME_OPTIONS_RESOLUTION_ITEM :{NUM}x{NUM}
STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}硬體加速
STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}勾選此方框以允許OpenTTD嘗試使用硬體加速。設定將會在遊戲重新啟動後套用
STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK}VSync
STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}勾選此方框以啟用V-SYNC。此項設定將會在遊戲重啟後套用。只有在硬體加速存在時可用
STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}介面大小
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}選擇使用的介面元素大小
@ -1000,8 +1022,13 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :兩倍大小
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :四倍大小
STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_AUTO :(自動偵測)
STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :兩倍大小
STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :四倍大小
STR_GAME_OPTIONS_GRAPHICS :{BLACK}圖形
STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}Hz
STR_GAME_OPTIONS_BASE_GRF :{BLACK}基本圖形集
STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}選擇要使用的基本圖形集
@ -1103,6 +1130,7 @@ STR_TERRAIN_TYPE_FLAT :平坦
STR_TERRAIN_TYPE_HILLY :丘陵
STR_TERRAIN_TYPE_MOUNTAINOUS :高山
STR_TERRAIN_TYPE_ALPINIST :多山
STR_TERRAIN_TYPE_CUSTOM :自訂高度
STR_TERRAIN_TYPE_CUSTOM_VALUE :自訂高度({NUM}
###length 3
@ -1117,6 +1145,7 @@ STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}顯示
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}篩選字串:
STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}展開所有選項
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}折疊所有選項
STR_CONFIG_SETTING_RESET_ALL :{BLACK}重設所有數值
STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(沒有適用的解釋)
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}預設值: {ORANGE}{STRING}
STR_CONFIG_SETTING_TYPE :{LTBLUE}設定種類: {ORANGE}{STRING}
@ -1125,6 +1154,7 @@ STR_CONFIG_SETTING_TYPE_GAME_MENU :遊戲設定 (
STR_CONFIG_SETTING_TYPE_GAME_INGAME :遊戲設定 (存檔時保存;僅影響現時開啟的遊戲)
STR_CONFIG_SETTING_TYPE_COMPANY_MENU :公司設定 (存檔時保存;僅在往後建立的新遊戲生效)
STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :公司設定 (存檔時保存;僅影響您正在控制的公司)
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_TEXT :{WHITE}此操作將會還原所有遊戲設定至預設狀態{}你確定要進行此操作嗎?
STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}篩選設定:
STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}適用範圍:
@ -1187,8 +1217,10 @@ STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :控制維修不
STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :補助倍率: {STRING}
STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :設定獲補助服務的總利潤金額相對原有利潤的倍率
STR_CONFIG_SETTING_SUBSIDY_DURATION :補助持續時間: {STRING}
###setting-zero-is-special
STR_CONFIG_SETTING_SUBSIDY_DURATION_DISABLED :沒有補貼
STR_CONFIG_SETTING_CONSTRUCTION_COSTS :建造成本: {STRING}
STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :設定建造和購買物件的成本水平
@ -1205,8 +1237,10 @@ STR_CONFIG_SETTING_DISASTERS_HELPTEXT :切換那些有
STR_CONFIG_SETTING_CITY_APPROVAL :地方政府對地區結構重組的態度: {STRING}
STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :選擇公司所製造的噪音和環境傷害對其在市鎮的評比及未來的建設行動會造成多大影響
STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT :地圖高度限制: {STRING}
STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_VALUE :{NUM}
###setting-zero-is-special
STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}您不能把地圖的最高高度設成此值。至少有一座山比這個高度更高。
STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}您不能把地圖的最大高度限制設成此值。至少有一座山比這個高度更高。
STR_CONFIG_SETTING_AUTOSLOPE :允許在建築物或軌道底下改變地形斜度 (autoslope){STRING}
STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :可以在建築物或軌道底下改變地形而不需移除它們
@ -1335,6 +1369,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}當有
STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :基礎建設維護: {STRING}
STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :如啟用此選項,基礎建設會產生維護成本。該成本的增長會根據公司基礎建設的規模而加倍增大,因此該設定對大公司的影響比對小公司更大
STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :選擇公司的初始顏色
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :機場永不過期:{STRING}
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :如啟用此選項,所有機場一經面世,就永遠可以選擇建設
@ -1406,6 +1441,7 @@ STR_CONFIG_SETTING_SNOWLINE_HEIGHT :雪線高度:
STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :此設定控制在「寒帶」地圖中雪地開始出現的高度。除了外觀的不同外,雪地也會影響工業設施的分佈以及市鎮成長的條件
STR_CONFIG_SETTING_DESERT_COVERAGE :沙漠覆蓋率: {STRING}
STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}%
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :地形起伏度 (只適用於 TerraGenesis){STRING}
@ -1459,6 +1495,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :暗綠
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :紫
###length 4
STR_CONFIG_SETTING_SCROLLMODE_RMB :使用右鍵移動地圖
STR_CONFIG_SETTING_SCROLLMODE_LMB :使用左鍵移動地圖
STR_CONFIG_SETTING_SMOOTH_SCROLLING :視野平滑移動:{STRING}
@ -1495,7 +1532,9 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :雙撳
STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :單撳 (選定輸入方塊時)
STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :單撳 (立刻)
STR_CONFIG_SETTING_USE_RELAY_SERVICE :使用中繼服務: {STRING}
###length 3
STR_CONFIG_SETTING_USE_RELAY_SERVICE_ALLOW :允許
STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :右鍵模擬:{STRING}
STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :選擇模擬右撳鼠鍵的方法
@ -1504,6 +1543,8 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Command 鍵
STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_CONTROL :Control 鍵
STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :無
STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :右鍵關閉視窗: {STRING}
STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :在視窗內以右鍵點擊可關閉視窗。可用右鍵關閉工具提示
STR_CONFIG_SETTING_AUTOSAVE :自動儲存: {STRING}
STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :選擇自動存檔的週期
@ -1557,8 +1598,12 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :設定是否在
STR_CONFIG_SETTING_EXPENSES_LAYOUT :將公司財務視窗的收支分組顯示:{STRING}
STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :決定是否將公司財務視窗內的收支項目分組顯示
STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :在鋪設軌道時自動移除號誌: {STRING}
STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :自動移除軌道鋪設路徑上的號誌。請注意:本設定有導致火車事故的潛在風險
STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% 正常遊戲速度
###setting-zero-is-special
STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :無限制(以電腦可行的最快速度)
STR_CONFIG_SETTING_SOUND_TICKER :新聞提示: {STRING}
STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :總結新訊息時播放音效
@ -1654,6 +1699,7 @@ STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER_HELPTEXT :當對手設立
STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS :事故/災難: {STRING}
STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS_HELPTEXT :當事故或災難發生時顯示報紙訊息
STR_CONFIG_SETTING_NEWS_ACCIDENT_OTHER_HELPTEXT :顯示有關對手公司事故運具的報紙
STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION :公司資訊: {STRING}
STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION_HELPTEXT :當一所公司開始營業或倒閉破產時顯示報紙訊息
@ -1705,10 +1751,12 @@ STR_CONFIG_SETTING_ENDING_YEAR_ZERO :永不
###length 3
STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :原版
STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :平滑
STR_CONFIG_SETTING_ALLOW_SHARES :允許購買其它公司的股票:{STRING}
STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :啟用此選項以容許公司買賣股票。一所公司必須達到一定的年齡方能買賣股票
STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :設定容許公司買賣股票的最小年齡
STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :轉運服務所得的收入百分比: {STRING}
STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :設定進行轉運的運輸工具在卸載被轉運的貨物時,獲得的收入佔貨物總收入的百分比。此選項讓玩家更有效地控制收入分配方式
@ -1723,11 +1771,12 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :自動在指定
STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :設定使用燈號號誌的年份。在遊戲進行到那一年之前,系統會預設豎立懸臂號誌
STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :按住 Ctrl 點選號誌時要切換的號誌種類:{STRING}
STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :選擇可透過 Ctrl+單撳 更換的號誌類型
STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :選擇可透過 Ctrl+點擊 更換的號誌類型
###length 2
STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :僅限路徑號誌
STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :所有號誌
STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :所有可見的號誌
STR_CONFIG_SETTING_SIGNAL_GUI_MODE :顯示號誌類型: {STRING}
###length 2
STR_CONFIG_SETTING_SIGNAL_GUI_MODE_PATH :僅限路徑號誌
@ -1755,11 +1804,13 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :禁止
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :允許
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :允許,可自訂市鎮道路配置
STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :貨物的產出速度取決於城市中的房屋,與城市的總人口數相關。{}二次方: 兩倍人口的都市產出四倍量的貨物{}線性: 兩倍人口的都市產出兩倍量的貨物
###length 2
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :遊戲中產生樹木的地點:{STRING}
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :控制遊戲內是否隨意種植樹木。此選項可能會影響一些依賴樹木的工業 (例如熱帶氣候的伐木場)
###length 4
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_ALL :在任意地點皆可生長與擴散
STR_CONFIG_SETTING_TOOLBAR_POS :主工具列位置:{STRING}
STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :設定主工具列在螢幕頂部的位置
@ -1902,6 +1953,7 @@ STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE}工業
STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}貨物分配
STR_CONFIG_SETTING_AI :{ORANGE}競爭對手
STR_CONFIG_SETTING_AI_NPC :{ORANGE}電腦玩家
STR_CONFIG_SETTING_NETWORK :{ORANGE}網路
STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :列車的路徑搜尋方式:{STRING}
STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :設定列車使用的路徑搜尋方式
@ -1938,6 +1990,7 @@ STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}記憶
STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}無法編配{BYTES}作為子畫面快取。子畫面快取的大小已降至{BYTES}。OpenTTD的效能會受到影響。請嘗試停用32bpp圖形及或減少放大倍數以減低記憶體要求
# Video initalization errors
STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}...找不到相容的顯示卡裝置,硬體加速已被停用
# Intro window
STR_INTRO_CAPTION :{WHITE}OpenTTD {REV}
@ -1981,6 +2034,7 @@ STR_INTRO_TRANSLATION :{BLACK}此段
# Quit window
STR_QUIT_CAPTION :{WHITE}離開
STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}您確定要關閉OperTTD嗎
STR_QUIT_YES :{BLACK}是
STR_QUIT_NO :{BLACK}否
@ -1992,6 +2046,7 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}你確
# Cheat window
STR_CHEATS :{WHITE}作弊
STR_CHEATS_TOOLTIP :{BLACK}方塊被勾選代表您用過這個密技
STR_CHEATS_NOTE :{BLACK}請注意:任何修改這些設定的操作將會被記錄於遊戲存檔中
STR_CHEAT_MONEY :{LTBLUE}增加金錢:{CURRENCY_LONG}
STR_CHEAT_CHANGE_COMPANY :{LTBLUE}切換玩家操控的公司:{ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}神奇推土機 (可摧毀工業、無法移除的物件){ORANGE}{STRING}
@ -2106,6 +2161,8 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}改變
# Matches ServerGameType
###length 3
STR_NETWORK_SERVER_VISIBILITY_PUBLIC :公開
STR_NETWORK_SERVER_VISIBILITY_INVITE_ONLY :僅限邀請加入
# Network server list
STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}多人遊戲
@ -2136,12 +2193,14 @@ STR_NETWORK_SERVER_LIST_LANDSCAPE :{SILVER}場景
STR_NETWORK_SERVER_LIST_MAP_SIZE :{SILVER}地圖大小:{WHITE}{COMMA}x{COMMA}
STR_NETWORK_SERVER_LIST_SERVER_VERSION :{SILVER}伺服器版本:{WHITE}{STRING}
STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}伺服器位址:{WHITE}{STRING}
STR_NETWORK_SERVER_LIST_INVITE_CODE :{SILVER}邀請碼: {WHITE}{STRING}
STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}開始日期:{WHITE}{DATE_SHORT}
STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}目前日期:{WHITE}{DATE_SHORT}
STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}遊戲腳本:{WHITE}{STRING} (v{NUM})
STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}受密碼保護!
STR_NETWORK_SERVER_LIST_SERVER_OFFLINE :{SILVER}伺服器離線
STR_NETWORK_SERVER_LIST_SERVER_FULL :{SILVER}伺服器已滿
STR_NETWORK_SERVER_LIST_SERVER_TOO_OLD :{SILVER}伺服器太舊
STR_NETWORK_SERVER_LIST_VERSION_MISMATCH :{SILVER}版本不符
STR_NETWORK_SERVER_LIST_GRF_MISMATCH :{SILVER}NEWGRF 不符合
@ -2157,6 +2216,7 @@ STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}起動
STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP :{BLACK}起動您自己的伺服器
STR_NETWORK_SERVER_LIST_PLAYER_NAME_OSKTITLE :{BLACK}輸入您的名稱
STR_NETWORK_SERVER_LIST_ENTER_SERVER_ADDRESS :{BLACK}輸入伺服器位址或邀請碼
# Start new multiplayer server
STR_NETWORK_START_SERVER_CAPTION :{WHITE}開始新的多人遊戲
@ -2166,6 +2226,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}遊戲
STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}設定密碼
STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}如果您不想讓大眾連線的話,可以用密碼保護遊戲
STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}可見性
STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}其他玩家是否能在公開列表中看到你的伺服器
STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} 玩家
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}用戶端上限:
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}選擇連線人數上限,但不是每個名額都要有人連線
@ -2199,21 +2261,45 @@ STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}公司
# Network company list added strings
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :用戶端清單
STR_NETWORK_COMPANY_LIST_SPECTATE :旁觀
STR_NETWORK_COMPANY_LIST_SPECTATE :旁觀
# Network client list
STR_NETWORK_CLIENT_LIST_CAPTION :{WHITE}多人遊戲
STR_NETWORK_CLIENT_LIST_SERVER :{BLACK}伺服器
STR_NETWORK_CLIENT_LIST_SERVER_NAME :{BLACK}名稱
STR_NETWORK_CLIENT_LIST_SERVER_NAME_QUERY_CAPTION :伺服器名稱
STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY :{BLACK}可見性
STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY_TOOLTIP :其他玩家是否能在公開列表中看到你的伺服器
STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE_TOOLTIP :{BLACK}其他玩家可使用以進入伺服器的邀請碼
STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE :{BLACK}連線類型
STR_NETWORK_CLIENT_LIST_PLAYER_NAME :{BLACK}名稱
STR_NETWORK_CLIENT_LIST_PLAYER_NAME_EDIT_TOOLTIP :{BLACK}編輯玩家名稱
STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :你的玩家名稱
STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}加入此公司
STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}傳送訊息給此玩家
STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}傳送訊息給所有旁觀者
STR_NETWORK_CLIENT_LIST_SPECTATORS :旁觀者
STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}創立並加入一個新公司
# Matches ConnectionType
###length 5
STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_ISOLATED :{RED}遠端玩家無法連線
STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_DIRECT :{BLACK}公開
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :踢出
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :停權
STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_RESET :刪除
STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_UNLOCK :密碼解鎖
STR_NETWORK_CLIENT_LIST_ASK_CLIENT_KICK :{YELLOW}你確定要踢出玩家: '{STRING}'嗎?
STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}你確定要將玩家 '{STRING}' 列入黑名單嗎?
STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}你確定要刪除「{COMPANY}」公司嗎?
STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}你確定要重設 '{COMPANY}'的公司密碼嗎?
STR_NETWORK_ASK_RELAY_CAPTION :{WHITE}是否使用中繼伺服器?
STR_NETWORK_ASK_RELAY_NO :{BLACK}否
STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}是,僅此一次
STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}是,且不再詢問
STR_NETWORK_SPECTATORS :旁觀者
@ -2242,6 +2328,7 @@ STR_NETWORK_CHAT_TO_COMPANY :[團隊] 給 {S
STR_NETWORK_CHAT_CLIENT :[私人] {STRING}{WHITE}{STRING}
STR_NETWORK_CHAT_TO_CLIENT :[私人] 給 {STRING}{WHITE}{STRING}
STR_NETWORK_CHAT_ALL :[全員] {STRING}{WHITE}{STRING}
STR_NETWORK_CHAT_EXTERNAL :[{3:STRING}] {0:STRING}: {WHITE}{1:STRING}
STR_NETWORK_CHAT_OSKTITLE :{BLACK}輸入要聊天的文字
# Network messages
@ -2265,6 +2352,7 @@ STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}你輸
STR_NETWORK_ERROR_TIMEOUT_COMPUTER :{WHITE}您的電腦可能較慢,未能跟上伺服器的速度
STR_NETWORK_ERROR_TIMEOUT_MAP :{WHITE}您的電腦花了太多時間下載地圖
STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}您的電腦花了太多時間嘗試加入這個伺服器
STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}你的玩家名稱是無效的
STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}可能發生連線中斷
STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}最後 {NUM} 秒沒有資料從伺服器過來
@ -2290,6 +2378,7 @@ STR_NETWORK_ERROR_CLIENT_TIMEOUT_PASSWORD :未能及時取
STR_NETWORK_ERROR_CLIENT_TIMEOUT_COMPUTER :一般逾時狀況
STR_NETWORK_ERROR_CLIENT_TIMEOUT_MAP :下載地圖需時太長
STR_NETWORK_ERROR_CLIENT_TIMEOUT_JOIN :處理地圖需時太長
STR_NETWORK_ERROR_CLIENT_INVALID_CLIENT_NAME :無效的使用者端名稱
# Network related errors
STR_NETWORK_SERVER_MESSAGE :*** {1:STRING}
@ -2306,6 +2395,7 @@ STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :玩家數量
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :連線用戶端中
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :手動
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :遊戲腳本
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :等待連結圖更新
STR_NETWORK_MESSAGE_CLIENT_LEAVING :離開中
STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} 已加入遊戲
@ -2315,10 +2405,15 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING}
STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} 已建立新公司 (#{2:NUM})
STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} 已離開遊戲 ({2:STRING})
STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} 已修改其名稱為 {STRING}
STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} 付給{1:STRING} {2:CURRENCY_LONG}
STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}伺服器關閉連線
STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}伺服器重新啟動中...{}請稍候...
STR_NETWORK_MESSAGE_KICKED :*** {STRING} 已被踢出。原因:({STRING})
STR_NETWORK_ERROR_COORDINATOR_REGISTRATION_FAILED :{WHITE}伺服器註冊失敗
STR_NETWORK_ERROR_COORDINATOR_REUSE_OF_INVITE_CODE :{WHITE}已有另一個伺服器以同樣的邀請碼進行註冊。點擊"本地"以改變遊戲模式
STR_NETWORK_ERROR_COORDINATOR_ISOLATED :{WHITE}你的伺服器不接受遠端連線
STR_NETWORK_ERROR_COORDINATOR_ISOLATED_DETAIL :{WHITE}其他玩家將無法連線到你的伺服器
# Content downloading window
STR_CONTENT_TITLE :{WHITE}內容下載中
@ -2396,6 +2491,7 @@ STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}是,
STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}否,離開 OpenTTD
STR_MISSING_GRAPHICS_ERROR_TITLE :{WHITE}下載失敗
STR_MISSING_GRAPHICS_ERROR :{BLACK}圖形下載失敗{}請手動下載圖形
STR_MISSING_GRAPHICS_ERROR_QUIT :{BLACK}離開 OpenTTD
# Transparency settings window
@ -2416,6 +2512,7 @@ STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}貨物
STR_LINKGRAPH_LEGEND_ALL :{BLACK}全部
STR_LINKGRAPH_LEGEND_NONE :{BLACK}無
STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}選擇所顯示的公司
STR_LINKGRAPH_LEGEND_COMPANY_TOOLTIP :{BLACK}{STRING}{}{COMPANY}
# Linkgraph legend window and linkgraph legend in smallmap
STR_LINKGRAPH_LEGEND_UNUSED :{TINY_FONT}{BLACK}未使用
@ -2634,6 +2731,8 @@ STR_TREES_RANDOM_TYPE :{BLACK}隨機
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}種植隨機種類樹木。按 Shift 可切換種植/顯示預估的種植費用
STR_TREES_RANDOM_TREES_BUTTON :{BLACK}隨機樹種
STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}在場景中隨機植樹
STR_TREES_MODE_NORMAL_BUTTON :{BLACK}正常
STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}框選一片區域以種植小規模的森林
STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}森林
# Land generation window (SE)
@ -2687,11 +2786,15 @@ STR_FUND_INDUSTRY_CAPTION :{WHITE}投資
STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}從清單中選擇合適的工業
STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :隨機產生多個工業
STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}以隨機分佈的工業佈滿地圖
STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_CAPTION :{WHITE}隨機產生工業
STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_QUERY :{YELLOW}你確定要新建大量隨機工業嗎?
STR_FUND_INDUSTRY_INDUSTRY_BUILD_COST :{BLACK}費用:{YELLOW}{CURRENCY_LONG}
STR_FUND_INDUSTRY_PROSPECT_NEW_INDUSTRY :{BLACK}探勘
STR_FUND_INDUSTRY_BUILD_NEW_INDUSTRY :{BLACK}設立
STR_FUND_INDUSTRY_FUND_NEW_INDUSTRY :{BLACK}設立
STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES :{BLACK}移除所有工業
STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_TOOLTIP :{BLACK}移除地圖上所有工業
STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE}移除所有工業
# Industry cargoes window
STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}{STRING} 工業的產業鍊
@ -2732,8 +2835,11 @@ STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}機場
STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF{LTBLUE}{STRING}
STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}接收貨物:{LTBLUE}
STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING})
STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}鐵軌種類: {LTBLUE}{STRING}
STR_LANG_AREA_INFORMATION_ROAD_TYPE :{BLACK}道路類型: {LTBLUE}{STRING}
STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}軌道速限:{LTBLUE}{VELOCITY}
STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}道路速限:{LTBLUE}{VELOCITY}
STR_LANG_AREA_INFORMATION_TRAM_SPEED_LIMIT :{BLACK}有軌電車速限: {LTBLUE}{VELOCITY}
# Description of land area of different tiles
STR_LAI_CLEAR_DESCRIPTION_ROCKS :石頭
@ -2834,18 +2940,30 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD
# Framerate display window
STR_FRAMERATE_CAPTION :{WHITE}幀率
STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x)
STR_FRAMERATE_RATE_GAMELOOP :{BLACK}模擬速度: {STRING}
STR_FRAMERATE_RATE_BLITTER :{BLACK}畫面幀數: {STRING}
STR_FRAMERATE_AVERAGE :{WHITE}平均
STR_FRAMERATE_MEMORYUSE :{WHITE}記憶體
STR_FRAMERATE_DATA_POINTS :{BLACK}數據基於 {COMMA} 個採樣
STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} 毫秒
STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} 幀/秒
STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} 幀/秒
STR_FRAMERATE_BYTES_GOOD :{LTBLUE}{BYTES}
###length 15
STR_FRAMERATE_VIDEO :{BLACK}影像輸出
STR_FRAMERATE_SOUND :{BLACK}混音:
STR_FRAMERATE_GAMESCRIPT :{BLACK} 遊戲腳本:
STR_FRAMERATE_AI :{BLACK} AI {NUM} {STRING}
###length 15
STR_FRAMETIME_CAPTION_GL_LANDSCAPE :世界刻
STR_FRAMETIME_CAPTION_DRAWING :圖形彩現
STR_FRAMETIME_CAPTION_VIDEO :影像輸出
STR_FRAMETIME_CAPTION_SOUND :混音
STR_FRAMETIME_CAPTION_ALLSCRIPTS :GS/AI 腳本總計
STR_FRAMETIME_CAPTION_GAMESCRIPT :遊戲腳本
STR_FRAMETIME_CAPTION_AI :AI {NUM} {STRING}
@ -2871,6 +2989,7 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}遊戲
STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}沒有可用的資訊
STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING}
STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF{WHITE}{STRING}
STR_SAVELOAD_FILTER_TITLE :{BLACK}篩選字串:
STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}覆蓋檔案
STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}你確定要覆蓋現有存檔嗎?
STR_SAVELOAD_DIRECTORY :{STRING} (路徑)
@ -2885,7 +3004,11 @@ STR_MAPGEN_BY :{BLACK}*
STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}市鎮數量:
STR_MAPGEN_DATE :{BLACK}日期:
STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}工業數量:
STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}將地圖上最高峰的最大高度減少1
STR_MAPGEN_SNOW_COVERAGE :{BLACK}雪地覆蓋率:
STR_MAPGEN_SNOW_COVERAGE_UP :{BLACK}將雪地覆蓋率提高10%
STR_MAPGEN_SNOW_COVERAGE_TEXT :{BLACK}{NUM}%
STR_MAPGEN_DESERT_COVERAGE :{BLACK}沙漠覆蓋率:
STR_MAPGEN_DESERT_COVERAGE_UP :{BLACK}將沙漠覆蓋率提高10%
STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}%
STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}雪線高度:
@ -2916,6 +3039,8 @@ STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}高度
STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}大小:
STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM}
STR_MAPGEN_SNOW_COVERAGE_QUERY_CAPT :{WHITE}雪地覆蓋率 (%)
STR_MAPGEN_DESERT_COVERAGE_QUERY_CAPT :{WHITE}沙漠覆蓋率 (以百分比%計算)
STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}修改雪線高度
STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}修改開始年份
@ -3051,6 +3176,7 @@ STR_NEWGRF_ERROR_MSG_WARNING :{RED}警告:{
STR_NEWGRF_ERROR_MSG_ERROR :{RED}錯誤:{SILVER}{STRING}
STR_NEWGRF_ERROR_MSG_FATAL :{RED}嚴重錯誤:{SILVER}{STRING}
STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}發生嚴重 NewGRF 錯誤的處理方式:{}{STRING}
STR_NEWGRF_ERROR_POPUP :{WHITE}發生NewGRF錯誤:{}{STRING}
STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} 跟由 OpenTTD 回報的 TTDPatch 版本不合
STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} 只適合用於 TTD 版本 {STRING}
STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} 必須跟 {STRING} 一起使用
@ -3142,6 +3268,7 @@ STR_TOWN_POPULATION :{BLACK}世界
STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN}
STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (城市)
STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}人口:{ORANGE}{COMMA}{BLACK} 房屋:{ORANGE}{COMMA}
STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} 上月: {ORANGE}{COMMA}{BLACK} 最多: {ORANGE}{COMMA}
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}市鎮成長所需貨物:
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{RED}需要 {ORANGE}{STRING}
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} 必須是冬天
@ -3166,6 +3293,7 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :重新命名市
# Town local authority window
STR_LOCAL_AUTHORITY_CAPTION :{WHITE}{TOWN} 地方政府
STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}顯示地方政府轄區
STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}運輸公司評比:
STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}{ORANGE}{STRING}
STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}可辦理的工作:
@ -3196,7 +3324,10 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}冒著
# Goal window
STR_GOALS_CAPTION :{WHITE}{COMPANY} 遊戲目標
STR_GOALS_SPECTATOR_CAPTION :{WHITE}全局目標
STR_GOALS_SPECTATOR :全局目標
STR_GOALS_GLOBAL_BUTTON :{BLACK}全局
STR_GOALS_GLOBAL_BUTTON_HELPTEXT :{BLACK}顯示全局目標
STR_GOALS_COMPANY_BUTTON :{BLACK}公司
STR_GOALS_TEXT :{ORANGE}{STRING}
STR_GOALS_NONE :{ORANGE}- 當前無目標 -
STR_GOALS_PROGRESS :{ORANGE}{STRING}
@ -3204,10 +3335,10 @@ STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING}
STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}點選目標以將有關工業 / 市鎮或方格置於畫面中央。按下 Ctrl 鍵並點選目標以開啟一個以有關工業 / 市鎮或方格為中心的新視野
# Goal question window
STR_GOAL_QUESTION_CAPTION_QUESTION :問題
STR_GOAL_QUESTION_CAPTION_INFORMATION :資訊
STR_GOAL_QUESTION_CAPTION_WARNING :警告
STR_GOAL_QUESTION_CAPTION_ERROR :錯誤
STR_GOAL_QUESTION_CAPTION_QUESTION :{BLACK}問題
STR_GOAL_QUESTION_CAPTION_INFORMATION :{BLACK}資訊
STR_GOAL_QUESTION_CAPTION_WARNING :{BLACK}警告
STR_GOAL_QUESTION_CAPTION_ERROR :{YELLOW}錯誤
# Goal Question button list
###length 18
@ -3399,6 +3530,7 @@ STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}以公
STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}詳情
STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}顯示基礎建設數目的詳細資料
STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}給錢
STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}將資金給予此公司
STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}新臉孔
STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}選擇總經理的新臉孔
@ -3435,9 +3567,12 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}每年{C
# Industry directory
STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}工業
STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- 無 -
STR_INDUSTRY_DIRECTORY_ITEM_INFO :{BLACK}{CARGO_LONG}{STRING}{YELLOW} (運送了{COMMA}%){BLACK}
STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY}
STR_INDUSTRY_DIRECTORY_ITEM_PROD1 :{ORANGE}{INDUSTRY} {STRING}
STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING}
STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}工業名稱 - 點選名稱可將工業置於畫面中央。 按住 Ctrl 點選可於工業位置開啟新視窗視野
STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}接受貨物: {SILVER}{STRING}
STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :所有貨物種類
STR_INDUSTRY_DIRECTORY_FILTER_NONE :無
@ -3452,6 +3587,8 @@ STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}該工
STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}需要: {YELLOW}{STRING}{STRING}
STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :{STRING}{STRING}
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}需要:
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
STR_CONFIG_GAME_PRODUCTION :{WHITE}修改產量 (以 8 為倍數增減,最大為 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}變更產出等級 (百分比最高可到800%)
@ -3505,12 +3642,13 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :未分組的車
STR_GROUP_DEFAULT_SHIPS :未分組的船舶
STR_GROUP_DEFAULT_AIRCRAFTS :未分組的飛機
STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA})
STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}群組 - 點選群組以顯示其中的運輸工具清單。拖曳群組標籤以排列群組的次序和層級。
STR_GROUP_CREATE_TOOLTIP :{BLACK}點選可建立群組
STR_GROUP_DELETE_TOOLTIP :{BLACK}移除所選群組
STR_GROUP_RENAME_TOOLTIP :{BLACK}重新命名群組
STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}點選可保護此群組排除在全域自動替換設定之外
STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}點選可保護此群組排除在全域自動替換設定之外。按住 Ctrl 鍵點選以套用至所有子群組
STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}刪除群組
STR_GROUP_DELETE_QUERY_TEXT :{WHITE}您是否決定刪除此群組及其所有子群組?
@ -3521,6 +3659,9 @@ STR_GROUP_REMOVE_ALL_VEHICLES :移去所有運
STR_GROUP_RENAME_CAPTION :{BLACK}重新命名群組
STR_GROUP_PROFIT_THIS_YEAR :今年盈利:
STR_GROUP_PROFIT_LAST_YEAR :去年盈利:
STR_GROUP_OCCUPANCY :目前使用率:
STR_GROUP_OCCUPANCY_VALUE :{NUM}%
# Build vehicle window
###length 4
@ -3530,10 +3671,12 @@ STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :新購單軌車
STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :新購磁浮車輛
STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :新購車輛
STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :新的電車運具
# Vehicle availability
###length VEHICLE_TYPES
STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :新購鐵路列車
STR_BUY_VEHICLE_ROAD_VEHICLE_ALL_CAPTION :新購車輛
STR_BUY_VEHICLE_SHIP_CAPTION :新購船舶
STR_BUY_VEHICLE_AIRCRAFT_CAPTION :新購飛機
@ -3549,12 +3692,15 @@ STR_PURCHASE_INFO_REFITTABLE :(可改裝)
STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}設計年份:{GOLD}{NUM}{BLACK} 使用年限:{GOLD}{COMMA} 年
STR_PURCHASE_INFO_RELIABILITY :{BLACK}最大可靠度:{GOLD}{COMMA}%
STR_PURCHASE_INFO_COST :{BLACK}費用:{GOLD}{CURRENCY_LONG}
STR_PURCHASE_INFO_COST_REFIT :{BLACK}費用: {GOLD}{CURRENCY_LONG}{BLACK} (改裝費用: {GOLD}{CURRENCY_LONG}{BLACK})
STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}載重:{GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT})
STR_PURCHASE_INFO_COST_SPEED :{BLACK}費用:{GOLD}{CURRENCY_LONG}{BLACK} 速度:{GOLD}{VELOCITY}
STR_PURCHASE_INFO_COST_REFIT_SPEED :{BLACK}費用: {GOLD}{CURRENCY_LONG}{BLACK} (改裝費用: {GOLD}{CURRENCY_LONG}{BLACK}) 速度: {GOLD}{VELOCITY}
STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}容量:{GOLD}{CARGO_LONG}{CARGO_LONG}
STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}動力車廂:{GOLD}+{POWER}{BLACK} 載重:{GOLD}+{WEIGHT_SHORT}
STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}可改裝成:{GOLD}{STRING}
STR_PURCHASE_INFO_ALL_TYPES :所有貨物種類
STR_PURCHASE_INFO_NONE :無
STR_PURCHASE_INFO_ALL_BUT :所有貨物({CARGO_LIST}除外)
STR_PURCHASE_INFO_MAX_TE :{BLACK}最大牽引力:{GOLD}{FORCE}
STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}範圍: {GOLD}{COMMA} 方格
@ -3583,6 +3729,8 @@ STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}購買
STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}購買選定的飛機。按住 Shift 點選則只會顯示預估的購買費用
###length VEHICLE_TYPES
STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}購買並改裝選定的車輛。按住 Shift 點選則只會顯示預估的購買費用
STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}購買並改裝選定的船舶。按住 Shift 點選則只會顯示預估的購買費用
STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}購買並改裝選定的飛機。按住 Shift 點選則只會顯示預估的購買費用
###length VEHICLE_TYPES
@ -3716,6 +3864,7 @@ STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :單軌機車頭
STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :磁浮機車頭
STR_ENGINE_PREVIEW_ROAD_VEHICLE :車輛
STR_ENGINE_PREVIEW_TRAM_VEHICLE :有軌電車運具
STR_ENGINE_PREVIEW_AIRCRAFT :飛機
STR_ENGINE_PREVIEW_SHIP :船舶
@ -3723,6 +3872,8 @@ STR_ENGINE_PREVIEW_SHIP :船舶
STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}費用:{CURRENCY_LONG} 載重:{WEIGHT_SHORT}{}速度:{VELOCITY} 功率:{POWER}{}營運成本:{CURRENCY_LONG} / 年{}容量:{CARGO_LONG}
STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}費用:{CURRENCY_LONG} 載重:{WEIGHT_SHORT}{}速度:{VELOCITY} 功率:{POWER} 最大牽引力:{6:FORCE}{}營運成本:{4:CURRENCY_LONG}/年{}容量:{5:CARGO_LONG}
STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}費用:{CURRENCY_LONG} 最高速度:{VELOCITY}{}容量:{CARGO_LONG}{}營運成本:{CURRENCY_LONG}/年
STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_RUNCOST :{BLACK}費用: {CURRENCY_LONG} 最高速度: {VELOCITY}{}航空運具型號: {STRING}{}容量: {CARGO_LONG}{}營運成本: {CURRENCY_LONG}/年
STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_CAP_RUNCOST :{BLACK}費用: {CURRENCY_LONG} 最高速度: {VELOCITY}{}航空運具型號: {STRING} 距離: {COMMA} 格{}容量: {CARGO_LONG}, {CARGO_LONG}{}營運成本: {CURRENCY_LONG}/年
# Autoreplace window
STR_REPLACE_VEHICLES_WHITE :{WHITE}替換 {STRING} - {STRING}
@ -3754,6 +3905,7 @@ STR_REPLACE_HELP_STOP_BUTTON :{BLACK}按下
STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}在車頭及車廂替換畫面間切換。
STR_REPLACE_ENGINES :車頭
STR_REPLACE_WAGONS :車廂
STR_REPLACE_ALL_RAILTYPE :所有的軌道運具
STR_REPLACE_ALL_ROADTYPE :所有公路車輛
###length 2
@ -3767,13 +3919,17 @@ STR_REPLACE_MONORAIL_VEHICLES :單軌列車
STR_REPLACE_MAGLEV_VEHICLES :磁浮列車
STR_REPLACE_ROAD_VEHICLES :車輛
STR_REPLACE_TRAM_VEHICLES :有軌電車運具
STR_REPLACE_REMOVE_WAGON :{BLACK}移除車廂({STRING}): {ORANGE}{STRING}
STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}如果替換後的車廂較長的話,讓自動替換功能移除多餘的車廂 (從頭開始) 以便維持列車長度
STR_REPLACE_REMOVE_WAGON_GROUP_HELP :{STRING}. 按住Ctrl並點擊以套用到所有子群組
# Vehicle view
STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE}
###length VEHICLE_TYPES
STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}將飛機置於畫面中央。雙擊將會使視野跟隨飛機。 按住 Ctrl 點選可於飛機位置開啟新視窗視野
###length VEHICLE_TYPES
STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}將列車送回機廠,按住 CTRL 點選機廠則僅做維護
@ -3810,6 +3966,9 @@ STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}顯示
STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}顯示飛機詳細資料
###length VEHICLE_TYPES
STR_VEHICLE_VIEW_TRAIN_STATUS_START_STOP_TOOLTIP :{BLACK}目前列車狀態 - 點擊以停止/起動運具
STR_VEHICLE_VIEW_ROAD_VEHICLE_STATUS_START_STOP_TOOLTIP :{BLACK}目前列車狀態 - 點擊以停止/起動運具
STR_VEHICLE_VIEW_SHIP_STATE_STATUS_STOP_TOOLTIP :{BLACK}目前船舶狀態 - 點擊以停止/起動運具
# Messages in the start stop button in the vehicle view
STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}正在裝卸貨物
@ -3854,6 +4013,8 @@ STR_VEHICLE_INFO_AGE :{COMMA} 年 ({C
STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} 年 ({COMMA})
STR_VEHICLE_INFO_MAX_SPEED :{BLACK}最高速度:{LTBLUE}{VELOCITY}
STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}最大速度: {LTBLUE}{VELOCITY} {BLACK}空中運具型號: {LTBLUE}{STRING}
STR_VEHICLE_INFO_MAX_SPEED_TYPE_RANGE :{BLACK}最高速度: {LTBLUE}{VELOCITY} {BLACK}航空運具型號: {LTBLUE}{STRING} {BLACK}距離: {LTBLUE}{COMMA} 格
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}載重:{LTBLUE}{WEIGHT_SHORT} {BLACK}功率:{LTBLUE}{POWER}{BLACK} 最高速度:{LTBLUE}{VELOCITY}
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}載重:{LTBLUE}{WEIGHT_SHORT} {BLACK}功率:{LTBLUE}{POWER}{BLACK} 最高速度:{LTBLUE}{VELOCITY} {BLACK}最大牽引力:{LTBLUE}{FORCE}
@ -3992,6 +4153,7 @@ STR_ORDER_CONDITIONAL_AGE :年齡 (年)
STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :需要維護
STR_ORDER_CONDITIONAL_UNCONDITIONALLY :總是
STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :剩餘年限 (年)
STR_ORDER_CONDITIONAL_MAX_RELIABILITY :最大可靠度
###next-name-looks-similar
STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}運輸工具相關數字與指定數值比對的條件
@ -4227,6 +4389,9 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}選擇
STR_AI_LIST_CANCEL :{BLACK}取消
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}不改變腳本
STR_SCREENSHOT_CAPTION :{WHITE}螢幕截圖
STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}預設視野截圖
STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}截圖整張地圖
# AI Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} 參數
@ -4287,6 +4452,7 @@ STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :該存檔是由
STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :檔案無法讀取
STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :檔案無法寫入
STR_GAME_SAVELOAD_ERROR_DATA_INTEGRITY_CHECK_FAILED :資料完整性檢查失敗
STR_GAME_SAVELOAD_ERROR_PATCHPACK :該存檔是由被修改過的遊戲所產生
STR_GAME_SAVELOAD_NOT_AVAILABLE :<無法使用>
STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}此存檔版本不支援路面電車,已移除所有路面電車
@ -4367,6 +4533,7 @@ STR_ERROR_LOAN_ALREADY_REPAYED :{WHITE}... 不
STR_ERROR_CURRENCY_REQUIRED :{WHITE}... 需要 {CURRENCY_LONG}
STR_ERROR_CAN_T_REPAY_LOAN :{WHITE}無法償還貸款...
STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}無法把貸款的錢流通出去...
STR_ERROR_CAN_T_GIVE_MONEY :{WHITE}無法將資金給予此公司...
STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}無法購買公司...
STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}無法興建公司總部...
STR_ERROR_CAN_T_BUY_25_SHARE_IN_THIS :{WHITE}無法購買這間公司的股份...
@ -4493,6 +4660,7 @@ STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :錯誤的機廠
STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} 將在替換後過長
STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}無自動替換/翻新的規則可套用
STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(金錢限制)
STR_ERROR_AUTOREPLACE_INCOMPATIBLE_CARGO :{WHITE}新的運具無法運輸 {STRING}
# Rail construction errors
STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}不合理的軌道組合
@ -4520,6 +4688,9 @@ STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}不能
STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}無法移除此處的電車軌...
STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... 這裡沒有道路
STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... 這裡沒有電車軌
STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}無法轉換此處的道路類型...
STR_ERROR_NO_SUITABLE_ROAD :{WHITE}沒有適合的道路
STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}沒有合適的電車軌道
# Waterway construction errors
STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}無法在此興建運河...
@ -4694,6 +4865,8 @@ STR_BASESOUNDS_DOS_DESCRIPTION :原版 Transpor
STR_BASESOUNDS_WIN_DESCRIPTION :原版 Transport Tycoon Deluxe Windows 版的音效。
STR_BASESOUNDS_NONE_DESCRIPTION :不含任何音效的音效集。
STR_BASEMUSIC_WIN_DESCRIPTION :原版 Transport Tycoon Deluxe Windows 版的音樂。
STR_BASEMUSIC_DOS_DESCRIPTION :原版 Transport Tycoon Deluxe DOS 版的音樂。
STR_BASEMUSIC_TTO_DESCRIPTION :原版 Transport Tycoon (Original/World Editor) DOS 版的音樂。
STR_BASEMUSIC_NONE_DESCRIPTION :不含任何音樂的音樂集。
STR_TRADITIONAL_TRAIN_NAME :列車 {COMMA}
@ -5095,6 +5268,7 @@ STR_FORMAT_DATE_ISO :{2:NUM}-{1:STRI
STR_FORMAT_COMPANY_NUM :(公司 {COMMA})
STR_FORMAT_GROUP_NAME :群組 {COMMA}
STR_FORMAT_GROUP_VEHICLE_NAME :{GROUP} #{COMMA}
STR_FORMAT_INDUSTRY_NAME :{TOWN} {STRING}
###length 2

@ -2353,8 +2353,8 @@ void AgeVehicle(Vehicle *v)
SetWindowDirty(WC_VEHICLE_DETAILS, v->index);
/* Don't warn about non-primary or not ours vehicles or vehicles that are crashed */
if (v->Previous() != nullptr || v->owner != _local_company || (v->vehstatus & VS_CRASHED) != 0) return;
/* Don't warn about vehicles which are non-primary (e.g., part of an articulated vehicle), don't belong to us, are crashed, or are stopped */
if (v->Previous() != nullptr || v->owner != _local_company || (v->vehstatus & VS_CRASHED) != 0 || (v->vehstatus & VS_STOPPED) != 0) return;
const Company *c = Company::Get(v->owner);
/* Don't warn if a renew is active */

@ -232,11 +232,15 @@ void VideoDriver_CocoaOpenGL::Stop()
void VideoDriver_CocoaOpenGL::PopulateSystemSprites()
{
VideoDriver_Cocoa::PopulateSystemSprites();
OpenGLBackend::Get()->PopulateCursorCache();
}
void VideoDriver_CocoaOpenGL::ClearSystemSprites()
{
VideoDriver_Cocoa::ClearSystemSprites();
CGLSetCurrentContext(this->gl_context);
OpenGLBackend::Get()->ClearCursorCache();
}

@ -22,7 +22,8 @@ extern bool _cocoa_video_started;
class VideoDriver_Cocoa : public VideoDriver {
private:
Dimension orig_res; ///< Saved window size for non-fullscreen mode.
Dimension orig_res; ///< Saved window size for non-fullscreen mode.
bool refresh_sys_sprites; ///< System sprites need refreshing.
public:
bool setup; ///< Window is currently being created.
@ -45,6 +46,9 @@ public:
bool ChangeResolution(int w, int h) override;
bool ToggleFullscreen(bool fullscreen) override;
void ClearSystemSprites() override;
void PopulateSystemSprites() override;
void EditBoxLostFocus() override;
std::vector<int> GetListOfMonitorRefreshRates() override;

@ -98,6 +98,8 @@ VideoDriver_Cocoa::VideoDriver_Cocoa()
this->setup = false;
this->buffer_locked = false;
this->refresh_sys_sprites = true;
this->window = nil;
this->cocoaview = nil;
this->delegate = nil;
@ -220,6 +222,19 @@ bool VideoDriver_Cocoa::ToggleFullscreen(bool full_screen)
return false;
}
void VideoDriver_Cocoa::ClearSystemSprites()
{
this->refresh_sys_sprites = true;
}
void VideoDriver_Cocoa::PopulateSystemSprites()
{
if (this->refresh_sys_sprites && this->window != nil) {
[ this->window refreshSystemSprites ];
this->refresh_sys_sprites = false;
}
}
/**
* Callback invoked after the blitter was changed.
* @return True if no error.

@ -11,8 +11,10 @@
#define COCOA_WND_H
#import <Cocoa/Cocoa.h>
#include "toolbar_gui.h"
#include "table/sprites.h"
#ifdef MAC_OS_X_VERSION_10_12_2
# define HAVE_TOUCHBAR_SUPPORT
#endif
class VideoDriver_Cocoa;
@ -30,70 +32,17 @@ extern NSString *OTTDMainLaunchGameEngine;
+ (NSCursor *) clearCocoaCursor;
@end
#ifdef HAVE_OSX_1015_SDK
/* 9 items can be displayed on the touch bar when using default buttons. */
static NSArray *touchBarButtonIdentifiers = @[
@"openttd.pause",
@"openttd.fastforward",
@"openttd.zoom_in",
@"openttd.zoom_out",
@"openttd.build_rail",
@"openttd.build_road",
@"openttd.build_tram",
@"openttd.build_docks",
@"openttd.build_airport",
NSTouchBarItemIdentifierOtherItemsProxy
];
static NSDictionary *touchBarButtonSprites = @{
@"openttd.pause": [NSNumber numberWithInt:SPR_IMG_PAUSE],
@"openttd.fastforward": [NSNumber numberWithInt:SPR_IMG_FASTFORWARD],
@"openttd.zoom_in": [NSNumber numberWithInt:SPR_IMG_ZOOMIN],
@"openttd.zoom_out": [NSNumber numberWithInt:SPR_IMG_ZOOMOUT],
@"openttd.build_rail": [NSNumber numberWithInt:SPR_IMG_BUILDRAIL],
@"openttd.build_road": [NSNumber numberWithInt:SPR_IMG_BUILDROAD],
@"openttd.build_tram": [NSNumber numberWithInt:SPR_IMG_BUILDTRAMS],
@"openttd.build_docks": [NSNumber numberWithInt:SPR_IMG_BUILDWATER],
@"openttd.build_airport": [NSNumber numberWithInt:SPR_IMG_BUILDAIR],
};
static NSDictionary *touchBarButtonActions = @{
@"openttd.pause": [NSNumber numberWithInt:MTHK_PAUSE],
@"openttd.fastforward": [NSNumber numberWithInt:MTHK_FASTFORWARD],
@"openttd.zoom_in": [NSNumber numberWithInt:MTHK_ZOOM_IN],
@"openttd.zoom_out": [NSNumber numberWithInt:MTHK_ZOOM_OUT],
@"openttd.build_rail": [NSNumber numberWithInt:MTHK_BUILD_RAIL],
@"openttd.build_road": [NSNumber numberWithInt:MTHK_BUILD_ROAD],
@"openttd.build_tram": [NSNumber numberWithInt:MTHK_BUILD_TRAM],
@"openttd.build_docks": [NSNumber numberWithInt:MTHK_BUILD_DOCKS],
@"openttd.build_airport": [NSNumber numberWithInt:MTHK_BUILD_AIRPORT],
};
static NSDictionary *touchBarFallbackText = @{
@"openttd.pause": @"Pause",
@"openttd.fastforward": @"Fast Forward",
@"openttd.zoom_in": @"Zoom In",
@"openttd.zoom_out": @"Zoom Out",
@"openttd.build_rail": @"Rail",
@"openttd.build_road": @"Road",
@"openttd.build_tram": @"Tram",
@"openttd.build_docks": @"Docks",
@"openttd.build_airport": @"Airport",
};
#endif
/** Subclass of NSWindow to cater our special needs */
#ifdef HAVE_OSX_1015_SDK
@interface OTTD_CocoaWindow : NSWindow <NSTouchBarDelegate>
@property (strong) NSSet *touchbarItems;
- (NSImage*)generateImage:(int)spriteId;
#else
@interface OTTD_CocoaWindow : NSWindow
#ifdef HAVE_TOUCHBAR_SUPPORT
<NSTouchBarDelegate>
#endif
- (instancetype)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)styleMask backing:(NSBackingStoreType)backingType defer:(BOOL)flag driver:(VideoDriver_Cocoa *)drv;
- (void)setFrame:(NSRect)frameRect display:(BOOL)flag;
- (void)refreshSystemSprites;
@end
/** Subclass of NSView to support mouse awareness and text input. */

@ -32,7 +32,11 @@
#include "../../gfx_func.h"
#include "../../window_func.h"
#include "../../window_gui.h"
#include "spritecache.h"
#include "../../spritecache.h"
#include "../../toolbar_gui.h"
#include <array>
#include "table/sprites.h"
/* Table data for key mapping. */
#include "cocoa_keys.h"
@ -56,6 +60,31 @@
* Read http://developer.apple.com/releasenotes/Cocoa/Objective-C++.html for more information.
*/
#ifdef HAVE_TOUCHBAR_SUPPORT
struct TouchBarButton {
NSTouchBarItemIdentifier key;
SpriteID sprite;
MainToolbarHotkeys hotkey;
NSString *fallback_text;
bool operator ==(const NSTouchBarItemIdentifier other) const { return this->key == other; }
};
/* 9 items can be displayed on the touch bar when using default buttons. */
static const std::array<TouchBarButton, 9> _touchbar_buttons{{
{ @"openttd.pause", SPR_IMG_PAUSE, MTHK_PAUSE, @"Pause" },
{ @"openttd.fastforward", SPR_IMG_FASTFORWARD, MTHK_FASTFORWARD, @"Fast Forward" },
{ @"openttd.zoom_in", SPR_IMG_ZOOMIN, MTHK_ZOOM_IN, @"Zoom In" },
{ @"openttd.zoom_out", SPR_IMG_ZOOMOUT, MTHK_ZOOM_OUT, @"Zoom Out" },
{ @"openttd.build_rail", SPR_IMG_BUILDRAIL, MTHK_BUILD_RAIL, @"Rail" },
{ @"openttd.build_road", SPR_IMG_BUILDROAD, MTHK_BUILD_ROAD, @"Road" },
{ @"openttd.build_tram", SPR_IMG_BUILDTRAMS, MTHK_BUILD_TRAM, @"Tram" },
{ @"openttd.build_docks", SPR_IMG_BUILDWATER, MTHK_BUILD_DOCKS, @"Docks" },
{ @"openttd.build_airport", SPR_IMG_BUILDAIR, MTHK_BUILD_AIRPORT, @"Airport" }
}};
#endif
bool _allow_hidpi_window = true; // Referenced from table/misc_settings.ini
@interface OTTDMain : NSObject <NSApplicationDelegate>
@ -132,6 +161,37 @@ static std::vector<WChar> NSStringToUTF32(NSString *s)
return unicode_str;
}
static void CGDataFreeCallback(void *, const void *data, size_t)
{
delete[] (const uint32 *)data;
}
/**
* Render an OTTD sprite to a Cocoa image.
* @param sprite_id Sprite to make a NSImage from.
* @param zoom Zoom level to render the sprite in.
* @return Autorelease'd image or nullptr on any error.
*/
static NSImage *NSImageFromSprite(SpriteID sprite_id, ZoomLevel zoom)
{
if (!SpriteExists(sprite_id)) return nullptr;
/* Fetch the sprite and create a new bitmap */
Dimension dim = GetSpriteSize(sprite_id, nullptr, zoom);
std::unique_ptr<uint32[]> buffer = DrawSpriteToRgbaBuffer(sprite_id, zoom);
if (!buffer) return nullptr; // Failed to blit sprite for some reason.
CFAutoRelease<CGDataProvider> data(CGDataProviderCreateWithData(nullptr, buffer.release(), dim.width * dim.height * 4, &CGDataFreeCallback));
if (!data) return nullptr;
CGBitmapInfo info = kCGImageAlphaFirst | kCGBitmapByteOrder32Host;
CFAutoRelease<CGColorSpaceRef> color_space(CGColorSpaceCreateWithName(kCGColorSpaceSRGB));
CFAutoRelease<CGImage> bitmap(CGImageCreate(dim.width, dim.height, 8, 32, dim.width * 4, color_space.get(), info, data.get(), nullptr, false, kCGRenderingIntentDefault));
if (!bitmap) return nullptr;
return [ [ [ NSImage alloc ] initWithCGImage:bitmap.get() size:NSZeroSize ] autorelease ];
}
/**
* The main class of the application, the application's delegate.
@ -383,6 +443,7 @@ void CocoaDialog(const char *title, const char *message, const char *buttonLabel
@implementation OTTD_CocoaWindow {
VideoDriver_Cocoa *driver;
bool touchbar_created;
}
/**
@ -392,6 +453,7 @@ void CocoaDialog(const char *title, const char *message, const char *buttonLabel
{
if (self = [ super initWithContentRect:contentRect styleMask:styleMask backing:backingType defer:flag ]) {
self->driver = drv;
self->touchbar_created = false;
[ self setContentMinSize:NSMakeSize(64.0f, 64.0f) ];
@ -405,95 +467,91 @@ void CocoaDialog(const char *title, const char *message, const char *buttonLabel
return self;
}
#ifdef HAVE_OSX_1015_SDK
/**
* Define the rectangle we draw our window in
*/
- (void)setFrame:(NSRect)frameRect display:(BOOL)flag
{
[ super setFrame:frameRect display:flag ];
driver->AllocateBackingStore();
}
#ifdef HAVE_TOUCHBAR_SUPPORT
- (void)touchBarButtonAction:(id)sender
{
if (@available(macOS 10.15, *)) {
NSButtonTouchBarItem *btn = (NSButtonTouchBarItem *)sender;
NSNumber *hotkeyIndex = [ touchBarButtonActions objectForKey:btn.identifier ];
HandleToolbarHotkey(hotkeyIndex.intValue);
NSButton *btn = (NSButton *)sender;
if (auto item = std::find(_touchbar_buttons.cbegin(), _touchbar_buttons.cend(), (NSTouchBarItemIdentifier)btn.identifier); item != _touchbar_buttons.cend()) {
HandleToolbarHotkey(item->hotkey);
}
}
#pragma mark NSTouchBarProvider
- (nullable NSTouchBar *)makeTouchBar
{
/* Make button identifier array. */
NSMutableArray<NSTouchBarItemIdentifier> *button_ids = [ [ NSMutableArray alloc ] init ];
for (const auto &button : _touchbar_buttons) {
[ button_ids addObject:button.key ];
}
[ button_ids addObject:NSTouchBarItemIdentifierOtherItemsProxy ];
NSTouchBar *bar = [ [ NSTouchBar alloc ] init ];
bar.delegate = self;
bar.defaultItemIdentifiers = touchBarButtonIdentifiers;
bar.defaultItemIdentifiers = button_ids;
[ button_ids release ];
self->touchbar_created = true;
return bar;
}
-(NSImage *)generateImage:(int)spriteId
- (nullable NSTouchBarItem *)touchBar:(NSTouchBar *)touchBar makeItemForIdentifier:(NSTouchBarItemIdentifier)identifier
{
if (!SpriteExists(spriteId)) {
return nullptr;
}
auto item = std::find(_touchbar_buttons.cbegin(), _touchbar_buttons.cend(), identifier);
assert(item != _touchbar_buttons.cend());
/* Fetch the sprite and create a new bitmap */
const Sprite *fullspr = GetSprite(spriteId, ST_NORMAL);
const std::unique_ptr<uint32[]> buffer = DrawSpriteToRgbaBuffer(spriteId);
if (!buffer) {
return nullptr; // failed to blit sprite or we're using an 8bpp blitter.
}
NSButton *button = [ NSButton buttonWithTitle:item->fallback_text target:self action:@selector(touchBarButtonAction:) ];
button.identifier = identifier;
button.imageScaling = NSImageScaleProportionallyDown;
NSBitmapImageRep *bitmap = [ [ NSBitmapImageRep alloc ] initWithBitmapDataPlanes:nil pixelsWide:fullspr->width pixelsHigh:fullspr->height bitsPerSample:8 samplesPerPixel:4 hasAlpha:YES isPlanar:NO colorSpaceName:NSCalibratedRGBColorSpace bytesPerRow:0 bitsPerPixel:0 ];
NSCustomTouchBarItem *tb_item = [ [ NSCustomTouchBarItem alloc] initWithIdentifier:identifier ];
tb_item.view = button;
return tb_item;
}
/* Copy the sprite to the NSBitmapImageRep image buffer */
const Colour *src = (const Colour *)buffer.get();
for (int y = 0; y < fullspr->height; y++) {
for (int x = 0; x < fullspr->width; x++) {
NSUInteger pixel[4];
pixel[0] = src->r;
pixel[1] = src->g;
pixel[2] = src->b;
pixel[3] = src->a;
[ bitmap setPixel:pixel atX:x y:y ];
#endif /* HAVE_TOUCHBAR_SUPPORT */
src += 1;
}
}
- (void)refreshSystemSprites
{
#ifdef HAVE_TOUCHBAR_SUPPORT
if (!self->touchbar_created || ![ self respondsToSelector:@selector(touchBar) ] || self.touchBar == nil) return;
/* Finally, convert the NSBitmapImageRep we created to a NSimage we can put on the button and clean up. */
NSImage *outImage = [ [ NSImage alloc ] initWithSize:NSMakeSize(fullspr->width, fullspr->height) ];
[ outImage addRepresentation:bitmap ];
[ bitmap release ];
/* Re-create button images from OTTD sprites. */
for (NSTouchBarItemIdentifier ident in self.touchBar.itemIdentifiers) {
auto item = std::find(_touchbar_buttons.cbegin(), _touchbar_buttons.cend(), ident);
if (item == _touchbar_buttons.cend()) continue;
return outImage;
}
NSCustomTouchBarItem *tb_item = [ self.touchBar itemForIdentifier:ident ];
NSButton *button = tb_item.view;
#pragma mark NSTouchBarDelegate
- (nullable NSTouchBarItem *)touchBar:(NSTouchBar *)touchBar makeItemForIdentifier:(NSTouchBarItemIdentifier)identifier
{
if (@available(macOS 10.15, *)) {
NSButtonTouchBarItem *button = [ [ NSButtonTouchBarItem alloc ] initWithIdentifier:identifier ];
button.target = self;
button.action = @selector(touchBarButtonAction:);
NSImage *image = NSImageFromSprite(item->sprite, _settings_client.gui.zoom_min);
if (image != nil) {
/* Human Interface Guidelines: Maximum touch bar glyph size 22 pt. */
CGFloat max_dim = std::max(image.size.width, image.size.height);
if (max_dim > 0.0) {
CGFloat scale = 22.0 / max_dim;
image.size = NSMakeSize(image.size.width * scale, image.size.height * scale);
}
NSNumber *num = touchBarButtonSprites[identifier];
NSImage *generatedImage = [ self generateImage:num.unsignedIntValue ];
if (generatedImage != nullptr) {
button.image = generatedImage;
button.image = image;
button.imagePosition = NSImageOnly;
} else {
button.title = NSLocalizedString(touchBarFallbackText[identifier], @"");
button.image = nil;
button.imagePosition = NSNoImage;
}
return button;
} else {
return nullptr;
}
}
#endif
/**
* Define the rectangle we draw our window in
*/
- (void)setFrame:(NSRect)frameRect display:(BOOL)flag
{
[ super setFrame:frameRect display:flag ];
driver->AllocateBackingStore();
#endif /* HAVE_TOUCHBAR_SUPPORT */
}
@end

Loading…
Cancel
Save