Merge branch 'master' into jgrpp

# Conflicts:
#	src/ai/ai_gui.cpp
#	src/company_cmd.cpp
#	src/lang/estonian.txt
#	src/lang/german.txt
#	src/lang/hungarian.txt
#	src/lang/korean.txt
#	src/lang/slovak.txt
#	src/main_gui.cpp
#	src/video/sdl2_v.cpp
pull/217/head
Jonathan G Rennison 3 years ago
commit 650d5e014e

@ -317,7 +317,6 @@ jobs:
liblzma-dev \
liblzo2-dev \
libsdl2-dev \
libxdg-basedir-dev \
lsb-release \
zlib1g-dev \
# EOF
@ -496,6 +495,29 @@ jobs:
cd build-x64
../os/macosx/notarize.sh
- name: Build zip
run: |
cd build-x64
pushd _CPack_Packages/*/Bundle/openttd-*/
# Remove the Applications symlink from the staging folder
rm -f Applications
# Remove the original dmg built by CPack to avoid a conflict when resolving
# the zip_filename variable below
rm -f ../*.dmg
zip_filename=(../openttd-*)
# Package up the existing, notarised .app into a zip file
zip -r -9 ${zip_filename}.zip OpenTTD.app
popd
# Now move it into place to be uploaded
mv _CPack_Packages/*/Bundle/openttd-*.zip bundles/
- name: Store bundles
uses: actions/upload-artifact@v2
with:

@ -1,4 +1,4 @@
FROM emscripten/emsdk
FROM emscripten/emsdk:2.0.10
COPY emsdk-liblzma.patch /
RUN cd /emsdk/upstream/emscripten && patch -p1 < /emsdk-liblzma.patch

@ -56,3 +56,13 @@ cat <<EOF > notarize.json
EOF
gon notarize.json
app_filename=(_CPack_Packages/*/Bundle/openttd-*/OpenTTD.app)
if [ "${app_filename}" = "_CPack_Packages/*/Bundle/openttd-*/OpenTTD.app" ]; then
echo "No .app found in the _CPack_Packages directory, skipping stapling."
exit 0
fi;
# Now staple the ticket to the .app
xcrun stapler staple "${app_filename[0]}"

@ -1424,7 +1424,8 @@ struct AIDebugWindow : public Window {
this->SetWidgetLoweredState(WID_AID_MATCH_CASE_BTN, this->case_sensitive_break_check);
this->SetWidgetDisabledState(WID_AID_SETTINGS, ai_debug_company == INVALID_COMPANY);
this->SetWidgetDisabledState(WID_AID_RELOAD_TOGGLE, ai_debug_company == INVALID_COMPANY || (ai_debug_company == OWNER_DEITY && !UserIsAllowedToChangeGameScript()));
extern CompanyID _local_company;
this->SetWidgetDisabledState(WID_AID_RELOAD_TOGGLE, ai_debug_company == INVALID_COMPANY || ai_debug_company == _local_company || (ai_debug_company == OWNER_DEITY && !UserIsAllowedToChangeGameScript()));
this->SetWidgetDisabledState(WID_AID_CONTINUE_BTN, ai_debug_company == INVALID_COMPANY ||
(ai_debug_company == OWNER_DEITY ? !Game::IsPaused() : !AI::IsPaused(ai_debug_company)));
}

@ -883,9 +883,16 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
}
case CCA_NEW_AI: { // Make a new AI company
if (company_id != INVALID_COMPANY && company_id >= MAX_COMPANIES) return CMD_ERROR;
/* For network games, company deletion is delayed. */
if (!_networking && company_id != INVALID_COMPANY && Company::IsValidID(company_id)) return CMD_ERROR;
if (!(flags & DC_EXEC)) return CommandCost();
if (company_id != INVALID_COMPANY && (company_id >= MAX_COMPANIES || Company::IsValidID(company_id))) return CMD_ERROR;
/* For network game, just assume deletion happened. */
assert(company_id == INVALID_COMPANY || !Company::IsValidID(company_id));
Company *c = DoStartupNewCompany(DSNC_AI, company_id);
if (c != nullptr) {
NetworkServerNewCompany(c, nullptr);
@ -898,6 +905,9 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
CompanyRemoveReason reason = (CompanyRemoveReason)GB(p1, 24, 8);
if (reason >= CRR_END) return CMD_ERROR;
/* We can't delete the last existing company in singleplayer mode. */
if (!_networking && Company::GetNumItems() == 1) return CMD_ERROR;
Company *c = Company::GetIfValid(company_id);
if (c == nullptr) return CMD_ERROR;

@ -158,7 +158,7 @@ DEF_CONSOLE_HOOK(ConHookNeedNetwork)
}
/**
* Check whether we are in single player mode.
* Check whether we are in singleplayer mode.
* @return True when no network is active.
*/
DEF_CONSOLE_HOOK(ConHookNoNetwork)
@ -1317,7 +1317,8 @@ DEF_CONSOLE_CMD(ConReloadAI)
return true;
}
if (Company::IsHumanID(company_id)) {
/* In singleplayer mode the player can be in an AI company, after cheating or loading network save with an AI in first slot. */
if (Company::IsHumanID(company_id) || company_id == _local_company) {
IConsoleWarning("Company is not controlled by an AI.");
return true;
}
@ -1354,6 +1355,7 @@ DEF_CONSOLE_CMD(ConStopAI)
return true;
}
/* In singleplayer mode the player can be in an AI company, after cheating or loading network save with an AI in first slot. */
if (Company::IsHumanID(company_id) || company_id == _local_company) {
IConsoleWarning("Company is not controlled by an AI.");
return true;

@ -296,7 +296,7 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner)
if (_networking) NetworkClientsToSpectators(old_owner);
if (old_owner == _local_company) {
/* Single player cheated to AI company.
* There are no spectators in single player, so we must pick some other company. */
* There are no spectators in singleplayer mode, so we must pick some other company. */
assert(!_networking);
Backup<CompanyID> cur_company2(_current_company, FILE_LINE);
for (const Company *c : Company::Iterate()) {
@ -651,7 +651,7 @@ static void CompanyCheckBankrupt(Company *c)
default:
case 10: {
if (!_networking && _local_company == c->index) {
/* If we are in offline mode, leave the company playing. Eg. there
/* If we are in singleplayer mode, leave the company playing. Eg. there
* is no THE-END, otherwise mark the client as spectator to make sure
* he/she is no long in control of this company. However... when you
* join another company (cheat) the "unowned" company can bankrupt. */
@ -2397,7 +2397,7 @@ CommandCost CmdBuyCompany(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
/* Disable takeovers when not asked */
if (!HasBit(c->bankrupt_asked, _current_company)) return CMD_ERROR;
/* Disable taking over the local company in single player */
/* Disable taking over the local company in singleplayer mode */
if (!_networking && _local_company == c->index) return CMD_ERROR;
/* Do not allow companies to take over themselves */

@ -113,7 +113,7 @@ struct EndGameWindow : EndGameHighScoreBaseWindow {
this->window_number = SP_MULTIPLAYER;
this->rank = SaveHighScoreValueNetwork();
} else {
/* in single player _local company is always valid */
/* in singleplayer mode _local company is always valid */
const Company *c = Company::Get(_local_company);
this->window_number = SP_CUSTOM;
this->rank = SaveHighScoreValue(c);

@ -748,6 +748,7 @@ STR_SMALLMAP_LEGENDA_DOCK :{TINY_FONT}{BLA
STR_SMALLMAP_LEGENDA_ROUGH_LAND :{TINY_FONT}{BLACK}Ruw land
STR_SMALLMAP_LEGENDA_GRASS_LAND :{TINY_FONT}{BLACK}Grasland
STR_SMALLMAP_LEGENDA_BARE_LAND :{TINY_FONT}{BLACK}Braakliggend land
STR_SMALLMAP_LEGENDA_RAINFOREST :{TINY_FONT}{BLACK}Regenwoud
STR_SMALLMAP_LEGENDA_FIELDS :{TINY_FONT}{BLACK}Akkers
STR_SMALLMAP_LEGENDA_TREES :{TINY_FONT}{BLACK}Bomen
STR_SMALLMAP_LEGENDA_ROCKS :{TINY_FONT}{BLACK}Rotsen
@ -1836,6 +1837,7 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Weet je
# Cheat window
STR_CHEATS :{WHITE}Valsspelen
STR_CHEATS_TOOLTIP :{BLACK}Keuzevakjes geven aan of je deze manier van valsspelen eerder hebt gebruikt
STR_CHEATS_NOTE :{BLACK}Opmerking: al deze instellingen worden opgeslagen in het opgeslagen spel
STR_CHEAT_MONEY :{LTBLUE}Kapitaal vergroten met {CURRENCY_LONG}
STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Spelen als bedrijf: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magische bulldozer (industrieën en andere onverplaatsbare objecten verwijderen): {ORANGE}{STRING}
@ -2352,6 +2354,7 @@ STR_JOIN_WAYPOINT_CAPTION :{WHITE}Routepun
STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Los routepunt bouwen
# Generic toolbar
STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE :{BLACK}Momenteel uitgeschakeld omdat er geen voertuigen zijn voor deze infrastructuur
# Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Spoorwegen bouwen
@ -2629,6 +2632,7 @@ STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}Bedrijf
# Land area window
STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}Landinformatie
STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP :{BLACK}Centreer het hoofdscherm op de locatie van de tegel. Ctrl+klik opent een nieuw venster op de locatie van de tegel.
STR_LAND_AREA_INFORMATION_COST_TO_CLEAR_N_A :{BLACK}Sloopkosten: {LTBLUE}niet mogelijk
STR_LAND_AREA_INFORMATION_COST_TO_CLEAR :{BLACK}Sloopkosten: {RED}{CURRENCY_LONG}
STR_LAND_AREA_INFORMATION_REVENUE_WHEN_CLEARED :{BLACK}Opbrengst bij verwijdering: {LTBLUE}{CURRENCY_LONG}
@ -3099,6 +3103,7 @@ STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Schakel
# Sign window
STR_EDIT_SIGN_CAPTION :{WHITE}Wijzig tekst van bord
STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}Centreer het hoofdscherm op de locatie van het sein. Ctrl+klik opent een nieuw venster op de locatie van het sein.
STR_EDIT_SIGN_NEXT_SIGN_TOOLTIP :{BLACK}Ga naar volgende bord
STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Ga naar vorige bord
@ -3127,7 +3132,7 @@ STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}Stad gro
STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}Stad groeit iedere {ORANGE}{COMMA}{BLACK}{NBSP}dag{P "" en} (gefinancierd)
STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}Stad groeit {RED}niet{BLACK}
STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Geluidslimiet in stad: {ORANGE}{COMMA}{BLACK} max: {ORANGE}{COMMA}
STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Centreer het scherm op de locatie van de stad. Ctrl+klik opent een nieuw kijkvenster op de locatie van de stad
STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Centreer het hoofdscherm op de locatie van de stad. Ctrl+klik opent een nieuw kijkvenster op de locatie van de stad
STR_TOWN_VIEW_LOCAL_AUTHORITY_BUTTON :{BLACK}Gemeente
STR_TOWN_VIEW_LOCAL_AUTHORITY_TOOLTIP :{BLACK}Geef informatie over de gemeente weer
STR_TOWN_VIEW_RENAME_TOOLTIP :{BLACK}Hiermee hernoem je deze plaats
@ -3293,7 +3298,7 @@ STR_CARGO_RATING_EXCELLENT :Uitstekend
STR_CARGO_RATING_OUTSTANDING :Voortreffelijk
############ range for rating ends
STR_STATION_VIEW_CENTER_TOOLTIP :{BLACK}Centreer het scherm op de locatie van het station. Ctrl+klik opent een nieuw venster op de locatie van het station
STR_STATION_VIEW_CENTER_TOOLTIP :{BLACK}Centreer het hoofdscherm op de locatie van het station. Ctrl+klik opent een nieuw venster op de locatie van het station
STR_STATION_VIEW_RENAME_TOOLTIP :{BLACK}Station hernoemen
STR_STATION_VIEW_SCHEDULED_TRAINS_TOOLTIP :{BLACK}Geef alle treinen weer die dit station in hun opdrachtenlijst hebben
@ -3308,9 +3313,9 @@ STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Voorkom
# Waypoint/buoy view window
STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOINT}
STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Scherm centreren op routepunt. Ctrl+klik opent nieuw venster op locatie van routepunt.
STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Centreer het hoofdscherm op het routepunt. Ctrl+klik opent nieuw venster op locatie van routepunt.
STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Naam routepunt aanpassen
STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Hoofdscherm centreren op locatie van boei. Ctrl+klik opent een nieuw venster op de locatie van de boei.
STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Centreer het hoofdscherm op de locatie van de boei. Ctrl+klik opent een nieuw venster op de locatie van de boei.
STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Naam van boei aanpassen
STR_EDIT_WAYPOINT_NAME :{WHITE}Naam routepunt aanpassen
@ -3430,7 +3435,7 @@ STR_INDUSTRY_DIRECTORY_FILTER_NONE :Geen
STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY}
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Productie vorige maand:
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% vervoerd)
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centreer het scherm op de locatie van de industrie. Ctrl+klik opent een nieuws venster op de locatie van de industrie
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centreer het hoofdscherm op de locatie van de industrie. Ctrl+klik opent een nieuws venster op de locatie van de industrie
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Productieniveau: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}De industrie heeft een dreigende sluiting aangekondigd!
@ -3662,10 +3667,10 @@ STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Hiermee
STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Hiermee koop je een kopie van een schip. Klik op deze knop en dan op een schip binnen of buiten het dok. Ctrl+klik deelt de orders. Shift+klik geeft de verwachte kosten zonder te kopen.
STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Hiermee koop je een kopie van een vliegtuig. Klik op deze knop en dan op een vliegtuig binnen of buiten de hangar. Ctrl+klik deelt de orders. Shift+klik geeft de verwachte kosten zonder te kopen.
STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Scherm centreren op remise. Ctrl+klik opent een nieuw scherm op locatie van remise.
STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centreer het scherm op de locatie van de garage. Ctrl+klik opent een nieuw scherm op de locatie van de garage
STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Centreer het hoofdscherm op de remise. Ctrl+klik opent een nieuw scherm op locatie van remise.
STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centreer het hoofdscherm op de locatie van de garage. Ctrl+klik opent een nieuw scherm op de locatie van de garage
STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Centreer hoofdscherm op de locatie van het dok. Ctrl+klik opent een nieuw scherm op de locatie van het dok
STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Scherm centreren op hangar. Ctrl+klik opent een nieuw venster op de hangarlocatie.
STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centreer het hoofdscherm op de hangar. Ctrl+klik opent een nieuw venster op de hangarlocatie.
STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TOOLTIP :{BLACK}Geef een lijst van alle treinen met dit depot in hun orders
STR_DEPOT_VEHICLE_ORDER_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Geef een lijst van alle wegvoertuigen met deze garage in hun orders
@ -3755,6 +3760,10 @@ STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}De te ve
# Vehicle view
STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE}
STR_VEHICLE_VIEW_TRAIN_CENTER_TOOLTIP :{BLACK}Centreer het hoofdscherm op de locatie van de trein. Met dubbelklik volg je de trein op het hoofdscherm. Ctrl+klik opent een nieuw scherm op de locatie van de trein.
STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}Centreer het hoofdscherm op de locatie van het voertuig. Met dubbelklik volg je het voertuig op het hoofdscherm. Ctrl+klik opent een nieuw venster op de locatie van het voertuig
STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Centreer het hoofdscherm op de locatie van het schip. Met dubbelklik volg je het schip op het hoofdscherm. Ctrl+klik opent een nieuw venster op de locatie van het schip
STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Centreer het hoofdscherm op de locatie van het vliegtuig. Met dubbelklik volg je het vliegtuig op het hoofdscherm. Ctrl+klik opent een nieuw scherm op de locatie van het vliegtuig.
STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Stuur trein naar depot. Ctrl+klik voor alleen onderhoud
STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Stuur wegvoertuig naar garage. Ctrl+klik voor alleen onderhoud
@ -3763,10 +3772,10 @@ STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Stuur vl
STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Hiermee koop je een kopie van deze trein, inclusief wagons. Ctrl+klik deelt de orders. Shift+klik geeft de verwachte kosten zonder te kopen.
STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Hiermee koop je een kopie van dit wegvoertuig. Ctrl+klik deelt de orders. Shift+klik geeft de verwachte kosten zonder te kopen.
STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Hiermee koop je een kopie gekocht van dit schip. Ctrl+klik deelt de orders. Shift+klik geeft de verwachte kosten zonder te kopen.
STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Hiermee koop je een kopie van dit schip. Ctrl+klik deelt de orders. Shift+klik geeft de verwachte kosten zonder te kopen.
STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Hiermee koop je een kopie van dit vliegtuig. Ctrl+klik deelt de orders. Shift+klik geeft de verwachte kosten zonder te kopen.
STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Forceer trein verder te rijden zonder te wachten op een groen sein
STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Forceer trein om verder te rijden zonder te wachten op een groen sein
STR_VEHICLE_VIEW_TRAIN_REFIT_TOOLTIP :{BLACK}Trein ombouwen voor een ander vrachttype
STR_VEHICLE_VIEW_ROAD_VEHICLE_REFIT_TOOLTIP :{BLACK}Wegvoertuig ombouwen voor een ander vrachttype
@ -3786,7 +3795,12 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Details
STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Details van schip weergeven
STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Details van vliegtuig weergeven
STR_VEHICLE_VIEW_TRAIN_STATUS_START_STOP_TOOLTIP :{BLACK}Huidige treinactie - klik om de trein te starten of stoppen
STR_VEHICLE_VIEW_ROAD_VEHICLE_STATUS_START_STOP_TOOLTIP :{BLACK}Huidige voertuigactie - klik om het voertuig te starten of stoppen
STR_VEHICLE_VIEW_SHIP_STATE_STATUS_STOP_TOOLTIP :{BLACK}Huidige scheepsactie - klik om het schip te starten of stoppen
STR_VEHICLE_VIEW_AIRCRAFT_STATUS_START_STOP_TOOLTIP :{BLACK}Huidige vliegtuigactie - klik om het vliegtuig te starten of stoppen
STR_VEHICLE_VIEW_ORDER_LOCATION_TOOLTIP :{BLACK}Centreer het hoofdscherm op het doel van de order. Ctrl+klik opent een nieuw venster op het doel van de order.
# Messages in the start stop button in the vehicle view
STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}In- en uitladen
@ -4014,6 +4028,7 @@ STR_ORDER_REFIT_STOP_ORDER :(Ombouwen naar
STR_ORDER_STOP_ORDER :(Stop)
STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING}
STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Kan station niet gebruiken){POP_COLOUR} {STRING} {STATION} {STRING}
STR_ORDER_IMPLICIT :(Impliciet)
@ -4466,6 +4481,8 @@ STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Verkeerd depot-
STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} is te lang na het vervangen
STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Geen automatische regels voor vervangen/vernieuwen toegepast
STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(onvoldoende geld)
STR_ERROR_AUTOREPLACE_INCOMPATIBLE_CARGO :{WHITE}Nieuw voertuig is niet geschikt voor {STRING}
STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}Nieuw voertuig kan niet ombouwen in order {NUM}
# Rail construction errors
STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Onmogelijke spoorcombinatie

File diff suppressed because it is too large Load Diff

@ -698,7 +698,7 @@ STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLAC
STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}.
STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Liikemies
STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Yrittäjä
STR_HIGHSCORE_PERFORMANCE_TITLE_INDUSTRIALIST :Teollisuusmies
STR_HIGHSCORE_PERFORMANCE_TITLE_INDUSTRIALIST :Teollisuudenharjoittaja
STR_HIGHSCORE_PERFORMANCE_TITLE_CAPITALIST :Kapitalisti
STR_HIGHSCORE_PERFORMANCE_TITLE_MAGNATE :Magnaatti
STR_HIGHSCORE_PERFORMANCE_TITLE_MOGUL :Moguli
@ -1622,10 +1622,10 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineaarinen
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Puiden istutus pelissä: {STRING}
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Määrittää puiden sattumanvaraisen luomisen. Tämä voi vaikuttaa teollisuuslaitoksiin, jotka ovat riippuvaisia puiden kasvamisesta, esimerkiksi sahat.
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_SPREAD :Puut kasvavat, mutta eivät leviä {RED}(rikkoo sahan)
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_SPREAD :Puut kasvavat, mutta eivät leviä {RED}(rikkoo subtrooppisen sahan)
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_RAINFOREST :Puut kasvavat, mutta leviävät vain sademetsissä
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_ALL :Puut kasvavat ja leviävät kaikkialla
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_GROWTH_NO_SPREAD :Puut eivät kasva eivätkä leviä {RED}(rikkoo sahan)
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_GROWTH_NO_SPREAD :Puut eivät kasva eivätkä leviä {RED}(rikkoo subtrooppisen sahan)
STR_CONFIG_SETTING_TOOLBAR_POS :Päätyökalupalkin sijainti: {STRING}
STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Ruudun yläreunassa olevan työkalupalkin sijainti vaakasuunnassa

File diff suppressed because it is too large Load Diff

@ -1618,6 +1618,7 @@ STR_CONFIG_SETTING_ENDING_YEAR :Játék végi p
STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :A játék ebben az évben ér véget pontozás szempontjából. Ennek az évnek a végén a vállalat teljesítménypontszáma rögzítésre kerül, és adott esetben megjelenik a rekord táblán, de a játékosok ezután folytathatják a játékot.{}Ha ez a kezdő év elé van állítva, akkor a rekord tábla sosem jelenik meg.
STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM}
STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Soha
STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Eredeti
STR_CONFIG_SETTING_ALLOW_SHARES :Más vállalatokból lehet részvényt vásárolni: {STRING}
STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Bekapcsolva engedélyezi más vállalatok részvényeinek megvásárlását. A részvények csak akkor elérhetőek, ha a vállalat elért egy bizonyos kort
STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Vállalatok minimális életkora részvénykibocsátáshoz: {STRING}
@ -2254,6 +2255,7 @@ STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_1 :A játék tová
STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_2 :A játék továbbra is szünetel ({STRING}, {STRING})
STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :A játék továbbra is szünetel ({STRING}, {STRING}, {STRING})
STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :A játék továbbra is szünetel ({STRING}, {STRING}, {STRING}, {STRING})
STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_5 :A játék továbbra is szünetel ({STRING}, {STRING}, {STRING}, {STRING}, {STRING})
STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :A játék folytatódik ({STRING})
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :játékosok száma
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :kapcsolódó kliensek
@ -2658,6 +2660,7 @@ STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}Válaszd
# Land area window
STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}Terület-információ
STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP :{BLACK}A főnézetet a csempére állítja. Ctrl+Klikk megnyit egy új főnézetet a csempén.
STR_LAND_AREA_INFORMATION_COST_TO_CLEAR_N_A :{BLACK}{LTBLUE}Nem lehet lerombolni
STR_LAND_AREA_INFORMATION_COST_TO_CLEAR :{BLACK}A megtisztítás költsége: {RED}{CURRENCY_LONG}
STR_LAND_AREA_INFORMATION_REVENUE_WHEN_CLEARED :{BLACK}Bevétel lerombolás esetén: {LTBLUE}{CURRENCY_LONG}
@ -3404,7 +3407,8 @@ STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}SZH áth
STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}A vállalat székházának újraépítése máshol a vállalat értékének 1%-áért. Shift+kattintással megmutatja a becsült költséget a székhely áthelyezése nélkül
STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Részletek
STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Részletes információk megtekintése az infrastruktúráról
STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Pénz adományozása
STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Adományozz pénzt
STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Utalj pénzt ennek a vállalatnak
STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Új arc
STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Új arc választása az elnöknek
@ -4042,6 +4046,7 @@ STR_ORDER_REFIT_STOP_ORDER :(átalakít err
STR_ORDER_STOP_ORDER :(megáll)
STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING}
STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Az állomás nem használható){POP_COLOUR} {STRING} {STATION} {STRING}
STR_ORDER_IMPLICIT :(Automata)
@ -5122,6 +5127,7 @@ STR_FORMAT_BUOY_NAME_SERIAL :{TOWN} {COMMA}.
STR_FORMAT_BUOY_NAME_SERIAL.ba :{TOWN} {COMMA}. sz. Bóján
STR_FORMAT_COMPANY_NUM :({COMMA}. vállalat)
STR_FORMAT_GROUP_NAME :{COMMA} csoport
STR_FORMAT_GROUP_VEHICLE_NAME :{GROUP} #{COMMA}
STR_FORMAT_INDUSTRY_NAME :{TOWN}i {STRING}
STR_FORMAT_WAYPOINT_NAME :{TOWN} Ellenőrző pont
STR_FORMAT_WAYPOINT_NAME.ba :{TOWN} Ellenőrző ponton

@ -230,8 +230,8 @@ STR_LIST_FILTER_OSKTITLE :{BLACK}검색
STR_LIST_FILTER_TOOLTIP :{BLACK}검색할 키워드를 입력하세요
STR_TOOLTIP_GROUP_ORDER :{BLACK}그룹화 순서를 선택하세요.
STR_TOOLTIP_SORT_ORDER :{BLACK}정렬 방법을 선택하십시오. (내림차순/오름차순)
STR_TOOLTIP_SORT_CRITERIA :{BLACK}정렬 기준을 선택하십시오.
STR_TOOLTIP_SORT_ORDER :{BLACK}정렬 방법을 선택하세요 (내림차순/오름차순)
STR_TOOLTIP_SORT_CRITERIA :{BLACK}정렬 기준을 선택하세요
STR_TOOLTIP_FILTER_CRITERIA :{BLACK}검색 기준 선택
STR_BUTTON_SORT_BY :{BLACK}정렬
STR_BUTTON_RENAME :{BLACK}이름 바꾸기
@ -874,9 +874,9 @@ STR_NEWS_PLANE_USES_TOO_SHORT_RUNWAY :{WHITE}{VEHICLE
STR_NEWS_VEHICLE_IS_GETTING_OLD :{WHITE}{VEHICLE} : 차량이 낡았습니다
STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD :{WHITE}{VEHICLE} : 차량이 매우 낡았습니다
STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD_AND :{WHITE}{VEHICLE} : 차량이 매우 낡아 교체가 시급합니다
STR_NEWS_TRAIN_IS_STUCK :{WHITE}{VEHICLE} : 다음 목적지로 가는 경로를 찾을 수 없습니다.
STR_NEWS_VEHICLE_IS_LOST :{WHITE}{VEHICLE} : 아직 다음 목적지에 도착하지 못했습니다.
STR_NEWS_VEHICLE_IS_UNPROFITABLE :{WHITE}{VEHICLE}의 작년 이익이 {CURRENCY_LONG} 입니다.
STR_NEWS_TRAIN_IS_STUCK :{WHITE}{VEHICLE} : 다음 목적지로 가는 경로를 찾을 수 없습니다
STR_NEWS_VEHICLE_IS_LOST :{WHITE}{VEHICLE} : 아직 다음 목적지에 도착하지 못했습니다
STR_NEWS_VEHICLE_IS_UNPROFITABLE :{WHITE}{VEHICLE}의 작년 이익이 {CURRENCY_LONG} 입니다
STR_NEWS_AIRCRAFT_DEST_TOO_FAR :{WHITE}거리가 너무 멀어서 {VEHICLE}이 다음 목적지에 도착할 수 없습니다
STR_NEWS_TRAIN_OVERSHOT_STATION :{WHITE}{VEHICLE} : 속력이 너무 빨라서 {STRING}에 멈추지 못했습니다
@ -967,7 +967,7 @@ 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_DROPDOWN_TOOLTIP :{BLACK}도시 이름 스타일을 선택하십시오.
STR_GAME_OPTIONS_TOWN_NAMES_DROPDOWN_TOOLTIP :{BLACK}도시 이름 스타일을 선택하세요
############ start of townname region
STR_GAME_OPTIONS_TOWN_NAME_ORIGINAL_ENGLISH :영국 식 (기본)
@ -1005,13 +1005,13 @@ STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_12_MONTHS :12개월마다
############ end of autosave dropdown
STR_GAME_OPTIONS_LANGUAGE :{BLACK}언어
STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}사용하실 언어를 선택하세요.
STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}사용할 언어를 선택하세요
STR_GAME_OPTIONS_FULLSCREEN :{BLACK}전체화면
STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}OpenTTD를 전체화면으로 플레이하려면 클릭하세요.
STR_GAME_OPTIONS_RESOLUTION :{BLACK}화면 해상도
STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}사용하실 화면 해상도를 선택하세요.
STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}사용할 화면 해상도를 선택하세요
STR_GAME_OPTIONS_RESOLUTION_OTHER :기타
STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}인터페이스 크기
@ -1022,23 +1022,23 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :2배 크기
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :4배 크기
STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}글씨 크기
STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}인터페이스에서 사용할 글씨 크기를 선택합니다.
STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}인터페이스에서 사용할 글씨 크기를 선택하세요
STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :기본 크기
STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :2배 크기
STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :4배 크기
STR_GAME_OPTIONS_BASE_GRF :{BLACK}기본 그래픽 세트
STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}사용하실 기본 그래픽을 선택하세요.
STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}게임에 사용할 기본 그래픽 세트를 선택하세요
STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM}개 파일 손실
STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}기본 그래픽 세트에 대한 추가 정보를 봅니다.
STR_GAME_OPTIONS_BASE_SFX :{BLACK}기본 효과음 세트
STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}게임에 사용할 기본 효과음 세트를 선택하십시오.
STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}게임에 사용할 기본 효과음 세트를 선택하세요
STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}기본 효과음 세트에 대한 추가 정보를 봅니다.
STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}기본 배경 음악 세트
STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}사용하실 기본 배경 음악 세트를 선택하세요.
STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}게임에 사용할 기본 배경 음악 세트를 선택하세요
STR_GAME_OPTIONS_BASE_MUSIC_STATUS :{RED}{NUM}개의 파일이 손상되었습니다.
STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}기본 배경 음악 세트에 대한 추가 정보를 봅니다.
@ -1205,7 +1205,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_HELPTEXT :회사가 유발하는 소음과 환경 파괴가 회사에 대한 도시의 평가치와 향후 해당 지역에서 건설하는 행동에 얼마나 영향을 미칠지 선택하십시오.
STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :회사가 유발하는 소음과 환경 파괴가 회사에 대한 도시의 평가치와 향후 해당 지역에서 건설하는 행동에 얼마나 영향을 미칠지 선택하세요
STR_CONFIG_SETTING_MONEY_CHEAT_MULTIPLAYER :멀티플레이 유저들이 돈 치트를 사용할 수 있게 허용: {STRING}
STR_CONFIG_SETTING_MONEY_CHEAT_MULTIPLAYER_HELPTEXT :이 설정을 켜면, 관리자가 아닌 멀티플레이 유저가 돈 치트를 사용할 수 있습니다. 돈 치트는 싱글플레이 모드에서는 언제나 사용 가능하며, 서버 관리자는 멀티플레이 모드에서도 사용 가능합니다.
@ -1232,11 +1232,11 @@ STR_CONFIG_SETTING_TILE_LENGTH :{COMMA}칸
STR_CONFIG_SETTING_SMOKE_AMOUNT :차량의 매연 또는 전기 스파크의 양: {STRING}
STR_CONFIG_SETTING_SMOKE_AMOUNT_HELPTEXT :차량에서 연기나 전기 스파크가 얼마나 많이 일어나는지 설정합니다.
STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL :열차 가속 모델: {STRING}
STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_HELPTEXT :열차 가속 물리 모델을 선택하십시오. "오리지널" 모델은 언덕을 오를 때 무조건 속력이 감소합니다. "현실적" 모델은 열차의 길이나 기관차의 견인력 등의 구성 속성에 따라 언덕과 커브에서 속력이 감소합니다.
STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_HELPTEXT :열차 가속에 사용할 물리 모델을 선택합니다. "오리지널" 모델은 언덕을 오를 때 무조건 속력이 감소합니다. "현실적" 모델은 열차의 길이나 기관차의 견인력 등의 구성 속성에 따라 언덕과 커브에서 속력이 감소합니다.
STR_CONFIG_SETTING_TRAIN_BRAKING_MODEL :열차 감속 모델: {STRING}
STR_CONFIG_SETTING_TRAIN_BRAKING_MODEL_HELPTEXT :열차 감속에 사용할 물리 모델을 선택합니다. "오리지널" 모델을 사용하면 열차가 즉시 멈춥니다. "현실적" 모델을 사용하면, 열차가 정지하려면 일정 거리가 필요해지고 그에 따라 앞쪽 선로를 미리 예약하게 되며, 열차가 즉시 멈출 수 없게 됩니다.{}{}"현실적" 모델은 신호 및 선로 구조 디자인에 많은 영향을 미치므로, 이 기능은 초심자에게 적합하지 않은 고급 기능입니다. 특히 사전 신호기와 양방향 신호기는 사용할 수 없으며, 모든 신호기는 경로 신호기를 사용해야 합니다.
STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL :자동차/전차 가속 모델: {STRING}
STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL_HELPTEXT :자동차/전차의 가속 물리 모델을 선택하십시오. "오리지널" 모델은 언덕을 오를 때 무조건 속력이 감소합니다. "현실적" 모델은 차량의 견인력 등 차량의 다양한 속성에 따라 언덕을 오를 때 속력이 감소합니다.
STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL_HELPTEXT :자동차/전차의 가속 물리 모델을 선택하세요. "오리지널" 모델은 언덕을 오를 때 무조건 속력이 감소합니다. "현실적" 모델은 차량의 견인력 등 차량의 다양한 속성에 따라 언덕을 오를 때 속력이 감소합니다.
STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS :경사도 설정 (열차용): {STRING}
STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :열차에 적용시킬 경사도를 설정합니다. 값이 높을수록 열차가 언덕을 올라가는데 더 힘이 듭니다.
STR_CONFIG_SETTING_PERCENTAGE :{COMMA}%
@ -1330,7 +1330,7 @@ STR_CONFIG_SETTING_DRIVE_THROUGH_TRAIN_DEPOT :드라이브스
STR_CONFIG_SETTING_DRIVE_THROUGH_TRAIN_DEPOT_HELPTEXT :드라이브스루 차량기지를 사용합니다. 열차는 연속적으로 배치된 차량기지 사이를 이동할 수 있으며, 중간에 차량기지가 있어도 됩니다. YAPF 경로 탐색을 사용해야 합니다.
STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :시작시 회사 색상: {STRING}
STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :새 회사에서 사용할 색상을 선택하세요.
STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :새 회사에서 사용할 색상을 선택합니다.
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :옛날 공항을 사라지지 않고 계속 만들 수 있게 함: {STRING}
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :이 설정을 켜면, 소형 공항을 포함한 모든 공항 종류를 도입 이후에 계속 사용할 수 있게 됩니다.
@ -1436,14 +1436,14 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :매우 거칠
STR_CONFIG_SETTING_VARIETY :산세 험준도: {STRING}
STR_CONFIG_SETTING_VARIETY_HELPTEXT :(천지창조 전용) 지도가 산지와 평지를 모두 갖도록 만들 것인 지를 결정합니다. 이 설정은 지형을 더 평평하게 만드므로, 다른 설정은 '산'으로 설정하시기 바랍니다.
STR_CONFIG_SETTING_RIVER_AMOUNT :강의 양: {STRING}
STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :강을 얼마나 만들지 선택하십시오.
STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :강을 얼마나 만들지 선택하세요
STR_CONFIG_SETTING_TREE_PLACER :나무 배치 알고리즘: {STRING}
STR_CONFIG_SETTING_TREE_PLACER_HELPTEXT :지도의 나무 분포 형식을 선택하십시오. '오리지널'을 선택하면 나무가 고르게 분포되고, '향상됨'을 선택하면 나무가 군락을 이루게 됩니다.
STR_CONFIG_SETTING_TREE_PLACER_HELPTEXT :지도의 나무 분포 형식을 선택하세요. '오리지널'을 선택하면 나무가 고르게 분포되고, '향상됨'을 선택하면 나무가 군락을 이루게 됩니다.
STR_CONFIG_SETTING_TREE_PLACER_NONE :없음
STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :오리지널
STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :향상됨
STR_CONFIG_SETTING_ROAD_SIDE :자동차 통행 방향: {STRING}
STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :통행방향을 선택하세요.
STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :통행 방향을 선택합니다
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :높이맵 회전: {STRING}
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :반시계방향
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :시계방향
@ -1535,7 +1535,7 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :오른쪽 클
STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :창 내부를 오른쪽 클릭하여 창을 닫습니다. 오른쪽 클릭으로 도움말 표시 설정을 해제해야 합니다!
STR_CONFIG_SETTING_AUTOSAVE :자동 저장: {STRING}
STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :게임을 자동으로 저장할 간격을 선택하십시오.
STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :게임을 자동으로 저장할 간격을 선택하세요
STR_CONFIG_SETTING_AUTOSAVE_ON_NETWORK_DISCONNECT :네트워크 연결이 끊어지면 자동 저장: {STRING}
STR_CONFIG_SETTING_AUTOSAVE_ON_NETWORK_DISCONNECT_HELPTEXT :이 설정을 켜면 서버와의 연결이 끊어졌을 때 게임을 자동으로 저장합니다.
@ -2320,7 +2320,7 @@ STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}비밀
STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}서버에 공개적으로 접근하는 것을 막고 싶을 때 비밀번호를 걸어 보호합니다.
STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}공개 여부
STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}공개된 게임(인터넷)과 비공개된 게임(LAN) 중에서 선택하십시오.
STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}공개된 게임(인터넷)과 비공개된 게임(LAN) 중에서 선택하세요
STR_NETWORK_START_SERVER_UNADVERTISED :아니요
STR_NETWORK_START_SERVER_ADVERTISED :예
STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM}명
@ -2643,7 +2643,7 @@ STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}반투
STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}화물 흐름 범례
STR_LINKGRAPH_LEGEND_ALL :{BLACK}모두
STR_LINKGRAPH_LEGEND_NONE :{BLACK}없음
STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}표시할 회사를 선택하십시오
STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}표시할 회사를 선택하세요
STR_LINKGRAPH_LEGEND_COMPANY_TOOLTIP :{BLACK}{STRING}{}{COMPANY}
# Linkgraph legend window and linkgraph legend in smallmap
@ -3063,7 +3063,7 @@ STR_ERROR_INVALID_SIGNAL :{WHITE}유효
# Bridge selection window
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}철교 선택
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}다리 종류를 선택하십시오
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}다리 종류를 선택하세요
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}다리 건설 - 원하는 다리 종류를 선택하세요
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING}{} {VELOCITY} {WHITE}{CURRENCY_LONG}
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING}{} {VELOCITY}
@ -3277,7 +3277,7 @@ STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}임의
# Fund new industry window
STR_FUND_INDUSTRY_CAPTION :{WHITE}새 산업시설 건설
STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}목록에서 적당한 산업시설을 선택하십시오
STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}목록에서 적당한 산업시설을 선택하세요
STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :무작위 산업시설 건설
STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}무작위로 산업시설을 건설합니다
STR_FUND_INDUSTRY_INDUSTRY_BUILD_COST :{BLACK}가격: {YELLOW}{CURRENCY_LONG}
@ -3538,7 +3538,7 @@ STR_SAVELOAD_OSKTITLE :{BLACK}게임
# World generation
STR_MAPGEN_WORLD_GENERATION_CAPTION :{WHITE}세계 제작
STR_MAPGEN_MAPSIZE :{BLACK}지도 크기:
STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}지도의 크기를 칸 수 기준으로 선택하십시오. 사용 가능한 지도의 칸 수는 선택한 값보다 조금 적습니다
STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}지도의 크기를 칸 수 기준으로 선택하세요. 사용 가능한 지도의 칸 수는 설정한 값보다 조금 작을 것입니다
STR_MAPGEN_BY :{BLACK}x
STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}도시의 수:
STR_MAPGEN_DATE :{BLACK}날짜:
@ -3664,7 +3664,7 @@ STR_NEWGRF_SETTINGS_INCOMPATIBLE :{RED}이 OpenTT
# NewGRF save preset window
STR_SAVE_PRESET_CAPTION :{WHITE}프리셋 저장
STR_SAVE_PRESET_LIST_TOOLTIP :{BLACK}사용 가능한 프리셋 목록입니다. 아래에 같은 이름을 복사하려면 선택하십시오
STR_SAVE_PRESET_LIST_TOOLTIP :{BLACK}사용 가능한 프리셋 목록입니다. 아래에 같은 이름을 복사하려면 선택하세요
STR_SAVE_PRESET_TITLE :{BLACK}프리셋의 이름을 입력하세요
STR_SAVE_PRESET_EDITBOX_TOOLTIP :{BLACK}저장할 프리셋에 지정할 이름입니다
STR_SAVE_PRESET_CANCEL :{BLACK}취소
@ -4569,8 +4569,8 @@ STR_REPLACE_VEHICLE_VEHICLES_IN_USE_TOOLTIP :{BLACK}이 열
STR_REPLACE_VEHICLE_AVAILABLE_VEHICLES :{YELLOW}교체할 수 있는 차량
STR_REPLACE_VEHICLE_AVAILABLE_VEHICLES_TOOLTIP :{BLACK}이 열은 교체할 수 있는 차량 목록입니다
STR_REPLACE_HELP_LEFT_ARRAY :{BLACK}교체할 기관차 종류를 선택하십시오
STR_REPLACE_HELP_RIGHT_ARRAY :{BLACK}새로 교체될 기관차를 선택하십시오
STR_REPLACE_HELP_LEFT_ARRAY :{BLACK}교체할 기관차 종류를 선택하세요
STR_REPLACE_HELP_RIGHT_ARRAY :{BLACK}새로 교체될 기관차를 선택하세요
STR_REPLACE_VEHICLES_START :{BLACK}차량 교체 시작
STR_REPLACE_VEHICLES_NOW :모든 차량을 지금 교체
@ -4786,7 +4786,7 @@ STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}변경
STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}변경 수송량: {GOLD}{CARGO_LONG}{}{BLACK}개조시 회수되는 비용: {GREEN}{CURRENCY_LONG}
STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}변경 수송량: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}개조 비용: {RED}{CURRENCY_LONG}
STR_REFIT_NEW_CAPACITY_INCOME_FROM_AIRCRAFT_REFIT :{BLACK}변경 수송량: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}개조시 회수되는 비용: {GREEN}{CURRENCY_LONG}
STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}개조할 차량을 선택하십시오. 마우스로 드래그하면 여러 개의 차량을 선택 가능합니다. 빈 곳을 클릭하면 전체를 선택합니다. CTRL+클릭하면 차량 전체를 선택할 수 있습니다
STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}개조할 차량을 선택하세요. 마우스로 드래그하면 여러 개의 차량을 선택 가능합니다. 빈 곳을 클릭하면 전체를 선택합니다. CTRL+클릭하면 차량 전체를 선택할 수 있습니다
STR_REFIT_TRAIN_LIST_TOOLTIP :{BLACK}열차가 수송할 화물의 종류를 선택하세요
STR_REFIT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}차량이 수송할 화물의 종류를 선택하세요
@ -4840,7 +4840,7 @@ STR_ORDER_DROP_CARGO_TYPE_UNLOAD :화물 종류
STR_ORDER_TOOLTIP_UNLOAD :{BLACK}선택한 목적지에서 화물을 하차할 방식을 변경합니다
STR_ORDER_REFIT :{BLACK}개조
STR_ORDER_REFIT_TOOLTIP :{BLACK}이 경로에서 열차를 어떤 화물을 받을 수 있게 개조할 것인지 선택하십시오. CTRL+클릭하면 개조 설정을 해제합니다.
STR_ORDER_REFIT_TOOLTIP :{BLACK}이 경로에서 열차를 어떤 화물을 받을 수 있게 개조할 것인지 선택하세요. CTRL+클릭하면 개조 설정을 해제합니다
STR_ORDER_REFIT_AUTO :{BLACK}개조
STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}이 경로에서 개조할 화물의 종류를 선택하세요. CTRL+클릭하면 개조 설정을 해제합니다. 개조 기능은 개조 가능한 차량에서만 사용할 수 있습니다.
STR_ORDER_DROP_REFIT_AUTO :특정 화물로

@ -195,6 +195,7 @@ STR_COLOUR_DEFAULT :Padrão
STR_UNITS_VELOCITY_IMPERIAL :{COMMA} mph
STR_UNITS_VELOCITY_METRIC :{COMMA} km/h
STR_UNITS_VELOCITY_SI :{COMMA} m/s
STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}{NBSP} blocos / dia
STR_UNITS_POWER_IMPERIAL :{COMMA}cv
STR_UNITS_POWER_METRIC :{COMMA}cv
@ -236,6 +237,7 @@ STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Seleccio
STR_BUTTON_SORT_BY :{BLACK}Ordenar por
STR_BUTTON_RENAME :{BLACK}Renomear
STR_BUTTON_CATCHMENT :{BLACK}Cobertura
STR_TOOLTIP_CATCHMENT :{BLACK}Alternar exibição da área de cobertura
STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Fechar janela
STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Título da janela - arraste isto para mover a janela
@ -312,6 +314,8 @@ STR_SORT_BY_CARGO_CAPACITY :Capacidade de C
STR_SORT_BY_RANGE :Alcance
STR_SORT_BY_POPULATION :População
STR_SORT_BY_RATING :Classificação
STR_SORT_BY_NUM_VEHICLES :Número de veículos
STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Lucro médio este ano
# Group by options for vehicle list
@ -1436,6 +1440,7 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Deixar ferramen
STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Manter as ferramentas de construção de pontes, túneis, etc. abertas após uso
STR_CONFIG_SETTING_EXPENSES_LAYOUT :Agrupar despesas na janela de finanças da empresa: {STRING}
STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Definir a disposição da janela de despesas da companhia
STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Remova automaticamente os sinais durante a construção do trilho se os sinais estiverem no caminho. Observe que isso pode potencialmente levar a acidentes de comboio.
STR_CONFIG_SETTING_SOUND_TICKER :Notícias: {STRING}
STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Reproduzir efeito sonoro para notícias resumidas
@ -1543,8 +1548,10 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Completo
STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Noticias a cores aparecem em: {STRING}
STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Ano em que os anúncios de jornal começam a ser mostrados a cores. Antes deste ano, serão mostrados a preto e branco.
STR_CONFIG_SETTING_STARTING_YEAR :Data de início: {STRING}
STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :A economia suave faz mudanças na produção com mais frequência e em etapas menores. Economia congelada impede mudanças de produção e fechamentos de indústrias. Esta configuração pode não ter efeito se os tipos de indústria forem fornecidos por um NewGRF.
STR_CONFIG_SETTING_ALLOW_SHARES :Permite comprar acções de outras empresas: {STRING}
STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Quando activo, permite a compra e venda de acções de companhias. As acções apenas estarão disponíveis quando a companhia atinge uma determinada idade.
STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Idade mínima da empresa para negociar ações: {STRING}
STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Definir a idade mínima de uma companhia a partir da qual outros jogadores poderão comprar ou vender ações da mesma.
STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Percentagem do lucro do serviço a pagar em trajectos de um transporte que alimenta outro transporte: {STRING}
STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Percentagem da receita dada a trajectos intermédios em sistemas em que um transporte alimenta outro, dando maior controlo sobre a receita
@ -1593,6 +1600,7 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linear
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Criação de árvores no decorrer do jogo: {STRING}
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Controlar o aparecimento aleatório de árvores durante o jogo. Isto poderá afectar indústrias que dependem do crescimento de árvores, como as madeireiras
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_GROWTH_NO_SPREAD :Não cresça, não espalhe {RED} (quebra a serraria)
STR_CONFIG_SETTING_TOOLBAR_POS :Posição da barra de ferramentas principal: {STRING}
STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Posição horizontal da barra de ferramentas principal no topo do ecrã
@ -1802,6 +1810,7 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Tem a c
# Cheat window
STR_CHEATS :{WHITE}Truques
STR_CHEATS_TOOLTIP :{BLACK}As caixas de verificação indicam se já usou este truque antes
STR_CHEATS_NOTE :{BLACK}Nota: qualquer uso dessas configurações será registrado pelo savegame
STR_CHEAT_MONEY :{LTBLUE}Aumentar dinheiro em {CURRENCY_LONG}
STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Jogando como empresa: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Bulldozer mágico (destrói indústrias, objectos amovíveis etc.): {ORANGE}{STRING}
@ -1953,6 +1962,8 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Entrar n
STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Renovar servidor
STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Renovar a informação do servidor
STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN :{BLACK}Search LAN
STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP :{BLACK} Pesquisa de rede local para servidores
STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Adicionar servidor
STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Adiciona um servidor à lista que será sempre verificado se existem jogos a decorrer.
STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Iniciar servidor
@ -2177,11 +2188,13 @@ STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_1 :Jogo ainda em p
STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_2 :Jogo ainda em pausa ({STRING}, {STRING})
STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :Jogo ainda em pausa ({STRING}, {STRING}, {STRING})
STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :Jogo ainda em pausa ({STRING}, {STRING}, {STRING}, {STRING})
STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_5 :Jogo ainda pausado ({STRING}, {STRING}, {STRING}, {STRING}, {STRING})
STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :Jogo a Correr ({STRING})
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :número de jogadores
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :a ligar clientes
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :manual
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :script de jogo
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :esperando pela atualização do gráfico de links
############ End of leave-in-this-order
STR_NETWORK_MESSAGE_CLIENT_LEAVING :a sair
STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} entrou no jogo
@ -2504,6 +2517,9 @@ STR_TREES_RANDOM_TYPE :{BLACK}Árvores
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Colocar árvores de tipo aleatório. Shift alterna construir/mostrar custo estimado
STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Plantar aleatoriamente
STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Plantar árvores aleatoriamente no terreno
STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Plante árvores isoladas arrastando-as pela paisagem.
STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Arvoredo
STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Floresta
# Land generation window (SE)
STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Gerar Terreno
@ -2724,6 +2740,7 @@ STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMA
STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} fotograma/s
STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} fotograma/s
STR_FRAMERATE_BYTES_GOOD :{LTBLUE}{BYTES}
STR_FRAMERATE_BYTES_WARN :{YELLOW}{BYTES}
STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms
STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s
############ Leave those lines in this order!!
@ -3360,6 +3377,7 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENC
STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Indústrias
STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Nenhuma -
STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY}
STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} e mais {NUM} ...
STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Nomes de indústrias - clique no nome para centrar-se na indústria. Ctrl+Clique abre um novo visualizador na localização da indústria
# Industry view
@ -3691,6 +3709,7 @@ STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Forçar
# Vehicle view
STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE}
STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK} Centralize a vista principal na localização da aeronave. Um clique duplo seguirá a aeronave na visualização principal. Ctrl + Clique abre uma nova janela de visualização na localização da aeronave
STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Mandar comboio para o depósito
STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Mandar veículo para o depósito
@ -3722,6 +3741,8 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Mostrar
STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Mostrar detalhes do navio
STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Mostrar detalhes da aeronave
STR_VEHICLE_VIEW_TRAIN_STATUS_START_STOP_TOOLTIP :{BLACK}Ação do comboio atual - clique para parar / iniciar o comboio
STR_VEHICLE_VIEW_AIRCRAFT_STATUS_START_STOP_TOOLTIP :{BLACK}Ação atual da aeronave - clique para parar / iniciar a aeronave
# Messages in the start stop button in the vehicle view
@ -4128,6 +4149,8 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Seleccio
STR_AI_LIST_CANCEL :{BLACK}Cancelar
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Não mudar o script
STR_SCREENSHOT_SCREENSHOT :{BLACK}Captura de tela normal
STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Minimap screenshot
# AI Parameters
STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parâmetros
@ -4187,6 +4210,7 @@ STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Jogo gravado nu
STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Impossível ler ficheiro
STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Impossível escrever ficheiro
STR_GAME_SAVELOAD_ERROR_DATA_INTEGRITY_CHECK_FAILED :Falha ao verificar integridade de dados
STR_GAME_SAVELOAD_ERROR_PATCHPACK :Salvar o jogo é feito com uma versão modificada
STR_GAME_SAVELOAD_NOT_AVAILABLE :<indisponível>
STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}O jogo foi salvo numa versão sem suporte para eléctricos. Todos os elétricos foram removidos.

@ -816,6 +816,7 @@ STR_SMALLMAP_LEGENDA_DOCK :{TINY_FONT}{BLA
STR_SMALLMAP_LEGENDA_ROUGH_LAND :{TINY_FONT}{BLACK}Nerovný terén
STR_SMALLMAP_LEGENDA_GRASS_LAND :{TINY_FONT}{BLACK}Trávnatý terén
STR_SMALLMAP_LEGENDA_BARE_LAND :{TINY_FONT}{BLACK}Holý terén
STR_SMALLMAP_LEGENDA_RAINFOREST :{TINY_FONT}{BLACK}Dážďový prales
STR_SMALLMAP_LEGENDA_FIELDS :{TINY_FONT}{BLACK}Polia
STR_SMALLMAP_LEGENDA_TREES :{TINY_FONT}{BLACK}Stromy
STR_SMALLMAP_LEGENDA_ROCKS :{TINY_FONT}{BLACK}Skaly
@ -1518,6 +1519,8 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Zachovať stave
STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Zachovaj okno s nástrojmi na stavbu mostov/tunelov otvorené aj po použití
STR_CONFIG_SETTING_EXPENSES_LAYOUT :Zoskupiť výdavky v okne financií spoločnosti: {STRING}
STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Definujte rozloženie okna s financiami.
STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Automaticky odstraňovať návestidlá pri výstavbe železnice: {STRING}
STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Automaticky odstraňovať návestidla pri výstavbe železnice, ak návestidlá blokujú výstavbu. To však môže niekedy smerovať k zrážke vlakov.
STR_CONFIG_SETTING_SOUND_TICKER :Oznamovač správ: {STRING}
STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Prehrať zvuk pri zhrnutých správach
@ -1902,6 +1905,7 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Ste si
# Cheat window
STR_CHEATS :{WHITE}Cheaty
STR_CHEATS_TOOLTIP :{BLACK}Zaškrtávacie pole indikuje opakované použite cheatu
STR_CHEATS_NOTE :{BLACK}Poznámka: použitie akéhokoľvek z týchto nastavení bude zaznamenané v uloženej hre
STR_CHEAT_MONEY :{LTBLUE}Zvýšiť hotovosť o {CURRENCY_LONG}
STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Hrať za spoločnosť: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magický buldozér (odstráni priemysel a nehnuteľnosti): {ORANGE}{STRING}
@ -2298,6 +2302,7 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} sa
STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} založil novú spoločnosť (č. {2:NUM})
STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} opustil hru ({2:STRING})
STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} zmenil/-a svoje meno na {STRING}
STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} dal {2:CURRENCY_LONG} spoločnosti {1:STRING}
STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Server ukoncil relaciu
STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Server sa reštartuje...{}Čakajte prosím...
STR_NETWORK_MESSAGE_KICKED :*** Hráč {STRING} bol vyhodený. Dôvod: ({STRING})
@ -2417,6 +2422,7 @@ STR_JOIN_WAYPOINT_CAPTION :{WHITE}Spojiť
STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Postaviť smerový bod oddelene
# Generic toolbar
STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE :{BLACK}Vypnuté, pretože v súčasnosti nie sú dostuné žiadne vozidlá pre tento typ infraštruktúry
# Rail construction toolbar
STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Výstavba železnice
@ -2694,6 +2700,7 @@ STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}Vyber pr
# Land area window
STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}Informácie o pozemku
STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu políčka. Ctrl+klik otvorí nové okno s pohľadom na políčko
STR_LAND_AREA_INFORMATION_COST_TO_CLEAR_N_A :{BLACK}Náklady na odstránenie: {LTBLUE}N/A
STR_LAND_AREA_INFORMATION_COST_TO_CLEAR :{BLACK}Náklady na odstránenie: {RED}{CURRENCY_LONG}
STR_LAND_AREA_INFORMATION_REVENUE_WHEN_CLEARED :{BLACK}Zisk pri odstránení: {LTBLUE}{CURRENCY_LONG}
@ -3164,8 +3171,9 @@ STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Brať/ne
# Sign window
STR_EDIT_SIGN_CAPTION :{WHITE}Upraviť text popisu
STR_EDIT_SIGN_NEXT_SIGN_TOOLTIP :{BLACK}Prejst na dalsiu znacku
STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Prejsť na predchádzajúcu značku
STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu popisu. Ctrl+klik otvorí nové okno s pohľadom na popis
STR_EDIT_SIGN_NEXT_SIGN_TOOLTIP :{BLACK}Prejsť na ďalší popis
STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Prejsť na predchádzajúci popis
STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Zadajte názov pre popis
@ -3440,7 +3448,8 @@ STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Premiest
STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Sídlo spoločnosti je možné premiestniť za 1% hodnoty spoločnosti. Shift+klik zobrazí odhadovanú cenu
STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Detaily
STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Zobraziť podrobné políčka infraštruktúry
STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Presuň peniaze do tejto spoločnosti
STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Dať peniaze
STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Presunúť peniaze do tejto spoločnosti
STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Nová tvár
STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Vybrať novú tvár prezidenta
@ -3458,7 +3467,7 @@ STR_COMPANY_VIEW_SELL_SHARE_TOOLTIP :{BLACK}Predať
STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Názov spoločnosti
STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Meno prezidenta
STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Vložte čiastku ktorú chcete dať
STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Zadajte množstvo peňazí, ktoré chcete dať spoločnosti
STR_BUY_COMPANY_MESSAGE :{WHITE}Hľadáme záujemcu o kúpu našej spoločnosti{}{}Chcete kúpiť našu spoločnosť {COMPANY} za {CURRENCY_LONG}?
@ -3819,6 +3828,10 @@ STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Zachovan
# Vehicle view
STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE}
STR_VEHICLE_VIEW_TRAIN_CENTER_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu vlaku. Dvojité kliknutie bude sledovať vlak v hlavnom pohľade. Ctrl+klik otvorí nové okno s pohľadom na vlak
STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu vozidla. Dvojité kliknutie bude sledovať vozidlo v hlavnom pohľade. Ctrl+klik otvorí nové okno s pohľadom na vozidlo
STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu lode. Dvojité kliknutie bude sledovať loď v hlavnom pohľade. Ctrl+klik otvorí nové okno s pohľadom na loď
STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Vycentrovať pohľad na pozíciu lietadla. Dvojité kliknutie bude sledovať lietadlo v hlavnom pohľade. Ctrl+klik otvorí nové okno s pohľadom na lietadlo
STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Poslať vlak do depa. Ctrl+klik iba servis
STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Poslať vozidlo do garáže. Ctrl+klik iba servis.
@ -3855,6 +3868,7 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_STATUS_START_STOP_TOOLTIP :{BLACK}Činnos
STR_VEHICLE_VIEW_SHIP_STATE_STATUS_STOP_TOOLTIP :{BLACK}Činnosť aktuálnej lode - kliknite na zastavenie/spustenie lode
STR_VEHICLE_VIEW_AIRCRAFT_STATUS_START_STOP_TOOLTIP :{BLACK}Činnosť aktuálneho lietadla - kliknite na zastavenie/spustenie lietadla
STR_VEHICLE_VIEW_ORDER_LOCATION_TOOLTIP :{BLACK}Vycentrovať pohľad na cieľovú pozíciu. Ctrl+klik otvorí nové okno s pohľadom na cieľ
# Messages in the start stop button in the vehicle view
STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Nakláda / Vykláda
@ -4082,6 +4096,7 @@ STR_ORDER_REFIT_STOP_ORDER :(Prestavba na {
STR_ORDER_STOP_ORDER :(Zastav)
STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING}
STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Nemožno použiť stanicu){POP_COLOUR} {STRING} {STATION} {STRING}
STR_ORDER_IMPLICIT :(Predpokladané)
@ -4406,7 +4421,8 @@ STR_ERROR_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Nemôže
STR_ERROR_LOAN_ALREADY_REPAYED :{WHITE}... úver už bol splatený
STR_ERROR_CURRENCY_REQUIRED :{WHITE}... {CURRENCY_LONG} potrebuješ
STR_ERROR_CAN_T_REPAY_LOAN :{WHITE}Úver sa nedá splatiť...
STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}Nie je mozne poskytnut peniaze, ktore su pozicane z banky ...
STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}Nie je možné presunúť peniaze, ktoré sú požičané z banky...
STR_ERROR_CAN_T_GIVE_MONEY :{WHITE}Nie je možné presunúť peniaze tejto spoločnosti...
STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Spoločnosť nie je možné kúpiť ...
STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Nemôžeš postaviť sídlo spoločnosti...
STR_ERROR_CAN_T_BUY_25_SHARE_IN_THIS :{WHITE}Nemôžeš kúpiť 25% podiel v tejto spoločnosti...
@ -4533,6 +4549,8 @@ STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Nesprávny typ
STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} je dlho po výmene
STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Neboli využité žiadne pravidlá pre obnovu.
STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(finančný limit)
STR_ERROR_AUTOREPLACE_INCOMPATIBLE_CARGO :{WHITE}Nové vozidlo nemôže prevážať {STRING}
STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}Nové vozidlo nemôže uskutočniť prestavbu v príkaze {NUM}
# Rail construction errors
STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Nemožná kombinácia trate

@ -317,7 +317,7 @@ const char *NetworkGameSocketHandler::ReceiveCommand(Packet *p, CommandPacket *c
cp->company = (CompanyID)p->Recv_uint8();
cp->cmd = p->Recv_uint32();
if (!IsValidCommand(cp->cmd)) return "invalid command";
if (GetCommandFlags(cp->cmd) & CMD_OFFLINE) return "offline only command";
if (GetCommandFlags(cp->cmd) & CMD_OFFLINE) return "single-player only command";
if ((cp->cmd & CMD_FLAGS_MASK) != 0) return "invalid command flag";
cp->p1 = p->Recv_uint32();

@ -345,10 +345,9 @@ protected:
if (r == 0) r = b->info.compatible - a->info.compatible;
/* Passworded servers should be below unpassworded servers */
if (r == 0) r = a->info.use_password - b->info.use_password;
/* Finally sort on the number of clients of the server */
if (r == 0) return NGameClientSorter(a, b);
return r < 0;
/* Finally sort on the number of clients of the server in reverse order. */
return (r != 0) ? r < 0: !NGameClientSorter(a, b);
}
/** Sort the server list */

@ -1317,7 +1317,7 @@ void SwitchToMode(SwitchMode new_mode)
break;
case SM_SAVE_GAME: // Save game.
/* Make network saved games on pause compatible to singleplayer */
/* Make network saved games on pause compatible to singleplayer mode */
if (SaveOrLoad(_file_to_saveload.name, SLO_SAVE, DFT_GAME_FILE, NO_DIRECTORY) != SL_OK) {
SetDParamStr(0, GetSaveLoadErrorString());
ShowErrorMessage(STR_JUST_RAW_STRING, INVALID_STRING_ID, WL_ERROR);

@ -641,7 +641,7 @@ bool AfterLoadGame()
ResetSignalHandlers();
return false;
} else if (!_networking || _network_server) {
/* If we are in single player, i.e. not networking, and loading the
/* If we are in singleplayer mode, i.e. not networking, and loading the
* savegame or we are loading the savegame as network server we do
* not want to be bothered by being paused because of the automatic
* reason of a network server, e.g. joining clients or too few

@ -1427,6 +1427,7 @@ static bool GrowTownWithTunnel(const Town* t, const TileIndex tile, const DiagDi
/* Only tunnel under a mountain if the slope is continuous for at least 4 tiles. We want tunneling to be a last resort for large hills. */
TileIndex slope_tile = tile;
for (uint8 tiles = 0; tiles < 4; tiles++) {
if (!IsValidTile(slope_tile)) return false;
slope = GetTileSlope(slope_tile);
if (slope != InclinedSlope(tunnel_dir) && !IsSteepSlope(slope) && !IsSlopeWithOneCornerRaised(slope)) return false;
slope_tile += delta;

@ -3696,13 +3696,16 @@ public:
/* Draw the flag plus orders. */
bool rtl = (_current_text_dir == TD_RTL);
uint text_offset = std::max(GetSpriteSize(SPR_FLAG_VEH_STOPPED).width, GetSpriteSize(SPR_FLAG_VEH_RUNNING).width) + WD_IMGBTN_LEFT + WD_IMGBTN_RIGHT;
int height = r.bottom - r.top;
int text_left = r.left + (rtl ? (uint)WD_FRAMERECT_LEFT : text_offset);
int text_right = r.right - (rtl ? text_offset : (uint)WD_FRAMERECT_RIGHT);
int image_left = (rtl ? text_right + 1 : r.left) + WD_IMGBTN_LEFT;
int text_top = r.top + WD_FRAMERECT_TOP + (height - WD_FRAMERECT_TOP - WD_FRAMERECT_BOTTOM - FONT_HEIGHT_NORMAL) / 2;
int image = ((v->vehstatus & VS_STOPPED) != 0) ? SPR_FLAG_VEH_STOPPED : SPR_FLAG_VEH_RUNNING;
int image_left = (rtl ? text_right + 1 : r.left) + WD_IMGBTN_LEFT;
int image_top = r.top + WD_IMGBTN_TOP + (height - WD_IMGBTN_TOP + WD_IMGBTN_BOTTOM - GetSpriteSize(image).height) / 2;
int lowered = this->IsWidgetLowered(WID_VV_START_STOP) ? 1 : 0;
DrawSprite(image, PAL_NONE, image_left + lowered, r.top + WD_IMGBTN_TOP + lowered);
DrawString(text_left + lowered, text_right + lowered, r.top + WD_FRAMERECT_TOP + lowered, str, text_colour, SA_HOR_CENTER);
DrawSprite(image, PAL_NONE, image_left + lowered, image_top + lowered);
DrawString(text_left + lowered, text_right + lowered, text_top + lowered, str, text_colour, SA_HOR_CENTER);
}
void OnClick(Point pt, int widget, int click_count) override

@ -7,8 +7,6 @@
/** @file sdl2_v.cpp Implementation of the SDL2 video driver. */
#ifdef WITH_SDL2
#include "../stdafx.h"
#include "../openttd.h"
#include "../gfx_func.h"
@ -52,7 +50,8 @@ static FVideoDriver_SDL iFVideoDriver_SDL;
static SDL_Window *_sdl_window;
static SDL_Surface *_sdl_surface;
static SDL_Surface *_sdl_realscreen;
static SDL_Surface *_sdl_rgb_surface;
static SDL_Surface *_sdl_real_surface;
/** Whether the drawing is/may be done in a separate thread. */
static bool _draw_threaded;
@ -287,7 +286,7 @@ void VideoDriver_SDL::MakeDirty(int left, int top, int width, int height)
_num_dirty_rects++;
}
static void UpdatePalette(bool init = false)
static void UpdatePalette()
{
SDL_Color pal[256];
@ -300,8 +299,19 @@ static void UpdatePalette(bool init = false)
SDL_SetPaletteColors(_sdl_palette, pal, _local_palette.first_dirty, _local_palette.count_dirty);
SDL_SetSurfacePalette(_sdl_surface, _sdl_palette);
}
static void MakePalette()
{
if (_sdl_palette == nullptr) {
_sdl_palette = SDL_AllocPalette(256);
if (_sdl_palette == nullptr) usererror("SDL2: Couldn't allocate palette: %s", SDL_GetError());
}
_local_palette = _cur_palette;
UpdatePalette();
if (_sdl_surface != _sdl_realscreen && init) {
if (_sdl_surface != _sdl_real_surface) {
/* When using a shadow surface, also set our palette on the real screen. This lets SDL
* allocate as many colors (or approximations) as
* possible, instead of using only the default SDL
@ -322,35 +332,24 @@ static void UpdatePalette(bool init = false)
* palette change and the blitting below, so we only set
* the real palette during initialisation.
*/
SDL_SetSurfacePalette(_sdl_realscreen, _sdl_palette);
}
if (_sdl_surface != _sdl_realscreen && !init) {
/* We're not using real hardware palette, but are letting SDL
* approximate the palette during shadow -> screen copy. To
* change the palette, we need to recopy the entire screen.
*
* Note that this operation can slow down the rendering
* considerably, especially since changing the shadow
* palette will need the next blit to re-detect the
* best mapping of shadow palette colors to real palette
* colors from scratch.
*/
SDL_BlitSurface(_sdl_surface, nullptr, _sdl_realscreen, nullptr);
SDL_UpdateWindowSurface(_sdl_window);
SDL_SetSurfacePalette(_sdl_real_surface, _sdl_palette);
}
}
static void InitPalette()
void VideoDriver_SDL::CheckPaletteAnim()
{
if (_cur_palette.count_dirty == 0) return;
_local_palette = _cur_palette;
_local_palette.first_dirty = 0;
_local_palette.count_dirty = 256;
UpdatePalette(true);
this->MakeDirty(0, 0, _screen.width, _screen.height);
}
static void CheckPaletteAnim()
static void DrawSurfaceToScreen()
{
PerformanceMeasurer framerate(PFE_VIDEO);
if (_num_dirty_rects == 0) return;
if (_cur_palette.count_dirty != 0) {
Blitter *blitter = BlitterFactory::GetCurrentBlitter();
@ -371,11 +370,6 @@ static void CheckPaletteAnim()
}
_cur_palette.count_dirty = 0;
}
}
static void DrawSurfaceToScreen()
{
PerformanceMeasurer framerate(PFE_VIDEO);
int n = _num_dirty_rects;
if (n == 0) return;
@ -394,15 +388,15 @@ static void DrawSurfaceToScreen()
}
if (update_whole_screen) {
if (_sdl_surface != _sdl_realscreen) {
SDL_BlitSurface(_sdl_surface, nullptr, _sdl_realscreen, nullptr);
if (_sdl_surface != _sdl_real_surface) {
SDL_BlitSurface(_sdl_surface, nullptr, _sdl_real_surface, nullptr);
}
SDL_UpdateWindowSurface(_sdl_window);
} else {
if (_sdl_surface != _sdl_realscreen) {
for (int i = 0; i < n; i++) {
SDL_BlitSurface(_sdl_surface, &_dirty_rects[i], _sdl_realscreen, &_dirty_rects[i]);
if (_sdl_surface != _sdl_real_surface) {
for (int i = 0; i < _num_dirty_rects; i++) {
SDL_BlitSurface(_sdl_surface, &_dirty_rects[i], _sdl_real_surface, &_dirty_rects[i]);
}
}
SDL_Rect update_rect = { _sdl_surface->w, _sdl_surface->h, 0, 0 };
@ -417,6 +411,8 @@ static void DrawSurfaceToScreen()
SDL_UpdateWindowSurfaceRects(_sdl_window, &update_rect, 1);
}
_num_dirty_rects = 0;
}
static void DrawSurfaceToScreenThread()
@ -429,33 +425,44 @@ static void DrawSurfaceToScreenThread()
_draw_signal->wait(*_draw_mutex);
while (_draw_continue) {
CheckPaletteAnim();
/* Then just draw and wait till we stop */
DrawSurfaceToScreen();
_draw_signal->wait(lock);
}
}
static void GetVideoModes()
{
int modes = SDL_GetNumDisplayModes(0);
if (modes == 0) usererror("sdl: no modes available");
static const Dimension default_resolutions[] = {
{ 640, 480 },
{ 800, 600 },
{ 1024, 768 },
{ 1152, 864 },
{ 1280, 800 },
{ 1280, 960 },
{ 1280, 1024 },
{ 1400, 1050 },
{ 1600, 1200 },
{ 1680, 1050 },
{ 1920, 1200 }
};
static void FindResolutions()
{
_resolutions.clear();
SDL_DisplayMode mode;
for (int i = 0; i < modes; i++) {
for (int i = 0; i < SDL_GetNumDisplayModes(0); i++) {
SDL_DisplayMode mode;
SDL_GetDisplayMode(0, i, &mode);
uint w = mode.w;
uint h = mode.h;
if (w < 640 || h < 480) continue; // reject too small resolutions
if (mode.w < 640 || mode.h < 480) continue;
if (std::find(_resolutions.begin(), _resolutions.end(), Dimension(mode.w, mode.h)) != _resolutions.end()) continue;
_resolutions.emplace_back(mode.w, mode.h);
}
if (std::find(_resolutions.begin(), _resolutions.end(), Dimension(w, h)) != _resolutions.end()) continue;
_resolutions.emplace_back(w, h);
/* We have found no resolutions, show the default list */
if (_resolutions.empty()) {
_resolutions.assign(std::begin(default_resolutions), std::end(default_resolutions));
}
if (_resolutions.empty()) usererror("No usable screen resolutions found!\n");
SortResolutions();
}
@ -481,109 +488,127 @@ static void GetAvailableVideoMode(uint *w, uint *h)
*h = _resolutions[best].height;
}
bool VideoDriver_SDL::CreateMainSurface(uint w, uint h, bool resize)
static uint FindStartupDisplay(uint startup_display)
{
SDL_Surface *newscreen;
char caption[50];
int bpp = BlitterFactory::GetCurrentBlitter()->GetScreenDepth();
int num_displays = SDL_GetNumVideoDisplays();
GetAvailableVideoMode(&w, &h);
/* If the user indicated a valid monitor, use that. */
if (IsInsideBS(startup_display, 0, num_displays)) return startup_display;
DEBUG(driver, 1, "SDL2: using mode %ux%ux%d", w, h, bpp);
/* Mouse position decides which display to use. */
int mx, my;
SDL_GetGlobalMouseState(&mx, &my);
for (int display = 0; display < num_displays; ++display) {
SDL_Rect r;
if (SDL_GetDisplayBounds(display, &r) == 0 && IsInsideBS(mx, r.x, r.w) && IsInsideBS(my, r.y, r.h)) {
DEBUG(driver, 1, "SDL2: Mouse is at (%d, %d), use display %d (%d, %d, %d, %d)", mx, my, display, r.x, r.y, r.w, r.h);
return display;
}
}
return 0;
}
bool VideoDriver_SDL::CreateMainWindow(uint w, uint h)
{
if (_sdl_window != nullptr) return true;
Uint32 flags = SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE;
if (_fullscreen) {
flags |= SDL_WINDOW_FULLSCREEN;
}
/* Free any previously allocated shadow surface */
if (_sdl_surface != nullptr && _sdl_surface != _sdl_realscreen) SDL_FreeSurface(_sdl_surface);
int x = SDL_WINDOWPOS_UNDEFINED, y = SDL_WINDOWPOS_UNDEFINED;
SDL_Rect r;
if (SDL_GetDisplayBounds(this->startup_display, &r) == 0) {
x = r.x + std::max(0, r.w - static_cast<int>(w)) / 2;
y = r.y + std::max(0, r.h - static_cast<int>(h)) / 4; // decent desktops have taskbars at the bottom
}
char caption[50];
seprintf(caption, lastof(caption), "OpenTTD %s", _openttd_revision);
_sdl_window = SDL_CreateWindow(
caption,
x, y,
w, h,
flags);
if (_sdl_window == nullptr) {
Uint32 flags = SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE;
DEBUG(driver, 0, "SDL2: Couldn't allocate a window to draw on: %s", SDL_GetError());
return false;
}
if (_fullscreen) {
flags |= SDL_WINDOW_FULLSCREEN;
std::string icon_path = FioFindFullPath(BASESET_DIR, "openttd.32.bmp");
if (!icon_path.empty()) {
/* Give the application an icon */
SDL_Surface *icon = SDL_LoadBMP(icon_path.c_str());
if (icon != nullptr) {
/* Get the colourkey, which will be magenta */
uint32 rgbmap = SDL_MapRGB(icon->format, 255, 0, 255);
SDL_SetColorKey(icon, SDL_TRUE, rgbmap);
SDL_SetWindowIcon(_sdl_window, icon);
SDL_FreeSurface(icon);
}
}
int x = SDL_WINDOWPOS_UNDEFINED, y = SDL_WINDOWPOS_UNDEFINED;
SDL_Rect r;
if (SDL_GetDisplayBounds(this->startup_display, &r) == 0) {
x = r.x + std::max(0, r.w - static_cast<int>(w)) / 2;
y = r.y + std::max(0, r.h - static_cast<int>(h)) / 4; // decent desktops have taskbars at the bottom
}
_sdl_window = SDL_CreateWindow(
caption,
x, y,
w, h,
flags);
if (_sdl_window == nullptr) {
DEBUG(driver, 0, "SDL2: Couldn't allocate a window to draw on");
return false;
}
return true;
}
std::string icon_path = FioFindFullPath(BASESET_DIR, "openttd.32.bmp");
if (!icon_path.empty()) {
/* Give the application an icon */
SDL_Surface *icon = SDL_LoadBMP(icon_path.c_str());
if (icon != nullptr) {
/* Get the colourkey, which will be magenta */
uint32 rgbmap = SDL_MapRGB(icon->format, 255, 0, 255);
SDL_SetColorKey(icon, SDL_TRUE, rgbmap);
SDL_SetWindowIcon(_sdl_window, icon);
SDL_FreeSurface(icon);
}
}
}
bool VideoDriver_SDL::CreateMainSurface(uint w, uint h, bool resize)
{
int bpp = BlitterFactory::GetCurrentBlitter()->GetScreenDepth();
GetAvailableVideoMode(&w, &h);
DEBUG(driver, 1, "SDL2: using mode %ux%ux%d", w, h, bpp);
if (!this->CreateMainWindow(w, h)) return false;
if (resize) SDL_SetWindowSize(_sdl_window, w, h);
newscreen = SDL_GetWindowSurface(_sdl_window);
if (newscreen == NULL) {
_sdl_real_surface = SDL_GetWindowSurface(_sdl_window);
if (_sdl_real_surface == nullptr) {
DEBUG(driver, 0, "SDL2: Couldn't get window surface: %s", SDL_GetError());
return false;
}
_sdl_realscreen = newscreen;
/* Free any previously allocated rgb surface. */
if (_sdl_rgb_surface != nullptr) {
SDL_FreeSurface(_sdl_rgb_surface);
_sdl_rgb_surface = nullptr;
}
if (bpp == 8) {
newscreen = SDL_CreateRGBSurface(0, w, h, 8, 0, 0, 0, 0);
_sdl_rgb_surface = SDL_CreateRGBSurface(0, w, h, 8, 0, 0, 0, 0);
if (newscreen == nullptr) {
if (_sdl_rgb_surface == nullptr) {
DEBUG(driver, 0, "SDL2: Couldn't allocate shadow surface: %s", SDL_GetError());
return false;
}
}
if (_sdl_palette == nullptr) {
_sdl_palette = SDL_AllocPalette(256);
}
if (_sdl_palette == nullptr) {
DEBUG(driver, 0, "SDL_AllocPalette() failed: %s", SDL_GetError());
return false;
_sdl_surface = _sdl_rgb_surface;
} else {
_sdl_surface = _sdl_real_surface;
}
/* Delay drawing for this cycle; the next cycle will redraw the whole screen */
_num_dirty_rects = 0;
_screen.width = newscreen->w;
_screen.height = newscreen->h;
_screen.pitch = newscreen->pitch / (bpp / 8);
_screen.dst_ptr = newscreen->pixels;
_sdl_surface = newscreen;
_screen.width = _sdl_surface->w;
_screen.height = _sdl_surface->h;
_screen.pitch = _sdl_surface->pitch / (bpp / 8);
_screen.dst_ptr = _sdl_surface->pixels;
MakePalette();
/* When in full screen, we will always have the mouse cursor
* within the window, even though SDL does not give us the
* appropriate event to know this. */
if (_fullscreen) _cursor.in_window = true;
Blitter *blitter = BlitterFactory::GetCurrentBlitter();
blitter->PostResize();
InitPalette();
BlitterFactory::GetCurrentBlitter()->PostResize();
GameSizeChanged();
return true;
}
@ -957,7 +982,7 @@ int VideoDriver_SDL::PollEvent()
case SDL_WINDOWEVENT: {
if (ev.window.event == SDL_WINDOWEVENT_EXPOSED) {
// Force a redraw of the entire screen.
_num_dirty_rects = MAX_DIRTY_RECTS + 1;
this->MakeDirty(0, 0, _screen.width, _screen.height);
} else if (ev.window.event == SDL_WINDOWEVENT_SIZE_CHANGED) {
int w = std::max(ev.window.data1, 64);
int h = std::max(ev.window.data2, 64);
@ -1021,26 +1046,12 @@ const char *VideoDriver_SDL::Start(const StringList &parm)
}
if (ret_code < 0) return SDL_GetError();
this->startup_display = GetDriverParamInt(parm, "display", -1);
int num_displays = SDL_GetNumVideoDisplays();
if (!IsInsideBS(this->startup_display, 0, num_displays)) {
/* Mouse position decides which display to use */
int mx, my;
SDL_GetGlobalMouseState(&mx, &my);
this->startup_display = 0; // used when mouse is on no screen...
for (int display = 0; display < num_displays; ++display) {
SDL_Rect r;
if (SDL_GetDisplayBounds(display, &r) == 0 && IsInsideBS(mx, r.x, r.w) && IsInsideBS(my, r.y, r.h)) {
DEBUG(driver, 1, "SDL2: Mouse is at (%d, %d), use display %d (%d, %d, %d, %d)", mx, my, display, r.x, r.y, r.w, r.h);
this->startup_display = display;
break;
}
}
}
this->UpdateAutoResolution();
GetVideoModes();
FindResolutions();
this->startup_display = FindStartupDisplay(GetDriverParamInt(parm, "display", -1));
if (!CreateMainSurface(_cur_resolution.width, _cur_resolution.height, false)) {
return SDL_GetError();
}
@ -1144,7 +1155,7 @@ void VideoDriver_SDL::LoopOnce()
GameLoopPaletteAnimations();
UpdateWindows();
_local_palette = _cur_palette;
this->CheckPaletteAnim();
} else {
/* Release the thread while sleeping */
if (_draw_mutex != nullptr) {
@ -1168,7 +1179,6 @@ void VideoDriver_SDL::LoopOnce()
_draw_signal->notify_one();
} else {
/* Oh, we didn't have threads, then just draw unthreaded */
CheckPaletteAnim();
DrawSurfaceToScreen();
}
}
@ -1179,7 +1189,7 @@ void VideoDriver_SDL::MainLoop()
last_cur_ticks = cur_ticks;
next_tick = cur_ticks + MILLISECONDS_PER_TICK;
CheckPaletteAnim();
this->CheckPaletteAnim();
if (_draw_threaded) {
/* Initialise the mutex first, because that's the thing we *need*
@ -1315,5 +1325,3 @@ Dimension VideoDriver_SDL::GetScreenSize() const
return { static_cast<uint>(mode.w), static_cast<uint>(mode.h) };
}
#endif /* WITH_SDL2 */

@ -49,6 +49,8 @@ private:
void LoopOnce();
void MainLoopCleanup();
bool CreateMainSurface(uint w, uint h, bool resize);
bool CreateMainWindow(uint w, uint h);
void CheckPaletteAnim();
#ifdef __EMSCRIPTEN__
/* Convert a constant pointer back to a non-constant pointer to a member function. */

Loading…
Cancel
Save